From 21b6ffc86a5367c286057153fbb8244d90c0144a Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 2 Jul 2024 08:52:28 -0600 Subject: [PATCH 0001/1027] vault backup: 2024-07-02 08:52:28 --- notes/Copy-and-Patch Compilation.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/notes/Copy-and-Patch Compilation.md b/notes/Copy-and-Patch Compilation.md index a5f10b6..4ca12d5 100644 --- a/notes/Copy-and-Patch Compilation.md +++ b/notes/Copy-and-Patch Compilation.md @@ -20,7 +20,7 @@ At a broad level, copy and patch code compilation works by having a pre-built li First, prior to compilation, MetaVar generates a stencil library. -That stencil library is used as input for a +That stencil library is used as input for a copy and patch code generator. The code ## MetaVar MetaVar generates binary stencils, which allows the user to systematically generate the binary stencil variants in clean and pure C++, and leverages the Clang + LLVM compiler infrastructure to hide all platform-specific low-level detail. From 20c06e7211c7063c9567e644c053686f7a7e4e3d Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 2 Jul 2024 08:57:28 -0600 Subject: [PATCH 0002/1027] vault backup: 2024-07-02 08:57:28 --- notes/Copy-and-Patch Compilation.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/notes/Copy-and-Patch Compilation.md b/notes/Copy-and-Patch Compilation.md index 4ca12d5..9460292 100644 --- a/notes/Copy-and-Patch Compilation.md +++ b/notes/Copy-and-Patch Compilation.md @@ -20,7 +20,7 @@ At a broad level, copy and patch code compilation works by having a pre-built li First, prior to compilation, MetaVar generates a stencil library. -That stencil library is used as input for a copy and patch code generator. The code +That stencil library is used as input for a copy and patch code generator, alongside a bytecode sequence or AST node. In the copy step, stencils are copied from the stencil library that implement the bytecode/AST node. In the patch step, pre-determined places in the binary code are ## MetaVar MetaVar generates binary stencils, which allows the user to systematically generate the binary stencil variants in clean and pure C++, and leverages the Clang + LLVM compiler infrastructure to hide all platform-specific low-level detail. From 159c4aee2311668c440e5142fc0a5ea05ffcb3a5 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 2 Jul 2024 09:02:28 -0600 Subject: [PATCH 0003/1027] vault backup: 2024-07-02 09:02:28 --- notes/Copy-and-Patch Compilation.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/notes/Copy-and-Patch Compilation.md b/notes/Copy-and-Patch Compilation.md index 9460292..4d5d00d 100644 --- a/notes/Copy-and-Patch Compilation.md +++ b/notes/Copy-and-Patch Compilation.md @@ -20,12 +20,15 @@ At a broad level, copy and patch code compilation works by having a pre-built li First, prior to compilation, MetaVar generates a stencil library. -That stencil library is used as input for a copy and patch code generator, alongside a bytecode sequence or AST node. In the copy step, stencils are copied from the stencil library that implement the bytecode/AST node. In the patch step, pre-determined places in the binary code are +That stencil library is used as input for a copy and patch code generator, alongside a bytecode sequence or AST node. In the copy step, stencils are copied from the stencil library that implement the bytecode/AST node. In the patch step, pre-determined places in the binary code (Operands of machine instructions, jump addresses, the values of constants). + +Even though machine code is patched, a copy and patch compiler doesn't need to have knowledge of platform specific machine instructions, and is portable across architectures supported by the patch library. + ## MetaVar MetaVar generates binary stencils, which allows the user to systematically generate the binary stencil variants in clean and pure C++, and leverages the Clang + LLVM compiler infrastructure to hide all platform-specific low-level detail. -The MetaVar compiler generates binary stencils of different optimization levels for every bytecode or AST node. +MetaVar can generate binary stencils of different optimization levels for every bytecode or AST node, which the generator can select from at generation time. # Terminology | Phrase | Definition | From fe241812e719928aeba903d66b9454267762e637 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 2 Jul 2024 09:07:28 -0600 Subject: [PATCH 0004/1027] vault backup: 2024-07-02 09:07:28 --- notes/Copy-and-Patch Compilation.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/notes/Copy-and-Patch Compilation.md b/notes/Copy-and-Patch Compilation.md index 4d5d00d..319403e 100644 --- a/notes/Copy-and-Patch Compilation.md +++ b/notes/Copy-and-Patch Compilation.md @@ -28,7 +28,7 @@ Even though machine code is patched, a copy and patch compiler doesn't need to h MetaVar generates binary stencils, which allows the user to systematically generate the binary stencil variants in clean and pure C++, and leverages the Clang + LLVM compiler infrastructure to hide all platform-specific low-level detail. -MetaVar can generate binary stencils of different optimization levels for every bytecode or AST node, which the generator can select from at generation time. +MetaVar can generate binary stencils of different optimization levels for every bytecode or AST node, which the generator can select from at generation time. As am example, if the instruction is for adding a constant to a literal, the generator can select from addition implementations for the most optimized variant. It can also make register allocation decisions by keeping track of # Terminology | Phrase | Definition | From 8fe8a94393481b4d8bc837eb373a75ccb4df26dc Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 2 Jul 2024 09:12:28 -0600 Subject: [PATCH 0005/1027] vault backup: 2024-07-02 09:12:28 --- notes/Copy-and-Patch Compilation.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/notes/Copy-and-Patch Compilation.md b/notes/Copy-and-Patch Compilation.md index 319403e..573a81d 100644 --- a/notes/Copy-and-Patch Compilation.md +++ b/notes/Copy-and-Patch Compilation.md @@ -28,7 +28,7 @@ Even though machine code is patched, a copy and patch compiler doesn't need to h MetaVar generates binary stencils, which allows the user to systematically generate the binary stencil variants in clean and pure C++, and leverages the Clang + LLVM compiler infrastructure to hide all platform-specific low-level detail. -MetaVar can generate binary stencils of different optimization levels for every bytecode or AST node, which the generator can select from at generation time. As am example, if the instruction is for adding a constant to a literal, the generator can select from addition implementations for the most optimized variant. It can also make register allocation decisions by keeping track of +MetaVar can generate binary stencils of different optimization levels for every bytecode or AST node, which the generator can select from at generation time. As am example, if the instruction is for adding a constant to a literal, the generator can select from addition implementations for the most optimized variant. It can also make register allocation decisions by keeping track of register availability and picking between stack instructions and register instructions. # Terminology | Phrase | Definition | From 9f04bf4e847a169ef4d2dce454c804bd8da76570 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 2 Jul 2024 09:32:52 -0600 Subject: [PATCH 0006/1027] vault backup: 2024-07-02 09:32:52 --- notes/Copy-and-Patch Compilation.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/notes/Copy-and-Patch Compilation.md b/notes/Copy-and-Patch Compilation.md index 573a81d..b5b5a7a 100644 --- a/notes/Copy-and-Patch Compilation.md +++ b/notes/Copy-and-Patch Compilation.md @@ -16,7 +16,7 @@ One proposed use case of copy-and-patch compilation in the paper is as an SQL qu > The compilation time of our compiler is so low that it is less than the time it takes to construct the AST of the program. Compared with interpreters, both have negligible startup delay (since constructing ASTs takes longer), but our execution performance is an order of magnitude faster. Compared with LLVM -O0, our implementation compiles two orders of magnitude faster and generates code that performs on average 14% better. Therefore, we conclude that copy-and-patch renders both interpreters and LLVM -O0 compilation obsolete in this use case. # Implementation Details -At a broad level, copy and patch code compilation works by having a pre-built library of composable binary code snippets, referred to as binary stencils. This makes both code generation and optimization a simple task, achieved simply by performing a lookup in a data table to select the stencil, then copying it to the output and patching in the missing values. +At a broad level, copy and patch code compilation works by having a pre-built library of composable binary code snippets, referred to as binary stencils. Each binary stencil performs the operation of a single AST node/bytecode instruction. This makes both code generation and optimization a simple task, achieved simply by performing a lookup in a data table to select the stencil, then copying it to the output and patching in the missing values. First, prior to compilation, MetaVar generates a stencil library. From 1d55b2a660530c354730fc6ce95568d6423fd93e Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 2 Jul 2024 10:11:07 -0600 Subject: [PATCH 0007/1027] vault backup: 2024-07-02 10:11:07 --- notes/Copy-and-Patch Compilation.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/notes/Copy-and-Patch Compilation.md b/notes/Copy-and-Patch Compilation.md index b5b5a7a..4894055 100644 --- a/notes/Copy-and-Patch Compilation.md +++ b/notes/Copy-and-Patch Compilation.md @@ -24,6 +24,8 @@ That stencil library is used as input for a copy and patch code generator, along Even though machine code is patched, a copy and patch compiler doesn't need to have knowledge of platform specific machine instructions, and is portable across architectures supported by the patch library. + + ## MetaVar MetaVar generates binary stencils, which allows the user to systematically generate the binary stencil variants in clean and pure C++, and leverages the Clang + LLVM compiler infrastructure to hide all platform-specific low-level detail. From 6c8695d2c7451796ba9a3d820fd2973da7d5ae1d Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 3 Jul 2024 11:03:25 -0600 Subject: [PATCH 0008/1027] vault backup: 2024-07-03 11:03:24 --- notes/Copy-and-Patch Compilation.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/notes/Copy-and-Patch Compilation.md b/notes/Copy-and-Patch Compilation.md index 4894055..16b113c 100644 --- a/notes/Copy-and-Patch Compilation.md +++ b/notes/Copy-and-Patch Compilation.md @@ -24,14 +24,17 @@ That stencil library is used as input for a copy and patch code generator, along Even though machine code is patched, a copy and patch compiler doesn't need to have knowledge of platform specific machine instructions, and is portable across architectures supported by the patch library. - - ## MetaVar +### Overview MetaVar generates binary stencils, which allows the user to systematically generate the binary stencil variants in clean and pure C++, and leverages the Clang + LLVM compiler infrastructure to hide all platform-specific low-level detail. MetaVar can generate binary stencils of different optimization levels for every bytecode or AST node, which the generator can select from at generation time. As am example, if the instruction is for adding a constant to a literal, the generator can select from addition implementations for the most optimized variant. It can also make register allocation decisions by keeping track of register availability and picking between stack instructions and register instructions. +### Interface +MetaVar constructs the stencil library + + # Terminology | Phrase | Definition | | ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | From 2df68085644a5c6ac868b74b26dc4c9dd292d344 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 3 Jul 2024 11:08:24 -0600 Subject: [PATCH 0009/1027] vault backup: 2024-07-03 11:08:24 --- notes/Copy-and-Patch Compilation.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/notes/Copy-and-Patch Compilation.md b/notes/Copy-and-Patch Compilation.md index 16b113c..e825bd4 100644 --- a/notes/Copy-and-Patch Compilation.md +++ b/notes/Copy-and-Patch Compilation.md @@ -31,8 +31,12 @@ Clang + LLVM compiler infrastructure to hide all platform-specific low-level det MetaVar can generate binary stencils of different optimization levels for every bytecode or AST node, which the generator can select from at generation time. As am example, if the instruction is for adding a constant to a literal, the generator can select from addition implementations for the most optimized variant. It can also make register allocation decisions by keeping track of register availability and picking between stack instructions and register instructions. -### Interface -MetaVar constructs the stencil library +### Stencil Library Construction +MetaVar constructs the stencil library from programmer defined *stencil generators*. One stencil generator is defined for every AST node using C++ template meta-variables to express variants, and special macros to express missing values to be patched at runtime. + +At compile time, the compiler iterates over the values of the meta-variables and creates a library entry for every valid combination. + +### # Terminology From ea0039f4c8a508fe446441bf14a4562101af9c2a Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 3 Jul 2024 11:13:25 -0600 Subject: [PATCH 0010/1027] vault backup: 2024-07-03 11:13:25 --- notes/Copy-and-Patch Compilation.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/notes/Copy-and-Patch Compilation.md b/notes/Copy-and-Patch Compilation.md index e825bd4..e4f52e0 100644 --- a/notes/Copy-and-Patch Compilation.md +++ b/notes/Copy-and-Patch Compilation.md @@ -36,7 +36,8 @@ MetaVar constructs the stencil library from programmer defined *stencil generato At compile time, the compiler iterates over the values of the meta-variables and creates a library entry for every valid combination. -### +### Stencil Generators +Stencil generators are templated C++ functions whose template instantiations produce stencils. # Terminology From 5ebf5cc75b0a0b3e44c4ab67711e9d84c19c6180 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 3 Jul 2024 11:33:25 -0600 Subject: [PATCH 0011/1027] vault backup: 2024-07-03 11:33:24 --- notes/Copy-and-Patch Compilation.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/notes/Copy-and-Patch Compilation.md b/notes/Copy-and-Patch Compilation.md index e4f52e0..d835968 100644 --- a/notes/Copy-and-Patch Compilation.md +++ b/notes/Copy-and-Patch Compilation.md @@ -36,8 +36,8 @@ MetaVar constructs the stencil library from programmer defined *stencil generato At compile time, the compiler iterates over the values of the meta-variables and creates a library entry for every valid combination. -### Stencil Generators -Stencil generators are templated C++ functions whose template instantiations produce stencils. +### Compile time +Stencil generators are templated C++ functions whose template instantiations produce stencils. At "runtime", the generator will perform tree pattern matching to determine the correct variant, then complete a hash table lookup to retrieve the stencil, then copy it to the output. # Terminology From 4768f9eaa9633d253fbaad67a36be5ddca554dec Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 3 Jul 2024 11:43:25 -0600 Subject: [PATCH 0012/1027] vault backup: 2024-07-03 11:43:25 --- notes/Copy-and-Patch Compilation.md | 1 + 1 file changed, 1 insertion(+) diff --git a/notes/Copy-and-Patch Compilation.md b/notes/Copy-and-Patch Compilation.md index d835968..2e7aba1 100644 --- a/notes/Copy-and-Patch Compilation.md +++ b/notes/Copy-and-Patch Compilation.md @@ -15,6 +15,7 @@ One proposed use case of copy-and-patch compilation in the paper is as an SQL qu (Halfway through Page 3): > The compilation time of our compiler is so low that it is less than the time it takes to construct the AST of the program. Compared with interpreters, both have negligible startup delay (since constructing ASTs takes longer), but our execution performance is an order of magnitude faster. Compared with LLVM -O0, our implementation compiles two orders of magnitude faster and generates code that performs on average 14% better. Therefore, we conclude that copy-and-patch renders both interpreters and LLVM -O0 compilation obsolete in this use case. + # Implementation Details At a broad level, copy and patch code compilation works by having a pre-built library of composable binary code snippets, referred to as binary stencils. Each binary stencil performs the operation of a single AST node/bytecode instruction. This makes both code generation and optimization a simple task, achieved simply by performing a lookup in a data table to select the stencil, then copying it to the output and patching in the missing values. From 814c3c53ee10ac1abb71adb89856fc4a33147ac0 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 3 Jul 2024 12:20:17 -0600 Subject: [PATCH 0013/1027] vault backup: 2024-07-03 12:20:17 --- software/gamedev/Gadot.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 software/gamedev/Gadot.md diff --git a/software/gamedev/Gadot.md b/software/gamedev/Gadot.md new file mode 100644 index 0000000..e69de29 From 6e422a01e4616ae41908351ae3655465df9fd8c1 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 3 Jul 2024 12:30:17 -0600 Subject: [PATCH 0014/1027] vault backup: 2024-07-03 12:30:17 --- software/gamedev/Gadot.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/software/gamedev/Gadot.md b/software/gamedev/Gadot.md index e69de29..94efcf7 100644 --- a/software/gamedev/Gadot.md +++ b/software/gamedev/Gadot.md @@ -0,0 +1,10 @@ +# Architecture overview +In Gadot, a game is a tree of nodes, that you group together into *scenes*. You can wire those nodes together so that they communicate using *signals*. + +# Scenes +Scenes are extremely broad, a scene can be a character, a weapon, a menu, a house, or even an entire level. + +# Nodes +A scene is composed of one or more nodes. NO + +https://docs.godotengine.org/en/stable/getting_started/introduction/key_concepts_overview.html \ No newline at end of file From 2b8239520d2002f225f57302d9e1e2647cd16aa7 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 3 Jul 2024 12:49:17 -0600 Subject: [PATCH 0015/1027] vault backup: 2024-07-03 12:49:17 --- software/gamedev/Gadot.md | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/software/gamedev/Gadot.md b/software/gamedev/Gadot.md index 94efcf7..1b24a5e 100644 --- a/software/gamedev/Gadot.md +++ b/software/gamedev/Gadot.md @@ -1,10 +1,4 @@ -# Architecture overview -In Gadot, a game is a tree of nodes, that you group together into *scenes*. You can wire those nodes together so that they communicate using *signals*. +# C\# -# Scenes -Scenes are extremely broad, a scene can be a character, a weapon, a menu, a house, or even an entire level. +Configuring VSC for Gadot C# - -# Nodes -A scene is composed of one or more nodes. NO - -https://docs.godotengine.org/en/stable/getting_started/introduction/key_concepts_overview.html \ No newline at end of file From 2ae11dd07fccf406953647006ea1b7339e3ee9c0 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Fri, 5 Jul 2024 10:05:23 -0600 Subject: [PATCH 0016/1027] vault backup: 2024-07-05 10:05:23 --- personal/mental health/Untitled.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 personal/mental health/Untitled.md diff --git a/personal/mental health/Untitled.md b/personal/mental health/Untitled.md new file mode 100644 index 0000000..e69de29 From 8bf7fe0bf9ef80f72bb1c9c14835da56c2c62618 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Fri, 5 Jul 2024 10:10:23 -0600 Subject: [PATCH 0017/1027] vault backup: 2024-07-05 10:10:23 --- personal/mental health/Untitled.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/personal/mental health/Untitled.md b/personal/mental health/Untitled.md index e69de29..9434db4 100644 --- a/personal/mental health/Untitled.md +++ b/personal/mental health/Untitled.md @@ -0,0 +1,7 @@ +Rather than just saying "Get over it", you need to *process* things. You will need to go through moments of frustration, anger, and confusion as you process stuff. + +A lot of things are outside of our control. Do not confuse what's within your control, and what's outside of your control. + +# The circles of control + +Imagine 3 \ No newline at end of file From 95ddba1aa0fef0d9838c2c60c68aac49c089c78f Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Fri, 5 Jul 2024 10:15:23 -0600 Subject: [PATCH 0018/1027] vault backup: 2024-07-05 10:15:23 --- personal/mental health/Untitled.md | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/personal/mental health/Untitled.md b/personal/mental health/Untitled.md index 9434db4..fcb75d3 100644 --- a/personal/mental health/Untitled.md +++ b/personal/mental health/Untitled.md @@ -4,4 +4,13 @@ A lot of things are outside of our control. Do not confuse what's within your co # The circles of control -Imagine 3 \ No newline at end of file +Imagine 3 concentric circles +- The circle of concern (outermost) + - Things like the weather, geopolitics, traffic, natural disasters, war + - These are things that can affect us, but there's nothing we can do as an individual to change them, so we need to learn to adapt. +- The circle of influence (middle circle) + - Friends, family, job. + - Things that are immediate to us, where we have some level of influence. The things you do and say can have an impact. You have influence, you don't have *control.* +- The circle of control (inner circle) + - Me + - How are you showing up to situations, how are you responding to certain situations. You can't control your thoughts or the types of thoughts, but you can control how much power those thoughts and feelings have over you. \ No newline at end of file From c069460982ec953bc690a0454c96b6d0a8615956 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Fri, 5 Jul 2024 10:20:23 -0600 Subject: [PATCH 0019/1027] vault backup: 2024-07-05 10:20:23 --- personal/mental health/Untitled.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/personal/mental health/Untitled.md b/personal/mental health/Untitled.md index fcb75d3..d3c43e0 100644 --- a/personal/mental health/Untitled.md +++ b/personal/mental health/Untitled.md @@ -13,4 +13,8 @@ Imagine 3 concentric circles - Things that are immediate to us, where we have some level of influence. The things you do and say can have an impact. You have influence, you don't have *control.* - The circle of control (inner circle) - Me - - How are you showing up to situations, how are you responding to certain situations. You can't control your thoughts or the types of thoughts, but you can control how much power those thoughts and feelings have over you. \ No newline at end of file + - How are you showing up to situations, how are you responding to certain situations. You can't control your thoughts or the types of thoughts, but you can control how much power those thoughts and feelings have over you. + +When you mix up what happens in each of the circles, it can lead to anger and resentment. It's ok to feel hurt and confused and frustrated by the things that other people do within the two way street of the circle of influence. + +One way that we build trust in a relationship is by taking accountability for our actions. By making mistakes, it provides a chance for you to take accountability for our mistakes. \ No newline at end of file From 267ca7e6b0d832cdf51d0407fdd65a95b257d95b Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Fri, 5 Jul 2024 10:25:23 -0600 Subject: [PATCH 0020/1027] vault backup: 2024-07-05 10:25:23 --- personal/mental health/Untitled.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/personal/mental health/Untitled.md b/personal/mental health/Untitled.md index d3c43e0..57c566a 100644 --- a/personal/mental health/Untitled.md +++ b/personal/mental health/Untitled.md @@ -17,4 +17,7 @@ Imagine 3 concentric circles When you mix up what happens in each of the circles, it can lead to anger and resentment. It's ok to feel hurt and confused and frustrated by the things that other people do within the two way street of the circle of influence. -One way that we build trust in a relationship is by taking accountability for our actions. By making mistakes, it provides a chance for you to take accountability for our mistakes. \ No newline at end of file +One way that we build trust in a relationship is by taking accountability for our actions. By making mistakes, it provides a chance for you to take accountability for our mistakes. + +It's hard as human beings to recognize just how much we don't have control over. + From 7bd19cec0125f8c06007aa1e92462e652138881f Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Fri, 5 Jul 2024 11:05:23 -0600 Subject: [PATCH 0021/1027] vault backup: 2024-07-05 11:05:23 --- personal/mental health/Relationships.md | 23 ++++++++++++++++++++++- personal/mental health/Untitled.md | 23 ----------------------- 2 files changed, 22 insertions(+), 24 deletions(-) diff --git a/personal/mental health/Relationships.md b/personal/mental health/Relationships.md index 6fb0eff..b271e94 100644 --- a/personal/mental health/Relationships.md +++ b/personal/mental health/Relationships.md @@ -55,6 +55,26 @@ Creating change in the relationships around you will usually be uncomfortable. T Going against the status quo is difficult, but the outcome can often times be good. It will require pushing into discomfort. +# The Circles of Control +A lot of things are outside of our control. Do not confuse what's within your control, and what's outside of your control. + +Imagine 3 concentric circles +- The circle of concern (outermost) + - Things like the weather, geopolitics, traffic, natural disasters, war + - These are things that can affect us, but there's nothing we can do as an individual to change them, so we need to learn to adapt. +- The circle of influence (middle circle) + - Friends, family, job. + - Things that are immediate to us, where we have some level of influence. The things you do and say can have an impact. You have influence, you don't have *control.* This is a two way road, other people can influence you, and you can influence them. +- The circle of control (inner circle) + - yourself, your actions. + - How are you showing up to situations, how are you responding to certain situations. You can't control your thoughts or the types of thoughts, but you can control how much power those thoughts and feelings have over you. + +When you mix up what happens in each of the circles, it can lead to anger and resentment. It's ok to feel hurt and confused and frustrated by the things that other people do within the two way street of the circle of influence. + +One way that we build trust in a relationship is by taking accountability for our actions. By making mistakes, it provides a chance for you to take accountability for our mistakes. + +It's hard as human beings to recognize just how much we don't have control over. + # Books (Therapist recommended) @@ -63,4 +83,5 @@ Recommended authors: Recommended books: - Hold Me Tight - Sue Johnson -- The New Co-Dependency - Melody Beattie \ No newline at end of file +- The New Co-Dependency - Melody Beattie +- Crucial Conversations \ No newline at end of file diff --git a/personal/mental health/Untitled.md b/personal/mental health/Untitled.md index 57c566a..e69de29 100644 --- a/personal/mental health/Untitled.md +++ b/personal/mental health/Untitled.md @@ -1,23 +0,0 @@ -Rather than just saying "Get over it", you need to *process* things. You will need to go through moments of frustration, anger, and confusion as you process stuff. - -A lot of things are outside of our control. Do not confuse what's within your control, and what's outside of your control. - -# The circles of control - -Imagine 3 concentric circles -- The circle of concern (outermost) - - Things like the weather, geopolitics, traffic, natural disasters, war - - These are things that can affect us, but there's nothing we can do as an individual to change them, so we need to learn to adapt. -- The circle of influence (middle circle) - - Friends, family, job. - - Things that are immediate to us, where we have some level of influence. The things you do and say can have an impact. You have influence, you don't have *control.* -- The circle of control (inner circle) - - Me - - How are you showing up to situations, how are you responding to certain situations. You can't control your thoughts or the types of thoughts, but you can control how much power those thoughts and feelings have over you. - -When you mix up what happens in each of the circles, it can lead to anger and resentment. It's ok to feel hurt and confused and frustrated by the things that other people do within the two way street of the circle of influence. - -One way that we build trust in a relationship is by taking accountability for our actions. By making mistakes, it provides a chance for you to take accountability for our mistakes. - -It's hard as human beings to recognize just how much we don't have control over. - From 42b471276b72e8bb7e6d8bff3ab95f6ec682fe35 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Fri, 5 Jul 2024 11:10:23 -0600 Subject: [PATCH 0022/1027] vault backup: 2024-07-05 11:10:23 --- .obsidian/plugins/obsidian-git/data.json | 2 +- .stfolder/syncthing-folder-60ab5b.txt | 5 +++++ personal/mental health/Untitled.md | 0 3 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 .stfolder/syncthing-folder-60ab5b.txt delete mode 100644 personal/mental health/Untitled.md diff --git a/.obsidian/plugins/obsidian-git/data.json b/.obsidian/plugins/obsidian-git/data.json index 4bc189e..bef4c6e 100644 --- a/.obsidian/plugins/obsidian-git/data.json +++ b/.obsidian/plugins/obsidian-git/data.json @@ -5,7 +5,7 @@ "autoSaveInterval": 5, "autoPushInterval": 0, "autoPullInterval": 5, - "autoPullOnBoot": false, + "autoPullOnBoot": true, "disablePush": false, "pullBeforePush": true, "disablePopups": false, diff --git a/.stfolder/syncthing-folder-60ab5b.txt b/.stfolder/syncthing-folder-60ab5b.txt new file mode 100644 index 0000000..cfbd34a --- /dev/null +++ b/.stfolder/syncthing-folder-60ab5b.txt @@ -0,0 +1,5 @@ +# This directory is a Syncthing folder marker. +# Do not delete. + +folderID: 4zejs-emdah +created: 2024-07-05T11:09:26-06:00 diff --git a/personal/mental health/Untitled.md b/personal/mental health/Untitled.md deleted file mode 100644 index e69de29..0000000 From acdc8a9940216b57903af29b593e0f08f8024766 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Fri, 5 Jul 2024 11:40:23 -0600 Subject: [PATCH 0023/1027] vault backup: 2024-07-05 11:40:23 --- .stfolder/syncthing-folder-60ab5b.txt | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 .stfolder/syncthing-folder-60ab5b.txt diff --git a/.stfolder/syncthing-folder-60ab5b.txt b/.stfolder/syncthing-folder-60ab5b.txt deleted file mode 100644 index cfbd34a..0000000 --- a/.stfolder/syncthing-folder-60ab5b.txt +++ /dev/null @@ -1,5 +0,0 @@ -# This directory is a Syncthing folder marker. -# Do not delete. - -folderID: 4zejs-emdah -created: 2024-07-05T11:09:26-06:00 From 256a618882d68e4de4687041eda1174649e36d9a Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Fri, 5 Jul 2024 11:45:23 -0600 Subject: [PATCH 0024/1027] vault backup: 2024-07-05 11:45:23 --- .stfolder/syncthing-folder-5e8747.txt | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .stfolder/syncthing-folder-5e8747.txt diff --git a/.stfolder/syncthing-folder-5e8747.txt b/.stfolder/syncthing-folder-5e8747.txt new file mode 100644 index 0000000..721ef08 --- /dev/null +++ b/.stfolder/syncthing-folder-5e8747.txt @@ -0,0 +1,5 @@ +# This directory is a Syncthing folder marker. +# Do not delete. + +folderID: lpro7-6ejs3 +created: 2024-07-05T11:40:35-06:00 From 608bfa6a2be167fd9b4017b46e177cf650e47e27 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Fri, 5 Jul 2024 11:55:23 -0600 Subject: [PATCH 0025/1027] vault backup: 2024-07-05 11:55:23 --- .../Configuring hairpin NAT on a Mikrotik router.md | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 IT/Deployment docs/Configuring hairpin NAT on a Mikrotik router.md diff --git a/IT/Deployment docs/Configuring hairpin NAT on a Mikrotik router.md b/IT/Deployment docs/Configuring hairpin NAT on a Mikrotik router.md new file mode 100644 index 0000000..4adcdf2 --- /dev/null +++ b/IT/Deployment docs/Configuring hairpin NAT on a Mikrotik router.md @@ -0,0 +1,8 @@ +Hairpin NAT enables a device on the LAN to access another device on the LAN via the public IP + +https://help.mikrotik.com/docs/display/ROS/NAT#NAT-HairpinNAT + +From the RouterOS CLI, enter NAT configuration mode: +``` +/ip firewall nat +``` From 16424c04b00b1120cbb260106cec2f3caa521714 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Fri, 5 Jul 2024 12:00:23 -0600 Subject: [PATCH 0026/1027] vault backup: 2024-07-05 12:00:23 --- .../Configuring hairpin NAT on a Mikrotik router.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/IT/Deployment docs/Configuring hairpin NAT on a Mikrotik router.md b/IT/Deployment docs/Configuring hairpin NAT on a Mikrotik router.md index 4adcdf2..48e5c57 100644 --- a/IT/Deployment docs/Configuring hairpin NAT on a Mikrotik router.md +++ b/IT/Deployment docs/Configuring hairpin NAT on a Mikrotik router.md @@ -6,3 +6,7 @@ From the RouterOS CLI, enter NAT configuration mode: ``` /ip firewall nat ``` + +Configure NAT to forward any traffic from the LAN net that's directed at the WAN IP to forward that traffic back to the the server in question (You can only forward to a single IP): +``` +``` \ No newline at end of file From 89f5369a3c8e233945437746ed0d8343398f917c Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Fri, 5 Jul 2024 12:05:23 -0600 Subject: [PATCH 0027/1027] vault backup: 2024-07-05 12:05:23 --- .../Configuring hairpin NAT on a Mikrotik router.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/IT/Deployment docs/Configuring hairpin NAT on a Mikrotik router.md b/IT/Deployment docs/Configuring hairpin NAT on a Mikrotik router.md index 48e5c57..56a0df4 100644 --- a/IT/Deployment docs/Configuring hairpin NAT on a Mikrotik router.md +++ b/IT/Deployment docs/Configuring hairpin NAT on a Mikrotik router.md @@ -9,4 +9,6 @@ From the RouterOS CLI, enter NAT configuration mode: Configure NAT to forward any traffic from the LAN net that's directed at the WAN IP to forward that traffic back to the the server in question (You can only forward to a single IP): ``` -``` \ No newline at end of file + +``` +I first tried `add` `action``=masquerade` `chain``=srcnat` `dst-address``=10.0.0.3` `out-interface``=LAN` `protocol``=tcp` `src-address``=10.0.0.0/24`|` \ No newline at end of file From 0f69e9e85469f77676cfffb6d10f7cb895daa962 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Fri, 5 Jul 2024 12:10:23 -0600 Subject: [PATCH 0028/1027] vault backup: 2024-07-05 12:10:23 --- .../Configuring hairpin NAT on a Mikrotik router.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/IT/Deployment docs/Configuring hairpin NAT on a Mikrotik router.md b/IT/Deployment docs/Configuring hairpin NAT on a Mikrotik router.md index 56a0df4..1937aef 100644 --- a/IT/Deployment docs/Configuring hairpin NAT on a Mikrotik router.md +++ b/IT/Deployment docs/Configuring hairpin NAT on a Mikrotik router.md @@ -11,4 +11,7 @@ Configure NAT to forward any traffic from the LAN net that's directed at the WAN ``` ``` -I first tried `add` `action``=masquerade` `chain``=srcnat` `dst-address``=10.0.0.3` `out-interface``=LAN` `protocol``=tcp` `src-address``=10.0.0.0/24`|` \ No newline at end of file +I first tried `add action=masquerade chain=srcnat dst-address=192.168.0.6 out-interface=LAN protoco ol=tcp src-address=192.168.0.0/24`, but was getting the error `input does not match any value of interface`. + +Following the advice from , I changed `out-interface` to `out-interface-list`, and the command completed without any errors. + From 526ecb8f03a712d6ca24189c9eb15d7824b31d65 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Fri, 12 Jul 2024 10:13:06 -0600 Subject: [PATCH 0029/1027] vault backup: 2024-07-12 10:13:06 --- personal/mental health/Cognitive behavior triangle.md | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 personal/mental health/Cognitive behavior triangle.md diff --git a/personal/mental health/Cognitive behavior triangle.md b/personal/mental health/Cognitive behavior triangle.md new file mode 100644 index 0000000..a3cdcf4 --- /dev/null +++ b/personal/mental health/Cognitive behavior triangle.md @@ -0,0 +1,11 @@ +Thoughts influence our feelings. + +The connection between thoughts, emotions, and behaviors. + +ABC CBT worksheet. + +A. Activating Event +B. How did I feel, what did I do +C. + +You can say a feeling in one word, but if it starts turning into a phrase or sentence, it's probably a thought. From 8a76025d3b3fa8d3c6ef01bf47c7d0f226ba1d64 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Fri, 12 Jul 2024 10:18:06 -0600 Subject: [PATCH 0030/1027] vault backup: 2024-07-12 10:18:06 --- personal/mental health/Cognitive behavior triangle.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/personal/mental health/Cognitive behavior triangle.md b/personal/mental health/Cognitive behavior triangle.md index a3cdcf4..61f763a 100644 --- a/personal/mental health/Cognitive behavior triangle.md +++ b/personal/mental health/Cognitive behavior triangle.md @@ -9,3 +9,8 @@ B. How did I feel, what did I do C. You can say a feeling in one word, but if it starts turning into a phrase or sentence, it's probably a thought. + +The levels of responsibility: +1. The unforseeable -> No way to predict it would happen -> Grief/sadness +2. Responsibility -> Played a role in the event, but didn't intend the outcome -> Regret +3. Fault/blameworthiness -> Intended harm; intended the outcome -> Guilt From ad8523d537b83eefb2292bb114162e819325f10d Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Fri, 12 Jul 2024 10:58:06 -0600 Subject: [PATCH 0031/1027] vault backup: 2024-07-12 10:58:06 --- personal/mental health/Cognitive behavior triangle.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/personal/mental health/Cognitive behavior triangle.md b/personal/mental health/Cognitive behavior triangle.md index 61f763a..f89b3ed 100644 --- a/personal/mental health/Cognitive behavior triangle.md +++ b/personal/mental health/Cognitive behavior triangle.md @@ -14,3 +14,8 @@ The levels of responsibility: 1. The unforseeable -> No way to predict it would happen -> Grief/sadness 2. Responsibility -> Played a role in the event, but didn't intend the outcome -> Regret 3. Fault/blameworthiness -> Intended harm; intended the outcome -> Guilt + +# The ABC Worksheet +1. Activating event: "*Something happens*" + - What was the thing that happened +2. Believe/Stuck point \ No newline at end of file From 8db727bb6dcaad732183f25390f3d159212494f5 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sat, 13 Jul 2024 22:40:57 -0600 Subject: [PATCH 0032/1027] vault backup: 2024-07-13 22:40:57 --- .../Cognitive behavior triangle.md | 25 ++++++++++--------- 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/personal/mental health/Cognitive behavior triangle.md b/personal/mental health/Cognitive behavior triangle.md index f89b3ed..3ffa9d9 100644 --- a/personal/mental health/Cognitive behavior triangle.md +++ b/personal/mental health/Cognitive behavior triangle.md @@ -1,21 +1,22 @@ -Thoughts influence our feelings. - -The connection between thoughts, emotions, and behaviors. - -ABC CBT worksheet. - -A. Activating Event -B. How did I feel, what did I do -C. - +# Differentiating between thoughts and feelings You can say a feeling in one word, but if it starts turning into a phrase or sentence, it's probably a thought. +As a way to understand if you The levels of responsibility: -1. The unforseeable -> No way to predict it would happen -> Grief/sadness +1. The unforeseeable -> No way to predict it would happen -> Grief/sadness 2. Responsibility -> Played a role in the event, but didn't intend the outcome -> Regret 3. Fault/blameworthiness -> Intended harm; intended the outcome -> Guilt # The ABC Worksheet 1. Activating event: "*Something happens*" - What was the thing that happened -2. Believe/Stuck point \ No newline at end of file +2. Believe/Stuck point: "*I tell myself something*" + - What did you tell yourself because of the thing that happened? +3. Consequence: "*I feel something*" + - How did the things you told yourself make you feel? + +Are your thoughts from #2 helpful or realistic? + +What are some things you could say to yourself instead that are more helpful or realistic? + + From 9fb2d6fed66cfd471dd73f17d1fb827eadcd9eb5 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sat, 13 Jul 2024 22:45:57 -0600 Subject: [PATCH 0033/1027] vault backup: 2024-07-13 22:45:57 --- personal/mental health/Cognitive behavior triangle.md | 4 +++- personal/mental health/Control.md | 0 2 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 personal/mental health/Control.md diff --git a/personal/mental health/Cognitive behavior triangle.md b/personal/mental health/Cognitive behavior triangle.md index 3ffa9d9..a4d5a26 100644 --- a/personal/mental health/Cognitive behavior triangle.md +++ b/personal/mental health/Cognitive behavior triangle.md @@ -1,7 +1,9 @@ # Differentiating between thoughts and feelings You can say a feeling in one word, but if it starts turning into a phrase or sentence, it's probably a thought. -As a way to understand if you +## Levels of responsibility +As a way to understand the chain of effect from an event to the feelings it evokes, you can consider the level of responsibility you had. If you notice that the level of responsibility you had in the event doesn't line up with the feelings you're having, you may be placing a greater level of responsibility on yourself than there actually is. + The levels of responsibility: 1. The unforeseeable -> No way to predict it would happen -> Grief/sadness 2. Responsibility -> Played a role in the event, but didn't intend the outcome -> Regret diff --git a/personal/mental health/Control.md b/personal/mental health/Control.md new file mode 100644 index 0000000..e69de29 From 5e93cccfbea964999f5ab6f9dcf0a0ee0f36a4e8 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sat, 13 Jul 2024 22:50:57 -0600 Subject: [PATCH 0034/1027] vault backup: 2024-07-13 22:50:57 --- personal/mental health/Cognitive behavior triangle.md | 4 ++++ personal/mental health/Control.md | 0 personal/mental health/Relationships.md | 9 ++++++--- 3 files changed, 10 insertions(+), 3 deletions(-) delete mode 100644 personal/mental health/Control.md diff --git a/personal/mental health/Cognitive behavior triangle.md b/personal/mental health/Cognitive behavior triangle.md index a4d5a26..69be67c 100644 --- a/personal/mental health/Cognitive behavior triangle.md +++ b/personal/mental health/Cognitive behavior triangle.md @@ -22,3 +22,7 @@ Are your thoughts from #2 helpful or realistic? What are some things you could say to yourself instead that are more helpful or realistic? +# Books +(Therapist recommended) + +Don't Feed the Monkey Mind - Jennifer Shannon \ No newline at end of file diff --git a/personal/mental health/Control.md b/personal/mental health/Control.md deleted file mode 100644 index e69de29..0000000 diff --git a/personal/mental health/Relationships.md b/personal/mental health/Relationships.md index b271e94..4076f60 100644 --- a/personal/mental health/Relationships.md +++ b/personal/mental health/Relationships.md @@ -56,16 +56,18 @@ Creating change in the relationships around you will usually be uncomfortable. T Going against the status quo is difficult, but the outcome can often times be good. It will require pushing into discomfort. # The Circles of Control +One important aspect of mental health is understanding the level of control and influence you have on the people around you. This isn't necessarily about being a controlling individual, it also encompasses the broader aspects of every relationship you make with people. + A lot of things are outside of our control. Do not confuse what's within your control, and what's outside of your control. Imagine 3 concentric circles -- The circle of concern (outermost) +- *The circle of concern* (outermost) - Things like the weather, geopolitics, traffic, natural disasters, war - These are things that can affect us, but there's nothing we can do as an individual to change them, so we need to learn to adapt. -- The circle of influence (middle circle) +- *The circle of influence* (middle circle) - Friends, family, job. - Things that are immediate to us, where we have some level of influence. The things you do and say can have an impact. You have influence, you don't have *control.* This is a two way road, other people can influence you, and you can influence them. -- The circle of control (inner circle) +- *The circle of control* (inner circle) - yourself, your actions. - How are you showing up to situations, how are you responding to certain situations. You can't control your thoughts or the types of thoughts, but you can control how much power those thoughts and feelings have over you. @@ -75,6 +77,7 @@ One way that we build trust in a relationship is by taking accountability for ou It's hard as human beings to recognize just how much we don't have control over. +If you self identify as a responsible person, it can lead to you beginning to take responsibility for other people's thoughts and feelings. This is common among anxious people. You can be *over-responsible*. Thinking we can change other people can lead to burnout. The over-responsible mindset calls for people to bend over backwards. # Books (Therapist recommended) From f0ca8b565393787a844b5c4d8dc0f61538f59cef Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sat, 13 Jul 2024 22:55:57 -0600 Subject: [PATCH 0035/1027] vault backup: 2024-07-13 22:55:57 --- personal/mental health/Relationships.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/personal/mental health/Relationships.md b/personal/mental health/Relationships.md index 4076f60..47c57b5 100644 --- a/personal/mental health/Relationships.md +++ b/personal/mental health/Relationships.md @@ -7,6 +7,12 @@ If you consider your relationships with the people around you as a set of concen To grow closer to people, it takes time, slowly opening up and building trust. +# The R.A.M Model +The Relationship Attachment Model was developed as a way to understand how relationships should grow to become a healthy, stable relationship. + +The broad premise looks somewhat like this: +1. **Know**: You should know someone above all else, and knowing them should come first. +2. (()) # Codependency vs Interdependency In an *interdependent relationship*, both people can be independent, healthy, human beings. @@ -77,7 +83,7 @@ One way that we build trust in a relationship is by taking accountability for ou It's hard as human beings to recognize just how much we don't have control over. -If you self identify as a responsible person, it can lead to you beginning to take responsibility for other people's thoughts and feelings. This is common among anxious people. You can be *over-responsible*. Thinking we can change other people can lead to burnout. The over-responsible mindset calls for people to bend over backwards. +If you self identify as a responsible person, it can lead to you beginning to take responsibility for other people's thoughts and feelings. This is common among anxious people. You can be *over-responsible*. Thinking we can change other people can lead to burnout. The over-responsible mindset calls for people to bend over backwards. Remember to understand that other people are autonomous individuals, and their thoughts, feelings, and actions are not your responsibility. Don't let your perception of your *circle of control* expand beyond what it actually contains. # Books (Therapist recommended) From 81882fadc37ecf20a145d2733a7c4f7d883c7307 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sat, 13 Jul 2024 23:00:57 -0600 Subject: [PATCH 0036/1027] vault backup: 2024-07-13 23:00:57 --- personal/mental health/Cognitive behavior triangle.md | 4 +++- personal/mental health/Relationships.md | 5 ++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/personal/mental health/Cognitive behavior triangle.md b/personal/mental health/Cognitive behavior triangle.md index 69be67c..d794e95 100644 --- a/personal/mental health/Cognitive behavior triangle.md +++ b/personal/mental health/Cognitive behavior triangle.md @@ -9,7 +9,9 @@ The levels of responsibility: 2. Responsibility -> Played a role in the event, but didn't intend the outcome -> Regret 3. Fault/blameworthiness -> Intended harm; intended the outcome -> Guilt -# The ABC Worksheet +# The ABC Model +The ABC model is a way to break the processing of feelings down into discrete steps. It involves identifying an activating event, the belief that stems from that event, and the feelings that stem from that belief. + 1. Activating event: "*Something happens*" - What was the thing that happened 2. Believe/Stuck point: "*I tell myself something*" diff --git a/personal/mental health/Relationships.md b/personal/mental health/Relationships.md index 47c57b5..e9605e5 100644 --- a/personal/mental health/Relationships.md +++ b/personal/mental health/Relationships.md @@ -12,7 +12,10 @@ The Relationship Attachment Model was developed as a way to understand how relat The broad premise looks somewhat like this: 1. **Know**: You should know someone above all else, and knowing them should come first. -2. (()) +2. **Trust**: After you know them, you can begin to trust them, but you should never trust someone more than you understand them. +3. **Rely**: After trust is developed, you can begin to understand and meet each other's needs. You should not rely on someone more than you trust them. +4. **Commit**: You should not commit to a relationship more than you're willing to let the other person rely on you. +5. **Touch**: To build a deep relationship with an individual, physical intimacy should not be put before commitment, trust, or anything above. # Codependency vs Interdependency In an *interdependent relationship*, both people can be independent, healthy, human beings. From 6c4d80b2a25032a97fecdc2be1d76441ce3b1a3e Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sat, 13 Jul 2024 23:05:57 -0600 Subject: [PATCH 0037/1027] vault backup: 2024-07-13 23:05:57 --- personal/mental health/Mindfulness.md | 4 ++++ personal/mental health/Relationships.md | 3 ++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/personal/mental health/Mindfulness.md b/personal/mental health/Mindfulness.md index 41a056a..6cdc888 100644 --- a/personal/mental health/Mindfulness.md +++ b/personal/mental health/Mindfulness.md @@ -4,7 +4,11 @@ Rather than self identifying with thoughts or feelings, and saying "I'm feeling One way to visualize this is by thinking of your state of being as a chessboard. The thoughts and feelings are moving on that chessboard, and you are aware of them, but the chessboard is separate, and it is not +It's important to understand that thoughts are not always accurate, and thoughts are not always reliable. Especially when emotionally charged, the *limbic system* in your brain can activate, and make your thoughts + In life, we don't want to operate out of fear. When we are fearful, we don't make the best decisions, especially long term decisions. + + # Exercises ## A.C.E (Dropping anchor) This exercise is a form of Acceptance and Commitment Therapy (ACT). It's useful for handling difficult thoughts, feelings, emotions, memories, urges, and sensations more effectively. It can help engage in life, grounding you in difficult situations. It can be used to disrupt rumination, obsession, or worrying, and it will help you engage in the task or activity on hand. diff --git a/personal/mental health/Relationships.md b/personal/mental health/Relationships.md index e9605e5..7f70a24 100644 --- a/personal/mental health/Relationships.md +++ b/personal/mental health/Relationships.md @@ -15,7 +15,8 @@ The broad premise looks somewhat like this: 2. **Trust**: After you know them, you can begin to trust them, but you should never trust someone more than you understand them. 3. **Rely**: After trust is developed, you can begin to understand and meet each other's needs. You should not rely on someone more than you trust them. 4. **Commit**: You should not commit to a relationship more than you're willing to let the other person rely on you. -5. **Touch**: To build a deep relationship with an individual, physical intimacy should not be put before commitment, trust, or anything above. +5. **Touch**: To build a deep relationship with an individual, physical intimacy should not be put before commitment, trust, or anything above. This does not mean that those things are a requirement for physical intimacy to take place, but it does mean they should be taken into consideration if you are trying to develop a deeper relationship with an individual. + # Codependency vs Interdependency In an *interdependent relationship*, both people can be independent, healthy, human beings. From 3233ac1f3609724808c4bf4102afcf0470cc4837 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sat, 13 Jul 2024 23:10:57 -0600 Subject: [PATCH 0038/1027] vault backup: 2024-07-13 23:10:57 --- personal/mental health/Mindfulness.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/personal/mental health/Mindfulness.md b/personal/mental health/Mindfulness.md index 6cdc888..f18853d 100644 --- a/personal/mental health/Mindfulness.md +++ b/personal/mental health/Mindfulness.md @@ -4,7 +4,7 @@ Rather than self identifying with thoughts or feelings, and saying "I'm feeling One way to visualize this is by thinking of your state of being as a chessboard. The thoughts and feelings are moving on that chessboard, and you are aware of them, but the chessboard is separate, and it is not -It's important to understand that thoughts are not always accurate, and thoughts are not always reliable. Especially when emotionally charged, the *limbic system* in your brain can activate, and make your thoughts +It's important to understand that thoughts are not always accurate, and thoughts are not always reliable. In life, we don't want to operate out of fear. When we are fearful, we don't make the best decisions, especially long term decisions. From f7184b19beae560b8a4f7cf18834490a707f68e9 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sat, 13 Jul 2024 23:15:57 -0600 Subject: [PATCH 0039/1027] vault backup: 2024-07-13 23:15:57 --- personal/mental health/Mindfulness.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/personal/mental health/Mindfulness.md b/personal/mental health/Mindfulness.md index f18853d..de61737 100644 --- a/personal/mental health/Mindfulness.md +++ b/personal/mental health/Mindfulness.md @@ -2,9 +2,9 @@ Mindfulness is the practice of being aware of one's internal state, and being co Rather than self identifying with thoughts or feelings, and saying "I'm feeling ...", or "I'm thinking ..", you can begin to create a level of separation and control by instead saying "I'm noticing the thought of" ..., or "I'm noticing the feeling of ..." -One way to visualize this is by thinking of your state of being as a chessboard. The thoughts and feelings are moving on that chessboard, and you are aware of them, but the chessboard is separate, and it is not +One way to visualize this is by thinking of your state of being as a chessboard. The thoughts and feelings are moving on that chessboard, and you are aware of them, but the chessboard is separate, and it is not you. -It's important to understand that thoughts are not always accurate, and thoughts are not always reliable. +It's important to understand that thoughts are not always accurate, and thoughts are not always reliable. When emotionally charged, the limbic system in your brain activates, resulting in irrational thoughts, which in turn can lead to irrational behaviors. Being mindful and recognizing when your thoughts and feelings may not be rooted in rationality is an essential part of healthy self regulation. In life, we don't want to operate out of fear. When we are fearful, we don't make the best decisions, especially long term decisions. From 741c7933efff0c285d0da8246b604a6e2ed5e034 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 17 Jul 2024 07:47:22 -0600 Subject: [PATCH 0040/1027] vault backup: 2024-07-17 07:47:22 --- personal/mental health/Grounding Techniques.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 personal/mental health/Grounding Techniques.md diff --git a/personal/mental health/Grounding Techniques.md b/personal/mental health/Grounding Techniques.md new file mode 100644 index 0000000..4d2708b --- /dev/null +++ b/personal/mental health/Grounding Techniques.md @@ -0,0 +1,4 @@ +## Body Awareness +This exercise will bring you into the "here and now" by directing your focus to sensations in the body. Pay special attention to the physical sensations created by each step. + +1. Take 5 long, de \ No newline at end of file From 5601d0b8363b8469ffdd50a0ba80f0b312898247 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 17 Jul 2024 07:51:07 -0600 Subject: [PATCH 0041/1027] vault backup: 2024-07-17 07:51:07 --- personal/mental health/Grounding Techniques.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/personal/mental health/Grounding Techniques.md b/personal/mental health/Grounding Techniques.md index 4d2708b..0314796 100644 --- a/personal/mental health/Grounding Techniques.md +++ b/personal/mental health/Grounding Techniques.md @@ -1,4 +1,10 @@ ## Body Awareness This exercise will bring you into the "here and now" by directing your focus to sensations in the body. Pay special attention to the physical sensations created by each step. -1. Take 5 long, de \ No newline at end of file +1. Take 5 long, deep breaths through your nose, and exhale through puckered lips. +2. Place both feet flat on the floor. Wiggle your toes. Curl and uncurl your toes several times. Spend a moment noticing the sensations in your feet. +3. Stomp your feet on the ground several times. Pay attention to the sensations in your feet and legs as you make contact with the ground. +4. Clench your hands into fists, then release the tension. Repeat this 10 times. +5. Press your palms together. Press them harder and hold this pose for 15 seconds. Pay attention to the feeling of tension in your hands and arms. +6. Rub your palms together briskly. Notice the sound and the feeling of warmth. +7. Reach your hands over your head like you're trying to reach the sky. Stretch like this or 5 seconds. Bring your arms down and let them relax at the sides of your body. \ No newline at end of file From d79857be371d47d1797b05dec82fd07d621411c7 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 17 Jul 2024 07:56:07 -0600 Subject: [PATCH 0042/1027] vault backup: 2024-07-17 07:56:07 --- .../mental health/Grounding Techniques.md | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/personal/mental health/Grounding Techniques.md b/personal/mental health/Grounding Techniques.md index 0314796..dd3861c 100644 --- a/personal/mental health/Grounding Techniques.md +++ b/personal/mental health/Grounding Techniques.md @@ -1,3 +1,8 @@ +After trauma, it's normal to experience flashbacks, anxiety, and other uncomfortable symptoms. **Grounding techniques** help control these symptoms by turning attention away from thoughts, memories, or worries, and refocusing on the present moment. + +## 5-4-3-2-1 Technique +Using the 5-4-3-2-1 technique, you will purposefully take in the details of your surroundings using each of your senses. Strive to notice small details that your mind would usually tune out, such as distant sounds, or the texture of an ordinary object. + ## Body Awareness This exercise will bring you into the "here and now" by directing your focus to sensations in the body. Pay special attention to the physical sensations created by each step. @@ -7,4 +12,16 @@ This exercise will bring you into the "here and now" by directing your focus to 4. Clench your hands into fists, then release the tension. Repeat this 10 times. 5. Press your palms together. Press them harder and hold this pose for 15 seconds. Pay attention to the feeling of tension in your hands and arms. 6. Rub your palms together briskly. Notice the sound and the feeling of warmth. -7. Reach your hands over your head like you're trying to reach the sky. Stretch like this or 5 seconds. Bring your arms down and let them relax at the sides of your body. \ No newline at end of file +7. Reach your hands over your head like you're trying to reach the sky. Stretch like this or 5 seconds. Bring your arms down and let them relax at the sides of your body. +8. Take 5 or more *deep* breaths and notice the feeling of calm in your body. + +## Mental Exercises +Use mental exercises to take your mind off uncomfortable thoughts and feelings. They are discreet and easy to use at nearly any time or place. Experiment with what works best for you. +- Name all the objects you see. +- Describe the steps in performing an activity you know how to do well. For example, how to shoot a basketball, prepare your favorite meal, or tie a knot. +- Count backwards from 100 by 7. +- Pick up an object and describe it in detail. Describe its color, texture, size, weight, scent, and any other qualities you notice. +- Spell your full name and the names of 3 other people, backwards. +- Name all your family members, their ages, and one of their favorite activities. +- Read something backwards, letter-by-letter. Practice for at least a few minutes. +- Think of an object and "draw" it in your mind, or in the air with your finger. Try drawing your home, a vehicle, or an animal. From b4f1a799c6f1066b6bfae13ecb5be41eeb6cae78 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 17 Jul 2024 08:01:07 -0600 Subject: [PATCH 0043/1027] vault backup: 2024-07-17 08:01:07 --- personal/mental health/Grounding Techniques.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/personal/mental health/Grounding Techniques.md b/personal/mental health/Grounding Techniques.md index dd3861c..6b070a6 100644 --- a/personal/mental health/Grounding Techniques.md +++ b/personal/mental health/Grounding Techniques.md @@ -2,6 +2,18 @@ After trauma, it's normal to experience flashbacks, anxiety, and other uncomfort ## 5-4-3-2-1 Technique Using the 5-4-3-2-1 technique, you will purposefully take in the details of your surroundings using each of your senses. Strive to notice small details that your mind would usually tune out, such as distant sounds, or the texture of an ordinary object. +5. What are 5 things you can see? Look for small details such as a pattern in the ceiling, the way light reflects off of a surface, or an object you never noticed. +4. What are 4 things you can feel? Notice the sensation of clothing on your body, the sun on your skin, or the feeling of the chair you are sitting in. Pick up an object and examine its weight, texture, and other physical qualities. +3. What are 3 things you can hear? Pay special attention to the sounds your mind has tuned out, such as a ticking clock, distant traffic, or trees blowing in the wind. +2. What are two things you can smell? Try to notice the smells in the air around you, like an air freshener or freshly mowed grass. You may also look around for something that has a scent, such as a flower or an unlit candle. +1. What is 1 thing you can taste? Carry gum, candy, or small stacks for this step. Pop one in your mouth and focus your attention closely on the flavors. + +## Categories +Choose at least three of the categories below and name as many items as you can in each one. Spend a few minutes on each category to come up with as many items as possible. + +| Movies | Countries | Books | Cereals | +| ------ | --------- | ----- | ------- | +| | | | | ## Body Awareness This exercise will bring you into the "here and now" by directing your focus to sensations in the body. Pay special attention to the physical sensations created by each step. From c3084f300e3203d25242dc196fdb80432b972ad7 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 17 Jul 2024 08:16:53 -0600 Subject: [PATCH 0044/1027] vault backup: 2024-07-17 08:16:53 --- personal/mental health/Coping Skills.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 personal/mental health/Coping Skills.md diff --git a/personal/mental health/Coping Skills.md b/personal/mental health/Coping Skills.md new file mode 100644 index 0000000..4c87a6d --- /dev/null +++ b/personal/mental health/Coping Skills.md @@ -0,0 +1 @@ +Anxiety can be magnified by irrational thoughts. Choose a thought that has \ No newline at end of file From b619614e827bedbda83dc0166ddaf8b8c8ec1193 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 17 Jul 2024 08:21:53 -0600 Subject: [PATCH 0045/1027] vault backup: 2024-07-17 08:21:53 --- personal/mental health/Coping Skills.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/personal/mental health/Coping Skills.md b/personal/mental health/Coping Skills.md index 4c87a6d..ede9f8e 100644 --- a/personal/mental health/Coping Skills.md +++ b/personal/mental health/Coping Skills.md @@ -1 +1,3 @@ -Anxiety can be magnified by irrational thoughts. Choose a thought that has \ No newline at end of file +Anxiety can be magnified by irrational thoughts. For example, the thoughts that "something bad will happen", or "I will make a mistake" might lack evidence, but still have a real impact on how you feel. By examining the evidence and challenging these thoughts, you can reduce anxiety. + +## Put thoughts on trial \ No newline at end of file From eff0b6a8f9da73671d5ff2a7ad775ca6b4d3ae89 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 17 Jul 2024 08:26:53 -0600 Subject: [PATCH 0046/1027] vault backup: 2024-07-17 08:26:53 --- personal/mental health/Coping Skills.md | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/personal/mental health/Coping Skills.md b/personal/mental health/Coping Skills.md index ede9f8e..ae6e453 100644 --- a/personal/mental health/Coping Skills.md +++ b/personal/mental health/Coping Skills.md @@ -1,3 +1,20 @@ Anxiety can be magnified by irrational thoughts. For example, the thoughts that "something bad will happen", or "I will make a mistake" might lack evidence, but still have a real impact on how you feel. By examining the evidence and challenging these thoughts, you can reduce anxiety. -## Put thoughts on trial \ No newline at end of file +## Put thoughts on trial +Choose a thought that has contributed to your anxiety. Gather evidence in support of your thought (*verifiable facts only*), and against your thought. Compare the evidence and determine whether your thought is accurate or not. + +## Use Socratic questioning +Question the thoughts that contribute to your anxiety. Ask yourself: +- "Is my thought based on facts or feelings?" +- "How would my best friend see this situation?" +- "How likely is it that my fear will come true?" +- "What's the most *likely* to happen?" +- "If my fear comes true, will it still matter in a week? A month? A year?" +## Imagery +Your thoughts have the power to change how you feel. If you think of something sad, it's likely you'll start to feel sad. The opposite is also true: When you think of something positive or calming, you feel relaxed. The imagery technique harnesses this power to reduce anxiety. + +Think of a place you find comforting. It could be a secluded beach, your bedroom, a quiet mountaintop, or even a loud concert. For 5 to 10 minutes, use *all* your senses to imagine this setting in great detail. Don't just think fleetingly about this place - really imagine it. + +- What do you see around you? What do you notice in the distance? Look all around to take in all your surroundings. Look for small details you would usually miss. +- What sounds can you hear? Are they loud or soft? Listen closely to everything around you. Keep listening to see if you notice any distant sounds. +- Are you eating or drinking something enjoyable? What is the flavor \ No newline at end of file From ef1e3a57ec0448d439be3ee83aa51df725c62909 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 17 Jul 2024 08:31:53 -0600 Subject: [PATCH 0047/1027] vault backup: 2024-07-17 08:31:53 --- personal/mental health/Coping Skills.md | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/personal/mental health/Coping Skills.md b/personal/mental health/Coping Skills.md index ae6e453..dae5275 100644 --- a/personal/mental health/Coping Skills.md +++ b/personal/mental health/Coping Skills.md @@ -17,4 +17,21 @@ Think of a place you find comforting. It could be a secluded beach, your bedroom - What do you see around you? What do you notice in the distance? Look all around to take in all your surroundings. Look for small details you would usually miss. - What sounds can you hear? Are they loud or soft? Listen closely to everything around you. Keep listening to see if you notice any distant sounds. -- Are you eating or drinking something enjoyable? What is the flavor \ No newline at end of file +- Are you eating or drinking something enjoyable? What is the flavor like? How does it taste? Savor all the tastes of the food or drink. +- What can you feel? What is the temperature like? Think of how the air feels on your skin, and how your clothes feel on your body. Soak in all these sensations. +- What scents are present? What does the air smell like? Take some time to appreciate the scents. + +## Deep Breathing +Deep breathing is a simple technique that's excellent for managing emotions. Not only is deep breathing effective, it's also discreet and easy to use at any time or place. + +Sit comfortably and place one hand on your abdomen. Breathe in through your nose, deeply enough that the hand on your abdomen rises. Hold the air in your lungs, and then exhale slowly through your mouth, with your lips puckered as if you are blowing through a straw. The secret is to go slow: +- Inhale for 4 seconds +- Hold for 4 seconds +- Exhale for 6 seconds + +Practice for 3 to 5 minutes. + +## Progressive Muscle Relaxation +By tensing and relaxing the muscles throughout your body, you can achieve a powerful feeling of relaxation. Additionally, progressive muscles relaxation will help you spot anxiety by teaching you to recognize feelings of muscle tension. + +Sit back or lie down in a comfortable position. For each area of the body listed bel \ No newline at end of file From 147cb4862600be6259bb098349daddb8b2fd8863 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 17 Jul 2024 08:37:37 -0600 Subject: [PATCH 0048/1027] vault backup: 2024-07-17 08:37:37 --- personal/mental health/Coping Skills.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/personal/mental health/Coping Skills.md b/personal/mental health/Coping Skills.md index dae5275..b6a7434 100644 --- a/personal/mental health/Coping Skills.md +++ b/personal/mental health/Coping Skills.md @@ -34,4 +34,8 @@ Practice for 3 to 5 minutes. ## Progressive Muscle Relaxation By tensing and relaxing the muscles throughout your body, you can achieve a powerful feeling of relaxation. Additionally, progressive muscles relaxation will help you spot anxiety by teaching you to recognize feelings of muscle tension. -Sit back or lie down in a comfortable position. For each area of the body listed bel \ No newline at end of file +Sit back or lie down in a comfortable position. For each area of the body listed below, you will tense your muscles tightly, but not to the point of strain. Hold the tension for 10 seconds, and pay close attention to how it feels. Then, release the tension and notice how the feeling of relaxation differs from the feeling of tension. + +- Feet: Curl your toes tightly into your feet, then release them. +- Calves: Point or flex your feet, then let them relax. +- Thighs: Squeeze your thighs \ No newline at end of file From 9574bd9b9f676de1936b4d9cebe92bf044304789 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 17 Jul 2024 08:48:18 -0600 Subject: [PATCH 0049/1027] vault backup: 2024-07-17 08:48:18 --- personal/mental health/Coping Skills.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/personal/mental health/Coping Skills.md b/personal/mental health/Coping Skills.md index b6a7434..278ce67 100644 --- a/personal/mental health/Coping Skills.md +++ b/personal/mental health/Coping Skills.md @@ -38,4 +38,10 @@ Sit back or lie down in a comfortable position. For each area of the body listed - Feet: Curl your toes tightly into your feet, then release them. - Calves: Point or flex your feet, then let them relax. -- Thighs: Squeeze your thighs \ No newline at end of file +- Thighs: Squeeze your thighs +- Torso: Suck in your abdomen, then release the tension and let it fall. +- Back: Squeeze your shoulder blades together, then release them. +- Shoulders: Lift and squeeze your shoulders toward your ears, then let them drop. +- Arms: Make a fist by curling your fingers into your palm, then relax your fingers. +- Face: Scrunch your facial features to the center of your face, then relax. +- Full body: Squeeze all muscles together, then release all tension. \ No newline at end of file From e7703c5eaf8c99b46b84b72feead637ddb45e476 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 17 Jul 2024 09:18:18 -0600 Subject: [PATCH 0050/1027] vault backup: 2024-07-17 09:18:18 --- personal/mental health/Boundaries.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 personal/mental health/Boundaries.md diff --git a/personal/mental health/Boundaries.md b/personal/mental health/Boundaries.md new file mode 100644 index 0000000..7a8103e --- /dev/null +++ b/personal/mental health/Boundaries.md @@ -0,0 +1 @@ +While it may seem scary to say anything and "rock the boat" or cause problems, it's far more dangerous to let resentment take hold, and cause harm to bo \ No newline at end of file From 9a3df6375b6cd72de0f44442d982909557f0fe83 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 17 Jul 2024 09:23:18 -0600 Subject: [PATCH 0051/1027] vault backup: 2024-07-17 09:23:18 --- personal/mental health/Boundaries.md | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/personal/mental health/Boundaries.md b/personal/mental health/Boundaries.md index 7a8103e..35b2994 100644 --- a/personal/mental health/Boundaries.md +++ b/personal/mental health/Boundaries.md @@ -1 +1,12 @@ -While it may seem scary to say anything and "rock the boat" or cause problems, it's far more dangerous to let resentment take hold, and cause harm to bo \ No newline at end of file +While it may seem scary to say anything and "rock the boat" or cause problems, it's far more dangerous to let resentment take hold, and cause harm to both of you. + +No matter how well individuals think they know each other, they are not mind readers. They don't always know when you feel overwhelmed, lonely, or under appreciated unless you tell them. They might not know how much certain things mean to you, like unloading the dishwasher or giving them time alone unless you tell them. + +If not addressed properly, "little" things can become big things that can threaten a relationship when ignored. It's important to *identify* and *express* needs. A lot of trouble and heartache can be avoided if everyone said what they needed rather than pulling away or becoming passive aggressive. + +## Feeling Safe +If you don't feel safe physically, mentally, and emotionally, it can be difficult to set and hold boundaries. Even if your lack of stability isn't directly caused by the relationship (lack of sleep, conflict from work, existential issues), it can still impact your ability to hold healthy boundaries. + +If you are prone to people-pleasing, fear of disappointing others may make you feel unsafe or scared. It can be a trauma response from an abusive upbringing, or as a way to get love in a family where you experienced emotional +# Resources +https://www.gottman.com/blog/the-truth-about-boundaries/ \ No newline at end of file From 9cc78ea93c4f270e24635206baeadf29aeca3be6 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 17 Jul 2024 09:28:18 -0600 Subject: [PATCH 0052/1027] vault backup: 2024-07-17 09:28:18 --- personal/mental health/Boundaries.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/personal/mental health/Boundaries.md b/personal/mental health/Boundaries.md index 35b2994..609627e 100644 --- a/personal/mental health/Boundaries.md +++ b/personal/mental health/Boundaries.md @@ -7,6 +7,14 @@ If not addressed properly, "little" things can become big things that can threat ## Feeling Safe If you don't feel safe physically, mentally, and emotionally, it can be difficult to set and hold boundaries. Even if your lack of stability isn't directly caused by the relationship (lack of sleep, conflict from work, existential issues), it can still impact your ability to hold healthy boundaries. -If you are prone to people-pleasing, fear of disappointing others may make you feel unsafe or scared. It can be a trauma response from an abusive upbringing, or as a way to get love in a family where you experienced emotional +If you are prone to people-pleasing, fear of disappointing others may make you feel unsafe or scared. It can be a trauma response from an abusive upbringing, or as a way to get love in a family where you experienced emotional neglect and/or invalidation. + +Practicing self compassion and working with a therapist can help strengthen your relationship. A therapist can also provide healing experiences that can assist you in setting and holding boundaries. + +## Demanding You Change Back' +Change can create anxiety in our lives, so it's normal for people to feel emotional about the setting of new boundaries. It's important to understand that they are not necessarily reacting because the change you are making is bad or wrong, rather they are uncomfortable because you are inviting them into new, and unknown territory. + +You can validate another person's anxiety or other emotions such as hurt, frustration, or disappointment, but *you do not need to own those feelings*. Pull them closer to help them regain balance, but understand that *its* + # Resources https://www.gottman.com/blog/the-truth-about-boundaries/ \ No newline at end of file From d4ac6e9f922e9bd0fb42cb7ef715116091aed7c9 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 17 Jul 2024 09:33:18 -0600 Subject: [PATCH 0053/1027] vault backup: 2024-07-17 09:33:18 --- personal/mental health/Boundaries.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/personal/mental health/Boundaries.md b/personal/mental health/Boundaries.md index 609627e..0d78fbf 100644 --- a/personal/mental health/Boundaries.md +++ b/personal/mental health/Boundaries.md @@ -11,10 +11,14 @@ If you are prone to people-pleasing, fear of disappointing others may make you f Practicing self compassion and working with a therapist can help strengthen your relationship. A therapist can also provide healing experiences that can assist you in setting and holding boundaries. -## Demanding You Change Back' +## Demanding You Change Back Change can create anxiety in our lives, so it's normal for people to feel emotional about the setting of new boundaries. It's important to understand that they are not necessarily reacting because the change you are making is bad or wrong, rather they are uncomfortable because you are inviting them into new, and unknown territory. -You can validate another person's anxiety or other emotions such as hurt, frustration, or disappointment, but *you do not need to own those feelings*. Pull them closer to help them regain balance, but understand that *its* +You can validate another person's anxiety or other emotions such as hurt, frustration, or disappointment, but *you do not need to own those feelings*. Pull them closer to help them regain balance, but understand that *it is not your responsibility to hold them up*. They might fall down as they find their way again, but if they refuse to get back up, it's not on you. + +Healthy boundaries can dramatically improve relationships and wellbeing. You must stay true to yourself, and be prepared to let go of those who won't adapt to the boundaries you set. + +## Setting an example # Resources https://www.gottman.com/blog/the-truth-about-boundaries/ \ No newline at end of file From d806f37f8a7c30a23cd794fecb1808113b2759bf Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 17 Jul 2024 09:38:18 -0600 Subject: [PATCH 0054/1027] vault backup: 2024-07-17 09:38:18 --- personal/mental health/Boundaries.md | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/personal/mental health/Boundaries.md b/personal/mental health/Boundaries.md index 0d78fbf..b1dcac9 100644 --- a/personal/mental health/Boundaries.md +++ b/personal/mental health/Boundaries.md @@ -4,6 +4,7 @@ No matter how well individuals think they know each other, they are not mind rea If not addressed properly, "little" things can become big things that can threaten a relationship when ignored. It's important to *identify* and *express* needs. A lot of trouble and heartache can be avoided if everyone said what they needed rather than pulling away or becoming passive aggressive. +By being in control of when and how the issue is brought up, resentment doesn't build and the conversation can go smoothly. ## Feeling Safe If you don't feel safe physically, mentally, and emotionally, it can be difficult to set and hold boundaries. Even if your lack of stability isn't directly caused by the relationship (lack of sleep, conflict from work, existential issues), it can still impact your ability to hold healthy boundaries. @@ -18,7 +19,20 @@ You can validate another person's anxiety or other emotions such as hurt, frustr Healthy boundaries can dramatically improve relationships and wellbeing. You must stay true to yourself, and be prepared to let go of those who won't adapt to the boundaries you set. -## Setting an example + +## Requests vs Boundaries vs Ultimatums +Requests and boundaries are both tools we can use to meet our needs. + +## Requests +A request is when you ask someone to do or not do something, in order to meet our needs. A request is *not enforceable*, the outcome is out of our control. For example: "Would you mind speaking to me more calmly?" +## Boundaries +A *boundary* is when you make clear what you will or will not tolerate. For example, "I can't continue this conversation when you raise your voice at me." + +A boundary is only meaningful *if you enforce it*. In the above example, that would mean ending the conversation when the other party raises their voice. + +When we set a boundary, we are making it + # Resources -https://www.gottman.com/blog/the-truth-about-boundaries/ \ No newline at end of file +https://www.gottman.com/blog/the-truth-about-boundaries/ +https://www.gottman.com/blog/requests-vs-boundaries-vs-ultimatums-the-ultimate-guide/ \ No newline at end of file From efff186401395f45c98d5b75aab21b184ec38a19 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 17 Jul 2024 09:43:18 -0600 Subject: [PATCH 0055/1027] vault backup: 2024-07-17 09:43:18 --- personal/mental health/Boundaries.md | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/personal/mental health/Boundaries.md b/personal/mental health/Boundaries.md index b1dcac9..25b2333 100644 --- a/personal/mental health/Boundaries.md +++ b/personal/mental health/Boundaries.md @@ -18,19 +18,22 @@ Change can create anxiety in our lives, so it's normal for people to feel emotio You can validate another person's anxiety or other emotions such as hurt, frustration, or disappointment, but *you do not need to own those feelings*. Pull them closer to help them regain balance, but understand that *it is not your responsibility to hold them up*. They might fall down as they find their way again, but if they refuse to get back up, it's not on you. Healthy boundaries can dramatically improve relationships and wellbeing. You must stay true to yourself, and be prepared to let go of those who won't adapt to the boundaries you set. - - ## Requests vs Boundaries vs Ultimatums Requests and boundaries are both tools we can use to meet our needs. - -## Requests +## Requests: The First Course of Action A request is when you ask someone to do or not do something, in order to meet our needs. A request is *not enforceable*, the outcome is out of our control. For example: "Would you mind speaking to me more calmly?" -## Boundaries + +When you have a need in a relationship, a request is a good place to start. By making a request, we give the other party an opportunity to meet our needs. If the other party is receptive, you should offer a window of time for them to make a change to their behavior. +## Boundaries: The Second Course of Action A *boundary* is when you make clear what you will or will not tolerate. For example, "I can't continue this conversation when you raise your voice at me." A boundary is only meaningful *if you enforce it*. In the above example, that would mean ending the conversation when the other party raises their voice. -When we set a boundary, we are making it +When we set a boundary, we are making it clear what *our* actions will be. Therefore, boundaries are more enforceable, and the outcome is within our control. + +If we make a request and the other party is unwilling or unable to meet it, you *must* accept their answer. You cannot force something from someone who is unable or unwilling to give more. Don't give into the illusion that + +## Ultimatum # Resources From bf4f55bc7458bc450de79c5fe92dac186326ff34 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 17 Jul 2024 09:48:18 -0600 Subject: [PATCH 0056/1027] vault backup: 2024-07-17 09:48:18 --- personal/mental health/Boundaries.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/personal/mental health/Boundaries.md b/personal/mental health/Boundaries.md index 25b2333..d7c345f 100644 --- a/personal/mental health/Boundaries.md +++ b/personal/mental health/Boundaries.md @@ -31,11 +31,15 @@ A boundary is only meaningful *if you enforce it*. In the above example, that wo When we set a boundary, we are making it clear what *our* actions will be. Therefore, boundaries are more enforceable, and the outcome is within our control. -If we make a request and the other party is unwilling or unable to meet it, you *must* accept their answer. You cannot force something from someone who is unable or unwilling to give more. Don't give into the illusion that +If we make a request and the other party is unwilling or unable to meet it, you *must* accept their answer. You cannot force something from someone who is unable or unwilling to give more. Don't give into the illusion that if we ask a *17th time*, then they'll give in and become receptive to our needs. +At this point, we have two choices. +1. We can accept that *in this circumsta* ## Ultimatum +## Having questions + # Resources https://www.gottman.com/blog/the-truth-about-boundaries/ https://www.gottman.com/blog/requests-vs-boundaries-vs-ultimatums-the-ultimate-guide/ \ No newline at end of file From 02b3323e7a4b99ef0295cccb5722489b632be17a Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 17 Jul 2024 09:53:18 -0600 Subject: [PATCH 0057/1027] vault backup: 2024-07-17 09:53:18 --- personal/mental health/Boundaries.md | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/personal/mental health/Boundaries.md b/personal/mental health/Boundaries.md index d7c345f..a2eae7a 100644 --- a/personal/mental health/Boundaries.md +++ b/personal/mental health/Boundaries.md @@ -34,9 +34,17 @@ When we set a boundary, we are making it clear what *our* actions will be. There If we make a request and the other party is unwilling or unable to meet it, you *must* accept their answer. You cannot force something from someone who is unable or unwilling to give more. Don't give into the illusion that if we ask a *17th time*, then they'll give in and become receptive to our needs. At this point, we have two choices. -1. We can accept that *in this circumsta* -## Ultimatum +1. We can accept that *in this circumstance*, their behavior is unchanging, and that our needs are not met. This means staying in that situation. +2. We can set a boundary. +When setting a boundary, you can ask yourself, "How willing am I to be with this person who is unable or unwilling to meet this need?" +If a person regularly hurts you and has been unreceptive to our requests to stop, it will create distance and space, or might end the relationship entirely. If a person regularly fails to meet your needs after you've clearly communicated them and given them time to change, you can set a boundary that acknowledges that the relationship is not working in its current state, and take space from it or end it. +## Ultimatum +You might find yourself asking, "What's the difference between a boundary and an ultimatum?" + +The line between the two is rather blurry, and it might be hard to quantify in a meaningful way. + +However, the main distinction comes from the fact that a boundary is about our own limits, and an ultimatum is designed to c ## Having questions From 1f9e80cd1e25df77bf7177ff04bfd0534e591165 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 17 Jul 2024 09:58:18 -0600 Subject: [PATCH 0058/1027] vault backup: 2024-07-17 09:58:18 --- personal/mental health/Boundaries.md | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/personal/mental health/Boundaries.md b/personal/mental health/Boundaries.md index a2eae7a..51c1884 100644 --- a/personal/mental health/Boundaries.md +++ b/personal/mental health/Boundaries.md @@ -20,11 +20,11 @@ You can validate another person's anxiety or other emotions such as hurt, frustr Healthy boundaries can dramatically improve relationships and wellbeing. You must stay true to yourself, and be prepared to let go of those who won't adapt to the boundaries you set. ## Requests vs Boundaries vs Ultimatums Requests and boundaries are both tools we can use to meet our needs. -## Requests: The First Course of Action +### Requests: The First Course of Action A request is when you ask someone to do or not do something, in order to meet our needs. A request is *not enforceable*, the outcome is out of our control. For example: "Would you mind speaking to me more calmly?" When you have a need in a relationship, a request is a good place to start. By making a request, we give the other party an opportunity to meet our needs. If the other party is receptive, you should offer a window of time for them to make a change to their behavior. -## Boundaries: The Second Course of Action +### Boundaries: The Second Course of Action A *boundary* is when you make clear what you will or will not tolerate. For example, "I can't continue this conversation when you raise your voice at me." A boundary is only meaningful *if you enforce it*. In the above example, that would mean ending the conversation when the other party raises their voice. @@ -39,12 +39,18 @@ At this point, we have two choices. When setting a boundary, you can ask yourself, "How willing am I to be with this person who is unable or unwilling to meet this need?" If a person regularly hurts you and has been unreceptive to our requests to stop, it will create distance and space, or might end the relationship entirely. If a person regularly fails to meet your needs after you've clearly communicated them and given them time to change, you can set a boundary that acknowledges that the relationship is not working in its current state, and take space from it or end it. -## Ultimatum +### Ultimatum You might find yourself asking, "What's the difference between a boundary and an ultimatum?" The line between the two is rather blurry, and it might be hard to quantify in a meaningful way. -However, the main distinction comes from the fact that a boundary is about our own limits, and an ultimatum is designed to c +However, the main distinction comes from the fact that a boundary is about our own limits, and an ultimatum is designed to control someone else. Ultimatums focus on the behavior of *others*, not ourselves. + +Ultimatums often revolve around trying to force someone else to change, and often come with a tone of anger and control. *You should consider an ultimatum, and realize that it's probablis the emotional form of a boundary, and whether it can be communicated in a healthy way.* + +If someone frequently sets ultimatums they don't enforce, they highlight their attempts to control other people's behavior, rather than making attempts to protect themselves, and their needs. + + ## Having questions From 4c76c98988a599ffb12fda59a5a3264d66457bc4 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 17 Jul 2024 10:03:18 -0600 Subject: [PATCH 0059/1027] vault backup: 2024-07-17 10:03:18 --- personal/mental health/Boundaries.md | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/personal/mental health/Boundaries.md b/personal/mental health/Boundaries.md index 51c1884..872eb6c 100644 --- a/personal/mental health/Boundaries.md +++ b/personal/mental health/Boundaries.md @@ -1,6 +1,6 @@ While it may seem scary to say anything and "rock the boat" or cause problems, it's far more dangerous to let resentment take hold, and cause harm to both of you. -No matter how well individuals think they know each other, they are not mind readers. They don't always know when you feel overwhelmed, lonely, or under appreciated unless you tell them. They might not know how much certain things mean to you, like unloading the dishwasher or giving them time alone unless you tell them. +No matter how well individuals think they know each other, they are not mind readers. They don't always know when you feel overwhelmed, lonely, or under appreciated unless you tell them. They might not know how much certain things mean to you, like unloading the dishwasher or giving them time alone unless you tell them. Understand that grief is a natural part of the boundary-setting process, and that while setting boundaries is a healthy thing to do, it's often accompanied by some loss and sadness - and in order to effectively set boundaries, we must accept this part of the process too. If not addressed properly, "little" things can become big things that can threaten a relationship when ignored. It's important to *identify* and *express* needs. A lot of trouble and heartache can be avoided if everyone said what they needed rather than pulling away or becoming passive aggressive. @@ -46,10 +46,21 @@ The line between the two is rather blurry, and it might be hard to quantify in a However, the main distinction comes from the fact that a boundary is about our own limits, and an ultimatum is designed to control someone else. Ultimatums focus on the behavior of *others*, not ourselves. -Ultimatums often revolve around trying to force someone else to change, and often come with a tone of anger and control. *You should consider an ultimatum, and realize that it's probablis the emotional form of a boundary, and whether it can be communicated in a healthy way.* +Ultimatums often revolve around trying to force someone else to change, and often come with a tone of anger and control. If someone frequently sets ultimatums they don't enforce, they highlight their attempts to control other people's behavior, rather than making attempts to protect themselves, and their needs. +You should consider an ultimatum, and realize that it's probably the emotional result of a boundary being crossed, and whether it can be communicated in a healthier way. + +### Getting stuck having repeated *requests* +You might find yourself making repeated requests, and never being able to cross that bridge from a *request*, to a *boundary*. + +There are a few reasons this might be the case: +- You don't believe your needs are valid, or important enough to warrant setting hard boundaries around them. +- We've been told our needs are unreasonable, so it seems too "demanding" to set a boundary around them. +- We're afraid of the grief that will arise when you accept that: + - The other person isn't changing + - Setting a boundary may mean stepping back from the relationship. ## Having questions From 506536c1dbb10e97ea4b560d0beddeb77e327ce2 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 17 Jul 2024 10:08:18 -0600 Subject: [PATCH 0060/1027] vault backup: 2024-07-17 10:08:18 --- personal/mental health/Boundaries.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/personal/mental health/Boundaries.md b/personal/mental health/Boundaries.md index 872eb6c..7f5c897 100644 --- a/personal/mental health/Boundaries.md +++ b/personal/mental health/Boundaries.md @@ -4,7 +4,9 @@ No matter how well individuals think they know each other, they are not mind rea If not addressed properly, "little" things can become big things that can threaten a relationship when ignored. It's important to *identify* and *express* needs. A lot of trouble and heartache can be avoided if everyone said what they needed rather than pulling away or becoming passive aggressive. -By being in control of when and how the issue is brought up, resentment doesn't build and the conversation can go smoothly. +By being in control of when and how the issue is brought up, resentment doesn't build and the conversation can go smoothly. If the other person has questions, that's *OK*, but you are not required to provide a justification to have boundaries. + +Setting and enforcing boundaries will require accepting the limits of our control, and releasing the illusions of control that keep us stuck in unchanging situations. It might mean respecting our needs enough to *make a hard choice to protect them*. ## Feeling Safe If you don't feel safe physically, mentally, and emotionally, it can be difficult to set and hold boundaries. Even if your lack of stability isn't directly caused by the relationship (lack of sleep, conflict from work, existential issues), it can still impact your ability to hold healthy boundaries. From d53058e329f30058f9d6b3795c152449b8fc3e3d Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 17 Jul 2024 10:13:48 -0600 Subject: [PATCH 0061/1027] vault backup: 2024-07-17 10:13:48 --- personal/mental health/Boundaries.md | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/personal/mental health/Boundaries.md b/personal/mental health/Boundaries.md index 7f5c897..86e6d1a 100644 --- a/personal/mental health/Boundaries.md +++ b/personal/mental health/Boundaries.md @@ -4,7 +4,7 @@ No matter how well individuals think they know each other, they are not mind rea If not addressed properly, "little" things can become big things that can threaten a relationship when ignored. It's important to *identify* and *express* needs. A lot of trouble and heartache can be avoided if everyone said what they needed rather than pulling away or becoming passive aggressive. -By being in control of when and how the issue is brought up, resentment doesn't build and the conversation can go smoothly. If the other person has questions, that's *OK*, but you are not required to provide a justification to have boundaries. +By being in control of when and how the issue is brought up, resentment doesn't build and the conversation can go smoothly. If the other person has questions, that's *OK*, and answering them may help the other person better understand where you're coming from, but you are not required to provide a justification to explain your boundaries. You might even find it productive to ask followup questions to make sure they understand, maybe ask if the request seems unfair, or unusual, or see if the request conflicts with one of their needs. Setting and enforcing boundaries will require accepting the limits of our control, and releasing the illusions of control that keep us stuck in unchanging situations. It might mean respecting our needs enough to *make a hard choice to protect them*. ## Feeling Safe @@ -41,7 +41,7 @@ At this point, we have two choices. When setting a boundary, you can ask yourself, "How willing am I to be with this person who is unable or unwilling to meet this need?" If a person regularly hurts you and has been unreceptive to our requests to stop, it will create distance and space, or might end the relationship entirely. If a person regularly fails to meet your needs after you've clearly communicated them and given them time to change, you can set a boundary that acknowledges that the relationship is not working in its current state, and take space from it or end it. -### Ultimatum +### Ultimatums You might find yourself asking, "What's the difference between a boundary and an ultimatum?" The line between the two is rather blurry, and it might be hard to quantify in a meaningful way. @@ -65,8 +65,6 @@ There are a few reasons this might be the case: - Setting a boundary may mean stepping back from the relationship. -## Having questions - # Resources https://www.gottman.com/blog/the-truth-about-boundaries/ https://www.gottman.com/blog/requests-vs-boundaries-vs-ultimatums-the-ultimate-guide/ \ No newline at end of file From e979a6add749e115c345043a28afa2cac238d5e9 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 17 Jul 2024 10:18:50 -0600 Subject: [PATCH 0062/1027] vault backup: 2024-07-17 10:18:50 --- personal/mental health/Boundaries.md | 2 ++ personal/mental health/Relationships.md | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/personal/mental health/Boundaries.md b/personal/mental health/Boundaries.md index 86e6d1a..2435b09 100644 --- a/personal/mental health/Boundaries.md +++ b/personal/mental health/Boundaries.md @@ -7,6 +7,8 @@ If not addressed properly, "little" things can become big things that can threat By being in control of when and how the issue is brought up, resentment doesn't build and the conversation can go smoothly. If the other person has questions, that's *OK*, and answering them may help the other person better understand where you're coming from, but you are not required to provide a justification to explain your boundaries. You might even find it productive to ask followup questions to make sure they understand, maybe ask if the request seems unfair, or unusual, or see if the request conflicts with one of their needs. Setting and enforcing boundaries will require accepting the limits of our control, and releasing the illusions of control that keep us stuck in unchanging situations. It might mean respecting our needs enough to *make a hard choice to protect them*. + +It's important to understand that boundaries are not "an eye for an eye". Just because one person in a relationship defines a boundary, doesn't mean that the other person needs to have that same boundary. In a healthy relationship, you may have boundaries that the other person may not have, and vice versa. ## Feeling Safe If you don't feel safe physically, mentally, and emotionally, it can be difficult to set and hold boundaries. Even if your lack of stability isn't directly caused by the relationship (lack of sleep, conflict from work, existential issues), it can still impact your ability to hold healthy boundaries. diff --git a/personal/mental health/Relationships.md b/personal/mental health/Relationships.md index 7f70a24..095ccde 100644 --- a/personal/mental health/Relationships.md +++ b/personal/mental health/Relationships.md @@ -1,5 +1,9 @@ Healthy relationships are an essential part of being human, romantic *or* platonic. +# Skills +There are a few skills that can massively contribute to a healthy relationship. It takes work and practice to refine them. +## Putting your feelings in the words + # Balance As human beings, we need variety in social interactions. Not even necessarily variety in the amount of different people, but variety in the types and facets of people, and our relationship to them. If we don't have that variety, and instead begin to rely on one person too much to fulfill all of our social needs, it can create a dependance on that person, and create an unhealthy relationship with them. From 9d943b3493d4d805e64bd3e1563240263d64db37 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 17 Jul 2024 10:23:50 -0600 Subject: [PATCH 0063/1027] vault backup: 2024-07-17 10:23:50 --- .../mental health/Difficult Conversations.md | 3 +++ personal/mental health/Relationships.md | 17 +++++++++++------ 2 files changed, 14 insertions(+), 6 deletions(-) create mode 100644 personal/mental health/Difficult Conversations.md diff --git a/personal/mental health/Difficult Conversations.md b/personal/mental health/Difficult Conversations.md new file mode 100644 index 0000000..3d95608 --- /dev/null +++ b/personal/mental health/Difficult Conversations.md @@ -0,0 +1,3 @@ + +# Understanding **must** precede advice +When beginning a conversation, the goal should be understanding, not problem solving. You should aim to make sure there's a *mutual understanding* of the situation before attempting to problem solve. Problem solving and advice should *only* begin when both people feel totally understood, and heard. \ No newline at end of file diff --git a/personal/mental health/Relationships.md b/personal/mental health/Relationships.md index 095ccde..1d6c19d 100644 --- a/personal/mental health/Relationships.md +++ b/personal/mental health/Relationships.md @@ -2,15 +2,13 @@ Healthy relationships are an essential part of being human, romantic *or* platon # Skills There are a few skills that can massively contribute to a healthy relationship. It takes work and practice to refine them. -## Putting your feelings in the words +## Putting Your Feelings into Words +When people are able to find the right images, phrases, metaphors, and words to adequately describe our feelings, there's a kind of "resolution" that comes of it, an easing of tension. In conversation, focusing on finding the right way to explain your feelings can make the conversation more intimate, and more productive, because you can convey your feelings to the other person in a more impactful way. -# Balance -As human beings, we need variety in social interactions. Not even necessarily variety in the amount of different people, but variety in the types and facets of people, and our relationship to them. If we don't have that variety, and instead begin to rely on one person too much to fulfill all of our social needs, it can create a dependance on that person, and create an unhealthy relationship with them. +## Asking Open-Ended Questions -If you consider your relationships with the people around you as a set of concentric circles, a healthy social balance includes people in all circles. You need people that you have close, intimate relationships with, but you also need casual friendships and acquaintances. - -To grow closer to people, it takes time, slowly opening up and building trust. +## Asking # The R.A.M Model The Relationship Attachment Model was developed as a way to understand how relationships should grow to become a healthy, stable relationship. @@ -64,6 +62,13 @@ One way to begin the process would be by opening a channel of communication abou +# Balance +As human beings, we need variety in social interactions. Not even necessarily variety in the amount of different people, but variety in the types and facets of people, and our relationship to them. If we don't have that variety, and instead begin to rely on one person too much to fulfill all of our social needs, it can create a dependance on that person, and create an unhealthy relationship with them. + +If you consider your relationships with the people around you as a set of concentric circles, a healthy social balance includes people in all circles. You need people that you have close, intimate relationships with, but you also need casual friendships and acquaintances. + +To grow closer to people, it takes time, slowly opening up and building trust. + # Forging change in relationships Creating change in the relationships around you will usually be uncomfortable. Take a look at the status quo, and ask yourself, "would it be better if this relationship was different?" From 513202e0824efb29d54c82ffd7eb6297f172f9ee Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 17 Jul 2024 10:37:00 -0600 Subject: [PATCH 0064/1027] vault backup: 2024-07-17 10:37:00 --- personal/mental health/Relationships.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/personal/mental health/Relationships.md b/personal/mental health/Relationships.md index 1d6c19d..c2bc5d8 100644 --- a/personal/mental health/Relationships.md +++ b/personal/mental health/Relationships.md @@ -6,11 +6,12 @@ There are a few skills that can massively contribute to a healthy relationship. When people are able to find the right images, phrases, metaphors, and words to adequately describe our feelings, there's a kind of "resolution" that comes of it, an easing of tension. In conversation, focusing on finding the right way to explain your feelings can make the conversation more intimate, and more productive, because you can convey your feelings to the other person in a more impactful way. ## Asking Open-Ended Questions +The ability to ask open ended questions can help the other person explore their feelings by asking open-ended questions. This can be done by asking targeted questions, looking to understand their feelings about something, and by making specific statements that encourage the other person to expand on a statement further. +## Expressing Empathy +Empathy *is not easy*. - -## Asking # The R.A.M Model -The Relationship Attachment Model was developed as a way to understand how relationships should grow to become a healthy, stable relationship. +The Relationship Attachment Model is one way to understand how relationships should grow to become a healthy, stable relationship. The broad premise looks somewhat like this: 1. **Know**: You should know someone above all else, and knowing them should come first. From d3af9b5fbff67b127ecda0996e6d8019fa6a482d Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 17 Jul 2024 13:44:20 -0600 Subject: [PATCH 0065/1027] vault backup: 2024-07-17 13:44:20 --- personal/mental health/Difficult Conversations.md | 15 +++++++++++++-- personal/mental health/Relationships.md | 9 --------- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/personal/mental health/Difficult Conversations.md b/personal/mental health/Difficult Conversations.md index 3d95608..21d54f5 100644 --- a/personal/mental health/Difficult Conversations.md +++ b/personal/mental health/Difficult Conversations.md @@ -1,3 +1,14 @@ -# Understanding **must** precede advice -When beginning a conversation, the goal should be understanding, not problem solving. You should aim to make sure there's a *mutual understanding* of the situation before attempting to problem solve. Problem solving and advice should *only* begin when both people feel totally understood, and heard. \ No newline at end of file +## Understanding **must** precede advice +When beginning a conversation, the goal should be understanding, not problem solving. You should aim to make sure there's a *mutual understanding* of the situation before attempting to problem solve. Problem solving and advice should *only* begin when both people feel totally understood, and heard. + + +# Skills +There are a few skills that can massively contribute to a healthy relationship. It takes work and practice to refine them. +## Putting Your Feelings into Words +When people are able to find the right images, phrases, metaphors, and words to adequately describe our feelings, there's a kind of "resolution" that comes of it, an easing of tension. In conversation, focusing on finding the right way to explain your feelings can make the conversation more intimate, and more productive, because you can convey your feelings to the other person in a more impactful way. + +## Asking Open-Ended Questions +The ability to ask open ended questions can help the other person explore their feelings by asking open-ended questions. This can be done by asking targeted questions, looking to understand their feelings about something, and by making specific statements that encourage the other person to expand on a statement further. +## Expressing Empathy +Empathy *is not easy*. In a difficult conversation, it's important to try to learn more about, explore, and learn more about another person's thoughts, feelings, and needs. Empathy communicates to the other \ No newline at end of file diff --git a/personal/mental health/Relationships.md b/personal/mental health/Relationships.md index c2bc5d8..afbae4b 100644 --- a/personal/mental health/Relationships.md +++ b/personal/mental health/Relationships.md @@ -1,14 +1,5 @@ Healthy relationships are an essential part of being human, romantic *or* platonic. -# Skills -There are a few skills that can massively contribute to a healthy relationship. It takes work and practice to refine them. -## Putting Your Feelings into Words -When people are able to find the right images, phrases, metaphors, and words to adequately describe our feelings, there's a kind of "resolution" that comes of it, an easing of tension. In conversation, focusing on finding the right way to explain your feelings can make the conversation more intimate, and more productive, because you can convey your feelings to the other person in a more impactful way. - -## Asking Open-Ended Questions -The ability to ask open ended questions can help the other person explore their feelings by asking open-ended questions. This can be done by asking targeted questions, looking to understand their feelings about something, and by making specific statements that encourage the other person to expand on a statement further. -## Expressing Empathy -Empathy *is not easy*. # The R.A.M Model The Relationship Attachment Model is one way to understand how relationships should grow to become a healthy, stable relationship. From ca62f4534e85ea0808c3f25215e899f75516fe08 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 17 Jul 2024 13:49:20 -0600 Subject: [PATCH 0066/1027] vault backup: 2024-07-17 13:49:20 --- personal/mental health/Difficult Conversations.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/personal/mental health/Difficult Conversations.md b/personal/mental health/Difficult Conversations.md index 21d54f5..00037f9 100644 --- a/personal/mental health/Difficult Conversations.md +++ b/personal/mental health/Difficult Conversations.md @@ -1,8 +1,6 @@ ## Understanding **must** precede advice When beginning a conversation, the goal should be understanding, not problem solving. You should aim to make sure there's a *mutual understanding* of the situation before attempting to problem solve. Problem solving and advice should *only* begin when both people feel totally understood, and heard. - - # Skills There are a few skills that can massively contribute to a healthy relationship. It takes work and practice to refine them. ## Putting Your Feelings into Words @@ -11,4 +9,4 @@ When people are able to find the right images, phrases, metaphors, and words to ## Asking Open-Ended Questions The ability to ask open ended questions can help the other person explore their feelings by asking open-ended questions. This can be done by asking targeted questions, looking to understand their feelings about something, and by making specific statements that encourage the other person to expand on a statement further. ## Expressing Empathy -Empathy *is not easy*. In a difficult conversation, it's important to try to learn more about, explore, and learn more about another person's thoughts, feelings, and needs. Empathy communicates to the other \ No newline at end of file +Empathy *is not easy*. In a difficult conversation, it's important to try to learn more about, explore, and learn more about another person's thoughts, feelings, and needs. Empathy communicates to the other person that their thoughts, feelings, and needs make sense to you, and that you understand them. It doesn't necessarily mean you agree, but it means showing them that their perception of the situation is valid. You can have your own perception of the situation that's different from theirs, but both of your perceptions can be valid. \ No newline at end of file From 22afdcabb3f20a152f18e753b3d651e4b53ebe1c Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 17 Jul 2024 13:54:20 -0600 Subject: [PATCH 0067/1027] vault backup: 2024-07-17 13:54:20 --- personal/mental health/Grounding Techniques.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/personal/mental health/Grounding Techniques.md b/personal/mental health/Grounding Techniques.md index 6b070a6..8fcc80f 100644 --- a/personal/mental health/Grounding Techniques.md +++ b/personal/mental health/Grounding Techniques.md @@ -11,9 +11,10 @@ Using the 5-4-3-2-1 technique, you will purposefully take in the details of your ## Categories Choose at least three of the categories below and name as many items as you can in each one. Spend a few minutes on each category to come up with as many items as possible. -| Movies | Countries | Books | Cereals | -| ------ | --------- | ----- | ------- | -| | | | | +| Movies | Countries | Books | Cereals | +| ------------ | --------- | -------- | ------------------- | +| Sports Teams | Colors | Cars | Fruits & Vegetables | +| Animals | Cities | TV Shows | Famous People | ## Body Awareness This exercise will bring you into the "here and now" by directing your focus to sensations in the body. Pay special attention to the physical sensations created by each step. From 6b6c236b23b847fb2c1195a2d4acaf4ff61454b3 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 17 Jul 2024 15:14:20 -0600 Subject: [PATCH 0068/1027] vault backup: 2024-07-17 15:14:20 --- personal/mental health/Difficult Conversations.md | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/personal/mental health/Difficult Conversations.md b/personal/mental health/Difficult Conversations.md index 00037f9..55ff46d 100644 --- a/personal/mental health/Difficult Conversations.md +++ b/personal/mental health/Difficult Conversations.md @@ -1,4 +1,3 @@ - ## Understanding **must** precede advice When beginning a conversation, the goal should be understanding, not problem solving. You should aim to make sure there's a *mutual understanding* of the situation before attempting to problem solve. Problem solving and advice should *only* begin when both people feel totally understood, and heard. # Skills @@ -9,4 +8,11 @@ When people are able to find the right images, phrases, metaphors, and words to ## Asking Open-Ended Questions The ability to ask open ended questions can help the other person explore their feelings by asking open-ended questions. This can be done by asking targeted questions, looking to understand their feelings about something, and by making specific statements that encourage the other person to expand on a statement further. ## Expressing Empathy -Empathy *is not easy*. In a difficult conversation, it's important to try to learn more about, explore, and learn more about another person's thoughts, feelings, and needs. Empathy communicates to the other person that their thoughts, feelings, and needs make sense to you, and that you understand them. It doesn't necessarily mean you agree, but it means showing them that their perception of the situation is valid. You can have your own perception of the situation that's different from theirs, but both of your perceptions can be valid. \ No newline at end of file +Empathy *is not easy*. In a difficult conversation, it's important to try to learn more about, explore, and learn more about another person's thoughts, feelings, and needs. Empathy communicates to the other person that their thoughts, feelings, and needs make sense to you, and that you understand them. It doesn't necessarily mean you agree, but it means showing them that their perception of the situation is valid. You can have your own perception of the situation that's different from theirs, but both of your perceptions can be valid. + +--- + +# Crucial Conversations +Below are my notes and thoughts from reading the book *Crucial Conversations. + +The fundamental idea behind the book is that the "the root cause of many ... human pro" \ No newline at end of file From 7668b001cc4a2181abb547ab415521d794041675 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 17 Jul 2024 15:19:20 -0600 Subject: [PATCH 0069/1027] vault backup: 2024-07-17 15:19:20 --- personal/mental health/Difficult Conversations.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/personal/mental health/Difficult Conversations.md b/personal/mental health/Difficult Conversations.md index 55ff46d..1c9d46b 100644 --- a/personal/mental health/Difficult Conversations.md +++ b/personal/mental health/Difficult Conversations.md @@ -15,4 +15,8 @@ Empathy *is not easy*. In a difficult conversation, it's important to try to lea # Crucial Conversations Below are my notes and thoughts from reading the book *Crucial Conversations. -The fundamental idea behind the book is that the "the root cause of many ... human pro" \ No newline at end of file +The fundamental idea behind the book is that the "the root cause of many ... human problems lies in how people behave when we disagree about high-stakes, emotional issues." + +You know you're getting into a crucial conversation as opposed to a normal conversation when: +- Opinions vary, people feel differently about things +- The stakes are high, the outcome of the conversation matters \ No newline at end of file From 0ec82ffcf45323f414a5d34611ac92b4d6b8a771 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 17 Jul 2024 15:24:20 -0600 Subject: [PATCH 0070/1027] vault backup: 2024-07-17 15:24:20 --- personal/mental health/Difficult Conversations.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/personal/mental health/Difficult Conversations.md b/personal/mental health/Difficult Conversations.md index 1c9d46b..59a3407 100644 --- a/personal/mental health/Difficult Conversations.md +++ b/personal/mental health/Difficult Conversations.md @@ -18,5 +18,8 @@ Below are my notes and thoughts from reading the book *Crucial Conversations. The fundamental idea behind the book is that the "the root cause of many ... human problems lies in how people behave when we disagree about high-stakes, emotional issues." You know you're getting into a crucial conversation as opposed to a normal conversation when: -- Opinions vary, people feel differently about things -- The stakes are high, the outcome of the conversation matters \ No newline at end of file +- Opinions vary, people feel differently about things. +- The stakes are high, the outcome of the conversation matters. +- Emotions are high, people feel strongly about the outcome. + +One important factor in problem resolution is the time that passes between when the problem emerges, and when resolution is at \ No newline at end of file From 7e12f8faeb5080080d2a9318fb3c9db368398d67 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 17 Jul 2024 15:29:20 -0600 Subject: [PATCH 0071/1027] vault backup: 2024-07-17 15:29:20 --- personal/mental health/Difficult Conversations.md | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/personal/mental health/Difficult Conversations.md b/personal/mental health/Difficult Conversations.md index 59a3407..17951d3 100644 --- a/personal/mental health/Difficult Conversations.md +++ b/personal/mental health/Difficult Conversations.md @@ -22,4 +22,13 @@ You know you're getting into a crucial conversation as opposed to a normal conve - The stakes are high, the outcome of the conversation matters. - Emotions are high, people feel strongly about the outcome. -One important factor in problem resolution is the time that passes between when the problem emerges, and when resolution is at \ No newline at end of file +One important factor in problem resolution is the time that passes between when the problem emerges, and when resolution is attempted. The impact of the issues, and the difficulty of resolution grow when the issue is left unresolved. It can lead to gossiping, mistrust, and resentment. + +It's important to try to resolve problems *quickly* after they are identified. + +### How do we handle crucial conversations? +There are 3 broad options: +- We can avoid them entirely. +- We can face them and handle it poorly. +- We can face them and handle it well. +- \ No newline at end of file From 3879ed2ea82713b7efd9d4b78e343f6d5c01efea Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 17 Jul 2024 15:34:20 -0600 Subject: [PATCH 0072/1027] vault backup: 2024-07-17 15:34:20 --- personal/mental health/Difficult Conversations.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/personal/mental health/Difficult Conversations.md b/personal/mental health/Difficult Conversations.md index 17951d3..7c9df8a 100644 --- a/personal/mental health/Difficult Conversations.md +++ b/personal/mental health/Difficult Conversations.md @@ -31,4 +31,5 @@ There are 3 broad options: - We can avoid them entirely. - We can face them and handle it poorly. - We can face them and handle it well. -- \ No newline at end of file + +While only one of these options reliably leads to an effective outcome, \ No newline at end of file From 7c5185497489ff8a9942233fc925e266b3bb482c Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 17 Jul 2024 15:44:20 -0600 Subject: [PATCH 0073/1027] vault backup: 2024-07-17 15:44:20 --- personal/mental health/Difficult Conversations.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/personal/mental health/Difficult Conversations.md b/personal/mental health/Difficult Conversations.md index 7c9df8a..9e02f66 100644 --- a/personal/mental health/Difficult Conversations.md +++ b/personal/mental health/Difficult Conversations.md @@ -32,4 +32,4 @@ There are 3 broad options: - We can face them and handle it poorly. - We can face them and handle it well. -While only one of these options reliably leads to an effective outcome, \ No newline at end of file +While only one of these options reliably leads to an effective outcome, you'll often find that we often fall back to the first two because of the fear that engagement will make the issue worse, or \ No newline at end of file From a86898764f3527ab53321aa0a6b16d4618683277 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 17 Jul 2024 15:49:20 -0600 Subject: [PATCH 0074/1027] vault backup: 2024-07-17 15:49:20 --- personal/mental health/Difficult Conversations.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/personal/mental health/Difficult Conversations.md b/personal/mental health/Difficult Conversations.md index 9e02f66..5dce75b 100644 --- a/personal/mental health/Difficult Conversations.md +++ b/personal/mental health/Difficult Conversations.md @@ -32,4 +32,7 @@ There are 3 broad options: - We can face them and handle it poorly. - We can face them and handle it well. -While only one of these options reliably leads to an effective outcome, you'll often find that we often fall back to the first two because of the fear that engagement will make the issue worse, or \ No newline at end of file +While only one of these options reliably leads to an effective outcome, you'll often find that we often fall back to the first two because of the fear that engagement will make the issue worse. + +*personal note*: Humans inherently dislike being uncomfortable, the root instinct to avoid immediate discomfort in any way is natural . But in so many parts of life, if you push through that, the outcome will be very positive. Try to be mindful of anything that makes you uncomfortable, and ask yourself, "will my life improve if I do this hard thing?" + From 9905c661c81a190a25a951dec4e8156252d52d58 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 17 Jul 2024 15:59:20 -0600 Subject: [PATCH 0075/1027] vault backup: 2024-07-17 15:59:20 --- personal/mental health/Difficult Conversations.md | 1 + 1 file changed, 1 insertion(+) diff --git a/personal/mental health/Difficult Conversations.md b/personal/mental health/Difficult Conversations.md index 5dce75b..dfa685a 100644 --- a/personal/mental health/Difficult Conversations.md +++ b/personal/mental health/Difficult Conversations.md @@ -36,3 +36,4 @@ While only one of these options reliably leads to an effective outcome, you'll o *personal note*: Humans inherently dislike being uncomfortable, the root instinct to avoid immediate discomfort in any way is natural . But in so many parts of life, if you push through that, the outcome will be very positive. Try to be mindful of anything that makes you uncomfortable, and ask yourself, "will my life improve if I do this hard thing?" +If you fail to discuss these issues with other people, *those issues will become the lens through which you see them*, which will show up in the way you treat the other person \ No newline at end of file From 7e52ef493174a5f4b3d8ca32d188b585a7055983 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 17 Jul 2024 16:24:20 -0600 Subject: [PATCH 0076/1027] vault backup: 2024-07-17 16:24:20 --- personal/mental health/Difficult Conversations.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/personal/mental health/Difficult Conversations.md b/personal/mental health/Difficult Conversations.md index dfa685a..67799e8 100644 --- a/personal/mental health/Difficult Conversations.md +++ b/personal/mental health/Difficult Conversations.md @@ -36,4 +36,6 @@ While only one of these options reliably leads to an effective outcome, you'll o *personal note*: Humans inherently dislike being uncomfortable, the root instinct to avoid immediate discomfort in any way is natural . But in so many parts of life, if you push through that, the outcome will be very positive. Try to be mindful of anything that makes you uncomfortable, and ask yourself, "will my life improve if I do this hard thing?" -If you fail to discuss these issues with other people, *those issues will become the lens through which you see them*, which will show up in the way you treat the other person \ No newline at end of file +If you fail to discuss these issues with other people, *those issues will become the lens through which you see them*, which will show up in the way you treat the other person. + +We generally handle important conversations *poorly*, strong emotions make people worse at communicating effectively, not better. \ No newline at end of file From 80454265ac975cdc8205cb44864c2510415abb24 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 17 Jul 2024 16:44:20 -0600 Subject: [PATCH 0077/1027] vault backup: 2024-07-17 16:44:20 --- personal/mental health/Difficult Conversations.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/personal/mental health/Difficult Conversations.md b/personal/mental health/Difficult Conversations.md index 67799e8..729dbb7 100644 --- a/personal/mental health/Difficult Conversations.md +++ b/personal/mental health/Difficult Conversations.md @@ -38,4 +38,4 @@ While only one of these options reliably leads to an effective outcome, you'll o If you fail to discuss these issues with other people, *those issues will become the lens through which you see them*, which will show up in the way you treat the other person. -We generally handle important conversations *poorly*, strong emotions make people worse at communicating effectively, not better. \ No newline at end of file +We generally handle important conversations *poorly*, strong emotions make people worse at communicating effectively, not better. Our natural instincts are to push back against that communication because it's hard, and it triggers our fight or flight instincts. This means we won't be receptive to new information, and we'll likely respond in a way that's not irrational and hurts the situation for both parties. It usually takes conscious effort to be mindful of your thoughts and feelings, listen to them fully and rationally, then respond in a rational way, \ No newline at end of file From ed8b65aa2b401eb4db43a4c0d4957b1d78736f00 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 17 Jul 2024 16:54:20 -0600 Subject: [PATCH 0078/1027] vault backup: 2024-07-17 16:54:20 --- personal/mental health/Difficult Conversations.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/personal/mental health/Difficult Conversations.md b/personal/mental health/Difficult Conversations.md index 729dbb7..39d7a12 100644 --- a/personal/mental health/Difficult Conversations.md +++ b/personal/mental health/Difficult Conversations.md @@ -38,4 +38,6 @@ While only one of these options reliably leads to an effective outcome, you'll o If you fail to discuss these issues with other people, *those issues will become the lens through which you see them*, which will show up in the way you treat the other person. -We generally handle important conversations *poorly*, strong emotions make people worse at communicating effectively, not better. Our natural instincts are to push back against that communication because it's hard, and it triggers our fight or flight instincts. This means we won't be receptive to new information, and we'll likely respond in a way that's not irrational and hurts the situation for both parties. It usually takes conscious effort to be mindful of your thoughts and feelings, listen to them fully and rationally, then respond in a rational way, \ No newline at end of file +We generally handle important conversations *poorly*, strong emotions make people worse at communicating effectively, not better. Our natural instincts are to push back against that communication because it's hard, and it triggers our fight or flight instincts. This means we won't be receptive to new information, and we'll likely respond in a way that's not irrational and hurts the situation for both parties. It usually takes conscious effort to be mindful of your thoughts and feelings, process them fully and rationally, then respond to the other party in a rational way. + +*personal note*: When we get emotional, the *limbic system* in our brain begins to take control. We stop being rational, and we literally do not process things with \ No newline at end of file From cc30bdfe6d4127bf612c71b2b8330c8d00ddaf13 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 17 Jul 2024 16:59:20 -0600 Subject: [PATCH 0079/1027] vault backup: 2024-07-17 16:59:20 --- personal/mental health/Difficult Conversations.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/personal/mental health/Difficult Conversations.md b/personal/mental health/Difficult Conversations.md index 39d7a12..a473e03 100644 --- a/personal/mental health/Difficult Conversations.md +++ b/personal/mental health/Difficult Conversations.md @@ -40,4 +40,4 @@ If you fail to discuss these issues with other people, *those issues will become We generally handle important conversations *poorly*, strong emotions make people worse at communicating effectively, not better. Our natural instincts are to push back against that communication because it's hard, and it triggers our fight or flight instincts. This means we won't be receptive to new information, and we'll likely respond in a way that's not irrational and hurts the situation for both parties. It usually takes conscious effort to be mindful of your thoughts and feelings, process them fully and rationally, then respond to the other party in a rational way. -*personal note*: When we get emotional, the *limbic system* in our brain begins to take control. We stop being rational, and we literally do not process things with \ No newline at end of file +*personal note*: When we get emotional, the *limbic system* in our brain begins to take control. We stop being rational, and we literally do not process things with the same amount of brainpower that we'd use normally. This is why it's so important to recognize when you're emotional, and why it's important to avoid letting conversations get ruled by emotion. \ No newline at end of file From 99b9c4703af403acbd969d46ce3d8cc8cc10cc75 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Thu, 18 Jul 2024 12:21:26 -0600 Subject: [PATCH 0080/1027] vault backup: 2024-07-18 12:21:26 --- personal/mental health/Difficult Conversations.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/personal/mental health/Difficult Conversations.md b/personal/mental health/Difficult Conversations.md index a473e03..a24fe8c 100644 --- a/personal/mental health/Difficult Conversations.md +++ b/personal/mental health/Difficult Conversations.md @@ -40,4 +40,7 @@ If you fail to discuss these issues with other people, *those issues will become We generally handle important conversations *poorly*, strong emotions make people worse at communicating effectively, not better. Our natural instincts are to push back against that communication because it's hard, and it triggers our fight or flight instincts. This means we won't be receptive to new information, and we'll likely respond in a way that's not irrational and hurts the situation for both parties. It usually takes conscious effort to be mindful of your thoughts and feelings, process them fully and rationally, then respond to the other party in a rational way. -*personal note*: When we get emotional, the *limbic system* in our brain begins to take control. We stop being rational, and we literally do not process things with the same amount of brainpower that we'd use normally. This is why it's so important to recognize when you're emotional, and why it's important to avoid letting conversations get ruled by emotion. \ No newline at end of file +*personal note*: When we get emotional, the *limbic system* in our brain begins to take control. We stop being rational, and we literally do not process things with the same amount of brainpower that we'd use normally. This is why it's so important to recognize when you're emotional, and why it's important to avoid letting conversations get ruled by emotion. + +### Dialogue +A healthy conversation should involve two way communication. You're bringing something to the From 7e4cc69f11a0b0b8ddc87bd96ff3222da23864a6 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Thu, 18 Jul 2024 12:26:26 -0600 Subject: [PATCH 0081/1027] vault backup: 2024-07-18 12:26:26 --- personal/mental health/Difficult Conversations.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/personal/mental health/Difficult Conversations.md b/personal/mental health/Difficult Conversations.md index a24fe8c..f62af63 100644 --- a/personal/mental health/Difficult Conversations.md +++ b/personal/mental health/Difficult Conversations.md @@ -15,7 +15,8 @@ Empathy *is not easy*. In a difficult conversation, it's important to try to lea # Crucial Conversations Below are my notes and thoughts from reading the book *Crucial Conversations. -The fundamental idea behind the book is that the "the root cause of many ... human problems lies in how people behave when we disagree about high-stakes, emotional issues." +The fundamental idea behind the book is that: +> The root cause of many ... human problems lies in how people behave when we disagree about high-stakes, emotional issues. You know you're getting into a crucial conversation as opposed to a normal conversation when: - Opinions vary, people feel differently about things. @@ -43,4 +44,6 @@ We generally handle important conversations *poorly*, strong emotions make peopl *personal note*: When we get emotional, the *limbic system* in our brain begins to take control. We stop being rational, and we literally do not process things with the same amount of brainpower that we'd use normally. This is why it's so important to recognize when you're emotional, and why it's important to avoid letting conversations get ruled by emotion. ### Dialogue -A healthy conversation should involve two way communication. You're bringing something to the +A healthy conversation should involve two way communication. You need to make sure the other person is given the space to make themself understood. + +When meaning and ideas can flow freely, people are often more receptive to ideas and change. When everyone can contribute their feelings to the discussion, people involved can form a clearer picture of the circumstances, and when peopl \ No newline at end of file From b4b903ec98584427b0f25361f495c69ca5710537 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Thu, 18 Jul 2024 12:33:32 -0600 Subject: [PATCH 0082/1027] vault backup: 2024-07-18 12:33:32 --- personal/mental health/Difficult Conversations.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/personal/mental health/Difficult Conversations.md b/personal/mental health/Difficult Conversations.md index f62af63..a6f4e37 100644 --- a/personal/mental health/Difficult Conversations.md +++ b/personal/mental health/Difficult Conversations.md @@ -46,4 +46,7 @@ We generally handle important conversations *poorly*, strong emotions make peopl ### Dialogue A healthy conversation should involve two way communication. You need to make sure the other person is given the space to make themself understood. -When meaning and ideas can flow freely, people are often more receptive to ideas and change. When everyone can contribute their feelings to the discussion, people involved can form a clearer picture of the circumstances, and when peopl \ No newline at end of file +When meaning and ideas can flow freely, people are often more receptive to ideas and change. When everyone can contribute their feelings to the discussion, people involved can form a clearer picture of the circumstances, and when everyone has a clear understanding, then they're more likely to personally commit to the outcome of the discussion. + +### Topics +Difficult conversations are most successful when they're focused on a single issue. Because human interactions are inherently complex, focusing a conversation on a single topic takes effort. \ No newline at end of file From b08ba89f257a439c2874ef8dd0f9950f6e64250a Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Thu, 18 Jul 2024 12:38:32 -0600 Subject: [PATCH 0083/1027] vault backup: 2024-07-18 12:38:32 --- personal/mental health/Difficult Conversations.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/personal/mental health/Difficult Conversations.md b/personal/mental health/Difficult Conversations.md index a6f4e37..caefa31 100644 --- a/personal/mental health/Difficult Conversations.md +++ b/personal/mental health/Difficult Conversations.md @@ -49,4 +49,8 @@ A healthy conversation should involve two way communication. You need to make su When meaning and ideas can flow freely, people are often more receptive to ideas and change. When everyone can contribute their feelings to the discussion, people involved can form a clearer picture of the circumstances, and when everyone has a clear understanding, then they're more likely to personally commit to the outcome of the discussion. ### Topics -Difficult conversations are most successful when they're focused on a single issue. Because human interactions are inherently complex, focusing a conversation on a single topic takes effort. \ No newline at end of file +Difficult conversations are most successful when they're focused on a single issue. Because human interactions are inherently complex, focusing a conversation on a single topic takes effort. + +When faced with the time to pick a topic, there are a few common mistakes: +- Picking an easier topic over the hard topic: It's natural to have a bias to choose a topic you think you can win with. That usually means picking an easier topic than the root issue. +- Choosing a more recent event over the most important one: We tend to focus on the most recent event or behavior rather than the one that matters the most. This often happens because you remember recent event \ No newline at end of file From d01cf6a07a50d07b2c09929981023dcddefaac14 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Thu, 18 Jul 2024 12:43:32 -0600 Subject: [PATCH 0084/1027] vault backup: 2024-07-18 12:43:32 --- personal/mental health/Difficult Conversations.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/personal/mental health/Difficult Conversations.md b/personal/mental health/Difficult Conversations.md index caefa31..44f2196 100644 --- a/personal/mental health/Difficult Conversations.md +++ b/personal/mental health/Difficult Conversations.md @@ -53,4 +53,6 @@ Difficult conversations are most successful when they're focused on a single iss When faced with the time to pick a topic, there are a few common mistakes: - Picking an easier topic over the hard topic: It's natural to have a bias to choose a topic you think you can win with. That usually means picking an easier topic than the root issue. -- Choosing a more recent event over the most important one: We tend to focus on the most recent event or behavior rather than the one that matters the most. This often happens because you remember recent event \ No newline at end of file +- Choosing a more recent event over the most important one: We tend to focus on the most recent event or behavior rather than the one that matters the most. This often happens because you remember recent events more clearly, and you don't want to be accused of "dredging up ancient history". +. + Making these mistakes can lead to fairly predictable results: you end up having the wrong conversation and not addressing the actual issue \ No newline at end of file From da1a6b00e5a92e2b62b8ef6c69a15069b9f11f19 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Thu, 18 Jul 2024 12:48:32 -0600 Subject: [PATCH 0085/1027] vault backup: 2024-07-18 12:48:32 --- .../{mental health => interpersonal skills}/Boundaries.md | 0 .../Difficult Conversations.md | 7 +++++-- .../Relationships.md | 0 3 files changed, 5 insertions(+), 2 deletions(-) rename personal/{mental health => interpersonal skills}/Boundaries.md (100%) rename personal/{mental health => interpersonal skills}/Difficult Conversations.md (92%) rename personal/{mental health => interpersonal skills}/Relationships.md (100%) diff --git a/personal/mental health/Boundaries.md b/personal/interpersonal skills/Boundaries.md similarity index 100% rename from personal/mental health/Boundaries.md rename to personal/interpersonal skills/Boundaries.md diff --git a/personal/mental health/Difficult Conversations.md b/personal/interpersonal skills/Difficult Conversations.md similarity index 92% rename from personal/mental health/Difficult Conversations.md rename to personal/interpersonal skills/Difficult Conversations.md index 44f2196..9b1a9ba 100644 --- a/personal/mental health/Difficult Conversations.md +++ b/personal/interpersonal skills/Difficult Conversations.md @@ -54,5 +54,8 @@ Difficult conversations are most successful when they're focused on a single iss When faced with the time to pick a topic, there are a few common mistakes: - Picking an easier topic over the hard topic: It's natural to have a bias to choose a topic you think you can win with. That usually means picking an easier topic than the root issue. - Choosing a more recent event over the most important one: We tend to focus on the most recent event or behavior rather than the one that matters the most. This often happens because you remember recent events more clearly, and you don't want to be accused of "dredging up ancient history". -. - Making these mistakes can lead to fairly predictable results: you end up having the wrong conversation and not addressing the actual issue \ No newline at end of file + +Making these mistakes can lead to fairly predictable results: you end up having the wrong conversation and not addressing the actual issue. A few ways ways to identify that you're having the wrong conversation include: +- Your emotions escalate: When you're having the wrong conversation, even if the conversation is going well, you'll probably begin to notice frustration building as the conversation progresses, because there's something important that needs to be addressed. +- You walk away sp + diff --git a/personal/mental health/Relationships.md b/personal/interpersonal skills/Relationships.md similarity index 100% rename from personal/mental health/Relationships.md rename to personal/interpersonal skills/Relationships.md From f3677bc3e09d7c63d8ebf5645c2eadd5d0f78034 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Thu, 18 Jul 2024 12:53:32 -0600 Subject: [PATCH 0086/1027] vault backup: 2024-07-18 12:53:32 --- personal/interpersonal skills/Difficult Conversations.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/personal/interpersonal skills/Difficult Conversations.md b/personal/interpersonal skills/Difficult Conversations.md index 9b1a9ba..19f1a61 100644 --- a/personal/interpersonal skills/Difficult Conversations.md +++ b/personal/interpersonal skills/Difficult Conversations.md @@ -4,7 +4,6 @@ When beginning a conversation, the goal should be understanding, not problem sol There are a few skills that can massively contribute to a healthy relationship. It takes work and practice to refine them. ## Putting Your Feelings into Words When people are able to find the right images, phrases, metaphors, and words to adequately describe our feelings, there's a kind of "resolution" that comes of it, an easing of tension. In conversation, focusing on finding the right way to explain your feelings can make the conversation more intimate, and more productive, because you can convey your feelings to the other person in a more impactful way. - ## Asking Open-Ended Questions The ability to ask open ended questions can help the other person explore their feelings by asking open-ended questions. This can be done by asking targeted questions, looking to understand their feelings about something, and by making specific statements that encourage the other person to expand on a statement further. ## Expressing Empathy @@ -47,7 +46,6 @@ We generally handle important conversations *poorly*, strong emotions make peopl A healthy conversation should involve two way communication. You need to make sure the other person is given the space to make themself understood. When meaning and ideas can flow freely, people are often more receptive to ideas and change. When everyone can contribute their feelings to the discussion, people involved can form a clearer picture of the circumstances, and when everyone has a clear understanding, then they're more likely to personally commit to the outcome of the discussion. - ### Topics Difficult conversations are most successful when they're focused on a single issue. Because human interactions are inherently complex, focusing a conversation on a single topic takes effort. @@ -56,6 +54,9 @@ When faced with the time to pick a topic, there are a few common mistakes: - Choosing a more recent event over the most important one: We tend to focus on the most recent event or behavior rather than the one that matters the most. This often happens because you remember recent events more clearly, and you don't want to be accused of "dredging up ancient history". Making these mistakes can lead to fairly predictable results: you end up having the wrong conversation and not addressing the actual issue. A few ways ways to identify that you're having the wrong conversation include: -- Your emotions escalate: When you're having the wrong conversation, even if the conversation is going well, you'll probably begin to notice frustration building as the conversation progresses, because there's something important that needs to be addressed. -- You walk away sp +- **Your emotions escalate**: When you're having the wrong conversation, even if the conversation is going well, you'll probably begin to notice frustration building as the conversation progresses, because there's something important that needs to be addressed. +- **You walk away skeptical**: If you find yourself feeling like real change will not take place, or that you got to an agreement but doubt that the changes made will solve the real problem, you might have missed addressing the real problem entirely. +- **You feel deja vu**: If you feel like you're repeating a conversation with the same people again, the problem is not them, it's you. You're having the wrong conversation about the wrong topic, and so the problem isn't fixed. + +One of the best ways to ensure you're talking about the right topic is to get good at noticing when you're actually talking about the wrong one. From 1d8a387de8400a5c77b7f007e5339bc80575f8a9 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Thu, 18 Jul 2024 12:58:32 -0600 Subject: [PATCH 0087/1027] vault backup: 2024-07-18 12:58:32 --- .../interpersonal skills/Difficult Conversations.md | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/personal/interpersonal skills/Difficult Conversations.md b/personal/interpersonal skills/Difficult Conversations.md index 19f1a61..559de2c 100644 --- a/personal/interpersonal skills/Difficult Conversations.md +++ b/personal/interpersonal skills/Difficult Conversations.md @@ -47,16 +47,25 @@ A healthy conversation should involve two way communication. You need to make su When meaning and ideas can flow freely, people are often more receptive to ideas and change. When everyone can contribute their feelings to the discussion, people involved can form a clearer picture of the circumstances, and when everyone has a clear understanding, then they're more likely to personally commit to the outcome of the discussion. ### Topics -Difficult conversations are most successful when they're focused on a single issue. Because human interactions are inherently complex, focusing a conversation on a single topic takes effort. +Difficult conversations are most successful when they're focused on a single issue. Because human interactions are inherently complex, focusing **a conversation on a single topic takes effort**. When faced with the time to pick a topic, there are a few common mistakes: - Picking an easier topic over the hard topic: It's natural to have a bias to choose a topic you think you can win with. That usually means picking an easier topic than the root issue. - Choosing a more recent event over the most important one: We tend to focus on the most recent event or behavior rather than the one that matters the most. This often happens because you remember recent events more clearly, and you don't want to be accused of "dredging up ancient history". -Making these mistakes can lead to fairly predictable results: you end up having the wrong conversation and not addressing the actual issue. A few ways ways to identify that you're having the wrong conversation include: +Making these mistakes can lead to fairly predictable results: you end up having the wrong conversation and not addressing the actual issue. **A few ways ways to identify that you're having the wrong conversation include**: - **Your emotions escalate**: When you're having the wrong conversation, even if the conversation is going well, you'll probably begin to notice frustration building as the conversation progresses, because there's something important that needs to be addressed. - **You walk away skeptical**: If you find yourself feeling like real change will not take place, or that you got to an agreement but doubt that the changes made will solve the real problem, you might have missed addressing the real problem entirely. - **You feel deja vu**: If you feel like you're repeating a conversation with the same people again, the problem is not them, it's you. You're having the wrong conversation about the wrong topic, and so the problem isn't fixed. One of the best ways to ensure you're talking about the right topic is to get good at noticing when you're actually talking about the wrong one. +#### Choosing the right topic +There are a few skills that can help you figure out the right issue, and in turn lead to you having the right conversation. + +**Unbundling** +There are three levels of conversation you may need to have about the issue itself, and a 4th relating to the *process* of the conversation. +- **Content**: The first time a problem comes up, talk about the content - the immediate pain. *If the action or the immediate consequences are the issue, you have a content problem*. This is f + + + From d7b8fcd4e55dd8d7f7f8c4bfed1da929cdbe6ba1 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Thu, 18 Jul 2024 13:03:32 -0600 Subject: [PATCH 0088/1027] vault backup: 2024-07-18 13:03:32 --- personal/interpersonal skills/Difficult Conversations.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/personal/interpersonal skills/Difficult Conversations.md b/personal/interpersonal skills/Difficult Conversations.md index 559de2c..894ff59 100644 --- a/personal/interpersonal skills/Difficult Conversations.md +++ b/personal/interpersonal skills/Difficult Conversations.md @@ -65,7 +65,8 @@ There are a few skills that can help you figure out the right issue, and in turn **Unbundling** There are three levels of conversation you may need to have about the issue itself, and a 4th relating to the *process* of the conversation. -- **Content**: The first time a problem comes up, talk about the content - the immediate pain. *If the action or the immediate consequences are the issue, you have a content problem*. This is f +- **Content**: The first time a problem comes up, talk about the content - the immediate pain. *If the action or the immediate consequences are the issue, you have a content problem*. This is for when it's the first time something has happened. +- **Pattern**: The next time a problem comes up, it means a pattern is starting to develop, or already has. It can be difficult to determine when something's a pattern, and when it's not, but it's important to address patterns early, before they're entrenched, and the problem becomes more difficult to address. A From 2243995e1a07e4303b65bf06f5111ec6aa9feaf1 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Thu, 18 Jul 2024 13:08:32 -0600 Subject: [PATCH 0089/1027] vault backup: 2024-07-18 13:08:32 --- personal/interpersonal skills/Difficult Conversations.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/personal/interpersonal skills/Difficult Conversations.md b/personal/interpersonal skills/Difficult Conversations.md index 894ff59..4595d50 100644 --- a/personal/interpersonal skills/Difficult Conversations.md +++ b/personal/interpersonal skills/Difficult Conversations.md @@ -66,7 +66,10 @@ There are a few skills that can help you figure out the right issue, and in turn **Unbundling** There are three levels of conversation you may need to have about the issue itself, and a 4th relating to the *process* of the conversation. - **Content**: The first time a problem comes up, talk about the content - the immediate pain. *If the action or the immediate consequences are the issue, you have a content problem*. This is for when it's the first time something has happened. -- **Pattern**: The next time a problem comes up, it means a pattern is starting to develop, or already has. It can be difficult to determine when something's a pattern, and when it's not, but it's important to address patterns early, before they're entrenched, and the problem becomes more difficult to address. A +- **Pattern**: The next time a problem comes up, it means a pattern is starting to develop, or already has. It can be difficult to determine when something's a pattern, and when it's not, but it's important to address patterns early, before they're entrenched, and the problem becomes more difficult to address. As a general rule, the first time something happens, it's an incident. The second time, it may be coincidence. The third time, it is a pattern. +- **Relationship**: As problems continue, they can begin to impact the relationship. Relationship issues get to deeper concerns about *trust*, *competence*, or *respect*. For example, we may begin to question whether we can trust a person to keep commitments, or begin to doubt someone's technical abilities. + + From 68fbc4db5e3f7209416bb9cb1cc5dd279736b372 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Thu, 18 Jul 2024 13:13:32 -0600 Subject: [PATCH 0090/1027] vault backup: 2024-07-18 13:13:32 --- personal/interpersonal skills/Difficult Conversations.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/personal/interpersonal skills/Difficult Conversations.md b/personal/interpersonal skills/Difficult Conversations.md index 4595d50..712ddfe 100644 --- a/personal/interpersonal skills/Difficult Conversations.md +++ b/personal/interpersonal skills/Difficult Conversations.md @@ -67,7 +67,7 @@ There are a few skills that can help you figure out the right issue, and in turn There are three levels of conversation you may need to have about the issue itself, and a 4th relating to the *process* of the conversation. - **Content**: The first time a problem comes up, talk about the content - the immediate pain. *If the action or the immediate consequences are the issue, you have a content problem*. This is for when it's the first time something has happened. - **Pattern**: The next time a problem comes up, it means a pattern is starting to develop, or already has. It can be difficult to determine when something's a pattern, and when it's not, but it's important to address patterns early, before they're entrenched, and the problem becomes more difficult to address. As a general rule, the first time something happens, it's an incident. The second time, it may be coincidence. The third time, it is a pattern. -- **Relationship**: As problems continue, they can begin to impact the relationship. Relationship issues get to deeper concerns about *trust*, *competence*, or *respect*. For example, we may begin to question whether we can trust a person to keep commitments, or begin to doubt someone's technical abilities. +- **Relationship**: As problems continue, they can begin to impact the relationship. Relationship issues get to deeper concerns about *trust*, *competence*, or *respect*. For example, we may begin to question whether we can trust a person to keep commitments, or begin to doubt someone's technical abilities. In some cases, a relationship issue can emerge after an isolated incident. From 100087233e43ca38a11e80c2b95b44b856508001 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Thu, 18 Jul 2024 13:23:24 -0600 Subject: [PATCH 0091/1027] vault backup: 2024-07-18 13:23:24 --- personal/interpersonal skills/Difficult Conversations.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/personal/interpersonal skills/Difficult Conversations.md b/personal/interpersonal skills/Difficult Conversations.md index 712ddfe..21b9b45 100644 --- a/personal/interpersonal skills/Difficult Conversations.md +++ b/personal/interpersonal skills/Difficult Conversations.md @@ -67,7 +67,9 @@ There are a few skills that can help you figure out the right issue, and in turn There are three levels of conversation you may need to have about the issue itself, and a 4th relating to the *process* of the conversation. - **Content**: The first time a problem comes up, talk about the content - the immediate pain. *If the action or the immediate consequences are the issue, you have a content problem*. This is for when it's the first time something has happened. - **Pattern**: The next time a problem comes up, it means a pattern is starting to develop, or already has. It can be difficult to determine when something's a pattern, and when it's not, but it's important to address patterns early, before they're entrenched, and the problem becomes more difficult to address. As a general rule, the first time something happens, it's an incident. The second time, it may be coincidence. The third time, it is a pattern. -- **Relationship**: As problems continue, they can begin to impact the relationship. Relationship issues get to deeper concerns about *trust*, *competence*, or *respect*. For example, we may begin to question whether we can trust a person to keep commitments, or begin to doubt someone's technical abilities. In some cases, a relationship issue can emerge after an isolated incident. +- **Relationship**: As problems continue, they can begin to impact the relationship. Relationship issues get to deeper concerns about *trust*, *competence*, or *respect*. For example, we may begin to question whether we can trust a person to keep commitments, or begin to doubt someone's technical abilities. In some cases, a relationship issue can emerge after an extreme isolated incident. + + From fd1263a67f4a9b57c6c26049f240eaaada2ca57f Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Thu, 18 Jul 2024 13:28:24 -0600 Subject: [PATCH 0092/1027] vault backup: 2024-07-18 13:28:24 --- personal/interpersonal skills/Difficult Conversations.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/personal/interpersonal skills/Difficult Conversations.md b/personal/interpersonal skills/Difficult Conversations.md index 21b9b45..4b25c47 100644 --- a/personal/interpersonal skills/Difficult Conversations.md +++ b/personal/interpersonal skills/Difficult Conversations.md @@ -67,7 +67,7 @@ There are a few skills that can help you figure out the right issue, and in turn There are three levels of conversation you may need to have about the issue itself, and a 4th relating to the *process* of the conversation. - **Content**: The first time a problem comes up, talk about the content - the immediate pain. *If the action or the immediate consequences are the issue, you have a content problem*. This is for when it's the first time something has happened. - **Pattern**: The next time a problem comes up, it means a pattern is starting to develop, or already has. It can be difficult to determine when something's a pattern, and when it's not, but it's important to address patterns early, before they're entrenched, and the problem becomes more difficult to address. As a general rule, the first time something happens, it's an incident. The second time, it may be coincidence. The third time, it is a pattern. -- **Relationship**: As problems continue, they can begin to impact the relationship. Relationship issues get to deeper concerns about *trust*, *competence*, or *respect*. For example, we may begin to question whether we can trust a person to keep commitments, or begin to doubt someone's technical abilities. In some cases, a relationship issue can emerge after an extreme isolated incident. +- **Relationship**: As problems continue, they can begin to impact the relationship. Relationship issues get to deeper concerns about *trust*, *competence*, or *respect*. For example, we may begin to question whether we can trust a person to keep commitments, or begin to doubt someone's technical abilities. In some cases, a relationship issue can emerge after an extreme isolated incident. From dec44150a941cc1af3d0c96e7eabb081935b6af3 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Thu, 18 Jul 2024 14:08:24 -0600 Subject: [PATCH 0093/1027] vault backup: 2024-07-18 14:08:24 --- personal/interpersonal skills/Difficult Conversations.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/personal/interpersonal skills/Difficult Conversations.md b/personal/interpersonal skills/Difficult Conversations.md index 4b25c47..ca33611 100644 --- a/personal/interpersonal skills/Difficult Conversations.md +++ b/personal/interpersonal skills/Difficult Conversations.md @@ -69,7 +69,11 @@ There are three levels of conversation you may need to have about the issue itse - **Pattern**: The next time a problem comes up, it means a pattern is starting to develop, or already has. It can be difficult to determine when something's a pattern, and when it's not, but it's important to address patterns early, before they're entrenched, and the problem becomes more difficult to address. As a general rule, the first time something happens, it's an incident. The second time, it may be coincidence. The third time, it is a pattern. - **Relationship**: As problems continue, they can begin to impact the relationship. Relationship issues get to deeper concerns about *trust*, *competence*, or *respect*. For example, we may begin to question whether we can trust a person to keep commitments, or begin to doubt someone's technical abilities. In some cases, a relationship issue can emerge after an extreme isolated incident. - +As a general example, if you have a general problem, you can choose to view it from a few different ways + +Once you've broken the larger bad thing down into discrete issues, it's time to filter out all of the issues you've found through a single question: "*What do I really want?*" + +Figure out what your highest priority is, then choose the issue that stands between you and that objective. From 5e583cad456736124db7efdd6cd63cbedf186094 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Thu, 18 Jul 2024 14:13:24 -0600 Subject: [PATCH 0094/1027] vault backup: 2024-07-18 14:13:24 --- personal/interpersonal skills/Difficult Conversations.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/personal/interpersonal skills/Difficult Conversations.md b/personal/interpersonal skills/Difficult Conversations.md index ca33611..fde39ec 100644 --- a/personal/interpersonal skills/Difficult Conversations.md +++ b/personal/interpersonal skills/Difficult Conversations.md @@ -69,7 +69,7 @@ There are three levels of conversation you may need to have about the issue itse - **Pattern**: The next time a problem comes up, it means a pattern is starting to develop, or already has. It can be difficult to determine when something's a pattern, and when it's not, but it's important to address patterns early, before they're entrenched, and the problem becomes more difficult to address. As a general rule, the first time something happens, it's an incident. The second time, it may be coincidence. The third time, it is a pattern. - **Relationship**: As problems continue, they can begin to impact the relationship. Relationship issues get to deeper concerns about *trust*, *competence*, or *respect*. For example, we may begin to question whether we can trust a person to keep commitments, or begin to doubt someone's technical abilities. In some cases, a relationship issue can emerge after an extreme isolated incident. -As a general example, if you have a general problem, you can choose to view it from a few different ways +As a general example, if you have a general problem, you can choose to view it in a few different ways. The content ("This thing should happen") , the relationship ("I don't trust that you will make this thing happen"), or the pattern ("Issues have occurred around thing multiple times in the past"). You decide which of those issues is most important, and you make sure to discuss that, and leave other conversations for later. Once you've broken the larger bad thing down into discrete issues, it's time to filter out all of the issues you've found through a single question: "*What do I really want?*" From 2476bfe290f41856f64cd0fa5a040dbbf5d0bb50 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Thu, 18 Jul 2024 14:18:24 -0600 Subject: [PATCH 0095/1027] vault backup: 2024-07-18 14:18:24 --- personal/interpersonal skills/Difficult Conversations.md | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/personal/interpersonal skills/Difficult Conversations.md b/personal/interpersonal skills/Difficult Conversations.md index fde39ec..d002aff 100644 --- a/personal/interpersonal skills/Difficult Conversations.md +++ b/personal/interpersonal skills/Difficult Conversations.md @@ -73,9 +73,12 @@ As a general example, if you have a general problem, you can choose to view it i Once you've broken the larger bad thing down into discrete issues, it's time to filter out all of the issues you've found through a single question: "*What do I really want?*" -Figure out what your highest priority is, then choose the issue that stands between you and that objective. - - +**Figure out what your highest priority is, then choose the issue that stands between you and that objective.** + +#### Simplifying your topic +You should be sure you can state simple what you want to discuss. This isn't necessarily about starting the conversation, it's it's about making sure that you could explain, in a few words, what the issue you want to address is. + +It's surprisingly rare for this to happen. People will often leave a problem vague, because the real root issue feels scary, and more diffi From 65e4218995cf380db458deb1fb1b606efd4435f4 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Thu, 18 Jul 2024 14:23:24 -0600 Subject: [PATCH 0096/1027] vault backup: 2024-07-18 14:23:24 --- personal/interpersonal skills/Difficult Conversations.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/personal/interpersonal skills/Difficult Conversations.md b/personal/interpersonal skills/Difficult Conversations.md index d002aff..788c9da 100644 --- a/personal/interpersonal skills/Difficult Conversations.md +++ b/personal/interpersonal skills/Difficult Conversations.md @@ -78,7 +78,7 @@ Once you've broken the larger bad thing down into discrete issues, it's time to #### Simplifying your topic You should be sure you can state simple what you want to discuss. This isn't necessarily about starting the conversation, it's it's about making sure that you could explain, in a few words, what the issue you want to address is. -It's surprisingly rare for this to happen. People will often leave a problem vague, because the real root issue feels scary, and more diffi +It's surprisingly rare for this to happen. People will often leave a problem vague, because the real root issue feels scary, and more difficult to address. Try to separate the parts of your brain that say "What's the issue", and "How can I say the issue". Those are two separate problems, and you shouldn't ignore the real root problem just because you find it scary to explain it. From 32f13f70c915b0b5f03519805594394e469b4d1d Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Thu, 18 Jul 2024 15:31:15 -0600 Subject: [PATCH 0097/1027] vault backup: 2024-07-18 15:31:15 --- personal/interpersonal skills/Difficult Conversations.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/personal/interpersonal skills/Difficult Conversations.md b/personal/interpersonal skills/Difficult Conversations.md index 788c9da..39b133d 100644 --- a/personal/interpersonal skills/Difficult Conversations.md +++ b/personal/interpersonal skills/Difficult Conversations.md @@ -68,6 +68,7 @@ There are three levels of conversation you may need to have about the issue itse - **Content**: The first time a problem comes up, talk about the content - the immediate pain. *If the action or the immediate consequences are the issue, you have a content problem*. This is for when it's the first time something has happened. - **Pattern**: The next time a problem comes up, it means a pattern is starting to develop, or already has. It can be difficult to determine when something's a pattern, and when it's not, but it's important to address patterns early, before they're entrenched, and the problem becomes more difficult to address. As a general rule, the first time something happens, it's an incident. The second time, it may be coincidence. The third time, it is a pattern. - **Relationship**: As problems continue, they can begin to impact the relationship. Relationship issues get to deeper concerns about *trust*, *competence*, or *respect*. For example, we may begin to question whether we can trust a person to keep commitments, or begin to doubt someone's technical abilities. In some cases, a relationship issue can emerge after an extreme isolated incident. +- **Process**: When communication is infrequent, it's important to talk about how you are going to communicate. How are you going to make sure that everyone has a turn to speak? How will you make space for people to pause and think As a general example, if you have a general problem, you can choose to view it in a few different ways. The content ("This thing should happen") , the relationship ("I don't trust that you will make this thing happen"), or the pattern ("Issues have occurred around thing multiple times in the past"). You decide which of those issues is most important, and you make sure to discuss that, and leave other conversations for later. @@ -80,5 +81,9 @@ You should be sure you can state simple what you want to discuss. This isn't nec It's surprisingly rare for this to happen. People will often leave a problem vague, because the real root issue feels scary, and more difficult to address. Try to separate the parts of your brain that say "What's the issue", and "How can I say the issue". Those are two separate problems, and you shouldn't ignore the real root problem just because you find it scary to explain it. +If you can't simplify the topic, you probably aren't ready to have that conversation. Figure out how to simplify it, then you can decide what your next steps are. + +#### Be alert to when the topic changes + From 37132483f24166b59027ab5958e9851c2c38f5b7 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Thu, 18 Jul 2024 15:36:15 -0600 Subject: [PATCH 0098/1027] vault backup: 2024-07-18 15:36:15 --- personal/interpersonal skills/Difficult Conversations.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/personal/interpersonal skills/Difficult Conversations.md b/personal/interpersonal skills/Difficult Conversations.md index 39b133d..bfc53bb 100644 --- a/personal/interpersonal skills/Difficult Conversations.md +++ b/personal/interpersonal skills/Difficult Conversations.md @@ -84,6 +84,3 @@ It's surprisingly rare for this to happen. People will often leave a problem vag If you can't simplify the topic, you probably aren't ready to have that conversation. Figure out how to simplify it, then you can decide what your next steps are. #### Be alert to when the topic changes - - - From 82f9b870ca4e6013475cb3393fee5a9de5f82d63 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Thu, 18 Jul 2024 16:16:15 -0600 Subject: [PATCH 0099/1027] vault backup: 2024-07-18 16:16:15 --- personal/interpersonal skills/Difficult Conversations.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/personal/interpersonal skills/Difficult Conversations.md b/personal/interpersonal skills/Difficult Conversations.md index bfc53bb..7b413e8 100644 --- a/personal/interpersonal skills/Difficult Conversations.md +++ b/personal/interpersonal skills/Difficult Conversations.md @@ -68,7 +68,7 @@ There are three levels of conversation you may need to have about the issue itse - **Content**: The first time a problem comes up, talk about the content - the immediate pain. *If the action or the immediate consequences are the issue, you have a content problem*. This is for when it's the first time something has happened. - **Pattern**: The next time a problem comes up, it means a pattern is starting to develop, or already has. It can be difficult to determine when something's a pattern, and when it's not, but it's important to address patterns early, before they're entrenched, and the problem becomes more difficult to address. As a general rule, the first time something happens, it's an incident. The second time, it may be coincidence. The third time, it is a pattern. - **Relationship**: As problems continue, they can begin to impact the relationship. Relationship issues get to deeper concerns about *trust*, *competence*, or *respect*. For example, we may begin to question whether we can trust a person to keep commitments, or begin to doubt someone's technical abilities. In some cases, a relationship issue can emerge after an extreme isolated incident. -- **Process**: When communication is infrequent, it's important to talk about how you are going to communicate. How are you going to make sure that everyone has a turn to speak? How will you make space for people to pause and think +- **Process**: When communication is infrequent, it's important to talk about how you are going to communicate. How are you going to make sure that everyone has a turn to speak? How will you make space for people to pause and think. As a general example, if you have a general problem, you can choose to view it in a few different ways. The content ("This thing should happen") , the relationship ("I don't trust that you will make this thing happen"), or the pattern ("Issues have occurred around thing multiple times in the past"). You decide which of those issues is most important, and you make sure to discuss that, and leave other conversations for later. From 56cc38e61c74f6edef470a0e7d719aa9b1286893 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Mon, 22 Jul 2024 15:48:27 -0600 Subject: [PATCH 0100/1027] vault backup: 2024-07-22 15:48:27 --- personal/interpersonal skills/Difficult Conversations.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/personal/interpersonal skills/Difficult Conversations.md b/personal/interpersonal skills/Difficult Conversations.md index 7b413e8..6d1d7c9 100644 --- a/personal/interpersonal skills/Difficult Conversations.md +++ b/personal/interpersonal skills/Difficult Conversations.md @@ -83,4 +83,5 @@ It's surprisingly rare for this to happen. People will often leave a problem vag If you can't simplify the topic, you probably aren't ready to have that conversation. Figure out how to simplify it, then you can decide what your next steps are. -#### Be alert to when the topic changes +### Work on yourself first +Remember \ No newline at end of file From 1251446c2ff144a61d943fe07c9ccdb97547e8dc Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Mon, 22 Jul 2024 15:52:30 -0600 Subject: [PATCH 0101/1027] vault backup: 2024-07-22 15:52:30 --- personal/interpersonal skills/Difficult Conversations.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/personal/interpersonal skills/Difficult Conversations.md b/personal/interpersonal skills/Difficult Conversations.md index 6d1d7c9..4c18253 100644 --- a/personal/interpersonal skills/Difficult Conversations.md +++ b/personal/interpersonal skills/Difficult Conversations.md @@ -83,5 +83,7 @@ It's surprisingly rare for this to happen. People will often leave a problem vag If you can't simplify the topic, you probably aren't ready to have that conversation. Figure out how to simplify it, then you can decide what your next steps are. -### Work on yourself first -Remember \ No newline at end of file +#### What do you *reral* +*The only person you can control directly is yourself. * + +Ask yourself \ No newline at end of file From 215b1af5fc96431bc4569c6756e0c2a19f2c660e Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Mon, 22 Jul 2024 15:58:01 -0600 Subject: [PATCH 0102/1027] vault backup: 2024-07-22 15:58:01 --- .../interpersonal skills/Difficult Conversations.md | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/personal/interpersonal skills/Difficult Conversations.md b/personal/interpersonal skills/Difficult Conversations.md index 4c18253..f51d39c 100644 --- a/personal/interpersonal skills/Difficult Conversations.md +++ b/personal/interpersonal skills/Difficult Conversations.md @@ -83,7 +83,14 @@ It's surprisingly rare for this to happen. People will often leave a problem vag If you can't simplify the topic, you probably aren't ready to have that conversation. Figure out how to simplify it, then you can decide what your next steps are. -#### What do you *reral* -*The only person you can control directly is yourself. * +#### What do you *really want*? +*The only person you can control directly is yourself.* -Ask yourself \ No newline at end of file +When having a discussion, you can often be driven off course by emotion, or make unhealthy decisions. + +Ask yourself: +- "What do I really want for myself?" +- "What do I really want for others?" +- "What do I really want for the relationship?" + +### How to Stay in Dialogue When You're Angry, Scared, or Hurt \ No newline at end of file From 6ae4d334ebe13a5fbff0e95f7cc0732cab95e747 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Mon, 22 Jul 2024 16:03:01 -0600 Subject: [PATCH 0103/1027] vault backup: 2024-07-22 16:03:01 --- personal/interpersonal skills/Difficult Conversations.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/personal/interpersonal skills/Difficult Conversations.md b/personal/interpersonal skills/Difficult Conversations.md index f51d39c..286a5cd 100644 --- a/personal/interpersonal skills/Difficult Conversations.md +++ b/personal/interpersonal skills/Difficult Conversations.md @@ -93,4 +93,7 @@ Ask yourself: - "What do I really want for others?" - "What do I really want for the relationship?" -### How to Stay in Dialogue When You're Angry, Scared, or Hurt \ No newline at end of file +### How to Stay in Dialogue When You're Angry, Scared, or Hurt +Assumptions are incredibly dangerous. DOn't assume the feelings of others, and don't assume that your emotions are the only valid perspective on the situation. + +*When you let your emotions control your behavior, it can degrade the relationship.* \ No newline at end of file From 617429715ed46acfe380e99a9bc4d532527ec456 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Fri, 26 Jul 2024 10:14:31 -0600 Subject: [PATCH 0104/1027] vault backup: 2024-07-26 10:14:31 --- personal/mental health/Untitled.md | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 personal/mental health/Untitled.md diff --git a/personal/mental health/Untitled.md b/personal/mental health/Untitled.md new file mode 100644 index 0000000..3970498 --- /dev/null +++ b/personal/mental health/Untitled.md @@ -0,0 +1,9 @@ +# Mindsets of anxiety +## Perfectionism + +## Over-responsibility + +## Intolerance of uncertainty + +"What about this is *actually* dangerous?" +The amygdala creates the train of thought, "Is it dangerous, and how can we handle that?" \ No newline at end of file From 57abbee0b8e1fcfa7680d953266da664d8e0abf3 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Fri, 26 Jul 2024 10:19:31 -0600 Subject: [PATCH 0105/1027] vault backup: 2024-07-26 10:19:31 --- personal/mental health/Untitled.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/personal/mental health/Untitled.md b/personal/mental health/Untitled.md index 3970498..4b2896f 100644 --- a/personal/mental health/Untitled.md +++ b/personal/mental health/Untitled.md @@ -6,4 +6,9 @@ ## Intolerance of uncertainty "What about this is *actually* dangerous?" -The amygdala creates the train of thought, "Is it dangerous, and how can we handle that?" \ No newline at end of file +The amygdala is a primal part of the brain, a survival .... creates the train of thought, "Is it dangerous, and how can we handle that?" + +From there, we can go into a safety strategy (usually avoidance), or we lean into the stressor. If you go into a safety strategy, then it's sort of "recorded", and so you've re-enforced the anxiety. + +How do we break that cycle of anxiety? +- Become aware of what your amygdala is detecting, is it a thought, or physical sensation? \ No newline at end of file From 09bb4bf2d19653de25705ae1504d72de2cb7cc3b Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Fri, 26 Jul 2024 10:24:31 -0600 Subject: [PATCH 0106/1027] vault backup: 2024-07-26 10:24:31 --- personal/mental health/Untitled.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/personal/mental health/Untitled.md b/personal/mental health/Untitled.md index 4b2896f..f612bc7 100644 --- a/personal/mental health/Untitled.md +++ b/personal/mental health/Untitled.md @@ -11,4 +11,6 @@ The amygdala is a primal part of the brain, a survival .... creates the train of From there, we can go into a safety strategy (usually avoidance), or we lean into the stressor. If you go into a safety strategy, then it's sort of "recorded", and so you've re-enforced the anxiety. How do we break that cycle of anxiety? -- Become aware of what your amygdala is detecting, is it a thought, or physical sensation? \ No newline at end of file +- Become aware of what your amygdala is detecting, is it a thought, or physical sensation? + +Sometimes when we get very anxious, it can overwhelm our coping mechanisms. \ No newline at end of file From f2f0d536036cef391406a9216bbf546848687bf0 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Fri, 26 Jul 2024 10:29:31 -0600 Subject: [PATCH 0107/1027] vault backup: 2024-07-26 10:29:31 --- personal/mental health/Untitled.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/personal/mental health/Untitled.md b/personal/mental health/Untitled.md index f612bc7..323abfe 100644 --- a/personal/mental health/Untitled.md +++ b/personal/mental health/Untitled.md @@ -13,4 +13,5 @@ From there, we can go into a safety strategy (usually avoidance), or we lean int How do we break that cycle of anxiety? - Become aware of what your amygdala is detecting, is it a thought, or physical sensation? -Sometimes when we get very anxious, it can overwhelm our coping mechanisms. \ No newline at end of file +Sometimes when we get very anxious, it can overwhelm our coping mechanisms. + From c3ef730637bc8d5edce0e5b5c9d1ec84229a109b Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Fri, 26 Jul 2024 10:59:31 -0600 Subject: [PATCH 0108/1027] vault backup: 2024-07-26 10:59:31 --- personal/mental health/Untitled.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/personal/mental health/Untitled.md b/personal/mental health/Untitled.md index 323abfe..667064a 100644 --- a/personal/mental health/Untitled.md +++ b/personal/mental health/Untitled.md @@ -5,6 +5,13 @@ ## Intolerance of uncertainty + + - - - + + + + + "What about this is *actually* dangerous?" The amygdala is a primal part of the brain, a survival .... creates the train of thought, "Is it dangerous, and how can we handle that?" @@ -15,3 +22,4 @@ How do we break that cycle of anxiety? Sometimes when we get very anxious, it can overwhelm our coping mechanisms. +The Safe Calm Place \ No newline at end of file From 151cc3655b49aba852a9b03a88442f2bb1ef1ebd Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 31 Jul 2024 12:17:17 -0600 Subject: [PATCH 0109/1027] vault backup: 2024-07-31 12:17:17 --- personal/mental health/Anxiety.md | 24 ++++++++++++++++++++++++ personal/mental health/Untitled.md | 25 ------------------------- 2 files changed, 24 insertions(+), 25 deletions(-) create mode 100644 personal/mental health/Anxiety.md delete mode 100644 personal/mental health/Untitled.md diff --git a/personal/mental health/Anxiety.md b/personal/mental health/Anxiety.md new file mode 100644 index 0000000..0fae7ea --- /dev/null +++ b/personal/mental health/Anxiety.md @@ -0,0 +1,24 @@ +# Mindsets of anxiety +There are a few general ways that anxiety can manifest. +- Perfectionism +- Over-responsibility +- Intolerance of uncertainty + + +When you're feeling anxious about something, it's important to ask yourself, "What about this is *actually* dangerous?" + +The amygdala is a primal part of the brain, an important part of your survival instincts as a human. The role of the amygdala is to create the train of thought: +1. Is it dangerous? +2. How can we handle it? +From there, we can: +- Go into a safety strategy (usually avoidance, something from the broader category of fight, flight, or freeze) +- Lean into the stressor. + +When you begin acting on a safety strategy, your brain records the event, and your amygdala will become more sensitive to it, triggering those feelings of anxiety. + +How do we break that cycle of anxiety? +- Become aware of what your amygdala is detecting, is it a thought, or physical sensation? + +Sometimes when we get very anxious, it can overwhelm our coping mechanisms. + +The Safe Calm Place \ No newline at end of file diff --git a/personal/mental health/Untitled.md b/personal/mental health/Untitled.md deleted file mode 100644 index 667064a..0000000 --- a/personal/mental health/Untitled.md +++ /dev/null @@ -1,25 +0,0 @@ -# Mindsets of anxiety -## Perfectionism - -## Over-responsibility - -## Intolerance of uncertainty - - - - - - - - - - - -"What about this is *actually* dangerous?" -The amygdala is a primal part of the brain, a survival .... creates the train of thought, "Is it dangerous, and how can we handle that?" - -From there, we can go into a safety strategy (usually avoidance), or we lean into the stressor. If you go into a safety strategy, then it's sort of "recorded", and so you've re-enforced the anxiety. - -How do we break that cycle of anxiety? -- Become aware of what your amygdala is detecting, is it a thought, or physical sensation? - -Sometimes when we get very anxious, it can overwhelm our coping mechanisms. - -The Safe Calm Place \ No newline at end of file From 1a325a45c2519b0ac96fef9364148c821b0df5a0 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 31 Jul 2024 12:22:18 -0600 Subject: [PATCH 0110/1027] vault backup: 2024-07-31 12:22:18 --- personal/interpersonal skills/Difficult Conversations.md | 5 ++++- personal/mental health/Mindfulness.md | 7 ++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/personal/interpersonal skills/Difficult Conversations.md b/personal/interpersonal skills/Difficult Conversations.md index 286a5cd..6e810f5 100644 --- a/personal/interpersonal skills/Difficult Conversations.md +++ b/personal/interpersonal skills/Difficult Conversations.md @@ -96,4 +96,7 @@ Ask yourself: ### How to Stay in Dialogue When You're Angry, Scared, or Hurt Assumptions are incredibly dangerous. DOn't assume the feelings of others, and don't assume that your emotions are the only valid perspective on the situation. -*When you let your emotions control your behavior, it can degrade the relationship.* \ No newline at end of file +*When you let your emotions control your behavior, it can degrade the relationship.* + +When you notice that your emotions are rising, don't try to stop them from happening or showing, instead, think through your emotions and try to process them. It's not easy to re-think your emotions into a more logical state of being, but it can be done. + diff --git a/personal/mental health/Mindfulness.md b/personal/mental health/Mindfulness.md index de61737..6bf3406 100644 --- a/personal/mental health/Mindfulness.md +++ b/personal/mental health/Mindfulness.md @@ -22,4 +22,9 @@ This exercise is a form of Acceptance and Commitment Therapy (ACT). It's useful - E - Engage with the environment. Ask yourself: - What am I noticing around me? - What am I doing? - - Who's around me? \ No newline at end of file + - Who's around me? + +## Meditation +There are a few different ways to meditate, but the below were recommended by my therapist: +- https://www.youtube.com/watch?v=ssss7V1_eyA (5 min) +- https://www.youtube.com/watch?v=-j4AyHpXQ8E (15 min) \ No newline at end of file From 80e7a61f40e070879c368d9dcc75410511822179 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 31 Jul 2024 12:27:17 -0600 Subject: [PATCH 0111/1027] vault backup: 2024-07-31 12:27:17 --- personal/interpersonal skills/Difficult Conversations.md | 1 + 1 file changed, 1 insertion(+) diff --git a/personal/interpersonal skills/Difficult Conversations.md b/personal/interpersonal skills/Difficult Conversations.md index 6e810f5..8fe1ca8 100644 --- a/personal/interpersonal skills/Difficult Conversations.md +++ b/personal/interpersonal skills/Difficult Conversations.md @@ -100,3 +100,4 @@ Assumptions are incredibly dangerous. DOn't assume the feelings of others, and d When you notice that your emotions are rising, don't try to stop them from happening or showing, instead, think through your emotions and try to process them. It's not easy to re-think your emotions into a more logical state of being, but it can be done. + From a10c49fa05a2ce824db226cc691448acdae05bac Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 31 Jul 2024 15:56:12 -0600 Subject: [PATCH 0112/1027] vault backup: 2024-07-31 15:56:12 --- personal/interpersonal skills/Difficult Conversations.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/personal/interpersonal skills/Difficult Conversations.md b/personal/interpersonal skills/Difficult Conversations.md index 8fe1ca8..8f55ae6 100644 --- a/personal/interpersonal skills/Difficult Conversations.md +++ b/personal/interpersonal skills/Difficult Conversations.md @@ -100,4 +100,5 @@ Assumptions are incredibly dangerous. DOn't assume the feelings of others, and d When you notice that your emotions are rising, don't try to stop them from happening or showing, instead, think through your emotions and try to process them. It's not easy to re-think your emotions into a more logical state of being, but it can be done. - +#### Stories Create Feelings +In many instances, conflict comes from the fact that each person's story, or the way they view events, is incomplete, or warped by emotion. If you can recognize this in yourself, and in other people, you can get in the habit of trying to gain a greater understanding of each other, and figure out what's missing, what's making that friction. Telling a story can help shift the other person's emotions, and hearing a story can help us better re-evauluate our own story and emotions. From e2b2f717c4adcde91395747e73dc9ffc2b06b43e Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 31 Jul 2024 16:01:14 -0600 Subject: [PATCH 0113/1027] vault backup: 2024-07-31 16:01:14 --- personal/interpersonal skills/Difficult Conversations.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/personal/interpersonal skills/Difficult Conversations.md b/personal/interpersonal skills/Difficult Conversations.md index 8f55ae6..f78e7fd 100644 --- a/personal/interpersonal skills/Difficult Conversations.md +++ b/personal/interpersonal skills/Difficult Conversations.md @@ -101,4 +101,6 @@ Assumptions are incredibly dangerous. DOn't assume the feelings of others, and d When you notice that your emotions are rising, don't try to stop them from happening or showing, instead, think through your emotions and try to process them. It's not easy to re-think your emotions into a more logical state of being, but it can be done. #### Stories Create Feelings -In many instances, conflict comes from the fact that each person's story, or the way they view events, is incomplete, or warped by emotion. If you can recognize this in yourself, and in other people, you can get in the habit of trying to gain a greater understanding of each other, and figure out what's missing, what's making that friction. Telling a story can help shift the other person's emotions, and hearing a story can help us better re-evauluate our own story and emotions. +In many instances, conflict comes from the fact that each person's story, or the way they view events, is incomplete, or warped by emotion. If you can recognize this in yourself, and in other people, you can get in the habit of trying to gain a greater understanding of each other, and figure out what's missing, what's making that friction. Telling a story can help shift the other person's emotions, and hearing a story can help us better re-evaluate our own story and emotions. + +*personal note*: At this point in the book, I'm realizing that when we don't properly understand the other person and we don't communicate about issues, we can begin to take these points of conflict, and start to attribute them to deeper traits about the other person. EG, you could begin to think of them as "a jealous person", or "a *bad* person", when in reality, they aren't a jealous person, or a bad person (few people are), you just lack the full context. From f6913064e27efaf3fef07f38663b4041df133f34 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 31 Jul 2024 16:06:13 -0600 Subject: [PATCH 0114/1027] vault backup: 2024-07-31 16:06:13 --- personal/interpersonal skills/Difficult Conversations.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/personal/interpersonal skills/Difficult Conversations.md b/personal/interpersonal skills/Difficult Conversations.md index f78e7fd..abb2aeb 100644 --- a/personal/interpersonal skills/Difficult Conversations.md +++ b/personal/interpersonal skills/Difficult Conversations.md @@ -104,3 +104,5 @@ When you notice that your emotions are rising, don't try to stop them from happe In many instances, conflict comes from the fact that each person's story, or the way they view events, is incomplete, or warped by emotion. If you can recognize this in yourself, and in other people, you can get in the habit of trying to gain a greater understanding of each other, and figure out what's missing, what's making that friction. Telling a story can help shift the other person's emotions, and hearing a story can help us better re-evaluate our own story and emotions. *personal note*: At this point in the book, I'm realizing that when we don't properly understand the other person and we don't communicate about issues, we can begin to take these points of conflict, and start to attribute them to deeper traits about the other person. EG, you could begin to think of them as "a jealous person", or "a *bad* person", when in reality, they aren't a jealous person, or a bad person (few people are), you just lack the full context. + +We tell ourselves stories, even when we don't realize it. And fairly often, these stories *are not correct*. When you believe you are at risk of something, you'll often instantly create a story, or a perspective that protects your ego. "I didn't do anything wrong", or "That person is just an x". From 989e6983747a0e9efe278af0a503972e4d344114 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 31 Jul 2024 16:11:13 -0600 Subject: [PATCH 0115/1027] vault backup: 2024-07-31 16:11:13 --- personal/interpersonal skills/Difficult Conversations.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/personal/interpersonal skills/Difficult Conversations.md b/personal/interpersonal skills/Difficult Conversations.md index abb2aeb..0276596 100644 --- a/personal/interpersonal skills/Difficult Conversations.md +++ b/personal/interpersonal skills/Difficult Conversations.md @@ -105,4 +105,8 @@ In many instances, conflict comes from the fact that each person's story, or the *personal note*: At this point in the book, I'm realizing that when we don't properly understand the other person and we don't communicate about issues, we can begin to take these points of conflict, and start to attribute them to deeper traits about the other person. EG, you could begin to think of them as "a jealous person", or "a *bad* person", when in reality, they aren't a jealous person, or a bad person (few people are), you just lack the full context. -We tell ourselves stories, even when we don't realize it. And fairly often, these stories *are not correct*. When you believe you are at risk of something, you'll often instantly create a story, or a perspective that protects your ego. "I didn't do anything wrong", or "That person is just an x". +We tell ourselves stories, even when we don't realize it. And fairly often, these stories *are not correct*. When you believe you are at risk of something, you'll often instantly create a story, or a perspective that's simplistic, and usually harmful. "I didn't do anything wrong", or "That person is just an x", or "It was all my fault", or "I deserved that". These stories are lacking the nuance real life has, and prevent you from addressing the issue in a thoughtful way. + +However, any set of facts can be used to create an infinite number of stories, so it's up to you to find the right story to describe the situation. + +One way to stop this \ No newline at end of file From 004194284716f67ae819cc45789fef11a87232a9 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 31 Jul 2024 16:16:13 -0600 Subject: [PATCH 0116/1027] vault backup: 2024-07-31 16:16:13 --- .../interpersonal skills/Difficult Conversations.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/personal/interpersonal skills/Difficult Conversations.md b/personal/interpersonal skills/Difficult Conversations.md index 0276596..e88abd8 100644 --- a/personal/interpersonal skills/Difficult Conversations.md +++ b/personal/interpersonal skills/Difficult Conversations.md @@ -109,4 +109,12 @@ We tell ourselves stories, even when we don't realize it. And fairly often, thes However, any set of facts can be used to create an infinite number of stories, so it's up to you to find the right story to describe the situation. -One way to stop this \ No newline at end of file +One way to do this is to slow down, and retrace your actions: +- **Act**: Notice your behavior; ask "Am I *acting* out my concerns rather then *talking* them out?*" +- **Feel**: Put your feelings into words; ask "What emotions are encouraging me to act this way?" +- **Tell story**: Analyze your stories; ask "What story is creating these emotions?" +- **See/hear**: Get back to the facts; Ask "What have I seen or heard that *supports* this story? What have I seen or heard that *conflicts* with this story?" + +Some ways to know if you need to stop, slow down, and retrace your actions include: +1. **Bad results.** You're not happy with the outcome of the discussion, you feel like it didn't properly address the issue. +2. **Tough emotions.** You're feeling strong, negative, emotions. If you're angry, stop, slow down, and ask *why*. Why are you feeling this way? Why are you acting this way? Are these feelings helping you address the convera \ No newline at end of file From 20df8089716bdc1d5838ab49132f9da5322d5cf6 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 31 Jul 2024 16:22:12 -0600 Subject: [PATCH 0117/1027] vault backup: 2024-07-31 16:22:12 --- personal/interpersonal skills/Difficult Conversations.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/personal/interpersonal skills/Difficult Conversations.md b/personal/interpersonal skills/Difficult Conversations.md index e88abd8..73189ce 100644 --- a/personal/interpersonal skills/Difficult Conversations.md +++ b/personal/interpersonal skills/Difficult Conversations.md @@ -117,4 +117,7 @@ One way to do this is to slow down, and retrace your actions: Some ways to know if you need to stop, slow down, and retrace your actions include: 1. **Bad results.** You're not happy with the outcome of the discussion, you feel like it didn't properly address the issue. -2. **Tough emotions.** You're feeling strong, negative, emotions. If you're angry, stop, slow down, and ask *why*. Why are you feeling this way? Why are you acting this way? Are these feelings helping you address the convera \ No newline at end of file +2. **Tough emotions.** You're feeling strong, negative, emotions. If you're angry, stop, slow down, and ask *why*. Why are you feeling this way? Why are you acting this way? Are these feelings helping you address the conversation better? Aggressive behavior is rarely the right answer. + +#### Put your feelings into words +Most individuals are shockingly bad at properly naming their emotions. They might be able to categorize them into broad categories like "bad", or "angry", but most people couldn't properly recognize, then verbalize that they're feeling a mixture of embarrassment or surprise. The distinction between knowing that you're feeling angry, and knowing that you're just embarrassed and startled might not seem big, but it's a big \ No newline at end of file From d4b80bc02a99abe9ee8f5268ddae2e0392cfc024 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 31 Jul 2024 16:27:12 -0600 Subject: [PATCH 0118/1027] vault backup: 2024-07-31 16:27:12 --- personal/interpersonal skills/Difficult Conversations.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/personal/interpersonal skills/Difficult Conversations.md b/personal/interpersonal skills/Difficult Conversations.md index 73189ce..1f2235b 100644 --- a/personal/interpersonal skills/Difficult Conversations.md +++ b/personal/interpersonal skills/Difficult Conversations.md @@ -120,4 +120,6 @@ Some ways to know if you need to stop, slow down, and retrace your actions inclu 2. **Tough emotions.** You're feeling strong, negative, emotions. If you're angry, stop, slow down, and ask *why*. Why are you feeling this way? Why are you acting this way? Are these feelings helping you address the conversation better? Aggressive behavior is rarely the right answer. #### Put your feelings into words -Most individuals are shockingly bad at properly naming their emotions. They might be able to categorize them into broad categories like "bad", or "angry", but most people couldn't properly recognize, then verbalize that they're feeling a mixture of embarrassment or surprise. The distinction between knowing that you're feeling angry, and knowing that you're just embarrassed and startled might not seem big, but it's a big \ No newline at end of file +Most individuals are shockingly bad at properly naming their emotions. They might be able to categorize them into broad categories like "bad", or "angry", but most people couldn't properly recognize, then verbalize that they're feeling a mixture of embarrassment or surprise. The distinction between knowing that you're feeling angry, and knowing that you're just embarrassed and startled might not seem big, but it has a real impact on the way you act, and the way other people will respond to you telling them that you're angry. + +When you take the time to properly identify what you're feeling, and why, it creates a degree of separation between \ No newline at end of file From 8181385fe567c025e76f282aa8adf658557a1964 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 31 Jul 2024 16:33:11 -0600 Subject: [PATCH 0119/1027] vault backup: 2024-07-31 16:33:11 --- personal/interpersonal skills/Difficult Conversations.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/personal/interpersonal skills/Difficult Conversations.md b/personal/interpersonal skills/Difficult Conversations.md index 1f2235b..2452307 100644 --- a/personal/interpersonal skills/Difficult Conversations.md +++ b/personal/interpersonal skills/Difficult Conversations.md @@ -122,4 +122,4 @@ Some ways to know if you need to stop, slow down, and retrace your actions inclu #### Put your feelings into words Most individuals are shockingly bad at properly naming their emotions. They might be able to categorize them into broad categories like "bad", or "angry", but most people couldn't properly recognize, then verbalize that they're feeling a mixture of embarrassment or surprise. The distinction between knowing that you're feeling angry, and knowing that you're just embarrassed and startled might not seem big, but it has a real impact on the way you act, and the way other people will respond to you telling them that you're angry. -When you take the time to properly identify what you're feeling, and why, it creates a degree of separation between \ No newline at end of file +When you take the time to properly identify what you're feeling, and why, it creates a degree of separation between you and the emotion. This can help you more honestly look at both sides of the story. \ No newline at end of file From 151df7b2d0e7ec7cc1b8aa766fd7c8efd09f4afd Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Thu, 1 Aug 2024 14:57:36 -0600 Subject: [PATCH 0120/1027] vault backup: 2024-08-01 14:57:36 --- notes/ANS Theory.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 notes/ANS Theory.md diff --git a/notes/ANS Theory.md b/notes/ANS Theory.md new file mode 100644 index 0000000..dadb705 --- /dev/null +++ b/notes/ANS Theory.md @@ -0,0 +1 @@ + From 4f4c6d13fed366606a44489bb580db66ede93302 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Thu, 1 Aug 2024 15:31:21 -0600 Subject: [PATCH 0121/1027] vault backup: 2024-08-01 15:31:21 --- notes/ANS Theory.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/notes/ANS Theory.md b/notes/ANS Theory.md index dadb705..509ee16 100644 --- a/notes/ANS Theory.md +++ b/notes/ANS Theory.md @@ -1 +1,3 @@ + +In standard numeral systems \ No newline at end of file From 198bf3d194d0742361d6099d67c7c0a6f48ffadb Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Thu, 1 Aug 2024 15:36:21 -0600 Subject: [PATCH 0122/1027] vault backup: 2024-08-01 15:36:21 --- notes/ANS Theory.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/notes/ANS Theory.md b/notes/ANS Theory.md index 509ee16..e3f6cc6 100644 --- a/notes/ANS Theory.md +++ b/notes/ANS Theory.md @@ -1,3 +1,7 @@ -In standard numeral systems \ No newline at end of file +In standard numeral systems, different digits are treated as containing the same amount of information. A 7 stores the same amount of info as a 9, which stores the same amount of info as a 1. + +This makes the amount of information a single digit stores *uniform* across all digits. However, that's far from the most efficient way to represent most datasets. + +ANS theory is based around the idea that \ No newline at end of file From 92fd6c325e390867edf35a0a3c78ba7340d9ff58 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Thu, 1 Aug 2024 15:41:21 -0600 Subject: [PATCH 0123/1027] vault backup: 2024-08-01 15:41:21 --- notes/ANS Theory.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/notes/ANS Theory.md b/notes/ANS Theory.md index e3f6cc6..f4299ac 100644 --- a/notes/ANS Theory.md +++ b/notes/ANS Theory.md @@ -4,4 +4,4 @@ In standard numeral systems, different digits are treated as containing the same This makes the amount of information a single digit stores *uniform* across all digits. However, that's far from the most efficient way to represent most datasets. -ANS theory is based around the idea that \ No newline at end of file +ANS theory is based around the idea that digits that occur more often can be stored in a way that requires less information, and digits that occur less often can be stored using more information. \ No newline at end of file From f6b5c45237b61b35ae4ee598e52858fc50769e4d Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Thu, 1 Aug 2024 15:46:21 -0600 Subject: [PATCH 0124/1027] vault backup: 2024-08-01 15:46:21 --- notes/ANS Theory.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/notes/ANS Theory.md b/notes/ANS Theory.md index f4299ac..b5fc7a3 100644 --- a/notes/ANS Theory.md +++ b/notes/ANS Theory.md @@ -4,4 +4,6 @@ In standard numeral systems, different digits are treated as containing the same This makes the amount of information a single digit stores *uniform* across all digits. However, that's far from the most efficient way to represent most datasets. -ANS theory is based around the idea that digits that occur more often can be stored in a way that requires less information, and digits that occur less often can be stored using more information. \ No newline at end of file +ANS theory is based around the idea that digits that occur more often can be stored in a way that requires less information, and digits that occur less often can be stored using more information. + +Taking a look at the standard binary numeral system, there are two digits in the set (0 and 1). Given a natural number represented in binary, eg `1010`, there are two different ways to *add information to that number* From f79e7d72faada163e3e9dbdf3266598208cd941c Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Thu, 1 Aug 2024 15:51:21 -0600 Subject: [PATCH 0125/1027] vault backup: 2024-08-01 15:51:21 --- notes/ANS Theory.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/notes/ANS Theory.md b/notes/ANS Theory.md index b5fc7a3..b3048ab 100644 --- a/notes/ANS Theory.md +++ b/notes/ANS Theory.md @@ -6,4 +6,6 @@ This makes the amount of information a single digit stores *uniform* across all ANS theory is based around the idea that digits that occur more often can be stored in a way that requires less information, and digits that occur less often can be stored using more information. -Taking a look at the standard binary numeral system, there are two digits in the set (0 and 1). Given a natural number represented in binary, eg `1010`, there are two different ways to *add information to that number* +Taking a look at the standard binary numeral system, there are two digits in the set (0 and 1). Given a natural number represented in binary, eg `1010`, there are two different ways to *add information to that number*: +1. We can add a digit to the most significant position. As an example, adding a `1` to the above value would result in `11010`. Doing this means that the added digit stores information about *large ranges*. In the provided example, this means that setting that digit changes the value by 16. +2. We can add a digit to the least significant position. As an example, adding a `1` to the above value would result in `10101`. Changing the added digit will only change the value by 16. From 017bee65bfa0ec2bcce89d71dec6d7b5363f182d Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Thu, 1 Aug 2024 15:57:07 -0600 Subject: [PATCH 0126/1027] vault backup: 2024-08-01 15:57:07 --- notes/ANS Theory.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/notes/ANS Theory.md b/notes/ANS Theory.md index b3048ab..a65badb 100644 --- a/notes/ANS Theory.md +++ b/notes/ANS Theory.md @@ -8,4 +8,4 @@ ANS theory is based around the idea that digits that occur more often can be sto Taking a look at the standard binary numeral system, there are two digits in the set (0 and 1). Given a natural number represented in binary, eg `1010`, there are two different ways to *add information to that number*: 1. We can add a digit to the most significant position. As an example, adding a `1` to the above value would result in `11010`. Doing this means that the added digit stores information about *large ranges*. In the provided example, this means that setting that digit changes the value by 16. -2. We can add a digit to the least significant position. As an example, adding a `1` to the above value would result in `10101`. Changing the added digit will only change the value by 16. +2. We can add a digit to the least significant position. As an example, adding a `1` to the above value would result in `10101`. Changing the added digit will only change the resulting natural number by 1. From 2b7e90fbc7cb4aa8e2e612d6617d70bbf9c27918 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Thu, 1 Aug 2024 16:02:07 -0600 Subject: [PATCH 0127/1027] vault backup: 2024-08-01 16:02:07 --- notes/ANS Theory.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/notes/ANS Theory.md b/notes/ANS Theory.md index a65badb..9844c7e 100644 --- a/notes/ANS Theory.md +++ b/notes/ANS Theory.md @@ -9,3 +9,5 @@ ANS theory is based around the idea that digits that occur more often can be sto Taking a look at the standard binary numeral system, there are two digits in the set (0 and 1). Given a natural number represented in binary, eg `1010`, there are two different ways to *add information to that number*: 1. We can add a digit to the most significant position. As an example, adding a `1` to the above value would result in `11010`. Doing this means that the added digit stores information about *large ranges*. In the provided example, this means that setting that digit changes the value by 16. 2. We can add a digit to the least significant position. As an example, adding a `1` to the above value would result in `10101`. Changing the added digit will only change the resulting natural number by 1. + +In a standard binary system, the first bit represents the From 473102f9bf4e261115126bb54265cd5f57df0b4f Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Thu, 1 Aug 2024 16:07:07 -0600 Subject: [PATCH 0128/1027] vault backup: 2024-08-01 16:07:07 --- notes/ANS Theory.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/notes/ANS Theory.md b/notes/ANS Theory.md index 9844c7e..f7baf71 100644 --- a/notes/ANS Theory.md +++ b/notes/ANS Theory.md @@ -10,4 +10,4 @@ Taking a look at the standard binary numeral system, there are two digits in the 1. We can add a digit to the most significant position. As an example, adding a `1` to the above value would result in `11010`. Doing this means that the added digit stores information about *large ranges*. In the provided example, this means that setting that digit changes the value by 16. 2. We can add a digit to the least significant position. As an example, adding a `1` to the above value would result in `10101`. Changing the added digit will only change the resulting natural number by 1. -In a standard binary system, the first bit represents the +Given that $x$ represents a natural number, and $s$ is the digit we're adding. In a standard binary system, adding $s$ to the least significant position means that in the new number $x$ (before the addition) now represents the Nth appearance of an even (when $s = 0$ ), or odd (when ) From f53ec50cf0eb87678df637b703c97e8a53a7f646 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Thu, 1 Aug 2024 16:13:11 -0600 Subject: [PATCH 0129/1027] vault backup: 2024-08-01 16:13:11 --- notes/ANS Theory.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/notes/ANS Theory.md b/notes/ANS Theory.md index f7baf71..33ad72d 100644 --- a/notes/ANS Theory.md +++ b/notes/ANS Theory.md @@ -10,4 +10,4 @@ Taking a look at the standard binary numeral system, there are two digits in the 1. We can add a digit to the most significant position. As an example, adding a `1` to the above value would result in `11010`. Doing this means that the added digit stores information about *large ranges*. In the provided example, this means that setting that digit changes the value by 16. 2. We can add a digit to the least significant position. As an example, adding a `1` to the above value would result in `10101`. Changing the added digit will only change the resulting natural number by 1. -Given that $x$ represents a natural number, and $s$ is the digit we're adding. In a standard binary system, adding $s$ to the least significant position means that in the new number $x$ (before the addition) now represents the Nth appearance of an even (when $s = 0$ ), or odd (when ) +Given that $x$ represents a natural number, and $s$ is the digit we're adding. In a standard binary system, adding $s$ to the least significant position means that in the new number $x$ (before the addition) now represents the Nth appearance of an even (when $s = 0$ ), or odd (when $s = 1$). From 8278a43dbeaeb79f9fc0d12997adb9d53089f38d Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Mon, 19 Aug 2024 11:35:29 -0600 Subject: [PATCH 0130/1027] vault backup: 2024-08-19 11:35:29 --- notes/ANS Theory.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/notes/ANS Theory.md b/notes/ANS Theory.md index 33ad72d..18b404e 100644 --- a/notes/ANS Theory.md +++ b/notes/ANS Theory.md @@ -10,4 +10,6 @@ Taking a look at the standard binary numeral system, there are two digits in the 1. We can add a digit to the most significant position. As an example, adding a `1` to the above value would result in `11010`. Doing this means that the added digit stores information about *large ranges*. In the provided example, this means that setting that digit changes the value by 16. 2. We can add a digit to the least significant position. As an example, adding a `1` to the above value would result in `10101`. Changing the added digit will only change the resulting natural number by 1. -Given that $x$ represents a natural number, and $s$ is the digit we're adding. In a standard binary system, adding $s$ to the least significant position means that in the new number $x$ (before the addition) now represents the Nth appearance of an even (when $s = 0$ ), or odd (when $s = 1$). +Given that $x$ represents a natural number, and $s$ is the digit we're adding. In a standard binary system, adding $s$ to the least significant position means that in the new number $x$ (before the addition) now represents the Nth appearance of an even (when $s = 0$ ), or odd (when $s = 1$). With ANS, the goal is is to make that asymmetrical, so that you can represent more common values with a denser representation. + + From 80abee9bb5e5105e7d20114ec68741f08ce52ffc Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 27 Aug 2024 14:19:34 -0600 Subject: [PATCH 0131/1027] vault backup: 2024-08-27 14:19:34 --- .../ENGL2010/\"Why Do We Argue?\" - Talisse & Aikin.md" | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 "education/english/ENGL2010/\"Why Do We Argue?\" - Talisse & Aikin.md" diff --git "a/education/english/ENGL2010/\"Why Do We Argue?\" - Talisse & Aikin.md" "b/education/english/ENGL2010/\"Why Do We Argue?\" - Talisse & Aikin.md" new file mode 100644 index 0000000..dcb208c --- /dev/null +++ "b/education/english/ENGL2010/\"Why Do We Argue?\" - Talisse & Aikin.md" @@ -0,0 +1,8 @@ +# Aristotle +Aristotle claimed: +- Humans are naturally *political*. +- Humans naturally seek to *know*. + +He used the term *political* to describe *humanity's dependency and tendency towards social interaction*. + +# \ No newline at end of file From 5260fd93388cbf4f2dc6e2058ee496d354bc5dba Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 27 Aug 2024 14:24:34 -0600 Subject: [PATCH 0132/1027] vault backup: 2024-08-27 14:24:34 --- ...\"Why Do We Argue?\" - Talisse & Aikin.md" | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git "a/education/english/ENGL2010/\"Why Do We Argue?\" - Talisse & Aikin.md" "b/education/english/ENGL2010/\"Why Do We Argue?\" - Talisse & Aikin.md" index dcb208c..3990ab3 100644 --- "a/education/english/ENGL2010/\"Why Do We Argue?\" - Talisse & Aikin.md" +++ "b/education/english/ENGL2010/\"Why Do We Argue?\" - Talisse & Aikin.md" @@ -4,5 +4,24 @@ Aristotle claimed: - Humans naturally seek to *know*. He used the term *political* to describe *humanity's dependency and tendency towards social interaction*. +# Society +- Humans need to be needed by each other. +- Interdependence introduces complexity in society. +- A mark of civility is the objection to things that harm others. +- People often fail to recognize when they're being exploited in relationships. +- We rely on others to share and accumulate data -# \ No newline at end of file +# Arguments +- Humans don't like being wrong. +- Behavior is frequently determined by an individual's beliefs. +- People naturally object to info they believe is wrong, in the same way that people naturally object to things that harm others. +- **An argument is a rational response to a disagreement**, through showing others *why* they should adopt your beliefs. +- From an argument, you want others to rationally adopt your beliefs. +- Humans are inherently uncomfortable with disagreement. +- You can audit a personal belief while still holding it, and regular auditing of personal beliefs is healthy. +- Non-hostile arguments are a good way to audit those beliefs, and as such are healthy. + +# Definitions +| Phrase | Definition | +| ------------ | --------------------------------------- | +| Epistemology | The philosophical analysis of knowledge | \ No newline at end of file From a1f975e9012b6d5610defa87d7da830beb86a8ca Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 28 Aug 2024 10:39:34 -0600 Subject: [PATCH 0133/1027] vault backup: 2024-08-28 10:39:34 --- education/math/{ => MATH1050}/Dividing Polynomials.md | 0 education/math/{ => MATH1050}/Domain.md | 0 education/math/{ => MATH1050}/Exponents/Exponents.md | 0 education/math/{ => MATH1050}/Exponents/Logarithms.md | 0 education/math/{ => MATH1050}/Exponents/Quadratics.md | 0 education/math/{ => MATH1050}/Inverse Functions.md | 0 education/math/{ => MATH1050}/Matrices.md | 0 education/math/{ => MATH1050}/Partial Fractions.md | 0 education/math/{ => MATH1050}/Polynomial Fractions.md | 0 education/math/{ => MATH1050}/Rational Inequalities.md | 0 education/math/{ => MATH1050}/Standard forms of circles.md | 0 education/math/{ => MATH1050}/Systems of Equations.md | 0 12 files changed, 0 insertions(+), 0 deletions(-) rename education/math/{ => MATH1050}/Dividing Polynomials.md (100%) rename education/math/{ => MATH1050}/Domain.md (100%) rename education/math/{ => MATH1050}/Exponents/Exponents.md (100%) rename education/math/{ => MATH1050}/Exponents/Logarithms.md (100%) rename education/math/{ => MATH1050}/Exponents/Quadratics.md (100%) rename education/math/{ => MATH1050}/Inverse Functions.md (100%) rename education/math/{ => MATH1050}/Matrices.md (100%) rename education/math/{ => MATH1050}/Partial Fractions.md (100%) rename education/math/{ => MATH1050}/Polynomial Fractions.md (100%) rename education/math/{ => MATH1050}/Rational Inequalities.md (100%) rename education/math/{ => MATH1050}/Standard forms of circles.md (100%) rename education/math/{ => MATH1050}/Systems of Equations.md (100%) diff --git a/education/math/Dividing Polynomials.md b/education/math/MATH1050/Dividing Polynomials.md similarity index 100% rename from education/math/Dividing Polynomials.md rename to education/math/MATH1050/Dividing Polynomials.md diff --git a/education/math/Domain.md b/education/math/MATH1050/Domain.md similarity index 100% rename from education/math/Domain.md rename to education/math/MATH1050/Domain.md diff --git a/education/math/Exponents/Exponents.md b/education/math/MATH1050/Exponents/Exponents.md similarity index 100% rename from education/math/Exponents/Exponents.md rename to education/math/MATH1050/Exponents/Exponents.md diff --git a/education/math/Exponents/Logarithms.md b/education/math/MATH1050/Exponents/Logarithms.md similarity index 100% rename from education/math/Exponents/Logarithms.md rename to education/math/MATH1050/Exponents/Logarithms.md diff --git a/education/math/Exponents/Quadratics.md b/education/math/MATH1050/Exponents/Quadratics.md similarity index 100% rename from education/math/Exponents/Quadratics.md rename to education/math/MATH1050/Exponents/Quadratics.md diff --git a/education/math/Inverse Functions.md b/education/math/MATH1050/Inverse Functions.md similarity index 100% rename from education/math/Inverse Functions.md rename to education/math/MATH1050/Inverse Functions.md diff --git a/education/math/Matrices.md b/education/math/MATH1050/Matrices.md similarity index 100% rename from education/math/Matrices.md rename to education/math/MATH1050/Matrices.md diff --git a/education/math/Partial Fractions.md b/education/math/MATH1050/Partial Fractions.md similarity index 100% rename from education/math/Partial Fractions.md rename to education/math/MATH1050/Partial Fractions.md diff --git a/education/math/Polynomial Fractions.md b/education/math/MATH1050/Polynomial Fractions.md similarity index 100% rename from education/math/Polynomial Fractions.md rename to education/math/MATH1050/Polynomial Fractions.md diff --git a/education/math/Rational Inequalities.md b/education/math/MATH1050/Rational Inequalities.md similarity index 100% rename from education/math/Rational Inequalities.md rename to education/math/MATH1050/Rational Inequalities.md diff --git a/education/math/Standard forms of circles.md b/education/math/MATH1050/Standard forms of circles.md similarity index 100% rename from education/math/Standard forms of circles.md rename to education/math/MATH1050/Standard forms of circles.md diff --git a/education/math/Systems of Equations.md b/education/math/MATH1050/Systems of Equations.md similarity index 100% rename from education/math/Systems of Equations.md rename to education/math/MATH1050/Systems of Equations.md From 8467f7a6d6aeb914a755f9fc8f7bbb3af8475eac Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 28 Aug 2024 10:44:34 -0600 Subject: [PATCH 0134/1027] vault backup: 2024-08-28 10:44:34 --- education/math/MATH1060 (trig)/Angles.md | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 education/math/MATH1060 (trig)/Angles.md diff --git a/education/math/MATH1060 (trig)/Angles.md b/education/math/MATH1060 (trig)/Angles.md new file mode 100644 index 0000000..2ece8fb --- /dev/null +++ b/education/math/MATH1060 (trig)/Angles.md @@ -0,0 +1,6 @@ +# Definitions +| Term | Description | +| ----- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Ray | Directed line segment consisting of an endpoint and a direction. Notated as $\overrightarrow{EF}$, where $E$ denotes the endpoint and $F$ denotes a point along the ray. | +| Angle | Union of two rays with a common endpoint. Notated as $\angle DEF$ or $\angle FED$, where $D$ and $F$ are along the points of each ray, and $E$ is the vertex. $\angle EFD$ is not valid notation, because the vertex must be the middle. | +| | | From e222a4ceb7a4d08858dfa3f7c49f7b3d55eeabb2 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 28 Aug 2024 10:49:34 -0600 Subject: [PATCH 0135/1027] vault backup: 2024-08-28 10:49:34 --- education/math/MATH1060 (trig)/Angles.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/education/math/MATH1060 (trig)/Angles.md b/education/math/MATH1060 (trig)/Angles.md index 2ece8fb..8ce9c91 100644 --- a/education/math/MATH1060 (trig)/Angles.md +++ b/education/math/MATH1060 (trig)/Angles.md @@ -1,6 +1,7 @@ # Definitions -| Term | Description | -| ----- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Ray | Directed line segment consisting of an endpoint and a direction. Notated as $\overrightarrow{EF}$, where $E$ denotes the endpoint and $F$ denotes a point along the ray. | -| Angle | Union of two rays with a common endpoint. Notated as $\angle DEF$ or $\angle FED$, where $D$ and $F$ are along the points of each ray, and $E$ is the vertex. $\angle EFD$ is not valid notation, because the vertex must be the middle. | -| | | +| Term | Description | +| -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Ray | Directed line segment consisting of an endpoint and a direction. Notated as $\overrightarrow{EF}$, where $E$ denotes the endpoint and $F$ denotes a point along the ray. | +| Angle | Union of two rays with a common endpoint. Notated as $\angle DEF$ or $\angle FED$, where $D$ and $F$ are along the points of each ray, and $E$ is the vertex. $\angle EFD$ is not valid notation, because the vertex must be the middle. | +| $\theta$ | A lowercase theta is used to represent a (non right) angle in a triangle | +| $\phi$ | A lowercase phi is used to represent another unknown angle in a triangle. As an example, in an algebraic equation, $x$ might be used to represent the first unknown and $y$ the second. In trig, $\theta$ would | From 2e851968f06b503fa8d75edfe17291269a3260f1 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 28 Aug 2024 10:54:34 -0600 Subject: [PATCH 0136/1027] vault backup: 2024-08-28 10:54:34 --- education/math/MATH1060 (trig)/Angles.md | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/education/math/MATH1060 (trig)/Angles.md b/education/math/MATH1060 (trig)/Angles.md index 8ce9c91..b0bc635 100644 --- a/education/math/MATH1060 (trig)/Angles.md +++ b/education/math/MATH1060 (trig)/Angles.md @@ -1,7 +1,10 @@ +Angles consist of two rays with the same endpoint and are typically measured in standard position. Standard position is when one of the rays, referred to as the initial side starts at the origin and extend outwards along the $x$ axis, with a second ray referred to as the termi # Definitions -| Term | Description | -| -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Ray | Directed line segment consisting of an endpoint and a direction. Notated as $\overrightarrow{EF}$, where $E$ denotes the endpoint and $F$ denotes a point along the ray. | -| Angle | Union of two rays with a common endpoint. Notated as $\angle DEF$ or $\angle FED$, where $D$ and $F$ are along the points of each ray, and $E$ is the vertex. $\angle EFD$ is not valid notation, because the vertex must be the middle. | -| $\theta$ | A lowercase theta is used to represent a (non right) angle in a triangle | -| $\phi$ | A lowercase phi is used to represent another unknown angle in a triangle. As an example, in an algebraic equation, $x$ might be used to represent the first unknown and $y$ the second. In trig, $\theta$ would | +| Term | Description | +| ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| Ray | Directed line segment consisting of an endpoint and a direction. Notated as $\overrightarrow{EF}$, where $E$ denotes the endpoint and $F$ denotes a point along the ray. | +| Angle | Union of two rays with a common endpoint. Notated as $\angle DEF$ or $\angle FED$, where $D$ and $F$ are along the points of each ray, and $E$ is the vertex. $\angle EFD$ is not valid notation, because the vertex must be the middle. | +| $\theta$ | A lowercase theta is used to represent a (non right) angle in a triangle | +| $\phi$ | A lowercase phi is used to represent another unknown angle in a triangle. As an example, in an algebraic equation, $x$ might be used to represent the first unknown and $y$ the second. In trig, $\theta$ would be used to represent the first unknown angle, and $\phi$ the second. | +| Initial side | In standard position, the initial side is the ray that extends from the origin along the $x$ axis. | +| Terminal side | In standard position, the terminal side is the ray that's being measured relative to the initial side. | From 7ca78331cd08f181e055804086b1649232af3550 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 28 Aug 2024 10:59:34 -0600 Subject: [PATCH 0137/1027] vault backup: 2024-08-28 10:59:34 --- education/math/MATH1060 (trig)/Angles.md | 26 ++++++++++++++++-------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/education/math/MATH1060 (trig)/Angles.md b/education/math/MATH1060 (trig)/Angles.md index b0bc635..8398bba 100644 --- a/education/math/MATH1060 (trig)/Angles.md +++ b/education/math/MATH1060 (trig)/Angles.md @@ -1,10 +1,18 @@ -Angles consist of two rays with the same endpoint and are typically measured in standard position. Standard position is when one of the rays, referred to as the initial side starts at the origin and extend outwards along the $x$ axis, with a second ray referred to as the termi +Angles consist of two rays with the same endpoint and are typically measured in standard position. Standard position is when one of the rays, referred to as the initial side starts at the origin and extend outwards along the $x$ axis, with a second ray referred to as the terminal side. + +If an angle is measured counterclockwise, it's a *positive angle*, and if an angle is measured clockwise, it's a *negative angle*. + + # Definitions -| Term | Description | -| ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| Ray | Directed line segment consisting of an endpoint and a direction. Notated as $\overrightarrow{EF}$, where $E$ denotes the endpoint and $F$ denotes a point along the ray. | -| Angle | Union of two rays with a common endpoint. Notated as $\angle DEF$ or $\angle FED$, where $D$ and $F$ are along the points of each ray, and $E$ is the vertex. $\angle EFD$ is not valid notation, because the vertex must be the middle. | -| $\theta$ | A lowercase theta is used to represent a (non right) angle in a triangle | -| $\phi$ | A lowercase phi is used to represent another unknown angle in a triangle. As an example, in an algebraic equation, $x$ might be used to represent the first unknown and $y$ the second. In trig, $\theta$ would be used to represent the first unknown angle, and $\phi$ the second. | -| Initial side | In standard position, the initial side is the ray that extends from the origin along the $x$ axis. | -| Terminal side | In standard position, the terminal side is the ray that's being measured relative to the initial side. | +| Term | Description | +| -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| Ray | Directed line segment consisting of an endpoint and a direction. Notated as $\overrightarrow{EF}$, where $E$ denotes the endpoint and $F$ denotes a point along the ray. | +| Angle | Union of two rays with a common endpoint. Notated as $\angle DEF$ or $\angle FED$, where $D$ and $F$ are along the points of each ray, and $E$ is the vertex. $\angle EFD$ is not valid notation, because the vertex must be the middle. | +| $\theta$ | A lowercase theta is used to represent a (non right) angle in a triangle | +| $\phi$ | A lowercase phi is used to represent another unknown angle in a triangle. As an example, in an algebraic equation, $x$ might be used to represent the first unknown and $y$ the second. In trig, $\theta$ would be used to represent the first unknown angle, and $\phi$ the second. | +| Initial side | In standard position, the initial side is the ray that extends from the origin along the $x$ axis. | +| Terminal side | In standard position, the terminal side is the ray that's being measured relative to the initial side. | +| $s$ | The length of a curve along the radius. | +| Radian | Denoted with $rad$, one radian is equal to the radius, but it's measured along the arc in a curve instead of from the center. | +| Complementary Angles | Two positive angles that add up to $90\degree$ or $\frac{\pi}{2}$. One mnemonic device that you can use to remember this | +| Supplementary Angles | Two positive angles that add up to $180\degree$ or $\pi$. | From 55a7ba19ca51d7ba14aa6b8a31745541483e98f2 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 28 Aug 2024 11:04:34 -0600 Subject: [PATCH 0138/1027] vault backup: 2024-08-28 11:04:34 --- education/math/MATH1060 (trig)/Angles.md | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/education/math/MATH1060 (trig)/Angles.md b/education/math/MATH1060 (trig)/Angles.md index 8398bba..c122458 100644 --- a/education/math/MATH1060 (trig)/Angles.md +++ b/education/math/MATH1060 (trig)/Angles.md @@ -2,7 +2,17 @@ Angles consist of two rays with the same endpoint and are typically measured in If an angle is measured counterclockwise, it's a *positive angle*, and if an angle is measured clockwise, it's a *negative angle*. +## Complementary and Supplementary Angles +A **complimentary** angle is formed when two positive angles add up to $90\degree$ or $\frac{\pi}{2}$. One mnemonic device that you can use to remember this is: + +> Complementary starts with C, and C stands for corner. $90\degree$ makes a corner. + +A **supplementary** angle is formed when two positive angles add up to $180\degree$ or $\pi$. One mnemonic device that you can use to remember this is: + +> Supplementary starts with S and S stands for straight. $180\degree$ makes a straight line. + +Angles greater than $90\degree$ have no complement and angles greater than $180\degree$ have no supplement. # Definitions | Term | Description | | -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | @@ -14,5 +24,7 @@ If an angle is measured counterclockwise, it's a *positive angle*, and if an ang | Terminal side | In standard position, the terminal side is the ray that's being measured relative to the initial side. | | $s$ | The length of a curve along the radius. | | Radian | Denoted with $rad$, one radian is equal to the radius, but it's measured along the arc in a curve instead of from the center. | -| Complementary Angles | Two positive angles that add up to $90\degree$ or $\frac{\pi}{2}$. One mnemonic device that you can use to remember this | -| Supplementary Angles | Two positive angles that add up to $180\degree$ or $\pi$. | +| Complementary Angles | Two positive angles that add up to $90\degree$ or $\frac{\pi}{2}$. One mnemonic device that you can use to remember this is:

Complementary starts with C, and C stands for corner. $90\degree$ makes a corner. | +| Supplementary Angles | Two positive angles that add up to $180\degree$ or $\pi$. One mnemonic device that you can use to remember this is:

Supplementary starts with S and S stands for straight. $180\degree$ makes a straight line. | +| | | +| | | From a14db42aedc5a55d836938844ffb15ab8b32bb7f Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 28 Aug 2024 11:16:18 -0600 Subject: [PATCH 0139/1027] vault backup: 2024-08-28 11:16:18 --- education/math/MATH1060 (trig)/Angles.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/education/math/MATH1060 (trig)/Angles.md b/education/math/MATH1060 (trig)/Angles.md index c122458..ed82aab 100644 --- a/education/math/MATH1060 (trig)/Angles.md +++ b/education/math/MATH1060 (trig)/Angles.md @@ -2,8 +2,12 @@ Angles consist of two rays with the same endpoint and are typically measured in If an angle is measured counterclockwise, it's a *positive angle*, and if an angle is measured clockwise, it's a *negative angle*. -## Complementary and Supplementary Angles +## Degrees and Radians +To convert **from radians to degrees**, multiply the radian value by $\frac{180\degree}{\pi}$. +$$ x * \frac{180\degree}{\pi}$$ +To convert **from degrees to radians**, multiply the degree measure by $ +## Complementary and Supplementary Angles A **complimentary** angle is formed when two positive angles add up to $90\degree$ or $\frac{\pi}{2}$. One mnemonic device that you can use to remember this is: > Complementary starts with C, and C stands for corner. $90\degree$ makes a corner. From 21465af5f655a2d9360b8238c7ec240d9af6e23b Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 28 Aug 2024 11:21:18 -0600 Subject: [PATCH 0140/1027] vault backup: 2024-08-28 11:21:18 --- education/math/MATH1060 (trig)/Angles.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/education/math/MATH1060 (trig)/Angles.md b/education/math/MATH1060 (trig)/Angles.md index ed82aab..a2b08d4 100644 --- a/education/math/MATH1060 (trig)/Angles.md +++ b/education/math/MATH1060 (trig)/Angles.md @@ -5,7 +5,8 @@ If an angle is measured counterclockwise, it's a *positive angle*, and if an ang ## Degrees and Radians To convert **from radians to degrees**, multiply the radian value by $\frac{180\degree}{\pi}$. $$ x * \frac{180\degree}{\pi}$$ -To convert **from degrees to radians**, multiply the degree measure by $ +To convert **from degrees to radians**, multiply the degree measure by $\frac{\pi}{180\degree}$. +$$ x * \frac{\pi}{180\degree} $$ ## Complementary and Supplementary Angles A **complimentary** angle is formed when two positive angles add up to $90\degree$ or $\frac{\pi}{2}$. One mnemonic device that you can use to remember this is: From 655e2af4e721d57c9f35f9c5acd47585433953ca Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sat, 31 Aug 2024 11:58:50 -0600 Subject: [PATCH 0141/1027] vault backup: 2024-08-31 11:58:50 --- .obsidian/plugins/d2-obsidian/main.js | 533 ++++++++++++++++++++ .obsidian/plugins/d2-obsidian/manifest.json | 10 + .obsidian/plugins/d2-obsidian/styles.css | 49 ++ 3 files changed, 592 insertions(+) create mode 100644 .obsidian/plugins/d2-obsidian/main.js create mode 100644 .obsidian/plugins/d2-obsidian/manifest.json create mode 100644 .obsidian/plugins/d2-obsidian/styles.css diff --git a/.obsidian/plugins/d2-obsidian/main.js b/.obsidian/plugins/d2-obsidian/main.js new file mode 100644 index 0000000..cc367f4 --- /dev/null +++ b/.obsidian/plugins/d2-obsidian/main.js @@ -0,0 +1,533 @@ +/* +THIS IS A GENERATED/BUNDLED FILE BY ESBUILD +if you want to view the source, please visit the github repository of this plugin: https://github.com/terrastruct/d2-obsidian +*/ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __commonJS = (cb, mod) => function __require() { + return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; +}; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// node_modules/lodash.debounce/index.js +var require_lodash = __commonJS({ + "node_modules/lodash.debounce/index.js"(exports, module2) { + var FUNC_ERROR_TEXT = "Expected a function"; + var NAN = 0 / 0; + var symbolTag = "[object Symbol]"; + var reTrim = /^\s+|\s+$/g; + var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; + var reIsBinary = /^0b[01]+$/i; + var reIsOctal = /^0o[0-7]+$/i; + var freeParseInt = parseInt; + var freeGlobal = typeof global == "object" && global && global.Object === Object && global; + var freeSelf = typeof self == "object" && self && self.Object === Object && self; + var root = freeGlobal || freeSelf || Function("return this")(); + var objectProto = Object.prototype; + var objectToString = objectProto.toString; + var nativeMax = Math.max; + var nativeMin = Math.min; + var now = function() { + return root.Date.now(); + }; + function debounce2(func, wait, options) { + var lastArgs, lastThis, maxWait, result, timerId, lastCallTime, lastInvokeTime = 0, leading = false, maxing = false, trailing = true; + if (typeof func != "function") { + throw new TypeError(FUNC_ERROR_TEXT); + } + wait = toNumber(wait) || 0; + if (isObject(options)) { + leading = !!options.leading; + maxing = "maxWait" in options; + maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait; + trailing = "trailing" in options ? !!options.trailing : trailing; + } + function invokeFunc(time) { + var args = lastArgs, thisArg = lastThis; + lastArgs = lastThis = void 0; + lastInvokeTime = time; + result = func.apply(thisArg, args); + return result; + } + function leadingEdge(time) { + lastInvokeTime = time; + timerId = setTimeout(timerExpired, wait); + return leading ? invokeFunc(time) : result; + } + function remainingWait(time) { + var timeSinceLastCall = time - lastCallTime, timeSinceLastInvoke = time - lastInvokeTime, result2 = wait - timeSinceLastCall; + return maxing ? nativeMin(result2, maxWait - timeSinceLastInvoke) : result2; + } + function shouldInvoke(time) { + var timeSinceLastCall = time - lastCallTime, timeSinceLastInvoke = time - lastInvokeTime; + return lastCallTime === void 0 || timeSinceLastCall >= wait || timeSinceLastCall < 0 || maxing && timeSinceLastInvoke >= maxWait; + } + function timerExpired() { + var time = now(); + if (shouldInvoke(time)) { + return trailingEdge(time); + } + timerId = setTimeout(timerExpired, remainingWait(time)); + } + function trailingEdge(time) { + timerId = void 0; + if (trailing && lastArgs) { + return invokeFunc(time); + } + lastArgs = lastThis = void 0; + return result; + } + function cancel() { + if (timerId !== void 0) { + clearTimeout(timerId); + } + lastInvokeTime = 0; + lastArgs = lastCallTime = lastThis = timerId = void 0; + } + function flush() { + return timerId === void 0 ? result : trailingEdge(now()); + } + function debounced() { + var time = now(), isInvoking = shouldInvoke(time); + lastArgs = arguments; + lastThis = this; + lastCallTime = time; + if (isInvoking) { + if (timerId === void 0) { + return leadingEdge(lastCallTime); + } + if (maxing) { + timerId = setTimeout(timerExpired, wait); + return invokeFunc(lastCallTime); + } + } + if (timerId === void 0) { + timerId = setTimeout(timerExpired, wait); + } + return result; + } + debounced.cancel = cancel; + debounced.flush = flush; + return debounced; + } + function isObject(value) { + var type = typeof value; + return !!value && (type == "object" || type == "function"); + } + function isObjectLike(value) { + return !!value && typeof value == "object"; + } + function isSymbol(value) { + return typeof value == "symbol" || isObjectLike(value) && objectToString.call(value) == symbolTag; + } + function toNumber(value) { + if (typeof value == "number") { + return value; + } + if (isSymbol(value)) { + return NAN; + } + if (isObject(value)) { + var other = typeof value.valueOf == "function" ? value.valueOf() : value; + value = isObject(other) ? other + "" : other; + } + if (typeof value != "string") { + return value === 0 ? value : +value; + } + value = value.replace(reTrim, ""); + var isBinary = reIsBinary.test(value); + return isBinary || reIsOctal.test(value) ? freeParseInt(value.slice(2), isBinary ? 2 : 8) : reIsBadHex.test(value) ? NAN : +value; + } + module2.exports = debounce2; + } +}); + +// src/main.ts +var main_exports = {}; +__export(main_exports, { + default: () => D2Plugin +}); +module.exports = __toCommonJS(main_exports); +var import_obsidian3 = require("obsidian"); + +// src/settings.ts +var import_obsidian = require("obsidian"); + +// src/constants.ts +var LAYOUT_ENGINES = { + DAGRE: { + value: "dagre", + label: "dagre" + }, + ELK: { + value: "elk", + label: "ELK" + }, + TALA: { + value: "tala", + label: "TALA" + } +}; +var RecompileIcon = ` + + + + + +`; + +// src/settings.ts +var DEFAULT_SETTINGS = { + layoutEngine: "dagre", + debounce: 500, + theme: 0, + apiToken: "", + d2Path: "", + pad: 100, + sketch: false, + containerHeight: 800 +}; +var D2SettingsTab = class extends import_obsidian.PluginSettingTab { + constructor(app, plugin) { + super(app, plugin); + this.plugin = plugin; + } + addTALASettings() { + const talaSettings = this.containerEl.createEl("div"); + talaSettings.createEl("h3", { + text: "TALA settings" + }); + new import_obsidian.Setting(talaSettings).setName("API token").setDesc('To use TALA, copy your API token here or in ~/.local/state/tstruct/auth.json under the field "api_token"').addText((text) => text.setPlaceholder("tstruct_...").setValue(this.plugin.settings.apiToken).setDisabled(this.plugin.settings.layoutEngine !== LAYOUT_ENGINES.TALA.value).onChange(async (value) => { + if (value && !value.startsWith("tstruct_")) { + new import_obsidian.Notice("Invalid API token"); + } else { + this.plugin.settings.apiToken = value; + await this.plugin.saveSettings(); + } + })); + this.talaSettings = talaSettings; + } + display() { + const { containerEl } = this; + containerEl.empty(); + containerEl.createEl("h1", { text: "D2 plugin settings" }); + new import_obsidian.Setting(containerEl).setName("Layout engine").setDesc('Available layout engines include "dagre", "ELK", and "TALA" (TALA must be installed separately from D2)').addDropdown((dropdown) => { + dropdown.addOption(LAYOUT_ENGINES.DAGRE.value, LAYOUT_ENGINES.DAGRE.label).addOption(LAYOUT_ENGINES.ELK.value, LAYOUT_ENGINES.ELK.label).addOption(LAYOUT_ENGINES.TALA.value, LAYOUT_ENGINES.TALA.label).setValue(this.plugin.settings.layoutEngine).onChange(async (value) => { + var _a; + this.plugin.settings.layoutEngine = value; + await this.plugin.saveSettings(); + if (value === LAYOUT_ENGINES.TALA.value) { + this.addTALASettings(); + } else { + (_a = this.talaSettings) == null ? void 0 : _a.remove(); + } + }); + }); + new import_obsidian.Setting(containerEl).setName("Theme ID").setDesc("Available themes are located at https://github.com/terrastruct/d2/tree/master/d2themes").addText((text) => text.setPlaceholder("Enter a theme ID").setValue(String(this.plugin.settings.theme)).onChange(async (value) => { + if (!isNaN(Number(value)) || value === "") { + this.plugin.settings.theme = Number(value || DEFAULT_SETTINGS.theme); + await this.plugin.saveSettings(); + } else { + new import_obsidian.Notice("Please specify a valid number"); + } + })); + new import_obsidian.Setting(containerEl).setName("Pad").setDesc("Pixels padded around the rendered diagram").addText((text) => text.setPlaceholder(String(DEFAULT_SETTINGS.pad)).setValue(String(this.plugin.settings.pad)).onChange(async (value) => { + if (isNaN(Number(value))) { + new import_obsidian.Notice("Please specify a valid number"); + this.plugin.settings.pad = Number(DEFAULT_SETTINGS.pad); + } else if (value === "") { + this.plugin.settings.pad = Number(DEFAULT_SETTINGS.pad); + } else { + this.plugin.settings.pad = Number(value); + } + await this.plugin.saveSettings(); + })); + new import_obsidian.Setting(containerEl).setName("Sketch mode").setDesc("Render the diagram to look like it was sketched by hand").addToggle((toggle) => toggle.setValue(this.plugin.settings.sketch).onChange(async (value) => { + this.plugin.settings.sketch = value; + await this.plugin.saveSettings(); + })); + new import_obsidian.Setting(containerEl).setName("Container height").setDesc("Diagram max render height in pixels (Requires d2 v0.2.2 and up)").addText((text) => text.setPlaceholder(String(DEFAULT_SETTINGS.containerHeight)).setValue(String(this.plugin.settings.containerHeight)).onChange(async (value) => { + if (isNaN(Number(value))) { + new import_obsidian.Notice("Please specify a valid number"); + this.plugin.settings.containerHeight = Number(DEFAULT_SETTINGS.containerHeight); + } else if (value === "") { + this.plugin.settings.containerHeight = Number(DEFAULT_SETTINGS.containerHeight); + } else { + this.plugin.settings.containerHeight = Number(value); + } + await this.plugin.saveSettings(); + })); + new import_obsidian.Setting(containerEl).setName("Debounce").setDesc("How often should the diagram refresh in milliseconds (min 100)").addText((text) => text.setPlaceholder(String(DEFAULT_SETTINGS.debounce)).setValue(String(this.plugin.settings.debounce)).onChange(async (value) => { + if (isNaN(Number(value))) { + new import_obsidian.Notice("Please specify a valid number"); + this.plugin.settings.debounce = Number(DEFAULT_SETTINGS.debounce); + } else if (value === "") { + this.plugin.settings.debounce = Number(DEFAULT_SETTINGS.debounce); + } else if (Number(value) < 100) { + new import_obsidian.Notice("The value must be greater than 100"); + this.plugin.settings.debounce = Number(DEFAULT_SETTINGS.debounce); + } else { + this.plugin.settings.debounce = Number(value); + } + await this.plugin.saveSettings(); + })); + new import_obsidian.Setting(containerEl).setName("Path (optional)").setDesc("Customize the local path to the directory `d2` is installed in (ex. if d2 is located at `/usr/local/bin/d2`, then the path is `/usr/local/bin`). This is only necessary if `d2` is not found automatically by the plugin (but is installed).").addText((text) => { + text.setPlaceholder("/usr/local/Cellar").setValue(this.plugin.settings.d2Path).onChange(async (value) => { + this.plugin.settings.d2Path = value; + await this.plugin.saveSettings(); + }); + }); + if (this.plugin.settings.layoutEngine === LAYOUT_ENGINES.TALA.value) { + this.addTALASettings(); + } + } +}; + +// src/processor.ts +var import_obsidian2 = require("obsidian"); +var import_child_process = require("child_process"); +var import_path = require("path"); +var import_lodash = __toESM(require_lodash()); +var import_os = __toESM(require("os")); +var D2Processor = class { + constructor(plugin) { + this.attemptExport = async (source, el, ctx) => { + var _a; + el.createEl("h6", { + text: "Generating D2 diagram...", + cls: "D2__Loading" + }); + const pageContainer = ctx.containerEl; + let pageID = pageContainer.dataset.pageID; + if (!pageID) { + pageID = Math.floor(Math.random() * Date.now()).toString(); + pageContainer.dataset.pageID = pageID; + } + let debouncedFunc = this.debouncedMap.get(pageID); + if (!debouncedFunc) { + await this.export(source, el, ctx); + debouncedFunc = (0, import_lodash.default)(this.export, this.plugin.settings.debounce, { + leading: true + }); + this.debouncedMap.set(pageID, debouncedFunc); + return; + } + (_a = this.abortControllerMap.get(pageID)) == null ? void 0 : _a.abort(); + const newAbortController = new AbortController(); + this.abortControllerMap.set(pageID, newAbortController); + await debouncedFunc(source, el, ctx, newAbortController.signal); + }; + this.isValidUrl = (urlString) => { + let url; + try { + url = new URL(urlString); + } catch (e) { + return false; + } + return url.protocol === "http:" || url.protocol === "https:"; + }; + this.formatLinks = (svgEl) => { + const links = svgEl.querySelectorAll("a"); + links.forEach((link) => { + var _a; + const href = (_a = link.getAttribute("href")) != null ? _a : ""; + if (!this.isValidUrl(href)) { + link.classList.add("internal-link"); + link.setAttribute("data-href", href); + link.setAttribute("target", "_blank"); + link.setAttribute("rel", "noopener"); + } + }); + }; + this.sanitizeSVGIDs = (svgEl, docID) => { + const overrides = svgEl.querySelectorAll("marker, mask, filter"); + const overrideIDs = []; + overrides.forEach((override) => { + const id = override.getAttribute("id"); + if (id) { + overrideIDs.push(id); + } + }); + return overrideIDs.reduce((svgHTML, overrideID) => { + return svgHTML.replaceAll(overrideID, [overrideID, docID].join("-")); + }, svgEl.outerHTML); + }; + this.export = async (source, el, ctx, signal) => { + try { + const image = await this.generatePreview(source, signal); + if (image) { + el.empty(); + this.prevImage = image; + this.insertImage(image, el, ctx); + const button = new import_obsidian2.ButtonComponent(el).setClass("Preview__Recompile").setIcon("recompile").onClick((e) => { + e.preventDefault(); + e.stopPropagation(); + el.empty(); + this.attemptExport(source, el, ctx); + }); + button.buttonEl.createEl("span", { + text: "Recompile" + }); + } + } catch (err) { + el.empty(); + const errorEl = el.createEl("pre", { + cls: "markdown-rendered pre Preview__Error" + }); + errorEl.createEl("code", { + text: "D2 Compilation Error:", + cls: "Preview__Error--Title" + }); + errorEl.createEl("code", { + text: err.message + }); + if (this.prevImage) { + this.insertImage(this.prevImage, el, ctx); + } + } finally { + const pageContainer = ctx.containerEl; + this.abortControllerMap.delete(pageContainer.dataset.id); + } + }; + this.plugin = plugin; + this.debouncedMap = /* @__PURE__ */ new Map(); + this.abortControllerMap = /* @__PURE__ */ new Map(); + } + insertImage(image, el, ctx) { + const parser = new DOMParser(); + const svg = parser.parseFromString(image, "image/svg+xml"); + const containerEl = el.createDiv(); + const svgEl = svg.documentElement; + svgEl.style.maxHeight = `${this.plugin.settings.containerHeight}px`; + svgEl.style.maxWidth = "100%"; + svgEl.style.height = "fit-content"; + svgEl.style.width = "fit-content"; + this.formatLinks(svgEl); + containerEl.innerHTML = this.sanitizeSVGIDs(svgEl, ctx.docId); + } + async generatePreview(source, signal) { + var _a, _b; + const pathArray = [process.env.PATH, "/opt/homebrew/bin", "/usr/local/bin"]; + if (import_os.default.platform() === "win32") { + pathArray.push(`C:Program FilesD2`); + } else { + pathArray.push(`${process.env.HOME}/.local/bin`); + } + let GOPATH = ""; + try { + GOPATH = (0, import_child_process.execSync)("go env GOPATH", { + env: { + ...process.env, + PATH: pathArray.join(import_path.delimiter) + } + }).toString(); + } catch (error) { + } + if (GOPATH) { + pathArray.push(`${GOPATH.replace("\n", "")}/bin`); + } + if (this.plugin.settings.d2Path) { + pathArray.push(this.plugin.settings.d2Path); + } + const options = { + ...process.env, + env: { + PATH: pathArray.join(import_path.delimiter) + }, + signal + }; + if (this.plugin.settings.apiToken) { + options.env.TSTRUCT_TOKEN = this.plugin.settings.apiToken; + } + let args = [ + `d2`, + "-", + `--theme=${this.plugin.settings.theme}`, + `--layout=${this.plugin.settings.layoutEngine}`, + `--pad=${this.plugin.settings.pad}`, + `--sketch=${this.plugin.settings.sketch}`, + "--bundle=false", + "--scale=1" + ]; + const cmd = args.join(" "); + const child = (0, import_child_process.exec)(cmd, options); + (_a = child.stdin) == null ? void 0 : _a.write(source); + (_b = child.stdin) == null ? void 0 : _b.end(); + let stdout; + let stderr; + if (child.stdout) { + child.stdout.on("data", (data) => { + if (stdout === void 0) { + stdout = data; + } else { + stdout += data; + } + }); + } + if (child.stderr) { + child.stderr.on("data", (data) => { + if (stderr === void 0) { + stderr = data; + } else { + stderr += data; + } + }); + } + return new Promise((resolve, reject) => { + child.on("error", reject); + child.on("close", (code) => { + if (code === 0) { + resolve(stdout); + return; + } else if (stderr) { + console.error(stderr); + reject(new Error(stderr)); + } else if (stdout) { + console.error(stdout); + reject(new Error(stdout)); + } + }); + }); + } +}; + +// src/main.ts +var D2Plugin = class extends import_obsidian3.Plugin { + async onload() { + (0, import_obsidian3.addIcon)("recompile", RecompileIcon); + await this.loadSettings(); + this.addSettingTab(new D2SettingsTab(this.app, this)); + const processor = new D2Processor(this); + this.registerMarkdownCodeBlockProcessor("d2", processor.attemptExport); + this.processor = processor; + } + onunload() { + const abortControllers = this.processor.abortControllerMap.values(); + Array.from(abortControllers).forEach((controller) => { + controller.abort(); + }); + } + async loadSettings() { + this.settings = Object.assign({}, DEFAULT_SETTINGS, await this.loadData()); + } + async saveSettings() { + await this.saveData(this.settings); + } +}; diff --git a/.obsidian/plugins/d2-obsidian/manifest.json b/.obsidian/plugins/d2-obsidian/manifest.json new file mode 100644 index 0000000..4bffa8b --- /dev/null +++ b/.obsidian/plugins/d2-obsidian/manifest.json @@ -0,0 +1,10 @@ +{ + "id": "d2-obsidian", + "name": "D2", + "version": "1.1.4", + "minAppVersion": "0.15.0", + "description": "The official D2 plugin for Obsidian. D2 is a modern diagram scripting language that turns text to diagrams.", + "author": "Terrastruct", + "authorUrl": "https://d2lang.com", + "isDesktopOnly": true +} diff --git a/.obsidian/plugins/d2-obsidian/styles.css b/.obsidian/plugins/d2-obsidian/styles.css new file mode 100644 index 0000000..46e334a --- /dev/null +++ b/.obsidian/plugins/d2-obsidian/styles.css @@ -0,0 +1,49 @@ +.D2__Loading { + font-style: italic; +} + +.Preview__Error--Title { + color: #be0b41 !important; +} + +.Preview__Error { + display: flex; + flex-direction: column; + white-space: pre; + white-space: pre-wrap; +} + +.Preview__Recompile { + position: absolute; + top: 4px; + left: 4px; + height: 24px; + padding: 6px; + background-color: white !important; + color: #2e3346; + display: flex; + gap: 4px; + box-shadow: none !important; + border: 1px solid #dee1eb; + filter: drop-shadow(1px 1px 4px rgba(31, 36, 58, 0.08)); +} + +.Preview__Recompile:hover { + filter: drop-shadow(2px 2px 16px rgba(31, 36, 58, 0.12)); + cursor: pointer; +} + +.Preview__Recompile > .svg-icon { + height: 12px !important; + width: 12px !important; +} + +.block-language-d2 { + position: relative; +} + +@media print { + .Preview__Recompile { + display: none; + } +} From f27b44b15b921ddb976b0eb610b041062b20e1d0 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sat, 31 Aug 2024 12:03:50 -0600 Subject: [PATCH 0142/1027] vault backup: 2024-08-31 12:03:50 --- .../software development/ECE1400/Flowcharts and Pseudocode.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 education/software development/ECE1400/Flowcharts and Pseudocode.md diff --git a/education/software development/ECE1400/Flowcharts and Pseudocode.md b/education/software development/ECE1400/Flowcharts and Pseudocode.md new file mode 100644 index 0000000..2656cae --- /dev/null +++ b/education/software development/ECE1400/Flowcharts and Pseudocode.md @@ -0,0 +1,4 @@ + +1. Assume an action set of {add , stir, bake, cool}. Draw a flowchart, using the paradigm discussed in class, to show the process of baking a banana cake. Use Google to find a typical list of ingredients. + +2. Represent the flowchart from problem 1 as pseudocode. \ No newline at end of file From 4fc5f70c7f4e7da888d31864a969c8164d016c04 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sat, 31 Aug 2024 12:08:50 -0600 Subject: [PATCH 0143/1027] vault backup: 2024-08-31 12:08:50 --- .obsidian/community-plugins.json | 3 ++- .../ECE1400/Flowcharts and Pseudocode.md | 12 ++++++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/.obsidian/community-plugins.json b/.obsidian/community-plugins.json index d3f66fa..9159b87 100644 --- a/.obsidian/community-plugins.json +++ b/.obsidian/community-plugins.json @@ -1,3 +1,4 @@ [ - "obsidian-git" + "obsidian-git", + "d2-obsidian" ] \ No newline at end of file diff --git a/education/software development/ECE1400/Flowcharts and Pseudocode.md b/education/software development/ECE1400/Flowcharts and Pseudocode.md index 2656cae..fc14de7 100644 --- a/education/software development/ECE1400/Flowcharts and Pseudocode.md +++ b/education/software development/ECE1400/Flowcharts and Pseudocode.md @@ -1,4 +1,12 @@ +# Banana Cake +## Instructions -1. Assume an action set of {add , stir, bake, cool}. Draw a flowchart, using the paradigm discussed in class, to show the process of baking a banana cake. Use Google to find a typical list of ingredients. +1. Assume an action set of {add \, stir, bake, cool}. Draw a flowchart, using the paradigm discussed in class, to show the process of baking a banana cake. Use Google to find a typical list of ingredients. +2. Represent the flowchart from problem 1 as pseudocode. -2. Represent the flowchart from problem 1 as pseudocode. \ No newline at end of file +## Diagram +```d2 +begin: {shape: oval} + +begin -> world +``` \ No newline at end of file From 3f9ee1dae111083b679e9e8e40143a267900dc8f Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sat, 31 Aug 2024 12:13:50 -0600 Subject: [PATCH 0144/1027] vault backup: 2024-08-31 12:13:50 --- .../software development/ECE1400/Flowcharts and Pseudocode.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/education/software development/ECE1400/Flowcharts and Pseudocode.md b/education/software development/ECE1400/Flowcharts and Pseudocode.md index fc14de7..5c4707f 100644 --- a/education/software development/ECE1400/Flowcharts and Pseudocode.md +++ b/education/software development/ECE1400/Flowcharts and Pseudocode.md @@ -6,7 +6,7 @@ ## Diagram ```d2 -begin: {shape: oval} +begin: {shape:oval} begin -> world ``` \ No newline at end of file From a74c2e96484db6659118327442b2cb34793f0ebd Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sat, 31 Aug 2024 12:18:50 -0600 Subject: [PATCH 0145/1027] vault backup: 2024-08-31 12:18:50 --- .../software development/ECE1400/Flowcharts and Pseudocode.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/education/software development/ECE1400/Flowcharts and Pseudocode.md b/education/software development/ECE1400/Flowcharts and Pseudocode.md index 5c4707f..db146e4 100644 --- a/education/software development/ECE1400/Flowcharts and Pseudocode.md +++ b/education/software development/ECE1400/Flowcharts and Pseudocode.md @@ -8,5 +8,6 @@ ```d2 begin: {shape:oval} -begin -> world +begin -> add 3c flour\ +-> add ``` \ No newline at end of file From 72a1d8fb5b9dcb96c4f22ed52d44bf164c16d963 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sat, 31 Aug 2024 12:23:50 -0600 Subject: [PATCH 0146/1027] vault backup: 2024-08-31 12:23:50 --- .../ECE1400/Flowcharts and Pseudocode.md | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/education/software development/ECE1400/Flowcharts and Pseudocode.md b/education/software development/ECE1400/Flowcharts and Pseudocode.md index db146e4..7ce4340 100644 --- a/education/software development/ECE1400/Flowcharts and Pseudocode.md +++ b/education/software development/ECE1400/Flowcharts and Pseudocode.md @@ -6,8 +6,13 @@ ## Diagram ```d2 -begin: {shape:oval} +begin: {shape: oval} +end: {shape: oval} begin -> add 3c flour\ --> add +-> add 1 1/2 tsp baking soda\ +-> add 1/2 tsp cinnamon\ +-> add 1/2 tsp salt\ +-> stir\ +[in separate bowl] ``` \ No newline at end of file From 6481fe48b32229515d908d463aa0cbf4f42b3552 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sat, 31 Aug 2024 12:28:50 -0600 Subject: [PATCH 0147/1027] vault backup: 2024-08-31 12:28:50 --- .../software development/ECE1400/Flowcharts and Pseudocode.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/education/software development/ECE1400/Flowcharts and Pseudocode.md b/education/software development/ECE1400/Flowcharts and Pseudocode.md index 7ce4340..18cd63b 100644 --- a/education/software development/ECE1400/Flowcharts and Pseudocode.md +++ b/education/software development/ECE1400/Flowcharts and Pseudocode.md @@ -14,5 +14,5 @@ begin -> add 3c flour\ -> add 1/2 tsp cinnamon\ -> add 1/2 tsp salt\ -> stir\ -[in separate bowl] + -> [in separate bowl] ``` \ No newline at end of file From eb6e6f8356d315e785d978ff681326510283ffbb Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sat, 31 Aug 2024 12:33:50 -0600 Subject: [PATCH 0148/1027] vault backup: 2024-08-31 12:33:50 --- .../ECE1400/Flowcharts and Pseudocode.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/education/software development/ECE1400/Flowcharts and Pseudocode.md b/education/software development/ECE1400/Flowcharts and Pseudocode.md index 18cd63b..6205c52 100644 --- a/education/software development/ECE1400/Flowcharts and Pseudocode.md +++ b/education/software development/ECE1400/Flowcharts and Pseudocode.md @@ -6,6 +6,13 @@ ## Diagram ```d2 +vars: { + d2-config: { + dark-theme-id: 200 + } +} + + begin: {shape: oval} end: {shape: oval} @@ -14,5 +21,6 @@ begin -> add 3c flour\ -> add 1/2 tsp cinnamon\ -> add 1/2 tsp salt\ -> stir\ - -> [in separate bowl] +-> \[in separate bowl\]\ + ``` \ No newline at end of file From fd87f2a05bfa9977e757eb4809700600cc703ce1 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sat, 31 Aug 2024 12:38:50 -0600 Subject: [PATCH 0149/1027] vault backup: 2024-08-31 12:38:50 --- .../ECE1400/Flowcharts and Pseudocode.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/education/software development/ECE1400/Flowcharts and Pseudocode.md b/education/software development/ECE1400/Flowcharts and Pseudocode.md index 6205c52..2f75dce 100644 --- a/education/software development/ECE1400/Flowcharts and Pseudocode.md +++ b/education/software development/ECE1400/Flowcharts and Pseudocode.md @@ -21,6 +21,10 @@ begin -> add 3c flour\ -> add 1/2 tsp cinnamon\ -> add 1/2 tsp salt\ -> stir\ --> \[in separate bowl\]\ +-> add 3 mashed bananas\ +-> add 1 tsp lemon juice\ +-> stir\ +-> add 3 eggs\ +-> ``` \ No newline at end of file From 91c06431763ab37bfe52432fa8616d79dd20f3e7 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sat, 31 Aug 2024 12:43:50 -0600 Subject: [PATCH 0150/1027] vault backup: 2024-08-31 12:43:50 --- .../software development/ECE1400/Flowcharts and Pseudocode.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/education/software development/ECE1400/Flowcharts and Pseudocode.md b/education/software development/ECE1400/Flowcharts and Pseudocode.md index 2f75dce..0741d8a 100644 --- a/education/software development/ECE1400/Flowcharts and Pseudocode.md +++ b/education/software development/ECE1400/Flowcharts and Pseudocode.md @@ -25,6 +25,6 @@ begin -> add 3c flour\ -> add 1 tsp lemon juice\ -> stir\ -> add 3 eggs\ --> +-> add 2tsp vanilla extract ``` \ No newline at end of file From 10cea2d19763361cdcf729645eb3d7dcf7513c2b Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sat, 31 Aug 2024 12:58:50 -0600 Subject: [PATCH 0151/1027] vault backup: 2024-08-31 12:58:50 --- .../ECE1400/Flowcharts and Pseudocode.md | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/education/software development/ECE1400/Flowcharts and Pseudocode.md b/education/software development/ECE1400/Flowcharts and Pseudocode.md index 0741d8a..bce623a 100644 --- a/education/software development/ECE1400/Flowcharts and Pseudocode.md +++ b/education/software development/ECE1400/Flowcharts and Pseudocode.md @@ -13,8 +13,14 @@ vars: { } -begin: {shape: oval} -end: {shape: oval} +begin: { + shape: oval + near: top-left +} +end: { + shape: oval + near: bottom-right +} begin -> add 3c flour\ -> add 1 1/2 tsp baking soda\ From e171698cb92899154df8e9537cc157e8e31f937f Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sat, 31 Aug 2024 13:03:52 -0600 Subject: [PATCH 0152/1027] vault backup: 2024-08-31 13:03:52 --- .../ECE1400/Flowcharts and Pseudocode.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/education/software development/ECE1400/Flowcharts and Pseudocode.md b/education/software development/ECE1400/Flowcharts and Pseudocode.md index bce623a..2c611f9 100644 --- a/education/software development/ECE1400/Flowcharts and Pseudocode.md +++ b/education/software development/ECE1400/Flowcharts and Pseudocode.md @@ -26,11 +26,12 @@ begin -> add 3c flour\ -> add 1 1/2 tsp baking soda\ -> add 1/2 tsp cinnamon\ -> add 1/2 tsp salt\ +stir: stir -> stir\ -> add 3 mashed bananas\ -> add 1 tsp lemon juice\ -> stir\ -> add 3 eggs\ --> add 2tsp vanilla extract - +-> add 2tsp vanilla extract\ +-> end ``` \ No newline at end of file From 07c786f3ecad8cd1ab1adbc99af8ddbd33cf8a25 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sat, 31 Aug 2024 13:13:51 -0600 Subject: [PATCH 0153/1027] vault backup: 2024-08-31 13:13:51 --- .../software development/ECE1400/Flowcharts and Pseudocode.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/education/software development/ECE1400/Flowcharts and Pseudocode.md b/education/software development/ECE1400/Flowcharts and Pseudocode.md index 2c611f9..104c544 100644 --- a/education/software development/ECE1400/Flowcharts and Pseudocode.md +++ b/education/software development/ECE1400/Flowcharts and Pseudocode.md @@ -26,8 +26,7 @@ begin -> add 3c flour\ -> add 1 1/2 tsp baking soda\ -> add 1/2 tsp cinnamon\ -> add 1/2 tsp salt\ -stir: stir --> stir\ +-> node [label="stir"]\ -> add 3 mashed bananas\ -> add 1 tsp lemon juice\ -> stir\ From 39ad418c221b4204ff268b026f6aaa5748e88a10 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sat, 31 Aug 2024 13:39:50 -0600 Subject: [PATCH 0154/1027] vault backup: 2024-08-31 13:39:50 --- .../ECE1400/Flowcharts and Pseudocode.md | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/education/software development/ECE1400/Flowcharts and Pseudocode.md b/education/software development/ECE1400/Flowcharts and Pseudocode.md index 104c544..9a2e254 100644 --- a/education/software development/ECE1400/Flowcharts and Pseudocode.md +++ b/education/software development/ECE1400/Flowcharts and Pseudocode.md @@ -9,28 +9,32 @@ vars: { d2-config: { dark-theme-id: 200 + layout-engine: elk } } begin: { shape: oval - near: top-left -} -end: { - shape: oval - near: bottom-right + # near: top-left } + +# grid-rows: 20 +grid-columns: 2 begin -> add 3c flour\ -> add 1 1/2 tsp baking soda\ -> add 1/2 tsp cinnamon\ -> add 1/2 tsp salt\ --> node [label="stir"]\ +-> stir\ -> add 3 mashed bananas\ -> add 1 tsp lemon juice\ --> stir\ +-> stir again\ -> add 3 eggs\ -> add 2tsp vanilla extract\ -> end +end: { + shape: oval + # near: bottom-right +} ``` \ No newline at end of file From e3808818440d8408f91b61a7774f4c02fab445c1 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sat, 31 Aug 2024 13:44:50 -0600 Subject: [PATCH 0155/1027] vault backup: 2024-08-31 13:44:50 --- .../ECE1400/Flowcharts and Pseudocode.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/education/software development/ECE1400/Flowcharts and Pseudocode.md b/education/software development/ECE1400/Flowcharts and Pseudocode.md index 9a2e254..a794d43 100644 --- a/education/software development/ECE1400/Flowcharts and Pseudocode.md +++ b/education/software development/ECE1400/Flowcharts and Pseudocode.md @@ -18,7 +18,10 @@ begin: { shape: oval # near: top-left } - +end: { + shape: oval + # near: bottom-right +} # grid-rows: 20 grid-columns: 2 @@ -33,8 +36,5 @@ begin -> add 3c flour\ -> add 3 eggs\ -> add 2tsp vanilla extract\ -> end -end: { - shape: oval - # near: bottom-right -} + ``` \ No newline at end of file From 3c42400e0b9465496336f120d0535b4a6b8e5560 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sat, 31 Aug 2024 13:49:50 -0600 Subject: [PATCH 0156/1027] vault backup: 2024-08-31 13:49:50 --- .../ECE1400/Flowcharts and Pseudocode.md | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/education/software development/ECE1400/Flowcharts and Pseudocode.md b/education/software development/ECE1400/Flowcharts and Pseudocode.md index a794d43..e0a3c55 100644 --- a/education/software development/ECE1400/Flowcharts and Pseudocode.md +++ b/education/software development/ECE1400/Flowcharts and Pseudocode.md @@ -12,19 +12,13 @@ vars: { layout-engine: elk } } - +grid-columns: 3 begin: { shape: oval # near: top-left } -end: { - shape: oval - # near: bottom-right -} -# grid-rows: 20 -grid-columns: 2 begin -> add 3c flour\ -> add 1 1/2 tsp baking soda\ -> add 1/2 tsp cinnamon\ @@ -35,6 +29,14 @@ begin -> add 3c flour\ -> stir again\ -> add 3 eggs\ -> add 2tsp vanilla extract\ +-> stir a final time\ +-> bake @ 350f for 50 min\ +-> let cool for 1 hour\ -> end +end: { + shape: oval + # near: bottom-right +} +``` -``` \ No newline at end of file +## Pseudocode From f274fb468f0007aaaf43db89bbb431e4ab4dceed Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sat, 31 Aug 2024 13:54:50 -0600 Subject: [PATCH 0157/1027] vault backup: 2024-08-31 13:54:50 --- .../ECE1400/Flowcharts and Pseudocode.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/education/software development/ECE1400/Flowcharts and Pseudocode.md b/education/software development/ECE1400/Flowcharts and Pseudocode.md index e0a3c55..fdf3ffa 100644 --- a/education/software development/ECE1400/Flowcharts and Pseudocode.md +++ b/education/software development/ECE1400/Flowcharts and Pseudocode.md @@ -40,3 +40,12 @@ end: { ``` ## Pseudocode +```c +/************************************** +* Function Title: BakeBananaCake +* +* Summary: Bake a banana cake +* +8 +*************************************/ +``` \ No newline at end of file From 55007bf97f4b4c4c51f2e944c7cc645e741a2f18 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sat, 31 Aug 2024 13:59:50 -0600 Subject: [PATCH 0158/1027] vault backup: 2024-08-31 13:59:50 --- .../ECE1400/Flowcharts and Pseudocode.md | 32 +++++++++++++++++-- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/education/software development/ECE1400/Flowcharts and Pseudocode.md b/education/software development/ECE1400/Flowcharts and Pseudocode.md index fdf3ffa..44ede9b 100644 --- a/education/software development/ECE1400/Flowcharts and Pseudocode.md +++ b/education/software development/ECE1400/Flowcharts and Pseudocode.md @@ -46,6 +46,32 @@ end: { * * Summary: Bake a banana cake * -8 -*************************************/ -``` \ No newline at end of file +* Inputs: none +* Outputs: none +************************************** +* Pseudocode +* +* Begin +* Add 3c flour +* Add 1 1/2 tps baking soda +* Add 1/2 tsp cinnamon +* Add 1/2 tsp salt +* Stir +* Add 3 mashed bananas +* Add 1 tsp lemon juice +* Stir +* Add 3 eggs +* Add 2tsp vanilla extract +* Stir a final time +* Bake @ 350F for 50 min +* Cool for 1 hour +* End +**************************************/ +``` + +# Walking +## Instructions +3. Assume an action set of {walk \ steps, turn to \ degrees}. Draw a flowchart showing a shady path and a sunny path to get from the west doors of the Engineering Building to the south-east doors of the TSC. Pick a meaningful “if” condition to select one of the two paths. Use real-world data in your design. + +4. Represent the flowchart from problem 3 as pseudocode. + From e68f048afb56cd2983184c678928a7f5ea8149f8 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sat, 31 Aug 2024 14:04:50 -0600 Subject: [PATCH 0159/1027] vault backup: 2024-08-31 14:04:50 --- .../software development/ECE1400/Flowcharts and Pseudocode.md | 1 + 1 file changed, 1 insertion(+) diff --git a/education/software development/ECE1400/Flowcharts and Pseudocode.md b/education/software development/ECE1400/Flowcharts and Pseudocode.md index 44ede9b..dd27a8c 100644 --- a/education/software development/ECE1400/Flowcharts and Pseudocode.md +++ b/education/software development/ECE1400/Flowcharts and Pseudocode.md @@ -75,3 +75,4 @@ end: { 4. Represent the flowchart from problem 3 as pseudocode. +## \ No newline at end of file From 22fdfdff3ead680128f9c6dfcc29bfb6124b4638 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sat, 31 Aug 2024 14:09:50 -0600 Subject: [PATCH 0160/1027] vault backup: 2024-08-31 14:09:50 --- .../ECE1400/Flowcharts and Pseudocode.md | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/education/software development/ECE1400/Flowcharts and Pseudocode.md b/education/software development/ECE1400/Flowcharts and Pseudocode.md index dd27a8c..5b53a51 100644 --- a/education/software development/ECE1400/Flowcharts and Pseudocode.md +++ b/education/software development/ECE1400/Flowcharts and Pseudocode.md @@ -4,7 +4,7 @@ 1. Assume an action set of {add \, stir, bake, cool}. Draw a flowchart, using the paradigm discussed in class, to show the process of baking a banana cake. Use Google to find a typical list of ingredients. 2. Represent the flowchart from problem 1 as pseudocode. -## Diagram +## Flowchart ```d2 vars: { d2-config: { @@ -75,4 +75,11 @@ end: { 4. Represent the flowchart from problem 3 as pseudocode. -## \ No newline at end of file +## Flowchart +```d2 +classes: { +} +beginning: {shape: oval} + +end: {shape: oval} +``` \ No newline at end of file From b8be194f0a954a0b982200a84b2dfdd788078512 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sat, 31 Aug 2024 14:14:50 -0600 Subject: [PATCH 0161/1027] vault backup: 2024-08-31 14:14:50 --- .../ECE1400/Flowcharts and Pseudocode.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/education/software development/ECE1400/Flowcharts and Pseudocode.md b/education/software development/ECE1400/Flowcharts and Pseudocode.md index 5b53a51..685d2f3 100644 --- a/education/software development/ECE1400/Flowcharts and Pseudocode.md +++ b/education/software development/ECE1400/Flowcharts and Pseudocode.md @@ -75,6 +75,11 @@ end: { 4. Represent the flowchart from problem 3 as pseudocode. +%% +Sunny path: + +%% + ## Flowchart ```d2 classes: { From c0b547767d53e5852b314793461412de8a6d2a84 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sat, 31 Aug 2024 14:19:50 -0600 Subject: [PATCH 0162/1027] vault backup: 2024-08-31 14:19:50 --- .../ECE1400/Flowcharts and Pseudocode.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/education/software development/ECE1400/Flowcharts and Pseudocode.md b/education/software development/ECE1400/Flowcharts and Pseudocode.md index 685d2f3..1fa91da 100644 --- a/education/software development/ECE1400/Flowcharts and Pseudocode.md +++ b/education/software development/ECE1400/Flowcharts and Pseudocode.md @@ -76,7 +76,14 @@ end: { 4. Represent the flowchart from problem 3 as pseudocode. %% +Assuming a step distance of 2.5 feet. + Sunny path: +Total distance: 1922.59ft + +Shady path: +1710.76FT + %% From 18005358d8c1a476e57694e9d0b2df38bc748a68 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sat, 31 Aug 2024 14:24:50 -0600 Subject: [PATCH 0163/1027] vault backup: 2024-08-31 14:24:50 --- .../software development/ECE1400/Flowcharts and Pseudocode.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/education/software development/ECE1400/Flowcharts and Pseudocode.md b/education/software development/ECE1400/Flowcharts and Pseudocode.md index 1fa91da..5ea49e0 100644 --- a/education/software development/ECE1400/Flowcharts and Pseudocode.md +++ b/education/software development/ECE1400/Flowcharts and Pseudocode.md @@ -80,9 +80,11 @@ Assuming a step distance of 2.5 feet. Sunny path: Total distance: 1922.59ft +769 steps total Shady path: -1710.76FT +Turn to 180 degrees +Walk %% From e89161855698d6dfbf0201e354160a32bc47e33a Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sat, 31 Aug 2024 14:29:50 -0600 Subject: [PATCH 0164/1027] vault backup: 2024-08-31 14:29:50 --- .../ECE1400/Flowcharts and Pseudocode.md | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/education/software development/ECE1400/Flowcharts and Pseudocode.md b/education/software development/ECE1400/Flowcharts and Pseudocode.md index 5ea49e0..ace69d5 100644 --- a/education/software development/ECE1400/Flowcharts and Pseudocode.md +++ b/education/software development/ECE1400/Flowcharts and Pseudocode.md @@ -83,9 +83,12 @@ Total distance: 1922.59ft 769 steps total Shady path: -Turn to 180 degrees -Walk - +Turn to 270 degrees +Walk 40 steps +Turn to 0 degrees +Walk 120 steps +Turn to 270 degrees +Walk 400 steps %% From 99b48aa5d5cfafa997f4eb10853d9ace768a7d04 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sat, 31 Aug 2024 14:34:50 -0600 Subject: [PATCH 0165/1027] vault backup: 2024-08-31 14:34:50 --- .../ECE1400/Flowcharts and Pseudocode.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/education/software development/ECE1400/Flowcharts and Pseudocode.md b/education/software development/ECE1400/Flowcharts and Pseudocode.md index ace69d5..bb8bdc9 100644 --- a/education/software development/ECE1400/Flowcharts and Pseudocode.md +++ b/education/software development/ECE1400/Flowcharts and Pseudocode.md @@ -84,11 +84,12 @@ Total distance: 1922.59ft Shady path: Turn to 270 degrees -Walk 40 steps +Walk 73 steps Turn to 0 degrees -Walk 120 steps -Turn to 270 degrees -Walk 400 steps +Walk 94 steps +Turn to 275 degrees +Walk 467 steps + %% From e5ae89b88417cc01663d936943aaa26f12653a54 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sat, 31 Aug 2024 14:39:50 -0600 Subject: [PATCH 0166/1027] vault backup: 2024-08-31 14:39:50 --- .../ECE1400/Flowcharts and Pseudocode.md | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/education/software development/ECE1400/Flowcharts and Pseudocode.md b/education/software development/ECE1400/Flowcharts and Pseudocode.md index bb8bdc9..58440fe 100644 --- a/education/software development/ECE1400/Flowcharts and Pseudocode.md +++ b/education/software development/ECE1400/Flowcharts and Pseudocode.md @@ -9,7 +9,6 @@ vars: { d2-config: { dark-theme-id: 200 - layout-engine: elk } } grid-columns: 3 @@ -89,12 +88,20 @@ Turn to 0 degrees Walk 94 steps Turn to 275 degrees Walk 467 steps - +Turn to 180 degrees +Walk 86 steps +Turn to 270 degrees +Walk 80 steps %% ## Flowchart ```d2 +vars: { + d2-config: { + dark-theme-id: 200 + } +} classes: { } beginning: {shape: oval} From a3e58cda8771dc0017c0490856f44978d05fcdae Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sat, 31 Aug 2024 14:49:50 -0600 Subject: [PATCH 0167/1027] vault backup: 2024-08-31 14:49:50 --- .../ECE1400/Flowcharts and Pseudocode.md | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/education/software development/ECE1400/Flowcharts and Pseudocode.md b/education/software development/ECE1400/Flowcharts and Pseudocode.md index 58440fe..d3b948c 100644 --- a/education/software development/ECE1400/Flowcharts and Pseudocode.md +++ b/education/software development/ECE1400/Flowcharts and Pseudocode.md @@ -77,12 +77,15 @@ end: { %% Assuming a step distance of 2.5 feet. -Sunny path: -Total distance: 1922.59ft -769 steps total - Shady path: Turn to 270 degrees +Walk 112 steps +Turn to 225 degrees +Walk 124 steps + + +Sunny path: +Turn to 270 degrees Walk 73 steps Turn to 0 degrees Walk 94 steps From 9d284449dd9a2970cf6d91223f79376f1b3c9949 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sat, 31 Aug 2024 14:55:24 -0600 Subject: [PATCH 0168/1027] vault backup: 2024-08-31 14:55:24 --- .../ECE1400/Flowcharts and Pseudocode.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/education/software development/ECE1400/Flowcharts and Pseudocode.md b/education/software development/ECE1400/Flowcharts and Pseudocode.md index d3b948c..d972b12 100644 --- a/education/software development/ECE1400/Flowcharts and Pseudocode.md +++ b/education/software development/ECE1400/Flowcharts and Pseudocode.md @@ -82,6 +82,12 @@ Turn to 270 degrees Walk 112 steps Turn to 225 degrees Walk 124 steps +Turn to 270 degrees +Walk 361 steps +Turn to 0 degrees +Walk 176 steps +Turn to 270 degrees +Walk 62 steps Sunny path: From a52fc16bc393629cf5376bbc1ba4202912eff227 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sun, 1 Sep 2024 12:17:42 -0600 Subject: [PATCH 0169/1027] vault backup: 2024-09-01 12:17:42 --- .../ECE1400/Flowcharts and Pseudocode.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/education/software development/ECE1400/Flowcharts and Pseudocode.md b/education/software development/ECE1400/Flowcharts and Pseudocode.md index d972b12..2fbbfcc 100644 --- a/education/software development/ECE1400/Flowcharts and Pseudocode.md +++ b/education/software development/ECE1400/Flowcharts and Pseudocode.md @@ -112,8 +112,11 @@ vars: { } } classes: { + turn-0: { + label: Turn to 0 degrees + } } beginning: {shape: oval} - +turn-90.class=turn-90 end: {shape: oval} ``` \ No newline at end of file From f39f71c7cf4ee5838ad191ba4e667e959ac7803d Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sun, 1 Sep 2024 12:22:42 -0600 Subject: [PATCH 0170/1027] vault backup: 2024-09-01 12:22:42 --- .../ECE1400/Flowcharts and Pseudocode.md | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/education/software development/ECE1400/Flowcharts and Pseudocode.md b/education/software development/ECE1400/Flowcharts and Pseudocode.md index 2fbbfcc..7f97a56 100644 --- a/education/software development/ECE1400/Flowcharts and Pseudocode.md +++ b/education/software development/ECE1400/Flowcharts and Pseudocode.md @@ -113,10 +113,22 @@ vars: { } classes: { turn-0: { - label: Turn to 0 degrees + label: turn to 0 degrees + } + turn-90: { + label: turn to 90 degrees + } + turn-180: { + label: turn to 180 degrees + } + turn-270: { + label: turn to 270 degrees } } +if: { + shape: diamond + label: if\ +} beginning: {shape: oval} -turn-90.class=turn-90 end: {shape: oval} ``` \ No newline at end of file From 1a6c12d9ab27111971ba7d3c6a88111dec3cbb94 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sun, 1 Sep 2024 12:27:42 -0600 Subject: [PATCH 0171/1027] vault backup: 2024-09-01 12:27:42 --- .../ECE1400/Flowcharts and Pseudocode.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/education/software development/ECE1400/Flowcharts and Pseudocode.md b/education/software development/ECE1400/Flowcharts and Pseudocode.md index 7f97a56..f4aa3cd 100644 --- a/education/software development/ECE1400/Flowcharts and Pseudocode.md +++ b/education/software development/ECE1400/Flowcharts and Pseudocode.md @@ -127,7 +127,17 @@ classes: { } if: { shape: diamond - label: if\ + label: if\nthen else\nend +} +if -> shady: if shady path +shady { + 1.class: turn-270 + 1 -> 2 + 2.class: turn0 +} +if -> sunny: if sunny path) +sunny { + } beginning: {shape: oval} end: {shape: oval} From e7774da978b2ea2966aae08b7f2d85e21b73316c Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sun, 1 Sep 2024 12:32:42 -0600 Subject: [PATCH 0172/1027] vault backup: 2024-09-01 12:32:42 --- .../software development/ECE1400/Flowcharts and Pseudocode.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/education/software development/ECE1400/Flowcharts and Pseudocode.md b/education/software development/ECE1400/Flowcharts and Pseudocode.md index f4aa3cd..5251507 100644 --- a/education/software development/ECE1400/Flowcharts and Pseudocode.md +++ b/education/software development/ECE1400/Flowcharts and Pseudocode.md @@ -127,7 +127,8 @@ classes: { } if: { shape: diamond - label: if\nthen else\nend + label: if (shady)\n + } if -> shady: if shady path shady { From 204cfc7ecd070d892ca4f8afe73d7b1842fe12f1 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sun, 1 Sep 2024 12:37:42 -0600 Subject: [PATCH 0173/1027] vault backup: 2024-09-01 12:37:42 --- .../ECE1400/Flowcharts and Pseudocode.md | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/education/software development/ECE1400/Flowcharts and Pseudocode.md b/education/software development/ECE1400/Flowcharts and Pseudocode.md index 5251507..f0b2dcc 100644 --- a/education/software development/ECE1400/Flowcharts and Pseudocode.md +++ b/education/software development/ECE1400/Flowcharts and Pseudocode.md @@ -127,19 +127,23 @@ classes: { } if: { shape: diamond - label: if (shady)\n + label: if (shady)\n\nendif } -if -> shady: if shady path +if -> shady: { + direction: up + label: if shady path +} shady { 1.class: turn-270 1 -> 2 2.class: turn0 } +end: {shape: oval} +if -> end if -> sunny: if sunny path) sunny { - + 1.class: turn-270 } beginning: {shape: oval} -end: {shape: oval} ``` \ No newline at end of file From e9797781618a10d906f3335c32a7af0983562c79 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sun, 1 Sep 2024 12:42:42 -0600 Subject: [PATCH 0174/1027] vault backup: 2024-09-01 12:42:42 --- .../ECE1400/Flowcharts and Pseudocode.md | 53 +++++++++++-------- 1 file changed, 31 insertions(+), 22 deletions(-) diff --git a/education/software development/ECE1400/Flowcharts and Pseudocode.md b/education/software development/ECE1400/Flowcharts and Pseudocode.md index f0b2dcc..83d1074 100644 --- a/education/software development/ECE1400/Flowcharts and Pseudocode.md +++ b/education/software development/ECE1400/Flowcharts and Pseudocode.md @@ -78,29 +78,29 @@ end: { Assuming a step distance of 2.5 feet. Shady path: -Turn to 270 degrees -Walk 112 steps -Turn to 225 degrees -Walk 124 steps -Turn to 270 degrees -Walk 361 steps -Turn to 0 degrees -Walk 176 steps -Turn to 270 degrees -Walk 62 steps +1. Turn to 270 degrees +2. Walk 112 steps +3. Turn to 225 degrees +4. Walk 124 steps +5. Turn to 270 degrees +6. Walk 361 steps +7. Turn to 0 degrees +8. Walk 176 steps +9. Turn to 270 degrees +10. Walk 62 steps Sunny path: -Turn to 270 degrees -Walk 73 steps -Turn to 0 degrees -Walk 94 steps -Turn to 275 degrees -Walk 467 steps -Turn to 180 degrees -Walk 86 steps -Turn to 270 degrees -Walk 80 steps +1. Turn to 270 degrees +2. Walk 73 steps +3. Turn to 0 degrees +4. Walk 94 steps +5. Turn to 275 degrees +6. Walk 467 steps +7. Turn to 180 degrees +8. Walk 86 steps +9. Turn to 270 degrees +10. Walk 80 steps %% @@ -125,6 +125,8 @@ classes: { label: turn to 270 degrees } } +beginning: {shape: oval} +beginning -> if if: { shape: diamond label: if (shady)\n\nendif @@ -137,7 +139,15 @@ if -> shady: { shady { 1.class: turn-270 1 -> 2 - 2.class: turn0 + 2.label: walk 112 steps + 2 -> 3 + 3.label: turn to 225 degrees + 3 -> 4 + 4.label: waslk 124 steps + 4 -> 5 + 5.class: turn-270 + 5 -> 6 + 6.class: } end: {shape: oval} if -> end @@ -145,5 +155,4 @@ if -> sunny: if sunny path) sunny { 1.class: turn-270 } -beginning: {shape: oval} ``` \ No newline at end of file From 3f438555983d5c6b3b5a36c3ce608fbd00784660 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sun, 1 Sep 2024 12:47:42 -0600 Subject: [PATCH 0175/1027] vault backup: 2024-09-01 12:47:42 --- .../ECE1400/Flowcharts and Pseudocode.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/education/software development/ECE1400/Flowcharts and Pseudocode.md b/education/software development/ECE1400/Flowcharts and Pseudocode.md index 83d1074..893ed6e 100644 --- a/education/software development/ECE1400/Flowcharts and Pseudocode.md +++ b/education/software development/ECE1400/Flowcharts and Pseudocode.md @@ -147,7 +147,15 @@ shady { 4 -> 5 5.class: turn-270 5 -> 6 - 6.class: + 6.label: walk 361 steps + 6 -> 7 + 7.class: turn-0 + 7 -> 8 + 8.label: walk 176 steps + 8 -> 9 + 9.class: turn-270 + 9 -> 10 + 10.label: walk 62 steps } end: {shape: oval} if -> end From 97a0f4a1dd38651768af71fa0f65f0ab02b59015 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sun, 1 Sep 2024 12:57:42 -0600 Subject: [PATCH 0176/1027] vault backup: 2024-09-01 12:57:42 --- .../software development/ECE1400/Flowcharts and Pseudocode.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/education/software development/ECE1400/Flowcharts and Pseudocode.md b/education/software development/ECE1400/Flowcharts and Pseudocode.md index 893ed6e..3dad5e5 100644 --- a/education/software development/ECE1400/Flowcharts and Pseudocode.md +++ b/education/software development/ECE1400/Flowcharts and Pseudocode.md @@ -162,5 +162,7 @@ if -> end if -> sunny: if sunny path) sunny { 1.class: turn-270 + 1 -> 2 + 2.label: } ``` \ No newline at end of file From 33e398a1652da32b9aaa00bfd54e348656f493f8 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sun, 1 Sep 2024 13:02:42 -0600 Subject: [PATCH 0177/1027] vault backup: 2024-09-01 13:02:42 --- .../ECE1400/Flowcharts and Pseudocode.md | 20 ++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/education/software development/ECE1400/Flowcharts and Pseudocode.md b/education/software development/ECE1400/Flowcharts and Pseudocode.md index 3dad5e5..3b6763a 100644 --- a/education/software development/ECE1400/Flowcharts and Pseudocode.md +++ b/education/software development/ECE1400/Flowcharts and Pseudocode.md @@ -143,7 +143,7 @@ shady { 2 -> 3 3.label: turn to 225 degrees 3 -> 4 - 4.label: waslk 124 steps + 4.label: walk 124 steps 4 -> 5 5.class: turn-270 5 -> 6 @@ -159,10 +159,24 @@ shady { } end: {shape: oval} if -> end -if -> sunny: if sunny path) +if -> sunny: if sunny path sunny { 1.class: turn-270 1 -> 2 - 2.label: + 2.label: walk 73 steps + 2 -> 3 + 3.class: turn-0 + 3 -> 4 + 4.label: walk 94 steps + 4 -> 5: + 5.label: turn to 275 degrees + 5 -> 6 + 6.label: walk 361 steps + 6 -> 7 + 7.class: turn-0 + 7 -> 8 + 8.label: walk 176 steps + 8 -> 9 + 9.label: turn to 270 degrees } ``` \ No newline at end of file From a736e0809a3e57a657b4fbfa68525335b124e76c Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sun, 1 Sep 2024 13:07:42 -0600 Subject: [PATCH 0178/1027] vault backup: 2024-09-01 13:07:42 --- .../ECE1400/Flowcharts and Pseudocode.md | 36 ++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/education/software development/ECE1400/Flowcharts and Pseudocode.md b/education/software development/ECE1400/Flowcharts and Pseudocode.md index 3b6763a..b689a9c 100644 --- a/education/software development/ECE1400/Flowcharts and Pseudocode.md +++ b/education/software development/ECE1400/Flowcharts and Pseudocode.md @@ -137,6 +137,7 @@ if -> shady: { label: if shady path } shady { + grid-columns: 2 1.class: turn-270 1 -> 2 2.label: walk 112 steps @@ -161,6 +162,7 @@ end: {shape: oval} if -> end if -> sunny: if sunny path sunny { + grid-columns: 2 1.class: turn-270 1 -> 2 2.label: walk 73 steps @@ -168,7 +170,7 @@ sunny { 3.class: turn-0 3 -> 4 4.label: walk 94 steps - 4 -> 5: + 4 -> 5 5.label: turn to 275 degrees 5 -> 6 6.label: walk 361 steps @@ -178,5 +180,37 @@ sunny { 8.label: walk 176 steps 8 -> 9 9.label: turn to 270 degrees + 9 -> 10 + 10.label: walk 80 steps } +``` + +## Pseudocode +```c +/************************************** +* Function Title: WalkToTscFromEngr +* +* Summary: Walk from the west entrance of the engineering building +* to the southeast entrace of the taggart std +* Inputs: none +* Outputs: none +************************************** +* Pseudocode +* +* Begin +* Add 3c flour +* Add 1 1/2 tps baking soda +* Add 1/2 tsp cinnamon +* Add 1/2 tsp salt +* Stir +* Add 3 mashed bananas +* Add 1 tsp lemon juice +* Stir +* Add 3 eggs +* Add 2tsp vanilla extract +* Stir a final time +* Bake @ 350F for 50 min +* Cool for 1 hour +* End +**************************************/ ``` \ No newline at end of file From d2758c80c8839173a50ec1767273369acc25164e Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sun, 1 Sep 2024 13:12:42 -0600 Subject: [PATCH 0179/1027] vault backup: 2024-09-01 13:12:42 --- .../ECE1400/Flowcharts and Pseudocode.md | 41 ++++++++++++------- 1 file changed, 26 insertions(+), 15 deletions(-) diff --git a/education/software development/ECE1400/Flowcharts and Pseudocode.md b/education/software development/ECE1400/Flowcharts and Pseudocode.md index b689a9c..4bab9d9 100644 --- a/education/software development/ECE1400/Flowcharts and Pseudocode.md +++ b/education/software development/ECE1400/Flowcharts and Pseudocode.md @@ -191,26 +191,37 @@ sunny { * Function Title: WalkToTscFromEngr * * Summary: Walk from the west entrance of the engineering building -* to the southeast entrace of the taggart std -* Inputs: none +* to the southeast entrace of the taggart student center, using either +* a shady or sunny path +* +* Inputs: shady (boolean) * Outputs: none ************************************** * Pseudocode * * Begin -* Add 3c flour -* Add 1 1/2 tps baking soda -* Add 1/2 tsp cinnamon -* Add 1/2 tsp salt -* Stir -* Add 3 mashed bananas -* Add 1 tsp lemon juice -* Stir -* Add 3 eggs -* Add 2tsp vanilla extract -* Stir a final time -* Bake @ 350F for 50 min -* Cool for 1 hour +* If (shady) then +* Turn to 270 degrees +* Walk 112 steps +* Turn to 225 degrees +* Walk 124 steps +* Turn to 270 degrees +* Walk 361 steps +* Turn to 0 degrees +* Walk 176 steps +* Turn to 270 degrees +* Walk 62 steps +* Else + Turn to 270 degrees + Walk 73 steps + Turn to 0 degrees + Walk 94 steps + Turn to 275 degrees + Walk 467 steps + Turn to 180 degrees + Walk 86 steps + Turn to 270 degrees +. Walk 80 steps * End **************************************/ ``` \ No newline at end of file From 039b1fc979632ea6d4150c9301473b6f0c30e8fe Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sun, 1 Sep 2024 13:17:42 -0600 Subject: [PATCH 0180/1027] vault backup: 2024-09-01 13:17:42 --- .../ECE1400/Flowcharts and Pseudocode.md | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/education/software development/ECE1400/Flowcharts and Pseudocode.md b/education/software development/ECE1400/Flowcharts and Pseudocode.md index 4bab9d9..5c11b16 100644 --- a/education/software development/ECE1400/Flowcharts and Pseudocode.md +++ b/education/software development/ECE1400/Flowcharts and Pseudocode.md @@ -212,16 +212,17 @@ sunny { * Turn to 270 degrees * Walk 62 steps * Else - Turn to 270 degrees - Walk 73 steps - Turn to 0 degrees - Walk 94 steps - Turn to 275 degrees - Walk 467 steps - Turn to 180 degrees - Walk 86 steps - Turn to 270 degrees -. Walk 80 steps +* Turn to 270 degrees +* Walk 73 steps +* Turn to 0 degrees +* Walk 94 steps +* Turn to 275 degrees +* Walk 467 steps +* Turn to 180 degrees +* Walk 86 steps +* Turn to 270 degrees +* Walk 80 steps +* EndIf * End **************************************/ ``` \ No newline at end of file From eafb2881c6f511eb9784f8720d31b3d08a1addbd Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sun, 1 Sep 2024 13:22:42 -0600 Subject: [PATCH 0181/1027] vault backup: 2024-09-01 13:22:42 --- .../ECE1400/Flowcharts and Pseudocode.md | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/education/software development/ECE1400/Flowcharts and Pseudocode.md b/education/software development/ECE1400/Flowcharts and Pseudocode.md index 5c11b16..ef48920 100644 --- a/education/software development/ECE1400/Flowcharts and Pseudocode.md +++ b/education/software development/ECE1400/Flowcharts and Pseudocode.md @@ -225,4 +225,16 @@ sunny { * EndIf * End **************************************/ -``` \ No newline at end of file +``` + +# 4 Way Intersection +## Instructions +5. Develop a flowchart that describes the behavior of a set of traffic lights that control a 4-way intersection. Assume the light can either be red or green.  Define an appropriate action set that accounts for the time the light has been in the current state. + +6. Represent the flowchart from problem 5 as pseudocode. + +## Action Set +| Action name | Description | +| -- | -- | +| Set \[north, east, south, west] light to \[red, green] | +| Toggle lights | \ No newline at end of file From fbe12955c4b19cdda8d52a339eeb0b4bf0f61184 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sun, 1 Sep 2024 13:27:42 -0600 Subject: [PATCH 0182/1027] vault backup: 2024-09-01 13:27:42 --- .../ECE1400/Flowcharts and Pseudocode.md | 23 +++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/education/software development/ECE1400/Flowcharts and Pseudocode.md b/education/software development/ECE1400/Flowcharts and Pseudocode.md index ef48920..09d34a7 100644 --- a/education/software development/ECE1400/Flowcharts and Pseudocode.md +++ b/education/software development/ECE1400/Flowcharts and Pseudocode.md @@ -236,5 +236,24 @@ sunny { ## Action Set | Action name | Description | | -- | -- | -| Set \[north, east, south, west] light to \[red, green] | -| Toggle lights | \ No newline at end of file +| Set \[north, east, south, west] light to \[red, green] | Set the specified light to either red or green | +| Toggle lights | Change the color of all 4 lights to the color they were not | +| Wait \[number of seconds] seconds | Pause for \[number of seconds] seconds before continuing to the next instruction | + +## Flowchart +```d2 +vars: { + d2-config: { + dark-theme-id: 200 + } +} +classes: { + toggle-lights: { + label: Toggle lights + } +} + +beginning: { + shape: +} +``` \ No newline at end of file From 897e916e82df7928a41e1615c05bd0bad56b9c98 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sun, 1 Sep 2024 13:32:42 -0600 Subject: [PATCH 0183/1027] vault backup: 2024-09-01 13:32:42 --- .../ECE1400/Flowcharts and Pseudocode.md | 25 ++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/education/software development/ECE1400/Flowcharts and Pseudocode.md b/education/software development/ECE1400/Flowcharts and Pseudocode.md index 09d34a7..459580c 100644 --- a/education/software development/ECE1400/Flowcharts and Pseudocode.md +++ b/education/software development/ECE1400/Flowcharts and Pseudocode.md @@ -254,6 +254,29 @@ classes: { } beginning: { - shape: + shape: oval + label: beginning +} +beginning -> initialize lights +initialize lights { + 1.label: set the north light to red + 1 -> 2 + 2.label: set the south light to red + 2 -> 3 + 3.label: set the east light to green + 3 -> 4 + 4.label: set the west light to green +} +initialize lights -> 1 +loop-begin: { + shape: step + label: loop indefinitely +} +1.label: wait 30 seconds +1 -> loop-begin + +end: { + shape: oval + label: end } ``` \ No newline at end of file From 98825e377fac996c1c90b8214e9dc66bd113a0be Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sun, 1 Sep 2024 13:37:42 -0600 Subject: [PATCH 0184/1027] vault backup: 2024-09-01 13:37:42 --- .../ECE1400/Flowcharts and Pseudocode.md | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/education/software development/ECE1400/Flowcharts and Pseudocode.md b/education/software development/ECE1400/Flowcharts and Pseudocode.md index 459580c..076a52e 100644 --- a/education/software development/ECE1400/Flowcharts and Pseudocode.md +++ b/education/software development/ECE1400/Flowcharts and Pseudocode.md @@ -267,14 +267,19 @@ initialize lights { 3 -> 4 4.label: set the west light to green } -initialize lights -> 1 -loop-begin: { - shape: step +initialize lights -> loop +loop { label: loop indefinitely + begin-loop: { + shape: step + label: begin loop + } + begin-loop -> 1 + 1.label: wait 30 seconds + 1 -> 2 + 2.label: toggle lights + end loop } -1.label: wait 30 seconds -1 -> loop-begin - end: { shape: oval label: end From 69804b1e649b83c9a2015752111568fc0d52f553 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sun, 1 Sep 2024 13:42:42 -0600 Subject: [PATCH 0185/1027] vault backup: 2024-09-01 13:42:42 --- .../ECE1400/Flowcharts and Pseudocode.md | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/education/software development/ECE1400/Flowcharts and Pseudocode.md b/education/software development/ECE1400/Flowcharts and Pseudocode.md index 076a52e..34b251e 100644 --- a/education/software development/ECE1400/Flowcharts and Pseudocode.md +++ b/education/software development/ECE1400/Flowcharts and Pseudocode.md @@ -252,13 +252,13 @@ classes: { label: Toggle lights } } - beginning: { shape: oval label: beginning } beginning -> initialize lights initialize lights { + grid-columns: 1 1.label: set the north light to red 1 -> 2 2.label: set the south light to red @@ -272,14 +272,20 @@ loop { label: loop indefinitely begin-loop: { shape: step - label: begin loop + label: begin iteration } begin-loop -> 1 1.label: wait 30 seconds 1 -> 2 2.label: toggle lights - end loop + end-loop: { + shape: step + label: end iteration + } + 2 -> end-loop + end-loop -> begin-loop } +loop -> end: the heat death of the universe end: { shape: oval label: end From 88b12e7d79400bcb1c05caa92b80ac4f8fe92b61 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sun, 1 Sep 2024 13:47:42 -0600 Subject: [PATCH 0186/1027] vault backup: 2024-09-01 13:47:42 --- .../software development/ECE1400/Flowcharts and Pseudocode.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/education/software development/ECE1400/Flowcharts and Pseudocode.md b/education/software development/ECE1400/Flowcharts and Pseudocode.md index 34b251e..cd131cc 100644 --- a/education/software development/ECE1400/Flowcharts and Pseudocode.md +++ b/education/software development/ECE1400/Flowcharts and Pseudocode.md @@ -252,6 +252,7 @@ classes: { label: Toggle lights } } +direction: right beginning: { shape: oval label: beginning @@ -269,6 +270,7 @@ initialize lights { } initialize lights -> loop loop { + near: center-right label: loop indefinitely begin-loop: { shape: step @@ -287,6 +289,7 @@ loop { } loop -> end: the heat death of the universe end: { + near: bottom-right shape: oval label: end } From 8d89323aeda5aa197bcf6ac846d541e3edd03177 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sun, 1 Sep 2024 13:52:42 -0600 Subject: [PATCH 0187/1027] vault backup: 2024-09-01 13:52:42 --- .../ECE1400/Flowcharts and Pseudocode.md | 32 ++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/education/software development/ECE1400/Flowcharts and Pseudocode.md b/education/software development/ECE1400/Flowcharts and Pseudocode.md index cd131cc..951e269 100644 --- a/education/software development/ECE1400/Flowcharts and Pseudocode.md +++ b/education/software development/ECE1400/Flowcharts and Pseudocode.md @@ -252,7 +252,6 @@ classes: { label: Toggle lights } } -direction: right beginning: { shape: oval label: beginning @@ -293,4 +292,35 @@ end: { shape: oval label: end } +``` + + +## Pseudocode +```c +/************************************** +* Function Title: BakeBananaCake +* +* Summary: Bake a banana cake +* +* Inputs: none +* Outputs: none +************************************** +* Pseudocode +* +* Begin +* Add 3c flour +* Add 1 1/2 tps baking soda +* Add 1/2 tsp cinnamon +* Add 1/2 tsp salt +* Stir +* Add 3 mashed bananas +* Add 1 tsp lemon juice +* Stir +* Add 3 eggs +* Add 2tsp vanilla extract +* Stir a final time +* Bake @ 350F for 50 min +* Cool for 1 hour +* End +**************************************/ ``` \ No newline at end of file From edd0bf0e235a8d648cdbf50ad1168ef09600e7e1 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sun, 1 Sep 2024 13:57:42 -0600 Subject: [PATCH 0188/1027] vault backup: 2024-09-01 13:57:42 --- .../ECE1400/Flowcharts and Pseudocode.md | 28 ++++++++----------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/education/software development/ECE1400/Flowcharts and Pseudocode.md b/education/software development/ECE1400/Flowcharts and Pseudocode.md index 951e269..b47984f 100644 --- a/education/software development/ECE1400/Flowcharts and Pseudocode.md +++ b/education/software development/ECE1400/Flowcharts and Pseudocode.md @@ -298,9 +298,9 @@ end: { ## Pseudocode ```c /************************************** -* Function Title: BakeBananaCake +* Function Title: RunStopLights * -* Summary: Bake a banana cake +* Summary: Operate stoplights for a 4 way intersection * * Inputs: none * Outputs: none @@ -308,19 +308,15 @@ end: { * Pseudocode * * Begin -* Add 3c flour -* Add 1 1/2 tps baking soda -* Add 1/2 tsp cinnamon -* Add 1/2 tsp salt -* Stir -* Add 3 mashed bananas -* Add 1 tsp lemon juice -* Stir -* Add 3 eggs -* Add 2tsp vanilla extract -* Stir a final time -* Bake @ 350F for 50 min -* Cool for 1 hour +* Set the north light to red +* Set the south light to red +* Set the east light to green +* Set the west light to green +* Loop indefinitely +* Wait 30 seconds +* Toggle lights +* EndLoop * End **************************************/ -``` \ No newline at end of file +``` + From 1e3287ec1a4f76dfbfe9857beacba28c24f5e3a8 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 4 Sep 2024 09:51:59 -0600 Subject: [PATCH 0189/1027] vault backup: 2024-09-04 09:51:59 --- education/nutrition/Nutrients.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 education/nutrition/Nutrients.md diff --git a/education/nutrition/Nutrients.md b/education/nutrition/Nutrients.md new file mode 100644 index 0000000..60c20c8 --- /dev/null +++ b/education/nutrition/Nutrients.md @@ -0,0 +1 @@ +- Food \ No newline at end of file From f515cd6ebc055b5323d9cd76203d89ac22731b8f Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 4 Sep 2024 10:15:35 -0600 Subject: [PATCH 0190/1027] vault backup: 2024-09-04 10:15:35 --- education/math/MATH1060 (trig)/Angles.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/education/math/MATH1060 (trig)/Angles.md b/education/math/MATH1060 (trig)/Angles.md index a2b08d4..af19aa0 100644 --- a/education/math/MATH1060 (trig)/Angles.md +++ b/education/math/MATH1060 (trig)/Angles.md @@ -18,6 +18,15 @@ A **supplementary** angle is formed when two positive angles add up to $180\degr > Supplementary starts with S and S stands for straight. $180\degree$ makes a straight line. Angles greater than $90\degree$ have no complement and angles greater than $180\degree$ have no supplement. + +# Right Angle Trigonometry +| SohCahToa | Inverse | +| --------------------------------------------- | --------------------------------------------- | +| $$ sin\theta = \frac{opposite}{hypotenuse} $$ | $$ csc\theta = \frac{hypotenuse}{opposite}$$ | +| $$ cos\theta = \frac{adjacent}{hypotenuse} $$ | $$ sec\theta = \frac{hypotenuse}{adjacent} $$ | +| $$ tan\theta = \frac{opposite}{adjacent} $$ | $$ cot\theta = \frac{adjacent}{opposite} $$ | +| | | + # Definitions | Term | Description | | -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | From 7ce0a42856f300c9569d1701499acfbf6de8e275 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 4 Sep 2024 10:28:39 -0600 Subject: [PATCH 0191/1027] vault backup: 2024-09-04 10:28:39 --- education/math/MATH1060 (trig)/Angles.md | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/education/math/MATH1060 (trig)/Angles.md b/education/math/MATH1060 (trig)/Angles.md index af19aa0..855c867 100644 --- a/education/math/MATH1060 (trig)/Angles.md +++ b/education/math/MATH1060 (trig)/Angles.md @@ -19,13 +19,18 @@ A **supplementary** angle is formed when two positive angles add up to $180\degr Angles greater than $90\degree$ have no complement and angles greater than $180\degree$ have no supplement. -# Right Angle Trigonometry +# Right Angle Triangle Trigonometry + | SohCahToa | Inverse | | --------------------------------------------- | --------------------------------------------- | | $$ sin\theta = \frac{opposite}{hypotenuse} $$ | $$ csc\theta = \frac{hypotenuse}{opposite}$$ | | $$ cos\theta = \frac{adjacent}{hypotenuse} $$ | $$ sec\theta = \frac{hypotenuse}{adjacent} $$ | | $$ tan\theta = \frac{opposite}{adjacent} $$ | $$ cot\theta = \frac{adjacent}{opposite} $$ | -| | | +These rules apply regardless of the orientation of the triangle. + +Cosecant, secant, and tangent are inverses of sine, cosine, and tangent respectively, and so they can be found by taking $\frac{1}{x}$, where $x$ is the function you'd like to find the inverse of. + + # Definitions | Term | Description | @@ -40,5 +45,6 @@ Angles greater than $90\degree$ have no complement and angles greater than $180\ | Radian | Denoted with $rad$, one radian is equal to the radius, but it's measured along the arc in a curve instead of from the center. | | Complementary Angles | Two positive angles that add up to $90\degree$ or $\frac{\pi}{2}$. One mnemonic device that you can use to remember this is:

Complementary starts with C, and C stands for corner. $90\degree$ makes a corner. | | Supplementary Angles | Two positive angles that add up to $180\degree$ or $\pi$. One mnemonic device that you can use to remember this is:

Supplementary starts with S and S stands for straight. $180\degree$ makes a straight line. | -| | | -| | | +| Hypotenuse | The side opposite the right angle in a triangle. | +| Opposite | | +| Adjacent | For a given angle $\theta$ in a right triangle, this side makes up the side of the intersection opposite the hypotenuse. | From bce1f72ff3e4d2abb9dedf4eabfd41aa2fc8a3fb Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 4 Sep 2024 10:33:39 -0600 Subject: [PATCH 0192/1027] vault backup: 2024-09-04 10:33:39 --- education/math/MATH1060 (trig)/Angles.md | 2 +- education/nutrition/Nutrients.md | 21 ++++++++++++++++++++- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/education/math/MATH1060 (trig)/Angles.md b/education/math/MATH1060 (trig)/Angles.md index 855c867..f3da1ab 100644 --- a/education/math/MATH1060 (trig)/Angles.md +++ b/education/math/MATH1060 (trig)/Angles.md @@ -46,5 +46,5 @@ Cosecant, secant, and tangent are inverses of sine, cosine, and tangent respecti | Complementary Angles | Two positive angles that add up to $90\degree$ or $\frac{\pi}{2}$. One mnemonic device that you can use to remember this is:

Complementary starts with C, and C stands for corner. $90\degree$ makes a corner. | | Supplementary Angles | Two positive angles that add up to $180\degree$ or $\pi$. One mnemonic device that you can use to remember this is:

Supplementary starts with S and S stands for straight. $180\degree$ makes a straight line. | | Hypotenuse | The side opposite the right angle in a triangle. | -| Opposite | | +| Opposite | For a given angle $\theta$ in a right triangle, this is the side that does not touch that angle. | | Adjacent | For a given angle $\theta$ in a right triangle, this side makes up the side of the intersection opposite the hypotenuse. | diff --git a/education/nutrition/Nutrients.md b/education/nutrition/Nutrients.md index 60c20c8..dc90d9a 100644 --- a/education/nutrition/Nutrients.md +++ b/education/nutrition/Nutrients.md @@ -1 +1,20 @@ -- Food \ No newline at end of file +Nutrients are the life sustaining substances found in food. +- Necessary for growth, maintenance, and repair. + +There are 6 nutrients: + - Vitamins + - Minerals + - Carbs + - Lipids + - Proteins + - Water + +A + +# Definitions +| Term | Definition | +| --------- | -------------------------------------------------------------------------------------------- | +| Nutrients | The life sustaining substances found in food. Necessary for growth, maintenance, and repair. | +| Nutrition | The study of how nutrients affect our body. | +| Diet | The usual pattern of food choices | +| Lipid | Fat | \ No newline at end of file From db98ded607d4aac13c90576e1b781d363b42bf48 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 4 Sep 2024 10:38:39 -0600 Subject: [PATCH 0193/1027] vault backup: 2024-09-04 10:38:39 --- education/nutrition/Nutrients.md | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/education/nutrition/Nutrients.md b/education/nutrition/Nutrients.md index dc90d9a..d5fe0a8 100644 --- a/education/nutrition/Nutrients.md +++ b/education/nutrition/Nutrients.md @@ -9,12 +9,23 @@ There are 6 nutrients: - Proteins - Water -A +A macronutrient is a nutrient the body requires in large quantities, whereas a micronutrient is a nutrient the body requires in small quantities. +| Macronutrients | Micronutrients | +| -------------- | -------------- | +| Carbs | Vitamins | +| Lipids | Minerals | +| Proteins | | +Nutrients are used for: +- Growth and development +- Energy +- Regulation of processes # Definitions -| Term | Definition | -| --------- | -------------------------------------------------------------------------------------------- | -| Nutrients | The life sustaining substances found in food. Necessary for growth, maintenance, and repair. | -| Nutrition | The study of how nutrients affect our body. | -| Diet | The usual pattern of food choices | -| Lipid | Fat | \ No newline at end of file +| Term | Definition | +| ------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Nutrients | The life sustaining substances found in food. Necessary for growth, maintenance, and repair. | +| Nutrition | The study of how nutrients affect our body. | +| Diet | A person's usual pattern of food choices. Everyone has a diet, and you don't begin and end diets, you just make changes to your existing diet. | +| Lipid | Fat | +| Organic | An organic substance contains *carbon*, and can be degraded. | +| Essential nutrient | A nutrient is considered *essential* if it *must* be supplied by food, because the body cannot create it in sufficient quantities. If an essential nutrient is missin | \ No newline at end of file From 9e3da64671d7994799b82b0e9437f5e1fffb4907 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 4 Sep 2024 10:43:39 -0600 Subject: [PATCH 0194/1027] vault backup: 2024-09-04 10:43:39 --- education/nutrition/Nutrients.md | 35 ++++++++++++++++++++++++-------- 1 file changed, 27 insertions(+), 8 deletions(-) diff --git a/education/nutrition/Nutrients.md b/education/nutrition/Nutrients.md index d5fe0a8..92d9d7f 100644 --- a/education/nutrition/Nutrients.md +++ b/education/nutrition/Nutrients.md @@ -16,16 +16,35 @@ A macronutrient is a nutrient the body requires in large quantities, whereas a m | Carbs | Vitamins | | Lipids | Minerals | | Proteins | | + Nutrients are used for: - Growth and development - Energy - Regulation of processes + +## Essential Nutrients +A nutrient is classified as essential if: +- It must be supplied by food, because the body cannot create it in sufficient quantities +- If the nutrient is missing, it results in a deficiency disease +- When added back to the diet, the disease corrects +- Explanation exists as to why the abnormalities occurred when the substance was missing. + +## Phytochemicals +Phytochemicals are substances in plants that *may* have healthful benefits. Examples of phytochemicals include: +- Caffeine +- Beta-carotene +- Nicotine + +## Calories +In nutrition, the term Calorie typically refers to a kilocalorie, or 1000 calories, where a calorie is the amount of energy needed to heat up one gram of water one degree Celsius. + # Definitions -| Term | Definition | -| ------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Nutrients | The life sustaining substances found in food. Necessary for growth, maintenance, and repair. | -| Nutrition | The study of how nutrients affect our body. | -| Diet | A person's usual pattern of food choices. Everyone has a diet, and you don't begin and end diets, you just make changes to your existing diet. | -| Lipid | Fat | -| Organic | An organic substance contains *carbon*, and can be degraded. | -| Essential nutrient | A nutrient is considered *essential* if it *must* be supplied by food, because the body cannot create it in sufficient quantities. If an essential nutrient is missin | \ No newline at end of file +| Term | Definition | +| ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Nutrients | The life sustaining substances found in food. Necessary for growth, maintenance, and repair. | +| Nutrition | The study of how nutrients affect our body. | +| Diet | A person's usual pattern of food choices. Everyone has a diet, and you don't begin and end diets, you just make changes to your existing diet. | +| Lipid | Fat | +| Organic | An organic substance contains *carbon*, and can be degraded. | +| Essential nutrient | A nutrient is considered *essential* if it *must* be supplied by food, because the body cannot create it in sufficient quantities. If an essential nutrient is missing, it results in a *deficiency disease*. | +| Deficiency disease | A deficiency disease occurs when an essential nutrient is missing. Examples include anemia (iron) and scurvy (vitamin c) | \ No newline at end of file From 8906ccdc1df5815ce1e1b215a35df316eacda99a Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 4 Sep 2024 10:49:41 -0600 Subject: [PATCH 0195/1027] vault backup: 2024-09-04 10:49:41 --- education/math/MATH1060 (trig)/Angles.md | 2 -- education/nutrition/Nutrients.md | 26 +++++++++++++++++++++++- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/education/math/MATH1060 (trig)/Angles.md b/education/math/MATH1060 (trig)/Angles.md index f3da1ab..b38b44f 100644 --- a/education/math/MATH1060 (trig)/Angles.md +++ b/education/math/MATH1060 (trig)/Angles.md @@ -30,8 +30,6 @@ These rules apply regardless of the orientation of the triangle. Cosecant, secant, and tangent are inverses of sine, cosine, and tangent respectively, and so they can be found by taking $\frac{1}{x}$, where $x$ is the function you'd like to find the inverse of. - - # Definitions | Term | Description | | -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | diff --git a/education/nutrition/Nutrients.md b/education/nutrition/Nutrients.md index 92d9d7f..5f6b297 100644 --- a/education/nutrition/Nutrients.md +++ b/education/nutrition/Nutrients.md @@ -38,6 +38,29 @@ Phytochemicals are substances in plants that *may* have healthful benefits. Exam ## Calories In nutrition, the term Calorie typically refers to a kilocalorie, or 1000 calories, where a calorie is the amount of energy needed to heat up one gram of water one degree Celsius. +Kilocalories are used to measure the amount of energy that can be gained from food. + +| Food | Energy Gained | +| ----------------- | ------------- | +| 1 gram of carbs | 4 kcal | +| 1 gram of protein | 4kcal | +| 1 gram of fat | 9kcal | +| 1 gram of alcohol | 7kcal | +No other nutrients provide energy. + +## Chronic Disease +Chronic disease takes years to develop and typically have no discrete source. Examples of chronic disease include: +- Heart disease +- Diabetes +- Cancer +## Eating Habits +Biological and physiological factors influence eating habits. Examples of factors include (but are not limited to): +- Age +- Taste, smell, texture +- Internal sensations of hunger and thirst +- Relationships +- Income + # Definitions | Term | Definition | | ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | @@ -47,4 +70,5 @@ In nutrition, the term Calorie typically refers to a kilocalorie, or 1000 calori | Lipid | Fat | | Organic | An organic substance contains *carbon*, and can be degraded. | | Essential nutrient | A nutrient is considered *essential* if it *must* be supplied by food, because the body cannot create it in sufficient quantities. If an essential nutrient is missing, it results in a *deficiency disease*. | -| Deficiency disease | A deficiency disease occurs when an essential nutrient is missing. Examples include anemia (iron) and scurvy (vitamin c) | \ No newline at end of file +| Deficiency disease | A deficiency disease occurs when an essential nutrient is missing. Examples include anemia (iron) and scurvy (vitamin c) | +| Lifestyle | A routine way of living | \ No newline at end of file From f46747470166d4598f2a4581b9765795f7111ed6 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 4 Sep 2024 10:54:42 -0600 Subject: [PATCH 0196/1027] vault backup: 2024-09-04 10:54:42 --- education/math/MATH1060 (trig)/Angles.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/education/math/MATH1060 (trig)/Angles.md b/education/math/MATH1060 (trig)/Angles.md index b38b44f..d717c88 100644 --- a/education/math/MATH1060 (trig)/Angles.md +++ b/education/math/MATH1060 (trig)/Angles.md @@ -19,7 +19,14 @@ A **supplementary** angle is formed when two positive angles add up to $180\degr Angles greater than $90\degree$ have no complement and angles greater than $180\degree$ have no supplement. -# Right Angle Triangle Trigonometry +# Triangles +Triangles are typically notated using $A$, $B$, and $C$ for the angles of a triangle, and $a$, $b$, and $c$ for the sides of a triangle. $C$ will always be the right angle, and $c$ will always refer to the hypotenuse, but $A$/$a$ and $B$/$b$ are used interchangeably. + +For any valid triangle, all three angles will *always* add up to $180\degree$. + +$$ \angle A + \angle B + \angle C = 180 $$ + +## Right Angle Triangle Trigonometry | SohCahToa | Inverse | | --------------------------------------------- | --------------------------------------------- | From 02ab1951237a7d914088c692ab9d807d2b86f95a Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 4 Sep 2024 11:21:13 -0600 Subject: [PATCH 0197/1027] vault backup: 2024-09-04 11:21:13 --- ...How to Tame a Wild Tongue\" - Anzaldua.md" | 3 ++ education/english/School Proposal.md | 31 ------------------- 2 files changed, 3 insertions(+), 31 deletions(-) create mode 100644 "education/english/ENGL2010/\"How to Tame a Wild Tongue\" - Anzaldua.md" delete mode 100644 education/english/School Proposal.md diff --git "a/education/english/ENGL2010/\"How to Tame a Wild Tongue\" - Anzaldua.md" "b/education/english/ENGL2010/\"How to Tame a Wild Tongue\" - Anzaldua.md" new file mode 100644 index 0000000..6bc24cd --- /dev/null +++ "b/education/english/ENGL2010/\"How to Tame a Wild Tongue\" - Anzaldua.md" @@ -0,0 +1,3 @@ +- Author got punished for speaking Spanish at recess +- Classes were taught on how to speak without an accent +- The idea was propo \ No newline at end of file diff --git a/education/english/School Proposal.md b/education/english/School Proposal.md deleted file mode 100644 index 347b7ea..0000000 --- a/education/english/School Proposal.md +++ /dev/null @@ -1,31 +0,0 @@ -# Thesis -The school should support food trucks during lunch. - -# Problem -Many students want better lunch options (look at the ala cart line, interview students), and the school can always use more funding. If the school encourages food trucks to park in the bus parking area during lunch (possibly for a fee or % of income), than it benefits the school because they gain profit, it benefits the students because they get more food options - -TODO: figure out what payment system the school uses, and whether or not they could offer support to food trucks -TODO: maybe bring food on presentation day for them? -## Pros -- students get better lunch options -- they can get back to school earlier (help with tardies after lunch) -- school fundraisers could use the food trucks (like w/ noodles and co) -- school can get money from the thing -- supports local small businesses -- encourage students to walk around outside - -## Cost - -## Advertising - -# Feasibility -- It is legally defensible to restrict the sale of competitive foods *on campus* -- *States* can restrict the sale of competitive foods, Utah appears to restrict them based solely off of nutritional value -- - -# Links -https://www.cdc.gov/healthyschools/mih/pdf/approach5.pdf -https://www.govinfo.gov/content/pkg/PLAW-111publ296/pdf/PLAW-111publ296.pdf -https://statepolicies.nasbe.org/health/categories/nutrition-environment-and-services/competitive-foods-es/utah -https://schools.utah.gov/file/ee7be5e9-2d64-45a4-9a53-fa215fff07df -https://gis.cachecounty.org/Websites/Parcel%20and%20Zoning%20Viewer/ From 55de7f3916e1dc939110b53a4cfc861b2fe306ab Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 4 Sep 2024 11:26:13 -0600 Subject: [PATCH 0198/1027] vault backup: 2024-09-04 11:26:13 --- .../\"How to Tame a Wild Tongue\" - Anzaldua.md" | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git "a/education/english/ENGL2010/\"How to Tame a Wild Tongue\" - Anzaldua.md" "b/education/english/ENGL2010/\"How to Tame a Wild Tongue\" - Anzaldua.md" index 6bc24cd..a257c74 100644 --- "a/education/english/ENGL2010/\"How to Tame a Wild Tongue\" - Anzaldua.md" +++ "b/education/english/ENGL2010/\"How to Tame a Wild Tongue\" - Anzaldua.md" @@ -1,3 +1,11 @@ -- Author got punished for speaking Spanish at recess -- Classes were taught on how to speak without an accent -- The idea was propo \ No newline at end of file +The author grew up in between American and Mexican cultures. In school, she got punished for speaking Spanish at recess, and in college, she had to attend classes that were taught on how to speak without an accent. + +She proposes the idea that languages are living. They constantly evolve, and different dialects can form as a means of expression or through localization. Languages can mix and merge to form new dialects that contain ideas from both. +- The idea was proposed that languages can form in a way that's predominantly a male discourse. +- Languages are living, and dialects form as a means of expression. +- Languages mix and merge. +- Discrimination and segregation occur because of language, and vice versa. +- The language someone speaks is a large part of their identity. +- Art created with a culture specific dialect can hold immense significance for members of that culture, and can be a means of sharing that culture. +- The culture you exist in becomes internalized in your identity. +- Excluding groups from a culture can lead to new cultures forming. \ No newline at end of file From 1c45dd05639945d4969d28feeecea87e782ab8aa Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 4 Sep 2024 12:10:32 -0600 Subject: [PATCH 0199/1027] vault backup: 2024-09-04 12:10:32 --- .../ENGL2010/\"How to Tame a Wild Tongue\" - Anzaldua.md" | 2 ++ 1 file changed, 2 insertions(+) diff --git "a/education/english/ENGL2010/\"How to Tame a Wild Tongue\" - Anzaldua.md" "b/education/english/ENGL2010/\"How to Tame a Wild Tongue\" - Anzaldua.md" index a257c74..4a80400 100644 --- "a/education/english/ENGL2010/\"How to Tame a Wild Tongue\" - Anzaldua.md" +++ "b/education/english/ENGL2010/\"How to Tame a Wild Tongue\" - Anzaldua.md" @@ -1,6 +1,8 @@ The author grew up in between American and Mexican cultures. In school, she got punished for speaking Spanish at recess, and in college, she had to attend classes that were taught on how to speak without an accent. She proposes the idea that languages are living. They constantly evolve, and different dialects can form as a means of expression or through localization. Languages can mix and merge to form new dialects that contain ideas from both. + +The author then goes on to explain that languages are often used as a means of discrimination, and segregation. However, the inverse is also true. Discriminated groups will often form a new dialect or culture as a result of that discrimination. - The idea was proposed that languages can form in a way that's predominantly a male discourse. - Languages are living, and dialects form as a means of expression. - Languages mix and merge. From fa72b8d9e472c64de6a7330f08023a5159150035 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 4 Sep 2024 12:15:32 -0600 Subject: [PATCH 0200/1027] vault backup: 2024-09-04 12:15:32 --- .../ENGL2010/\"How to Tame a Wild Tongue\" - Anzaldua.md" | 2 ++ 1 file changed, 2 insertions(+) diff --git "a/education/english/ENGL2010/\"How to Tame a Wild Tongue\" - Anzaldua.md" "b/education/english/ENGL2010/\"How to Tame a Wild Tongue\" - Anzaldua.md" index 4a80400..ed98503 100644 --- "a/education/english/ENGL2010/\"How to Tame a Wild Tongue\" - Anzaldua.md" +++ "b/education/english/ENGL2010/\"How to Tame a Wild Tongue\" - Anzaldua.md" @@ -3,6 +3,8 @@ The author grew up in between American and Mexican cultures. In school, she got She proposes the idea that languages are living. They constantly evolve, and different dialects can form as a means of expression or through localization. Languages can mix and merge to form new dialects that contain ideas from both. The author then goes on to explain that languages are often used as a means of discrimination, and segregation. However, the inverse is also true. Discriminated groups will often form a new dialect or culture as a result of that discrimination. + + - The idea was proposed that languages can form in a way that's predominantly a male discourse. - Languages are living, and dialects form as a means of expression. - Languages mix and merge. From aeb183ed952b66838d812808f017947443b49b4f Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 4 Sep 2024 13:20:28 -0600 Subject: [PATCH 0201/1027] vault backup: 2024-09-04 13:20:28 --- education/nutrition/Nutrients.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/education/nutrition/Nutrients.md b/education/nutrition/Nutrients.md index 5f6b297..39eb155 100644 --- a/education/nutrition/Nutrients.md +++ b/education/nutrition/Nutrients.md @@ -61,13 +61,16 @@ Biological and physiological factors influence eating habits. Examples of factor - Relationships - Income +## Physiological Composition +The proportions present in males and females varies, but between 50 and 70% by weight of the body is composed of water. + # Definitions | Term | Definition | | ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Nutrients | The life sustaining substances found in food. Necessary for growth, maintenance, and repair. | | Nutrition | The study of how nutrients affect our body. | | Diet | A person's usual pattern of food choices. Everyone has a diet, and you don't begin and end diets, you just make changes to your existing diet. | -| Lipid | Fat | +| Lipid | Fats and oils. | | Organic | An organic substance contains *carbon*, and can be degraded. | | Essential nutrient | A nutrient is considered *essential* if it *must* be supplied by food, because the body cannot create it in sufficient quantities. If an essential nutrient is missing, it results in a *deficiency disease*. | | Deficiency disease | A deficiency disease occurs when an essential nutrient is missing. Examples include anemia (iron) and scurvy (vitamin c) | From 29ad09946c7a6ddd479e1a9c361687d85cf9f0b1 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 4 Sep 2024 13:25:28 -0600 Subject: [PATCH 0202/1027] vault backup: 2024-09-04 13:25:28 --- education/nutrition/Nutrients.md | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/education/nutrition/Nutrients.md b/education/nutrition/Nutrients.md index 39eb155..a4a9713 100644 --- a/education/nutrition/Nutrients.md +++ b/education/nutrition/Nutrients.md @@ -1,5 +1,6 @@ Nutrients are the life sustaining substances found in food. - Necessary for growth, maintenance, and repair. +- Source of raw elements the body uses to carry out activities (oxygen, carbon, hydrogen, nitrogen, and calcium). There are 6 nutrients: - Vitamins @@ -22,6 +23,7 @@ Nutrients are used for: - Energy - Regulation of processes +Nutrients will typically have more than one role in the body. ## Essential Nutrients A nutrient is classified as essential if: - It must be supplied by food, because the body cannot create it in sufficient quantities @@ -62,16 +64,18 @@ Biological and physiological factors influence eating habits. Examples of factor - Income ## Physiological Composition -The proportions present in males and females varies, but between 50 and 70% by weight of the body is composed of water. +The proportions present in males and females varies, but between 50 and 70% by weight of the body is composed of water. Women tend to have less water and protein, with more fat. # Definitions -| Term | Definition | -| ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Nutrients | The life sustaining substances found in food. Necessary for growth, maintenance, and repair. | -| Nutrition | The study of how nutrients affect our body. | -| Diet | A person's usual pattern of food choices. Everyone has a diet, and you don't begin and end diets, you just make changes to your existing diet. | -| Lipid | Fats and oils. | -| Organic | An organic substance contains *carbon*, and can be degraded. | -| Essential nutrient | A nutrient is considered *essential* if it *must* be supplied by food, because the body cannot create it in sufficient quantities. If an essential nutrient is missing, it results in a *deficiency disease*. | -| Deficiency disease | A deficiency disease occurs when an essential nutrient is missing. Examples include anemia (iron) and scurvy (vitamin c) | -| Lifestyle | A routine way of living | \ No newline at end of file +| Term | Definition | +| ------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Nutrients | The life sustaining substances found in food. Necessary for growth, maintenance, and repair. | +| Nutrition | The study of how nutrients affect our body. | +| Diet | A person's usual pattern of food choices. Everyone has a diet, and you don't begin and end diets, you just make changes to your existing diet. | +| Lipid | Fats and oils. | +| Organic | An organic substance contains *carbon*, and can be degraded. | +| Essential nutrient | A nutrient is considered *essential* if it *must* be supplied by food, because the body cannot create it in sufficient quantities. If an essential nutrient is missing, it results in a *deficiency disease*. | +| Deficiency disease | A deficiency disease occurs when an essential nutrient is missing. Examples include anemia (iron) and scurvy (vitamin c) | +| Lifestyle | A routine way of living | +| Metabolism | Metabolism is the term for all chemical processes that occur in living cells. This includes:
- Breaking larger molecules down into smaller molecules (supplying energy)
- Building larger molecules (like protiens or long-chain fats)
- Eliminating waste products
| +| | | \ No newline at end of file From 79373ed944bf882beea79735c1c7b4615e3319e5 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 4 Sep 2024 13:30:28 -0600 Subject: [PATCH 0203/1027] vault backup: 2024-09-04 13:30:28 --- education/nutrition/Nutrients.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/education/nutrition/Nutrients.md b/education/nutrition/Nutrients.md index a4a9713..1cedad7 100644 --- a/education/nutrition/Nutrients.md +++ b/education/nutrition/Nutrients.md @@ -1,6 +1,6 @@ Nutrients are the life sustaining substances found in food. - Necessary for growth, maintenance, and repair. -- Source of raw elements the body uses to carry out activities (oxygen, carbon, hydrogen, nitrogen, and calcium). +- Source of raw elements the body uses to carry out activities (mostly oxygen, carbon, hydrogen, nitrogen, and calcium). There are 6 nutrients: - Vitamins @@ -9,8 +9,9 @@ There are 6 nutrients: - Lipids - Proteins - Water +Water is the most essential nutrient because the body can only survive for a few days without it. -A macronutrient is a nutrient the body requires in large quantities, whereas a micronutrient is a nutrient the body requires in small quantities. +A macronutrient is a nutrient the body requires in large quantities, whereas a micronutrient is a nutrient the body requires in small quantities. Macronutrients supply energy, whereas micronutrients are not sources of energy. | Macronutrients | Micronutrients | | -------------- | -------------- | From a0c7ab62c0fcf1aabb22aabb19c88a5d2d9aa47b Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 4 Sep 2024 14:58:35 -0600 Subject: [PATCH 0204/1027] vault backup: 2024-09-04 14:58:35 --- .../software development/ECE1400/Compilation Steps.md | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 education/software development/ECE1400/Compilation Steps.md diff --git a/education/software development/ECE1400/Compilation Steps.md b/education/software development/ECE1400/Compilation Steps.md new file mode 100644 index 0000000..c0cddb0 --- /dev/null +++ b/education/software development/ECE1400/Compilation Steps.md @@ -0,0 +1,11 @@ +1. Preprocessing: The preprocessor obeys commands that begin with #, also known as directives +Commands for the preprocessor are called directives. +Ex + + + +2. Compiling. A compiler translates then translates the program into machine instructions. +3. Linking: The generated objects are combined to create a complete executable. + +The preprocessor is typically integrated with the compiler. + From 7b69c6a21001f5dcefb04128c46fa79164ad5696 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 4 Sep 2024 15:03:35 -0600 Subject: [PATCH 0205/1027] vault backup: 2024-09-04 15:03:35 --- .../software development/ECE1400/Compilation Steps.md | 10 ++++++---- education/software development/ECE1400/Types.md | 4 ++++ 2 files changed, 10 insertions(+), 4 deletions(-) create mode 100644 education/software development/ECE1400/Types.md diff --git a/education/software development/ECE1400/Compilation Steps.md b/education/software development/ECE1400/Compilation Steps.md index c0cddb0..ce3aede 100644 --- a/education/software development/ECE1400/Compilation Steps.md +++ b/education/software development/ECE1400/Compilation Steps.md @@ -1,9 +1,11 @@ 1. Preprocessing: The preprocessor obeys commands that begin with #, also known as directives -Commands for the preprocessor are called directives. -Ex - - +Commands for the preprocessor are called directives. Directives begin with a pound sign, and they do not end with a semicolon. +Example: +```c +// +#include +``` 2. Compiling. A compiler translates then translates the program into machine instructions. 3. Linking: The generated objects are combined to create a complete executable. diff --git a/education/software development/ECE1400/Types.md b/education/software development/ECE1400/Types.md new file mode 100644 index 0000000..6e0c832 --- /dev/null +++ b/education/software development/ECE1400/Types.md @@ -0,0 +1,4 @@ +# Strings +A string literal is characters enclosed in double quotation marks. + +A newline can be inserted using `\n`. \ No newline at end of file From 1ae7a3a20eed786af4ae064db1d5e7684778f19d Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 4 Sep 2024 15:08:35 -0600 Subject: [PATCH 0206/1027] vault backup: 2024-09-04 15:08:35 --- education/software development/ECE1400/Types.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/education/software development/ECE1400/Types.md b/education/software development/ECE1400/Types.md index 6e0c832..6579434 100644 --- a/education/software development/ECE1400/Types.md +++ b/education/software development/ECE1400/Types.md @@ -1,4 +1,8 @@ # Strings A string literal is characters enclosed in double quotation marks. -A newline can be inserted using `\n`. \ No newline at end of file +A newline can be inserted using `\n`. + +## Integer +An integer is a way to store a whole number. In C, integers are signed by default. +## Float \ No newline at end of file From 3c07ffefe2b0efb720e55b8712c26aa607a6aefd Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 4 Sep 2024 15:13:35 -0600 Subject: [PATCH 0207/1027] vault backup: 2024-09-04 15:13:35 --- .../ECE1400/{Compilation Steps.md => C.md} | 14 ++++++++++++++ education/software development/ECE1400/Types.md | 8 -------- 2 files changed, 14 insertions(+), 8 deletions(-) rename education/software development/ECE1400/{Compilation Steps.md => C.md} (54%) diff --git a/education/software development/ECE1400/Compilation Steps.md b/education/software development/ECE1400/C.md similarity index 54% rename from education/software development/ECE1400/Compilation Steps.md rename to education/software development/ECE1400/C.md index ce3aede..4134377 100644 --- a/education/software development/ECE1400/Compilation Steps.md +++ b/education/software development/ECE1400/C.md @@ -1,3 +1,5 @@ +# Compilation Steps + 1. Preprocessing: The preprocessor obeys commands that begin with #, also known as directives Commands for the preprocessor are called directives. Directives begin with a pound sign, and they do not end with a semicolon. @@ -11,3 +13,15 @@ Example: The preprocessor is typically integrated with the compiler. +# Types +## Strings +A string literal is characters enclosed in double quotation marks. + +A newline can be inserted using `\n`. + +## Integers +An integer is a way to store a whole number. In C, integers are signed by default. +## Floats +A float is a decimal value. Slower arithmetic and inexact values are both drawbacks of using floats. +## Variables +A variable must be declared before it is assigned. diff --git a/education/software development/ECE1400/Types.md b/education/software development/ECE1400/Types.md index 6579434..e69de29 100644 --- a/education/software development/ECE1400/Types.md +++ b/education/software development/ECE1400/Types.md @@ -1,8 +0,0 @@ -# Strings -A string literal is characters enclosed in double quotation marks. - -A newline can be inserted using `\n`. - -## Integer -An integer is a way to store a whole number. In C, integers are signed by default. -## Float \ No newline at end of file From 4f5b950e2fe67c3fe80526bf3cc8d8d245ee04ec Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 4 Sep 2024 15:18:36 -0600 Subject: [PATCH 0208/1027] vault backup: 2024-09-04 15:18:36 --- education/software development/ECE1400/C.md | 8 +++++++- education/software development/ECE1400/Types.md | 0 2 files changed, 7 insertions(+), 1 deletion(-) delete mode 100644 education/software development/ECE1400/Types.md diff --git a/education/software development/ECE1400/C.md b/education/software development/ECE1400/C.md index 4134377..3c8f51f 100644 --- a/education/software development/ECE1400/C.md +++ b/education/software development/ECE1400/C.md @@ -5,7 +5,6 @@ Commands for the preprocessor are called directives. Directives begin with a pou Example: ```c -// #include ``` 2. Compiling. A compiler translates then translates the program into machine instructions. @@ -25,3 +24,10 @@ An integer is a way to store a whole number. In C, integers are signed by defaul A float is a decimal value. Slower arithmetic and inexact values are both drawbacks of using floats. ## Variables A variable must be declared before it is assigned. + + +# Formatting specifiers +| Specifier | Function | +| --------- | ---------------------------------------------------------------------------------------------------------------------------------------- | +| `%d` | Display an integer | +| `%f` | Display a float. Specify the number of places to round to by adding a decimal and a number, eg `%.2f` would round to two decimal places. | \ No newline at end of file diff --git a/education/software development/ECE1400/Types.md b/education/software development/ECE1400/Types.md deleted file mode 100644 index e69de29..0000000 From 31410114dba7d60021063a6a10df6f8817b34356 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Thu, 5 Sep 2024 14:37:17 -0600 Subject: [PATCH 0209/1027] vault backup: 2024-09-05 14:37:17 --- education/nutrition/Untitled.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 education/nutrition/Untitled.md diff --git a/education/nutrition/Untitled.md b/education/nutrition/Untitled.md new file mode 100644 index 0000000..e69de29 From 16470094659c5c23de9562b5ac95edd206289984 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Thu, 5 Sep 2024 14:42:17 -0600 Subject: [PATCH 0210/1027] vault backup: 2024-09-05 14:42:17 --- education/nutrition/Eating Disorders.md | 10 ++++++++++ education/nutrition/Untitled.md | 0 2 files changed, 10 insertions(+) create mode 100644 education/nutrition/Eating Disorders.md delete mode 100644 education/nutrition/Untitled.md diff --git a/education/nutrition/Eating Disorders.md b/education/nutrition/Eating Disorders.md new file mode 100644 index 0000000..0f9d3e7 --- /dev/null +++ b/education/nutrition/Eating Disorders.md @@ -0,0 +1,10 @@ +# Orthorexia +Orthorexia is a pattern of disordered eating characterized by a fixation on 'clean eating', or 'perfect eating'. It often begins as a desire to eat only healthy foods but spirals into an obsession. + +Notes from https://www.youtube.com/watch?v=q_mUm8Ow-Dc: +- Often an emphasis around organic foods. +- Individuals with orthorexia can go to extreme lengths to prepare meals. +- The individual in the video recognizes that he has an issue and is working to fix it. +- One individual catalogued foods obsessively. +- One individual noted that it was becoming a problem when his food choices started consuming so much of his life. +- People want to feel like they can make choices that will keep them healthy. \ No newline at end of file diff --git a/education/nutrition/Untitled.md b/education/nutrition/Untitled.md deleted file mode 100644 index e69de29..0000000 From be151f2c1dcd7458d86065fee6940c9aac2743e1 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Thu, 5 Sep 2024 14:47:17 -0600 Subject: [PATCH 0211/1027] vault backup: 2024-09-05 14:47:17 --- education/nutrition/Eating Disorders.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/education/nutrition/Eating Disorders.md b/education/nutrition/Eating Disorders.md index 0f9d3e7..8f912e3 100644 --- a/education/nutrition/Eating Disorders.md +++ b/education/nutrition/Eating Disorders.md @@ -7,4 +7,12 @@ Notes from https://www.youtube.com/watch?v=q_mUm8Ow-Dc: - The individual in the video recognizes that he has an issue and is working to fix it. - One individual catalogued foods obsessively. - One individual noted that it was becoming a problem when his food choices started consuming so much of his life. -- People want to feel like they can make choices that will keep them healthy. \ No newline at end of file +- People want to feel like they can make choices that will keep them healthy. +- Society encourages orthorexia because healthy eating is lauded. +- Some individuals stop eating fruits and vegetables they deem to have too high of sugar content. +- There becomes a fear that if you stop eating healthy, everything will unravel. +- "Raw nutritionists" believe that cooking food destroys that food's nutritional value. +- Deaths have occurred because of orthorexia. + +Notes from https://www.youtube.com/watch?v=uPyqCmz8-JQ: +- Some raw nutritionists meet and talk about how their diet has change \ No newline at end of file From 1f7274c462908a0e7312a7196b87ee4fcccbbca3 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Thu, 5 Sep 2024 14:52:17 -0600 Subject: [PATCH 0212/1027] vault backup: 2024-09-05 14:52:17 --- education/nutrition/Eating Disorders.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/education/nutrition/Eating Disorders.md b/education/nutrition/Eating Disorders.md index 8f912e3..05186d9 100644 --- a/education/nutrition/Eating Disorders.md +++ b/education/nutrition/Eating Disorders.md @@ -15,4 +15,5 @@ Notes from https://www.youtube.com/watch?v=q_mUm8Ow-Dc: - Deaths have occurred because of orthorexia. Notes from https://www.youtube.com/watch?v=uPyqCmz8-JQ: -- Some raw nutritionists meet and talk about how their diet has change \ No newline at end of file +- Some raw nutritionists meet and talk about how their diet has changed their life. +- \ No newline at end of file From ddbde32405a630cb702bc973c559b33abdf66515 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sat, 7 Sep 2024 13:12:12 -0600 Subject: [PATCH 0213/1027] vault backup: 2024-09-07 13:12:12 --- .../ECE1400/Chapter 2 Exercises.md | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 education/software development/ECE1400/Chapter 2 Exercises.md diff --git a/education/software development/ECE1400/Chapter 2 Exercises.md b/education/software development/ECE1400/Chapter 2 Exercises.md new file mode 100644 index 0000000..d65fc24 --- /dev/null +++ b/education/software development/ECE1400/Chapter 2 Exercises.md @@ -0,0 +1,10 @@ +# \#2 +Directives: +```c +#include +``` + +Statements: +```c + +``` \ No newline at end of file From 81e99af77d5f8b7f2c10bf72ad0a9c312ab14a41 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sat, 7 Sep 2024 13:15:57 -0600 Subject: [PATCH 0214/1027] vault backup: 2024-09-07 13:15:57 --- .../ECE1400/Chapter 2 Exercises.md | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/education/software development/ECE1400/Chapter 2 Exercises.md b/education/software development/ECE1400/Chapter 2 Exercises.md index d65fc24..26ff1d9 100644 --- a/education/software development/ECE1400/Chapter 2 Exercises.md +++ b/education/software development/ECE1400/Chapter 2 Exercises.md @@ -6,5 +6,21 @@ Directives: Statements: ```c + printf("Parkinson's Law: \nWork expands so as to "); + printf("fill the time\n"); + printf("available for its completion.\n"); + return 0; +``` -``` \ No newline at end of file +Output: +``` +Parkinson's Law: +Work expands so as to fill the time +available for its completion. + +``` +# \#5 +(A): `100_bottles` is not a legal C identifier because C identifiers cannot start with a number. + +# \#6 +Double underscores are typically used to denote statements reserve \ No newline at end of file From 81e68a8afda11799e077f4cf15734f498a8b5404 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sat, 7 Sep 2024 13:20:57 -0600 Subject: [PATCH 0215/1027] vault backup: 2024-09-07 13:20:57 --- .../ECE1400/Chapter 2 Exercises.md | 25 +++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/education/software development/ECE1400/Chapter 2 Exercises.md b/education/software development/ECE1400/Chapter 2 Exercises.md index 26ff1d9..8819f9d 100644 --- a/education/software development/ECE1400/Chapter 2 Exercises.md +++ b/education/software development/ECE1400/Chapter 2 Exercises.md @@ -21,6 +21,27 @@ available for its completion. ``` # \#5 (A): `100_bottles` is not a legal C identifier because C identifiers cannot start with a number. - # \#6 -Double underscores are typically used to denote statements reserve \ No newline at end of file +Double underscores are typically used to denote statements reserved by the compiler, and in C++, double underscores are used in name mangling and so they cannot be used entirely. More subjectively, it can be hard to tell how many underscores are present. +# \#7 +(A): `for` +(E): `while` + +# \#8 +14. + +Work: +1. `answer` +2. `=` +3. `(` +4. `3` +5. `*` +6. `q` +7. `-` +8. `p` +9. `*` +10. `p` +11. `) +12. `/` +13. `3` +14. `;` From 63f842bb8eef38403f27e3b53190484014432a57 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Mon, 9 Sep 2024 10:32:51 -0600 Subject: [PATCH 0216/1027] vault backup: 2024-09-09 10:32:51 --- education/math/MATH1060 (trig)/Angles.md | 3 +++ education/math/MATH1060 (trig)/The Unit Circle.md | 9 +++++++++ 2 files changed, 12 insertions(+) create mode 100644 education/math/MATH1060 (trig)/The Unit Circle.md diff --git a/education/math/MATH1060 (trig)/Angles.md b/education/math/MATH1060 (trig)/Angles.md index d717c88..45d20b7 100644 --- a/education/math/MATH1060 (trig)/Angles.md +++ b/education/math/MATH1060 (trig)/Angles.md @@ -37,6 +37,9 @@ These rules apply regardless of the orientation of the triangle. Cosecant, secant, and tangent are inverses of sine, cosine, and tangent respectively, and so they can be found by taking $\frac{1}{x}$, where $x$ is the function you'd like to find the inverse of. +## Angle of Elevation/Depression +- The **angle of elevation** is the angle between the hypotenuse and the bottom line. As an example, if a ladder was leaning against a building, the angle of elevation would be the angle where the ladder intersects with the ground, and it would be the angle between the ladder and the ground. +- The **angle of depression** is the angle between the top of the hypotenuse and an (often imaginary) horizontal line. # Definitions | Term | Description | | -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | diff --git a/education/math/MATH1060 (trig)/The Unit Circle.md b/education/math/MATH1060 (trig)/The Unit Circle.md new file mode 100644 index 0000000..490dcdc --- /dev/null +++ b/education/math/MATH1060 (trig)/The Unit Circle.md @@ -0,0 +1,9 @@ +# Introduction +The unit circle has a center a $(0, 0)$, and a radius of $1$ with no defined unit. + + +# Definitions + +| Term | Description | +| ---- | ----------- | +| | | \ No newline at end of file From 3f63703ba2910f358d71608b72ce1fc5140993eb Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Mon, 9 Sep 2024 10:37:51 -0600 Subject: [PATCH 0217/1027] vault backup: 2024-09-09 10:37:51 --- education/math/MATH1060 (trig)/The Unit Circle.md | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/education/math/MATH1060 (trig)/The Unit Circle.md b/education/math/MATH1060 (trig)/The Unit Circle.md index 490dcdc..a09c16e 100644 --- a/education/math/MATH1060 (trig)/The Unit Circle.md +++ b/education/math/MATH1060 (trig)/The Unit Circle.md @@ -1,9 +1,17 @@ # Introduction The unit circle has a center a $(0, 0)$, and a radius of $1$ with no defined unit. +Sine and cosine can be used to find the coordinates of specific points on the unit circle. + +**Sine likes $y$, and cosine likes $x$.** + +When sine is positive, the $y$ value is positive. When $x$ is positive, the cosine is positive. + +$$ cos\ # Definitions -| Term | Description | -| ---- | ----------- | -| | | \ No newline at end of file +| Term | Description | +| ---------------- | ----------------------------------------------------------------------------- | +| $\theta$ (theta) | Theta refers to the angle measure in a unit circle. | +| $s$ | $s$ is used to the length of the arc created by angle $\theta$ on the circle. | \ No newline at end of file From 5d18df523625ace65722eb21c36397e9f377c77c Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Mon, 9 Sep 2024 10:42:51 -0600 Subject: [PATCH 0218/1027] vault backup: 2024-09-09 10:42:51 --- education/math/MATH1060 (trig)/The Unit Circle.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/education/math/MATH1060 (trig)/The Unit Circle.md b/education/math/MATH1060 (trig)/The Unit Circle.md index a09c16e..4feaa77 100644 --- a/education/math/MATH1060 (trig)/The Unit Circle.md +++ b/education/math/MATH1060 (trig)/The Unit Circle.md @@ -7,7 +7,12 @@ Sine and cosine can be used to find the coordinates of specific points on the un When sine is positive, the $y$ value is positive. When $x$ is positive, the cosine is positive. -$$ cos\ +$$ cos(\theta) = x $$ +$$ sin(\theta) = y $$ + +## The Pythagorean Identity +The Pythagorean identity expresses the Pythagorean theorem in terms of trigonometric functions. It's a basic relation between the sine and cosine functions. +$$ sin^2 \theta + cos^2 \theta = 1 $$ # Definitions From 12baef16593ba146f5bc2a89e2e0bc2cc3351a5a Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 10 Sep 2024 20:31:36 -0600 Subject: [PATCH 0219/1027] vault backup: 2024-09-10 20:31:36 --- software/Versioned config files.md | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 software/Versioned config files.md diff --git a/software/Versioned config files.md b/software/Versioned config files.md new file mode 100644 index 0000000..910f14e --- /dev/null +++ b/software/Versioned config files.md @@ -0,0 +1,6 @@ +## Solutions +- Create a directory, eg `/etc/config` and store all of your config files there, then use a makefile to automatically generate symlinks and install them in the appropriate locations. A command is also created for removing said symlinks. () +- Using a solution like zfs/btrfs + +## Notes +I think one major issue with storing configs in a solution like git, is that you need to remember to push changes after every single config change. Maybe a cronjob could be configured to commit daily/weekly? From b771016fc67c7fff21abe5b6ccf50dbaddcfe25f Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 10 Sep 2024 20:36:36 -0600 Subject: [PATCH 0220/1027] vault backup: 2024-09-10 20:36:36 --- software/Versioned config files.md | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/software/Versioned config files.md b/software/Versioned config files.md index 910f14e..1df878f 100644 --- a/software/Versioned config files.md +++ b/software/Versioned config files.md @@ -1,6 +1,11 @@ ## Solutions -- Create a directory, eg `/etc/config` and store all of your config files there, then use a makefile to automatically generate symlinks and install them in the appropriate locations. A command is also created for removing said symlinks. () -- Using a solution like zfs/btrfs +- Create a directory, eg `/etc/config` and store all of your config files there, then use a makefile to automatically generate symlinks and install them in the appropriate locations. A command is also created for removing said symlinks. (https://forums.freebsd.org/threads/version-control-for-configuration-files.70312/) + - I like this so far, it seems like one of the better options. +- Using a filesystem that supports snapshots like zfs/btrfs and then creating snapshots (https://forums.FreeBSD.org/threads/version-control-for-configuration-files.70312/post-423330). + - I don't like this very much, it depends too much on OS specific configuration and doesn't seem like it'd be as easily portable between machines. +- Using a configuration management system like Ansible, Chef, or Puppet () + - I feel like this would require a fair bit of initial setup but it seems robust +- Using a database like ## Notes I think one major issue with storing configs in a solution like git, is that you need to remember to push changes after every single config change. Maybe a cronjob could be configured to commit daily/weekly? From 8fe10c3bd2c46fd5b8b3d90cd3c954af7a69f5b4 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 10 Sep 2024 20:41:36 -0600 Subject: [PATCH 0221/1027] vault backup: 2024-09-10 20:41:36 --- software/Versioned config files.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/software/Versioned config files.md b/software/Versioned config files.md index 1df878f..e06371e 100644 --- a/software/Versioned config files.md +++ b/software/Versioned config files.md @@ -1,11 +1,15 @@ ## Solutions - Create a directory, eg `/etc/config` and store all of your config files there, then use a makefile to automatically generate symlinks and install them in the appropriate locations. A command is also created for removing said symlinks. (https://forums.freebsd.org/threads/version-control-for-configuration-files.70312/) - - I like this so far, it seems like one of the better options. + - I like this so far, it seems like one of the better options. If I'm allowed to be quirky, I'd rather use `just` than `make`, Makefile syntax makes my tummy hurt. - Using a filesystem that supports snapshots like zfs/btrfs and then creating snapshots (https://forums.FreeBSD.org/threads/version-control-for-configuration-files.70312/post-423330). - I don't like this very much, it depends too much on OS specific configuration and doesn't seem like it'd be as easily portable between machines. - Using a configuration management system like Ansible, Chef, or Puppet () - I feel like this would require a fair bit of initial setup but it seems robust -- Using a database like +- Using a database like Dolt or Terminus DB + - I think this would require a lot of work and we wouldn't reap the benefits at our scale. +- Using an orchestration system like kubernetes or hashicorp nomad to centralize config file/deployment management, from there version controlling configs would be easy (). + - I think this would be a good idea, but it's *a lot of work*, and I think maintaining it would continue to be a lot of work. + ## Notes I think one major issue with storing configs in a solution like git, is that you need to remember to push changes after every single config change. Maybe a cronjob could be configured to commit daily/weekly? From 27a39311cd9f13bd9d23bf347d0c5ffb0e83d1a6 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 11 Sep 2024 10:48:19 -0600 Subject: [PATCH 0222/1027] vault backup: 2024-09-11 10:48:18 --- education/nutrition/Misc.md | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 education/nutrition/Misc.md diff --git a/education/nutrition/Misc.md b/education/nutrition/Misc.md new file mode 100644 index 0000000..c35c982 --- /dev/null +++ b/education/nutrition/Misc.md @@ -0,0 +1,11 @@ +# Key Nutrition Concepts +- Most foods are *mixtures* of nutrients. + - Water is the major nutrient in most foods. +- All foods have *some* nutritional value + - Some food is healthier than others + + +# Definitions +| Term | Description | +| -------------- | ----------- | +| Nutrient dense | | From 75d6eae5c57a92d6f988207a4163521a2a71cdeb Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 11 Sep 2024 10:53:18 -0600 Subject: [PATCH 0223/1027] vault backup: 2024-09-11 10:53:18 --- education/nutrition/Misc.md | 33 ++++++++++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/education/nutrition/Misc.md b/education/nutrition/Misc.md index c35c982..6541a56 100644 --- a/education/nutrition/Misc.md +++ b/education/nutrition/Misc.md @@ -3,9 +3,36 @@ - Water is the major nutrient in most foods. - All foods have *some* nutritional value - Some food is healthier than others + * **Nutrient dense** food supplies more vitamins and minerals in relation to total calories. Examples inclue: + * Broccoli + * Leafy greans + * Fat free milk + * Oranges + * Lean Meats + * Whole grain Cereals + * **Energy Density** refers to the amount of energy a food provides per given weight of the food. + * Energy dense food has a kcal to weight ratio of 4.0 or higher. + * Fat supplies the most energy per gram + * Water supplies no energy for the body + * An empty calorie food supplies excessive calories from unhealthy types of fat, added sugar, and/or alcohol. + * Not all energy dense foods are empty-calorie foods. + * Examples of empty calorie foods include candy, snack chips, alcohol, or sugar sweetened drinks. + * People can add variety to their diets by choosing different foods from each of the 5 food groups + * Fruits + * Vegetables + * Grains + * Protein + * Dairy + * Food is the best source of nutrients + * Economical + * Reliable + * Contains Phytochemicals + * It can be difficult to plan and eat nutritious foods daily; in these cases, take a supplement +# Dietary Supplements +- A dietary supplement is a product that contains a vitamin, mineral, herb, or other plant product, an amino acid, or a dieteray substance that *supplements* # Definitions -| Term | Description | -| -------------- | ----------- | -| Nutrient dense | | +| Term | Description | +| -------------- | ------------------------------------------------------------------------------------------ | +| Nutrient-dense | Nutrient-dense food supplies more vitamins and minerals in relation to the total calories. | From c9ac3974dbfe84e9083a56f0069ab0bc4e7c65ed Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 11 Sep 2024 11:30:59 -0600 Subject: [PATCH 0224/1027] vault backup: 2024-09-11 11:30:59 --- education/nutrition/Misc.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/education/nutrition/Misc.md b/education/nutrition/Misc.md index 6541a56..4785eda 100644 --- a/education/nutrition/Misc.md +++ b/education/nutrition/Misc.md @@ -29,7 +29,9 @@ * Contains Phytochemicals * It can be difficult to plan and eat nutritious foods daily; in these cases, take a supplement # Dietary Supplements -- A dietary supplement is a product that contains a vitamin, mineral, herb, or other plant product, an amino acid, or a dieteray substance that *supplements* +- A dietary supplement is a product that contains a vitamin, mineral, herb, or other plant product, an amino acid, or a dietary substance that *supplements* the diet by increasing total intake. +- The **Dietary Supplement and Health Education Act of 1994** allows manufacturers to classify nutrient supplements and herbal products as foods. + - They do not undergo rigorous testing before being marketed # Definitions From f777d59e16e578bc38d17db70a577926148922ba Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 11 Sep 2024 11:51:34 -0600 Subject: [PATCH 0225/1027] vault backup: 2024-09-11 11:51:34 --- education/software development/ECE1400/Chapter 3 Exercises.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 education/software development/ECE1400/Chapter 3 Exercises.md diff --git a/education/software development/ECE1400/Chapter 3 Exercises.md b/education/software development/ECE1400/Chapter 3 Exercises.md new file mode 100644 index 0000000..2486dcb --- /dev/null +++ b/education/software development/ECE1400/Chapter 3 Exercises.md @@ -0,0 +1,3 @@ +# 1 +a. `86, 1040` +b. \ No newline at end of file From 29e0e7fb624ef2ce1d0c461e709d8640885350f0 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 11 Sep 2024 11:56:34 -0600 Subject: [PATCH 0226/1027] vault backup: 2024-09-11 11:56:34 --- .../software development/ECE1400/Chapter 3 Exercises.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/education/software development/ECE1400/Chapter 3 Exercises.md b/education/software development/ECE1400/Chapter 3 Exercises.md index 2486dcb..0625477 100644 --- a/education/software development/ECE1400/Chapter 3 Exercises.md +++ b/education/software development/ECE1400/Chapter 3 Exercises.md @@ -1,3 +1,5 @@ # 1 -a. `86, 1040` -b. \ No newline at end of file +a. `86,1040` +b. `3.02530e+01` +c. `83.1620` +d. `1e-06` \ No newline at end of file From 608ec4b01b116d97ed24cc83d93a146bd5c259ca Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 11 Sep 2024 12:01:34 -0600 Subject: [PATCH 0227/1027] vault backup: 2024-09-11 12:01:34 --- education/software development/ECE1400/Chapter 3 Exercises.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/education/software development/ECE1400/Chapter 3 Exercises.md b/education/software development/ECE1400/Chapter 3 Exercises.md index 0625477..db52940 100644 --- a/education/software development/ECE1400/Chapter 3 Exercises.md +++ b/education/software development/ECE1400/Chapter 3 Exercises.md @@ -2,4 +2,4 @@ a. `86,1040` b. `3.02530e+01` c. `83.1620` -d. `1e-06` \ No newline at end of file +d. `1e-06` From deb2dead0d341c0ce8ac5c66950a32866cb00cb5 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 11 Sep 2024 12:06:34 -0600 Subject: [PATCH 0228/1027] vault backup: 2024-09-11 12:06:34 --- .../software development/ECE1400/Chapter 3 Exercises.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/education/software development/ECE1400/Chapter 3 Exercises.md b/education/software development/ECE1400/Chapter 3 Exercises.md index db52940..963eed8 100644 --- a/education/software development/ECE1400/Chapter 3 Exercises.md +++ b/education/software development/ECE1400/Chapter 3 Exercises.md @@ -1,5 +1,8 @@ -# 1 +# 1. a. `86,1040` b. `3.02530e+01` c. `83.1620` -d. `1e-06` +d. `1e-06 ` + +# 2. +a. `printf` \ No newline at end of file From 2a86cc053b6795fa5a475d9141a7857a40aa9533 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 11 Sep 2024 12:11:34 -0600 Subject: [PATCH 0229/1027] vault backup: 2024-09-11 12:11:34 --- .../ECE1400/Chapter 3 Exercises.md | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/education/software development/ECE1400/Chapter 3 Exercises.md b/education/software development/ECE1400/Chapter 3 Exercises.md index 963eed8..474cbaa 100644 --- a/education/software development/ECE1400/Chapter 3 Exercises.md +++ b/education/software development/ECE1400/Chapter 3 Exercises.md @@ -5,4 +5,15 @@ c. `83.1620` d. `1e-06 ` # 2. -a. `printf` \ No newline at end of file +```c +float x = 0.12345; +// a +printf("%-8.1f", x); +// b +printf("%10.6f", x); +// c +printf("%8.3f", x); +// d +printf("%-6.0g", x); +``` +c. \ No newline at end of file From 4519740ea7198b5a79055ae43848689ac7770602 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 11 Sep 2024 12:16:34 -0600 Subject: [PATCH 0230/1027] vault backup: 2024-09-11 12:16:34 --- education/software development/ECE1400/C.md | 11 ++++++++++- .../ECE1400/Chapter 3 Exercises.md | 9 +++++---- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/education/software development/ECE1400/C.md b/education/software development/ECE1400/C.md index 3c8f51f..8687542 100644 --- a/education/software development/ECE1400/C.md +++ b/education/software development/ECE1400/C.md @@ -30,4 +30,13 @@ A variable must be declared before it is assigned. | Specifier | Function | | --------- | ---------------------------------------------------------------------------------------------------------------------------------------- | | `%d` | Display an integer | -| `%f` | Display a float. Specify the number of places to round to by adding a decimal and a number, eg `%.2f` would round to two decimal places. | \ No newline at end of file +| `%f` | Display a float. Specify the number of places to round to by adding a decimal and a number, eg `%.2f` would round to two decimal places. | +For number formatting specifiers, the convention is as follows: +`%-a.bX` +`%`: Start of the formatting specifier +`-`: (optional) If included, justify value left in space. Otherwise, justify right in space +`a`: (optional) If included, the size of the field in characters. +`.`: Separator between `a` and `b`. Optional if `b` is not specified +`b`: The number of decimal places to round to +`X`: The type of format to use, and the end of the specifier. Use `d` for integer base 10 (decimal) representation, `f` for fixed point decimal, and `e` for exponential notation +# Standard library \ No newline at end of file diff --git a/education/software development/ECE1400/Chapter 3 Exercises.md b/education/software development/ECE1400/Chapter 3 Exercises.md index 474cbaa..a1031e5 100644 --- a/education/software development/ECE1400/Chapter 3 Exercises.md +++ b/education/software development/ECE1400/Chapter 3 Exercises.md @@ -8,12 +8,13 @@ d. `1e-06 ` ```c float x = 0.12345; // a -printf("%-8.1f", x); +printf("%-8.1e", x); // b -printf("%10.6f", x); +printf("%10.6e", x); // c printf("%8.3f", x); // d -printf("%-6.0g", x); +printf("%-6.0f", x); ``` -c. \ No newline at end of file + +# 3. From 1aab5e8e9c0c69df9c97498ab856edd785c835e1 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 11 Sep 2024 12:21:34 -0600 Subject: [PATCH 0231/1027] vault backup: 2024-09-11 12:21:34 --- education/software development/ECE1400/C.md | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/education/software development/ECE1400/C.md b/education/software development/ECE1400/C.md index 8687542..e9f4445 100644 --- a/education/software development/ECE1400/C.md +++ b/education/software development/ECE1400/C.md @@ -27,10 +27,13 @@ A variable must be declared before it is assigned. # Formatting specifiers -| Specifier | Function | -| --------- | ---------------------------------------------------------------------------------------------------------------------------------------- | -| `%d` | Display an integer | -| `%f` | Display a float. Specify the number of places to round to by adding a decimal and a number, eg `%.2f` would round to two decimal places. | +# Standard library +## Formatting specifiers +| Specifier | Function | +| --------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `%d` | Decimal representation: Display a value as a base 10 (hence the decimal) integer. | +| `%f` | Fixed point decimal representation. Specify the number of places to round to by adding a decimal and a number, eg `%.2f` would round to two decimal places. | +| `%e` | | For number formatting specifiers, the convention is as follows: `%-a.bX` `%`: Start of the formatting specifier @@ -38,5 +41,6 @@ For number formatting specifiers, the convention is as follows: `a`: (optional) If included, the size of the field in characters. `.`: Separator between `a` and `b`. Optional if `b` is not specified `b`: The number of decimal places to round to -`X`: The type of format to use, and the end of the specifier. Use `d` for integer base 10 (decimal) representation, `f` for fixed point decimal, and `e` for exponential notation -# Standard library \ No newline at end of file +`X`: The type of format to use, and the end of the specifier. Use `d` for integer base 10 (decimal) representation, `f` for fixed point decimal, and `e` for exponential notation, and `g` to select between fixed point and exponential, whichever is shorter. +## `printf` +Write a string to standard output. `f` indicates that it's a formatting string. The string will not include move the cursor to a newline, append `\n` to the end of the string to do so. \ No newline at end of file From 46132a5bcd6dbe22be96db63808d8021ae0a2a24 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 11 Sep 2024 12:26:34 -0600 Subject: [PATCH 0232/1027] vault backup: 2024-09-11 12:26:34 --- education/software development/ECE1400/C.md | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/education/software development/ECE1400/C.md b/education/software development/ECE1400/C.md index e9f4445..48709bb 100644 --- a/education/software development/ECE1400/C.md +++ b/education/software development/ECE1400/C.md @@ -33,7 +33,8 @@ A variable must be declared before it is assigned. | --------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- | | `%d` | Decimal representation: Display a value as a base 10 (hence the decimal) integer. | | `%f` | Fixed point decimal representation. Specify the number of places to round to by adding a decimal and a number, eg `%.2f` would round to two decimal places. | -| `%e` | | +| `%e` | Exponential floating point number representation. | +| `%g` | Either fixed point or exponential representation, whichever has a more compact representation. | For number formatting specifiers, the convention is as follows: `%-a.bX` `%`: Start of the formatting specifier @@ -43,4 +44,15 @@ For number formatting specifiers, the convention is as follows: `b`: The number of decimal places to round to `X`: The type of format to use, and the end of the specifier. Use `d` for integer base 10 (decimal) representation, `f` for fixed point decimal, and `e` for exponential notation, and `g` to select between fixed point and exponential, whichever is shorter. ## `printf` -Write a string to standard output. `f` indicates that it's a formatting string. The string will not include move the cursor to a newline, append `\n` to the end of the string to do so. \ No newline at end of file +Used to write a string to stdout with the ability to format variables into the string. + +Write a string to standard output. `f` indicates that it's a formatting string. The string will not include move the cursor to a newline, append `\n` to the end of the string to do so. + +Printf accepts a variable number of arguments, the first argument is the formatting string, then following arguments are the arguments to be inserted into the string. + +## `scanf` +Read value(s) from stdin. + +`scanf` is to stdin as `printf` is to stdout. + +The format of the input is specified \ No newline at end of file From 3aeeb9dac82eed89bd8584640f61da0f9033008c Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 11 Sep 2024 12:31:34 -0600 Subject: [PATCH 0233/1027] vault backup: 2024-09-11 12:31:34 --- education/software development/ECE1400/C.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/education/software development/ECE1400/C.md b/education/software development/ECE1400/C.md index 48709bb..a6b82c4 100644 --- a/education/software development/ECE1400/C.md +++ b/education/software development/ECE1400/C.md @@ -50,9 +50,14 @@ Write a string to standard output. `f` indicates that it's a formatting string. Printf accepts a variable number of arguments, the first argument is the formatting string, then following arguments are the arguments to be inserted into the string. +TODO: examples ## `scanf` Read value(s) from stdin. `scanf` is to stdin as `printf` is to stdout. -The format of the input is specified \ No newline at end of file +The format of the input is specified using [formatting specifiers](#Formatting%20specifiers), and all following arguments are pointers pointing to variables to update. +### Examples + + +The validity of a `scanf` call is not necessarily checked at compile time, and so the number of outputs specified should match the number of inputs. \ No newline at end of file From 53062777005f267759c928cdf972b265e7be5d08 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 11 Sep 2024 12:36:34 -0600 Subject: [PATCH 0234/1027] vault backup: 2024-09-11 12:36:34 --- education/software development/ECE1400/C.md | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/education/software development/ECE1400/C.md b/education/software development/ECE1400/C.md index a6b82c4..5feb293 100644 --- a/education/software development/ECE1400/C.md +++ b/education/software development/ECE1400/C.md @@ -57,7 +57,19 @@ Read value(s) from stdin. `scanf` is to stdin as `printf` is to stdout. The format of the input is specified using [formatting specifiers](#Formatting%20specifiers), and all following arguments are pointers pointing to variables to update. + + ### Examples +```c +// Read a float from standard input into the variable `v`. +float v; +// Here, `v` is uninitialized +scanf("%f", &v); +printf("You input: %f", v); +``` -The validity of a `scanf` call is not necessarily checked at compile time, and so the number of outputs specified should match the number of inputs. \ No newline at end of file +### Behavior +The validity of a `scanf` call is not necessarily checked at compile time, and so the number of outputs specified should match the number of inputs. + +For each formatting specifier specified in the string, `scanf` will attempt to locate an appropriate value in the input, skipping whitespace and newlines if necessary. As `scanf` \ No newline at end of file From b33cd35a4414bb8c5f72438ead11bf0f0364f1c0 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 11 Sep 2024 12:41:34 -0600 Subject: [PATCH 0235/1027] vault backup: 2024-09-11 12:41:34 --- education/software development/ECE1400/C.md | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/education/software development/ECE1400/C.md b/education/software development/ECE1400/C.md index 5feb293..12c4357 100644 --- a/education/software development/ECE1400/C.md +++ b/education/software development/ECE1400/C.md @@ -72,4 +72,13 @@ printf("You input: %f", v); ### Behavior The validity of a `scanf` call is not necessarily checked at compile time, and so the number of outputs specified should match the number of inputs. -For each formatting specifier specified in the string, `scanf` will attempt to locate an appropriate value in the input, skipping whitespace and newlines if necessary. As `scanf` \ No newline at end of file +For each formatting specifier specified in the string, `scanf` will attempt to locate an appropriate value in the input, skipping whitespace and newlines if necessary until the beginning of a number is reached. + +When asked to read an integer, `scanf` searches for one of: +- A digit +- A plus or minus sign +It will continue to read until it reaches a nondigit (whitespace is not skipped in this case, and it is counted as a nondigit). If it doesn't encounter a valid digit first, it will return early. + +When asked to read a float, `scanf` searches for one of: +- A plus sign or minus sign +- A series of digits (possibly containing a decimal point), followed by an exponent (optional). An exponent consists of the letter `e` or `E` \ No newline at end of file From b460a6eabf636c7a79667d16733267b461ce0033 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 11 Sep 2024 12:46:34 -0600 Subject: [PATCH 0236/1027] vault backup: 2024-09-11 12:46:34 --- education/software development/ECE1400/C.md | 6 +++++- .../ECE1400/Chapter 3 Exercises.md | 10 ++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/education/software development/ECE1400/C.md b/education/software development/ECE1400/C.md index 12c4357..7df84ae 100644 --- a/education/software development/ECE1400/C.md +++ b/education/software development/ECE1400/C.md @@ -81,4 +81,8 @@ It will continue to read until it reaches a nondigit (whitespace is not skipped When asked to read a float, `scanf` searches for one of: - A plus sign or minus sign -- A series of digits (possibly containing a decimal point), followed by an exponent (optional). An exponent consists of the letter `e` or `E` \ No newline at end of file +- A series of digits (possibly containing a decimal point), followed by an exponent (optional). An exponent consists of the letter `e` or `E`, an optional sign, and one or more digits. +`%e`, `%f`, and `%g` all follow the same rules for recognizing floating point numbers. + +If an ordinary character is included in the pattern matching string, it will be matched then discarded before proceeding to the next character. + diff --git a/education/software development/ECE1400/Chapter 3 Exercises.md b/education/software development/ECE1400/Chapter 3 Exercises.md index a1031e5..43e7b1e 100644 --- a/education/software development/ECE1400/Chapter 3 Exercises.md +++ b/education/software development/ECE1400/Chapter 3 Exercises.md @@ -18,3 +18,13 @@ printf("%-6.0f", x); ``` # 3. +a. Equivalent +b. Equivalent +c. Equivalent +d. Equivalent + +# 4. +`i`: `10` +`x`: `5.0` +`j`: `6` + From 21cd0914668d6bc4be55a1a012c2f4b9ea85fc52 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 11 Sep 2024 12:51:34 -0600 Subject: [PATCH 0237/1027] vault backup: 2024-09-11 12:51:34 --- .../ECE1400/Chapter 3 Exercises.md | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/education/software development/ECE1400/Chapter 3 Exercises.md b/education/software development/ECE1400/Chapter 3 Exercises.md index 43e7b1e..b34f9f6 100644 --- a/education/software development/ECE1400/Chapter 3 Exercises.md +++ b/education/software development/ECE1400/Chapter 3 Exercises.md @@ -25,6 +25,13 @@ d. Equivalent # 4. `i`: `10` -`x`: `5.0` -`j`: `6` +`x`: `0.3f` +`j`: `5` + +# 5. +`x`: `12.3f` +`i`: `45` +`f`: `0.6f` + + From d4dc637e10abea53dcd06d94541341f42d8f599b Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 11 Sep 2024 12:56:34 -0600 Subject: [PATCH 0238/1027] vault backup: 2024-09-11 12:56:34 --- education/nutrition/Misc.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/education/nutrition/Misc.md b/education/nutrition/Misc.md index 4785eda..19cd03d 100644 --- a/education/nutrition/Misc.md +++ b/education/nutrition/Misc.md @@ -32,7 +32,17 @@ - A dietary supplement is a product that contains a vitamin, mineral, herb, or other plant product, an amino acid, or a dietary substance that *supplements* the diet by increasing total intake. - The **Dietary Supplement and Health Education Act of 1994** allows manufacturers to classify nutrient supplements and herbal products as foods. - They do not undergo rigorous testing before being marketed +- Most foods *do not contain toxic levels of vitamins and minerals*. + - A megadose is an amount of vitamin or mineral that is very high, generally at least 10 times the recommended amount of the nutrient. + - When taken in high amounts, many vitamins have unpleasant side effects. +# Malnutrition +- Malnutrition is a state of health that occurs when the body is *improperly nourished*. This includes *both* **undernutrition** and **over nutrition**. +- Nutritionally inadequate diets may be selected because of + - Lack of knowledge + - Low or fixed income + - Eating disorders + - Alco # Definitions | Term | Description | From bcd1dec834207bc838218abd406f3f5494730d8e Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 11 Sep 2024 13:01:34 -0600 Subject: [PATCH 0239/1027] vault backup: 2024-09-11 13:01:34 --- education/nutrition/Misc.md | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/education/nutrition/Misc.md b/education/nutrition/Misc.md index 19cd03d..93ad3b7 100644 --- a/education/nutrition/Misc.md +++ b/education/nutrition/Misc.md @@ -28,6 +28,7 @@ * Reliable * Contains Phytochemicals * It can be difficult to plan and eat nutritious foods daily; in these cases, take a supplement + * Nutrition is a *dynamic science*. It's constantly changing. # Dietary Supplements - A dietary supplement is a product that contains a vitamin, mineral, herb, or other plant product, an amino acid, or a dietary substance that *supplements* the diet by increasing total intake. - The **Dietary Supplement and Health Education Act of 1994** allows manufacturers to classify nutrient supplements and herbal products as foods. @@ -35,14 +36,35 @@ - Most foods *do not contain toxic levels of vitamins and minerals*. - A megadose is an amount of vitamin or mineral that is very high, generally at least 10 times the recommended amount of the nutrient. - When taken in high amounts, many vitamins have unpleasant side effects. - # Malnutrition - Malnutrition is a state of health that occurs when the body is *improperly nourished*. This includes *both* **undernutrition** and **over nutrition**. - Nutritionally inadequate diets may be selected because of - Lack of knowledge - Low or fixed income - Eating disorders - - Alco + - Drug problems + - Medical problems +# Dr. Goldburger's Discovery +- Dr. Goldberger discovered a hypothesis that pellagra resulted from something lacking in people's diets. He hypothesized that the missing dietary factor was in meat, milk, and other foods eaten by higher income people. The missing nutrient turned out to be niacin, or vitamin b. + +# Science +- Previously, nutrition facts were based on intuition or **anecdotes**. +- Today, nutrition is based on scientific research. +## The Scientific Method +1. Make observations that generate questions +2. Formulate hypothesis to explain events +3. Review current scientific literature (published studies) that relate to the question. +4. Design studies, perform tests, and collect data. +5. Analyze data and draw conclusions. +6. Share results. +7. Conduct more research that may agree or disagree with previous findings. + +## Types of Studies +### Experimental +- A *systematic way* of testing a hypothesis + +### Epidemiological +- *Observations* of the occurance, distribution, and associations bet # Definitions | Term | Description | From 25a05adcd587938c55c6d74be03091004279b23c Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 11 Sep 2024 13:16:04 -0600 Subject: [PATCH 0240/1027] vault backup: 2024-09-11 13:16:04 --- education/nutrition/Misc.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/education/nutrition/Misc.md b/education/nutrition/Misc.md index 93ad3b7..80a1967 100644 --- a/education/nutrition/Misc.md +++ b/education/nutrition/Misc.md @@ -64,7 +64,7 @@ - A *systematic way* of testing a hypothesis ### Epidemiological -- *Observations* of the occurance, distribution, and associations bet +- An observational stu of the occurrence, distribution, and associations between factors and health or disease in a population. # Definitions | Term | Description | From 5d24bb9ed292ceb314012d729a7fa2550441492f Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 11 Sep 2024 13:21:04 -0600 Subject: [PATCH 0241/1027] vault backup: 2024-09-11 13:21:04 --- Pasted image 20240911131855.png | 0 education/nutrition/Misc.md | 20 +++++++++++++++++--- 2 files changed, 17 insertions(+), 3 deletions(-) create mode 100644 Pasted image 20240911131855.png diff --git a/Pasted image 20240911131855.png b/Pasted image 20240911131855.png new file mode 100644 index 0000000..e69de29 diff --git a/education/nutrition/Misc.md b/education/nutrition/Misc.md index 80a1967..9794095 100644 --- a/education/nutrition/Misc.md +++ b/education/nutrition/Misc.md @@ -61,12 +61,26 @@ ## Types of Studies ### Experimental -- A *systematic way* of testing a hypothesis - +- A *systematic way* of testing a hypothesis. +- Animal vs human +- Treatment vs control +- There's a degree of *control* present. +- Can be used to test causation. ### Epidemiological -- An observational stu of the occurrence, distribution, and associations between factors and health or disease in a population. +- *Observations* of the occurrence, distribution, and associations between factors and health or disease in a population. +- Observations at one point or over time. +- **Case Control:** + - Cases matched with controls and information is gathered + - **Cohort** (2 types): + - Retrospective: Collect info about a group's past exposures and identify current outcomes + - Prospective: group of healthy people that are followed over time and the outcome noted. + - Most common for use on humans. +- **Never** used to determine *causation*, only correlation. +- Human experimental studies are usually **double blind**, meaning neither the investigators nor the subjects are aware of the group assignment. # Definitions | Term | Description | | -------------- | ------------------------------------------------------------------------------------------ | | Nutrient-dense | Nutrient-dense food supplies more vitamins and minerals in relation to the total calories. | +| In vivo | Experiments using entire living organisms | +| In vitro | Experiments on cells and other components. | From e52cf7811f0fe816b4faba877f515322390fc6e7 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 11 Sep 2024 13:26:06 -0600 Subject: [PATCH 0242/1027] vault backup: 2024-09-11 13:26:05 --- education/nutrition/Misc.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/education/nutrition/Misc.md b/education/nutrition/Misc.md index 9794095..85afad7 100644 --- a/education/nutrition/Misc.md +++ b/education/nutrition/Misc.md @@ -29,6 +29,8 @@ * Contains Phytochemicals * It can be difficult to plan and eat nutritious foods daily; in these cases, take a supplement * Nutrition is a *dynamic science*. It's constantly changing. + * The FDA *can* regulate nutrition and health related claims on product labels. + * They *cannot* prevent the spread of health misinformation. # Dietary Supplements - A dietary supplement is a product that contains a vitamin, mineral, herb, or other plant product, an amino acid, or a dietary substance that *supplements* the diet by increasing total intake. - The **Dietary Supplement and Health Education Act of 1994** allows manufacturers to classify nutrient supplements and herbal products as foods. @@ -78,6 +80,18 @@ - **Never** used to determine *causation*, only correlation. - Human experimental studies are usually **double blind**, meaning neither the investigators nor the subjects are aware of the group assignment. +# Finding Accurate Nutrition Info +- Look for red flags: + - Promises of quick and easy remedies + - Claims that sound too good to be true + - **Scare tactics** + - Attacks on conventional scientists and nutrition experts + - Testimonials and anecdotes + - Vague, meaningless, or scientific-sounding terms. + - Vague sources + - **Pseudoscience** + - **Disclaimers** + # Definitions | Term | Description | | -------------- | ------------------------------------------------------------------------------------------ | From ac027314a2eb6526bfca53094e79b35b8083faec Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 11 Sep 2024 14:25:47 -0600 Subject: [PATCH 0243/1027] vault backup: 2024-09-11 14:25:47 --- education/software development/ECE1400/2024-09-11.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 education/software development/ECE1400/2024-09-11.md diff --git a/education/software development/ECE1400/2024-09-11.md b/education/software development/ECE1400/2024-09-11.md new file mode 100644 index 0000000..e69de29 From 25600790b4e8117297ad3fd2c5c9305381ff570d Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 11 Sep 2024 14:35:48 -0600 Subject: [PATCH 0244/1027] vault backup: 2024-09-11 14:35:48 --- education/software development/ECE1400/2024-09-11.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/education/software development/ECE1400/2024-09-11.md b/education/software development/ECE1400/2024-09-11.md index e69de29..20cb148 100644 --- a/education/software development/ECE1400/2024-09-11.md +++ b/education/software development/ECE1400/2024-09-11.md @@ -0,0 +1,4 @@ +Chapter 4 exercises assigned, due monday + +# Operators +C emphasizes *expressions* rather than stateme \ No newline at end of file From 918232ba9f74718f2f17a9973c2ec70f6e5974a3 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 11 Sep 2024 14:40:50 -0600 Subject: [PATCH 0245/1027] vault backup: 2024-09-11 14:40:50 --- .../software development/ECE1400/2024-09-11.md | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/education/software development/ECE1400/2024-09-11.md b/education/software development/ECE1400/2024-09-11.md index 20cb148..4252a26 100644 --- a/education/software development/ECE1400/2024-09-11.md +++ b/education/software development/ECE1400/2024-09-11.md @@ -1,4 +1,16 @@ Chapter 4 exercises assigned, due monday # Operators -C emphasizes *expressions* rather than stateme \ No newline at end of file +C emphasizes *expressions* rather than statements. + +Expressions are built from variables, constants, and operators. + +C provides 5 binary arithmetic operator (arithmetic meaning it requires two things to operate on): +- Addition +- Subtraction +- Multiplication +- Division +- Modulus + +Unary operators only require *one* thing to operate on. +- Positive and minus signs \ No newline at end of file From c8d567367d93d6befe20f0d1b55fc8b711dc6ef0 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 11 Sep 2024 14:45:49 -0600 Subject: [PATCH 0246/1027] vault backup: 2024-09-11 14:45:49 --- education/software development/ECE1400/2024-09-11.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/education/software development/ECE1400/2024-09-11.md b/education/software development/ECE1400/2024-09-11.md index 4252a26..28ac636 100644 --- a/education/software development/ECE1400/2024-09-11.md +++ b/education/software development/ECE1400/2024-09-11.md @@ -13,4 +13,6 @@ C provides 5 binary arithmetic operator (arithmetic meaning it requires two thin - Modulus Unary operators only require *one* thing to operate on. -- Positive and minus signs \ No newline at end of file +- Positive and minus signs + +Positive and negative signs have a higher precedence then binary arithmetic operations, and binary arithmetic operations follow the normal order of operations. \ No newline at end of file From 6235b9c390ee389f6b89c3272a8da00f92a8f416 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 11 Sep 2024 15:15:49 -0600 Subject: [PATCH 0247/1027] vault backup: 2024-09-11 15:15:49 --- education/software development/ECE1400/2024-09-11.md | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/education/software development/ECE1400/2024-09-11.md b/education/software development/ECE1400/2024-09-11.md index 28ac636..2b703cb 100644 --- a/education/software development/ECE1400/2024-09-11.md +++ b/education/software development/ECE1400/2024-09-11.md @@ -15,4 +15,13 @@ C provides 5 binary arithmetic operator (arithmetic meaning it requires two thin Unary operators only require *one* thing to operate on. - Positive and minus signs -Positive and negative signs have a higher precedence then binary arithmetic operations, and binary arithmetic operations follow the normal order of operations. \ No newline at end of file +Positive and negative signs have a higher precedence then binary arithmetic operations, and binary arithmetic operations follow the normal order of operations. + +## Assignment Operators +- Simple assignment: `=` stores a value into a variable after evaluating an expression +```c +int v; +int e = 5; +// Simple assignment +v = e; +``` \ No newline at end of file From 2369a37fdbda9100354bd53836021a1ccb7cdb69 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 11 Sep 2024 15:20:49 -0600 Subject: [PATCH 0248/1027] vault backup: 2024-09-11 15:20:49 --- education/software development/ECE1400/2024-09-11.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/education/software development/ECE1400/2024-09-11.md b/education/software development/ECE1400/2024-09-11.md index 2b703cb..45061f8 100644 --- a/education/software development/ECE1400/2024-09-11.md +++ b/education/software development/ECE1400/2024-09-11.md @@ -24,4 +24,7 @@ int v; int e = 5; // Simple assignment v = e; -``` \ No newline at end of file + +// You can chain several operators together +i = j = k = 0; +``` From 3f18d285ee863b51cc6187dd1db5abf54be93196 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Fri, 13 Sep 2024 15:54:22 -0600 Subject: [PATCH 0249/1027] vault backup: 2024-09-13 15:54:22 --- .../ECE1400/2024-09-11.md | 30 ------------------- 1 file changed, 30 deletions(-) delete mode 100644 education/software development/ECE1400/2024-09-11.md diff --git a/education/software development/ECE1400/2024-09-11.md b/education/software development/ECE1400/2024-09-11.md deleted file mode 100644 index 45061f8..0000000 --- a/education/software development/ECE1400/2024-09-11.md +++ /dev/null @@ -1,30 +0,0 @@ -Chapter 4 exercises assigned, due monday - -# Operators -C emphasizes *expressions* rather than statements. - -Expressions are built from variables, constants, and operators. - -C provides 5 binary arithmetic operator (arithmetic meaning it requires two things to operate on): -- Addition -- Subtraction -- Multiplication -- Division -- Modulus - -Unary operators only require *one* thing to operate on. -- Positive and minus signs - -Positive and negative signs have a higher precedence then binary arithmetic operations, and binary arithmetic operations follow the normal order of operations. - -## Assignment Operators -- Simple assignment: `=` stores a value into a variable after evaluating an expression -```c -int v; -int e = 5; -// Simple assignment -v = e; - -// You can chain several operators together -i = j = k = 0; -``` From e575329bd981790c9f69a55413d1fa21b228b052 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Fri, 13 Sep 2024 16:07:59 -0600 Subject: [PATCH 0250/1027] vault backup: 2024-09-13 16:07:59 --- education/math/MATH1060 (trig)/The Unit Circle.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/education/math/MATH1060 (trig)/The Unit Circle.md b/education/math/MATH1060 (trig)/The Unit Circle.md index 4feaa77..1bc2e52 100644 --- a/education/math/MATH1060 (trig)/The Unit Circle.md +++ b/education/math/MATH1060 (trig)/The Unit Circle.md @@ -10,6 +10,9 @@ When sine is positive, the $y$ value is positive. When $x$ is positive, the cosi $$ cos(\theta) = x $$ $$ sin(\theta) = y $$ +## Sine and Cosine +| Angle | $0$ + ## The Pythagorean Identity The Pythagorean identity expresses the Pythagorean theorem in terms of trigonometric functions. It's a basic relation between the sine and cosine functions. $$ sin^2 \theta + cos^2 \theta = 1 $$ From a2f205b2b7024ce642a7aa4f6e9608d269d0b95f Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Fri, 13 Sep 2024 16:12:59 -0600 Subject: [PATCH 0251/1027] vault backup: 2024-09-13 16:12:59 --- education/math/MATH1060 (trig)/The Unit Circle.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/education/math/MATH1060 (trig)/The Unit Circle.md b/education/math/MATH1060 (trig)/The Unit Circle.md index 1bc2e52..ab81a81 100644 --- a/education/math/MATH1060 (trig)/The Unit Circle.md +++ b/education/math/MATH1060 (trig)/The Unit Circle.md @@ -11,7 +11,10 @@ $$ cos(\theta) = x $$ $$ sin(\theta) = y $$ ## Sine and Cosine -| Angle | $0$ +| Angle | $0$ | $\frac{\pi}{6}$ or $30 \degree$ | $\frac{\pi}{4}$ or $45\degree$ | $\frac{\pi}{2}$ or $90\degree$ | +| ----- | --- | ------------------------------- | ------------------------------ | ------------------------------ | +| | | | | | +| | | | | | ## The Pythagorean Identity The Pythagorean identity expresses the Pythagorean theorem in terms of trigonometric functions. It's a basic relation between the sine and cosine functions. From 3b4787f4c48b5720d340ffdba390f5be2c6ae798 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Fri, 13 Sep 2024 16:18:00 -0600 Subject: [PATCH 0252/1027] vault backup: 2024-09-13 16:18:00 --- Pasted image 20240911131855.png | 0 .../math/MATH1060 (trig)/The Unit Circle.md | 9 +++++---- .../math/MATH1060 (trig)/assets/unitcirc.png | Bin 0 -> 157192 bytes 3 files changed, 5 insertions(+), 4 deletions(-) delete mode 100644 Pasted image 20240911131855.png create mode 100644 education/math/MATH1060 (trig)/assets/unitcirc.png diff --git a/Pasted image 20240911131855.png b/Pasted image 20240911131855.png deleted file mode 100644 index e69de29..0000000 diff --git a/education/math/MATH1060 (trig)/The Unit Circle.md b/education/math/MATH1060 (trig)/The Unit Circle.md index ab81a81..fe7e171 100644 --- a/education/math/MATH1060 (trig)/The Unit Circle.md +++ b/education/math/MATH1060 (trig)/The Unit Circle.md @@ -11,10 +11,11 @@ $$ cos(\theta) = x $$ $$ sin(\theta) = y $$ ## Sine and Cosine -| Angle | $0$ | $\frac{\pi}{6}$ or $30 \degree$ | $\frac{\pi}{4}$ or $45\degree$ | $\frac{\pi}{2}$ or $90\degree$ | -| ----- | --- | ------------------------------- | ------------------------------ | ------------------------------ | -| | | | | | -| | | | | | +| Angle | $0$ | $\frac{\pi}{6}$ or $30 \degree$ | $\frac{\pi}{4}$ or $45\degree$ | $\frac{\pi}{2}$ or $90\degree$ | +| ------ | --- | ------------------------------- | ------------------------------ | ------------------------------ | +| Cosine | 1 | $\frac{\sqrt{3}}{2}$ | $\frac{\sqrt{2}}{2}$ | $0$ | +| Sine | 0 | $\frac{1}{2}$ | $\frac{\sqrt{2}}{2}$ |
$1$ | +![image]() ## The Pythagorean Identity The Pythagorean identity expresses the Pythagorean theorem in terms of trigonometric functions. It's a basic relation between the sine and cosine functions. diff --git a/education/math/MATH1060 (trig)/assets/unitcirc.png b/education/math/MATH1060 (trig)/assets/unitcirc.png new file mode 100644 index 0000000000000000000000000000000000000000..df661c5b91d04299b541f3c88c2247d4c0b69925 GIT binary patch literal 157192 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

#S2Acle(rQv=yoy_mNJ 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�Y@Dt&X=o?1*Sjlp3(I!Xh$|@m5 zeni%Qj8Du{;t}pbZNN&Z&`#7v%}}>fb7iGUF)~tqD|7f=ufaa%W!u-jLZTV-%9;A1 z`BeIa3=CMX<#0vkEEyAHCSXg&wU>buT)Y2%tIb>VPupV4$F1rykig>Q!c~3;Z%Lns ztx{G)K+Lb_PxA9l9~n(Fzev=Z44p=~-i@aQ%(pf8m2mRLmJ4d!1FQzUoM&?P`{OX1 zp>0(5hwH%S#@pyW9b?CzdbZKDR<{4YD{4tdUvW!$^aN1(t=;S=U=MSFk6N`=)liru zv7fi;(l-u@sFw(JtEIApFrWVJzFAvX_1J6C=S@0Mj=MHVP&*)Qh~5m^d1}-D@Sgww zT}kM6I+cv?7HgYK6#U&)9-SJg5seMI+87hCln9D>~nEAb>IQ{y?n#~sZ_yaYHE|eA3 zJj<(XEP@A#o^|P}r4x*cQrL`GU+fv93)U%~Pbn0U{;ge(8^T<==BCY$omW!L_R&)s z8Qj$SQ_*>q)|uH(xHmuVmssy@ zFZ?9pLS7L_5pa{II)cpiqK4;4@Zeo~V9@st1c(jv<7xlHIuu)P7NpQ+;VIfE9&h?Y zd0T2rDExtxlN101oO&yPIrHBriMw9{No_ArNsof�a(%p0Vn)&vH9c8DQ>_`4Y@N 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

_fbw0Sj@^>RBhavKM+Qb+A4 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 literal 0 HcmV?d00001 From d5fbb8d908ac8d9ee41a5e87063986a79101c3b9 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Fri, 13 Sep 2024 16:23:00 -0600 Subject: [PATCH 0253/1027] vault backup: 2024-09-13 16:23:00 --- .obsidian/app.json | 3 ++- Pasted image 20240913162148.png | Bin 0 -> 57779 bytes .../math/MATH1060 (trig)/The Unit Circle.md | 5 +++-- .../math/MATH1060 (trig)/assets/sincoscirc.png | Bin 0 -> 57779 bytes 4 files changed, 5 insertions(+), 3 deletions(-) create mode 100644 Pasted image 20240913162148.png create mode 100644 education/math/MATH1060 (trig)/assets/sincoscirc.png diff --git a/.obsidian/app.json b/.obsidian/app.json index 4847cec..915aaf2 100644 --- a/.obsidian/app.json +++ b/.obsidian/app.json @@ -8,5 +8,6 @@ "downscalePercent": 100 }, "spellcheck": true, - "focusNewTab": false + "focusNewTab": false, + "alwaysUpdateLinks": true } \ No newline at end of file diff --git a/Pasted image 20240913162148.png b/Pasted image 20240913162148.png new file mode 100644 index 0000000000000000000000000000000000000000..eab1b1a56bd2a8e08fd37e9ff4a2a000f50a6d72 GIT binary patch literal 57779 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

b1_rY0}AM3Gp+W$*54W*p!Hi>(=J@uZKMGR{t2 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 literal 0 HcmV?d00001 diff --git a/education/math/MATH1060 (trig)/The Unit Circle.md b/education/math/MATH1060 (trig)/The Unit Circle.md index fe7e171..8bbfdd2 100644 --- a/education/math/MATH1060 (trig)/The Unit Circle.md +++ b/education/math/MATH1060 (trig)/The Unit Circle.md @@ -4,7 +4,7 @@ The unit circle has a center a $(0, 0)$, and a radius of $1$ with no defined uni Sine and cosine can be used to find the coordinates of specific points on the unit circle. **Sine likes $y$, and cosine likes $x$.** - +![image](./assets/sincoscirc.png) When sine is positive, the $y$ value is positive. When $x$ is positive, the cosine is positive. $$ cos(\theta) = x $$ @@ -15,7 +15,8 @@ $$ sin(\theta) = y $$ | ------ | --- | ------------------------------- | ------------------------------ | ------------------------------ | | Cosine | 1 | $\frac{\sqrt{3}}{2}$ | $\frac{\sqrt{2}}{2}$ | $0$ | | Sine | 0 | $\frac{1}{2}$ | $\frac{\sqrt{2}}{2}$ |
$1$ | -![image]() + +![image](./assets/unitcirc.png) ## The Pythagorean Identity The Pythagorean identity expresses the Pythagorean theorem in terms of trigonometric functions. It's a basic relation between the sine and cosine functions. diff --git a/education/math/MATH1060 (trig)/assets/sincoscirc.png b/education/math/MATH1060 (trig)/assets/sincoscirc.png new file mode 100644 index 0000000000000000000000000000000000000000..eab1b1a56bd2a8e08fd37e9ff4a2a000f50a6d72 GIT binary patch literal 57779 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

b1_rY0}AM3Gp+W$*54W*p!Hi>(=J@uZKMGR{t2 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 literal 0 HcmV?d00001 From 178e5ceacf8c3e09eb08f692b0758bb3757c9d20 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Fri, 13 Sep 2024 16:28:55 -0600 Subject: [PATCH 0254/1027] vault backup: 2024-09-13 16:28:55 --- education/math/MATH1060 (trig)/The Unit Circle.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/education/math/MATH1060 (trig)/The Unit Circle.md b/education/math/MATH1060 (trig)/The Unit Circle.md index 8bbfdd2..59f62a4 100644 --- a/education/math/MATH1060 (trig)/The Unit Circle.md +++ b/education/math/MATH1060 (trig)/The Unit Circle.md @@ -18,6 +18,15 @@ $$ sin(\theta) = y $$ ![image](./assets/unitcirc.png) +Finding a reference angle: + +| Quadrant | Formula | +| -------- | --------------------- | +| 1 | $\theta$ | +| 2 | $180\degree - \theta$ | +| 3 | $\theta - 180\degree$ | +| 4 | $360\degree - \theta$ | + ## The Pythagorean Identity The Pythagorean identity expresses the Pythagorean theorem in terms of trigonometric functions. It's a basic relation between the sine and cosine functions. $$ sin^2 \theta + cos^2 \theta = 1 $$ From b5e65611672dfd1029e4453daab45562fdff6886 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sun, 15 Sep 2024 18:49:50 -0600 Subject: [PATCH 0255/1027] vault backup: 2024-09-15 18:49:50 --- .../software development/ECE1400/Chapter 4 Exercises.md | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 education/software development/ECE1400/Chapter 4 Exercises.md diff --git a/education/software development/ECE1400/Chapter 4 Exercises.md b/education/software development/ECE1400/Chapter 4 Exercises.md new file mode 100644 index 0000000..f729974 --- /dev/null +++ b/education/software development/ECE1400/Chapter 4 Exercises.md @@ -0,0 +1,7 @@ +# 1. +a. `1 2` + +# 3. +# 9. +# 11. +# 15. From 0dce5c62f83ca60d5e4c3a324c844fb8a0b5178f Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sun, 15 Sep 2024 18:57:54 -0600 Subject: [PATCH 0256/1027] vault backup: 2024-09-15 18:57:54 --- education/software development/ECE1400/Chapter 4 Exercises.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/education/software development/ECE1400/Chapter 4 Exercises.md b/education/software development/ECE1400/Chapter 4 Exercises.md index f729974..baa68b5 100644 --- a/education/software development/ECE1400/Chapter 4 Exercises.md +++ b/education/software development/ECE1400/Chapter 4 Exercises.md @@ -1,7 +1,9 @@ # 1. a. `1 2` - +b. `0` +c. # 3. + # 9. # 11. # 15. From f57fc786fc6cc118bbe24133cf706c30c75a6519 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sun, 15 Sep 2024 19:12:54 -0600 Subject: [PATCH 0257/1027] vault backup: 2024-09-15 19:12:54 --- education/software development/ECE1400/Chapter 4 Exercises.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/education/software development/ECE1400/Chapter 4 Exercises.md b/education/software development/ECE1400/Chapter 4 Exercises.md index baa68b5..4d07298 100644 --- a/education/software development/ECE1400/Chapter 4 Exercises.md +++ b/education/software development/ECE1400/Chapter 4 Exercises.md @@ -1,7 +1,7 @@ # 1. a. `1 2` b. `0` -c. +c. `1` # 3. # 9. From 428feda62d26c51be749427bfebfa2ecd30c8e79 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sun, 15 Sep 2024 19:17:54 -0600 Subject: [PATCH 0258/1027] vault backup: 2024-09-15 19:17:54 --- .obsidian/community-plugins.json | 3 +- .obsidian/plugins/execute-code/main.js | 13328 ++++++++++++++++ .obsidian/plugins/execute-code/manifest.json | 10 + .obsidian/plugins/execute-code/styles.css | 218 + .../ECE1400/Chapter 4 Exercises.md | 1 + 5 files changed, 13559 insertions(+), 1 deletion(-) create mode 100644 .obsidian/plugins/execute-code/main.js create mode 100644 .obsidian/plugins/execute-code/manifest.json create mode 100644 .obsidian/plugins/execute-code/styles.css diff --git a/.obsidian/community-plugins.json b/.obsidian/community-plugins.json index 9159b87..97e39eb 100644 --- a/.obsidian/community-plugins.json +++ b/.obsidian/community-plugins.json @@ -1,4 +1,5 @@ [ "obsidian-git", - "d2-obsidian" + "d2-obsidian", + "execute-code" ] \ No newline at end of file diff --git a/.obsidian/plugins/execute-code/main.js b/.obsidian/plugins/execute-code/main.js new file mode 100644 index 0000000..35eca79 --- /dev/null +++ b/.obsidian/plugins/execute-code/main.js @@ -0,0 +1,13328 @@ +/* +THIS IS A GENERATED/BUNDLED FILE BY ESBUILD +if you want to view the source, please visit the github repository of this plugin +*/ + +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __reflectGet = Reflect.get; +var __commonJS = (cb, mod) => function __require() { + return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; +}; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var __superGet = (cls, obj, key) => __reflectGet(__getProtoOf(cls), key, obj); +var __async = (__this, __arguments, generator) => { + return new Promise((resolve, reject) => { + var fulfilled = (value) => { + try { + step(generator.next(value)); + } catch (e) { + reject(e); + } + }; + var rejected = (value) => { + try { + step(generator.throw(value)); + } catch (e) { + reject(e); + } + }; + var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected); + step((generator = generator.apply(__this, __arguments)).next()); + }); +}; + +// node_modules/json5/dist/index.js +var require_dist = __commonJS({ + "node_modules/json5/dist/index.js"(exports, module2) { + (function(global2, factory) { + typeof exports === "object" && typeof module2 !== "undefined" ? module2.exports = factory() : typeof define === "function" && define.amd ? define(factory) : global2.JSON5 = factory(); + })(exports, function() { + "use strict"; + function createCommonjsModule(fn, module3) { + return module3 = { exports: {} }, fn(module3, module3.exports), module3.exports; + } + var _global = createCommonjsModule(function(module3) { + var global2 = module3.exports = typeof window != "undefined" && window.Math == Math ? window : typeof self != "undefined" && self.Math == Math ? self : Function("return this")(); + if (typeof __g == "number") { + __g = global2; + } + }); + var _core = createCommonjsModule(function(module3) { + var core = module3.exports = { version: "2.6.5" }; + if (typeof __e == "number") { + __e = core; + } + }); + var _core_1 = _core.version; + var _isObject = function(it) { + return typeof it === "object" ? it !== null : typeof it === "function"; + }; + var _anObject = function(it) { + if (!_isObject(it)) { + throw TypeError(it + " is not an object!"); + } + return it; + }; + var _fails = function(exec) { + try { + return !!exec(); + } catch (e) { + return true; + } + }; + var _descriptors = !_fails(function() { + return Object.defineProperty({}, "a", { get: function() { + return 7; + } }).a != 7; + }); + var document2 = _global.document; + var is = _isObject(document2) && _isObject(document2.createElement); + var _domCreate = function(it) { + return is ? document2.createElement(it) : {}; + }; + var _ie8DomDefine = !_descriptors && !_fails(function() { + return Object.defineProperty(_domCreate("div"), "a", { get: function() { + return 7; + } }).a != 7; + }); + var _toPrimitive = function(it, S) { + if (!_isObject(it)) { + return it; + } + var fn, val; + if (S && typeof (fn = it.toString) == "function" && !_isObject(val = fn.call(it))) { + return val; + } + if (typeof (fn = it.valueOf) == "function" && !_isObject(val = fn.call(it))) { + return val; + } + if (!S && typeof (fn = it.toString) == "function" && !_isObject(val = fn.call(it))) { + return val; + } + throw TypeError("Can't convert object to primitive value"); + }; + var dP = Object.defineProperty; + var f = _descriptors ? Object.defineProperty : function defineProperty(O, P, Attributes) { + _anObject(O); + P = _toPrimitive(P, true); + _anObject(Attributes); + if (_ie8DomDefine) { + try { + return dP(O, P, Attributes); + } catch (e) { + } + } + if ("get" in Attributes || "set" in Attributes) { + throw TypeError("Accessors not supported!"); + } + if ("value" in Attributes) { + O[P] = Attributes.value; + } + return O; + }; + var _objectDp = { + f + }; + var _propertyDesc = function(bitmap, value) { + return { + enumerable: !(bitmap & 1), + configurable: !(bitmap & 2), + writable: !(bitmap & 4), + value + }; + }; + var _hide = _descriptors ? function(object, key2, value) { + return _objectDp.f(object, key2, _propertyDesc(1, value)); + } : function(object, key2, value) { + object[key2] = value; + return object; + }; + var hasOwnProperty = {}.hasOwnProperty; + var _has = function(it, key2) { + return hasOwnProperty.call(it, key2); + }; + var id = 0; + var px = Math.random(); + var _uid = function(key2) { + return "Symbol(".concat(key2 === void 0 ? "" : key2, ")_", (++id + px).toString(36)); + }; + var _library = false; + var _shared = createCommonjsModule(function(module3) { + var SHARED = "__core-js_shared__"; + var store = _global[SHARED] || (_global[SHARED] = {}); + (module3.exports = function(key2, value) { + return store[key2] || (store[key2] = value !== void 0 ? value : {}); + })("versions", []).push({ + version: _core.version, + mode: _library ? "pure" : "global", + copyright: "\xA9 2019 Denis Pushkarev (zloirock.ru)" + }); + }); + var _functionToString = _shared("native-function-to-string", Function.toString); + var _redefine = createCommonjsModule(function(module3) { + var SRC = _uid("src"); + var TO_STRING = "toString"; + var TPL = ("" + _functionToString).split(TO_STRING); + _core.inspectSource = function(it) { + return _functionToString.call(it); + }; + (module3.exports = function(O, key2, val, safe) { + var isFunction = typeof val == "function"; + if (isFunction) { + _has(val, "name") || _hide(val, "name", key2); + } + if (O[key2] === val) { + return; + } + if (isFunction) { + _has(val, SRC) || _hide(val, SRC, O[key2] ? "" + O[key2] : TPL.join(String(key2))); + } + if (O === _global) { + O[key2] = val; + } else if (!safe) { + delete O[key2]; + _hide(O, key2, val); + } else if (O[key2]) { + O[key2] = val; + } else { + _hide(O, key2, val); + } + })(Function.prototype, TO_STRING, function toString() { + return typeof this == "function" && this[SRC] || _functionToString.call(this); + }); + }); + var _aFunction = function(it) { + if (typeof it != "function") { + throw TypeError(it + " is not a function!"); + } + return it; + }; + var _ctx = function(fn, that, length) { + _aFunction(fn); + if (that === void 0) { + return fn; + } + switch (length) { + case 1: + return function(a) { + return fn.call(that, a); + }; + case 2: + return function(a, b) { + return fn.call(that, a, b); + }; + case 3: + return function(a, b, c2) { + return fn.call(that, a, b, c2); + }; + } + return function() { + return fn.apply(that, arguments); + }; + }; + var PROTOTYPE = "prototype"; + var $export = function(type, name, source2) { + var IS_FORCED = type & $export.F; + var IS_GLOBAL = type & $export.G; + var IS_STATIC = type & $export.S; + var IS_PROTO = type & $export.P; + var IS_BIND = type & $export.B; + var target = IS_GLOBAL ? _global : IS_STATIC ? _global[name] || (_global[name] = {}) : (_global[name] || {})[PROTOTYPE]; + var exports2 = IS_GLOBAL ? _core : _core[name] || (_core[name] = {}); + var expProto = exports2[PROTOTYPE] || (exports2[PROTOTYPE] = {}); + var key2, own, out, exp; + if (IS_GLOBAL) { + source2 = name; + } + for (key2 in source2) { + own = !IS_FORCED && target && target[key2] !== void 0; + out = (own ? target : source2)[key2]; + exp = IS_BIND && own ? _ctx(out, _global) : IS_PROTO && typeof out == "function" ? _ctx(Function.call, out) : out; + if (target) { + _redefine(target, key2, out, type & $export.U); + } + if (exports2[key2] != out) { + _hide(exports2, key2, exp); + } + if (IS_PROTO && expProto[key2] != out) { + expProto[key2] = out; + } + } + }; + _global.core = _core; + $export.F = 1; + $export.G = 2; + $export.S = 4; + $export.P = 8; + $export.B = 16; + $export.W = 32; + $export.U = 64; + $export.R = 128; + var _export = $export; + var ceil = Math.ceil; + var floor = Math.floor; + var _toInteger = function(it) { + return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it); + }; + var _defined = function(it) { + if (it == void 0) { + throw TypeError("Can't call method on " + it); + } + return it; + }; + var _stringAt = function(TO_STRING) { + return function(that, pos2) { + var s = String(_defined(that)); + var i2 = _toInteger(pos2); + var l = s.length; + var a, b; + if (i2 < 0 || i2 >= l) { + return TO_STRING ? "" : void 0; + } + a = s.charCodeAt(i2); + return a < 55296 || a > 56319 || i2 + 1 === l || (b = s.charCodeAt(i2 + 1)) < 56320 || b > 57343 ? TO_STRING ? s.charAt(i2) : a : TO_STRING ? s.slice(i2, i2 + 2) : (a - 55296 << 10) + (b - 56320) + 65536; + }; + }; + var $at = _stringAt(false); + _export(_export.P, "String", { + codePointAt: function codePointAt2(pos2) { + return $at(this, pos2); + } + }); + var codePointAt = _core.String.codePointAt; + var max = Math.max; + var min = Math.min; + var _toAbsoluteIndex = function(index, length) { + index = _toInteger(index); + return index < 0 ? max(index + length, 0) : min(index, length); + }; + var fromCharCode = String.fromCharCode; + var $fromCodePoint = String.fromCodePoint; + _export(_export.S + _export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), "String", { + fromCodePoint: function fromCodePoint2(x) { + var arguments$1 = arguments; + var res = []; + var aLen = arguments.length; + var i2 = 0; + var code; + while (aLen > i2) { + code = +arguments$1[i2++]; + if (_toAbsoluteIndex(code, 1114111) !== code) { + throw RangeError(code + " is not a valid code point"); + } + res.push( + code < 65536 ? fromCharCode(code) : fromCharCode(((code -= 65536) >> 10) + 55296, code % 1024 + 56320) + ); + } + return res.join(""); + } + }); + var fromCodePoint = _core.String.fromCodePoint; + var Space_Separator = /[\u1680\u2000-\u200A\u202F\u205F\u3000]/; + var ID_Start = /[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u08A0-\u08B4\u08B6-\u08BD\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312E\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FEA\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDF00-\uDF19]|\uD806[\uDCA0-\uDCDF\uDCFF\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE83\uDE86-\uDE89\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50\uDF93-\uDF9F\uDFE0\uDFE1]|\uD821[\uDC00-\uDFEC]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00-\uDD1E\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]/; + var ID_Continue = /[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u0860-\u086A\u08A0-\u08B4\u08B6-\u08BD\u08D4-\u08E1\u08E3-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u09FC\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0AF9-\u0AFF\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58-\u0C5A\u0C60-\u0C63\u0C66-\u0C6F\u0C80-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D00-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D54-\u0D57\u0D5F-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19D9\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1C80-\u1C88\u1CD0-\u1CD2\u1CD4-\u1CF9\u1D00-\u1DF9\u1DFB-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u2E2F\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099\u309A\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312E\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FEA\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C5\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA8FD\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2F\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDDFD\uDE80-\uDE9C\uDEA0-\uDED0\uDEE0\uDF00-\uDF1F\uDF2D-\uDF4A\uDF50-\uDF7A\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE38-\uDE3A\uDE3F\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE6\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC00-\uDC46\uDC66-\uDC6F\uDC7F-\uDCBA\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD00-\uDD34\uDD36-\uDD3F\uDD50-\uDD73\uDD76\uDD80-\uDDC4\uDDCA-\uDDCC\uDDD0-\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE37\uDE3E\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEEA\uDEF0-\uDEF9\uDF00-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3C-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF50\uDF57\uDF5D-\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC00-\uDC4A\uDC50-\uDC59\uDC80-\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDB5\uDDB8-\uDDC0\uDDD8-\uDDDD\uDE00-\uDE40\uDE44\uDE50-\uDE59\uDE80-\uDEB7\uDEC0-\uDEC9\uDF00-\uDF19\uDF1D-\uDF2B\uDF30-\uDF39]|\uD806[\uDCA0-\uDCE9\uDCFF\uDE00-\uDE3E\uDE47\uDE50-\uDE83\uDE86-\uDE99\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC36\uDC38-\uDC40\uDC50-\uDC59\uDC72-\uDC8F\uDC92-\uDCA7\uDCA9-\uDCB6\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD36\uDD3A\uDD3C\uDD3D\uDD3F-\uDD47\uDD50-\uDD59]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDED0-\uDEED\uDEF0-\uDEF4\uDF00-\uDF36\uDF40-\uDF43\uDF50-\uDF59\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50-\uDF7E\uDF8F-\uDF9F\uDFE0\uDFE1]|\uD821[\uDC00-\uDFEC]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00-\uDD1E\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD838[\uDC00-\uDC06\uDC08-\uDC18\uDC1B-\uDC21\uDC23\uDC24\uDC26-\uDC2A]|\uD83A[\uDC00-\uDCC4\uDCD0-\uDCD6\uDD00-\uDD4A\uDD50-\uDD59]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uDB40[\uDD00-\uDDEF]/; + var unicode = { + Space_Separator, + ID_Start, + ID_Continue + }; + var util = { + isSpaceSeparator: function isSpaceSeparator(c2) { + return typeof c2 === "string" && unicode.Space_Separator.test(c2); + }, + isIdStartChar: function isIdStartChar(c2) { + return typeof c2 === "string" && (c2 >= "a" && c2 <= "z" || c2 >= "A" && c2 <= "Z" || c2 === "$" || c2 === "_" || unicode.ID_Start.test(c2)); + }, + isIdContinueChar: function isIdContinueChar(c2) { + return typeof c2 === "string" && (c2 >= "a" && c2 <= "z" || c2 >= "A" && c2 <= "Z" || c2 >= "0" && c2 <= "9" || c2 === "$" || c2 === "_" || c2 === "\u200C" || c2 === "\u200D" || unicode.ID_Continue.test(c2)); + }, + isDigit: function isDigit(c2) { + return typeof c2 === "string" && /[0-9]/.test(c2); + }, + isHexDigit: function isHexDigit(c2) { + return typeof c2 === "string" && /[0-9A-Fa-f]/.test(c2); + } + }; + var source; + var parseState; + var stack; + var pos; + var line; + var column; + var token; + var key; + var root; + var parse2 = function parse3(text, reviver) { + source = String(text); + parseState = "start"; + stack = []; + pos = 0; + line = 1; + column = 0; + token = void 0; + key = void 0; + root = void 0; + do { + token = lex(); + parseStates[parseState](); + } while (token.type !== "eof"); + if (typeof reviver === "function") { + return internalize({ "": root }, "", reviver); + } + return root; + }; + function internalize(holder, name, reviver) { + var value = holder[name]; + if (value != null && typeof value === "object") { + if (Array.isArray(value)) { + for (var i2 = 0; i2 < value.length; i2++) { + var key2 = String(i2); + var replacement = internalize(value, key2, reviver); + if (replacement === void 0) { + delete value[key2]; + } else { + Object.defineProperty(value, key2, { + value: replacement, + writable: true, + enumerable: true, + configurable: true + }); + } + } + } else { + for (var key$1 in value) { + var replacement$1 = internalize(value, key$1, reviver); + if (replacement$1 === void 0) { + delete value[key$1]; + } else { + Object.defineProperty(value, key$1, { + value: replacement$1, + writable: true, + enumerable: true, + configurable: true + }); + } + } + } + } + return reviver.call(holder, name, value); + } + var lexState; + var buffer; + var doubleQuote; + var sign; + var c; + function lex() { + lexState = "default"; + buffer = ""; + doubleQuote = false; + sign = 1; + for (; ; ) { + c = peek(); + var token2 = lexStates[lexState](); + if (token2) { + return token2; + } + } + } + function peek() { + if (source[pos]) { + return String.fromCodePoint(source.codePointAt(pos)); + } + } + function read() { + var c2 = peek(); + if (c2 === "\n") { + line++; + column = 0; + } else if (c2) { + column += c2.length; + } else { + column++; + } + if (c2) { + pos += c2.length; + } + return c2; + } + var lexStates = { + default: function default$1() { + switch (c) { + case " ": + case "\v": + case "\f": + case " ": + case "\xA0": + case "\uFEFF": + case "\n": + case "\r": + case "\u2028": + case "\u2029": + read(); + return; + case "/": + read(); + lexState = "comment"; + return; + case void 0: + read(); + return newToken("eof"); + } + if (util.isSpaceSeparator(c)) { + read(); + return; + } + return lexStates[parseState](); + }, + comment: function comment() { + switch (c) { + case "*": + read(); + lexState = "multiLineComment"; + return; + case "/": + read(); + lexState = "singleLineComment"; + return; + } + throw invalidChar(read()); + }, + multiLineComment: function multiLineComment() { + switch (c) { + case "*": + read(); + lexState = "multiLineCommentAsterisk"; + return; + case void 0: + throw invalidChar(read()); + } + read(); + }, + multiLineCommentAsterisk: function multiLineCommentAsterisk() { + switch (c) { + case "*": + read(); + return; + case "/": + read(); + lexState = "default"; + return; + case void 0: + throw invalidChar(read()); + } + read(); + lexState = "multiLineComment"; + }, + singleLineComment: function singleLineComment() { + switch (c) { + case "\n": + case "\r": + case "\u2028": + case "\u2029": + read(); + lexState = "default"; + return; + case void 0: + read(); + return newToken("eof"); + } + read(); + }, + value: function value() { + switch (c) { + case "{": + case "[": + return newToken("punctuator", read()); + case "n": + read(); + literal("ull"); + return newToken("null", null); + case "t": + read(); + literal("rue"); + return newToken("boolean", true); + case "f": + read(); + literal("alse"); + return newToken("boolean", false); + case "-": + case "+": + if (read() === "-") { + sign = -1; + } + lexState = "sign"; + return; + case ".": + buffer = read(); + lexState = "decimalPointLeading"; + return; + case "0": + buffer = read(); + lexState = "zero"; + return; + case "1": + case "2": + case "3": + case "4": + case "5": + case "6": + case "7": + case "8": + case "9": + buffer = read(); + lexState = "decimalInteger"; + return; + case "I": + read(); + literal("nfinity"); + return newToken("numeric", Infinity); + case "N": + read(); + literal("aN"); + return newToken("numeric", NaN); + case '"': + case "'": + doubleQuote = read() === '"'; + buffer = ""; + lexState = "string"; + return; + } + throw invalidChar(read()); + }, + identifierNameStartEscape: function identifierNameStartEscape() { + if (c !== "u") { + throw invalidChar(read()); + } + read(); + var u = unicodeEscape(); + switch (u) { + case "$": + case "_": + break; + default: + if (!util.isIdStartChar(u)) { + throw invalidIdentifier(); + } + break; + } + buffer += u; + lexState = "identifierName"; + }, + identifierName: function identifierName() { + switch (c) { + case "$": + case "_": + case "\u200C": + case "\u200D": + buffer += read(); + return; + case "\\": + read(); + lexState = "identifierNameEscape"; + return; + } + if (util.isIdContinueChar(c)) { + buffer += read(); + return; + } + return newToken("identifier", buffer); + }, + identifierNameEscape: function identifierNameEscape() { + if (c !== "u") { + throw invalidChar(read()); + } + read(); + var u = unicodeEscape(); + switch (u) { + case "$": + case "_": + case "\u200C": + case "\u200D": + break; + default: + if (!util.isIdContinueChar(u)) { + throw invalidIdentifier(); + } + break; + } + buffer += u; + lexState = "identifierName"; + }, + sign: function sign$1() { + switch (c) { + case ".": + buffer = read(); + lexState = "decimalPointLeading"; + return; + case "0": + buffer = read(); + lexState = "zero"; + return; + case "1": + case "2": + case "3": + case "4": + case "5": + case "6": + case "7": + case "8": + case "9": + buffer = read(); + lexState = "decimalInteger"; + return; + case "I": + read(); + literal("nfinity"); + return newToken("numeric", sign * Infinity); + case "N": + read(); + literal("aN"); + return newToken("numeric", NaN); + } + throw invalidChar(read()); + }, + zero: function zero() { + switch (c) { + case ".": + buffer += read(); + lexState = "decimalPoint"; + return; + case "e": + case "E": + buffer += read(); + lexState = "decimalExponent"; + return; + case "x": + case "X": + buffer += read(); + lexState = "hexadecimal"; + return; + } + return newToken("numeric", sign * 0); + }, + decimalInteger: function decimalInteger() { + switch (c) { + case ".": + buffer += read(); + lexState = "decimalPoint"; + return; + case "e": + case "E": + buffer += read(); + lexState = "decimalExponent"; + return; + } + if (util.isDigit(c)) { + buffer += read(); + return; + } + return newToken("numeric", sign * Number(buffer)); + }, + decimalPointLeading: function decimalPointLeading() { + if (util.isDigit(c)) { + buffer += read(); + lexState = "decimalFraction"; + return; + } + throw invalidChar(read()); + }, + decimalPoint: function decimalPoint() { + switch (c) { + case "e": + case "E": + buffer += read(); + lexState = "decimalExponent"; + return; + } + if (util.isDigit(c)) { + buffer += read(); + lexState = "decimalFraction"; + return; + } + return newToken("numeric", sign * Number(buffer)); + }, + decimalFraction: function decimalFraction() { + switch (c) { + case "e": + case "E": + buffer += read(); + lexState = "decimalExponent"; + return; + } + if (util.isDigit(c)) { + buffer += read(); + return; + } + return newToken("numeric", sign * Number(buffer)); + }, + decimalExponent: function decimalExponent() { + switch (c) { + case "+": + case "-": + buffer += read(); + lexState = "decimalExponentSign"; + return; + } + if (util.isDigit(c)) { + buffer += read(); + lexState = "decimalExponentInteger"; + return; + } + throw invalidChar(read()); + }, + decimalExponentSign: function decimalExponentSign() { + if (util.isDigit(c)) { + buffer += read(); + lexState = "decimalExponentInteger"; + return; + } + throw invalidChar(read()); + }, + decimalExponentInteger: function decimalExponentInteger() { + if (util.isDigit(c)) { + buffer += read(); + return; + } + return newToken("numeric", sign * Number(buffer)); + }, + hexadecimal: function hexadecimal() { + if (util.isHexDigit(c)) { + buffer += read(); + lexState = "hexadecimalInteger"; + return; + } + throw invalidChar(read()); + }, + hexadecimalInteger: function hexadecimalInteger() { + if (util.isHexDigit(c)) { + buffer += read(); + return; + } + return newToken("numeric", sign * Number(buffer)); + }, + string: function string() { + switch (c) { + case "\\": + read(); + buffer += escape(); + return; + case '"': + if (doubleQuote) { + read(); + return newToken("string", buffer); + } + buffer += read(); + return; + case "'": + if (!doubleQuote) { + read(); + return newToken("string", buffer); + } + buffer += read(); + return; + case "\n": + case "\r": + throw invalidChar(read()); + case "\u2028": + case "\u2029": + separatorChar(c); + break; + case void 0: + throw invalidChar(read()); + } + buffer += read(); + }, + start: function start() { + switch (c) { + case "{": + case "[": + return newToken("punctuator", read()); + } + lexState = "value"; + }, + beforePropertyName: function beforePropertyName() { + switch (c) { + case "$": + case "_": + buffer = read(); + lexState = "identifierName"; + return; + case "\\": + read(); + lexState = "identifierNameStartEscape"; + return; + case "}": + return newToken("punctuator", read()); + case '"': + case "'": + doubleQuote = read() === '"'; + lexState = "string"; + return; + } + if (util.isIdStartChar(c)) { + buffer += read(); + lexState = "identifierName"; + return; + } + throw invalidChar(read()); + }, + afterPropertyName: function afterPropertyName() { + if (c === ":") { + return newToken("punctuator", read()); + } + throw invalidChar(read()); + }, + beforePropertyValue: function beforePropertyValue() { + lexState = "value"; + }, + afterPropertyValue: function afterPropertyValue() { + switch (c) { + case ",": + case "}": + return newToken("punctuator", read()); + } + throw invalidChar(read()); + }, + beforeArrayValue: function beforeArrayValue() { + if (c === "]") { + return newToken("punctuator", read()); + } + lexState = "value"; + }, + afterArrayValue: function afterArrayValue() { + switch (c) { + case ",": + case "]": + return newToken("punctuator", read()); + } + throw invalidChar(read()); + }, + end: function end() { + throw invalidChar(read()); + } + }; + function newToken(type, value) { + return { + type, + value, + line, + column + }; + } + function literal(s) { + for (var i2 = 0, list = s; i2 < list.length; i2 += 1) { + var c2 = list[i2]; + var p = peek(); + if (p !== c2) { + throw invalidChar(read()); + } + read(); + } + } + function escape() { + var c2 = peek(); + switch (c2) { + case "b": + read(); + return "\b"; + case "f": + read(); + return "\f"; + case "n": + read(); + return "\n"; + case "r": + read(); + return "\r"; + case "t": + read(); + return " "; + case "v": + read(); + return "\v"; + case "0": + read(); + if (util.isDigit(peek())) { + throw invalidChar(read()); + } + return "\0"; + case "x": + read(); + return hexEscape(); + case "u": + read(); + return unicodeEscape(); + case "\n": + case "\u2028": + case "\u2029": + read(); + return ""; + case "\r": + read(); + if (peek() === "\n") { + read(); + } + return ""; + case "1": + case "2": + case "3": + case "4": + case "5": + case "6": + case "7": + case "8": + case "9": + throw invalidChar(read()); + case void 0: + throw invalidChar(read()); + } + return read(); + } + function hexEscape() { + var buffer2 = ""; + var c2 = peek(); + if (!util.isHexDigit(c2)) { + throw invalidChar(read()); + } + buffer2 += read(); + c2 = peek(); + if (!util.isHexDigit(c2)) { + throw invalidChar(read()); + } + buffer2 += read(); + return String.fromCodePoint(parseInt(buffer2, 16)); + } + function unicodeEscape() { + var buffer2 = ""; + var count = 4; + while (count-- > 0) { + var c2 = peek(); + if (!util.isHexDigit(c2)) { + throw invalidChar(read()); + } + buffer2 += read(); + } + return String.fromCodePoint(parseInt(buffer2, 16)); + } + var parseStates = { + start: function start() { + if (token.type === "eof") { + throw invalidEOF(); + } + push(); + }, + beforePropertyName: function beforePropertyName() { + switch (token.type) { + case "identifier": + case "string": + key = token.value; + parseState = "afterPropertyName"; + return; + case "punctuator": + pop(); + return; + case "eof": + throw invalidEOF(); + } + }, + afterPropertyName: function afterPropertyName() { + if (token.type === "eof") { + throw invalidEOF(); + } + parseState = "beforePropertyValue"; + }, + beforePropertyValue: function beforePropertyValue() { + if (token.type === "eof") { + throw invalidEOF(); + } + push(); + }, + beforeArrayValue: function beforeArrayValue() { + if (token.type === "eof") { + throw invalidEOF(); + } + if (token.type === "punctuator" && token.value === "]") { + pop(); + return; + } + push(); + }, + afterPropertyValue: function afterPropertyValue() { + if (token.type === "eof") { + throw invalidEOF(); + } + switch (token.value) { + case ",": + parseState = "beforePropertyName"; + return; + case "}": + pop(); + } + }, + afterArrayValue: function afterArrayValue() { + if (token.type === "eof") { + throw invalidEOF(); + } + switch (token.value) { + case ",": + parseState = "beforeArrayValue"; + return; + case "]": + pop(); + } + }, + end: function end() { + } + }; + function push() { + var value; + switch (token.type) { + case "punctuator": + switch (token.value) { + case "{": + value = {}; + break; + case "[": + value = []; + break; + } + break; + case "null": + case "boolean": + case "numeric": + case "string": + value = token.value; + break; + } + if (root === void 0) { + root = value; + } else { + var parent = stack[stack.length - 1]; + if (Array.isArray(parent)) { + parent.push(value); + } else { + Object.defineProperty(parent, key, { + value, + writable: true, + enumerable: true, + configurable: true + }); + } + } + if (value !== null && typeof value === "object") { + stack.push(value); + if (Array.isArray(value)) { + parseState = "beforeArrayValue"; + } else { + parseState = "beforePropertyName"; + } + } else { + var current = stack[stack.length - 1]; + if (current == null) { + parseState = "end"; + } else if (Array.isArray(current)) { + parseState = "afterArrayValue"; + } else { + parseState = "afterPropertyValue"; + } + } + } + function pop() { + stack.pop(); + var current = stack[stack.length - 1]; + if (current == null) { + parseState = "end"; + } else if (Array.isArray(current)) { + parseState = "afterArrayValue"; + } else { + parseState = "afterPropertyValue"; + } + } + function invalidChar(c2) { + if (c2 === void 0) { + return syntaxError("JSON5: invalid end of input at " + line + ":" + column); + } + return syntaxError("JSON5: invalid character '" + formatChar(c2) + "' at " + line + ":" + column); + } + function invalidEOF() { + return syntaxError("JSON5: invalid end of input at " + line + ":" + column); + } + function invalidIdentifier() { + column -= 5; + return syntaxError("JSON5: invalid identifier character at " + line + ":" + column); + } + function separatorChar(c2) { + console.warn("JSON5: '" + formatChar(c2) + "' in strings is not valid ECMAScript; consider escaping"); + } + function formatChar(c2) { + var replacements = { + "'": "\\'", + '"': '\\"', + "\\": "\\\\", + "\b": "\\b", + "\f": "\\f", + "\n": "\\n", + "\r": "\\r", + " ": "\\t", + "\v": "\\v", + "\0": "\\0", + "\u2028": "\\u2028", + "\u2029": "\\u2029" + }; + if (replacements[c2]) { + return replacements[c2]; + } + if (c2 < " ") { + var hexString = c2.charCodeAt(0).toString(16); + return "\\x" + ("00" + hexString).substring(hexString.length); + } + return c2; + } + function syntaxError(message) { + var err = new SyntaxError(message); + err.lineNumber = line; + err.columnNumber = column; + return err; + } + var stringify = function stringify2(value, replacer, space) { + var stack2 = []; + var indent = ""; + var propertyList; + var replacerFunc; + var gap = ""; + var quote; + if (replacer != null && typeof replacer === "object" && !Array.isArray(replacer)) { + space = replacer.space; + quote = replacer.quote; + replacer = replacer.replacer; + } + if (typeof replacer === "function") { + replacerFunc = replacer; + } else if (Array.isArray(replacer)) { + propertyList = []; + for (var i2 = 0, list = replacer; i2 < list.length; i2 += 1) { + var v = list[i2]; + var item = void 0; + if (typeof v === "string") { + item = v; + } else if (typeof v === "number" || v instanceof String || v instanceof Number) { + item = String(v); + } + if (item !== void 0 && propertyList.indexOf(item) < 0) { + propertyList.push(item); + } + } + } + if (space instanceof Number) { + space = Number(space); + } else if (space instanceof String) { + space = String(space); + } + if (typeof space === "number") { + if (space > 0) { + space = Math.min(10, Math.floor(space)); + gap = " ".substr(0, space); + } + } else if (typeof space === "string") { + gap = space.substr(0, 10); + } + return serializeProperty("", { "": value }); + function serializeProperty(key2, holder) { + var value2 = holder[key2]; + if (value2 != null) { + if (typeof value2.toJSON5 === "function") { + value2 = value2.toJSON5(key2); + } else if (typeof value2.toJSON === "function") { + value2 = value2.toJSON(key2); + } + } + if (replacerFunc) { + value2 = replacerFunc.call(holder, key2, value2); + } + if (value2 instanceof Number) { + value2 = Number(value2); + } else if (value2 instanceof String) { + value2 = String(value2); + } else if (value2 instanceof Boolean) { + value2 = value2.valueOf(); + } + switch (value2) { + case null: + return "null"; + case true: + return "true"; + case false: + return "false"; + } + if (typeof value2 === "string") { + return quoteString(value2, false); + } + if (typeof value2 === "number") { + return String(value2); + } + if (typeof value2 === "object") { + return Array.isArray(value2) ? serializeArray(value2) : serializeObject(value2); + } + return void 0; + } + function quoteString(value2) { + var quotes = { + "'": 0.1, + '"': 0.2 + }; + var replacements = { + "'": "\\'", + '"': '\\"', + "\\": "\\\\", + "\b": "\\b", + "\f": "\\f", + "\n": "\\n", + "\r": "\\r", + " ": "\\t", + "\v": "\\v", + "\0": "\\0", + "\u2028": "\\u2028", + "\u2029": "\\u2029" + }; + var product = ""; + for (var i3 = 0; i3 < value2.length; i3++) { + var c2 = value2[i3]; + switch (c2) { + case "'": + case '"': + quotes[c2]++; + product += c2; + continue; + case "\0": + if (util.isDigit(value2[i3 + 1])) { + product += "\\x00"; + continue; + } + } + if (replacements[c2]) { + product += replacements[c2]; + continue; + } + if (c2 < " ") { + var hexString = c2.charCodeAt(0).toString(16); + product += "\\x" + ("00" + hexString).substring(hexString.length); + continue; + } + product += c2; + } + var quoteChar = quote || Object.keys(quotes).reduce(function(a, b) { + return quotes[a] < quotes[b] ? a : b; + }); + product = product.replace(new RegExp(quoteChar, "g"), replacements[quoteChar]); + return quoteChar + product + quoteChar; + } + function serializeObject(value2) { + if (stack2.indexOf(value2) >= 0) { + throw TypeError("Converting circular structure to JSON5"); + } + stack2.push(value2); + var stepback = indent; + indent = indent + gap; + var keys = propertyList || Object.keys(value2); + var partial = []; + for (var i3 = 0, list2 = keys; i3 < list2.length; i3 += 1) { + var key2 = list2[i3]; + var propertyString = serializeProperty(key2, value2); + if (propertyString !== void 0) { + var member = serializeKey(key2) + ":"; + if (gap !== "") { + member += " "; + } + member += propertyString; + partial.push(member); + } + } + var final; + if (partial.length === 0) { + final = "{}"; + } else { + var properties; + if (gap === "") { + properties = partial.join(","); + final = "{" + properties + "}"; + } else { + var separator = ",\n" + indent; + properties = partial.join(separator); + final = "{\n" + indent + properties + ",\n" + stepback + "}"; + } + } + stack2.pop(); + indent = stepback; + return final; + } + function serializeKey(key2) { + if (key2.length === 0) { + return quoteString(key2, true); + } + var firstChar = String.fromCodePoint(key2.codePointAt(0)); + if (!util.isIdStartChar(firstChar)) { + return quoteString(key2, true); + } + for (var i3 = firstChar.length; i3 < key2.length; i3++) { + if (!util.isIdContinueChar(String.fromCodePoint(key2.codePointAt(i3)))) { + return quoteString(key2, true); + } + } + return key2; + } + function serializeArray(value2) { + if (stack2.indexOf(value2) >= 0) { + throw TypeError("Converting circular structure to JSON5"); + } + stack2.push(value2); + var stepback = indent; + indent = indent + gap; + var partial = []; + for (var i3 = 0; i3 < value2.length; i3++) { + var propertyString = serializeProperty(String(i3), value2); + partial.push(propertyString !== void 0 ? propertyString : "null"); + } + var final; + if (partial.length === 0) { + final = "[]"; + } else { + if (gap === "") { + var properties = partial.join(","); + final = "[" + properties + "]"; + } else { + var separator = ",\n" + indent; + var properties$1 = partial.join(separator); + final = "[\n" + indent + properties$1 + ",\n" + stepback + "]"; + } + } + stack2.pop(); + indent = stepback; + return final; + } + }; + var JSON52 = { + parse: parse2, + stringify + }; + var lib = JSON52; + var es5 = lib; + return es5; + }); + } +}); + +// node_modules/readline-sync/lib/readline-sync.js +var require_readline_sync = __commonJS({ + "node_modules/readline-sync/lib/readline-sync.js"(exports) { + "use strict"; + var IS_WIN = process.platform === "win32"; + var ALGORITHM_CIPHER = "aes-256-cbc"; + var ALGORITHM_HASH = "sha256"; + var DEFAULT_ERR_MSG = "The current environment doesn't support interactive reading from TTY."; + var fs2 = require("fs"); + var TTY = process.binding("tty_wrap").TTY; + var childProc = require("child_process"); + var pathUtil = require("path"); + var defaultOptions = { + prompt: "> ", + hideEchoBack: false, + mask: "*", + limit: [], + limitMessage: "Input another, please.$<( [)limit(])>", + defaultInput: "", + trueValue: [], + falseValue: [], + caseSensitive: false, + keepWhitespace: false, + encoding: "utf8", + bufferSize: 1024, + print: void 0, + history: true, + cd: false, + phContent: void 0, + preCheck: void 0 + }; + var fdR = "none"; + var fdW; + var ttyR; + var isRawMode = false; + var extHostPath; + var extHostArgs; + var tempdir; + var salt = 0; + var lastInput = ""; + var inputHistory = []; + var rawInput; + var _DBG_useExt = false; + var _DBG_checkOptions = false; + var _DBG_checkMethod = false; + function getHostArgs(options) { + function encodeArg(arg) { + return arg.replace(/[^\w\u0080-\uFFFF]/g, function(chr) { + return "#" + chr.charCodeAt(0) + ";"; + }); + } + return extHostArgs.concat(function(conf) { + var args = []; + Object.keys(conf).forEach(function(optionName) { + if (conf[optionName] === "boolean") { + if (options[optionName]) { + args.push("--" + optionName); + } + } else if (conf[optionName] === "string") { + if (options[optionName]) { + args.push("--" + optionName, encodeArg(options[optionName])); + } + } + }); + return args; + }({ + display: "string", + displayOnly: "boolean", + keyIn: "boolean", + hideEchoBack: "boolean", + mask: "string", + limit: "string", + caseSensitive: "boolean" + })); + } + function _execFileSync(options, execOptions) { + function getTempfile(name) { + var filepath, suffix = "", fd; + tempdir = tempdir || require("os").tmpdir(); + while (true) { + filepath = pathUtil.join(tempdir, name + suffix); + try { + fd = fs2.openSync(filepath, "wx"); + } catch (e) { + if (e.code === "EEXIST") { + suffix++; + continue; + } else { + throw e; + } + } + fs2.closeSync(fd); + break; + } + return filepath; + } + var hostArgs, shellPath, shellArgs, res = {}, exitCode, extMessage, pathStdout = getTempfile("readline-sync.stdout"), pathStderr = getTempfile("readline-sync.stderr"), pathExit = getTempfile("readline-sync.exit"), pathDone = getTempfile("readline-sync.done"), crypto = require("crypto"), shasum, decipher, password; + shasum = crypto.createHash(ALGORITHM_HASH); + shasum.update("" + process.pid + salt++ + Math.random()); + password = shasum.digest("hex"); + decipher = crypto.createDecipher(ALGORITHM_CIPHER, password); + hostArgs = getHostArgs(options); + if (IS_WIN) { + shellPath = process.env.ComSpec || "cmd.exe"; + process.env.Q = '"'; + shellArgs = [ + "/V:ON", + "/S", + "/C", + "(%Q%" + shellPath + "%Q% /V:ON /S /C %Q%%Q%" + extHostPath + "%Q%" + hostArgs.map(function(arg) { + return " %Q%" + arg + "%Q%"; + }).join("") + " & (echo !ERRORLEVEL!)>%Q%" + pathExit + "%Q%%Q%) 2>%Q%" + pathStderr + "%Q% |%Q%" + process.execPath + "%Q% %Q%" + __dirname + "\\encrypt.js%Q% %Q%" + ALGORITHM_CIPHER + "%Q% %Q%" + password + "%Q% >%Q%" + pathStdout + "%Q% & (echo 1)>%Q%" + pathDone + "%Q%" + ]; + } else { + shellPath = "/bin/sh"; + shellArgs = [ + "-c", + '("' + extHostPath + '"' + hostArgs.map(function(arg) { + return " '" + arg.replace(/'/g, "'\\''") + "'"; + }).join("") + '; echo $?>"' + pathExit + '") 2>"' + pathStderr + '" |"' + process.execPath + '" "' + __dirname + '/encrypt.js" "' + ALGORITHM_CIPHER + '" "' + password + '" >"' + pathStdout + '"; echo 1 >"' + pathDone + '"' + ]; + } + if (_DBG_checkMethod) { + _DBG_checkMethod("_execFileSync", hostArgs); + } + try { + childProc.spawn(shellPath, shellArgs, execOptions); + } catch (e) { + res.error = new Error(e.message); + res.error.method = "_execFileSync - spawn"; + res.error.program = shellPath; + res.error.args = shellArgs; + } + while (fs2.readFileSync(pathDone, { encoding: options.encoding }).trim() !== "1") { + } + if ((exitCode = fs2.readFileSync(pathExit, { encoding: options.encoding }).trim()) === "0") { + res.input = decipher.update( + fs2.readFileSync(pathStdout, { encoding: "binary" }), + "hex", + options.encoding + ) + decipher.final(options.encoding); + } else { + extMessage = fs2.readFileSync(pathStderr, { encoding: options.encoding }).trim(); + res.error = new Error(DEFAULT_ERR_MSG + (extMessage ? "\n" + extMessage : "")); + res.error.method = "_execFileSync"; + res.error.program = shellPath; + res.error.args = shellArgs; + res.error.extMessage = extMessage; + res.error.exitCode = +exitCode; + } + fs2.unlinkSync(pathStdout); + fs2.unlinkSync(pathStderr); + fs2.unlinkSync(pathExit); + fs2.unlinkSync(pathDone); + return res; + } + function readlineExt(options) { + var hostArgs, res = {}, extMessage, execOptions = { env: process.env, encoding: options.encoding }; + if (!extHostPath) { + if (IS_WIN) { + if (process.env.PSModulePath) { + extHostPath = "powershell.exe"; + extHostArgs = ["-ExecutionPolicy", "Bypass", "-File", __dirname + "\\read.ps1"]; + } else { + extHostPath = "cscript.exe"; + extHostArgs = ["//nologo", __dirname + "\\read.cs.js"]; + } + } else { + extHostPath = "/bin/sh"; + extHostArgs = [__dirname + "/read.sh"]; + } + } + if (IS_WIN && !process.env.PSModulePath) { + execOptions.stdio = [process.stdin]; + } + if (childProc.execFileSync) { + hostArgs = getHostArgs(options); + if (_DBG_checkMethod) { + _DBG_checkMethod("execFileSync", hostArgs); + } + try { + res.input = childProc.execFileSync(extHostPath, hostArgs, execOptions); + } catch (e) { + extMessage = e.stderr ? (e.stderr + "").trim() : ""; + res.error = new Error(DEFAULT_ERR_MSG + (extMessage ? "\n" + extMessage : "")); + res.error.method = "execFileSync"; + res.error.program = extHostPath; + res.error.args = hostArgs; + res.error.extMessage = extMessage; + res.error.exitCode = e.status; + res.error.code = e.code; + res.error.signal = e.signal; + } + } else { + res = _execFileSync(options, execOptions); + } + if (!res.error) { + res.input = res.input.replace(/^\s*'|'\s*$/g, ""); + options.display = ""; + } + return res; + } + function _readlineSync(options) { + var input = "", displaySave = options.display, silent = !options.display && options.keyIn && options.hideEchoBack && !options.mask; + function tryExt() { + var res = readlineExt(options); + if (res.error) { + throw res.error; + } + return res.input; + } + if (_DBG_checkOptions) { + _DBG_checkOptions(options); + } + (function() { + var fsB, constants, verNum; + function getFsB() { + if (!fsB) { + fsB = process.binding("fs"); + constants = process.binding("constants"); + } + return fsB; + } + if (typeof fdR !== "string") { + return; + } + fdR = null; + if (IS_WIN) { + verNum = function(ver) { + var nums = ver.replace(/^\D+/, "").split("."); + var verNum2 = 0; + if (nums[0] = +nums[0]) { + verNum2 += nums[0] * 1e4; + } + if (nums[1] = +nums[1]) { + verNum2 += nums[1] * 100; + } + if (nums[2] = +nums[2]) { + verNum2 += nums[2]; + } + return verNum2; + }(process.version); + if (!(verNum >= 20302 && verNum < 40204 || verNum >= 5e4 && verNum < 50100 || verNum >= 50600 && verNum < 60200) && process.stdin.isTTY) { + process.stdin.pause(); + fdR = process.stdin.fd; + ttyR = process.stdin._handle; + } else { + try { + fdR = getFsB().open("CONIN$", constants.O_RDWR, parseInt("0666", 8)); + ttyR = new TTY(fdR, true); + } catch (e) { + } + } + if (process.stdout.isTTY) { + fdW = process.stdout.fd; + } else { + try { + fdW = fs2.openSync("\\\\.\\CON", "w"); + } catch (e) { + } + if (typeof fdW !== "number") { + try { + fdW = getFsB().open("CONOUT$", constants.O_RDWR, parseInt("0666", 8)); + } catch (e) { + } + } + } + } else { + if (process.stdin.isTTY) { + process.stdin.pause(); + try { + fdR = fs2.openSync("/dev/tty", "r"); + ttyR = process.stdin._handle; + } catch (e) { + } + } else { + try { + fdR = fs2.openSync("/dev/tty", "r"); + ttyR = new TTY(fdR, false); + } catch (e) { + } + } + if (process.stdout.isTTY) { + fdW = process.stdout.fd; + } else { + try { + fdW = fs2.openSync("/dev/tty", "w"); + } catch (e) { + } + } + } + })(); + (function() { + var atEol, limit, isCooked = !options.hideEchoBack && !options.keyIn, buffer, reqSize, readSize, chunk, line; + rawInput = ""; + function setRawMode(mode) { + if (mode === isRawMode) { + return true; + } + if (ttyR.setRawMode(mode) !== 0) { + return false; + } + isRawMode = mode; + return true; + } + if (_DBG_useExt || !ttyR || typeof fdW !== "number" && (options.display || !isCooked)) { + input = tryExt(); + return; + } + if (options.display) { + fs2.writeSync(fdW, options.display); + options.display = ""; + } + if (options.displayOnly) { + return; + } + if (!setRawMode(!isCooked)) { + input = tryExt(); + return; + } + reqSize = options.keyIn ? 1 : options.bufferSize; + buffer = Buffer.allocUnsafe && Buffer.alloc ? Buffer.alloc(reqSize) : new Buffer(reqSize); + if (options.keyIn && options.limit) { + limit = new RegExp( + "[^" + options.limit + "]", + "g" + (options.caseSensitive ? "" : "i") + ); + } + while (true) { + readSize = 0; + try { + readSize = fs2.readSync(fdR, buffer, 0, reqSize); + } catch (e) { + if (e.code !== "EOF") { + setRawMode(false); + input += tryExt(); + return; + } + } + if (readSize > 0) { + chunk = buffer.toString(options.encoding, 0, readSize); + rawInput += chunk; + } else { + chunk = "\n"; + rawInput += String.fromCharCode(0); + } + if (chunk && typeof (line = (chunk.match(/^(.*?)[\r\n]/) || [])[1]) === "string") { + chunk = line; + atEol = true; + } + if (chunk) { + chunk = chunk.replace(/[\x00-\x08\x0b\x0c\x0e-\x1f\x7f]/g, ""); + } + if (chunk && limit) { + chunk = chunk.replace(limit, ""); + } + if (chunk) { + if (!isCooked) { + if (!options.hideEchoBack) { + fs2.writeSync(fdW, chunk); + } else if (options.mask) { + fs2.writeSync(fdW, new Array(chunk.length + 1).join(options.mask)); + } + } + input += chunk; + } + if (!options.keyIn && atEol || options.keyIn && input.length >= reqSize) { + break; + } + } + if (!isCooked && !silent) { + fs2.writeSync(fdW, "\n"); + } + setRawMode(false); + })(); + if (options.print && !silent) { + options.print( + displaySave + (options.displayOnly ? "" : (options.hideEchoBack ? new Array(input.length + 1).join(options.mask) : input) + "\n"), + options.encoding + ); + } + return options.displayOnly ? "" : lastInput = options.keepWhitespace || options.keyIn ? input : input.trim(); + } + function flattenArray(array, validator) { + var flatArray = []; + function _flattenArray(array2) { + if (array2 == null) { + return; + } else if (Array.isArray(array2)) { + array2.forEach(_flattenArray); + } else if (!validator || validator(array2)) { + flatArray.push(array2); + } + } + _flattenArray(array); + return flatArray; + } + function escapePattern(pattern) { + return pattern.replace( + /[\x00-\x7f]/g, + function(s) { + return "\\x" + ("00" + s.charCodeAt().toString(16)).substr(-2); + } + ); + } + function margeOptions() { + var optionsList = Array.prototype.slice.call(arguments), optionNames, fromDefault; + if (optionsList.length && typeof optionsList[0] === "boolean") { + fromDefault = optionsList.shift(); + if (fromDefault) { + optionNames = Object.keys(defaultOptions); + optionsList.unshift(defaultOptions); + } + } + return optionsList.reduce(function(options, optionsPart) { + if (optionsPart == null) { + return options; + } + if (optionsPart.hasOwnProperty("noEchoBack") && !optionsPart.hasOwnProperty("hideEchoBack")) { + optionsPart.hideEchoBack = optionsPart.noEchoBack; + delete optionsPart.noEchoBack; + } + if (optionsPart.hasOwnProperty("noTrim") && !optionsPart.hasOwnProperty("keepWhitespace")) { + optionsPart.keepWhitespace = optionsPart.noTrim; + delete optionsPart.noTrim; + } + if (!fromDefault) { + optionNames = Object.keys(optionsPart); + } + optionNames.forEach(function(optionName) { + var value; + if (!optionsPart.hasOwnProperty(optionName)) { + return; + } + value = optionsPart[optionName]; + switch (optionName) { + case "mask": + case "limitMessage": + case "defaultInput": + case "encoding": + value = value != null ? value + "" : ""; + if (value && optionName !== "limitMessage") { + value = value.replace(/[\r\n]/g, ""); + } + options[optionName] = value; + break; + case "bufferSize": + if (!isNaN(value = parseInt(value, 10)) && typeof value === "number") { + options[optionName] = value; + } + break; + case "displayOnly": + case "keyIn": + case "hideEchoBack": + case "caseSensitive": + case "keepWhitespace": + case "history": + case "cd": + options[optionName] = !!value; + break; + case "limit": + case "trueValue": + case "falseValue": + options[optionName] = flattenArray(value, function(value2) { + var type = typeof value2; + return type === "string" || type === "number" || type === "function" || value2 instanceof RegExp; + }).map(function(value2) { + return typeof value2 === "string" ? value2.replace(/[\r\n]/g, "") : value2; + }); + break; + case "print": + case "phContent": + case "preCheck": + options[optionName] = typeof value === "function" ? value : void 0; + break; + case "prompt": + case "display": + options[optionName] = value != null ? value : ""; + break; + } + }); + return options; + }, {}); + } + function isMatched(res, comps, caseSensitive) { + return comps.some(function(comp) { + var type = typeof comp; + return type === "string" ? caseSensitive ? res === comp : res.toLowerCase() === comp.toLowerCase() : type === "number" ? parseFloat(res) === comp : type === "function" ? comp(res) : comp instanceof RegExp ? comp.test(res) : false; + }); + } + function replaceHomePath(path2, expand) { + var homePath = pathUtil.normalize( + IS_WIN ? (process.env.HOMEDRIVE || "") + (process.env.HOMEPATH || "") : process.env.HOME || "" + ).replace(/[\/\\]+$/, ""); + path2 = pathUtil.normalize(path2); + return expand ? path2.replace(/^~(?=\/|\\|$)/, homePath) : path2.replace(new RegExp("^" + escapePattern(homePath) + "(?=\\/|\\\\|$)", IS_WIN ? "i" : ""), "~"); + } + function replacePlaceholder(text, generator) { + var PTN_INNER = "(?:\\(([\\s\\S]*?)\\))?(\\w+|.-.)(?:\\(([\\s\\S]*?)\\))?", rePlaceholder = new RegExp("(\\$)?(\\$<" + PTN_INNER + ">)", "g"), rePlaceholderCompat = new RegExp("(\\$)?(\\$\\{" + PTN_INNER + "\\})", "g"); + function getPlaceholderText(s, escape, placeholder, pre, param, post) { + var text2; + return escape || typeof (text2 = generator(param)) !== "string" ? placeholder : text2 ? (pre || "") + text2 + (post || "") : ""; + } + return text.replace(rePlaceholder, getPlaceholderText).replace(rePlaceholderCompat, getPlaceholderText); + } + function array2charlist(array, caseSensitive, collectSymbols) { + var values, group2 = [], groupClass = -1, charCode = 0, symbols = "", suppressed; + function addGroup(groups, group3) { + if (group3.length > 3) { + groups.push(group3[0] + "..." + group3[group3.length - 1]); + suppressed = true; + } else if (group3.length) { + groups = groups.concat(group3); + } + return groups; + } + values = array.reduce( + function(chars, value) { + return chars.concat((value + "").split("")); + }, + [] + ).reduce(function(groups, curChar) { + var curGroupClass, curCharCode; + if (!caseSensitive) { + curChar = curChar.toLowerCase(); + } + curGroupClass = /^\d$/.test(curChar) ? 1 : /^[A-Z]$/.test(curChar) ? 2 : /^[a-z]$/.test(curChar) ? 3 : 0; + if (collectSymbols && curGroupClass === 0) { + symbols += curChar; + } else { + curCharCode = curChar.charCodeAt(0); + if (curGroupClass && curGroupClass === groupClass && curCharCode === charCode + 1) { + group2.push(curChar); + } else { + groups = addGroup(groups, group2); + group2 = [curChar]; + groupClass = curGroupClass; + } + charCode = curCharCode; + } + return groups; + }, []); + values = addGroup(values, group2); + if (symbols) { + values.push(symbols); + suppressed = true; + } + return { values, suppressed }; + } + function joinChunks(chunks, suppressed) { + return chunks.join(chunks.length > 2 ? ", " : suppressed ? " / " : "/"); + } + function getPhContent(param, options) { + var text, values, resCharlist = {}, arg; + if (options.phContent) { + text = options.phContent(param, options); + } + if (typeof text !== "string") { + switch (param) { + case "hideEchoBack": + case "mask": + case "defaultInput": + case "caseSensitive": + case "keepWhitespace": + case "encoding": + case "bufferSize": + case "history": + case "cd": + text = !options.hasOwnProperty(param) ? "" : typeof options[param] === "boolean" ? options[param] ? "on" : "off" : options[param] + ""; + break; + case "limit": + case "trueValue": + case "falseValue": + values = options[options.hasOwnProperty(param + "Src") ? param + "Src" : param]; + if (options.keyIn) { + resCharlist = array2charlist(values, options.caseSensitive); + values = resCharlist.values; + } else { + values = values.filter(function(value) { + var type = typeof value; + return type === "string" || type === "number"; + }); + } + text = joinChunks(values, resCharlist.suppressed); + break; + case "limitCount": + case "limitCountNotZero": + text = options[options.hasOwnProperty("limitSrc") ? "limitSrc" : "limit"].length; + text = text || param !== "limitCountNotZero" ? text + "" : ""; + break; + case "lastInput": + text = lastInput; + break; + case "cwd": + case "CWD": + case "cwdHome": + text = process.cwd(); + if (param === "CWD") { + text = pathUtil.basename(text); + } else if (param === "cwdHome") { + text = replaceHomePath(text); + } + break; + case "date": + case "time": + case "localeDate": + case "localeTime": + text = new Date()["to" + param.replace(/^./, function(str) { + return str.toUpperCase(); + }) + "String"](); + break; + default: + if (typeof (arg = (param.match(/^history_m(\d+)$/) || [])[1]) === "string") { + text = inputHistory[inputHistory.length - arg] || ""; + } + } + } + return text; + } + function getPhCharlist(param) { + var matches = /^(.)-(.)$/.exec(param), text = "", from, to, code, step; + if (!matches) { + return null; + } + from = matches[1].charCodeAt(0); + to = matches[2].charCodeAt(0); + step = from < to ? 1 : -1; + for (code = from; code !== to + step; code += step) { + text += String.fromCharCode(code); + } + return text; + } + function parseCl(cl) { + var reToken = new RegExp(/(\s*)(?:("|')(.*?)(?:\2|$)|(\S+))/g), matches, taken = "", args = [], part; + cl = cl.trim(); + while (matches = reToken.exec(cl)) { + part = matches[3] || matches[4] || ""; + if (matches[1]) { + args.push(taken); + taken = ""; + } + taken += part; + } + if (taken) { + args.push(taken); + } + return args; + } + function toBool(res, options) { + return options.trueValue.length && isMatched(res, options.trueValue, options.caseSensitive) ? true : options.falseValue.length && isMatched(res, options.falseValue, options.caseSensitive) ? false : res; + } + function getValidLine(options) { + var res, forceNext, limitMessage, matches, histInput, args, resCheck; + function _getPhContent(param) { + return getPhContent(param, options); + } + function addDisplay(text) { + options.display += (/[^\r\n]$/.test(options.display) ? "\n" : "") + text; + } + options.limitSrc = options.limit; + options.displaySrc = options.display; + options.limit = ""; + options.display = replacePlaceholder(options.display + "", _getPhContent); + while (true) { + res = _readlineSync(options); + forceNext = false; + limitMessage = ""; + if (options.defaultInput && !res) { + res = options.defaultInput; + } + if (options.history) { + if (matches = /^\s*\!(?:\!|-1)(:p)?\s*$/.exec(res)) { + histInput = inputHistory[0] || ""; + if (matches[1]) { + forceNext = true; + } else { + res = histInput; + } + addDisplay(histInput + "\n"); + if (!forceNext) { + options.displayOnly = true; + _readlineSync(options); + options.displayOnly = false; + } + } else if (res && res !== inputHistory[inputHistory.length - 1]) { + inputHistory = [res]; + } + } + if (!forceNext && options.cd && res) { + args = parseCl(res); + switch (args[0].toLowerCase()) { + case "cd": + if (args[1]) { + try { + process.chdir(replaceHomePath(args[1], true)); + } catch (e) { + addDisplay(e + ""); + } + } + forceNext = true; + break; + case "pwd": + addDisplay(process.cwd()); + forceNext = true; + break; + } + } + if (!forceNext && options.preCheck) { + resCheck = options.preCheck(res, options); + res = resCheck.res; + if (resCheck.forceNext) { + forceNext = true; + } + } + if (!forceNext) { + if (!options.limitSrc.length || isMatched(res, options.limitSrc, options.caseSensitive)) { + break; + } + if (options.limitMessage) { + limitMessage = replacePlaceholder(options.limitMessage, _getPhContent); + } + } + addDisplay((limitMessage ? limitMessage + "\n" : "") + replacePlaceholder(options.displaySrc + "", _getPhContent)); + } + return toBool(res, options); + } + exports._DBG_set_useExt = function(val) { + _DBG_useExt = val; + }; + exports._DBG_set_checkOptions = function(val) { + _DBG_checkOptions = val; + }; + exports._DBG_set_checkMethod = function(val) { + _DBG_checkMethod = val; + }; + exports._DBG_clearHistory = function() { + lastInput = ""; + inputHistory = []; + }; + exports.setDefaultOptions = function(options) { + defaultOptions = margeOptions(true, options); + return margeOptions(true); + }; + exports.question = function(query, options) { + return getValidLine(margeOptions(margeOptions(true, options), { + display: query + })); + }; + exports.prompt = function(options) { + var readOptions = margeOptions(true, options); + readOptions.display = readOptions.prompt; + return getValidLine(readOptions); + }; + exports.keyIn = function(query, options) { + var readOptions = margeOptions(margeOptions(true, options), { + display: query, + keyIn: true, + keepWhitespace: true + }); + readOptions.limitSrc = readOptions.limit.filter(function(value) { + var type = typeof value; + return type === "string" || type === "number"; + }).map(function(text) { + return replacePlaceholder(text + "", getPhCharlist); + }); + readOptions.limit = escapePattern(readOptions.limitSrc.join("")); + ["trueValue", "falseValue"].forEach(function(optionName) { + readOptions[optionName] = readOptions[optionName].reduce(function(comps, comp) { + var type = typeof comp; + if (type === "string" || type === "number") { + comps = comps.concat((comp + "").split("")); + } else { + comps.push(comp); + } + return comps; + }, []); + }); + readOptions.display = replacePlaceholder( + readOptions.display + "", + function(param) { + return getPhContent(param, readOptions); + } + ); + return toBool(_readlineSync(readOptions), readOptions); + }; + exports.questionEMail = function(query, options) { + if (query == null) { + query = "Input e-mail address: "; + } + return exports.question(query, margeOptions({ + hideEchoBack: false, + limit: /^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/, + limitMessage: "Input valid e-mail address, please.", + trueValue: null, + falseValue: null + }, options, { + keepWhitespace: false, + cd: false + })); + }; + exports.questionNewPassword = function(query, options) { + var resCharlist, min, max, readOptions = margeOptions({ + hideEchoBack: true, + mask: "*", + limitMessage: "It can include: $\nAnd the length must be: $", + trueValue: null, + falseValue: null, + caseSensitive: true + }, options, { + history: false, + cd: false, + phContent: function(param) { + return param === "charlist" ? resCharlist.text : param === "length" ? min + "..." + max : null; + } + }), charlist, confirmMessage, unmatchMessage, limit, limitMessage, res1, res2; + options = options || {}; + charlist = replacePlaceholder( + options.charlist ? options.charlist + "" : "$", + getPhCharlist + ); + if (isNaN(min = parseInt(options.min, 10)) || typeof min !== "number") { + min = 12; + } + if (isNaN(max = parseInt(options.max, 10)) || typeof max !== "number") { + max = 24; + } + limit = new RegExp("^[" + escapePattern(charlist) + "]{" + min + "," + max + "}$"); + resCharlist = array2charlist([charlist], readOptions.caseSensitive, true); + resCharlist.text = joinChunks(resCharlist.values, resCharlist.suppressed); + confirmMessage = options.confirmMessage != null ? options.confirmMessage : "Reinput a same one to confirm it: "; + unmatchMessage = options.unmatchMessage != null ? options.unmatchMessage : "It differs from first one. Hit only the Enter key if you want to retry from first one."; + if (query == null) { + query = "Input new password: "; + } + limitMessage = readOptions.limitMessage; + while (!res2) { + readOptions.limit = limit; + readOptions.limitMessage = limitMessage; + res1 = exports.question(query, readOptions); + readOptions.limit = [res1, ""]; + readOptions.limitMessage = unmatchMessage; + res2 = exports.question(confirmMessage, readOptions); + } + return res1; + }; + function _questionNum(query, options, parser) { + var validValue; + function getValidValue(value) { + validValue = parser(value); + return !isNaN(validValue) && typeof validValue === "number"; + } + exports.question(query, margeOptions({ + limitMessage: "Input valid number, please." + }, options, { + limit: getValidValue, + cd: false + })); + return validValue; + } + exports.questionInt = function(query, options) { + return _questionNum(query, options, function(value) { + return parseInt(value, 10); + }); + }; + exports.questionFloat = function(query, options) { + return _questionNum(query, options, parseFloat); + }; + exports.questionPath = function(query, options) { + var validPath, error = "", readOptions = margeOptions({ + hideEchoBack: false, + limitMessage: "$Input valid path, please.$<( Min:)min>$<( Max:)max>", + history: true, + cd: true + }, options, { + keepWhitespace: false, + limit: function(value) { + var exists, stat, res; + value = replaceHomePath(value, true); + error = ""; + function mkdirParents(dirPath) { + dirPath.split(/\/|\\/).reduce(function(parents, dir) { + var path2 = pathUtil.resolve(parents += dir + pathUtil.sep); + if (!fs2.existsSync(path2)) { + fs2.mkdirSync(path2); + } else if (!fs2.statSync(path2).isDirectory()) { + throw new Error("Non directory already exists: " + path2); + } + return parents; + }, ""); + } + try { + exists = fs2.existsSync(value); + validPath = exists ? fs2.realpathSync(value) : pathUtil.resolve(value); + if (!options.hasOwnProperty("exists") && !exists || typeof options.exists === "boolean" && options.exists !== exists) { + error = (exists ? "Already exists" : "No such file or directory") + ": " + validPath; + return false; + } + if (!exists && options.create) { + if (options.isDirectory) { + mkdirParents(validPath); + } else { + mkdirParents(pathUtil.dirname(validPath)); + fs2.closeSync(fs2.openSync(validPath, "w")); + } + validPath = fs2.realpathSync(validPath); + } + if (exists && (options.min || options.max || options.isFile || options.isDirectory)) { + stat = fs2.statSync(validPath); + if (options.isFile && !stat.isFile()) { + error = "Not file: " + validPath; + return false; + } else if (options.isDirectory && !stat.isDirectory()) { + error = "Not directory: " + validPath; + return false; + } else if (options.min && stat.size < +options.min || options.max && stat.size > +options.max) { + error = "Size " + stat.size + " is out of range: " + validPath; + return false; + } + } + if (typeof options.validate === "function" && (res = options.validate(validPath)) !== true) { + if (typeof res === "string") { + error = res; + } + return false; + } + } catch (e) { + error = e + ""; + return false; + } + return true; + }, + phContent: function(param) { + return param === "error" ? error : param !== "min" && param !== "max" ? null : options.hasOwnProperty(param) ? options[param] + "" : ""; + } + }); + options = options || {}; + if (query == null) { + query = 'Input path (you can "cd" and "pwd"): '; + } + exports.question(query, readOptions); + return validPath; + }; + function getClHandler(commandHandler, options) { + var clHandler = {}, hIndex = {}; + if (typeof commandHandler === "object") { + Object.keys(commandHandler).forEach(function(cmd) { + if (typeof commandHandler[cmd] === "function") { + hIndex[options.caseSensitive ? cmd : cmd.toLowerCase()] = commandHandler[cmd]; + } + }); + clHandler.preCheck = function(res) { + var cmdKey; + clHandler.args = parseCl(res); + cmdKey = clHandler.args[0] || ""; + if (!options.caseSensitive) { + cmdKey = cmdKey.toLowerCase(); + } + clHandler.hRes = cmdKey !== "_" && hIndex.hasOwnProperty(cmdKey) ? hIndex[cmdKey].apply(res, clHandler.args.slice(1)) : hIndex.hasOwnProperty("_") ? hIndex._.apply(res, clHandler.args) : null; + return { res, forceNext: false }; + }; + if (!hIndex.hasOwnProperty("_")) { + clHandler.limit = function() { + var cmdKey = clHandler.args[0] || ""; + if (!options.caseSensitive) { + cmdKey = cmdKey.toLowerCase(); + } + return hIndex.hasOwnProperty(cmdKey); + }; + } + } else { + clHandler.preCheck = function(res) { + clHandler.args = parseCl(res); + clHandler.hRes = typeof commandHandler === "function" ? commandHandler.apply(res, clHandler.args) : true; + return { res, forceNext: false }; + }; + } + return clHandler; + } + exports.promptCL = function(commandHandler, options) { + var readOptions = margeOptions({ + hideEchoBack: false, + limitMessage: "Requested command is not available.", + caseSensitive: false, + history: true + }, options), clHandler = getClHandler(commandHandler, readOptions); + readOptions.limit = clHandler.limit; + readOptions.preCheck = clHandler.preCheck; + exports.prompt(readOptions); + return clHandler.args; + }; + exports.promptLoop = function(inputHandler, options) { + var readOptions = margeOptions({ + hideEchoBack: false, + trueValue: null, + falseValue: null, + caseSensitive: false, + history: true + }, options); + while (true) { + if (inputHandler(exports.prompt(readOptions))) { + break; + } + } + return; + }; + exports.promptCLLoop = function(commandHandler, options) { + var readOptions = margeOptions({ + hideEchoBack: false, + limitMessage: "Requested command is not available.", + caseSensitive: false, + history: true + }, options), clHandler = getClHandler(commandHandler, readOptions); + readOptions.limit = clHandler.limit; + readOptions.preCheck = clHandler.preCheck; + while (true) { + exports.prompt(readOptions); + if (clHandler.hRes) { + break; + } + } + return; + }; + exports.promptSimShell = function(options) { + return exports.prompt(margeOptions({ + hideEchoBack: false, + history: true + }, options, { + prompt: function() { + return IS_WIN ? "$>" : (process.env.USER || "") + (process.env.HOSTNAME ? "@" + process.env.HOSTNAME.replace(/\..*$/, "") : "") + ":$$ "; + }() + })); + }; + function _keyInYN(query, options, limit) { + var res; + if (query == null) { + query = "Are you sure? "; + } + if ((!options || options.guide !== false) && (query += "")) { + query = query.replace(/\s*:?\s*$/, "") + " [y/n]: "; + } + res = exports.keyIn(query, margeOptions(options, { + hideEchoBack: false, + limit, + trueValue: "y", + falseValue: "n", + caseSensitive: false + })); + return typeof res === "boolean" ? res : ""; + } + exports.keyInYN = function(query, options) { + return _keyInYN(query, options); + }; + exports.keyInYNStrict = function(query, options) { + return _keyInYN(query, options, "yn"); + }; + exports.keyInPause = function(query, options) { + if (query == null) { + query = "Continue..."; + } + if ((!options || options.guide !== false) && (query += "")) { + query = query.replace(/\s+$/, "") + " (Hit any key)"; + } + exports.keyIn(query, margeOptions({ + limit: null + }, options, { + hideEchoBack: true, + mask: "" + })); + return; + }; + exports.keyInSelect = function(items, query, options) { + var readOptions = margeOptions({ + hideEchoBack: false + }, options, { + trueValue: null, + falseValue: null, + caseSensitive: false, + phContent: function(param) { + return param === "itemsCount" ? items.length + "" : param === "firstItem" ? (items[0] + "").trim() : param === "lastItem" ? (items[items.length - 1] + "").trim() : null; + } + }), keylist = "", key2i = {}, charCode = 49, display = "\n"; + if (!Array.isArray(items) || !items.length || items.length > 35) { + throw "`items` must be Array (max length: 35)."; + } + items.forEach(function(item, i2) { + var key = String.fromCharCode(charCode); + keylist += key; + key2i[key] = i2; + display += "[" + key + "] " + (item + "").trim() + "\n"; + charCode = charCode === 57 ? 97 : charCode + 1; + }); + if (!options || options.cancel !== false) { + keylist += "0"; + key2i["0"] = -1; + display += "[0] " + (options && options.cancel != null && typeof options.cancel !== "boolean" ? (options.cancel + "").trim() : "CANCEL") + "\n"; + } + readOptions.limit = keylist; + display += "\n"; + if (query == null) { + query = "Choose one from list: "; + } + if (query += "") { + if (!options || options.guide !== false) { + query = query.replace(/\s*:?\s*$/, "") + " [$]: "; + } + display += query; + } + return key2i[exports.keyIn(display, readOptions).toLowerCase()]; + }; + exports.getRawInput = function() { + return rawInput; + }; + function _setOption(optionName, args) { + var options; + if (args.length) { + options = {}; + options[optionName] = args[0]; + } + return exports.setDefaultOptions(options)[optionName]; + } + exports.setPrint = function() { + return _setOption("print", arguments); + }; + exports.setPrompt = function() { + return _setOption("prompt", arguments); + }; + exports.setEncoding = function() { + return _setOption("encoding", arguments); + }; + exports.setMask = function() { + return _setOption("mask", arguments); + }; + exports.setBufferSize = function() { + return _setOption("bufferSize", arguments); + }; + } +}); + +// node_modules/tau-prolog/modules/core.js +var require_core = __commonJS({ + "node_modules/tau-prolog/modules/core.js"(exports, module2) { + (function() { + var version = { major: 0, minor: 3, patch: 4, status: "beta" }; + function TauFile(name, type, parent, text) { + text = text === void 0 ? "" : text; + this.name = name; + this.type = type; + this.parent = parent; + this.text = text; + this.created = Date.now() / 1e3; + this.modified = this.created; + } + TauFile.prototype.get = function(length, position) { + if (position === this.text.length) { + return "end_of_stream"; + } else if (position > this.text.length) { + return "end_of_stream"; + } else { + return this.text.substring(position, position + length); + } + }; + TauFile.prototype.eof = function(position) { + return position === this.text.length; + }; + TauFile.prototype.put = function(text, position) { + if (position === "end_of_stream") { + this.text += text; + return true; + } else if (position === "past_end_of_stream") { + return null; + } else { + this.text = this.text.substring(0, position) + text + this.text.substring(position + text.length); + return true; + } + }; + TauFile.prototype.get_byte = function(position) { + if (position === "end_of_stream") + return -1; + var index = Math.floor(position / 2); + if (this.text.length <= index) + return -1; + var code = codePointAt(this.text[Math.floor(position / 2)], 0); + if (position % 2 === 0) + return code & 255; + else + return code / 256 >>> 0; + }; + TauFile.prototype.put_byte = function(byte, position) { + var index = position === "end_of_stream" ? this.text.length : Math.floor(position / 2); + if (this.text.length < index) + return null; + var code = this.text.length === index ? -1 : codePointAt(this.text[Math.floor(position / 2)], 0); + if (position % 2 === 0) { + code = code / 256 >>> 0; + code = (code & 255) << 8 | byte & 255; + } else { + code = code & 255; + code = (byte & 255) << 8 | code & 255; + } + if (this.text.length === index) + this.text += fromCodePoint(code); + else + this.text = this.text.substring(0, index) + fromCodePoint(code) + this.text.substring(index + 1); + return true; + }; + TauFile.prototype.flush = function() { + return true; + }; + TauFile.prototype.close = function() { + this.modified = Date.now() / 1e3; + return true; + }; + TauFile.prototype.size = function() { + return this.text.length; + }; + function TauDirectory(name, parent) { + this.name = name; + this.parent = parent; + this.files = {}; + this.length = 0; + this.created = Date.now() / 1e3; + this.modified = this.created; + } + TauDirectory.prototype.lookup = function(file) { + if (this.files.hasOwnProperty(file)) + return this.files[file]; + return null; + }; + TauDirectory.prototype.push = function(name, file) { + if (!this.files.hasOwnProperty(name)) + this.length++; + this.files[name] = file; + this.modified = Date.now() / 1e3; + }; + TauDirectory.prototype.remove = function(name) { + if (this.files.hasOwnProperty(name)) { + this.length--; + delete this.files[name]; + this.modified = Date.now() / 1e3; + } + }; + TauDirectory.prototype.empty = function() { + return this.length === 0; + }; + TauDirectory.prototype.size = function() { + return 4096; + }; + tau_file_system = { + files: new TauDirectory("/", "/", null), + open: function(path2, type, mode) { + var dirs = path2.replace(/\/$/, "").split("/"); + var dir = tau_file_system.files; + var name = dirs[dirs.length - 1]; + for (var i2 = 1; i2 < dirs.length - 1; i2++) { + dir = dir.lookup(dirs[i2]); + if (!pl.type.is_directory(dir)) + return null; + } + var file = dir.lookup(name); + if (file === null) { + if (mode === "read") + return null; + file = new TauFile(name, type, dir); + dir.push(name, file); + } else if (!pl.type.is_file(file)) { + return null; + } + if (mode === "write") + file.text = ""; + return file; + }, + get: function(path2) { + var dirs = path2.replace(/\/$/, "").split("/"); + var file = tau_file_system.files; + for (var i2 = 1; i2 < dirs.length; i2++) + if (pl.type.is_directory(file)) + file = file.lookup(dirs[i2]); + else + return null; + return file; + } + }; + tau_user_input = { + buffer: "", + get: function(length, _) { + var text; + while (tau_user_input.buffer.length < length) { + text = window.prompt(); + if (text.length === 0) + return "end_of_stream"; + if (text) { + tau_user_input.buffer += text; + } + } + text = tau_user_input.buffer.substr(0, length); + tau_user_input.buffer = tau_user_input.buffer.substr(length); + return text; + }, + eof: function(_) { + return false; + } + }; + tau_user_output = { + put: function(text, _) { + console.log(text); + return true; + }, + flush: function() { + return true; + } + }; + tau_user_error = { + put: function(text, _) { + (console.error || console.log)(text); + return true; + }, + flush: function() { + return true; + } + }; + nodejs_file_system = { + open: function(path2, type, mode) { + var fd, fs2 = require("fs"); + if (mode === "read" && !fs2.existsSync(path2)) + return null; + try { + fd = fs2.openSync(path2, mode[0]); + } catch (ex) { + return false; + } + return { + get: function(length, position) { + var buffer = new Buffer(length); + fs2.readSync(fd, buffer, 0, length, position); + var end_of_file = true; + var text = buffer.toString(); + for (var i2 = 0; i2 < length && end_of_file; i2++) + end_of_file = text[i2] === "\0"; + return end_of_file ? "end_of_stream" : buffer.toString(); + }, + eof: function(position) { + var stats = fs2.statSync(path2); + return position === stats["size"]; + }, + put: function(text, position) { + var buffer = Buffer.from(text); + if (position === "end_of_stream") + fs2.writeSync(fd, buffer); + else if (position === "past_end_of_stream") + return null; + else + fs2.writeSync(fd, buffer, 0, buffer.length, position); + return true; + }, + get_byte: function(position) { + try { + var buffer = Buffer.alloc(1); + var bytesRead = fs2.readSync(fd, buffer, 0, 1, position); + var end_of_file = bytesRead < 1; + return end_of_file ? "end_of_stream" : buffer.readUInt8(0); + } catch (ex) { + return "end_of_stream"; + } + }, + put_byte: function(byte, position) { + var buffer = Buffer.from([byte]); + if (position === "end_of_stream") + fs2.writeSync(fd, buffer); + else if (position === "past_end_of_stream") + return null; + else + fs2.writeSync(fd, buffer, 0, buffer.length, position); + return true; + }, + flush: function() { + return true; + }, + close: function() { + fs2.closeSync(fd); + return true; + } + }; + } + }; + nodejs_user_input = { + buffer: "", + get: function(length, _) { + var text; + var readlineSync = require_readline_sync(); + while (nodejs_user_input.buffer.length < length) + nodejs_user_input.buffer += readlineSync.question("", { keepWhitespace: true }) + "\n"; + text = nodejs_user_input.buffer.substr(0, length); + nodejs_user_input.buffer = nodejs_user_input.buffer.substr(length); + return text; + }, + eof: function(length) { + return false; + } + }; + nodejs_user_output = { + put: function(text, _) { + process.stdout.write(text); + return true; + }, + flush: function() { + return true; + } + }; + nodejs_user_error = { + put: function(text, _) { + process.stderr.write(text); + return true; + }, + flush: function() { + return true; + } + }; + var indexOf; + if (!Array.prototype.indexOf) { + indexOf = function(array, elem) { + var len = array.length; + for (var i2 = 0; i2 < len; i2++) { + if (elem === array[i2]) + return i2; + } + return -1; + }; + } else { + indexOf = function(array, elem) { + return array.indexOf(elem); + }; + } + var reduce = function(array, fn) { + if (array.length === 0) + return void 0; + var elem = array[0]; + var len = array.length; + for (var i2 = 1; i2 < len; i2++) { + elem = fn(elem, array[i2]); + } + return elem; + }; + var map; + if (!Array.prototype.map) { + map = function(array, fn) { + var a = []; + var len = array.length; + for (var i2 = 0; i2 < len; i2++) { + a.push(fn(array[i2])); + } + return a; + }; + } else { + map = function(array, fn) { + return array.map(fn); + }; + } + var filter; + if (!Array.prototype.filter) { + filter = function(array, fn) { + var a = []; + var len = array.length; + for (var i2 = 0; i2 < len; i2++) { + if (fn(array[i2])) + a.push(array[i2]); + } + return a; + }; + } else { + filter = function(array, fn) { + return array.filter(fn); + }; + } + var codePointAt; + if (!String.prototype.codePointAt) { + codePointAt = function(str, i2) { + return str.charCodeAt(i2); + }; + } else { + codePointAt = function(str, i2) { + return str.codePointAt(i2); + }; + } + var fromCodePoint; + if (!String.fromCodePoint) { + fromCodePoint = function() { + return String.fromCharCode.apply(null, arguments); + }; + } else { + fromCodePoint = function() { + return String.fromCodePoint.apply(null, arguments); + }; + } + var stringLength; + var regexAstralSymbols = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g; + if (Array.from) + stringLength = function(str) { + return Array.from(str).length; + }; + else + stringLength = function(str) { + return str.replace(regexAstralSymbols, "_").length; + }; + var ERROR = 0; + var SUCCESS = 1; + var regex_escape = /(\\a)|(\\b)|(\\d)|(\\e)|(\\f)|(\\n)|(\\r)|(\\s)|(\\t)|(\\v)|\\x([0-9a-fA-F]+)\\|\\([0-7]+)\\|(\\\\)|(\\')|('')|(\\")|(\\`)|(\\.)|(.)/g; + var escape_map = { "\\a": 7, "\\b": 8, "\\d": 127, "\\e": 27, "\\f": 12, "\\n": 10, "\\r": 13, "\\s": 32, "\\t": 9, "\\v": 11 }; + function escape(str) { + var stack = []; + var _error = false; + str.replace(regex_escape, function(match, a, b, d, e, f, n, r, s, t, v, hex, octal, back, single, dsingle, double, backquote, error, char) { + switch (true) { + case hex !== void 0: + stack.push(parseInt(hex, 16)); + return ""; + case octal !== void 0: + stack.push(parseInt(octal, 8)); + return ""; + case back !== void 0: + case single !== void 0: + case dsingle !== void 0: + case double !== void 0: + case backquote !== void 0: + stack.push(codePointAt(match.substr(1), 0)); + return ""; + case char !== void 0: + stack.push(codePointAt(char, 0)); + return ""; + case error !== void 0: + _error = true; + default: + stack.push(escape_map[match]); + return ""; + } + }); + if (_error) + return null; + return stack; + } + function escapeAtom(str, quote) { + var atom = ""; + if (str === "\\") + return null; + if (str.length < 2) + return str; + try { + str = str.replace(/((?:\\\\)+)|\\([0-7]+)\\/g, function(match, g1, g2) { + return g1 || fromCodePoint(parseInt(g2, 8)); + }); + str = str.replace(/((?:\\\\)+)|\\x([0-9a-fA-F]+)\\/g, function(match, g1, g2) { + return g1 || fromCodePoint(parseInt(g2, 16)); + }); + str = str.replace(/((?:\\\\)+)|\\u([0-9a-fA-F]{4})/g, function(match, g1, g2) { + return g1 || fromCodePoint(parseInt(g2, 16)); + }); + } catch (error) { + return null; + } + for (var i2 = 0; i2 < str.length; i2++) { + var a = str.charAt(i2); + var b = str.charAt(i2 + 1); + if (a === quote && b === quote) { + i2++; + atom += quote; + } else if (a === "\\") { + if (["a", "b", "f", "n", "r", "t", "v", "'", '"', "\\", "a", "\b", "\f", "\n", "\r", " ", "\v"].indexOf(b) !== -1) { + i2 += 1; + switch (b) { + case "a": + atom += "a"; + break; + case "b": + atom += "\b"; + break; + case "f": + atom += "\f"; + break; + case "n": + atom += "\n"; + break; + case "r": + atom += "\r"; + break; + case "t": + atom += " "; + break; + case "v": + atom += "\v"; + break; + case "'": + atom += "'"; + break; + case '"': + atom += '"'; + break; + case "\\": + atom += "\\"; + break; + } + } else { + return null; + } + } else { + atom += a; + } + } + return atom; + } + function redoEscape(str) { + var atom = ""; + for (var i2 = 0; i2 < str.length; i2++) { + switch (str.charAt(i2)) { + case "'": + atom += "\\'"; + break; + case "\\": + atom += "\\\\"; + break; + case "\b": + atom += "\\b"; + break; + case "\f": + atom += "\\f"; + break; + case "\n": + atom += "\\n"; + break; + case "\r": + atom += "\\r"; + break; + case " ": + atom += "\\t"; + break; + case "\v": + atom += "\\v"; + break; + default: + atom += str.charAt(i2); + break; + } + } + return atom; + } + function convertNum(num) { + var n = num.substr(2); + switch (num.substr(0, 2).toLowerCase()) { + case "0x": + return parseInt(n, 16); + case "0b": + return parseInt(n, 2); + case "0o": + return parseInt(n, 8); + case "0'": + return escape(n)[0]; + default: + return parseFloat(num); + } + } + function is_graphic_token(string) { + return /^[#\$\&\*\+\-\.\/\:\<\=\>\?\@\^\~\\]+/.test(string); + } + var rules = { + whitespace: /^\s*(?:(?:%.*)|(?:\/\*(?:\n|\r|.)*?(?:\*\/|$))|(?:\s+))\s*/, + variable: /^(?:[A-Z_][a-zA-Z0-9_]*)/, + atom: /^(\!|,|;|[a-z][0-9a-zA-Z_]*|[#\$\&\*\+\-\.\/\:\<\=\>\?\@\^\~\\]+|'(?:(?:'')|(?:\\\\)|(?:\\')|[^'])*')/, + number: /^(?:0o[0-7]+|0x[0-9a-fA-F]+|0b[01]+|0'(?:''|\\[abdefnrstv\\'"`]|\\x?\d+\\|[^\\])|\d+(?:\.\d+(?:[eE][+-]?\d+)?)?)/, + string: /^(?:"([^"]|""|\\")*"|`([^`]|``|\\`)*`)/, + l_brace: /^(?:\[)/, + r_brace: /^(?:\])/, + l_bracket: /^(?:\{)/, + r_bracket: /^(?:\})/, + bar: /^(?:\|)/, + l_paren: /^(?:\()/, + r_paren: /^(?:\))/ + }; + function replace(thread, text) { + if (thread.get_flag("char_conversion").id === "on") { + return text.replace(/./g, function(char) { + return thread.get_char_conversion(char); + }); + } + return text; + } + function Tokenizer(thread) { + this.thread = thread; + this.text = ""; + this.tokens = []; + } + Tokenizer.prototype.set_last_tokens = function(tokens) { + return this.tokens = tokens; + }; + Tokenizer.prototype.new_text = function(text) { + this.text = text; + this.tokens = []; + }; + Tokenizer.prototype.get_tokens = function(init) { + var text; + var len = 0; + var line = 0; + var start = 0; + var tokens = []; + var last_is_blank; + if (init) { + var token = this.tokens[init - 1]; + len = token.len; + text = replace(this.thread, this.text.substr(token.len)); + line = token.line; + start = token.start; + } else + text = this.text; + if (/^\s*$/.test(text)) + return null; + while (text !== "") { + var matches = []; + last_is_blank = false; + if (/^\n/.exec(text) !== null) { + line++; + start = 0; + len++; + text = text.replace(/\n/, ""); + last_is_blank = true; + continue; + } + for (var rule in rules) { + if (rules.hasOwnProperty(rule)) { + var matchs = rules[rule].exec(text); + if (matchs) { + matches.push({ + value: matchs[0], + name: rule, + matches: matchs + }); + } + } + } + if (!matches.length) + return this.set_last_tokens([{ value: text, matches: [], name: "lexical", line, start }]); + var token = reduce(matches, function(a, b) { + return a.value.length >= b.value.length ? a : b; + }); + token.start = start; + token.line = line; + text = text.replace(token.value, ""); + start += token.value.length; + len += token.value.length; + var nl = (token.value.match(/\n/g) || []).length; + line += nl; + if (nl > 0) + start = token.value.length - token.value.lastIndexOf("\n") - 1; + token.line_count = line; + token.line_position = start; + switch (token.name) { + case "atom": + token.raw = token.value; + if (token.value.charAt(0) === "'") { + token.value = escapeAtom(token.value.substring(1, token.value.length - 1), "'"); + if (token.value === null) { + token.name = "lexical"; + token.value = token.raw; + token.error = "unknown_escape_sequence"; + } + } + break; + case "number": + var substr = token.value.substring(0, 2); + token.raw = token.value; + token.float = substr !== "0x" && substr !== "0'" && token.value.match(/[.eE]/) !== null; + token.value = convertNum(token.value); + token.blank = last_is_blank; + if (!token.float && pl.flag.bounded.value.indicator === "true/0" && token.value > pl.flag.max_integer.value.value) { + token.name = "lexical"; + token.value = token.raw; + token.error = "int_overflow"; + } + break; + case "string": + var del = token.value.charAt(0); + token.raw = token.value; + token.value = escapeAtom(token.value.substring(1, token.value.length - 1), del); + if (token.value === null) { + token.name = "lexical"; + token.value = token.raw; + token.error = "unknown_escape_sequence"; + } + break; + case "whitespace": + var last = tokens[tokens.length - 1]; + if (last) + last.space = true; + last_is_blank = true; + continue; + case "r_bracket": + if (tokens.length > 0 && tokens[tokens.length - 1].name === "l_bracket") { + token = tokens.pop(); + token.name = "atom"; + token.value = "{}"; + token.raw = "{}"; + token.space = false; + } + break; + case "r_brace": + if (tokens.length > 0 && tokens[tokens.length - 1].name === "l_brace") { + token = tokens.pop(); + token.name = "atom"; + token.value = "[]"; + token.raw = "[]"; + token.space = false; + } + break; + } + token.len = len; + tokens.push(token); + last_is_blank = false; + } + var t = this.set_last_tokens(tokens); + return t.length === 0 ? null : t; + }; + function parseExpr(thread, tokens, start, priority, toplevel) { + if (!tokens[start]) + return { type: ERROR, value: pl.error.syntax(tokens[start - 1], "expression expected", true) }; + var error; + if (priority === "0") { + var token = tokens[start]; + switch (token.name) { + case "number": + return { type: SUCCESS, len: start + 1, value: new pl.type.Num(token.value, token.float) }; + case "variable": + return { type: SUCCESS, len: start + 1, value: new pl.type.Var(token.value) }; + case "string": + var str; + switch (thread.get_flag("double_quotes").id) { + case "atom": + ; + str = new Term(token.value, []); + break; + case "codes": + str = new Term("[]", []); + for (var i2 = token.value.length - 1; i2 >= 0; i2--) + str = new Term(".", [new pl.type.Num(codePointAt(token.value, i2), false), str]); + break; + case "chars": + str = new Term("[]", []); + for (var i2 = token.value.length - 1; i2 >= 0; i2--) + str = new Term(".", [new pl.type.Term(token.value.charAt(i2), []), str]); + break; + } + return { type: SUCCESS, len: start + 1, value: str }; + case "l_paren": + var expr = parseExpr(thread, tokens, start + 1, thread.__get_max_priority(), true); + if (expr.type !== SUCCESS) + return expr; + if (tokens[expr.len] && tokens[expr.len].name === "r_paren") { + expr.len++; + return expr; + } + return { type: ERROR, derived: true, value: pl.error.syntax(tokens[expr.len] ? tokens[expr.len] : tokens[expr.len - 1], ") or operator expected", !tokens[expr.len]) }; + case "l_bracket": + var expr = parseExpr(thread, tokens, start + 1, thread.__get_max_priority(), true); + if (expr.type !== SUCCESS) + return expr; + if (tokens[expr.len] && tokens[expr.len].name === "r_bracket") { + expr.len++; + expr.value = new Term("{}", [expr.value]); + return expr; + } + return { type: ERROR, derived: true, value: pl.error.syntax(tokens[expr.len] ? tokens[expr.len] : tokens[expr.len - 1], "} or operator expected", !tokens[expr.len]) }; + } + var result = parseTerm(thread, tokens, start, toplevel); + if (result.type === SUCCESS || result.derived) + return result; + result = parseList(thread, tokens, start); + if (result.type === SUCCESS || result.derived) + return result; + return { type: ERROR, derived: false, value: pl.error.syntax(tokens[start], token.error || "unexpected token") }; + } + var max_priority = thread.__get_max_priority(); + var next_priority = thread.__get_next_priority(priority); + var aux_start = start; + if (tokens[start].name === "atom" && tokens[start + 1] && (tokens[start].space || tokens[start + 1].name !== "l_paren")) { + var token = tokens[start++]; + var classes = thread.__lookup_operator_classes(priority, token.value); + if (classes && classes.indexOf("fy") > -1) { + var expr = parseExpr(thread, tokens, start, priority, toplevel); + if (expr.type !== ERROR) { + if (token.value === "-" && !token.space && pl.type.is_number(expr.value)) { + return { + value: new pl.type.Num(-expr.value.value, expr.value.is_float), + len: expr.len, + type: SUCCESS + }; + } else { + return { + value: new pl.type.Term(token.value, [expr.value]), + len: expr.len, + type: SUCCESS + }; + } + } else { + error = expr; + } + } else if (classes && classes.indexOf("fx") > -1) { + var expr = parseExpr(thread, tokens, start, next_priority, toplevel); + if (expr.type !== ERROR) { + return { + value: new pl.type.Term(token.value, [expr.value]), + len: expr.len, + type: SUCCESS + }; + } else { + error = expr; + } + } + } + start = aux_start; + var expr = parseExpr(thread, tokens, start, next_priority, toplevel); + if (expr.type === SUCCESS) { + start = expr.len; + var token = tokens[start]; + if (tokens[start] && (tokens[start].name === "atom" && thread.__lookup_operator_classes(priority, token.value) || tokens[start].name === "bar" && thread.__lookup_operator_classes(priority, "|"))) { + var next_priority_lt = next_priority; + var next_priority_eq = priority; + var classes = thread.__lookup_operator_classes(priority, token.value); + if (classes.indexOf("xf") > -1) { + return { + value: new pl.type.Term(token.value, [expr.value]), + len: ++expr.len, + type: SUCCESS + }; + } else if (classes.indexOf("xfx") > -1) { + var expr2 = parseExpr(thread, tokens, start + 1, next_priority_lt, toplevel); + if (expr2.type === SUCCESS) { + return { + value: new pl.type.Term(token.value, [expr.value, expr2.value]), + len: expr2.len, + type: SUCCESS + }; + } else { + expr2.derived = true; + return expr2; + } + } else if (classes.indexOf("xfy") > -1) { + var expr2 = parseExpr(thread, tokens, start + 1, next_priority_eq, toplevel); + if (expr2.type === SUCCESS) { + return { + value: new pl.type.Term(token.value, [expr.value, expr2.value]), + len: expr2.len, + type: SUCCESS + }; + } else { + expr2.derived = true; + return expr2; + } + } else if (expr.type !== ERROR) { + while (true) { + start = expr.len; + var token = tokens[start]; + if (token && token.name === "atom" && thread.__lookup_operator_classes(priority, token.value)) { + var classes = thread.__lookup_operator_classes(priority, token.value); + if (classes.indexOf("yf") > -1) { + expr = { + value: new pl.type.Term(token.value, [expr.value]), + len: ++start, + type: SUCCESS + }; + } else if (classes.indexOf("yfx") > -1) { + var expr2 = parseExpr(thread, tokens, ++start, next_priority_lt, toplevel); + if (expr2.type === ERROR) { + expr2.derived = true; + return expr2; + } + start = expr2.len; + expr = { + value: new pl.type.Term(token.value, [expr.value, expr2.value]), + len: start, + type: SUCCESS + }; + } else { + break; + } + } else { + break; + } + } + } + } else { + error = { type: ERROR, value: pl.error.syntax(tokens[expr.len - 1], "operator expected") }; + } + return expr; + } + return expr; + } + function parseTerm(thread, tokens, start, toplevel) { + if (!tokens[start] || tokens[start].name === "atom" && tokens[start].raw === "." && !toplevel && (tokens[start].space || !tokens[start + 1] || tokens[start + 1].name !== "l_paren")) + return { type: ERROR, derived: false, value: pl.error.syntax(tokens[start - 1], "unfounded token") }; + var atom = tokens[start]; + var exprs = []; + if (tokens[start].name === "atom" && tokens[start].raw !== ",") { + start++; + if (tokens[start - 1].space) + return { type: SUCCESS, len: start, value: new pl.type.Term(atom.value, exprs) }; + if (tokens[start] && tokens[start].name === "l_paren") { + if (tokens[start + 1] && tokens[start + 1].name === "r_paren") + return { type: ERROR, derived: true, value: pl.error.syntax(tokens[start + 1], "argument expected") }; + var expr = parseExpr(thread, tokens, ++start, "999", true); + if (expr.type === ERROR) { + if (expr.derived) + return expr; + else + return { type: ERROR, derived: true, value: pl.error.syntax(tokens[start] ? tokens[start] : tokens[start - 1], "argument expected", !tokens[start]) }; + } + exprs.push(expr.value); + start = expr.len; + while (tokens[start] && tokens[start].name === "atom" && tokens[start].value === ",") { + expr = parseExpr(thread, tokens, start + 1, "999", true); + if (expr.type === ERROR) { + if (expr.derived) + return expr; + else + return { type: ERROR, derived: true, value: pl.error.syntax(tokens[start + 1] ? tokens[start + 1] : tokens[start], "argument expected", !tokens[start + 1]) }; + } + exprs.push(expr.value); + start = expr.len; + } + if (tokens[start] && tokens[start].name === "r_paren") + start++; + else + return { type: ERROR, derived: true, value: pl.error.syntax(tokens[start] ? tokens[start] : tokens[start - 1], ", or ) expected", !tokens[start]) }; + } + return { type: SUCCESS, len: start, value: new pl.type.Term(atom.value, exprs) }; + } + return { type: ERROR, derived: false, value: pl.error.syntax(tokens[start], "term expected") }; + } + function parseList(thread, tokens, start) { + if (!tokens[start]) + return { type: ERROR, derived: false, value: pl.error.syntax(tokens[start - 1], "[ expected") }; + if (tokens[start] && tokens[start].name === "l_brace") { + var expr = parseExpr(thread, tokens, ++start, "999", true); + var exprs = [expr.value]; + var cons = void 0; + if (expr.type === ERROR) { + if (tokens[start] && tokens[start].name === "r_brace") { + return { type: SUCCESS, len: start + 1, value: new pl.type.Term("[]", []) }; + } + return { type: ERROR, derived: true, value: pl.error.syntax(tokens[start], "] expected") }; + } + start = expr.len; + while (tokens[start] && tokens[start].name === "atom" && tokens[start].value === ",") { + expr = parseExpr(thread, tokens, start + 1, "999", true); + if (expr.type === ERROR) { + if (expr.derived) + return expr; + else + return { type: ERROR, derived: true, value: pl.error.syntax(tokens[start + 1] ? tokens[start + 1] : tokens[start], "argument expected", !tokens[start + 1]) }; + } + exprs.push(expr.value); + start = expr.len; + } + var bar = false; + if (tokens[start] && tokens[start].name === "bar") { + bar = true; + expr = parseExpr(thread, tokens, start + 1, "999", true); + if (expr.type === ERROR) { + if (expr.derived) + return expr; + else + return { type: ERROR, derived: true, value: pl.error.syntax(tokens[start + 1] ? tokens[start + 1] : tokens[start], "argument expected", !tokens[start + 1]) }; + } + cons = expr.value; + start = expr.len; + } + if (tokens[start] && tokens[start].name === "r_brace") + return { type: SUCCESS, len: start + 1, value: arrayToList(exprs, cons) }; + else + return { type: ERROR, derived: true, value: pl.error.syntax(tokens[start] ? tokens[start] : tokens[start - 1], bar ? "] expected" : ", or | or ] expected", !tokens[start]) }; + } + return { type: ERROR, derived: false, value: pl.error.syntax(tokens[start], "list expected") }; + } + function parseRule(thread, tokens, start) { + var line = tokens[start].line; + var expr = parseExpr(thread, tokens, start, thread.__get_max_priority(), false); + var rule = null; + var obj; + if (expr.type !== ERROR) { + start = expr.len; + if (tokens[start] && tokens[start].name === "atom" && tokens[start].raw === ".") { + start++; + if (pl.type.is_term(expr.value)) { + if (expr.value.indicator === ":-/2") { + rule = new pl.type.Rule(expr.value.args[0], body_conversion(expr.value.args[1])); + obj = { + value: rule, + len: start, + type: SUCCESS + }; + } else if (expr.value.indicator === "-->/2") { + rule = new pl.type.Rule(expr.value.args[0], body_conversion(expr.value.args[1])); + rule = rule_to_dcg(rule, thread); + rule.body = body_conversion(rule.body); + if (!pl.type.is_rule(rule)) + return { + value: rule, + len: start, + type: ERROR + }; + obj = { + value: rule, + len: start, + type: pl.type.is_rule(rule) ? SUCCESS : ERROR + }; + } else { + rule = new pl.type.Rule(expr.value, null); + obj = { + value: rule, + len: start, + type: SUCCESS + }; + } + if (rule) { + var singleton = rule.singleton_variables(); + if (singleton.length > 0) + thread.throw_warning(pl.warning.singleton(singleton, rule.head.indicator, line)); + } + return obj; + } else { + return { type: ERROR, value: pl.error.syntax(tokens[start], "callable expected") }; + } + } else { + return { type: ERROR, value: pl.error.syntax(tokens[start] ? tokens[start] : tokens[start - 1], ". or operator expected") }; + } + } + return expr; + } + function parseProgram(thread, string, options) { + var opts = {}; + options = options ? options : {}; + opts.success = options.success ? options.success : function() { + }; + opts.error = options.error ? options.error : function() { + }; + opts.from = options.from ? options.from : "$tau-js"; + opts.reconsult = options.reconsult !== void 0 ? options.reconsult : true; + opts.reconsulted = options.reconsulted === void 0 ? {} : options.reconsulted; + opts.context_module = options.context_module === void 0 ? "user" : options.context_module; + opts.initialization = options.initialization === void 0 ? [] : options.initialization; + opts.current_token = options.current_token === void 0 ? 0 : options.current_token; + opts.tokenizer = options.tokenizer === void 0 ? null : options.tokenizer; + opts.tokens = options.tokens === void 0 ? null : options.tokens; + opts.string = string; + opts.term_expansion = false; + var reconsulted = opts.reconsulted; + var tokenizer = opts.tokenizer; + var tokens = opts.tokens; + if (tokenizer === null) { + tokenizer = new Tokenizer(thread); + tokenizer.new_text(string); + opts.tokenizer = tokenizer; + tokens = tokenizer.get_tokens(0); + opts.tokens = tokens; + } + var n = opts.current_token; + while (tokens !== null && tokens[n]) { + var expr = parseRule(thread, tokens, n); + opts.current_token = expr.len; + if (expr.type === ERROR) { + if (opts.error !== void 0) + opts.error(new Term("throw", [expr.value])); + return; + } else { + var context_module = opts.context_module; + var term_expansion = thread.session.modules[context_module].rules["term_expansion/2"]; + if (term_expansion && term_expansion.length > 0) { + opts.term_expansion = true; + var n_thread = new Thread(thread.session); + var term = expr.value.body ? new Term(":-", [expr.value.head, expr.value.body]) : expr.value.head; + thread.session.renamed_variables = {}; + term = term.rename(thread.session); + n_thread.query(context_module + ":term_expansion(" + term.toString({ quoted: true }) + ", X)."); + n_thread.answer(function(thread2, opts2, reconsulted2, expr2) { + return function(answer) { + if (answer && !pl.type.is_error(answer) && pl.type.is_term(answer.links["X"])) { + var term2 = answer.links["X"]; + var rule = term2.indicator === ":-/2" ? new Rule(term2.args[0], term2.args[1]) : new Rule(term2, null); + parseProgramExpansion(thread2, opts2, reconsulted2, { value: rule, len: expr2.len, type: expr2.type }); + } else { + parseProgramExpansion(thread2, opts2, reconsulted2, expr2); + } + }; + }(thread, opts, reconsulted, expr)); + return; + } else { + opts.term_expansion = false; + var async = parseProgramExpansion(thread, opts, reconsulted, expr); + if (async) + return; + n = expr.len; + } + } + } + var callback = opts.success; + var nthread = new Thread(thread.session); + for (var i2 = opts.initialization.length - 1; i2 > 0; i2--) { + var next_callback = function(init, callback2) { + return function(answer) { + if (answer === null) { + nthread.answer(); + } else if (pl.type.is_error(answer)) { + opts.error(answer); + } else { + nthread.add_goal(init); + nthread.answer(callback2); + } + }; + }(opts.initialization[i2], callback); + callback = next_callback; + } + if (opts.initialization.length > 0) { + nthread.add_goal(opts.initialization[0]); + nthread.answer(callback); + } else { + callback(); + } + } + function parseGoalExpansion(thread, options, expr) { + var n_thread = new Thread(thread.session); + n_thread.__goal_expansion = true; + var varterm = thread.next_free_variable(); + var varhead = thread.next_free_variable(); + var goal = varhead + " = " + expr.value.head + ", goal_expansion(" + expr.value.body.toString({ + quoted: true + }) + ", " + varterm.toString({ + quoted: true + }) + ")."; + n_thread.query(goal); + n_thread.answer(function(answer) { + if (answer && !pl.type.is_error(answer) && answer.links[varterm]) { + expr.value.head = answer.links[varhead]; + expr.value.body = body_conversion(answer.links[varterm]); + parseGoalExpansion(thread, options, expr); + } else { + thread.add_rule(expr.value, options); + parseProgram(thread, options.string, options); + } + }); + } + function parseQueryExpansion(thread, term, options) { + var n_thread = new Thread(thread.session); + n_thread.__goal_expansion = true; + var varterm = thread.next_free_variable(); + var goal = "goal_expansion(" + term.toString({ + quoted: true + }) + ", " + varterm.toString({ + quoted: true + }) + ")."; + n_thread.query(goal); + var variables = n_thread.head_point().substitution.domain(); + n_thread.answer(function(answer) { + if (answer && !pl.type.is_error(answer) && answer.links[varterm]) { + for (var i2 = 0; i2 < variables.length; i2++) { + if (variables[i2] !== varterm.id && answer.links[variables[i2]]) { + var subs = new Substitution(); + subs.links[answer.links[variables[i2]]] = variables[i2]; + answer.links[varterm] = answer.links[varterm].apply(subs); + } + } + parseQueryExpansion(thread, body_conversion(answer.links[varterm]), options); + } else { + thread.add_goal(term); + options.success(term); + parseQuery(thread, options.string, options); + } + }); + } + function parseProgramExpansion(thread, options, reconsulted, expr) { + var async = options.term_expansion === true; + if (expr.value.body === null && expr.value.head.indicator === "?-/1") { + async = true; + var n_thread = new Thread(thread.session); + n_thread.add_goal(expr.value.head.args[0]); + n_thread.answer(function(answer) { + if (pl.type.is_error(answer)) { + thread.throw_warning(answer.args[0]); + } else if (answer === false || answer === null) { + thread.throw_warning(pl.warning.failed_goal(expr.value.head.args[0], expr.len)); + } + parseProgram(thread, options.string, options); + }); + } else if (expr.value.body === null && expr.value.head.indicator === ":-/1") { + var result = thread.run_directive(expr.value.head.args[0], options); + async = async || result === true; + if (async) + parseProgram(thread, options.string, options); + } else { + var context_module = options.context_module; + var indicator2 = expr.value.head.indicator; + if (expr.value.head.indicator === ":/2") { + context_module = expr.value.head.args[0].id; + indicator2 = expr.value.head.args[1].indicator; + } + if (!reconsulted.hasOwnProperty(context_module)) + reconsulted[context_module] = {}; + if (options.reconsult !== false && reconsulted[context_module][indicator2] !== true && !thread.is_multifile_predicate(indicator2)) { + var get_module = thread.session.modules[context_module]; + if (context_module !== "system" && get_module && get_module.rules[indicator2]) { + get_module.rules[indicator2] = filter(get_module.rules[indicator2], function(rule) { + return rule.dynamic; + }); + get_module.update_indices_predicate(indicator2); + } + reconsulted[context_module][indicator2] = true; + } + var goal_expansion = thread.session.modules.user.rules["goal_expansion/2"]; + if (expr.value.body !== null && goal_expansion && goal_expansion.length > 0) { + async = true; + thread.session.renamed_variables = {}; + var origin = { + head: function() { + return expr.value.head; + }, + term: function() { + return expr.value.body; + }, + set: function(h, p) { + expr.value.head = h; + expr.value.body = p; + } + }; + parseGoalExpansion(thread, options, expr, body_conversion(expr.value.body), origin.set, origin); + } else { + thread.add_rule(expr.value, options); + if (async) + parseProgram(thread, options.string, options); + } + } + return async; + } + function parseQuery(thread, string, options) { + var opts = {}; + var callback = typeof options === "function" ? options : function() { + }; + options = options === void 0 || typeof options === "function" ? {} : options; + opts.success = options.success === void 0 ? callback : options.success; + opts.error = options.error === void 0 ? callback : options.error; + opts.tokenizer = options.tokenizer === void 0 ? null : options.tokenizer; + opts.current_token = options.current_token === void 0 ? 0 : options.current_token; + opts.string = string; + var tokenizer = opts.tokenizer; + var n = opts.current_token; + if (tokenizer === null) { + tokenizer = new Tokenizer(thread); + opts.tokenizer = tokenizer; + tokenizer.new_text(string); + } + do { + var tokens = tokenizer.get_tokens(n); + if (tokens === null) + break; + var expr = parseExpr(thread, tokens, 0, thread.__get_max_priority(), false); + if (expr.type !== ERROR) { + var expr_position = expr.len; + n = expr.len + 1; + opts.current_token = n; + if (tokens[expr_position] && tokens[expr_position].name === "atom" && tokens[expr_position].raw === ".") { + expr.value = body_conversion(expr.value); + var goal_expansion = thread.session.modules.user.rules["goal_expansion/2"]; + if (!thread.__goal_expansion && goal_expansion && goal_expansion.length > 0) { + parseQueryExpansion(thread, expr.value, opts); + return; + } else { + thread.add_goal(expr.value); + opts.success(expr.value); + } + } else { + var token = tokens[expr_position]; + opts.error( + new Term("throw", [ + pl.error.syntax( + token ? token : tokens[expr_position - 1], + token && token.error ? token.error : ". or operator expected", + !token + ) + ]) + ); + return; + } + } else { + opts.error(new Term("throw", [expr.value])); + return; + } + } while (true); + } + function rule_to_dcg(rule, thread) { + thread.session.renamed_variables = {}; + rule = rule.rename(thread); + var begin = thread.next_free_variable(); + var dcg = body_to_dcg(rule.body, begin, thread); + if (dcg.error) + return dcg.value; + rule.body = dcg.value; + if (rule.head.indicator === ",/2") { + var terminals = rule.head.args[1]; + rule.head = rule.head.args[0]; + var last = thread.next_free_variable(); + var pointer = terminals; + if (!pl.type.is_list(pointer)) { + return pl.error.type("list", pointer, "DCG/0"); + } + if (pointer.indicator === "[]/0") { + terminals = dcg.variable; + } else { + while (pointer.indicator === "./2" && pl.type.is_list(pointer) && pointer.args[1].indicator !== "[]/0") { + pointer = pointer.args[1]; + } + if (pl.type.is_variable(pointer)) + return pl.error.instantiation("DCG/0"); + else if (!pl.type.is_list(pointer)) + return pl.error.type("list", terminals, "DCG/0"); + pointer.args[1] = dcg.variable; + } + rule.body = new Term(",", [rule.body, new Term("=", [last, terminals])]); + rule.head = new Term(rule.head.id, rule.head.args.concat([begin, last])); + } else { + var first_assign = rule.body; + if (pl.type.is_term(first_assign) && first_assign.indicator === ",/2") + first_assign = first_assign.args[0]; + if (pl.type.is_term(first_assign) && first_assign.indicator === "=/2" && pl.type.is_variable(first_assign.args[0]) && first_assign.args[0] === begin) { + begin = first_assign.args[1]; + rule.body = rule.body.replace(null); + } + if (rule.head.indicator === ":/2") + rule.head = new Term(":", [ + new Term(rule.head.args[0].id, []), + new Term(rule.head.args[1].id, rule.head.args[1].args.concat([begin, dcg.variable])) + ]); + else + rule.head = new Term(rule.head.id, rule.head.args.concat([begin, dcg.variable])); + } + return rule; + } + function body_to_dcg(expr, last, thread) { + var free; + if (pl.type.is_term(expr) && expr.indicator === "!/0") { + free = thread.next_free_variable(); + return { + value: new Term(",", [expr, new Term("=", [last, free])]), + variable: free, + error: false + }; + } else if (pl.type.is_term(expr) && expr.indicator === ":/2") { + var right = body_to_dcg(expr.args[1], last, thread); + if (right.error) + return right; + return { + value: new Term(":", [expr.args[0], right.value]), + variable: right.variable, + error: false + }; + } else if (pl.type.is_term(expr) && expr.indicator === "\\+/1") { + var left = body_to_dcg(expr.args[0], last, thread); + if (left.error) + return left; + free = thread.next_free_variable(); + return { + value: new Term(",", [new Term(expr.id, [left.value]), new Term("=", [last, free])]), + variable: free, + error: false + }; + } else if (pl.type.is_term(expr) && (expr.indicator === ",/2" || expr.indicator === "->/2")) { + var left = body_to_dcg(expr.args[0], last, thread); + if (left.error) + return left; + var right = body_to_dcg(expr.args[1], left.variable, thread); + if (right.error) + return right; + return { + value: new Term(expr.id, [left.value, right.value]), + variable: right.variable, + error: false + }; + } else if (pl.type.is_term(expr) && expr.indicator === ";/2") { + var left = body_to_dcg(expr.args[0], last, thread); + if (left.error) + return left; + var right = body_to_dcg(expr.args[1], last, thread); + if (right.error) + return right; + return { + value: new Term(",", [new Term(";", [left.value, right.value]), new Term("=", [left.variable, right.variable])]), + variable: right.variable, + error: false + }; + } else if (pl.type.is_term(expr) && expr.indicator === "{}/1") { + free = thread.next_free_variable(); + return { + value: new Term(",", [expr.args[0], new Term("=", [last, free])]), + variable: free, + error: false + }; + } else if (pl.type.is_empty_list(expr)) { + return { + value: new Term("true", []), + variable: last, + error: false + }; + } else if (pl.type.is_list(expr)) { + free = thread.next_free_variable(); + var pointer = expr; + var prev; + while (pointer.indicator === "./2") { + prev = pointer; + pointer = pointer.args[1]; + } + if (pl.type.is_variable(pointer)) { + return { + value: pl.error.instantiation("DCG/0"), + variable: last, + error: true + }; + } else if (!pl.type.is_empty_list(pointer)) { + return { + value: pl.error.type("list", expr, "DCG/0"), + variable: last, + error: true + }; + } else { + prev.args[1] = free; + return { + value: new Term("=", [last, expr]), + variable: free, + error: false + }; + } + } else if (pl.type.is_callable(expr)) { + free = thread.next_free_variable(); + expr = new Term(expr.id, expr.args.concat([last, free])); + return { + value: expr, + variable: free, + error: false + }; + } else { + return { + value: pl.error.type("callable", expr, "DCG/0"), + variable: last, + error: true + }; + } + } + function body_conversion(expr) { + if (pl.type.is_variable(expr)) + return new Term("call", [expr]); + else if (pl.type.is_term(expr) && [",/2", ";/2", "->/2"].indexOf(expr.indicator) !== -1) + return new Term(expr.id, [body_conversion(expr.args[0]), body_conversion(expr.args[1])]); + else if (pl.type.is_term(expr) && expr.indicator === ":/2") { + var body = body_conversion(expr.args[1]); + return new Term(":", [expr.args[0], body]); + } + return expr; + } + function arrayToList(array, cons) { + var list = cons ? cons : new Term("[]", []); + for (var i2 = array.length - 1; i2 >= 0; i2--) + list = new Term(".", [array[i2], list]); + return list; + } + function difference(xs, ys) { + var zs = []; + for (var i2 = 0; i2 < xs.length; i2++) { + if (indexOf(zs, xs[i2]) === -1 && indexOf(ys, xs[i2]) === -1) + zs.push(xs[i2]); + } + return zs; + } + function remove(array, element) { + for (var i2 = array.length - 1; i2 >= 0; i2--) { + if (array[i2] === element) { + array.splice(i2, 1); + } + } + } + function nub(array) { + var seen = {}; + var unique = []; + for (var i2 = 0; i2 < array.length; i2++) { + if (!(array[i2] in seen)) { + unique.push(array[i2]); + seen[array[i2]] = true; + } + } + return unique; + } + function retract(thread, point, indicator2, rule, get_module) { + if (get_module.rules[indicator2]) { + for (var i2 = 0; i2 < get_module.rules[indicator2].length; i2++) { + if (get_module.rules[indicator2][i2] === rule) { + get_module.rules[indicator2].splice(i2, 1); + get_module.update_indices_predicate(indicator2); + thread.success(point); + break; + } + } + } + } + function callN(n) { + return function(thread, point, atom) { + var closure = atom.args[0], args = atom.args.slice(1, n); + var module_atom; + if (pl.type.is_term(closure) && closure.indicator === ":/2") { + if (!pl.type.is_atom(closure.args[0])) { + thread.throw_error(pl.error.type("module", closure.args[0], atom.indicator)); + return; + } + module_atom = closure.args[0]; + closure = closure.args[1]; + } + if (pl.type.is_variable(closure)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if (!pl.type.is_callable(closure)) { + thread.throw_error(pl.error.type("callable", closure, atom.indicator)); + } else { + var goal = body_conversion(new Term(closure.id, closure.args.concat(args))); + if (!pl.type.is_callable(goal)) { + thread.throw_error(pl.error.type("callable", goal, atom.indicator)); + return; + } + if (module_atom) + goal = new Term(":", [module_atom, goal]); + thread.prepend([new State(point.goal.replace(goal), point.substitution, point)]); + } + }; + } + function str_indicator(str) { + for (var i2 = str.length - 1; i2 >= 0; i2--) + if (str.charAt(i2) === "/") + return new Term("/", [new Term(str.substring(0, i2)), new Num(parseInt(str.substring(i2 + 1)), false)]); + } + function gcd(a, b) { + if (b === 0) + return a; + return Math.abs(gcd(b, a % b)); + } + function Var(id) { + this.id = id; + this.ground = false; + } + function Num(value, is_float) { + this.is_float = is_float !== void 0 ? is_float : Math.trunc(value) !== value; + this.value = this.is_float ? value : Math.trunc(value); + this.index = this.value; + this.ground = true; + } + var term_ref = 0; + function Term(id, args, ref) { + term_ref++; + this.ref = ref || term_ref; + this.id = id; + this.args = args || []; + this.indicator = id + "/" + this.args.length; + this.index = this.indicator; + this.ground = true; + for (var i2 = 0; i2 < this.args.length; i2++) { + if (this.args[i2].hasOwnProperty("ground") && this.args[i2].ground === false) { + this.ground = false; + break; + } + } + } + var stream_ref = 0; + function Stream(stream, mode, alias, type, reposition, eof_action) { + this.id = stream_ref++; + this.stream = stream; + this.mode = mode; + this.alias = alias; + this.type = type !== void 0 ? type : "text"; + this.reposition = reposition !== void 0 ? reposition : true; + this.eof_action = eof_action !== void 0 ? eof_action : "eof_code"; + this.position = this.mode === "append" ? "end_of_stream" : 0; + this.output = this.mode === "write" || this.mode === "append"; + this.input = this.mode === "read"; + this.line_position = 0; + this.line_count = 1; + this.char_count = 0; + } + function Substitution(links, attrs) { + links = links || {}; + attrs = attrs || {}; + this.links = links; + this.attrs = attrs; + } + function State(goal, subs, parent) { + subs = subs || new Substitution(); + parent = parent || null; + this.goal = goal; + this.substitution = subs; + this.parent = parent; + } + function Rule(head, body, dynamic) { + this.head = head; + this.body = body; + this.dynamic = dynamic ? dynamic : false; + } + function Session(limit) { + limit = typeof limit === "number" && limit > 0 ? limit : null; + this.rename = 0; + this.modules = {}; + this.modules.user = new Module("user", {}, "all", { + session: this, + dependencies: ["system"] + }); + this.modules.system = pl.modules.system; + this.rules = this.modules.user.rules; + this.total_threads = 0; + this.renamed_variables = {}; + this.public_predicates = this.modules.user.public_predicates; + this.multifile_predicates = this.modules.user.multifile_predicates; + this.limit = limit; + this.streams = { + "user_input": new Stream( + nodejs_flag ? nodejs_user_input : tau_user_input, + "read", + "user_input", + "text", + false, + "reset" + ), + "user_output": new Stream( + nodejs_flag ? nodejs_user_output : tau_user_output, + "append", + "user_output", + "text", + false, + "reset" + ), + "user_error": new Stream( + nodejs_flag ? nodejs_user_error : tau_user_error, + "append", + "user_error", + "text", + false, + "reset" + ) + }; + this.file_system = nodejs_flag ? nodejs_file_system : tau_file_system; + this.standard_input = this.streams["user_input"]; + this.standard_output = this.streams["user_output"]; + this.standard_error = this.streams["user_error"]; + this.current_input = this.streams["user_input"]; + this.current_output = this.streams["user_output"]; + this.working_directory = "/"; + this.format_success = function(state) { + return state.substitution; + }; + this.format_error = function(state) { + return state.goal; + }; + this.flag = { + bounded: pl.flag.bounded.value, + max_integer: pl.flag.max_integer.value, + min_integer: pl.flag.min_integer.value, + integer_rounding_function: pl.flag.integer_rounding_function.value, + char_conversion: pl.flag.char_conversion.value, + debug: pl.flag.debug.value, + max_arity: pl.flag.max_arity.value, + unknown: pl.flag.unknown.value, + double_quotes: pl.flag.double_quotes.value, + occurs_check: pl.flag.occurs_check.value, + dialect: pl.flag.dialect.value, + version_data: pl.flag.version_data.value, + nodejs: pl.flag.nodejs.value, + argv: pl.flag.argv.value + }; + this.__loaded_modules = []; + this.__char_conversion = {}; + this.__operators = { + 1200: { ":-": ["fx", "xfx"], "-->": ["xfx"], "?-": ["fx"] }, + 1150: { "meta_predicate": ["fx"] }, + 1100: { ";": ["xfy"] }, + 1050: { "->": ["xfy"], "*->": ["xfy"] }, + 1e3: { ",": ["xfy"] }, + 900: { "\\+": ["fy"] }, + 700: { + "=": ["xfx"], + "\\=": ["xfx"], + "==": ["xfx"], + "\\==": ["xfx"], + "@<": ["xfx"], + "@=<": ["xfx"], + "@>": ["xfx"], + "@>=": ["xfx"], + "=..": ["xfx"], + "is": ["xfx"], + "=:=": ["xfx"], + "=\\=": ["xfx"], + "<": ["xfx"], + "=<": ["xfx"], + ">": ["xfx"], + ">=": ["xfx"] + }, + 600: { ":": ["xfy"] }, + 500: { "+": ["yfx"], "-": ["yfx"], "/\\": ["yfx"], "\\/": ["yfx"] }, + 400: { + "*": ["yfx"], + "/": ["yfx"], + "//": ["yfx"], + "rem": ["yfx"], + "mod": ["yfx"], + "<<": ["yfx"], + ">>": ["yfx"], + "div": ["yfx"] + }, + 200: { "**": ["xfx"], "^": ["xfy"], "-": ["fy"], "+": ["fy"], "\\": ["fy"] } + }; + this.thread = new Thread(this); + } + function Thread(session) { + this.epoch = Date.now(); + this.session = session; + this.session.total_threads++; + this.format_success = session.format_success; + this.format_error = session.format_error; + this.total_steps = 0; + this.cpu_time = 0; + this.points = []; + this.debugger = false; + this.debugger_states = []; + this.level = new Term("top_level"); + this.current_limit = this.session.limit; + this.has_limit = this.session.limit !== null; + this.warnings = []; + this.__calls = []; + this.__goal_expansion = false; + this.__stacks = {}; + } + function Module(id, rules2, exports2, options) { + options = options === void 0 ? {} : options; + options.public_predicates = options.public_predicates === void 0 ? {} : options.public_predicates; + options.multifile_predicates = options.multifile_predicates === void 0 ? {} : options.multifile_predicates; + options.meta_predicates = options.meta_predicates === void 0 ? {} : options.meta_predicates; + options.session = options.session === void 0 ? null : options.session; + options.dependencies = options.dependencies === void 0 ? [] : options.dependencies; + this.id = id; + this.rules = rules2; + this.indexed_clauses = {}; + this.non_indexable_clauses = {}; + this.public_predicates = options.public_predicates; + this.multifile_predicates = options.multifile_predicates; + this.meta_predicates = options.meta_predicates; + this.src_predicates = {}; + this.dependencies = options.dependencies; + this.exports = exports2; + this.is_library = options.session === null; + this.modules = {}; + if (options.session) { + options.session.modules[id] = this; + for (var i2 = 0; i2 < options.dependencies.length; i2++) { + var lib = options.dependencies[i2]; + if (!options.session.modules.hasOwnProperty(lib)) + options.session.modules[lib] = pl.modules[lib]; + } + } else { + pl.modules[id] = this; + } + if (exports2 !== "all") { + for (var i2 = 0; i2 < exports2.length; i2++) { + this.public_predicates[exports2[i2]] = options.public_predicates.hasOwnProperty(exports2[i2]) && options.public_predicates[exports2[i2]] === true; + } + } + this.update_indices_clauses(); + } + Module.prototype.exports_predicate = function(indicator2) { + return this.exports === "all" || indexOf(this.exports, indicator2) !== -1; + }; + Module.prototype.is_public_predicate = function(indicator2) { + return !this.public_predicates.hasOwnProperty(indicator2) || this.public_predicates[indicator2] === true; + }; + Module.prototype.is_multifile_predicate = function(indicator2) { + return this.multifile_predicates.hasOwnProperty(indicator2) && this.multifile_predicates[indicator2] === true; + }; + Module.prototype.is_meta_predicate = function(indicator2) { + if (this.meta_predicates.hasOwnProperty(indicator2)) + return this.meta_predicates[indicator2]; + return null; + }; + Module.prototype.update_indices_clauses = function() { + this.indexed_clauses = {}; + this.non_indexable_clauses = {}; + for (var indicator2 in this.rules) + this.update_indices_predicate(indicator2); + }; + Module.prototype.update_indices_predicate = function(indicator2) { + this.indexed_clauses[indicator2] = {}; + this.non_indexable_clauses[indicator2] = []; + if (!Array.isArray(this.rules[indicator2])) + return; + for (var i2 = 0; i2 < this.rules[indicator2].length; i2++) { + var clause = this.rules[indicator2][i2]; + this.add_index_predicate(clause); + } + }; + Module.prototype.add_index_predicate = function(clause) { + var indicator2 = clause.head.indicator; + var index = clause.head.args.length > 0 ? clause.head.args[0].index : void 0; + if (index) { + if (!this.indexed_clauses.hasOwnProperty(indicator2)) + this.indexed_clauses[indicator2] = {}; + if (!this.indexed_clauses[indicator2].hasOwnProperty(index)) { + this.indexed_clauses[indicator2][index] = []; + if (this.non_indexable_clauses.hasOwnProperty(indicator2)) + for (var j = 0; j < this.non_indexable_clauses[indicator2].length; j++) + this.indexed_clauses[indicator2][index].push(this.non_indexable_clauses[indicator2][j]); + } + this.indexed_clauses[indicator2][index].push(clause); + } else { + if (!this.non_indexable_clauses.hasOwnProperty(indicator2)) + this.non_indexable_clauses[indicator2] = []; + this.non_indexable_clauses[indicator2].push(clause); + for (var index in this.indexed_clauses[indicator2]) + this.indexed_clauses[indicator2][index].push(clause); + } + }; + Var.prototype.unify = function(obj, occurs_check) { + if (occurs_check && indexOf(obj.variables(), this.id) !== -1 && !pl.type.is_variable(obj)) + return null; + var links = {}; + links[this.id] = obj; + return new Substitution(links); + }; + Num.prototype.unify = function(obj, occurs_check) { + if (pl.type.is_number(obj) && this.value === obj.value && this.is_float === obj.is_float) + return new Substitution(); + return null; + }; + Term.prototype.unify = function(obj, occurs_check) { + if (!pl.type.is_term(obj) && obj.unify !== void 0) { + return obj.unify(this, occurs_check); + } else if (pl.type.is_term(obj) && this.indicator === obj.indicator) { + var subs = new Substitution(); + for (var i2 = 0; i2 < this.args.length; i2++) { + var mgu = pl.unify(this.args[i2].apply(subs), obj.args[i2].apply(subs), occurs_check); + if (mgu === null) + return null; + for (var x in mgu.links) + subs.links[x] = mgu.links[x]; + subs = subs.apply(mgu); + } + return subs; + } + return null; + }; + Stream.prototype.unify = function(obj, _occurs_check) { + if (pl.type.is_stream(obj) && this.id === obj.id) + return new Substitution(); + return null; + }; + Stream.prototype.compare = function(obj) { + if (this.id < obj.id) + return -1; + else if (this.id === obj.id) + return 0; + else + return 1; + }; + Var.prototype.toString = function(options) { + options = options === void 0 ? {} : options; + if (options.variable_names) { + var pointer = options.variable_names; + while (pl.type.is_term(pointer) && pointer.indicator === "./2") { + var head = pointer.args[0]; + if (pl.type.is_term(head) && head.indicator === "=/2" && pl.type.is_variable(head.args[1]) && head.args[1].id === this.id && pl.type.is_atom(head.args[0])) + return head.args[0].id; + pointer = pointer.args[1]; + } + } + return this.id; + }; + Num.prototype.toString = function(_) { + var str = this.value.toString(); + var e = str.indexOf("e"); + if (e !== -1) { + if (str.indexOf(".") !== -1) + return str; + else + return str.replace("e", ".0e"); + } + return this.is_float && indexOf(str, ".") === -1 ? this.value + ".0" : str; + }; + Term.prototype.toString = function(options, priority, from) { + options = !options ? {} : options; + options.quoted = options.quoted === void 0 ? false : options.quoted; + options.ignore_ops = options.ignore_ops === void 0 ? false : options.ignore_ops; + options.numbervars = options.numbervars === void 0 ? false : options.numbervars; + options.variable_names = options.variable_names === void 0 ? false : options.variable_names; + priority = priority === void 0 ? { priority: 1200, class: "", indicator: "" } : priority; + from = from === void 0 ? "" : from; + var arg_priority = { priority: 999, class: "", indicator: "" }; + if (options.numbervars && this.indicator === "$VAR/1" && pl.type.is_integer(this.args[0]) && this.args[0].value >= 0) { + var i2 = this.args[0].value; + var number = Math.floor(i2 / 26); + var letter = i2 % 26; + return "ABCDEFGHIJKLMNOPQRSTUVWXYZ"[letter] + (number !== 0 ? number : ""); + } + switch (this.indicator) { + case "[]/0": + case "{}/0": + case "!/0": + return this.id; + case "{}/1": + if (options.ignore_ops === false) { + return "{" + this.args[0].toString(options) + "}"; + } else { + return "{}(" + this.args[0].toString(options) + ")"; + } + case "./2": + if (options.ignore_ops === false) { + var list = "[" + this.args[0].toString(options, arg_priority); + var pointer = this.args[1]; + while (pointer.indicator === "./2") { + list += "," + pointer.args[0].toString(options, arg_priority); + pointer = pointer.args[1]; + } + if (pointer.indicator !== "[]/0") { + list += "|" + pointer.toString(options, arg_priority); + } + list += "]"; + return list; + } + default: + var id = this.id; + var operator = options.session ? options.session.lookup_operator(this.id, this.args.length) : null; + if (options.session === void 0 || options.ignore_ops || operator === null) { + if (options.quoted && (!/^(!|[a-z][0-9a-zA-Z_]*|[#\$\&\*\+\-\.\/\:\<\=\>\?\@\^\~\\]+)$/.test(id) && id !== "{}" && id !== "[]" || indexOf([".", ",", ";"], id) !== -1 || id.substring(0, 2) === "/*")) + id = "'" + redoEscape(id) + "'"; + if (this.args.length === 0 && is_graphic_token(this.id) && priority.indicator !== "") + return "(" + id + ")"; + return id + (this.args.length > 0 ? "(" + map( + this.args, + function(x) { + return x.toString(options, arg_priority); + } + ).join(",") + ")" : ""); + } else { + var priority_op = parseInt(operator.priority); + var priority_arg = parseInt(priority.priority); + var cond = priority_op > priority_arg || priority_op === priority_arg && (operator.class === "xfx" || operator.class === "xfy" && this.indicator !== priority.indicator || operator.class === "yfx" && this.indicator !== priority.indicator || this.indicator === priority.indicator && operator.class === "yfx" && from === "right" || this.indicator === priority.indicator && operator.class === "xfy" && from === "left" || this.indicator === priority.indicator && operator.class === "xf" && from === "left" || this.indicator === priority.indicator && operator.class === "fx" && from === "right"); + operator.indicator = this.indicator; + var lpar = cond ? "(" : ""; + var rpar = cond ? ")" : ""; + var space = !(is_graphic_token(this.id) || this.id === "," || this.id === ";") || operator.class.length === 2 || operator.class.length === 3 && pl.type.is_number(this.args[1]) && this.args[1].value < 0 ? " " : ""; + if (this.args.length === 0) { + return lpar + this.id + rpar; + } else if (["fy", "fx"].indexOf(operator.class) !== -1) { + return lpar + id + space + this.args[0].toString(options, operator, "right") + rpar; + } else if (["yf", "xf"].indexOf(operator.class) !== -1) { + return lpar + this.args[0].toString(options, operator, "left") + space + id + rpar; + } else { + return lpar + this.args[0].toString(options, operator, "left") + space + this.id + space + this.args[1].toString(options, operator, "right") + rpar; + } + } + } + }; + Stream.prototype.toString = function(_) { + return "(" + this.id + ")"; + }; + Substitution.prototype.toString = function(options) { + var str = "{"; + for (var link in this.links) { + if (!this.links.hasOwnProperty(link)) + continue; + if (str !== "{") { + str += ", "; + } + str += link + "/" + this.links[link].toString(options); + } + str += "}"; + return str; + }; + State.prototype.toString = function(options) { + if (this.goal === null) { + return "<" + this.substitution.toString(options) + ">"; + } else { + return "<" + this.goal.toString(options) + ", " + this.substitution.toString(options) + ">"; + } + }; + Rule.prototype.toString = function(options) { + if (!this.body) { + return this.head.toString(options) + "."; + } else { + return this.head.toString(options, 1200, "left") + " :- " + this.body.toString(options, 1200, "right") + "."; + } + }; + Session.prototype.toString = function(options) { + var str = ""; + for (var prop in this.modules) { + if (this.modules.hasOwnProperty(prop) && this.modules[prop].is_library) + str += ":- use_module(library(" + this.modules[prop] + ")).\n"; + } + str += "\n"; + for (var key in this.modules.user.rules) { + if (!this.modules.user.rules.hasOwnProperty(key)) + continue; + for (i = 0; i < this.modules.user.rules[key].length; i++) { + str += this.modules.user.rules[key][i].toString(options); + str += "\n"; + } + } + return str; + }; + Var.prototype.clone = function() { + return new Var(this.id); + }; + Num.prototype.clone = function() { + return new Num(this.value, this.is_float); + }; + Term.prototype.clone = function() { + var term = new Term(this.id, map(this.args, function(arg) { + return arg.clone(); + })); + if (this.definition_module) + term.definition_module = this.definition_module; + return term; + }; + Stream.prototype.clone = function() { + return new Stream(this.stream, this.mode, this.alias, this.type, this.reposition, this.eof_action); + }; + Substitution.prototype.clone = function() { + var links = {}; + var attrs = {}; + for (var link in this.links) { + if (!this.links.hasOwnProperty(link)) + continue; + links[link] = this.links[link].clone(); + } + for (var attr in this.attrs) { + if (!this.attrs.hasOwnProperty(attrs)) + continue; + attrs[attr] = {}; + for (var m in this.attrs[attr]) { + if (!this.attrs[attr].hasOwnProperty(m)) + continue; + attrs[attr][m] = this.attrs[attr][m].clone(); + } + } + return new Substitution(links, attrs); + }; + State.prototype.clone = function() { + return new State(this.goal.clone(), this.substitution.clone(), this.parent); + }; + Rule.prototype.clone = function() { + return new Rule(this.head.clone(), this.body !== null ? this.body.clone() : null); + }; + Var.prototype.equals = function(obj) { + return pl.type.is_variable(obj) && this.id === obj.id; + }; + Num.prototype.equals = function(obj) { + return pl.type.is_number(obj) && this.value === obj.value && this.is_float === obj.is_float; + }; + Term.prototype.equals = function(obj) { + if (!pl.type.is_term(obj) || this.indicator !== obj.indicator) { + return false; + } + for (var i2 = 0; i2 < this.args.length; i2++) { + if (!this.args[i2].equals(obj.args[i2])) { + return false; + } + } + return true; + }; + Stream.prototype.equals = function(obj) { + return pl.type.is_stream(obj) && this.id === obj.id; + }; + Substitution.prototype.equals = function(obj) { + var link; + if (!pl.type.is_substitution(obj)) { + return false; + } + for (link in this.links) { + if (!this.links.hasOwnProperty(link)) + continue; + if (!obj.links[link] || !this.links[link].equals(obj.links[link])) { + return false; + } + } + for (link in obj.links) { + if (!obj.links.hasOwnProperty(link)) + continue; + if (!this.links[link]) { + return false; + } + } + return true; + }; + State.prototype.equals = function(obj) { + return pl.type.is_state(obj) && this.goal.equals(obj.goal) && this.substitution.equals(obj.substitution) && this.parent === obj.parent; + }; + Rule.prototype.equals = function(obj) { + return pl.type.is_rule(obj) && this.head.equals(obj.head) && (this.body === null && obj.body === null || this.body !== null && this.body.equals(obj.body)); + }; + Var.prototype.rename = function(thread) { + return thread.get_free_variable(this); + }; + Num.prototype.rename = function(_) { + return this; + }; + Term.prototype.rename = function(thread) { + if (this.ground) + return new Term(this.id, this.args); + if (this.indicator === "./2") { + var arr = []; + var pointer = this; + while (pointer.indicator === "./2" && !pointer.ground) { + var app = pointer.args[0].rename(thread); + arr.push(app); + pointer = pointer.args[1]; + } + var list = pointer.rename(thread); + for (var i2 = arr.length - 1; i2 >= 0; i2--) + list = new Term(".", [arr[i2], list]); + return list; + } + var args = []; + for (var i2 = 0; i2 < this.args.length; i2++) { + var app = this.args[i2].rename(thread); + args.push(app); + } + return new Term(this.id, args); + }; + Stream.prototype.rename = function(thread) { + return this; + }; + Rule.prototype.rename = function(thread) { + return new Rule(this.head.rename(thread), this.body !== null ? this.body.rename(thread) : null); + }; + Var.prototype.is_rename = function(obj, links) { + links = links || {}; + if (!pl.type.is_variable(obj) || links.hasOwnProperty(this.id) && links[this.id] !== obj.id || links.hasOwnProperty(obj.id) && links[obj.id] !== this.id) + return false; + links[this.id] = obj.id; + links[obj.id] = this.id; + return true; + }; + Num.prototype.is_rename = function(obj, _links) { + return this.equals(obj); + }; + Term.prototype.is_rename = function(obj, links) { + links = links || {}; + if (!pl.type.is_term(obj) || this.indicator !== obj.indicator) + return false; + for (var i2 = 0; i2 < this.args.length; i2++) { + if (!pl.is_rename(this.args[i2], obj.args[i2], links)) + return false; + } + return true; + }; + Stream.prototype.is_rename = function(obj, _links) { + return this.equals(obj); + }; + Var.prototype.variables = function() { + return [this.id]; + }; + Num.prototype.variables = function() { + return []; + }; + Term.prototype.variables = function() { + if (this.ground) + return []; + return [].concat.apply([], map(this.args, function(arg) { + return arg.variables(); + })); + }; + Stream.prototype.variables = function() { + return []; + }; + Rule.prototype.variables = function() { + if (this.body === null) { + return this.head.variables(); + } else { + return this.head.variables().concat(this.body.variables()); + } + }; + Var.prototype.apply = function(subs) { + if (subs.lookup(this.id)) { + return subs.lookup(this.id); + } + return this; + }; + Num.prototype.apply = function(_) { + return this; + }; + Term.prototype.apply = function(subs) { + if (this.ground) + return this; + if (this.indicator === "./2") { + var arr = []; + var pointer = this; + while (pointer.indicator === "./2" && !pointer.ground) { + var app = pointer.args[0].apply(subs); + arr.push(app); + pointer = pointer.args[1]; + } + var list = pointer.apply(subs); + for (var i2 = arr.length - 1; i2 >= 0; i2--) + list = new Term(".", [arr[i2], list]); + return list; + } + var args = []; + for (var i2 = 0; i2 < this.args.length; i2++) { + var app = this.args[i2].apply(subs); + args.push(app); + } + return new Term(this.id, args, this.ref); + }; + Stream.prototype.apply = function(_) { + return this; + }; + Rule.prototype.apply = function(subs) { + return new Rule(this.head.apply(subs), this.body !== null ? this.body.apply(subs) : null); + }; + Substitution.prototype.apply = function(subs) { + var link, links = {}, attr, attrs = {}, m; + for (link in this.links) { + if (!this.links.hasOwnProperty(link)) + continue; + links[link] = this.links[link].apply(subs); + } + for (attr in this.attrs) { + if (!this.attrs.hasOwnProperty(attr)) + continue; + attrs[attr] = {}; + for (m in this.attrs[attr]) { + if (!this.attrs[attr].hasOwnProperty(m)) + continue; + attrs[attr][m] = this.attrs[attr][m].apply(subs); + } + } + return new Substitution(links, attrs); + }; + Term.prototype.select = function() { + var pointer = this; + while (pl.type.is_term(pointer) && pointer.indicator === ",/2") + pointer = pointer.args[0]; + return pointer; + }; + Term.prototype.replace = function(expr) { + if (this.indicator === ",/2") { + if (this.args[0].indicator === ",/2") { + return new Term(",", [this.args[0].replace(expr), this.args[1]]); + } else { + return expr === null ? this.args[1] : new Term(",", [expr, this.args[1]]); + } + } else { + return expr; + } + }; + Term.prototype.search = function(expr) { + if (this == expr || this.ref === expr.ref) + return true; + for (var i2 = 0; i2 < this.args.length; i2++) + if (pl.type.is_term(this.args[i2]) && this.args[i2].search(expr)) + return true; + return false; + }; + Session.prototype.push_global_stack = function(stack, value) { + return this.thread.push_global_stack(stack, value); + }; + Thread.prototype.push_global_stack = function(stack, value) { + if (!this.__stacks.hasOwnProperty(stack)) + this.__stacks[stack] = []; + this.__stacks[stack].push(value); + }; + Session.prototype.flush_global_stack = function(stack, tail) { + return this.thread.push_global_stack(stack, tail); + }; + Thread.prototype.flush_global_stack = function(stack, tail) { + var list = tail || new Term("[]", []); + if (this.__stacks.hasOwnProperty(stack)) { + while (this.__stacks[stack].length > 0) + list = new Term(".", [this.__stacks[stack].pop(), list]); + delete this.__stacks[stack]; + } + return list; + }; + Session.prototype.setMaxInferences = function(max) { + this.limit = typeof max === "number" && max > 0 ? max : null; + }; + Thread.prototype.setMaxInferences = function(max) { + this.session.setMaxInferences(max); + this.current_limit = this.session.limit; + this.has_limit = this.session.limit !== null; + }; + Session.prototype.format_answer = function(answer, options) { + return this.thread.format_answer(answer, options); + }; + Thread.prototype.format_answer = function(answer, options) { + return pl.format_answer(answer, this, options); + }; + Session.prototype.get_current_input = function() { + return this.current_input; + }; + Thread.prototype.get_current_input = function() { + return this.session.get_current_input(); + }; + Session.prototype.get_current_output = function() { + return this.current_output; + }; + Thread.prototype.get_current_output = function() { + return this.session.get_current_output(); + }; + Session.prototype.set_current_input = function(input) { + this.current_input = input; + }; + Thread.prototype.set_current_input = function(input) { + return this.session.set_current_input(input); + }; + Session.prototype.set_current_output = function(output) { + this.current_output = output; + }; + Thread.prototype.set_current_output = function(output) { + return this.session.set_current_output(output); + }; + Session.prototype.get_stream_by_alias = function(alias) { + return this.streams[alias]; + }; + Thread.prototype.get_stream_by_alias = function(alias) { + return this.session.get_stream_by_alias(alias); + }; + Session.prototype.file_system_open = function(path2, type, mode) { + if (this.get_flag("nodejs").indicator === "false/0") + path2 = this.absolute_file_name(path2); + return this.file_system.open(path2, type, mode); + }; + Thread.prototype.file_system_open = function(path2, type, mode) { + return this.session.file_system_open(path2, type, mode); + }; + Session.prototype.absolute_file_name = function(filename) { + var absolute; + if (this.get_flag("nodejs").indicator === "true/0") { + var path2 = require("path"); + absolute = filename; + for (var prop in process.env) { + if (!process.env.hasOwnProperty(prop)) + continue; + absolute = absolute.replace(new RegExp("\\$" + prop, "g"), process.env[prop]); + } + return path2.resolve(absolute); + } else { + var cwd = this.working_directory; + if (filename[0] === "/") + absolute = filename; + else + absolute = cwd + (cwd[cwd.length - 1] === "/" ? filename : "/" + filename); + absolute = absolute.replace(/\/\.\//g, "/"); + var dirs = absolute.split("/"); + var dirs2 = []; + for (var i2 = 0; i2 < dirs.length; i2++) { + if (dirs[i2] !== "..") { + dirs2.push(dirs[i2]); + } else { + if (dirs2.length !== 0) + dirs2.pop(); + } + } + absolute = dirs2.join("/").replace(/\/\.$/, "/"); + } + return absolute; + }; + Thread.prototype.absolute_file_name = function(path2, cwd) { + return this.session.absolute_file_name(path2, cwd); + }; + Session.prototype.get_char_conversion = function(char) { + return this.__char_conversion[char] || char; + }; + Thread.prototype.get_char_conversion = function(char) { + return this.session.get_char_conversion(char); + }; + Session.prototype.parse = function(string) { + return this.thread.parse(string); + }; + Thread.prototype.parse = function(string) { + var tokenizer = new Tokenizer(this); + tokenizer.new_text(string); + var tokens = tokenizer.get_tokens(); + if (tokens === null) + return false; + var expr = parseExpr(this, tokens, 0, this.__get_max_priority(), false); + if (expr.len !== tokens.length) + return false; + return { value: expr.value, expr, tokens }; + }; + Session.prototype.get_flag = function(flag) { + return this.flag[flag]; + }; + Thread.prototype.get_flag = function(flag) { + return this.session.get_flag(flag); + }; + Session.prototype.add_rule = function(rule, options) { + return this.thread.add_rule(rule, options); + }; + Thread.prototype.add_rule = function(rule, options) { + options = options ? options : {}; + options.from = options.from ? options.from : "$tau-js"; + var module_id, get_module; + if (pl.type.is_term(rule.head) && rule.head.indicator === ":/2") { + if (!pl.type.is_atom(rule.head.args[0])) { + this.throw_warning(pl.error.type("module", rule.head.args[0], "top_level/0")); + return; + } + module_id = rule.head.args[0].id; + rule.head = rule.head.args[1]; + } + if (module_id) { + get_module = this.session.modules[module_id]; + if (!pl.type.is_module(get_module)) { + get_module = new Module(module_id, {}, "all", { session: this.session }); + this.session.modules[module_id] = get_module; + } + } else { + get_module = this.session.modules[options.context_module]; + } + get_module.src_predicates[rule.head.indicator] = options.from; + if (!get_module.rules.hasOwnProperty(rule.head.indicator)) { + get_module.rules[rule.head.indicator] = []; + } + get_module.rules[rule.head.indicator].push(rule); + if (!get_module.public_predicates.hasOwnProperty(rule.head.indicator)) + get_module.public_predicates[rule.head.indicator] = false; + get_module.add_index_predicate(rule); + return true; + }; + Session.prototype.run_directive = function(directive, options) { + return this.thread.run_directive(directive, options); + }; + Thread.prototype.run_directive = function(directive, options) { + if (pl.type.is_directive(directive)) { + if (pl.directive[directive.indicator]) + return pl.directive[directive.indicator](this, directive, options); + else + return pl.directive[directive.id + "/*"](this, directive, options); + } + return false; + }; + Session.prototype.__get_max_priority = function() { + return "1200"; + }; + Thread.prototype.__get_max_priority = function() { + return this.session.__get_max_priority(); + }; + Session.prototype.__get_next_priority = function(priority) { + var max = 0; + priority = parseInt(priority); + for (var key in this.__operators) { + if (!this.__operators.hasOwnProperty(key)) + continue; + var n = parseInt(key); + if (n > max && n < priority) + max = n; + } + return max.toString(); + }; + Thread.prototype.__get_next_priority = function(priority) { + return this.session.__get_next_priority(priority); + }; + Session.prototype.__lookup_operator_classes = function(priority, operator) { + if (this.__operators.hasOwnProperty(priority) && this.__operators[priority][operator] instanceof Array) { + return this.__operators[priority][operator] || false; + } + return false; + }; + Thread.prototype.__lookup_operator_classes = function(priority, operator) { + return this.session.__lookup_operator_classes(priority, operator); + }; + Session.prototype.lookup_operator = function(name, arity) { + for (var p in this.__operators) + if (this.__operators[p][name]) { + for (var i2 = 0; i2 < this.__operators[p][name].length; i2++) + if (this.__operators[p][name][i2].length === arity + 1) + return { priority: p, class: this.__operators[p][name][i2] }; + } + return null; + }; + Thread.prototype.lookup_operator = function(name, arity) { + return this.session.lookup_operator(name, arity); + }; + Session.prototype.throw_warning = function(warning) { + this.thread.throw_warning(warning); + }; + Thread.prototype.throw_warning = function(warning) { + this.warnings.push(warning); + }; + Session.prototype.get_warnings = function() { + return this.thread.get_warnings(); + }; + Thread.prototype.get_warnings = function() { + return this.warnings; + }; + Session.prototype.add_goal = function(goal, unique) { + this.thread.add_goal(goal, unique); + }; + Thread.prototype.add_goal = function(goal, unique, parent) { + parent = parent ? parent : null; + if (unique === true) + this.points = []; + var vars = goal.variables(); + var links = {}; + for (var i2 = 0; i2 < vars.length; i2++) + links[vars[i2]] = new Var(vars[i2]); + this.points.push(new State(goal, new Substitution(links), parent)); + }; + Session.prototype.consult = function(program, options) { + return this.thread.consult(program, options); + }; + Thread.prototype.consult = function(program, options) { + var string = "", success = false; + var opts = {}; + var callback = typeof options === "function" ? options : function() { + }; + options = options === void 0 || typeof options === "function" ? {} : options; + opts.context_module = options.context_module === void 0 ? "user" : options.context_module; + opts.text = options.text === void 0 ? true : options.text; + opts.html = options.html === void 0 ? true : options.html; + opts.url = options.url === void 0 ? true : options.url; + opts.file = options.file === void 0 ? true : options.file; + opts.script = options.script === void 0 ? true : options.script; + opts.success = options.success === void 0 ? callback : options.success; + opts.error = options.error === void 0 ? callback : options.error; + if (typeof program === "string") { + string = program; + if (opts.script && this.get_flag("nodejs").indicator === "false/0" && program != "" && document.getElementById(string)) { + var script = document.getElementById(string); + var type = script.getAttribute("type"); + if (type !== null && type.replace(/ /g, "").toLowerCase() === "text/prolog") { + string = script.text; + success = true; + } + } + if (!success && opts.file && this.get_flag("nodejs").indicator === "true/0") { + var fs2 = require("fs"); + var thread = this; + fs2.readFile(program, function(error, data) { + if (error) { + opts.file = false; + thread.consult(program, opts); + } else { + parseProgram(thread, data.toString(), opts); + } + }); + return; + } + if (!success && this.get_flag("nodejs").indicator === "false/0" && opts.url && program !== "" && !/\s/.test(program)) { + try { + var xhttp = new XMLHttpRequest(); + var thread = this; + xhttp.onreadystatechange = function() { + if (this.readyState == 4) { + if (this.status == 200) { + string = xhttp.responseText; + success = true; + parseProgram(thread, string, opts); + } else { + opts.url = false; + thread.consult(program, opts); + } + } + }; + xhttp.open("GET", program, true); + xhttp.send(); + return; + } catch (ex) { + opts.error(ex); + return; + } + } + if (!success && opts.text) { + success = true; + } + } else if (opts.html && program.nodeName) { + switch (program.nodeName.toLowerCase()) { + case "input": + case "textarea": + string = program.value; + success = true; + break; + default: + string = program.innerHTML; + success = true; + break; + } + } else { + opts.error(pl.error.existence("source_sink", new Term(string), "top_level/0")); + } + this.warnings = []; + parseProgram(this, string, opts); + }; + Session.prototype.query = function(string, options) { + return this.thread.query(string, options); + }; + Thread.prototype.query = function(string, options) { + this.points = []; + this.debugger_states = []; + this.level = new Term("top_level"); + return parseQuery(this, string, options); + }; + Session.prototype.head_point = function() { + return this.thread.head_point(); + }; + Thread.prototype.head_point = function() { + return this.points[this.points.length - 1]; + }; + Session.prototype.get_free_variable = function(variable) { + return this.thread.get_free_variable(variable); + }; + Thread.prototype.get_free_variable = function(variable) { + var variables = []; + if (variable.id === "_" || this.session.renamed_variables[variable.id] === void 0) { + this.session.rename++; + if (this.current_point) + variables = this.current_point.substitution.domain(); + while (indexOf(variables, pl.format_variable(this.session.rename, variable.id)) !== -1) { + this.session.rename++; + } + if (variable.id === "_") { + return new Var(pl.format_variable(this.session.rename, variable.id)); + } else { + this.session.renamed_variables[variable.id] = pl.format_variable(this.session.rename, variable.id); + } + } + return new Var(this.session.renamed_variables[variable.id]); + }; + Session.prototype.next_free_variable = function() { + return this.thread.next_free_variable(); + }; + Thread.prototype.next_free_variable = function() { + this.session.rename++; + var variables = []; + if (this.current_point) + variables = this.current_point.substitution.domain(); + while (indexOf(variables, pl.format_variable(this.session.rename)) !== -1) { + this.session.rename++; + } + return new Var(pl.format_variable(this.session.rename)); + }; + Session.prototype.is_public_predicate = function(indicator2, module_id) { + module_id = module_id === void 0 ? "user" : module_id; + return pl.type.is_module(this.modules[module_id]) && this.modules[module_id].is_public_predicate(indicator2); + }; + Thread.prototype.is_public_predicate = function(indicator2, module_id) { + return this.session.is_public_predicate(indicator2, module_id); + }; + Session.prototype.is_multifile_predicate = function(indicator2, module_id) { + module_id = module_id === void 0 ? "user" : module_id; + return pl.type.is_module(this.modules[module_id]) && this.modules[module_id].is_multifile_predicate(indicator2); + }; + Thread.prototype.is_multifile_predicate = function(indicator2, module_id) { + return this.session.is_multifile_predicate(indicator2, module_id); + }; + Session.prototype.is_meta_predicate = function(indicator2, module_id) { + module_id = module_id === void 0 ? "user" : module_id; + if (pl.type.is_module(this.modules[module_id])) + return this.modules[module_id].is_meta_predicate(indicator2); + return null; + }; + Thread.prototype.is_meta_predicate = function(indicator2, module_id) { + return this.session.is_meta_predicate(indicator2, module_id); + }; + Session.prototype.prepend = function(states) { + return this.thread.prepend(states); + }; + Thread.prototype.prepend = function(states) { + for (var i2 = states.length - 1; i2 >= 0; i2--) + this.points.push(states[i2]); + }; + Session.prototype.success = function(point, parent) { + return this.thread.success(point, parent); + }; + Thread.prototype.success = function(point, parent) { + var parent = typeof parent === "undefined" ? point : parent; + this.prepend([new State(point.goal.replace(null), point.substitution, parent)]); + }; + Session.prototype.throw_error = function(error) { + return this.thread.throw_error(error); + }; + Thread.prototype.throw_error = function(error) { + if (pl.type.is_variable(error)) + error = pl.error.instantiation(this.level.indicator); + var state = new State( + new Term("throw", [error]), + new Substitution(), + null + ); + state.error = true; + this.prepend([state]); + }; + Session.prototype.lookup_module = function(atom, context_module) { + return this.thread.lookup_module(atom, context_module); + }; + Thread.prototype.lookup_module = function(atom, context_module) { + var get_module = this.session.modules[context_module]; + if (!pl.type.is_module(get_module)) + get_module = this.session.modules.user; + if (get_module.rules.hasOwnProperty(atom.indicator) && (get_module.exports_predicate(atom.indicator) || get_module.rules.hasOwnProperty(this.level.indicator) || context_module === get_module.id)) + return get_module; + get_module.modules.system = pl.modules.system; + get_module.modules.user = this.session.modules.user; + for (var prop in get_module.modules) { + if (!this.session.modules.hasOwnProperty(prop)) + continue; + var get_module = this.session.modules[prop]; + if (get_module.rules.hasOwnProperty(atom.indicator) && (get_module.exports_predicate(atom.indicator) || get_module.rules.hasOwnProperty(this.level.indicator) || context_module === get_module.id)) + return get_module; + } + return null; + }; + Session.prototype.expand_meta_predicate = function(atom, definition_module, context_module) { + return this.thread.expand_meta_predicate(atom, definition_module, context_module); + }; + Thread.prototype.expand_meta_predicate = function(atom, definition_module, context_module) { + var get_module = this.session.modules[definition_module]; + if (!get_module) + return; + var meta = get_module.is_meta_predicate(atom.indicator); + if (!meta) + return; + for (var i2 = 0; i2 < meta.args.length; i2++) { + if (pl.type.is_integer(meta.args[i2]) || pl.type.is_atom(meta.args[i2]) && indexOf([":"], meta.args[i2].id) !== -1) { + if (!pl.type.is_term(atom.args[i2]) || atom.args[i2].indicator !== ":/2") { + atom.args[i2] = new Term(":", [new Term(context_module), atom.args[i2]]); + } + } else if (pl.type.is_atom(meta.args[i2]) && meta.args[i2].id === "^") { + var pointer_last = atom; + var pointer_index = i2; + var pointer = atom.args[i2]; + while (pl.type.is_term(pointer) && pointer.indicator === "^/2") { + pointer_last = pointer; + pointer_index = 1; + pointer = pointer.args[1]; + } + if (!pl.type.is_term(pointer) || pointer.indicator !== ":/2") { + pointer_last.args[pointer_index] = new Term(":", [new Term(context_module), pointer]); + } + } + } + }; + Session.prototype.step = function() { + return this.thread.step(); + }; + Thread.prototype.step = function() { + if (this.points.length === 0) { + return; + } + var asyn = false; + var point = this.points.pop(); + this.current_point = point; + if (this.debugger) + this.debugger_states.push(point); + var atom = pl.type.is_term(point.goal) ? point.goal.select() : point.goal; + if (pl.type.is_term(atom) && (atom.indicator !== ":/2" || pl.type.is_term(atom.args[1]))) { + var context_module = null; + var states = []; + if (atom !== null) { + this.total_steps++; + var level = point; + while (level.parent !== null && level.parent.goal.search(atom)) + level = level.parent; + if (level.parent === null) { + this.level = new Term("top_level"); + } else { + this.level = level.parent.goal.select(); + if (this.level.indicator === ":/2") + this.level = this.level.args[1]; + } + if (pl.type.is_term(atom) && atom.indicator === ":/2") { + context_module = atom.args[0]; + atom = atom.args[1]; + if (!pl.type.is_atom(context_module)) { + this.throw_error(pl.error.type("module", context_module, this.level.indicator)); + return; + } + context_module = context_module.id; + } else { + if (this.level.definition_module) { + context_module = this.level.definition_module; + } else { + context_module = "user"; + } + } + atom.context_module = context_module; + if (atom.indicator === ",/2") { + this.prepend([new State( + point.goal.replace(new Term(",", [ + new Term(":", [new Term(context_module), atom.args[0]]), + new Term(":", [new Term(context_module), atom.args[1]]) + ])), + point.substitution, + point + )]); + return; + } + this.__call_indicator = atom.indicator; + var get_module = this.lookup_module(atom, context_module); + atom.definition_module = pl.type.is_module(get_module) ? get_module.id : "user"; + this.expand_meta_predicate(atom, atom.definition_module, context_module); + var clauses = null; + if (get_module && atom.args.length > 0 && atom.args[0].index && get_module.indexed_clauses.hasOwnProperty(atom.indicator) && get_module.indexed_clauses[atom.indicator].hasOwnProperty(atom.args[0].index)) + clauses = get_module.indexed_clauses[atom.indicator][atom.args[0].index]; + else + clauses = get_module === null ? null : get_module.rules[atom.indicator]; + if (clauses === null) { + if (!this.session.modules.user.rules.hasOwnProperty(atom.indicator)) { + if (this.get_flag("unknown").id === "error") { + this.throw_error(pl.error.existence("procedure", atom.indicator, this.level.indicator)); + } else if (this.get_flag("unknown").id === "warning") { + this.throw_warning("unknown procedure " + atom.indicator + " (from " + this.level.indicator + ")"); + } + } + } else if (clauses instanceof Function) { + asyn = clauses(this, point, atom); + } else { + if (this.__goal_expansion && atom.indicator === "goal_expansion/2") + clauses = clauses.concat(pl.builtin.rules["goal_expansion/2"]); + for (var i2 = 0; i2 < clauses.length; i2++) { + this.session.renamed_variables = {}; + var clause = clauses[i2].rename(this); + var occurs_check = this.get_flag("occurs_check").indicator === "true/0"; + var mgu = pl.unify(atom, clause.head, occurs_check); + if (mgu !== null) { + var state = new State(); + state.goal = point.goal.replace(clause.body); + if (state.goal !== null) + state.goal = state.goal.apply(mgu); + state.substitution = point.substitution.apply(mgu); + state.parent = point; + states.push(state); + } + } + this.prepend(states); + } + } + } else { + var term = pl.type.is_term(atom) && atom.indicator === ":/2" ? atom.args[1] : atom; + if (pl.type.is_variable(term)) + this.throw_error(pl.error.instantiation(this.level.indicator)); + else + this.throw_error(pl.error.type("callable", term, this.level.indicator)); + } + return asyn; + }; + Session.prototype.answer = function(options) { + return this.thread.answer(options); + }; + Thread.prototype.answer = function(options) { + var opts = {}; + options = options || function() { + }; + if (typeof options === "function") { + opts = { + success: options, + error: options, + fail: options, + limit: options + }; + } else { + opts.success = options.success === void 0 ? function() { + } : options.success; + opts.error = options.error === void 0 ? function() { + } : options.error; + opts.fail = options.fail === void 0 ? function() { + } : options.fail; + opts.limit = options.limit === void 0 ? function() { + } : options.limit; + } + this.__calls.push(opts); + if (this.__calls.length > 1) { + return; + } + this.again(); + }; + Session.prototype.answers = function(callback, max, after) { + return this.thread.answers(callback, max, after); + }; + Thread.prototype.answers = function(callback, max, after) { + var answers = max === void 0 ? 1e3 : max; + var thread = this; + if (answers <= 0) { + if (after) + after(); + return; + } + this.answer(function(answer) { + callback(answer); + if (answer !== false) { + setTimeout(function() { + thread.answers(callback, answers - 1, after); + }, 0); + } else if (after) { + after(); + } + }); + }; + Session.prototype.again = function(reset_limit) { + return this.thread.again(reset_limit); + }; + Thread.prototype.again = function(reset_limit) { + while (this.__calls.length > 0) { + this.warnings = []; + if (reset_limit !== false) + this.current_limit = this.session.limit; + while ((!this.has_limit || this.current_limit > 0) && this.points.length > 0 && this.head_point().goal !== null && !pl.type.is_error_state(this.head_point())) { + if (this.has_limit) + this.current_limit--; + var t0 = Date.now(); + var asyn = this.step(); + var t1 = Date.now(); + this.cpu_time += t1 - t0; + if (asyn === true) + return; + } + var call = this.__calls.shift(); + if (this.has_limit && this.current_limit <= 0) { + (function(call2) { + return setTimeout(function() { + call2.limit(null); + }, 0); + })(call); + } else if (this.points.length === 0) { + (function(call2) { + return setTimeout(function() { + call2.fail(false); + }, 0); + })(call); + } else if (pl.type.is_error(this.head_point().goal)) { + var error = this.format_error(this.points.pop()); + this.points = []; + (function(error2, call2) { + return setTimeout(function() { + call2.error(error2); + }, 0); + })(error, call); + } else { + if (this.debugger) + this.debugger_states.push(this.head_point()); + var answer = this.format_success(this.points.pop()); + (function(answer2, call2) { + return setTimeout(function() { + call2.success(answer2); + }, 0); + })(answer, call); + } + } + }; + Session.prototype.unfold = function(rule) { + if (rule.body === null) + return false; + var head = rule.head; + var body = rule.body; + var atom = body.select(); + var thread = new Thread(this); + var unfolded = []; + thread.add_goal(atom); + thread.step(); + for (var i2 = thread.points.length - 1; i2 >= 0; i2--) { + var point = thread.points[i2]; + var head2 = head.apply(point.substitution); + var body2 = body.replace(point.goal); + if (body2 !== null) + body2 = body2.apply(point.substitution); + unfolded.push(new Rule(head2, body2)); + } + var rules2 = this.modules.user.rules[head.indicator]; + var index = indexOf(rules2, rule); + if (unfolded.length > 0 && index !== -1) { + rules2.splice.apply(rules2, [index, 1].concat(unfolded)); + return true; + } + return false; + }; + Thread.prototype.unfold = function(rule) { + return this.session.unfold(rule); + }; + Var.prototype.interpret = function(thread) { + return pl.error.instantiation(thread.level.indicator); + }; + Num.prototype.interpret = function(thread) { + return this; + }; + Term.prototype.interpret = function(thread) { + if (pl.type.is_unitary_list(this)) { + return this.args[0].interpret(thread); + } else { + return pl.operate(thread, this); + } + }; + Var.prototype.compare = function(obj) { + if (this.id < obj.id) { + return -1; + } else if (this.id > obj.id) { + return 1; + } else { + return 0; + } + }; + Num.prototype.compare = function(obj) { + if (this.value === obj.value && this.is_float === obj.is_float) { + return 0; + } else if (this.value < obj.value || this.value === obj.value && this.is_float && !obj.is_float) { + return -1; + } else if (this.value > obj.value) { + return 1; + } + }; + Term.prototype.compare = function(obj) { + if (this.args.length < obj.args.length || this.args.length === obj.args.length && this.id < obj.id) { + return -1; + } else if (this.args.length > obj.args.length || this.args.length === obj.args.length && this.id > obj.id) { + return 1; + } else { + for (var i2 = 0; i2 < this.args.length; i2++) { + var arg = pl.compare(this.args[i2], obj.args[i2]); + if (arg !== 0) { + return arg; + } + } + return 0; + } + }; + Substitution.prototype.lookup = function(variable) { + if (this.links[variable]) { + return this.links[variable]; + } else { + return null; + } + }; + Substitution.prototype.filter = function(predicate) { + var links = {}; + for (var id in this.links) { + if (!this.links.hasOwnProperty(id)) + continue; + var value = this.links[id]; + if (predicate(id, value)) { + links[id] = value; + } + } + return new Substitution(links, this.attrs); + }; + Substitution.prototype.exclude = function(variables) { + var links = {}; + for (var variable in this.links) { + if (!this.links.hasOwnProperty(variable)) + continue; + if (indexOf(variables, variable) === -1) { + links[variable] = this.links[variable]; + } + } + return new Substitution(links, this.attrs); + }; + Substitution.prototype.add = function(variable, value) { + this.links[variable] = value; + }; + Substitution.prototype.domain = function(plain) { + var f = plain === true ? function(x2) { + return x2; + } : function(x2) { + return new Var(x2); + }; + var vars = []; + for (var x in this.links) + vars.push(f(x)); + return vars; + }; + Substitution.prototype.get_attribute = function(variable, module3) { + if (this.attrs[variable]) + return this.attrs[variable][module3]; + }; + Substitution.prototype.set_attribute = function(variable, module3, value) { + var subs = new Substitution(this.links); + for (var v in this.attrs) { + if (v === variable) { + subs.attrs[v] = {}; + for (var m in this.attrs[v]) { + subs.attrs[v][m] = this.attrs[v][m]; + } + } else { + subs.attrs[v] = this.attrs[v]; + } + } + if (!subs.attrs[variable]) { + subs.attrs[variable] = {}; + } + subs.attrs[variable][module3] = value; + return subs; + }; + Substitution.prototype.has_attributes = function(variable) { + return this.attrs[variable] && this.attrs[variable] !== {}; + }; + Var.prototype.compile = function() { + return 'new pl.type.Var("' + this.id.toString() + '")'; + }; + Num.prototype.compile = function() { + return "new pl.type.Num(" + this.value.toString() + ", " + this.is_float.toString() + ")"; + }; + Term.prototype.compile = function() { + return 'new pl.type.Term("' + this.id.replace(/"/g, '\\"') + '", [' + map(this.args, function(arg) { + return arg.compile(); + }) + "])"; + }; + Rule.prototype.compile = function() { + return "new pl.type.Rule(" + this.head.compile() + ", " + (this.body === null ? "null" : this.body.compile()) + ")"; + }; + Session.prototype.compile = function() { + var str, obj = [], rules2; + for (var _indicator in this.modules.user.rules) { + if (!this.modules.user.rules.hasOwnProperty(_indicator)) + continue; + var indicator2 = this.modules.user.rules[_indicator]; + rules2 = []; + str = '"' + _indicator + '": ['; + for (var i2 = 0; i2 < indicator2.length; i2++) { + rules2.push(indicator2[i2].compile()); + } + str += rules2.join(); + str += "]"; + obj.push(str); + } + return "{" + obj.join() + "};"; + }; + Module.prototype.compile = function() { + var length = 0; + var dependencies = 0; + var str = "var pl;\n"; + str += "(function(pl) {\n"; + str += ' var name = "' + this.id + '";\n'; + str += " var predicates = function() {\n"; + str += " return {\n"; + for (var prop in this.rules) { + if (length > 0) + str += ",\n"; + str += ' "' + prop + '": '; + if (typeof this.rules[prop] === "function") { + str += this.rules[prop]; + } else { + str += "[\n"; + for (var i2 = 0; i2 < this.rules[prop].length; i2++) { + str += " " + this.rules[prop][i2].compile(); + if (i2 < this.rules[prop].length - 1) + str += ","; + str += "\n"; + } + str += " ]"; + } + length++; + } + str += "\n };\n"; + str += " };\n"; + str += " var exports = ["; + for (var i2 = 0; i2 < this.exports.length; i2++) { + if (i2 > 0) + str += ", "; + str += '"' + this.exports[i2] + '"'; + } + str += "];\n"; + str += " var options = function() {\n"; + str += " return {\n"; + str += " dependencies: ["; + for (var prop in this.modules) { + if (dependencies > 0) + str += ", "; + str += '"' + prop + '"'; + dependencies++; + } + str += "]\n"; + str += " };\n"; + str += "};\n"; + str += " if(typeof module !== 'undefined') {\n"; + str += " module.exports = function(p) {\n"; + str += " pl = p;\n"; + str += " new pl.type.Module(name, predicates(), exports, options());\n"; + str += " };\n"; + str += " } else {\n"; + str += " new pl.type.Module(name, predicates(), exports, options());\n"; + str += " }\n"; + str += "})(pl);\n"; + return str; + }; + Var.prototype.toJavaScript = function() { + return this.toString(); + }; + Num.prototype.toJavaScript = function() { + return this.value; + }; + Term.prototype.toJavaScript = function(options) { + if (this.args.length === 0 && this.indicator !== "[]/0") { + return this.toString(options); + } else if (pl.type.is_list(this)) { + var all_obj = true; + var arr = []; + var obj = {}; + var pointer = this; + var value; + while (pointer.indicator === "./2") { + value = pointer.args[0].toJavaScript(options); + arr.push(value); + all_obj = all_obj && pl.type.is_term(pointer.args[0]) && pointer.args[0].indicator === "-/2" && pl.type.is_atom(pointer.args[0].args[0]); + if (all_obj) + obj[pointer.args[0].args[0].id] = pointer.args[0].args[1].toJavaScript(options); + pointer = pointer.args[1]; + } + if (pointer.indicator === "[]/0") + return all_obj && arr.length > 0 ? obj : arr; + } + return this.toString(options); + }; + Rule.prototype.singleton_variables = function(include_named) { + include_named = include_named || false; + var variables = this.head.variables(); + var count = {}; + var singleton = []; + if (this.body !== null) + variables = variables.concat(this.body.variables()); + for (var i2 = 0; i2 < variables.length; i2++) { + if (count[variables[i2]] === void 0) + count[variables[i2]] = 0; + count[variables[i2]]++; + } + for (var key in count) { + if (!count.hasOwnProperty(key)) + continue; + if (count[key] === 1) { + var charcode = codePointAt(key, 1); + if (!include_named || key === "_") { + if (key === "_" || key[0] === "_" && (charcode === 95 || charcode >= 65 && charcode <= 90)) + continue; + } + singleton.push(key); + } + } + return singleton; + }; + var nodejs_flag = typeof process !== "undefined" && !process.browser; + var nodejs_arguments = nodejs_flag ? arrayToList(map(process.argv.slice(1), function(arg) { + return new Term(arg); + })) : new Term("[]", []); + var pl = { + __env: nodejs_flag ? global : window, + modules: {}, + version, + parser: { + tokenizer: Tokenizer, + expression: parseExpr + }, + utils: { + str_indicator, + codePointAt, + fromCodePoint, + stringLength + }, + statistics: { + getCountTerms: function() { + return term_ref; + } + }, + fromJavaScript: { + test: { + boolean: function(obj, tobj) { + return obj === true || obj === false; + }, + number: function(obj, tobj) { + return typeof obj === "number"; + }, + string: function(obj, tobj) { + return typeof obj === "string"; + }, + list: function(obj, tobj) { + return obj instanceof Array; + }, + variable: function(obj, tobj) { + return obj === void 0; + }, + object: function(obj, tobj) { + tobj = tobj === void 0 ? false : tobj; + return tobj && !(obj instanceof Array) && typeof obj === "object"; + }, + any: function(_, tobj) { + return true; + } + }, + conversion: { + boolean: function(obj, tobj) { + return new Term(obj ? "true" : "false", []); + }, + number: function(obj, tobj) { + return new Num(obj, obj % 1 !== 0); + }, + string: function(obj, tobj) { + return new Term(obj, []); + }, + list: function(obj, tobj) { + tobj = tobj === void 0 ? false : tobj; + var arr = []; + var elem; + for (var i2 = 0; i2 < obj.length; i2++) { + elem = pl.fromJavaScript.apply(obj[i2], tobj); + if (elem === void 0) + return void 0; + arr.push(elem); + } + return arrayToList(arr); + }, + variable: function(obj, tobj) { + return new Var("_"); + }, + object: function(obj, tobj) { + tobj = tobj === void 0 ? false : tobj; + var list = new Term("[]", []); + var arr = []; + for (var prop in obj) { + if (!obj.hasOwnProperty(prop)) + continue; + arr.push(new Term("-", [ + pl.fromJavaScript.apply(prop, tobj), + pl.fromJavaScript.apply(obj[prop], tobj) + ])); + } + return arrayToList(arr); + }, + any: function(obj, tobj) { + return void 0; + } + }, + apply: function(obj, tobj) { + tobj = tobj === void 0 ? false : tobj; + for (var i2 in pl.fromJavaScript.test) + if (i2 !== "any" && pl.fromJavaScript.test[i2](obj, tobj)) + return pl.fromJavaScript.conversion[i2](obj, tobj); + return pl.fromJavaScript.conversion.any(obj, tobj); + } + }, + type: { + Var, + Num, + Term, + Rule, + State, + Stream, + Module, + Thread, + Session, + Substitution, + File: TauFile, + Directory: TauDirectory, + order: [Var, Num, Term, Stream], + compare: function(x, y) { + var ord_x = indexOf(pl.type.order, x.constructor); + var ord_y = indexOf(pl.type.order, y.constructor); + if (ord_x < ord_y) { + return -1; + } else if (ord_x > ord_y) { + return 1; + } else { + if (x.constructor === Num) { + if (x.is_float && y.is_float) + return 0; + else if (x.is_float) + return -1; + else if (y.is_float) + return 1; + } + return 0; + } + }, + is_substitution: function(obj) { + return obj instanceof Substitution; + }, + is_state: function(obj) { + return obj instanceof State; + }, + is_rule: function(obj) { + return obj instanceof Rule; + }, + is_variable: function(obj) { + return obj instanceof Var; + }, + is_stream: function(obj) { + return obj instanceof Stream; + }, + is_anonymous_var: function(obj) { + return obj instanceof Var && obj.id === "_"; + }, + is_callable: function(obj) { + return obj instanceof Term && (indexOf([",/2", ";/2", "->/2"], obj.indicator) === -1 || pl.type.is_callable(obj.args[0]) && pl.type.is_callable(obj.args[1])) || obj instanceof Var; + }, + is_number: function(obj) { + return obj instanceof Num; + }, + is_integer: function(obj) { + return obj instanceof Num && !obj.is_float; + }, + is_float: function(obj) { + return obj instanceof Num && obj.is_float; + }, + is_term: function(obj) { + return obj instanceof Term; + }, + is_atom: function(obj) { + return obj instanceof Term && obj.args.length === 0; + }, + is_ground: function(obj) { + if (obj instanceof Var) + return false; + if (obj instanceof Term) { + for (var i2 = 0; i2 < obj.args.length; i2++) + if (!pl.type.is_ground(obj.args[i2])) + return false; + } + return true; + }, + is_atomic: function(obj) { + return obj instanceof Term && obj.args.length === 0 || obj instanceof Num; + }, + is_compound: function(obj) { + return obj instanceof Term && obj.args.length > 0; + }, + is_list: function(obj) { + return obj instanceof Term && (obj.indicator === "[]/0" || obj.indicator === "./2"); + }, + is_empty_list: function(obj) { + return obj instanceof Term && obj.indicator === "[]/0"; + }, + is_non_empty_list: function(obj) { + return obj instanceof Term && obj.indicator === "./2"; + }, + is_fully_list: function(obj) { + while (obj instanceof Term && obj.indicator === "./2") { + obj = obj.args[1]; + } + return obj instanceof Var || obj instanceof Term && obj.indicator === "[]/0"; + }, + is_instantiated_list: function(obj) { + while (obj instanceof Term && obj.indicator === "./2") { + obj = obj.args[1]; + } + return obj instanceof Term && obj.indicator === "[]/0"; + }, + is_unitary_list: function(obj) { + return obj instanceof Term && obj.indicator === "./2" && obj.args[1] instanceof Term && obj.args[1].indicator === "[]/0"; + }, + is_character: function(obj) { + return obj instanceof Term && obj.args.length === 0 && (obj.id.length === 1 || obj.id.length > 0 && obj.id.length <= 2 && codePointAt(obj.id, 0) >= 65536); + }, + is_in_character: function(obj) { + return obj instanceof Term && (obj.indicator === "end_of_file/0" || obj.id.length === 1 || obj.id.length > 0 && obj.id.length <= 2 && codePointAt(obj.id, 0) >= 65536); + }, + is_character_code: function(obj) { + return obj instanceof Num && !obj.is_float && obj.value >= 0 && obj.value <= 1114111; + }, + is_in_character_code: function(obj) { + return obj instanceof Num && !obj.is_float && obj.value >= -1 && obj.value <= 1114111; + }, + is_byte: function(obj) { + return obj instanceof Num && !obj.is_float && obj.value >= 0 && obj.value <= 255; + }, + is_in_byte: function(obj) { + return obj instanceof Num && !obj.is_float && obj.value >= -1 && obj.value <= 255; + }, + is_operator: function(obj) { + return obj instanceof Term && pl.arithmetic.evaluation[obj.indicator]; + }, + is_directive: function(obj) { + return obj instanceof Term && (pl.directive[obj.indicator] !== void 0 || pl.directive[obj.id + "/*"] !== void 0); + }, + is_builtin: function(obj) { + return obj instanceof Term && pl.builtin.rules.hasOwnProperty(obj.indicator) && obj.indicator !== "goal_expansion/2"; + }, + is_error: function(obj) { + return obj instanceof Term && obj.indicator === "throw/1"; + }, + is_error_state: function(obj) { + return pl.type.is_state(obj) && obj.error && obj.error === true; + }, + is_predicate_indicator: function(obj) { + return obj instanceof Term && obj.indicator === "//2" && obj.args[0] instanceof Term && obj.args[0].args.length === 0 && obj.args[1] instanceof Num && obj.args[1].is_float === false; + }, + is_flag: function(obj) { + return obj instanceof Term && obj.args.length === 0 && pl.flag[obj.id] !== void 0; + }, + is_value_flag: function(flag, obj) { + if (!pl.type.is_flag(flag)) + return false; + for (var value in pl.flag[flag.id].allowed) { + if (!pl.flag[flag.id].allowed.hasOwnProperty(value)) + continue; + if (pl.flag[flag.id].allowed[value].equals(obj)) + return true; + } + return false; + }, + is_io_mode: function(obj) { + return pl.type.is_atom(obj) && ["read", "write", "append"].indexOf(obj.id) !== -1; + }, + is_stream_option: function(obj) { + return pl.type.is_term(obj) && (obj.indicator === "alias/1" && pl.type.is_atom(obj.args[0]) || obj.indicator === "reposition/1" && pl.type.is_atom(obj.args[0]) && (obj.args[0].id === "true" || obj.args[0].id === "false") || obj.indicator === "type/1" && pl.type.is_atom(obj.args[0]) && (obj.args[0].id === "text" || obj.args[0].id === "binary") || obj.indicator === "eof_action/1" && pl.type.is_atom(obj.args[0]) && (obj.args[0].id === "error" || obj.args[0].id === "eof_code" || obj.args[0].id === "reset")); + }, + is_stream_position: function(obj) { + return pl.type.is_term(obj) && (obj.indicator === "end_of_stream/0" || obj.indicator === "past_end_of_stream/0" || obj.indicator === "position/3" && pl.type.is_integer(obj.args[0]) && pl.type.is_integer(obj.args[1]) && pl.type.is_integer(obj.args[2])); + }, + is_stream_property: function(obj) { + return pl.type.is_term(obj) && (obj.indicator === "input/0" || obj.indicator === "output/0" || obj.indicator === "alias/1" && (pl.type.is_variable(obj.args[0]) || pl.type.is_atom(obj.args[0])) || obj.indicator === "file_name/1" && (pl.type.is_variable(obj.args[0]) || pl.type.is_atom(obj.args[0])) || obj.indicator === "reposition/1" && (pl.type.is_variable(obj.args[0]) || pl.type.is_atom(obj.args[0]) && (obj.args[0].id === "true" || obj.args[0].id === "false")) || obj.indicator === "type/1" && (pl.type.is_variable(obj.args[0]) || pl.type.is_atom(obj.args[0]) && (obj.args[0].id === "text" || obj.args[0].id === "binary")) || obj.indicator === "mode/1" && (pl.type.is_variable(obj.args[0]) || pl.type.is_atom(obj.args[0]) && (obj.args[0].id === "read" || obj.args[0].id === "write" || obj.args[0].id === "append")) || obj.indicator === "eof_action/1" && (pl.type.is_variable(obj.args[0]) || pl.type.is_atom(obj.args[0]) && (obj.args[0].id === "error" || obj.args[0].id === "eof_code" || obj.args[0].id === "reset")) || obj.indicator === "end_of_stream/1" && (pl.type.is_variable(obj.args[0]) || pl.type.is_atom(obj.args[0]) && (obj.args[0].id === "at" || obj.args[0].id === "past" || obj.args[0].id === "not")) || obj.indicator === "position/1" && (pl.type.is_variable(obj.args[0]) || pl.type.is_term(obj.args[0]) && obj.args[0].indicator === "position/3" && (pl.type.is_variable(obj.args[0].args[0]) || pl.type.is_integer(obj.args[0].args[0])) && (pl.type.is_variable(obj.args[0].args[1]) || pl.type.is_integer(obj.args[0].args[1])) && (pl.type.is_variable(obj.args[0].args[2]) || pl.type.is_integer(obj.args[0].args[2])))); + }, + is_streamable: function(obj) { + return obj.__proto__.stream !== void 0; + }, + is_read_option: function(obj) { + return pl.type.is_term(obj) && ["variables/1", "variable_names/1", "singletons/1"].indexOf(obj.indicator) !== -1; + }, + is_write_option: function(obj) { + return pl.type.is_term(obj) && (obj.indicator === "quoted/1" && pl.type.is_atom(obj.args[0]) && (obj.args[0].id === "true" || obj.args[0].id === "false") || obj.indicator === "ignore_ops/1" && pl.type.is_atom(obj.args[0]) && (obj.args[0].id === "true" || obj.args[0].id === "false") || obj.indicator === "numbervars/1" && pl.type.is_atom(obj.args[0]) && (obj.args[0].id === "true" || obj.args[0].id === "false") || obj.indicator === "variable_names/1" && pl.type.is_fully_list(obj.args[0])); + }, + is_close_option: function(obj) { + return pl.type.is_term(obj) && obj.indicator === "force/1" && pl.type.is_atom(obj.args[0]) && (obj.args[0].id === "true" || obj.args[0].id === "false"); + }, + is_modifiable_flag: function(obj) { + return pl.type.is_flag(obj) && pl.flag[obj.id].changeable; + }, + is_module: function(obj) { + return obj instanceof Module; + }, + is_file: function(obj) { + return obj instanceof TauFile; + }, + is_directory: function(obj) { + return obj instanceof TauDirectory; + }, + is_predicate_property: function(obj) { + return pl.type.is_term(obj) && (obj.indicator === "built_in/0" || obj.indicator === "static/0" || obj.indicator === "dynamic/0" || obj.indicator === "native_code/0" || obj.indicator === "multifile/0" || obj.indicator === "meta_predicate/1"); + }, + is_meta_argument_specifier: function(obj) { + return pl.type.is_integer(obj) && obj.value >= 0 || pl.type.is_atom(obj) && indexOf(["+", "-", "?", "*", "^", ":", "//"], obj.id) !== -1; + }, + is_time_property: function(obj) { + return pl.type.is_term(obj) && obj.args.length === 1 && (pl.type.is_variable(obj.args[0]) || pl.type.is_integer(obj.args[0])) && indexOf(["year", "month", "day", "hours", "minutes", "seconds", "milliseconds", "weekday"], obj.id) !== -1; + } + }, + arithmetic: { + evaluation: { + "e/0": { + type_args: null, + type_result: true, + fn: function(_) { + return Math.E; + } + }, + "pi/0": { + type_args: null, + type_result: true, + fn: function(_) { + return Math.PI; + } + }, + "tau/0": { + type_args: null, + type_result: true, + fn: function(_) { + return 2 * Math.PI; + } + }, + "epsilon/0": { + type_args: null, + type_result: true, + fn: function(_) { + return Number.EPSILON; + } + }, + "+/1": { + type_args: null, + type_result: null, + fn: function(x, _) { + return x; + } + }, + "-/1": { + type_args: null, + type_result: null, + fn: function(x, _) { + return -x; + } + }, + "\\/1": { + type_args: false, + type_result: false, + fn: function(x, _) { + return ~x; + } + }, + "abs/1": { + type_args: null, + type_result: null, + fn: function(x, _) { + return Math.abs(x); + } + }, + "sign/1": { + type_args: null, + type_result: null, + fn: function(x, _) { + return Math.sign(x); + } + }, + "float_integer_part/1": { + type_args: true, + type_result: false, + fn: function(x, _) { + return parseInt(x); + } + }, + "float_fractional_part/1": { + type_args: true, + type_result: true, + fn: function(x, _) { + return x - parseInt(x); + } + }, + "float/1": { + type_args: null, + type_result: true, + fn: function(x, _) { + return parseFloat(x); + } + }, + "floor/1": { + type_args: true, + type_result: false, + fn: function(x, _) { + return Math.floor(x); + } + }, + "truncate/1": { + type_args: true, + type_result: false, + fn: function(x, _) { + return parseInt(x); + } + }, + "round/1": { + type_args: true, + type_result: false, + fn: function(x, _) { + return Math.round(x); + } + }, + "ceiling/1": { + type_args: true, + type_result: false, + fn: function(x, _) { + return Math.ceil(x); + } + }, + "sin/1": { + type_args: null, + type_result: true, + fn: function(x, _) { + return Math.sin(x); + } + }, + "cos/1": { + type_args: null, + type_result: true, + fn: function(x, _) { + return Math.cos(x); + } + }, + "tan/1": { + type_args: null, + type_result: true, + fn: function(x, _) { + return Math.tan(x); + } + }, + "asin/1": { + type_args: null, + type_result: true, + fn: function(x, thread) { + return Math.abs(x) <= 1 ? Math.asin(x) : pl.error.evaluation("undefined", thread.__call_indicator); + } + }, + "acos/1": { + type_args: null, + type_result: true, + fn: function(x, thread) { + return Math.abs(x) <= 1 ? Math.acos(x) : pl.error.evaluation("undefined", thread.__call_indicator); + } + }, + "atan/1": { + type_args: null, + type_result: true, + fn: function(x, _) { + return Math.atan(x); + } + }, + "atan2/2": { + type_args: null, + type_result: true, + fn: function(x, y, thread) { + return x === 0 && y === 0 ? pl.error.evaluation("undefined", thread.__call_indicator) : Math.atan2(x, y); + } + }, + "acosh/1": { + type_args: null, + type_result: true, + fn: function(x, thread) { + return x >= 1 ? Math.acosh(x) : pl.error.evaluation("undefined", thread.__call_indicator); + } + }, + "asinh/1": { + type_args: null, + type_result: true, + fn: function(x, _) { + return Math.asinh(x); + } + }, + "atanh/1": { + type_args: null, + type_result: true, + fn: function(x, thread) { + return Math.abs(x) < 1 ? Math.atanh(x) : pl.error.evaluation("undefined", thread.__call_indicator); + } + }, + "cosh/1": { + type_args: null, + type_result: true, + fn: function(x, _) { + return Math.cosh(x); + } + }, + "sinh/1": { + type_args: null, + type_result: true, + fn: function(x, _) { + return Math.sinh(x); + } + }, + "tanh/1": { + type_args: null, + type_result: true, + fn: function(x, _) { + return Math.tanh(x); + } + }, + "exp/1": { + type_args: null, + type_result: true, + fn: function(x, _) { + return Math.exp(x); + } + }, + "sqrt/1": { + type_args: null, + type_result: true, + fn: function(x, thread) { + return x >= 0 ? Math.sqrt(x) : pl.error.evaluation("undefined", thread.__call_indicator); + } + }, + "log/1": { + type_args: null, + type_result: true, + fn: function(x, thread) { + return x > 0 ? Math.log(x) : pl.error.evaluation("undefined", thread.__call_indicator); + } + }, + "log/2": { + type_args: null, + type_result: true, + fn: function(x, y, thread) { + return x > 0 && y > 0 ? Math.log(y) / Math.log(x) : pl.error.evaluation("undefined", thread.__call_indicator); + } + }, + "log10/1": { + type_args: null, + type_result: true, + fn: function(x, thread) { + return x > 0 ? Math.log(x) / Math.log(10) : pl.error.evaluation("undefined", thread.__call_indicator); + } + }, + "+/2": { + type_args: null, + type_result: null, + fn: function(x, y, _) { + return x + y; + } + }, + "-/2": { + type_args: null, + type_result: null, + fn: function(x, y, _) { + return x - y; + } + }, + "*/2": { + type_args: null, + type_result: null, + fn: function(x, y, _) { + return x * y; + } + }, + "//2": { + type_args: null, + type_result: true, + fn: function(x, y, thread) { + return y ? x / y : pl.error.evaluation("zero_divisor", thread.__call_indicator); + } + }, + "///2": { + type_args: false, + type_result: false, + fn: function(x, y, thread) { + return y ? Math.trunc(x / y) : pl.error.evaluation("zero_divisor", thread.__call_indicator); + } + }, + "div/2": { + type_args: false, + type_result: false, + fn: function(x, y, thread) { + return y ? Math.floor(x / y) : pl.error.evaluation("zero_divisor", thread.__call_indicator); + } + }, + "**/2": { + type_args: null, + type_result: true, + fn: function(x, y, thread) { + return x == 0 && y < 0 ? pl.error.evaluation("zero_divisor", thread.__call_indicator) : Math.pow(x, y); + } + }, + "^/2": { + type_args: null, + type_result: null, + fn: function(x, y, thread) { + return x == 0 && y < 0 ? pl.error.evaluation("zero_divisor", thread.__call_indicator) : Math.pow(x, y); + } + }, + "<>/2": { + type_args: false, + type_result: false, + fn: function(x, y, _) { + return x >> y; + } + }, + "/\\/2": { + type_args: false, + type_result: false, + fn: function(x, y, _) { + return x & y; + } + }, + "\\//2": { + type_args: false, + type_result: false, + fn: function(x, y, _) { + return x | y; + } + }, + "xor/2": { + type_args: false, + type_result: false, + fn: function(x, y, _) { + return x ^ y; + } + }, + "rem/2": { + type_args: false, + type_result: false, + fn: function(x, y, thread) { + return y ? x % y : pl.error.evaluation("zero_divisor", thread.__call_indicator); + } + }, + "mod/2": { + type_args: false, + type_result: false, + fn: function(x, y, thread) { + return y ? x - Math.floor(x / y) * y : pl.error.evaluation("zero_divisor", thread.__call_indicator); + } + }, + "max/2": { + type_args: null, + type_result: null, + fn: function(x, y, _) { + return Math.max(x, y); + } + }, + "min/2": { + type_args: null, + type_result: null, + fn: function(x, y, _) { + return Math.min(x, y); + } + }, + "gcd/2": { + type_args: false, + type_result: false, + fn: function(x, y, _) { + return gcd(x, y); + } + } + } + }, + directive: { + "dynamic/1": function(thread, atom, options) { + var indicators = atom.args[0]; + if (!pl.type.is_list(indicators)) + indicators = arrayToList([indicators]); + var pointer = indicators; + while (pl.type.is_term(pointer) && pointer.indicator === "./2") { + indicator = pointer.args[0]; + if (pl.type.is_variable(indicator)) { + thread.throw_warning(pl.error.instantiation(atom.indicator)); + } else if (!pl.type.is_compound(indicator) || indicator.indicator !== "//2") { + thread.throw_warning(pl.error.type("predicate_indicator", indicator, atom.indicator)); + } else if (pl.type.is_variable(indicator.args[0]) || pl.type.is_variable(indicator.args[1])) { + thread.throw_warning(pl.error.instantiation(atom.indicator)); + } else if (!pl.type.is_atom(indicator.args[0])) { + thread.throw_warning(pl.error.type("atom", indicator.args[0], atom.indicator)); + } else if (!pl.type.is_integer(indicator.args[1])) { + thread.throw_warning(pl.error.type("integer", indicator.args[1], atom.indicator)); + } else { + var key = indicator.args[0].id + "/" + indicator.args[1].value; + var get_module = thread.session.modules[options.context_module]; + get_module.public_predicates[key] = true; + if (!get_module.rules[key]) + get_module.rules[key] = []; + } + pointer = pointer.args[1]; + } + if (pl.type.is_variable(pointer)) { + thread.throw_warning(pl.error.instantiation(atom.indicator)); + } else if (!pl.type.is_term(pointer) || pointer.indicator !== "[]/0") { + thread.throw_warning(pl.error.type("predicate_indicator", indicator, atom.indicator)); + } + }, + "dynamic/*": function(thread, atom) { + for (var i2 = 0; i2 < atom.args.length; i2++) { + pl.directive["dynamic/1"](thread, new Term("dynamic", [atom.args[i2]])); + } + }, + "multifile/1": function(thread, atom, options) { + var indicator2 = atom.args[0]; + if (pl.type.is_variable(indicator2)) { + thread.throw_warning(pl.error.instantiation(atom.indicator)); + } else if (!pl.type.is_compound(indicator2) || indicator2.indicator !== "//2") { + thread.throw_warning(pl.error.type("predicate_indicator", indicator2, atom.indicator)); + } else if (pl.type.is_variable(indicator2.args[0]) || pl.type.is_variable(indicator2.args[1])) { + thread.throw_warning(pl.error.instantiation(atom.indicator)); + } else if (!pl.type.is_atom(indicator2.args[0])) { + thread.throw_warning(pl.error.type("atom", indicator2.args[0], atom.indicator)); + } else if (!pl.type.is_integer(indicator2.args[1])) { + thread.throw_warning(pl.error.type("integer", indicator2.args[1], atom.indicator)); + } else { + var predicate_indicator = atom.args[0].args[0].id + "/" + atom.args[0].args[1].value; + var get_module = thread.session.modules[options.context_module]; + get_module.multifile_predicates[predicate_indicator] = true; + if (!get_module.rules.hasOwnProperty(predicate_indicator)) { + get_module.rules[predicate_indicator] = []; + get_module.public_predicates[predicate_indicator] = false; + } + } + }, + "meta_predicate/1": function(thread, atom, options) { + var options = options === void 0 ? {} : options; + var head = atom.args[0]; + if (pl.type.is_variable(head)) { + thread.throw_warning(pl.error.instantiation(atom.indicator)); + } else if (!pl.type.is_callable(head)) { + thread.throw_warning(pl.error.type("callable", head, atom.indicator)); + } else { + for (var i2 = 0; i2 < head.args.length; i2++) { + var arg = head.args[i2]; + if (!pl.type.is_meta_argument_specifier(arg)) { + thread.throw_warning(pl.error.type("meta_argument_specifier", arg, atom.indicator)); + return; + } + } + thread.session.modules[options.context_module].meta_predicates[head.indicator] = head; + } + }, + "set_prolog_flag/2": function(thread, atom) { + var flag = atom.args[0], value = atom.args[1]; + if (pl.type.is_variable(flag) || pl.type.is_variable(value)) { + thread.throw_warning(pl.error.instantiation(atom.indicator)); + } else if (!pl.type.is_atom(flag)) { + thread.throw_warning(pl.error.type("atom", flag, atom.indicator)); + } else if (!pl.type.is_flag(flag)) { + thread.throw_warning(pl.error.domain("prolog_flag", flag, atom.indicator)); + } else if (!pl.type.is_modifiable_flag(flag)) { + thread.throw_warning(pl.error.permission("modify", "flag", flag, atom.indicator)); + } else if (!pl.type.is_value_flag(flag, value)) { + thread.throw_warning(pl.error.domain("flag_value", new Term("+", [flag, value]), atom.indicator)); + } else { + thread.session.flag[flag.id] = value; + } + }, + "module/2": function(thread, atom, options) { + var options = options === void 0 ? {} : options; + options.context_module = options.context_module === void 0 ? "user" : options.context_module; + var module_id = atom.args[0], exports2 = atom.args[1]; + if (pl.type.is_variable(module_id) || pl.type.is_variable(exports2)) { + thread.throw_warning(pl.error.instantiation(atom.indicator)); + } else if (!pl.type.is_atom(module_id)) { + thread.throw_warning(pl.error.type("atom", module_id, atom.indicator)); + } else if (!pl.type.is_list(exports2)) { + thread.throw_warning(pl.error.type("list", exports2, atom.indicator)); + } else { + if (!pl.type.is_module(thread.session.modules[module_id.indicator])) { + var pointer = exports2; + var indicators = []; + while (pl.type.is_term(pointer) && pointer.indicator === "./2") { + var predicate = pointer.args[0]; + if (!pl.type.is_predicate_indicator(predicate)) { + thread.throw_warning(pl.error.type("predicate_indicator", predicate, atom.indicator)); + } else { + indicators.push(predicate.args[0].id + "/" + predicate.args[1].value); + } + pointer = pointer.args[1]; + } + if (pl.type.is_variable(pointer)) { + thread.throw_warning(pl.error.instantiation(atom.indicator)); + } else if (!pl.type.is_empty_list(pointer)) { + thread.throw_warning(pl.error.type("list", exports2, atom.indicator)); + } + var new_module = new Module(module_id.id, {}, indicators, { + session: thread.session + }); + thread.session.modules[module_id.id] = new_module; + thread.session.modules[options.context_module].modules[module_id.id] = new_module; + options.context_module = module_id.id; + } else { + thread.throw_warning(pl.error.permission("create", "module", module_id, atom.indicator)); + } + } + }, + "use_module/1": function(thread, atom, options) { + var options = options === void 0 ? {} : options; + options.context_module = options.context_module === void 0 ? "user" : options.context_module; + var module_id = atom.args[0]; + if (pl.type.is_variable(module_id)) { + thread.throw_warning(pl.error.instantiation(atom.indicator)); + } else if (!pl.type.is_term(module_id)) { + thread.throw_warning(pl.error.type("term", module_id, atom.indicator)); + } else { + if (module_id.indicator === "library/1") { + var name = module_id.args[0].id; + var get_module = pl.modules[name]; + if (pl.type.is_module(get_module)) { + if (!thread.session.modules[options.context_module].modules.hasOwnProperty(name)) { + thread.session.modules[name] = get_module; + thread.session.modules[options.context_module].modules[name] = get_module; + for (var i2 = 0; i2 < get_module.dependencies.length; i2++) { + var term = new Term("use_module", [new Term("library", [new Term(get_module.dependencies[i2])])]); + pl.directive["use_module/1"](thread, term, { + context_module: name + }); + } + } + } else { + thread.throw_warning(pl.error.existence("module", module_id, atom.indicator)); + } + } else { + var name = module_id.id; + thread.consult(name, { + context_module: options.context_module, + text: false, + success: function() { + parseProgram(thread, options.string, options); + }, + error: function() { + options.error(pl.error.existence("module", module_id, atom.indicator)); + } + }); + return true; + } + } + }, + "char_conversion/2": function(thread, atom, options) { + var inchar = atom.args[0], outchar = atom.args[1]; + if (pl.type.is_variable(inchar) || pl.type.is_variable(outchar)) { + thread.throw_warning(pl.error.instantiation(atom.indicator)); + } else if (!pl.type.is_character(inchar)) { + thread.throw_warning(pl.error.type("character", inchar, atom.indicator)); + } else if (!pl.type.is_character(outchar)) { + thread.throw_warning(pl.error.type("character", outchar, atom.indicator)); + } else { + if (inchar.id === outchar.id) { + delete thread.session.__char_conversion[inchar.id]; + } else { + thread.session.__char_conversion[inchar.id] = outchar.id; + } + options.tokens = options.tokenizer.get_tokens(options.current_token); + options.current_token = 0; + return true; + } + }, + "op/3": function(thread, atom) { + var priority = atom.args[0], type = atom.args[1], operators = atom.args[2]; + if (pl.type.is_atom(operators)) + operators = new Term(".", [operators, new Term("[]")]); + if (pl.type.is_variable(priority) || pl.type.is_variable(type) || pl.type.is_variable(operators)) { + thread.throw_warning(pl.error.instantiation(atom.indicator)); + } else if (!pl.type.is_integer(priority)) { + thread.throw_warning(pl.error.type("integer", priority, atom.indicator)); + } else if (!pl.type.is_atom(type)) { + thread.throw_warning(pl.error.type("atom", type, atom.indicator)); + } else if (!pl.type.is_list(operators)) { + thread.throw_warning(pl.error.type("list", operators, atom.indicator)); + } else if (pl.type.is_empty_list(operators)) { + thread.throw_warning(pl.error.permission("create", "operator", operators, atom.indicator)); + } else { + var pointer = operators; + while (pl.type.is_term(pointer) && pointer.indicator === "./2") { + var operator = pointer.args[0]; + pointer = pointer.args[1]; + if (pl.type.is_variable(operator)) { + thread.throw_warning(pl.error.instantiation(atom.indicator)); + } else if (!pl.type.is_atom(operator)) { + thread.throw_warning(pl.error.type("atom", operator, atom.indicator)); + } else if (priority.value < 0 || priority.value > 1200) { + thread.throw_warning(pl.error.domain("operator_priority", priority, atom.indicator)); + } else if (operator.id === ",") { + thread.throw_error(pl.error.permission("modify", "operator", operator, atom.indicator)); + } else if (operator.id === "{}") { + thread.throw_warning(pl.error.permission("create", "operator", operator, atom.indicator)); + } else if (operator.id === "[]") { + thread.throw_warning(pl.error.permission("create", "operator", operator, atom.indicator)); + } else if (operator.id === "|" && priority.value !== 0 && (priority.value < 1001 || type.id.length !== 3)) { + thread.throw_warning(pl.error.permission("create", "operator", operator, atom.indicator)); + } else if (["fy", "fx", "yf", "xf", "xfx", "yfx", "xfy"].indexOf(type.id) === -1) { + thread.throw_warning(pl.error.domain("operator_specifier", type, atom.indicator)); + } else { + var fix = { prefix: null, infix: null, postfix: null }; + for (var p in thread.session.__operators) { + if (!thread.session.__operators.hasOwnProperty(p)) + continue; + var classes = thread.session.__operators[p][operator.id]; + if (classes) { + if (indexOf(classes, "fx") !== -1) { + fix.prefix = { priority: p, type: "fx" }; + } + if (indexOf(classes, "fy") !== -1) { + fix.prefix = { priority: p, type: "fy" }; + } + if (indexOf(classes, "xf") !== -1) { + fix.postfix = { priority: p, type: "xf" }; + } + if (indexOf(classes, "yf") !== -1) { + fix.postfix = { priority: p, type: "yf" }; + } + if (indexOf(classes, "xfx") !== -1) { + fix.infix = { priority: p, type: "xfx" }; + } + if (indexOf(classes, "xfy") !== -1) { + fix.infix = { priority: p, type: "xfy" }; + } + if (indexOf(classes, "yfx") !== -1) { + fix.infix = { priority: p, type: "yfx" }; + } + } + } + var current_class; + switch (type.id) { + case "fy": + case "fx": + current_class = "prefix"; + break; + case "yf": + case "xf": + current_class = "postfix"; + break; + default: + current_class = "infix"; + break; + } + if (fix.infix && current_class === "postfix" || fix.postfix && current_class === "infix") { + thread.throw_warning(pl.error.permission("create", "operator", operator, atom.indicator)); + } else { + if (fix[current_class]) { + remove(thread.session.__operators[fix[current_class].priority][operator.id], fix[current_class].type); + if (thread.session.__operators[fix[current_class].priority][operator.id].length === 0) { + delete thread.session.__operators[fix[current_class].priority][operator.id]; + } + } + if (priority.value > 0) { + if (!thread.session.__operators[priority.value]) + thread.session.__operators[priority.value.toString()] = {}; + if (!thread.session.__operators[priority.value][operator.id]) + thread.session.__operators[priority.value][operator.id] = []; + thread.session.__operators[priority.value][operator.id].push(type.id); + } + } + } + } + if (pl.type.is_variable(pointer)) { + thread.throw_warning(pl.error.instantiation(atom.indicator)); + return; + } else if (!pl.type.is_term(pointer) || pointer.indicator !== "[]/0") { + thread.throw_warning(pl.error.type("list", operators, atom.indicator)); + return; + } + } + }, + "initialization/1": function(thread, atom, options) { + var goal = atom.args[0]; + options.initialization.push(goal); + } + }, + flag: { + bounded: { + allowed: [new Term("true"), new Term("false")], + value: new Term("true"), + changeable: false + }, + max_integer: { + allowed: [new Num(Number.MAX_SAFE_INTEGER)], + value: new Num(Number.MAX_SAFE_INTEGER), + changeable: false + }, + min_integer: { + allowed: [new Num(Number.MIN_SAFE_INTEGER)], + value: new Num(Number.MIN_SAFE_INTEGER), + changeable: false + }, + integer_rounding_function: { + allowed: [new Term("down"), new Term("toward_zero")], + value: new Term("toward_zero"), + changeable: false + }, + char_conversion: { + allowed: [new Term("on"), new Term("off")], + value: new Term("on"), + changeable: true + }, + debug: { + allowed: [new Term("on"), new Term("off")], + value: new Term("off"), + changeable: true + }, + max_arity: { + allowed: [new Term("unbounded")], + value: new Term("unbounded"), + changeable: false + }, + unknown: { + allowed: [new Term("error"), new Term("fail"), new Term("warning")], + value: new Term("error"), + changeable: true + }, + double_quotes: { + allowed: [new Term("chars"), new Term("codes"), new Term("atom")], + value: new Term("chars"), + changeable: true + }, + occurs_check: { + allowed: [new Term("false"), new Term("true")], + value: new Term("false"), + changeable: true + }, + dialect: { + allowed: [new Term("tau")], + value: new Term("tau"), + changeable: false + }, + version_data: { + allowed: [new Term("tau", [new Num(version.major, false), new Num(version.minor, false), new Num(version.patch, false), new Term(version.status)])], + value: new Term("tau", [new Num(version.major, false), new Num(version.minor, false), new Num(version.patch, false), new Term(version.status)]), + changeable: false + }, + nodejs: { + allowed: [new Term("true"), new Term("false")], + value: new Term(nodejs_flag ? "true" : "false"), + changeable: false + }, + argv: { + allowed: [nodejs_arguments], + value: nodejs_arguments, + changeble: false + } + }, + unify: function(t1, t2, occurs_check) { + occurs_check = occurs_check === void 0 ? false : occurs_check; + var left = Array.isArray(t1) ? t1 : [t1]; + var right = Array.isArray(t2) ? t2 : [t2]; + if (left.length !== right.length) + return null; + var subs = new Substitution(); + while (left.length > 0) { + var s = left.pop(); + var t = right.pop(); + if (pl.type.is_variable(s)) + s = s.apply(subs); + if (pl.type.is_variable(t)) + t = t.apply(subs); + if (s == t) + continue; + if (pl.type.is_term(s) && pl.type.is_term(t)) { + if (s.indicator !== t.indicator) + return null; + for (var i2 = s.args.length - 1; i2 >= 0; i2--) { + left.push(s.args[i2]); + right.push(t.args[i2]); + } + } else if (pl.type.is_number(s) && pl.type.is_number(t)) { + if (s.value !== t.value || s.is_float !== t.is_float) + return null; + } else if (pl.type.is_variable(s)) { + t = t.apply(subs); + if (pl.type.is_variable(t) && s.id === t.id) + continue; + if (occurs_check === true && indexOf(t.variables(), s.id) !== -1) + return null; + if (s.id !== "_") + subs.add(s.id, t); + } else if (pl.type.is_variable(t)) { + left.push(t); + right.push(s); + } else if (s.unify !== void 0) { + var user_subs = s.apply(subs).unify(t.apply(subs), occurs_check); + if (user_subs == null) + return null; + for (var i2 in user_subs.links) + subs.add(i2, user_subs.links[i2]); + } else { + return null; + } + } + return subs.apply(subs); + }, + is_rename: function(obj1, obj2, links) { + links = links || {}; + if (obj1.is_rename && obj2.is_rename) + return obj1.is_rename(obj2, links); + else if (obj1.equals && obj2.equals) + return obj1.equals(obj2); + else + return false; + }, + compare: function(obj1, obj2) { + var type = pl.type.compare(obj1, obj2); + return type !== 0 ? type : obj1.compare(obj2); + }, + arithmetic_compare: function(thread, obj1, obj2) { + var expr1 = obj1.interpret(thread); + if (!pl.type.is_number(expr1)) { + return expr1; + } else { + var expr2 = obj2.interpret(thread); + if (!pl.type.is_number(expr2)) { + return expr2; + } else { + return expr1.value < expr2.value ? -1 : expr1.value > expr2.value ? 1 : 0; + } + } + }, + operate: function(thread, obj) { + if (pl.type.is_operator(obj)) { + var op = pl.type.is_operator(obj); + var args = [], value; + var type = false; + for (var i2 = 0; i2 < obj.args.length; i2++) { + value = obj.args[i2].interpret(thread); + if (!pl.type.is_number(value)) { + return value; + } else if (op.type_args !== null && value.is_float !== op.type_args) { + return pl.error.type(op.type_args ? "float" : "integer", value, thread.__call_indicator); + } else { + args.push(value.value); + } + type = type || value.is_float; + } + args.push(thread); + value = pl.arithmetic.evaluation[obj.indicator].fn.apply(this, args); + if (obj.indicator === "^/2" && !type && value !== parseInt(value, 10)) + return pl.error.type("float", new Num(args[0], false), thread.__call_indicator); + type = op.type_result === null ? type : op.type_result; + if (pl.type.is_term(value)) { + return value; + } else if (value === Number.POSITIVE_INFINITY || value === Number.NEGATIVE_INFINITY) { + return pl.error.evaluation("float_overflow", thread.__call_indicator); + } else if (type === false && thread.get_flag("bounded").id === "true" && (value > thread.get_flag("max_integer").value || value < thread.get_flag("min_integer").value)) { + return pl.error.evaluation("int_overflow", thread.__call_indicator); + } else { + return new Num(value, type); + } + } else { + return pl.error.type("evaluable", str_indicator(obj.indicator), thread.__call_indicator); + } + }, + error: { + existence: function(type, object, indicator2) { + if (typeof object === "string") + object = str_indicator(object); + return new Term("error", [new Term("existence_error", [new Term(type), object]), str_indicator(indicator2)]); + }, + type: function(expected, found, indicator2) { + return new Term("error", [new Term("type_error", [new Term(expected), found]), str_indicator(indicator2)]); + }, + instantiation: function(indicator2) { + return new Term("error", [new Term("instantiation_error"), str_indicator(indicator2)]); + }, + uninstantiation: function(found, indicator2) { + return new Term("error", [new Term("uninstantiation_error", [new Term(found)]), str_indicator(indicator2)]); + }, + domain: function(expected, found, indicator2) { + return new Term("error", [new Term("domain_error", [new Term(expected), found]), str_indicator(indicator2)]); + }, + representation: function(flag, indicator2) { + return new Term("error", [new Term("representation_error", [new Term(flag)]), str_indicator(indicator2)]); + }, + permission: function(operation, type, found, indicator2) { + return new Term("error", [new Term("permission_error", [new Term(operation), new Term(type), found]), str_indicator(indicator2)]); + }, + evaluation: function(error, indicator2) { + return new Term("error", [new Term("evaluation_error", [new Term(error)]), str_indicator(indicator2)]); + }, + syntax: function(token, expected, last) { + token = token || { value: "", line: 0, column: 0, matches: [""], start: 0 }; + var position = last && token.matches.length > 0 ? token.start + token.matches[0].length : token.start; + var found = last ? new Term("token_not_found") : new Term("found", [new Term(token.value.toString())]); + var info = new Term(".", [new Term("line", [new Num(token.line + 1)]), new Term(".", [new Term("column", [new Num(position)]), new Term(".", [found, new Term("[]", [])])])]); + return new Term("error", [new Term("syntax_error", [new Term(expected)]), info]); + }, + syntax_by_predicate: function(expected, indicator2) { + return new Term("error", [new Term("syntax_error", [new Term(expected)]), str_indicator(indicator2)]); + } + }, + warning: { + singleton: function(variables, rule, line) { + var list = new Term("[]"); + for (var i2 = variables.length - 1; i2 >= 0; i2--) + list = new Term(".", [new Var(variables[i2]), list]); + return new Term("warning", [new Term("singleton_variables", [list, str_indicator(rule)]), new Term(".", [new Term("line", [new Num(line, false)]), new Term("[]")])]); + }, + failed_goal: function(goal, line) { + return new Term("warning", [new Term("failed_goal", [goal]), new Term(".", [new Term("line", [new Num(line, false)]), new Term("[]")])]); + } + }, + format_variable: function(id, variable) { + var charcode = variable && variable.length > 0 ? codePointAt(variable, 1) : 0; + if (variable === "_" || variable && variable[0] === "_" && (charcode === 95 || charcode >= 65 && charcode <= 90)) + return "__" + id; + return "_" + id; + }, + format_answer: function(answer, thread, options) { + if (thread instanceof Session) + thread = thread.thread; + var options = options ? options : {}; + options.session = thread ? thread.session : void 0; + if (pl.type.is_error(answer)) { + return "uncaught exception: " + answer.args[0].toString(options); + } else if (answer === false) { + return "false"; + } else if (answer === null) { + return "limit exceeded"; + } else { + var i2 = 0; + var str = ""; + if (pl.type.is_substitution(answer)) { + var dom = answer.domain(true); + for (var link in answer.links) { + if (!answer.links.hasOwnProperty(link)) + continue; + if (pl.type.is_variable(answer.links[link])) { + var links = {}; + links[answer.links[link].id] = new Var(link); + answer = answer.apply(new Substitution(links)); + } + } + answer = answer.filter(function(id, value) { + return !pl.type.is_variable(value) || pl.type.is_variable(value) && answer.has_attributes(id) || indexOf(dom, value.id) !== -1 && id !== value.id; + }); + } + for (var link in answer.links) { + if (!answer.links.hasOwnProperty(link)) + continue; + if (pl.type.is_variable(answer.links[link]) && link === answer.links[link].id) { + var attrs = answer.attrs[link]; + for (var module3 in attrs) { + if (!attrs.hasOwnProperty(module3)) + continue; + i2++; + if (str !== "") + str += ", "; + str += "put_attr(" + link + ", " + module3 + ", " + attrs[module3].toString(options) + ")"; + } + } else { + i2++; + if (str !== "") + str += ", "; + str += link.toString(options) + " = " + answer.links[link].toString(options, { priority: "700", class: "xfx", indicator: "=/2" }, "right"); + } + } + if (i2 === 0) { + return "true"; + } else { + return str; + } + } + }, + flatten_error: function(error) { + if (!pl.type.is_error(error)) + return null; + error = error.args[0]; + var obj = {}; + obj.type = error.args[0].id; + obj.thrown = obj.type === "syntax_error" ? null : error.args[1].id; + obj.expected = null; + obj.found = null; + obj.representation = null; + obj.existence = null; + obj.existence_type = null; + obj.line = null; + obj.column = null; + obj.permission_operation = null; + obj.permission_type = null; + obj.evaluation_type = null; + if (obj.type === "type_error" || obj.type === "domain_error") { + obj.expected = error.args[0].args[0].id; + obj.found = error.args[0].args[1].toString(); + } else if (obj.type === "syntax_error") { + if (error.args[1].indicator === "./2") { + obj.expected = error.args[0].args[0].id; + obj.found = error.args[1].args[1].args[1].args[0]; + obj.found = obj.found.id === "token_not_found" ? obj.found.id : obj.found.args[0].id; + obj.line = error.args[1].args[0].args[0].value; + obj.column = error.args[1].args[1].args[0].args[0].value; + } else { + obj.thrown = error.args[1].id; + } + } else if (obj.type === "permission_error") { + obj.found = error.args[0].args[2].toString(); + obj.permission_operation = error.args[0].args[0].id; + obj.permission_type = error.args[0].args[1].id; + } else if (obj.type === "evaluation_error") { + obj.evaluation_type = error.args[0].args[0].id; + } else if (obj.type === "representation_error") { + obj.representation = error.args[0].args[0].id; + } else if (obj.type === "existence_error") { + obj.existence = error.args[0].args[1].toString(); + obj.existence_type = error.args[0].args[0].id; + } + return obj; + }, + create: function(limit) { + return new pl.type.Session(limit); + } + }; + pl.builtin = new Module("system", { + "goal_expansion/2": [ + new Rule(new Term("goal_expansion", [new Term(",", [new Var("X"), new Var("Y")]), new Term(",", [new Var("X_"), new Var("Y_")])]), new Term(";", [new Term(",", [new Term("goal_expansion", [new Var("X"), new Var("X_")]), new Term(";", [new Term("goal_expansion", [new Var("Y"), new Var("Y_")]), new Term("=", [new Var("Y_"), new Var("Y")])])]), new Term(",", [new Term("=", [new Var("X"), new Var("X_")]), new Term("goal_expansion", [new Var("Y"), new Var("Y_")])])])), + new Rule(new Term("goal_expansion", [new Term(";", [new Var("X"), new Var("Y")]), new Term(";", [new Var("X_"), new Var("Y_")])]), new Term(";", [new Term(",", [new Term("goal_expansion", [new Var("X"), new Var("X_")]), new Term(";", [new Term("goal_expansion", [new Var("Y"), new Var("Y_")]), new Term("=", [new Var("Y_"), new Var("Y")])])]), new Term(",", [new Term("=", [new Var("X"), new Var("X_")]), new Term("goal_expansion", [new Var("Y"), new Var("Y_")])])])), + new Rule(new Term("goal_expansion", [new Term("->", [new Var("X"), new Var("Y")]), new Term("->", [new Var("X_"), new Var("Y_")])]), new Term(";", [new Term(",", [new Term("goal_expansion", [new Var("X"), new Var("X_")]), new Term(";", [new Term("goal_expansion", [new Var("Y"), new Var("Y_")]), new Term("=", [new Var("Y_"), new Var("Y")])])]), new Term(",", [new Term("=", [new Var("X"), new Var("X_")]), new Term("goal_expansion", [new Var("Y"), new Var("Y_")])])])), + new Rule(new Term("goal_expansion", [new Term("catch", [new Var("X"), new Var("Y"), new Var("Z")]), new Term("catch", [new Var("X_"), new Var("Y"), new Var("Z_")])]), new Term(";", [new Term(",", [new Term("goal_expansion", [new Var("X"), new Var("X_")]), new Term(";", [new Term("goal_expansion", [new Var("Z"), new Var("Z_")]), new Term("=", [new Var("Z_"), new Var("Z")])])]), new Term(",", [new Term("=", [new Var("X_"), new Var("X")]), new Term("goal_expansion", [new Var("Z"), new Var("Z_")])])])), + new Rule(new Term("goal_expansion", [new Term("\\+", [new Var("X")]), new Term("\\+", [new Var("X_")])]), new Term(",", [new Term("nonvar", [new Var("X")]), new Term("goal_expansion", [new Var("X"), new Var("X_")])])), + new Rule(new Term("goal_expansion", [new Term("once", [new Var("X")]), new Term("once", [new Var("X_")])]), new Term(",", [new Term("nonvar", [new Var("X")]), new Term("goal_expansion", [new Var("X"), new Var("X_")])])), + new Rule(new Term("goal_expansion", [new Term("findall", [new Var("X"), new Var("Y"), new Var("Z")]), new Term("findall", [new Var("X"), new Var("Y_"), new Var("Z")])]), new Term("goal_expansion", [new Var("Y"), new Var("Y_")])), + new Rule(new Term("goal_expansion", [new Term("setof", [new Var("X"), new Var("Y"), new Var("Z")]), new Term("findall", [new Var("X"), new Var("Y_"), new Var("Z")])]), new Term("goal_expansion", [new Var("Y"), new Var("Y_")])), + new Rule(new Term("goal_expansion", [new Term("bagof", [new Var("X"), new Var("Y"), new Var("Z")]), new Term("findall", [new Var("X"), new Var("Y_"), new Var("Z")])]), new Term("goal_expansion", [new Var("Y"), new Var("Y_")])), + new Rule(new Term("goal_expansion", [new Term("call", [new Var("X")]), new Term("call", [new Var("X_")])]), new Term(",", [new Term("nonvar", [new Var("X")]), new Term("goal_expansion", [new Var("X"), new Var("X_")])])), + new Rule(new Term("goal_expansion", [new Term("call", [new Var("X"), new Var("A1")]), new Term("call", [new Var("F_")])]), new Term(",", [new Term("=..", [new Var("F"), new Term(".", [new Var("X"), new Term(".", [new Var("A1"), new Term("[]", [])])])]), new Term("goal_expansion", [new Var("F"), new Var("F_")])])), + new Rule(new Term("goal_expansion", [new Term("call", [new Var("X"), new Var("A1"), new Var("A2")]), new Term("call", [new Var("F_")])]), new Term(",", [new Term("=..", [new Var("F"), new Term(".", [new Var("X"), new Term(".", [new Var("A1"), new Term(".", [new Var("A2"), new Term("[]", [])])])])]), new Term("goal_expansion", [new Var("F"), new Var("F_")])])), + new Rule(new Term("goal_expansion", [new Term("call", [new Var("X"), new Var("A1"), new Var("A2"), new Var("A3")]), new Term("call", [new Var("F_")])]), new Term(",", [new Term("=..", [new Var("F"), new Term(".", [new Var("X"), new Term(".", [new Var("A1"), new Term(".", [new Var("A2"), new Term(".", [new Var("A3"), new Term("[]", [])])])])])]), new Term("goal_expansion", [new Var("F"), new Var("F_")])])), + new Rule(new Term("goal_expansion", [new Term("call", [new Var("X"), new Var("A1"), new Var("A2"), new Var("A3"), new Var("A4")]), new Term("call", [new Var("F_")])]), new Term(",", [new Term("=..", [new Var("F"), new Term(".", [new Var("X"), new Term(".", [new Var("A1"), new Term(".", [new Var("A2"), new Term(".", [new Var("A3"), new Term(".", [new Var("A4"), new Term("[]", [])])])])])])]), new Term("goal_expansion", [new Var("F"), new Var("F_")])])), + new Rule(new Term("goal_expansion", [new Term("call", [new Var("X"), new Var("A1"), new Var("A2"), new Var("A3"), new Var("A4"), new Var("A5")]), new Term("call", [new Var("F_")])]), new Term(",", [new Term("=..", [new Var("F"), new Term(".", [new Var("X"), new Term(".", [new Var("A1"), new Term(".", [new Var("A2"), new Term(".", [new Var("A3"), new Term(".", [new Var("A4"), new Term(".", [new Var("A5"), new Term("[]", [])])])])])])])]), new Term("goal_expansion", [new Var("F"), new Var("F_")])])), + new Rule(new Term("goal_expansion", [new Term("call", [new Var("X"), new Var("A1"), new Var("A2"), new Var("A3"), new Var("A4"), new Var("A5"), new Var("A6")]), new Term("call", [new Var("F_")])]), new Term(",", [new Term("=..", [new Var("F"), new Term(".", [new Var("X"), new Term(".", [new Var("A1"), new Term(".", [new Var("A2"), new Term(".", [new Var("A3"), new Term(".", [new Var("A4"), new Term(".", [new Var("A5"), new Term(".", [new Var("A6"), new Term("[]", [])])])])])])])])]), new Term("goal_expansion", [new Var("F"), new Var("F_")])])), + new Rule(new Term("goal_expansion", [new Term("call", [new Var("X"), new Var("A1"), new Var("A2"), new Var("A3"), new Var("A4"), new Var("A5"), new Var("A6"), new Var("A7")]), new Term("call", [new Var("F_")])]), new Term(",", [new Term("=..", [new Var("F"), new Term(".", [new Var("X"), new Term(".", [new Var("A1"), new Term(".", [new Var("A2"), new Term(".", [new Var("A3"), new Term(".", [new Var("A4"), new Term(".", [new Var("A5"), new Term(".", [new Var("A6"), new Term(".", [new Var("A7"), new Term("[]", [])])])])])])])])])]), new Term("goal_expansion", [new Var("F"), new Var("F_")])])) + ], + "$push_global_stack/2": function(thread, point, atom) { + var stack = atom.args[0], value = atom.args[1]; + if (!pl.type.is_variable(stack)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else { + thread.push_global_stack(stack.id, value); + thread.success(point); + } + }, + "$flush_global_stack/3": function(thread, point, atom) { + var stack = atom.args[0], list = atom.args[1], tail = atom.args[2]; + if (!pl.type.is_variable(stack)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else { + var values = thread.flush_global_stack(stack.id, tail); + thread.prepend([new State( + point.goal.replace(new Term("=", [list, values])), + point.substitution, + point + )]); + } + }, + "$free_variable_set/3": function(thread, point, atom) { + var goal_in = atom.args[0], goal_out = atom.args[1], vars = atom.args[2]; + var bv = []; + var pointer = goal_in; + while (pl.type.is_term(pointer) && pointer.indicator === "^/2") { + bv = bv.concat(pointer.args[0].variables()); + pointer = pointer.args[1]; + } + var gv = pointer.variables(); + var fv = arrayToList(map(difference(gv, bv), function(v) { + return new Var(v); + })); + thread.prepend([ + new State( + point.goal.replace(new Term(",", [ + new Term("=", [goal_out, pointer]), + new Term("=", [vars, fv]) + ])), + point.substitution, + point + ) + ]); + }, + "$member/2": [ + new pl.type.Rule(new pl.type.Term("$member", [new pl.type.Var("X"), new pl.type.Term(".", [new pl.type.Var("X"), new pl.type.Var("_")])]), null), + new pl.type.Rule(new pl.type.Term("$member", [new pl.type.Var("X"), new pl.type.Term(".", [new pl.type.Var("_"), new pl.type.Var("Xs")])]), new pl.type.Term("$member", [new pl.type.Var("X"), new pl.type.Var("Xs")])) + ], + "$bind_bagof_keys/2": [ + new pl.type.Rule(new pl.type.Term("$bind_bagof_keys", [new pl.type.Term("[]", []), new pl.type.Var("_")]), null), + new pl.type.Rule(new pl.type.Term("$bind_bagof_keys", [new pl.type.Term(".", [new pl.type.Term("-", [new pl.type.Var("Key"), new pl.type.Var("_")]), new pl.type.Var("Bag")]), new pl.type.Var("Vars")]), new pl.type.Term(",", [new pl.type.Term("term_variables", [new pl.type.Var("Key"), new pl.type.Var("Vars"), new pl.type.Var("_")]), new pl.type.Term("$bind_bagof_keys", [new pl.type.Var("Bag"), new pl.type.Var("Vars")])])) + ], + "$findall/4": [ + new pl.type.Rule(new pl.type.Term("$findall", [new pl.type.Var("Template0"), new pl.type.Var("Goal0"), new pl.type.Var("Instances"), new pl.type.Var("Tail")]), new pl.type.Term(";", [new pl.type.Term(",", [new pl.type.Term("copy_term", [new pl.type.Term("-", [new pl.type.Var("Template0"), new pl.type.Var("Goal0")]), new pl.type.Term("-", [new pl.type.Var("Template1"), new pl.type.Var("Goal1")])]), new pl.type.Term(",", [new pl.type.Term("call", [new pl.type.Var("Goal1")]), new pl.type.Term(",", [new pl.type.Term("copy_term", [new pl.type.Var("Template1"), new pl.type.Var("Template2")]), new pl.type.Term(",", [new pl.type.Term("$push_global_stack", [new pl.type.Var("Var"), new pl.type.Var("Template2")]), new pl.type.Term("false", [])])])])]), new pl.type.Term("$flush_global_stack", [new pl.type.Var("Var"), new pl.type.Var("Instances"), new pl.type.Var("Tail")])])) + ], + "$bagof/3": [ + new pl.type.Rule(new pl.type.Term("$bagof", [new pl.type.Var("Template"), new pl.type.Var("Goal0"), new pl.type.Var("Answer")]), new pl.type.Term(",", [new pl.type.Term("$free_variable_set", [new pl.type.Term("^", [new pl.type.Var("Template"), new pl.type.Var("Goal0")]), new pl.type.Var("Goal1"), new pl.type.Var("FV")]), new pl.type.Term(",", [new pl.type.Term("findall", [new pl.type.Term("-", [new pl.type.Var("FV"), new pl.type.Var("Template")]), new pl.type.Var("Goal1"), new pl.type.Var("Answers"), new pl.type.Term("[]", [])]), new pl.type.Term(",", [new pl.type.Term("$bind_bagof_keys", [new pl.type.Var("Answers"), new pl.type.Var("_")]), new pl.type.Term(",", [new pl.type.Term("keygroup", [new pl.type.Var("Answers"), new pl.type.Var("KeyGroups")]), new pl.type.Term(",", [new pl.type.Term("keysort", [new pl.type.Var("KeyGroups"), new pl.type.Var("KeySorted")]), new pl.type.Term("$member", [new pl.type.Term("-", [new pl.type.Var("FV"), new pl.type.Var("Answer")]), new pl.type.Var("KeySorted")])])])])])])) + ], + "$setof/3": [ + new pl.type.Rule(new pl.type.Term("$setof", [new pl.type.Var("Template"), new pl.type.Var("Goal0"), new pl.type.Var("Answer")]), new pl.type.Term(",", [new pl.type.Term("$free_variable_set", [new pl.type.Term("^", [new pl.type.Var("Template"), new pl.type.Var("Goal0")]), new pl.type.Var("Goal1"), new pl.type.Var("FV")]), new pl.type.Term(",", [new pl.type.Term("findall", [new pl.type.Term("-", [new pl.type.Var("FV"), new pl.type.Var("Template")]), new pl.type.Var("Goal1"), new pl.type.Var("Answers"), new pl.type.Term("[]", [])]), new pl.type.Term(",", [new pl.type.Term("$bind_bagof_keys", [new pl.type.Var("Answers"), new pl.type.Var("_")]), new pl.type.Term(",", [new pl.type.Term("keygroup", [new pl.type.Var("Answers"), new pl.type.Var("KeyGroups")]), new pl.type.Term(",", [new pl.type.Term("keysort", [new pl.type.Var("KeyGroups"), new pl.type.Var("KeySorted")]), new pl.type.Term(",", [new pl.type.Term("$member", [new pl.type.Term("-", [new pl.type.Var("FV"), new pl.type.Var("Unsorted")]), new pl.type.Var("KeySorted")]), new pl.type.Term("sort", [new pl.type.Var("Unsorted"), new pl.type.Var("Answer")])])])])])])])) + ], + "$if/3": [ + new pl.type.Rule(new pl.type.Term("$if", [new pl.type.Var("If"), new pl.type.Var("Then"), new pl.type.Var("Else")]), new pl.type.Term(";", [new pl.type.Term(",", [new pl.type.Term("call", [new pl.type.Var("If")]), new pl.type.Term(",", [new pl.type.Term("$push_global_stack", [new pl.type.Var("Stack"), new pl.type.Var("_")]), new pl.type.Term("call", [new pl.type.Var("Then")])])]), new pl.type.Term(",", [new pl.type.Term("$flush_global_stack", [new pl.type.Var("Stack"), new pl.type.Term("[]", []), new pl.type.Term("[]", [])]), new pl.type.Term("call", [new pl.type.Var("Else")])])])) + ], + "put_attr/3": function(thread, point, atom) { + var variable = atom.args[0], module3 = atom.args[1], value = atom.args[2]; + if (!pl.type.is_variable(variable)) { + thread.throw_error(pl.error.type("variable", variable, atom.indicator)); + } else if (!pl.type.is_atom(module3)) { + thread.throw_error(pl.error.type("atom", module3, atom.indicator)); + } else { + var subs = point.substitution.set_attribute(variable.id, module3, value); + thread.prepend([new State(point.goal.replace(null), subs, point)]); + } + }, + "get_attr/3": function(thread, point, atom) { + var variable = atom.args[0], module3 = atom.args[1], value = atom.args[2]; + if (!pl.type.is_variable(variable)) { + thread.throw_error(pl.error.type("variable", variable, atom.indicator)); + } else if (!pl.type.is_atom(module3)) { + thread.throw_error(pl.error.type("atom", module3, atom.indicator)); + } else { + var attr = point.substitution.get_attribute(variable.id, module3); + if (attr) { + thread.prepend([new State( + point.goal.replace(new Term("=", [value, attr])), + point.substitution, + point + )]); + } + } + }, + "op/3": function(thread, point, atom) { + var priority = atom.args[0], type = atom.args[1], operators = atom.args[2]; + if (pl.type.is_atom(operators)) + operators = new Term(".", [operators, new Term("[]")]); + if (pl.type.is_variable(priority) || pl.type.is_variable(type) || pl.type.is_variable(operators)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if (!pl.type.is_integer(priority)) { + thread.throw_error(pl.error.type("integer", priority, atom.indicator)); + } else if (!pl.type.is_atom(type)) { + thread.throw_error(pl.error.type("atom", type, atom.indicator)); + } else if (!pl.type.is_list(operators)) { + thread.throw_error(pl.error.type("list", operators, atom.indicator)); + } else if (pl.type.is_empty_list(operators)) { + thread.throw_error(pl.error.permission("create", "operator", operators, atom.indicator)); + } else { + var pointer = operators; + while (pl.type.is_term(pointer) && pointer.indicator === "./2") { + var operator = pointer.args[0]; + pointer = pointer.args[1]; + if (pl.type.is_variable(operator)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + return; + } else if (!pl.type.is_atom(operator)) { + thread.throw_error(pl.error.type("atom", operator, atom.indicator)); + return; + } else if (priority.value < 0 || priority.value > 1200) { + thread.throw_error(pl.error.domain("operator_priority", priority, atom.indicator)); + return; + } else if (operator.id === ",") { + thread.throw_error(pl.error.permission("modify", "operator", operator, atom.indicator)); + return; + } else if (operator.id === "{}") { + thread.throw_error(pl.error.permission("create", "operator", operator, atom.indicator)); + return; + } else if (operator.id === "[]") { + thread.throw_error(pl.error.permission("create", "operator", operator, atom.indicator)); + return; + } else if (operator.id === "|" && priority.value !== 0 && (priority.value < 1001 || type.id.length !== 3)) { + thread.throw_error(pl.error.permission("create", "operator", operator, atom.indicator)); + return; + } else if (["fy", "fx", "yf", "xf", "xfx", "yfx", "xfy"].indexOf(type.id) === -1) { + thread.throw_error(pl.error.domain("operator_specifier", type, atom.indicator)); + return; + } else { + var fix = { prefix: null, infix: null, postfix: null }; + for (var p in thread.session.__operators) { + if (!thread.session.__operators.hasOwnProperty(p)) + continue; + var classes = thread.session.__operators[p][operator.id]; + if (classes) { + if (indexOf(classes, "fx") !== -1) { + fix.prefix = { priority: p, type: "fx" }; + } + if (indexOf(classes, "fy") !== -1) { + fix.prefix = { priority: p, type: "fy" }; + } + if (indexOf(classes, "xf") !== -1) { + fix.postfix = { priority: p, type: "xf" }; + } + if (indexOf(classes, "yf") !== -1) { + fix.postfix = { priority: p, type: "yf" }; + } + if (indexOf(classes, "xfx") !== -1) { + fix.infix = { priority: p, type: "xfx" }; + } + if (indexOf(classes, "xfy") !== -1) { + fix.infix = { priority: p, type: "xfy" }; + } + if (indexOf(classes, "yfx") !== -1) { + fix.infix = { priority: p, type: "yfx" }; + } + } + } + var current_class; + switch (type.id) { + case "fy": + case "fx": + current_class = "prefix"; + break; + case "yf": + case "xf": + current_class = "postfix"; + break; + default: + current_class = "infix"; + break; + } + if (fix.infix && current_class === "postfix" || fix.postfix && current_class === "infix") { + thread.throw_error(pl.error.permission("create", "operator", operator, atom.indicator)); + return; + } else { + if (fix[current_class]) { + remove(thread.session.__operators[fix[current_class].priority][operator.id], fix[current_class].type); + if (thread.session.__operators[fix[current_class].priority][operator.id].length === 0) { + delete thread.session.__operators[fix[current_class].priority][operator.id]; + } + } + if (priority.value > 0) { + if (!thread.session.__operators[priority.value]) + thread.session.__operators[priority.value.toString()] = {}; + if (!thread.session.__operators[priority.value][operator.id]) + thread.session.__operators[priority.value][operator.id] = []; + thread.session.__operators[priority.value][operator.id].push(type.id); + } + } + } + } + if (pl.type.is_variable(pointer)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + return; + } else if (!pl.type.is_term(pointer) || pointer.indicator !== "[]/0") { + thread.throw_error(pl.error.type("list", operators, atom.indicator)); + return; + } else { + thread.success(point); + } + } + }, + "current_op/3": function(thread, point, atom) { + var priority = atom.args[0], specifier = atom.args[1], operator = atom.args[2]; + var points = []; + if (!pl.type.is_variable(priority) && !pl.type.is_integer(priority)) { + thread.throw_error(pl.error.type("integer", priority, atom.indicator)); + } else if (pl.type.is_integer(priority) && (priority.value < 0 || priority.value > 1200)) { + thread.throw_error(pl.error.domain("operator_priority", priority, atom.indicator)); + } else if (!pl.type.is_variable(specifier) && !pl.type.is_atom(specifier)) { + thread.throw_error(pl.error.type("atom", specifier, atom.indicator)); + } else if (pl.type.is_atom(specifier) && indexOf(["fy", "fx", "yf", "xf", "xfx", "yfx", "xfy"], specifier.id) === -1) { + thread.throw_error(pl.error.domain("operator_specifier", specifier, atom.indicator)); + } else if (!pl.type.is_variable(operator) && !pl.type.is_atom(operator)) { + thread.throw_error(pl.error.type("atom", operator, atom.indicator)); + } else { + for (var p in thread.session.__operators) + for (var o in thread.session.__operators[p]) + for (var i2 = 0; i2 < thread.session.__operators[p][o].length; i2++) + points.push(new State( + point.goal.replace( + new Term(",", [ + new Term("=", [new Num(p, false), priority]), + new Term(",", [ + new Term("=", [new Term(thread.session.__operators[p][o][i2], []), specifier]), + new Term("=", [new Term(o, []), operator]) + ]) + ]) + ), + point.substitution, + point + )); + thread.prepend(points); + } + }, + ";/2": function(thread, point, atom) { + var left = atom.args[0], right = atom.args[1]; + var context_left = left.args[0]; + var free_left = left.indicator === ":/2" ? left.args[1] : left; + if (pl.type.is_term(free_left) && free_left.indicator === "->/2") { + var cond = left.indicator === ":/2" ? new Term(":", [context_left, new Term("call", [free_left.args[0]])]) : free_left.args[0]; + var then = left.indicator === ":/2" ? new Term(":", [context_left, free_left.args[1]]) : free_left.args[1]; + var otherwise = right; + var goal_fst = point.goal.replace(new Term(",", [cond, new Term(",", [new Term("!"), then])])); + var goal_snd = point.goal.replace(new Term(",", [new Term("!"), otherwise])); + thread.prepend([ + new State(goal_fst, point.substitution, point), + new State(goal_snd, point.substitution, point) + ]); + } else if (pl.type.is_term(free_left) && free_left.indicator === "*->/2") { + var cond = left.indicator === ":/2" ? new Term(":", [context_left, free_left.args[0]]) : free_left.args[0]; + var then = left.indicator === ":/2" ? new Term(":", [context_left, free_left.args[1]]) : free_left.args[1]; + var otherwise = right; + thread.prepend([new State( + point.goal.replace(new Term("$if", [cond, then, otherwise])), + point.substitution, + point + )]); + } else { + thread.prepend([ + new State(point.goal.replace(left), point.substitution, point), + new State(point.goal.replace(right), point.substitution, point) + ]); + } + }, + "!/0": function(thread, point, atom) { + var parent_cut, last_cut, states = []; + parent_cut = point; + last_cut = null; + while (parent_cut.parent !== null && parent_cut.parent.goal.search(atom)) { + last_cut = parent_cut; + parent_cut = parent_cut.parent; + if (parent_cut.goal !== null) { + var selected = parent_cut.goal.select(); + if (selected && selected.indicator === ":/2") + selected = selected.args[1]; + if (selected && selected.id === "call" && selected.search(atom)) { + parent_cut = last_cut; + break; + } + } + } + var setup_call_cleanup = null; + for (var i2 = thread.points.length - 1; i2 >= 0; i2--) { + var state = thread.points[i2]; + var node = state.parent; + while (node !== null && node !== parent_cut.parent) { + node = node.parent; + } + if (node === null && node !== parent_cut.parent) + states.push(state); + else if (state.setup_call_cleanup_goal) + setup_call_cleanup = state.setup_call_cleanup_goal; + } + thread.points = states.reverse(); + thread.prepend([new State( + point.goal.replace(setup_call_cleanup), + point.substitution, + point + )]); + }, + "\\+/1": function(thread, point, atom) { + var goal = atom.args[0]; + if (pl.type.is_variable(goal)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if (!pl.type.is_callable(goal)) { + thread.throw_error(pl.error.type("callable", goal, atom.indicator)); + } else { + thread.prepend([ + new State(point.goal.replace(new Term(",", [new Term(",", [new Term("call", [goal]), new Term("!", [])]), new Term("fail", [])])), point.substitution, point), + new State(point.goal.replace(null), point.substitution, point) + ]); + } + }, + "->/2": function(thread, point, atom) { + var cond = atom.args[0], then = atom.args[1]; + var goal = point.goal.replace(new Term(",", [ + new Term("call", [cond]), + new Term(",", [new Term("!"), then]) + ])); + thread.prepend([new State(goal, point.substitution, point)]); + }, + "*->/2": function(thread, point, atom) { + var cond = atom.args[0], then = atom.args[1]; + var goal = point.goal.replace(new Term(",", [ + new Term("call", [cond]), + then + ])); + thread.prepend([new State(goal, point.substitution, point)]); + }, + "fail/0": function(_1, _2, _3) { + }, + "false/0": function(_1, _2, _3) { + }, + "true/0": function(thread, point, _) { + thread.success(point); + }, + "call/1": callN(1), + "call/2": callN(2), + "call/3": callN(3), + "call/4": callN(4), + "call/5": callN(5), + "call/6": callN(6), + "call/7": callN(7), + "call/8": callN(8), + "once/1": function(thread, point, atom) { + var goal = atom.args[0]; + thread.prepend([new State(point.goal.replace(new Term(",", [new Term("call", [goal]), new Term("!", [])])), point.substitution, point)]); + }, + "forall/2": function(thread, point, atom) { + var generate = atom.args[0], test = atom.args[1]; + thread.prepend([new State(point.goal.replace(new Term("\\+", [new Term(",", [new Term("call", [generate]), new Term("\\+", [new Term("call", [test])])])])), point.substitution, point)]); + }, + "repeat/0": function(thread, point, _) { + thread.prepend([new State(point.goal.replace(null), point.substitution, point), point]); + }, + "throw/1": function(thread, point, atom) { + var error = atom.args[0]; + if (pl.type.is_variable(error)) { + thread.throw_error(pl.error.instantiation(thread.level.indicator)); + } else { + for (var i2 = 0; i2 < thread.points.length; i2++) { + var state = thread.points[i2]; + if (state.setup_call_cleanup_catch) { + thread.points = [new State( + new Term(",", [ + new Term("catch", [ + state.setup_call_cleanup_catch, + new Var("_"), + new Term("throw", [error]) + ]), + new Term("throw", [error]) + ]), + point.substitution, + point + )]; + return; + } + } + thread.throw_error(error); + } + }, + "catch/3": function(thread, point, atom) { + var goal = atom.args[0], catcher = atom.args[1], recover = atom.args[2]; + var nthread; + if (!point.catch) { + nthread = new Thread(thread.session); + nthread.debugger = thread.debugger; + nthread.format_success = function(state) { + return state.substitution; + }; + nthread.format_error = function(state) { + return state.goal; + }; + nthread.add_goal(goal, true, point); + point.catch = nthread; + } else { + nthread = point.catch; + } + var callback = function(answer) { + if (pl.type.is_error(answer)) { + var occurs_check = thread.get_flag("occurs_check").indicator === "true/0"; + var state = new State(); + var mgu = pl.unify(answer.args[0], catcher, occurs_check); + if (mgu !== null) { + state.substitution = point.substitution.apply(mgu); + state.goal = point.goal.replace(recover).apply(mgu); + state.parent = point; + thread.prepend([state]); + } else { + thread.throw_error(answer.args[0]); + } + } else if (answer !== false && answer !== null) { + var state = answer === null ? [] : new State( + point.goal.apply(answer).replace(null), + point.substitution.apply(answer), + point + ); + thread.prepend([state, point]); + } else if (answer === null) { + thread.prepend([point]); + if (thread.has_limit) + thread.current_limit = 0; + } + thread.again(answer !== null); + }; + nthread.answer(callback); + return true; + }, + "call_cleanup/2": function(thread, point, atom) { + var call = atom.args[0], cleanup = atom.args[1]; + if (pl.type.is_variable(call) || pl.type.is_variable(cleanup)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if (!pl.type.is_callable(call)) { + thread.throw_error(pl.error.type("callable", call, atom.indicator)); + } else if (!pl.type.is_callable(cleanup)) { + thread.throw_error(pl.error.type("callable", cleanup, atom.indicator)); + } else { + var nthread, callback; + if (point.hasOwnProperty("setup_call_cleanup_thread")) { + nthread = point.setup_call_cleanup_thread; + callback = point.setup_call_cleanup_callback; + } else { + var goal = new Term("call", [call]); + nthread = new Thread(thread.session); + nthread.add_goal(goal, true, point); + callback = function(answer) { + if (answer === null) { + var state = new State( + point.goal, + point.substitution, + point + ); + state.setup_call_cleanup_thread = nthread; + state.setup_call_cleanup_callback = callback; + thread.prepend([state]); + } else if (answer === false) { + var cleanup_and_fail = new Term(",", [ + new Term("call", [cleanup]), + new Term("fail") + ]); + var state = new State( + point.goal.replace(cleanup_and_fail), + point.substitution, + point + ); + thread.prepend([state]); + } else if (pl.type.is_error(answer)) { + var cleanup_and_throw = new Term(",", [ + new Term("call", [cleanup]), + answer + ]); + var state = new State( + point.goal.replace(cleanup_and_throw), + point.substitution, + point + ); + thread.prepend([state]); + } else { + if (nthread.points.length === 0) { + var state = new State( + point.goal.replace( + new Term("call", [cleanup]) + ).apply(answer), + point.substitution.apply(answer), + point + ); + thread.prepend([state]); + } else { + var state1 = new State( + point.goal.apply(answer).replace(null), + point.substitution.apply(answer), + point + ); + var state2 = new State( + point.goal, + point.substitution, + point + ); + state2.setup_call_cleanup_thread = nthread; + state2.setup_call_cleanup_callback = callback; + state2.setup_call_cleanup_goal = cleanup.apply(answer); + state2.setup_call_cleanup_catch = cleanup; + thread.prepend([state1, state2]); + } + } + thread.again(); + }; + } + nthread.answer(callback); + return true; + } + }, + "setup_call_cleanup/3": function(thread, point, atom) { + var setup = atom.args[0], call = atom.args[1], cleanup = atom.args[2]; + if (pl.type.is_variable(setup) || pl.type.is_variable(call) || pl.type.is_variable(cleanup)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if (!pl.type.is_callable(setup)) { + thread.throw_error(pl.error.type("callable", setup, atom.indicator)); + } else if (!pl.type.is_callable(call)) { + thread.throw_error(pl.error.type("callable", call, atom.indicator)); + } else if (!pl.type.is_callable(cleanup)) { + thread.throw_error(pl.error.type("callable", cleanup, atom.indicator)); + } else { + thread.prepend([new State( + point.goal.replace(new Term(",", [ + new Term("once", [setup]), + new Term("call_cleanup", [call, cleanup]) + ])), + point.substitution, + point + )]); + } + }, + "=/2": function(thread, point, atom) { + var occurs_check = thread.get_flag("occurs_check").indicator === "true/0"; + var state = new State(); + var mgu = pl.unify(atom.args[0], atom.args[1], occurs_check); + if (mgu !== null) { + state.goal = point.goal.apply(mgu).replace(null); + state.substitution = point.substitution.apply(mgu); + state.parent = point; + thread.prepend([state]); + } + }, + "unify_with_occurs_check/2": function(thread, point, atom) { + var state = new State(); + var mgu = pl.unify(atom.args[0], atom.args[1], true); + if (mgu !== null) { + state.goal = point.goal.apply(mgu).replace(null); + state.substitution = point.substitution.apply(mgu); + state.parent = point; + thread.prepend([state]); + } + }, + "\\=/2": function(thread, point, atom) { + var occurs_check = thread.get_flag("occurs_check").indicator === "true/0"; + var mgu = pl.unify(atom.args[0], atom.args[1], occurs_check); + if (mgu === null) { + thread.success(point); + } + }, + "subsumes_term/2": function(thread, point, atom) { + var general = atom.args[0], specific = atom.args[1]; + var vars1 = thread.next_free_variable(); + var vars2 = thread.next_free_variable(); + thread.prepend([new State( + point.goal.replace(new Term("\\+", [ + new Term("\\+", [ + new Term(",", [ + new Term("term_variables", [specific, vars1]), + new Term(",", [ + new Term("unify_with_occurs_check", [general, specific]), + new Term(",", [ + new Term("term_variables", [vars1, vars2]), + new Term("==", [vars1, vars2]) + ]) + ]) + ]) + ]) + ])), + point.substitution, + point + )]); + }, + "findall/3": function(thread, point, atom) { + var template = atom.args[0], goal = atom.args[1], instances = atom.args[2]; + var tail = new Term("[]", []); + thread.prepend([new State( + point.goal.replace(new Term("findall", [template, goal, instances, tail])), + point.substitution, + point + )]); + }, + "findall/4": function(thread, point, atom) { + var template = atom.args[0], goal = atom.args[1], instances = atom.args[2], tail = atom.args[3]; + var proper_goal = goal; + if (pl.type.is_term(goal) && goal.indicator === ":/2") + proper_goal = goal.args[1]; + if (pl.type.is_variable(proper_goal)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if (!pl.type.is_callable(proper_goal)) { + thread.throw_error(pl.error.type("callable", goal, atom.indicator)); + } else if (!pl.type.is_variable(instances) && !pl.type.is_list(instances)) { + thread.throw_error(pl.error.type("list", instances, atom.indicator)); + } else if (!pl.type.is_variable(tail) && !pl.type.is_list(tail)) { + thread.throw_error(pl.error.type("list", tail, atom.indicator)); + } else { + thread.prepend([new State( + point.goal.replace(new Term("$findall", [template, goal, instances, tail])), + point.substitution, + point + )]); + } + }, + "bagof/3": function(thread, point, atom) { + var template = atom.args[0], goal = atom.args[1], instances = atom.args[2]; + if (pl.type.is_variable(goal)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if (!pl.type.is_callable(goal)) { + thread.throw_error(pl.error.type("callable", goal, atom.indicator)); + } else if (!pl.type.is_variable(instances) && !pl.type.is_list(instances)) { + thread.throw_error(pl.error.type("list", instances, atom.indicator)); + } else { + thread.prepend([new State( + point.goal.replace(new Term("$bagof", [template, goal, instances])), + point.substitution, + point + )]); + } + }, + "setof/3": function(thread, point, atom) { + var template = atom.args[0], goal = atom.args[1], instances = atom.args[2]; + if (pl.type.is_variable(goal)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if (!pl.type.is_callable(goal)) { + thread.throw_error(pl.error.type("callable", goal, atom.indicator)); + } else if (!pl.type.is_variable(instances) && !pl.type.is_list(instances)) { + thread.throw_error(pl.error.type("list", instances, atom.indicator)); + } else { + thread.prepend([new State( + point.goal.replace(new Term("$setof", [template, goal, instances])), + point.substitution, + point + )]); + } + }, + "functor/3": function(thread, point, atom) { + var subs; + var term = atom.args[0], name = atom.args[1], arity = atom.args[2]; + if (pl.type.is_variable(term) && (pl.type.is_variable(name) || pl.type.is_variable(arity))) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if (!pl.type.is_variable(arity) && !pl.type.is_integer(arity)) { + thread.throw_error(pl.error.type("integer", atom.args[2], atom.indicator)); + } else if (!pl.type.is_variable(name) && !pl.type.is_atomic(name)) { + thread.throw_error(pl.error.type("atomic", atom.args[1], atom.indicator)); + } else if (pl.type.is_variable(term) && !pl.type.is_atom(name) && pl.type.is_integer(arity) && arity.value > 0) { + thread.throw_error(pl.error.type("atom", atom.args[1], atom.indicator)); + } else if (pl.type.is_variable(term) && pl.type.is_integer(arity) && arity.value < 0) { + thread.throw_error(pl.error.domain("not_less_than_zero", atom.args[2], atom.indicator)); + } else if (pl.type.is_variable(term)) { + if (atom.args[2].value >= 0) { + var args = []; + for (var i2 = 0; i2 < arity.value; i2++) + args.push(thread.next_free_variable()); + var functor = pl.type.is_number(name) ? name : new Term(name.id, args); + thread.prepend([new State(point.goal.replace(new Term("=", [term, functor])), point.substitution, point)]); + } + } else { + var id = pl.type.is_number(term) ? term : new Term(term.id, []); + var length = pl.type.is_number(term) ? new Num(0, false) : new Num(term.args.length, false); + var goal = new Term(",", [new Term("=", [id, name]), new Term("=", [length, arity])]); + thread.prepend([new State(point.goal.replace(goal), point.substitution, point)]); + } + }, + "arg/3": function(thread, point, atom) { + if (pl.type.is_variable(atom.args[0]) || pl.type.is_variable(atom.args[1])) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if (!pl.type.is_integer(atom.args[0])) { + thread.throw_error(pl.error.type("integer", atom.args[0], atom.indicator)); + } else if (atom.args[0].value < 0) { + thread.throw_error(pl.error.domain("not_less_than_zero", atom.args[0], atom.indicator)); + } else if (!pl.type.is_compound(atom.args[1])) { + thread.throw_error(pl.error.type("compound", atom.args[1], atom.indicator)); + } else { + var n = atom.args[0].value; + if (n > 0 && n <= atom.args[1].args.length) { + var goal = new Term("=", [atom.args[1].args[n - 1], atom.args[2]]); + thread.prepend([new State(point.goal.replace(goal), point.substitution, point)]); + } + } + }, + "=../2": function(thread, point, atom) { + var list; + if (pl.type.is_variable(atom.args[0]) && (pl.type.is_variable(atom.args[1]) || pl.type.is_non_empty_list(atom.args[1]) && pl.type.is_variable(atom.args[1].args[0]))) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if (!pl.type.is_fully_list(atom.args[1])) { + thread.throw_error(pl.error.type("list", atom.args[1], atom.indicator)); + } else if (pl.type.is_variable(atom.args[0]) && pl.type.is_empty_list(atom.args[1])) { + thread.throw_error(pl.error.domain("non_empty_list", atom.args[1], atom.indicator)); + } else if (!pl.type.is_variable(atom.args[0])) { + if (pl.type.is_term(atom.args[0]) && atom.args[0].args.length > 0) { + list = new Term("[]"); + for (var i2 = atom.args[0].args.length - 1; i2 >= 0; i2--) { + list = new Term(".", [atom.args[0].args[i2], list]); + } + list = new Term(".", [new Term(atom.args[0].id), list]); + } else { + list = new Term(".", [atom.args[0], new Term("[]")]); + } + thread.prepend([new State(point.goal.replace(new Term("=", [list, atom.args[1]])), point.substitution, point)]); + } else if (!pl.type.is_variable(atom.args[1])) { + var args = []; + list = atom.args[1].args[1]; + while (list.indicator === "./2") { + args.push(list.args[0]); + list = list.args[1]; + } + if (pl.type.is_variable(atom.args[0]) && pl.type.is_variable(list)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if (args.length === 0 && pl.type.is_compound(atom.args[1].args[0])) { + thread.throw_error(pl.error.type("atomic", atom.args[1].args[0], atom.indicator)); + } else if (args.length > 0 && (pl.type.is_compound(atom.args[1].args[0]) || pl.type.is_number(atom.args[1].args[0]))) { + thread.throw_error(pl.error.type("atom", atom.args[1].args[0], atom.indicator)); + } else { + if (args.length === 0) { + thread.prepend([new State(point.goal.replace(new Term("=", [atom.args[1].args[0], atom.args[0]], point)), point.substitution, point)]); + } else { + thread.prepend([new State(point.goal.replace(new Term("=", [new Term(atom.args[1].args[0].id, args), atom.args[0]])), point.substitution, point)]); + } + } + } + }, + "copy_term/2": function(thread, point, atom) { + var original_term = atom.args[0], renamed_term = atom.args[1]; + thread.session.renamed_variables = {}; + var new_term = original_term.rename(thread); + thread.session.renamed_variables = {}; + thread.prepend( + [ + new State( + point.goal.replace(new Term("=", [renamed_term, new_term])), + point.substitution, + point + ) + ] + ); + }, + "term_variables/2": [ + new pl.type.Rule(new pl.type.Term("term_variables", [new pl.type.Var("Term"), new pl.type.Var("Vars")]), new pl.type.Term("term_variables", [new pl.type.Var("Term"), new pl.type.Var("Vars"), new pl.type.Term("[]", [])])) + ], + "term_variables/3": function(thread, point, atom) { + var term = atom.args[0], vars = atom.args[1], tail = atom.args[2]; + if (!pl.type.is_fully_list(vars)) { + thread.throw_error(pl.error.type("list", vars, atom.indicator)); + } else { + var list = arrayToList(map(nub(term.variables()), function(v) { + return new Var(v); + }), tail); + thread.prepend([new State( + point.goal.replace(new Term("=", [vars, list])), + point.substitution, + point + )]); + } + }, + "numbervars/3": function(thread, point, atom) { + var term = atom.args[0], start = atom.args[1], end = atom.args[2]; + if (pl.type.is_variable(start)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if (!pl.type.is_integer(start)) { + thread.throw_error(pl.error.type("integer", start, atom.indicator)); + } else if (!pl.type.is_variable(end) && !pl.type.is_integer(end)) { + thread.throw_error(pl.error.type("integer", end, atom.indicator)); + } else { + var variables = nub(term.variables()); + var value = start.value; + var unif_body = new Term("true"); + for (var i2 = 0; i2 < variables.length; i2++) { + unif_body = new Term(",", [ + new Term("=", [ + new Var(variables[i2]), + new Term("$VAR", [new Num(value, false)]) + ]), + unif_body + ]); + value++; + } + var unif_end = new Term("=", [end, new Num(value, false)]); + if (pl.type.is_variable(end) || end.value === value) { + thread.prepend([new State( + point.goal.replace(new Term(",", [unif_body, unif_end])), + point.substitution, + point + )]); + } + } + }, + "clause/2": function(thread, point, atom) { + var head = atom.args[0], body = atom.args[1]; + var module_id = "user"; + if (pl.type.is_term(head) && head.indicator === ":/2") { + if (!pl.type.is_atom(head.args[0])) { + thread.throw_error(pl.error.type("module", head.args[0], atom.indicator)); + return; + } + module_id = head.args[0].id; + head = head.args[1]; + } + var get_module = thread.session.modules[module_id]; + if (pl.type.is_variable(head)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if (!pl.type.is_callable(head)) { + thread.throw_error(pl.error.type("callable", head, atom.indicator)); + } else if (!pl.type.is_variable(body) && !pl.type.is_callable(body)) { + thread.throw_error(pl.error.type("callable", body, atom.indicator)); + } else if (head.indicator === ",/2" || thread.session.modules.system.rules.hasOwnProperty(head.indicator)) { + thread.throw_error(pl.error.permission("access", "private_procedure", str_indicator(head.indicator), atom.indicator)); + } else if (pl.type.is_module(get_module) && get_module.rules[head.indicator]) { + if (get_module.is_public_predicate(head.indicator)) { + var states = []; + if (typeof get_module.rules[head.indicator] === "function") { + thread.throw_error(pl.error.permission("modify", "static_procedure", str_indicator(head.indicator), atom.indicator)); + return; + } + for (var i2 = 0; i2 < get_module.rules[head.indicator].length; i2++) { + var rule = get_module.rules[head.indicator][i2]; + thread.session.renamed_variables = {}; + rule = rule.rename(thread); + if (rule.body === null) + rule.body = new Term("true"); + var goal = new Term(",", [ + new Term("=", [rule.head, head]), + new Term("=", [rule.body, body]) + ]); + states.push(new State(point.goal.replace(goal), point.substitution, point)); + } + thread.prepend(states); + } else { + thread.throw_error(pl.error.permission("access", "private_procedure", str_indicator(head.indicator), atom.indicator)); + } + } + }, + "current_predicate/1": function(thread, point, atom) { + var indicator2 = atom.args[0]; + var module_id; + if (pl.type.is_term(indicator2) && indicator2.indicator === ":/2") { + if (!pl.type.is_atom(indicator2.args[0])) { + thread.throw_error(pl.error.type("module", indicator2.args[0], atom.indicator)); + return; + } + module_id = indicator2.args[0].id; + indicator2 = indicator2.args[1]; + } else { + module_id = "user"; + } + if (!pl.type.is_variable(indicator2) && (!pl.type.is_compound(indicator2) || indicator2.indicator !== "//2")) { + thread.throw_error(pl.error.type("predicate_indicator", indicator2, atom.indicator)); + } else if (!pl.type.is_variable(indicator2) && !pl.type.is_variable(indicator2.args[0]) && !pl.type.is_atom(indicator2.args[0])) { + thread.throw_error(pl.error.type("atom", indicator2.args[0], atom.indicator)); + } else if (!pl.type.is_variable(indicator2) && !pl.type.is_variable(indicator2.args[1]) && !pl.type.is_integer(indicator2.args[1])) { + thread.throw_error(pl.error.type("integer", indicator2.args[1], atom.indicator)); + } else if (!pl.type.is_variable(indicator2) && pl.type.is_integer(indicator2.args[1]) && indicator2.args[1].value < 0) { + thread.throw_error(pl.error.domain("not_less_than_zero", indicator2.args[1], atom.indicator)); + } else { + var states = []; + var get_module = thread.session.modules[module_id]; + if (pl.type.is_module(get_module)) { + for (var prop in get_module.rules) { + if (!get_module.rules.hasOwnProperty(prop)) + continue; + var predicate = str_indicator(prop); + var goal = new Term("=", [predicate, indicator2]); + states.push(new State(point.goal.replace(goal), point.substitution, point)); + } + thread.prepend(states); + } + } + }, + "current_module/1": function(thread, point, atom) { + var module_id = atom.args[0]; + if (!pl.type.is_variable(module_id) && !pl.type.is_atom(module_id)) { + thread.throw_error(pl.error.type("atom", module_id, atom.indicator)); + } else { + if (pl.type.is_variable(module_id)) { + var states = []; + for (var prop in thread.session.modules) { + if (!thread.session.modules.hasOwnProperty(prop)) + continue; + states.push(new State( + point.goal.replace(new Term("=", [module_id, new Term(prop)])), + point.substitution, + point + )); + } + thread.prepend(states); + } else { + if (thread.session.modules.hasOwnProperty(module_id.id)) + thread.success(point); + } + } + }, + "predicate_property/2": function(thread, point, atom) { + var head = atom.args[0], property = atom.args[1]; + var module_id; + if (pl.type.is_term(head) && head.indicator === ":/2") { + if (!pl.type.is_atom(head.args[0])) { + thread.throw_error(pl.error.type("module", head.args[0], atom.indicator)); + return; + } + module_id = head.args[0].id; + head = head.args[1]; + } + if (!pl.type.is_variable(head) && !pl.type.is_callable(head)) { + thread.throw_error(pl.error.type("callable", head, atom.indicator)); + } else if (!pl.type.is_variable(property) && !pl.type.is_predicate_property(property)) { + thread.throw_error(pl.error.domain("predicate_property", property, atom.indicator)); + } else { + var get_module = module_id ? thread.session.modules[module_id] : thread.session.modules.user; + var points = []; + if (pl.type.is_variable(head)) { + if (!module_id) { + for (var prop in pl.builtin.rules) { + if (!pl.builtin.rules.hasOwnProperty(prop)) + continue; + var indicator2 = str_indicator(prop); + var args = []; + for (var i2 = 0; i2 < indicator2.args[1].value; i2++) + args.push(thread.next_free_variable()); + var unif_head = new Term(indicator2.args[0].id, args); + var current_properties = [ + new Term("static"), + new Term("built_in"), + new Term("native_code") + ]; + if (pl.builtin.meta_predicates.hasOwnProperty(prop)) + current_properties.push(new Term("meta_predicate", [ + pl.builtin.meta_predicates[prop] + ])); + for (var i2 = 0; i2 < current_properties.length; i2++) { + if (pl.type.is_variable(property) || current_properties[i2].indicator === property.indicator) { + points.push(new State( + point.goal.replace(new Term(",", [ + new Term("=", [head, unif_head]), + new Term("=", [property, current_properties[i2]]) + ])), + point.substitution, + point + )); + } + } + } + } + if (pl.type.is_module(get_module)) { + for (var prop in get_module.rules) { + if (!get_module.rules.hasOwnProperty(prop)) + continue; + var indicator2 = str_indicator(prop); + var args = []; + for (var i2 = 0; i2 < indicator2.args[1].value; i2++) + args.push(thread.next_free_variable()); + var unif_head = new Term(indicator2.args[0].id, args); + var current_properties = []; + if (thread.is_public_predicate(prop, module_id)) + current_properties.push(new Term("dynamic")); + else + current_properties.push(new Term("static")); + if (get_module.rules[prop] instanceof Function) + current_properties.push(new Term("native_code")); + if (thread.is_multifile_predicate(prop, module_id)) + current_properties.push(new Term("multifile")); + if (get_module.meta_predicates.hasOwnProperty(prop)) + current_properties.push(new Term("meta_predicate", [ + get_module.meta_predicates[prop] + ])); + for (var i2 = 0; i2 < current_properties.length; i2++) { + if (pl.type.is_variable(property) || current_properties[i2].indicator === property.indicator) { + points.push(new State( + point.goal.replace(new Term(",", [ + new Term("=", [head, unif_head]), + new Term("=", [property, current_properties[i2]]) + ])), + point.substitution, + point + )); + } + } + } + } + } else { + var builtin = !module_id && pl.type.is_builtin(head); + var predicate = builtin ? pl.builtin.rules[head.indicator] : get_module.rules[head.indicator]; + get_module = builtin ? pl.builtin : get_module; + if (predicate) { + var current_properties; + if (builtin) { + current_properties = [ + new Term("static"), + new Term("built_in"), + new Term("native_code") + ]; + } else { + current_properties = []; + if (thread.is_public_predicate(head.indicator, module_id)) + current_properties.push(new Term("dynamic")); + else + current_properties.push(new Term("static")); + if (predicate instanceof Function) + current_properties.push(new Term("native_code")); + if (thread.is_multifile_predicate(head.indicator, module_id)) + current_properties.push(new Term("multifile")); + } + if (get_module.meta_predicates.hasOwnProperty(head.indicator)) + current_properties.push(new Term("meta_predicate", [ + get_module.meta_predicates[head.indicator] + ])); + var args = []; + for (var i2 = 0; i2 < head.args.length; i2++) + args.push(thread.next_free_variable()); + var unif_head = new Term(head.id, args); + for (var i2 = 0; i2 < current_properties.length; i2++) { + if (pl.type.is_variable(property) || current_properties[i2].indicator === property.indicator) { + points.push(new State( + point.goal.replace(new Term(",", [ + new Term("=", [head, unif_head]), + new Term("=", [property, current_properties[i2]]) + ])), + point.substitution, + point + )); + } + } + } + } + thread.prepend(points); + } + }, + "listing/0": function(thread, point, atom) { + var context_module = atom.context_module ? atom.context_module : "user"; + var rules2 = {}; + if (pl.type.is_module(thread.session.modules[context_module])) { + rules2 = thread.session.modules[context_module].rules; + } + var str = ""; + for (var indicator2 in rules2) { + if (!rules2.hasOwnProperty(indicator2)) + continue; + var predicate = rules2[indicator2]; + str += "% " + indicator2 + "\n"; + if (predicate instanceof Array) { + for (var i2 = 0; i2 < predicate.length; i2++) + str += predicate[i2].toString({ session: thread.session }) + "\n"; + } else { + str += "/*\n" + predicate.toString() + "\n*/"; + } + str += "\n"; + } + thread.prepend([new State( + point.goal.replace(new Term("write", [new Term(str, [])])), + point.substitution, + point + )]); + }, + "listing/1": function(thread, point, atom) { + var indicator2 = atom.args[0]; + var context_module = "user"; + if (indicator2.indicator === ":/2") { + context_module = indicator2.args[0].id; + indicator2 = indicator2.args[1]; + } + if (pl.type.is_variable(indicator2)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if (!pl.type.is_predicate_indicator(indicator2)) { + thread.throw_error(pl.error.type("predicate_indicator", indicator2, atom.indicator)); + } else { + var rules2 = {}; + if (pl.type.is_module(thread.session.modules[context_module])) { + rules2 = thread.session.modules[context_module].rules; + } + var str = ""; + var str_indicator2 = indicator2.args[0].id + "/" + indicator2.args[1].value; + if (rules2.hasOwnProperty(str_indicator2)) { + var predicate = rules2[str_indicator2]; + if (predicate instanceof Array) { + for (var i2 = 0; i2 < predicate.length; i2++) + str += predicate[i2].toString({ session: thread.session }) + "\n"; + } else { + str += "/*\n" + predicate.toString() + "\n*/"; + } + str += "\n"; + } + thread.prepend([new State( + point.goal.replace(new Term("write", [new Term(str, [])])), + point.substitution, + point + )]); + } + }, + "sort/2": function(thread, point, atom) { + var list = atom.args[0], expected = atom.args[1]; + if (pl.type.is_variable(list)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if (!pl.type.is_variable(expected) && !pl.type.is_fully_list(expected)) { + thread.throw_error(pl.error.type("list", expected, atom.indicator)); + } else { + var arr = []; + var pointer = list; + while (pointer.indicator === "./2") { + arr.push(pointer.args[0]); + pointer = pointer.args[1]; + } + if (pl.type.is_variable(pointer)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if (!pl.type.is_empty_list(pointer)) { + thread.throw_error(pl.error.type("list", list, atom.indicator)); + } else { + var sorted_arr = arr.sort(pl.compare); + for (var i2 = sorted_arr.length - 1; i2 > 0; i2--) { + if (sorted_arr[i2].equals(sorted_arr[i2 - 1])) + sorted_arr.splice(i2, 1); + } + var sorted_list = new Term("[]"); + for (var i2 = sorted_arr.length - 1; i2 >= 0; i2--) { + sorted_list = new Term(".", [sorted_arr[i2], sorted_list]); + } + thread.prepend([new State(point.goal.replace(new Term("=", [sorted_list, expected])), point.substitution, point)]); + } + } + }, + "keysort/2": function(thread, point, atom) { + var list = atom.args[0], expected = atom.args[1]; + if (pl.type.is_variable(list)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if (!pl.type.is_variable(expected) && !pl.type.is_fully_list(expected)) { + thread.throw_error(pl.error.type("list", expected, atom.indicator)); + } else { + var arr = []; + var elem; + var pointer = list; + while (pointer.indicator === "./2") { + elem = pointer.args[0]; + if (pl.type.is_variable(elem)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + return; + } else if (!pl.type.is_term(elem) || elem.indicator !== "-/2") { + thread.throw_error(pl.error.type("pair", elem, atom.indicator)); + return; + } + elem.args[0].pair = elem.args[1]; + arr.push(elem.args[0]); + pointer = pointer.args[1]; + } + if (pl.type.is_variable(pointer)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if (!pl.type.is_empty_list(pointer)) { + thread.throw_error(pl.error.type("list", list, atom.indicator)); + } else { + if (!pl.type.is_variable(expected)) { + var pointer = expected; + while (pl.type.is_term(pointer) && pointer.indicator === "./2") { + var head = pointer.args[0]; + if (!pl.type.is_variable(head) && (!pl.type.is_term(head) || head.indicator !== "-/2")) { + thread.throw_error(pl.error.type("pair", head, atom.indicator)); + return; + } + pointer = pointer.args[1]; + } + if (!pl.type.is_variable(pointer) && !pl.type.is_empty_list(pointer)) { + thread.throw_error(pl.error.type("list", expected, atom.indicator)); + return; + } + } + var sorted_arr = arr.sort(pl.compare); + var sorted_list = new pl.type.Term("[]"); + for (var i2 = sorted_arr.length - 1; i2 >= 0; i2--) { + sorted_list = new pl.type.Term(".", [new pl.type.Term("-", [sorted_arr[i2], sorted_arr[i2].pair]), sorted_list]); + delete sorted_arr[i2].pair; + } + thread.prepend([new pl.type.State(point.goal.replace(new pl.type.Term("=", [sorted_list, expected])), point.substitution, point)]); + } + } + }, + "keygroup/2": function(thread, point, atom) { + var list = atom.args[0], expected = atom.args[1]; + if (pl.type.is_variable(list)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if (!pl.type.is_variable(expected) && !pl.type.is_fully_list(expected)) { + thread.throw_error(pl.error.type("list", expected, atom.indicator)); + } else { + var keys = []; + var values = []; + var pointer = list; + while (pl.type.is_term(pointer) && pointer.indicator === "./2") { + var elem = pointer.args[0]; + if (pl.type.is_variable(elem)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + return; + } else if (!pl.type.is_term(elem) || elem.indicator !== "-/2") { + thread.throw_error(pl.error.type("pair", elem, atom.indicator)); + return; + } + var key = elem.args[0], value = elem.args[1]; + var index = -1; + for (var i2 = 0; i2 < keys.length; i2++) { + if (pl.compare(key, keys[i2]) === 0) { + index = i2; + break; + } + } + if (index === -1) { + index = keys.length; + keys.push(key); + values.push([]); + } + values[index].push(value); + pointer = pointer.args[1]; + } + if (pl.type.is_variable(pointer)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if (!pl.type.is_empty_list(pointer)) { + thread.throw_error(pl.error.type("list", list, atom.indicator)); + } else { + if (!pl.type.is_variable(expected)) { + var pointer = expected; + while (pl.type.is_term(pointer) && pointer.indicator === "./2") { + var head = pointer.args[0]; + if (!pl.type.is_variable(head) && (!pl.type.is_term(head) || head.indicator !== "-/2")) { + thread.throw_error(pl.error.type("pair", head, atom.indicator)); + return; + } + pointer = pointer.args[1]; + } + if (!pl.type.is_variable(pointer) && !pl.type.is_empty_list(pointer)) { + thread.throw_error(pl.error.type("list", expected, atom.indicator)); + return; + } + } + group = new Term("[]", []); + for (var i2 = keys.length - 1; i2 >= 0; i2--) + group = new Term(".", [new Term("-", [keys[i2], arrayToList(values[i2])]), group]); + thread.prepend([ + new State( + point.goal.replace(new pl.type.Term("=", [expected, group])), + point.substitution, + point + ) + ]); + } + } + }, + "asserta/1": function(thread, point, atom) { + var clause = atom.args[0]; + var module_id = "user"; + if (pl.type.is_term(clause) && clause.indicator === ":/2") { + module_id = clause.args[0].id; + clause = clause.args[1]; + } + if (pl.type.is_variable(clause)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if (!pl.type.is_callable(clause)) { + thread.throw_error(pl.error.type("callable", clause, atom.indicator)); + } else { + var head, body, get_module; + if (clause.indicator === ":-/2") { + head = clause.args[0]; + body = body_conversion(clause.args[1]); + } else { + head = clause; + body = null; + } + if (pl.type.is_variable(head)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if (!pl.type.is_callable(head)) { + thread.throw_error(pl.error.type("callable", head, atom.indicator)); + } else if (body !== null && !pl.type.is_callable(body)) { + thread.throw_error(pl.error.type("callable", body, atom.indicator)); + } else if ((!pl.type.is_module(thread.session.modules[module_id]) || thread.is_public_predicate(head.indicator, module_id)) && head.indicator !== ",/2" && !thread.session.modules.system.rules.hasOwnProperty(head.indicator)) { + if (!pl.type.is_module(thread.session.modules[module_id])) { + get_module = new Module(module_id, {}, "all", { session: thread.session }); + thread.session.modules[module_id] = get_module; + } else { + get_module = thread.session.modules[module_id]; + } + if (get_module.rules[head.indicator] === void 0) + get_module.rules[head.indicator] = []; + get_module.public_predicates[head.indicator] = true; + get_module.rules[head.indicator] = [new Rule(head, body, true)].concat(get_module.rules[head.indicator]); + get_module.update_indices_predicate(head.indicator); + thread.success(point); + } else { + thread.throw_error(pl.error.permission("modify", "static_procedure", str_indicator(head.indicator), atom.indicator)); + } + } + }, + "assertz/1": function(thread, point, atom) { + var clause = atom.args[0]; + var module_id = "user"; + if (pl.type.is_term(clause) && clause.indicator === ":/2") { + module_id = clause.args[0].id; + clause = clause.args[1]; + } + if (pl.type.is_variable(clause)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if (!pl.type.is_callable(clause)) { + thread.throw_error(pl.error.type("callable", clause, atom.indicator)); + } else { + var head, body, get_module; + if (clause.indicator === ":-/2") { + head = clause.args[0]; + body = body_conversion(clause.args[1]); + } else { + head = clause; + body = null; + } + if (pl.type.is_variable(head)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if (!pl.type.is_callable(head)) { + thread.throw_error(pl.error.type("callable", head, atom.indicator)); + } else if (body !== null && !pl.type.is_callable(body)) { + thread.throw_error(pl.error.type("callable", body, atom.indicator)); + } else if ((!pl.type.is_module(thread.session.modules[module_id]) || thread.is_public_predicate(head.indicator, module_id)) && head.indicator !== ",/2" && !thread.session.modules.system.rules.hasOwnProperty(head.indicator)) { + if (!pl.type.is_module(thread.session.modules[module_id])) { + get_module = new Module(module_id, {}, "all", { session: thread.session }); + thread.session.modules[module_id] = get_module; + } else { + get_module = thread.session.modules[module_id]; + } + if (get_module.rules[head.indicator] === void 0) + get_module.rules[head.indicator] = []; + get_module.public_predicates[head.indicator] = true; + get_module.rules[head.indicator].push(new Rule(head, body, true)); + get_module.update_indices_predicate(head.indicator); + thread.success(point); + } else { + thread.throw_error(pl.error.permission("modify", "static_procedure", str_indicator(head.indicator), atom.indicator)); + } + } + }, + "retract/1": function(thread, point, atom) { + var clause = atom.args[0]; + if (pl.type.is_variable(clause)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if (!pl.type.is_callable(clause)) { + thread.throw_error(pl.error.type("callable", clause, atom.indicator)); + } else { + var head, body, module_atom, module_id; + if (clause.indicator === ":/2") { + module_atom = clause.args[0]; + clause = clause.args[1]; + if (!pl.type.is_atom(module_atom)) { + thread.throw_error(pl.error.type("module", module_atom, atom.indicator)); + return; + } + } else { + module_atom = new Term("user"); + } + if (clause.indicator === ":-/2") { + head = clause.args[0]; + body = clause.args[1]; + } else { + head = clause; + body = new Term("true"); + } + if (pl.type.is_variable(head)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + return; + } else if (!pl.type.is_callable(head)) { + thread.throw_error(pl.error.type("callable", head, atom.indicator)); + return; + } + module_id = module_atom.id; + var get_module = thread.session.modules[module_id]; + if (!pl.type.is_module(get_module)) + return; + if (!point.retract) { + if (thread.is_public_predicate(head.indicator, module_id) && head.indicator !== ",/2" && !thread.session.modules.system.rules.hasOwnProperty(head.indicator)) { + if (get_module.rules[head.indicator] !== void 0) { + var states = []; + if (typeof get_module.rules[head.indicator] === "function") { + thread.throw_error(pl.error.permission("modify", "static_procedure", str_indicator(head.indicator), atom.indicator)); + return; + } + for (var i2 = 0; i2 < get_module.rules[head.indicator].length; i2++) { + thread.session.renamed_variables = {}; + var orule = get_module.rules[head.indicator][i2]; + var rule = orule.rename(thread); + if (rule.body === null) + rule.body = new Term("true", []); + var occurs_check = thread.get_flag("occurs_check").indicator === "true/0"; + var mgu = pl.unify(new Term(",", [head, body]), new Term(",", [rule.head, rule.body]), occurs_check); + if (mgu !== null) { + var state = new State( + point.goal.replace(new Term(",", [ + new Term(":", [ + module_atom, + new Term("retract", [new Term(":-", [head, body])]) + ]), + new Term(",", [ + new Term("=", [head, rule.head]), + new Term("=", [body, rule.body]) + ]) + ])), + point.substitution, + point + ); + state.retract = orule; + states.push(state); + } + } + thread.prepend(states); + } + } else { + thread.throw_error(pl.error.permission("modify", "static_procedure", str_indicator(head.indicator), atom.indicator)); + } + } else { + retract(thread, point, head.indicator, point.retract, get_module); + } + } + }, + "retractall/1": function(thread, point, atom) { + var head = atom.args[0]; + var context_module = "user"; + if (pl.type.is_term(head) && head.indicator === ":/2") { + context_module = head.args[0].id; + head = head.args[1]; + } + if (pl.type.is_variable(head)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if (!pl.type.is_callable(head)) { + thread.throw_error(pl.error.type("callable", head, atom.indicator)); + } else if (!thread.is_public_predicate(head.indicator, context_module) || head.indicator === ",/2" || thread.session.modules.system.rules.hasOwnProperty(head.indicator)) { + thread.throw_error(pl.error.permission("modify", "static_procedure", str_indicator(head.indicator), atom.indicator)); + } else { + thread.prepend([ + new State(point.goal.replace(new Term(",", [ + new Term(":", [ + new Term(context_module), + new Term("retract", [new pl.type.Term(":-", [head, new Var("_")])]) + ]), + new Term("fail", []) + ])), point.substitution, point), + new State(point.goal.replace(null), point.substitution, point) + ]); + } + }, + "abolish/1": function(thread, point, atom) { + var predicate = atom.args[0]; + var module_id; + if (pl.type.is_term(predicate) && predicate.indicator === ":/2") { + if (!pl.type.is_atom(predicate.args[0])) { + thread.throw_error(pl.error.type("module", predicate.args[0], atom.indicator)); + return; + } + module_id = predicate.args[0].id; + predicate = predicate.args[1]; + } else { + module_id = "user"; + } + if (pl.type.is_variable(predicate) || pl.type.is_term(predicate) && predicate.indicator === "//2" && (pl.type.is_variable(predicate.args[0]) || pl.type.is_variable(predicate.args[1]))) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if (!pl.type.is_term(predicate) || predicate.indicator !== "//2") { + thread.throw_error(pl.error.type("predicate_indicator", predicate, atom.indicator)); + } else if (!pl.type.is_atom(predicate.args[0])) { + thread.throw_error(pl.error.type("atom", predicate.args[0], atom.indicator)); + } else if (!pl.type.is_integer(predicate.args[1])) { + thread.throw_error(pl.error.type("integer", predicate.args[1], atom.indicator)); + } else if (predicate.args[1].value < 0) { + thread.throw_error(pl.error.domain("not_less_than_zero", predicate.args[1], atom.indicator)); + } else if (pl.type.is_number(thread.get_flag("max_arity")) && predicate.args[1].value > thread.get_flag("max_arity").value) { + thread.throw_error(pl.error.representation("max_arity", atom.indicator)); + } else { + var get_module = thread.session.modules[module_id]; + if (pl.type.is_module(get_module)) { + var indicator2 = predicate.args[0].id + "/" + predicate.args[1].value; + if (thread.is_public_predicate(indicator2, module_id) && indicator2 !== ",/2" && !thread.session.modules.system.rules.hasOwnProperty(indicator2)) { + delete get_module.rules[indicator2]; + delete get_module.indexed_clauses[indicator2]; + delete get_module.non_indexable_clauses[indicator2]; + delete get_module.public_predicates[indicator2]; + delete get_module.multifile_predicates[indicator2]; + thread.success(point); + } else { + thread.throw_error(pl.error.permission("modify", "static_procedure", atom.args[0], atom.indicator)); + } + } else { + thread.success(point); + } + } + }, + "atom_length/2": function(thread, point, atom) { + if (pl.type.is_variable(atom.args[0])) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if (!pl.type.is_atom(atom.args[0])) { + thread.throw_error(pl.error.type("atom", atom.args[0], atom.indicator)); + } else if (!pl.type.is_variable(atom.args[1]) && !pl.type.is_integer(atom.args[1])) { + thread.throw_error(pl.error.type("integer", atom.args[1], atom.indicator)); + } else if (pl.type.is_integer(atom.args[1]) && atom.args[1].value < 0) { + thread.throw_error(pl.error.domain("not_less_than_zero", atom.args[1], atom.indicator)); + } else { + var length = new Num(stringLength(atom.args[0].id), false); + thread.prepend([new State(point.goal.replace(new Term("=", [length, atom.args[1]])), point.substitution, point)]); + } + }, + "atom_concat/3": function(thread, point, atom) { + var str, goal, start = atom.args[0], end = atom.args[1], whole = atom.args[2]; + if (pl.type.is_variable(whole) && (pl.type.is_variable(start) || pl.type.is_variable(end))) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if (!pl.type.is_variable(start) && !pl.type.is_atom(start)) { + thread.throw_error(pl.error.type("atom", start, atom.indicator)); + } else if (!pl.type.is_variable(end) && !pl.type.is_atom(end)) { + thread.throw_error(pl.error.type("atom", end, atom.indicator)); + } else if (!pl.type.is_variable(whole) && !pl.type.is_atom(whole)) { + thread.throw_error(pl.error.type("atom", whole, atom.indicator)); + } else { + var v1 = pl.type.is_variable(start); + var v2 = pl.type.is_variable(end); + if (!v1 && !v2) { + goal = new Term("=", [whole, new Term(start.id + end.id)]); + thread.prepend([new State(point.goal.replace(goal), point.substitution, point)]); + } else if (v1 && !v2) { + str = whole.id.substr(0, whole.id.length - end.id.length); + if (str + end.id === whole.id) { + goal = new Term("=", [start, new Term(str)]); + thread.prepend([new State(point.goal.replace(goal), point.substitution, point)]); + } + } else if (v2 && !v1) { + str = whole.id.substr(start.id.length); + if (start.id + str === whole.id) { + goal = new Term("=", [end, new Term(str)]); + thread.prepend([new State(point.goal.replace(goal), point.substitution, point)]); + } + } else { + var states = []; + for (var i2 = 0; i2 <= whole.id.length; i2++) { + var atom1 = new Term(whole.id.substr(0, i2)); + var atom2 = new Term(whole.id.substr(i2)); + goal = new Term(",", [new Term("=", [atom1, start]), new Term("=", [atom2, end])]); + states.push(new State(point.goal.replace(goal), point.substitution, point)); + } + thread.prepend(states); + } + } + }, + "sub_atom/5": function(thread, point, atom) { + var i2, atom1 = atom.args[0], before = atom.args[1], length = atom.args[2], after = atom.args[3], subatom = atom.args[4]; + if (pl.type.is_variable(atom1)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if (!pl.type.is_atom(atom1)) { + thread.throw_error(pl.error.type("atom", atom1, atom.indicator)); + } else if (!pl.type.is_variable(before) && !pl.type.is_integer(before)) { + thread.throw_error(pl.error.type("integer", before, atom.indicator)); + } else if (!pl.type.is_variable(length) && !pl.type.is_integer(length)) { + thread.throw_error(pl.error.type("integer", length, atom.indicator)); + } else if (!pl.type.is_variable(after) && !pl.type.is_integer(after)) { + thread.throw_error(pl.error.type("integer", after, atom.indicator)); + } else if (pl.type.is_integer(before) && before.value < 0) { + thread.throw_error(pl.error.domain("not_less_than_zero", before, atom.indicator)); + } else if (pl.type.is_integer(length) && length.value < 0) { + thread.throw_error(pl.error.domain("not_less_than_zero", length, atom.indicator)); + } else if (pl.type.is_integer(after) && after.value < 0) { + thread.throw_error(pl.error.domain("not_less_than_zero", after, atom.indicator)); + } else if (!pl.type.is_variable(subatom) && !pl.type.is_atom(subatom)) { + thread.throw_error(pl.error.type("atom", subatom, atom.indicator)); + } else { + var bs = [], ls = [], as = []; + if (pl.type.is_variable(before)) { + for (i2 = 0; i2 <= atom1.id.length; i2++) { + bs.push(i2); + } + } else { + bs.push(before.value); + } + if (pl.type.is_variable(length)) { + for (i2 = 0; i2 <= atom1.id.length; i2++) { + ls.push(i2); + } + } else { + ls.push(length.value); + } + if (pl.type.is_variable(after)) { + for (i2 = 0; i2 <= atom1.id.length; i2++) { + as.push(i2); + } + } else { + as.push(after.value); + } + var states = []; + for (var _i in bs) { + if (!bs.hasOwnProperty(_i)) + continue; + i2 = bs[_i]; + for (var _j in ls) { + if (!ls.hasOwnProperty(_j)) + continue; + var j = ls[_j]; + var k = atom1.id.length - i2 - j; + if (indexOf(as, k) !== -1) { + if (i2 + j + k === atom1.id.length) { + var str = atom1.id.substr(i2, j); + if (atom1.id === atom1.id.substr(0, i2) + str + atom1.id.substr(i2 + j, k)) { + var pl1 = new Term("=", [new Term(str), subatom]); + var pl2 = new Term("=", [before, new Num(i2)]); + var pl3 = new Term("=", [length, new Num(j)]); + var pl4 = new Term("=", [after, new Num(k)]); + var goal = new Term(",", [new Term(",", [new Term(",", [pl2, pl3]), pl4]), pl1]); + states.push(new State(point.goal.replace(goal), point.substitution, point)); + } + } + } + } + } + thread.prepend(states); + } + }, + "atom_chars/2": function(thread, point, atom) { + var atom1 = atom.args[0], list = atom.args[1]; + if (pl.type.is_variable(atom1) && pl.type.is_variable(list)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if (!pl.type.is_variable(atom1) && !pl.type.is_atom(atom1)) { + thread.throw_error(pl.error.type("atom", atom1, atom.indicator)); + } else { + if (!pl.type.is_variable(atom1)) { + if (!pl.type.is_variable(list)) { + var pointer = list; + while (pl.type.is_term(pointer) && pointer.indicator === "./2") { + if (!pl.type.is_character(pointer.args[0]) && !pl.type.is_variable(pointer.args[0])) { + thread.throw_error(pl.error.type("character", pointer.args[0], atom.indicator)); + return; + } + pointer = pointer.args[1]; + } + } + var list1 = new Term("[]"); + var unilen = stringLength(atom1.id); + for (var i2 = unilen - 1; i2 >= 0; i2--) { + list1 = new Term(".", [new Term(atom1.id.charAt(i2)), list1]); + } + thread.prepend([new State(point.goal.replace(new Term("=", [list, list1])), point.substitution, point)]); + } else { + var pointer = list; + var v = pl.type.is_variable(atom1); + var str = ""; + while (pointer.indicator === "./2") { + if (!pl.type.is_character(pointer.args[0])) { + if (pl.type.is_variable(pointer.args[0]) && v) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + return; + } else if (!pl.type.is_variable(pointer.args[0])) { + thread.throw_error(pl.error.type("character", pointer.args[0], atom.indicator)); + return; + } + } else { + str += pointer.args[0].id; + } + pointer = pointer.args[1]; + } + if (pl.type.is_variable(pointer) && v) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if (!pl.type.is_empty_list(pointer) && !pl.type.is_variable(pointer)) { + thread.throw_error(pl.error.type("list", list, atom.indicator)); + } else { + thread.prepend([new State(point.goal.replace(new Term("=", [new Term(str), atom1])), point.substitution, point)]); + } + } + } + }, + "atom_codes/2": function(thread, point, atom) { + var atom1 = atom.args[0], list = atom.args[1]; + if (pl.type.is_variable(atom1) && pl.type.is_variable(list)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if (!pl.type.is_variable(atom1) && !pl.type.is_atom(atom1)) { + thread.throw_error(pl.error.type("atom", atom1, atom.indicator)); + } else { + if (!pl.type.is_variable(atom1)) { + if (!pl.type.is_variable(list)) { + var pointer = list; + while (pl.type.is_term(pointer) && pointer.indicator === "./2") { + if (!pl.type.is_character_code(pointer.args[0]) && !pl.type.is_variable(pointer.args[0])) { + thread.throw_error(pl.error.type("integer", pointer.args[0], atom.indicator)); + return; + } + pointer = pointer.args[1]; + } + } + var list1 = new Term("[]"); + var unilen = stringLength(atom1.id); + for (var i2 = unilen - 1; i2 >= 0; i2--) { + list1 = new Term(".", [new Num(codePointAt(atom1.id, i2), false), list1]); + } + thread.prepend([new State(point.goal.replace(new Term("=", [list, list1])), point.substitution, point)]); + } else { + var pointer = list; + var v = pl.type.is_variable(atom1); + var str = ""; + while (pointer.indicator === "./2") { + if (!pl.type.is_character_code(pointer.args[0])) { + if (pl.type.is_variable(pointer.args[0]) && v) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + return; + } else if (!pl.type.is_variable(pointer.args[0])) { + thread.throw_error(pl.error.representation("character_code", atom.indicator)); + return; + } + } else { + str += fromCodePoint(pointer.args[0].value); + } + pointer = pointer.args[1]; + } + if (pl.type.is_variable(pointer) && v) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if (!pl.type.is_empty_list(pointer) && !pl.type.is_variable(pointer)) { + thread.throw_error(pl.error.type("list", list, atom.indicator)); + } else { + thread.prepend([new State(point.goal.replace(new Term("=", [new Term(str), atom1])), point.substitution, point)]); + } + } + } + }, + "char_code/2": function(thread, point, atom) { + var char = atom.args[0], code = atom.args[1]; + if (pl.type.is_variable(char) && pl.type.is_variable(code)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if (!pl.type.is_variable(char) && !pl.type.is_character(char)) { + thread.throw_error(pl.error.type("character", char, atom.indicator)); + } else if (!pl.type.is_variable(code) && !pl.type.is_integer(code)) { + thread.throw_error(pl.error.type("integer", code, atom.indicator)); + } else if (!pl.type.is_variable(code) && !pl.type.is_character_code(code)) { + thread.throw_error(pl.error.representation("character_code", atom.indicator)); + } else { + if (pl.type.is_variable(code)) { + var code1 = new Num(codePointAt(char.id, 0), false); + thread.prepend([new State(point.goal.replace(new Term("=", [code1, code])), point.substitution, point)]); + } else { + var char1 = new Term(fromCodePoint(code.value)); + thread.prepend([new State(point.goal.replace(new Term("=", [char1, char])), point.substitution, point)]); + } + } + }, + "number_chars/2": function(thread, point, atom) { + var str, num = atom.args[0], list = atom.args[1]; + if (pl.type.is_variable(num) && pl.type.is_variable(list)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if (!pl.type.is_variable(num) && !pl.type.is_number(num)) { + thread.throw_error(pl.error.type("number", num, atom.indicator)); + } else if (!pl.type.is_variable(list) && !pl.type.is_list(list)) { + thread.throw_error(pl.error.type("list", list, atom.indicator)); + } else { + var isvar = pl.type.is_variable(num); + if (!pl.type.is_variable(list)) { + var pointer = list; + var total = true; + str = ""; + while (pointer.indicator === "./2") { + if (!pl.type.is_character(pointer.args[0])) { + if (pl.type.is_variable(pointer.args[0])) { + total = false; + } else if (!pl.type.is_variable(pointer.args[0])) { + thread.throw_error(pl.error.type("character", pointer.args[0], atom.indicator)); + return; + } + } else { + str += pointer.args[0].id; + } + pointer = pointer.args[1]; + } + total = total && pl.type.is_empty_list(pointer); + if (!pl.type.is_empty_list(pointer) && !pl.type.is_variable(pointer)) { + thread.throw_error(pl.error.type("list", list, atom.indicator)); + return; + } + if (!total && isvar) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + return; + } else if (total) { + if (pl.type.is_variable(pointer) && isvar) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + return; + } else { + var expr = thread.parse(str); + var num2 = expr.value; + if (!pl.type.is_number(num2) || expr.tokens[expr.tokens.length - 1].space) { + thread.throw_error(pl.error.syntax_by_predicate("parseable_number", atom.indicator)); + } else { + thread.prepend([new State(point.goal.replace(new Term("=", [num, num2])), point.substitution, point)]); + } + return; + } + } + } + if (!isvar) { + str = num.toString(); + var list2 = new Term("[]"); + for (var i2 = str.length - 1; i2 >= 0; i2--) { + list2 = new Term(".", [new Term(str.charAt(i2)), list2]); + } + thread.prepend([new State(point.goal.replace(new Term("=", [list, list2])), point.substitution, point)]); + } + } + }, + "number_codes/2": function(thread, point, atom) { + var str, num = atom.args[0], list = atom.args[1]; + if (pl.type.is_variable(num) && pl.type.is_variable(list)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if (!pl.type.is_variable(num) && !pl.type.is_number(num)) { + thread.throw_error(pl.error.type("number", num, atom.indicator)); + } else if (!pl.type.is_variable(list) && !pl.type.is_list(list)) { + thread.throw_error(pl.error.type("list", list, atom.indicator)); + } else { + var isvar = pl.type.is_variable(num); + if (!pl.type.is_variable(list)) { + var pointer = list; + var total = true; + str = ""; + while (pointer.indicator === "./2") { + if (!pl.type.is_character_code(pointer.args[0])) { + if (pl.type.is_variable(pointer.args[0])) { + total = false; + } else if (!pl.type.is_variable(pointer.args[0])) { + thread.throw_error(pl.error.representation("character_code", atom.indicator)); + return; + } + } else { + str += fromCodePoint(pointer.args[0].value); + } + pointer = pointer.args[1]; + } + total = total && pl.type.is_empty_list(pointer); + if (!pl.type.is_empty_list(pointer) && !pl.type.is_variable(pointer)) { + thread.throw_error(pl.error.type("list", list, atom.indicator)); + return; + } + if (!total && isvar) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + return; + } else if (total) { + if (pl.type.is_variable(pointer) && isvar) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + return; + } else { + var expr = thread.parse(str); + var num2 = expr.value; + if (!pl.type.is_number(num2) || expr.tokens[expr.tokens.length - 1].space) { + thread.throw_error(pl.error.syntax_by_predicate("parseable_number", atom.indicator)); + } else { + thread.prepend([new State(point.goal.replace(new Term("=", [num, num2])), point.substitution, point)]); + } + return; + } + } + } + if (!isvar) { + str = num.toString(); + var list2 = new Term("[]"); + for (var i2 = str.length - 1; i2 >= 0; i2--) { + list2 = new Term(".", [new Num(codePointAt(str, i2), false), list2]); + } + thread.prepend([new State(point.goal.replace(new Term("=", [list, list2])), point.substitution, point)]); + } + } + }, + "upcase_atom/2": function(thread, point, atom) { + var original = atom.args[0], upcase = atom.args[1]; + if (pl.type.is_variable(original)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if (!pl.type.is_atom(original)) { + thread.throw_error(pl.error.type("atom", original, atom.indicator)); + } else if (!pl.type.is_variable(upcase) && !pl.type.is_atom(upcase)) { + thread.throw_error(pl.error.type("atom", upcase, atom.indicator)); + } else { + thread.prepend([new State(point.goal.replace(new Term("=", [upcase, new Term(original.id.toUpperCase(), [])])), point.substitution, point)]); + } + }, + "downcase_atom/2": function(thread, point, atom) { + var original = atom.args[0], downcase = atom.args[1]; + if (pl.type.is_variable(original)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if (!pl.type.is_atom(original)) { + thread.throw_error(pl.error.type("atom", original, atom.indicator)); + } else if (!pl.type.is_variable(downcase) && !pl.type.is_atom(downcase)) { + thread.throw_error(pl.error.type("atom", downcase, atom.indicator)); + } else { + thread.prepend([new State(point.goal.replace(new Term("=", [downcase, new Term(original.id.toLowerCase(), [])])), point.substitution, point)]); + } + }, + "atomic_concat/3": function(thread, point, atom) { + var atomic1 = atom.args[0], atomic2 = atom.args[1], concat = atom.args[2]; + if (pl.type.is_variable(atomic1) || pl.type.is_variable(atomic2)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if (!pl.type.is_atomic(atomic1)) { + thread.throw_error(pl.error.type("atomic", atomic1, atom.indicator)); + } else if (!pl.type.is_atomic(atomic2)) { + thread.throw_error(pl.error.type("atomic", atomic2, atom.indicator)); + } else if (!pl.type.is_variable(concat) && !pl.type.is_atom(concat)) { + thread.throw_error(pl.error.type("atom", concat, atom.indicator)); + } else { + var id = ""; + if (pl.type.is_atom(atomic1)) { + id += atomic1.id; + } else { + id += "" + atomic1.value; + } + if (pl.type.is_atom(atomic2)) { + id += atomic2.id; + } else { + id += "" + atomic2.value; + } + var atom = new Term(id, []); + thread.prepend([new State(point.goal.replace(new Term("=", [atom, concat])), point.substitution, point)]); + } + }, + "atomic_list_concat/2": function(thread, point, atom) { + var list = atom.args[0], concat = atom.args[1]; + thread.prepend([new State(point.goal.replace(new Term("atomic_list_concat", [list, new Term("", []), concat])), point.substitution, point)]); + }, + "atomic_list_concat/3": function(thread, point, atom) { + var list = atom.args[0], separator = atom.args[1], concat = atom.args[2]; + if (pl.type.is_variable(separator) || pl.type.is_variable(list) && pl.type.is_variable(concat)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if (!pl.type.is_variable(list) && !pl.type.is_list(list)) { + thread.throw_error(pl.error.type("list", list, atom.indicator)); + } else if (!pl.type.is_atom(separator) && !pl.type.is_number(separator)) { + thread.throw_error(pl.error.type("atomic", separator, atom.indicator)); + } else if (!pl.type.is_variable(concat) && !pl.type.is_atom(concat)) { + thread.throw_error(pl.error.type("atom", concat, atom.indicator)); + } else { + var id = ""; + var pointer = list; + while (pl.type.is_term(pointer) && pointer.indicator === "./2") { + if (pl.type.is_variable(pointer.args[0])) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + return; + } else if (!pl.type.is_atom(pointer.args[0]) && !pl.type.is_number(pointer.args[0])) { + thread.throw_error(pl.error.type("atomic", pointer.args[0], atom.indicator)); + return; + } + if (id !== "") + id += separator.id; + if (pl.type.is_atom(pointer.args[0])) + id += pointer.args[0].id; + else + id += "" + pointer.args[0].value; + pointer = pointer.args[1]; + } + id = new Term(id, []); + if (pl.type.is_variable(pointer)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if (!pl.type.is_term(pointer) || pointer.indicator !== "[]/0") { + thread.throw_error(pl.error.type("list", list, atom.indicator)); + } else { + thread.prepend([new State(point.goal.replace(new Term("=", [id, concat])), point.substitution, point)]); + } + } + }, + "@=/2": function(thread, point, atom) { + if (pl.compare(atom.args[0], atom.args[1]) > 0) { + thread.success(point); + } + }, + "@>=/2": function(thread, point, atom) { + if (pl.compare(atom.args[0], atom.args[1]) >= 0) { + thread.success(point); + } + }, + "compare/3": function(thread, point, atom) { + var order = atom.args[0], left = atom.args[1], right = atom.args[2]; + if (!pl.type.is_variable(order) && !pl.type.is_atom(order)) { + thread.throw_error(pl.error.type("atom", order, atom.indicator)); + } else if (pl.type.is_atom(order) && ["<", ">", "="].indexOf(order.id) === -1) { + thread.throw_error(pl.error.domain("order", order, atom.indicator)); + } else { + var compare = pl.compare(left, right); + compare = compare === 0 ? "=" : compare === -1 ? "<" : ">"; + thread.prepend([new State(point.goal.replace(new Term("=", [order, new Term(compare, [])])), point.substitution, point)]); + } + }, + "is/2": function(thread, point, atom) { + var op = atom.args[1].interpret(thread); + if (!pl.type.is_number(op)) { + thread.throw_error(op); + } else { + thread.prepend([new State(point.goal.replace(new Term("=", [atom.args[0], op], atom.indicator)), point.substitution, point)]); + } + }, + "between/3": function(thread, point, atom) { + var lower = atom.args[0], upper = atom.args[1], bet = atom.args[2]; + if (pl.type.is_variable(lower) || pl.type.is_variable(upper)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if (!pl.type.is_integer(lower)) { + thread.throw_error(pl.error.type("integer", lower, atom.indicator)); + } else if (!pl.type.is_integer(upper)) { + thread.throw_error(pl.error.type("integer", upper, atom.indicator)); + } else if (!pl.type.is_variable(bet) && !pl.type.is_integer(bet)) { + thread.throw_error(pl.error.type("integer", bet, atom.indicator)); + } else { + if (pl.type.is_variable(bet)) { + if (lower.value <= upper.value) { + var states = [new State(point.goal.replace(new Term("=", [bet, lower])), point.substitution, point)]; + states.push(new State(point.goal.replace(new Term("between", [new Num(lower.value + 1, false), upper, bet])), point.substitution, point)); + thread.prepend(states); + } + } else if (lower.value <= bet.value && upper.value >= bet.value) { + thread.success(point); + } + } + }, + "succ/2": function(thread, point, atom) { + var n = atom.args[0], m = atom.args[1]; + if (pl.type.is_variable(n) && pl.type.is_variable(m)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if (!pl.type.is_variable(n) && !pl.type.is_integer(n)) { + thread.throw_error(pl.error.type("integer", n, atom.indicator)); + } else if (!pl.type.is_variable(m) && !pl.type.is_integer(m)) { + thread.throw_error(pl.error.type("integer", m, atom.indicator)); + } else if (!pl.type.is_variable(n) && n.value < 0) { + thread.throw_error(pl.error.domain("not_less_than_zero", n, atom.indicator)); + } else if (!pl.type.is_variable(m) && m.value < 0) { + thread.throw_error(pl.error.domain("not_less_than_zero", m, atom.indicator)); + } else { + if (pl.type.is_variable(m) || m.value > 0) { + if (pl.type.is_variable(n)) { + thread.prepend([new State(point.goal.replace(new Term("=", [n, new Num(m.value - 1, false)])), point.substitution, point)]); + } else { + thread.prepend([new State(point.goal.replace(new Term("=", [m, new Num(n.value + 1, false)])), point.substitution, point)]); + } + } + } + }, + "=:=/2": function(thread, point, atom) { + var cmp = pl.arithmetic_compare(thread, atom.args[0], atom.args[1]); + if (pl.type.is_term(cmp)) { + thread.throw_error(cmp); + } else if (cmp === 0) { + thread.success(point); + } + }, + "=\\=/2": function(thread, point, atom) { + var cmp = pl.arithmetic_compare(thread, atom.args[0], atom.args[1]); + if (pl.type.is_term(cmp)) { + thread.throw_error(cmp); + } else if (cmp !== 0) { + thread.success(point); + } + }, + "/2": function(thread, point, atom) { + var cmp = pl.arithmetic_compare(thread, atom.args[0], atom.args[1]); + if (pl.type.is_term(cmp)) { + thread.throw_error(cmp); + } else if (cmp > 0) { + thread.success(point); + } + }, + ">=/2": function(thread, point, atom) { + var cmp = pl.arithmetic_compare(thread, atom.args[0], atom.args[1]); + if (pl.type.is_term(cmp)) { + thread.throw_error(cmp); + } else if (cmp >= 0) { + thread.success(point); + } + }, + "var/1": function(thread, point, atom) { + if (pl.type.is_variable(atom.args[0])) { + thread.success(point); + } + }, + "atom/1": function(thread, point, atom) { + if (pl.type.is_atom(atom.args[0])) { + thread.success(point); + } + }, + "atomic/1": function(thread, point, atom) { + if (pl.type.is_atomic(atom.args[0])) { + thread.success(point); + } + }, + "compound/1": function(thread, point, atom) { + if (pl.type.is_compound(atom.args[0])) { + thread.success(point); + } + }, + "integer/1": function(thread, point, atom) { + if (pl.type.is_integer(atom.args[0])) { + thread.success(point); + } + }, + "float/1": function(thread, point, atom) { + if (pl.type.is_float(atom.args[0])) { + thread.success(point); + } + }, + "number/1": function(thread, point, atom) { + if (pl.type.is_number(atom.args[0])) { + thread.success(point); + } + }, + "nonvar/1": function(thread, point, atom) { + if (!pl.type.is_variable(atom.args[0])) { + thread.success(point); + } + }, + "ground/1": function(thread, point, atom) { + if (atom.variables().length === 0) { + thread.success(point); + } + }, + "acyclic_term/1": function(thread, point, atom) { + var test = point.substitution.apply(point.substitution); + var variables = atom.args[0].variables(); + for (var i2 = 0; i2 < variables.length; i2++) + if (point.substitution.links[variables[i2]] !== void 0 && !point.substitution.links[variables[i2]].equals(test.links[variables[i2]])) + return; + thread.success(point); + }, + "callable/1": function(thread, point, atom) { + var callable = atom.args[0]; + if (pl.type.is_term(callable)) { + thread.success(point); + } + }, + "is_list/1": function(thread, point, atom) { + var list = atom.args[0]; + while (pl.type.is_term(list) && list.indicator === "./2") + list = list.args[1]; + if (pl.type.is_term(list) && list.indicator === "[]/0") + thread.success(point); + }, + "current_input/1": function(thread, point, atom) { + var stream = atom.args[0]; + if (!pl.type.is_variable(stream) && (!pl.type.is_stream(stream) || !thread.get_stream_by_alias(stream.alias) && !thread.get_stream_by_alias(stream.id)) && (!pl.type.is_atom(stream) || !thread.get_stream_by_alias(stream.id))) { + thread.throw_error(pl.error.domain("stream", stream, atom.indicator)); + } else { + if (pl.type.is_atom(stream)) + stream = thread.get_stream_by_alias(stream.id); + thread.prepend([ + new State( + point.goal.replace(new Term("=", [stream, thread.get_current_input()])), + point.substitution, + point + ) + ]); + } + }, + "current_output/1": function(thread, point, atom) { + var stream = atom.args[0]; + if (!pl.type.is_variable(stream) && (!pl.type.is_stream(stream) || !thread.get_stream_by_alias(stream.alias) && !thread.get_stream_by_alias(stream.id)) && (!pl.type.is_atom(stream) || !thread.get_stream_by_alias(stream.id))) { + thread.throw_error(pl.error.domain("stream", stream, atom.indicator)); + } else { + if (pl.type.is_atom(stream)) + stream = thread.get_stream_by_alias(stream.id); + thread.prepend([ + new State( + point.goal.replace(new Term("=", [stream, thread.get_current_output()])), + point.substitution, + point + ) + ]); + } + }, + "set_input/1": function(thread, point, atom) { + var input = atom.args[0]; + var stream = pl.type.is_stream(input) ? input : thread.get_stream_by_alias(input.id); + if (pl.type.is_variable(input)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if (!pl.type.is_stream(input) && !pl.type.is_atom(input)) { + thread.throw_error(pl.error.domain("stream_or_alias", input, atom.indicator)); + } else if (!pl.type.is_stream(stream) || !thread.get_stream_by_alias(input.alias) && !thread.get_stream_by_alias(input.id)) { + thread.throw_error(pl.error.existence("stream", input, atom.indicator)); + } else if (stream.output === true) { + thread.throw_error(pl.error.permission("input", "stream", input, atom.indicator)); + } else { + thread.set_current_input(stream); + thread.success(point); + } + }, + "set_output/1": function(thread, point, atom) { + var output = atom.args[0]; + var stream = pl.type.is_stream(output) ? output : thread.get_stream_by_alias(output.id); + if (pl.type.is_variable(output)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if (!pl.type.is_stream(output) && !pl.type.is_atom(output)) { + thread.throw_error(pl.error.domain("stream_or_alias", output, atom.indicator)); + } else if (!pl.type.is_stream(stream) || !thread.get_stream_by_alias(output.alias) && !thread.get_stream_by_alias(output.id)) { + thread.throw_error(pl.error.existence("stream", output, atom.indicator)); + } else if (stream.input === true) { + thread.throw_error(pl.error.permission("output", "stream", output, atom.indicator)); + } else { + thread.set_current_output(stream); + thread.success(point); + } + }, + "open/3": function(thread, point, atom) { + var dest = atom.args[0], mode = atom.args[1], stream = atom.args[2]; + thread.prepend([new State( + point.goal.replace(new Term("open", [dest, mode, stream, new Term("[]", [])])), + point.substitution, + point + )]); + }, + "open/4": function(thread, point, atom) { + var dest = atom.args[0], mode = atom.args[1], stream = atom.args[2], options = atom.args[3]; + if (pl.type.is_variable(dest) || pl.type.is_variable(mode) || pl.type.is_variable(options)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if (!pl.type.is_variable(mode) && !pl.type.is_atom(mode)) { + thread.throw_error(pl.error.type("atom", mode, atom.indicator)); + } else if (!pl.type.is_list(options)) { + thread.throw_error(pl.error.type("list", options, atom.indicator)); + } else if (!pl.type.is_variable(stream)) { + thread.throw_error(pl.error.uninstantiation(stream, atom.indicator)); + } else if (!pl.type.is_atom(dest) && !pl.type.is_streamable(dest)) { + thread.throw_error(pl.error.domain("source_sink", dest, atom.indicator)); + } else if (!pl.type.is_io_mode(mode)) { + thread.throw_error(pl.error.domain("io_mode", mode, atom.indicator)); + } else { + var obj_options = {}; + var pointer = options; + var property; + while (pl.type.is_term(pointer) && pointer.indicator === "./2") { + property = pointer.args[0]; + if (pl.type.is_variable(property)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + return; + } else if (!pl.type.is_stream_option(property)) { + thread.throw_error(pl.error.domain("stream_option", property, atom.indicator)); + return; + } + obj_options[property.id] = property.args[0].id; + pointer = pointer.args[1]; + } + if (pointer.indicator !== "[]/0") { + if (pl.type.is_variable(pointer)) + thread.throw_error(pl.error.instantiation(atom.indicator)); + else + thread.throw_error(pl.error.type("list", options, atom.indicator)); + return; + } else { + var alias = obj_options["alias"]; + if (alias && thread.get_stream_by_alias(alias)) { + thread.throw_error(pl.error.permission("open", "source_sink", new Term("alias", [new Term(alias, [])]), atom.indicator)); + return; + } + if (!obj_options["type"]) + obj_options["type"] = "text"; + var file; + if (pl.type.is_atom(dest)) + file = thread.file_system_open(dest.id, obj_options["type"], mode.id); + else + file = dest.stream(obj_options["type"], mode.id); + if (file === false) { + thread.throw_error(pl.error.permission("open", "source_sink", dest, atom.indicator)); + return; + } else if (file === null) { + thread.throw_error(pl.error.existence("source_sink", dest, atom.indicator)); + return; + } + var newstream = new Stream( + file, + mode.id, + obj_options["alias"], + obj_options["type"], + obj_options["reposition"] === "true", + obj_options["eof_action"] + ); + if (alias) + thread.session.streams[alias] = newstream; + else + thread.session.streams[newstream.id] = newstream; + thread.prepend([new State( + point.goal.replace(new Term("=", [stream, newstream])), + point.substitution, + point + )]); + } + } + }, + "close/1": function(thread, point, atom) { + var stream = atom.args[0]; + thread.prepend([new State( + point.goal.replace(new Term("close", [stream, new Term("[]", [])])), + point.substitution, + point + )]); + }, + "close/2": function(thread, point, atom) { + var stream = atom.args[0], options = atom.args[1]; + var stream2 = pl.type.is_stream(stream) ? stream : thread.get_stream_by_alias(stream.id); + if (pl.type.is_variable(stream) || pl.type.is_variable(options)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if (!pl.type.is_list(options)) { + thread.throw_error(pl.error.type("list", options, atom.indicator)); + } else if (!pl.type.is_stream(stream) && !pl.type.is_atom(stream)) { + thread.throw_error(pl.error.domain("stream_or_alias", stream, atom.indicator)); + } else if (!pl.type.is_stream(stream2) || stream2.stream === null) { + thread.throw_error(pl.error.existence("stream", stream, atom.indicator)); + } else { + var obj_options = {}; + var pointer = options; + var property; + while (pl.type.is_term(pointer) && pointer.indicator === "./2") { + property = pointer.args[0]; + if (pl.type.is_variable(property)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + return; + } else if (!pl.type.is_close_option(property)) { + thread.throw_error(pl.error.domain("close_option", property, atom.indicator)); + return; + } + obj_options[property.id] = property.args[0].id === "true"; + pointer = pointer.args[1]; + } + if (pointer.indicator !== "[]/0") { + if (pl.type.is_variable(pointer)) + thread.throw_error(pl.error.instantiation(atom.indicator)); + else + thread.throw_error(pl.error.type("list", options, atom.indicator)); + return; + } else { + if (stream2 === thread.session.standard_input || stream2 === thread.session.standard_output || stream2 === thread.session.standard_error) { + thread.success(point); + return; + } else if (stream2 === thread.session.current_input) { + thread.session.current_input = thread.session.standard_input; + } else if (stream2 === thread.session.current_output) { + thread.session.current_output = thread.session.standard_output; + } + if (stream2.alias !== null && stream2.alias !== void 0) + delete thread.session.streams[stream2.alias]; + else + delete thread.session.streams[stream2.id]; + if (stream2.output) + stream2.stream.flush(); + var closed = stream2.stream.close(); + stream2.stream = null; + if (obj_options.force === true || closed === true) { + thread.success(point); + } + } + } + }, + "flush_output/0": [ + new Rule(new Term("flush_output", []), new Term(",", [new Term("current_output", [new Var("S")]), new Term("flush_output", [new Var("S")])])) + ], + "flush_output/1": function(thread, point, atom) { + var stream = atom.args[0]; + var stream2 = pl.type.is_stream(stream) ? stream : thread.get_stream_by_alias(stream.id); + if (pl.type.is_variable(stream)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if (!pl.type.is_stream(stream) && !pl.type.is_atom(stream)) { + thread.throw_error(pl.error.domain("stream_or_alias", stream, atom.indicator)); + } else if (!pl.type.is_stream(stream2) || stream2.stream === null) { + thread.throw_error(pl.error.existence("stream", stream, atom.indicator)); + } else if (stream2.input === true) { + thread.throw_error(pl.error.permission("output", "stream", stream, atom.indicator)); + } else { + stream2.stream.flush(); + thread.success(point); + } + }, + "stream_property/2": function(thread, point, atom) { + var stream = atom.args[0], property = atom.args[1]; + var stream2 = pl.type.is_stream(stream) ? stream : thread.get_stream_by_alias(stream.id); + if (!pl.type.is_variable(stream) && !pl.type.is_stream(stream)) { + thread.throw_error(pl.error.domain("stream", stream, atom.indicator)); + } else if (!pl.type.is_variable(stream) && (!pl.type.is_stream(stream2) || stream2.stream === null)) { + thread.throw_error(pl.error.existence("stream", stream, atom.indicator)); + } else if (!pl.type.is_variable(property) && !pl.type.is_stream_property(property)) { + thread.throw_error(pl.error.domain("stream_property", property, atom.indicator)); + } else { + var streams = []; + var states = []; + var propvar = pl.type.is_variable(property); + if (!pl.type.is_variable(stream)) + streams.push(stream2); + else + for (var key in thread.session.streams) + streams.push(thread.session.streams[key]); + for (var i2 = 0; i2 < streams.length; i2++) { + var properties = []; + if ((propvar || property.indicator === "file_name/1") && streams[i2].filename) + properties.push(new Term("file_name", [new Term(streams[i2].file_name, [])])); + if (propvar || property.indicator === "mode/1") + properties.push(new Term("mode", [new Term(streams[i2].mode, [])])); + if (propvar || property.indicator === "input/0" || property.indicator === "output/0") + properties.push(new Term(streams[i2].input ? "input" : "output", [])); + if ((propvar || property.indicator === "alias/1") && streams[i2].alias) + properties.push(new Term("alias", [new Term(streams[i2].alias, [])])); + if (propvar || property.indicator === "position/1") + properties.push(new Term("position", [ + new Term("position", [ + new Num(streams[i2].char_count, false), + new Num(streams[i2].line_count, false), + new Num(streams[i2].line_position, false) + ]) + ])); + if (propvar || property.indicator === "end_of_stream/1") + properties.push(new Term("end_of_stream", [new Term( + streams[i2].position === "end_of_stream" || streams[i2].stream.eof && streams[i2].stream.eof(streams[i2].position) ? "at" : streams[i2].position === "past_end_of_stream" ? "past" : "not", + [] + )])); + if (propvar || property.indicator === "eof_action/1") + properties.push(new Term("eof_action", [new Term(streams[i2].eof_action, [])])); + if (propvar || property.indicator === "reposition/1") + properties.push(new Term("reposition", [new Term(streams[i2].reposition ? "true" : "false", [])])); + if (propvar || property.indicator === "type/1") + properties.push(new Term("type", [new Term(streams[i2].type, [])])); + for (var j = 0; j < properties.length; j++) { + states.push(new State( + point.goal.replace(new Term(",", [ + new Term("=", [pl.type.is_variable(stream) ? stream : stream2, streams[i2]]), + new Term("=", [property, properties[j]]) + ])), + point.substitution, + point + )); + } + } + thread.prepend(states); + } + }, + "stream_position_data/3": function(thread, point, atom) { + var field = atom.args[0], position = atom.args[1], value = atom.args[2]; + if (pl.type.is_variable(position)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if (!pl.type.is_term(position) || position.indicator !== "position/3") { + thread.throw_error(pl.error.domain("stream_position", position, atom.indicator)); + } else if (!pl.type.is_variable(field) && !pl.type.is_atom(field)) { + thread.throw_error(pl.error.type("atom", field, atom.indicator)); + } else if (!pl.type.is_variable(value) && !pl.type.is_integer(value)) { + thread.throw_error(pl.error.type("integer", value, atom.indicator)); + } else { + var fields = ["char_count", "line_count", "line_position"]; + var states = []; + var data_pos = { char_count: 0, line_count: 1, line_position: 2 }; + if (pl.type.is_variable(field)) { + for (var i2 = 0; i2 < fields.length; i2++) { + states.push(new State(point.goal.replace( + new Term(",", [ + new Term("=", [new Term(fields[i2]), field]), + new Term("=", [value, position.args[data_pos[fields[i2]]]]) + ]) + ), point.substitution, point)); + } + } else if (data_pos.hasOwnProperty(field.id)) { + states.push(new State(point.goal.replace( + new Term("=", [value, position.args[data_pos[field.id]]]) + ), point.substitution, point)); + } + thread.prepend(states); + } + }, + "at_end_of_stream/0": [ + new Rule(new Term("at_end_of_stream", []), new pl.type.Term(",", [new Term("current_input", [new Var("S")]), new Term(",", [new Term("stream_property", [new Var("S"), new Term("end_of_stream", [new Var("E")])]), new Term(",", [new Term("!", []), new Term(";", [new Term("=", [new Var("E"), new Term("at", [])]), new Term("=", [new Var("E"), new Term("past", [])])])])])])) + ], + "at_end_of_stream/1": function(thread, point, atom) { + var stream = atom.args[0]; + var stream2 = pl.type.is_stream(stream) ? stream : thread.get_stream_by_alias(stream.id); + if (pl.type.is_variable(stream)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if (!pl.type.is_stream(stream2) || stream2.stream === null) { + thread.throw_error(pl.error.existence("stream", stream, atom.indicator)); + } else { + var e = thread.next_free_variable(); + thread.prepend([new State( + point.goal.replace( + new Term(",", [ + new Term("stream_property", [stream2, new Term("end_of_stream", [e])]), + new Term(",", [new Term("!", []), new Term(";", [ + new Term("=", [e, new Term("at", [])]), + new Term("=", [e, new Term("past", [])]) + ])]) + ]) + ), + point.substitution, + point + )]); + } + }, + "set_stream_position/2": function(thread, point, atom) { + var stream = atom.args[0], position = atom.args[1]; + var stream2 = pl.type.is_stream(stream) ? stream : thread.get_stream_by_alias(stream.id); + if (pl.type.is_variable(stream) || pl.type.is_variable(position)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if (!pl.type.is_stream(stream) && !pl.type.is_atom(stream)) { + thread.throw_error(pl.error.domain("stream_or_alias", stream, atom.indicator)); + } else if (!pl.type.is_stream(stream2) || stream2.stream === null) { + thread.throw_error(pl.error.existence("stream", stream, atom.indicator)); + } else if (!pl.type.is_stream_position(position)) { + thread.throw_error(pl.error.domain("stream_position", position, atom.indicator)); + } else if (stream2.reposition === false) { + thread.throw_error(pl.error.permission("reposition", "stream", stream, atom.indicator)); + } else { + if (position.indicator === "position/3") { + stream2.position = position.args[0].value; + stream2.char_count = position.args[0].value; + stream2.line_count = position.args[1].value; + stream2.line_position = position.args[2].value; + } else { + stream2.position = position.id; + } + thread.success(point); + } + }, + "get_char/1": [ + new Rule(new Term("get_char", [new Var("C")]), new Term(",", [new Term("current_input", [new Var("S")]), new Term("get_char", [new Var("S"), new Var("C")])])) + ], + "get_char/2": function(thread, point, atom) { + var stream = atom.args[0], char = atom.args[1]; + var stream2 = pl.type.is_stream(stream) ? stream : thread.get_stream_by_alias(stream.id); + if (pl.type.is_variable(stream)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if (!pl.type.is_variable(char) && !pl.type.is_in_character(char)) { + thread.throw_error(pl.error.type("in_character", char, atom.indicator)); + } else if (!pl.type.is_stream(stream) && !pl.type.is_atom(stream)) { + thread.throw_error(pl.error.domain("stream_or_alias", stream, atom.indicator)); + } else if (!pl.type.is_stream(stream2) || stream2.stream === null) { + thread.throw_error(pl.error.existence("stream", stream, atom.indicator)); + } else if (stream2.output) { + thread.throw_error(pl.error.permission("input", "stream", stream, atom.indicator)); + } else if (stream2.type === "binary") { + thread.throw_error(pl.error.permission("input", "binary_stream", stream, atom.indicator)); + } else if (stream2.position === "past_end_of_stream" && stream2.eof_action === "error") { + thread.throw_error(pl.error.permission("input", "past_end_of_stream", stream, atom.indicator)); + } else { + var stream_char; + if (stream2.position === "end_of_stream") { + stream_char = "end_of_file"; + stream2.position = "past_end_of_stream"; + } else if (stream2.position === "past_end_of_stream") { + stream_char = "end_of_file"; + stream2.position = "past_end_of_stream"; + } else { + stream_char = stream2.stream.get(1, stream2.position); + if (stream_char === null) { + thread.throw_error(pl.error.representation("character", atom.indicator)); + return; + } else if (stream_char === "end_of_stream") { + stream_char = "end_of_file"; + stream2.position = "past_end_of_stream"; + } else { + stream2.position++; + stream2.char_count++; + stream2.line_position++; + if (stream_char === "\n") { + stream2.line_count++; + stream2.line_position = 0; + } + } + } + thread.prepend([new State( + point.goal.replace(new Term("=", [new Term(stream_char, []), char])), + point.substitution, + point + )]); + } + }, + "get_code/1": [ + new Rule(new Term("get_code", [new Var("C")]), new Term(",", [new Term("current_input", [new Var("S")]), new Term("get_code", [new Var("S"), new Var("C")])])) + ], + "get_code/2": function(thread, point, atom) { + var stream = atom.args[0], code = atom.args[1]; + var stream2 = pl.type.is_stream(stream) ? stream : thread.get_stream_by_alias(stream.id); + if (pl.type.is_variable(stream)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if (!pl.type.is_variable(code) && !pl.type.is_integer(code)) { + thread.throw_error(pl.error.type("integer", code, atom.indicator)); + } else if (pl.type.is_integer(code) && !pl.type.is_in_character_code(code)) { + thread.throw_error(pl.error.representation("in_character_code", atom.indicator)); + } else if (!pl.type.is_variable(stream) && !pl.type.is_stream(stream) && !pl.type.is_atom(stream)) { + thread.throw_error(pl.error.domain("stream_or_alias", stream, atom.indicator)); + } else if (!pl.type.is_stream(stream2) || stream2.stream === null) { + thread.throw_error(pl.error.existence("stream", stream, atom.indicator)); + } else if (stream2.output) { + thread.throw_error(pl.error.permission("input", "stream", stream, atom.indicator)); + } else if (stream2.type === "binary") { + thread.throw_error(pl.error.permission("input", "binary_stream", stream, atom.indicator)); + } else if (stream2.position === "past_end_of_stream" && stream2.eof_action === "error") { + thread.throw_error(pl.error.permission("input", "past_end_of_stream", stream, atom.indicator)); + } else { + var stream_code; + if (stream2.position === "end_of_stream") { + stream_code = -1; + stream2.position = "past_end_of_stream"; + } else if (stream2.position === "past_end_of_stream") { + stream_code = -1; + stream2.position = "past_end_of_stream"; + } else { + stream_code = stream2.stream.get(1, stream2.position); + if (stream_code === null) { + thread.throw_error(pl.error.representation("character", atom.indicator)); + return; + } else if (stream_code === "end_of_stream") { + stream_code = -1; + stream2.position = "past_end_of_stream"; + } else { + stream_code = codePointAt(stream_code, 0); + stream2.position++; + stream2.char_count++; + stream2.line_position++; + if (stream_code === 10) { + stream2.line_count++; + stream2.line_position = 0; + } + } + } + thread.prepend([new State( + point.goal.replace(new Term("=", [new Num(stream_code, false), code])), + point.substitution, + point + )]); + } + }, + "peek_char/1": [ + new Rule(new Term("peek_char", [new Var("C")]), new Term(",", [new Term("current_input", [new Var("S")]), new Term("peek_char", [new Var("S"), new Var("C")])])) + ], + "peek_char/2": function(thread, point, atom) { + var stream = atom.args[0], char = atom.args[1]; + var stream2 = pl.type.is_stream(stream) ? stream : thread.get_stream_by_alias(stream.id); + if (pl.type.is_variable(stream)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if (!pl.type.is_variable(char) && !pl.type.is_in_character(char)) { + thread.throw_error(pl.error.type("in_character", char, atom.indicator)); + } else if (!pl.type.is_stream(stream) && !pl.type.is_atom(stream)) { + thread.throw_error(pl.error.domain("stream_or_alias", stream, atom.indicator)); + } else if (!pl.type.is_stream(stream2) || stream2.stream === null) { + thread.throw_error(pl.error.existence("stream", stream, atom.indicator)); + } else if (stream2.output) { + thread.throw_error(pl.error.permission("input", "stream", stream, atom.indicator)); + } else if (stream2.type === "binary") { + thread.throw_error(pl.error.permission("input", "binary_stream", stream, atom.indicator)); + } else if (stream2.position === "past_end_of_stream" && stream2.eof_action === "error") { + thread.throw_error(pl.error.permission("input", "past_end_of_stream", stream, atom.indicator)); + } else { + var stream_char; + if (stream2.position === "end_of_stream") { + stream_char = "end_of_file"; + stream2.position = "past_end_of_stream"; + } else if (stream2.position === "past_end_of_stream") { + stream_char = "end_of_file"; + stream2.position = "past_end_of_stream"; + } else { + stream_char = stream2.stream.get(1, stream2.position); + if (stream_char === null) { + thread.throw_error(pl.error.representation("character", atom.indicator)); + return; + } else if (stream_char === "end_of_stream") { + stream_char = "end_of_file"; + } + } + thread.prepend([new State( + point.goal.replace(new Term("=", [new Term(stream_char, []), char])), + point.substitution, + point + )]); + } + }, + "peek_code/1": [ + new Rule(new Term("peek_code", [new Var("C")]), new Term(",", [new Term("current_input", [new Var("S")]), new Term("peek_code", [new Var("S"), new Var("C")])])) + ], + "peek_code/2": function(thread, point, atom) { + var stream = atom.args[0], code = atom.args[1]; + var stream2 = pl.type.is_stream(stream) ? stream : thread.get_stream_by_alias(stream.id); + if (pl.type.is_variable(stream)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if (!pl.type.is_variable(code) && !pl.type.is_integer(code)) { + thread.throw_error(pl.error.type("integer", code, atom.indicator)); + } else if (pl.type.is_integer(code) && !pl.type.is_in_character_code(code)) { + thread.throw_error(pl.error.representation("in_character_code", atom.indicator)); + } else if (!pl.type.is_variable(stream) && !pl.type.is_stream(stream) && !pl.type.is_atom(stream)) { + thread.throw_error(pl.error.domain("stream_or_alias", stream, atom.indicator)); + } else if (!pl.type.is_stream(stream2) || stream2.stream === null) { + thread.throw_error(pl.error.existence("stream", stream, atom.indicator)); + } else if (stream2.output) { + thread.throw_error(pl.error.permission("input", "stream", stream, atom.indicator)); + } else if (stream2.type === "binary") { + thread.throw_error(pl.error.permission("input", "binary_stream", stream, atom.indicator)); + } else if (stream2.position === "past_end_of_stream" && stream2.eof_action === "error") { + thread.throw_error(pl.error.permission("input", "past_end_of_stream", stream, atom.indicator)); + } else { + var stream_code; + if (stream2.position === "end_of_stream") { + stream_code = -1; + stream2.position = "past_end_of_stream"; + } else { + stream_code = stream2.stream.get(1, stream2.position); + if (stream_code === null) { + thread.throw_error(pl.error.representation("character", atom.indicator)); + return; + } else if (stream_code === "end_of_stream") { + stream_code = -1; + } else { + stream_code = codePointAt(stream_code, 0); + } + } + thread.prepend([new State( + point.goal.replace(new Term("=", [new Num(stream_code, false), code])), + point.substitution, + point + )]); + } + }, + "put_char/1": [ + new Rule(new Term("put_char", [new Var("C")]), new Term(",", [new Term("current_output", [new Var("S")]), new Term("put_char", [new Var("S"), new Var("C")])])) + ], + "put_char/2": function(thread, point, atom) { + var stream = atom.args[0], char = atom.args[1]; + var stream2 = pl.type.is_stream(stream) ? stream : thread.get_stream_by_alias(stream.id); + if (pl.type.is_variable(stream) || pl.type.is_variable(char)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if (!pl.type.is_character(char)) { + thread.throw_error(pl.error.type("character", char, atom.indicator)); + } else if (!pl.type.is_variable(stream) && !pl.type.is_stream(stream) && !pl.type.is_atom(stream)) { + thread.throw_error(pl.error.domain("stream_or_alias", stream, atom.indicator)); + } else if (!pl.type.is_stream(stream2) || stream2.stream === null) { + thread.throw_error(pl.error.existence("stream", stream, atom.indicator)); + } else if (stream2.input) { + thread.throw_error(pl.error.permission("output", "stream", stream, atom.indicator)); + } else if (stream2.type === "binary") { + thread.throw_error(pl.error.permission("output", "binary_stream", stream, atom.indicator)); + } else { + if (stream2.stream.put(char.id, stream2.position)) { + if (typeof stream2.position === "number") + stream2.position++; + stream2.char_count++; + stream2.line_position++; + if (char.id === "\n") { + stream2.line_count++; + stream2.line_position = 0; + } + thread.success(point); + } + } + }, + "put_code/1": [ + new Rule(new Term("put_code", [new Var("C")]), new Term(",", [new Term("current_output", [new Var("S")]), new Term("put_code", [new Var("S"), new Var("C")])])) + ], + "put_code/2": function(thread, point, atom) { + var stream = atom.args[0], code = atom.args[1]; + var stream2 = pl.type.is_stream(stream) ? stream : thread.get_stream_by_alias(stream.id); + if (pl.type.is_variable(stream) || pl.type.is_variable(code)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if (!pl.type.is_integer(code)) { + thread.throw_error(pl.error.type("integer", code, atom.indicator)); + } else if (!pl.type.is_character_code(code)) { + thread.throw_error(pl.error.representation("character_code", atom.indicator)); + } else if (!pl.type.is_variable(stream) && !pl.type.is_stream(stream) && !pl.type.is_atom(stream)) { + thread.throw_error(pl.error.domain("stream_or_alias", stream, atom.indicator)); + } else if (!pl.type.is_stream(stream2) || stream2.stream === null) { + thread.throw_error(pl.error.existence("stream", stream, atom.indicator)); + } else if (stream2.input) { + thread.throw_error(pl.error.permission("output", "stream", stream, atom.indicator)); + } else if (stream2.type === "binary") { + thread.throw_error(pl.error.permission("output", "binary_stream", stream, atom.indicator)); + } else { + if (stream2.stream.put(fromCodePoint(code.value), stream2.position)) { + if (typeof stream2.position === "number") + stream2.position++; + stream2.char_count++; + stream2.line_position++; + if (code.value === 10) { + stream2.line_count++; + stream2.line_position = 0; + } + thread.success(point); + } + } + }, + "nl/0": [ + new Rule(new Term("nl"), new Term(",", [new Term("current_output", [new Var("S")]), new Term("put_char", [new Var("S"), new Term("\n")])])) + ], + "nl/1": function(thread, point, atom) { + var stream = atom.args[0]; + thread.prepend([new State( + point.goal.replace(new Term("put_char", [stream, new Term("\n", [])])), + point.substitution, + point + )]); + }, + "get_byte/1": [ + new Rule(new Term("get_byte", [new Var("B")]), new Term(",", [new Term("current_input", [new Var("S")]), new Term("get_byte", [new Var("S"), new Var("B")])])) + ], + "get_byte/2": function(thread, point, atom) { + var stream = atom.args[0], byte = atom.args[1]; + var stream2 = pl.type.is_stream(stream) ? stream : thread.get_stream_by_alias(stream.id); + if (pl.type.is_variable(stream)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if (!pl.type.is_variable(byte) && !pl.type.is_in_byte(byte)) { + thread.throw_error(pl.error.type("in_byte", byte, atom.indicator)); + } else if (!pl.type.is_stream(stream) && !pl.type.is_atom(stream)) { + thread.throw_error(pl.error.domain("stream_or_alias", stream, atom.indicator)); + } else if (!pl.type.is_stream(stream2) || stream2.stream === null) { + thread.throw_error(pl.error.existence("stream", stream, atom.indicator)); + } else if (stream2.output) { + thread.throw_error(pl.error.permission("input", "stream", stream, atom.indicator)); + } else if (stream2.type === "text") { + thread.throw_error(pl.error.permission("input", "text_stream", stream, atom.indicator)); + } else if (stream2.position === "past_end_of_stream" && stream2.eof_action === "error") { + thread.throw_error(pl.error.permission("input", "past_end_of_stream", stream, atom.indicator)); + } else { + var stream_byte; + if (stream2.position === "end_of_stream") { + stream_byte = -1; + stream2.position = "past_end_of_stream"; + } else { + stream_byte = stream2.stream.get_byte(stream2.position); + if (stream_byte === null) { + thread.throw_error(pl.error.representation("byte", atom.indicator)); + return; + } else if (stream_byte === "end_of_stream") { + stream_byte = -1; + stream2.position = "past_end_of_stream"; + } else { + stream2.position++; + stream2.char_count++; + stream2.line_position++; + } + } + thread.prepend([new State( + point.goal.replace(new Term("=", [new Num(stream_byte, false), byte])), + point.substitution, + point + )]); + } + }, + "peek_byte/1": [ + new Rule(new Term("peek_byte", [new Var("B")]), new Term(",", [new Term("current_input", [new Var("S")]), new Term("peek_byte", [new Var("S"), new Var("B")])])) + ], + "peek_byte/2": function(thread, point, atom) { + var stream = atom.args[0], byte = atom.args[1]; + var stream2 = pl.type.is_stream(stream) ? stream : thread.get_stream_by_alias(stream.id); + if (pl.type.is_variable(stream)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if (!pl.type.is_variable(byte) && !pl.type.is_in_byte(byte)) { + thread.throw_error(pl.error.type("in_byte", byte, atom.indicator)); + } else if (!pl.type.is_stream(stream) && !pl.type.is_atom(stream)) { + thread.throw_error(pl.error.domain("stream_or_alias", stream, atom.indicator)); + } else if (!pl.type.is_stream(stream2) || stream2.stream === null) { + thread.throw_error(pl.error.existence("stream", stream, atom.indicator)); + } else if (stream2.output) { + thread.throw_error(pl.error.permission("input", "stream", stream, atom.indicator)); + } else if (stream2.type === "text") { + thread.throw_error(pl.error.permission("input", "text_stream", stream, atom.indicator)); + } else if (stream2.position === "past_end_of_stream" && stream2.eof_action === "error") { + thread.throw_error(pl.error.permission("input", "past_end_of_stream", stream, atom.indicator)); + } else { + var stream_byte; + if (stream2.position === "end_of_stream") { + stream_byte = -1; + stream2.position = "past_end_of_stream"; + } else { + stream_byte = stream2.stream.get_byte(stream2.position); + if (stream_byte === null) { + thread.throw_error(pl.error.representation("byte", atom.indicator)); + return; + } else if (stream_byte === "end_of_stream") { + stream_byte = -1; + } + } + thread.prepend([new State( + point.goal.replace(new Term("=", [new Num(stream_byte, false), byte])), + point.substitution, + point + )]); + } + }, + "put_byte/1": [ + new Rule(new Term("put_byte", [new Var("B")]), new Term(",", [new Term("current_output", [new Var("S")]), new Term("put_byte", [new Var("S"), new Var("B")])])) + ], + "put_byte/2": function(thread, point, atom) { + var stream = atom.args[0], byte = atom.args[1]; + var stream2 = pl.type.is_stream(stream) ? stream : thread.get_stream_by_alias(stream.id); + if (pl.type.is_variable(stream) || pl.type.is_variable(byte)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if (!pl.type.is_byte(byte)) { + thread.throw_error(pl.error.type("byte", byte, atom.indicator)); + } else if (!pl.type.is_variable(stream) && !pl.type.is_stream(stream) && !pl.type.is_atom(stream)) { + thread.throw_error(pl.error.domain("stream_or_alias", stream, atom.indicator)); + } else if (!pl.type.is_stream(stream2) || stream2.stream === null) { + thread.throw_error(pl.error.existence("stream", stream, atom.indicator)); + } else if (stream2.input) { + thread.throw_error(pl.error.permission("output", "stream", stream, atom.indicator)); + } else if (stream2.type === "text") { + thread.throw_error(pl.error.permission("output", "text_stream", stream, atom.indicator)); + } else { + if (stream2.stream.put_byte(byte.value, stream2.position)) { + if (typeof stream2.position === "number") + stream2.position++; + stream2.char_count++; + stream2.line_position++; + thread.success(point); + } + } + }, + "read/1": [ + new Rule(new Term("read", [new Var("T")]), new Term(",", [new Term("current_input", [new Var("S")]), new Term("read_term", [new Var("S"), new Var("T"), new Term("[]")])])) + ], + "read/2": [ + new Rule(new Term("read", [new Var("S"), new Var("T")]), new Term("read_term", [new Var("S"), new Var("T"), new Term("[]")])) + ], + "read_term/2": [ + new Rule(new Term("read_term", [new Var("T"), new Var("O")]), new Term(",", [new Term("current_input", [new Var("S")]), new Term("read_term", [new Var("S"), new Var("T"), new Var("O")])])) + ], + "read_term/3": function(thread, point, atom) { + var stream = atom.args[0], term = atom.args[1], options = atom.args[2]; + var stream2 = pl.type.is_stream(stream) ? stream : thread.get_stream_by_alias(stream.id); + if (pl.type.is_variable(stream) || pl.type.is_variable(options)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if (!pl.type.is_list(options)) { + thread.throw_error(pl.error.type("list", options, atom.indicator)); + } else if (!pl.type.is_stream(stream) && !pl.type.is_atom(stream)) { + thread.throw_error(pl.error.domain("stream_or_alias", stream, atom.indicator)); + } else if (!pl.type.is_stream(stream2) || stream2.stream === null) { + thread.throw_error(pl.error.existence("stream", stream, atom.indicator)); + } else if (stream2.output) { + thread.throw_error(pl.error.permission("input", "stream", stream, atom.indicator)); + } else if (stream2.type === "binary") { + thread.throw_error(pl.error.permission("input", "binary_stream", stream, atom.indicator)); + } else if (stream2.position === "past_end_of_stream" && stream2.eof_action === "error") { + thread.throw_error(pl.error.permission("input", "past_end_of_stream", stream, atom.indicator)); + } else if (stream2.position === "past_end_of_stream" && stream2.eof_action === "eof_code") { + expr = { + value: new Term("end_of_file", []), + type: SUCCESS, + len: -1 + }; + } else { + var obj_options = {}; + var pointer = options; + var property; + while (pl.type.is_term(pointer) && pointer.indicator === "./2") { + property = pointer.args[0]; + if (pl.type.is_variable(property)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + return; + } else if (!pl.type.is_read_option(property)) { + thread.throw_error(pl.error.domain("read_option", property, atom.indicator)); + return; + } + obj_options[property.id] = property.args[0]; + pointer = pointer.args[1]; + } + if (pointer.indicator !== "[]/0") { + if (pl.type.is_variable(pointer)) + thread.throw_error(pl.error.instantiation(atom.indicator)); + else + thread.throw_error(pl.error.type("list", options, atom.indicator)); + return; + } else { + var char, tokenizer, expr; + var text = ""; + var tokens = []; + var last_token = null; + var lexical_error = false; + while (last_token === null || lexical_error || last_token.name !== "atom" || last_token.value !== "." || tokens.length > 0 && expr.type === ERROR) { + char = stream2.stream.get(1, stream2.position); + while (char !== null && char !== "." && char !== "end_of_stream" && char !== "past_end_of_stream") { + stream2.position++; + text += char; + char = stream2.stream.get(1, stream2.position); + } + if (char === null) { + thread.throw_error(pl.error.representation("character", atom.indicator)); + return; + } else if (char === "end_of_stream" || char === "past_end_of_stream") { + if (tokens === null || tokens.length === 0) { + stream2.position = "past_end_of_stream"; + expr = { + value: new Term("end_of_file", []), + type: SUCCESS, + len: -1 + }; + break; + } else if (expr) { + thread.throw_error(pl.error.syntax(last_token, "unexpected end of file", false)); + return; + } else { + thread.throw_error(pl.error.syntax(last_token, "token not found", true)); + return; + } + } else if (char === ".") { + stream2.position++; + text += char; + } + tokenizer = new Tokenizer(thread); + tokenizer.new_text(text); + tokens = tokenizer.get_tokens(); + num_token = tokens !== null && tokens.length > 1 ? tokens[tokens.length - 2] : null; + last_token = tokens !== null && tokens.length > 0 ? tokens[tokens.length - 1] : null; + if (tokens === null) + continue; + lexical_error = false; + for (var i2 = 0; i2 < tokens.length && !lexical_error; i2++) + lexical_error = tokens[i2].name === "lexical"; + if (lexical_error) + continue; + expr = parseExpr(thread, tokens, 0, thread.__get_max_priority(), false); + if (num_token && num_token.name === "number" && !num_token.float && !num_token.blank && last_token.value === ".") { + var next_char = stream2.stream.get(1, stream2.position); + if (next_char >= "0" && next_char <= "9") { + stream2.position++; + text += next_char; + last_token = null; + continue; + } + } + } + if (last_token) { + if (last_token.line_position === last_token.len) + stream2.line_position += last_token.line_position; + else + stream2.line_position = last_token.line_position; + stream2.line_count += last_token.line_count; + stream2.char_count += last_token.len; + } + if (expr.type === SUCCESS && (expr.len === -1 || expr.len === tokens.length - 1 && last_token.value === ".")) { + thread.session.renamed_variables = {}; + expr = expr.value.rename(thread); + var eq = new Term("=", [term, expr]); + if (obj_options.variables) { + var vars = arrayToList(map(nub(expr.variables()), function(v2) { + return new Var(v2); + })); + eq = new Term(",", [eq, new Term("=", [obj_options.variables, vars])]); + } + if (obj_options.variable_names) { + var vars = nub(expr.variables()); + var plvars = []; + for (var i2 = 0; i2 < vars.length; i2++) { + var v = vars[i2]; + for (var prop in thread.session.renamed_variables) { + if (thread.session.renamed_variables.hasOwnProperty(prop)) { + if (thread.session.renamed_variables[prop] === v) { + plvars.push(new Term("=", [new Term(prop, []), new Var(v)])); + break; + } + } + } + } + plvars = arrayToList(plvars); + eq = new Term(",", [eq, new Term("=", [obj_options.variable_names, plvars])]); + } + if (obj_options.singletons) { + var vars = nub(new Rule(expr, null).singleton_variables(true)); + var plvars = []; + for (var i2 = 0; i2 < vars.length; i2++) { + var v = vars[i2]; + for (var prop in thread.session.renamed_variables) { + if (thread.session.renamed_variables.hasOwnProperty(prop)) { + if (thread.session.renamed_variables[prop] === v) { + plvars.push(new Term("=", [new Term(prop, []), new Var(v)])); + break; + } + } + } + } + plvars = arrayToList(plvars); + eq = new Term(",", [eq, new Term("=", [obj_options.singletons, plvars])]); + } + thread.prepend([new State(point.goal.replace(eq), point.substitution, point)]); + } else { + if (expr.type === SUCCESS) + thread.throw_error(pl.error.syntax(tokens[expr.len], "unexpected token", false)); + else + thread.throw_error(expr.value); + } + } + } + }, + "write/1": [ + new Rule(new Term("write", [new Var("T")]), new Term(",", [new Term("current_output", [new Var("S")]), new Term("write", [new Var("S"), new Var("T")])])) + ], + "write/2": function(thread, point, atom) { + var stream = atom.args[0], term = atom.args[1]; + thread.prepend([new State( + point.goal.replace(new Term("write_term", [ + stream, + term, + new Term(".", [ + new Term("quoted", [new Term("false", [])]), + new Term(".", [ + new Term("ignore_ops", [new Term("false")]), + new Term(".", [new Term("numbervars", [new Term("true")]), new Term("[]", [])]) + ]) + ]) + ])), + point.substitution, + point + )]); + }, + "writeq/1": [ + new Rule(new Term("writeq", [new Var("T")]), new Term(",", [new Term("current_output", [new Var("S")]), new Term("writeq", [new Var("S"), new Var("T")])])) + ], + "writeq/2": function(thread, point, atom) { + var stream = atom.args[0], term = atom.args[1]; + thread.prepend([new State( + point.goal.replace(new Term("write_term", [ + stream, + term, + new Term(".", [ + new Term("quoted", [new Term("true", [])]), + new Term(".", [ + new Term("ignore_ops", [new Term("false")]), + new Term(".", [new Term("numbervars", [new Term("true")]), new Term("[]", [])]) + ]) + ]) + ])), + point.substitution, + point + )]); + }, + "write_canonical/1": [ + new Rule(new Term("write_canonical", [new Var("T")]), new Term(",", [new Term("current_output", [new Var("S")]), new Term("write_canonical", [new Var("S"), new Var("T")])])) + ], + "write_canonical/2": function(thread, point, atom) { + var stream = atom.args[0], term = atom.args[1]; + thread.prepend([new State( + point.goal.replace(new Term("write_term", [ + stream, + term, + new Term(".", [ + new Term("quoted", [new Term("true", [])]), + new Term(".", [ + new Term("ignore_ops", [new Term("true")]), + new Term(".", [new Term("numbervars", [new Term("false")]), new Term("[]", [])]) + ]) + ]) + ])), + point.substitution, + point + )]); + }, + "write_term/2": [ + new Rule(new Term("write_term", [new Var("T"), new Var("O")]), new Term(",", [new Term("current_output", [new Var("S")]), new Term("write_term", [new Var("S"), new Var("T"), new Var("O")])])) + ], + "write_term/3": function(thread, point, atom) { + var stream = atom.args[0], term = atom.args[1], options = atom.args[2]; + var stream2 = pl.type.is_stream(stream) ? stream : thread.get_stream_by_alias(stream.id); + if (pl.type.is_variable(stream) || pl.type.is_variable(options)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if (!pl.type.is_list(options)) { + thread.throw_error(pl.error.type("list", options, atom.indicator)); + } else if (!pl.type.is_stream(stream) && !pl.type.is_atom(stream)) { + thread.throw_error(pl.error.domain("stream_or_alias", stream, atom.indicator)); + } else if (!pl.type.is_stream(stream2) || stream2.stream === null) { + thread.throw_error(pl.error.existence("stream", stream, atom.indicator)); + } else if (stream2.input) { + thread.throw_error(pl.error.permission("output", "stream", stream, atom.indicator)); + } else if (stream2.type === "binary") { + thread.throw_error(pl.error.permission("output", "binary_stream", stream, atom.indicator)); + } else if (stream2.position === "past_end_of_stream" && stream2.eof_action === "error") { + thread.throw_error(pl.error.permission("output", "past_end_of_stream", stream, atom.indicator)); + } else { + var obj_options = {}; + var pointer = options; + var property; + while (pl.type.is_term(pointer) && pointer.indicator === "./2") { + property = pointer.args[0]; + if (pl.type.is_variable(property)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + return; + } else if (!pl.type.is_write_option(property)) { + thread.throw_error(pl.error.domain("write_option", property, atom.indicator)); + return; + } + if (property.indicator === "variable_names/1") + obj_options[property.id] = property.args[0]; + else + obj_options[property.id] = property.args[0].id === "true"; + pointer = pointer.args[1]; + } + if (pointer.indicator !== "[]/0") { + if (pl.type.is_variable(pointer)) + thread.throw_error(pl.error.instantiation(atom.indicator)); + else + thread.throw_error(pl.error.type("list", options, atom.indicator)); + return; + } else { + obj_options.session = thread.session; + var text = term.toString(obj_options); + stream2.stream.put(text, stream2.position); + if (typeof stream2.position === "number") + stream2.position += text.length; + var nl = (text.match(/\n/g) || []).length; + stream2.line_count += nl; + if (nl > 0) + stream2.line_position = text.length - text.lastIndexOf("\n") - 1; + else + stream2.line_position += text.length; + stream2.char_count += text.length; + thread.success(point); + } + } + }, + "halt/0": function(thread, point, _) { + if (thread.get_flag("nodejs").indicator === "true/0") + process.exit(); + thread.points = []; + }, + "halt/1": function(thread, point, atom) { + var int = atom.args[0]; + if (pl.type.is_variable(int)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if (!pl.type.is_integer(int)) { + thread.throw_error(pl.error.type("integer", int, atom.indicator)); + } else { + if (thread.get_flag("nodejs").indicator === "true/0") + process.exit(int.value); + thread.points = []; + } + }, + "current_prolog_flag/2": function(thread, point, atom) { + var flag = atom.args[0], value = atom.args[1]; + if (!pl.type.is_variable(flag) && !pl.type.is_atom(flag)) { + thread.throw_error(pl.error.type("atom", flag, atom.indicator)); + } else if (!pl.type.is_variable(flag) && !pl.type.is_flag(flag)) { + thread.throw_error(pl.error.domain("prolog_flag", flag, atom.indicator)); + } else { + var states = []; + for (var name in pl.flag) { + if (!pl.flag.hasOwnProperty(name)) + continue; + var goal = new Term(",", [new Term("=", [new Term(name), flag]), new Term("=", [thread.get_flag(name), value])]); + states.push(new State(point.goal.replace(goal), point.substitution, point)); + } + thread.prepend(states); + } + }, + "set_prolog_flag/2": function(thread, point, atom) { + var flag = atom.args[0], value = atom.args[1]; + if (pl.type.is_variable(flag) || pl.type.is_variable(value)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if (!pl.type.is_atom(flag)) { + thread.throw_error(pl.error.type("atom", flag, atom.indicator)); + } else if (!pl.type.is_flag(flag)) { + thread.throw_error(pl.error.domain("prolog_flag", flag, atom.indicator)); + } else if (!pl.type.is_modifiable_flag(flag)) { + thread.throw_error(pl.error.permission("modify", "flag", flag, atom.indicator)); + } else if (!pl.type.is_value_flag(flag, value)) { + thread.throw_error(pl.error.domain("flag_value", new Term("+", [flag, value]), atom.indicator)); + } else { + thread.session.flag[flag.id] = value; + thread.success(point); + } + }, + "consult/1": function(thread, point, atom) { + var src = atom.args[0]; + var context_module = "user"; + if (src.indicator === ":/2") { + context_module = src.args[0].id; + src = src.args[1]; + } + if (pl.type.is_variable(src)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if (!pl.type.is_atom(src)) { + thread.throw_error(pl.error.type("atom", src, atom.indicator)); + } else { + if (thread.consult(src.id, { + context_module, + text: false, + html: false, + success: function() { + thread.success(point); + thread.again(); + }, + error: function(err) { + thread.throw_error(err); + thread.again(); + } + })) + ; + return true; + } + }, + "get_time/1": function(thread, point, atom) { + var time = atom.args[0]; + if (!pl.type.is_variable(time) && !pl.type.is_number(time)) { + thread.throw_error(pl.error.type("number", time, atom.indicator)); + } else { + var current = new Num(Date.now(), true); + thread.prepend([new State( + point.goal.replace(new Term("=", [time, current])), + point.substitution, + point + )]); + } + }, + "time_property/2": function(thread, point, atom) { + var time = atom.args[0], property = atom.args[1]; + if (pl.type.is_variable(time)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if (!pl.type.is_variable(time) && !pl.type.is_number(time)) { + thread.throw_error(pl.error.type("number", time, atom.indicator)); + } else if (!pl.type.is_variable(property) && !pl.type.is_time_property(property)) { + thread.throw_error(pl.error.domain("time_property", property, atom.indicator)); + } else { + var props; + if (pl.type.is_variable(property)) { + props = ["year", "month", "day", "hours", "minutes", "seconds", "milliseconds", "weekday"]; + } else { + props = [property.id]; + } + var date = new Date(time.value); + var value; + var states = []; + for (var i2 = 0; i2 < props.length; i2++) { + switch (props[i2]) { + case "year": + value = new Term("year", [new Num(date.getFullYear(), false)]); + break; + case "month": + value = new Term("month", [new Num(date.getMonth(), false)]); + break; + case "day": + value = new Term("day", [new Num(date.getDate(), false)]); + break; + case "hours": + value = new Term("hours", [new Num(date.getHours(), false)]); + break; + case "minutes": + value = new Term("minutes", [new Num(date.getMinutes(), false)]); + break; + case "seconds": + value = new Term("seconds", [new Num(date.getSeconds(), false)]); + break; + case "milliseconds": + value = new Term("milliseconds", [new Num(date.getMilliseconds(), false)]); + break; + case "weekday": + value = new Term("weekday", [new Num(date.getDay(), false)]); + break; + } + states.push(new State( + point.goal.replace(new Term("=", [property, value])), + point.substitution, + point + )); + } + thread.prepend(states); + } + }, + "time_year/2": function(thread, point, atom) { + var time = atom.args[0], year = atom.args[1]; + if (pl.type.is_variable(time)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if (!pl.type.is_number(time)) { + thread.throw_error(pl.error.type("number", time, atom.indicator)); + } else if (!pl.type.is_variable(year) && !pl.type.is_integer(year)) { + thread.throw_error(pl.error.type("integer", year, atom.indicator)); + } else { + var value = new Num(new Date(time.value).getFullYear(), false); + thread.prepend([new State( + point.goal.replace(new Term("=", [year, value])), + point.substitution, + point + )]); + } + }, + "time_month/2": function(thread, point, atom) { + var time = atom.args[0], month = atom.args[1]; + if (pl.type.is_variable(time)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if (!pl.type.is_number(time)) { + thread.throw_error(pl.error.type("number", time, atom.indicator)); + } else if (!pl.type.is_variable(month) && !pl.type.is_integer(month)) { + thread.throw_error(pl.error.type("integer", month, atom.indicator)); + } else { + var value = new Num(new Date(time.value).getMonth(), false); + thread.prepend([new State( + point.goal.replace(new Term("=", [month, value])), + point.substitution, + point + )]); + } + }, + "phrase/3": function(thread, point, atom) { + var grbody = atom.args[0], s0 = atom.args[1], s = atom.args[2]; + var context_module = "user"; + if (grbody.indicator === ":/2") { + context_module = grbody.args[0].id; + grbody = grbody.args[1]; + } + if (pl.type.is_variable(grbody)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if (!pl.type.is_callable(grbody)) { + thread.throw_error(pl.error.type("callable", grbody, atom.indicator)); + } else { + var goal = body_to_dcg(grbody.clone(), s0, thread); + goal.value = new Term(":", [new Term(context_module), new Term("call", [goal.value])]); + if (goal !== null) { + thread.prepend([new State( + point.goal.replace(new Term(",", [goal.value, new Term("=", [goal.variable, s])])), + point.substitution, + point + )]); + } + } + }, + "phrase/2": function(thread, point, atom) { + var grbody = atom.args[0], s0 = atom.args[1]; + thread.prepend([new State( + point.goal.replace(new Term("phrase", [grbody, s0, new Term("[]", [])])), + point.substitution, + point + )]); + }, + "version/0": function(thread, point, atom) { + var msg = "Welcome to Tau Prolog version " + version.major + "." + version.minor + "." + version.patch + "\n"; + msg += "Tau Prolog comes with ABSOLUTELY NO WARRANTY. This is free software.\n"; + msg += "Please run ?- license. for legal details.\n"; + msg += "For online help and background, visit http:/tau-prolog.org"; + thread.prepend([new State( + point.goal.replace(new Term("write", [new Term(msg, [])])), + point.substitution, + point + )]); + }, + "license/0": function(thread, point, atom) { + var msg = "Tau Prolog. A Prolog interpreter in JavaScript.\n"; + msg += "Copyright (C) 2017 - 2022 Jos\xE9 Antonio Riaza Valverde\n\n"; + msg += "Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\n"; + msg += "1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\n"; + msg += "2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\n"; + msg += "3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.\n\n"; + msg += 'THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n'; + msg += "You should have received a copy of the BSD 3-Clause License along with this program. If not, see https://opensource.org/licenses/BSD-3-Clause"; + thread.prepend([new State( + point.goal.replace(new Term("write", [new Term(msg, [])])), + point.substitution, + point + )]); + } + }, "all", { + meta_predicates: { + "$findall/4": new Term("$findall", [new Term("?"), new Num(0, false), new Term("-"), new Term("?")]), + "$bagof/3": new Term("$bagof", [new Term("?"), new Term("^"), new Term("-")]), + "$setof/3": new Term("$setof", [new Term("?"), new Term("^"), new Term("-")]), + "$if/3": new Term("$if", [new Num(0, false), new Num(0, false), new Num(0, false)]), + ";/2": new Term(";", [new Num(0, false), new Num(0, false)]), + "->/2": new Term("->", [new Num(0, false), new Num(0, false)]), + "*->/2": new Term("*->", [new Num(0, false), new Num(0, false)]), + "\\+/1": new Term("\\+", [new Num(0, false)]), + "abolish/1": new Term("abolish", [new Term(":")]), + "asserta/1": new Term("asserta", [new Term(":")]), + "assertz/1": new Term("assertz", [new Term(":")]), + "bagof/3": new Term("bagof", [new Term("?"), new Term("^"), new Term("-")]), + "call/1": new Term("call", [new Num(0, false)]), + "call/2": new Term("call", [new Num(1, false), new Term("?")]), + "call/3": new Term("call", [new Num(2, false), new Term("?"), new Term("?")]), + "call/4": new Term("call", [new Num(3, false), new Term("?"), new Term("?"), new Term("?")]), + "call/5": new Term("call", [new Num(4, false), new Term("?"), new Term("?"), new Term("?"), new Term("?")]), + "call/6": new Term("call", [new Num(5, false), new Term("?"), new Term("?"), new Term("?"), new Term("?"), new Term("?")]), + "call/7": new Term("call", [new Num(6, false), new Term("?"), new Term("?"), new Term("?"), new Term("?"), new Term("?"), new Term("?")]), + "call/8": new Term("call", [new Num(6, false), new Term("?"), new Term("?"), new Term("?"), new Term("?"), new Term("?"), new Term("?"), new Term("?")]), + "call_cleanup/2": new Term("call_cleanup", [new Num(0, false), new Num(0, false)]), + "catch/3": new Term("catch", [new Num(0, false), new Term("?"), new Num(0, false)]), + "consult/1": new Term("consult", [new Term(":")]), + "clause/2": new Term("clause", [new Term(":"), new Term("?")]), + "current_predicate/2": new Term("current_predicate", [new Term("?"), new Term(":")]), + "findall/3": new Term("findall", [new Term("?"), new Num(0, false), new Term("-")]), + "findall/4": new Term("findall", [new Term("?"), new Num(0, false), new Term("-"), new Term("?")]), + "forall/2": new Term("forall", [new Num(0, false), new Num(0, false)]), + "listing/1": new Term("listing", [new Term(":")]), + "once/1": new Term("once", [new Num(0, false)]), + "phrase/2": new Term("phrase", [new Term(":"), new Term("?")]), + "phrase/3": new Term("phrase", [new Term(":"), new Term("?"), new Term("?")]), + "retract/1": new Term("retract", [new Term(":")]), + "retractall/1": new Term("retractall", [new Term(":")]), + "setup_call_cleanup/3": new Term("setup_call_cleanup", [new Num(0, false), new Num(0, false), new Num(0, false)]), + "setof/3": new Term("setof", [new Term("?"), new Term("^"), new Term("-")]) + } + }); + if (typeof module2 !== "undefined") { + module2.exports = pl; + } else { + window.pl = pl; + } + })(); + } +}); + +// src/main.ts +var main_exports = {}; +__export(main_exports, { + canonicalLanguages: () => canonicalLanguages, + default: () => ExecuteCodePlugin2, + languageAliases: () => languageAliases, + runButtonClass: () => runButtonClass, + supportedLanguages: () => supportedLanguages +}); +module.exports = __toCommonJS(main_exports); +var import_obsidian44 = require("obsidian"); + +// src/Outputter.ts +var import_events = require("events"); + +// src/svgs/parseHTML.ts +var parseHTML_default = (html) => { + let container = document.createElement("div"); + container.innerHTML = html; + return container.firstElementChild; +}; + +// src/svgs/loadEllipses.ts +var svg = parseHTML_default(` + + + + +`); +var loadEllipses_default = () => { + return svg.cloneNode(true); +}; + +// src/svgs/loadSpinner.ts +var svg2 = parseHTML_default(` + + + `); +var loadSpinner_default = () => { + return svg2.cloneNode(true); +}; + +// src/Outputter.ts +var TOGGLE_HTML_SIGIL = `TOGGLE_HTML_${Math.random().toString(16).substring(2)}`; +var Outputter = class extends import_events.EventEmitter { + constructor(codeBlock, doInput) { + super(); + this.inputState = doInput ? "INACTIVE" : "NOT_DOING"; + this.codeBlockElement = codeBlock; + this.hadPreviouslyPrinted = false; + this.escapeHTML = true; + this.htmlBuffer = ""; + this.blockRunState = "INITIAL"; + } + clear() { + if (this.outputElement) { + for (const child of Array.from(this.outputElement.children)) { + if (child instanceof HTMLSpanElement) + this.outputElement.removeChild(child); + } + } + this.lastPrintElem = null; + this.hadPreviouslyPrinted = false; + this.lastPrinted = ""; + if (this.clearButton) + this.clearButton.className = "clear-button-disabled"; + this.closeInput(); + this.inputState = "INACTIVE"; + this.killBlock(); + } + killBlock() { + } + delete() { + if (this.outputElement) + this.outputElement.style.display = "none"; + this.clear(); + } + write(text) { + this.processSigilsAndWriteText(text); + } + processSigilsAndWriteText(text) { + while (true) { + let index = text.indexOf(TOGGLE_HTML_SIGIL); + if (index === -1) + break; + if (index > 0) + this.writeRaw(text.substring(0, index)); + this.escapeHTML = !this.escapeHTML; + this.writeHTMLBuffer(this.addStdout()); + text = text.substring(index + TOGGLE_HTML_SIGIL.length); + } + this.writeRaw(text); + } + writeRaw(text) { + text = text.replace(/\x1b\\[;\d]*m/g, ""); + if (this.textPrinted(text)) { + this.escapeAwareAppend(this.addStdout(), text); + this.makeOutputVisible(); + } + } + writeErr(text) { + text = text.replace(/\x1b\\[;\d]*m/g, ""); + if (this.textPrinted(text)) { + this.addStderr().appendText(text); + this.makeOutputVisible(); + } + } + closeInput() { + this.inputState = "CLOSED"; + if (this.inputElement) + this.inputElement.style.display = "none"; + } + startBlock() { + if (!this.loadStateIndicatorElement) + this.addLoadStateIndicator(); + setTimeout(() => { + if (this.blockRunState !== "FINISHED") + this.loadStateIndicatorElement.classList.add("visible"); + }, 100); + this.loadStateIndicatorElement.empty(); + this.loadStateIndicatorElement.appendChild(loadSpinner_default()); + this.loadStateIndicatorElement.setAttribute("aria-label", "This block is running.\nClick to stop."); + this.blockRunState = "RUNNING"; + } + queueBlock() { + if (!this.loadStateIndicatorElement) + this.addLoadStateIndicator(); + setTimeout(() => { + if (this.blockRunState !== "FINISHED") + this.loadStateIndicatorElement.classList.add("visible"); + }, 100); + this.loadStateIndicatorElement.empty(); + this.loadStateIndicatorElement.appendChild(loadEllipses_default()); + this.loadStateIndicatorElement.setAttribute("aria-label", "This block is waiting for another block to finish.\nClick to cancel."); + this.blockRunState = "QUEUED"; + } + finishBlock() { + if (this.loadStateIndicatorElement) { + this.loadStateIndicatorElement.classList.remove("visible"); + } + this.blockRunState = "FINISHED"; + } + addLoadStateIndicator() { + this.loadStateIndicatorElement = document.createElement("div"); + this.loadStateIndicatorElement.classList.add("load-state-indicator"); + this.loadStateIndicatorElement.addEventListener("click", () => this.killBlock()); + this.getParentElement().parentElement.appendChild(this.loadStateIndicatorElement); + } + getParentElement() { + return this.codeBlockElement.parentElement; + } + addClearButton() { + const parentEl = this.getParentElement(); + this.clearButton = document.createElement("button"); + this.clearButton.className = "clear-button"; + this.clearButton.setText("Clear"); + this.clearButton.addEventListener("click", () => this.delete()); + parentEl.appendChild(this.clearButton); + } + addOutputElement() { + const parentEl = this.getParentElement(); + const hr = document.createElement("hr"); + this.outputElement = document.createElement("code"); + this.outputElement.classList.add("language-output"); + this.outputElement.appendChild(hr); + if (this.inputState != "NOT_DOING") + this.addInputElement(); + parentEl.appendChild(this.outputElement); + } + addInputElement() { + this.inputElement = document.createElement("input"); + this.inputElement.classList.add("interactive-stdin"); + this.inputElement.addEventListener("keypress", (e) => { + if (e.key == "Enter") { + this.processInput(this.inputElement.value + "\n"); + this.inputElement.value = ""; + } + }); + this.outputElement.appendChild(this.inputElement); + } + processInput(input) { + this.addStdin().appendText(input); + this.emit("data", input); + } + addStdin() { + return this.addStreamSegmentElement("stdin"); + } + addStderr() { + return this.addStreamSegmentElement("stderr"); + } + addStdout() { + return this.addStreamSegmentElement("stdout"); + } + addStreamSegmentElement(streamId) { + if (!this.outputElement) + this.addOutputElement(); + if (this.lastPrintElem) { + if (this.lastPrintElem.classList.contains(streamId)) + return this.lastPrintElem; + } + const stdElem = document.createElement("span"); + stdElem.addClass(streamId); + if (this.inputElement) { + this.outputElement.insertBefore(stdElem, this.inputElement); + } else { + this.outputElement.appendChild(stdElem); + } + this.lastPrintElem = stdElem; + return stdElem; + } + escapeAwareAppend(element, text) { + if (this.escapeHTML) { + element.appendChild(document.createTextNode(text)); + } else { + this.htmlBuffer += text; + } + } + writeHTMLBuffer(element) { + if (this.htmlBuffer !== "") { + this.makeOutputVisible(); + const content = document.createElement("div"); + content.innerHTML = this.htmlBuffer; + for (const childElem of Array.from(content.childNodes)) + element.appendChild(childElem); + this.htmlBuffer = ""; + } + } + textPrinted(text) { + if (this.hadPreviouslyPrinted) + return true; + if (text.contains(TOGGLE_HTML_SIGIL)) + return false; + if (text === "") + return false; + this.hadPreviouslyPrinted = true; + return true; + } + makeOutputVisible() { + this.closeInput(); + if (!this.clearButton) + this.addClearButton(); + if (!this.outputElement) + this.addOutputElement(); + this.inputState = "OPEN"; + this.outputElement.style.display = "block"; + this.clearButton.className = "clear-button"; + setTimeout(() => { + if (this.inputState === "OPEN") + this.inputElement.style.display = "inline"; + }, 1e3); + } +}; + +// src/settings/Settings.ts +var DEFAULT_SETTINGS = { + lastOpenLanguageTab: void 0, + timeout: 1e4, + allowInput: true, + wslMode: false, + shellWSLMode: false, + onlyCurrentBlock: false, + nodePath: "node", + nodeArgs: "", + jsFileExtension: "js", + jsInject: "", + tsPath: "ts-node", + tsArgs: "", + tsInject: "", + leanPath: "lean", + leanArgs: "", + leanInject: "", + luaPath: "lua", + luaArgs: "", + luaFileExtension: "lua", + luaInject: "", + dartPath: "dart", + dartArgs: "", + dartFileExtension: "dart", + dartInject: "", + csPath: "dotnet-script", + csArgs: "", + csFileExtension: "csx", + csInject: "", + pythonPath: "python", + pythonArgs: "", + pythonEmbedPlots: true, + pythonFileExtension: "py", + pythonInject: "", + shellPath: "bash", + shellArgs: "", + shellFileExtension: "sh", + shellInject: "", + batchPath: "call", + batchArgs: "", + batchFileExtension: "bat", + batchInject: "", + groovyPath: "groovy", + groovyArgs: "", + groovyFileExtension: "groovy", + groovyInject: "", + golangPath: "go", + golangArgs: "run", + golangFileExtension: "go", + goInject: "", + javaPath: "java", + javaArgs: "-ea", + javaFileExtension: "java", + javaInject: "", + maxPrologAnswers: 15, + prologInject: "", + powershellPath: "powershell", + powershellArgs: "-file", + powershellFileExtension: "ps1", + powershellInject: "$OutputEncoding = [console]::InputEncoding = [console]::OutputEncoding = New-Object System.Text.UTF8Encoding", + powershellEncoding: "latin1", + cargoPath: "cargo", + cargoEvalArgs: "", + rustInject: "", + cppRunner: "cling", + cppFileExtension: "cpp", + cppInject: "", + cppArgs: "", + cppUseMain: false, + clingPath: "cling", + clingArgs: "", + clingStd: "c++17", + rustFileExtension: "rs", + RPath: "Rscript", + RArgs: "", + REmbedPlots: true, + RFileExtension: "R", + rInject: "", + kotlinPath: "kotlinc", + kotlinArgs: "-script", + kotlinFileExtension: "kts", + kotlinInject: "", + swiftPath: "swift", + swiftArgs: "", + swiftFileExtension: "swift", + swiftInject: "", + runghcPath: "runghc", + ghcPath: "ghc", + ghciPath: "ghci", + useGhci: false, + haskellInject: "", + mathematicaPath: "wolframscript", + mathematicaArgs: "-file", + mathematicaFileExtension: "wls", + mathematicaInject: "", + scalaPath: "scala", + scalaArgs: "", + scalaFileExtension: "scala", + scalaInject: "", + racketPath: "racket", + racketArgs: "", + racketFileExtension: "rkt", + racketInject: "#lang racket", + fsharpPath: "dotnet", + fsharpArgs: "", + fsharpInject: "", + fsharpFileExtension: "fsx", + cArgs: "", + cUseMain: true, + cInject: "", + rubyPath: "ruby", + rubyArgs: "", + rubyFileExtension: "rb", + rubyInject: "", + sqlPath: "psql", + sqlArgs: "-d -U -f", + sqlInject: "", + octavePath: "octave", + octaveArgs: "-q", + octaveFileExtension: "m", + octaveInject: "figure('visible','off') # Necessary to embed plots", + maximaPath: "maxima", + maximaArgs: "-qb", + maximaFileExtension: "mx", + maximaInject: "", + applescriptPath: "osascript", + applescriptArgs: "", + applescriptFileExtension: "scpt", + applescriptInject: "", + zigPath: "zig", + zigArgs: "run", + zigInject: "", + ocamlPath: "ocaml", + ocamlArgs: "", + ocamlInject: "", + jsInteractive: true, + tsInteractive: false, + csInteractive: false, + leanInteractive: false, + luaInteractive: false, + dartInteractive: false, + pythonInteractive: true, + cppInteractive: false, + prologInteractive: false, + shellInteractive: false, + batchInteractive: false, + bashInteractive: false, + groovyInteractive: false, + rInteractive: false, + goInteractive: false, + rustInteractive: false, + javaInteractive: false, + powershellInteractive: false, + kotlinInteractive: false, + swiftInteractive: false, + mathematicaInteractive: false, + haskellInteractive: false, + scalaInteractive: false, + fsharpInteractive: false, + cInteractive: false, + racketInteractive: false, + rubyInteractive: false, + sqlInteractive: false, + octaveInteractive: false, + maximaInteractive: false, + applescriptInteractive: false, + zigInteractive: false, + ocamlInteractive: false +}; + +// src/settings/SettingsTab.ts +var import_obsidian33 = require("obsidian"); + +// src/settings/languageDisplayName.ts +var DISPLAY_NAMES = { + cpp: "C++", + cs: "C#", + go: "Golang", + groovy: "Groovy", + haskell: "Haskell", + java: "Java", + js: "Javascript", + kotlin: "Kotlin", + lua: "Lua", + mathematica: "Mathematica", + powershell: "Powershell", + prolog: "Prolog", + python: "Python", + r: "R", + rust: "Rust", + shell: "Shell", + batch: "Batch", + ts: "Typescript", + scala: "Scala", + swift: "Swift", + racket: "Racket", + c: "C", + fsharp: "F#", + ruby: "Ruby", + dart: "Dart", + lean: "Lean", + sql: "SQL", + octave: "Octave", + maxima: "Maxima", + applescript: "Applescript", + zig: "Zig", + ocaml: "OCaml" +}; + +// src/settings/per-lang/makeCppSettings.ts +var import_obsidian = require("obsidian"); +var makeCppSettings_default = (tab, containerEl) => { + containerEl.createEl("h3", { text: "C++ Settings" }); + new import_obsidian.Setting(containerEl).setName("Cling path").setDesc("The path to your Cling installation.").addText((text) => text.setValue(tab.plugin.settings.clingPath).onChange((value) => __async(void 0, null, function* () { + const sanitized = tab.sanitizePath(value); + tab.plugin.settings.clingPath = sanitized; + console.log("Cling path set to: " + sanitized); + yield tab.plugin.saveSettings(); + }))); + new import_obsidian.Setting(containerEl).setName("Cling arguments for C++").addText((text) => text.setValue(tab.plugin.settings.cppArgs).onChange((value) => __async(void 0, null, function* () { + tab.plugin.settings.cppArgs = value; + console.log("CPP args set to: " + value); + yield tab.plugin.saveSettings(); + }))); + new import_obsidian.Setting(containerEl).setName("Cling std").addDropdown((dropdown) => dropdown.addOption("c++98", "C++ 98").addOption("c++11", "C++ 11").addOption("c++14", "C++ 14").addOption("c++17", "C++ 17").addOption("c++2a", "C++ 20").setValue(tab.plugin.settings.clingStd).onChange((value) => __async(void 0, null, function* () { + tab.plugin.settings.clingStd = value; + console.log("Cling std set to: " + value); + yield tab.plugin.saveSettings(); + }))); + new import_obsidian.Setting(containerEl).setName("Use main function").setDesc("If enabled, will use a main() function as the code block entrypoint.").addToggle((toggle) => toggle.setValue(tab.plugin.settings.cppUseMain).onChange((value) => __async(void 0, null, function* () { + tab.plugin.settings.cppUseMain = value; + console.log("Cpp use main set to: " + value); + yield tab.plugin.saveSettings(); + }))); + tab.makeInjectSetting(containerEl, "cpp"); +}; + +// src/settings/per-lang/makeCSettings.ts +var import_obsidian2 = require("obsidian"); +var makeCSettings_default = (tab, containerEl) => { + containerEl.createEl("h3", { text: "C Settings" }); + new import_obsidian2.Setting(containerEl).setName("gcc / Cling path").setDesc("The path to your gcc / Cling installation.").addText((text) => text.setValue(tab.plugin.settings.clingPath).onChange((value) => __async(void 0, null, function* () { + const sanitized = tab.sanitizePath(value); + tab.plugin.settings.clingPath = sanitized; + console.log("gcc / Cling path set to: " + sanitized); + yield tab.plugin.saveSettings(); + }))); + new import_obsidian2.Setting(containerEl).setName("gcc / Cling arguments for C").addText((text) => text.setValue(tab.plugin.settings.cArgs).onChange((value) => __async(void 0, null, function* () { + tab.plugin.settings.cArgs = value; + console.log("gcc / Cling args set to: " + value); + yield tab.plugin.saveSettings(); + }))); + new import_obsidian2.Setting(containerEl).setName("Cling std (ignored for gcc)").addDropdown((dropdown) => dropdown.addOption("c++98", "C++ 98").addOption("c++11", "C++ 11").addOption("c++14", "C++ 14").addOption("c++17", "C++ 17").addOption("c++2a", "C++ 20").setValue(tab.plugin.settings.clingStd).onChange((value) => __async(void 0, null, function* () { + tab.plugin.settings.clingStd = value; + console.log("Cling std set to: " + value); + yield tab.plugin.saveSettings(); + }))); + new import_obsidian2.Setting(containerEl).setName("Use main function (mandatory for gcc)").setDesc("If enabled, will use a main() function as the code block entrypoint.").addToggle((toggle) => toggle.setValue(tab.plugin.settings.cUseMain).onChange((value) => __async(void 0, null, function* () { + tab.plugin.settings.cUseMain = value; + console.log("C use main set to: " + value); + yield tab.plugin.saveSettings(); + }))); + tab.makeInjectSetting(containerEl, "c"); +}; + +// src/settings/per-lang/makeCsSettings.ts +var import_obsidian3 = require("obsidian"); +var makeCsSettings_default = (tab, containerEl) => { + containerEl.createEl("h3", { text: "CSharp Settings" }); + new import_obsidian3.Setting(containerEl).setName("dotnet path").addText((text) => text.setValue(tab.plugin.settings.csPath).onChange((value) => __async(void 0, null, function* () { + const sanitized = tab.sanitizePath(value); + tab.plugin.settings.csPath = sanitized; + console.log("dotnet path set to: " + sanitized); + yield tab.plugin.saveSettings(); + }))); + new import_obsidian3.Setting(containerEl).setName("CSharp arguments").addText((text) => text.setValue(tab.plugin.settings.csArgs).onChange((value) => __async(void 0, null, function* () { + tab.plugin.settings.csArgs = value; + console.log("CSharp args set to: " + value); + yield tab.plugin.saveSettings(); + }))); + tab.makeInjectSetting(containerEl, "cs"); +}; + +// src/settings/per-lang/makeFSharpSettings.ts +var import_obsidian4 = require("obsidian"); +var makeFSharpSettings_default = (tab, containerEl) => { + containerEl.createEl("h3", { text: "F# Settings" }); + new import_obsidian4.Setting(containerEl).setName("F# path").setDesc("The path to dotnet.").addText((text) => text.setValue(tab.plugin.settings.fsharpPath).onChange((value) => __async(void 0, null, function* () { + const sanitized = tab.sanitizePath(value); + tab.plugin.settings.fsharpPath = sanitized; + console.log("F# path set to: " + sanitized); + yield tab.plugin.saveSettings(); + }))); + new import_obsidian4.Setting(containerEl).setName("F# arguments").addText((text) => text.setValue(tab.plugin.settings.fsharpArgs).onChange((value) => __async(void 0, null, function* () { + tab.plugin.settings.fsharpArgs = value; + console.log("F# args set to: " + value); + yield tab.plugin.saveSettings(); + }))); + new import_obsidian4.Setting(containerEl).setName("F# file extension").setDesc("Changes the file extension for generated F# scripts.").addText((text) => text.setValue(tab.plugin.settings.fsharpFileExtension).onChange((value) => __async(void 0, null, function* () { + tab.plugin.settings.fsharpFileExtension = value; + console.log("F# file extension set to: " + value); + yield tab.plugin.saveSettings(); + }))); + tab.makeInjectSetting(containerEl, "fsharp"); +}; + +// src/settings/per-lang/makeGoSettings.ts +var import_obsidian5 = require("obsidian"); +var makeGoSettings_default = (tab, containerEl) => { + containerEl.createEl("h3", { text: "Golang Settings" }); + new import_obsidian5.Setting(containerEl).setName("Golang Path").setDesc("The path to your Golang installation.").addText((text) => text.setValue(tab.plugin.settings.golangPath).onChange((value) => __async(void 0, null, function* () { + const sanitized = tab.sanitizePath(value); + tab.plugin.settings.golangPath = sanitized; + console.log("Golang path set to: " + sanitized); + yield tab.plugin.saveSettings(); + }))); + tab.makeInjectSetting(containerEl, "go"); +}; + +// src/settings/per-lang/makeGroovySettings.ts +var import_obsidian6 = require("obsidian"); +var makeGroovySettings_default = (tab, containerEl) => { + containerEl.createEl("h3", { text: "Groovy Settings" }); + new import_obsidian6.Setting(containerEl).setName("Groovy path").setDesc("The path to your Groovy installation.").addText((text) => text.setValue(tab.plugin.settings.groovyPath).onChange((value) => __async(void 0, null, function* () { + const sanitized = tab.sanitizePath(value); + tab.plugin.settings.groovyPath = sanitized; + console.log("Groovy path set to: " + sanitized); + yield tab.plugin.saveSettings(); + }))); + new import_obsidian6.Setting(containerEl).setName("Groovy arguments").addText((text) => text.setValue(tab.plugin.settings.groovyArgs).onChange((value) => __async(void 0, null, function* () { + tab.plugin.settings.groovyArgs = value; + console.log("Groovy args set to: " + value); + yield tab.plugin.saveSettings(); + }))); + tab.makeInjectSetting(containerEl, "groovy"); +}; + +// src/settings/per-lang/makeHaskellSettings.ts +var import_obsidian7 = require("obsidian"); +var makeHaskellSettings_default = (tab, containerEl) => { + containerEl.createEl("h3", { text: "Haskell Settings" }); + new import_obsidian7.Setting(containerEl).setName("Use Ghci").setDesc("Run haskell code with ghci instead of runghc").addToggle((toggle) => toggle.setValue(tab.plugin.settings.useGhci).onChange((value) => __async(void 0, null, function* () { + tab.plugin.settings.useGhci = value; + console.log(value ? "Now using ghci for haskell" : "Now using runghc for haskell."); + yield tab.plugin.saveSettings(); + }))); + new import_obsidian7.Setting(containerEl).setName("Ghci path").setDesc("The path to your ghci installation.").addText((text) => text.setValue(tab.plugin.settings.ghciPath).onChange((value) => __async(void 0, null, function* () { + const sanitized = tab.sanitizePath(value); + tab.plugin.settings.ghciPath = sanitized; + console.log("ghci path set to: " + sanitized); + yield tab.plugin.saveSettings(); + }))); + new import_obsidian7.Setting(containerEl).setName("Rungch path").setDesc("The path to your runghc installation.").addText((text) => text.setValue(tab.plugin.settings.runghcPath).onChange((value) => __async(void 0, null, function* () { + const sanitized = tab.sanitizePath(value); + tab.plugin.settings.runghcPath = sanitized; + console.log("runghc path set to: " + sanitized); + yield tab.plugin.saveSettings(); + }))); + new import_obsidian7.Setting(containerEl).setName("Ghc path").setDesc("The Ghc path your runghc installation will call.").addText((text) => text.setValue(tab.plugin.settings.ghcPath).onChange((value) => __async(void 0, null, function* () { + const sanitized = tab.sanitizePath(value); + tab.plugin.settings.ghcPath = sanitized; + console.log("ghc path set to: " + sanitized); + yield tab.plugin.saveSettings(); + }))); + tab.makeInjectSetting(containerEl, "haskell"); +}; + +// src/settings/per-lang/makeJavaSettings.ts +var import_obsidian8 = require("obsidian"); +var makeJavaSettings_default = (tab, containerEl) => { + containerEl.createEl("h3", { text: "Java Settings" }); + new import_obsidian8.Setting(containerEl).setName("Java path (Java 11 or higher)").setDesc("The path to your Java installation.").addText((text) => text.setValue(tab.plugin.settings.javaPath).onChange((value) => __async(void 0, null, function* () { + const sanitized = tab.sanitizePath(value); + tab.plugin.settings.javaPath = sanitized; + console.log("Java path set to: " + sanitized); + yield tab.plugin.saveSettings(); + }))); + new import_obsidian8.Setting(containerEl).setName("Java arguments").addText((text) => text.setValue(tab.plugin.settings.javaArgs).onChange((value) => __async(void 0, null, function* () { + tab.plugin.settings.javaArgs = value; + console.log("Java args set to: " + value); + yield tab.plugin.saveSettings(); + }))); + tab.makeInjectSetting(containerEl, "java"); +}; + +// src/settings/per-lang/makeJsSettings.ts +var import_obsidian9 = require("obsidian"); +var makeJsSettings_default = (tab, containerEl) => { + containerEl.createEl("h3", { text: "JavaScript / Node Settings" }); + new import_obsidian9.Setting(containerEl).setName("Node path").addText((text) => text.setValue(tab.plugin.settings.nodePath).onChange((value) => __async(void 0, null, function* () { + const sanitized = tab.sanitizePath(value); + tab.plugin.settings.nodePath = sanitized; + console.log("Node path set to: " + sanitized); + yield tab.plugin.saveSettings(); + }))); + new import_obsidian9.Setting(containerEl).setName("Node arguments").addText((text) => text.setValue(tab.plugin.settings.nodeArgs).onChange((value) => __async(void 0, null, function* () { + tab.plugin.settings.nodeArgs = value; + console.log("Node args set to: " + value); + yield tab.plugin.saveSettings(); + }))); + new import_obsidian9.Setting(containerEl).setName("Run Javascript blocks in Notebook Mode").addToggle( + (toggle) => toggle.setValue(tab.plugin.settings.jsInteractive).onChange((value) => __async(void 0, null, function* () { + tab.plugin.settings.jsInteractive = value; + yield tab.plugin.saveSettings(); + })) + ); + tab.makeInjectSetting(containerEl, "js"); +}; + +// src/settings/per-lang/makeKotlinSettings.ts +var import_obsidian10 = require("obsidian"); +var makeKotlinSettings_default = (tab, containerEl) => { + containerEl.createEl("h3", { text: "Kotlin Settings" }); + new import_obsidian10.Setting(containerEl).setName("Kotlin path").setDesc("The path to your Kotlin installation.").addText((text) => text.setValue(tab.plugin.settings.kotlinPath).onChange((value) => __async(void 0, null, function* () { + const sanitized = tab.sanitizePath(value); + tab.plugin.settings.kotlinPath = sanitized; + console.log("Kotlin path set to: " + sanitized); + yield tab.plugin.saveSettings(); + }))); + new import_obsidian10.Setting(containerEl).setName("Kotlin arguments").addText((text) => text.setValue(tab.plugin.settings.kotlinArgs).onChange((value) => __async(void 0, null, function* () { + tab.plugin.settings.kotlinArgs = value; + console.log("Kotlin args set to: " + value); + yield tab.plugin.saveSettings(); + }))); + tab.makeInjectSetting(containerEl, "kotlin"); +}; + +// src/settings/per-lang/makeLeanSettings.ts +var import_obsidian11 = require("obsidian"); +var makeLeanSettings_default = (tab, containerEl) => { + containerEl.createEl("h3", { text: "Lean Settings" }); + new import_obsidian11.Setting(containerEl).setName("lean path").addText((text) => text.setValue(tab.plugin.settings.leanPath).onChange((value) => __async(void 0, null, function* () { + const sanitized = tab.sanitizePath(value); + tab.plugin.settings.leanPath = sanitized; + console.log("lean path set to: " + sanitized); + yield tab.plugin.saveSettings(); + }))); + new import_obsidian11.Setting(containerEl).setName("Lean arguments").addText((text) => text.setValue(tab.plugin.settings.leanArgs).onChange((value) => __async(void 0, null, function* () { + tab.plugin.settings.leanArgs = value; + console.log("Lean args set to: " + value); + yield tab.plugin.saveSettings(); + }))); + tab.makeInjectSetting(containerEl, "lean"); +}; + +// src/settings/per-lang/makeLuaSettings.ts +var import_obsidian12 = require("obsidian"); +var makeLuaSettings_default = (tab, containerEl) => { + containerEl.createEl("h3", { text: "Lua Settings" }); + new import_obsidian12.Setting(containerEl).setName("lua path").addText((text) => text.setValue(tab.plugin.settings.luaPath).onChange((value) => __async(void 0, null, function* () { + const sanitized = tab.sanitizePath(value); + tab.plugin.settings.luaPath = sanitized; + console.log("lua path set to: " + sanitized); + yield tab.plugin.saveSettings(); + }))); + new import_obsidian12.Setting(containerEl).setName("Lua arguments").addText((text) => text.setValue(tab.plugin.settings.luaArgs).onChange((value) => __async(void 0, null, function* () { + tab.plugin.settings.luaArgs = value; + console.log("Lua args set to: " + value); + yield tab.plugin.saveSettings(); + }))); + tab.makeInjectSetting(containerEl, "lua"); +}; + +// src/settings/per-lang/makeDartSettings.ts +var import_obsidian13 = require("obsidian"); +var makeDartSettings_default = (tab, containerEl) => { + containerEl.createEl("h3", { text: "Dart Settings" }); + new import_obsidian13.Setting(containerEl).setName("dart path").addText((text) => text.setValue(tab.plugin.settings.dartPath).onChange((value) => __async(void 0, null, function* () { + const sanitized = tab.sanitizePath(value); + tab.plugin.settings.dartPath = sanitized; + console.log("dart path set to: " + sanitized); + yield tab.plugin.saveSettings(); + }))); + new import_obsidian13.Setting(containerEl).setName("Dart arguments").addText((text) => text.setValue(tab.plugin.settings.dartArgs).onChange((value) => __async(void 0, null, function* () { + tab.plugin.settings.dartArgs = value; + console.log("Dart args set to: " + value); + yield tab.plugin.saveSettings(); + }))); + tab.makeInjectSetting(containerEl, "dart"); +}; + +// src/settings/per-lang/makeMathematicaSettings.ts +var import_obsidian14 = require("obsidian"); +var makeMathematicaSettings_default = (tab, containerEl) => { + containerEl.createEl("h3", { text: "Wolfram Mathematica Settings" }); + new import_obsidian14.Setting(containerEl).setName("Mathematica path").setDesc("The path to your Mathematica installation.").addText((text) => text.setValue(tab.plugin.settings.mathematicaPath).onChange((value) => __async(void 0, null, function* () { + const sanitized = tab.sanitizePath(value); + tab.plugin.settings.mathematicaPath = sanitized; + console.log("Mathematica path set to: " + sanitized); + yield tab.plugin.saveSettings(); + }))); + new import_obsidian14.Setting(containerEl).setName("Mathematica arguments").addText((text) => text.setValue(tab.plugin.settings.mathematicaArgs).onChange((value) => __async(void 0, null, function* () { + tab.plugin.settings.mathematicaArgs = value; + console.log("Mathematica args set to: " + value); + yield tab.plugin.saveSettings(); + }))); + tab.makeInjectSetting(containerEl, "mathematica"); +}; + +// src/settings/per-lang/makePowershellSettings.ts +var import_obsidian15 = require("obsidian"); +var makePowershellSettings_default = (tab, containerEl) => { + containerEl.createEl("h3", { text: "Powershell Settings" }); + new import_obsidian15.Setting(containerEl).setName("Powershell path").setDesc("The path to Powershell.").addText((text) => text.setValue(tab.plugin.settings.powershellPath).onChange((value) => __async(void 0, null, function* () { + const sanitized = tab.sanitizePath(value); + tab.plugin.settings.powershellPath = sanitized; + console.log("Powershell path set to: " + sanitized); + yield tab.plugin.saveSettings(); + }))); + new import_obsidian15.Setting(containerEl).setName("Powershell arguments").addText((text) => text.setValue(tab.plugin.settings.powershellArgs).onChange((value) => __async(void 0, null, function* () { + tab.plugin.settings.powershellArgs = value; + console.log("Powershell args set to: " + value); + yield tab.plugin.saveSettings(); + }))); + new import_obsidian15.Setting(containerEl).setName("Powershell file extension").setDesc("Changes the file extension for generated shell scripts. This is useful if you don't want to use PowerShell.").addText((text) => text.setValue(tab.plugin.settings.powershellFileExtension).onChange((value) => __async(void 0, null, function* () { + tab.plugin.settings.powershellFileExtension = value; + console.log("Powershell file extension set to: " + value); + yield tab.plugin.saveSettings(); + }))); + new import_obsidian15.Setting(containerEl).setName("PowerShell script encoding").setDesc('Windows still uses windows-1252 as default encoding on most systems for legacy reasons. If you change your encodings systemwide to UTF-8, you can change this setting to UTF-8 as well. Only use one of the following encodings: "ascii", "utf8", "utf-8", "utf16le", "ucs2", "ucs-2", "base64", "latin1", "binary", "hex" (default: "latin1")').addText((text) => text.setValue(tab.plugin.settings.powershellEncoding).onChange((value) => __async(void 0, null, function* () { + value = value.replace(/["'`´]/, "").trim().toLowerCase(); + if (["ascii", "utf8", "utf-8", "utf16le", "ucs2", "ucs-2", "base64", "latin1", "binary", "hex"].includes(value)) { + tab.plugin.settings.powershellEncoding = value; + console.log("Powershell file extension set to: " + value); + yield tab.plugin.saveSettings(); + } else { + console.error("Invalid encoding. " + value + 'Please use one of the following encodings: "ascii", "utf8", "utf-8", "utf16le", "ucs2", "ucs-2", "base64", "latin1", "binary", "hex"'); + } + }))); + tab.makeInjectSetting(containerEl, "powershell"); +}; + +// src/settings/per-lang/makePrologSettings.ts +var import_obsidian16 = require("obsidian"); +var makePrologSettings_default = (tab, containerEl) => { + containerEl.createEl("h3", { text: "Prolog Settings" }); + new import_obsidian16.Setting(containerEl).setName("Prolog Answer Limit").setDesc("Maximal number of answers to be returned by the Prolog engine. tab is to prevent creating too huge texts in the notebook.").addText((text) => text.setValue("" + tab.plugin.settings.maxPrologAnswers).onChange((value) => __async(void 0, null, function* () { + if (Number(value) * 1e3) { + console.log("Prolog answer limit set to: " + value); + tab.plugin.settings.maxPrologAnswers = Number(value); + } + yield tab.plugin.saveSettings(); + }))); + tab.makeInjectSetting(containerEl, "prolog"); +}; + +// src/settings/per-lang/makePythonSettings.ts +var import_obsidian17 = require("obsidian"); +var makePythonSettings_default = (tab, containerEl) => { + containerEl.createEl("h3", { text: "Python Settings" }); + new import_obsidian17.Setting(containerEl).setName("Embed Python Plots").addToggle((toggle) => toggle.setValue(tab.plugin.settings.pythonEmbedPlots).onChange((value) => __async(void 0, null, function* () { + tab.plugin.settings.pythonEmbedPlots = value; + console.log(value ? "Embedding Plots into Notes." : "Not embedding Plots into Notes."); + yield tab.plugin.saveSettings(); + }))); + new import_obsidian17.Setting(containerEl).setName("Python path").setDesc("The path to your Python installation.").addText((text) => text.setValue(tab.plugin.settings.pythonPath).onChange((value) => __async(void 0, null, function* () { + const sanitized = tab.sanitizePath(value); + tab.plugin.settings.pythonPath = sanitized; + console.log("Python path set to: " + sanitized); + yield tab.plugin.saveSettings(); + }))); + new import_obsidian17.Setting(containerEl).setName("Python arguments").addText((text) => text.setValue(tab.plugin.settings.pythonArgs).onChange((value) => __async(void 0, null, function* () { + tab.plugin.settings.pythonArgs = value; + console.log("Python args set to: " + value); + yield tab.plugin.saveSettings(); + }))); + new import_obsidian17.Setting(containerEl).setName("Run Python blocks in Notebook Mode").addToggle((toggle) => toggle.setValue(tab.plugin.settings.pythonInteractive).onChange((value) => __async(void 0, null, function* () { + tab.plugin.settings.pythonInteractive = value; + yield tab.plugin.saveSettings(); + }))); + tab.makeInjectSetting(containerEl, "python"); +}; + +// src/settings/per-lang/makeRSettings.ts +var import_obsidian18 = require("obsidian"); +var makeRSettings_default = (tab, containerEl) => { + containerEl.createEl("h3", { text: "R Settings" }); + new import_obsidian18.Setting(containerEl).setName("Embed R Plots created via `plot()` into Notes").addToggle((toggle) => toggle.setValue(tab.plugin.settings.REmbedPlots).onChange((value) => __async(void 0, null, function* () { + tab.plugin.settings.REmbedPlots = value; + console.log(value ? "Embedding R Plots into Notes." : "Not embedding R Plots into Notes."); + yield tab.plugin.saveSettings(); + }))); + new import_obsidian18.Setting(containerEl).setName("Rscript path").setDesc("The path to your Rscript installation. Ensure you provide the Rscript binary instead of the ordinary R binary.").addText((text) => text.setValue(tab.plugin.settings.RPath).onChange((value) => __async(void 0, null, function* () { + const sanitized = tab.sanitizePath(value); + tab.plugin.settings.RPath = sanitized; + console.log("R path set to: " + sanitized); + yield tab.plugin.saveSettings(); + }))); + new import_obsidian18.Setting(containerEl).setName("R arguments").addText((text) => text.setValue(tab.plugin.settings.RArgs).onChange((value) => __async(void 0, null, function* () { + tab.plugin.settings.RArgs = value; + console.log("R args set to: " + value); + yield tab.plugin.saveSettings(); + }))); + new import_obsidian18.Setting(containerEl).setName("Run R blocks in Notebook Mode").addToggle((toggle) => toggle.setValue(tab.plugin.settings.rInteractive).onChange((value) => __async(void 0, null, function* () { + tab.plugin.settings.rInteractive = value; + yield tab.plugin.saveSettings(); + }))); + tab.makeInjectSetting(containerEl, "r"); +}; + +// src/settings/per-lang/makeRubySettings.ts +var import_obsidian19 = require("obsidian"); +var makeRubySettings_default = (tab, containerEl) => { + containerEl.createEl("h3", { text: "Ruby Settings" }); + new import_obsidian19.Setting(containerEl).setName("ruby path").setDesc("Path to your ruby installation").addText((text) => text.setValue(tab.plugin.settings.rubyPath).onChange((value) => __async(void 0, null, function* () { + const sanitized = tab.sanitizePath(value); + tab.plugin.settings.rubyPath = sanitized; + console.log("ruby path set to: " + sanitized); + yield tab.plugin.saveSettings(); + }))); + new import_obsidian19.Setting(containerEl).setName("ruby arguments").addText((text) => text.setValue(tab.plugin.settings.rubyArgs).onChange((value) => __async(void 0, null, function* () { + tab.plugin.settings.rubyArgs = value; + console.log("ruby args set to: " + value); + yield tab.plugin.saveSettings(); + }))); + tab.makeInjectSetting(containerEl, "ruby"); +}; + +// src/settings/per-lang/makeRustSettings.ts +var import_obsidian20 = require("obsidian"); +var makeRustSettings_default = (tab, containerEl) => { + containerEl.createEl("h3", { text: "Rust Settings" }); + new import_obsidian20.Setting(containerEl).setName("Cargo Path").setDesc("The path to your Cargo installation.").addText((text) => text.setValue(tab.plugin.settings.cargoPath).onChange((value) => __async(void 0, null, function* () { + const sanitized = tab.sanitizePath(value); + tab.plugin.settings.cargoPath = sanitized; + console.log("Cargo path set to: " + sanitized); + yield tab.plugin.saveSettings(); + }))); + tab.makeInjectSetting(containerEl, "rust"); +}; + +// src/settings/per-lang/makeScalaSettings.ts +var import_obsidian21 = require("obsidian"); +var makeScalaSettings_default = (tab, containerEl) => { + containerEl.createEl("h3", { text: "Scala Settings" }); + new import_obsidian21.Setting(containerEl).setName("scala path").setDesc("Path to your scala installation").addText((text) => text.setValue(tab.plugin.settings.scalaPath).onChange((value) => __async(void 0, null, function* () { + const sanitized = tab.sanitizePath(value); + tab.plugin.settings.scalaPath = sanitized; + console.log("scala path set to: " + sanitized); + yield tab.plugin.saveSettings(); + }))); + new import_obsidian21.Setting(containerEl).setName("Scala arguments").addText((text) => text.setValue(tab.plugin.settings.scalaArgs).onChange((value) => __async(void 0, null, function* () { + tab.plugin.settings.scalaArgs = value; + console.log("Scala args set to: " + value); + yield tab.plugin.saveSettings(); + }))); + tab.makeInjectSetting(containerEl, "scala"); +}; + +// src/settings/per-lang/makeRacketSettings.ts +var import_obsidian22 = require("obsidian"); +var makeRacketSettings_default = (tab, containerEl) => { + containerEl.createEl("h3", { text: "Racket Settings" }); + new import_obsidian22.Setting(containerEl).setName("racket path").setDesc("Path to your racket installation").addText((text) => text.setValue(tab.plugin.settings.racketPath).onChange((value) => __async(void 0, null, function* () { + const sanitized = tab.sanitizePath(value); + tab.plugin.settings.racketPath = sanitized; + console.log("racket path set to: " + sanitized); + yield tab.plugin.saveSettings(); + }))); + new import_obsidian22.Setting(containerEl).setName("Racket arguments").addText((text) => text.setValue(tab.plugin.settings.racketArgs).onChange((value) => __async(void 0, null, function* () { + tab.plugin.settings.racketArgs = value; + console.log("Racket args set to: " + value); + yield tab.plugin.saveSettings(); + }))); + tab.makeInjectSetting(containerEl, "racket"); +}; + +// src/settings/per-lang/makeShellSettings.ts +var import_obsidian23 = require("obsidian"); +var makeShellSettings_default = (tab, containerEl) => { + containerEl.createEl("h3", { text: "Shell Settings" }); + new import_obsidian23.Setting(containerEl).setName("Shell path").setDesc("The path to shell. Default is Bash but you can use any shell you want, e.g. bash, zsh, fish, ...").addText((text) => text.setValue(tab.plugin.settings.shellPath).onChange((value) => __async(void 0, null, function* () { + const sanitized = tab.sanitizePath(value); + tab.plugin.settings.shellPath = sanitized; + console.log("Shell path set to: " + sanitized); + yield tab.plugin.saveSettings(); + }))); + new import_obsidian23.Setting(containerEl).setName("Shell arguments").addText((text) => text.setValue(tab.plugin.settings.shellArgs).onChange((value) => __async(void 0, null, function* () { + tab.plugin.settings.shellArgs = value; + console.log("Shell args set to: " + value); + yield tab.plugin.saveSettings(); + }))); + new import_obsidian23.Setting(containerEl).setName("Shell file extension").setDesc("Changes the file extension for generated shell scripts. This is useful if you want to use a shell other than bash.").addText((text) => text.setValue(tab.plugin.settings.shellFileExtension).onChange((value) => __async(void 0, null, function* () { + tab.plugin.settings.shellFileExtension = value; + console.log("Shell file extension set to: " + value); + yield tab.plugin.saveSettings(); + }))); + new import_obsidian23.Setting(containerEl).setName("Shell WSL mode").setDesc('Run the shell script in Windows Subsystem for Linux. This option is used if the global "WSL Mode" is disabled.').addToggle( + (toggle) => toggle.setValue(tab.plugin.settings.shellWSLMode).onChange((value) => __async(void 0, null, function* () { + tab.plugin.settings.shellWSLMode = value; + yield tab.plugin.saveSettings(); + })) + ); + tab.makeInjectSetting(containerEl, "shell"); +}; + +// src/settings/per-lang/makeBatchSettings.ts +var import_obsidian24 = require("obsidian"); +var makeBatchSettings_default = (tab, containerEl) => { + containerEl.createEl("h3", { text: "Batch Settings" }); + new import_obsidian24.Setting(containerEl).setName("Batch path").setDesc("The path to the terminal. Default is command prompt.").addText((text) => text.setValue(tab.plugin.settings.batchPath).onChange((value) => __async(void 0, null, function* () { + const sanitized = tab.sanitizePath(value); + tab.plugin.settings.batchPath = sanitized; + console.log("Batch path set to: " + sanitized); + yield tab.plugin.saveSettings(); + }))); + new import_obsidian24.Setting(containerEl).setName("Batch arguments").addText((text) => text.setValue(tab.plugin.settings.batchArgs).onChange((value) => __async(void 0, null, function* () { + tab.plugin.settings.batchArgs = value; + console.log("Batch args set to: " + value); + yield tab.plugin.saveSettings(); + }))); + new import_obsidian24.Setting(containerEl).setName("Batch file extension").setDesc("Changes the file extension for generated batch scripts. Default is .bat").addText((text) => text.setValue(tab.plugin.settings.batchFileExtension).onChange((value) => __async(void 0, null, function* () { + tab.plugin.settings.batchFileExtension = value; + console.log("Batch file extension set to: " + value); + yield tab.plugin.saveSettings(); + }))); + tab.makeInjectSetting(containerEl, "batch"); +}; + +// src/settings/per-lang/makeTsSettings.ts +var import_obsidian25 = require("obsidian"); +var makeTsSettings_default = (tab, containerEl) => { + containerEl.createEl("h3", { text: "TypeScript Settings" }); + new import_obsidian25.Setting(containerEl).setName("ts-node path").addText((text) => text.setValue(tab.plugin.settings.tsPath).onChange((value) => __async(void 0, null, function* () { + const sanitized = tab.sanitizePath(value); + tab.plugin.settings.tsPath = sanitized; + console.log("ts-node path set to: " + sanitized); + yield tab.plugin.saveSettings(); + }))); + new import_obsidian25.Setting(containerEl).setName("TypeScript arguments").addText((text) => text.setValue(tab.plugin.settings.tsArgs).onChange((value) => __async(void 0, null, function* () { + tab.plugin.settings.tsArgs = value; + console.log("TypeScript args set to: " + value); + yield tab.plugin.saveSettings(); + }))); + tab.makeInjectSetting(containerEl, "ts"); +}; + +// src/settings/per-lang/makeSQLSettings.ts +var import_obsidian26 = require("obsidian"); +var makeSQLSettings_default = (tab, containerEl) => { + containerEl.createEl("h3", { text: "SQL Settings" }); + new import_obsidian26.Setting(containerEl).setName("SQL path").setDesc("Path to your SQL installation. You can select the SQL dialect you prefer but you need to set the right arguments by yourself.").addText((text) => text.setValue(tab.plugin.settings.sqlPath).onChange((value) => __async(void 0, null, function* () { + const sanitized = tab.sanitizePath(value); + tab.plugin.settings.sqlPath = sanitized; + console.log("ruby path set to: " + sanitized); + yield tab.plugin.saveSettings(); + }))); + new import_obsidian26.Setting(containerEl).setName("SQL arguments").setDesc("Set the right arguments for your database.").addText((text) => text.setValue(tab.plugin.settings.sqlArgs).onChange((value) => __async(void 0, null, function* () { + tab.plugin.settings.sqlArgs = value; + console.log("SQL args set to: " + value); + yield tab.plugin.saveSettings(); + }))); + tab.makeInjectSetting(containerEl, "sql"); +}; + +// src/settings/per-lang/makeOctaveSettings.ts +var import_obsidian27 = require("obsidian"); +var makeOctaveSettings_default = (tab, containerEl) => { + containerEl.createEl("h3", { text: "Octave Settings" }); + new import_obsidian27.Setting(containerEl).setName("Octave path").setDesc("The path to your Octave installation.").addText((text) => text.setValue(tab.plugin.settings.octavePath).onChange((value) => __async(void 0, null, function* () { + const sanitized = tab.sanitizePath(value); + tab.plugin.settings.octavePath = sanitized; + console.log("Octave path set to: " + sanitized); + yield tab.plugin.saveSettings(); + }))); + new import_obsidian27.Setting(containerEl).setName("Octave arguments").addText((text) => text.setValue(tab.plugin.settings.octaveArgs).onChange((value) => __async(void 0, null, function* () { + tab.plugin.settings.octaveArgs = value; + console.log("Octave args set to: " + value); + yield tab.plugin.saveSettings(); + }))); + tab.makeInjectSetting(containerEl, "octave"); +}; + +// src/settings/per-lang/makeMaximaSettings.ts +var import_obsidian28 = require("obsidian"); +var makeMaximaSettings_default = (tab, containerEl) => { + containerEl.createEl("h3", { text: "Maxima Settings" }); + new import_obsidian28.Setting(containerEl).setName("Maxima path").setDesc("The path to your Maxima installation.").addText((text) => text.setValue(tab.plugin.settings.maximaPath).onChange((value) => __async(void 0, null, function* () { + const sanitized = tab.sanitizePath(value); + tab.plugin.settings.maximaPath = sanitized; + console.log("Maxima path set to: " + sanitized); + yield tab.plugin.saveSettings(); + }))); + new import_obsidian28.Setting(containerEl).setName("Maxima arguments").addText((text) => text.setValue(tab.plugin.settings.maximaArgs).onChange((value) => __async(void 0, null, function* () { + tab.plugin.settings.maximaArgs = value; + console.log("Maxima args set to: " + value); + yield tab.plugin.saveSettings(); + }))); + tab.makeInjectSetting(containerEl, "maxima"); +}; + +// src/settings/per-lang/makeApplescriptSettings.ts +var import_obsidian29 = require("obsidian"); +var makeApplescriptSettings_default = (tab, containerEl) => { + containerEl.createEl("h3", { text: "Applescript Settings" }); + new import_obsidian29.Setting(containerEl).setName("Osascript path").setDesc("The path to your osascript installation (only available on MacOS).").addText((text) => text.setValue(tab.plugin.settings.applescriptPath).onChange((value) => __async(void 0, null, function* () { + const sanitized = tab.sanitizePath(value); + tab.plugin.settings.applescriptPath = sanitized; + console.log("Applescript path set to: " + sanitized); + yield tab.plugin.saveSettings(); + }))); + new import_obsidian29.Setting(containerEl).setName("Applescript arguments").addText((text) => text.setValue(tab.plugin.settings.applescriptArgs).onChange((value) => __async(void 0, null, function* () { + tab.plugin.settings.applescriptArgs = value; + console.log("Applescript args set to: " + value); + yield tab.plugin.saveSettings(); + }))); + tab.makeInjectSetting(containerEl, "applescript"); +}; + +// src/settings/per-lang/makeZigSettings.ts +var import_obsidian30 = require("obsidian"); +var makeZigSettings_default = (tab, containerEl) => { + containerEl.createEl("h3", { text: "Zig Settings" }); + new import_obsidian30.Setting(containerEl).setName("zig path").setDesc("Path to your zig installation").addText((text) => text.setValue(tab.plugin.settings.zigPath).onChange((value) => __async(void 0, null, function* () { + const sanitized = tab.sanitizePath(value); + tab.plugin.settings.zigPath = sanitized; + console.log("zig path set to: " + sanitized); + yield tab.plugin.saveSettings(); + }))); + new import_obsidian30.Setting(containerEl).setName("zig arguments").addText((text) => text.setValue(tab.plugin.settings.zigArgs).onChange((value) => __async(void 0, null, function* () { + tab.plugin.settings.zigArgs = value; + console.log("zig args set to: " + value); + yield tab.plugin.saveSettings(); + }))); + tab.makeInjectSetting(containerEl, "zig"); +}; + +// src/settings/per-lang/makeOCamlSettings.ts +var import_obsidian31 = require("obsidian"); +var makeOCamlSettings_default = (tab, containerEl) => { + containerEl.createEl("h3", { text: "OCaml Settings" }); + new import_obsidian31.Setting(containerEl).setName("ocaml path").setDesc("Path to your ocaml installation").addText((text) => text.setValue(tab.plugin.settings.ocamlPath).onChange((value) => __async(void 0, null, function* () { + const sanitized = tab.sanitizePath(value); + tab.plugin.settings.ocamlPath = sanitized; + console.log("ocaml path set to: " + sanitized); + yield tab.plugin.saveSettings(); + }))); + new import_obsidian31.Setting(containerEl).setName("ocaml arguments").addText((text) => text.setValue(tab.plugin.settings.ocamlArgs).onChange((value) => __async(void 0, null, function* () { + tab.plugin.settings.ocamlArgs = value; + console.log("ocaml args set to: " + value); + yield tab.plugin.saveSettings(); + }))); + tab.makeInjectSetting(containerEl, "ocaml"); +}; + +// src/settings/per-lang/makeSwiftSettings.ts +var import_obsidian32 = require("obsidian"); +var makeSwiftSettings_default = (tab, containerEl) => { + containerEl.createEl("h3", { text: "Swift Settings" }); + new import_obsidian32.Setting(containerEl).setName("Swift path").setDesc("The path to your Swift installation.").addText((text) => text.setValue(tab.plugin.settings.swiftPath).onChange((value) => __async(void 0, null, function* () { + const sanitized = tab.sanitizePath(value); + tab.plugin.settings.swiftPath = sanitized; + console.log("Swift path set to: " + sanitized); + yield tab.plugin.saveSettings(); + }))); + new import_obsidian32.Setting(containerEl).setName("Swift arguments").addText((text) => text.setValue(tab.plugin.settings.swiftArgs).onChange((value) => __async(void 0, null, function* () { + tab.plugin.settings.swiftArgs = value; + console.log("Swift args set to: " + value); + yield tab.plugin.saveSettings(); + }))); + tab.makeInjectSetting(containerEl, "swift"); +}; + +// src/settings/SettingsTab.ts +var SettingsTab = class extends import_obsidian33.PluginSettingTab { + constructor(app, plugin) { + super(app, plugin); + this.plugin = plugin; + this.languageContainers = {}; + } + display() { + const { containerEl } = this; + containerEl.empty(); + containerEl.createEl("h2", { text: "Settings for the Code Execution Plugin." }); + containerEl.createEl("h3", { text: "General Settings" }); + new import_obsidian33.Setting(containerEl).setName("Timeout (in seconds)").setDesc("The time after which a program gets shut down automatically. This is to prevent infinite loops. ").addText((text) => text.setValue("" + this.plugin.settings.timeout / 1e3).onChange((value) => __async(this, null, function* () { + if (Number(value) * 1e3) { + console.log("Timeout set to: " + value); + this.plugin.settings.timeout = Number(value) * 1e3; + } + yield this.plugin.saveSettings(); + }))); + new import_obsidian33.Setting(containerEl).setName("Allow Input").setDesc("Whether or not to include a stdin input box when running blocks. In order to apply changes to this, Obsidian must be refreshed. ").addToggle((text) => text.setValue(this.plugin.settings.allowInput).onChange((value) => __async(this, null, function* () { + console.log("Allow Input set to: " + value); + this.plugin.settings.allowInput = value; + yield this.plugin.saveSettings(); + }))); + if (process.platform === "win32") { + new import_obsidian33.Setting(containerEl).setName("WSL Mode").setDesc("Whether or not to run code in the Windows Subsystem for Linux. If you don't have WSL installed, don't turn this on!").addToggle((text) => text.setValue(this.plugin.settings.wslMode).onChange((value) => __async(this, null, function* () { + console.log("WSL Mode set to: " + value); + this.plugin.settings.wslMode = value; + yield this.plugin.saveSettings(); + }))); + } + new import_obsidian33.Setting(containerEl).setName("Only Current Log").setDesc("Whether or not show print log only in current code block.").addToggle((text) => text.setValue(this.plugin.settings.onlyCurrentBlock).onChange((value) => __async(this, null, function* () { + console.log("Only Show Current Block Log set to: " + value); + this.plugin.settings.onlyCurrentBlock = value; + yield this.plugin.saveSettings(); + }))); + containerEl.createEl("hr"); + new import_obsidian33.Setting(containerEl).setName("Language-Specific Settings").setDesc("Pick a language to edit its language-specific settings").addDropdown( + (dropdown) => dropdown.addOptions(Object.fromEntries( + canonicalLanguages.map((lang) => [lang, DISPLAY_NAMES[lang]]) + )).setValue(this.plugin.settings.lastOpenLanguageTab || canonicalLanguages[0]).onChange((value) => __async(this, null, function* () { + this.focusContainer(value); + this.plugin.settings.lastOpenLanguageTab = value; + yield this.plugin.saveSettings(); + })) + ).settingEl.style.borderTop = "0"; + makeJsSettings_default(this, this.makeContainerFor("js")); + makeTsSettings_default(this, this.makeContainerFor("ts")); + makeLeanSettings_default(this, this.makeContainerFor("lean")); + makeLuaSettings_default(this, this.makeContainerFor("lua")); + makeDartSettings_default(this, this.makeContainerFor("dart")); + makeCsSettings_default(this, this.makeContainerFor("cs")); + makeJavaSettings_default(this, this.makeContainerFor("java")); + makePythonSettings_default(this, this.makeContainerFor("python")); + makeGoSettings_default(this, this.makeContainerFor("go")); + makeRustSettings_default(this, this.makeContainerFor("rust")); + makeCppSettings_default(this, this.makeContainerFor("cpp")); + makeCSettings_default(this, this.makeContainerFor("c")); + makeBatchSettings_default(this, this.makeContainerFor("batch")); + makeShellSettings_default(this, this.makeContainerFor("shell")); + makePowershellSettings_default(this, this.makeContainerFor("powershell")); + makePrologSettings_default(this, this.makeContainerFor("prolog")); + makeGroovySettings_default(this, this.makeContainerFor("groovy")); + makeRSettings_default(this, this.makeContainerFor("r")); + makeKotlinSettings_default(this, this.makeContainerFor("kotlin")); + makeMathematicaSettings_default(this, this.makeContainerFor("mathematica")); + makeHaskellSettings_default(this, this.makeContainerFor("haskell")); + makeScalaSettings_default(this, this.makeContainerFor("scala")); + makeSwiftSettings_default(this, this.makeContainerFor("swift")); + makeRacketSettings_default(this, this.makeContainerFor("racket")); + makeFSharpSettings_default(this, this.makeContainerFor("fsharp")); + makeRubySettings_default(this, this.makeContainerFor("ruby")); + makeSQLSettings_default(this, this.makeContainerFor("sql")); + makeOctaveSettings_default(this, this.makeContainerFor("octave")); + makeMaximaSettings_default(this, this.makeContainerFor("maxima")); + makeApplescriptSettings_default(this, this.makeContainerFor("applescript")); + makeZigSettings_default(this, this.makeContainerFor("zig")); + makeOCamlSettings_default(this, this.makeContainerFor("ocaml")); + this.focusContainer(this.plugin.settings.lastOpenLanguageTab || canonicalLanguages[0]); + } + makeContainerFor(language) { + const container = this.containerEl.createDiv(); + container.style.display = "none"; + this.languageContainers[language] = container; + return container; + } + focusContainer(language) { + if (this.activeLanguageContainer) + this.activeLanguageContainer.style.display = "none"; + if (language in this.languageContainers) { + this.activeLanguageContainer = this.languageContainers[language]; + this.activeLanguageContainer.style.display = "block"; + } + } + sanitizePath(path2) { + path2 = path2.replace(/\\/g, "/"); + path2 = path2.replace(/['"`]/, ""); + path2 = path2.trim(); + return path2; + } + makeInjectSetting(containerEl, language) { + const languageAlt = DISPLAY_NAMES[language]; + new import_obsidian33.Setting(containerEl).setName(`Inject ${languageAlt} code`).setDesc(`Code to add to the top of every ${languageAlt} code block before running.`).setClass("settings-code-input-box").addTextArea((textarea) => { + const val = this.plugin.settings[`${language}Inject`]; + return textarea.setValue(val).onChange((value) => __async(this, null, function* () { + this.plugin.settings[`${language}Inject`] = value; + console.log(`${language} inject set to ${value}`); + yield this.plugin.saveSettings(); + })); + }); + } +}; + +// src/transforms/Magic.ts +var os = __toESM(require("os")); +var import_obsidian34 = require("obsidian"); +var SHOW_REGEX = new RegExp(`@show\\(["'](?[^<>?*=!\\n#()\\[\\]{}]+)["'](,\\s*(?\\d+[\\w%]+),?\\s*(?\\d+[\\w%]+))?(,\\s*(?left|center|right))?\\)`, "g"); +var HTML_REGEX = new RegExp("@html\\((?[^)]+)\\)", "g"); +var VAULT_REGEX = /@vault/g; +var VAULT_PATH_REGEX = /@vault_path/g; +var VAULT_URL_REGEX = /@vault_url/g; +var CURRENT_NOTE_REGEX = /@note/g; +var CURRENT_NOTE_PATH_REGEX = /@note_path/g; +var CURRENT_NOTE_URL_REGEX = /@note_url/g; +var NOTE_TITLE_REGEX = /@title/g; +var COLOR_THEME_REGEX = /@theme/g; +var PYTHON_PLOT_REGEX = /^(plt|matplotlib.pyplot|pyplot)\.show\(\)/gm; +var R_PLOT_REGEX = /^plot\(.*\)/gm; +var OCTAVE_PLOT_REGEX = /^plot\s*\(.*\);/gm; +var MAXIMA_PLOT_REGEX = /^plot2d\s*\(.*\[.+\]\)\s*[$;]/gm; +function insertVaultPath(source, vaultPath) { + source = source.replace(VAULT_PATH_REGEX, `"${vaultPath.replace(/\\/g, "/")}"`); + source = source.replace(VAULT_URL_REGEX, `"${import_obsidian34.Platform.resourcePathPrefix + vaultPath.replace(/\\/g, "/")}"`); + source = source.replace(VAULT_REGEX, `"${import_obsidian34.Platform.resourcePathPrefix + vaultPath.replace(/\\/g, "/")}"`); + return source; +} +function insertNotePath(source, notePath) { + source = source.replace(CURRENT_NOTE_PATH_REGEX, `"${notePath.replace(/\\/g, "/")}"`); + source = source.replace(CURRENT_NOTE_URL_REGEX, `"${import_obsidian34.Platform.resourcePathPrefix + notePath.replace(/\\/g, "/")}"`); + source = source.replace(CURRENT_NOTE_REGEX, `"${import_obsidian34.Platform.resourcePathPrefix + notePath.replace(/\\/g, "/")}"`); + return source; +} +function insertNoteTitle(source, noteTitle) { + let t = ""; + if (noteTitle.contains(".")) + t = noteTitle.split(".").slice(0, -1).join("."); + return source.replace(NOTE_TITLE_REGEX, `"${t}"`); +} +function insertColorTheme(source, theme) { + return source.replace(COLOR_THEME_REGEX, `"${theme}"`); +} +function addMagicToPython(source) { + source = pythonParseShowImage(source); + source = pythonParseHtmlFunction(source); + return source; +} +function addMagicToJS(source) { + source = jsParseShowImage(source); + source = jsParseHtmlFunction(source); + return source; +} +function addInlinePlotsToPython(source, toggleHtmlSigil) { + const showPlot = `import io; import sys; __obsidian_execute_code_temp_pyplot_var__=io.BytesIO(); plt.plot(); plt.savefig(__obsidian_execute_code_temp_pyplot_var__, format='svg'); plt.close(); sys.stdout.write(${JSON.stringify(toggleHtmlSigil)}); sys.stdout.flush(); sys.stdout.buffer.write(__obsidian_execute_code_temp_pyplot_var__.getvalue()); sys.stdout.flush(); sys.stdout.write(${JSON.stringify(toggleHtmlSigil)}); sys.stdout.flush()`; + return source.replace(PYTHON_PLOT_REGEX, showPlot); +} +function addInlinePlotsToR(source) { + const matches = source.matchAll(R_PLOT_REGEX); + for (const match of matches) { + const tempFile = `${os.tmpdir()}/temp_${Date.now()}.png`.replace(/\\/g, "/"); + const substitute = `png("${tempFile}"); ${match[0]}; dev.off(); cat('${TOGGLE_HTML_SIGIL}${TOGGLE_HTML_SIGIL}')`; + source = source.replace(match[0], substitute); + } + return source; +} +function pythonParseShowImage(source) { + const matches = source.matchAll(SHOW_REGEX); + for (const match of matches) { + const imagePath = match.groups.path; + const width = match.groups.width; + const height = match.groups.height; + const alignment = match.groups.align; + const image = buildMagicShowImage(imagePath.replace(/\\/g, "\\\\"), width, height, alignment); + source = source.replace(match[0], "print('" + TOGGLE_HTML_SIGIL + image + TOGGLE_HTML_SIGIL + "')"); + } + return source; +} +function pythonParseHtmlFunction(source) { + const matches = source.matchAll(HTML_REGEX); + for (const match of matches) { + const html = match.groups.html; + const toggle = JSON.stringify(TOGGLE_HTML_SIGIL); + source = source.replace(match[0], `print(${toggle}); print(${html}); print(${toggle})`); + } + return source; +} +function jsParseShowImage(source) { + const matches = source.matchAll(SHOW_REGEX); + for (const match of matches) { + const imagePath = match.groups.path; + const width = match.groups.width; + const height = match.groups.height; + const alignment = match.groups.align; + const image = buildMagicShowImage(imagePath.replace(/\\/g, "\\\\"), width, height, alignment); + source = source.replace(match[0], "console.log('" + TOGGLE_HTML_SIGIL + image + TOGGLE_HTML_SIGIL + "')"); + console.log(source); + } + return source; +} +function jsParseHtmlFunction(source) { + const matches = source.matchAll(HTML_REGEX); + for (const match of matches) { + const html = match.groups.html; + const toggle = JSON.stringify(TOGGLE_HTML_SIGIL); + source = source.replace(match[0], `console.log(${toggle}); console.log(${html}); console.log(${toggle})`); + } + return source; +} +function buildMagicShowImage(imagePath, width = "0", height = "0", alignment = "center") { + if (imagePath.contains("+")) { + let splittedPath = imagePath.replace(/['"]/g, "").split("+"); + splittedPath = splittedPath.map((element) => element.trim()); + imagePath = splittedPath.join(""); + } + if (width == "0" || height == "0") + return `Image found at path ${imagePath}.`; + return `Image found at path ${imagePath}.`; +} +function addInlinePlotsToOctave(source) { + const matches = source.matchAll(OCTAVE_PLOT_REGEX); + for (const match of matches) { + const tempFile = `${os.tmpdir()}/temp_${Date.now()}.png`.replace(/\\/g, "/"); + const substitute = `${match[0]}; print -dpng ${tempFile}; disp('${TOGGLE_HTML_SIGIL}${TOGGLE_HTML_SIGIL}');`; + source = source.replace(match[0], substitute); + } + return source; +} +function addInlinePlotsToMaxima(source) { + const matches = source.matchAll(MAXIMA_PLOT_REGEX); + for (const match of matches) { + const tempFile = `${os.tmpdir()}/temp_${Date.now()}.png`.replace(/\\/g, "/"); + const updated_plot_call = match[0].substring(0, match[0].lastIndexOf(")")) + `, [png_file, "${tempFile}"])`; + const substitute = `${updated_plot_call}; print ('${TOGGLE_HTML_SIGIL}${TOGGLE_HTML_SIGIL}');`; + source = source.replace(match[0], substitute); + } + return source; +} + +// src/Vault.ts +var import_obsidian35 = require("obsidian"); +function getVaultVariables(app) { + const activeView = app.workspace.getActiveViewOfType(import_obsidian35.MarkdownView); + if (activeView === null) { + return null; + } + const adapter = app.vault.adapter; + const vaultPath = adapter.getBasePath(); + const folder = activeView.file.parent.path; + const fileName = activeView.file.name; + const filePath = activeView.file.path; + const theme = document.body.classList.contains("theme-light") ? "light" : "dark"; + return { + vaultPath, + folder, + fileName, + filePath, + theme + }; +} + +// src/transforms/TransformCode.ts +function getLanguageAlias(language) { + if (language === void 0) + return void 0; + switch (language) { + case "javascript": + return "js"; + case "typescript": + return "ts"; + case "csharp": + return "cs"; + case "bash": + return "shell"; + case "py": + return "python"; + case "wolfram": + return "mathematica"; + case "nb": + return "mathematica"; + case "wl": + "mathematica"; + case "hs": + return "haskell"; + } + if (canonicalLanguages.includes(language)) + return language; + return void 0; +} +function transformMagicCommands(app, srcCode) { + let ret = srcCode; + const vars = getVaultVariables(app); + if (vars) { + ret = insertVaultPath(ret, vars.vaultPath); + ret = insertNotePath(ret, vars.filePath); + ret = insertNoteTitle(ret, vars.fileName); + ret = insertColorTheme(ret, vars.theme); + } else { + console.warn(`Could not load all Vault variables! ${vars}`); + } + return ret; +} +function getCodeBlockLanguage(firstLineOfCode) { + let currentLanguage = firstLineOfCode.split("```")[1].trim().split(" ")[0].split("{")[0]; + if (isStringNotEmpty(currentLanguage) && currentLanguage.startsWith("run-")) { + currentLanguage = currentLanguage.replace("run-", ""); + } + return getLanguageAlias(currentLanguage); +} +function isStringNotEmpty(str) { + return !!str && str.trim().length > 0; +} + +// src/transforms/CodeInjector.ts +var import_obsidian37 = require("obsidian"); + +// src/CodeBlockArgs.ts +var import_obsidian36 = require("obsidian"); +var JSON5 = __toESM(require_dist()); +function getArgs(firstLineOfCode) { + if (!firstLineOfCode.contains("{") && !firstLineOfCode.contains("}")) + return {}; + try { + let args = firstLineOfCode.substring(firstLineOfCode.indexOf("{") + 1).trim(); + args = args.replace(/=/g, ":"); + const exports = []; + const handleUnnamedExport = (exportName) => { + let i2 = args.indexOf(exportName); + while (i2 !== -1) { + const nextChar = args[i2 + exportName.length]; + if (nextChar !== `"` && nextChar !== `'`) { + args = args.substring(0, i2) + args.substring(i2 + exportName.length + (nextChar === "}" ? 0 : 1)); + exports.push(exportName); + } + i2 = args.indexOf(exportName, i2 + 1); + } + }; + handleUnnamedExport("pre"); + handleUnnamedExport("post"); + args = `{export: ['${exports.join("', '")}'], ${args}`; + return JSON5.parse(args); + } catch (err) { + new import_obsidian36.Notice(`Failed to parse code block arguments from line: +${firstLineOfCode} + +Failed with error: +${err}`); + return {}; + } +} + +// src/transforms/CodeInjector.ts +var CodeInjector = class { + constructor(app, settings, language) { + this.prependSrcCode = ""; + this.appendSrcCode = ""; + this.namedImportSrcCode = ""; + this.mainArgs = {}; + this.namedExports = {}; + this.app = app; + this.settings = settings; + this.language = language; + } + injectCode(srcCode) { + return __async(this, null, function* () { + const language = getLanguageAlias(this.language); + const activeView = this.app.workspace.getActiveViewOfType(import_obsidian37.MarkdownView); + if (activeView === null) + return srcCode; + yield this.parseFile(activeView.data, srcCode, language); + const realLanguage = /[^-]*$/.exec(language)[0]; + const globalInject = this.settings[`${realLanguage}Inject`]; + let injectedCode = `${this.namedImportSrcCode} +${srcCode}`; + if (!this.mainArgs.ignore) + injectedCode = `${globalInject} +${this.prependSrcCode} +${injectedCode} +${this.appendSrcCode}`; + else { + if (!Array.isArray(this.mainArgs.ignore) && this.mainArgs.ignore !== "all") + this.mainArgs.ignore = [this.mainArgs.ignore]; + if (this.mainArgs.ignore !== "all") { + if (!this.mainArgs.ignore.contains("pre")) + injectedCode = `${this.prependSrcCode} +${injectedCode}`; + if (!this.mainArgs.ignore.contains("post")) + injectedCode = `${injectedCode} +${this.appendSrcCode}`; + if (!this.mainArgs.ignore.contains("global")) + injectedCode = `${globalInject} +${injectedCode}`; + } + } + return transformMagicCommands(this.app, injectedCode); + }); + } + handleNamedImports(namedImports) { + return __async(this, null, function* () { + const handleNamedImport = (namedImport) => { + if (!this.namedExports.hasOwnProperty(namedImport)) { + new import_obsidian37.Notice(`Named export "${namedImport}" does not exist but was imported`); + return true; + } + this.namedImportSrcCode += `${this.disable_print(this.namedExports[namedImport])} +`; + return false; + }; + if (!Array.isArray(namedImports)) + return handleNamedImport(namedImports); + for (const namedImport of namedImports) { + const err = handleNamedImport(namedImport); + if (err) + return true; + } + return false; + }); + } + parseFile(fileContents, srcCode, language) { + return __async(this, null, function* () { + let currentArgs = {}; + let insideCodeBlock = false; + let isLanguageEqual = false; + let currentLanguage = ""; + let currentCode = ""; + let currentFirstLine = ""; + for (const line of fileContents.split("\n")) { + if (line.startsWith("```")) { + if (insideCodeBlock) { + const srcCodeTrimmed = srcCode.trim(); + const currentCodeTrimmed = currentCode.trim(); + if (isLanguageEqual && srcCodeTrimmed.length === currentCodeTrimmed.length && srcCodeTrimmed === currentCodeTrimmed) { + this.mainArgs = getArgs(currentFirstLine); + if (this.mainArgs.import) { + const err = this.handleNamedImports(this.mainArgs.import); + if (err) + return ""; + } + break; + } + if (currentArgs.label) { + if (this.namedExports.hasOwnProperty(currentArgs.label)) { + new import_obsidian37.Notice(`Error: named export ${currentArgs.label} exported more than once`); + return ""; + } + this.namedExports[currentArgs.label] = currentCode; + } + if (!Array.isArray(currentArgs.export)) + currentArgs.export = [currentArgs.export]; + if (currentArgs.export.contains("pre")) + this.prependSrcCode += `${this.disable_print(currentCode)} +`; + if (currentArgs.export.contains("post")) + this.appendSrcCode += `${this.disable_print(currentCode)} +`; + currentLanguage = ""; + currentCode = ""; + insideCodeBlock = false; + currentArgs = {}; + } else { + currentLanguage = getCodeBlockLanguage(line); + isLanguageEqual = /[^-]*$/.exec(language)[0] === /[^-]*$/.exec(currentLanguage)[0]; + if (isLanguageEqual) { + currentArgs = getArgs(line); + currentFirstLine = line; + } + insideCodeBlock = true; + } + } else if (insideCodeBlock && isLanguageEqual) { + currentCode += `${line} +`; + } + } + }); + } + disable_print(code) { + if (!this.settings.onlyCurrentBlock) { + return code; + } + const pattern = /^print\s*(.*)/gm; + return code.replace(pattern, " "); + } +}; + +// src/ExecutorContainer.ts +var import_events2 = require("events"); + +// src/executors/ReplExecutor.ts +var import_child_process2 = require("child_process"); +var import_obsidian39 = require("obsidian"); + +// src/executors/Executor.ts +var import_obsidian38 = require("obsidian"); +var os2 = __toESM(require("os")); +var path = __toESM(require("path")); +var import_stream = require("stream"); +var Executor = class extends import_stream.EventEmitter { + constructor(file, language) { + super(); + this.tempFileId = void 0; + this.file = file; + this.language = language; + } + notifyError(cmd, cmdArgs, tempFileName, err, outputter, label = "Error while executing code") { + const errorMSG = `Error while executing ${cmd} ${cmdArgs} ${tempFileName}: ${err}`; + console.error(errorMSG); + if (outputter) + outputter.writeErr(errorMSG); + new import_obsidian38.Notice(label); + } + getTempFile(ext) { + if (this.tempFileId === void 0) + this.tempFileId = Date.now().toString(); + return path.join(os2.tmpdir(), `temp_${this.tempFileId}.${ext}`); + } +}; + +// src/executors/AsyncExecutor.ts +var AsyncExecutor = class extends Executor { + constructor() { + super(...arguments); + this.runningTask = Promise.resolve(); + } + addJobToQueue(promiseCallback) { + return __async(this, null, function* () { + const previousJob = this.runningTask; + this.runningTask = new Promise((resolve, reject) => { + previousJob.finally(() => __async(this, null, function* () { + try { + yield new Promise((innerResolve, innerReject) => { + this.once("close", () => innerResolve(void 0)); + promiseCallback(innerResolve, innerReject); + }); + resolve(); + } catch (e) { + reject(e); + } + })); + }); + return this.runningTask; + }); + } +}; + +// src/executors/killWithChildren.ts +var import_child_process = require("child_process"); +var killWithChildren_default = (pid) => { + if (process.platform === "win32") { + (0, import_child_process.execSync)(`taskkill /pid ${pid} /T /F`); + } else { + try { + (0, import_child_process.execSync)(`pkill -P ${pid}`); + } catch (err) { + if (err.status !== 1) + throw err; + } + process.kill(pid); + } +}; + +// src/executors/ReplExecutor.ts +var ReplExecutor = class extends AsyncExecutor { + constructor(settings, path2, args, file, language) { + var _a; + super(file, language); + this.settings = settings; + if (this.settings.wslMode) { + args.unshift("-e", path2); + path2 = "wsl"; + } + if (path2.includes("%USERNAME%") && ((_a = process == null ? void 0 : process.env) == null ? void 0 : _a.USERNAME)) + path2 = path2.replace("%USERNAME%", process.env.USERNAME); + this.process = (0, import_child_process2.spawn)(path2, args, { env: process.env }); + this.process.on("close", () => { + this.emit("close"); + new import_obsidian39.Notice("Runtime exited"); + this.process = null; + }); + this.process.on("error", (err) => { + this.notifyError(settings.pythonPath, args.join(" "), "", err, void 0, "Error launching process: " + err); + this.stop(); + }); + this.setup().then(() => { + }); + } + run(code, outputter, cmd, cmdArgs, ext) { + outputter.queueBlock(); + return this.addJobToQueue((resolve, _reject) => { + if (this.process === null) + return resolve(); + const finishSigil = `SIGIL_BLOCK_DONE_${Math.random()}_${Date.now()}_${code.length}`; + outputter.startBlock(); + const wrappedCode = this.wrapCode(code, finishSigil); + this.process.stdin.write(wrappedCode); + outputter.clear(); + outputter.on("data", (data) => { + this.process.stdin.write(data); + }); + const writeToStdout = (data) => { + let str = data.toString(); + if (str.endsWith(finishSigil)) { + str = str.substring(0, str.length - finishSigil.length); + this.process.stdout.removeListener("data", writeToStdout); + this.process.stderr.removeListener("data", writeToStderr); + this.process.removeListener("close", resolve); + outputter.write(str); + resolve(); + } else { + outputter.write(str); + } + }; + const writeToStderr = (data) => { + outputter.writeErr( + this.removePrompts(data.toString(), "stderr") + ); + }; + this.process.on("close", resolve); + this.process.stdout.on("data", writeToStdout); + this.process.stderr.on("data", writeToStderr); + }); + } + stop() { + return new Promise((resolve, _reject) => { + this.process.on("close", () => { + resolve(); + }); + killWithChildren_default(this.process.pid); + this.process = null; + }); + } +}; + +// src/executors/NodeJSExecutor.ts +var NodeJSExecutor = class extends ReplExecutor { + constructor(settings, file) { + const args = settings.nodeArgs ? settings.nodeArgs.split(" ") : []; + args.unshift(`-e`, `require("repl").start({prompt: "", preview: false, ignoreUndefined: true}).on("exit", ()=>process.exit())`); + super(settings, settings.nodePath, args, file, "js"); + } + setup() { + return __async(this, null, function* () { + this.process.stdin.write("\n"); + }); + } + wrapCode(code, finishSigil) { + return `try { eval(${JSON.stringify(code)}); }catch(e) { console.error(e); }finally { process.stdout.write(${JSON.stringify(finishSigil)}); } +`; + } + removePrompts(output, source) { + return output; + } +}; + +// src/executors/NonInteractiveCodeExecutor.ts +var import_obsidian40 = require("obsidian"); +var fs = __toESM(require("fs")); +var child_process = __toESM(require("child_process")); + +// src/transforms/windowsPathToWsl.ts +var import_posix = require("path/posix"); +var import_path = require("path"); +var windowsPathToWsl_default = (windowsPath) => { + const driveLetter = windowsPath[0].toLowerCase(); + const posixyPath = windowsPath.replace(/^[^:]*:/, "").split(import_path.sep).join("/"); + return (0, import_posix.join)("/mnt/", driveLetter, posixyPath); +}; + +// src/executors/NonInteractiveCodeExecutor.ts +var NonInteractiveCodeExecutor = class extends Executor { + constructor(settings, usesShell, file, language) { + super(file, language); + this.resolveRun = void 0; + this.settings = settings; + this.usesShell = usesShell; + } + stop() { + return Promise.resolve(); + } + run(codeBlockContent, outputter, cmd, cmdArgs, ext) { + if (this.resolveRun !== void 0) + this.resolveRun(); + this.resolveRun = void 0; + return new Promise((resolve, reject) => { + const tempFileName = this.getTempFile(ext); + fs.promises.writeFile(tempFileName, codeBlockContent).then(() => { + const args = cmdArgs ? cmdArgs.split(" ") : []; + if (this.isWSLEnabled()) { + args.unshift("-e", cmd); + cmd = "wsl"; + args.push(windowsPathToWsl_default(tempFileName)); + } else { + args.push(tempFileName); + } + let child; + if (cmd.endsWith("gcc") || cmd.endsWith("gcc.exe")) { + const tempFileNameWExe = tempFileName.slice(0, -2) + ".out"; + args.push("-o", tempFileNameWExe); + const childGCC = child_process.spawn(cmd, args, { env: process.env, shell: this.usesShell }); + this.handleChildOutput(childGCC, outputter, tempFileName); + childGCC.on("exit", (code) => { + if (code === 0) { + child = child_process.spawn(tempFileNameWExe, { env: process.env, shell: this.usesShell }); + this.handleChildOutput(child, outputter, tempFileNameWExe).then(() => { + this.tempFileId = void 0; + }); + } + }); + } else { + child = child_process.spawn(cmd, args, { env: process.env, shell: this.usesShell }); + this.handleChildOutput(child, outputter, tempFileName).then(() => { + this.tempFileId = void 0; + }); + } + this.resolveRun = resolve; + }).catch((err) => { + this.notifyError(cmd, cmdArgs, tempFileName, err, outputter); + resolve(); + }); + }); + } + isWSLEnabled() { + if (this.settings.wslMode) { + return true; + } + if (this.language == "shell" && this.settings.shellWSLMode) { + return true; + } + return false; + } + handleChildOutput(child, outputter, fileName) { + return __async(this, null, function* () { + outputter.clear(); + outputter.killBlock = () => { + child.kill("SIGINT"); + }; + this.stdoutCb = (data) => { + outputter.write(data.toString()); + }; + this.stderrCb = (data) => { + outputter.writeErr(data.toString()); + }; + child.stdout.on("data", this.stdoutCb); + child.stderr.on("data", this.stderrCb); + outputter.on("data", (data) => { + child.stdin.write(data); + }); + child.on("close", (code) => { + if (code !== 0) + new import_obsidian40.Notice("Error!"); + if (this.resolveRun !== void 0) + this.resolveRun(); + outputter.closeInput(); + if (fileName === void 0) + return; + fs.promises.rm(fileName).catch((err) => { + console.error("Error in 'Obsidian Execute Code' Plugin while removing file: " + err); + }); + }); + child.on("error", (err) => { + new import_obsidian40.Notice("Error!"); + outputter.writeErr(err.toString()); + }); + }); + } +}; + +// src/executors/PrologExecutor.ts +var prolog = __toESM(require_core()); +var import_obsidian41 = require("obsidian"); +var PrologExecutor = class extends Executor { + constructor(settings, file) { + super(file, "prolog"); + this.runQueries = true; + this.maxPrologAnswers = settings.maxPrologAnswers; + } + run(code, outputter, cmd, cmdArgs, ext) { + return __async(this, null, function* () { + const prologCode = code.split(/\n+%+\s*query\n+/); + if (prologCode.length < 2) + return; + outputter.closeInput(); + outputter.clear(); + this.runPrologCode(prologCode[0], prologCode[1], outputter); + }); + } + stop() { + return __async(this, null, function* () { + this.runQueries = false; + this.emit("close"); + }); + } + runPrologCode(facts, queries, out) { + new import_obsidian41.Notice("Running..."); + const session = prolog.create(); + session.consult( + facts, + { + success: () => { + session.query( + queries, + { + success: (goal) => __async(this, null, function* () { + console.debug(`Prolog goal: ${goal}`); + let answersLeft = true; + let counter = 0; + while (answersLeft && counter < this.maxPrologAnswers) { + yield session.answer({ + success: function(answer) { + new import_obsidian41.Notice("Done!"); + console.debug(`Prolog result: ${session.format_answer(answer)}`); + out.write(session.format_answer(answer) + "\n"); + out.closeInput(); + }, + fail: function() { + answersLeft = false; + }, + error: function(err) { + new import_obsidian41.Notice("Error!"); + console.error(err); + answersLeft = false; + out.writeErr(`Error while executing code: ${err}`); + out.closeInput(); + }, + limit: function() { + answersLeft = false; + } + }); + counter++; + } + }), + error: (err) => { + new import_obsidian41.Notice("Error!"); + out.writeErr("Query failed.\n"); + out.writeErr(err.toString()); + } + } + ); + }, + error: (err) => { + out.writeErr("Adding facts failed.\n"); + out.writeErr(err.toString()); + } + } + ); + } +}; + +// src/executors/python/wrapPython.ts +var PLT_DEFAULT_BACKEND_PY_VAR = "OBSIDIAN_EXECUTE_CODE_MATPLOTLIB_DEFAULT_BACKEND"; +var wrapPython_default = (code, globalsName, printName, finishSigil, embedPlots) => ` +${embedPlots ? ` +try: + matplotlib.use('agg') +except: + pass +` : ` +try: + matplotlib.use(${PLT_DEFAULT_BACKEND_PY_VAR}) +except: + pass +`} + +try: + try: + ${printName}(eval( + compile(${JSON.stringify(code.replace(/\r\n/g, "\n") + "\n")}, "", "eval"), + ${globalsName} + )) + except SyntaxError: + exec( + compile(${JSON.stringify(code.replace(/\r\n/g, "\n") + "\n")}, "", "exec"), + ${globalsName} + ) +except Exception as e: + ${printName} (e, file=sys.stderr) +finally: + ${printName} ("${finishSigil}", end="") + +`; + +// src/executors/python/PythonExecutor.ts +var PythonExecutor = class extends ReplExecutor { + constructor(settings, file) { + const args = settings.pythonArgs ? settings.pythonArgs.split(" ") : []; + args.unshift("-i"); + super( + settings, + settings.pythonPath, + args, + file, + "python" + ); + this.printFunctionName = `__print_${Math.random().toString().substring(2)}_${Date.now()}`; + this.globalsDictionaryName = `__globals_${Math.random().toString().substring(2)}_${Date.now()}`; + } + removePrompts(output, source) { + if (source == "stderr") { + return output.replace(/(^((\.\.\.|>>>) )+)|(((\.\.\.|>>>) )+$)/g, ""); + } else { + return output; + } + } + wrapCode(code, finishSigil) { + return wrapPython_default( + code, + this.globalsDictionaryName, + this.printFunctionName, + finishSigil, + this.settings.pythonEmbedPlots + ); + } + setup() { + return __async(this, null, function* () { + this.addJobToQueue((resolve, reject) => { + this.process.stdin.write( + ` +${this.globalsDictionaryName} = {**globals()} +${this.settings.pythonEmbedPlots ? ` +try: + import matplotlib + ${PLT_DEFAULT_BACKEND_PY_VAR} = matplotlib.get_backend() +except: + pass +` : ""} + +from __future__ import print_function +import sys +${this.printFunctionName} = print +`.replace(/\r\n/g, "\n") + ); + this.process.stderr.once("data", (data) => { + resolve(); + }); + }).then(() => { + }); + }); + } +}; + +// src/executors/ClingExecutor.ts +var child_process2 = __toESM(require("child_process")); +var ClingExecutor = class extends NonInteractiveCodeExecutor { + constructor(settings, file, language) { + super(settings, false, file, language); + } + run(codeBlockContent, outputter, cmd, args, ext) { + if (this.settings[`${this.language}UseMain`]) { + this.getTempFile(ext); + let code; + if (ext != "c") { + code = codeBlockContent.replace(/main\(\)/g, `temp_${this.tempFileId}()`); + } else { + code = codeBlockContent; + } + return super.run(code, outputter, this.settings.clingPath, args, ext); + } + return new Promise((resolve, reject) => { + const childArgs = [...args.split(" "), ...codeBlockContent.split("\n")]; + const child = child_process2.spawn(this.settings.clingPath, childArgs, { env: process.env, shell: this.usesShell }); + this.resolveRun = resolve; + this.handleChildOutput(child, outputter, this.tempFileId); + }); + } + handleChildOutput(child, outputter, fileName) { + return __async(this, null, function* () { + __superGet(ClingExecutor.prototype, this, "handleChildOutput").call(this, child, outputter, fileName); + child.stdout.removeListener("data", this.stdoutCb); + child.stderr.removeListener("data", this.stderrCb); + const fileId = this.tempFileId; + const replaceTmpId = (data) => { + return data.replace(new RegExp(`temp_${fileId}\\(\\)`, "g"), "main()"); + }; + child.stdout.on("data", (data) => { + this.stdoutCb(replaceTmpId(data.toString())); + }); + child.stderr.on("data", (data) => { + this.stderrCb(replaceTmpId(data.toString())); + }); + }); + } +}; + +// src/executors/CppExecutor.ts +var CppExecutor = class extends ClingExecutor { + constructor(settings, file) { + super(settings, file, "cpp"); + } + run(codeBlockContent, outputter, cmd, cmdArgs, ext) { + return super.run(codeBlockContent, outputter, cmd, `-std=${this.settings.clingStd} ${cmdArgs}`, "cpp"); + } +}; + +// src/executors/RExecutor.ts +var RExecutor = class extends ReplExecutor { + constructor(settings, file) { + const args = settings.RArgs ? settings.RArgs.split(" ") : []; + let conArgName = `notebook_connection_${Math.random().toString(16).substring(2)}`; + args.unshift( + `-e`, + `${conArgName}=file("stdin", "r"); while(1) { eval(parse(text=tail(readLines(con = ${conArgName}, n=1)))) }` + ); + super(settings, settings.RPath, args, file, "r"); + } + setup() { + return __async(this, null, function* () { + console.log("setup"); + }); + } + wrapCode(code, finishSigil) { + return `tryCatch({ + cat(sprintf("%s", + eval(parse(text = ${JSON.stringify(code)} )) + )) + }, + error = function(e){ + cat(sprintf("%s", e), file=stderr()) + }, + finally = { + cat(${JSON.stringify(finishSigil)}); + flush.console() + })`.replace(/\r?\n/g, "") + "\n"; + } + removePrompts(output, source) { + return output; + } +}; + +// src/executors/CExecutor.ts +var CExecutor = class extends ClingExecutor { + constructor(settings, file) { + super(settings, file, "c"); + } + run(codeBlockContent, outputter, cmd, cmdArgs, ext) { + const install_path = this.settings[`clingPath`]; + if (install_path.endsWith("cling") || install_path.endsWith("cling.exe")) { + return super.run(codeBlockContent, outputter, cmd, this.settings[`cArgs`], "cpp"); + } else { + return super.run(codeBlockContent, outputter, cmd, this.settings[`cArgs`], "c"); + } + } +}; + +// src/executors/FSharpExecutor.ts +var FSharpExecutor = class extends NonInteractiveCodeExecutor { + constructor(settings, file) { + super(settings, false, file, "fsharp"); + } + run(codeBlockContent, outputter, cmd, args, ext) { + return super.run(codeBlockContent, outputter, cmd, `fsi ${args}`, "cpp"); + } +}; + +// src/ExecutorContainer.ts +var interactiveExecutors = { + "js": NodeJSExecutor, + "python": PythonExecutor, + "r": RExecutor +}; +var nonInteractiveExecutors = { + "prolog": PrologExecutor, + "cpp": CppExecutor, + "c": CExecutor, + "fsharp": FSharpExecutor +}; +var ExecutorContainer = class extends import_events2.EventEmitter { + constructor(plugin) { + super(); + this.executors = {}; + this.plugin = plugin; + window.addEventListener("beforeunload", () => __async(this, null, function* () { + for (const executor of this) { + executor.stop(); + } + })); + } + *[Symbol.iterator]() { + for (const language in this.executors) { + for (const file in this.executors[language]) { + yield this.executors[language][file]; + } + } + } + getExecutorFor(file, language, needsShell) { + if (!this.executors[language]) + this.executors[language] = {}; + if (!this.executors[language][file]) + this.setExecutorInExecutorsObject(file, language, needsShell); + return this.executors[language][file]; + } + setExecutorInExecutorsObject(file, language, needsShell) { + const exe = this.createExecutorFor(file, language, needsShell); + if (!(exe instanceof NonInteractiveCodeExecutor)) + this.emit("add", exe); + exe.on("close", () => { + delete this.executors[language][file]; + }); + this.executors[language][file] = exe; + } + createExecutorFor(file, language, needsShell) { + if (this.plugin.settings[`${language}Interactive`]) { + if (!(language in interactiveExecutors)) + throw new Error(`Attempted to use interactive executor for '${language}' but no such executor exists`); + return new interactiveExecutors[language](this.plugin.settings, file); + } else if (language in nonInteractiveExecutors) + return new nonInteractiveExecutors[language](this.plugin.settings, file); + return new NonInteractiveCodeExecutor(this.plugin.settings, needsShell, file, language); + } +}; + +// src/ExecutorManagerView.ts +var import_obsidian42 = require("obsidian"); +var import_path2 = require("path"); +var EXECUTOR_MANAGER_VIEW_ID = "code-execute-manage-executors"; +var EXECUTOR_MANAGER_OPEN_VIEW_COMMAND_ID = "code-execute-open-manage-executors"; +var ExecutorManagerView = class extends import_obsidian42.ItemView { + constructor(leaf, executors) { + super(leaf); + this.executors = executors; + this.executors.on("add", (executor) => { + this.addExecutorElement(executor); + }); + } + static activate(workspace) { + return __async(this, null, function* () { + workspace.detachLeavesOfType(EXECUTOR_MANAGER_VIEW_ID); + yield workspace.getRightLeaf(false).setViewState({ + type: EXECUTOR_MANAGER_VIEW_ID, + active: true + }); + workspace.revealLeaf( + workspace.getLeavesOfType(EXECUTOR_MANAGER_VIEW_ID)[0] + ); + }); + } + getViewType() { + return EXECUTOR_MANAGER_VIEW_ID; + } + getDisplayText() { + return "Execution Runtimes"; + } + getIcon() { + return "command-glyph"; + } + onOpen() { + return __async(this, null, function* () { + const container = this.contentEl; + container.empty(); + container.classList.add("manage-executors-view"); + const header = document.createElement("h3"); + header.textContent = "Runtimes"; + container.appendChild(header); + this.list = document.createElement("ul"); + container.appendChild(document.createElement("div")).appendChild(this.list); + for (const executor of this.executors) { + this.addExecutorElement(executor); + } + this.addEmptyState(); + }); + } + onClose() { + return __async(this, null, function* () { + }); + } + addEmptyState() { + this.emptyStateElement = document.createElement("div"); + this.emptyStateElement.classList.add("empty-state"); + this.emptyStateElement.textContent = "There are currently no runtimes online. Run some code blocks, and their runtimes will appear here."; + this.list.parentElement.appendChild(this.emptyStateElement); + this.updateEmptyState(); + } + updateEmptyState() { + if (this.list.childElementCount == 0) { + this.emptyStateElement.style.display = "block"; + } else { + this.emptyStateElement.style.display = "none"; + } + } + addExecutorElement(executor) { + const li = document.createElement("li"); + const simpleName = (0, import_path2.basename)(executor.file); + const langElem = document.createElement("small"); + langElem.textContent = executor.language; + li.appendChild(langElem); + li.appendChild(this.createFilenameRowElem(simpleName)); + executor.on("close", () => { + li.remove(); + this.updateEmptyState(); + }); + const button = document.createElement("button"); + button.addEventListener("click", () => executor.stop()); + (0, import_obsidian42.setIcon)(button, "trash"); + button.setAttribute("aria-label", "Stop Runtime"); + li.appendChild(button); + this.list.appendChild(li); + this.updateEmptyState(); + } + createFilenameRowElem(text) { + const fElem = document.createElement("span"); + fElem.textContent = text; + fElem.classList.add("filename"); + return fElem; + } +}; + +// src/runAllCodeBlocks.ts +var import_obsidian43 = require("obsidian"); +function runAllCodeBlocks(workspace) { + const lastActiveView = workspace.getMostRecentLeaf().view; + if (lastActiveView instanceof import_obsidian43.TextFileView) { + lastActiveView.containerEl.querySelectorAll("button." + runButtonClass).forEach((button) => { + button.click(); + }); + } +} + +// src/main.ts +var languageAliases = ["javascript", "typescript", "bash", "csharp", "wolfram", "nb", "wl", "hs", "py"]; +var canonicalLanguages = [ + "js", + "ts", + "cs", + "lean", + "lua", + "python", + "cpp", + "prolog", + "shell", + "groovy", + "r", + "go", + "rust", + "java", + "powershell", + "kotlin", + "mathematica", + "haskell", + "scala", + "swift", + "racket", + "fsharp", + "c", + "dart", + "ruby", + "batch", + "sql", + "octave", + "maxima", + "applescript", + "zig", + "ocaml" +]; +var supportedLanguages = [...languageAliases, ...canonicalLanguages]; +var buttonText = "Run"; +var runButtonClass = "run-code-button"; +var runButtonDisabledClass = "run-button-disabled"; +var hasButtonClass = "has-run-code-button"; +var ExecuteCodePlugin2 = class extends import_obsidian44.Plugin { + onload() { + return __async(this, null, function* () { + yield this.loadSettings(); + this.addSettingTab(new SettingsTab(this.app, this)); + this.executors = new ExecutorContainer(this); + this.iterateOpenFilesAndAddRunButtons(); + this.registerMarkdownPostProcessor((element, _context) => { + this.addRunButtons(element, _context.sourcePath); + }); + supportedLanguages.forEach((l) => { + console.debug(`Registering renderer for ${l}.`); + this.registerMarkdownCodeBlockProcessor(`run-${l}`, (src, el, _ctx) => __async(this, null, function* () { + yield import_obsidian44.MarkdownRenderer.renderMarkdown("```" + l + "\n" + src + (src.endsWith("\n") ? "" : "\n") + "```", el, _ctx.sourcePath, null); + })); + }); + this.registerView( + EXECUTOR_MANAGER_VIEW_ID, + (leaf) => new ExecutorManagerView(leaf, this.executors) + ); + this.addCommand({ + id: EXECUTOR_MANAGER_OPEN_VIEW_COMMAND_ID, + name: "Open Code Runtime Management", + callback: () => ExecutorManagerView.activate(this.app.workspace) + }); + this.addCommand({ + id: "run-all-code-blocks-in-file", + name: "Run all Code Blocks in Current File", + callback: () => runAllCodeBlocks(this.app.workspace) + }); + }); + } + onunload() { + document.querySelectorAll("pre > code").forEach((codeBlock) => { + const pre = codeBlock.parentElement; + const parent = pre.parentElement; + if (parent.hasClass(hasButtonClass)) { + parent.removeClass(hasButtonClass); + } + }); + document.querySelectorAll("." + runButtonClass).forEach((button) => button.remove()); + document.querySelectorAll("." + runButtonDisabledClass).forEach((button) => button.remove()); + document.querySelectorAll(".clear-button").forEach((button) => button.remove()); + document.querySelectorAll(".language-output").forEach((out) => out.remove()); + for (const executor of this.executors) { + executor.stop().then((_) => { + }); + } + console.log("Unloaded plugin: Execute Code"); + } + loadSettings() { + return __async(this, null, function* () { + this.settings = Object.assign({}, DEFAULT_SETTINGS, yield this.loadData()); + if (process.platform !== "win32") { + this.settings.wslMode = false; + } + }); + } + saveSettings() { + return __async(this, null, function* () { + yield this.saveData(this.settings); + }); + } + iterateOpenFilesAndAddRunButtons() { + this.app.workspace.iterateRootLeaves((leaf) => { + if (leaf.view instanceof import_obsidian44.FileView) { + this.addRunButtons(leaf.view.contentEl, leaf.view.file.path); + } + }); + } + addRunButtons(element, file) { + Array.from(element.getElementsByTagName("code")).forEach((codeBlock) => { + if (codeBlock.className.match(/^language-\{\w+/i)) { + codeBlock.className = codeBlock.className.replace(/^language-\{(\w+)/i, "language-$1 {"); + codeBlock.parentElement.className = codeBlock.className; + } + const language = codeBlock.className.toLowerCase(); + if (!language || !language.contains("language-")) + return; + const pre = codeBlock.parentElement; + const parent = pre.parentElement; + const srcCode = codeBlock.getText(); + let sanitizedClassList = this.sanitizeClassListOfCodeBlock(codeBlock); + const canonicalLanguage = getLanguageAlias( + supportedLanguages.find((lang) => sanitizedClassList.contains(`language-${lang}`)) + ); + if (canonicalLanguage && !parent.classList.contains(hasButtonClass)) { + const out = new Outputter(codeBlock, this.settings.allowInput); + parent.classList.add(hasButtonClass); + const button = this.createRunButton(); + pre.appendChild(button); + this.addListenerToButton(canonicalLanguage, srcCode, button, out, file); + } + }); + } + sanitizeClassListOfCodeBlock(codeBlock) { + let sanitizedClassList = Array.from(codeBlock.classList); + return sanitizedClassList.map((c) => c.toLowerCase()); + } + addListenerToButton(language, srcCode, button, out, file) { + if (language === "js") { + button.addEventListener("click", () => __async(this, null, function* () { + button.className = runButtonDisabledClass; + let transformedCode = yield new CodeInjector(this.app, this.settings, language).injectCode(srcCode); + transformedCode = addMagicToJS(transformedCode); + this.runCode(transformedCode, out, button, this.settings.nodePath, this.settings.nodeArgs, this.settings.jsFileExtension, language, file); + })); + } else if (language === "java") { + button.addEventListener("click", () => __async(this, null, function* () { + button.className = runButtonDisabledClass; + const transformedCode = yield new CodeInjector(this.app, this.settings, language).injectCode(srcCode); + this.runCode(transformedCode, out, button, this.settings.javaPath, this.settings.javaArgs, this.settings.javaFileExtension, language, file); + })); + } else if (language === "python") { + button.addEventListener("click", () => __async(this, null, function* () { + button.className = runButtonDisabledClass; + let transformedCode = yield new CodeInjector(this.app, this.settings, language).injectCode(srcCode); + if (this.settings.pythonEmbedPlots) + transformedCode = addInlinePlotsToPython(transformedCode, TOGGLE_HTML_SIGIL); + transformedCode = addMagicToPython(transformedCode); + this.runCode(transformedCode, out, button, this.settings.pythonPath, this.settings.pythonArgs, this.settings.pythonFileExtension, language, file); + })); + } else if (language === "shell") { + button.addEventListener("click", () => __async(this, null, function* () { + button.className = runButtonDisabledClass; + const transformedCode = yield new CodeInjector(this.app, this.settings, language).injectCode(srcCode); + this.runCodeInShell(transformedCode, out, button, this.settings.shellPath, this.settings.shellArgs, this.settings.shellFileExtension, language, file); + })); + } else if (language === "batch") { + button.addEventListener("click", () => __async(this, null, function* () { + button.className = runButtonDisabledClass; + const transformedCode = yield new CodeInjector(this.app, this.settings, language).injectCode(srcCode); + this.runCodeInShell(transformedCode, out, button, this.settings.batchPath, this.settings.batchArgs, this.settings.batchFileExtension, language, file); + })); + } else if (language === "powershell") { + button.addEventListener("click", () => __async(this, null, function* () { + button.className = runButtonDisabledClass; + const transformedCode = yield new CodeInjector(this.app, this.settings, language).injectCode(srcCode); + this.runCodeInShell(transformedCode, out, button, this.settings.powershellPath, this.settings.powershellArgs, this.settings.powershellFileExtension, language, file); + })); + } else if (language === "cpp") { + button.addEventListener("click", () => __async(this, null, function* () { + button.className = runButtonDisabledClass; + const transformedCode = yield new CodeInjector(this.app, this.settings, language).injectCode(srcCode); + this.runCode(transformedCode, out, button, this.settings.clingPath, `-std=${this.settings.clingStd} ${this.settings.clingArgs}`, this.settings.cppFileExtension, language, file); + })); + } else if (language === "prolog") { + button.addEventListener("click", () => __async(this, null, function* () { + button.className = runButtonDisabledClass; + const transformedCode = yield new CodeInjector(this.app, this.settings, language).injectCode(srcCode); + this.runCode(transformedCode, out, button, "", "", "", language, file); + button.className = runButtonClass; + })); + } else if (language === "groovy") { + button.addEventListener("click", () => __async(this, null, function* () { + button.className = runButtonDisabledClass; + const transformedCode = yield new CodeInjector(this.app, this.settings, language).injectCode(srcCode); + this.runCodeInShell(transformedCode, out, button, this.settings.groovyPath, this.settings.groovyArgs, this.settings.groovyFileExtension, language, file); + })); + } else if (language === "rust") { + button.addEventListener("click", () => __async(this, null, function* () { + button.className = runButtonDisabledClass; + const transformedCode = yield new CodeInjector(this.app, this.settings, language).injectCode(srcCode); + this.runCode(transformedCode, out, button, this.settings.cargoPath, "eval" + this.settings.cargoEvalArgs, this.settings.rustFileExtension, language, file); + })); + } else if (language === "r") { + button.addEventListener("click", () => __async(this, null, function* () { + button.className = runButtonDisabledClass; + let transformedCode = yield new CodeInjector(this.app, this.settings, language).injectCode(srcCode); + transformedCode = addInlinePlotsToR(transformedCode); + this.runCode(transformedCode, out, button, this.settings.RPath, this.settings.RArgs, this.settings.RFileExtension, language, file); + })); + } else if (language === "go") { + button.addEventListener("click", () => __async(this, null, function* () { + button.className = runButtonDisabledClass; + const transformedCode = yield new CodeInjector(this.app, this.settings, language).injectCode(srcCode); + this.runCode(transformedCode, out, button, this.settings.golangPath, this.settings.golangArgs, this.settings.golangFileExtension, language, file); + })); + } else if (language === "kotlin") { + button.addEventListener("click", () => __async(this, null, function* () { + button.className = runButtonDisabledClass; + const transformedCode = yield new CodeInjector(this.app, this.settings, language).injectCode(srcCode); + this.runCodeInShell(transformedCode, out, button, this.settings.kotlinPath, this.settings.kotlinArgs, this.settings.kotlinFileExtension, language, file); + })); + } else if (language === "ts") { + button.addEventListener("click", () => __async(this, null, function* () { + button.className = runButtonDisabledClass; + const transformedCode = yield new CodeInjector(this.app, this.settings, language).injectCode(srcCode); + this.runCodeInShell(transformedCode, out, button, this.settings.tsPath, this.settings.tsArgs, "ts", language, file); + })); + } else if (language === "lua") { + button.addEventListener("click", () => __async(this, null, function* () { + button.className = runButtonDisabledClass; + const transformedCode = yield new CodeInjector(this.app, this.settings, language).injectCode(srcCode); + this.runCodeInShell(transformedCode, out, button, this.settings.luaPath, this.settings.luaArgs, this.settings.luaFileExtension, language, file); + })); + } else if (language === "dart") { + button.addEventListener("click", () => __async(this, null, function* () { + button.className = runButtonDisabledClass; + const transformedCode = yield new CodeInjector(this.app, this.settings, language).injectCode(srcCode); + this.runCodeInShell(transformedCode, out, button, this.settings.dartPath, this.settings.dartArgs, this.settings.dartFileExtension, language, file); + })); + } else if (language === "cs") { + button.addEventListener("click", () => __async(this, null, function* () { + button.className = runButtonDisabledClass; + const transformedCode = yield new CodeInjector(this.app, this.settings, language).injectCode(srcCode); + this.runCodeInShell(transformedCode, out, button, this.settings.csPath, this.settings.csArgs, this.settings.csFileExtension, language, file); + })); + } else if (language === "haskell") { + button.addEventListener("click", () => __async(this, null, function* () { + button.className = runButtonDisabledClass; + const transformedCode = yield new CodeInjector(this.app, this.settings, "haskell").injectCode(srcCode); + this.runCodeInShell(transformedCode, out, button, this.settings.useGhci ? this.settings.ghciPath : this.settings.runghcPath, this.settings.useGhci ? "" : "-f " + this.settings.ghcPath, "hs", language, file); + })); + } else if (language === "mathematica") { + button.addEventListener("click", () => __async(this, null, function* () { + button.className = runButtonDisabledClass; + const transformedCode = yield new CodeInjector(this.app, this.settings, language).injectCode(srcCode); + this.runCodeInShell(transformedCode, out, button, this.settings.mathematicaPath, this.settings.mathematicaArgs, this.settings.mathematicaFileExtension, language, file); + })); + } else if (language === "scala") { + button.addEventListener("click", () => __async(this, null, function* () { + button.className = runButtonDisabledClass; + const transformedCode = yield new CodeInjector(this.app, this.settings, language).injectCode(srcCode); + this.runCodeInShell(transformedCode, out, button, this.settings.scalaPath, this.settings.scalaArgs, this.settings.scalaFileExtension, language, file); + })); + } else if (language === "swift") { + button.addEventListener("click", () => __async(this, null, function* () { + button.className = runButtonDisabledClass; + const transformedCode = yield new CodeInjector(this.app, this.settings, language).injectCode(srcCode); + this.runCodeInShell(transformedCode, out, button, this.settings.swiftPath, this.settings.swiftArgs, this.settings.swiftFileExtension, language, file); + })); + } else if (language === "c") { + button.addEventListener("click", () => __async(this, null, function* () { + button.className = runButtonDisabledClass; + const transformedCode = yield new CodeInjector(this.app, this.settings, language).injectCode(srcCode); + this.runCodeInShell(transformedCode, out, button, this.settings.clingPath, this.settings.clingArgs, "c", language, file); + })); + } else if (language === "ruby") { + button.addEventListener("click", () => __async(this, null, function* () { + button.className = runButtonDisabledClass; + const transformedCode = yield new CodeInjector(this.app, this.settings, language).injectCode(srcCode); + this.runCodeInShell(transformedCode, out, button, this.settings.rubyPath, this.settings.rubyArgs, this.settings.rubyFileExtension, language, file); + })); + } else if (language === "sql") { + button.addEventListener("click", () => __async(this, null, function* () { + button.className = runButtonDisabledClass; + const transformedCode = yield new CodeInjector(this.app, this.settings, language).injectCode(srcCode); + this.runCodeInShell(transformedCode, out, button, this.settings.sqlPath, this.settings.sqlArgs, "sql", language, file); + })); + } else if (language === "octave") { + button.addEventListener("click", () => __async(this, null, function* () { + button.className = runButtonDisabledClass; + let transformedCode = yield new CodeInjector(this.app, this.settings, language).injectCode(srcCode); + transformedCode = addInlinePlotsToOctave(transformedCode); + this.runCodeInShell(transformedCode, out, button, this.settings.octavePath, this.settings.octaveArgs, this.settings.octaveFileExtension, language, file); + })); + } else if (language === "maxima") { + button.addEventListener("click", () => __async(this, null, function* () { + button.className = runButtonDisabledClass; + let transformedCode = yield new CodeInjector(this.app, this.settings, language).injectCode(srcCode); + transformedCode = addInlinePlotsToMaxima(transformedCode); + this.runCodeInShell(transformedCode, out, button, this.settings.maximaPath, this.settings.maximaArgs, this.settings.maximaFileExtension, language, file); + })); + } else if (language === "racket") { + button.addEventListener("click", () => __async(this, null, function* () { + button.className = runButtonDisabledClass; + const transformedCode = yield new CodeInjector(this.app, this.settings, language).injectCode(srcCode); + this.runCodeInShell(transformedCode, out, button, this.settings.racketPath, this.settings.racketArgs, this.settings.racketFileExtension, language, file); + })); + } else if (language === "applescript") { + button.addEventListener("click", () => __async(this, null, function* () { + button.className = runButtonDisabledClass; + const transformedCode = yield new CodeInjector(this.app, this.settings, language).injectCode(srcCode); + this.runCodeInShell(transformedCode, out, button, this.settings.applescriptPath, this.settings.applescriptArgs, this.settings.applescriptFileExtension, language, file); + })); + } else if (language === "zig") { + button.addEventListener("click", () => __async(this, null, function* () { + button.className = runButtonDisabledClass; + const transformedCode = yield new CodeInjector(this.app, this.settings, language).injectCode(srcCode); + this.runCodeInShell(transformedCode, out, button, this.settings.zigPath, this.settings.zigArgs, "zig", language, file); + })); + } else if (language === "ocaml") { + button.addEventListener("click", () => __async(this, null, function* () { + button.className = runButtonDisabledClass; + const transformedCode = yield new CodeInjector(this.app, this.settings, language).injectCode(srcCode); + this.runCodeInShell(transformedCode, out, button, this.settings.ocamlPath, this.settings.ocamlArgs, "ocaml", language, file); + })); + } + } + createRunButton() { + console.debug("Add run button"); + const button = document.createElement("button"); + button.classList.add(runButtonClass); + button.setText(buttonText); + return button; + } + runCode(codeBlockContent, outputter, button, cmd, cmdArgs, ext, language, file) { + outputter.startBlock(); + const executor = this.executors.getExecutorFor(file, language, false); + executor.run(codeBlockContent, outputter, cmd, cmdArgs, ext).then(() => { + button.className = runButtonClass; + outputter.closeInput(); + outputter.finishBlock(); + }); + } + runCodeInShell(codeBlockContent, outputter, button, cmd, cmdArgs, ext, language, file) { + const executor = this.executors.getExecutorFor(file, language, true); + executor.run(codeBlockContent, outputter, cmd, cmdArgs, ext).then(() => { + button.className = runButtonClass; + }); + } +}; diff --git a/.obsidian/plugins/execute-code/manifest.json b/.obsidian/plugins/execute-code/manifest.json new file mode 100644 index 0000000..5cd3db7 --- /dev/null +++ b/.obsidian/plugins/execute-code/manifest.json @@ -0,0 +1,10 @@ +{ + "id": "execute-code", + "name": "Execute Code", + "version": "1.12.0", + "minAppVersion": "1.2.8", + "description": "Allows to execute code snippets within a note. Supported programming languages: C, CPP, Dart, Golang, Groovy, Kotlin, Java, JavaScript, TypeScript, Lean, Lua, CSharp, Prolog, Rust, Python, R, Ruby, Wolfram Mathematica, Haskell, Scala, Racket, F#, Batch, Shell & Powershell.", + "author": "twibiral", + "authorUrl": "https://www.github.com/twibiral", + "isDesktopOnly": true +} \ No newline at end of file diff --git a/.obsidian/plugins/execute-code/styles.css b/.obsidian/plugins/execute-code/styles.css new file mode 100644 index 0000000..ff165a8 --- /dev/null +++ b/.obsidian/plugins/execute-code/styles.css @@ -0,0 +1,218 @@ +/* @settings + +name: Execute Code Settings +id: obsidian-execute-code +settings: + - + id: color-section-title + title: Color Settings + type: heading + level: 3 + - + id: use-custom-output-color + title: Custom Code Output Color + description: Use a custom color for the output of code blocks + type: class-toggle + default: false + - + id: code-output-text-color + title: Output Text Color + type: variable-color + format: hex + opacity: false + default: '#FFFFFF' + - + id: use-custom-error-color + title: Custom Code Error Color + description: Use a custom color for the error output of code blocks + type: class-toggle + default: false + - + id: code-error-text-color + title: Error Text Color + type: variable-color + format: hex + opacity: false + default: '#FF0000' +*/ + +button.run-code-button { + display: none; + color: var(--text-muted); + position: absolute; + bottom: 0; + right: 0; + margin: 5px; + padding: 5px 20px 5px 20px; + z-index: 100; +} + +button.clear-button { + display: none; + color: var(--text-muted); + position: absolute; + bottom: 0; + left: 0; + margin: 5px; + padding: 5px 20px 5px 20px; + z-index: 100; +} + +pre:hover .run-code-button, pre:hover .clear-button { + display: block; +} + +pre:hover .run-button-disabled, pre:hover .clear-button-disabled { + display: none; +} + +.run-button-disabled, .clear-button-disabled { + display: none; +} + +pre:hover code.language-output { + margin-bottom: 28px; +} + +:not(.use-custom-output-color) code.language-output span.stdout { + color: var(--text-muted) !important; +} + +.use-custom-output-color code.language-output span.stdout { + color: var(--code-output-text-color) !important; +} + +:not(.use-custom-error-color) code.language-output span.stderr { + color: red !important; +} + +.use-custom-error-color code.language-output span.stderr { + color: var(--code-error-text-color) !important; +} + +code.language-output hr { + margin: 0 0 1em; +} + +.settings-code-input-box textarea, .settings-code-input-box input { + min-width: 400px; + min-height: 100px; + font-family: monospace; + resize: vertical; +} + +input.interactive-stdin { + font: inherit; +} + +.manage-executors-view h3 { + margin: 1em; +} + +.manage-executors-view ul { + margin: 1em; + padding: 0; + list-style-type: none; +} + +.manage-executors-view ul li { + padding: 0.5em; + background: var(--background-primary-alt); + border-radius: 4px; + display: grid; + flex-direction: column; + margin-bottom: 0.5em; +} + +.manage-executors-view small { + text-transform: uppercase; + font-weight: bold; + letter-spacing: 0.1ch; + grid-row: 1; +} + +.manage-executors-view .filename { + grid-row: 2; +} + +.manage-executors-view li button { + grid-column: 2; + grid-row: 1 / 3; + margin: 0; + padding: 0.25em; + display: flex; + align-items: center; + justify-content: center; + color: var(--text-muted); + background: none; +} + +.manage-executors-view li button:hover { + background: var(--background-tertiary); + color: var(--icon-color-hover); +} + +.manage-executors-view > div { + position: relative; +} + +.manage-executors-view .empty-state { + color: var(--text-muted); + padding: 0.5em; +} + +.has-run-code-button { + position: relative; +} + +.has-run-code-button pre { + z-index: 1; +} + +.load-state-indicator { + position: absolute; + top: 0.1em; + left: -2em; + width: 2em; + height: 2em; + background: var(--background-primary-alt); + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; + color: var(--tx1); + transform: translateX(2em); + transition: transform 0.25s, opacity 0.25s; + opacity: 0; + pointer-events: none; + cursor: pointer; +} + +.load-state-indicator svg { + width: 1.5em; + height: 1.5em; + margin: 0.25em; +} + +.load-state-indicator.visible { + transform: translateX(0); + transform: translateX(var(--folding-offset, 0)); + opacity: 1; + pointer-events: all; +} + +.load-state-indicator::before { + content: ""; + box-shadow: -1em 0 1em -0.75em inset var(--background-modifier-box-shadow); + position: absolute; + display: block; + width: 100%; + height: 100%; + transform: translateX(-2em); + opacity: 0; + transition: transform 0.25s, opacity 0.25s; + pointer-events: none; +} + +.load-state-indicator.visible::before { + transform: translateX(0); + opacity: 1; +} diff --git a/education/software development/ECE1400/Chapter 4 Exercises.md b/education/software development/ECE1400/Chapter 4 Exercises.md index 4d07298..395e1f2 100644 --- a/education/software development/ECE1400/Chapter 4 Exercises.md +++ b/education/software development/ECE1400/Chapter 4 Exercises.md @@ -2,6 +2,7 @@ a. `1 2` b. `0` c. `1` +d. `0` # 3. # 9. From b409bb0a3d90435668ac529990baa3fe0022b66f Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sun, 15 Sep 2024 19:24:16 -0600 Subject: [PATCH 0259/1027] vault backup: 2024-09-15 19:24:16 --- education/software development/ECE1400/Chapter 4 Exercises.md | 1 + 1 file changed, 1 insertion(+) diff --git a/education/software development/ECE1400/Chapter 4 Exercises.md b/education/software development/ECE1400/Chapter 4 Exercises.md index 395e1f2..2a52e33 100644 --- a/education/software development/ECE1400/Chapter 4 Exercises.md +++ b/education/software development/ECE1400/Chapter 4 Exercises.md @@ -5,6 +5,7 @@ c. `1` d. `0` # 3. + # 9. # 11. # 15. From 4dc32659fe270e10d35b8cd767f2439c7c6a173a Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sun, 15 Sep 2024 19:29:16 -0600 Subject: [PATCH 0260/1027] vault backup: 2024-09-15 19:29:16 --- education/software development/ECE1400/Chapter 4 Exercises.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/education/software development/ECE1400/Chapter 4 Exercises.md b/education/software development/ECE1400/Chapter 4 Exercises.md index 2a52e33..015109d 100644 --- a/education/software development/ECE1400/Chapter 4 Exercises.md +++ b/education/software development/ECE1400/Chapter 4 Exercises.md @@ -4,7 +4,8 @@ b. `0` c. `1` d. `0` # 3. - +a. `1`, `2` +b. # 9. # 11. From 990860fcdbb6fdd8b8628bf6c90cd3217b09f22b Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sun, 15 Sep 2024 19:34:27 -0600 Subject: [PATCH 0261/1027] vault backup: 2024-09-15 19:34:27 --- .../software development/ECE1400/Chapter 4 Exercises.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/education/software development/ECE1400/Chapter 4 Exercises.md b/education/software development/ECE1400/Chapter 4 Exercises.md index 015109d..bc7819a 100644 --- a/education/software development/ECE1400/Chapter 4 Exercises.md +++ b/education/software development/ECE1400/Chapter 4 Exercises.md @@ -4,9 +4,13 @@ b. `0` c. `1` d. `0` # 3. -a. `1`, `2` -b. +a. `1` +b. `-1`, `-2` +c. `-1`, `-1` +d. `1`, `2` # 9. + + # 11. # 15. From b9d44358696077d7b865f9f25590efc5380698f6 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sun, 15 Sep 2024 19:39:27 -0600 Subject: [PATCH 0262/1027] vault backup: 2024-09-15 19:39:27 --- education/software development/ECE1400/Chapter 4 Exercises.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/education/software development/ECE1400/Chapter 4 Exercises.md b/education/software development/ECE1400/Chapter 4 Exercises.md index bc7819a..d76aac6 100644 --- a/education/software development/ECE1400/Chapter 4 Exercises.md +++ b/education/software development/ECE1400/Chapter 4 Exercises.md @@ -8,9 +8,8 @@ a. `1` b. `-1`, `-2` c. `-1`, `-1` d. `1`, `2` - # 9. - +a. # 11. # 15. From ec8087fc73505cbf081df595ef315dd62b39086e Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sun, 15 Sep 2024 19:47:35 -0600 Subject: [PATCH 0263/1027] vault backup: 2024-09-15 19:47:35 --- education/software development/ECE1400/Chapter 4 Exercises.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/education/software development/ECE1400/Chapter 4 Exercises.md b/education/software development/ECE1400/Chapter 4 Exercises.md index d76aac6..8090369 100644 --- a/education/software development/ECE1400/Chapter 4 Exercises.md +++ b/education/software development/ECE1400/Chapter 4 Exercises.md @@ -9,7 +9,8 @@ b. `-1`, `-2` c. `-1`, `-1` d. `1`, `2` # 9. -a. +a. `63 8` +b. `` # 11. # 15. From 31a83dbcf351404997388a99428e52854e3fb500 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sun, 15 Sep 2024 19:57:37 -0600 Subject: [PATCH 0264/1027] vault backup: 2024-09-15 19:57:37 --- .../software development/ECE1400/Chapter 4 Exercises.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/education/software development/ECE1400/Chapter 4 Exercises.md b/education/software development/ECE1400/Chapter 4 Exercises.md index 8090369..fb57aaa 100644 --- a/education/software development/ECE1400/Chapter 4 Exercises.md +++ b/education/software development/ECE1400/Chapter 4 Exercises.md @@ -10,7 +10,8 @@ c. `-1`, `-1` d. `1`, `2` # 9. a. `63 8` -b. `` - +b. `1 2 3` +c. `0 1 3` +d. # 11. # 15. From 8c760ccfde0441bac6e32f455174f0c35c980db1 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sun, 15 Sep 2024 20:02:36 -0600 Subject: [PATCH 0265/1027] vault backup: 2024-09-15 20:02:36 --- .../software development/ECE1400/Chapter 4 Exercises.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/education/software development/ECE1400/Chapter 4 Exercises.md b/education/software development/ECE1400/Chapter 4 Exercises.md index fb57aaa..c1c9622 100644 --- a/education/software development/ECE1400/Chapter 4 Exercises.md +++ b/education/software development/ECE1400/Chapter 4 Exercises.md @@ -12,6 +12,11 @@ d. `1`, `2` a. `63 8` b. `1 2 3` c. `0 1 3` -d. +d. `0 0 0` # 11. +a. `0 2` +b. +c. +d. + # 15. From d783c457e9135657736713519cff33cc02b8d299 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sun, 15 Sep 2024 20:07:36 -0600 Subject: [PATCH 0266/1027] vault backup: 2024-09-15 20:07:36 --- .../software development/ECE1400/Chapter 4 Exercises.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/education/software development/ECE1400/Chapter 4 Exercises.md b/education/software development/ECE1400/Chapter 4 Exercises.md index c1c9622..18221ac 100644 --- a/education/software development/ECE1400/Chapter 4 Exercises.md +++ b/education/software development/ECE1400/Chapter 4 Exercises.md @@ -15,8 +15,8 @@ c. `0 1 3` d. `0 0 0` # 11. a. `0 2` -b. -c. -d. +b. `4 11 6` +c. `0 8 7` +d. `` # 15. From 751878a202e23c1f9b5c31093b929c2e1a8ac2f6 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sun, 15 Sep 2024 20:12:36 -0600 Subject: [PATCH 0267/1027] vault backup: 2024-09-15 20:12:36 --- education/software development/ECE1400/Chapter 4 Exercises.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/education/software development/ECE1400/Chapter 4 Exercises.md b/education/software development/ECE1400/Chapter 4 Exercises.md index 18221ac..278f29c 100644 --- a/education/software development/ECE1400/Chapter 4 Exercises.md +++ b/education/software development/ECE1400/Chapter 4 Exercises.md @@ -17,6 +17,6 @@ d. `0 0 0` a. `0 2` b. `4 11 6` c. `0 8 7` -d. `` +d. `15 4 5 4` # 15. From 30e8e27543fcaeb8d9d6ccfb68e645d6b6a55cac Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sun, 15 Sep 2024 20:17:36 -0600 Subject: [PATCH 0268/1027] vault backup: 2024-09-15 20:17:36 --- education/software development/ECE1400/Chapter 4 Exercises.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/education/software development/ECE1400/Chapter 4 Exercises.md b/education/software development/ECE1400/Chapter 4 Exercises.md index 278f29c..57cebfa 100644 --- a/education/software development/ECE1400/Chapter 4 Exercises.md +++ b/education/software development/ECE1400/Chapter 4 Exercises.md @@ -20,3 +20,5 @@ c. `0 8 7` d. `15 4 5 4` # 15. +a. `i = 2, j = 2` +b. `` \ No newline at end of file From e7c058fc3e79f4cfe05924b9f2db5f335f524fd6 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sun, 15 Sep 2024 20:22:36 -0600 Subject: [PATCH 0269/1027] vault backup: 2024-09-15 20:22:36 --- education/software development/ECE1400/Chapter 4 Exercises.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/education/software development/ECE1400/Chapter 4 Exercises.md b/education/software development/ECE1400/Chapter 4 Exercises.md index 57cebfa..b7b4154 100644 --- a/education/software development/ECE1400/Chapter 4 Exercises.md +++ b/education/software development/ECE1400/Chapter 4 Exercises.md @@ -21,4 +21,5 @@ d. `15 4 5 4` # 15. a. `i = 2, j = 2` -b. `` \ No newline at end of file +b. `i = 1`, `j = 2` +c. `i = 1`, `j = 2`` \ No newline at end of file From 9c1690ce6ffe407199cd9ca7c4b1edbeaf753c17 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sun, 15 Sep 2024 20:28:02 -0600 Subject: [PATCH 0270/1027] vault backup: 2024-09-15 20:28:02 --- education/software development/ECE1400/Chapter 4 Exercises.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/education/software development/ECE1400/Chapter 4 Exercises.md b/education/software development/ECE1400/Chapter 4 Exercises.md index b7b4154..23db7c4 100644 --- a/education/software development/ECE1400/Chapter 4 Exercises.md +++ b/education/software development/ECE1400/Chapter 4 Exercises.md @@ -22,4 +22,5 @@ d. `15 4 5 4` # 15. a. `i = 2, j = 2` b. `i = 1`, `j = 2` -c. `i = 1`, `j = 2`` \ No newline at end of file +c. `i = 1`, `j = 2` +d. `i = 1`, `j = 3` \ No newline at end of file From 609de9ea904ce3d74fbe2e824bbcb74de8d4529d Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Mon, 16 Sep 2024 12:52:58 -0600 Subject: [PATCH 0271/1027] vault backup: 2024-09-16 12:52:58 --- notes/Finite State Entropy Encoding.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 notes/Finite State Entropy Encoding.md diff --git a/notes/Finite State Entropy Encoding.md b/notes/Finite State Entropy Encoding.md new file mode 100644 index 0000000..212c493 --- /dev/null +++ b/notes/Finite State Entropy Encoding.md @@ -0,0 +1 @@ +https://arxiv.org/pdf/1311.2540 \ No newline at end of file From d610d1cfff5966b4ec99d3e321c757311a12ada0 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Mon, 16 Sep 2024 13:04:14 -0600 Subject: [PATCH 0272/1027] vault backup: 2024-09-16 13:04:14 --- education/math/MATH1060 (trig)/The Unit Circle.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/education/math/MATH1060 (trig)/The Unit Circle.md b/education/math/MATH1060 (trig)/The Unit Circle.md index 59f62a4..38919e4 100644 --- a/education/math/MATH1060 (trig)/The Unit Circle.md +++ b/education/math/MATH1060 (trig)/The Unit Circle.md @@ -26,6 +26,14 @@ Finding a reference angle: | 2 | $180\degree - \theta$ | | 3 | $\theta - 180\degree$ | | 4 | $360\degree - \theta$ | +## Other Trigonometric Functions +All of the following only apply when the denominator is not equal to zero. + +$$ tan \theta = \frac{y}{x} $$ +Because the following are inverses of their counterparts, you only need to remember the equivalents for $sin$, $cos$, and $tan$, then just find the inverse by taking $1/v$. +$$ sec \theta = \frac{1}{x} $$ +$$ csc = \frac{1}{y} $$ +$$ cot \theta = \frac{x}{y} $$ ## The Pythagorean Identity The Pythagorean identity expresses the Pythagorean theorem in terms of trigonometric functions. It's a basic relation between the sine and cosine functions. From 9a1f0096ec9556e863bf1a3d130273790eb457df Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 17 Sep 2024 14:09:53 -0600 Subject: [PATCH 0273/1027] vault backup: 2024-09-17 14:09:53 --- education/nutrition/Dietary Reference Intakes.md | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 education/nutrition/Dietary Reference Intakes.md diff --git a/education/nutrition/Dietary Reference Intakes.md b/education/nutrition/Dietary Reference Intakes.md new file mode 100644 index 0000000..fc748d1 --- /dev/null +++ b/education/nutrition/Dietary Reference Intakes.md @@ -0,0 +1,10 @@ +Dietary Reference Intake (DRIs) are a set of energy and nutrient intake standards that can be used as references when making dietary recommendations. + +DRIs include: +## Estimated Average Requirements (EARs) +The amount of nutrient that should meet the needs of 50% of healthy people who are in a particular life-stage/sex group. +# Recommended Dietary Allowances (RDAs) + The standard for recommended daily intake of sever +- Adequate Intakes (AIs) +- Tolerable Upper Intake Levels (ULs) +- Acceptable Macronutrient Distribution Range (AMDR) From ef1e987d992cc3d59dbc1c9fda6e9827d3b289d0 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 17 Sep 2024 14:14:53 -0600 Subject: [PATCH 0274/1027] vault backup: 2024-09-17 14:14:53 --- .../nutrition/Dietary Reference Intakes.md | 22 ++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/education/nutrition/Dietary Reference Intakes.md b/education/nutrition/Dietary Reference Intakes.md index fc748d1..920c6f0 100644 --- a/education/nutrition/Dietary Reference Intakes.md +++ b/education/nutrition/Dietary Reference Intakes.md @@ -3,8 +3,20 @@ Dietary Reference Intake (DRIs) are a set of energy and nutrient intake standard DRIs include: ## Estimated Average Requirements (EARs) The amount of nutrient that should meet the needs of 50% of healthy people who are in a particular life-stage/sex group. -# Recommended Dietary Allowances (RDAs) - The standard for recommended daily intake of sever -- Adequate Intakes (AIs) -- Tolerable Upper Intake Levels (ULs) -- Acceptable Macronutrient Distribution Range (AMDR) +### Estimated Energy Requirements (EERs) +The average daily energy intake that meets the needs of a healthy person maintaining their weight. +EER takes into account: +- Physical activity level +- Height +- Weight +- Sex +- Life stage +- Health status +## Recommended Dietary Allowances (RDAs) + The standard for recommended daily intake of several nutrients. +## Adequate Intakes (AIs) +Recommendations that assume a population's average daily nutrient intakes are adequate because no deficiency diseases are present. + +## Tolerable Upper Intake Levels (ULs) +The highest average amount of a nutrient that is unlikely to harm most people. +## Acceptable Macronutrient Distribution Range (AMDR) From 8c46d142032c4d8eea219c800b5047f766aed362 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 17 Sep 2024 14:19:53 -0600 Subject: [PATCH 0275/1027] vault backup: 2024-09-17 14:19:53 --- education/nutrition/Dietary Reference Intakes.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/education/nutrition/Dietary Reference Intakes.md b/education/nutrition/Dietary Reference Intakes.md index 920c6f0..e1ac250 100644 --- a/education/nutrition/Dietary Reference Intakes.md +++ b/education/nutrition/Dietary Reference Intakes.md @@ -1,5 +1,7 @@ Dietary Reference Intake (DRIs) are a set of energy and nutrient intake standards that can be used as references when making dietary recommendations. +Dietary Guidelines for Americans are updated every 5 years. + DRIs include: ## Estimated Average Requirements (EARs) The amount of nutrient that should meet the needs of 50% of healthy people who are in a particular life-stage/sex group. From 4fb2194464b6b5c0f348d44ea00466a944298399 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 18 Sep 2024 10:52:12 -0600 Subject: [PATCH 0276/1027] vault backup: 2024-09-18 10:52:12 --- education/software development/ECE1400/Chapter.md | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 education/software development/ECE1400/Chapter.md diff --git a/education/software development/ECE1400/Chapter.md b/education/software development/ECE1400/Chapter.md new file mode 100644 index 0000000..1b32d4c --- /dev/null +++ b/education/software development/ECE1400/Chapter.md @@ -0,0 +1,6 @@ +> 2. The following program fragments illustrate the logical operators. Show the output produced by each, assuming that `i`, `j`, and `k` are `int` variables. + +a. `i = 10; j = 5;` +``` + +``` \ No newline at end of file From bf024cc4e6753b6325a9d29fc748861b60e0423c Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 18 Sep 2024 10:57:12 -0600 Subject: [PATCH 0277/1027] vault backup: 2024-09-18 10:57:12 --- education/software development/ECE1400/Chapter.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/education/software development/ECE1400/Chapter.md b/education/software development/ECE1400/Chapter.md index 1b32d4c..e27bb8f 100644 --- a/education/software development/ECE1400/Chapter.md +++ b/education/software development/ECE1400/Chapter.md @@ -2,5 +2,5 @@ a. `i = 10; j = 5;` ``` - +printf("%d", !i < j); ``` \ No newline at end of file From ef0012eb8a5d01ec311a82fc7dc6604a4bc13269 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 18 Sep 2024 11:12:12 -0600 Subject: [PATCH 0278/1027] vault backup: 2024-09-18 11:12:12 --- education/software development/ECE1400/Chapter.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/education/software development/ECE1400/Chapter.md b/education/software development/ECE1400/Chapter.md index e27bb8f..55533a7 100644 --- a/education/software development/ECE1400/Chapter.md +++ b/education/software development/ECE1400/Chapter.md @@ -1,6 +1,9 @@ > 2. The following program fragments illustrate the logical operators. Show the output produced by each, assuming that `i`, `j`, and `k` are `int` variables. a. `i = 10; j = 5;` -``` +```c printf("%d", !i < j); -``` \ No newline at end of file + +// Expected output: `1`, because `!i` evaluates to 0, and 0 is less than 5, so that expression evaluates to true, or 1. +``` +b. `i = 2; j = ` \ No newline at end of file From b4d32d0ddf9ade0eab470cda7732facbfbb3484d Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 18 Sep 2024 11:17:12 -0600 Subject: [PATCH 0279/1027] vault backup: 2024-09-18 11:17:12 --- .../software development/ECE1400/Chapter.md | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/education/software development/ECE1400/Chapter.md b/education/software development/ECE1400/Chapter.md index 55533a7..557d869 100644 --- a/education/software development/ECE1400/Chapter.md +++ b/education/software development/ECE1400/Chapter.md @@ -6,4 +6,19 @@ printf("%d", !i < j); // Expected output: `1`, because `!i` evaluates to 0, and 0 is less than 5, so that expression evaluates to true, or 1. ``` -b. `i = 2; j = ` \ No newline at end of file + +b. `i = 2; j = 1;` +```c +printf("%d", !!i + !j); + +// Expected output: `1`, because !!2 evaluates to 1, and !j evaluates to 0 +``` + +c. `i = 5; j = 0; k = -5;` +```c +printf("%d", i && j || k); + +// Expected output: `1`, because i && j should evaluate to false, +``` + +d. `` \ No newline at end of file From d79f745691f6aed2dafffc0fd3818e2897998ed6 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 18 Sep 2024 11:22:12 -0600 Subject: [PATCH 0280/1027] vault backup: 2024-09-18 11:22:12 --- education/software development/ECE1400/Chapter.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/education/software development/ECE1400/Chapter.md b/education/software development/ECE1400/Chapter.md index 557d869..dcddfba 100644 --- a/education/software development/ECE1400/Chapter.md +++ b/education/software development/ECE1400/Chapter.md @@ -18,7 +18,11 @@ c. `i = 5; j = 0; k = -5;` ```c printf("%d", i && j || k); -// Expected output: `1`, because i && j should evaluate to false, +// Expected output: `1`, because i && j should evaluate to 0, but `0 || 1` should evalulate to true. ``` -d. `` \ No newline at end of file +d. `i = 1; j = 2; k = 3;` +```c +printf("%d", i < j || k); + +``` \ No newline at end of file From 2f350ffaac4982b3cc1336925198472ae2e45706 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 18 Sep 2024 11:27:12 -0600 Subject: [PATCH 0281/1027] vault backup: 2024-09-18 11:27:12 --- education/software development/ECE1400/Chapter.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/education/software development/ECE1400/Chapter.md b/education/software development/ECE1400/Chapter.md index dcddfba..18fedbd 100644 --- a/education/software development/ECE1400/Chapter.md +++ b/education/software development/ECE1400/Chapter.md @@ -25,4 +25,11 @@ d. `i = 1; j = 2; k = 3;` ```c printf("%d", i < j || k); +// Expected output: `1` +``` + +> 4. Write a single expression whose value is either `-1`, `0`, or `1` depending on whether `i` is less than, equal to, or greater than `j`, respectively. + +```c +(i ) ``` \ No newline at end of file From e31c8eaaae389213e8c56e5cda7fb3e5afdec567 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 18 Sep 2024 11:32:12 -0600 Subject: [PATCH 0282/1027] vault backup: 2024-09-18 11:32:12 --- education/software development/ECE1400/Chapter.md | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/education/software development/ECE1400/Chapter.md b/education/software development/ECE1400/Chapter.md index 18fedbd..44c8ce8 100644 --- a/education/software development/ECE1400/Chapter.md +++ b/education/software development/ECE1400/Chapter.md @@ -31,5 +31,12 @@ printf("%d", i < j || k); > 4. Write a single expression whose value is either `-1`, `0`, or `1` depending on whether `i` is less than, equal to, or greater than `j`, respectively. ```c -(i ) -``` \ No newline at end of file +/* + If i < j, the output should be -1. + If i == j, the output should be zero + If i > j, the output should be 1. +*/ +(i > j) - (i < j) +``` + +> 6. Is the following `if` statement lega \ No newline at end of file From e1d0e5756f08e9b84b6b729334e189c75e91b2c6 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 18 Sep 2024 11:37:12 -0600 Subject: [PATCH 0283/1027] vault backup: 2024-09-18 11:37:12 --- education/software development/ECE1400/Chapter.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/education/software development/ECE1400/Chapter.md b/education/software development/ECE1400/Chapter.md index 44c8ce8..d8e024d 100644 --- a/education/software development/ECE1400/Chapter.md +++ b/education/software development/ECE1400/Chapter.md @@ -39,4 +39,10 @@ printf("%d", i < j || k); (i > j) - (i < j) ``` -> 6. Is the following `if` statement lega \ No newline at end of file +> 6. Is the following `if` statement legal? + +```c +if (n >= 1 <= 10) + printf("n is between 1 and 10\n"); +``` +Yes the statement is *legal*, but it does not produce the intended effect. It would produce an output when `n` is zero because `0 >= 1` would evaluate to `0`, and `0 <= 10` is false. \ No newline at end of file From 0ac24032c0a2706db6d5f6387dd2f7f761548eac Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 18 Sep 2024 11:42:12 -0600 Subject: [PATCH 0284/1027] vault backup: 2024-09-18 11:42:12 --- .../software development/ECE1400/Chapter.md | 20 ++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/education/software development/ECE1400/Chapter.md b/education/software development/ECE1400/Chapter.md index d8e024d..2183477 100644 --- a/education/software development/ECE1400/Chapter.md +++ b/education/software development/ECE1400/Chapter.md @@ -40,9 +40,23 @@ printf("%d", i < j || k); ``` > 6. Is the following `if` statement legal? - ```c -if (n >= 1 <= 10) +if (n == 1-10) printf("n is between 1 and 10\n"); ``` -Yes the statement is *legal*, but it does not produce the intended effect. It would produce an output when `n` is zero because `0 >= 1` would evaluate to `0`, and `0 <= 10` is false. \ No newline at end of file + +Yes the statement is *legal*, but it does not produce the intended effect. It would not produce an output when `n = 5`, because `1-10` evaluates to `-9`, and `-9 != 5`. + +> 10. What output does the following program fragment produce? (Assume that `i` is an integer variable.) +```c +int i = 1; +switch (i % 3) { + case 0: printf("zero"); + case 1: printf("one"); + case 2: printf("two"); +} +``` + +The program would print `onetwo` because each case is missing a `break` statement. + +> 11. The following table shows the telephone ar \ No newline at end of file From 5dfd3085bb3ca674e1d1926167a7c1cbf4cfc0c2 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 18 Sep 2024 11:47:12 -0600 Subject: [PATCH 0285/1027] vault backup: 2024-09-18 11:47:12 --- .../software development/ECE1400/Chapter.md | 29 ++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/education/software development/ECE1400/Chapter.md b/education/software development/ECE1400/Chapter.md index 2183477..1da91d5 100644 --- a/education/software development/ECE1400/Chapter.md +++ b/education/software development/ECE1400/Chapter.md @@ -59,4 +59,31 @@ switch (i % 3) { The program would print `onetwo` because each case is missing a `break` statement. -> 11. The following table shows the telephone ar \ No newline at end of file +> 11. The following table shows the telephone area codes in the state of Georgia along with the largest city in each area: + +| Area code | Major city | +| --------- | ---------- | +| 229 | Albany | +| 404 | Atlanta | +| 470 | Atlanta | +| 478 | Macon | +| 678 | Atlanta | +| 706 | Columbus | +| 762 | Columbus | +| 770 | Atlanta | +| 912 | Savannah | +> Write a switch statement whose controlling expression is the variable `area_code`. If the value of `area_code` is not in the table, the `switch` statement will print the corresponding city name. Otherwise, the `switch` statement will display the message `"Area code not recognized."` Use the techniques discussed in section 5.3 to make the `switch` as simple as possible. +```c +int area_code = 0; + +switch (area_code) { + case 404: + case 470: + case 678: + case 770: + printf("Atlanta"); + break; + case + +} +``` \ No newline at end of file From 26c475fff54a1f6569a1690b56c9ccb28047c2be Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 18 Sep 2024 11:52:12 -0600 Subject: [PATCH 0286/1027] vault backup: 2024-09-18 11:52:12 --- .../{Chapter.md => Chapter 5 Exercises.md} | 20 ++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) rename education/software development/ECE1400/{Chapter.md => Chapter 5 Exercises.md} (90%) diff --git a/education/software development/ECE1400/Chapter.md b/education/software development/ECE1400/Chapter 5 Exercises.md similarity index 90% rename from education/software development/ECE1400/Chapter.md rename to education/software development/ECE1400/Chapter 5 Exercises.md index 1da91d5..19f3909 100644 --- a/education/software development/ECE1400/Chapter.md +++ b/education/software development/ECE1400/Chapter 5 Exercises.md @@ -74,7 +74,7 @@ The program would print `onetwo` because each case is missing a `break` statemen | 912 | Savannah | > Write a switch statement whose controlling expression is the variable `area_code`. If the value of `area_code` is not in the table, the `switch` statement will print the corresponding city name. Otherwise, the `switch` statement will display the message `"Area code not recognized."` Use the techniques discussed in section 5.3 to make the `switch` as simple as possible. ```c -int area_code = 0; +int area_code; switch (area_code) { case 404: @@ -83,7 +83,21 @@ switch (area_code) { case 770: printf("Atlanta"); break; - case - + case 706: + case 762: + printf("Columbus"); + break; + case 229: + printf("Albany"); + break; + case 478: + printf("Macon"); + break; + case 912: + printf("Savannah"); + break; + default: + printf("Area code not recognized."); + break; } ``` \ No newline at end of file From 27b91d5928fae78aeb8d393c9e62c2991fa8af4c Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 18 Sep 2024 11:57:12 -0600 Subject: [PATCH 0287/1027] vault backup: 2024-09-18 11:57:12 --- .obsidian/app.json | 1 + education/math/MATH1060 (trig)/Untitled.md | 0 2 files changed, 1 insertion(+) create mode 100644 education/math/MATH1060 (trig)/Untitled.md diff --git a/.obsidian/app.json b/.obsidian/app.json index 915aaf2..83fdb69 100644 --- a/.obsidian/app.json +++ b/.obsidian/app.json @@ -2,6 +2,7 @@ "vimMode": true, "promptDelete": false, "pdfExportSettings": { + "includeName": true, "pageSize": "Letter", "landscape": false, "margin": "0", diff --git a/education/math/MATH1060 (trig)/Untitled.md b/education/math/MATH1060 (trig)/Untitled.md new file mode 100644 index 0000000..e69de29 From ae2df8eb0e6f0a222066a863e434e44eea6b01d4 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 18 Sep 2024 12:02:12 -0600 Subject: [PATCH 0288/1027] vault backup: 2024-09-18 12:02:12 --- education/math/MATH1060 (trig)/Identities.md | 18 ++++++++++++++++++ .../math/MATH1060 (trig)/The Unit Circle.md | 13 ------------- education/math/MATH1060 (trig)/Untitled.md | 0 3 files changed, 18 insertions(+), 13 deletions(-) create mode 100644 education/math/MATH1060 (trig)/Identities.md delete mode 100644 education/math/MATH1060 (trig)/Untitled.md diff --git a/education/math/MATH1060 (trig)/Identities.md b/education/math/MATH1060 (trig)/Identities.md new file mode 100644 index 0000000..bddedb2 --- /dev/null +++ b/education/math/MATH1060 (trig)/Identities.md @@ -0,0 +1,18 @@ +# Trigonometric Identities + +All of the following only apply when the denominator is not equal to zero. + +$$ tan \theta = \frac{y}{x} $$ +Because the following are inverses of their counterparts, you only need to remember the equivalents for $sin$, $cos$, and $tan$, then just find the inverse by taking $1/v$. + +| Identity | Inverse Identity | +| ------------------------------- | ------------------------------ | +| $$ sin\theta = y $$ | $$ csc\theta = \frac{1}{y} $$ | +| $$ cos\theta = x $$ | $$ sec \theta = \frac{1}{x} $$ | +| $$ tan\theta = \frac{sin\theta} | | +$$ cot \theta = \frac{x}{y} $$ +$$ sec\theta = \frac{1}{cos\theta}$$ +$$ csc\theta = \frac{1}{sin\theta}$$ +# Pythagorean Identities +The Pythagorean identity expresses the Pythagorean theorem in terms of trigonometric functions. It's a basic relation between the sine and cosine functions. +$$ sin^2 \theta + cos^2 \theta = 1 $$ diff --git a/education/math/MATH1060 (trig)/The Unit Circle.md b/education/math/MATH1060 (trig)/The Unit Circle.md index 38919e4..37bb832 100644 --- a/education/math/MATH1060 (trig)/The Unit Circle.md +++ b/education/math/MATH1060 (trig)/The Unit Circle.md @@ -26,19 +26,6 @@ Finding a reference angle: | 2 | $180\degree - \theta$ | | 3 | $\theta - 180\degree$ | | 4 | $360\degree - \theta$ | -## Other Trigonometric Functions -All of the following only apply when the denominator is not equal to zero. - -$$ tan \theta = \frac{y}{x} $$ -Because the following are inverses of their counterparts, you only need to remember the equivalents for $sin$, $cos$, and $tan$, then just find the inverse by taking $1/v$. -$$ sec \theta = \frac{1}{x} $$ -$$ csc = \frac{1}{y} $$ -$$ cot \theta = \frac{x}{y} $$ - -## The Pythagorean Identity -The Pythagorean identity expresses the Pythagorean theorem in terms of trigonometric functions. It's a basic relation between the sine and cosine functions. -$$ sin^2 \theta + cos^2 \theta = 1 $$ - # Definitions | Term | Description | diff --git a/education/math/MATH1060 (trig)/Untitled.md b/education/math/MATH1060 (trig)/Untitled.md deleted file mode 100644 index e69de29..0000000 From 867c6b849f0e62e82772bdc8c432468cba0ba30e Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 18 Sep 2024 12:07:12 -0600 Subject: [PATCH 0289/1027] vault backup: 2024-09-18 12:07:12 --- education/math/MATH1060 (trig)/Identities.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/education/math/MATH1060 (trig)/Identities.md b/education/math/MATH1060 (trig)/Identities.md index bddedb2..1382000 100644 --- a/education/math/MATH1060 (trig)/Identities.md +++ b/education/math/MATH1060 (trig)/Identities.md @@ -5,11 +5,12 @@ All of the following only apply when the denominator is not equal to zero. $$ tan \theta = \frac{y}{x} $$ Because the following are inverses of their counterparts, you only need to remember the equivalents for $sin$, $cos$, and $tan$, then just find the inverse by taking $1/v$. -| Identity | Inverse Identity | -| ------------------------------- | ------------------------------ | -| $$ sin\theta = y $$ | $$ csc\theta = \frac{1}{y} $$ | -| $$ cos\theta = x $$ | $$ sec \theta = \frac{1}{x} $$ | -| $$ tan\theta = \frac{sin\theta} | | +| Base Identity | Inverse Identity | Alternate Identities | Alternate Inverse Identities | +| ----------------------------- | ------------------------------ | --------------------------------------------- | ------------------------------------------------------------------------- | +| $$ sin\theta = y $$ | $$ csc\theta = \frac{1}{y} $$ | | $$ csc\theta = \frac{1}{sin\theta} $$ | +| $$ cos\theta = x $$ | $$ sec \theta = \frac{1}{x} $$ | | | +| $$ tan\theta = \frac{y}{x} $$ | $$ cot\theta = \frac{x}{y} $$ | $$ tan\theta = \frac{sin\theta}{cos\theta} $$ |
$$ cot\theta = \frac{1}{tan\theta} = \frac{cos\theta}{sin{\theta}} $$ | +| | | | | $$ cot \theta = \frac{x}{y} $$ $$ sec\theta = \frac{1}{cos\theta}$$ $$ csc\theta = \frac{1}{sin\theta}$$ From 6e475df77ad66c36ac3405cb553f5de0e64a94e5 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 18 Sep 2024 12:12:12 -0600 Subject: [PATCH 0290/1027] vault backup: 2024-09-18 12:12:12 --- education/math/MATH1060 (trig)/Identities.md | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/education/math/MATH1060 (trig)/Identities.md b/education/math/MATH1060 (trig)/Identities.md index 1382000..827001f 100644 --- a/education/math/MATH1060 (trig)/Identities.md +++ b/education/math/MATH1060 (trig)/Identities.md @@ -5,15 +5,23 @@ All of the following only apply when the denominator is not equal to zero. $$ tan \theta = \frac{y}{x} $$ Because the following are inverses of their counterparts, you only need to remember the equivalents for $sin$, $cos$, and $tan$, then just find the inverse by taking $1/v$. -| Base Identity | Inverse Identity | Alternate Identities | Alternate Inverse Identities | -| ----------------------------- | ------------------------------ | --------------------------------------------- | ------------------------------------------------------------------------- | -| $$ sin\theta = y $$ | $$ csc\theta = \frac{1}{y} $$ | | $$ csc\theta = \frac{1}{sin\theta} $$ | -| $$ cos\theta = x $$ | $$ sec \theta = \frac{1}{x} $$ | | | -| $$ tan\theta = \frac{y}{x} $$ | $$ cot\theta = \frac{x}{y} $$ | $$ tan\theta = \frac{sin\theta}{cos\theta} $$ |
$$ cot\theta = \frac{1}{tan\theta} = \frac{cos\theta}{sin{\theta}} $$ | -| | | | | +| Base Identity | Inverse Identity | Alternate Identities | Alternate Inverse Identities | +| ----------------------------- | ------------------------------ | --------------------------------------------- | --------------------------------------------------------------------- | +| $$ sin\theta = y $$ | $$ csc\theta = \frac{1}{y} $$ | | $$ csc\theta = \frac{1}{sin\theta} $$ | +| $$ cos\theta = x $$ | $$ sec \theta = \frac{1}{x} $$ | | $$ sec\theta = \frac{1}{cos\theta} $$ | +| $$ tan\theta = \frac{y}{x} $$ | $$ cot\theta = \frac{x}{y} $$ | $$ tan\theta = \frac{sin\theta}{cos\theta} $$ | $$ cot\theta = \frac{1}{tan\theta} = \frac{cos\theta}{sin{\theta}} $$ | + $$ cot \theta = \frac{x}{y} $$ $$ sec\theta = \frac{1}{cos\theta}$$ $$ csc\theta = \frac{1}{sin\theta}$$ # Pythagorean Identities The Pythagorean identity expresses the Pythagorean theorem in terms of trigonometric functions. It's a basic relation between the sine and cosine functions. $$ sin^2 \theta + cos^2 \theta = 1 $$ +There are more forms that are useful, but they can be derived from the above formula: +$$ 1 + tan^2\theta = sec^2\theta $$ +$$ cot^2 \theta + 1 = csc^2\theta $$ +# Even and Odd Identities +- A function is even if $f(-x) = f(x)$. +- A function is odd if $f(-x) = -f(x)$ +Cosine and secant are **even* +## Examples From 45f0eedb0313c5c7c23a50c2227feb96be44c565 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 18 Sep 2024 12:17:12 -0600 Subject: [PATCH 0291/1027] vault backup: 2024-09-18 12:17:12 --- education/math/MATH1060 (trig)/Identities.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/education/math/MATH1060 (trig)/Identities.md b/education/math/MATH1060 (trig)/Identities.md index 827001f..94c2ae6 100644 --- a/education/math/MATH1060 (trig)/Identities.md +++ b/education/math/MATH1060 (trig)/Identities.md @@ -23,5 +23,10 @@ $$ cot^2 \theta + 1 = csc^2\theta $$ # Even and Odd Identities - A function is even if $f(-x) = f(x)$. - A function is odd if $f(-x) = -f(x)$ -Cosine and secant are **even* +- Cosine and secant are **even** +- Sine, tangent, cosecant, and cotangent are **odd**. ## Examples +> If $cot\theta = -\sqrt{3}$, what is $cot(-\theta)$? + +$cot$ is an odd function, and so $cot(-\theta) = \sqrt{3}$ + From c3e96616880a65604e0459492f14884993463469 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 18 Sep 2024 12:22:12 -0600 Subject: [PATCH 0292/1027] vault backup: 2024-09-18 12:22:12 --- education/math/MATH1060 (trig)/Identities.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/education/math/MATH1060 (trig)/Identities.md b/education/math/MATH1060 (trig)/Identities.md index 94c2ae6..9b9999c 100644 --- a/education/math/MATH1060 (trig)/Identities.md +++ b/education/math/MATH1060 (trig)/Identities.md @@ -26,7 +26,12 @@ $$ cot^2 \theta + 1 = csc^2\theta $$ - Cosine and secant are **even** - Sine, tangent, cosecant, and cotangent are **odd**. ## Examples +### Even and Odd Functions > If $cot\theta = -\sqrt{3}$, what is $cot(-\theta)$? $cot$ is an odd function, and so $cot(-\theta) = \sqrt{3}$ +### Simplifying Using Identities +> Simplify $\frac{sin\theta}{cos\theta}$ + + From f3d2b8abf410dd1e8974a39f45ef6c11f32963ae Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 18 Sep 2024 12:27:12 -0600 Subject: [PATCH 0293/1027] vault backup: 2024-09-18 12:27:12 --- education/math/MATH1060 (trig)/Identities.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/education/math/MATH1060 (trig)/Identities.md b/education/math/MATH1060 (trig)/Identities.md index 9b9999c..4e98f92 100644 --- a/education/math/MATH1060 (trig)/Identities.md +++ b/education/math/MATH1060 (trig)/Identities.md @@ -33,5 +33,7 @@ $cot$ is an odd function, and so $cot(-\theta) = \sqrt{3}$ ### Simplifying Using Identities > Simplify $\frac{sin\theta}{cos\theta}$ - +1. The above equation can be split into two components +$$ \frac{sin\theta}{cos\theta} = \frac{sin\theta}{1} * \frac{1}{csc\theta} $$ +2. Referring to the list of trig identities, we know that $\frac{1}{csc\theta}$ is equal to $sin\theta$. From 569c773de6ec131f7920d97cd5e2a03cb1427a23 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sun, 22 Sep 2024 13:08:05 -0600 Subject: [PATCH 0294/1027] vault backup: 2024-09-22 13:08:05 --- education/math/MATH1060 (trig)/Identities.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/education/math/MATH1060 (trig)/Identities.md b/education/math/MATH1060 (trig)/Identities.md index 4e98f92..1804dd6 100644 --- a/education/math/MATH1060 (trig)/Identities.md +++ b/education/math/MATH1060 (trig)/Identities.md @@ -36,4 +36,6 @@ $cot$ is an odd function, and so $cot(-\theta) = \sqrt{3}$ 1. The above equation can be split into two components $$ \frac{sin\theta}{cos\theta} = \frac{sin\theta}{1} * \frac{1}{csc\theta} $$ 2. Referring to the list of trig identities, we know that $\frac{1}{csc\theta}$ is equal to $sin\theta$. - +$$ \frac{sin\theta}{1} * \frac{1}{csc\theta} = sin\theta * sin\theta $$ +3. Simplifying further, we get: +$$ sin^2\theta $$ From 69af5ccf5478a141c43515d5a8cd397bd5da67d0 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sun, 22 Sep 2024 15:27:20 -0600 Subject: [PATCH 0295/1027] vault backup: 2024-09-22 15:27:20 --- .../\"Why Argument Matters\" - Aikin and Talisse.md" | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 "education/english/ENGL2010/\"Why Argument Matters\" - Aikin and Talisse.md" diff --git "a/education/english/ENGL2010/\"Why Argument Matters\" - Aikin and Talisse.md" "b/education/english/ENGL2010/\"Why Argument Matters\" - Aikin and Talisse.md" new file mode 100644 index 0000000..f4e0ceb --- /dev/null +++ "b/education/english/ENGL2010/\"Why Argument Matters\" - Aikin and Talisse.md" @@ -0,0 +1,6 @@ +- Arguing is an essential part of what it means to be human +- Humans are not naturally adept at arguments +- Our beliefs guide and determine our behavior + - Others care how we behave +- If beliefs lead to behavior, then controlling beliefs means controlling behaviors +- Argumw \ No newline at end of file From 38b0420144bb19db44210fab2e7d8234dc163108 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sun, 22 Sep 2024 15:35:20 -0600 Subject: [PATCH 0296/1027] vault backup: 2024-09-22 15:35:20 --- ..."Why Argument Matters\" - Aikin and Talisse.md" | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git "a/education/english/ENGL2010/\"Why Argument Matters\" - Aikin and Talisse.md" "b/education/english/ENGL2010/\"Why Argument Matters\" - Aikin and Talisse.md" index f4e0ceb..4b8f36a 100644 --- "a/education/english/ENGL2010/\"Why Argument Matters\" - Aikin and Talisse.md" +++ "b/education/english/ENGL2010/\"Why Argument Matters\" - Aikin and Talisse.md" @@ -3,4 +3,16 @@ - Our beliefs guide and determine our behavior - Others care how we behave - If beliefs lead to behavior, then controlling beliefs means controlling behaviors -- Argumw \ No newline at end of file +- Argumentative skills are self defensive +- Diverting attention away from reasons makes those reasons easier to accept +- Making opponents of a belief "The Enemy" is another way to make a belief easier to accept +- Manipulation of beliefs can generally be categorized as diverting manipulation and distorting manipulation +- Everyone aims to be in possession of the truth +- Knowing why you believe a certain way is important, perhaps more important than the beliefs themselves. +- Cognitive success is being correct, cognitive command is understanding why +- Cognitive command doesn't necessarily guarantee correctness, but it enables one to rationally correct themselves +- Pushback helps develop more complete understanding +- When you only interact with people that agree with you, your beliefs become more extreme. +- Deliberative democracy is healthy +- Democracy relies on the ability to undo change, ala "we make changes and learn from them as we approach the ideal" +- Everyone believes that they haven't been duped. \ No newline at end of file From 4bea0ad374b2e945f68a0117fb2e04f5ad9f1b06 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Mon, 23 Sep 2024 11:20:52 -0600 Subject: [PATCH 0297/1027] vault backup: 2024-09-23 11:20:52 --- education/math/MATH1060 (trig)/Identities.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/education/math/MATH1060 (trig)/Identities.md b/education/math/MATH1060 (trig)/Identities.md index 1804dd6..803e267 100644 --- a/education/math/MATH1060 (trig)/Identities.md +++ b/education/math/MATH1060 (trig)/Identities.md @@ -39,3 +39,9 @@ $$ \frac{sin\theta}{cos\theta} = \frac{sin\theta}{1} * \frac{1}{csc\theta} $$ $$ \frac{sin\theta}{1} * \frac{1}{csc\theta} = sin\theta * sin\theta $$ 3. Simplifying further, we get: $$ sin^2\theta $$ +### Finding all values using identities +If $sec\theta = -\frac{25}{7}$ and $0 < \theta < \pi$, find the values of the other 5 trig functions: + +Using the trig identity $1 + tan^2\theta = cot^2\theta$, we can do this: +$$ 1 + tan^2\theta = (-\frac{25}{7})^2 $$ +$25^2 \ No newline at end of file From 481b58fe54a3f3068197d08517c38035789b07ae Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Mon, 23 Sep 2024 11:25:52 -0600 Subject: [PATCH 0298/1027] vault backup: 2024-09-23 11:25:52 --- education/math/MATH1060 (trig)/Identities.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/education/math/MATH1060 (trig)/Identities.md b/education/math/MATH1060 (trig)/Identities.md index 803e267..b11332e 100644 --- a/education/math/MATH1060 (trig)/Identities.md +++ b/education/math/MATH1060 (trig)/Identities.md @@ -44,4 +44,11 @@ If $sec\theta = -\frac{25}{7}$ and $0 < \theta < \pi$, find the values of the ot Using the trig identity $1 + tan^2\theta = cot^2\theta$, we can do this: $$ 1 + tan^2\theta = (-\frac{25}{7})^2 $$ -$25^2 \ No newline at end of file +Shuffling things around, we get this: +$$ tan^2\theta = \frac{625}{49} - 1 $$ + +Performing that subtraction gives us this: +$$ \frac{625}{49} - \frac{49}{49} = \frac{576}{49} = tan^2\theta $$ +You can get rid of the exponent: + +$$ \frac{576}{49} \ No newline at end of file From 487b115a152606345ec9e13b791d2d81c4cbf083 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Mon, 23 Sep 2024 11:30:52 -0600 Subject: [PATCH 0299/1027] vault backup: 2024-09-23 11:30:52 --- education/math/MATH1060 (trig)/Identities.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/education/math/MATH1060 (trig)/Identities.md b/education/math/MATH1060 (trig)/Identities.md index b11332e..2eb431d 100644 --- a/education/math/MATH1060 (trig)/Identities.md +++ b/education/math/MATH1060 (trig)/Identities.md @@ -51,4 +51,6 @@ Performing that subtraction gives us this: $$ \frac{625}{49} - \frac{49}{49} = \frac{576}{49} = tan^2\theta $$ You can get rid of the exponent: -$$ \frac{576}{49} \ No newline at end of file +$$ \sqrt{\frac{576}{49}} = tan\theta $$ +$\sqrt{576} = 24$ and $\sqrt{49} = 7$, so: +$$ tan\theta = \frac{24}{7} $$ From b54005308c3b171d228aaed886e1d313fcb51baf Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Mon, 23 Sep 2024 11:36:45 -0600 Subject: [PATCH 0300/1027] vault backup: 2024-09-23 11:36:45 --- education/math/MATH1060 (trig)/Identities.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/education/math/MATH1060 (trig)/Identities.md b/education/math/MATH1060 (trig)/Identities.md index 2eb431d..63f13d8 100644 --- a/education/math/MATH1060 (trig)/Identities.md +++ b/education/math/MATH1060 (trig)/Identities.md @@ -42,7 +42,7 @@ $$ sin^2\theta $$ ### Finding all values using identities If $sec\theta = -\frac{25}{7}$ and $0 < \theta < \pi$, find the values of the other 5 trig functions: -Using the trig identity $1 + tan^2\theta = cot^2\theta$, we can do this: +1. To find $tan\theta$, we can use the trig identity $1 + tan^2\theta = sec^2\theta$: $$ 1 + tan^2\theta = (-\frac{25}{7})^2 $$ Shuffling things around, we get this: $$ tan^2\theta = \frac{625}{49} - 1 $$ @@ -54,3 +54,5 @@ You can get rid of the exponent: $$ \sqrt{\frac{576}{49}} = tan\theta $$ $\sqrt{576} = 24$ and $\sqrt{49} = 7$, so: $$ tan\theta = \frac{24}{7} $$ +2. To find $cos\theta$, because $sec$ is the inverse of $cos$, we can use the identity $sec\theta = \frac{1}{cos\theta}$: +So $cos\theta = -\frac{7}{25}$. \ No newline at end of file From 26114a65278eb1c087336ffb0a6eba0ebcd8c695 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Mon, 23 Sep 2024 11:41:45 -0600 Subject: [PATCH 0301/1027] vault backup: 2024-09-23 11:41:45 --- education/math/MATH1060 (trig)/Identities.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/education/math/MATH1060 (trig)/Identities.md b/education/math/MATH1060 (trig)/Identities.md index 63f13d8..60c710b 100644 --- a/education/math/MATH1060 (trig)/Identities.md +++ b/education/math/MATH1060 (trig)/Identities.md @@ -55,4 +55,9 @@ $$ \sqrt{\frac{576}{49}} = tan\theta $$ $\sqrt{576} = 24$ and $\sqrt{49} = 7$, so: $$ tan\theta = \frac{24}{7} $$ 2. To find $cos\theta$, because $sec$ is the inverse of $cos$, we can use the identity $sec\theta = \frac{1}{cos\theta}$: -So $cos\theta = -\frac{7}{25}$. \ No newline at end of file +$cos\theta = -\frac{7}{25}$ + +3. To find $sin\theta$, we can use the trig identity $sin^2\theta + cos^2\theta = 1$: +$$ sin^2\theta + (-\frac{7}{25}) = 1 $$ +Rearranging, we get: +$$ 1 - (-\frac{7}{25} = sin^2\theta $$ From 67454454ac7da815bcdaec5028d6e84b4e56efc7 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Mon, 23 Sep 2024 11:46:45 -0600 Subject: [PATCH 0302/1027] vault backup: 2024-09-23 11:46:45 --- education/math/MATH1060 (trig)/Identities.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/education/math/MATH1060 (trig)/Identities.md b/education/math/MATH1060 (trig)/Identities.md index 60c710b..3ed3245 100644 --- a/education/math/MATH1060 (trig)/Identities.md +++ b/education/math/MATH1060 (trig)/Identities.md @@ -60,4 +60,9 @@ $cos\theta = -\frac{7}{25}$ 3. To find $sin\theta$, we can use the trig identity $sin^2\theta + cos^2\theta = 1$: $$ sin^2\theta + (-\frac{7}{25}) = 1 $$ Rearranging, we get: -$$ 1 - (-\frac{7}{25} = sin^2\theta $$ +$$ 1 - (-\frac{7}{25})^2 = sin^2\theta $$ +Applying the exponent gives us $\frac{49}{625}$, so we can do this: +$$ \frac{625}{625} - \frac{49}{625} = \frac{576}{625} = sin^2\theta $$ + +Getting rid of the exponent: +$$ \sqrt{\frac{576}{625}} = $$ From 716bb343b1cc0d916e60c6a36c23aadd10218447 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Mon, 23 Sep 2024 11:51:45 -0600 Subject: [PATCH 0303/1027] vault backup: 2024-09-23 11:51:45 --- education/math/MATH1060 (trig)/Graphing.md | 10 ++++++++++ education/math/MATH1060 (trig)/Identities.md | 4 +++- .../math/MATH1060 (trig)/assets/graphsincos.png | Bin 0 -> 15576 bytes 3 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 education/math/MATH1060 (trig)/Graphing.md create mode 100644 education/math/MATH1060 (trig)/assets/graphsincos.png diff --git a/education/math/MATH1060 (trig)/Graphing.md b/education/math/MATH1060 (trig)/Graphing.md new file mode 100644 index 0000000..b1a9603 --- /dev/null +++ b/education/math/MATH1060 (trig)/Graphing.md @@ -0,0 +1,10 @@ +![A graph of sine and cosine](./assets/graphsincos.png) + +Given the above graph: +- At the origin, $sin(x) = 0$ and $cos(x) = 1$ +- A full wavelength takes $2\pi$ + +# Manipulation +| Formula | Movement | +| ------------------ | -------- | +| $ y = cos(x) - 1 $ | | diff --git a/education/math/MATH1060 (trig)/Identities.md b/education/math/MATH1060 (trig)/Identities.md index 3ed3245..f45f19a 100644 --- a/education/math/MATH1060 (trig)/Identities.md +++ b/education/math/MATH1060 (trig)/Identities.md @@ -65,4 +65,6 @@ Applying the exponent gives us $\frac{49}{625}$, so we can do this: $$ \frac{625}{625} - \frac{49}{625} = \frac{576}{625} = sin^2\theta $$ Getting rid of the exponent: -$$ \sqrt{\frac{576}{625}} = $$ +$$ \sqrt{\frac{576}{625}} = \frac{24}{25} = sin\theta $$ + +From there, you can find the rest of the identities fairly easily. \ No newline at end of file diff --git a/education/math/MATH1060 (trig)/assets/graphsincos.png b/education/math/MATH1060 (trig)/assets/graphsincos.png new file mode 100644 index 0000000000000000000000000000000000000000..8adaf60fed0c55f0ac225afd21cd861b463dc71b GIT binary patch literal 15576 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 db1=0s_xgW+04=%L9XtS$5| Date: Mon, 23 Sep 2024 12:01:19 -0600 Subject: [PATCH 0304/1027] vault backup: 2024-09-23 12:01:18 --- education/math/MATH1060 (trig)/Graphing.md | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/education/math/MATH1060 (trig)/Graphing.md b/education/math/MATH1060 (trig)/Graphing.md index b1a9603..e0fae7c 100644 --- a/education/math/MATH1060 (trig)/Graphing.md +++ b/education/math/MATH1060 (trig)/Graphing.md @@ -5,6 +5,13 @@ Given the above graph: - A full wavelength takes $2\pi$ # Manipulation -| Formula | Movement | -| ------------------ | -------- | -| $ y = cos(x) - 1 $ | | +| Formula | Movement | +| ---------------- | ---------------------------------- | +| $y = cos(x) - 1$ | Vertical shift down by 1 | +| $y = 2cos(x)$ | Vertical stretch by a factor of 2 | +| $y = -cos(x)$ | Flip over x axis | +| $y = cos(2x)$ | Horizontal shrink by a factor of 2 | +# Periodic Functions +A function is considered periodic if it repeats itself at even intervals, where each interval is a complete cycle, referred to as a *period*. + + From 6aee69f9c13d595aa84e2343aa669f38756ed2ab Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Mon, 23 Sep 2024 12:55:44 -0600 Subject: [PATCH 0305/1027] vault backup: 2024-09-23 12:55:44 --- education/math/MATH1060 (trig)/Identities.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/education/math/MATH1060 (trig)/Identities.md b/education/math/MATH1060 (trig)/Identities.md index f45f19a..1fb1b7d 100644 --- a/education/math/MATH1060 (trig)/Identities.md +++ b/education/math/MATH1060 (trig)/Identities.md @@ -10,10 +10,6 @@ Because the following are inverses of their counterparts, you only need to remem | $$ sin\theta = y $$ | $$ csc\theta = \frac{1}{y} $$ | | $$ csc\theta = \frac{1}{sin\theta} $$ | | $$ cos\theta = x $$ | $$ sec \theta = \frac{1}{x} $$ | | $$ sec\theta = \frac{1}{cos\theta} $$ | | $$ tan\theta = \frac{y}{x} $$ | $$ cot\theta = \frac{x}{y} $$ | $$ tan\theta = \frac{sin\theta}{cos\theta} $$ | $$ cot\theta = \frac{1}{tan\theta} = \frac{cos\theta}{sin{\theta}} $$ | - -$$ cot \theta = \frac{x}{y} $$ -$$ sec\theta = \frac{1}{cos\theta}$$ -$$ csc\theta = \frac{1}{sin\theta}$$ # Pythagorean Identities The Pythagorean identity expresses the Pythagorean theorem in terms of trigonometric functions. It's a basic relation between the sine and cosine functions. $$ sin^2 \theta + cos^2 \theta = 1 $$ From dcf20e1cb507889d8502b9b20d18776323878967 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 24 Sep 2024 12:36:23 -0600 Subject: [PATCH 0306/1027] vault backup: 2024-09-24 12:36:23 --- education/nutrition/Digestive System.md | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 education/nutrition/Digestive System.md diff --git a/education/nutrition/Digestive System.md b/education/nutrition/Digestive System.md new file mode 100644 index 0000000..941b6a4 --- /dev/null +++ b/education/nutrition/Digestive System.md @@ -0,0 +1,21 @@ +The primary roles of the digestive system are: +- breakdown of food into nutrients +- absorption of nutrients +- elimination of solid waste products +Digestion is the process of breaking down large food molecules into nutrients that the body can use +Absorption is the uptake and removal of nutrients from the digestive tract. +- The digestive tract is also called the gastrointestinal tract (GI), alimentary canal, or gut +# The GI tract +## Order +1. Mouth +2. Esophagus* +3. Stomach* +4. Small intestine (DJI) + 1. Duodenum + 2. Jejunum + 3. ileum* +5. Large intestine +6. Rectum +7. Anus + +## S \ No newline at end of file From a01b6d61f99c85fbf0b87342b6c131c19a72151e Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 24 Sep 2024 12:41:23 -0600 Subject: [PATCH 0307/1027] vault backup: 2024-09-24 12:41:23 --- education/nutrition/Digestive System.md | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/education/nutrition/Digestive System.md b/education/nutrition/Digestive System.md index 941b6a4..abf125b 100644 --- a/education/nutrition/Digestive System.md +++ b/education/nutrition/Digestive System.md @@ -17,5 +17,14 @@ Absorption is the uptake and removal of nutrients from the digestive tract. 5. Large intestine 6. Rectum 7. Anus - -## S \ No newline at end of file +## Sphincters +Sphincters are thickened regions of circular muscle that control the flow of contents at various points in the GI tract. +- Contracted: + - Passageway closed + - Flow is restricted +- Essential for normal digestion and absorption +There are 3 main sphincters associated with digestion: +1. Gastroesophageal/lower esophageal/cardiac - connects the esophagus to the stomach +2. Pyloric - connects the stomach to the duodenum (small intestine) +3. ileocecal valve - Connects the small intestine to the large intestine +The upper esophageal sphincter is at the top of the esophagus (not as important). \ No newline at end of file From 8c82f294740c07204ab58cdc92f6dc38d6304ea1 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 24 Sep 2024 12:51:23 -0600 Subject: [PATCH 0308/1027] vault backup: 2024-09-24 12:51:23 --- education/nutrition/Digestive System.md | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/education/nutrition/Digestive System.md b/education/nutrition/Digestive System.md index abf125b..c1c81c7 100644 --- a/education/nutrition/Digestive System.md +++ b/education/nutrition/Digestive System.md @@ -27,4 +27,13 @@ There are 3 main sphincters associated with digestion: 1. Gastroesophageal/lower esophageal/cardiac - connects the esophagus to the stomach 2. Pyloric - connects the stomach to the duodenum (small intestine) 3. ileocecal valve - Connects the small intestine to the large intestine -The upper esophageal sphincter is at the top of the esophagus (not as important). \ No newline at end of file +The upper esophageal sphincter is at the top of the esophagus (not as important). + +# Digestion +**Mechanical digestion refers to the physical treatment that food undergoes** while it is in the intestinal tract + +Chemical digestion refers to the breakdown of large molecules in food into smaller components, primarily by the action of **enzymes**. +- Enzymes are a protein that speeds up the rate of a chemical reaction without being altered in the process. +- Enzymes usually end in -ase and begin with the name of whatever they are working to digest: + - Amylase digests amylose + - Maltase digests maltose \ No newline at end of file From dbbdff8513a706ed2716beae32fb4e3d3693c799 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 24 Sep 2024 12:56:23 -0600 Subject: [PATCH 0309/1027] vault backup: 2024-09-24 12:56:23 --- education/nutrition/Digestive System.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/education/nutrition/Digestive System.md b/education/nutrition/Digestive System.md index c1c81c7..f99e42d 100644 --- a/education/nutrition/Digestive System.md +++ b/education/nutrition/Digestive System.md @@ -8,7 +8,16 @@ Absorption is the uptake and removal of nutrients from the digestive tract. # The GI tract ## Order 1. Mouth + 1. Digestion starts here for carbohydrates and fats (not proteins) + 2. Salivary glands are structures that produce saliva and secrete the fluid in the oral cavity + 3. Saliva is the watery fluid that contains mucus and enzymes + 1. Lysozyme - Destroys some bacteria that are in the food or mouth + 2. Salivary Amolase + 3. Lingual Lipase + 4. Taste buds have specialized cells that help distinguish five basic tastes + 5. You lose taste buds as we age. Older people have fewer taste buds than younger people. 2. Esophagus* + 1. The esophagus is a flap of tough tissue that p 3. Stomach* 4. Small intestine (DJI) 1. Duodenum From 1999c779ea2f43e596518a3e07418c231551f9a0 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 24 Sep 2024 13:01:23 -0600 Subject: [PATCH 0310/1027] vault backup: 2024-09-24 13:01:23 --- education/nutrition/Digestive System.md | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/education/nutrition/Digestive System.md b/education/nutrition/Digestive System.md index f99e42d..69b7e88 100644 --- a/education/nutrition/Digestive System.md +++ b/education/nutrition/Digestive System.md @@ -17,8 +17,13 @@ Absorption is the uptake and removal of nutrients from the digestive tract. 4. Taste buds have specialized cells that help distinguish five basic tastes 5. You lose taste buds as we age. Older people have fewer taste buds than younger people. 2. Esophagus* - 1. The esophagus is a flap of tough tissue that p + 1. The esophagus is a flap of tough tissue that prevents the food from entering the larynx and the trachea + 2. **Peristalsis** is the wave of muscular contraction that helps move material through most of the digestive tract. It's an involuntary response to swallowing + 3. By relaxing and contracting, the muscles can mix substances, in the lumen and control movement through the tract 3. Stomach* + 1. The stomach is a muscular sac that stores and mixes food + 2. Gastric glands located in the stomach synthesize and secrete gastric juice + 1. Gastric juice is a mix of mucus, hydrochloric acid, intrinsic factor, and digestive enzymes 4. Small intestine (DJI) 1. Duodenum 2. Jejunum @@ -45,4 +50,10 @@ Chemical digestion refers to the breakdown of large molecules in food into small - Enzymes are a protein that speeds up the rate of a chemical reaction without being altered in the process. - Enzymes usually end in -ase and begin with the name of whatever they are working to digest: - Amylase digests amylose - - Maltase digests maltose \ No newline at end of file + - Maltase digests maltose + + +# Definitions +| Phrase | Definition | +| ------ | --------------------------------------------- | +| Lumen | The open space inside of the digestive system | From 979768af3208dc7ca91e81f4ce9afb4a5e0f82d4 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 24 Sep 2024 13:06:23 -0600 Subject: [PATCH 0311/1027] vault backup: 2024-09-24 13:06:23 --- education/nutrition/Digestive System.md | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/education/nutrition/Digestive System.md b/education/nutrition/Digestive System.md index 69b7e88..9a0e593 100644 --- a/education/nutrition/Digestive System.md +++ b/education/nutrition/Digestive System.md @@ -24,6 +24,13 @@ Absorption is the uptake and removal of nutrients from the digestive tract. 1. The stomach is a muscular sac that stores and mixes food 2. Gastric glands located in the stomach synthesize and secrete gastric juice 1. Gastric juice is a mix of mucus, hydrochloric acid, intrinsic factor, and digestive enzymes + 1. Mucus cells secrete mucus to protect the lining of the stomach from the acid + 2. Parietal cells secrete intrinsic factor and the components of hydrochloric acid into the lumen of the stomach + 1. Intrinsic factor is a substance necessary for absorbing vitamin B-12 + 3. Chief cells secrete some chemically inactive digestive enzymes + 1. Pepsinogen + 2. Gastric lipase + 4. G cells secrete gastrin - A hormone that stimulates stomach motility and gastric gland secretions 4. Small intestine (DJI) 1. Duodenum 2. Jejunum @@ -39,7 +46,7 @@ Sphincters are thickened regions of circular muscle that control the flow of con - Essential for normal digestion and absorption There are 3 main sphincters associated with digestion: 1. Gastroesophageal/lower esophageal/cardiac - connects the esophagus to the stomach -2. Pyloric - connects the stomach to the duodenum (small intestine) +2. Pyloric - connects the stomach to the duodenum (small intestine) and regulates the flow of chyme 3. ileocecal valve - Connects the small intestine to the large intestine The upper esophageal sphincter is at the top of the esophagus (not as important). @@ -54,6 +61,8 @@ Chemical digestion refers to the breakdown of large molecules in food into small # Definitions -| Phrase | Definition | -| ------ | --------------------------------------------- | -| Lumen | The open space inside of the digestive system | +| Phrase | Definition | +| -------- | -------------------------------------------------------------------------------------------- | +| Lumen | The open space inside of the digestive system | +| Chyme | A semiliquid mass that forms when food mixes with gastric juice. Occurs in the lower stomach | +| Motility | The ability of an organism to move independently | From b1f31985200706f8b2739af0d343f3d424f6fb4b Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 24 Sep 2024 21:14:37 -0600 Subject: [PATCH 0312/1027] vault backup: 2024-09-24 21:14:37 --- education/nutrition/Digestive System.md | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/education/nutrition/Digestive System.md b/education/nutrition/Digestive System.md index 9a0e593..e9ae2d2 100644 --- a/education/nutrition/Digestive System.md +++ b/education/nutrition/Digestive System.md @@ -61,8 +61,12 @@ Chemical digestion refers to the breakdown of large molecules in food into small # Definitions -| Phrase | Definition | -| -------- | -------------------------------------------------------------------------------------------- | -| Lumen | The open space inside of the digestive system | -| Chyme | A semiliquid mass that forms when food mixes with gastric juice. Occurs in the lower stomach | -| Motility | The ability of an organism to move independently | +| Phrase | Definition | +| --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| Lumen | The open space inside of the digestive system | +| Chyme | A semiliquid mass that forms when food mixes with gastric juice. Occurs in the lower stomach | +| Motility | The ability of an organism to move independently | +| Gastrin | Secreted in response to food entering the stomach, it triggers parietal cells to release HCL and chief cells to release pepsinogen. *Stimulates stomach and small intestinal motility* | +| Secretin | Secreted from the small intestine in response to acidic chyme entering the duodenum and the first part of the jejunum, secretin *stimulates the release of a bicarbonate-rich solution from the liver and pancreas.* | +| Cholecystokinin | Secreted from the small intestine in response to fat and breakdown products of proteins (peptides) entering the small intestine, cholecystokinin *stimulates the release of bile from the gallbladder into the small intestine*. It also stimulates the release of pancreatic enzymes, decreases stomach secretions, and slows stomach motility. | +| Pancreas | An accessory organ of the GI tract that produces and secretes many of the enzymes that break down carbs, protein, and fat. It also secretes bicarbonate ions to neutralize the highly acidic chyme coming from the stomach. | From 66ed1bfbc20e4f10fdf112165aefd06fe8a4f4f0 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 24 Sep 2024 21:19:37 -0600 Subject: [PATCH 0313/1027] vault backup: 2024-09-24 21:19:37 --- education/nutrition/Digestive System.md | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/education/nutrition/Digestive System.md b/education/nutrition/Digestive System.md index e9ae2d2..64348c6 100644 --- a/education/nutrition/Digestive System.md +++ b/education/nutrition/Digestive System.md @@ -61,12 +61,13 @@ Chemical digestion refers to the breakdown of large molecules in food into small # Definitions -| Phrase | Definition | -| --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| Lumen | The open space inside of the digestive system | -| Chyme | A semiliquid mass that forms when food mixes with gastric juice. Occurs in the lower stomach | -| Motility | The ability of an organism to move independently | -| Gastrin | Secreted in response to food entering the stomach, it triggers parietal cells to release HCL and chief cells to release pepsinogen. *Stimulates stomach and small intestinal motility* | -| Secretin | Secreted from the small intestine in response to acidic chyme entering the duodenum and the first part of the jejunum, secretin *stimulates the release of a bicarbonate-rich solution from the liver and pancreas.* | -| Cholecystokinin | Secreted from the small intestine in response to fat and breakdown products of proteins (peptides) entering the small intestine, cholecystokinin *stimulates the release of bile from the gallbladder into the small intestine*. It also stimulates the release of pancreatic enzymes, decreases stomach secretions, and slows stomach motility. | -| Pancreas | An accessory organ of the GI tract that produces and secretes many of the enzymes that break down carbs, protein, and fat. It also secretes bicarbonate ions to neutralize the highly acidic chyme coming from the stomach. | +| Phrase | Definition | +| ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| Lumen | The open space inside of the digestive system | +| Chyme | A semiliquid mass that forms when food mixes with gastric juice. Occurs in the lower stomach | +| Motility | The ability of an organism to move independently | +| Gastrin | Secreted in response to food entering the stomach, it triggers parietal cells to release HCL and chief cells to release pepsinogen. *Stimulates stomach and small intestinal motility* | +| Secretin | Secreted from the small intestine in response to acidic chyme entering the duodenum and the first part of the jejunum, secretin *stimulates the release of a bicarbonate-rich solution from the liver and pancreas.* | +| Cholecystokinin | Secreted from the small intestine in response to fat and breakdown products of proteins (peptides) entering the small intestine, cholecystokinin *stimulates the release of bile from the gallbladder into the small intestine*. It also stimulates the release of pancreatic enzymes, decreases stomach secretions, and slows stomach motility. | +| Pancreas | An accessory organ of the GI tract that produces and secretes many of the enzymes that break down carbs, protein, and fat. It also secretes bicarbonate ions to neutralize the highly acidic chyme coming from the stomach. | +| Villi (singular villus) | Small finger like projections that line the inner surface of the small intestine. They help maximize the absorption of nutrients from food. They're covered in an outer layer of absorptive cells called enterocytes. | From 323089b58db6228e8bf140ad2494360a1aac8d7e Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 24 Sep 2024 21:24:37 -0600 Subject: [PATCH 0314/1027] vault backup: 2024-09-24 21:24:37 --- education/nutrition/Digestive System.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/education/nutrition/Digestive System.md b/education/nutrition/Digestive System.md index 64348c6..ef60b32 100644 --- a/education/nutrition/Digestive System.md +++ b/education/nutrition/Digestive System.md @@ -58,7 +58,10 @@ Chemical digestion refers to the breakdown of large molecules in food into small - Enzymes usually end in -ase and begin with the name of whatever they are working to digest: - Amylase digests amylose - Maltase digests maltose - +# Nutrient Absorption +- **Simple Diffusion**: Occurs when the concentration of a particular nutrient is higher in one area than an other. This form of transport does not require energy input. Many water-soluble vitamins, lipids, and some minerals are absorbed in the digestive tract by simple diffusion. +- **Facilitated Diffusion**: Enterocytes absorb some nutrients by facilitated diffusion, another process that does not require energy. Although the nutrient moves down its concentration gradient, it still needs to be carried by a special transport protein within the membrane of the enterocyte. Absorption of simple sugar fructose occurs by facilitated diffusion +- **Active Transport**: Some nutrients move from the lumen of the intestine and into an enterocyte against the concentration gradient; that is, from low to high concentration. Absorption of these nutrients requires both a unique transport protein and energy. Enterocytes rely on active transport to absorb glucose and amino acids. # Definitions | Phrase | Definition | From d3bbe324131b9d89b6fc1684de39757b84324938 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 24 Sep 2024 21:29:37 -0600 Subject: [PATCH 0315/1027] vault backup: 2024-09-24 21:29:37 --- education/nutrition/Digestive System.md | 1 + 1 file changed, 1 insertion(+) diff --git a/education/nutrition/Digestive System.md b/education/nutrition/Digestive System.md index ef60b32..cd902d8 100644 --- a/education/nutrition/Digestive System.md +++ b/education/nutrition/Digestive System.md @@ -62,6 +62,7 @@ Chemical digestion refers to the breakdown of large molecules in food into small - **Simple Diffusion**: Occurs when the concentration of a particular nutrient is higher in one area than an other. This form of transport does not require energy input. Many water-soluble vitamins, lipids, and some minerals are absorbed in the digestive tract by simple diffusion. - **Facilitated Diffusion**: Enterocytes absorb some nutrients by facilitated diffusion, another process that does not require energy. Although the nutrient moves down its concentration gradient, it still needs to be carried by a special transport protein within the membrane of the enterocyte. Absorption of simple sugar fructose occurs by facilitated diffusion - **Active Transport**: Some nutrients move from the lumen of the intestine and into an enterocyte against the concentration gradient; that is, from low to high concentration. Absorption of these nutrients requires both a unique transport protein and energy. Enterocytes rely on active transport to absorb glucose and amino acids. +- **Endocytosis**: In a few instances, a segment of a the cell membrane of an enterocyte surrounds and swallows relatively large substances, such as intact protein molecules. This process enables an infant's intestinal tract to absorb whole proteins in human milk that provide benefits to the immune system. However, endocytosis is not a common way for nutrients to enter enterocytes. # Definitions | Phrase | Definition | From a28da01021f213d29f40f4b53cfedd8b34737c40 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 24 Sep 2024 21:39:37 -0600 Subject: [PATCH 0316/1027] vault backup: 2024-09-24 21:39:37 --- education/nutrition/Digestive System.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/education/nutrition/Digestive System.md b/education/nutrition/Digestive System.md index cd902d8..8ee67a6 100644 --- a/education/nutrition/Digestive System.md +++ b/education/nutrition/Digestive System.md @@ -62,7 +62,7 @@ Chemical digestion refers to the breakdown of large molecules in food into small - **Simple Diffusion**: Occurs when the concentration of a particular nutrient is higher in one area than an other. This form of transport does not require energy input. Many water-soluble vitamins, lipids, and some minerals are absorbed in the digestive tract by simple diffusion. - **Facilitated Diffusion**: Enterocytes absorb some nutrients by facilitated diffusion, another process that does not require energy. Although the nutrient moves down its concentration gradient, it still needs to be carried by a special transport protein within the membrane of the enterocyte. Absorption of simple sugar fructose occurs by facilitated diffusion - **Active Transport**: Some nutrients move from the lumen of the intestine and into an enterocyte against the concentration gradient; that is, from low to high concentration. Absorption of these nutrients requires both a unique transport protein and energy. Enterocytes rely on active transport to absorb glucose and amino acids. -- **Endocytosis**: In a few instances, a segment of a the cell membrane of an enterocyte surrounds and swallows relatively large substances, such as intact protein molecules. This process enables an infant's intestinal tract to absorb whole proteins in human milk that provide benefits to the immune system. However, endocytosis is not a common way for nutrients to enter enterocytes. +- **Endocytosis**: In a few instances, a segment of a the cell membrane of an enterocyte surrounds and swallows relatively large substances, such as intact protein molecules. This process enables an infant's intestinal tract to absorb whole proteins in human milk that provide benefits to the immune system. However, endocytosis is not a common way for nutrients to enter enterocytes. # Definitions | Phrase | Definition | From 700f36f2ef936f14b909842fd082d2bbb3a0b71e Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 24 Sep 2024 21:52:31 -0600 Subject: [PATCH 0317/1027] vault backup: 2024-09-24 21:52:31 --- education/software development/ECE1400/Chapter 6 Exercises.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 education/software development/ECE1400/Chapter 6 Exercises.md diff --git a/education/software development/ECE1400/Chapter 6 Exercises.md b/education/software development/ECE1400/Chapter 6 Exercises.md new file mode 100644 index 0000000..e69de29 From 43c58e6145864632db73901abbbef48fc5b05c36 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 24 Sep 2024 21:56:16 -0600 Subject: [PATCH 0318/1027] vault backup: 2024-09-24 21:56:16 --- .../ECE1400/Chapter 6 Exercises.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/education/software development/ECE1400/Chapter 6 Exercises.md b/education/software development/ECE1400/Chapter 6 Exercises.md index e69de29..79320ab 100644 --- a/education/software development/ECE1400/Chapter 6 Exercises.md +++ b/education/software development/ECE1400/Chapter 6 Exercises.md @@ -0,0 +1,18 @@ +> 1. What output does the following program fragment produce? +```c +i = 1; +while (i <= 128) { + printf("%d ", i); + i *= 2; +} +``` + +Output: +``` +1 2 4 8 16 32 64 128 +``` + +> 2. What output does the following program fragment produce? +```c +i = 9384 +``` \ No newline at end of file From b5cfe462a35e6799cfd614a0f1a2b7dbb90960a9 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 24 Sep 2024 22:01:16 -0600 Subject: [PATCH 0319/1027] vault backup: 2024-09-24 22:01:16 --- .../ECE1400/Chapter 6 Exercises.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/education/software development/ECE1400/Chapter 6 Exercises.md b/education/software development/ECE1400/Chapter 6 Exercises.md index 79320ab..bfb78fc 100644 --- a/education/software development/ECE1400/Chapter 6 Exercises.md +++ b/education/software development/ECE1400/Chapter 6 Exercises.md @@ -15,4 +15,19 @@ Output: > 2. What output does the following program fragment produce? ```c i = 9384 +do { + printf("%d ", i); + i /= 10; +} while (i <= 128); +``` + +Output: +``` +9384 938 93 9 +``` + +> 3. What output does the following `for` statement produce? +```c +for (i = 5, j = i - 1; i > 0, j > 0; --i, j = i - 1) + printf("%d ", i); ``` \ No newline at end of file From 28b7389515eeab2090692e2abdfc75c2444406bd Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 24 Sep 2024 22:06:16 -0600 Subject: [PATCH 0320/1027] vault backup: 2024-09-24 22:06:16 --- .../ECE1400/Chapter 6 Exercises.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/education/software development/ECE1400/Chapter 6 Exercises.md b/education/software development/ECE1400/Chapter 6 Exercises.md index bfb78fc..3c141b4 100644 --- a/education/software development/ECE1400/Chapter 6 Exercises.md +++ b/education/software development/ECE1400/Chapter 6 Exercises.md @@ -30,4 +30,14 @@ Output: ```c for (i = 5, j = i - 1; i > 0, j > 0; --i, j = i - 1) printf("%d ", i); +``` + +Output: +``` +5 4 3 2 +``` + +> 4. Which one of the following statements is not equivalent to the other two (assuming that the loop bodies are the same?) +```c +(a) for (i = 0; i < 10) ``` \ No newline at end of file From e8787230feeb5981eafd1607e4ccaebe331b9bc4 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 24 Sep 2024 22:11:16 -0600 Subject: [PATCH 0321/1027] vault backup: 2024-09-24 22:11:16 --- .../ECE1400/Chapter 6 Exercises.md | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/education/software development/ECE1400/Chapter 6 Exercises.md b/education/software development/ECE1400/Chapter 6 Exercises.md index 3c141b4..ddd8f47 100644 --- a/education/software development/ECE1400/Chapter 6 Exercises.md +++ b/education/software development/ECE1400/Chapter 6 Exercises.md @@ -39,5 +39,20 @@ Output: > 4. Which one of the following statements is not equivalent to the other two (assuming that the loop bodies are the same?) ```c -(a) for (i = 0; i < 10) -``` \ No newline at end of file +for (i = 0; i < 10; i++) // (a) +for (i = 0; i < 10; ++i) // (b) +for (i = 0; i ++ < 10; ) // (c) +``` + +Answer: +C is not the same as A and B, because the increment takes place before the loop body is executed. + +> 5. Which one of the following statements is not equivalent to the other two (assuming that the loop bodies are the same)? +```c +while (i < 10) {...} // (a) +for (; i < 10;) {...} // (b) +do {...} while (i < 10); // (c) +``` + +Answer: +C is not the same as A and B, because the block is executed before the condition is checked. \ No newline at end of file From bbd4af3e971b15e410336b05e5fbc7eef1c1aa54 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 25 Sep 2024 14:52:48 -0600 Subject: [PATCH 0322/1027] vault backup: 2024-09-25 14:52:48 --- .../ENGL2010/\"What Should Colleges Teach?\" - Fish.md" | 5 +++++ education/software development/ECE1400/C.md | 5 +++++ 2 files changed, 10 insertions(+) create mode 100644 "education/english/ENGL2010/\"What Should Colleges Teach?\" - Fish.md" diff --git "a/education/english/ENGL2010/\"What Should Colleges Teach?\" - Fish.md" "b/education/english/ENGL2010/\"What Should Colleges Teach?\" - Fish.md" new file mode 100644 index 0000000..87039e7 --- /dev/null +++ "b/education/english/ENGL2010/\"What Should Colleges Teach?\" - Fish.md" @@ -0,0 +1,5 @@ +- Writing is distinct from grammar and rhetoric, and most writing classes don't teach writing, they instead focus on grammar and rhetoric. +- Core curriculums ensure essentials, but limit depth and advancement of thinking +- Drilling students on grammar does not improve writing ability, students should instead be taught how to use grammar effectively + +- I thought the writing was meandering, rambly, and overly abstract. They never provide a clear definition of what good writing entails \ No newline at end of file diff --git a/education/software development/ECE1400/C.md b/education/software development/ECE1400/C.md index 7df84ae..908f994 100644 --- a/education/software development/ECE1400/C.md +++ b/education/software development/ECE1400/C.md @@ -20,8 +20,13 @@ A newline can be inserted using `\n`. ## Integers An integer is a way to store a whole number. In C, integers are signed by default. + +Values of an integer type are whole numbers. + +Integers are divided into two categories, signed, and unsigned. ## Floats A float is a decimal value. Slower arithmetic and inexact values are both drawbacks of using floats. + ## Variables A variable must be declared before it is assigned. From 4ba8c15525c9eb4dcdd829cb24cc22c322861d60 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 25 Sep 2024 14:56:34 -0600 Subject: [PATCH 0323/1027] vault backup: 2024-09-25 14:56:34 --- education/software development/ECE1400/C.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/education/software development/ECE1400/C.md b/education/software development/ECE1400/C.md index 908f994..36a8b62 100644 --- a/education/software development/ECE1400/C.md +++ b/education/software development/ECE1400/C.md @@ -24,6 +24,8 @@ An integer is a way to store a whole number. In C, integers are signed by defaul Values of an integer type are whole numbers. Integers are divided into two categories, signed, and unsigned. + +If the sign bit is zero, it's a positive value, and if it's 1, the value is negative. ## Floats A float is a decimal value. Slower arithmetic and inexact values are both drawbacks of using floats. From ad57aa169ee069103c3a031993befb35d93859ba Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 25 Sep 2024 15:01:35 -0600 Subject: [PATCH 0324/1027] vault backup: 2024-09-25 15:01:35 --- education/software development/ECE1400/C.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/education/software development/ECE1400/C.md b/education/software development/ECE1400/C.md index 36a8b62..f9def9d 100644 --- a/education/software development/ECE1400/C.md +++ b/education/software development/ECE1400/C.md @@ -26,6 +26,8 @@ Values of an integer type are whole numbers. Integers are divided into two categories, signed, and unsigned. If the sign bit is zero, it's a positive value, and if it's 1, the value is negative. + +They cal be declared using `[short|long] [signed|unsigned] int`, resulting in 6 possible combinations ## Floats A float is a decimal value. Slower arithmetic and inexact values are both drawbacks of using floats. From f240cfb9dc274ac39085020ff7da68eaa208abff Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 25 Sep 2024 15:06:35 -0600 Subject: [PATCH 0325/1027] vault backup: 2024-09-25 15:06:35 --- education/software development/ECE1400/C.md | 1 + 1 file changed, 1 insertion(+) diff --git a/education/software development/ECE1400/C.md b/education/software development/ECE1400/C.md index f9def9d..1710738 100644 --- a/education/software development/ECE1400/C.md +++ b/education/software development/ECE1400/C.md @@ -28,6 +28,7 @@ Integers are divided into two categories, signed, and unsigned. If the sign bit is zero, it's a positive value, and if it's 1, the value is negative. They cal be declared using `[short|long] [signed|unsigned] int`, resulting in 6 possible combinations +C99 adds a `long long` int ## Floats A float is a decimal value. Slower arithmetic and inexact values are both drawbacks of using floats. From f7bc59d91e18cf25f00d39665566677d27d217e6 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Thu, 26 Sep 2024 08:27:06 -0600 Subject: [PATCH 0326/1027] vault backup: 2024-09-26 08:27:06 --- education/math/MATH1060 (trig)/Graphing.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/education/math/MATH1060 (trig)/Graphing.md b/education/math/MATH1060 (trig)/Graphing.md index e0fae7c..1fc090e 100644 --- a/education/math/MATH1060 (trig)/Graphing.md +++ b/education/math/MATH1060 (trig)/Graphing.md @@ -15,3 +15,16 @@ Given the above graph: A function is considered periodic if it repeats itself at even intervals, where each interval is a complete cycle, referred to as a *period*. +# Sinusoidal Functions +A function that has the same shape as a sine or cosine wave is known as a sinusoidal function. + +Given a function in the form: +$$ A * sin(B*x - C) + D $$ + +| Variable | Meaning | +| -------- | --------------------------------------------------------------------------------------------- | +| $A$ | The amplitude of a function can be found by taking $\|A\|$. The sign flips it over the x axis | +| $B$ | Horizontal, or phase | + + +$$ y = A * \sin(B(x-\frac{C}{B})) $$ \ No newline at end of file From 106f28b1041aa7979c858fa05ad0afd401ab3d45 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Thu, 26 Sep 2024 08:33:33 -0600 Subject: [PATCH 0327/1027] vault backup: 2024-09-26 08:33:33 --- education/math/MATH1060 (trig)/Graphing.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/education/math/MATH1060 (trig)/Graphing.md b/education/math/MATH1060 (trig)/Graphing.md index 1fc090e..31fb312 100644 --- a/education/math/MATH1060 (trig)/Graphing.md +++ b/education/math/MATH1060 (trig)/Graphing.md @@ -18,8 +18,8 @@ A function is considered periodic if it repeats itself at even intervals, where # Sinusoidal Functions A function that has the same shape as a sine or cosine wave is known as a sinusoidal function. -Given a function in the form: -$$ A * sin(B*x - C) + D $$ +There are 4 general functions: +| $$ A * sin(B*x - C) + D $$ | | Variable | Meaning | | -------- | --------------------------------------------------------------------------------------------- | From 9e90349f900f100b6fefa90de2b6cc2d217d56ee Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Thu, 26 Sep 2024 08:38:33 -0600 Subject: [PATCH 0328/1027] vault backup: 2024-09-26 08:38:33 --- education/math/MATH1060 (trig)/Graphing.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/education/math/MATH1060 (trig)/Graphing.md b/education/math/MATH1060 (trig)/Graphing.md index 31fb312..7023163 100644 --- a/education/math/MATH1060 (trig)/Graphing.md +++ b/education/math/MATH1060 (trig)/Graphing.md @@ -19,7 +19,10 @@ A function is considered periodic if it repeats itself at even intervals, where A function that has the same shape as a sine or cosine wave is known as a sinusoidal function. There are 4 general functions: -| $$ A * sin(B*x - C) + D $$ | + +| $$A * sin(B*x - C) + D$$ | $a$ | +| ------------------------ | --- | + | Variable | Meaning | | -------- | --------------------------------------------------------------------------------------------- | From 37ba8cbf7c4f226b2bb19c37c7568c72c9d6be16 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Thu, 26 Sep 2024 08:43:33 -0600 Subject: [PATCH 0329/1027] vault backup: 2024-09-26 08:43:33 --- education/math/MATH1060 (trig)/Graphing.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/education/math/MATH1060 (trig)/Graphing.md b/education/math/MATH1060 (trig)/Graphing.md index 7023163..d51e085 100644 --- a/education/math/MATH1060 (trig)/Graphing.md +++ b/education/math/MATH1060 (trig)/Graphing.md @@ -20,8 +20,8 @@ A function that has the same shape as a sine or cosine wave is known as a sinuso There are 4 general functions: -| $$A * sin(B*x - C) + D$$ | $a$ | -| ------------------------ | --- | +| $$A * sin(B*x - C) + D$$ | $$ y = A * cos(B*x -c) + D$$ | +| ------------------------ | ---------------------------- | | Variable | Meaning | From bb92946542a1e7bcff0548385a2ee9059cb8a363 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Thu, 26 Sep 2024 08:48:33 -0600 Subject: [PATCH 0330/1027] vault backup: 2024-09-26 08:48:33 --- education/math/MATH1060 (trig)/Graphing.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/education/math/MATH1060 (trig)/Graphing.md b/education/math/MATH1060 (trig)/Graphing.md index d51e085..0a44a8e 100644 --- a/education/math/MATH1060 (trig)/Graphing.md +++ b/education/math/MATH1060 (trig)/Graphing.md @@ -20,8 +20,10 @@ A function that has the same shape as a sine or cosine wave is known as a sinuso There are 4 general functions: -| $$A * sin(B*x - C) + D$$ | $$ y = A * cos(B*x -c) + D$$ | -| ------------------------ | ---------------------------- | +| $$A * sin(B*x - C) + D$$ | $$ y = A * cos(B*x -c) + D$$ | +| ----------------------------------------- | -------------------------------------- | +| $$ y = A * sin(B(x - \frac{C}{B})) + D $$ | $$ y = A*cos(B(x - \frac{C}{B})) + D$$ | + | Variable | Meaning | From 61f76cba3a073fc5f57c3992f87ea06f3324245f Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Thu, 26 Sep 2024 09:13:33 -0600 Subject: [PATCH 0331/1027] vault backup: 2024-09-26 09:13:33 --- education/math/MATH1060 (trig)/Graphing.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/education/math/MATH1060 (trig)/Graphing.md b/education/math/MATH1060 (trig)/Graphing.md index 0a44a8e..72d2904 100644 --- a/education/math/MATH1060 (trig)/Graphing.md +++ b/education/math/MATH1060 (trig)/Graphing.md @@ -25,11 +25,11 @@ There are 4 general functions: | $$ y = A * sin(B(x - \frac{C}{B})) + D $$ | $$ y = A*cos(B(x - \frac{C}{B})) + D$$ | - -| Variable | Meaning | -| -------- | --------------------------------------------------------------------------------------------- | -| $A$ | The amplitude of a function can be found by taking $\|A\|$. The sign flips it over the x axis | -| $B$ | Horizontal, or phase | +How to find the: +- Amplitude: $|A|$ +- Period: $\frac{2\pi}{B}$ +- Phase shift: $\frac{C}{|B|}$ +- Vertical shift: $D$ $$ y = A * \sin(B(x-\frac{C}{B})) $$ \ No newline at end of file From d5caf1e0b534c152eef28034632cb973ac21c4d8 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Mon, 30 Sep 2024 10:48:24 -0600 Subject: [PATCH 0332/1027] vault backup: 2024-09-30 10:48:24 --- education/math/MATH1060 (trig)/Graphing.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/education/math/MATH1060 (trig)/Graphing.md b/education/math/MATH1060 (trig)/Graphing.md index 72d2904..e12a388 100644 --- a/education/math/MATH1060 (trig)/Graphing.md +++ b/education/math/MATH1060 (trig)/Graphing.md @@ -1,3 +1,5 @@ + +# Sine/Cosine ![A graph of sine and cosine](./assets/graphsincos.png) Given the above graph: @@ -13,8 +15,6 @@ Given the above graph: | $y = cos(2x)$ | Horizontal shrink by a factor of 2 | # Periodic Functions A function is considered periodic if it repeats itself at even intervals, where each interval is a complete cycle, referred to as a *period*. - - # Sinusoidal Functions A function that has the same shape as a sine or cosine wave is known as a sinusoidal function. @@ -32,4 +32,6 @@ How to find the: - Vertical shift: $D$ -$$ y = A * \sin(B(x-\frac{C}{B})) $$ \ No newline at end of file +$$ y = A * \sin(B(x-\frac{C}{B})) $$ +# Tangent/Cotangent + From a79c74438972631f1192d5561e45a69a96c6b2cd Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Mon, 30 Sep 2024 10:53:24 -0600 Subject: [PATCH 0333/1027] vault backup: 2024-09-30 10:53:24 --- education/math/MATH1060 (trig)/Graphing.md | 11 +++++++++++ .../math/MATH1060 (trig)/assets/graphcot.svg | 1 + .../math/MATH1060 (trig)/assets/graphtan.png | Bin 0 -> 205894 bytes 3 files changed, 12 insertions(+) create mode 100644 education/math/MATH1060 (trig)/assets/graphcot.svg create mode 100644 education/math/MATH1060 (trig)/assets/graphtan.png diff --git a/education/math/MATH1060 (trig)/Graphing.md b/education/math/MATH1060 (trig)/Graphing.md index e12a388..ed35f32 100644 --- a/education/math/MATH1060 (trig)/Graphing.md +++ b/education/math/MATH1060 (trig)/Graphing.md @@ -34,4 +34,15 @@ How to find the: $$ y = A * \sin(B(x-\frac{C}{B})) $$ # Tangent/Cotangent +$$ y = tan(x) $$ +![Graph of tangent](assets/graphtan.png) +To find relative points to create the above graph, you can use the unit circle: +If $tan(x) = \frac{sin(x)}{cos(x})$, then: + +| $sin(0)$ | | | +| -------- | --- | --- | +| | | | + +$$ y = cot(x) $$ +![Graph of cotangent](assets/graphcot.svg) diff --git a/education/math/MATH1060 (trig)/assets/graphcot.svg b/education/math/MATH1060 (trig)/assets/graphcot.svg new file mode 100644 index 0000000..29c295c --- /dev/null +++ b/education/math/MATH1060 (trig)/assets/graphcot.svg @@ -0,0 +1 @@ +0.5ππ1.5π-0.5π246810-2-4-6-8-10xy \ No newline at end of file diff --git a/education/math/MATH1060 (trig)/assets/graphtan.png b/education/math/MATH1060 (trig)/assets/graphtan.png new file mode 100644 index 0000000000000000000000000000000000000000..96a90da53db4da1a845b603e53d2febb63eed552 GIT binary patch literal 205894 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

V-f>TH5L)zTcz}E9AQB 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 z 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 Date: Mon, 30 Sep 2024 10:58:24 -0600 Subject: [PATCH 0334/1027] vault backup: 2024-09-30 10:58:24 --- education/math/MATH1060 (trig)/Graphing.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/education/math/MATH1060 (trig)/Graphing.md b/education/math/MATH1060 (trig)/Graphing.md index ed35f32..294ba1b 100644 --- a/education/math/MATH1060 (trig)/Graphing.md +++ b/education/math/MATH1060 (trig)/Graphing.md @@ -40,9 +40,10 @@ To find relative points to create the above graph, you can use the unit circle: If $tan(x) = \frac{sin(x)}{cos(x})$, then: -| $sin(0)$ | | | -| -------- | --- | --- | -| | | | +| $sin(0) = 0$ | $cos(0) = 1$ | $tan(0) = \frac{cos(0)}{sin(0)} = \frac{0}{1} =0$ | +| ----------------------------------------- | ----------------------------------------- | ----------------------------------------------------------------- | +| $sin(\frac{\pi}{4}) = \frac{\sqrt{2}}{2}$ | $cos(\frac{\pi}{4}) = \frac{\sqrt{2}}{2}$ | $tan(\frac{\pi}{4} = \frac{\frac{\sqrt{2}}{2}}{\frac{\sqrt{2}{}}$ | +| $sin(\frac{\pi}{2}) = 1$ | $cos(\frac{\pi}{2}) = 0$ | | $$ y = cot(x) $$ ![Graph of cotangent](assets/graphcot.svg) From 6be1bb929ce1b9ad0ab8e2812e19f5026a0aebc4 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Mon, 30 Sep 2024 11:03:24 -0600 Subject: [PATCH 0335/1027] vault backup: 2024-09-30 11:03:24 --- education/math/MATH1060 (trig)/Graphing.md | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/education/math/MATH1060 (trig)/Graphing.md b/education/math/MATH1060 (trig)/Graphing.md index 294ba1b..d323d99 100644 --- a/education/math/MATH1060 (trig)/Graphing.md +++ b/education/math/MATH1060 (trig)/Graphing.md @@ -40,10 +40,16 @@ To find relative points to create the above graph, you can use the unit circle: If $tan(x) = \frac{sin(x)}{cos(x})$, then: -| $sin(0) = 0$ | $cos(0) = 1$ | $tan(0) = \frac{cos(0)}{sin(0)} = \frac{0}{1} =0$ | -| ----------------------------------------- | ----------------------------------------- | ----------------------------------------------------------------- | -| $sin(\frac{\pi}{4}) = \frac{\sqrt{2}}{2}$ | $cos(\frac{\pi}{4}) = \frac{\sqrt{2}}{2}$ | $tan(\frac{\pi}{4} = \frac{\frac{\sqrt{2}}{2}}{\frac{\sqrt{2}{}}$ | -| $sin(\frac{\pi}{2}) = 1$ | $cos(\frac{\pi}{2}) = 0$ | | +| $sin(0) = 0$ | $cos(0) = 1$ | $tan(0) = \frac{cos(0)}{sin(0)} = \frac{0}{1} =0$ | +| ----------------------------------------- | ----------------------------------------- | ---------------------------------------------------------------- | +| $sin(\frac{\pi}{4}) = \frac{\sqrt{2}}{2}$ | $cos(\frac{\pi}{4}) = \frac{\sqrt{2}}{2}$ | $tan(\frac{\pi}{4}) = \frac{\sqrt{2}}{2}/\frac{\sqrt{2}}{2} = 1$ | +| $sin(\frac{\pi}{2}) = 1$ | $cos(\frac{\pi}{2}) = 0$ | $tan(\frac{\pi}{2}) = \frac{1}{0} = DNF$ | +Interpreting the above table: +- When $x = 0$, $y = 0$ +- When $x = \frac{\pi}{4}$, $y = 1$ +- When $x = \frac{\pi}{2}$, there's an asymptote + +Without any transformations applied, the period of $tan(x) = 1$. Because $tan$ is an odd function, $ $$ y = cot(x) $$ ![Graph of cotangent](assets/graphcot.svg) From 1d7b844ce72996353bcbb45669fad70824960da4 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Mon, 30 Sep 2024 11:08:24 -0600 Subject: [PATCH 0336/1027] vault backup: 2024-09-30 11:08:24 --- education/math/MATH1060 (trig)/Graphing.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/education/math/MATH1060 (trig)/Graphing.md b/education/math/MATH1060 (trig)/Graphing.md index d323d99..f0f31f1 100644 --- a/education/math/MATH1060 (trig)/Graphing.md +++ b/education/math/MATH1060 (trig)/Graphing.md @@ -33,7 +33,7 @@ How to find the: $$ y = A * \sin(B(x-\frac{C}{B})) $$ -# Tangent/Cotangent +# Tangent $$ y = tan(x) $$ ![Graph of tangent](assets/graphtan.png) To find relative points to create the above graph, you can use the unit circle: @@ -49,7 +49,9 @@ Interpreting the above table: - When $x = \frac{\pi}{4}$, $y = 1$ - When $x = \frac{\pi}{2}$, there's an asymptote -Without any transformations applied, the period of $tan(x) = 1$. Because $tan$ is an odd function, $ - +Without any transformations applied, the period of $tan(x) = 1$. Because $tan$ is an odd function, $tan(-x) = -tan(x)$. +# Cotangent $$ y = cot(x) $$ ![Graph of cotangent](assets/graphcot.svg) + +To find relative points to create the above graph, you can use the unit circle: From 8dd761c0847eead2d8997c4f9e54138e5feeddf5 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Mon, 30 Sep 2024 11:13:24 -0600 Subject: [PATCH 0337/1027] vault backup: 2024-09-30 11:13:24 --- education/math/MATH1060 (trig)/Graphing.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/education/math/MATH1060 (trig)/Graphing.md b/education/math/MATH1060 (trig)/Graphing.md index f0f31f1..ed2bbe2 100644 --- a/education/math/MATH1060 (trig)/Graphing.md +++ b/education/math/MATH1060 (trig)/Graphing.md @@ -55,3 +55,10 @@ $$ y = cot(x) $$ ![Graph of cotangent](assets/graphcot.svg) To find relative points to create the above graph, you can use the unit circle: + +If $cot(x) = \frac{cos(x)}{sin(x)}$, then: + +| $sin(0) = 0$ | $cos(0) = 1$ | $cot(0) = \frac{sin(0)}{cos(0)} = \frac{1}{0} = DNF$ | +| ----------------------------------------- | ----------------------------------------- | ---------------------------------------------------------------- | +| $sin(\frac{\pi}{4}) = \frac{\sqrt{2}}{2}$ | $cos(\frac{\pi}{4}) = \frac{\sqrt{2}}{2}$ | $cot(\frac{\pi}{4}) = \frac{\sqrt{2}}{2}/\frac{\sqrt{2}}{2} = 1$ | +| $sin(\frac{\pi}{2}) = 1$ | $cos(\frac{\pi}{2}) = 0$ | $tan(\frac{\pi}{2}) = \frac{1}{0} = DNF$ | From 950f46655b898474ba501a280008e88ec9ebecc2 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Mon, 30 Sep 2024 11:18:24 -0600 Subject: [PATCH 0338/1027] vault backup: 2024-09-30 11:18:24 --- education/math/MATH1060 (trig)/Graphing.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/education/math/MATH1060 (trig)/Graphing.md b/education/math/MATH1060 (trig)/Graphing.md index ed2bbe2..10b2f2f 100644 --- a/education/math/MATH1060 (trig)/Graphing.md +++ b/education/math/MATH1060 (trig)/Graphing.md @@ -49,7 +49,7 @@ Interpreting the above table: - When $x = \frac{\pi}{4}$, $y = 1$ - When $x = \frac{\pi}{2}$, there's an asymptote -Without any transformations applied, the period of $tan(x) = 1$. Because $tan$ is an odd function, $tan(-x) = -tan(x)$. +Without any transformations applied, the period of $tan(x) = \pi$. Because $tan$ is an odd function, $tan(-x) = -tan(x)$. # Cotangent $$ y = cot(x) $$ ![Graph of cotangent](assets/graphcot.svg) @@ -62,3 +62,10 @@ If $cot(x) = \frac{cos(x)}{sin(x)}$, then: | ----------------------------------------- | ----------------------------------------- | ---------------------------------------------------------------- | | $sin(\frac{\pi}{4}) = \frac{\sqrt{2}}{2}$ | $cos(\frac{\pi}{4}) = \frac{\sqrt{2}}{2}$ | $cot(\frac{\pi}{4}) = \frac{\sqrt{2}}{2}/\frac{\sqrt{2}}{2} = 1$ | | $sin(\frac{\pi}{2}) = 1$ | $cos(\frac{\pi}{2}) = 0$ | $tan(\frac{\pi}{2}) = \frac{1}{0} = DNF$ | + +Without any transformations applied, the period of $cot(x) = \pi$. Because $cot$ is an odd function, $cot(-x) = -cot(x)$. + +# Examples +> Given $-2tan(\pi*x + \pi) - 1$ +- $A = -2, B = \pi, C = -\pi, D = -1$ +- \ No newline at end of file From 701bcf87aa0a2d0fec22a0ffe4cd442faaf693cf Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Mon, 30 Sep 2024 11:23:24 -0600 Subject: [PATCH 0339/1027] vault backup: 2024-09-30 11:23:24 --- education/math/MATH1060 (trig)/Graphing.md | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/education/math/MATH1060 (trig)/Graphing.md b/education/math/MATH1060 (trig)/Graphing.md index 10b2f2f..4282039 100644 --- a/education/math/MATH1060 (trig)/Graphing.md +++ b/education/math/MATH1060 (trig)/Graphing.md @@ -65,7 +65,12 @@ If $cot(x) = \frac{cos(x)}{sin(x)}$, then: Without any transformations applied, the period of $cot(x) = \pi$. Because $cot$ is an odd function, $cot(-x) = -cot(x)$. +# Features of Tangent and Cotangent +Given the form $y = A\tan(Bx - C) + D$ (the same applies for $\cot$) +- The stretching factor is $|A|$ +- The period is $\frac{\pi}{|B|}$ +- The domain of $tan$ is all of $x$, where $x \ne \frac{C}{B} + \frac{\pi}{2} + {\pi}{|}$ # Examples > Given $-2tan(\pi*x + \pi) - 1$ -- $A = -2, B = \pi, C = -\pi, D = -1$ -- \ No newline at end of file +- $A = -2$, $B = \pi$, $C = -\pi$, $D = -1$ +- Stretch \ No newline at end of file From 5a3c1486fb59e5cbc8bc0c129f3b9bae497e8bf5 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Mon, 30 Sep 2024 11:28:24 -0600 Subject: [PATCH 0340/1027] vault backup: 2024-09-30 11:28:24 --- education/math/MATH1060 (trig)/Graphing.md | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/education/math/MATH1060 (trig)/Graphing.md b/education/math/MATH1060 (trig)/Graphing.md index 4282039..a41a6cf 100644 --- a/education/math/MATH1060 (trig)/Graphing.md +++ b/education/math/MATH1060 (trig)/Graphing.md @@ -69,8 +69,15 @@ Without any transformations applied, the period of $cot(x) = \pi$. Because $cot$ Given the form $y = A\tan(Bx - C) + D$ (the same applies for $\cot$) - The stretching factor is $|A|$ - The period is $\frac{\pi}{|B|}$ -- The domain of $tan$ is all of $x$, where $x \ne \frac{C}{B} + \frac{\pi}{2} + {\pi}{|}$ +- The domain of $tan$ is all of $x$, where $x \ne \frac{C}{B} + \frac{\pi}{2} + {\pi}{|B|}k$, where $k$ is an integer. (everywhere but the asymptotes) +- The domain of $cot$ is all of $x$, where $x \ne \frac{C}{B} + \frac{\pi}{|B|}k$, where $k$ is an integer (everywhere but the asymptotes) +- The range of both is $(-\infty, \infty)$ +- The phase shift is $\frac{C}{B}$ +- The vertical shift is $D$ # Examples > Given $-2tan(\pi*x + \pi) - 1$ - $A = -2$, $B = \pi$, $C = -\pi$, $D = -1$ -- Stretch \ No newline at end of file +- Stretch: $|-2| = 2$ +- Period: $\frac{\pi}{|\pi|} = 1$ +- Phase shift: $\frac{-\pi}{\pi} = -1$ +- Vertical shift: $ \ No newline at end of file From 8160525052b22112d905d148ffe7e5afcacae1bf Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Mon, 30 Sep 2024 11:33:24 -0600 Subject: [PATCH 0341/1027] vault backup: 2024-09-30 11:33:24 --- education/math/MATH1060 (trig)/Graphing.md | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/education/math/MATH1060 (trig)/Graphing.md b/education/math/MATH1060 (trig)/Graphing.md index a41a6cf..e4ab2c1 100644 --- a/education/math/MATH1060 (trig)/Graphing.md +++ b/education/math/MATH1060 (trig)/Graphing.md @@ -76,8 +76,11 @@ Given the form $y = A\tan(Bx - C) + D$ (the same applies for $\cot$) - The vertical shift is $D$ # Examples > Given $-2tan(\pi*x + \pi) - 1$ -- $A = -2$, $B = \pi$, $C = -\pi$, $D = -1$ -- Stretch: $|-2| = 2$ -- Period: $\frac{\pi}{|\pi|} = 1$ -- Phase shift: $\frac{-\pi}{\pi} = -1$ -- Vertical shift: $ \ No newline at end of file + $A = -2$, $B = \pi$, $C = -\pi$, $D = -1$ + +| Transformation | Equation | +| -------------- | ------------------------- | +| Stretch | $\|-2\| = 2$ | +| Period | $\frac{\pi}{\|\pi\|} = 1$ | +| Phase shift | $ | +| Vertical shift | $-1$ | \ No newline at end of file From 0d914027e6e9d20ec3180a3382535043be218e7a Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Mon, 30 Sep 2024 11:38:24 -0600 Subject: [PATCH 0342/1027] vault backup: 2024-09-30 11:38:24 --- education/math/MATH1060 (trig)/Graphing.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/education/math/MATH1060 (trig)/Graphing.md b/education/math/MATH1060 (trig)/Graphing.md index e4ab2c1..57296d9 100644 --- a/education/math/MATH1060 (trig)/Graphing.md +++ b/education/math/MATH1060 (trig)/Graphing.md @@ -75,12 +75,13 @@ Given the form $y = A\tan(Bx - C) + D$ (the same applies for $\cot$) - The phase shift is $\frac{C}{B}$ - The vertical shift is $D$ # Examples -> Given $-2tan(\pi*x + \pi) - 1$ +> Given $-2\tan(\pi*x + \pi) - 1$ + $A = -2$, $B = \pi$, $C = -\pi$, $D = -1$ - + | Transformation | Equation | | -------------- | ------------------------- | | Stretch | $\|-2\| = 2$ | | Period | $\frac{\pi}{\|\pi\|} = 1$ | -| Phase shift | $ | -| Vertical shift | $-1$ | \ No newline at end of file +| Phase shift | $\frac{-\pi}{\pi} = -1$ | +| Vertical shift | $-1$ | From 948cbb3bce2756170fb073d881af36b66de75d2d Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Mon, 30 Sep 2024 14:53:49 -0600 Subject: [PATCH 0343/1027] vault backup: 2024-09-30 14:53:49 --- education/software development/ECE1400/C.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/education/software development/ECE1400/C.md b/education/software development/ECE1400/C.md index 1710738..fde8ce7 100644 --- a/education/software development/ECE1400/C.md +++ b/education/software development/ECE1400/C.md @@ -32,6 +32,9 @@ C99 adds a `long long` int ## Floats A float is a decimal value. Slower arithmetic and inexact values are both drawbacks of using floats. +## Characters +In C, a `char` denotes a single byte of arbitrary encoding. + ## Variables A variable must be declared before it is assigned. From b4cc67760927f553ac6ad83869f1ef495ded13eb Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Mon, 30 Sep 2024 14:58:49 -0600 Subject: [PATCH 0344/1027] vault backup: 2024-09-30 14:58:49 --- IT/Hashicorp Nomad.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 IT/Hashicorp Nomad.md diff --git a/IT/Hashicorp Nomad.md b/IT/Hashicorp Nomad.md new file mode 100644 index 0000000..e69de29 From 107002055b8d307f54cd4870aefaad96fde678c4 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Mon, 30 Sep 2024 15:03:49 -0600 Subject: [PATCH 0345/1027] vault backup: 2024-09-30 15:03:49 --- IT/Hashicorp Nomad.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/IT/Hashicorp Nomad.md b/IT/Hashicorp Nomad.md index e69de29..533b770 100644 --- a/IT/Hashicorp Nomad.md +++ b/IT/Hashicorp Nomad.md @@ -0,0 +1,7 @@ +# Terminology +| Phrase | Definition | +| ----------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| agent | A process running in server or client mode. | +| client/node | A Nomad client is responsible for running tasks assigned to it. A client registers itself with servers and watches for work to be assigned. When running the agent, the client may be referred to as a *node*. | +| server | A Nomad server manages | +| | | From a9357af2eb923615c0c34913d472c98c85e08612 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Mon, 30 Sep 2024 15:08:49 -0600 Subject: [PATCH 0346/1027] vault backup: 2024-09-30 15:08:49 --- IT/Hashicorp Nomad.md | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/IT/Hashicorp Nomad.md b/IT/Hashicorp Nomad.md index 533b770..522dd6a 100644 --- a/IT/Hashicorp Nomad.md +++ b/IT/Hashicorp Nomad.md @@ -1,7 +1,14 @@ # Terminology +## Cluster Terms + | Phrase | Definition | | ----------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | agent | A process running in server or client mode. | | client/node | A Nomad client is responsible for running tasks assigned to it. A client registers itself with servers and watches for work to be assigned. When running the agent, the client may be referred to as a *node*. | -| server | A Nomad server manages | -| | | +| server | A Nomad server manages all jobs and clients, monitors tasks, and controls which tasks get placed on which nodes. | +| dev_agent | The development agent is an agent configuration that provides useful defaults for running a single node cluster of nomad. | + +## Work terms +| Phrase | Definition | +| ------ | -------------------------------------------------------------- | +| task | The smallest unit of work in Nomad. Tasks are executed by task | From 8f8ea61710c5e7efba32fb48789658024ea414d1 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Mon, 30 Sep 2024 15:13:49 -0600 Subject: [PATCH 0347/1027] vault backup: 2024-09-30 15:13:49 --- IT/Hashicorp Nomad.md | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/IT/Hashicorp Nomad.md b/IT/Hashicorp Nomad.md index 522dd6a..cd3e234 100644 --- a/IT/Hashicorp Nomad.md +++ b/IT/Hashicorp Nomad.md @@ -9,6 +9,9 @@ | dev_agent | The development agent is an agent configuration that provides useful defaults for running a single node cluster of nomad. | ## Work terms -| Phrase | Definition | -| ------ | -------------------------------------------------------------- | -| task | The smallest unit of work in Nomad. Tasks are executed by task | +| Phrase | Definition | +| ------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| task | The smallest unit of work in Nomad. Tasks are executed by task drivers like `docker` or `exec`, which allows Nomad to be flexible in the types of tasks it supports. Tasks specify their required task driver, configuration for the driver, constraints, and resources required. | +| group | A series of tasks that run on the same Nomad client. | +| job | The core unit of *control* for Nomad and defines the application and its configuration. It can contain one or many tasks | +| job_specification/jobspec | A job specification, a | From b080671aa7cacb6fe91df6351f973ba09dfcad6c Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Mon, 30 Sep 2024 15:18:49 -0600 Subject: [PATCH 0348/1027] vault backup: 2024-09-30 15:18:49 --- IT/Hashicorp Nomad.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/IT/Hashicorp Nomad.md b/IT/Hashicorp Nomad.md index cd3e234..99b1e56 100644 --- a/IT/Hashicorp Nomad.md +++ b/IT/Hashicorp Nomad.md @@ -14,4 +14,5 @@ | task | The smallest unit of work in Nomad. Tasks are executed by task drivers like `docker` or `exec`, which allows Nomad to be flexible in the types of tasks it supports. Tasks specify their required task driver, configuration for the driver, constraints, and resources required. | | group | A series of tasks that run on the same Nomad client. | | job | The core unit of *control* for Nomad and defines the application and its configuration. It can contain one or many tasks | -| job_specification/jobspec | A job specification, a | +| job_specification/jobspec | A job specification, also known as a jobspec. | +| allocation | An allocation is a mapping between a task group in a job and a client node. When a job is run, Nomad will chose a client capable of running it and allocates resources on the machine for the ask(s) in the task group defined for the job. | From 21008b249c5892873ddb7d6308b5f09dc9416977 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 1 Oct 2024 12:22:01 -0600 Subject: [PATCH 0349/1027] vault backup: 2024-10-01 12:22:01 --- education/nutrition/Carbohydrates.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 education/nutrition/Carbohydrates.md diff --git a/education/nutrition/Carbohydrates.md b/education/nutrition/Carbohydrates.md new file mode 100644 index 0000000..007938b --- /dev/null +++ b/education/nutrition/Carbohydrates.md @@ -0,0 +1,4 @@ +There are 3 categories of carbs. +# Sugars +# Starches +# Fiber \ No newline at end of file From b83bff70485e2abaf1f693b6469c199eaa43dc6c Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 1 Oct 2024 12:25:46 -0600 Subject: [PATCH 0350/1027] vault backup: 2024-10-01 12:25:46 --- education/nutrition/Carbohydrates.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/education/nutrition/Carbohydrates.md b/education/nutrition/Carbohydrates.md index 007938b..0fe46f5 100644 --- a/education/nutrition/Carbohydrates.md +++ b/education/nutrition/Carbohydrates.md @@ -1,4 +1,13 @@ +- Carbohydrates are a class of nutrients that is a major source of energy for the body + - Can also server as a glue that holds cells togehter + - Classified as simple or complex +- Plants are rich sources of carbohydrates There are 3 categories of carbs. + # Sugars +- A **monosaccharide** is a simple sugar that is the basic molecule of carbohydrates: + - Glucose: Primary fuel for muscles, nerves, and other cells, the most common. + - Fructose: In **fruits**, honey, and certain vegetables + - Galactose: Component of lactose # Starches # Fiber \ No newline at end of file From a27408231435fe85949b4b9c37597c350471324b Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 1 Oct 2024 12:30:46 -0600 Subject: [PATCH 0351/1027] vault backup: 2024-10-01 12:30:46 --- education/nutrition/Carbohydrates.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/education/nutrition/Carbohydrates.md b/education/nutrition/Carbohydrates.md index 0fe46f5..1740bb9 100644 --- a/education/nutrition/Carbohydrates.md +++ b/education/nutrition/Carbohydrates.md @@ -9,5 +9,13 @@ There are 3 categories of carbs. - Glucose: Primary fuel for muscles, nerves, and other cells, the most common. - Fructose: In **fruits**, honey, and certain vegetables - Galactose: Component of lactose +- A **disaccharaide** is a simple sugar comprised of two monosaccharides. + - Maltose: Disaccharide composed of two glucose molecules "malt sugar" + - Sucrose: Disaccharide composed of a glucose and fructose molecule "table sugar" + - Lactose: Disaccharide composed of a glucose and a galactose molecule "milk sugar" + +- High fructose corn syrup is a syrup obtained from the processing of corn +- No conclusive evidence that the use of HFCS causes poor health and disease +- Excessive calories from beverages sweetened with HFCS contributes to increased risk for diabetes and heart disease # Starches # Fiber \ No newline at end of file From 7920274d4a9dcfb0493dd5bbbf7e5f2aad954083 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 1 Oct 2024 12:35:46 -0600 Subject: [PATCH 0352/1027] vault backup: 2024-10-01 12:35:46 --- education/nutrition/Carbohydrates.md | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/education/nutrition/Carbohydrates.md b/education/nutrition/Carbohydrates.md index 1740bb9..cb6ec75 100644 --- a/education/nutrition/Carbohydrates.md +++ b/education/nutrition/Carbohydrates.md @@ -9,7 +9,7 @@ There are 3 categories of carbs. - Glucose: Primary fuel for muscles, nerves, and other cells, the most common. - Fructose: In **fruits**, honey, and certain vegetables - Galactose: Component of lactose -- A **disaccharaide** is a simple sugar comprised of two monosaccharides. +- A **disaccharide** is a simple sugar comprised of two monosaccharides. - Maltose: Disaccharide composed of two glucose molecules "malt sugar" - Sucrose: Disaccharide composed of a glucose and fructose molecule "table sugar" - Lactose: Disaccharide composed of a glucose and a galactose molecule "milk sugar" @@ -17,5 +17,14 @@ There are 3 categories of carbs. - High fructose corn syrup is a syrup obtained from the processing of corn - No conclusive evidence that the use of HFCS causes poor health and disease - Excessive calories from beverages sweetened with HFCS contributes to increased risk for diabetes and heart disease +- Nutritive sweeteners are substances that sweeten and contribute energy to foods +- Each gram of mono or disaccharide supplies 4 kcal +- Added sugars are sugars added to foods during processing or prep + - The main source of added sugars in the American diet is sugar sweetened beverages. +- Alternative sweeneters are substances that sweeten foods while providing few or no calories +- Sugar alcohols are alternative sweeners use to replace sucrose in some some sugar free foods: + - Sorbitol, xylitol, mannitol + - Not fully absor # Starches + # Fiber \ No newline at end of file From e77b419e3577296c384b97c2566ba38ddf98e1b1 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 1 Oct 2024 12:40:46 -0600 Subject: [PATCH 0353/1027] vault backup: 2024-10-01 12:40:46 --- education/nutrition/Carbohydrates.md | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/education/nutrition/Carbohydrates.md b/education/nutrition/Carbohydrates.md index cb6ec75..c208999 100644 --- a/education/nutrition/Carbohydrates.md +++ b/education/nutrition/Carbohydrates.md @@ -21,10 +21,19 @@ There are 3 categories of carbs. - Each gram of mono or disaccharide supplies 4 kcal - Added sugars are sugars added to foods during processing or prep - The main source of added sugars in the American diet is sugar sweetened beverages. -- Alternative sweeneters are substances that sweeten foods while providing few or no calories -- Sugar alcohols are alternative sweeners use to replace sucrose in some some sugar free foods: +- Alternative sweeteners are substances that sweeten foods while providing few or no calories +- Sugar alcohols are alternative sweeteners use to replace sucrose in some some sugar free foods: - Sorbitol, xylitol, mannitol - - Not fully absor + - Not fully absorbed by the intestinal tract + - Supply 2kcal/g + - Can cause diarrhea when consumed +- Non-nutritive sweeteners are a group of synthetic compounds that are intensely sweet tasting compared to sugar + - Examples include Aspertame, Saccharin, Acesulfame-K, Neotame, and Sucralose # Starches +Complex carbs have 3 or more monosaccharides bonded together +- Starch is a storage polysaccharide in plants. + - Composed of amylose and amylopectin + - Rich sources include: + - Bread and cereal products made from wheat, ric # Fiber \ No newline at end of file From 54a1ee8caa10637b987a9dc03bdecf522df70298 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 1 Oct 2024 12:45:46 -0600 Subject: [PATCH 0354/1027] vault backup: 2024-10-01 12:45:46 --- education/nutrition/Carbohydrates.md | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/education/nutrition/Carbohydrates.md b/education/nutrition/Carbohydrates.md index c208999..721e736 100644 --- a/education/nutrition/Carbohydrates.md +++ b/education/nutrition/Carbohydrates.md @@ -29,11 +29,22 @@ There are 3 categories of carbs. - Can cause diarrhea when consumed - Non-nutritive sweeteners are a group of synthetic compounds that are intensely sweet tasting compared to sugar - Examples include Aspertame, Saccharin, Acesulfame-K, Neotame, and Sucralose + +- Glycogen = storage form of glucose + - A highly branched storage polysaccharide in animals + - Muscles and liver are major storage sites # Starches Complex carbs have 3 or more monosaccharides bonded together - Starch is a storage polysaccharide in plants. - Composed of amylose and amylopectin - Rich sources include: - - Bread and cereal products made from wheat, ric + - Bread and cereal products made from wheat, rice, barley, and oats -# Fiber \ No newline at end of file +# Fiber +- Plants also use complex carbohydrates to make supportive and protective structures +- Dietary fiber is non-digestible plant material + - Most types are polysaccharides + - Soluble fiber + - Forms of dietary fiber that dissolve or swell in water. includes pectins, gums, mucilages, and some hemicelluloses + - Insoluble fiber + - Forms of dietary fiber that generally do not dissolve in water: Includes cellulose, hemicelluloses, and lignin \ No newline at end of file From 42cbf7aabbeb9aedec63760d147b83809ff3bc5a Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 1 Oct 2024 12:50:46 -0600 Subject: [PATCH 0355/1027] vault backup: 2024-10-01 12:50:46 --- education/nutrition/Carbohydrates.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/education/nutrition/Carbohydrates.md b/education/nutrition/Carbohydrates.md index 721e736..ae5daad 100644 --- a/education/nutrition/Carbohydrates.md +++ b/education/nutrition/Carbohydrates.md @@ -46,5 +46,13 @@ Complex carbs have 3 or more monosaccharides bonded together - Most types are polysaccharides - Soluble fiber - Forms of dietary fiber that dissolve or swell in water. includes pectins, gums, mucilages, and some hemicelluloses + - Delays stomach emptying, slows glucose absorption and lowers blood cholesterol - Insoluble fiber - - Forms of dietary fiber that generally do not dissolve in water: Includes cellulose, hemicelluloses, and lignin \ No newline at end of file + - Forms of dietary fiber that generally do not dissolve in water: Includes cellulose, hemicelluloses, and lignin + - Helps with bowel movements and fecal bulk +# Consumption +- In developing nations, diets supply 70% or more of energy from unprocessed carbs +- In industrialized nations, people tend to eat more highly refined starches and added sugars +- Americans consume about 30% of energy from added sugars (600 kcal/day) +- Regular soft drinks and energy drinks are major sources of added sugars in Americans' diets +- According to the dieterary guideline \ No newline at end of file From fd72153c44670aa8f753c6846f2c0100469e95f4 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 1 Oct 2024 12:55:46 -0600 Subject: [PATCH 0356/1027] vault backup: 2024-10-01 12:55:46 --- education/nutrition/Carbohydrates.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/education/nutrition/Carbohydrates.md b/education/nutrition/Carbohydrates.md index ae5daad..38533c4 100644 --- a/education/nutrition/Carbohydrates.md +++ b/education/nutrition/Carbohydrates.md @@ -55,4 +55,4 @@ Complex carbs have 3 or more monosaccharides bonded together - In industrialized nations, people tend to eat more highly refined starches and added sugars - Americans consume about 30% of energy from added sugars (600 kcal/day) - Regular soft drinks and energy drinks are major sources of added sugars in Americans' diets -- According to the dieterary guideline \ No newline at end of file +- According to the dietary guidelines, people should limit their added sugar to \ No newline at end of file From 63be7c15256d26bee4d2d5a4f87743484f64f052 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 1 Oct 2024 13:00:46 -0600 Subject: [PATCH 0357/1027] vault backup: 2024-10-01 13:00:46 --- education/nutrition/Carbohydrates.md | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/education/nutrition/Carbohydrates.md b/education/nutrition/Carbohydrates.md index 38533c4..939a318 100644 --- a/education/nutrition/Carbohydrates.md +++ b/education/nutrition/Carbohydrates.md @@ -55,4 +55,18 @@ Complex carbs have 3 or more monosaccharides bonded together - In industrialized nations, people tend to eat more highly refined starches and added sugars - Americans consume about 30% of energy from added sugars (600 kcal/day) - Regular soft drinks and energy drinks are major sources of added sugars in Americans' diets -- According to the dietary guidelines, people should limit their added sugar to \ No newline at end of file +- According to the dietary guidelines, people should limit their added sugar to + +# Digestion +- Salivary amylase is an enzyme secreted by salivary glands that begins work in the mouth, stops working soon after food enters the stomach +- The small intestine is the main site for carbohydrate digestion and absorption + - Pancreatic amylase + - Enzyme secreted by the pancreas that breaks down starch into maltose molecules + - Maltase + - Enzyme that splits maltose molecules + - Sucrase + - Enzyme that splits sucrose molecules + - Lactase + - Enzyme that splits lactose molecules +1. Dietary carbohydrates are delivered from +- Fructose and galactose are converted to **glucose** in the liver. \ No newline at end of file From 866a3dbb682df9ff086b24943d17c2aa9219ff6b Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 1 Oct 2024 13:05:46 -0600 Subject: [PATCH 0358/1027] vault backup: 2024-10-01 13:05:46 --- education/nutrition/Carbohydrates.md | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/education/nutrition/Carbohydrates.md b/education/nutrition/Carbohydrates.md index 939a318..9734271 100644 --- a/education/nutrition/Carbohydrates.md +++ b/education/nutrition/Carbohydrates.md @@ -68,5 +68,29 @@ Complex carbs have 3 or more monosaccharides bonded together - Enzyme that splits sucrose molecules - Lactase - Enzyme that splits lactose molecules -1. Dietary carbohydrates are delivered from -- Fructose and galactose are converted to **glucose** in the liver. \ No newline at end of file +- Only monosaccharides are absorbed +1. Dietary carbohydrates from stomach are delivered to small intestine +2. Glucose and other monosaccharides are transported to liver +3. Blood levels of glucose maintained for brain and other body cells +4. Glucose transported to muscle +- Fructose and galactose are converted to **glucose** in the liver. +- Absorption of monosaccharides mainly occurs in the small intestine + - Galactose and glucose are absorbed by active transport + - Fructose is absorbed by facilitated diffusion +- Monosaccharides enter the capillary network + - Transported to the lever by the hepatic portal vein +- Simple sugars are: + - Made into glycogen or fat by the liver + - Released into bloodstream for energy use +- Fiber is not digested + - Eventually enters large intestine + - Bacteria ferment soluble fiber (producing gas) + - Used for energy + - Insoluble fiber contributes to softer fees + - Any fiber Present in food would delay rate at which chyme enters from the stomach + - Promotes satiety + - Refined grain products are generally low in fiber +# Glucose +- Insulin is the hormone secreted from the beta cells of the pancreas that helps regulate blood glucose levels by helping glucose enter cells + - Released when blood glucose levels are high +- Glucagen is a hormone secreted from the alpha cells of the pancrease that helps regulate blood glucose leve \ No newline at end of file From d21fdc6f041ad8a66d09fa5cb7520438694a7f60 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 1 Oct 2024 13:10:47 -0600 Subject: [PATCH 0359/1027] vault backup: 2024-10-01 13:10:47 --- education/nutrition/Carbohydrates.md | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/education/nutrition/Carbohydrates.md b/education/nutrition/Carbohydrates.md index 9734271..e8a9bc8 100644 --- a/education/nutrition/Carbohydrates.md +++ b/education/nutrition/Carbohydrates.md @@ -1,5 +1,5 @@ - Carbohydrates are a class of nutrients that is a major source of energy for the body - - Can also server as a glue that holds cells togehter + - Can also server as a glue that holds cells together - Classified as simple or complex - Plants are rich sources of carbohydrates There are 3 categories of carbs. @@ -92,5 +92,9 @@ Complex carbs have 3 or more monosaccharides bonded together - Refined grain products are generally low in fiber # Glucose - Insulin is the hormone secreted from the beta cells of the pancreas that helps regulate blood glucose levels by helping glucose enter cells - - Released when blood glucose levels are high -- Glucagen is a hormone secreted from the alpha cells of the pancrease that helps regulate blood glucose leve \ No newline at end of file + - Released when blood glucose levels are **HIGH** +- Glucagon is a hormone secreted from the alpha cells of the pancreas that helps regulate blood glucose levels + - Released when blood glucose levels are **LOW** +- Glyconeogenisis: Creates glucose +- Glycogenolysis: Glycogen stores are broken down +- \ No newline at end of file From b12b0f9262f2a852ce43ee976b82185dc5b1eb82 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 1 Oct 2024 14:50:40 -0600 Subject: [PATCH 0360/1027] vault backup: 2024-10-01 14:50:40 --- education/nutrition/Carbohydrates.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/education/nutrition/Carbohydrates.md b/education/nutrition/Carbohydrates.md index e8a9bc8..ca5e2fc 100644 --- a/education/nutrition/Carbohydrates.md +++ b/education/nutrition/Carbohydrates.md @@ -97,4 +97,8 @@ Complex carbs have 3 or more monosaccharides bonded together - Released when blood glucose levels are **LOW** - Glyconeogenisis: Creates glucose - Glycogenolysis: Glycogen stores are broken down -- \ No newline at end of file + +- Cells need glucose to properly metabolize fat +- When not enough glucose is available, ketone bodies form + - Chemicals formed from the incomplete breakdown of fat +- Ketosis is a condition in which ketone bodies accumulate in blood; can result in loss of.... \ No newline at end of file From 4b90cf2c2d6696eddccc6d3bbffde90ca3dce909 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 1 Oct 2024 20:51:24 -0600 Subject: [PATCH 0361/1027] vault backup: 2024-10-01 20:51:24 --- .../software development/ECE1400/Chapter 7 Exercises.md | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 education/software development/ECE1400/Chapter 7 Exercises.md diff --git a/education/software development/ECE1400/Chapter 7 Exercises.md b/education/software development/ECE1400/Chapter 7 Exercises.md new file mode 100644 index 0000000..23806b5 --- /dev/null +++ b/education/software development/ECE1400/Chapter 7 Exercises.md @@ -0,0 +1,6 @@ +> 3. Which of the following aren not legal types in C? + +a. `short unsigned int` +b. `short float` +c. `long double` +d. `unsigned long` \ No newline at end of file From a8b53fdccb0c42fa9d275973abe49121a6ae5a0c Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 1 Oct 2024 20:56:24 -0600 Subject: [PATCH 0362/1027] vault backup: 2024-10-01 20:56:24 --- .../ECE1400/Chapter 7 Exercises.md | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/education/software development/ECE1400/Chapter 7 Exercises.md b/education/software development/ECE1400/Chapter 7 Exercises.md index 23806b5..5f2538d 100644 --- a/education/software development/ECE1400/Chapter 7 Exercises.md +++ b/education/software development/ECE1400/Chapter 7 Exercises.md @@ -3,4 +3,24 @@ a. `short unsigned int` b. `short float` c. `long double` -d. `unsigned long` \ No newline at end of file +d. `unsigned long` + +Answer: +b. `short float` + +> 4. If `c` is a variable of type `char`, which of the following statements is illegal? + +```c +char c; +// A: +i += c; // i has type int +// B: +c = 2 * c - 1; +// C: +putchar(c); +// D: +printf(c); +``` + +Answer: +D is incorrect because `printf` operates on strings. \ No newline at end of file From 37759daba4f958ca3b292ec390b5f8fc380e3c2b Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 1 Oct 2024 21:01:24 -0600 Subject: [PATCH 0363/1027] vault backup: 2024-10-01 21:01:24 --- .../ECE1400/Chapter 7 Exercises.md | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/education/software development/ECE1400/Chapter 7 Exercises.md b/education/software development/ECE1400/Chapter 7 Exercises.md index 5f2538d..065ba74 100644 --- a/education/software development/ECE1400/Chapter 7 Exercises.md +++ b/education/software development/ECE1400/Chapter 7 Exercises.md @@ -23,4 +23,13 @@ printf(c); ``` Answer: -D is incorrect because `printf` operates on strings. \ No newline at end of file +D is illegal because `printf` operates on strings, not `char`s. + +> 6. For each of the following items of data, specify which one of the types `char`, `short`, `int`, or `long`is the smallest one guaranteed to be large enough to store the item. + +Answer: +A. Days in a month: `char` +B. Days in a year: `short` +C. Minutes in a day: `short` +D. Seconds in a day: `long` + From f2d6dd8bd7837384a4d65b16c5e2adb20af385a5 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 1 Oct 2024 21:06:24 -0600 Subject: [PATCH 0364/1027] vault backup: 2024-10-01 21:06:24 --- education/software development/ECE1400/Chapter 7 Exercises.md | 1 + 1 file changed, 1 insertion(+) diff --git a/education/software development/ECE1400/Chapter 7 Exercises.md b/education/software development/ECE1400/Chapter 7 Exercises.md index 065ba74..f184693 100644 --- a/education/software development/ECE1400/Chapter 7 Exercises.md +++ b/education/software development/ECE1400/Chapter 7 Exercises.md @@ -33,3 +33,4 @@ B. Days in a year: `short` C. Minutes in a day: `short` D. Seconds in a day: `long` +> 10. Suppose that `i` is a variable of type `int`, `j` is a variable of type `float`, and `k` is a variable of type `unsigned int`. What is the type of the expression `i + (int) j * k`? \ No newline at end of file From 78c946967feada1f24f533e1f72f8a4d2ab6465d Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 1 Oct 2024 21:16:24 -0600 Subject: [PATCH 0365/1027] vault backup: 2024-10-01 21:16:24 --- .../software development/ECE1400/Chapter 7 Exercises.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/education/software development/ECE1400/Chapter 7 Exercises.md b/education/software development/ECE1400/Chapter 7 Exercises.md index f184693..4e1248b 100644 --- a/education/software development/ECE1400/Chapter 7 Exercises.md +++ b/education/software development/ECE1400/Chapter 7 Exercises.md @@ -33,4 +33,9 @@ B. Days in a year: `short` C. Minutes in a day: `short` D. Seconds in a day: `long` -> 10. Suppose that `i` is a variable of type `int`, `j` is a variable of type `float`, and `k` is a variable of type `unsigned int`. What is the type of the expression `i + (int) j * k`? \ No newline at end of file +> 10. Suppose that `i` is a variable of type `int`, `j` is a variable of type `float`, and `k` is a variable of type `unsigned int`. What is the type of the expression `i + (int) j * k`? + +Answer: +`unsigned int` + +> 15. \ No newline at end of file From 1a4a8c62b448a6367bdb6c5cb1c27f985d0cc101 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 1 Oct 2024 21:26:24 -0600 Subject: [PATCH 0366/1027] vault backup: 2024-10-01 21:26:24 --- .../software development/ECE1400/Chapter 7 Exercises.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/education/software development/ECE1400/Chapter 7 Exercises.md b/education/software development/ECE1400/Chapter 7 Exercises.md index 4e1248b..c0d1144 100644 --- a/education/software development/ECE1400/Chapter 7 Exercises.md +++ b/education/software development/ECE1400/Chapter 7 Exercises.md @@ -38,4 +38,11 @@ D. Seconds in a day: `long` Answer: `unsigned int` -> 15. \ No newline at end of file +> 15. Use `typedef` to create types named `Int8`, `Int16`, and `Int32`. Define the types so that they represent 8 bit, 16 bit, and 32 bit integers on your machine. + +Answer: +```C +typedef char Int8; +typedef short Int16; +typedef long Int32; +``` \ No newline at end of file From f1b07dbadc38926b27ecddc9fd648cf241887f43 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 1 Oct 2024 22:18:41 -0600 Subject: [PATCH 0367/1027] vault backup: 2024-10-01 22:18:41 --- education/english/ENGL2010/How to write a summary.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 education/english/ENGL2010/How to write a summary.md diff --git a/education/english/ENGL2010/How to write a summary.md b/education/english/ENGL2010/How to write a summary.md new file mode 100644 index 0000000..2a524ee --- /dev/null +++ b/education/english/ENGL2010/How to write a summary.md @@ -0,0 +1,3 @@ +- First sentence should have author, article name, and main claim the article makes +- Summary should be ordered in the same way the ideas in the article are +- Use signal phrases ("argues", "makes the claim") \ No newline at end of file From 777cd5d52df5622cfb66273150b1ad6e1b9d1c07 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 1 Oct 2024 22:33:41 -0600 Subject: [PATCH 0368/1027] vault backup: 2024-10-01 22:33:41 --- education/nutrition/Carbohydrates.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/education/nutrition/Carbohydrates.md b/education/nutrition/Carbohydrates.md index ca5e2fc..dcb32ed 100644 --- a/education/nutrition/Carbohydrates.md +++ b/education/nutrition/Carbohydrates.md @@ -47,9 +47,11 @@ Complex carbs have 3 or more monosaccharides bonded together - Soluble fiber - Forms of dietary fiber that dissolve or swell in water. includes pectins, gums, mucilages, and some hemicelluloses - Delays stomach emptying, slows glucose absorption and lowers blood cholesterol + - Good sources of soluble fiber include oat bran and oatmeal, beans, apples, carrots, oranges, other citrus fruits, and psyllium seeds - Insoluble fiber - Forms of dietary fiber that generally do not dissolve in water: Includes cellulose, hemicelluloses, and lignin - Helps with bowel movements and fecal bulk + - Good sources of insoluble fiber include whole grain products, including brown rice # Consumption - In developing nations, diets supply 70% or more of energy from unprocessed carbs - In industrialized nations, people tend to eat more highly refined starches and added sugars From 3eb08e7d9ea5b8c89d19a7a0cf3ce18c580c577b Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 1 Oct 2024 22:43:41 -0600 Subject: [PATCH 0369/1027] vault backup: 2024-10-01 22:43:41 --- education/nutrition/Carbohydrates.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/education/nutrition/Carbohydrates.md b/education/nutrition/Carbohydrates.md index dcb32ed..5da4f45 100644 --- a/education/nutrition/Carbohydrates.md +++ b/education/nutrition/Carbohydrates.md @@ -103,4 +103,8 @@ Complex carbs have 3 or more monosaccharides bonded together - Cells need glucose to properly metabolize fat - When not enough glucose is available, ketone bodies form - Chemicals formed from the incomplete breakdown of fat -- Ketosis is a condition in which ketone bodies accumulate in blood; can result in loss of.... \ No newline at end of file +- Ketosis is a condition in which ketone bodies accumulate in blood; can result in loss of.... + +# Hyper/Hypoglycemia +- Hyperglycemia results in abnormally elevated blood glucose levels +- Hypoglycemia results in abnormally low blood glucose levels \ No newline at end of file From 86df859e889355a008780be21db3512a86f33fc7 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 2 Oct 2024 10:47:50 -0600 Subject: [PATCH 0370/1027] vault backup: 2024-10-02 10:47:50 --- education/math/MATH1060 (trig)/Graphing.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/education/math/MATH1060 (trig)/Graphing.md b/education/math/MATH1060 (trig)/Graphing.md index 57296d9..fc0f7ae 100644 --- a/education/math/MATH1060 (trig)/Graphing.md +++ b/education/math/MATH1060 (trig)/Graphing.md @@ -74,6 +74,8 @@ Given the form $y = A\tan(Bx - C) + D$ (the same applies for $\cot$) - The range of both is $(-\infty, \infty)$ - The phase shift is $\frac{C}{B}$ - The vertical shift is $D$ + +# # Examples > Given $-2\tan(\pi*x + \pi) - 1$ From 7808dbd460b01acc78f869ff929016509a89ae7c Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 2 Oct 2024 10:52:50 -0600 Subject: [PATCH 0371/1027] vault backup: 2024-10-02 10:52:50 --- education/math/MATH1060 (trig)/Graphing.md | 8 +++++++- .../math/MATH1060 (trig)/assets/graphsec.jpg | Bin 0 -> 12917 bytes 2 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 education/math/MATH1060 (trig)/assets/graphsec.jpg diff --git a/education/math/MATH1060 (trig)/Graphing.md b/education/math/MATH1060 (trig)/Graphing.md index fc0f7ae..de96bfe 100644 --- a/education/math/MATH1060 (trig)/Graphing.md +++ b/education/math/MATH1060 (trig)/Graphing.md @@ -75,7 +75,13 @@ Given the form $y = A\tan(Bx - C) + D$ (the same applies for $\cot$) - The phase shift is $\frac{C}{B}$ - The vertical shift is $D$ -# +# Secant +$$ y = \sec{x} $$ +![Graph of secant](assets/graphsec.jpg) +The reference graph of secant has has a period of $2\pi$, +$$ sec(x) = \frac{1}{\cos{x}} $$ + + # Examples > Given $-2\tan(\pi*x + \pi) - 1$ diff --git a/education/math/MATH1060 (trig)/assets/graphsec.jpg b/education/math/MATH1060 (trig)/assets/graphsec.jpg new file mode 100644 index 0000000000000000000000000000000000000000..30926ccd7248ae10df79c52475e7551a89446c43 GIT binary patch literal 12917 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 Date: Wed, 2 Oct 2024 10:57:50 -0600 Subject: [PATCH 0372/1027] vault backup: 2024-10-02 10:57:49 --- education/math/MATH1060 (trig)/Graphing.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/education/math/MATH1060 (trig)/Graphing.md b/education/math/MATH1060 (trig)/Graphing.md index de96bfe..2d5b086 100644 --- a/education/math/MATH1060 (trig)/Graphing.md +++ b/education/math/MATH1060 (trig)/Graphing.md @@ -78,9 +78,9 @@ Given the form $y = A\tan(Bx - C) + D$ (the same applies for $\cot$) # Secant $$ y = \sec{x} $$ ![Graph of secant](assets/graphsec.jpg) -The reference graph of secant has has a period of $2\pi$, -$$ sec(x) = \frac{1}{\cos{x}} $$ +$$ sec(x) = \frac{1}{\cos{x}} $$ +Because secant is the reciprocal of cosine, when $\cos{x} = 0$, then secant is undefined. $ # Examples > Given $-2\tan(\pi*x + \pi) - 1$ From 7dd0fea95070f6f440462ab9a460af471a85a82e Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 2 Oct 2024 11:02:50 -0600 Subject: [PATCH 0373/1027] vault backup: 2024-10-02 11:02:50 --- education/math/MATH1060 (trig)/Graphing.md | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/education/math/MATH1060 (trig)/Graphing.md b/education/math/MATH1060 (trig)/Graphing.md index 2d5b086..e5803fd 100644 --- a/education/math/MATH1060 (trig)/Graphing.md +++ b/education/math/MATH1060 (trig)/Graphing.md @@ -76,11 +76,18 @@ Given the form $y = A\tan(Bx - C) + D$ (the same applies for $\cot$) - The vertical shift is $D$ # Secant -$$ y = \sec{x} $$ +$$ y = \sec(x) $$ ![Graph of secant](assets/graphsec.jpg) $$ sec(x) = \frac{1}{\cos{x}} $$ -Because secant is the reciprocal of cosine, when $\cos{x} = 0$, then secant is undefined. $ +Because secant is the reciprocal of cosine, when $\cos{x} = 0$, then secant is undefined. $|\cos$| is never *greater than* 1, so secant is never *less than* 1 in absolute value. When the graph of cosine crosses the x axis, an asymptote for a matching graph of secant will appear there. + +The general form of secant is: +$$ y = A\sec(B{x} - C) + D $$ +$A$, $B$, $C$, and $D$ will have similar meanings to the secant functions as they did to the sine and cosine functions. + +# Cosecant +$$ y = \csc(x) $$ # Examples > Given $-2\tan(\pi*x + \pi) - 1$ From dc7ab6252279412aa7466d8764c320ab92712510 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 2 Oct 2024 11:07:50 -0600 Subject: [PATCH 0374/1027] vault backup: 2024-10-02 11:07:50 --- education/math/MATH1060 (trig)/Graphing.md | 8 ++++++++ .../math/MATH1060 (trig)/assets/graphcsc.jpg | Bin 0 -> 13896 bytes 2 files changed, 8 insertions(+) create mode 100644 education/math/MATH1060 (trig)/assets/graphcsc.jpg diff --git a/education/math/MATH1060 (trig)/Graphing.md b/education/math/MATH1060 (trig)/Graphing.md index e5803fd..7d7a4e1 100644 --- a/education/math/MATH1060 (trig)/Graphing.md +++ b/education/math/MATH1060 (trig)/Graphing.md @@ -88,7 +88,15 @@ $A$, $B$, $C$, and $D$ will have similar meanings to the secant functions as the # Cosecant $$ y = \csc(x) $$ +![Graph of cosecant](assets/graphsec.jpg) +$$ \csc(x) = \frac{1}{\sin(x)} $$ + +Because cosecant is the reciprocal of sine, when $\sin{x} = 0$, then cosecant is undefined. $|\sin$| is never *greater than* 1, so secant is never *less than* 1 in absolute value. When the graph of cosine crosses the x axis, an asymptote for a matching graph of secant will appear there. + +The general form of secant is: +$$ y = A\sec(B{x} - C) + D $$ +$A$, $B$, $C$, and $D$ will have similar meanings to the secant functions as they did to the sine and cosine functions. # Examples > Given $-2\tan(\pi*x + \pi) - 1$ diff --git a/education/math/MATH1060 (trig)/assets/graphcsc.jpg b/education/math/MATH1060 (trig)/assets/graphcsc.jpg new file mode 100644 index 0000000000000000000000000000000000000000..89419802fcbc1641defcef2959be2284514166fa GIT binary patch literal 13896 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 p!}UYK*Wd5%B-0(CYr@f2MZCZG-XX@kO Date: Wed, 2 Oct 2024 11:17:50 -0600 Subject: [PATCH 0375/1027] vault backup: 2024-10-02 11:17:49 --- education/math/MATH1060 (trig)/Graphing.md | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/education/math/MATH1060 (trig)/Graphing.md b/education/math/MATH1060 (trig)/Graphing.md index 7d7a4e1..80d780d 100644 --- a/education/math/MATH1060 (trig)/Graphing.md +++ b/education/math/MATH1060 (trig)/Graphing.md @@ -84,7 +84,7 @@ Because secant is the reciprocal of cosine, when $\cos{x} = 0$, then secant is u The general form of secant is: $$ y = A\sec(B{x} - C) + D $$ -$A$, $B$, $C$, and $D$ will have similar meanings to the secant functions as they did to the sine and cosine functions. +$A$, $B$, $C$, and $D$ will have similar meanings to the secant function as they did to the sine and cosine functions. # Cosecant $$ y = \csc(x) $$ @@ -92,11 +92,16 @@ $$ y = \csc(x) $$ $$ \csc(x) = \frac{1}{\sin(x)} $$ -Because cosecant is the reciprocal of sine, when $\sin{x} = 0$, then cosecant is undefined. $|\sin$| is never *greater than* 1, so secant is never *less than* 1 in absolute value. When the graph of cosine crosses the x axis, an asymptote for a matching graph of secant will appear there. +Because cosecant is the reciprocal of sine, when $\sin{x} = 0$, then cosecant is undefined. $|\sin$| is never *greater than* 1, so secant is never *less than* 1 in absolute value. When the graph of sine crosses the x axis, an asymptote for a matching graph of cosecant will appear there. -The general form of secant is: -$$ y = A\sec(B{x} - C) + D $$ -$A$, $B$, $C$, and $D$ will have similar meanings to the secant functions as they did to the sine and cosine functions. +The general form of cosecant is: +$$ y = A\scsc(B{x} - C) + D $$ +$A$, $B$, $C$, and $D$ will have similar meanings to the cosecant function as they did to the sine and cosine functions. + +# Features of Secant and Cosecant +- The stretching factor is $|A|$ +- The period is $\frac{2\pi}{|B|}$ +- The domain of secant is all $x$, where $x \ne \frac{C}{B} + \frac{\pi}{2} + \frac{\pi}{|B}k$, where $k$ is an integer. # Examples > Given $-2\tan(\pi*x + \pi) - 1$ From d2b99ff284da5bd297c2f1be51ec0b51ab8bfc5c Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 2 Oct 2024 11:22:50 -0600 Subject: [PATCH 0376/1027] vault backup: 2024-10-02 11:22:50 --- education/math/MATH1060 (trig)/Graphing.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/education/math/MATH1060 (trig)/Graphing.md b/education/math/MATH1060 (trig)/Graphing.md index 80d780d..ee9b1f0 100644 --- a/education/math/MATH1060 (trig)/Graphing.md +++ b/education/math/MATH1060 (trig)/Graphing.md @@ -95,13 +95,16 @@ $$ \csc(x) = \frac{1}{\sin(x)} $$ Because cosecant is the reciprocal of sine, when $\sin{x} = 0$, then cosecant is undefined. $|\sin$| is never *greater than* 1, so secant is never *less than* 1 in absolute value. When the graph of sine crosses the x axis, an asymptote for a matching graph of cosecant will appear there. The general form of cosecant is: -$$ y = A\scsc(B{x} - C) + D $$ +$$ y = A\csc(B{x} - C) + D $$ $A$, $B$, $C$, and $D$ will have similar meanings to the cosecant function as they did to the sine and cosine functions. # Features of Secant and Cosecant - The stretching factor is $|A|$ - The period is $\frac{2\pi}{|B|}$ -- The domain of secant is all $x$, where $x \ne \frac{C}{B} + \frac{\pi}{2} + \frac{\pi}{|B}k$, where $k$ is an integer. +- The domain of secant is all $x$, where $x \ne \frac{C}{B} + \frac{\pi}{2} + \frac{\pi}{|B|}k$, where $k$ is an integer. (Every half period + phase shift is where asymptotes appear) +- The domain of cosecant is all $x$, where $x \ne \frac{C}{B} + \frac{\pi}{|B|}k$, where $k$ is an integer. +- The range is $(\infty, -|A| +D]\cup [|A| + D], \infty)$ +- The vertical asymptotes of secant occur at $x = \frac{C}{B} + {} # Examples > Given $-2\tan(\pi*x + \pi) - 1$ From 286e7991a54a24401f4d14a9cfecefaef1e08db2 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 2 Oct 2024 11:27:50 -0600 Subject: [PATCH 0377/1027] vault backup: 2024-10-02 11:27:50 --- education/math/MATH1060 (trig)/Graphing.md | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/education/math/MATH1060 (trig)/Graphing.md b/education/math/MATH1060 (trig)/Graphing.md index ee9b1f0..b2f361c 100644 --- a/education/math/MATH1060 (trig)/Graphing.md +++ b/education/math/MATH1060 (trig)/Graphing.md @@ -104,12 +104,21 @@ $A$, $B$, $C$, and $D$ will have similar meanings to the cosecant function as th - The domain of secant is all $x$, where $x \ne \frac{C}{B} + \frac{\pi}{2} + \frac{\pi}{|B|}k$, where $k$ is an integer. (Every half period + phase shift is where asymptotes appear) - The domain of cosecant is all $x$, where $x \ne \frac{C}{B} + \frac{\pi}{|B|}k$, where $k$ is an integer. - The range is $(\infty, -|A| +D]\cup [|A| + D], \infty)$ -- The vertical asymptotes of secant occur at $x = \frac{C}{B} + {} +- The vertical asymptotes of secant occur at $x = \frac{C}{B} + \frac{\pi}{2} + \frac{\pi}{2} + \frac{\pi}{|B|}k$, where $k$ is an integer. +- The vertical asymptotes of cosecant occur at $x = \frac{C}{B} + \frac{\pi}{|B|}k$, where $k$ is an integer. +- The vertical shift is $D$. # Examples > Given $-2\tan(\pi*x + \pi) - 1$ $A = -2$, $B = \pi$, $C = -\pi$, $D = -1$ - + +> Identify the vertical stretch/compress factor, period, phase shift, and vertical shift of the function $y = 4\sec(\frac{\pi}{3}x - \frac{\pi}{2}) + 1$ + +$A = 4$, $B = \frac{\pi}{3}$, $C = \frac{\pi}{2}$, $D = 4$ + +Vertical stretch: $|4| = 4$ +Period: $\frac{2\pi}{\frac{\pi}} + | Transformation | Equation | | -------------- | ------------------------- | | Stretch | $\|-2\| = 2$ | From 6641088b403673c3a5329e74b872860b57d3468a Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 2 Oct 2024 11:32:50 -0600 Subject: [PATCH 0378/1027] vault backup: 2024-10-02 11:32:50 --- .obsidian/file-recovery.json | 4 + .obsidian/plugins/execute-code/data.json | 169 +++++++++++++++++++++ education/math/MATH1060 (trig)/Graphing.md | 3 +- 3 files changed, 175 insertions(+), 1 deletion(-) create mode 100644 .obsidian/file-recovery.json create mode 100644 .obsidian/plugins/execute-code/data.json diff --git a/.obsidian/file-recovery.json b/.obsidian/file-recovery.json new file mode 100644 index 0000000..7197548 --- /dev/null +++ b/.obsidian/file-recovery.json @@ -0,0 +1,4 @@ +{ + "intervalMinutes": 5, + "keepDays": 7 +} \ No newline at end of file diff --git a/.obsidian/plugins/execute-code/data.json b/.obsidian/plugins/execute-code/data.json new file mode 100644 index 0000000..cab2a65 --- /dev/null +++ b/.obsidian/plugins/execute-code/data.json @@ -0,0 +1,169 @@ +{ + "lastOpenLanguageTab": "c", + "timeout": 10000, + "allowInput": true, + "wslMode": false, + "shellWSLMode": false, + "onlyCurrentBlock": false, + "nodePath": "node", + "nodeArgs": "", + "jsFileExtension": "js", + "jsInject": "", + "tsPath": "ts-node", + "tsArgs": "", + "tsInject": "", + "leanPath": "lean", + "leanArgs": "", + "leanInject": "", + "luaPath": "lua", + "luaArgs": "", + "luaFileExtension": "lua", + "luaInject": "", + "dartPath": "dart", + "dartArgs": "", + "dartFileExtension": "dart", + "dartInject": "", + "csPath": "dotnet-script", + "csArgs": "", + "csFileExtension": "csx", + "csInject": "", + "pythonPath": "python", + "pythonArgs": "", + "pythonEmbedPlots": true, + "pythonFileExtension": "py", + "pythonInject": "", + "shellPath": "bash", + "shellArgs": "", + "shellFileExtension": "sh", + "shellInject": "", + "batchPath": "call", + "batchArgs": "", + "batchFileExtension": "bat", + "batchInject": "", + "groovyPath": "groovy", + "groovyArgs": "", + "groovyFileExtension": "groovy", + "groovyInject": "", + "golangPath": "go", + "golangArgs": "run", + "golangFileExtension": "go", + "goInject": "", + "javaPath": "java", + "javaArgs": "-ea", + "javaFileExtension": "java", + "javaInject": "", + "maxPrologAnswers": 15, + "prologInject": "", + "powershellPath": "powershell", + "powershellArgs": "-file", + "powershellFileExtension": "ps1", + "powershellInject": "$OutputEncoding = [console]::InputEncoding = [console]::OutputEncoding = New-Object System.Text.UTF8Encoding", + "powershellEncoding": "latin1", + "cargoPath": "cargo", + "cargoEvalArgs": "", + "rustInject": "", + "cppRunner": "cling", + "cppFileExtension": "cpp", + "cppInject": "", + "cppArgs": "", + "cppUseMain": false, + "clingPath": "gcc", + "clingArgs": "", + "clingStd": "c++17", + "rustFileExtension": "rs", + "RPath": "Rscript", + "RArgs": "", + "REmbedPlots": true, + "RFileExtension": "R", + "rInject": "", + "kotlinPath": "kotlinc", + "kotlinArgs": "-script", + "kotlinFileExtension": "kts", + "kotlinInject": "", + "swiftPath": "swift", + "swiftArgs": "", + "swiftFileExtension": "swift", + "swiftInject": "", + "runghcPath": "runghc", + "ghcPath": "ghc", + "ghciPath": "ghci", + "useGhci": false, + "haskellInject": "", + "mathematicaPath": "wolframscript", + "mathematicaArgs": "-file", + "mathematicaFileExtension": "wls", + "mathematicaInject": "", + "scalaPath": "scala", + "scalaArgs": "", + "scalaFileExtension": "scala", + "scalaInject": "", + "racketPath": "racket", + "racketArgs": "", + "racketFileExtension": "rkt", + "racketInject": "#lang racket", + "fsharpPath": "dotnet", + "fsharpArgs": "", + "fsharpInject": "", + "fsharpFileExtension": "fsx", + "cArgs": "", + "cUseMain": true, + "cInject": "", + "rubyPath": "ruby", + "rubyArgs": "", + "rubyFileExtension": "rb", + "rubyInject": "", + "sqlPath": "psql", + "sqlArgs": "-d -U -f", + "sqlInject": "", + "octavePath": "octave", + "octaveArgs": "-q", + "octaveFileExtension": "m", + "octaveInject": "figure('visible','off') # Necessary to embed plots", + "maximaPath": "maxima", + "maximaArgs": "-qb", + "maximaFileExtension": "mx", + "maximaInject": "", + "applescriptPath": "osascript", + "applescriptArgs": "", + "applescriptFileExtension": "scpt", + "applescriptInject": "", + "zigPath": "zig", + "zigArgs": "run", + "zigInject": "", + "ocamlPath": "ocaml", + "ocamlArgs": "", + "ocamlInject": "", + "jsInteractive": true, + "tsInteractive": false, + "csInteractive": false, + "leanInteractive": false, + "luaInteractive": false, + "dartInteractive": false, + "pythonInteractive": true, + "cppInteractive": false, + "prologInteractive": false, + "shellInteractive": false, + "batchInteractive": false, + "bashInteractive": false, + "groovyInteractive": false, + "rInteractive": false, + "goInteractive": false, + "rustInteractive": false, + "javaInteractive": false, + "powershellInteractive": false, + "kotlinInteractive": false, + "swiftInteractive": false, + "mathematicaInteractive": false, + "haskellInteractive": false, + "scalaInteractive": false, + "fsharpInteractive": false, + "cInteractive": false, + "racketInteractive": false, + "rubyInteractive": false, + "sqlInteractive": false, + "octaveInteractive": false, + "maximaInteractive": false, + "applescriptInteractive": false, + "zigInteractive": false, + "ocamlInteractive": false +} \ No newline at end of file diff --git a/education/math/MATH1060 (trig)/Graphing.md b/education/math/MATH1060 (trig)/Graphing.md index b2f361c..da90ada 100644 --- a/education/math/MATH1060 (trig)/Graphing.md +++ b/education/math/MATH1060 (trig)/Graphing.md @@ -117,7 +117,8 @@ $A$, $B$, $C$, and $D$ will have similar meanings to the cosecant function as th $A = 4$, $B = \frac{\pi}{3}$, $C = \frac{\pi}{2}$, $D = 4$ Vertical stretch: $|4| = 4$ -Period: $\frac{2\pi}{\frac{\pi}} +Period: $\frac{2\pi}{\frac{\pi}{3}} = \frac{2\pi}{1} * \frac{3}{\pi} = 6$ +Phase shift: $\frac{} | Transformation | Equation | | -------------- | ------------------------- | From 6a9c9fa9d16a2588301c3208324e6ddc68d994d6 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 2 Oct 2024 11:37:51 -0600 Subject: [PATCH 0379/1027] vault backup: 2024-10-02 11:37:51 --- education/math/MATH1060 (trig)/Graphing.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/education/math/MATH1060 (trig)/Graphing.md b/education/math/MATH1060 (trig)/Graphing.md index da90ada..c3fb973 100644 --- a/education/math/MATH1060 (trig)/Graphing.md +++ b/education/math/MATH1060 (trig)/Graphing.md @@ -118,7 +118,8 @@ $A = 4$, $B = \frac{\pi}{3}$, $C = \frac{\pi}{2}$, $D = 4$ Vertical stretch: $|4| = 4$ Period: $\frac{2\pi}{\frac{\pi}{3}} = \frac{2\pi}{1} * \frac{3}{\pi} = 6$ -Phase shift: $\frac{} +Phase shift: $\dfrac{\frac{\pi}{2}}{\frac{\pi}{3}} = \frac{3}{2}$ +Vertical shift: $1$ | Transformation | Equation | | -------------- | ------------------------- | From 876558ae416ab00318f208381edbdae651f92813 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sun, 6 Oct 2024 12:27:59 -0600 Subject: [PATCH 0380/1027] vault backup: 2024-10-06 12:27:59 --- .obsidian/app.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.obsidian/app.json b/.obsidian/app.json index 83fdb69..3595e31 100644 --- a/.obsidian/app.json +++ b/.obsidian/app.json @@ -2,7 +2,7 @@ "vimMode": true, "promptDelete": false, "pdfExportSettings": { - "includeName": true, + "includeName": false, "pageSize": "Letter", "landscape": false, "margin": "0", From 93efdc903206e10e3a96427fc5c226043fbbd169 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Mon, 7 Oct 2024 13:08:48 -0600 Subject: [PATCH 0381/1027] vault backup: 2024-10-07 13:08:48 --- education/math/MATH1060 (trig)/Graphing.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/education/math/MATH1060 (trig)/Graphing.md b/education/math/MATH1060 (trig)/Graphing.md index c3fb973..2cf78b6 100644 --- a/education/math/MATH1060 (trig)/Graphing.md +++ b/education/math/MATH1060 (trig)/Graphing.md @@ -107,6 +107,8 @@ $A$, $B$, $C$, and $D$ will have similar meanings to the cosecant function as th - The vertical asymptotes of secant occur at $x = \frac{C}{B} + \frac{\pi}{2} + \frac{\pi}{2} + \frac{\pi}{|B|}k$, where $k$ is an integer. - The vertical asymptotes of cosecant occur at $x = \frac{C}{B} + \frac{\pi}{|B|}k$, where $k$ is an integer. - The vertical shift is $D$. +# Inverse Functions + # Examples > Given $-2\tan(\pi*x + \pi) - 1$ From 308a92bc237d1e7075e7ebab5d16453eb19ebebc Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Mon, 7 Oct 2024 13:18:48 -0600 Subject: [PATCH 0382/1027] vault backup: 2024-10-07 13:18:48 --- education/math/MATH1060 (trig)/Graphing.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/education/math/MATH1060 (trig)/Graphing.md b/education/math/MATH1060 (trig)/Graphing.md index 2cf78b6..616dbf8 100644 --- a/education/math/MATH1060 (trig)/Graphing.md +++ b/education/math/MATH1060 (trig)/Graphing.md @@ -108,7 +108,10 @@ $A$, $B$, $C$, and $D$ will have similar meanings to the cosecant function as th - The vertical asymptotes of cosecant occur at $x = \frac{C}{B} + \frac{\pi}{|B|}k$, where $k$ is an integer. - The vertical shift is $D$. # Inverse Functions +For any one to one function $f(x) = y$, a function $f^{-1}(y) = x)$. A function is considered one-to-one if every input only has one output, and every output can only be created from a single input. +- The *domain* of $f$ is the *range* of $f^{-1}$. +- The *range* of $f$ is the *domain* of $f^{-1}$. # Examples > Given $-2\tan(\pi*x + \pi) - 1$ From b458dcec4ade3425299037077656e78057829e61 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Mon, 7 Oct 2024 13:23:48 -0600 Subject: [PATCH 0383/1027] vault backup: 2024-10-07 13:23:48 --- education/math/MATH1060 (trig)/Graphing.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/education/math/MATH1060 (trig)/Graphing.md b/education/math/MATH1060 (trig)/Graphing.md index 616dbf8..f87c0f7 100644 --- a/education/math/MATH1060 (trig)/Graphing.md +++ b/education/math/MATH1060 (trig)/Graphing.md @@ -110,8 +110,19 @@ $A$, $B$, $C$, and $D$ will have similar meanings to the cosecant function as th # Inverse Functions For any one to one function $f(x) = y$, a function $f^{-1}(y) = x)$. A function is considered one-to-one if every input only has one output, and every output can only be created from a single input. +The inverse of a trig function is denoted as $sin^{-1}$, or $arcsin$ respectively. + +The inverse of a trig function is **not** the same as the reciprocal of a trig function, $\frac{1}{sin}$ is not the same as $sin + - The *domain* of $f$ is the *range* of $f^{-1}$. - The *range* of $f$ is the *domain* of $f^{-1}$. + +| Trig functions | Inverse trig functions | +| ----------------------------------- | ------------------------------------ | +| Domain: Angle measures | Domain: Ratio of sides of a triangle | +| Range: Ratio of sides of a triangle | Range: Angle Measure | +| | | + # Examples > Given $-2\tan(\pi*x + \pi) - 1$ From e5ebfb287d9f968abed89583ac3c883f59571e55 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Mon, 7 Oct 2024 13:28:48 -0600 Subject: [PATCH 0384/1027] vault backup: 2024-10-07 13:28:48 --- education/math/MATH1060 (trig)/Graphing.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/education/math/MATH1060 (trig)/Graphing.md b/education/math/MATH1060 (trig)/Graphing.md index f87c0f7..770ca92 100644 --- a/education/math/MATH1060 (trig)/Graphing.md +++ b/education/math/MATH1060 (trig)/Graphing.md @@ -112,7 +112,7 @@ For any one to one function $f(x) = y$, a function $f^{-1}(y) = x)$. A function The inverse of a trig function is denoted as $sin^{-1}$, or $arcsin$ respectively. -The inverse of a trig function is **not** the same as the reciprocal of a trig function, $\frac{1}{sin}$ is not the same as $sin +The inverse of a trig function is **not** the same as the reciprocal of a trig function, $\frac{1}{sin}$ is not the same as $sin^{-1}$. - The *domain* of $f$ is the *range* of $f^{-1}$. - The *range* of $f$ is the *domain* of $f^{-1}$. From 1aa6a152f3a284ec6ebf1bdfd558089396a677fd Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Mon, 7 Oct 2024 13:38:48 -0600 Subject: [PATCH 0385/1027] vault backup: 2024-10-07 13:38:48 --- education/math/MATH1060 (trig)/Graphing.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/education/math/MATH1060 (trig)/Graphing.md b/education/math/MATH1060 (trig)/Graphing.md index 770ca92..120849b 100644 --- a/education/math/MATH1060 (trig)/Graphing.md +++ b/education/math/MATH1060 (trig)/Graphing.md @@ -121,7 +121,7 @@ The inverse of a trig function is **not** the same as the reciprocal of a trig f | ----------------------------------- | ------------------------------------ | | Domain: Angle measures | Domain: Ratio of sides of a triangle | | Range: Ratio of sides of a triangle | Range: Angle Measure | -| | | +- To find the inverse of sin, you need to restrict the domain to $[-\frac{\pi}{2}] # Examples > Given $-2\tan(\pi*x + \pi) - 1$ From 43704f156bec52ef41adf28ea233fb38fb3b5069 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Mon, 7 Oct 2024 13:43:48 -0600 Subject: [PATCH 0386/1027] vault backup: 2024-10-07 13:43:48 --- education/math/MATH1060 (trig)/Graphing.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/education/math/MATH1060 (trig)/Graphing.md b/education/math/MATH1060 (trig)/Graphing.md index 120849b..ced1392 100644 --- a/education/math/MATH1060 (trig)/Graphing.md +++ b/education/math/MATH1060 (trig)/Graphing.md @@ -121,7 +121,9 @@ The inverse of a trig function is **not** the same as the reciprocal of a trig f | ----------------------------------- | ------------------------------------ | | Domain: Angle measures | Domain: Ratio of sides of a triangle | | Range: Ratio of sides of a triangle | Range: Angle Measure | -- To find the inverse of sin, you need to restrict the domain to $[-\frac{\pi}{2}] +- To find the inverse of sin, you need to restrict the domain to $[-\frac{\pi}{2}, \frac{\pi}{2}]$ +- To find the inverse of cos, you need to restrict the domain to $[0, \pi]$ +- To find the inverse of tangent, you need to restrict the domain to $(-\frac{\pi}{2}, \frac{\pi}{2})$. # Examples > Given $-2\tan(\pi*x + \pi) - 1$ From e5f56ff16229c06fb42e391ce95312f6b4bb555b Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Mon, 7 Oct 2024 13:48:49 -0600 Subject: [PATCH 0387/1027] vault backup: 2024-10-07 13:48:48 --- education/math/MATH1060 (trig)/Graphing.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/education/math/MATH1060 (trig)/Graphing.md b/education/math/MATH1060 (trig)/Graphing.md index ced1392..fbbcf91 100644 --- a/education/math/MATH1060 (trig)/Graphing.md +++ b/education/math/MATH1060 (trig)/Graphing.md @@ -125,6 +125,8 @@ The inverse of a trig function is **not** the same as the reciprocal of a trig f - To find the inverse of cos, you need to restrict the domain to $[0, \pi]$ - To find the inverse of tangent, you need to restrict the domain to $(-\frac{\pi}{2}, \frac{\pi}{2})$. +The graphs of an inverse function can be found by taking the graph of $f$, and flipping it over the line $y=x$. + # Examples > Given $-2\tan(\pi*x + \pi) - 1$ @@ -145,3 +147,7 @@ Vertical shift: $1$ | Period | $\frac{\pi}{\|\pi\|} = 1$ | | Phase shift | $\frac{-\pi}{\pi} = -1$ | | Vertical shift | $-1$ | +> Evaluate $\arccos{\frac{1}{2}}$ using the unit circle. + +Taking the inverse of the above function, we get this. Because the domain of $cos$ ranges from $0$ to $\pi$ inclusive, the answer is going to be in quadrant 1 or quadrant 2. +$$ cos(x) = \frac{1}{2} $$ \ No newline at end of file From ef0ac61db54c1aa1171ffc96d14dc4ec44918da3 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Mon, 7 Oct 2024 13:53:49 -0600 Subject: [PATCH 0388/1027] vault backup: 2024-10-07 13:53:48 --- education/math/MATH1060 (trig)/Graphing.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/education/math/MATH1060 (trig)/Graphing.md b/education/math/MATH1060 (trig)/Graphing.md index fbbcf91..229851c 100644 --- a/education/math/MATH1060 (trig)/Graphing.md +++ b/education/math/MATH1060 (trig)/Graphing.md @@ -150,4 +150,5 @@ Vertical shift: $1$ > Evaluate $\arccos{\frac{1}{2}}$ using the unit circle. Taking the inverse of the above function, we get this. Because the domain of $cos$ ranges from $0$ to $\pi$ inclusive, the answer is going to be in quadrant 1 or quadrant 2. -$$ cos(x) = \frac{1}{2} $$ \ No newline at end of file +$$ cos(a) = \frac{1}{2} $$ +When $x$ is equal to one half, the angle is equal to $\frac{\pi}{3}$. \ No newline at end of file From 27cf99c23a9d045ae4f3948fc34c93b7eaab74ae Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Mon, 7 Oct 2024 14:13:48 -0600 Subject: [PATCH 0389/1027] vault backup: 2024-10-07 14:13:48 --- IT/Hashicorp Nomad.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/IT/Hashicorp Nomad.md b/IT/Hashicorp Nomad.md index 99b1e56..4e3227c 100644 --- a/IT/Hashicorp Nomad.md +++ b/IT/Hashicorp Nomad.md @@ -1,3 +1,4 @@ + # Terminology ## Cluster Terms @@ -14,5 +15,7 @@ | task | The smallest unit of work in Nomad. Tasks are executed by task drivers like `docker` or `exec`, which allows Nomad to be flexible in the types of tasks it supports. Tasks specify their required task driver, configuration for the driver, constraints, and resources required. | | group | A series of tasks that run on the same Nomad client. | | job | The core unit of *control* for Nomad and defines the application and its configuration. It can contain one or many tasks | -| job_specification/jobspec | A job specification, also known as a jobspec. | +| job_specification/jobspec | A job specification, also known as a jobspec defines the schema for nomad jobs. This describes the type of the job, the tasks and resources necessary for the job to run, job information like which clients it can run on, or more. | | allocation | An allocation is a mapping between a task group in a job and a client node. When a job is run, Nomad will chose a client capable of running it and allocates resources on the machine for the ask(s) in the task group defined for the job. | +# Resources +https://developer.hashicorp.com/nomad/tutorials/get-started/gs-overview \ No newline at end of file From 5c6fb3911e36f57f1b6ede2d4ae3a39f08231375 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Mon, 7 Oct 2024 14:19:03 -0600 Subject: [PATCH 0390/1027] vault backup: 2024-10-07 14:19:03 --- IT/Hashicorp Nomad.md | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/IT/Hashicorp Nomad.md b/IT/Hashicorp Nomad.md index 4e3227c..701fe05 100644 --- a/IT/Hashicorp Nomad.md +++ b/IT/Hashicorp Nomad.md @@ -13,9 +13,18 @@ | Phrase | Definition | | ------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | task | The smallest unit of work in Nomad. Tasks are executed by task drivers like `docker` or `exec`, which allows Nomad to be flexible in the types of tasks it supports. Tasks specify their required task driver, configuration for the driver, constraints, and resources required. | +| task driver | Task drivers are used by nomad clients to execute a task and provide resource isolation. | | group | A series of tasks that run on the same Nomad client. | | job | The core unit of *control* for Nomad and defines the application and its configuration. It can contain one or many tasks | | job_specification/jobspec | A job specification, also known as a jobspec defines the schema for nomad jobs. This describes the type of the job, the tasks and resources necessary for the job to run, job information like which clients it can run on, or more. | | allocation | An allocation is a mapping between a task group in a job and a client node. When a job is run, Nomad will chose a client capable of running it and allocates resources on the machine for the ask(s) in the task group defined for the job. | +| workload artifact | The runnable blob to be scheduled on a task driver. Examples include docker images, raw binaries, java applications, and VMs using QEMU. | + +# Typical Workflow +Running a task is generally done by: +1. *Define a job specification for your task(s):* it'll contain info like where the workload artifact is located, ports used by the service, the number of instances desired, and more. +2. *Deploying the job*: The jobspec is submitted to Nomad and it schedules an allocation for the job on one or more clients. +3. Updating and redploying the job. # Resources -https://developer.hashicorp.com/nomad/tutorials/get-started/gs-overview \ No newline at end of file +- https://developer.hashicorp.com/nomad/tutorials/get-started/gs-overview +- https://developer.hashicorp.com/nomad/docs/drivers \ No newline at end of file From 287a95e479aa45faa9fccf32e3c4c66e31c903b9 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Mon, 7 Oct 2024 14:43:40 -0600 Subject: [PATCH 0391/1027] vault backup: 2024-10-07 14:43:40 --- IT/Hashicorp Nomad.md | 5 +++++ education/software development/ECE1400/C.md | 10 ++++++++++ 2 files changed, 15 insertions(+) diff --git a/IT/Hashicorp Nomad.md b/IT/Hashicorp Nomad.md index 701fe05..465b3b1 100644 --- a/IT/Hashicorp Nomad.md +++ b/IT/Hashicorp Nomad.md @@ -25,6 +25,11 @@ Running a task is generally done by: 1. *Define a job specification for your task(s):* it'll contain info like where the workload artifact is located, ports used by the service, the number of instances desired, and more. 2. *Deploying the job*: The jobspec is submitted to Nomad and it schedules an allocation for the job on one or more clients. 3. Updating and redploying the job. + +# Deployment +## Installing the CLI +https://developer.hashicorp.com/nomad/tutorials/get-started/gs-install#install-the-nomad-cli + # Resources - https://developer.hashicorp.com/nomad/tutorials/get-started/gs-overview - https://developer.hashicorp.com/nomad/docs/drivers \ No newline at end of file diff --git a/education/software development/ECE1400/C.md b/education/software development/ECE1400/C.md index fde8ce7..13b5156 100644 --- a/education/software development/ECE1400/C.md +++ b/education/software development/ECE1400/C.md @@ -38,6 +38,16 @@ In C, a `char` denotes a single byte of arbitrary encoding. ## Variables A variable must be declared before it is assigned. +## Arrays +### Finding the size of an array +```c +int arr[10]; +// The size of an array can be found by +// determining the number of bytes allocated total and dividing that by the size of each element in the array. +int arr_size = sizeof(arr) / sizeof(arr[0]); + +``` + # Formatting specifiers # Standard library From 2fd51d50eb3ab2233a92c6a0aaef834c705371f6 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Mon, 7 Oct 2024 14:48:40 -0600 Subject: [PATCH 0392/1027] vault backup: 2024-10-07 14:48:40 --- IT/Hashicorp Nomad.md | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/IT/Hashicorp Nomad.md b/IT/Hashicorp Nomad.md index 465b3b1..b304d31 100644 --- a/IT/Hashicorp Nomad.md +++ b/IT/Hashicorp Nomad.md @@ -30,6 +30,27 @@ Running a task is generally done by: ## Installing the CLI https://developer.hashicorp.com/nomad/tutorials/get-started/gs-install#install-the-nomad-cli +## Creating a single node cluster + + +Create a config file with in `/etc/nomad.d` named `config.hcl`: +```hcl +# https://developer.hashicorp.com/nomad/docs/configuration +# The client block configures the Nomad agent to accept jobs as assigned +# by the server. +# https://developer.hashicorp.com/nomad/docs/configuration/client +client { + enabled = true +} +server { + enabled = true + bootstrap_expect = 1 +} +# The local directory where agent state is stored. +data_dir = "/opt/nomad" +name = "YOUR_NOMAD_NAME_HERE" +``` # Resources -- https://developer.hashicorp.com/nomad/tutorials/get-started/gs-overview -- https://developer.hashicorp.com/nomad/docs/drivers \ No newline at end of file +- +- +- https://developer.hashicorp.com/nomad/docs/configuration \ No newline at end of file From f9f0da665fd0f81ccc5e98c1cb48b0922c586e90 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Mon, 7 Oct 2024 14:53:40 -0600 Subject: [PATCH 0393/1027] vault backup: 2024-10-07 14:53:40 --- IT/Hashicorp Nomad.md | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/IT/Hashicorp Nomad.md b/IT/Hashicorp Nomad.md index b304d31..e4c056d 100644 --- a/IT/Hashicorp Nomad.md +++ b/IT/Hashicorp Nomad.md @@ -32,8 +32,8 @@ https://developer.hashicorp.com/nomad/tutorials/get-started/gs-install#install-t ## Creating a single node cluster - -Create a config file with in `/etc/nomad.d` named `config.hcl`: +1. Install the `nomad` binary. +2. Create a config file with in `/etc/nomad.d` named `config.hcl`: ```hcl # https://developer.hashicorp.com/nomad/docs/configuration # The client block configures the Nomad agent to accept jobs as assigned @@ -42,14 +42,40 @@ Create a config file with in `/etc/nomad.d` named `config.hcl`: client { enabled = true } +# https://developer.hashicorp.com/nomad/docs/configuration/server server { enabled = true + # The number of server nodes to wait for before bootstrapping. bootstrap_expect = 1 } # The local directory where agent state is stored. data_dir = "/opt/nomad" name = "YOUR_NOMAD_NAME_HERE" ``` +3. Create a Linux service `nomad.service` inside `/etc/systemd/system`: +```systemd +[Unit] +Description=Nomad +Documentation=https://nomadproject.io/docs/ +Wants=network-online.target +After=network-online.target + +[Service] +ExecReload=/bin/kill -HUP $MAINPID +ExecStart=/usr/local/bin/nomad agent -config /etc/nomad.d +KillMode=process +KillSignal=SIGINT +LimitNOFILE=infinity +LimitNPROC=infinity +Restart=on-failure +RestartSec=2 +StartLimitBurst=3 +TasksMax=infinity + +[Install] +WantedBy=multi-user.target +``` +4. Start the service with `sudo systemctl enable nomad && sudo systemctl start nomad`. # Resources - - From bd9f9bc9564ded7f553a6f34d1bbee5a85a88746 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Mon, 7 Oct 2024 14:58:40 -0600 Subject: [PATCH 0394/1027] vault backup: 2024-10-07 14:58:40 --- education/software development/ECE1400/C.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/education/software development/ECE1400/C.md b/education/software development/ECE1400/C.md index 13b5156..48785ee 100644 --- a/education/software development/ECE1400/C.md +++ b/education/software development/ECE1400/C.md @@ -108,4 +108,9 @@ When asked to read a float, `scanf` searches for one of: `%e`, `%f`, and `%g` all follow the same rules for recognizing floating point numbers. If an ordinary character is included in the pattern matching string, it will be matched then discarded before proceeding to the next character. +## `rand` +```c +// `srand` creates a seed to use for rng +seed = srand(time(NULL)); +``` \ No newline at end of file From 2c92915be74d5a6bea4d05f56d804655b61bd9cf Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Mon, 7 Oct 2024 15:08:40 -0600 Subject: [PATCH 0395/1027] vault backup: 2024-10-07 15:08:40 --- education/software development/ECE1400/C.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/education/software development/ECE1400/C.md b/education/software development/ECE1400/C.md index 48785ee..9d12e93 100644 --- a/education/software development/ECE1400/C.md +++ b/education/software development/ECE1400/C.md @@ -111,6 +111,12 @@ If an ordinary character is included in the pattern matching string, it will be ## `rand` ```c // `srand` creates a seed to use for rng -seed = srand(time(NULL)); +srand(time(NULL)); + +// `rand` generates a random integer between 0 and `RAND_MAX` +// To pick a number between a particular range, you can use the modulo +// operator. +// The below example picks a number between zero and four. +int num = rand() % 4; ``` \ No newline at end of file From eccc9a9f6d6faa43279d8a276ea4f02049de285b Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Mon, 7 Oct 2024 15:13:40 -0600 Subject: [PATCH 0396/1027] vault backup: 2024-10-07 15:13:40 --- IT/Hashicorp Nomad.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IT/Hashicorp Nomad.md b/IT/Hashicorp Nomad.md index e4c056d..a5941e9 100644 --- a/IT/Hashicorp Nomad.md +++ b/IT/Hashicorp Nomad.md @@ -75,7 +75,7 @@ TasksMax=infinity [Install] WantedBy=multi-user.target ``` -4. Start the service with `sudo systemctl enable nomad && sudo systemctl start nomad`. +4. Load the service file with `sudo systemctl daemon-reload`, then start the service with `sudo systemctl enable nomad && sudo systemctl start nomad`. # Resources - - From 115de31ebbda82495d9a996f4ce1ea639182ce67 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Mon, 7 Oct 2024 15:18:40 -0600 Subject: [PATCH 0397/1027] vault backup: 2024-10-07 15:18:40 --- IT/Hashicorp Nomad.md | 1 + 1 file changed, 1 insertion(+) diff --git a/IT/Hashicorp Nomad.md b/IT/Hashicorp Nomad.md index a5941e9..a0c6c02 100644 --- a/IT/Hashicorp Nomad.md +++ b/IT/Hashicorp Nomad.md @@ -16,6 +16,7 @@ | task driver | Task drivers are used by nomad clients to execute a task and provide resource isolation. | | group | A series of tasks that run on the same Nomad client. | | job | The core unit of *control* for Nomad and defines the application and its configuration. It can contain one or many tasks | +| service job | A | | job_specification/jobspec | A job specification, also known as a jobspec defines the schema for nomad jobs. This describes the type of the job, the tasks and resources necessary for the job to run, job information like which clients it can run on, or more. | | allocation | An allocation is a mapping between a task group in a job and a client node. When a job is run, Nomad will chose a client capable of running it and allocates resources on the machine for the ask(s) in the task group defined for the job. | | workload artifact | The runnable blob to be scheduled on a task driver. Examples include docker images, raw binaries, java applications, and VMs using QEMU. | From 5bf191f0de4a8d1dd1c59d8c45946b00520d0ddf Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Mon, 7 Oct 2024 15:34:03 -0600 Subject: [PATCH 0398/1027] vault backup: 2024-10-07 15:34:03 --- IT/Hashicorp Nomad.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/IT/Hashicorp Nomad.md b/IT/Hashicorp Nomad.md index a0c6c02..8c46e9f 100644 --- a/IT/Hashicorp Nomad.md +++ b/IT/Hashicorp Nomad.md @@ -16,7 +16,8 @@ | task driver | Task drivers are used by nomad clients to execute a task and provide resource isolation. | | group | A series of tasks that run on the same Nomad client. | | job | The core unit of *control* for Nomad and defines the application and its configuration. It can contain one or many tasks | -| service job | A | +| service job | A long lived service that runs until explicitly stopped | +| batch job | Short lived jobs that run until they exit successfully | | job_specification/jobspec | A job specification, also known as a jobspec defines the schema for nomad jobs. This describes the type of the job, the tasks and resources necessary for the job to run, job information like which clients it can run on, or more. | | allocation | An allocation is a mapping between a task group in a job and a client node. When a job is run, Nomad will chose a client capable of running it and allocates resources on the machine for the ask(s) in the task group defined for the job. | | workload artifact | The runnable blob to be scheduled on a task driver. Examples include docker images, raw binaries, java applications, and VMs using QEMU. | From 37580d6c000870e0d8dc35c2bf058396687b1f2f Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 8 Oct 2024 11:24:13 -0600 Subject: [PATCH 0399/1027] vault backup: 2024-10-08 11:24:13 --- education/english/ENGL2010/Addiction Analysis.md | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 education/english/ENGL2010/Addiction Analysis.md diff --git a/education/english/ENGL2010/Addiction Analysis.md b/education/english/ENGL2010/Addiction Analysis.md new file mode 100644 index 0000000..a73fa64 --- /dev/null +++ b/education/english/ENGL2010/Addiction Analysis.md @@ -0,0 +1,11 @@ + + + +# Ethos (why should you listen to me) + +# Logos (logic) +| Claim | Elaboration | Link to source | +| ---------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| Addiction treatment options aren't embraced by the public because treating addiction is seen as indulging in weakness rather than "curing" addiction | The data shows that we could save many lives by expanding [medication-assisted treatments](https://www.vox.com/science-and-health/2017/7/20/15937896/medication-assisted-treatment-methadone-buprenorphine-naltrexone) and adopting harm reduction policies like [needle exchange programs](https://www.cdc.gov/policy/hst/hi5/cleansyringes/index.html). | [link](https://www.vox.com/the-big-idea/2018/3/5/17080470/addiction-opioids-moral-blame-choices-medication-crutches-philosophy#:~:text=The%20data%20shows,than%20%E2%80%9Ccuring%E2%80%9D%20it.) | +| | | | +# Pathos (emotion) From b0a32d6017bc780110ba71393eaa67a558c32ac5 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 8 Oct 2024 11:29:13 -0600 Subject: [PATCH 0400/1027] vault backup: 2024-10-08 11:29:13 --- education/english/ENGL2010/Addiction Analysis.md | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/education/english/ENGL2010/Addiction Analysis.md b/education/english/ENGL2010/Addiction Analysis.md index a73fa64..3cc805d 100644 --- a/education/english/ENGL2010/Addiction Analysis.md +++ b/education/english/ENGL2010/Addiction Analysis.md @@ -4,8 +4,12 @@ # Ethos (why should you listen to me) # Logos (logic) -| Claim | Elaboration | Link to source | -| ---------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| Addiction treatment options aren't embraced by the public because treating addiction is seen as indulging in weakness rather than "curing" addiction | The data shows that we could save many lives by expanding [medication-assisted treatments](https://www.vox.com/science-and-health/2017/7/20/15937896/medication-assisted-treatment-methadone-buprenorphine-naltrexone) and adopting harm reduction policies like [needle exchange programs](https://www.cdc.gov/policy/hst/hi5/cleansyringes/index.html). | [link](https://www.vox.com/the-big-idea/2018/3/5/17080470/addiction-opioids-moral-blame-choices-medication-crutches-philosophy#:~:text=The%20data%20shows,than%20%E2%80%9Ccuring%E2%80%9D%20it.) | -| | | | +| Claim | Elaboration | Link to source | +| ---------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Addiction treatment options aren't embraced by the public because treating addiction is seen as indulging in weakness rather than "curing" addiction | - The data shows that we could save many lives by expanding [medication-assisted treatments](https://www.vox.com/science-and-health/2017/7/20/15937896/medication-assisted-treatment-methadone-buprenorphine-naltrexone) and adopting harm reduction policies like [needle exchange programs](https://www.cdc.gov/policy/hst/hi5/cleansyringes/index.html).
-Methadone and buprenorphine, the most effective medication-assisted treatments, are [“crutches,”](https://www.nbcnewyork.com/news/local/Methadone-Judge-Rule-Father-Blame-Lepolszki-Son-Overdose-Heroin-Addict-Ruling-I-Team-Investigation-273213211.html) in the words of felony treatment court judge Frank Gulotta Jr.; they are [“just substituting one opioid for another,”](https://www.vox.com/policy-and-politics/2017/5/11/15613258/tom-price-opioid-epidemic) according to former Health and Human Services Secretary Tom Price | [link](https://www.vox.com/the-big-idea/2018/3/5/17080470/addiction-opioids-moral-blame-choices-medication-crutches-philosophy#:~:text=The%20data%20shows,than%20%E2%80%9Ccuring%E2%80%9D%20it) | +| | | | +| | | | # Pathos (emotion) +| Claim | Elaboration | Link to Source | +| ------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------- | +| - People view addiction as a moral failure | - Most of us have been trained to use more forgiving language when talking about addiction. We call it a disease. We say that people with addiction should be helped, not blamed. But deep down, many of us still have trouble avoiding the thought that they could stop using if they just tried harder. | | \ No newline at end of file From e2c3bb02926a17430f1bdaf1cce71460df9bc2b9 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 8 Oct 2024 11:34:13 -0600 Subject: [PATCH 0401/1027] vault backup: 2024-10-08 11:34:13 --- .../english/ENGL2010/Addiction Analysis.md | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/education/english/ENGL2010/Addiction Analysis.md b/education/english/ENGL2010/Addiction Analysis.md index 3cc805d..3b39c0e 100644 --- a/education/english/ENGL2010/Addiction Analysis.md +++ b/education/english/ENGL2010/Addiction Analysis.md @@ -1,15 +1,15 @@ -# Ethos (why should you listen to me) -# Logos (logic) -| Claim | Elaboration | Link to source | -| ---------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Addiction treatment options aren't embraced by the public because treating addiction is seen as indulging in weakness rather than "curing" addiction | - The data shows that we could save many lives by expanding [medication-assisted treatments](https://www.vox.com/science-and-health/2017/7/20/15937896/medication-assisted-treatment-methadone-buprenorphine-naltrexone) and adopting harm reduction policies like [needle exchange programs](https://www.cdc.gov/policy/hst/hi5/cleansyringes/index.html).
-Methadone and buprenorphine, the most effective medication-assisted treatments, are [“crutches,”](https://www.nbcnewyork.com/news/local/Methadone-Judge-Rule-Father-Blame-Lepolszki-Son-Overdose-Heroin-Addict-Ruling-I-Team-Investigation-273213211.html) in the words of felony treatment court judge Frank Gulotta Jr.; they are [“just substituting one opioid for another,”](https://www.vox.com/policy-and-politics/2017/5/11/15613258/tom-price-opioid-epidemic) according to former Health and Human Services Secretary Tom Price | [link](https://www.vox.com/the-big-idea/2018/3/5/17080470/addiction-opioids-moral-blame-choices-medication-crutches-philosophy#:~:text=The%20data%20shows,than%20%E2%80%9Ccuring%E2%80%9D%20it) | -| | | | -| | | | -# Pathos (emotion) -| Claim | Elaboration | Link to Source | -| ------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------- | -| - People view addiction as a moral failure | - Most of us have been trained to use more forgiving language when talking about addiction. We call it a disease. We say that people with addiction should be helped, not blamed. But deep down, many of us still have trouble avoiding the thought that they could stop using if they just tried harder. | | \ No newline at end of file +| Claim | Elaboration | Link to source | +| ---------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Addiction treatment options aren't embraced by the public because treating addiction is seen as indulging in weakness rather than "curing" addiction | - The data shows that we could save many lives by expanding [medication-assisted treatments](https://www.vox.com/science-and-health/2017/7/20/15937896/medication-assisted-treatment-methadone-buprenorphine-naltrexone) and adopting harm reduction policies like [needle exchange programs](https://www.cdc.gov/policy/hst/hi5/cleansyringes/index.html).
-Methadone and buprenorphine, the most effective medication-assisted treatments, are [“crutches,”](https://www.nbcnewyork.com/news/local/Methadone-Judge-Rule-Father-Blame-Lepolszki-Son-Overdose-Heroin-Addict-Ruling-I-Team-Investigation-273213211.html) in the words of felony treatment court judge Frank Gulotta Jr.; they are [“just substituting one opioid for another,”](https://www.vox.com/policy-and-politics/2017/5/11/15613258/tom-price-opioid-epidemic) according to former Health and Human Services Secretary Tom Price
- | [link](https://www.vox.com/the-big-idea/2018/3/5/17080470/addiction-opioids-moral-blame-choices-medication-crutches-philosophy#:~:text=The%20data%20shows,than%20%E2%80%9Ccuring%E2%80%9D%20i) | +| - people view addiction as a moral failure | - Most of us have been trained to use more forgiving language when talking about addiction. We call it a disease. We say that people with addiction should be helped, not blamed. But deep down, many of us still have trouble avoiding the thought that they could stop using if they just tried harder. | | +- People view addiction as a moral failure + - Addiction treatment options aren't embraced by the public because treating addiction is seen as indulging in weakness rather than "curing" addiction + - "Most of us have been trained to use more forgiving language when talking about addiction. We call it a disease. We say that people with addiction should be helped, not blamed. But deep down, many of us still have trouble avoiding the thought that they could stop using if they just tried harder. " + - "There’s a part of us that can’t help but see addiction as a symptom of weak character and bad judgment." +- The view of addiction as a moral failure is causing real damage to the world + - "The stigma against addiction is “the single biggest reason America is failing in its response to the opioid epidemic,” [Vox’s German Lopez concluded](https://www.vox.com/science-and-health/2017/12/18/16635910/opioid-epidemic-lessons) after a year of reporting on the crisis"" + - \ No newline at end of file From 25a4ce2cf467ab8fdcb0f546ece3b402cb0679ec Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 8 Oct 2024 11:39:13 -0600 Subject: [PATCH 0402/1027] vault backup: 2024-10-08 11:39:13 --- education/english/ENGL2010/Addiction Analysis.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/education/english/ENGL2010/Addiction Analysis.md b/education/english/ENGL2010/Addiction Analysis.md index 3b39c0e..674e8a1 100644 --- a/education/english/ENGL2010/Addiction Analysis.md +++ b/education/english/ENGL2010/Addiction Analysis.md @@ -12,4 +12,12 @@ - "There’s a part of us that can’t help but see addiction as a symptom of weak character and bad judgment." - The view of addiction as a moral failure is causing real damage to the world - "The stigma against addiction is “the single biggest reason America is failing in its response to the opioid epidemic,” [Vox’s German Lopez concluded](https://www.vox.com/science-and-health/2017/12/18/16635910/opioid-epidemic-lessons) after a year of reporting on the crisis"" - - \ No newline at end of file + - "Lives depend on where we come down. The stigma against addiction owes its stubborn tenacity to a specific, and flawed, philosophical view of the mind, a misconception so seductive that it ensnared Socrates in the fifth century BC." +- People view addiction as a moral failure because of the subconscious societal belief that our actions always reflect our beliefs and values + - "We tend to view addiction as a moral failure because we are in the grip of a simple but misleading answer to one of the oldest questions of philosophy: Do people always do what they think is best? In other words, do our actions always reflect our beliefs and values? When someone with addiction chooses to take drugs, does this show us what she truly cares about — or might something more complicated be going on?" + - Plato describes acting against one's best judgement as "Akrasia" + - "At one point their discussion turns to the topic of what the Greeks called akrasia: acting against one’s best judgment." + - "Akrasia is a fancy name for an all-too-common experience. I know I should go to the gym, but I watch Netflix instead. You know you’ll enjoy dinner more if you stop eating the bottomless chips, but you keep munching nevertheless." + - This makes the article more relatable + - Addiction intensifies the disconnect between judgement and action + - "Here’s the testimony of one person with addiction, reported in Maia Szalavitz’s book [_Unbroken Brain_](https://books.google.com/books?id=4yJ3CgAAQBAJ&lpg=PP1&pg=PA114#v=onepage&q&f=false): “I can remember many, many times driving down to the projects telling myself, ‘You don’t want to do this! You don’t want to do this!’ But I’d do it anyway.” \ No newline at end of file From 632e7438cb190a70e1abb7ddc6b07a7843952005 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 8 Oct 2024 11:57:15 -0600 Subject: [PATCH 0403/1027] vault backup: 2024-10-08 11:57:15 --- education/english/ENGL2010/Addiction Analysis.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/education/english/ENGL2010/Addiction Analysis.md b/education/english/ENGL2010/Addiction Analysis.md index 674e8a1..af682b5 100644 --- a/education/english/ENGL2010/Addiction Analysis.md +++ b/education/english/ENGL2010/Addiction Analysis.md @@ -19,5 +19,10 @@ - "At one point their discussion turns to the topic of what the Greeks called akrasia: acting against one’s best judgment." - "Akrasia is a fancy name for an all-too-common experience. I know I should go to the gym, but I watch Netflix instead. You know you’ll enjoy dinner more if you stop eating the bottomless chips, but you keep munching nevertheless." - This makes the article more relatable + - Socrates felt that this didn't make sense, arguing that actions always reveal true beliefs + - "Socrates clearly never went to a restaurant with unlimited chips. But he has a point. To figure out what a person’s true priorities are, we usually look to the choices they make. (“Actions speak louder than words.”) When a person binges on TV, munches chips, or gets high despite the consequences, Socrates would infer that they must care more about indulging now than about avoiding those consequences — whatever they may _say_ to the contrary" + - He argues that people simply have bad judgement, and that they aren't acting against their better judgement. - Addiction intensifies the disconnect between judgement and action - - "Here’s the testimony of one person with addiction, reported in Maia Szalavitz’s book [_Unbroken Brain_](https://books.google.com/books?id=4yJ3CgAAQBAJ&lpg=PP1&pg=PA114#v=onepage&q&f=false): “I can remember many, many times driving down to the projects telling myself, ‘You don’t want to do this! You don’t want to do this!’ But I’d do it anyway.” \ No newline at end of file + - "Here’s the testimony of one person with addiction, reported in Maia Szalavitz’s book [_Unbroken Brain_](https://books.google.com/books?id=4yJ3CgAAQBAJ&lpg=PP1&pg=PA114#v=onepage&q&f=false): “I can remember many, many times driving down to the projects telling myself, ‘You don’t want to do this! You don’t want to do this!’ But I’d do it anyway.” + - Ethos + - \ No newline at end of file From 3d6aea9e8ebc618cb148f7259a5e072e4dc72514 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 8 Oct 2024 12:22:15 -0600 Subject: [PATCH 0404/1027] vault backup: 2024-10-08 12:22:15 --- education/nutrition/Carbohydrates.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/education/nutrition/Carbohydrates.md b/education/nutrition/Carbohydrates.md index 5da4f45..943db35 100644 --- a/education/nutrition/Carbohydrates.md +++ b/education/nutrition/Carbohydrates.md @@ -107,4 +107,10 @@ Complex carbs have 3 or more monosaccharides bonded together # Hyper/Hypoglycemia - Hyperglycemia results in abnormally elevated blood glucose levels -- Hypoglycemia results in abnormally low blood glucose levels \ No newline at end of file +- Hypoglycemia results in abnormally low blood glucose levels + +# Diabetes +## Type 1 +An autoimmune disorder, type 1 diabetes prevents the body from releasing insulin. +## Type 2 +The body is able to release insulin, but the cells don't respond to it \ No newline at end of file From 4096a29ab09302b080a19b6bff8ceeabac79b4b3 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 8 Oct 2024 12:27:15 -0600 Subject: [PATCH 0405/1027] vault backup: 2024-10-08 12:27:15 --- education/nutrition/Lipids.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 education/nutrition/Lipids.md diff --git a/education/nutrition/Lipids.md b/education/nutrition/Lipids.md new file mode 100644 index 0000000..758f714 --- /dev/null +++ b/education/nutrition/Lipids.md @@ -0,0 +1,5 @@ +Lipids are a class of nutrients that do not dissolve in water. +- They will dissolve in organic solv +# Triglycerides +# Phospholipids +# Sterols \ No newline at end of file From 120064e3a675c441906e732741225dc663fef7ba Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 8 Oct 2024 12:32:15 -0600 Subject: [PATCH 0406/1027] vault backup: 2024-10-08 12:32:15 --- education/nutrition/Lipids.md | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/education/nutrition/Lipids.md b/education/nutrition/Lipids.md index 758f714..a4522f7 100644 --- a/education/nutrition/Lipids.md +++ b/education/nutrition/Lipids.md @@ -1,5 +1,29 @@ -Lipids are a class of nutrients that do not dissolve in water. -- They will dissolve in organic solv +- **Lipids** are a class of nutrients that do not dissolve in water. + - They will dissolve in organic solvents +- Oil is less dense than water, so it will rise to the top of a solution +- Major functions of lipids in the body include + - Providing and storing energy + - forming and maintaining cell membranes + - producing steroid hormoes + - insulating the body + - cushioning the body against bumps and blows + - forming body contours + - **absorbing fat soluble vitamins and phytochemicals** +## Fatty Acids +A fatty acid is a hydrocarbon chain found in lipids; one end of the chain forms a carboxylic acid, and one end forms a methyl group. +- Short chain fatty acids have 2 to 4 carbons +- Medium chain fatty acids have 6 to 12 acids +- Long chan acids have 14 to 24 carbons +- Fatty acids are identified by: + - The number of carbon atoms + - The type of bond between carbon atoms + +- **Saturated fatty acid (SFA)** Every single carbon atom is filled with hydrogen atoms +- **Unsaturated fatty acid** is a fatty acid that is missing hydrogen atoms and has one or more double bonds within the carbon chain + - **Monounsaturated** (MUFA) + - Has one double bond within the carbon chain + - **Polyunsaturated** (PUFA) + - Fatty acid that has two or more bonds within the carbon chain # Triglycerides # Phospholipids # Sterols \ No newline at end of file From 2dee2be1b3f1935b994863bf46fca0561ce2ab49 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 8 Oct 2024 12:37:15 -0600 Subject: [PATCH 0407/1027] vault backup: 2024-10-08 12:37:15 --- education/nutrition/Lipids.md | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/education/nutrition/Lipids.md b/education/nutrition/Lipids.md index a4522f7..89414b6 100644 --- a/education/nutrition/Lipids.md +++ b/education/nutrition/Lipids.md @@ -4,7 +4,7 @@ - Major functions of lipids in the body include - Providing and storing energy - forming and maintaining cell membranes - - producing steroid hormoes + - producing steroid hormones - insulating the body - cushioning the body against bumps and blows - forming body contours @@ -24,6 +24,15 @@ A fatty acid is a hydrocarbon chain found in lipids; one end of the chain forms - Has one double bond within the carbon chain - **Polyunsaturated** (PUFA) - Fatty acid that has two or more bonds within the carbon chain + +- **Essential fatty acids** are fatty acids that must be supplied by the diet + - **Linoleic acid** - 18 carbon omega-6 fatty acid found in vegetable oils + - **Alpha-linolenic acid** - 18 carbon omega-3 fatty acid, found in flaxseed, walnuts + - Precursor for + - Eicosapentaonoic acid (EPA) - 20 carbons + - Docosahexaenoic acid (DHA): 22 carbons + - Both acids are found mainly in fatty fish + - Essential fatty acids are needed for growth and healthy cell membranes, especially in the brain. # Triglycerides # Phospholipids # Sterols \ No newline at end of file From 9428dcc5d487ad716c0d2b33350a524559baf79d Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 8 Oct 2024 12:42:15 -0600 Subject: [PATCH 0408/1027] vault backup: 2024-10-08 12:42:15 --- education/nutrition/Lipids.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/education/nutrition/Lipids.md b/education/nutrition/Lipids.md index 89414b6..02b2184 100644 --- a/education/nutrition/Lipids.md +++ b/education/nutrition/Lipids.md @@ -22,8 +22,15 @@ A fatty acid is a hydrocarbon chain found in lipids; one end of the chain forms - **Unsaturated fatty acid** is a fatty acid that is missing hydrogen atoms and has one or more double bonds within the carbon chain - **Monounsaturated** (MUFA) - Has one double bond within the carbon chain + - Sources include: + - **Canola oil** + - **Olive oil** - **Polyunsaturated** (PUFA) - Fatty acid that has two or more bonds within the carbon chain + - Sources include: + - **Soybean oil** + - Corn oil + - Sunflower oil - **Essential fatty acids** are fatty acids that must be supplied by the diet - **Linoleic acid** - 18 carbon omega-6 fatty acid found in vegetable oils From 1157f951b5629d8832fb8f980e71c491dc752285 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 8 Oct 2024 12:47:15 -0600 Subject: [PATCH 0409/1027] vault backup: 2024-10-08 12:47:15 --- education/nutrition/Lipids.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/education/nutrition/Lipids.md b/education/nutrition/Lipids.md index 02b2184..bed1dc4 100644 --- a/education/nutrition/Lipids.md +++ b/education/nutrition/Lipids.md @@ -25,13 +25,23 @@ A fatty acid is a hydrocarbon chain found in lipids; one end of the chain forms - Sources include: - **Canola oil** - **Olive oil** + - **Avacados** + - Nuts + - Seeds + - Peanut butter - **Polyunsaturated** (PUFA) - Fatty acid that has two or more bonds within the carbon chain - Sources include: - **Soybean oil** + - **Fatty fish** + - **Flax seed** + - **Walnuts** - Corn oil - Sunflower oil - +- Most naturally occurring fatty acids are cis fatty acids + - Hydrogen atoms of the double bonded carbon are on the same side of the hydrocarbon atom +- **Trans fats** are unsaturated fatty acids that have a trans double bond. + - Hydrogen atoms of the double bonded carbons are on the opposite side of the hydrocarbon chain - **Essential fatty acids** are fatty acids that must be supplied by the diet - **Linoleic acid** - 18 carbon omega-6 fatty acid found in vegetable oils - **Alpha-linolenic acid** - 18 carbon omega-3 fatty acid, found in flaxseed, walnuts From a322016ef4e729794f2049d3d8d7273bb7e12674 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 8 Oct 2024 12:52:15 -0600 Subject: [PATCH 0410/1027] vault backup: 2024-10-08 12:52:15 --- education/nutrition/Lipids.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/education/nutrition/Lipids.md b/education/nutrition/Lipids.md index bed1dc4..ae95668 100644 --- a/education/nutrition/Lipids.md +++ b/education/nutrition/Lipids.md @@ -42,6 +42,10 @@ A fatty acid is a hydrocarbon chain found in lipids; one end of the chain forms - Hydrogen atoms of the double bonded carbon are on the same side of the hydrocarbon atom - **Trans fats** are unsaturated fatty acids that have a trans double bond. - Hydrogen atoms of the double bonded carbons are on the opposite side of the hydrocarbon chain + - **Hydrogenation** is the food manufacturing process that adds hydrogen atoms to liquid vegetable oil, forming trans fats. + - Can be stored for longer periods because they are less likely to undergo oxidation + - Raise "bad" cholesterol levels in the blood + - Increases risk of heart disease - **Essential fatty acids** are fatty acids that must be supplied by the diet - **Linoleic acid** - 18 carbon omega-6 fatty acid found in vegetable oils - **Alpha-linolenic acid** - 18 carbon omega-3 fatty acid, found in flaxseed, walnuts From bbd2c89e60b4af0ecafaaad8bace4a3850828ca2 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 8 Oct 2024 12:57:15 -0600 Subject: [PATCH 0411/1027] vault backup: 2024-10-08 12:57:15 --- education/nutrition/Lipids.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/education/nutrition/Lipids.md b/education/nutrition/Lipids.md index ae95668..2a39375 100644 --- a/education/nutrition/Lipids.md +++ b/education/nutrition/Lipids.md @@ -55,5 +55,9 @@ A fatty acid is a hydrocarbon chain found in lipids; one end of the chain forms - Both acids are found mainly in fatty fish - Essential fatty acids are needed for growth and healthy cell membranes, especially in the brain. # Triglycerides +A lipid that has three fatty acids attached to a three-carbon compound called glycerol +- Comprises 95% of lipids in food and body +- **Glycerol** is a three carbon alcohol that forms the backbone of fatty acids +- # Phospholipids # Sterols \ No newline at end of file From 5016c247ee1e8f123bc7794443bb342ac0cee2e5 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 8 Oct 2024 13:02:15 -0600 Subject: [PATCH 0412/1027] vault backup: 2024-10-08 13:02:15 --- education/nutrition/Lipids.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/education/nutrition/Lipids.md b/education/nutrition/Lipids.md index 2a39375..130a7cc 100644 --- a/education/nutrition/Lipids.md +++ b/education/nutrition/Lipids.md @@ -25,7 +25,7 @@ A fatty acid is a hydrocarbon chain found in lipids; one end of the chain forms - Sources include: - **Canola oil** - **Olive oil** - - **Avacados** + - **Avocados** - Nuts - Seeds - Peanut butter @@ -48,7 +48,7 @@ A fatty acid is a hydrocarbon chain found in lipids; one end of the chain forms - Increases risk of heart disease - **Essential fatty acids** are fatty acids that must be supplied by the diet - **Linoleic acid** - 18 carbon omega-6 fatty acid found in vegetable oils - - **Alpha-linolenic acid** - 18 carbon omega-3 fatty acid, found in flaxseed, walnuts + - **Alpha-linolenic acid** - 18 carbon omega-3 unsaturated fatty acid, found in flaxseed, walnuts - Precursor for - Eicosapentaonoic acid (EPA) - 20 carbons - Docosahexaenoic acid (DHA): 22 carbons From bc996ec8af3e3401162ab520e605c148e39cb271 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 8 Oct 2024 13:07:15 -0600 Subject: [PATCH 0413/1027] vault backup: 2024-10-08 13:07:15 --- education/nutrition/Lipids.md | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/education/nutrition/Lipids.md b/education/nutrition/Lipids.md index 130a7cc..092660c 100644 --- a/education/nutrition/Lipids.md +++ b/education/nutrition/Lipids.md @@ -60,4 +60,16 @@ A lipid that has three fatty acids attached to a three-carbon compound called gl - **Glycerol** is a three carbon alcohol that forms the backbone of fatty acids - # Phospholipids -# Sterols \ No newline at end of file +A phospholipid is a type of lipid needed for the flexibility, structure, and makeup of the cell membranes and for proper functioning of the never cells. +- Partially water soluble + - Hydrophilic + - Part that attracts water + - Hydrophobic + - Part that repels water and attracts fat +- Can serve as an emulsifier + - Helps water soluble and water insoluble compounds mix with each other +# Sterols +Sterols are lipids that have a more chemically complex structure than a triglyceride or fatty acid +- -ol suffix: Attached to an alcohol +**Cholesterol** is a lipid found in animal foods: precursor for steroid hormones, **bile**, and vitamin D. +- Found in \ No newline at end of file From 2a0b41bad2fdd23bba30f95cfdc9de7588699511 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 8 Oct 2024 13:46:07 -0600 Subject: [PATCH 0414/1027] vault backup: 2024-10-08 13:46:07 --- education/nutrition/Lipids.md | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/education/nutrition/Lipids.md b/education/nutrition/Lipids.md index 092660c..a2ac019 100644 --- a/education/nutrition/Lipids.md +++ b/education/nutrition/Lipids.md @@ -72,4 +72,15 @@ A phospholipid is a type of lipid needed for the flexibility, structure, and mak Sterols are lipids that have a more chemically complex structure than a triglyceride or fatty acid - -ol suffix: Attached to an alcohol **Cholesterol** is a lipid found in animal foods: precursor for steroid hormones, **bile**, and vitamin D. -- Found in \ No newline at end of file +- Found in: + - Egg yolk + - Liver + - Meat + - Poultry + - Dairy products + +# Lipases +Lipases are enzymes that break down lipids +- **Cholecystokinin** is a hormone that stimulates the gallbladder to release bile and the pancreas to secrete digestive juices + - Bile helps with the emulsification of and digestion of fat. +- Secretin is a hormone that stimulates the liver to produce bile and the pancreas to secrete bicarbonate rich pancreatic juice \ No newline at end of file From 7f1a463b111aa9f91ee84f0f0192e45b264e4223 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 8 Oct 2024 20:43:52 -0600 Subject: [PATCH 0415/1027] vault backup: 2024-10-08 20:43:52 --- education/software development/ECE1400/Chapter 8 Exercises.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 education/software development/ECE1400/Chapter 8 Exercises.md diff --git a/education/software development/ECE1400/Chapter 8 Exercises.md b/education/software development/ECE1400/Chapter 8 Exercises.md new file mode 100644 index 0000000..5934c97 --- /dev/null +++ b/education/software development/ECE1400/Chapter 8 Exercises.md @@ -0,0 +1,3 @@ +> 1. We discussed using the expression `sizeof(a) / sizeof(a[0]` to calculate the number of elements in an array. The expression `sizeof(a) / sizeof(t)` where `t` is the type of `a`'s elements would also work, but it's considered an inferior technique. Why? + +> 3. Write a declaration of \ No newline at end of file From 86345fe6767f58e016f9c0ebe9df1c7dd59684f1 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 8 Oct 2024 20:48:52 -0600 Subject: [PATCH 0416/1027] vault backup: 2024-10-08 20:48:52 --- .../ECE1400/Chapter 8 Exercises.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/education/software development/ECE1400/Chapter 8 Exercises.md b/education/software development/ECE1400/Chapter 8 Exercises.md index 5934c97..f755f9d 100644 --- a/education/software development/ECE1400/Chapter 8 Exercises.md +++ b/education/software development/ECE1400/Chapter 8 Exercises.md @@ -1,3 +1,13 @@ > 1. We discussed using the expression `sizeof(a) / sizeof(a[0]` to calculate the number of elements in an array. The expression `sizeof(a) / sizeof(t)` where `t` is the type of `a`'s elements would also work, but it's considered an inferior technique. Why? -> 3. Write a declaration of \ No newline at end of file +> 3. Write a declaration of an array named weekend containing seven `bool` values. Include an initialize that makes the first and last values `true`; all other values should be `false`. + +> 6. Calculators, watches, and other electronic devices often rely on 7 segment displays for numerical output. To form a digit, such devices turn on some of the seven segments while leaving others off. +> +> Here's what the array might look like, with each row representing one digit: +``` +const int segments[10][7] = {{1, 1, 1, 1, 1, 1, 0}, ...}; +``` +> I've given you the first row of the initializer, fill in the rest. + +> 1. Write a declaration for an 8x8 `char` array named `chess_board`. Include an initializer that puts the follwoing data into the array, one char \ No newline at end of file From d3deb01e86421abc8ea724cd8b3e3ac450e38312 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 8 Oct 2024 20:55:00 -0600 Subject: [PATCH 0417/1027] vault backup: 2024-10-08 20:55:00 --- education/software development/ECE1400/Chapter 8 Exercises.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/education/software development/ECE1400/Chapter 8 Exercises.md b/education/software development/ECE1400/Chapter 8 Exercises.md index f755f9d..093b1b5 100644 --- a/education/software development/ECE1400/Chapter 8 Exercises.md +++ b/education/software development/ECE1400/Chapter 8 Exercises.md @@ -10,4 +10,4 @@ const int segments[10][7] = {{1, 1, 1, 1, 1, 1, 0}, ...}; ``` > I've given you the first row of the initializer, fill in the rest. -> 1. Write a declaration for an 8x8 `char` array named `chess_board`. Include an initializer that puts the follwoing data into the array, one char \ No newline at end of file +>10. Write a declaration for an 8x8 `char` array named `chess_board`. Include an initializer that puts the following data into the array, one char \ No newline at end of file From 20c06eb3edf56c2fe62a06b3bff709c0db7b8a05 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 8 Oct 2024 21:00:01 -0600 Subject: [PATCH 0418/1027] vault backup: 2024-10-08 21:00:01 --- .../software development/ECE1400/Chapter 8 Exercises.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/education/software development/ECE1400/Chapter 8 Exercises.md b/education/software development/ECE1400/Chapter 8 Exercises.md index 093b1b5..c72d8e0 100644 --- a/education/software development/ECE1400/Chapter 8 Exercises.md +++ b/education/software development/ECE1400/Chapter 8 Exercises.md @@ -10,4 +10,7 @@ const int segments[10][7] = {{1, 1, 1, 1, 1, 1, 0}, ...}; ``` > I've given you the first row of the initializer, fill in the rest. ->10. Write a declaration for an 8x8 `char` array named `chess_board`. Include an initializer that puts the following data into the array, one char \ No newline at end of file +>10. Write a declaration for an 8x8 `char` array named `chess_board`. Include an initializer that puts the following data into the array, one character per array element: +\[omitted] + +> 11. Write a program fragment that declares an 8x8 `char` array named `checker_board` and then uses a loop to store the following data into the array (one character per array element). \ No newline at end of file From 75f65b24bb4b085dd4487408fa1cda1463cc8913 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 8 Oct 2024 21:05:01 -0600 Subject: [PATCH 0419/1027] vault backup: 2024-10-08 21:05:01 --- .../software development/ECE1400/Chapter 8 Exercises.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/education/software development/ECE1400/Chapter 8 Exercises.md b/education/software development/ECE1400/Chapter 8 Exercises.md index c72d8e0..d5b88eb 100644 --- a/education/software development/ECE1400/Chapter 8 Exercises.md +++ b/education/software development/ECE1400/Chapter 8 Exercises.md @@ -1,8 +1,11 @@ > 1. We discussed using the expression `sizeof(a) / sizeof(a[0]` to calculate the number of elements in an array. The expression `sizeof(a) / sizeof(t)` where `t` is the type of `a`'s elements would also work, but it's considered an inferior technique. Why? +Answer: +Using the type of the array's first element means that if you change the type of an array, it won't break the code that calculates the number of elements. + > 3. Write a declaration of an array named weekend containing seven `bool` values. Include an initialize that makes the first and last values `true`; all other values should be `false`. -> 6. Calculators, watches, and other electronic devices often rely on 7 segment displays for numerical output. To form a digit, such devices turn on some of the seven segments while leaving others off. +> 4. Calculators, watches, and other electronic devices often rely on 7 segment displays for numerical output. To form a digit, such devices turn on some of the seven segments while leaving others off. > > Here's what the array might look like, with each row representing one digit: ``` From 1622311f8fd78e89e8a65245dcc2187c3bcd2ccd Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 8 Oct 2024 21:20:19 -0600 Subject: [PATCH 0420/1027] vault backup: 2024-10-08 21:20:19 --- .../ECE1400/Chapter 8 Exercises.md | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/education/software development/ECE1400/Chapter 8 Exercises.md b/education/software development/ECE1400/Chapter 8 Exercises.md index d5b88eb..f45d832 100644 --- a/education/software development/ECE1400/Chapter 8 Exercises.md +++ b/education/software development/ECE1400/Chapter 8 Exercises.md @@ -5,14 +5,28 @@ Using the type of the array's first element means that if you change the type of > 3. Write a declaration of an array named weekend containing seven `bool` values. Include an initialize that makes the first and last values `true`; all other values should be `false`. -> 4. Calculators, watches, and other electronic devices often rely on 7 segment displays for numerical output. To form a digit, such devices turn on some of the seven segments while leaving others off. +Answer: +```c +bool weekend[] = {true, [1 ... 5] = false, true}; +``` + +> 5. Calculators, watches, and other electronic devices often rely on 7 segment displays for numerical output. To form a digit, such devices turn on some of the seven segments while leaving others off. > > Here's what the array might look like, with each row representing one digit: -``` +```c const int segments[10][7] = {{1, 1, 1, 1, 1, 1, 0}, ...}; ``` > I've given you the first row of the initializer, fill in the rest. +```c +const int segments[10][7] = { + {1, 1, 1, 1, 1, 1, 0}, // 0 + {0, 1, 1, 0, 0, 0, 0}, // 1 + {} + + }; +``` + >10. Write a declaration for an 8x8 `char` array named `chess_board`. Include an initializer that puts the following data into the array, one character per array element: \[omitted] From 59fefb4ae7b54bc905292377d70126025db72f5f Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 8 Oct 2024 21:25:18 -0600 Subject: [PATCH 0421/1027] vault backup: 2024-10-08 21:25:18 --- education/software development/ECE1400/Chapter 8 Exercises.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/education/software development/ECE1400/Chapter 8 Exercises.md b/education/software development/ECE1400/Chapter 8 Exercises.md index f45d832..a4774fb 100644 --- a/education/software development/ECE1400/Chapter 8 Exercises.md +++ b/education/software development/ECE1400/Chapter 8 Exercises.md @@ -22,8 +22,8 @@ const int segments[10][7] = {{1, 1, 1, 1, 1, 1, 0}, ...}; const int segments[10][7] = { {1, 1, 1, 1, 1, 1, 0}, // 0 {0, 1, 1, 0, 0, 0, 0}, // 1 - {} - + {1, 1, 0, 1, 1, 0, 1}, // 2 + {1, } }; ``` From df16aedfcdd52f6f591384cc9b8a44e8f52d59b1 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 8 Oct 2024 21:30:42 -0600 Subject: [PATCH 0422/1027] vault backup: 2024-10-08 21:30:42 --- .../ECE1400/Chapter 8 Exercises.md | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/education/software development/ECE1400/Chapter 8 Exercises.md b/education/software development/ECE1400/Chapter 8 Exercises.md index a4774fb..b062c69 100644 --- a/education/software development/ECE1400/Chapter 8 Exercises.md +++ b/education/software development/ECE1400/Chapter 8 Exercises.md @@ -20,10 +20,13 @@ const int segments[10][7] = {{1, 1, 1, 1, 1, 1, 0}, ...}; ```c const int segments[10][7] = { - {1, 1, 1, 1, 1, 1, 0}, // 0 - {0, 1, 1, 0, 0, 0, 0}, // 1 - {1, 1, 0, 1, 1, 0, 1}, // 2 - {1, } + {1, 1, 1, 1, 1, 1, 0}, // 0 + {0, 1, 1, 0, 0, 0, 0}, // 1 + {1, 1, 0, 1, 1, 0, 1}, // 2 + {1, 1, 1, 1, 0, 0, 1}, // 3 + {0, 1, 1, 0, 0, 1, 0}, // 4 + {1, 0, 1, 1, 0, 1, 1}, // 5 + }; ``` From 3a62a38f44084baf4d57da3e5dc6cffff41b79a4 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 8 Oct 2024 21:36:22 -0600 Subject: [PATCH 0423/1027] vault backup: 2024-10-08 21:36:22 --- education/software development/ECE1400/Chapter 8 Exercises.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/education/software development/ECE1400/Chapter 8 Exercises.md b/education/software development/ECE1400/Chapter 8 Exercises.md index b062c69..1c7cc2a 100644 --- a/education/software development/ECE1400/Chapter 8 Exercises.md +++ b/education/software development/ECE1400/Chapter 8 Exercises.md @@ -26,7 +26,7 @@ const int segments[10][7] = { {1, 1, 1, 1, 0, 0, 1}, // 3 {0, 1, 1, 0, 0, 1, 0}, // 4 {1, 0, 1, 1, 0, 1, 1}, // 5 - + {1, 0, 1, 1, 1, 1, 1}, }; ``` From 0281a32394116a6c65b651e117792a1969b7f309 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 8 Oct 2024 21:41:22 -0600 Subject: [PATCH 0424/1027] vault backup: 2024-10-08 21:41:21 --- education/software development/ECE1400/Chapter 8 Exercises.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/education/software development/ECE1400/Chapter 8 Exercises.md b/education/software development/ECE1400/Chapter 8 Exercises.md index 1c7cc2a..5c063dd 100644 --- a/education/software development/ECE1400/Chapter 8 Exercises.md +++ b/education/software development/ECE1400/Chapter 8 Exercises.md @@ -26,7 +26,8 @@ const int segments[10][7] = { {1, 1, 1, 1, 0, 0, 1}, // 3 {0, 1, 1, 0, 0, 1, 0}, // 4 {1, 0, 1, 1, 0, 1, 1}, // 5 - {1, 0, 1, 1, 1, 1, 1}, + {1, 0, 1, 1, 1, 1, 1}, // 6 + {1, 1, 1, 0, 0, 0, 0} }; ``` From 47e79e370dd884ce960ad4518b7cbb28e9f651d4 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 8 Oct 2024 21:46:22 -0600 Subject: [PATCH 0425/1027] vault backup: 2024-10-08 21:46:22 --- education/software development/ECE1400/Chapter 8 Exercises.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/education/software development/ECE1400/Chapter 8 Exercises.md b/education/software development/ECE1400/Chapter 8 Exercises.md index 5c063dd..97689bc 100644 --- a/education/software development/ECE1400/Chapter 8 Exercises.md +++ b/education/software development/ECE1400/Chapter 8 Exercises.md @@ -27,7 +27,9 @@ const int segments[10][7] = { {0, 1, 1, 0, 0, 1, 0}, // 4 {1, 0, 1, 1, 0, 1, 1}, // 5 {1, 0, 1, 1, 1, 1, 1}, // 6 - {1, 1, 1, 0, 0, 0, 0} + {1, 1, 1, 0, 0, 0, 0}, // 7 + {1, 1, 1, 1, 1, 1, 1}, // 8 + {1, 1, 1, 1, 0, 1, 1} // 9 }; ``` From 9994e1407c8552e7bcb8f783c28f4157cf1229bc Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 8 Oct 2024 22:01:51 -0600 Subject: [PATCH 0426/1027] vault backup: 2024-10-08 22:01:51 --- .../software development/ECE1400/Chapter 8 Exercises.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/education/software development/ECE1400/Chapter 8 Exercises.md b/education/software development/ECE1400/Chapter 8 Exercises.md index 97689bc..de8450a 100644 --- a/education/software development/ECE1400/Chapter 8 Exercises.md +++ b/education/software development/ECE1400/Chapter 8 Exercises.md @@ -18,6 +18,7 @@ const int segments[10][7] = {{1, 1, 1, 1, 1, 1, 0}, ...}; ``` > I've given you the first row of the initializer, fill in the rest. +Answer: ```c const int segments[10][7] = { {1, 1, 1, 1, 1, 1, 0}, // 0 @@ -36,4 +37,9 @@ const int segments[10][7] = { >10. Write a declaration for an 8x8 `char` array named `chess_board`. Include an initializer that puts the following data into the array, one character per array element: \[omitted] +```c +char ch +``` + + > 11. Write a program fragment that declares an 8x8 `char` array named `checker_board` and then uses a loop to store the following data into the array (one character per array element). \ No newline at end of file From 4b75ea7a746d1a0d50dddc8a48cd249dadfd092c Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 8 Oct 2024 22:06:51 -0600 Subject: [PATCH 0427/1027] vault backup: 2024-10-08 22:06:51 --- .../ECE1400/Chapter 8 Exercises.md | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/education/software development/ECE1400/Chapter 8 Exercises.md b/education/software development/ECE1400/Chapter 8 Exercises.md index de8450a..453c7e2 100644 --- a/education/software development/ECE1400/Chapter 8 Exercises.md +++ b/education/software development/ECE1400/Chapter 8 Exercises.md @@ -38,7 +38,18 @@ const int segments[10][7] = { \[omitted] ```c -char ch +char chess_board[8][8] = { + {'r', 'n', 'b', 'q', 'k', 'b', 'n', 'r'}, + {'p', 'p', 'p', 'p', 'p', 'p', 'p', 'p'}, + {' ', '.', ' ', '.', ' ', '.', ' ', '.'}, + {'.', ' ', '.', ' ', '.', ' ', '.', ' '}, + {' ', '.', ' ', '.', ' ', '.', ' ', '.'}, + {'.', ' ', '.', ' ', '.', ' ', '.', ' '}, + {' ', '.', ' ', '.', ' ', '.', ' ', '.'}, + {'.', ' ', '.', ' ', '.', ' ', '.', ' '}, + {'P', 'P', 'P', 'P', 'P', 'P', 'P', 'P'}, + {'R', 'N', 'B', 'K', 'Q', 'B', 'N', 'R'}, +}; ``` From eb0a5d92640b1e7af12c1d41ad4106676046370f Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 8 Oct 2024 22:11:53 -0600 Subject: [PATCH 0428/1027] vault backup: 2024-10-08 22:11:53 --- .obsidian/app.json | 2 +- .../ECE1400/Chapter 8 Exercises.md | 15 ++++++++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/.obsidian/app.json b/.obsidian/app.json index 3595e31..83fdb69 100644 --- a/.obsidian/app.json +++ b/.obsidian/app.json @@ -2,7 +2,7 @@ "vimMode": true, "promptDelete": false, "pdfExportSettings": { - "includeName": false, + "includeName": true, "pageSize": "Letter", "landscape": false, "margin": "0", diff --git a/education/software development/ECE1400/Chapter 8 Exercises.md b/education/software development/ECE1400/Chapter 8 Exercises.md index 453c7e2..759cf55 100644 --- a/education/software development/ECE1400/Chapter 8 Exercises.md +++ b/education/software development/ECE1400/Chapter 8 Exercises.md @@ -53,4 +53,17 @@ char chess_board[8][8] = { ``` -> 11. Write a program fragment that declares an 8x8 `char` array named `checker_board` and then uses a loop to store the following data into the array (one character per array element). \ No newline at end of file +> 11. Write a program fragment that declares an 8x8 `char` array named `checker_board` and then uses a loop to store the following data into the array (one character per array element). + +```c +char checker_board[8][8]; +for (int row = 0; row < 8; row++) { + for (int column = 0; column < 8; column++) { + if ((column + row) % 2 == 0) { + checker_board[row][column] = 'B'; + } else { + checker_board[row][column] = 'R'; + } + } +} +``` \ No newline at end of file From 41cc143387b96119ea18a507972be71b008170de Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 9 Oct 2024 10:51:12 -0600 Subject: [PATCH 0429/1027] vault backup: 2024-10-09 10:51:12 --- education/english/ENGL2010/Addiction Analysis.md | 1 + 1 file changed, 1 insertion(+) diff --git a/education/english/ENGL2010/Addiction Analysis.md b/education/english/ENGL2010/Addiction Analysis.md index af682b5..ae52b0b 100644 --- a/education/english/ENGL2010/Addiction Analysis.md +++ b/education/english/ENGL2010/Addiction Analysis.md @@ -22,6 +22,7 @@ - Socrates felt that this didn't make sense, arguing that actions always reveal true beliefs - "Socrates clearly never went to a restaurant with unlimited chips. But he has a point. To figure out what a person’s true priorities are, we usually look to the choices they make. (“Actions speak louder than words.”) When a person binges on TV, munches chips, or gets high despite the consequences, Socrates would infer that they must care more about indulging now than about avoiding those consequences — whatever they may _say_ to the contrary" - He argues that people simply have bad judgement, and that they aren't acting against their better judgement. + - He also argues that bad decisions indicate bad priorities. - Addiction intensifies the disconnect between judgement and action - "Here’s the testimony of one person with addiction, reported in Maia Szalavitz’s book [_Unbroken Brain_](https://books.google.com/books?id=4yJ3CgAAQBAJ&lpg=PP1&pg=PA114#v=onepage&q&f=false): “I can remember many, many times driving down to the projects telling myself, ‘You don’t want to do this! You don’t want to do this!’ But I’d do it anyway.” - Ethos From ac830eb57fc3fc3849e38365a99d94bbae6479e2 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 9 Oct 2024 10:56:12 -0600 Subject: [PATCH 0430/1027] vault backup: 2024-10-09 10:56:12 --- education/english/ENGL2010/Addiction Analysis.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/education/english/ENGL2010/Addiction Analysis.md b/education/english/ENGL2010/Addiction Analysis.md index ae52b0b..9d76df9 100644 --- a/education/english/ENGL2010/Addiction Analysis.md +++ b/education/english/ENGL2010/Addiction Analysis.md @@ -23,6 +23,8 @@ - "Socrates clearly never went to a restaurant with unlimited chips. But he has a point. To figure out what a person’s true priorities are, we usually look to the choices they make. (“Actions speak louder than words.”) When a person binges on TV, munches chips, or gets high despite the consequences, Socrates would infer that they must care more about indulging now than about avoiding those consequences — whatever they may _say_ to the contrary" - He argues that people simply have bad judgement, and that they aren't acting against their better judgement. - He also argues that bad decisions indicate bad priorities. + - The idea that people need to hit "rock bottom" before they can hit true recovery reinforces that idea. It means that a person needs to truly understand the consequences of their "selfishness". + - - Addiction intensifies the disconnect between judgement and action - "Here’s the testimony of one person with addiction, reported in Maia Szalavitz’s book [_Unbroken Brain_](https://books.google.com/books?id=4yJ3CgAAQBAJ&lpg=PP1&pg=PA114#v=onepage&q&f=false): “I can remember many, many times driving down to the projects telling myself, ‘You don’t want to do this! You don’t want to do this!’ But I’d do it anyway.” - Ethos From 2188e666bdd4cb439a3c97ad8627eaaa8b558b94 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 9 Oct 2024 11:01:40 -0600 Subject: [PATCH 0431/1027] vault backup: 2024-10-09 11:01:40 --- education/english/ENGL2010/Addiction Analysis.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/education/english/ENGL2010/Addiction Analysis.md b/education/english/ENGL2010/Addiction Analysis.md index 9d76df9..2abf801 100644 --- a/education/english/ENGL2010/Addiction Analysis.md +++ b/education/english/ENGL2010/Addiction Analysis.md @@ -24,8 +24,9 @@ - He argues that people simply have bad judgement, and that they aren't acting against their better judgement. - He also argues that bad decisions indicate bad priorities. - The idea that people need to hit "rock bottom" before they can hit true recovery reinforces that idea. It means that a person needs to truly understand the consequences of their "selfishness". - - + - Socratic rationale for punishing drug possession with jail is another example of this idea. - Addiction intensifies the disconnect between judgement and action - "Here’s the testimony of one person with addiction, reported in Maia Szalavitz’s book [_Unbroken Brain_](https://books.google.com/books?id=4yJ3CgAAQBAJ&lpg=PP1&pg=PA114#v=onepage&q&f=false): “I can remember many, many times driving down to the projects telling myself, ‘You don’t want to do this! You don’t want to do this!’ But I’d do it anyway.” - Ethos - - \ No newline at end of file +- The "self" is not a single unitary thing + - The concept of a "dual process" mind comes from Nobel laureate Daniel Kahneman, who divides the mind into a part that makes judgements quickly, intuitively, and unconsciously ("System 1") and a part that thinks more slowly, rationally, and consiously ("System 2"). \ No newline at end of file From 44deaf09011f444a315f1449650fbf38dca72f1d Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 9 Oct 2024 11:06:40 -0600 Subject: [PATCH 0432/1027] vault backup: 2024-10-09 11:06:40 --- education/english/ENGL2010/Addiction Analysis.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/education/english/ENGL2010/Addiction Analysis.md b/education/english/ENGL2010/Addiction Analysis.md index 2abf801..e592b86 100644 --- a/education/english/ENGL2010/Addiction Analysis.md +++ b/education/english/ENGL2010/Addiction Analysis.md @@ -29,4 +29,10 @@ - "Here’s the testimony of one person with addiction, reported in Maia Szalavitz’s book [_Unbroken Brain_](https://books.google.com/books?id=4yJ3CgAAQBAJ&lpg=PP1&pg=PA114#v=onepage&q&f=false): “I can remember many, many times driving down to the projects telling myself, ‘You don’t want to do this! You don’t want to do this!’ But I’d do it anyway.” - Ethos - The "self" is not a single unitary thing - - The concept of a "dual process" mind comes from Nobel laureate Daniel Kahneman, who divides the mind into a part that makes judgements quickly, intuitively, and unconsciously ("System 1") and a part that thinks more slowly, rationally, and consiously ("System 2"). \ No newline at end of file + - The concept of a "dual process" mind comes from Nobel laureate Daniel Kahneman, who divides the mind into a part that makes judgements quickly, intuitively, and unconsciously ("System 1") and a part that thinks more slowly, rationally, and consiously ("System 2"). + - Neuroscientist Kent Berridge notes a system in our brain he calls the "wanting system", which regulates our cravings for things like food, sex, and drugs, using signals based in the neutrotransmitter dopamine + - "More pertinent for our purposes is research on what [University of Michigan neuroscientist Kent Berridge](http://www-personal.umich.edu/~berridge/) calls the “wanting system,” which regulates our cravings for things like food, sex, and drugs using signals based in the neurotransmitter dopamine. The wanting system has powerful control over behavior, and its cravings are insensitive to long-term consequences." + - He notes that drugs hijack that system causing cravings that are far stronger than humans experience. + - The boundaries of where "the self" is in the human brain aren't clearly defined, processes in the brain mesh together tightly, so there's no clean boundary. + - From a philosophical sense, there are many different ways to approach the concept of the self. + - Modern philosopher \ No newline at end of file From d3a719d84a71c4293b2f97a98b845ccc68f142c5 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 9 Oct 2024 11:12:34 -0600 Subject: [PATCH 0433/1027] vault backup: 2024-10-09 11:12:34 --- education/english/ENGL2010/Addiction Analysis.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/education/english/ENGL2010/Addiction Analysis.md b/education/english/ENGL2010/Addiction Analysis.md index e592b86..443cec3 100644 --- a/education/english/ENGL2010/Addiction Analysis.md +++ b/education/english/ENGL2010/Addiction Analysis.md @@ -35,4 +35,5 @@ - He notes that drugs hijack that system causing cravings that are far stronger than humans experience. - The boundaries of where "the self" is in the human brain aren't clearly defined, processes in the brain mesh together tightly, so there's no clean boundary. - From a philosophical sense, there are many different ways to approach the concept of the self. - - Modern philosopher \ No newline at end of file + - Modern philosophers reject the socratic view on behavior, instead saying that the self is instead based on judgements about the kind of person one wants to be, and the life they want to lead. + - Addiction lies somewhere between choice and compulsion. Addiction doesn' \ No newline at end of file From ee6e4835ed9814666c59078a5bdef9274f78858d Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 9 Oct 2024 11:18:40 -0600 Subject: [PATCH 0434/1027] vault backup: 2024-10-09 11:18:40 --- education/english/ENGL2010/Addiction Analysis.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/education/english/ENGL2010/Addiction Analysis.md b/education/english/ENGL2010/Addiction Analysis.md index 443cec3..817ea07 100644 --- a/education/english/ENGL2010/Addiction Analysis.md +++ b/education/english/ENGL2010/Addiction Analysis.md @@ -36,4 +36,4 @@ - The boundaries of where "the self" is in the human brain aren't clearly defined, processes in the brain mesh together tightly, so there's no clean boundary. - From a philosophical sense, there are many different ways to approach the concept of the self. - Modern philosophers reject the socratic view on behavior, instead saying that the self is instead based on judgements about the kind of person one wants to be, and the life they want to lead. - - Addiction lies somewhere between choice and compulsion. Addiction doesn' \ No newline at end of file + - Addiction lies somewhere between choice and compulsion. Addiction doesn't make the choice for you, but it makes you gravitate towards a particular options. \ No newline at end of file From a439087e25c48f10e0f2bf0863d73295cee70081 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 9 Oct 2024 11:23:49 -0600 Subject: [PATCH 0435/1027] vault backup: 2024-10-09 11:23:49 --- education/english/ENGL2010/Addiction Analysis.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/education/english/ENGL2010/Addiction Analysis.md b/education/english/ENGL2010/Addiction Analysis.md index 817ea07..d8c4b62 100644 --- a/education/english/ENGL2010/Addiction Analysis.md +++ b/education/english/ENGL2010/Addiction Analysis.md @@ -36,4 +36,7 @@ - The boundaries of where "the self" is in the human brain aren't clearly defined, processes in the brain mesh together tightly, so there's no clean boundary. - From a philosophical sense, there are many different ways to approach the concept of the self. - Modern philosophers reject the socratic view on behavior, instead saying that the self is instead based on judgements about the kind of person one wants to be, and the life they want to lead. - - Addiction lies somewhere between choice and compulsion. Addiction doesn't make the choice for you, but it makes you gravitate towards a particular options. \ No newline at end of file + - Addiction lies somewhere between choice and compulsion. Addiction doesn't make the choice for you, but it makes you gravitate towards a particular options. + - Addiction is not a moral failure because it's still the same person, they just face cravings that are far harder to resist. + - Treatments like methadone and buprenorphine can help with addiction by reducing the power of those cravings. + - \ No newline at end of file From d4f722c390855f4ca05cf0fdf80a7917a3c05aad Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Thu, 10 Oct 2024 10:01:23 -0600 Subject: [PATCH 0436/1027] vault backup: 2024-10-10 10:01:23 --- education/nutrition/Lipids.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/education/nutrition/Lipids.md b/education/nutrition/Lipids.md index a2ac019..6d7ed9f 100644 --- a/education/nutrition/Lipids.md +++ b/education/nutrition/Lipids.md @@ -21,7 +21,7 @@ A fatty acid is a hydrocarbon chain found in lipids; one end of the chain forms - **Saturated fatty acid (SFA)** Every single carbon atom is filled with hydrogen atoms - **Unsaturated fatty acid** is a fatty acid that is missing hydrogen atoms and has one or more double bonds within the carbon chain - **Monounsaturated** (MUFA) - - Has one double bond within the carbon chain + - Has **one** double bond within the carbon chain - Sources include: - **Canola oil** - **Olive oil** @@ -30,7 +30,7 @@ A fatty acid is a hydrocarbon chain found in lipids; one end of the chain forms - Seeds - Peanut butter - **Polyunsaturated** (PUFA) - - Fatty acid that has two or more bonds within the carbon chain + - Fatty acid that has **two or more bonds** within the carbon chain - Sources include: - **Soybean oil** - **Fatty fish** From d0e64e06ad39641afd33f57d066e51d965389f30 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Thu, 10 Oct 2024 10:06:23 -0600 Subject: [PATCH 0437/1027] vault backup: 2024-10-10 10:06:23 --- education/nutrition/Lipids.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/education/nutrition/Lipids.md b/education/nutrition/Lipids.md index 6d7ed9f..99672cb 100644 --- a/education/nutrition/Lipids.md +++ b/education/nutrition/Lipids.md @@ -18,6 +18,8 @@ A fatty acid is a hydrocarbon chain found in lipids; one end of the chain forms - The number of carbon atoms - The type of bond between carbon atoms +- An omega-3 fatty acid is a + - **Saturated fatty acid (SFA)** Every single carbon atom is filled with hydrogen atoms - **Unsaturated fatty acid** is a fatty acid that is missing hydrogen atoms and has one or more double bonds within the carbon chain - **Monounsaturated** (MUFA) From e0ebc4c69a5aebcdb2012741620346af4809ef65 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Thu, 10 Oct 2024 10:11:23 -0600 Subject: [PATCH 0438/1027] vault backup: 2024-10-10 10:11:23 --- education/nutrition/Lipids.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/education/nutrition/Lipids.md b/education/nutrition/Lipids.md index 99672cb..3cfecd7 100644 --- a/education/nutrition/Lipids.md +++ b/education/nutrition/Lipids.md @@ -18,7 +18,7 @@ A fatty acid is a hydrocarbon chain found in lipids; one end of the chain forms - The number of carbon atoms - The type of bond between carbon atoms -- An omega-3 fatty acid is a +- An omega-3 fatty acid is a polyunsaturated fatty acid with its first double bond at the third carbon from the omega end of the chain. - **Saturated fatty acid (SFA)** Every single carbon atom is filled with hydrogen atoms - **Unsaturated fatty acid** is a fatty acid that is missing hydrogen atoms and has one or more double bonds within the carbon chain @@ -56,6 +56,11 @@ A fatty acid is a hydrocarbon chain found in lipids; one end of the chain forms - Docosahexaenoic acid (DHA): 22 carbons - Both acids are found mainly in fatty fish - Essential fatty acids are needed for growth and healthy cell membranes, especially in the brain. + - Infants that have an essential fatty acid deficiency can experience developmental and nerve system issues. + - Signs of essential fatty acid deficiency include: + - Scaly skin + - Hair loss + - Poor wound healing # Triglycerides A lipid that has three fatty acids attached to a three-carbon compound called glycerol - Comprises 95% of lipids in food and body From cd8e8fb80a5c0a6b3f95b1a30aa0aa507290c2f4 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Fri, 11 Oct 2024 14:33:08 -0600 Subject: [PATCH 0439/1027] vault backup: 2024-10-11 14:33:08 --- education/nutrition/Lipids.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/education/nutrition/Lipids.md b/education/nutrition/Lipids.md index 3cfecd7..cbfc6e2 100644 --- a/education/nutrition/Lipids.md +++ b/education/nutrition/Lipids.md @@ -67,7 +67,7 @@ A lipid that has three fatty acids attached to a three-carbon compound called gl - **Glycerol** is a three carbon alcohol that forms the backbone of fatty acids - # Phospholipids -A phospholipid is a type of lipid needed for the flexibility, structure, and makeup of the cell membranes and for proper functioning of the never cells. +A phospholipid is a type of lipid needed for the flexibility, structure, and makeup of the cell membranes and for proper functioning of nerve cells. - Partially water soluble - Hydrophilic - Part that attracts water @@ -90,4 +90,7 @@ Sterols are lipids that have a more chemically complex structure than a triglyce Lipases are enzymes that break down lipids - **Cholecystokinin** is a hormone that stimulates the gallbladder to release bile and the pancreas to secrete digestive juices - Bile helps with the emulsification of and digestion of fat. -- Secretin is a hormone that stimulates the liver to produce bile and the pancreas to secrete bicarbonate rich pancreatic juice \ No newline at end of file +- Secretin is a hormone that stimulates the liver to produce bile and the pancreas to secrete bicarbonate rich pancreatic juice + +# Lipoproteins +Lipoproteins are water-soluble structures that transport lipids through the bloodstream. Lipoproteins are needed because fat is hydrophobic. \ No newline at end of file From fb56b3e3c0646a6317f7f0243630c0f3b4c9e17b Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Fri, 11 Oct 2024 14:38:08 -0600 Subject: [PATCH 0440/1027] vault backup: 2024-10-11 14:38:08 --- education/nutrition/Lipids.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/education/nutrition/Lipids.md b/education/nutrition/Lipids.md index cbfc6e2..dd83171 100644 --- a/education/nutrition/Lipids.md +++ b/education/nutrition/Lipids.md @@ -93,4 +93,8 @@ Lipases are enzymes that break down lipids - Secretin is a hormone that stimulates the liver to produce bile and the pancreas to secrete bicarbonate rich pancreatic juice # Lipoproteins -Lipoproteins are water-soluble structures that transport lipids through the bloodstream. Lipoproteins are needed because fat is hydrophobic. \ No newline at end of file +Lipoproteins are water-soluble structures that transport lipids through the bloodstream. Lipoproteins are needed because fat is hydrophobic. +- Chylomicron mostly carries triglycerides +- High density lipoprotein (HDL) carries the most protein (45-50%), and roughly 30% phospholipids +- Low density lipoprotein (LDL) carries the most cholesterol +- Very low density lipoprotein (VLDL) carries triglycerides from the liver into the bloodstream, where cells that line capillaries break down the triglycerides into fatty acids and glycerol \ No newline at end of file From f5551fc7886723de1f8cd8c179a7dab6afce0199 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Fri, 11 Oct 2024 14:43:08 -0600 Subject: [PATCH 0441/1027] vault backup: 2024-10-11 14:43:08 --- education/nutrition/Lipids.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/education/nutrition/Lipids.md b/education/nutrition/Lipids.md index dd83171..b9fffb6 100644 --- a/education/nutrition/Lipids.md +++ b/education/nutrition/Lipids.md @@ -95,6 +95,7 @@ Lipases are enzymes that break down lipids # Lipoproteins Lipoproteins are water-soluble structures that transport lipids through the bloodstream. Lipoproteins are needed because fat is hydrophobic. - Chylomicron mostly carries triglycerides -- High density lipoprotein (HDL) carries the most protein (45-50%), and roughly 30% phospholipids -- Low density lipoprotein (LDL) carries the most cholesterol -- Very low density lipoprotein (VLDL) carries triglycerides from the liver into the bloodstream, where cells that line capillaries break down the triglycerides into fatty acids and glycerol \ No newline at end of file +- High density lipoprotein (HDL) carries the most protein (45-50%), and roughly 30% phospholipids. HDL carries lipids away from tissues and to the liver, where they can be processed and eliminated. It's considered "good" cholesterol +- Low density lipoprotein (LDL) carries the most cholesterol, and it carries lipids from the liver out to other tissues in the body. It's considered "bad" cholesterol +- Very low density lipoprotein (VLDL) carries triglycerides from the liver into the bloodstream, where cells that line capillaries break down the triglycerides into fatty acids and glycerol +- Oxidized LDL is formed when chemically unstable substances damage LDL, transports cholesterol into the arterial lining \ No newline at end of file From 964812105f311053df93820d3a48d1f3d79af1fd Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Fri, 11 Oct 2024 14:48:08 -0600 Subject: [PATCH 0442/1027] vault backup: 2024-10-11 14:48:08 --- education/nutrition/Lipids.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/education/nutrition/Lipids.md b/education/nutrition/Lipids.md index b9fffb6..c2676b5 100644 --- a/education/nutrition/Lipids.md +++ b/education/nutrition/Lipids.md @@ -86,6 +86,17 @@ Sterols are lipids that have a more chemically complex structure than a triglyce - Poultry - Dairy products +| Cholesterol (mg/dl) | Classification | +| --------------------------- | -------------------------- | +| <200 | Desireable | +| 200-239 | Borderline high | +| >= 240 | High | +| **LDL Cholesterol (mg/dl)** | **Classification** | +| < 100 | Optimal | +| 100 - 129 | Near optimal/above optimal | +| 130-159 | Borderline high | +| 160-1 | | + # Lipases Lipases are enzymes that break down lipids - **Cholecystokinin** is a hormone that stimulates the gallbladder to release bile and the pancreas to secrete digestive juices From 2b79d0131952d9b64bd8f8f1c61d66969daea615 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Fri, 11 Oct 2024 14:53:08 -0600 Subject: [PATCH 0443/1027] vault backup: 2024-10-11 14:53:08 --- education/nutrition/Lipids.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/education/nutrition/Lipids.md b/education/nutrition/Lipids.md index c2676b5..3ebef48 100644 --- a/education/nutrition/Lipids.md +++ b/education/nutrition/Lipids.md @@ -95,7 +95,12 @@ Sterols are lipids that have a more chemically complex structure than a triglyce | < 100 | Optimal | | 100 - 129 | Near optimal/above optimal | | 130-159 | Borderline high | -| 160-1 | | +| 160-189 | High | +| >= 190 | Very high | +| **HDL Cholesterol (mg/dl)** | **Triglycerides (mg/dl)** | +| < 150 | Normal | +| 150-199 | Borderline high | +| >= 200 | High | # Lipases Lipases are enzymes that break down lipids From bc8c7c5fa92e896541711cab0c7c1a73508567e7 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sat, 12 Oct 2024 19:45:00 -0600 Subject: [PATCH 0444/1027] vault backup: 2024-10-12 19:45:00 --- education/nutrition/Lipids.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/education/nutrition/Lipids.md b/education/nutrition/Lipids.md index 3ebef48..ed2b981 100644 --- a/education/nutrition/Lipids.md +++ b/education/nutrition/Lipids.md @@ -110,8 +110,8 @@ Lipases are enzymes that break down lipids # Lipoproteins Lipoproteins are water-soluble structures that transport lipids through the bloodstream. Lipoproteins are needed because fat is hydrophobic. -- Chylomicron mostly carries triglycerides -- High density lipoprotein (HDL) carries the most protein (45-50%), and roughly 30% phospholipids. HDL carries lipids away from tissues and to the liver, where they can be processed and eliminated. It's considered "good" cholesterol -- Low density lipoprotein (LDL) carries the most cholesterol, and it carries lipids from the liver out to other tissues in the body. It's considered "bad" cholesterol -- Very low density lipoprotein (VLDL) carries triglycerides from the liver into the bloodstream, where cells that line capillaries break down the triglycerides into fatty acids and glycerol -- Oxidized LDL is formed when chemically unstable substances damage LDL, transports cholesterol into the arterial lining \ No newline at end of file +- **Chylomicron** mostly carries triglycerides +- **High density lipoprotein** (HDL) carries the most protein (45-50%), and roughly 30% phospholipids. HDL carries lipids away from tissues and to the liver, where they can be processed and eliminated. It's considered "good" cholesterol +- **Low density lipoprotein** (LDL) carries the most cholesterol, and it carries lipids from the liver out to other tissues in the body. It's considered "bad" cholesterol +- **Very low density lipoprotein** (VLDL) carries triglycerides from the liver into the bloodstream, where cells that line capillaries break down the triglycerides into fatty acids and glycerol +- **Oxidized LDL** is formed when chemically unstable substances damage LDL, transports cholesterol into the arterial lining \ No newline at end of file From effce4a641eb74370cbd5851d601762d5d174b6e Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sat, 12 Oct 2024 20:37:02 -0600 Subject: [PATCH 0445/1027] vault backup: 2024-10-12 20:37:02 --- education/software development/ECE1400/Chapter 9 Exercises.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 education/software development/ECE1400/Chapter 9 Exercises.md diff --git a/education/software development/ECE1400/Chapter 9 Exercises.md b/education/software development/ECE1400/Chapter 9 Exercises.md new file mode 100644 index 0000000..12cd8df --- /dev/null +++ b/education/software development/ECE1400/Chapter 9 Exercises.md @@ -0,0 +1,4 @@ +> 1. The following function, which computes the area of a triangle, contains two errors. Locate the errors and show how to fix them. (*Hint*: There are no errors in the formula) +```c + +``` \ No newline at end of file From 94dd9d5d745c51a83ccb0a4db8a76c2c6c19e009 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sat, 12 Oct 2024 20:42:02 -0600 Subject: [PATCH 0446/1027] vault backup: 2024-10-12 20:42:02 --- .../ECE1400/Chapter 9 Exercises.md | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/education/software development/ECE1400/Chapter 9 Exercises.md b/education/software development/ECE1400/Chapter 9 Exercises.md index 12cd8df..008bcdf 100644 --- a/education/software development/ECE1400/Chapter 9 Exercises.md +++ b/education/software development/ECE1400/Chapter 9 Exercises.md @@ -1,4 +1,28 @@ > 1. The following function, which computes the area of a triangle, contains two errors. Locate the errors and show how to fix them. (*Hint*: There are no errors in the formula) ```c +double triangle_area(double base, height) +double product; +{ + product = base * height; + return product / 2; +} +``` +Answer: +```c +// A type annotation is needed for `height` +double triangle_area(double base, double height) +{ + // The `product` variable declaration was not in the function block. + double product; + product = base * height; + return product / 2; +} +``` + +> 2. Write a function `check(x, y, n)` that returns `1` if both `x` and `y` fall between zero and `n - 1` inclusive. The function should return 0 otherwise. Assume that `x`, `y`, and `n` are all of type int +```c +int check(int x, int y, int n) { + if (x < 0) +} ``` \ No newline at end of file From 84bf3689e569d74c955c2c75a07e937a708e7220 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sat, 12 Oct 2024 20:47:02 -0600 Subject: [PATCH 0447/1027] vault backup: 2024-10-12 20:47:02 --- .../ECE1400/Chapter 9 Exercises.md | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/education/software development/ECE1400/Chapter 9 Exercises.md b/education/software development/ECE1400/Chapter 9 Exercises.md index 008bcdf..74bec6e 100644 --- a/education/software development/ECE1400/Chapter 9 Exercises.md +++ b/education/software development/ECE1400/Chapter 9 Exercises.md @@ -23,6 +23,18 @@ double triangle_area(double base, double height) > 2. Write a function `check(x, y, n)` that returns `1` if both `x` and `y` fall between zero and `n - 1` inclusive. The function should return 0 otherwise. Assume that `x`, `y`, and `n` are all of type int ```c int check(int x, int y, int n) { - if (x < 0) + int in_range = 1; + if (x < 0 || y < 0) { + in_range = 0; + } + if (x > n - 1 || y > n - 1) { + in_range = 0; + } + + return in_range; } -``` \ No newline at end of file +``` + +> 7. Suppose that function `f` has the following definition: +> `int f(int a, int b) { ... }` +> Which of the following statements are legal? Assume that `i` has type `int` and `x` has type `double`). From bee5599cc33ca2648236ad11bff677774577cdf0 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sat, 12 Oct 2024 20:52:02 -0600 Subject: [PATCH 0448/1027] vault backup: 2024-10-12 20:52:02 --- .../software development/ECE1400/Chapter 9 Exercises.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/education/software development/ECE1400/Chapter 9 Exercises.md b/education/software development/ECE1400/Chapter 9 Exercises.md index 74bec6e..cb7e302 100644 --- a/education/software development/ECE1400/Chapter 9 Exercises.md +++ b/education/software development/ECE1400/Chapter 9 Exercises.md @@ -38,3 +38,12 @@ int check(int x, int y, int n) { > 7. Suppose that function `f` has the following definition: > `int f(int a, int b) { ... }` > Which of the following statements are legal? Assume that `i` has type `int` and `x` has type `double`). + +Answer: +All of them are legal and will compile and run. (c) and (d) are what I would consider bad practice because they perform an implicit conversion from a double to an int, and should include an explicit cast. + +> 8. Which of the following would be valid prototypes for a function that returns nothing and has one double parameter? + +Answer: +(a) and (b). +Parameters must contain a type annotation but theyd o \ No newline at end of file From 11026292fdd099019f296d9a9eb5819730bb2025 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sat, 12 Oct 2024 20:57:02 -0600 Subject: [PATCH 0449/1027] vault backup: 2024-10-12 20:57:02 --- .../ECE1400/Chapter 9 Exercises.md | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/education/software development/ECE1400/Chapter 9 Exercises.md b/education/software development/ECE1400/Chapter 9 Exercises.md index cb7e302..ebc3876 100644 --- a/education/software development/ECE1400/Chapter 9 Exercises.md +++ b/education/software development/ECE1400/Chapter 9 Exercises.md @@ -46,4 +46,22 @@ All of them are legal and will compile and run. (c) and (d) are what I would con Answer: (a) and (b). -Parameters must contain a type annotation but theyd o \ No newline at end of file +Parameters must contain a type annotation but they do not need to specify a name. A function prototype declaration must specify a return type. + +> 9. What will be the output of the following program? +```c +double triangle_area(double base, double height) +{ + double product; + product = base * height; + return product / 2; +} +double triangle_area(double base, double height) +{ + double product; + product = base * height; + return product / 2; +} + +``` + From 1404a579293c7fdb2e2674c107ff50657417767b Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sat, 12 Oct 2024 21:02:02 -0600 Subject: [PATCH 0450/1027] vault backup: 2024-10-12 21:02:02 --- .../ECE1400/Chapter 9 Exercises.md | 27 +++++++++++++------ 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/education/software development/ECE1400/Chapter 9 Exercises.md b/education/software development/ECE1400/Chapter 9 Exercises.md index ebc3876..e01a084 100644 --- a/education/software development/ECE1400/Chapter 9 Exercises.md +++ b/education/software development/ECE1400/Chapter 9 Exercises.md @@ -50,18 +50,29 @@ Parameters must contain a type annotation but they do not need to specify a name > 9. What will be the output of the following program? ```c -double triangle_area(double base, double height) +#include + +void swap (int a, int b); + +int main(void) { - double product; - product = base * height; - return product / 2; + int i = 1, j = 2; + swap(i, j); + printf("i = %d, j = %d\n", i, j); + return 0; } -double triangle_area(double base, double height) + +void swap(int a, int b) { - double product; - product = base * height; - return product / 2; + int temp = a; + a = b; + b = temp; } ``` +Answer: +``` +i = 1, j = 2 +``` +Because function parameters are passed by value and not reference in C, modifications to `a` and `b` are limited to the scope of `swap`. \ No newline at end of file From 98cb97ed30d348ed1ace5f40368f540faff35ea7 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 15 Oct 2024 12:27:53 -0600 Subject: [PATCH 0451/1027] vault backup: 2024-10-15 12:27:53 --- education/nutrition/Proteins.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 education/nutrition/Proteins.md diff --git a/education/nutrition/Proteins.md b/education/nutrition/Proteins.md new file mode 100644 index 0000000..2e28d98 --- /dev/null +++ b/education/nutrition/Proteins.md @@ -0,0 +1,5 @@ +By helping to maintain fluid balance, proteins prevent **edema** (accumulation of fluid in tissues + +- Proteins also help maintain acid-base balance. + - Maintaining the proper pH of body fluids + - Act as a **buffer** \ No newline at end of file From bdd0029fd409e3afa51f1da11b1da6b8e5abad1c Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 15 Oct 2024 12:32:53 -0600 Subject: [PATCH 0452/1027] vault backup: 2024-10-15 12:32:53 --- education/nutrition/Proteins.md | 38 ++++++++++++++++++++++++++++++--- 1 file changed, 35 insertions(+), 3 deletions(-) diff --git a/education/nutrition/Proteins.md b/education/nutrition/Proteins.md index 2e28d98..38dbd39 100644 --- a/education/nutrition/Proteins.md +++ b/education/nutrition/Proteins.md @@ -1,5 +1,37 @@ -By helping to maintain fluid balance, proteins prevent **edema** (accumulation of fluid in tissues - +Proteins are large, complex, organic molecules made up of **amino acids**. + - Contain carbon, hydrogen, oxygen, and nitrogen + - Found in plants, animals, bacteria, and viruses - Proteins also help maintain acid-base balance. - Maintaining the proper pH of body fluids - - Act as a **buffer** \ No newline at end of file + - Act as a **buffer** +- Major functions of protein in the body: + - To build new cells and many parts of cells + - As a component in hardened structures like hair and nails + - As enzymes to speed chemical reactions + - As lubricants to ease movement + - In clotting compounds in blood + - To build antibodies that fight disease organisms + - As compounds that help maintain fluid and pH balance + - As transporters + - To make certain hormones + - As an energy source (as a last resort) +- +# Introduction +- By helping to maintain fluid balance, proteins prevent **edema** (accumulation of fluid in tissues +- Proteins also help maintain **acid-base balance**. + - Maintaining the proper pH of body fluids + - Acts as a buffer + +# Amino acids +- Amino acids are nitrogen containing chemical units that comprise proteins +- There are 20 different amino acids found in the proteins of the human body +- Each amino acid has a carbon atom that anchors + - Hydrogen atom + - Amino or nitrogen containing group + - R group (side chain) + - carboxylic acid group +- nonessential amino acids are a group of amino acids that the body can make +- Essential amino acids are amino acids the body cannot make or cannot make enough of to meet its needs +- Conditionally essential amino acids are the amino acids the body cannot make or cannot make enough of to meet its needs +- There are 9 essential acids and 11 non-essential acids +| Essential | Non \ No newline at end of file From 266eba545d80f520a0e8e61ceac621d57bb84102 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 15 Oct 2024 12:37:53 -0600 Subject: [PATCH 0453/1027] vault backup: 2024-10-15 12:37:53 --- education/nutrition/Proteins.md | 30 +++++++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/education/nutrition/Proteins.md b/education/nutrition/Proteins.md index 38dbd39..3236f86 100644 --- a/education/nutrition/Proteins.md +++ b/education/nutrition/Proteins.md @@ -1,9 +1,6 @@ Proteins are large, complex, organic molecules made up of **amino acids**. - Contain carbon, hydrogen, oxygen, and nitrogen - Found in plants, animals, bacteria, and viruses -- Proteins also help maintain acid-base balance. - - Maintaining the proper pH of body fluids - - Act as a **buffer** - Major functions of protein in the body: - To build new cells and many parts of cells - As a component in hardened structures like hair and nails @@ -15,7 +12,6 @@ Proteins are large, complex, organic molecules made up of **amino acids**. - As transporters - To make certain hormones - As an energy source (as a last resort) -- # Introduction - By helping to maintain fluid balance, proteins prevent **edema** (accumulation of fluid in tissues - Proteins also help maintain **acid-base balance**. @@ -34,4 +30,28 @@ Proteins are large, complex, organic molecules made up of **amino acids**. - Essential amino acids are amino acids the body cannot make or cannot make enough of to meet its needs - Conditionally essential amino acids are the amino acids the body cannot make or cannot make enough of to meet its needs - There are 9 essential acids and 11 non-essential acids -| Essential | Non \ No newline at end of file + +| Essential | Nonessential | +| ---------------------------- | ------------- | +| Histidine | Alanine | +| Isoleucine | Aspartic acid | +| Leucine | Asparagine | +| Lysine | Glutanic acid | +| Methionine | Serine | +| Phenylanaline | Argine | +| Threonine | Cysteine | +| Tryptophan (extra important) | GLutamine | +| Valine | Glycine | +| | Proline | +| | Tyrosine | +TT HILL MVP + +# Synthesis +A specific order of amino acids is needed to formulate a protein. + +# DNA +- DNA (deoxyribonucleic acid) provides instructions for making proteins. + - **Genes** are a portion of DNA + - To make proteins, cells assemble amino acids into specific sequences according to information from DNA +- A **peptide bond** is a chemical attraction that connects two amino acids together +- \ No newline at end of file From 2a048e17bb5a76f1f94fcdb0ac389849b532e390 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 15 Oct 2024 12:42:53 -0600 Subject: [PATCH 0454/1027] vault backup: 2024-10-15 12:42:53 --- education/nutrition/Proteins.md | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/education/nutrition/Proteins.md b/education/nutrition/Proteins.md index 3236f86..37e10bc 100644 --- a/education/nutrition/Proteins.md +++ b/education/nutrition/Proteins.md @@ -54,4 +54,17 @@ A specific order of amino acids is needed to formulate a protein. - **Genes** are a portion of DNA - To make proteins, cells assemble amino acids into specific sequences according to information from DNA - A **peptide bond** is a chemical attraction that connects two amino acids together -- \ No newline at end of file + +# DNA Process +1. Protein synthesis begins when a section of DNA unwinds, exposing a single portion (a gene). The gene contains coded info about the order of amino acids that comprise a specific protein +2. The gene undergoes **transcription**, that is, the sequence of amino acids copied is copied in a special manner, forming **messenger RNA** (mRNA) in the process. +3. mRNA transforms the information concerning the amino acid sequence form the nucleus to **ribosomes**, protein manufacturing sites in cytoplasm. +4. During the **translation** process, ribosomes "read" mRNA. The coded instructions indicate which amino acid to add to the polypeptide chain and its sequence. +5. Each specific **transfer RNA** (tRNA) molecule conveys a particular amino acid to the ribosome. +6. At the ribosome, the amino acid that has been delivered by the tRNA attaches to the peptide chain, lengthening it. +7. When the translation process is complete, the ribosome release the polypeptide, and the new protein generally undergoes further processing at other sites within the cytoplasm. + +Summary: +- Transcription: DNA unwinds, gene gets copied forming mRNA, happens in the nucleus + - DNA -> mRNA +- Translation: mRNA give info to ribosomes and they "read" mRNA. trNA gets an \ No newline at end of file From 6a7f3be7e1f0c58ae85f8fc50271dfb2434870dd Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 15 Oct 2024 12:47:53 -0600 Subject: [PATCH 0455/1027] vault backup: 2024-10-15 12:47:53 --- education/nutrition/Proteins.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/education/nutrition/Proteins.md b/education/nutrition/Proteins.md index 37e10bc..9da2871 100644 --- a/education/nutrition/Proteins.md +++ b/education/nutrition/Proteins.md @@ -67,4 +67,10 @@ A specific order of amino acids is needed to formulate a protein. Summary: - Transcription: DNA unwinds, gene gets copied forming mRNA, happens in the nucleus - DNA -> mRNA -- Translation: mRNA give info to ribosomes and they "read" mRNA. trNA gets an \ No newline at end of file +- Translation: mRNA give info to ribosomes and they "read" mRNA. trNA gets each amino acid and brings it to the ribosome to be attached to the peptide chain. Happens in **cytoplasm**. + - mRNA -> ribosomes, ribosomes read mRNA -> tRNA grabs the amino acid needed -> ribosomes create peptide chain + +# Protein Structure +- The shape of protein is important because it influences the compound's function +- Sickle cell anemia is an inherited form of anemia. +- **Denaturation** alters a protein's natural shape and function by exposing it to conditions such as heat, acids, and physical agitation. This change is permanent. \ No newline at end of file From 88a9f725d0fd547b47e9028b8c880c51a2b02752 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 15 Oct 2024 12:52:53 -0600 Subject: [PATCH 0456/1027] vault backup: 2024-10-15 12:52:53 --- education/nutrition/Proteins.md | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/education/nutrition/Proteins.md b/education/nutrition/Proteins.md index 9da2871..f420770 100644 --- a/education/nutrition/Proteins.md +++ b/education/nutrition/Proteins.md @@ -73,4 +73,19 @@ Summary: # Protein Structure - The shape of protein is important because it influences the compound's function - Sickle cell anemia is an inherited form of anemia. -- **Denaturation** alters a protein's natural shape and function by exposing it to conditions such as heat, acids, and physical agitation. This change is permanent. \ No newline at end of file +- **Denaturation** alters a protein's natural shape and function by exposing it to conditions such as heat, acids, and physical agitation. This change is permanent. + +# In Foods +- Animal foods generally provide higher amounts of protein than similar quantities of plant foods. +- Certain parts of plants provide more protein than other parts + - Seeds, tree nuts, legumes supply more + - Fruits or edible leaves, roots, flowers, and stems of vegetables provide less +- Legumes are parts of plants that produce pods with a single row of seeds. + - Peas + - Peanuts + - Lentils + - Soybeans +- High quality (complete) protein is a protein that contains all essential amino acids in amounts that support the deposition of protein in tissues and the growth of a young person. + - Meat, fish, poultry, eggs, **milk** +- Low quality (incomplete) protein is a protein that lacks or has inadequate amounts of one or more of the essential amino acids +- \ No newline at end of file From 2a9ca1d79f405323e637149e9e7d3c4be636e08f Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 15 Oct 2024 12:57:53 -0600 Subject: [PATCH 0457/1027] vault backup: 2024-10-15 12:57:53 --- education/nutrition/Proteins.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/education/nutrition/Proteins.md b/education/nutrition/Proteins.md index f420770..77cbb06 100644 --- a/education/nutrition/Proteins.md +++ b/education/nutrition/Proteins.md @@ -88,4 +88,4 @@ Summary: - High quality (complete) protein is a protein that contains all essential amino acids in amounts that support the deposition of protein in tissues and the growth of a young person. - Meat, fish, poultry, eggs, **milk** - Low quality (incomplete) protein is a protein that lacks or has inadequate amounts of one or more of the essential amino acids -- \ No newline at end of file +- A limiting amino acid is the essential amino acid found in the lowest concentration of a particular protein source \ No newline at end of file From 39e66d507c77d5731a34b37371250fa07dee6415 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 15 Oct 2024 13:02:53 -0600 Subject: [PATCH 0458/1027] vault backup: 2024-10-15 13:02:53 --- education/nutrition/Proteins.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/education/nutrition/Proteins.md b/education/nutrition/Proteins.md index 77cbb06..b2337a3 100644 --- a/education/nutrition/Proteins.md +++ b/education/nutrition/Proteins.md @@ -88,4 +88,14 @@ Summary: - High quality (complete) protein is a protein that contains all essential amino acids in amounts that support the deposition of protein in tissues and the growth of a young person. - Meat, fish, poultry, eggs, **milk** - Low quality (incomplete) protein is a protein that lacks or has inadequate amounts of one or more of the essential amino acids -- A limiting amino acid is the essential amino acid found in the lowest concentration of a particular protein source \ No newline at end of file +- A limiting amino acid is the essential amino acid found in the lowest concentration of a particular protein source\ + +- A healthy adult's RDA for protein is **0.8 g/kg** (apparently low) +- Protein needs increase during + - Pregnancy + - Breastfeeding + - Periods of rapid growth + - Recovery + - Serious illness + - Blood losses + - Burns \ No newline at end of file From c53729feb4ff85981a5753f45b2fadf7aa5fd42a Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 15 Oct 2024 13:12:53 -0600 Subject: [PATCH 0459/1027] vault backup: 2024-10-15 13:12:53 --- education/nutrition/Proteins.md | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/education/nutrition/Proteins.md b/education/nutrition/Proteins.md index b2337a3..a48a5e1 100644 --- a/education/nutrition/Proteins.md +++ b/education/nutrition/Proteins.md @@ -98,4 +98,20 @@ Summary: - Recovery - Serious illness - Blood losses - - Burns \ No newline at end of file + - Burns + +# Digestion +- Protein digestion begins in the stomach +- Hydrochloric acid denatures food proteins and activates pepsin + - Gastric enzymes that break proteins down into smaller polypeptides +- After polypeptides enter the small intestine, the pancreas secretes protein splitting enzymes. +- Trypsin and chymotrypsin +- Enzymes released by absorptive cells break down shortened peptides into dipeptides and tripeptides + - Two and three amino acids respectively +- Amino acids are carried to absorptive cells by carrier systems +- After absorption, amino acids enter the capillary of villus + - Travel to liver via hepatic portal vein + - Liver keeps some amino acids + - Release the rest into circulation +- Protein turnover is the cellular process of breaking down proteins and recycling their amino acids. + - Endogenous is a source of nitrogen \ No newline at end of file From df71fccae1c4b69c413b44a0d16dc3abeea0dfc8 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 15 Oct 2024 13:28:11 -0600 Subject: [PATCH 0460/1027] vault backup: 2024-10-15 13:28:11 --- education/nutrition/Proteins.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/education/nutrition/Proteins.md b/education/nutrition/Proteins.md index a48a5e1..99782f6 100644 --- a/education/nutrition/Proteins.md +++ b/education/nutrition/Proteins.md @@ -114,4 +114,11 @@ Summary: - Liver keeps some amino acids - Release the rest into circulation - Protein turnover is the cellular process of breaking down proteins and recycling their amino acids. - - Endogenous is a source of nitrogen \ No newline at end of file + - Endogenous is a source of nitrogen from within the body + - Exogenous is a source of nitrogen from outside the body + - Dietary protein +- **Deanimation** is the removal of nitrogen-containing group from an amino acid. +- A carbon skeleton is the remains of an animo acid following deanimation and removal of the nitrogen containing component of the amino acid. Can be used to create glucose, energy, or fatty acids. +- Transanimation is the transfer of the nitrogen containing group from an unneeded amino acid to a carbon skeleton to form an amino acid. + +TODO: keep going from 7.6 \ No newline at end of file From 1d132f8316ee6644c2f153c6e3ed11004816febd Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 15 Oct 2024 20:22:02 -0600 Subject: [PATCH 0461/1027] vault backup: 2024-10-15 20:22:02 --- education/nutrition/Proteins.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/education/nutrition/Proteins.md b/education/nutrition/Proteins.md index 99782f6..ccf2a74 100644 --- a/education/nutrition/Proteins.md +++ b/education/nutrition/Proteins.md @@ -117,8 +117,12 @@ Summary: - Endogenous is a source of nitrogen from within the body - Exogenous is a source of nitrogen from outside the body - Dietary protein -- **Deanimation** is the removal of nitrogen-containing group from an amino acid. +- **Deamination** is the removal of nitrogen-containing group from an amino acid. - A carbon skeleton is the remains of an animo acid following deanimation and removal of the nitrogen containing component of the amino acid. Can be used to create glucose, energy, or fatty acids. -- Transanimation is the transfer of the nitrogen containing group from an unneeded amino acid to a carbon skeleton to form an amino acid. +- Transamination is the transfer of the nitrogen containing group from an unneeded amino acid to a carbon skeleton to form an amino acid. +- Blood urea nitrogen (BUN) is a measure of the concentration of urea in blood. + - Assesses kidney function + - Normal values are from 7-20 mg/dL +- Urine urea nitrogen (UUN) is a measure of the concentration of TODO: keep going from 7.6 \ No newline at end of file From 5e72d7bfefc2396ec5666e75d84a63553a91ed28 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 15 Oct 2024 20:27:02 -0600 Subject: [PATCH 0462/1027] vault backup: 2024-10-15 20:27:02 --- education/nutrition/Proteins.md | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/education/nutrition/Proteins.md b/education/nutrition/Proteins.md index ccf2a74..b999d3b 100644 --- a/education/nutrition/Proteins.md +++ b/education/nutrition/Proteins.md @@ -123,6 +123,32 @@ Summary: - Blood urea nitrogen (BUN) is a measure of the concentration of urea in blood. - Assesses kidney function - Normal values are from 7-20 mg/dL -- Urine urea nitrogen (UUN) is a measure of the concentration of +- Urine urea nitrogen (UUN) is a measure of the concentration of urea in urine + - Can be used as a marker of protein intake + - Normal values are from 12 to 20 g in a 24 hour sample. +- Nitrogen balance or nitrogen equilibrium is the balancing of nitrogen intake with nitrogen losses +- Positive nitrogen balance is the state in which the body retains more nitrogen than it loses +- Negative nitrogen balance is the state in which the body loses more nitrogen than it retains. -TODO: keep going from 7.6 \ No newline at end of file +# Meeting needs +- Protein comprises about 15% of the typical American's total energy intake + - **AMDR is 10-35%** +- Complementary combinations is the mixing of certain plant foods to provide all essential amino acids without adding animal products + - Plant foods are poor sources of one or more essential amino acids + +# Malnutrition +- High amounts of animal proteins and saturated fat is associated with: + - Heart disease + - Colorectal cancer + - Prostate cancer +- Consumption of red and processed meats is associated with cancers of the: + - Pancreas + - Stomach + - Esophagus + - Breast +- **High protein diets may lead to** + - Urinary loss of calcium + - Osteoporosis + - Dehydration + - Poor kidney health +- **undernutrition** is the \ No newline at end of file From 42c9acef99c68f0027435179691a88f367c2be90 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 15 Oct 2024 20:32:02 -0600 Subject: [PATCH 0463/1027] vault backup: 2024-10-15 20:32:02 --- education/nutrition/Proteins.md | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/education/nutrition/Proteins.md b/education/nutrition/Proteins.md index b999d3b..f76abce 100644 --- a/education/nutrition/Proteins.md +++ b/education/nutrition/Proteins.md @@ -151,4 +151,18 @@ Summary: - Osteoporosis - Dehydration - Poor kidney health -- **undernutrition** is the \ No newline at end of file +- **Undernutrition** is the lack of food + - Widespread in poor nations +- **Protein-eneregy malnutrition (PEM)** occurs where the diet lacks sufficient protein and energy + - Edema is a sign of PEM +- **Kwashiorkor** is a form of undernutrition that results from consuming adequate energy and insufficient high quality protein +- Symptoms in children include: + - Stunted growth + - Blond, sparse, brittle, hair + - Patches of skin that have lost normal coloration + - Swollen cheeks, arms, legs, and belly +- **Marasmic kwashiorkor** is a form of undernutrition that results in a child with kwashiorkor who then starts to not consume enough energy; characterized by edema and wasting +- Marasmus is a form of undernutrition that results from starvation; diet lacks energy and nutrients + - Loss of subcutaneous fat and deeper fat stores + +# Food allergies From bf6755c28c7d2839d380c1c3151de14e7060299a Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 15 Oct 2024 20:37:02 -0600 Subject: [PATCH 0464/1027] vault backup: 2024-10-15 20:37:02 --- education/nutrition/Proteins.md | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/education/nutrition/Proteins.md b/education/nutrition/Proteins.md index f76abce..73b073d 100644 --- a/education/nutrition/Proteins.md +++ b/education/nutrition/Proteins.md @@ -166,3 +166,35 @@ Summary: - Loss of subcutaneous fat and deeper fat stores # Food allergies +- A food allergy is an inflammatory response that results when the immune system reacts inappropriately to an allergen in a food + - Allergen is usually a protein +- Some protein in food does not undergo complete digestion + - Immune cells mount a defensive response +- Signs and symptoms of a food allergy include: + - Hives + - Swollen, itchy lips + - Eczema + - Difficulty swallowing + - Wheezing and difficulty breathing + - Abdominal pain + - Vomiting + - Diarrhea +- Top food allergens in the US include: + - Cow's milk + - Crustacean shellfish + - Eggs + - Fish + - Peanuts + - Sesame + - Soybeans + - Tree nuts + - Wheat +- Food intolerances are unpleasant physical reactions following consumption of certain foods, symptoms include: + - Skin flushing + - Hives + - Difficulty swallowing + - Vomiting + - Diarrhea + - Dizziness + - Headache +- Phenylketonuria is a genetic metabolic disorder characterized by the inability to convert the amino acid phenylalanine to tyrosine, resulting in an accumulation of phenylalanine \ No newline at end of file From 927e3d0bde822fe08e2d80322c28724fde5f8594 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 15 Oct 2024 20:42:02 -0600 Subject: [PATCH 0465/1027] vault backup: 2024-10-15 20:42:02 --- education/nutrition/Proteins.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/education/nutrition/Proteins.md b/education/nutrition/Proteins.md index 73b073d..50713af 100644 --- a/education/nutrition/Proteins.md +++ b/education/nutrition/Proteins.md @@ -197,4 +197,7 @@ Summary: - Diarrhea - Dizziness - Headache -- Phenylketonuria is a genetic metabolic disorder characterized by the inability to convert the amino acid phenylalanine to tyrosine, resulting in an accumulation of phenylalanine \ No newline at end of file +- Phenylketonuria is a genetic metabolic disorder characterized by the inability to convert the amino acid phenylalanine to tyrosine, resulting in an accumulation of phenylalanine. +- Celiac disease and gluten sensitivity + - Celiac disease is an inherited condition in which the protein gluten cannot be absorbed, resulting in damage to the small intestine and poor absorption of nutrients. + - Gluten is a type of protein found in many grains, provides texture and shape to baked products \ No newline at end of file From fdec43ed1e03de987bd623414b15cb989cc5a3e1 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 16 Oct 2024 10:07:57 -0600 Subject: [PATCH 0466/1027] vault backup: 2024-10-16 10:07:57 --- education/math/MATH1060 (trig)/Addition and Subtraction.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 education/math/MATH1060 (trig)/Addition and Subtraction.md diff --git a/education/math/MATH1060 (trig)/Addition and Subtraction.md b/education/math/MATH1060 (trig)/Addition and Subtraction.md new file mode 100644 index 0000000..d90059b --- /dev/null +++ b/education/math/MATH1060 (trig)/Addition and Subtraction.md @@ -0,0 +1,3 @@ +Given the formula $\sin(\alpha + \beta)$: + +$$ \sin() \ No newline at end of file From 4dfc708a7233ec274c6da65f0debd48c4cdd6703 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 16 Oct 2024 10:18:30 -0600 Subject: [PATCH 0467/1027] vault backup: 2024-10-16 10:18:30 --- education/math/MATH1060 (trig)/Addition and Subtraction.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/education/math/MATH1060 (trig)/Addition and Subtraction.md b/education/math/MATH1060 (trig)/Addition and Subtraction.md index d90059b..aebf144 100644 --- a/education/math/MATH1060 (trig)/Addition and Subtraction.md +++ b/education/math/MATH1060 (trig)/Addition and Subtraction.md @@ -1,3 +1,4 @@ Given the formula $\sin(\alpha + \beta)$: - -$$ \sin() \ No newline at end of file +$$ \sin(\alpha + \beta) = \sin(\alpha)\cos(\beta) + \cos(\alpha)\sin(\beta) $$ +Given the formula $\cos(\alpha + \beta)$: +$$ \cos(\alpha + \beta) = \ No newline at end of file From 187699f1444a6ae188d6f4831d87ceab05f192ac Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 16 Oct 2024 11:23:24 -0600 Subject: [PATCH 0468/1027] vault backup: 2024-10-16 11:23:24 --- education/math/MATH1060 (trig)/Addition and Subtraction.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/education/math/MATH1060 (trig)/Addition and Subtraction.md b/education/math/MATH1060 (trig)/Addition and Subtraction.md index aebf144..a3b4ee6 100644 --- a/education/math/MATH1060 (trig)/Addition and Subtraction.md +++ b/education/math/MATH1060 (trig)/Addition and Subtraction.md @@ -1,4 +1,4 @@ Given the formula $\sin(\alpha + \beta)$: $$ \sin(\alpha + \beta) = \sin(\alpha)\cos(\beta) + \cos(\alpha)\sin(\beta) $$ Given the formula $\cos(\alpha + \beta)$: -$$ \cos(\alpha + \beta) = \ No newline at end of file +$$ \cos(\alpha + \beta) = \cos(\alpha)\cos(\beta) - \sin(\alpha)\sin(\beta) $$ From 93950765586b75612937caeb4a349622ddea7492 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Mon, 21 Oct 2024 09:38:49 -0600 Subject: [PATCH 0469/1027] vault backup: 2024-10-21 09:38:49 --- notes/Stronger 3d printing.md | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 notes/Stronger 3d printing.md diff --git a/notes/Stronger 3d printing.md b/notes/Stronger 3d printing.md new file mode 100644 index 0000000..99a4368 --- /dev/null +++ b/notes/Stronger 3d printing.md @@ -0,0 +1,11 @@ +- https://www.ankermake.com/blogs/guides/how-to-make-3d-prints-stronger +- https://blog.prusa3d.com/how-to-improve-your-3d-prints-with-annealing_31088/ +- https://markforged.com/resources/blog/joinery-onyx +- https://bigrep.com/posts/gyroid-infill-3d-printing/ +- https://www.hp.com/us-en/printers/3d-printers/learning-center/3d-printed-joint-design.html + +TL;dr: +- Use gyroid infill with an infill density of between 50-80% for structural prints +- Use PLA with a very slow speed, low layer height, and minimal/no cooling +- Use dovetail joints of scale defined in the HP article +- Anneal the print at 110c for ~30 minutes depending on the size and shape of the object \ No newline at end of file From 0b5764724d84b40ba0fb8cd7129af9bdf38915a4 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Mon, 21 Oct 2024 09:43:49 -0600 Subject: [PATCH 0470/1027] vault backup: 2024-10-21 09:43:49 --- education/math/MATH1060 (trig)/Identities.md | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/education/math/MATH1060 (trig)/Identities.md b/education/math/MATH1060 (trig)/Identities.md index 1fb1b7d..a31cfc8 100644 --- a/education/math/MATH1060 (trig)/Identities.md +++ b/education/math/MATH1060 (trig)/Identities.md @@ -1,3 +1,4 @@ +An **identity** is an equation that is true for all values of the variable for which the expressions in the equation are defined. # Trigonometric Identities All of the following only apply when the denominator is not equal to zero. @@ -63,4 +64,12 @@ $$ \frac{625}{625} - \frac{49}{625} = \frac{576}{625} = sin^2\theta $$ Getting rid of the exponent: $$ \sqrt{\frac{576}{625}} = \frac{24}{25} = sin\theta $$ -From there, you can find the rest of the identities fairly easily. \ No newline at end of file +From there, you can find the rest of the identities fairly easily. + +# Simplifying trig expressions using identities +Given the difference of square formula: +$$ a^2 - b^2 = (a-b)(a+b) $$ + +## Examples +Simplify $\tan\theta\sin\theta + \cos\theta$: +1. $\frac{\tan\theta\sin\theta}{\sin\theta} + \frac{cos\theta}\frac{sin\} \ No newline at end of file From 29456aebb0485d15125668d131666ef0650a1da0 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Mon, 21 Oct 2024 09:48:49 -0600 Subject: [PATCH 0471/1027] vault backup: 2024-10-21 09:48:49 --- education/math/MATH1060 (trig)/Identities.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/education/math/MATH1060 (trig)/Identities.md b/education/math/MATH1060 (trig)/Identities.md index a31cfc8..357bd7b 100644 --- a/education/math/MATH1060 (trig)/Identities.md +++ b/education/math/MATH1060 (trig)/Identities.md @@ -72,4 +72,7 @@ $$ a^2 - b^2 = (a-b)(a+b) $$ ## Examples Simplify $\tan\theta\sin\theta + \cos\theta$: -1. $\frac{\tan\theta\sin\theta}{\sin\theta} + \frac{cos\theta}\frac{sin\} \ No newline at end of file +1. $\dfrac{\sin\theta}{\cos\theta} * \sin\theta + \cos\theta$ +2. $\dfrac{\sin^2\theta}{cos\theta} + \cos\theta$ +3. $\dfrac{1 -\cos^2\theta}{cos\theta} + \cos\theta$ +4. \ No newline at end of file From e617329f6c4910aef0be8e094e7e2f194ae89820 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Mon, 21 Oct 2024 09:53:49 -0600 Subject: [PATCH 0472/1027] vault backup: 2024-10-21 09:53:49 --- education/math/MATH1060 (trig)/Identities.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/education/math/MATH1060 (trig)/Identities.md b/education/math/MATH1060 (trig)/Identities.md index 357bd7b..7d230df 100644 --- a/education/math/MATH1060 (trig)/Identities.md +++ b/education/math/MATH1060 (trig)/Identities.md @@ -74,5 +74,6 @@ $$ a^2 - b^2 = (a-b)(a+b) $$ Simplify $\tan\theta\sin\theta + \cos\theta$: 1. $\dfrac{\sin\theta}{\cos\theta} * \sin\theta + \cos\theta$ 2. $\dfrac{\sin^2\theta}{cos\theta} + \cos\theta$ -3. $\dfrac{1 -\cos^2\theta}{cos\theta} + \cos\theta$ -4. \ No newline at end of file +3. $(\dfrac{\sin^2\theta}{cos\theta} + \cos\theta)\dfrac{\cos\theta}{\cos\theta} = \sin^2\theta*\cos^2\theta + \cos\theta$ + +Simplify $\defrac{2 + tan^2} \ No newline at end of file From 9c98139af9b9af401108e11de58f17869c4da23c Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Mon, 21 Oct 2024 10:00:25 -0600 Subject: [PATCH 0473/1027] vault backup: 2024-10-21 10:00:25 --- education/math/MATH1060 (trig)/Identities.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/education/math/MATH1060 (trig)/Identities.md b/education/math/MATH1060 (trig)/Identities.md index 7d230df..2f2acf6 100644 --- a/education/math/MATH1060 (trig)/Identities.md +++ b/education/math/MATH1060 (trig)/Identities.md @@ -76,4 +76,4 @@ Simplify $\tan\theta\sin\theta + \cos\theta$: 2. $\dfrac{\sin^2\theta}{cos\theta} + \cos\theta$ 3. $(\dfrac{\sin^2\theta}{cos\theta} + \cos\theta)\dfrac{\cos\theta}{\cos\theta} = \sin^2\theta*\cos^2\theta + \cos\theta$ -Simplify $\defrac{2 + tan^2} \ No newline at end of file +Si\ \ No newline at end of file From 523f968027f72e410232aef2d29a8cd4f4daa92f Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Mon, 21 Oct 2024 14:31:46 -0600 Subject: [PATCH 0474/1027] vault backup: 2024-10-21 14:31:46 --- education/software development/ECE1400/C.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/education/software development/ECE1400/C.md b/education/software development/ECE1400/C.md index 9d12e93..7bb2ca9 100644 --- a/education/software development/ECE1400/C.md +++ b/education/software development/ECE1400/C.md @@ -48,6 +48,9 @@ int arr_size = sizeof(arr) / sizeof(arr[0]); ``` +# Pointers + + # Formatting specifiers # Standard library From 35b709d7ffb3ae682a2cdf2c5fb5a312f90d6661 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Mon, 21 Oct 2024 14:55:31 -0600 Subject: [PATCH 0475/1027] vault backup: 2024-10-21 14:55:31 --- education/software development/ECE1400/C.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/education/software development/ECE1400/C.md b/education/software development/ECE1400/C.md index 7bb2ca9..d5589af 100644 --- a/education/software development/ECE1400/C.md +++ b/education/software development/ECE1400/C.md @@ -49,7 +49,8 @@ int arr_size = sizeof(arr) / sizeof(arr[0]); ``` # Pointers - +`&` gives you the address of a variable +`*` gives you the value in memory that an address points to. # Formatting specifiers From 8def4dbc8e1bcd15ed9c0ed9a53b9363dec3cd8e Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 22 Oct 2024 11:20:29 -0600 Subject: [PATCH 0476/1027] vault backup: 2024-10-22 11:20:29 --- .obsidian/core-plugins.json | 49 +++++++++++++++++++++++-------------- 1 file changed, 31 insertions(+), 18 deletions(-) diff --git a/.obsidian/core-plugins.json b/.obsidian/core-plugins.json index 372b9d1..54ddc82 100644 --- a/.obsidian/core-plugins.json +++ b/.obsidian/core-plugins.json @@ -1,18 +1,31 @@ -[ - "file-explorer", - "global-search", - "switcher", - "graph", - "backlink", - "canvas", - "tag-pane", - "properties", - "page-preview", - "note-composer", - "command-palette", - "editor-status", - "bookmarks", - "markdown-importer", - "word-count", - "file-recovery" -] \ No newline at end of file +{ + "file-explorer": true, + "global-search": true, + "switcher": true, + "graph": true, + "backlink": true, + "outgoing-link": false, + "tag-pane": true, + "page-preview": true, + "daily-notes": false, + "templates": false, + "note-composer": true, + "command-palette": true, + "slash-command": false, + "editor-status": true, + "starred": false, + "markdown-importer": true, + "zk-prefixer": false, + "random-note": false, + "outline": false, + "word-count": true, + "slides": false, + "audio-recorder": false, + "workspaces": false, + "file-recovery": true, + "publish": false, + "sync": false, + "canvas": true, + "bookmarks": true, + "properties": true +} \ No newline at end of file From 9aefc750855852b19460f86b46c6fb4f94dee8b6 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 22 Oct 2024 12:29:00 -0600 Subject: [PATCH 0477/1027] vault backup: 2024-10-22 12:29:00 --- education/nutrition/Untitled.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 education/nutrition/Untitled.md diff --git a/education/nutrition/Untitled.md b/education/nutrition/Untitled.md new file mode 100644 index 0000000..e69de29 From 081f25169a4453110b7626149441dc1f5d01d88a Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 22 Oct 2024 12:34:00 -0600 Subject: [PATCH 0478/1027] vault backup: 2024-10-22 12:34:00 --- education/nutrition/Energy Balance & Weight Management.md | 7 +++++++ education/nutrition/Untitled.md | 0 2 files changed, 7 insertions(+) create mode 100644 education/nutrition/Energy Balance & Weight Management.md delete mode 100644 education/nutrition/Untitled.md diff --git a/education/nutrition/Energy Balance & Weight Management.md b/education/nutrition/Energy Balance & Weight Management.md new file mode 100644 index 0000000..ae35711 --- /dev/null +++ b/education/nutrition/Energy Balance & Weight Management.md @@ -0,0 +1,7 @@ +- An overweight person has extra weight from bones, fat, muscle, body fat, and/or body wader +- Obesity is a condition characterized by excessive and unhealthy bodyfat + +# Consequences +## Obesity +- Type II Diabetes (DM) +- \ No newline at end of file diff --git a/education/nutrition/Untitled.md b/education/nutrition/Untitled.md deleted file mode 100644 index e69de29..0000000 From a384a14e5df77939a3cafd4f2f6d4e3d53e78e02 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 22 Oct 2024 12:39:00 -0600 Subject: [PATCH 0479/1027] vault backup: 2024-10-22 12:39:00 --- .../Energy Balance & Weight Management.md | 30 ++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/education/nutrition/Energy Balance & Weight Management.md b/education/nutrition/Energy Balance & Weight Management.md index ae35711..e469a74 100644 --- a/education/nutrition/Energy Balance & Weight Management.md +++ b/education/nutrition/Energy Balance & Weight Management.md @@ -4,4 +4,32 @@ # Consequences ## Obesity - Type II Diabetes (DM) -- \ No newline at end of file +- Hypertension +- Cardiovascular disease +- **Obstructive sleep apnea** +- Osteoarthritis +- Infertility +- Certain cancers +- Gallbladder disease +- Respiratory problems +- Surgical complications +- Clinical depression +- Metabolic syndrome + +# Underweight +- Fatigue / Anemia +- Nutrient deficiencies +- Lack of energy +- Poor concentration +- Unhealthy hair, skin, nails +- Osteoporosis +- Illness/infection +- Bone fractures +- Amenorrhea +- Infertility +- High risk pregnancy +- Clinical depression +- Low body temperature + +# BMI +- A numerical value based on the ratio between a person's he \ No newline at end of file From 7b0824a620dc4bfaa2fb6e7a26874ea3df114792 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 22 Oct 2024 12:44:00 -0600 Subject: [PATCH 0480/1027] vault backup: 2024-10-22 12:44:00 --- .../Energy Balance & Weight Management.md | 26 ++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/education/nutrition/Energy Balance & Weight Management.md b/education/nutrition/Energy Balance & Weight Management.md index e469a74..550820f 100644 --- a/education/nutrition/Energy Balance & Weight Management.md +++ b/education/nutrition/Energy Balance & Weight Management.md @@ -32,4 +32,28 @@ - Low body temperature # BMI -- A numerical value based on the ratio between a person's he \ No newline at end of file +- A numerical value based on the ratio between a person's height and weight that is used to **classify a person's weight** and **measure risk for disease** +- Can be calculated using: +$$ \dfrac{Weight (kg)}{Height (m)^2} or \dfrac{Weight (lbs)}{Height (in)^2} * 703 $$ +Conversions: +- Lbs -> Kg: Divide by 2.2 +- Feet -> Inches: Multiply by 12 +- Inches -> Meters: Multiply by 2.54 / 100 + +## Ranges +- Underweight: BMI < 18.5 +- Healthy weight: BMI 18.5 - 24.9 +- Overweight: BMI 25.0 - 29.9 +- Obese: BMI >= Obses + - Obese Class I: BMI 30-34.9 + - Obese Class II: BMI 35-39.9 + - Obese Class III: BMI >=40 + +## Limitations +Not always accurate for: +- Highly muscular individuals +- Older adults +- Chronically ill individuals +- BMI does not take gender, age, race, or activity level into account + +## NWO \ No newline at end of file From 070367f6bebfddba361101439160d4ef7431b63f Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 22 Oct 2024 12:49:00 -0600 Subject: [PATCH 0481/1027] vault backup: 2024-10-22 12:49:00 --- education/nutrition/Energy Balance & Weight Management.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/education/nutrition/Energy Balance & Weight Management.md b/education/nutrition/Energy Balance & Weight Management.md index 550820f..94515ae 100644 --- a/education/nutrition/Energy Balance & Weight Management.md +++ b/education/nutrition/Energy Balance & Weight Management.md @@ -4,7 +4,7 @@ # Consequences ## Obesity - Type II Diabetes (DM) -- Hypertension +- **Hypertension** - Cardiovascular disease - **Obstructive sleep apnea** - Osteoarthritis @@ -15,6 +15,7 @@ - Surgical complications - Clinical depression - Metabolic syndrome +- **Stroke** # Underweight - Fatigue / Anemia @@ -56,4 +57,5 @@ Not always accurate for: - Chronically ill individuals - BMI does not take gender, age, race, or activity level into account -## NWO \ No newline at end of file +## NWO +- Normal weight obesity refers to a normal body weight as measured by BMI, but they actuall \ No newline at end of file From 248b8d8de96ac45f5db000b7f8d064dedbf807b4 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 22 Oct 2024 12:54:00 -0600 Subject: [PATCH 0482/1027] vault backup: 2024-10-22 12:54:00 --- education/nutrition/Energy Balance & Weight Management.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/education/nutrition/Energy Balance & Weight Management.md b/education/nutrition/Energy Balance & Weight Management.md index 94515ae..db5c012 100644 --- a/education/nutrition/Energy Balance & Weight Management.md +++ b/education/nutrition/Energy Balance & Weight Management.md @@ -58,4 +58,7 @@ Not always accurate for: - BMI does not take gender, age, race, or activity level into account ## NWO -- Normal weight obesity refers to a normal body weight as measured by BMI, but they actuall \ No newline at end of file +- Normal weight obesity refers to a normal body weight as measured by BMI, but they actually have higher body fat +- Comes with an associated risk of insulin resistance +- Diabetes +- Coronary artery disease \ No newline at end of file From 293adc2ee24500b6cfae0509fc145609d51e75f1 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 22 Oct 2024 12:59:00 -0600 Subject: [PATCH 0483/1027] vault backup: 2024-10-22 12:59:00 --- .../Energy Balance & Weight Management.md | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/education/nutrition/Energy Balance & Weight Management.md b/education/nutrition/Energy Balance & Weight Management.md index db5c012..ca84920 100644 --- a/education/nutrition/Energy Balance & Weight Management.md +++ b/education/nutrition/Energy Balance & Weight Management.md @@ -61,4 +61,19 @@ Not always accurate for: - Normal weight obesity refers to a normal body weight as measured by BMI, but they actually have higher body fat - Comes with an associated risk of insulin resistance - Diabetes -- Coronary artery disease \ No newline at end of file +- Coronary artery disease + +# Body Composition and Fat Distribution +- Body composition is the relative and absolute measurement of body tissues, usually expressed as a percent body fat +- Adipose tissue refers to fat cells +- Total body fat refers to to adipose tissue and essential fat +- Essential fat is fat that is vital for survival; found in cell membranes, certain bones, and nervous tissue. +- **Subcutaneous** is fat accumulation of adipose tissue cells in the tissue under the skin. + - This layer helps to: + - *Insulate the body against cold temps* + - *Protect the body from bumps and bruises* +- **Visceral fat** is the accumulation of adipose cells under the abdominal muscles and over the digestive organs to protect them + +- Types of obesity + - **Apple shaped (Central body)**: Centeral body obesity: Risk of heart diseases, stroke, diabetes, HTN, cancer + - **Gynoid (Pear shaped)**: Not associated w/ Chronic Disease Risk \ No newline at end of file From 764563a5bf03cf80d2b498e8ae5c5b02bd282654 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 22 Oct 2024 13:04:00 -0600 Subject: [PATCH 0484/1027] vault backup: 2024-10-22 13:04:00 --- .../nutrition/Energy Balance & Weight Management.md | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/education/nutrition/Energy Balance & Weight Management.md b/education/nutrition/Energy Balance & Weight Management.md index ca84920..37fac9b 100644 --- a/education/nutrition/Energy Balance & Weight Management.md +++ b/education/nutrition/Energy Balance & Weight Management.md @@ -75,5 +75,10 @@ Not always accurate for: - **Visceral fat** is the accumulation of adipose cells under the abdominal muscles and over the digestive organs to protect them - Types of obesity - - **Apple shaped (Central body)**: Centeral body obesity: Risk of heart diseases, stroke, diabetes, HTN, cancer - - **Gynoid (Pear shaped)**: Not associated w/ Chronic Disease Risk \ No newline at end of file + - **Apple shaped (Central body)**: Central body obesity: Risk of heart diseases, stroke, diabetes, HTN, cancer + - **Gynoid (Pear shaped)**: Not associated w/ Chronic Disease Risk + +## Assessment +- Hydrostatic weight (error of 2-3%) +- Air displacement plethysmography- BODPOD (error of 3-5%) +- Dual energy x-ray absorptiometry \ No newline at end of file From e5472a7b246aa666fcc9b57c16b730cb67c5a23d Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 22 Oct 2024 13:09:00 -0600 Subject: [PATCH 0485/1027] vault backup: 2024-10-22 13:09:00 --- .../nutrition/Energy Balance & Weight Management.md | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/education/nutrition/Energy Balance & Weight Management.md b/education/nutrition/Energy Balance & Weight Management.md index 37fac9b..74f27fe 100644 --- a/education/nutrition/Energy Balance & Weight Management.md +++ b/education/nutrition/Energy Balance & Weight Management.md @@ -81,4 +81,13 @@ Not always accurate for: ## Assessment - Hydrostatic weight (error of 2-3%) - Air displacement plethysmography- BODPOD (error of 3-5%) -- Dual energy x-ray absorptiometry \ No newline at end of file +- Dual energy x-ray absorptiometry: DEXA (Error of 1-4%) +- **Bio-electrical impedance** (Error: 3-4%) Sends a shock through your body and measures how long it takes +- Skinfold calipers (Error 3-5%) +- **Waist circumference -> 35 inches for a women** or **>40 inches for a man** is associated with central adiposity and increased health risk, specifically CVD risk + +## Health +- Losing as little as 5% of excess body fat + - Can increase HDL cholesterol levels + - Reduce high blood pressure + - Improve glucose tolerance \ No newline at end of file From 8cc26e7959a88bfb9f3276919972a56d3bfae386 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 22 Oct 2024 13:26:47 -0600 Subject: [PATCH 0486/1027] vault backup: 2024-10-22 13:26:47 --- .../Energy Balance & Weight Management.md | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/education/nutrition/Energy Balance & Weight Management.md b/education/nutrition/Energy Balance & Weight Management.md index 74f27fe..73443d0 100644 --- a/education/nutrition/Energy Balance & Weight Management.md +++ b/education/nutrition/Energy Balance & Weight Management.md @@ -90,4 +90,20 @@ Not always accurate for: - Losing as little as 5% of excess body fat - Can increase HDL cholesterol levels - Reduce high blood pressure - - Improve glucose tolerance \ No newline at end of file + - Improve glucose tolerance + +# Energy Exchange +## Energy In +- Carbs +- Lipids +- Proteins +- Alcohol + +## Energy Out (Total Energy Expenditure ) +- Basal metabolic rate + - The minimum number of kcals required to maintain normal body function after fasting and resting for 12 hours. **Accounts for ~60-75% of an individual's total energy use** + - Factors that increase BMR include thyroid hormone levels and postexercise recovery + - Factors that decrease BMR include starvation and aging. +- Physical activity +- Thermic effect of food +- Non-exercise activity \ No newline at end of file From da93ab2c5aeb3152836b401ea409b3c6120193d9 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 22 Oct 2024 17:36:38 -0600 Subject: [PATCH 0487/1027] vault backup: 2024-10-22 17:36:38 --- .../english/ENGL2010/How to Tame a Wild Tongue - Anzaldua.md | 0 .../english/ENGL2010/What Should Colleges Teach? - Fish.md | 0 .../english/ENGL2010/Why Argument Matters - Aikin and Talisse.md | 0 .../english/ENGL2010/Why Do We Argue? - Talisse & Aikin.md | 0 4 files changed, 0 insertions(+), 0 deletions(-) rename "education/english/ENGL2010/\"How to Tame a Wild Tongue\" - Anzaldua.md" => education/english/ENGL2010/How to Tame a Wild Tongue - Anzaldua.md (100%) rename "education/english/ENGL2010/\"What Should Colleges Teach?\" - Fish.md" => education/english/ENGL2010/What Should Colleges Teach? - Fish.md (100%) rename "education/english/ENGL2010/\"Why Argument Matters\" - Aikin and Talisse.md" => education/english/ENGL2010/Why Argument Matters - Aikin and Talisse.md (100%) rename "education/english/ENGL2010/\"Why Do We Argue?\" - Talisse & Aikin.md" => education/english/ENGL2010/Why Do We Argue? - Talisse & Aikin.md (100%) diff --git "a/education/english/ENGL2010/\"How to Tame a Wild Tongue\" - Anzaldua.md" b/education/english/ENGL2010/How to Tame a Wild Tongue - Anzaldua.md similarity index 100% rename from "education/english/ENGL2010/\"How to Tame a Wild Tongue\" - Anzaldua.md" rename to education/english/ENGL2010/How to Tame a Wild Tongue - Anzaldua.md diff --git "a/education/english/ENGL2010/\"What Should Colleges Teach?\" - Fish.md" b/education/english/ENGL2010/What Should Colleges Teach? - Fish.md similarity index 100% rename from "education/english/ENGL2010/\"What Should Colleges Teach?\" - Fish.md" rename to education/english/ENGL2010/What Should Colleges Teach? - Fish.md diff --git "a/education/english/ENGL2010/\"Why Argument Matters\" - Aikin and Talisse.md" b/education/english/ENGL2010/Why Argument Matters - Aikin and Talisse.md similarity index 100% rename from "education/english/ENGL2010/\"Why Argument Matters\" - Aikin and Talisse.md" rename to education/english/ENGL2010/Why Argument Matters - Aikin and Talisse.md diff --git "a/education/english/ENGL2010/\"Why Do We Argue?\" - Talisse & Aikin.md" b/education/english/ENGL2010/Why Do We Argue? - Talisse & Aikin.md similarity index 100% rename from "education/english/ENGL2010/\"Why Do We Argue?\" - Talisse & Aikin.md" rename to education/english/ENGL2010/Why Do We Argue? - Talisse & Aikin.md From eb2fca5f2db0e13acec8a815f3de3f34807e9de1 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 22 Oct 2024 20:41:27 -0600 Subject: [PATCH 0488/1027] vault backup: 2024-10-22 20:41:27 --- education/math/MATH1060 (trig)/Addition and Subtraction.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/education/math/MATH1060 (trig)/Addition and Subtraction.md b/education/math/MATH1060 (trig)/Addition and Subtraction.md index a3b4ee6..8f70705 100644 --- a/education/math/MATH1060 (trig)/Addition and Subtraction.md +++ b/education/math/MATH1060 (trig)/Addition and Subtraction.md @@ -2,3 +2,5 @@ Given the formula $\sin(\alpha + \beta)$: $$ \sin(\alpha + \beta) = \sin(\alpha)\cos(\beta) + \cos(\alpha)\sin(\beta) $$ Given the formula $\cos(\alpha + \beta)$: $$ \cos(\alpha + \beta) = \cos(\alpha)\cos(\beta) - \sin(\alpha)\sin(\beta) $$ +Given the formula $\tan(\alpha + \beta)$: +$$\frac{\alpha + \} \dfrac{\tan\alpha + \tan\beta}{1 - \tan\alpha\tan\beta} $$ \ No newline at end of file From d5b3c54761583077bdfcca3c115453e39ff41116 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 22 Oct 2024 20:46:27 -0600 Subject: [PATCH 0489/1027] vault backup: 2024-10-22 20:46:27 --- education/math/MATH1060 (trig)/Addition and Subtraction.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/education/math/MATH1060 (trig)/Addition and Subtraction.md b/education/math/MATH1060 (trig)/Addition and Subtraction.md index 8f70705..b4fda6c 100644 --- a/education/math/MATH1060 (trig)/Addition and Subtraction.md +++ b/education/math/MATH1060 (trig)/Addition and Subtraction.md @@ -1,6 +1,9 @@ Given the formula $\sin(\alpha + \beta)$: $$ \sin(\alpha + \beta) = \sin(\alpha)\cos(\beta) + \cos(\alpha)\sin(\beta) $$ +$$ \sin(\alpha - \beta) = \sin(\alpha)\cos(\beta) - \cos(\alpha)\sin(\beta) $$ Given the formula $\cos(\alpha + \beta)$: $$ \cos(\alpha + \beta) = \cos(\alpha)\cos(\beta) - \sin(\alpha)\sin(\beta) $$ +$$ \cos(\alpha - \beta) = \cos(\alpha)\cos(\beta) + \sin(\alpha)\sin(\beta) $$ Given the formula $\tan(\alpha + \beta)$: -$$\frac{\alpha + \} \dfrac{\tan\alpha + \tan\beta}{1 - \tan\alpha\tan\beta} $$ \ No newline at end of file +$$\tan(\alpha + \beta) = \dfrac{\tan\alpha + \tan\beta}{1 - \tan\alpha\tan\beta} $$ +$$\tan(\alpha - \beta) = \dfrac{\tan\alpha - \tan\beta}{1 + \tan\alpha\tan\beta} $$ From 4e834b5ebbf033546dee95ff16c9fca9fed096c3 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Thu, 24 Oct 2024 10:23:18 -0600 Subject: [PATCH 0490/1027] vault backup: 2024-10-24 10:23:18 --- ...elings - Emotion and News Literacy - Sivek.md | 16 ++++++++++++++++ .../MATH1060 (trig)/Addition and Subtraction.md | 14 ++++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 education/english/ENGL2010/Both Facts and Feelings - Emotion and News Literacy - Sivek.md diff --git a/education/english/ENGL2010/Both Facts and Feelings - Emotion and News Literacy - Sivek.md b/education/english/ENGL2010/Both Facts and Feelings - Emotion and News Literacy - Sivek.md new file mode 100644 index 0000000..ecf34df --- /dev/null +++ b/education/english/ENGL2010/Both Facts and Feelings - Emotion and News Literacy - Sivek.md @@ -0,0 +1,16 @@ +- What conversations are meaningful? +- What conversations are intentionally emotionally charged? +- Fake news is rising +- More people get news from social media +- The attention economy is extremely effective +- Social media is intentionally habit forming +- Hate speech is poorly moderated, if at all +- Fake news is meant to drive emotion +- Manipulating emotions through social media (fake news) should raise +- Emotional analytics *can* benefit the user +- Very small (1/250 sec) exposure to content still has an impact +- News literacy curriculum rarely addresses emotional news literacy +- Mindfulness is good +- System 1 and 2 thinking +- Schools should address larger societal issues in discussion surrounding news literacy +- \ No newline at end of file diff --git a/education/math/MATH1060 (trig)/Addition and Subtraction.md b/education/math/MATH1060 (trig)/Addition and Subtraction.md index b4fda6c..6989a28 100644 --- a/education/math/MATH1060 (trig)/Addition and Subtraction.md +++ b/education/math/MATH1060 (trig)/Addition and Subtraction.md @@ -7,3 +7,17 @@ $$ \cos(\alpha - \beta) = \cos(\alpha)\cos(\beta) + \sin(\alpha)\sin(\beta) $$ Given the formula $\tan(\alpha + \beta)$: $$\tan(\alpha + \beta) = \dfrac{\tan\alpha + \tan\beta}{1 - \tan\alpha\tan\beta} $$ $$\tan(\alpha - \beta) = \dfrac{\tan\alpha - \tan\beta}{1 + \tan\alpha\tan\beta} $$ + +## Cofunctions +Given that cofunctions are two functions that add up to 90 degrees, you can use the trig identities for sum and difference to find cofunctions. + +For a right triangle where $\alpha = \theta$, $\beta = \frac{\pi}{2} - \theta$. + +This means that $\sin(\theta) = \cos(\frac{\pi}{2} - \theta)$ + +Using this information, you can derive various cofunction identities. + +| $\sin\theta = \cos(\frac{\pi}{2} - \theta)$ | $\cos\theta = \sin(\frac{\pi}{2} - \theta)$ | +| ------------------------------------------- | -------------------------------------------- | +| $\tan\theta = \cot(\frac{\pi}{2} - \theta)$ | $\cot\theta = \tan(\frac{\pi}{2} - \theta))$ | +| $\sec\theta = \csc(\frac{\pi}{2} - \theta)$ | $\csc\theta = \sec(\frac{\pi}{2} - \theta)$ | From c597a67b410f6fdda52c1aeda3f285221475f2d1 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Fri, 25 Oct 2024 13:46:54 -0600 Subject: [PATCH 0491/1027] vault backup: 2024-10-25 13:46:54 --- .../software development/ECE1400/Chapter 11 Exercises.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 education/software development/ECE1400/Chapter 11 Exercises.md diff --git a/education/software development/ECE1400/Chapter 11 Exercises.md b/education/software development/ECE1400/Chapter 11 Exercises.md new file mode 100644 index 0000000..23036a8 --- /dev/null +++ b/education/software development/ECE1400/Chapter 11 Exercises.md @@ -0,0 +1,4 @@ +1. Suppose that the following declarations are in effect:.... + a. `14` + b. `34` + \ No newline at end of file From 22548282c37a404532c6e1a55eb9ebb1aec99fb5 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Fri, 25 Oct 2024 13:51:54 -0600 Subject: [PATCH 0492/1027] vault backup: 2024-10-25 13:51:54 --- .../ECE1400/Chapter 11 Exercises.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/education/software development/ECE1400/Chapter 11 Exercises.md b/education/software development/ECE1400/Chapter 11 Exercises.md index 23036a8..2e89c91 100644 --- a/education/software development/ECE1400/Chapter 11 Exercises.md +++ b/education/software development/ECE1400/Chapter 11 Exercises.md @@ -1,4 +1,12 @@ 1. Suppose that the following declarations are in effect:.... a. `14` b. `34` - \ No newline at end of file + c. `4` + d. `true` + e. `false` + +2. Suppose that `high`, `low`, and `middle` are all pointer variables of the same type, and the `low` and `high` point to elements of an array. Why is the following statement illegal, and how could it be fixed? +```c +middle = (low + high) / 2 +``` +The above statement is illegal because \ No newline at end of file From 87121bd4a20c9b118b24b53f14d023d9e1d8b824 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Fri, 25 Oct 2024 13:56:54 -0600 Subject: [PATCH 0493/1027] vault backup: 2024-10-25 13:56:54 --- education/software development/ECE1400/Chapter 11 Exercises.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/education/software development/ECE1400/Chapter 11 Exercises.md b/education/software development/ECE1400/Chapter 11 Exercises.md index 2e89c91..977ee81 100644 --- a/education/software development/ECE1400/Chapter 11 Exercises.md +++ b/education/software development/ECE1400/Chapter 11 Exercises.md @@ -9,4 +9,4 @@ ```c middle = (low + high) / 2 ``` -The above statement is illegal because \ No newline at end of file +The above statement is illegal because you can't add two pointers together \ No newline at end of file From f5c0b5f1bf8adb228fab4b50aeaec252618ccd60 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Fri, 25 Oct 2024 14:01:54 -0600 Subject: [PATCH 0494/1027] vault backup: 2024-10-25 14:01:54 --- .../software development/ECE1400/Chapter 11 Exercises.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/education/software development/ECE1400/Chapter 11 Exercises.md b/education/software development/ECE1400/Chapter 11 Exercises.md index 977ee81..e032e2a 100644 --- a/education/software development/ECE1400/Chapter 11 Exercises.md +++ b/education/software development/ECE1400/Chapter 11 Exercises.md @@ -9,4 +9,7 @@ ```c middle = (low + high) / 2 ``` -The above statement is illegal because you can't add two pointers together \ No newline at end of file +The above statement is illegal because you can't add an `int *` to an `int *`. It can be made legal by casting `low` and `high` to numbers, performing the operation, then casting to a pointer. +```c +middle = (int*) (((long) low + (long) high) / 2); +``` \ No newline at end of file From 9269af0cdd0e6be1c9cc413514d1e751feb3b4a5 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Fri, 25 Oct 2024 14:06:54 -0600 Subject: [PATCH 0495/1027] vault backup: 2024-10-25 14:06:54 --- .../software development/ECE1400/Chapter 11 Exercises.md | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/education/software development/ECE1400/Chapter 11 Exercises.md b/education/software development/ECE1400/Chapter 11 Exercises.md index e032e2a..f81b663 100644 --- a/education/software development/ECE1400/Chapter 11 Exercises.md +++ b/education/software development/ECE1400/Chapter 11 Exercises.md @@ -9,7 +9,12 @@ ```c middle = (low + high) / 2 ``` -The above statement is illegal because you can't add an `int *` to an `int *`. It can be made legal by casting `low` and `high` to numbers, performing the operation, then casting to a pointer. +The above statement is illegal because you can't add an `int *` to an `int *`. The below operation is legal because you can perform pointer subtraction, and because `low` is defined on the left hand side of the equation, then adding a long to a pointer is valid. ```c -middle = (int*) (((long) low + (long) high) / 2); +middle = low + (high - low) / 2; +``` + +3. What will be the contents of the `a` array after the following statements are executed? +```c +{1} ``` \ No newline at end of file From b88d3b4c024ec44c0ed77a0d89c868b17f67ad50 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Fri, 25 Oct 2024 14:32:38 -0600 Subject: [PATCH 0496/1027] vault backup: 2024-10-25 14:32:38 --- education/software development/ECE1400/Chapter 11 Exercises.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/education/software development/ECE1400/Chapter 11 Exercises.md b/education/software development/ECE1400/Chapter 11 Exercises.md index f81b663..4dcdc59 100644 --- a/education/software development/ECE1400/Chapter 11 Exercises.md +++ b/education/software development/ECE1400/Chapter 11 Exercises.md @@ -16,5 +16,5 @@ middle = low + (high - low) / 2; 3. What will be the contents of the `a` array after the following statements are executed? ```c -{1} +{10, 9, 8, 7, 6, 5, 4, 3, 2, 1} ``` \ No newline at end of file From a9bc338a6e9e569668a7bb34cc064af9eb5399a5 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sat, 26 Oct 2024 19:23:26 -0600 Subject: [PATCH 0497/1027] vault backup: 2024-10-26 19:23:26 --- education/nutrition/Energy Balance & Weight Management.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/education/nutrition/Energy Balance & Weight Management.md b/education/nutrition/Energy Balance & Weight Management.md index 73443d0..cc0a0a9 100644 --- a/education/nutrition/Energy Balance & Weight Management.md +++ b/education/nutrition/Energy Balance & Weight Management.md @@ -82,7 +82,7 @@ Not always accurate for: - Hydrostatic weight (error of 2-3%) - Air displacement plethysmography- BODPOD (error of 3-5%) - Dual energy x-ray absorptiometry: DEXA (Error of 1-4%) -- **Bio-electrical impedance** (Error: 3-4%) Sends a shock through your body and measures how long it takes +- **Bio-electrical impedance** (Error: 3-4%) Sends a shock through your body and measures how long it takes. Body fat resists electricity more than muscle. - Skinfold calipers (Error 3-5%) - **Waist circumference -> 35 inches for a women** or **>40 inches for a man** is associated with central adiposity and increased health risk, specifically CVD risk From fa81186df9c6531947140e83a585993e01414a99 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sat, 26 Oct 2024 19:28:26 -0600 Subject: [PATCH 0498/1027] vault backup: 2024-10-26 19:28:26 --- education/nutrition/Energy Balance & Weight Management.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/education/nutrition/Energy Balance & Weight Management.md b/education/nutrition/Energy Balance & Weight Management.md index cc0a0a9..5e07fcb 100644 --- a/education/nutrition/Energy Balance & Weight Management.md +++ b/education/nutrition/Energy Balance & Weight Management.md @@ -75,14 +75,14 @@ Not always accurate for: - **Visceral fat** is the accumulation of adipose cells under the abdominal muscles and over the digestive organs to protect them - Types of obesity - - **Apple shaped (Central body)**: Central body obesity: Risk of heart diseases, stroke, diabetes, HTN, cancer + - **Apple shaped (Central body)**: Central body obesity: Risk of heart diseases, stroke, diabetes, HTN, cancer. Th - **Gynoid (Pear shaped)**: Not associated w/ Chronic Disease Risk ## Assessment - Hydrostatic weight (error of 2-3%) - Air displacement plethysmography- BODPOD (error of 3-5%) - Dual energy x-ray absorptiometry: DEXA (Error of 1-4%) -- **Bio-electrical impedance** (Error: 3-4%) Sends a shock through your body and measures how long it takes. Body fat resists electricity more than muscle. +- **Bio-electrical impedance** (Error: 3-4%) Sends a shock through your body and measures how long it takes. Body fat resists electricity more. - Skinfold calipers (Error 3-5%) - **Waist circumference -> 35 inches for a women** or **>40 inches for a man** is associated with central adiposity and increased health risk, specifically CVD risk From eba8eb715d3b5f31f33b0f4f5567025c28224d87 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sat, 26 Oct 2024 19:33:26 -0600 Subject: [PATCH 0499/1027] vault backup: 2024-10-26 19:33:26 --- education/nutrition/Energy Balance & Weight Management.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/education/nutrition/Energy Balance & Weight Management.md b/education/nutrition/Energy Balance & Weight Management.md index 5e07fcb..15567e8 100644 --- a/education/nutrition/Energy Balance & Weight Management.md +++ b/education/nutrition/Energy Balance & Weight Management.md @@ -75,7 +75,7 @@ Not always accurate for: - **Visceral fat** is the accumulation of adipose cells under the abdominal muscles and over the digestive organs to protect them - Types of obesity - - **Apple shaped (Central body)**: Central body obesity: Risk of heart diseases, stroke, diabetes, HTN, cancer. Th + - **Apple shaped (Central body)**: Central body obesity: Risk of heart diseases, stroke, diabetes, HTN, cancer. This is more common in men. This is symbolic of extra visceral fat stores - **Gynoid (Pear shaped)**: Not associated w/ Chronic Disease Risk ## Assessment From c3c3962b4bc92efc41db341c5fb6e5060a6a4c4a Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sat, 26 Oct 2024 19:38:26 -0600 Subject: [PATCH 0500/1027] vault backup: 2024-10-26 19:38:26 --- education/nutrition/Energy Balance & Weight Management.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/education/nutrition/Energy Balance & Weight Management.md b/education/nutrition/Energy Balance & Weight Management.md index 15567e8..f15a3f6 100644 --- a/education/nutrition/Energy Balance & Weight Management.md +++ b/education/nutrition/Energy Balance & Weight Management.md @@ -105,5 +105,7 @@ Not always accurate for: - Factors that increase BMR include thyroid hormone levels and postexercise recovery - Factors that decrease BMR include starvation and aging. - Physical activity -- Thermic effect of food -- Non-exercise activity \ No newline at end of file +- Thermic effect of food (digestion, processing, et cetera) +- Non-exercise activity + +Ghrelin is a hormone secreted by the stomach that stimulates eating behavior. Grehlin \ No newline at end of file From d430c4fff9c0207ac2d2ae8f49b5266631b3aae7 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Mon, 28 Oct 2024 09:21:30 -0600 Subject: [PATCH 0501/1027] vault backup: 2024-10-28 09:21:30 --- .../ECE1400/Chapter 12 Exercises.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 education/software development/ECE1400/Chapter 12 Exercises.md diff --git a/education/software development/ECE1400/Chapter 12 Exercises.md b/education/software development/ECE1400/Chapter 12 Exercises.md new file mode 100644 index 0000000..2ae3dfc --- /dev/null +++ b/education/software development/ECE1400/Chapter 12 Exercises.md @@ -0,0 +1,19 @@ +1. Suppose that the following declarations are in effect:.... + a. `14` + b. `34` + c. `4` + d. `true` + e. `false` + +2. Suppose that `high`, `low`, and `middle` are all pointer variables of the same type, and the `low` and `high` point to elements of an array. Why is the following statement illegal, and how could it be fixed? +```c +middle = (low + high) / 2 +``` +The above statement is illegal because you can't add an `int *` to an `int *`. The below operation is legal because you can perform pointer subtraction, and because `low` is defined on the left hand side of the equation, then adding a long to a pointer is valid. +```c +middle = low + (high - low) / 2; +``` + +3. What will be the contents of the `a` array after the following statements are executed? +```c +{10, 9, 8, 7, 6, 5, 4, 3, 2, 1} From dc9a5d0289d97c1e1c04be0474be079a1b141529 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Mon, 28 Oct 2024 09:26:30 -0600 Subject: [PATCH 0502/1027] vault backup: 2024-10-28 09:26:30 --- .../software development/ECE1400/Chapter 12 Exercises.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/education/software development/ECE1400/Chapter 12 Exercises.md b/education/software development/ECE1400/Chapter 12 Exercises.md index 2ae3dfc..dd4ccab 100644 --- a/education/software development/ECE1400/Chapter 12 Exercises.md +++ b/education/software development/ECE1400/Chapter 12 Exercises.md @@ -17,3 +17,8 @@ middle = low + (high - low) / 2; 3. What will be the contents of the `a` array after the following statements are executed? ```c {10, 9, 8, 7, 6, 5, 4, 3, 2, 1} +``` + +5. Suppose that `a` is a one dimensional array and `p` is a pointer variable. assuming that the assignment `p = a` has just been performed, which of the following expressions are illegal because of mismatched types? Of the remaining expressions, which are true (have a nonzero value)? +The following expressions are illegal because of mismatched types: +- `` \ No newline at end of file From 7d58412a4581a35bfd0db36e1b146031192cb9bf Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Mon, 28 Oct 2024 09:31:30 -0600 Subject: [PATCH 0503/1027] vault backup: 2024-10-28 09:31:30 --- education/software development/ECE1400/Chapter 12 Exercises.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/education/software development/ECE1400/Chapter 12 Exercises.md b/education/software development/ECE1400/Chapter 12 Exercises.md index dd4ccab..ea8d8b2 100644 --- a/education/software development/ECE1400/Chapter 12 Exercises.md +++ b/education/software development/ECE1400/Chapter 12 Exercises.md @@ -21,4 +21,5 @@ middle = low + (high - low) / 2; 5. Suppose that `a` is a one dimensional array and `p` is a pointer variable. assuming that the assignment `p = a` has just been performed, which of the following expressions are illegal because of mismatched types? Of the remaining expressions, which are true (have a nonzero value)? The following expressions are illegal because of mismatched types: -- `` \ No newline at end of file +- (a) `p == a[0]` - Comparison between `int *` and `int` +The rest of the expressions are true. From cae09887da2d41f3c1ad2480410cadd27a1a244e Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Mon, 28 Oct 2024 10:30:15 -0600 Subject: [PATCH 0504/1027] vault backup: 2024-10-28 10:30:15 --- education/software development/ECE1400/Chapter 12 Exercises.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/education/software development/ECE1400/Chapter 12 Exercises.md b/education/software development/ECE1400/Chapter 12 Exercises.md index ea8d8b2..f8eab3c 100644 --- a/education/software development/ECE1400/Chapter 12 Exercises.md +++ b/education/software development/ECE1400/Chapter 12 Exercises.md @@ -23,3 +23,5 @@ middle = low + (high - low) / 2; The following expressions are illegal because of mismatched types: - (a) `p == a[0]` - Comparison between `int *` and `int` The rest of the expressions are true. + +8. \ No newline at end of file From 56a41f58c69f7a509c4d04ba460d97b1c0f822da Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Mon, 28 Oct 2024 10:45:14 -0600 Subject: [PATCH 0505/1027] vault backup: 2024-10-28 10:45:14 --- .../math/MATH1060 (trig)/Double and Half Angle Identities.md | 2 ++ education/software development/ECE1400/Chapter 12 Exercises.md | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 education/math/MATH1060 (trig)/Double and Half Angle Identities.md diff --git a/education/math/MATH1060 (trig)/Double and Half Angle Identities.md b/education/math/MATH1060 (trig)/Double and Half Angle Identities.md new file mode 100644 index 0000000..f626c4a --- /dev/null +++ b/education/math/MATH1060 (trig)/Double and Half Angle Identities.md @@ -0,0 +1,2 @@ +$$ \sin(2\theta) = 2\sin\theta\cos\theta $$ +$$ \cos(2\theta) = \cos^2\theta - \sin^2 \ No newline at end of file diff --git a/education/software development/ECE1400/Chapter 12 Exercises.md b/education/software development/ECE1400/Chapter 12 Exercises.md index f8eab3c..503197a 100644 --- a/education/software development/ECE1400/Chapter 12 Exercises.md +++ b/education/software development/ECE1400/Chapter 12 Exercises.md @@ -24,4 +24,4 @@ The following expressions are illegal because of mismatched types: - (a) `p == a[0]` - Comparison between `int *` and `int` The rest of the expressions are true. -8. \ No newline at end of file +8.' \ No newline at end of file From 75074fe98d2574c043aa718df4091e5ab644de25 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Mon, 28 Oct 2024 10:50:14 -0600 Subject: [PATCH 0506/1027] vault backup: 2024-10-28 10:50:14 --- .../Double and Half Angle Identities.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/education/math/MATH1060 (trig)/Double and Half Angle Identities.md b/education/math/MATH1060 (trig)/Double and Half Angle Identities.md index f626c4a..c89557f 100644 --- a/education/math/MATH1060 (trig)/Double and Half Angle Identities.md +++ b/education/math/MATH1060 (trig)/Double and Half Angle Identities.md @@ -1,2 +1,10 @@ +# Double Angle Identities $$ \sin(2\theta) = 2\sin\theta\cos\theta $$ -$$ \cos(2\theta) = \cos^2\theta - \sin^2 \ No newline at end of file +$$ +\begin{matrix} +\cos(2\theta) = \cos^2\theta - \sin^2\theta\\ += 1 - 2sin^2\theta\\ += 2cos^2\theta - 1\\ +\end{matrix} +$$ +$$ \tan(2\theta) = \dfrac{2\tan\theta}{1-\tan^2\theta}$$ \ No newline at end of file From 6bb610f896d89ebace550e56d51e376d432b456b Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Mon, 28 Oct 2024 10:55:14 -0600 Subject: [PATCH 0507/1027] vault backup: 2024-10-28 10:55:14 --- .../Double and Half Angle Identities.md | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/education/math/MATH1060 (trig)/Double and Half Angle Identities.md b/education/math/MATH1060 (trig)/Double and Half Angle Identities.md index c89557f..c92bc46 100644 --- a/education/math/MATH1060 (trig)/Double and Half Angle Identities.md +++ b/education/math/MATH1060 (trig)/Double and Half Angle Identities.md @@ -1,5 +1,7 @@ # Double Angle Identities +Sine: $$ \sin(2\theta) = 2\sin\theta\cos\theta $$ +Cosine: $$ \begin{matrix} \cos(2\theta) = \cos^2\theta - \sin^2\theta\\ @@ -7,4 +9,15 @@ $$ = 2cos^2\theta - 1\\ \end{matrix} $$ -$$ \tan(2\theta) = \dfrac{2\tan\theta}{1-\tan^2\theta}$$ \ No newline at end of file + +Tan: +$$ \tan(2\theta) = \dfrac{2\tan\theta}{1-\tan^2\theta}$$ + +## Half Angle Identities +Whether the output is positive or negative depends on what quadrant the output is in. +Sine: +$$ \sin(\frac{\theta}{2}) = \pm\sqrt{\frac{1-\cos\theta}{2}} $$ +Cosine: +$$ \cos(\frac{\theta}{2}) = \pm \sqrt{\frac{1 + \cos\theta}{2}} $$ +Tangent: +$$ \ No newline at end of file From a18e3fa00daa2d9fa1b9c2f075af389795d91fc7 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Mon, 28 Oct 2024 11:00:14 -0600 Subject: [PATCH 0508/1027] vault backup: 2024-10-28 11:00:14 --- .../math/MATH1060 (trig)/Double and Half Angle Identities.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/education/math/MATH1060 (trig)/Double and Half Angle Identities.md b/education/math/MATH1060 (trig)/Double and Half Angle Identities.md index c92bc46..122ab8f 100644 --- a/education/math/MATH1060 (trig)/Double and Half Angle Identities.md +++ b/education/math/MATH1060 (trig)/Double and Half Angle Identities.md @@ -20,4 +20,4 @@ $$ \sin(\frac{\theta}{2}) = \pm\sqrt{\frac{1-\cos\theta}{2}} $$ Cosine: $$ \cos(\frac{\theta}{2}) = \pm \sqrt{\frac{1 + \cos\theta}{2}} $$ Tangent: -$$ \ No newline at end of file +$$ \tan(\frac{\theta}{2}) = \pm\sqrt{\frac{1-\cos\theta}{1 + \cos\theta}} $$ \ No newline at end of file From 5325bb45e27fd76e62f77ac9e361315167b0c4ae Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Mon, 28 Oct 2024 11:05:14 -0600 Subject: [PATCH 0509/1027] vault backup: 2024-10-28 11:05:14 --- .../Double and Half Angle Identities.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/education/math/MATH1060 (trig)/Double and Half Angle Identities.md b/education/math/MATH1060 (trig)/Double and Half Angle Identities.md index 122ab8f..a72541b 100644 --- a/education/math/MATH1060 (trig)/Double and Half Angle Identities.md +++ b/education/math/MATH1060 (trig)/Double and Half Angle Identities.md @@ -1,3 +1,7 @@ +To solve for a double or half angle identity: +1. Draw a triangle +2. Choose an identity to use +3. Substitute into formula # Double Angle Identities Sine: $$ \sin(2\theta) = 2\sin\theta\cos\theta $$ @@ -20,4 +24,10 @@ $$ \sin(\frac{\theta}{2}) = \pm\sqrt{\frac{1-\cos\theta}{2}} $$ Cosine: $$ \cos(\frac{\theta}{2}) = \pm \sqrt{\frac{1 + \cos\theta}{2}} $$ Tangent: -$$ \tan(\frac{\theta}{2}) = \pm\sqrt{\frac{1-\cos\theta}{1 + \cos\theta}} $$ \ No newline at end of file +$$ +\begin{matrix} +\tan(\dfrac{\theta}{2}) = \pm\sqrt{\dfrac{1-\cos\theta}{1 + \cos\theta}}\\ += \dfrac{\sin\theta}{1 + \cos\theta}\\ += \dfrac{1 - cos\theta}{\sin\theta} +\end{matrix} +$$ \ No newline at end of file From c7e04c17fbc7549a460fddbf77515a33d869aa85 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Mon, 28 Oct 2024 11:10:14 -0600 Subject: [PATCH 0510/1027] vault backup: 2024-10-28 11:10:14 --- education/software development/ECE1400/C.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/education/software development/ECE1400/C.md b/education/software development/ECE1400/C.md index d5589af..cf70c29 100644 --- a/education/software development/ECE1400/C.md +++ b/education/software development/ECE1400/C.md @@ -52,7 +52,13 @@ int arr_size = sizeof(arr) / sizeof(arr[0]); `&` gives you the address of a variable `*` gives you the value in memory that an address points to. +To update the value a pointer points at, you can dereference on the left hand side of the assignment operator: +```c +// Update the value `p` points at to be 7 +*p = 7; +``` +Because of how operator preci works # Formatting specifiers # Standard library ## Formatting specifiers From 21dd78dedce704ec9cbd494f092a396668590542 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Mon, 28 Oct 2024 11:15:14 -0600 Subject: [PATCH 0511/1027] vault backup: 2024-10-28 11:15:14 --- education/software development/ECE1400/C.md | 6 +++++- .../software development/ECE1400/Chapter 12 Exercises.md | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/education/software development/ECE1400/C.md b/education/software development/ECE1400/C.md index cf70c29..5c20500 100644 --- a/education/software development/ECE1400/C.md +++ b/education/software development/ECE1400/C.md @@ -58,7 +58,11 @@ To update the value a pointer points at, you can dereference on the left hand si *p = 7; ``` -Because of how operator preci works +Because of how operator precedence works, parentheses should be placed around the dereference operator and the variable +```c +// Increment the value pointed to by `p` +(*p)++; +``` # Formatting specifiers # Standard library ## Formatting specifiers diff --git a/education/software development/ECE1400/Chapter 12 Exercises.md b/education/software development/ECE1400/Chapter 12 Exercises.md index 503197a..19223e9 100644 --- a/education/software development/ECE1400/Chapter 12 Exercises.md +++ b/education/software development/ECE1400/Chapter 12 Exercises.md @@ -24,4 +24,4 @@ The following expressions are illegal because of mismatched types: - (a) `p == a[0]` - Comparison between `int *` and `int` The rest of the expressions are true. -8.' \ No newline at end of file +8. \ No newline at end of file From 77e7cdf760ca1e158cfba7a6ab67b01f5c96ef89 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Mon, 28 Oct 2024 11:20:14 -0600 Subject: [PATCH 0512/1027] vault backup: 2024-10-28 11:20:14 --- .../software development/ECE1400/Chapter 12 Exercises.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/education/software development/ECE1400/Chapter 12 Exercises.md b/education/software development/ECE1400/Chapter 12 Exercises.md index 19223e9..73b44da 100644 --- a/education/software development/ECE1400/Chapter 12 Exercises.md +++ b/education/software development/ECE1400/Chapter 12 Exercises.md @@ -24,4 +24,11 @@ The following expressions are illegal because of mismatched types: - (a) `p == a[0]` - Comparison between `int *` and `int` The rest of the expressions are true. -8. \ No newline at end of file +8. Rewrite the following function to use pointer arithmetic... +```c +void store_zeros(int *a, int n) { + for (int i = 0; i < n; i++) { + *(a + i) = 0; + } +} +``` \ No newline at end of file From 2e3053784b56e38fbd7aecbfb264088f75386db7 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Fri, 1 Nov 2024 13:18:59 -0600 Subject: [PATCH 0513/1027] vault backup: 2024-11-01 13:18:59 --- .../ECE1400/(not) Chapter 11 Exercises.md | 20 ++++++++++++++++ .../ECE1400/Chapter 11 Exercises.md | 24 +++++-------------- 2 files changed, 26 insertions(+), 18 deletions(-) create mode 100644 education/software development/ECE1400/(not) Chapter 11 Exercises.md diff --git a/education/software development/ECE1400/(not) Chapter 11 Exercises.md b/education/software development/ECE1400/(not) Chapter 11 Exercises.md new file mode 100644 index 0000000..4dcdc59 --- /dev/null +++ b/education/software development/ECE1400/(not) Chapter 11 Exercises.md @@ -0,0 +1,20 @@ +1. Suppose that the following declarations are in effect:.... + a. `14` + b. `34` + c. `4` + d. `true` + e. `false` + +2. Suppose that `high`, `low`, and `middle` are all pointer variables of the same type, and the `low` and `high` point to elements of an array. Why is the following statement illegal, and how could it be fixed? +```c +middle = (low + high) / 2 +``` +The above statement is illegal because you can't add an `int *` to an `int *`. The below operation is legal because you can perform pointer subtraction, and because `low` is defined on the left hand side of the equation, then adding a long to a pointer is valid. +```c +middle = low + (high - low) / 2; +``` + +3. What will be the contents of the `a` array after the following statements are executed? +```c +{10, 9, 8, 7, 6, 5, 4, 3, 2, 1} +``` \ No newline at end of file diff --git a/education/software development/ECE1400/Chapter 11 Exercises.md b/education/software development/ECE1400/Chapter 11 Exercises.md index 4dcdc59..68d5183 100644 --- a/education/software development/ECE1400/Chapter 11 Exercises.md +++ b/education/software development/ECE1400/Chapter 11 Exercises.md @@ -1,20 +1,8 @@ -1. Suppose that the following declarations are in effect:.... - a. `14` - b. `34` - c. `4` - d. `true` - e. `false` +> 1. If `i` is a variable and `p` points to `i`, which of the following expressions are aliases for `i`? -2. Suppose that `high`, `low`, and `middle` are all pointer variables of the same type, and the `low` and `high` point to elements of an array. Why is the following statement illegal, and how could it be fixed? -```c -middle = (low + high) / 2 -``` -The above statement is illegal because you can't add an `int *` to an `int *`. The below operation is legal because you can perform pointer subtraction, and because `low` is defined on the left hand side of the equation, then adding a long to a pointer is valid. -```c -middle = low + (high - low) / 2; -``` +a. `*p` +g. `*&i` -3. What will be the contents of the `a` array after the following statements are executed? -```c -{10, 9, 8, 7, 6, 5, 4, 3, 2, 1} -``` \ No newline at end of file +> 2. If `i` is an `int` variable and `p` and `q` are pointers to `int`, which of the following assignments are legal? + +a. \ No newline at end of file From 0cbe502348da76d01fe446fbf31423fc418e678c Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Fri, 1 Nov 2024 13:23:59 -0600 Subject: [PATCH 0514/1027] vault backup: 2024-11-01 13:23:59 --- .../ECE1400/Chapter 11 Exercises.md | 23 ++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/education/software development/ECE1400/Chapter 11 Exercises.md b/education/software development/ECE1400/Chapter 11 Exercises.md index 68d5183..a65b547 100644 --- a/education/software development/ECE1400/Chapter 11 Exercises.md +++ b/education/software development/ECE1400/Chapter 11 Exercises.md @@ -5,4 +5,25 @@ g. `*&i` > 2. If `i` is an `int` variable and `p` and `q` are pointers to `int`, which of the following assignments are legal? -a. \ No newline at end of file +e. `p = *&q;` +f. `p = q;` +i. `*p = *q` + +> 3. The following function supposedly computes the sum and average of the numbers in the array `a`, which has length `n`. `avg` and `sum` point to the variables that the function should modify, unfortunately the function contains several errors, find and correct them. + +```c +void avg_sum(double a[], int n, double *avg, double *sum) +{ +int i; + +// This was assigning a pointer to a float, +// the dereference operator was missing +*sum = 0.0; +for (i = 0; i < n; i++) + // This wasn't increasing the value + // `sum` points to, it was modifying the address the pointer po + (*sum) += a[i]; +avg = sum / n; + +} +``` \ No newline at end of file From 0870e5ab2bda6c763c56e88ec740650a6c99fbf5 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Fri, 1 Nov 2024 13:28:59 -0600 Subject: [PATCH 0515/1027] vault backup: 2024-11-01 13:28:59 --- .../software development/ECE1400/Chapter 11 Exercises.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/education/software development/ECE1400/Chapter 11 Exercises.md b/education/software development/ECE1400/Chapter 11 Exercises.md index a65b547..0b9e758 100644 --- a/education/software development/ECE1400/Chapter 11 Exercises.md +++ b/education/software development/ECE1400/Chapter 11 Exercises.md @@ -21,9 +21,10 @@ int i; *sum = 0.0; for (i = 0; i < n; i++) // This wasn't increasing the value - // `sum` points to, it was modifying the address the pointer po + // `sum` points to, it was modifying the address stored in the pointer (*sum) += a[i]; -avg = sum / n; +// Missing dereference operators +*avg = *sum / n; } ``` \ No newline at end of file From 8c39085ce33d541aeacbe659ef65852ccca1699a Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Fri, 1 Nov 2024 15:39:27 -0600 Subject: [PATCH 0516/1027] vault backup: 2024-11-01 15:39:27 --- education/nutrition/Vitamins.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 education/nutrition/Vitamins.md diff --git a/education/nutrition/Vitamins.md b/education/nutrition/Vitamins.md new file mode 100644 index 0000000..e69de29 From 580fb230a9c32c3b629fe84b20b4760637f1d138 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Fri, 1 Nov 2024 15:44:27 -0600 Subject: [PATCH 0517/1027] vault backup: 2024-11-01 15:44:27 --- education/nutrition/Vitamins.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/education/nutrition/Vitamins.md b/education/nutrition/Vitamins.md index e69de29..c0cdecd 100644 --- a/education/nutrition/Vitamins.md +++ b/education/nutrition/Vitamins.md @@ -0,0 +1,5 @@ +Vitamins were first discovered in 1921 +- Casamir RUnk coined the term vitamin + - Vita = life + - Amine = a type of nitrogen containing substance + - The \ No newline at end of file From 02483df21c22344609205c4a907171399f5ab7b2 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Fri, 1 Nov 2024 15:49:27 -0600 Subject: [PATCH 0518/1027] vault backup: 2024-11-01 15:49:27 --- education/nutrition/Vitamins.md | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/education/nutrition/Vitamins.md b/education/nutrition/Vitamins.md index c0cdecd..643ca90 100644 --- a/education/nutrition/Vitamins.md +++ b/education/nutrition/Vitamins.md @@ -1,5 +1,29 @@ Vitamins were first discovered in 1921 -- Casamir RUnk coined the term vitamin +- Casamir Runk coined the term vitamin - Vita = life - Amine = a type of nitrogen containing substance - - The \ No newline at end of file + - The first discovered vitamin was thiamin +- There are 13 known vitamins, plus 5 vitamin like substances +- It is unlikely that any new vitamins will be discovered - (babies and sick people can live on synthetic liquid diet?) +- A vitamin is a complex organic compound that regulates certain metabolic processes + - Cannot be synthesized in sufficient quantities by the body + - Occurs naturally in foods + - Deficiency disorder occurs if substance is missing from the body + - They do not provide any energy +- Vitamins are organic, but they differ from macronutrients: + - **Not metabolized for energy** + - Present in small amounts in foods + - Required in milligram and microgram amounts +- Because vitamins are organic + - They are subject to heat degradation + - Exposure to excessive heat, alkaline substances, light, and air can destroy certain vitamins + - **Water soluble vitamins can leach out of food and dissolve in cooking water** +# Fat Soluble Vitamins +- Fat soluble vitamins are **K, A, D, E** + - Found in lipid portions of the body + - Associate with lipids in the body + - **Digested and absorbed with fats + - Stored in the body + - Can cause toxicity +# Water soluble vitamins +- Water soluble vitamins are the **B-vitamins**: thiamin, rib \ No newline at end of file From 00325e56bd89a66051f77c5f46ec42ffc50c5975 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Fri, 1 Nov 2024 15:54:27 -0600 Subject: [PATCH 0519/1027] vault backup: 2024-11-01 15:54:27 --- education/nutrition/Vitamins.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/education/nutrition/Vitamins.md b/education/nutrition/Vitamins.md index 643ca90..4b77485 100644 --- a/education/nutrition/Vitamins.md +++ b/education/nutrition/Vitamins.md @@ -26,4 +26,8 @@ Vitamins were first discovered in 1921 - Stored in the body - Can cause toxicity # Water soluble vitamins -- Water soluble vitamins are the **B-vitamins**: thiamin, rib \ No newline at end of file +- Water soluble vitamins are the **B-vitamins**: thiamin, riboflavin, niacin, vitamin B-6, pantothenic acid, folate, biotin, vitamin B-12, and **vitamin C**. + - They dissolve in water + - **Very limited amounts are stored** with the exception of B-12 + - **Kidneys will filter out excess water soluble vitamins** + - Less likely to be toxic \ No newline at end of file From a30384d1d30e711042f617871ecca56c5312dada Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Fri, 1 Nov 2024 15:59:27 -0600 Subject: [PATCH 0520/1027] vault backup: 2024-11-01 15:59:27 --- education/nutrition/Vitamins.md | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/education/nutrition/Vitamins.md b/education/nutrition/Vitamins.md index 4b77485..5a634e7 100644 --- a/education/nutrition/Vitamins.md +++ b/education/nutrition/Vitamins.md @@ -30,4 +30,17 @@ Vitamins were first discovered in 1921 - They dissolve in water - **Very limited amounts are stored** with the exception of B-12 - **Kidneys will filter out excess water soluble vitamins** - - Less likely to be toxic \ No newline at end of file + - Less likely to be toxic + +# Oxidization +- An *oxidizing agent* is a substance that removes electrons from atoms or molecules +- A *free radical* is a substance (C, H, O) with an unpaired electron + - Highly reactive, damages and destroys molecules +- **Antioxidants (Vitamin E, C)** are substances that **give up electrons to free radicals to protect cells** + +# Vitamin Intake +- **Bioavailability** is the amount of a vitamin available for use in the body +- Factors that affect how available a vitamin is include: + - How long it takes the vitamin to pass through the intestinal tract + - Certain health conditions that affect the absorption of facts + - By cooking with a little bit of fat, you better absorb fat soluble vitamins from \ No newline at end of file From ff27a1fdb60b5fa863e8aeb06f05f7707f98a801 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Fri, 1 Nov 2024 16:04:27 -0600 Subject: [PATCH 0521/1027] vault backup: 2024-11-01 16:04:27 --- education/nutrition/Vitamins.md | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/education/nutrition/Vitamins.md b/education/nutrition/Vitamins.md index 5a634e7..1029414 100644 --- a/education/nutrition/Vitamins.md +++ b/education/nutrition/Vitamins.md @@ -39,8 +39,14 @@ Vitamins were first discovered in 1921 - **Antioxidants (Vitamin E, C)** are substances that **give up electrons to free radicals to protect cells** # Vitamin Intake -- **Bioavailability** is the amount of a vitamin available for use in the body +**Bioavailability** is the amount of a vitamin available for use in the body - Factors that affect how available a vitamin is include: - How long it takes the vitamin to pass through the intestinal tract - Certain health conditions that affect the absorption of facts - - By cooking with a little bit of fat, you better absorb fat soluble vitamins from \ No newline at end of file + - By cooking with a little bit of fat, you better absorb fat soluble vitamins from that meal. +- Natural sources of vitamins typically provide higher availability +It's important to preserve the vitamin content of food, ways to do so include: +- Avoid decaying, wilting, or bruised fruits or vegetables +- Fresh produce should refrigerated at high humidity, away from the open air +- Exposure to excessive heat, alkaline (salty) substances, light, and air can all reduce the vitamin content of food +- **Vegetables should be cooked in small amounts of water, using quick cook methods** From f25d8a00b52d7389fca881ca50d876576a2ca5d5 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Fri, 1 Nov 2024 16:09:27 -0600 Subject: [PATCH 0522/1027] vault backup: 2024-11-01 16:09:27 --- education/nutrition/Vitamins.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/education/nutrition/Vitamins.md b/education/nutrition/Vitamins.md index 1029414..326cb36 100644 --- a/education/nutrition/Vitamins.md +++ b/education/nutrition/Vitamins.md @@ -25,6 +25,11 @@ Vitamins were first discovered in 1921 - **Digested and absorbed with fats - Stored in the body - Can cause toxicity + +| Nutrient | Function | Deficiency | Toxicity | Sources | Other Info | +| ------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | -------- | ------- | ---------- | +| Vitamin A (Retinol) | - Vision (Retina + Cornea)
- Growth and Reproduction
- Immune Function
- Epithelial (Skin)
- Cells
- Bone
- Remodeling | - Night Blindness (Nycatlopia)
- Xerophthalmia
- Dry Eyes -> Blindness
- Poor Growth
- Dry Skin or Tissue
| | | | +| | - | | | | | # Water soluble vitamins - Water soluble vitamins are the **B-vitamins**: thiamin, riboflavin, niacin, vitamin B-6, pantothenic acid, folate, biotin, vitamin B-12, and **vitamin C**. - They dissolve in water From e65d971cfb6bbf5e0bb795f8f4e964f39ef6d699 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Fri, 1 Nov 2024 16:36:54 -0600 Subject: [PATCH 0523/1027] vault backup: 2024-11-01 16:36:53 --- education/nutrition/Vitamins.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/education/nutrition/Vitamins.md b/education/nutrition/Vitamins.md index 326cb36..256573a 100644 --- a/education/nutrition/Vitamins.md +++ b/education/nutrition/Vitamins.md @@ -26,10 +26,10 @@ Vitamins were first discovered in 1921 - Stored in the body - Can cause toxicity -| Nutrient | Function | Deficiency | Toxicity | Sources | Other Info | -| ------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | -------- | ------- | ---------- | -| Vitamin A (Retinol) | - Vision (Retina + Cornea)
- Growth and Reproduction
- Immune Function
- Epithelial (Skin)
- Cells
- Bone
- Remodeling | - Night Blindness (Nycatlopia)
- Xerophthalmia
- Dry Eyes -> Blindness
- Poor Growth
- Dry Skin or Tissue
| | | | -| | - | | | | | +| Nutrient | Function | Deficiency | Toxicity | Sources | Other Info | +| ------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | +| Vitamin A (Retinol) | - Vision (Retina + Cornea)
- Growth and Reproduction
- Immune Function
- Epithelial (Skin)
- Cells
- Bone
- Remodeling | - Night Blindness (Nycatlopia)
- Xerophthalmia
- Dry Eyes -> Blindness
- Poor Growth
- Dry Skin or Tissue
- ^ Causes increased risk of infection | - Carotenemia (Orange colored skin)
- Birth defects
- Bone fractures
- Liver damage
- Nausea / Vomiting | Vegetables:
- Yellow, orange, or dark green (pumpkin, squash, carrots, spinach)
Milk and Dairy Products | - Retinol's precursor is beta-carotene (antioxidant)
- Helps with wound healing | +| | - | | | | | # Water soluble vitamins - Water soluble vitamins are the **B-vitamins**: thiamin, riboflavin, niacin, vitamin B-6, pantothenic acid, folate, biotin, vitamin B-12, and **vitamin C**. - They dissolve in water From e623a7afc67a0919749b838ab0dc6eb3d91ce808 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Fri, 1 Nov 2024 17:10:02 -0600 Subject: [PATCH 0524/1027] vault backup: 2024-11-01 17:10:02 --- education/nutrition/Vitamins.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/education/nutrition/Vitamins.md b/education/nutrition/Vitamins.md index 256573a..661b5bc 100644 --- a/education/nutrition/Vitamins.md +++ b/education/nutrition/Vitamins.md @@ -26,10 +26,11 @@ Vitamins were first discovered in 1921 - Stored in the body - Can cause toxicity -| Nutrient | Function | Deficiency | Toxicity | Sources | Other Info | -| ------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | -| Vitamin A (Retinol) | - Vision (Retina + Cornea)
- Growth and Reproduction
- Immune Function
- Epithelial (Skin)
- Cells
- Bone
- Remodeling | - Night Blindness (Nycatlopia)
- Xerophthalmia
- Dry Eyes -> Blindness
- Poor Growth
- Dry Skin or Tissue
- ^ Causes increased risk of infection | - Carotenemia (Orange colored skin)
- Birth defects
- Bone fractures
- Liver damage
- Nausea / Vomiting | Vegetables:
- Yellow, orange, or dark green (pumpkin, squash, carrots, spinach)
Milk and Dairy Products | - Retinol's precursor is beta-carotene (antioxidant)
- Helps with wound healing | -| | - | | | | | +| Nutrient | Function | Deficiency | Toxicity | Sources | Other Info | +| ---------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | +| Vitamin A (Retinol) | - Vision (Retina + Cornea)
- Growth and Reproduction
- Immune Function
- Epithelial (Skin)
- Cells
- Bone
- Remodeling | - Night Blindness (Nycatlopia)
- Xerophthalmia
- Dry Eyes -> Blindness
- Poor Growth
- Dry Skin or Tissue
- ^ Causes increased risk of infection | - Carotenemia (Orange colored skin)
- Birth defects
- Bone fractures
- Liver damage
- Nausea / Vomiting | Vegetables:
- Yellow, orange, or dark green (pumpkin, squash, carrots, spinach)
Milk and Dairy Products | - Retinol's precursor is beta-carotene (antioxidant)
- Helps with wound healing | +| Vitamin D (Calciferol) | - Calcium Absorption
- Bone Strength
- Blood Calcium Levels
- Supports Immune Function
- Reduces Inflammation | - Rickets (children) | | | | +| | | | | | | # Water soluble vitamins - Water soluble vitamins are the **B-vitamins**: thiamin, riboflavin, niacin, vitamin B-6, pantothenic acid, folate, biotin, vitamin B-12, and **vitamin C**. - They dissolve in water From 697cb152ee31150344986194daa1e4beb69f7b8f Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Fri, 1 Nov 2024 17:15:03 -0600 Subject: [PATCH 0525/1027] vault backup: 2024-11-01 17:15:03 --- education/nutrition/Vitamins.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/education/nutrition/Vitamins.md b/education/nutrition/Vitamins.md index 661b5bc..37a2b44 100644 --- a/education/nutrition/Vitamins.md +++ b/education/nutrition/Vitamins.md @@ -26,11 +26,11 @@ Vitamins were first discovered in 1921 - Stored in the body - Can cause toxicity -| Nutrient | Function | Deficiency | Toxicity | Sources | Other Info | -| ---------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | -| Vitamin A (Retinol) | - Vision (Retina + Cornea)
- Growth and Reproduction
- Immune Function
- Epithelial (Skin)
- Cells
- Bone
- Remodeling | - Night Blindness (Nycatlopia)
- Xerophthalmia
- Dry Eyes -> Blindness
- Poor Growth
- Dry Skin or Tissue
- ^ Causes increased risk of infection | - Carotenemia (Orange colored skin)
- Birth defects
- Bone fractures
- Liver damage
- Nausea / Vomiting | Vegetables:
- Yellow, orange, or dark green (pumpkin, squash, carrots, spinach)
Milk and Dairy Products | - Retinol's precursor is beta-carotene (antioxidant)
- Helps with wound healing | -| Vitamin D (Calciferol) | - Calcium Absorption
- Bone Strength
- Blood Calcium Levels
- Supports Immune Function
- Reduces Inflammation | - Rickets (children) | | | | -| | | | | | | +| Nutrient | Function | Deficiency | Toxicity | Sources | Other Info | +| ---------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------- | +| Vitamin A (Retinol) | - Vision (Retina + Cornea)
- Growth and Reproduction
- Immune Function
- Epithelial (Skin)
- Cells
- Bone
- Remodeling | - Night Blindness (Nycatlopia)
- Xerophthalmia
- Dry Eyes -> Blindness
- Poor Growth
- Dry Skin or Tissue
- ^ Causes increased risk of infection | - Carotenemia (Orange colored skin)
- Birth defects
- Bone fractures
- Liver damage
- Nausea / Vomiting | - Vegetables: Yellow, orange, or dark green (pumpkin, squash, carrots, spinach)
- Milk and Dairy Products | - Retinol's precursor is beta-carotene (antioxidant)
- Helps with wound healing | +| Vitamin D (Calciferol) | - Calcium Absorption
- Bone Strength
- Blood Calcium Levels
- Supports Immune Function
- Reduces Inflammation | - Rickets (children)
- Osteomalacia (Adults)
- Osteoporosis (Elderly)
- Decreased immune function
- Decreased growth | - Hypercalcemia (Calcium deposits in soft tissue, Weakness)
- Kidney Stones | - Milk and Dairy Products
- Fish (Salmon, Tuna)
- Breakfast Cereals
- Sunlight or UV Light | | +| | | | | | | # Water soluble vitamins - Water soluble vitamins are the **B-vitamins**: thiamin, riboflavin, niacin, vitamin B-6, pantothenic acid, folate, biotin, vitamin B-12, and **vitamin C**. - They dissolve in water From 01dea96c4978abd4801601ef21d46d89370be3f8 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Fri, 1 Nov 2024 17:33:05 -0600 Subject: [PATCH 0526/1027] vault backup: 2024-11-01 17:33:05 --- education/nutrition/Vitamins.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/education/nutrition/Vitamins.md b/education/nutrition/Vitamins.md index 37a2b44..a475f82 100644 --- a/education/nutrition/Vitamins.md +++ b/education/nutrition/Vitamins.md @@ -26,11 +26,11 @@ Vitamins were first discovered in 1921 - Stored in the body - Can cause toxicity -| Nutrient | Function | Deficiency | Toxicity | Sources | Other Info | -| ---------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------- | -| Vitamin A (Retinol) | - Vision (Retina + Cornea)
- Growth and Reproduction
- Immune Function
- Epithelial (Skin)
- Cells
- Bone
- Remodeling | - Night Blindness (Nycatlopia)
- Xerophthalmia
- Dry Eyes -> Blindness
- Poor Growth
- Dry Skin or Tissue
- ^ Causes increased risk of infection | - Carotenemia (Orange colored skin)
- Birth defects
- Bone fractures
- Liver damage
- Nausea / Vomiting | - Vegetables: Yellow, orange, or dark green (pumpkin, squash, carrots, spinach)
- Milk and Dairy Products | - Retinol's precursor is beta-carotene (antioxidant)
- Helps with wound healing | -| Vitamin D (Calciferol) | - Calcium Absorption
- Bone Strength
- Blood Calcium Levels
- Supports Immune Function
- Reduces Inflammation | - Rickets (children)
- Osteomalacia (Adults)
- Osteoporosis (Elderly)
- Decreased immune function
- Decreased growth | - Hypercalcemia (Calcium deposits in soft tissue, Weakness)
- Kidney Stones | - Milk and Dairy Products
- Fish (Salmon, Tuna)
- Breakfast Cereals
- Sunlight or UV Light | | -| | | | | | | +| Nutrient | Function | Deficiency | Toxicity | Sources | Other Info | +| ---------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------- | +| Vitamin A (Retinol) | - Vision (Retina + Cornea)
- Growth and Reproduction
- Immune Function
- Epithelial (Skin)
- Cells
- Bone
- Remodeling | - Night Blindness (Nycatlopia)
- Xerophthalmia
- Dry Eyes -> Blindness
- Poor Growth
- Dry Skin or Tissue
- ^ Causes increased risk of infection | - Carotenemia (Orange colored skin)
- Birth defects
- Bone fractures
- Liver damage
- Nausea / Vomiting | - Vegetables: Yellow, orange, or dark green (pumpkin, squash, carrots, spinach)
- Milk and Dairy Products | - Retinol's precursor is beta-carotene (antioxidant)
- Helps with wound healing | +| Vitamin D (Calciferol) | - Calcium Absorption
- Bone Strength
- Blood Calcium Levels
- Supports Immune Function
- Reduces Inflammation | - Rickets (children)
- Osteomalacia (Adults)
- Osteoporosis (Elderly)
- Decreased immune function
- Decreased growth | - Hypercalcemia (Calcium deposits in soft tissue, Weakness, Nausea/Vomiting)
- Kidney Stones | - Milk and Dairy Products
- Fish (Salmon, Tuna)
- Breakfast Cereals
- Sunlight or UV Light | - Often referred to as the sunshine vitamin
- Acts as a hormone (interacts with para-thyroid hormone and calcitonin) | +| Vitamin E (Tocopherol) | - Antioxidant
- Wound healing
- Cell Membranes | | | | | # Water soluble vitamins - Water soluble vitamins are the **B-vitamins**: thiamin, riboflavin, niacin, vitamin B-6, pantothenic acid, folate, biotin, vitamin B-12, and **vitamin C**. - They dissolve in water From d159fb2f00cc66d042ae823a8c0714f526ead1e7 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Fri, 1 Nov 2024 17:38:05 -0600 Subject: [PATCH 0527/1027] vault backup: 2024-11-01 17:38:05 --- education/nutrition/Vitamins.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/education/nutrition/Vitamins.md b/education/nutrition/Vitamins.md index a475f82..32384dd 100644 --- a/education/nutrition/Vitamins.md +++ b/education/nutrition/Vitamins.md @@ -26,11 +26,12 @@ Vitamins were first discovered in 1921 - Stored in the body - Can cause toxicity -| Nutrient | Function | Deficiency | Toxicity | Sources | Other Info | -| ---------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------- | -| Vitamin A (Retinol) | - Vision (Retina + Cornea)
- Growth and Reproduction
- Immune Function
- Epithelial (Skin)
- Cells
- Bone
- Remodeling | - Night Blindness (Nycatlopia)
- Xerophthalmia
- Dry Eyes -> Blindness
- Poor Growth
- Dry Skin or Tissue
- ^ Causes increased risk of infection | - Carotenemia (Orange colored skin)
- Birth defects
- Bone fractures
- Liver damage
- Nausea / Vomiting | - Vegetables: Yellow, orange, or dark green (pumpkin, squash, carrots, spinach)
- Milk and Dairy Products | - Retinol's precursor is beta-carotene (antioxidant)
- Helps with wound healing | -| Vitamin D (Calciferol) | - Calcium Absorption
- Bone Strength
- Blood Calcium Levels
- Supports Immune Function
- Reduces Inflammation | - Rickets (children)
- Osteomalacia (Adults)
- Osteoporosis (Elderly)
- Decreased immune function
- Decreased growth | - Hypercalcemia (Calcium deposits in soft tissue, Weakness, Nausea/Vomiting)
- Kidney Stones | - Milk and Dairy Products
- Fish (Salmon, Tuna)
- Breakfast Cereals
- Sunlight or UV Light | - Often referred to as the sunshine vitamin
- Acts as a hormone (interacts with para-thyroid hormone and calcitonin) | -| Vitamin E (Tocopherol) | - Antioxidant
- Wound healing
- Cell Membranes | | | | | +| Nutrient | Function | Deficiency | Toxicity | Sources | Other Info | +| ------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Vitamin A (Retinol) | - Vision (Retina + Cornea)
- Growth and Reproduction
- Immune Function
- Epithelial (Skin)
- Cells
- Bone
- Remodeling | - Night Blindness (Nycatlopia)
- Xerophthalmia
- Dry Eyes -> Blindness
- Poor Growth
- Dry Skin or Tissue
- ^ Causes increased risk of infection | - Carotenemia (Orange colored skin)
- Birth defects
- Bone fractures
- Liver damage
- Nausea / Vomiting | - Vegetables: Yellow, orange, or dark green (pumpkin, squash, carrots, spinach)
- Milk and Dairy Products | - Retinol's precursor is beta-carotene (antioxidant)
- Helps with wound healing | +| Vitamin D (Calciferol) | - Calcium Absorption
- Bone Strength
- Blood Calcium Levels
- Supports Immune Function
- Reduces Inflammation | - Rickets (children)
- Osteomalacia (Adults)
- Osteoporosis (Elderly)
- Decreased immune function
- Decreased growth | - Hypercalcemia (Calcium deposits in soft tissue, Weakness, Nausea/Vomiting)
- Kidney Stones | - Milk and Dairy Products
- Fish (Salmon, Tuna)
- Breakfast Cereals
- Sunlight or UV Light | - Often referred to as the sunshine vitamin
- Acts as a hormone (interacts with para-thyroid hormone and calcitonin) | +| Vitamin E (Tocopherol) | - Antioxidant
- Wound healing
- Cell Membranes
- Supports immune function | - Hemolysis of red blood cells
- Anemia
- Reduced muscular coordination | Supplements can interfere with vitamin K metabolism and cause uncontrolled bleeding | - Vegetable oils
- Nuts or Seeds
- Wheat germ
- Green leafy veggies
- Breakfast Cereals | - Doesn't increase sexual performance, prevent aging, or cure Parkinson's disease (despite claims) | +| Vitamin K (Phylloquinone) | - Blood clotting
- Bone health | - Hemorrhaging or Hemorrhagic Disease (Excessive bleeding or internal bleeding)
- Increased risk of hip failure | Not common | - Green leafy veggies (spinach, kale, et cetera)
- Beans and soybeans
- Vegetable Oils
- Healthy GI tract | - 50% of needed amount can be synthesized in the GI tract
- Babies are given a shot at birth
- Interacts with blood clotting meds (coumadin or warfarin) | # Water soluble vitamins - Water soluble vitamins are the **B-vitamins**: thiamin, riboflavin, niacin, vitamin B-6, pantothenic acid, folate, biotin, vitamin B-12, and **vitamin C**. - They dissolve in water From c3b0044e1df93f258b68db99c31f867210719627 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Fri, 1 Nov 2024 18:11:34 -0600 Subject: [PATCH 0528/1027] vault backup: 2024-11-01 18:11:33 --- personal/sharpening/Stropping.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 personal/sharpening/Stropping.md diff --git a/personal/sharpening/Stropping.md b/personal/sharpening/Stropping.md new file mode 100644 index 0000000..7645ead --- /dev/null +++ b/personal/sharpening/Stropping.md @@ -0,0 +1,5 @@ +There are two categories of stropping, stropping on a clean substrate, and stropping on a substrate with compound. +# Clean Stropping +Stropping on a clean substrate achieves 4 things: +1. It realigns the edge +2. It burnishes the metal (moves it without ) \ No newline at end of file From 8ddf50bbff419461de4c2b757b952e4c7c1ef00b Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Fri, 1 Nov 2024 18:16:34 -0600 Subject: [PATCH 0529/1027] vault backup: 2024-11-01 18:16:34 --- personal/sharpening/Stropping.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/personal/sharpening/Stropping.md b/personal/sharpening/Stropping.md index 7645ead..8a043f6 100644 --- a/personal/sharpening/Stropping.md +++ b/personal/sharpening/Stropping.md @@ -1,5 +1,12 @@ There are two categories of stropping, stropping on a clean substrate, and stropping on a substrate with compound. + +Stropping is done to reduce the width of the edge, and to help remove and align any burrs along the edge. # Clean Stropping Stropping on a clean substrate achieves 4 things: 1. It realigns the edge -2. It burnishes the metal (moves it without ) \ No newline at end of file +2. It burnishes the metal (moves it without destroying it), making the edge smoother +3. Abrasion - It makes scratches less defined and smooths out the blade +4. Removes coating - Some blades come with a manufacturer applied oil, you can use a strop to remove this coating + +# Loaded Stropping +With a loaded strop, abrasive compound is applied to the strop to increase the rate of abrasion. \ No newline at end of file From f33146900e39d6f955760fe0c8354f6a7a3e0d88 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Fri, 1 Nov 2024 18:21:34 -0600 Subject: [PATCH 0530/1027] vault backup: 2024-11-01 18:21:34 --- personal/sharpening/Stropping.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/personal/sharpening/Stropping.md b/personal/sharpening/Stropping.md index 8a043f6..244e56a 100644 --- a/personal/sharpening/Stropping.md +++ b/personal/sharpening/Stropping.md @@ -9,4 +9,6 @@ Stropping on a clean substrate achieves 4 things: 4. Removes coating - Some blades come with a manufacturer applied oil, you can use a strop to remove this coating # Loaded Stropping -With a loaded strop, abrasive compound is applied to the strop to increase the rate of abrasion. \ No newline at end of file +With a loaded strop, abrasive compound is applied to the strop to increase the rate of abrasion. This compound is applied with the goal of reducing the width of the edge without the formation of a foil-edge burr. Loaded stropping tends to produce a micro-convex edge, meaning it's shaped a little bit like a teardrop, where it curves outwards from a straight angle the farther away from the vertex the edge goes. + +## Strop material From 361c6777dca656d201791a9f0fa49f2ed970340e Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Fri, 1 Nov 2024 18:26:34 -0600 Subject: [PATCH 0531/1027] vault backup: 2024-11-01 18:26:34 --- personal/sharpening/Stropping.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/personal/sharpening/Stropping.md b/personal/sharpening/Stropping.md index 244e56a..2367d60 100644 --- a/personal/sharpening/Stropping.md +++ b/personal/sharpening/Stropping.md @@ -11,4 +11,10 @@ Stropping on a clean substrate achieves 4 things: # Loaded Stropping With a loaded strop, abrasive compound is applied to the strop to increase the rate of abrasion. This compound is applied with the goal of reducing the width of the edge without the formation of a foil-edge burr. Loaded stropping tends to produce a micro-convex edge, meaning it's shaped a little bit like a teardrop, where it curves outwards from a straight angle the farther away from the vertex the edge goes. -## Strop material +The effect of stropping happens quickly, within 3-30 laps, and 10 laps being the minimum needed to achieve the desired effect. Stropping past 30 achieves minimal change, and stopping past the hundreds may introduce a burr again. +## Strop Material +There are a variety of stropping materials available for use, common materials include leather, denim, newspaper, washcloth, and balsa wood. + +## Compound material +### Chromium Oxide +Chromium Oxide (green, waxy substance) From 22f9efc089d6f7cffa50eb791e688a47749368a8 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Fri, 1 Nov 2024 18:31:34 -0600 Subject: [PATCH 0532/1027] vault backup: 2024-11-01 18:31:34 --- personal/sharpening/Stropping.md | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/personal/sharpening/Stropping.md b/personal/sharpening/Stropping.md index 2367d60..9b7208b 100644 --- a/personal/sharpening/Stropping.md +++ b/personal/sharpening/Stropping.md @@ -9,12 +9,17 @@ Stropping on a clean substrate achieves 4 things: 4. Removes coating - Some blades come with a manufacturer applied oil, you can use a strop to remove this coating # Loaded Stropping -With a loaded strop, abrasive compound is applied to the strop to increase the rate of abrasion. This compound is applied with the goal of reducing the width of the edge without the formation of a foil-edge burr. Loaded stropping tends to produce a micro-convex edge, meaning it's shaped a little bit like a teardrop, where it curves outwards from a straight angle the farther away from the vertex the edge goes. +With a loaded strop, abrasive compound is applied to the strop to increase the rate of abrasion. This compound is applied with the goal of reducing the width of the edge without the formation of a foil-edge burr. Loaded stropping tends to produce a micro-convex edge, meaning it's shaped a little bit like a teardrop, where it curves outwards from a straight angle the farther away from the vertex the edge goes. This effect is generally desireable. The effect of stropping happens quickly, within 3-30 laps, and 10 laps being the minimum needed to achieve the desired effect. Stropping past 30 achieves minimal change, and stopping past the hundreds may introduce a burr again. ## Strop Material There are a variety of stropping materials available for use, common materials include leather, denim, newspaper, washcloth, and balsa wood. +### Balsa +Because balsa wood is rigid and nearly incompressible, stropping on balsa produces minimal convexivity ## Compound material ### Chromium Oxide -Chromium Oxide (green, waxy substance) +Chromium Oxide (green, waxy substance) is probably the most common stropping compound. While it's moderately effective, there are better options, and it's generally recommended that if you strop a blade on a chromium oxide loaded strop, you follow it up with fine abrasive or a clean leather strop. + +## Mono-diamond +Mono crystalline diamond stropping compound comes in a wide variety of grit sizes, ranging from 0.1 micron, all the way up past 20 micron. \ No newline at end of file From 90b7ac60e4da1fc89ee37567ff1d86a96d46cb6b Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Fri, 1 Nov 2024 18:36:34 -0600 Subject: [PATCH 0533/1027] vault backup: 2024-11-01 18:36:34 --- personal/sharpening/Stropping.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/personal/sharpening/Stropping.md b/personal/sharpening/Stropping.md index 9b7208b..ebd5357 100644 --- a/personal/sharpening/Stropping.md +++ b/personal/sharpening/Stropping.md @@ -9,13 +9,15 @@ Stropping on a clean substrate achieves 4 things: 4. Removes coating - Some blades come with a manufacturer applied oil, you can use a strop to remove this coating # Loaded Stropping -With a loaded strop, abrasive compound is applied to the strop to increase the rate of abrasion. This compound is applied with the goal of reducing the width of the edge without the formation of a foil-edge burr. Loaded stropping tends to produce a micro-convex edge, meaning it's shaped a little bit like a teardrop, where it curves outwards from a straight angle the farther away from the vertex the edge goes. This effect is generally desireable. +With a loaded strop, abrasive compound is applied to the strop to increase the rate of abrasion. This compound is applied with the goal of reducing the width of the edge without the formation of a foil-edge burr. Loaded stropping tends to produce a micro-convex edge, meaning it's shaped a little bit like a teardrop, where it curves outwards from a straight angle the farther away from the vertex the edge goes. This effect is generally desirable. The effect of stropping happens quickly, within 3-30 laps, and 10 laps being the minimum needed to achieve the desired effect. Stropping past 30 achieves minimal change, and stopping past the hundreds may introduce a burr again. ## Strop Material There are a variety of stropping materials available for use, common materials include leather, denim, newspaper, washcloth, and balsa wood. ### Balsa -Because balsa wood is rigid and nearly incompressible, stropping on balsa produces minimal convexivity +Because balsa wood is rigid and nearly incompressible, stropping on balsa produces minimal convexity. Micro convexity is still achieved. +### Nanocloth +Nanocloth is a soft, flexible material mounted on a hard, flat glass substrate. It's a synthetic polishing cloth sold by Ken Schwartz. ## Compound material ### Chromium Oxide From 345189f5c0a8c67b520183adc5b027cdeb13d077 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Fri, 1 Nov 2024 18:41:33 -0600 Subject: [PATCH 0534/1027] vault backup: 2024-11-01 18:41:33 --- personal/sharpening/Stropping.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/personal/sharpening/Stropping.md b/personal/sharpening/Stropping.md index ebd5357..6d4a083 100644 --- a/personal/sharpening/Stropping.md +++ b/personal/sharpening/Stropping.md @@ -17,11 +17,13 @@ There are a variety of stropping materials available for use, common materials i ### Balsa Because balsa wood is rigid and nearly incompressible, stropping on balsa produces minimal convexity. Micro convexity is still achieved. ### Nanocloth -Nanocloth is a soft, flexible material mounted on a hard, flat glass substrate. It's a synthetic polishing cloth sold by Ken Schwartz. +Nanocloth is a soft, flexible material mounted on a hard, flat glass substrate. It's a synthetic polishing cloth sold by Ken Schwartz. It appears to achieve slightly more micro convexity than the balsa substrate. + +## Latigo (Bovine) Leather ## Compound material ### Chromium Oxide Chromium Oxide (green, waxy substance) is probably the most common stropping compound. While it's moderately effective, there are better options, and it's generally recommended that if you strop a blade on a chromium oxide loaded strop, you follow it up with fine abrasive or a clean leather strop. ## Mono-diamond -Mono crystalline diamond stropping compound comes in a wide variety of grit sizes, ranging from 0.1 micron, all the way up past 20 micron. \ No newline at end of file +Mono crystalline diamond stropping compound comes in a wide variety of grit sizes, ranging from 0.1 micron, all the way up past 20 micron. From 95c2879094a9c59d795ac9ed594ae3590634eb4b Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Fri, 1 Nov 2024 18:46:35 -0600 Subject: [PATCH 0535/1027] vault backup: 2024-11-01 18:46:35 --- personal/sharpening/Stropping.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/personal/sharpening/Stropping.md b/personal/sharpening/Stropping.md index 6d4a083..67730fb 100644 --- a/personal/sharpening/Stropping.md +++ b/personal/sharpening/Stropping.md @@ -27,3 +27,10 @@ Chromium Oxide (green, waxy substance) is probably the most common stropping com ## Mono-diamond Mono crystalline diamond stropping compound comes in a wide variety of grit sizes, ranging from 0.1 micron, all the way up past 20 micron. + +| Compound size | Result | +| ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| 0.25 micron | After 10 laps on a bovine leather strop, it did not sufficiently remove the bur. With 100 laps, it got closer, but a noticeable bur was still present. 0.25 micron appears to remove material very slowly, almost too slowly, but it produces a fine finish. | +| 0.5 micron | After 10 laps on bovine leather, significantly more abrasion occurred than with the 0.25 micron compound. No significant change in edge geometry was noted compared to use of the 0.25 micron stropping compound. | +| | | +| 10 micron | When stropping with 10 micron compound, it was noted that the entire bevel began to convex, and significant removal rate occured. | \ No newline at end of file From 80e55a2cdcf8f165708265c90d1b004a79e5be36 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Fri, 1 Nov 2024 18:51:35 -0600 Subject: [PATCH 0536/1027] vault backup: 2024-11-01 18:51:35 --- personal/sharpening/Stropping.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/personal/sharpening/Stropping.md b/personal/sharpening/Stropping.md index 67730fb..fe95926 100644 --- a/personal/sharpening/Stropping.md +++ b/personal/sharpening/Stropping.md @@ -1,3 +1,6 @@ + + (pts 1-4) + There are two categories of stropping, stropping on a clean substrate, and stropping on a substrate with compound. Stropping is done to reduce the width of the edge, and to help remove and align any burrs along the edge. @@ -12,6 +15,8 @@ Stropping on a clean substrate achieves 4 things: With a loaded strop, abrasive compound is applied to the strop to increase the rate of abrasion. This compound is applied with the goal of reducing the width of the edge without the formation of a foil-edge burr. Loaded stropping tends to produce a micro-convex edge, meaning it's shaped a little bit like a teardrop, where it curves outwards from a straight angle the farther away from the vertex the edge goes. This effect is generally desirable. The effect of stropping happens quickly, within 3-30 laps, and 10 laps being the minimum needed to achieve the desired effect. Stropping past 30 achieves minimal change, and stopping past the hundreds may introduce a burr again. + +It was generally noted that when stropping with a very fine compound (eg, 0.25 micron), a small but consistent burr would form. When stropping with a coarse compound, a larger burr would occur, but one that formed unevenly. To achieve the best of both worlds, it's suggested that you start stropping with a coarse compound, then move to a fine compound. ## Strop Material There are a variety of stropping materials available for use, common materials include leather, denim, newspaper, washcloth, and balsa wood. ### Balsa @@ -33,4 +38,4 @@ Mono crystalline diamond stropping compound comes in a wide variety of grit size | 0.25 micron | After 10 laps on a bovine leather strop, it did not sufficiently remove the bur. With 100 laps, it got closer, but a noticeable bur was still present. 0.25 micron appears to remove material very slowly, almost too slowly, but it produces a fine finish. | | 0.5 micron | After 10 laps on bovine leather, significantly more abrasion occurred than with the 0.25 micron compound. No significant change in edge geometry was noted compared to use of the 0.25 micron stropping compound. | | | | -| 10 micron | When stropping with 10 micron compound, it was noted that the entire bevel began to convex, and significant removal rate occured. | \ No newline at end of file +| 10 micron | When stropping with 10 micron compound, it was noted that the entire bevel began to convex, and significant removal rate occurred. Large burrs were left on parts of the edge, but further stropping on linen and clean leather would remove those burrs. | \ No newline at end of file From 4578ffcfc1cad8d2153e182c704426f2e6297d6c Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Fri, 1 Nov 2024 19:27:35 -0600 Subject: [PATCH 0537/1027] vault backup: 2024-11-01 19:27:35 --- personal/sharpening/Stropping.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/personal/sharpening/Stropping.md b/personal/sharpening/Stropping.md index fe95926..f168d8b 100644 --- a/personal/sharpening/Stropping.md +++ b/personal/sharpening/Stropping.md @@ -38,4 +38,4 @@ Mono crystalline diamond stropping compound comes in a wide variety of grit size | 0.25 micron | After 10 laps on a bovine leather strop, it did not sufficiently remove the bur. With 100 laps, it got closer, but a noticeable bur was still present. 0.25 micron appears to remove material very slowly, almost too slowly, but it produces a fine finish. | | 0.5 micron | After 10 laps on bovine leather, significantly more abrasion occurred than with the 0.25 micron compound. No significant change in edge geometry was noted compared to use of the 0.25 micron stropping compound. | | | | -| 10 micron | When stropping with 10 micron compound, it was noted that the entire bevel began to convex, and significant removal rate occurred. Large burrs were left on parts of the edge, but further stropping on linen and clean leather would remove those burrs. | \ No newline at end of file +| 10 micron | When stropping with 10 micron compound, it was noted that the entire bevel began to convex, and significant removal rate occurred. Large burrs were left on parts of the edge, but further stropping on linen and clean leather would remove those burrs. | From 9e7cadbd5754d8c75c7ae3afeca3b294a82fe25b Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Fri, 1 Nov 2024 19:57:35 -0600 Subject: [PATCH 0538/1027] vault backup: 2024-11-01 19:57:35 --- personal/sharpening/Stropping.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/personal/sharpening/Stropping.md b/personal/sharpening/Stropping.md index f168d8b..e659963 100644 --- a/personal/sharpening/Stropping.md +++ b/personal/sharpening/Stropping.md @@ -16,7 +16,11 @@ With a loaded strop, abrasive compound is applied to the strop to increase the r The effect of stropping happens quickly, within 3-30 laps, and 10 laps being the minimum needed to achieve the desired effect. Stropping past 30 achieves minimal change, and stopping past the hundreds may introduce a burr again. -It was generally noted that when stropping with a very fine compound (eg, 0.25 micron), a small but consistent burr would form. When stropping with a coarse compound, a larger burr would occur, but one that formed unevenly. To achieve the best of both worlds, it's suggested that you start stropping with a coarse compound, then move to a fine compound. +It was generally noted that when stropping with a very fine compound (eg, 0.25 micron), a small but consistent burr would form. When stropping with a coarse compound, a larger burr would occur, but one that formed unevenly. To achieve the best of both worlds, it's suggested that you start stropping with a coarse material, then move to a fine material. + +> Successfully designed stropping progression should involve different strop materials rather than different sized abrasives on the same substrate. + +I can't find the exact source, but it seems that denim and a loaded leather strop with between 0.5-0.25 micron compound would be ideal. ## Strop Material There are a variety of stropping materials available for use, common materials include leather, denim, newspaper, washcloth, and balsa wood. ### Balsa From d899794e1f35edf604eee3a282c81752a29c8736 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sun, 3 Nov 2024 13:03:05 -0700 Subject: [PATCH 0539/1027] vault backup: 2024-11-03 13:03:05 --- education/software development/ECE1400/Chapter 13 Exercises.md | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 education/software development/ECE1400/Chapter 13 Exercises.md diff --git a/education/software development/ECE1400/Chapter 13 Exercises.md b/education/software development/ECE1400/Chapter 13 Exercises.md new file mode 100644 index 0000000..d01abff --- /dev/null +++ b/education/software development/ECE1400/Chapter 13 Exercises.md @@ -0,0 +1,2 @@ +> 1. The following function calls supposedly write a single new-line character, but some are incorrect. Identify which calls don't work and explain why. + From b802ac20e65bdd41601b15a28552789d5eb5db4d Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sun, 3 Nov 2024 13:58:19 -0700 Subject: [PATCH 0540/1027] vault backup: 2024-11-03 13:58:19 --- education/software development/ECE1400/Chapter 13 Exercises.md | 1 + 1 file changed, 1 insertion(+) diff --git a/education/software development/ECE1400/Chapter 13 Exercises.md b/education/software development/ECE1400/Chapter 13 Exercises.md index d01abff..eeb7f51 100644 --- a/education/software development/ECE1400/Chapter 13 Exercises.md +++ b/education/software development/ECE1400/Chapter 13 Exercises.md @@ -1,2 +1,3 @@ > 1. The following function calls supposedly write a single new-line character, but some are incorrect. Identify which calls don't work and explain why. +b. `printf("%c", "\n");` - This is \ No newline at end of file From fa3005c373cfdd62f119b4ac13e1ab443f3b21dc Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sun, 3 Nov 2024 14:05:04 -0700 Subject: [PATCH 0541/1027] vault backup: 2024-11-03 14:05:04 --- .../software development/ECE1400/Chapter 13 Exercises.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/education/software development/ECE1400/Chapter 13 Exercises.md b/education/software development/ECE1400/Chapter 13 Exercises.md index eeb7f51..62bec4f 100644 --- a/education/software development/ECE1400/Chapter 13 Exercises.md +++ b/education/software development/ECE1400/Chapter 13 Exercises.md @@ -1,3 +1,5 @@ > 1. The following function calls supposedly write a single new-line character, but some are incorrect. Identify which calls don't work and explain why. -b. `printf("%c", "\n");` - This is \ No newline at end of file +b. `printf("%c", "\n");` - This is invalid because the double quotes make `\n` a string, but it's being displayed with the `%c`formatting specifier. +c. `printf(%s, '\n');` - This is invalid because it's trying to display a `char` using the string formatting specifier. +e. `printf('\n'` \ No newline at end of file From 6a77276898b488640ab26c7c06cc45c1fd0ea974 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sun, 3 Nov 2024 14:10:04 -0700 Subject: [PATCH 0542/1027] vault backup: 2024-11-03 14:10:04 --- .../software development/ECE1400/Chapter 13 Exercises.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/education/software development/ECE1400/Chapter 13 Exercises.md b/education/software development/ECE1400/Chapter 13 Exercises.md index 62bec4f..aa0c798 100644 --- a/education/software development/ECE1400/Chapter 13 Exercises.md +++ b/education/software development/ECE1400/Chapter 13 Exercises.md @@ -2,4 +2,7 @@ b. `printf("%c", "\n");` - This is invalid because the double quotes make `\n` a string, but it's being displayed with the `%c`formatting specifier. c. `printf(%s, '\n');` - This is invalid because it's trying to display a `char` using the string formatting specifier. -e. `printf('\n'` \ No newline at end of file +e. `printf('\n');` - `printf`'s first argument should be a string, not a `char`. +h. `putchar("\n");` - `putchar`'s first argument should be a `char`, not a string. +i. `puts('\n');` - `puts`'s first argument should be a string, not a `char`. +j. `puts("\n");` - `puts` will write a newline after writing a string, so this will write two newlines. \ No newline at end of file From a46466ade3b43626a53d16e339df2966c4a6404f Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sun, 3 Nov 2024 14:15:04 -0700 Subject: [PATCH 0543/1027] vault backup: 2024-11-03 14:15:04 --- .../ECE1400/Chapter 13 Exercises.md | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/education/software development/ECE1400/Chapter 13 Exercises.md b/education/software development/ECE1400/Chapter 13 Exercises.md index aa0c798..03deb8c 100644 --- a/education/software development/ECE1400/Chapter 13 Exercises.md +++ b/education/software development/ECE1400/Chapter 13 Exercises.md @@ -5,4 +5,17 @@ c. `printf(%s, '\n');` - This is invalid because it's trying to display a `char` e. `printf('\n');` - `printf`'s first argument should be a string, not a `char`. h. `putchar("\n");` - `putchar`'s first argument should be a `char`, not a string. i. `puts('\n');` - `puts`'s first argument should be a string, not a `char`. -j. `puts("\n");` - `puts` will write a newline after writing a string, so this will write two newlines. \ No newline at end of file +j. `puts("\n");` - `puts` will write a newline after writing a string, so this will write two newlines. + +> 2. Suppose that `p` has been declared as follows: +```c +char *p = "abc"; +``` +> Which of the following function calls are legal? Show the output produced by each legal call, and explain why all the others are illegal. +```c +// A - Not legal, because putchar accepts a `char`, not a pointer. +putchar(p); +// B - Legal, output: `a` + + +``` \ No newline at end of file From 0e2586459f6b7c389a6c4fade4c71a59736fd44b Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sun, 3 Nov 2024 14:20:04 -0700 Subject: [PATCH 0544/1027] vault backup: 2024-11-03 14:20:04 --- .../ECE1400/Chapter 13 Exercises.md | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/education/software development/ECE1400/Chapter 13 Exercises.md b/education/software development/ECE1400/Chapter 13 Exercises.md index 03deb8c..40f549a 100644 --- a/education/software development/ECE1400/Chapter 13 Exercises.md +++ b/education/software development/ECE1400/Chapter 13 Exercises.md @@ -1,4 +1,4 @@ -> 1. The following function calls supposedly write a single new-line character, but some are incorrect. Identify which calls don't work and explain why. +> **1.** The following function calls supposedly write a single new-line character, but some are incorrect. Identify which calls don't work and explain why. b. `printf("%c", "\n");` - This is invalid because the double quotes make `\n` a string, but it's being displayed with the `%c`formatting specifier. c. `printf(%s, '\n');` - This is invalid because it's trying to display a `char` using the string formatting specifier. @@ -6,8 +6,9 @@ e. `printf('\n');` - `printf`'s first argument should be a string, not a `char`. h. `putchar("\n");` - `putchar`'s first argument should be a `char`, not a string. i. `puts('\n');` - `puts`'s first argument should be a string, not a `char`. j. `puts("\n");` - `puts` will write a newline after writing a string, so this will write two newlines. +
-> 2. Suppose that `p` has been declared as follows: +> **2.** Suppose that `p` has been declared as follows: ```c char *p = "abc"; ``` @@ -16,6 +17,15 @@ char *p = "abc"; // A - Not legal, because putchar accepts a `char`, not a pointer. putchar(p); // B - Legal, output: `a` +putchar(*p); +// C - Legal, output: `abc` +puts(p) +// D - Illegal, `puts` accepts a pointer to a null terminated string, not a `char`. +``` +
- -``` \ No newline at end of file +> **3.** Suppose that we call `scanf` as follows: +```c +scanf("%d%s%d", &i, s, &j); +``` +> If the user enters `12abc34` `56def78`, what will be the values of `i`, `s`, and `j` after the call? (Assume that `i` and `j` are `int` variables and `s` is an array of characters.) From 7e83d70c8f22295c4a1459163962e8dcbd276cfb Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sun, 3 Nov 2024 14:25:04 -0700 Subject: [PATCH 0545/1027] vault backup: 2024-11-03 14:25:04 --- .../ECE1400/Chapter 13 Exercises.md | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/education/software development/ECE1400/Chapter 13 Exercises.md b/education/software development/ECE1400/Chapter 13 Exercises.md index 40f549a..7590c81 100644 --- a/education/software development/ECE1400/Chapter 13 Exercises.md +++ b/education/software development/ECE1400/Chapter 13 Exercises.md @@ -6,7 +6,8 @@ e. `printf('\n');` - `printf`'s first argument should be a string, not a `char`. h. `putchar("\n");` - `putchar`'s first argument should be a `char`, not a string. i. `puts('\n');` - `puts`'s first argument should be a string, not a `char`. j. `puts("\n");` - `puts` will write a newline after writing a string, so this will write two newlines. -
+ +--- > **2.** Suppose that `p` has been declared as follows: ```c @@ -22,10 +23,19 @@ putchar(*p); puts(p) // D - Illegal, `puts` accepts a pointer to a null terminated string, not a `char`. ``` -
+ +--- > **3.** Suppose that we call `scanf` as follows: ```c scanf("%d%s%d", &i, s, &j); ``` > If the user enters `12abc34` `56def78`, what will be the values of `i`, `s`, and `j` after the call? (Assume that `i` and `j` are `int` variables and `s` is an array of characters.) + +- `i`: `12` +- `s`: `"abc34"` +- `j`: `56` + +--- + +> **7.** Suppose that `str` \ No newline at end of file From b434383ae80950a4b17709f2bf7ac726a9cb563b Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sun, 3 Nov 2024 14:30:04 -0700 Subject: [PATCH 0546/1027] vault backup: 2024-11-03 14:30:04 --- .../ECE1400/Chapter 13 Exercises.md | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/education/software development/ECE1400/Chapter 13 Exercises.md b/education/software development/ECE1400/Chapter 13 Exercises.md index 7590c81..a953771 100644 --- a/education/software development/ECE1400/Chapter 13 Exercises.md +++ b/education/software development/ECE1400/Chapter 13 Exercises.md @@ -38,4 +38,23 @@ scanf("%d%s%d", &i, s, &j); --- -> **7.** Suppose that `str` \ No newline at end of file +> **7.** Suppose that `str` is an array of three characters. Which one of the following statements is not equivalent to the other three? +```c +// A +*str = 0; +// B +str[0] = '\0'; +// C +strcpy(str, ""); +// D +strcat(str, ""); +``` +(d) is different because it effectively does nothing (concatenates `"abc"` with an empty string). The rest of them make `str` effectively empty by setting the first character to a null byte. + +--- + +> **9.** What will be the value of the string `s1` after the following statements have been executed? +```c +strcpy(str, "tire-bouchon"); +strcpy(&str[4], "d-or-wi") +``` \ No newline at end of file From 06fd14c57c642ad0d1ccb8b4685c1e0d14b0aaa3 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sun, 3 Nov 2024 14:35:04 -0700 Subject: [PATCH 0547/1027] vault backup: 2024-11-03 14:35:04 --- .../ECE1400/Chapter 13 Exercises.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/education/software development/ECE1400/Chapter 13 Exercises.md b/education/software development/ECE1400/Chapter 13 Exercises.md index a953771..33af519 100644 --- a/education/software development/ECE1400/Chapter 13 Exercises.md +++ b/education/software development/ECE1400/Chapter 13 Exercises.md @@ -55,6 +55,16 @@ strcat(str, ""); > **9.** What will be the value of the string `s1` after the following statements have been executed? ```c +// Assuming `str` is an empty string with enough space to store everything: strcpy(str, "tire-bouchon"); -strcpy(&str[4], "d-or-wi") +// "tire-bouchon" +strcpy(&str[4], "d-or-wi"); +// "tired-or-wir" +strcat(str, "red?"); +// "tired-or-wired?" +``` + +Expected output: +```c +"tired-or-wired?" ``` \ No newline at end of file From 0decb67b085334ca03ddfbffe2909b0f6befe30b Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sun, 3 Nov 2024 15:14:05 -0700 Subject: [PATCH 0548/1027] vault backup: 2024-11-03 15:14:05 --- Pasted image 20240913162148.png | Bin 57779 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 Pasted image 20240913162148.png diff --git a/Pasted image 20240913162148.png b/Pasted image 20240913162148.png deleted file mode 100644 index eab1b1a56bd2a8e08fd37e9ff4a2a000f50a6d72..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 57779 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

b1_rY0}AM3Gp+W$*54W*p!Hi>(=J@uZKMGR{t2 z%)3${qbs0)>u$tGO+vq=yxEWM`bax9f;Qs8G*Z@n5$Y0N@;QD>I7_w$I3>E7tt(L8 z{-LXRVPTP!hDon1-wg9Ie&48u)Vu)4BcE3J4I;c5(%IR%m#^xF^CQ8ag-*fAF(!=1 zLQ?>2A(Cgga9t0*yl7b6WNiDV87h8?09>%q;g!scr5Am%Z1Kb3OIf^Ajpt!_a$(vY zovy2B>+V{-I%l!s-_quBChzWE$6-*b6z51ruI$jXLjvS0s+2(qY|zPQ#!bHD6kSxa zRfQ)rzlK~?|L5X4)KQ&!UiAm_jh0p-8oYe2qtac082DFC9f%LL&|=wv?!}KF>C;Gr z+%xEQTst}Aaol&tinVI3Zy9R|-Vb3AWmO7YQ|oJd72haJqrp)bYT>N`$eaV^9$`!4 zu_U0%oO#Y0d+J}tFFCZR7OH>F7TnOEN@8uEycl0u2+M+G;=Qdf07fl+ov-Jl`dhXD z)c=1NU;zhvaHVjnQ+fs-$kWgszGFWQV64U_^bnH6R}$6a4=Db3j%AU7k`79JphHMk zUE1aWxnw~M`_owkDi%OH(%GZs=2MphgrMCHQO&z#2`D zmf%4@w z0A9jz>-1=>7uayAgz4UJQ?ys9UwWO~4I?y&CLU^sIBNnq6hgy~OftLmb2_y+C zV=Of{gBD&gDv6nU`XH+#)zKF1Q9 zSVf@%n9F61JOhH79~q+WDSRE4q;&rr!?%W$ITQD?eaBQ@S&pVNfy~*w5@XB^#x%a9 z!U&Jh3%sU$*ho;0!hPc~^3oYQ2oFQ(B?TyYKG9_N2#l%HYl+48O%-~!4s4DmJyrm%z&k1kxHt7 z`K`I@I4;Wn-}1)VJvhcYy`-;+i*rGGWBpS8-?e#d-8WxLh-Sz))?KF%K}x_u6sgT8 z6mfJE_W~nCK{mWn1@jty9@)~X%Irm1UQ(hNwD6i*KP-K(hP@jk1)ivcFk*u0LfyF4 zjg}q%_QUqVMO#ol7E+&X2YGUMp2bv4Jo_cWnAo3!<|0JPWTuF%b-cSOnQBa(oBquw zkzM~>;CUnF1>e+-#O+}XulK3>@LUi!y@P}EW35ne#$lq!CGh*$sVNIdp8`72v1pZ!$T`>A1q5zJ+ z>Dz~2U$>iNdu?LY=p&=B1#q;HDI%GN5Xy%`|IYvR3-kB(_D&O3xJU*=L~0=iB|-jw zea9$>kTwO7N!6O>jgwZ_J+6z)FAaakDjl6sc}JVOb_v0#C&pyf&1CxO2u_S&lo_}K z$+5$#E8=@~ItMF8U!*ph4pz#VGRDD6!B1XJ?{u!Q?jwbH?zrV=!#yx_dOFNK4Cr4L zxh@rLHwT~m7e}C=6u?#T0OVimaheEIlk9XJFB8qn-*Fs;m!7Oo4HXfo@Vtb4!OphF zL=xDD7s|?DW=bH;2Gj8cDq*m6R|H}!eCTHsT{=axeAbhh7Ja#OafJ1Cwy%4EkB|^6 z{h~eMwZqD^d5sn4$_~ zV^8Efm7sk|V+cG%I1}N+YXD68vg2^h|=^z{o$ z{!)z61M|X8`E;w8@DP75v|41+O<)#no%-ETfg zAWj6S+(Gox&WZQIN~>M)Cu;*q@Iqzh&^wJ~(C=juIvGW>ZNU`@r!A=P`yE$Xy$b^r z)_;KsFAFb+3Jh-fl2~Q=LcFQ!;lXG)FN>h>Cp=Q+il>v*pJv%?bzSBoE9?>>W{FjZ zknVKaaQS{l*Ob9FH&ttkV#Pp6&7K{c~!4RE(DN zDh#(QR-beH4zIUPU362^!nnt~IKLeNu8qCD2Mrc=suW#ZTv1j>wYFt(3MC5jJI)+% zmEA>|;YVT=9`m1;?dKZfKw+MO^a7MQK8++|NiT#XQDl}tPjZxNWafB2ch>}rq)ysb zsu%6CC1t1C*<(eT*2nmT1axavR8?6yDDwbvS|a|ws3x`|J(MaMa^SGlb_Xs~ z0U*c@V10a5stRe%00$Uo;y^1#o7_-T#pR-ZDLcpYix8?7jE&JV*D5`NfxClM_t=C$@1wmjw9X>4r!xY_TuPJH$ePW@??RuWFtIJ_g34-WFdJ5iAdG; zv%D?uHV^DorCC^QzK}cfqTw;k57XWcmjmHgfqp^&5pfLvyy?A0?OE2;Bp+sfx!LGU!DRy4(mnyX8hr&`Xd?8+|T2 zqLLvv3LHC!-+U+rW;`;;p*)E(knBx>)n>mO9d|=C+An$dZamODU&=5WW6@VBQRLa7 zltZMR%6xj6#Dk~<;4r0 zTxVH2&zg@DFVqm5U}XFj3ZaOI!G5Q9c}(X8Y~l1tM~IcsLKR>1(nUwLO%bT=;_`@BW!@Fac>+ z0eH}oU0htC4C!fUY~=zuWXo!g@)`C8yRzt+9b{#L$}@9=*r~N{otWN8J2w(yb^qc~ znfZROtMVke3>Hl$ zUOwpU>tp8eqXB7*p_8kKNf-1a6muYLWs9eaZ(s;-4jNIHh?EHR-l;D5%0N z==0ukuRSC>38rpafbATH8r(R(<@qI9yvYdJ8X|u8tY{~Lp|chs59DlCKP2i`;oA*p ztj9wEiQm5)keA+_Ppc1ZI86WwGZgFHyj%Lf6?U{K3>KMx8Y~y1qbwYZpkT7ux%DB! z6X`w@pG_sw-|4A&D~8Sby>c35#T;8}W_H#!Zq5S}j^&$Nl@KgA;mdnLju};kdh@}w z)8H{2!8c=vQTg+=8wlwYf1NVFW&BJR{zM$!v9Ua=E+J?*b!u_urnvE>$!$)v>;`&*S0>=f6Xf0!71|i~YFF_iYS3lXNv!!8g zo@;2|YEVdjrqKwEc~)Nh_INk(a3yMa^tZ#&TUAqvas$B^$N(o2c6M;XA74DGJN&Dj z_A-)E&@KmofcSv&=m*l)wT>C%ip)y_Ff!*io3g<0nKW$94IDTXYFnNhsF$XBC5!_R zl6V*2UjGx+VhHSH1XtzxkEjH9ub+xeuiA<}GGIl0{#DvZ#$;@Xdxp!jjt95>Mj`*Y znBqg$Gv5B!2`xSPjHL_TYsmg65=mcwTL(OAJL!sj@$Mcv_` z!NvWs;kEb9Qy(xK(azowjZVblFcn)$J)IvW-pErYi}_9?WceZd;$q$$t_Qz|5o5C& zY+%=_Q-beV^fhSiC=HWu~#6_e|;69!!R}lIz|)%9)>m;Vtgm#8lbvWvO4wZFcqn?;hn8m~c?tKi;3n^qO$=oP z^sv#B)B*+|sAGl3WjMDR#7*fd#GUj`+DE&KneAz=LN!}(cv-Q3-UZJ?4D@i>Zw3Eq z>*|u){@wfDfYPp{rX~^eGnlHhqGDrH$hGDY^m3SePcYCM{J4qh{KXj zjA<_3@Tbz4=MQ`9z^STWJg9{IJ=+pl-Pkq1 zblByw;xc$$oZ-z5rLy@=KEDYDlPV!|PcKP^7lfvGZ5MNf{JbyMrDm>iE*bx!x^S~G^n0_lN80P#$&xC z_j%=o-p`f4voy3idK=s6T%hkQ^scB9I8X>znAdD61LI(<30lm%y*j(66u6Hgd~8*~ z#I469U?fzJ%x^>M&Y;IAuh`hw>PO2ob#)cNB$%A3sh0+TquufKA5ZLzpKvh5L{uY6 z!8w1d;`jHj4|{(fjEjjpdHd(}ROuIM z#jS|+`d?;B=Eu7SUsQX>M%~_fl$sk38uLe2^CiFl5M|YPeH8jYOuk`hwBEv<_b;|I z^c6{uK%MQwzbM4&nZhzyq+I!cR~fyY`)4egOP#N27*ES}((<5~qljnlYBD6$n^=lF z7NK?F%@d^hZP@q`$=kdLz2wHP3|79ZW?QEJa+lYP;lqFZ@sS$|70$Cr!XxfK!C{i4 zQQk$N<@`n)(_iwYb zivw}~$p$iO{(=Rhe+?j%rh9Ltv@yZ^{@(9o`=~*4faK4OvNdsR+zaWdC`jTo8SxpL zjI{I10R!SP>W4FN$K-3s%LC#R(#zX;V9E|6RiOUFp=vX zzC6lOQW?Ql!Cw!*%T1&|iIkFrvZsuiD`}JKu8)?%r&w=ff9mZ|a4viT#HeX7xlN(Q zaukvBI>39|V1EmGaM?JZ74S&_Zdm-ST3ebYpp&Rf(@1U7dgCEnDJ$ZTBO(^7s92ii zCE0!&|3r2CPp6taX>iF+>GH{XM9<}mihOj1{>=@Ci^)q&us+kEQbZ#TXP2q@cER`{ zLhj)VTjkbtW_YI(Km5I6LktBO@q9Jk3xzN_pg||erW*uk_pYxGMqJ~Kdd&_Wo5bW7 ze(lPVwx`bLIKd2J0Mx=Ro zc;X2OkEn?2M*cR}d%pVGP5d}d(}!Gz4S$>fH<5Kfh?<&ur3GiMyPKBQ>%xq>OJ;Gf z`!z1dNIN!bm^V6}yO)w&SZ?mYfz4%UCY^}Pqq{i~ZORcJhCt~T55_rST)IOw)v{kJ zU+q~3D>zf5Ln?{{-rupiYhc?y6IWZK=CBz3*fP&dV0~@gm`1G&A$Ys==`HwfLH9&K z4xsb7$55u(1M8%1<#GCPS*yWrM~ufx*;@tsLEP|0p3H`rvUluh4jG5xe8#Qe)h$T$ ztbsv>wviFXtwP1|yKHZOE)+S)oqI0Ga1Q+9U6m;aBbuMUeU>h`8# z$f3Ja=|)PVq#Z$FXc(khX#{D8mhKi*Km_TKF6of&Zlna1@Y}raz2E)E=kakoXPvdz zUh!Kcpo4d>aWN&$KXEMVv2^{zG8BLD9Zm#uYm!-`7dP+lI=w7!o^N!v{%1wY8n~i{ zl7uAcL`}3X%*>n;rcfLOGB-d>$uxa!$ZsxAl^Hp`yBvZk2gh!j@On7GKs`6Djc(3L1Fcw#ce)uH@+eg^C4_~u%Fx+JxI|1YS2 z$p;N6K_C;!$^?hOc^;_v zGp<7Qe)7BxscUQ+f*0tpYTbAEb2LWvD4iJ@H0g-D{$y?kQ#f;HFOJN~S`>f({9GRS zpD!YLJDm8!v>qfV9DfV5<`=d8U2V7SJT@hN{ZIf5U}WwjoUARbJOp z6?0JIyy2(Ag=ZVGwNa9M*)NBA3Z5I8%f+*YZV!Uk$p++F(SDthF4Ci0<5t=hBvM*yq zw+5)|rZa?SgqfL{pNon@&jkOmID4_Pv%hX{zeBgJ%<~KJ>rH$ntLkOwyAp`~cha*I zQ-H(C-aggK(A9Nak(N40$|em31r1eI@yUzm)d<7GWgc-7oJfr311u?}JeG>0rqXb` z8N!q0`AD1Imc*Znq^cG(Hv)b}lrkRg$TqiM!6?Gp+JpDDR;`p`j2`H*?R#BV85atu zzzBP+lI3T_$?>1aOJQ1vJ=VxA56h{HsmpbmlU8{=X^)OV4x5-5Q_ikQ)z5^hiI-1~ z%Up8kxM}fq4-ampMaDAK07P-EVdb^x!0{Wzn&K304}tv-wa2~y<<&;wvyIu{l+IZ; zR#t^1Vk#Epr6Z6!#u1R8z!|aYvR8b(k7k`xWj&&1*H1tzhCHYw$Po@u{7|Ckpn14a z@Xxw-*+yDXT0oO2brF2;qOJN*M>%8+q1dN!#snK_>R1b58j~_cPNmI+`NO|)0uDj#l*h#%e9Z<>?cTO37L1ot?jAf;*^6U>N zW!Bcv&|u8e{r7k1rcZt49|{V}zkl;g@xA{$7~(M7JBjC|U+*smnd_F8 zRCE?Qm|(ybRZIjIk|ve|_t78WcUyGrR8Q7P(QES?7&_0EMnvfs8 zV0Sw0@9)3-p521lHtjgszn?O4a&)=5x$XS?WSnJzv`_Z+Atl{*-tX<~^!a9aVwX2H zHkPNProObW2v%duc>PD9F6>9@rI9~ppa98eE88s*fc0%lbxJ>G{xrHpW*8sp4sh?= zvBm3t-IXZfJId1aCAI(CBEG$ICaxtDBa)SCNfp&EovbET^2R` zsw$mqzl+(uAUr-;sLVhxa?s;kW$VY-rMFtIOyDT!Ti0==g6tv`d&l%?(MPecU-n66KF z0#%wpgZ1QL-E#Ro`sSDhPp$@;PC9pB=t@1C*Xa|)KRBP7I52n{x#PgNbi>cezoMx# zhOF-Fd_wk|oVa>-2AjRzO1J(A@-VL+FO8NrpQ`;?UB!kUpyj9ictt*bcyKWK_!QOq ztn1IsDusG{Z)jA&461vIBCg65(*@Y>{c~m`x^Z*D^V7+C@6Q@NGSVL zT-{mU*)LH)I{#tWJ!!=u85Ivi`g@bg{fgH4diu^U(e8i&Hl%?4LZS31{`0{1M~W4B zS}9}x3Ln~WM(5`_5yUCoh*aPtlz?DTXVGKc5rKJdc=$4$h>=2}3&4>1$Jpi)($ZyN zVPT3)^3jb11Ogs6SG|vQ?`OpS1?z4eem5EM9)9yvfk=ie=meyH^gvoaTM}T?kwX-5 zrKqU5-86Fi+X-H@3VP>YZwR+Mv3=TUYD&t_DAOCn?=A6GeR^rHiXC+r7e!1YwsJ^7 zd;}CNljIp&P)2U<^rETwz`!Jd_!1Y9%*RY0`&E}}b!CUeAI@X!Om%^8__I=Qd)^IS zN;MOJ*fA&#MPL_+2ze^Jmads5dmqt4EHhwzhVw2CX9l^5m+B-%nMM zr7RlEji28XzXbbPOk_ab!48Cadvo?*UxM208aJJZ0;*xdIC(+E-`aga+l$+GvE_Dd z1S`GGp1+n7dbm3J6SSl#y36_CWY}*gx}o{zx+-}XXtY8j-gnN@Hz%9b6p?r=WSr*; z$I859M2wPbyOQArQsY@6Lok9AF6;;F{|1Ohr^G%MyWcwDt0Yh3>f924y->qZidL6) z-%C1j?MJdh<%x`kkF1HjGVH12!+%i?pZBrGapB0jNp+524STleeBU?zm2h%gA>hA? zX9{KQCD${`zwf@-?dXwE<6C8w%cn|^6nrdORjylW_I%K)s?pxpp>UsCzLNQuA)@BA zd;h&0J7mW?wdG?C?C0fQP4UhG33mCD(R_trOD5>+HM46i{^~zx(LyOV((_4TdJ)|3Hp9;}S~ z58CwaJLLCeysXAjW3bX;FM>1Y1(^F}2Q1m};f7Gnt--;}-5=;(4L!0TdO*k}tSr1*ed${O3wD9cF#xxKOFo*iX|oVK<> zU|d+SUY?X(n@<~>xE=0}R||>diO~};e=XN-VjGu)zOM6L^=5;LpyHqkr(3GUJzvNg z{N`#|NU*t|!vDlNW>+t&tw$Y0am|Xr-kfV*ljDFmGVMx2RFwC~Zh=BcXB;s->BT^v zNy(t+hej4TY0c2ct<4oyu9lXMf+I)6(^s|)WMcvR8Rhse9HpG$7aOz4_-?hN&-o{K znt(4wN^wama%+!@vBCi@k82Sr|Fkwv55e!+2- zuJ@`pNS<(kN?}sOUr$3abuA?4d$~S{1cefglJ%5ukCy8!8#IZj4SxMGS&2@*F2m8>srC2oi2qJ$!@_PLJf8hIn>3aKQVO!C4o z9LOSFTtk-ydVE)fLr@md%rvNa!d9#F2P-9(6#D{R5>3fOlXgC;kfat2Twk>KQ9*z0 zN*BxD^ANdjMse`{a;X%wb1;5d1`Bia7;jdvmAEM0wEU2oE+UpQj){8)7z0*{yeEw; zD(Waym78DuJ@m@qc!O96&89Ec|1b5eobAuMZ()|&>XS_&i2fX)UQp*lSQP2jPVSDw zACuWHf^ArQEJPF^K*|Ej~#Jb>c2m^|DNYwFKqvO=6^~W zL59XTAn}jrZiVP4x5){v%vgb*R&Ql}x&F3#;yfNH%HyiG0%RYLbylVAbCK(Mjz9#E zISTduwe>9QKFFdRH)J(DZN#SH0R?aQc^btKM?Q`{W8<6qOls-BzhD26eCz`ebMcK6 zaV2Cp0i?sXqYBrT|70&e|9AQB-^ZiIeZGhU)KvCk+i+3&n)YM}PpGq3C+$yQyLBTv zPQZwmPxm$cucf=_#yimVna0DLNZpuCLFKgfFAldytj;dwH*M%deWEVLI9+)B&9DMh zcX#*A;g2eV`CR+xbFV=wq{X`A(ivSSLSMvND3s+Fsx3?_OX7jNt684uwT?p~Rb@f#X zoThZ66>NEm?5_Iy^;uaKw4ACG2Q`w<;ZnYGr?|3d#H_x$x@_M=yWqpYa;siX-Y-7U z9CA-^16^Cu-Ts_xd7o}P_--<>sCMhaqkf&@s;Q`mRtv3AWvdnIU8jQa~#oAK)Y0JWG} z<=J0*gXAl3Olhh3`1ow6B~+>9E3D&4QyXrQ(&g!Z*z{CR$yoLTqZyOgz=2nI-f1-v z+`0|(XAe{%1*9VempNrmAfn>pAI&gBHU*YX!EQN?MW6jIEJsWvUz<<+vp#h_+EG)k z6TzV82}gd%vuEpK?GZI8>y>J`sQLPm$`mOW1O1T3g}%R`HDD1ZQ+(8XrbS#%m3p;w z*`mi2@h4BO$ysK2=jN_BSAk>lBgXY2L{iCDt zDjMo684q!Jd|Zb_*v*k=YiZ%&0*~@jQUZGQ}Qj_HW+j)uZzPvhhI;EI>+ zR3DK?=FzGlMJJt%cNHP$UEcrBpZ#OgRd;jF1wDsCwa`Sk00Rky(xA}=DU;QFC(+|F zS+KE2t*_R;yg|7v@yPz{%_byIbHs|WTFF&yuLq~Q-!$SuPasfZbavk1LQc5dW$Ij# zt0^85$xW(E+8AprWHBnj$>{BuV{!g38jH>#N^nwUvin;e36p-kfpinLAQ?pWVZrU; zK?DsP9F&1Y>IwSe6)*+*C8^CD>Jg8Gg|r2bL+x+O+j*?6wu09Wz&c}i#*0_$qC*06a( z7M`E~r~GEAYPKwBCj=IE#4jAg%_ zcdUyD0PjsxdYtcdFeCVT99EWN4uUTf|3m_#JE!J%pzvEhkwpCB`AWW=49%Xf#%U8`b^p{x7Q zszhdz6)bFjveo0izm8Wk@n2IbpHw{zpG?9(LP;X>VLQQ`QuNZ)x3!#U8-aBN04aihb0#|y}vez z+hhWc{dV1yr#F!r8uE+Ofk=<#w|u|Uq@@UfOsvBOlu}M+t>gAiv`SCk2bhZRv6<1L zW`?lrVOih_LNFKmE0)X?AQV^6yR5HtL&%AQQ&vZy!bKp=aKf}_%Q9W}jJ2q22Ieib zd{qxfuTT!bm;uwNK#xGSR_UsFFC}9LOIeCbA^QG0x9K0XN6Wt+yZIr+M6G200bQBQ zH%jEUqp$}&!w+9|ADfZSg)yUXK8xLBR-$&lI%YN=$s`NOaRP|D1IMl4Gawj2-D&(Ca5`rYC*K04c?y?UX4S9*%+nInA4BxtXD~^f5 zK70+1|Jlg^&Pk-xDHy|7<@W>o3)=j1Pfo3@afL{VpKo&B6xYK_s8i^Vejz>vS5fR`hPwb8^h-Hp4hK)x;fluFFFH**QH0VrkA1xSS z)^)N|(8Y#LH@~!$L)#lB;=%*Q_ljouSX>CFyzL#(%KfLY^qz1y)Mc{^mk~xjSKSgT zxE*DX7pHp5@aT1#zbki_SouAJYPQ@PhB`Z$+E%QkjQ90r9qauAJ<~_p5vZfN_3H$I+_C=fBDK4^}bA^2mLmSMk zTMdxH989pcw@;>yeY;Ntl}#*%1lB{8Do6 zx|T6Duxh&Yy0os!-Cu#^mA!VpqGwOFp&=L*Oeku~VL$9oNQn z%XmNt@OvJt#gJ8zo{05_VmPqK<=f~ue&g}SfEK&Heyuil(%z1m{vpI;X@2WEd%%%x zfs+`g3)_rJ4_n1@^SlfAg~ zk?-GSDp}jn=G6iBml`d9B!!rTMpcD{DIcymz_2xK_#O!nJxT~j1xJvoqS2aJZe3>n zTrq33rN!TyyQpd^ZHbJ6B2#{>L(MWi1ZD2XP4df116n(Yva)iu*@tP|C5BDXJQz=I zKKTQxd}PPq&`<=-!Cv9&qknhWi0%tPynNuNor+Z?qadU$gjf*Lo*o_%{6>e?nRt*S zO~7Y|kPG(rKVH4c!sCg6M&fT;o6`5zC<4Fqi}&@wp~kE9=TskOCMLf4hW!07>ckpw zO9t;?0^f@DM0Cxzqw2Ah?0SAA>X=KjBbJ;mE&bbG#KqI*oxzq(a7esgSE$HF=CLwa z)|Zr{tuwI7L`zst5w z(q*PcM=QQmES=TTw-K;Gg}}KomqM*RzCv5_n10(k(-jc`+4bnb^S7|D_+fj7L2?Yh zmYt{UVe=Xm7Ll>odnfChzpuJgRj;zORgbQ2Tr)Pm)BOcF2IZQqG-s$w z-Nexdm7eUQ^cQKPL2?jee@7_BLnUw&+HAb)*52Mq9MvDRKgUqJeV^l;zBsZTh#Xpj z1BZ6(6gO7&WPycPsRza!{mj9^VU+&@|2s|Me4btR2Ur=+o{bR>0hA(IXYke5j>Ia9L z9baF59ldld@tI6f2I&w0MZS{|My{K5z@!E{oxoQdrO=JwaidmG;>?TZ7up^!Ha+b^ zu=>91FffiEqzpx{m41;-H!(JT3FbvlOm$BPoi!8|8k=XabR*oa&K@Rn%H_koi!~}e zFb45tLe_5H>K;z=pVJ>6IuzRLvFn;SBqD>3hhWJBRD*qwA;SkoAwQflt&H17_K7497Hu~qxXffWXI#}IaSCwai2k6H2#^9l*J?K` zTDzBo*q`MXHM%c=mHm0wKvBaw?VpZ%=#dzVg%{=BSyOt>6XOVe=2$v*m4a>2yZYGG z%}wJ=dHE;Sr-Tz3RLk?sqX{}(Sdr7QU8^UImAQt7hDG+l<&+1XrX^B>&{{jF92aTU#4XH@*P+uRIXPh;i8HV{vhp9n!`B@X)b=?>)||Tz$4c zIv~b$xc*2kRL{Dz^YiK>kKz7Toh>aUK1E2I>@b;mvPko<`83-^F(eBc(Q(f{g@!6c zTrW&cey07u4dh3wf>9zLf^RUb;24&mN1_a0Q$!vhpsu>!kVi;PbqB63Az|m4&Z3{^xVhhfD`&emNR>Kbt4q!NyxFcl4^6^yLQf$a?fSXSyJ47fcQ_u5uKS(Sq z7yeva>~@W$n5sHdDu7jg4?E;%^zjzJ$6>zKvL7f|k16Q93#tkc1)2dad_LA7K*Mpv ze0;OZ)r$efL%F;w8Ko)6_rT zmxyN1gW+3z2@!eb(v70`C_+(wVT0)f8Ex@+g^Bx6Mr!Tu*~b z2nf8-G*YRg%8!hO={_K1eW717{IF4~_@g!3)y>LEz>)t^F|5qJ==d-Dy%K~_5)m>7 z{`rFm_KL0}oSo}1p5T~^rL#u?J#FwJ{Rt%|p~={$pqN-qfoRawkB2_qFI6~Ox^<23?~(l*57M10gtWMj7)xsepQ z)kXI_t43I8^ITPTOSpRF$$gD={pJ`sQf{pfw66y4NEzD@)dv8L@T`-8xTSfhU_Us~ z00BEmA&ZwEONflN75p~q%}e(2=ik4L6p^L zDIhr%Q>Xt9e<^I_AD0t*pc%MTSOck_^}+(`zAN$*mPH&(jx8_qJGpxJJo>7km4*wk zQLkxX9?HWyWeNM4a0t>PxGg&Y?GSWPciZA50+ zA$qB597YGQOM*tf+ZP--%`ggP(NiT{!V@((es3gG)V%vAJ2^9Bb8m_RfhEVMtNczW z7ZLyzVrcp(D{E&-VJAf6m($Kd?jd`7f>J0jFE8vO|A=5vP^Ny!Ha0N$`CVLLZeEd+ zlZZybNbmmNUkc2-6SLlp-bS~be|}-mWWPgPiqJ_sD~__Lpu+p`sF#m~NAo9;YUM9I zYw4yFCK;+cq@;;H(q4sgb-+V`V&?MdT?FLE$_h=iwjTclKPog07fWfo z7W!UM!L|BV0IRvR^_fZAZ0sETY>bOE6d|(r;JiUZ%Y0RDjQW{y8A(LQMkayLPAR__ z^#@qA=F6wGc@-SPgM&y|i1Xatok{F=OQ;wu-PRq#^K<+xdH4A38?+>LH8XXfs%Y4xa(-qGGZp3=!H{@6ov zn#sQTRWy*Ap88X6V>b~iP%p4IQ)%H-w$|uRyHxlk@{q(SlEApgR`~nk{iPug&Cwx1 zquM9Hp8u$oJ$^?zvDX%OD>Rk)U1&0I#GVY03r7-OCM%*Kpm=W|vLO9@eVgFqh6Wkx zYT?+4axg$mFw2130DFMz64FidQF;>fFgD>qqG+#Is(Q+HDliO{MnTf=Xi*1eKy4}I zegSD$OJXdd?)h4n0id7^)7|6^Cz@Ap*yB0i&mKNOsNRfqOv3&A{Dy~Sv}|1-Lon_y zFV{CgEy}734o>rzSvvIe6%Q}=DS91t<0wj#aLQz$F7${OLCiudoR^t#6-Jk^7vU)O zAOAl8K|S?A45js3Wy6T2)K@|e?nsCy(q#nlKl52B0=2T?2opp*5`Pul(5^tO3%VV; zW2ip%T4TGdG>CEr6I?lC zx%CHsAoaA0^?j;E+LG1FX@da_3=9jW#SS$6H=kXJATLsY0wI+xpPU;9~A^WK8jZ3@4_^~T9F@5FC8If0~)g&%FVv@oRq2-o2v zI}2FfYP*k+!criVswjsn6xHvLEkd%gpIaYIDJq(qH*tAgnIiA6?I$6JLEM6xJV9x9 zJB_jks&^A}a|xtTVkzmCxcq?XGRa;>#SY z+P^8q0jkgUcwRqJ4n`hrJ9wBh>Y2TK6-?D&SIyE%7ODHfVguJaq@a=mk*!u_>45O_ z%Z^2e7KCqCZ`N>RoU!V;Sk2&qF9JWj!d-QmIi@~hWTL2SGbX&@?np1Yu0Ku=di3po zPBQy6t(I_qbJLPO$xOaz!j_jL{5PIk-IXTK3z|3n`4;tY7(w?*VT?(t;$5e%h1^9h z=od>TzM}QVp2%E*#sHUz)or_b>BX`%DTJb)R}2mgs=?4Cre$4L0z&q<-3Tw^<#@q8 zoJ#N?ERPxWuXtEqR^|YC9vZkXtW7D*!sGN`B`NWBni<+n?6^u0wRu3N|(@b>XhzAPJz z7!Yui5(g8Q=`*RsWqF(>!283hOv;AHvz$TY(S8Ikwama*J*#U`F)_HI2?dW4xV)V& z8C`!6gsra-`CG1vgY6AZ-f|$y#1>b(Hu;cFj~&4IT4ou(v~ z5??lmW0fH<7?f=FBxUS~IreO0BT3^Rn49h@xjWjLj}7Vp4#WH_^T2617HMz;@w^)X zq3!PJIpC$#6IfeTpkP3U+x=cQdULj;A`=)c;z%kdVF{bCMYxFz#mN7hq#G`3J`$7I zPymm{c+5uRBrK*<^8Y(@mUDk_B#7Z0WEku32_;9ruvVBo@$D<$e*3dthUfmvv`Gc~ zv1y))q=Au?dsioiO?(#^|BLoXsS1_SEH3qmD zOrL}_AEWJv{;;Y-Xm+Vro}~9Ni}_dA^A6sBfsvHpkNLsD==x|I2Zx`!-To*1VaNVP zDtY7JU%54tcK;B!sSEU&gVR+_YstxBNUshTi^YQ|0y#(gv>WWW$>7^*XsGr`4(8jD zb?u8O$l#+9Y2K;|#esi#cwa?8vXf?tCBs%FX|$WfU=X}20xF6p91Ye}#PA(yC~EBm zTlHCBZ*jYEUTD*OL)JOh52${e5Q_cS+B!1bOND7ccNDhLuaZwiXIOjym7`78vi@1` zG$OFzV}sLzka`{T9xdKe?SDKSoUX?QO5mY5w|2noAy(&UL@O$29)oY{%N)+`9_{~b{568n0Z82SggIO7Bh%mEE zn(;ewL&H^}@QFOfPs;*Hf%1a*HD-DY3qeGVaGH=?5HNok+99HrxJ=1!+_qyiaL@)UvevZJl9Dv<_oXEi*!Ehy!z z5E0{0Wb<%yBYQhm1mmIMCn{qGCrHz=T_g@k!y@Hl2d3la=dtI9N!QghKTlv|m@&|I zR)W15zl;*)D#3|Gv3IX~u&g+RXL;D05M`&sK);^kTvBYy_+k;}x>Zw+jt{6sGry1U zr!p!fOl{06(<)_-uqfxpb~50jNV5RwI}ioqpI}QE_1{}&3fY_k1(ZX|E@t_JjsoOG zNo(ul?S}Skve^yC%TxN^LpIob;0Yq>G~;)i@jE?%VU*7am`I4n@p(a(?-UvYrpO?3sE2P zyV^bc96nH{3U96$NqZkg8v)Qf_R2I!^S+OoCsiX#ydnb=$&kRV{ zM(C`?2~x`c3u=wuxsBGEosjy?g!+O_0578EOj$U}nN$LNPa~JTFLW#*jv$`5vG`&D zn4_r4Lb45h06+HLIwLnFqU`7E`Ue|-E~b93>; zg9uHck8?Je3%yN`4Wp4tQTGTB)r)TgN=8BNln!(87p0HCN|dqIiExs%IA3$|)7sM7 zeLuAXcTjqwz6j@Cgs`x%L`a03Qx*!!emxj9J8W7r4sd4US!J9nE2c{ zk%GIEX*W^u%}a@~Wu54*Un__1Wt4i9o!s@q{r&x+7`)fwJ4gafA;rh%r$w&VW7Ljsh>-YEb?{ZFh|)DgXcy)6ed)9q7eOqcPC7l z5*otNSg@KlFES3dFh{2kmnx_h(&kF(;U0dPd4Yk?M6w!a{`$2xFP|L|{$KW*I?6*W zi}Gw&Mn-EVo+iKhPX!gK>LEQ;XvFb`0$Ml-XpEQ@eMb5yN}KZh-n`j#XyJdvBL^qG zzM>*8``SEHj zfxQ66lWKM|Y-(hbr0TZoW?&^@af)jtvG4g}IrK1=pTa3x0B{sX&xEe($SH)l0h9S| zMa)`w&~%?-06|AxIrs+{)-CH!nR&=cD48R^4?jtSRVAB;hsOq?Tiw&6kp}duKnxz> zK-fHC?`gns$qc3{b?IB2pD$Ieo~I+-8j(>Zj*+0atd)2ZWk36XY~A3jD4BK$voR}i zE?*2WoJsk79V`4$#a7zets1;bx#npOA1|g_S1Kv;BT3cIy8v%1dRMQjBD5aL$ z-m|HEShV%`ZEp7#50v%1lhX)~qM{;w0wN;Sx+-5fw-%9xYzzkwEZP{x^i)XO90-!S zA`tRc9EggBh@=2l#Xk&Ke``Ba%De4q1bY_ZD4AeC>RBeKCav`8B}Qh9+SHcWKfXdcXOt; zB#R&~sUCnCx}S32RLe7IvmJ$TjZ}gtyMR}e`s}qF$Z|_2_aiNgL~d}-ta;F^T5ZoC zP+{tq-4(*3U%FEo!=qKZsH}VA|25Xn@BR8!gdJJ{IhD%}Mqj&rYoJU#O=klz{_+BPUMix_gZku|ok&4xnSJEOP)hDm@M^1*C zFbB`d?vqw8-FvA${7Sj!|$UFVsYRo^&rhFW9@=!1o(Y)6LvmL`~ zvqzH;ij8}wA|)guQg6A2J4aDV9?JFFlnyx4J^3lTyoI)HLvzL&XVAV6?r(J?@V>JM z<}*{oT|>KX&9BoUxRH%POW4(r#l^)_lHF;A z=S!1bVi3jqL|*lNTmyelz^)0XK2HfpE5jOAV9syKj8q8-hbw@9JfnoCfvFhV9K@nc z;~fL*(F`fyiaE>ABe;2S6l<~BEjA&7_pWrXniVl|>;QEI;m3vJsu=(Y9r1%Ml{dn) zCrs^#9`^K+Z}I>1!Lg4;+VQ|~SaEI%gXU?GT|a(2pw8W?M)zwZSfMRs&mlAW!n<1lZZAR(TrI5R zL6$Af04JNSFs=Q{DBdC7wIo^u=(%S0Bw=KEL>B)K9NC|TJS8YrNQjk~0-KmPr<=qG zvum* z=J=wqlM~q3=#xHspD8H(;^6+yk{>lC8YAf5&&Ss*rg?$}joPX0x7wZ@JSd|e$17nM z|6zF@ZDYV$p!b6;a;#MNOiI|^86xl#ny4%AmMu9Wk(m`)J3c$xV0neSFGNBm;ky4y z*DS9W(KsuCY>4NEoLlbVx)v6Rimrl0IaK)-<)6Tl%C&FADyi@un;aa=V^53gFVdo< zibEqn)^Wa>Qn6`cPzLhz{y~Q`XZ_3^0oWvOd0Ax74|vMRG<^mUaqtHuK3JAAO$7=@ zzJIEe^V4!Q$u8=@M3$D8p2}mZvoup4Y!Hd!Zdx#?GDQOg*9qqy)Um-SD=RB$Xh@=A zWYkGJ7Rs|wyu7$jOBIoS=Nj=}xlNU-Q)WXD#HXoQvW?@K>_Cle&GPuc@<>01$B8JA zB!IJ2O8ZOC%cC7(lSGF9ii%RV)96KN+KwUlc2-xJ59{kR)tnpKc@)i!;{gz-Uv#w0 z7Q#%o83#&J6_e4i32mPKi6wPR8ou@I@?LWM7Wgk71wwZ3vD>_m7SICMAnmuio03$1 zo7HbcO6h0;3f#ppr*~1V2(s>P+FZ(Cr=nFt$cay86Mxt)PD=AXPcl<=aCH0;^VBV> zYbQDB5l5g4@EY;0zYFMzvY0Wb`KR{EB9#<BRpPO!1!r0fQLXfHY-5JT}c2gf} zOB;$vvn#x6W-_S~E`7w#$?T*3>{%RA@v8*SIW1_dl}^A=X#+Y*gsq+fRWmOw9RH@K z{ac_aAKn}?rTjnwhCWBc$0Onu!Tn3wM&PmhSL)_9Jsu|D(2A}EbQ>}neJNNsc!iK z!5)=TZ8zNR60?-3v}L3|Wus7RJ1iF1kBI5$tHJM*!;%P5@y>P`zZ8m&UOzS{7f{4< zCqgF@#BH5Uno^s}3$rgCe(6RiQ~s-tHtfP5N};Gf>2ubPCM`8c22g?6##w}tL+^$F zoLI1wn$HDbF+j^&3Co{uRg;UeM|I-WEEJH0@OZg4a4XTV z1~=B#QP#hJ$g)ct^g7juRz4YtK3dw*vQIg(35za2x_y!lH(v6elD***&|ppc(WfW? zUm=aKay5$+jDR9dxC^A{-}bD@6gRT3PpUAGFd(2j|B^M0{_u+R@vQ!tFuY}9!8a`=^!yQup~55y4y#Z{Z}4*w#<2^il|umwAUcDvAM)_; z#42BAr5}Gwguj|LTFnfR7ktdPAO*)=wunuh&&2Ja>#zgC5fi_xi*N8Rt+!jU)ZzB> z2CwM~QW;tkVs=13-(h)z0) zUVGXNTSxY4a*#!4@+{;wvyA=Ane`u$H!S}uweBPsMZFHy(@m*SYBqk#PLq^Mf0huu zpX~Fi@vLuzO%AOF7*06tQS(E{6|lr}aH^Bh?6kD^5ELA1F$oDK<8f#-{Dxu6fBux7 zJEH60F>ZGUdF(Z|y6ltfmeynHJLr&Kr2ehT8)1P_&J;yBba6@{(IfwSbL}P$@aF~K zkHSm(K@B<}%q_(?JN=!(l)}oy;xtn{D0f=+jj<;x_NB*r0)I5i1+{e7s9FD*c5zj>n3F(sHqi; z`VF-p79_?)8*@}Te->k?8h}xt2yB2_O?R__I#Vu81k(d!{TotAy6hxRnNpOaafNvi zlpa=XrBwt-71@r*PGrbeR?mf5`hr>Om&A{wqoa7IEyaSd%e%!txY9v@&1&~z_`-0o)Ey%_;H=#9 z;inx98S^>UQsGi7YpWtdn#Ff%umC}eioa&^fxCnY4~8TTKEeh~2cSr3a1XU~50gBb z*v=0f83Q_&1qKt98xyC~kNq-0Jf4Fh8miwkukI`~QP4==d9_*Guvq13X|iwndV1Co z63l#5vZzz+7RYmvPRVAtQf|&TbAan`f%clcy$q!M!s8#Ww2hX`iv67V%fjh}x==3% zv@WCH?fvKQEbm!TF0+-5A%-LOv!Mwe)b{PBgn4y!ey^%B#$fFcYFyv<>CU@sLd|k+ znq^FO&k8N5BV;Bdeq`z7q;)5dNj(-YH!s!oM65AgFnG4UAwrE_I2Vwe3<6lVevU>A zhMgJ;0tHKf_01FI>56!QHAv?2kc2a{=O`e6r7t)-Gnv<0Ea*0ppK7Z($Y zP@*QyIZjy7@aQ*vqe6t&%eiIUCBtSWd=EO=r&_WGN@Fn5nCl1GWMyZMbqE%5wv|P> z$b}HxJhJ$ir9V+Sm=#+9TTuOE{+K63nQ6@ur7HP(UHV}2K_?8o3qL&gB88$?&?Cpt zVqhz~{QIVvKQk&xMFM~Tk|+DYZg>=igNmE98b<81<6c>+sAE4z$Cqz~fuX2&$s*53 zEoBM8w9=$q#c8M7WRH}uggQSxmQuhIcwnh~Jrx2Ixg&h;IgG)h zprJ}q`^iNtsHSM$(l;^5#On)Lv*QEfngmbKP$7a35}B(vh4Q;`%JhyPg66f7%Boxi z?_q-*TwR0y%l$8QfzGQi(By5$DjFx9D2DsYuLDdpcf%i3vqh)t>Y{0VpsV4tQb}`DF%2-IP&mU*{$xpcUdFKOo$+2 zP%IH=VfH8lDpJ|ZjBhT3Uo}~4;QnJDc$fdLy(@o*YX9TX$Vg>~?As6($r`fEBqZFD zY{@QkudP8@vt?gyizREa-4+U^)R1k4iIfyK$~qKHWyY>C_`Xlw?!AA(_ow?j=b2}o zXXc#q{(R2o^FHtG^?F++!Z6Nh&FzuJaI<5y83Rd4%G~z4ZerpQORh1aDpBoxn^XpR zC(y=8*tx{<7haVL52bLLLqQqa0=3Hh8fJ{oO}&yHDGT;KP6} zO5k=YG^$foti{B;Y>diouW~(nxZZB-PL4v0o!ZN)hBp$~*f0kWVu&4iqM*G^nn9Kl z9)3UU2EKm14M{r{?R26{D=!)2MF^aW zm=#xQ$;d--?uu~p$@}QjN%%|xfpD;0xJ1`eSKd%sU#CR7xIVKmw->0znZd_1H-pN0`v9dkBzG6o1t(z9dbt-)^UYInDJ;p-l zW}?dFso3}y-tAfpaVRp~@u@hqCS!p)D97uKbQsSoDCphMCfeI_k<&x;-guowAv zgZSWuM7N_yr1qoI;$QL$8T8aB87PaG$ySE_ZWs5AJRveSRFJ6gD0i-B^#TA$ex>xj zp+VE8<10(_ZZ4gq15Isq8>MF%lXe`Unu@UtZZFhVST85{^GU&0SB0&<>#fAxQFaxn zQGxUi{7?Ej6hAmzoCN#sa`Z3o3iQ46OEy?#&DWxN^RsfgsNpeunt80u5D^}5>ZM}t zfWuaKAi(J|ii&4*Y+WWrAEZxQeV5fFRE*|Lj34LnwmsIM3PFw#Bx8P4DJLU|SJ_7T z!Q%7C;tL;_-F{c01UO2>xW&1J+Kvvyqpg@uhr{f4(YTLK>htYF%-~Q~$oVd=9L}PX z^@JQ>&#%Lis}5Z%!-30BgW!Rbt5x(0H&7Ieu70|VKL-|`%{9#`PvH%73^niI8P=mG zOZB+=OXs4_OOm>O)LKiQKnDI($DNX9_fwf%bNFrcqXV7T8x#^jfI+8@TP2rv={cI( zmtQ|Yn<<}&r@(}0!7rfzf4zcYNtk-(pA^i^q`MBQH;i03Ms2?efHh6-x zvx`m~O`>L!BcW5V()zsC?m`rBF zHEJ+C!p+DdRJM>4lw=QS)|-7ML#rQIy@w{h1=4I9!aW)*B_=LzJ;M5^iPRmjP-uf&ZsF<0u}HY2HU`jTR3W4q)`5W!!e%?<`zW|I!U6(R#W729 zmbOlz<#y(*NA&k~`x54VJ8>FjDV zIoGNIjo&p4EDczG*Rfk=7C|_daU+fX*OpKpSZ6`Qq#z2q!QtR8r|_>2X#-wG)<{1> zCg7Hx&n@)XrY>JRQ(09taupI!DMW+-1HoW^A~pgtw^wp~MskvPr%tSEA1o{Z#2hrqP1F6xeOYD z_c}11rbf<-p9v6C5b@yq(2#VH62XcV^HrtTcuYJj4+sqa|?999;SD%f~rKN|ztsgFTnlBMFD#i1@C@-=gn+Xt$Z~%6FW_XP!Vss-d-9Ms~Mx(v6 zG)?1Jn~=xt-eJ-Z^7O-A|0^AewGI9)hJS@I{{i%D$|fqXH>H?n%iGNDmd};H18MM#C^H>WU_2MUy3o zL^`E}v>h{R*L3q#Cr|9W=77y;epwDFI~T>J=x#>7HHe~UYR&(mb#x{>v@C4olwPhY-R zRRN03!(q@!(9vq#;a$|X2m@ZfKa@+qohV{vGU@AU{tJMNJw?nO+sd|r5T^*+rgZ0^ zF6Q>k7oAyOZRJZq%!&|Ntah>x3}wnnh*%(Ps4UFBLs1c47`CPEWIbj=Ge)JzW#uOv&w-bswP0cMgQ6!W#1$l4yY7vcDo!-) za=*_ThegSh2(1FL`>EDI!piPtneveym(R(!Gk!p9(BQ>iLDVx!AeMyb8<)p@OGXf* zy&HLSrL>95)Ks7>8N5+FJvD_ssPy%vfpl@wWJXmyPJIsS(bY$Wvto){L zq6@Kt4S3f-YENo?hJ11!Di*0Kg^CUz?e7z#?B)X~{wABKmAa@31kjx9E!I^XZ=nl7 z>pJa_-;Z{bWV|sj;4N<^XVD`jb+8{*IzIg3AC?jJrG|2Pzq)?Z)FDYr85x<%iYY7Y zz~6qs8{y4@V6VtpN*+_G1q+E;(yx2C8vTnCWv$eKJuYCbV9;LOBH2_gtJ*5g% zVWJ|Cez{w^D5M#lbp}tl=+>cMg#zOT>g?Rx_m)^l9Y9|jO?ViKmShy8DK7+_ zLW+AG8Mc!GjQnPy9?A7(3YDAJ@2v9Tt9lp9=M?=#6++fV`KfAMYMloacSy|bc16Y9 z^-el$L?jKig>6qpZ4sMQW?qi7YR+SEglHZ8VjTa!hw7jtG>aMyDf|Ns=~Rh3B##+jA|_%*9cR ze7w0A%ad^md2iL-RS>4QCNM8W&dV%-ZnRAB1|iLynU=TJQVcOv1NJ^d6FUw!a+IrScf+?UfyCciAxGN71kIh>KO}7nRL_ai@NoXx2hZs=iSB zantkng~TUIGvO`%97~PwP0vJfe$-+;s+Oee-@pIk)qqr^HKzbO$gZ;^OH{~SPD~!$ zrs^&gPv7Mn`n1MkF6T|{-#^cC;UjdRu?LolK+QYLvS&|tY>q^At$wNN_93a*ohQEi z#lB6#|MmBP?ax9;+3NV{&|AI(k7vqX={Jo(xqBbgEcvpq#?ROH#mU+|;R1iyOzCT` zRJY&HFi}@G(;F_JXn;Kz3j6T+IOV|+!0XOQ4L&;LzpJ*J9s-HV_voAv{O#860xwaX z>_k*6fS**pXpmX)dH8Y(r|BTm3(*N87HHK;Ptn*fWL56z@OO@qo;o+0?@tXU`VQ0k z6LyZA_u97(_T?>E*ovmFPutgEF=W!7Bz1S|-HJZ9xEO2O&Mhbh%8vd8z(B0kp9cWu zB*4P^`(VJ+nM#fS?#F;D^Zfujj_2V!Z From 470d0422e2540ec171083eb0a15d92bed4e6ff65 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sun, 3 Nov 2024 17:01:24 -0700 Subject: [PATCH 0549/1027] vault backup: 2024-11-03 17:01:24 --- .obsidian/app.json | 2 +- .obsidian/community-plugins.json | 3 +- .obsidian/plugins/better-export-pdf/data.json | 29 + .obsidian/plugins/better-export-pdf/main.js | 21223 ++++++++++++++++ .../plugins/better-export-pdf/manifest.json | 11 + .../plugins/better-export-pdf/styles.css | 52 + 6 files changed, 21318 insertions(+), 2 deletions(-) create mode 100644 .obsidian/plugins/better-export-pdf/data.json create mode 100644 .obsidian/plugins/better-export-pdf/main.js create mode 100644 .obsidian/plugins/better-export-pdf/manifest.json create mode 100644 .obsidian/plugins/better-export-pdf/styles.css diff --git a/.obsidian/app.json b/.obsidian/app.json index 83fdb69..3595e31 100644 --- a/.obsidian/app.json +++ b/.obsidian/app.json @@ -2,7 +2,7 @@ "vimMode": true, "promptDelete": false, "pdfExportSettings": { - "includeName": true, + "includeName": false, "pageSize": "Letter", "landscape": false, "margin": "0", diff --git a/.obsidian/community-plugins.json b/.obsidian/community-plugins.json index 97e39eb..d52e505 100644 --- a/.obsidian/community-plugins.json +++ b/.obsidian/community-plugins.json @@ -1,5 +1,6 @@ [ "obsidian-git", "d2-obsidian", - "execute-code" + "execute-code", + "better-export-pdf" ] \ No newline at end of file diff --git a/.obsidian/plugins/better-export-pdf/data.json b/.obsidian/plugins/better-export-pdf/data.json new file mode 100644 index 0000000..29b7ae9 --- /dev/null +++ b/.obsidian/plugins/better-export-pdf/data.json @@ -0,0 +1,29 @@ +{ + "showTitle": true, + "maxLevel": "6", + "displayHeader": true, + "displayFooter": true, + "headerTemplate": "

", + "footerTemplate": "
/
", + "printBackground": false, + "generateTaggedPDF": false, + "displayMetadata": false, + "debug": false, + "isTimestamp": false, + "enabledCss": false, + "prevConfig": { + "pageSize": "A4", + "marginType": "1", + "showTitle": false, + "open": true, + "scale": 100, + "landscape": false, + "marginTop": "10", + "marginBottom": "10", + "marginLeft": "10", + "marginRight": "10", + "displayHeader": true, + "displayFooter": true, + "cssSnippet": "0" + } +} \ No newline at end of file diff --git a/.obsidian/plugins/better-export-pdf/main.js b/.obsidian/plugins/better-export-pdf/main.js new file mode 100644 index 0000000..9271f1a --- /dev/null +++ b/.obsidian/plugins/better-export-pdf/main.js @@ -0,0 +1,21223 @@ +/* +THIS IS A GENERATED/BUNDLED FILE BY ESBUILD +if you want to view the source, please visit the github repository of this plugin +*/ + +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __commonJS = (cb, mod) => function __require() { + return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; +}; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// node_modules/.pnpm/deepmerge@4.3.1/node_modules/deepmerge/dist/cjs.js +var require_cjs = __commonJS({ + "node_modules/.pnpm/deepmerge@4.3.1/node_modules/deepmerge/dist/cjs.js"(exports, module2) { + "use strict"; + var isMergeableObject = function isMergeableObject2(value) { + return isNonNullObject(value) && !isSpecial(value); + }; + function isNonNullObject(value) { + return !!value && typeof value === "object"; + } + function isSpecial(value) { + var stringValue = Object.prototype.toString.call(value); + return stringValue === "[object RegExp]" || stringValue === "[object Date]" || isReactElement(value); + } + var canUseSymbol = typeof Symbol === "function" && Symbol.for; + var REACT_ELEMENT_TYPE = canUseSymbol ? Symbol.for("react.element") : 60103; + function isReactElement(value) { + return value.$$typeof === REACT_ELEMENT_TYPE; + } + function emptyTarget(val) { + return Array.isArray(val) ? [] : {}; + } + function cloneUnlessOtherwiseSpecified(value, options) { + return options.clone !== false && options.isMergeableObject(value) ? deepmerge(emptyTarget(value), value, options) : value; + } + function defaultArrayMerge(target, source, options) { + return target.concat(source).map(function(element) { + return cloneUnlessOtherwiseSpecified(element, options); + }); + } + function getMergeFunction(key, options) { + if (!options.customMerge) { + return deepmerge; + } + var customMerge = options.customMerge(key); + return typeof customMerge === "function" ? customMerge : deepmerge; + } + function getEnumerableOwnPropertySymbols(target) { + return Object.getOwnPropertySymbols ? Object.getOwnPropertySymbols(target).filter(function(symbol) { + return Object.propertyIsEnumerable.call(target, symbol); + }) : []; + } + function getKeys(target) { + return Object.keys(target).concat(getEnumerableOwnPropertySymbols(target)); + } + function propertyIsOnObject(object, property) { + try { + return property in object; + } catch (_) { + return false; + } + } + function propertyIsUnsafe(target, key) { + return propertyIsOnObject(target, key) && !(Object.hasOwnProperty.call(target, key) && Object.propertyIsEnumerable.call(target, key)); + } + function mergeObject(target, source, options) { + var destination = {}; + if (options.isMergeableObject(target)) { + getKeys(target).forEach(function(key) { + destination[key] = cloneUnlessOtherwiseSpecified(target[key], options); + }); + } + getKeys(source).forEach(function(key) { + if (propertyIsUnsafe(target, key)) { + return; + } + if (propertyIsOnObject(target, key) && options.isMergeableObject(source[key])) { + destination[key] = getMergeFunction(key, options)(target[key], source[key], options); + } else { + destination[key] = cloneUnlessOtherwiseSpecified(source[key], options); + } + }); + return destination; + } + function deepmerge(target, source, options) { + options = options || {}; + options.arrayMerge = options.arrayMerge || defaultArrayMerge; + options.isMergeableObject = options.isMergeableObject || isMergeableObject; + options.cloneUnlessOtherwiseSpecified = cloneUnlessOtherwiseSpecified; + var sourceIsArray = Array.isArray(source); + var targetIsArray = Array.isArray(target); + var sourceAndTargetTypesMatch = sourceIsArray === targetIsArray; + if (!sourceAndTargetTypesMatch) { + return cloneUnlessOtherwiseSpecified(source, options); + } else if (sourceIsArray) { + return options.arrayMerge(target, source, options); + } else { + return mergeObject(target, source, options); + } + } + deepmerge.all = function deepmergeAll(array, options) { + if (!Array.isArray(array)) { + throw new Error("first argument should be an array"); + } + return array.reduce(function(prev, next) { + return deepmerge(prev, next, options); + }, {}); + }; + var deepmerge_1 = deepmerge; + module2.exports = deepmerge_1; + } +}); + +// node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/utils/common.js +var require_common = __commonJS({ + "node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/utils/common.js"(exports) { + "use strict"; + var TYPED_OK = typeof Uint8Array !== "undefined" && typeof Uint16Array !== "undefined" && typeof Int32Array !== "undefined"; + function _has(obj, key) { + return Object.prototype.hasOwnProperty.call(obj, key); + } + exports.assign = function(obj) { + var sources = Array.prototype.slice.call(arguments, 1); + while (sources.length) { + var source = sources.shift(); + if (!source) { + continue; + } + if (typeof source !== "object") { + throw new TypeError(source + "must be non-object"); + } + for (var p in source) { + if (_has(source, p)) { + obj[p] = source[p]; + } + } + } + return obj; + }; + exports.shrinkBuf = function(buf, size) { + if (buf.length === size) { + return buf; + } + if (buf.subarray) { + return buf.subarray(0, size); + } + buf.length = size; + return buf; + }; + var fnTyped = { + arraySet: function(dest, src, src_offs, len, dest_offs) { + if (src.subarray && dest.subarray) { + dest.set(src.subarray(src_offs, src_offs + len), dest_offs); + return; + } + for (var i = 0; i < len; i++) { + dest[dest_offs + i] = src[src_offs + i]; + } + }, + // Join array of chunks to single array. + flattenChunks: function(chunks) { + var i, l, len, pos, chunk, result; + len = 0; + for (i = 0, l = chunks.length; i < l; i++) { + len += chunks[i].length; + } + result = new Uint8Array(len); + pos = 0; + for (i = 0, l = chunks.length; i < l; i++) { + chunk = chunks[i]; + result.set(chunk, pos); + pos += chunk.length; + } + return result; + } + }; + var fnUntyped = { + arraySet: function(dest, src, src_offs, len, dest_offs) { + for (var i = 0; i < len; i++) { + dest[dest_offs + i] = src[src_offs + i]; + } + }, + // Join array of chunks to single array. + flattenChunks: function(chunks) { + return [].concat.apply([], chunks); + } + }; + exports.setTyped = function(on) { + if (on) { + exports.Buf8 = Uint8Array; + exports.Buf16 = Uint16Array; + exports.Buf32 = Int32Array; + exports.assign(exports, fnTyped); + } else { + exports.Buf8 = Array; + exports.Buf16 = Array; + exports.Buf32 = Array; + exports.assign(exports, fnUntyped); + } + }; + exports.setTyped(TYPED_OK); + } +}); + +// node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/trees.js +var require_trees = __commonJS({ + "node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/trees.js"(exports) { + "use strict"; + var utils = require_common(); + var Z_FIXED = 4; + var Z_BINARY = 0; + var Z_TEXT = 1; + var Z_UNKNOWN = 2; + function zero(buf) { + var len = buf.length; + while (--len >= 0) { + buf[len] = 0; + } + } + var STORED_BLOCK = 0; + var STATIC_TREES = 1; + var DYN_TREES = 2; + var MIN_MATCH = 3; + var MAX_MATCH = 258; + var LENGTH_CODES = 29; + var LITERALS = 256; + var L_CODES = LITERALS + 1 + LENGTH_CODES; + var D_CODES = 30; + var BL_CODES = 19; + var HEAP_SIZE = 2 * L_CODES + 1; + var MAX_BITS = 15; + var Buf_size = 16; + var MAX_BL_BITS = 7; + var END_BLOCK = 256; + var REP_3_6 = 16; + var REPZ_3_10 = 17; + var REPZ_11_138 = 18; + var extra_lbits = ( + /* extra bits for each length code */ + [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0] + ); + var extra_dbits = ( + /* extra bits for each distance code */ + [0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13] + ); + var extra_blbits = ( + /* extra bits for each bit length code */ + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 7] + ); + var bl_order = [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]; + var DIST_CODE_LEN = 512; + var static_ltree = new Array((L_CODES + 2) * 2); + zero(static_ltree); + var static_dtree = new Array(D_CODES * 2); + zero(static_dtree); + var _dist_code = new Array(DIST_CODE_LEN); + zero(_dist_code); + var _length_code = new Array(MAX_MATCH - MIN_MATCH + 1); + zero(_length_code); + var base_length = new Array(LENGTH_CODES); + zero(base_length); + var base_dist = new Array(D_CODES); + zero(base_dist); + function StaticTreeDesc(static_tree, extra_bits, extra_base, elems, max_length) { + this.static_tree = static_tree; + this.extra_bits = extra_bits; + this.extra_base = extra_base; + this.elems = elems; + this.max_length = max_length; + this.has_stree = static_tree && static_tree.length; + } + var static_l_desc; + var static_d_desc; + var static_bl_desc; + function TreeDesc(dyn_tree, stat_desc) { + this.dyn_tree = dyn_tree; + this.max_code = 0; + this.stat_desc = stat_desc; + } + function d_code(dist) { + return dist < 256 ? _dist_code[dist] : _dist_code[256 + (dist >>> 7)]; + } + function put_short(s, w) { + s.pending_buf[s.pending++] = w & 255; + s.pending_buf[s.pending++] = w >>> 8 & 255; + } + function send_bits(s, value, length) { + if (s.bi_valid > Buf_size - length) { + s.bi_buf |= value << s.bi_valid & 65535; + put_short(s, s.bi_buf); + s.bi_buf = value >> Buf_size - s.bi_valid; + s.bi_valid += length - Buf_size; + } else { + s.bi_buf |= value << s.bi_valid & 65535; + s.bi_valid += length; + } + } + function send_code(s, c, tree) { + send_bits( + s, + tree[c * 2], + tree[c * 2 + 1] + /*.Len*/ + ); + } + function bi_reverse(code, len) { + var res = 0; + do { + res |= code & 1; + code >>>= 1; + res <<= 1; + } while (--len > 0); + return res >>> 1; + } + function bi_flush(s) { + if (s.bi_valid === 16) { + put_short(s, s.bi_buf); + s.bi_buf = 0; + s.bi_valid = 0; + } else if (s.bi_valid >= 8) { + s.pending_buf[s.pending++] = s.bi_buf & 255; + s.bi_buf >>= 8; + s.bi_valid -= 8; + } + } + function gen_bitlen(s, desc) { + var tree = desc.dyn_tree; + var max_code = desc.max_code; + var stree = desc.stat_desc.static_tree; + var has_stree = desc.stat_desc.has_stree; + var extra = desc.stat_desc.extra_bits; + var base = desc.stat_desc.extra_base; + var max_length = desc.stat_desc.max_length; + var h; + var n, m; + var bits; + var xbits; + var f; + var overflow = 0; + for (bits = 0; bits <= MAX_BITS; bits++) { + s.bl_count[bits] = 0; + } + tree[s.heap[s.heap_max] * 2 + 1] = 0; + for (h = s.heap_max + 1; h < HEAP_SIZE; h++) { + n = s.heap[h]; + bits = tree[tree[n * 2 + 1] * 2 + 1] + 1; + if (bits > max_length) { + bits = max_length; + overflow++; + } + tree[n * 2 + 1] = bits; + if (n > max_code) { + continue; + } + s.bl_count[bits]++; + xbits = 0; + if (n >= base) { + xbits = extra[n - base]; + } + f = tree[n * 2]; + s.opt_len += f * (bits + xbits); + if (has_stree) { + s.static_len += f * (stree[n * 2 + 1] + xbits); + } + } + if (overflow === 0) { + return; + } + do { + bits = max_length - 1; + while (s.bl_count[bits] === 0) { + bits--; + } + s.bl_count[bits]--; + s.bl_count[bits + 1] += 2; + s.bl_count[max_length]--; + overflow -= 2; + } while (overflow > 0); + for (bits = max_length; bits !== 0; bits--) { + n = s.bl_count[bits]; + while (n !== 0) { + m = s.heap[--h]; + if (m > max_code) { + continue; + } + if (tree[m * 2 + 1] !== bits) { + s.opt_len += (bits - tree[m * 2 + 1]) * tree[m * 2]; + tree[m * 2 + 1] = bits; + } + n--; + } + } + } + function gen_codes(tree, max_code, bl_count) { + var next_code = new Array(MAX_BITS + 1); + var code = 0; + var bits; + var n; + for (bits = 1; bits <= MAX_BITS; bits++) { + next_code[bits] = code = code + bl_count[bits - 1] << 1; + } + for (n = 0; n <= max_code; n++) { + var len = tree[n * 2 + 1]; + if (len === 0) { + continue; + } + tree[n * 2] = bi_reverse(next_code[len]++, len); + } + } + function tr_static_init() { + var n; + var bits; + var length; + var code; + var dist; + var bl_count = new Array(MAX_BITS + 1); + length = 0; + for (code = 0; code < LENGTH_CODES - 1; code++) { + base_length[code] = length; + for (n = 0; n < 1 << extra_lbits[code]; n++) { + _length_code[length++] = code; + } + } + _length_code[length - 1] = code; + dist = 0; + for (code = 0; code < 16; code++) { + base_dist[code] = dist; + for (n = 0; n < 1 << extra_dbits[code]; n++) { + _dist_code[dist++] = code; + } + } + dist >>= 7; + for (; code < D_CODES; code++) { + base_dist[code] = dist << 7; + for (n = 0; n < 1 << extra_dbits[code] - 7; n++) { + _dist_code[256 + dist++] = code; + } + } + for (bits = 0; bits <= MAX_BITS; bits++) { + bl_count[bits] = 0; + } + n = 0; + while (n <= 143) { + static_ltree[n * 2 + 1] = 8; + n++; + bl_count[8]++; + } + while (n <= 255) { + static_ltree[n * 2 + 1] = 9; + n++; + bl_count[9]++; + } + while (n <= 279) { + static_ltree[n * 2 + 1] = 7; + n++; + bl_count[7]++; + } + while (n <= 287) { + static_ltree[n * 2 + 1] = 8; + n++; + bl_count[8]++; + } + gen_codes(static_ltree, L_CODES + 1, bl_count); + for (n = 0; n < D_CODES; n++) { + static_dtree[n * 2 + 1] = 5; + static_dtree[n * 2] = bi_reverse(n, 5); + } + static_l_desc = new StaticTreeDesc(static_ltree, extra_lbits, LITERALS + 1, L_CODES, MAX_BITS); + static_d_desc = new StaticTreeDesc(static_dtree, extra_dbits, 0, D_CODES, MAX_BITS); + static_bl_desc = new StaticTreeDesc(new Array(0), extra_blbits, 0, BL_CODES, MAX_BL_BITS); + } + function init_block(s) { + var n; + for (n = 0; n < L_CODES; n++) { + s.dyn_ltree[n * 2] = 0; + } + for (n = 0; n < D_CODES; n++) { + s.dyn_dtree[n * 2] = 0; + } + for (n = 0; n < BL_CODES; n++) { + s.bl_tree[n * 2] = 0; + } + s.dyn_ltree[END_BLOCK * 2] = 1; + s.opt_len = s.static_len = 0; + s.last_lit = s.matches = 0; + } + function bi_windup(s) { + if (s.bi_valid > 8) { + put_short(s, s.bi_buf); + } else if (s.bi_valid > 0) { + s.pending_buf[s.pending++] = s.bi_buf; + } + s.bi_buf = 0; + s.bi_valid = 0; + } + function copy_block(s, buf, len, header) { + bi_windup(s); + if (header) { + put_short(s, len); + put_short(s, ~len); + } + utils.arraySet(s.pending_buf, s.window, buf, len, s.pending); + s.pending += len; + } + function smaller(tree, n, m, depth) { + var _n2 = n * 2; + var _m2 = m * 2; + return tree[_n2] < tree[_m2] || tree[_n2] === tree[_m2] && depth[n] <= depth[m]; + } + function pqdownheap(s, tree, k) { + var v = s.heap[k]; + var j = k << 1; + while (j <= s.heap_len) { + if (j < s.heap_len && smaller(tree, s.heap[j + 1], s.heap[j], s.depth)) { + j++; + } + if (smaller(tree, v, s.heap[j], s.depth)) { + break; + } + s.heap[k] = s.heap[j]; + k = j; + j <<= 1; + } + s.heap[k] = v; + } + function compress_block(s, ltree, dtree) { + var dist; + var lc; + var lx = 0; + var code; + var extra; + if (s.last_lit !== 0) { + do { + dist = s.pending_buf[s.d_buf + lx * 2] << 8 | s.pending_buf[s.d_buf + lx * 2 + 1]; + lc = s.pending_buf[s.l_buf + lx]; + lx++; + if (dist === 0) { + send_code(s, lc, ltree); + } else { + code = _length_code[lc]; + send_code(s, code + LITERALS + 1, ltree); + extra = extra_lbits[code]; + if (extra !== 0) { + lc -= base_length[code]; + send_bits(s, lc, extra); + } + dist--; + code = d_code(dist); + send_code(s, code, dtree); + extra = extra_dbits[code]; + if (extra !== 0) { + dist -= base_dist[code]; + send_bits(s, dist, extra); + } + } + } while (lx < s.last_lit); + } + send_code(s, END_BLOCK, ltree); + } + function build_tree(s, desc) { + var tree = desc.dyn_tree; + var stree = desc.stat_desc.static_tree; + var has_stree = desc.stat_desc.has_stree; + var elems = desc.stat_desc.elems; + var n, m; + var max_code = -1; + var node; + s.heap_len = 0; + s.heap_max = HEAP_SIZE; + for (n = 0; n < elems; n++) { + if (tree[n * 2] !== 0) { + s.heap[++s.heap_len] = max_code = n; + s.depth[n] = 0; + } else { + tree[n * 2 + 1] = 0; + } + } + while (s.heap_len < 2) { + node = s.heap[++s.heap_len] = max_code < 2 ? ++max_code : 0; + tree[node * 2] = 1; + s.depth[node] = 0; + s.opt_len--; + if (has_stree) { + s.static_len -= stree[node * 2 + 1]; + } + } + desc.max_code = max_code; + for (n = s.heap_len >> 1; n >= 1; n--) { + pqdownheap(s, tree, n); + } + node = elems; + do { + n = s.heap[ + 1 + /*SMALLEST*/ + ]; + s.heap[ + 1 + /*SMALLEST*/ + ] = s.heap[s.heap_len--]; + pqdownheap( + s, + tree, + 1 + /*SMALLEST*/ + ); + m = s.heap[ + 1 + /*SMALLEST*/ + ]; + s.heap[--s.heap_max] = n; + s.heap[--s.heap_max] = m; + tree[node * 2] = tree[n * 2] + tree[m * 2]; + s.depth[node] = (s.depth[n] >= s.depth[m] ? s.depth[n] : s.depth[m]) + 1; + tree[n * 2 + 1] = tree[m * 2 + 1] = node; + s.heap[ + 1 + /*SMALLEST*/ + ] = node++; + pqdownheap( + s, + tree, + 1 + /*SMALLEST*/ + ); + } while (s.heap_len >= 2); + s.heap[--s.heap_max] = s.heap[ + 1 + /*SMALLEST*/ + ]; + gen_bitlen(s, desc); + gen_codes(tree, max_code, s.bl_count); + } + function scan_tree(s, tree, max_code) { + var n; + var prevlen = -1; + var curlen; + var nextlen = tree[0 * 2 + 1]; + var count = 0; + var max_count = 7; + var min_count = 4; + if (nextlen === 0) { + max_count = 138; + min_count = 3; + } + tree[(max_code + 1) * 2 + 1] = 65535; + for (n = 0; n <= max_code; n++) { + curlen = nextlen; + nextlen = tree[(n + 1) * 2 + 1]; + if (++count < max_count && curlen === nextlen) { + continue; + } else if (count < min_count) { + s.bl_tree[curlen * 2] += count; + } else if (curlen !== 0) { + if (curlen !== prevlen) { + s.bl_tree[curlen * 2]++; + } + s.bl_tree[REP_3_6 * 2]++; + } else if (count <= 10) { + s.bl_tree[REPZ_3_10 * 2]++; + } else { + s.bl_tree[REPZ_11_138 * 2]++; + } + count = 0; + prevlen = curlen; + if (nextlen === 0) { + max_count = 138; + min_count = 3; + } else if (curlen === nextlen) { + max_count = 6; + min_count = 3; + } else { + max_count = 7; + min_count = 4; + } + } + } + function send_tree(s, tree, max_code) { + var n; + var prevlen = -1; + var curlen; + var nextlen = tree[0 * 2 + 1]; + var count = 0; + var max_count = 7; + var min_count = 4; + if (nextlen === 0) { + max_count = 138; + min_count = 3; + } + for (n = 0; n <= max_code; n++) { + curlen = nextlen; + nextlen = tree[(n + 1) * 2 + 1]; + if (++count < max_count && curlen === nextlen) { + continue; + } else if (count < min_count) { + do { + send_code(s, curlen, s.bl_tree); + } while (--count !== 0); + } else if (curlen !== 0) { + if (curlen !== prevlen) { + send_code(s, curlen, s.bl_tree); + count--; + } + send_code(s, REP_3_6, s.bl_tree); + send_bits(s, count - 3, 2); + } else if (count <= 10) { + send_code(s, REPZ_3_10, s.bl_tree); + send_bits(s, count - 3, 3); + } else { + send_code(s, REPZ_11_138, s.bl_tree); + send_bits(s, count - 11, 7); + } + count = 0; + prevlen = curlen; + if (nextlen === 0) { + max_count = 138; + min_count = 3; + } else if (curlen === nextlen) { + max_count = 6; + min_count = 3; + } else { + max_count = 7; + min_count = 4; + } + } + } + function build_bl_tree(s) { + var max_blindex; + scan_tree(s, s.dyn_ltree, s.l_desc.max_code); + scan_tree(s, s.dyn_dtree, s.d_desc.max_code); + build_tree(s, s.bl_desc); + for (max_blindex = BL_CODES - 1; max_blindex >= 3; max_blindex--) { + if (s.bl_tree[bl_order[max_blindex] * 2 + 1] !== 0) { + break; + } + } + s.opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4; + return max_blindex; + } + function send_all_trees(s, lcodes, dcodes, blcodes) { + var rank; + send_bits(s, lcodes - 257, 5); + send_bits(s, dcodes - 1, 5); + send_bits(s, blcodes - 4, 4); + for (rank = 0; rank < blcodes; rank++) { + send_bits(s, s.bl_tree[bl_order[rank] * 2 + 1], 3); + } + send_tree(s, s.dyn_ltree, lcodes - 1); + send_tree(s, s.dyn_dtree, dcodes - 1); + } + function detect_data_type(s) { + var black_mask = 4093624447; + var n; + for (n = 0; n <= 31; n++, black_mask >>>= 1) { + if (black_mask & 1 && s.dyn_ltree[n * 2] !== 0) { + return Z_BINARY; + } + } + if (s.dyn_ltree[9 * 2] !== 0 || s.dyn_ltree[10 * 2] !== 0 || s.dyn_ltree[13 * 2] !== 0) { + return Z_TEXT; + } + for (n = 32; n < LITERALS; n++) { + if (s.dyn_ltree[n * 2] !== 0) { + return Z_TEXT; + } + } + return Z_BINARY; + } + var static_init_done = false; + function _tr_init(s) { + if (!static_init_done) { + tr_static_init(); + static_init_done = true; + } + s.l_desc = new TreeDesc(s.dyn_ltree, static_l_desc); + s.d_desc = new TreeDesc(s.dyn_dtree, static_d_desc); + s.bl_desc = new TreeDesc(s.bl_tree, static_bl_desc); + s.bi_buf = 0; + s.bi_valid = 0; + init_block(s); + } + function _tr_stored_block(s, buf, stored_len, last2) { + send_bits(s, (STORED_BLOCK << 1) + (last2 ? 1 : 0), 3); + copy_block(s, buf, stored_len, true); + } + function _tr_align(s) { + send_bits(s, STATIC_TREES << 1, 3); + send_code(s, END_BLOCK, static_ltree); + bi_flush(s); + } + function _tr_flush_block(s, buf, stored_len, last2) { + var opt_lenb, static_lenb; + var max_blindex = 0; + if (s.level > 0) { + if (s.strm.data_type === Z_UNKNOWN) { + s.strm.data_type = detect_data_type(s); + } + build_tree(s, s.l_desc); + build_tree(s, s.d_desc); + max_blindex = build_bl_tree(s); + opt_lenb = s.opt_len + 3 + 7 >>> 3; + static_lenb = s.static_len + 3 + 7 >>> 3; + if (static_lenb <= opt_lenb) { + opt_lenb = static_lenb; + } + } else { + opt_lenb = static_lenb = stored_len + 5; + } + if (stored_len + 4 <= opt_lenb && buf !== -1) { + _tr_stored_block(s, buf, stored_len, last2); + } else if (s.strategy === Z_FIXED || static_lenb === opt_lenb) { + send_bits(s, (STATIC_TREES << 1) + (last2 ? 1 : 0), 3); + compress_block(s, static_ltree, static_dtree); + } else { + send_bits(s, (DYN_TREES << 1) + (last2 ? 1 : 0), 3); + send_all_trees(s, s.l_desc.max_code + 1, s.d_desc.max_code + 1, max_blindex + 1); + compress_block(s, s.dyn_ltree, s.dyn_dtree); + } + init_block(s); + if (last2) { + bi_windup(s); + } + } + function _tr_tally(s, dist, lc) { + s.pending_buf[s.d_buf + s.last_lit * 2] = dist >>> 8 & 255; + s.pending_buf[s.d_buf + s.last_lit * 2 + 1] = dist & 255; + s.pending_buf[s.l_buf + s.last_lit] = lc & 255; + s.last_lit++; + if (dist === 0) { + s.dyn_ltree[lc * 2]++; + } else { + s.matches++; + dist--; + s.dyn_ltree[(_length_code[lc] + LITERALS + 1) * 2]++; + s.dyn_dtree[d_code(dist) * 2]++; + } + return s.last_lit === s.lit_bufsize - 1; + } + exports._tr_init = _tr_init; + exports._tr_stored_block = _tr_stored_block; + exports._tr_flush_block = _tr_flush_block; + exports._tr_tally = _tr_tally; + exports._tr_align = _tr_align; + } +}); + +// node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/adler32.js +var require_adler32 = __commonJS({ + "node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/adler32.js"(exports, module2) { + "use strict"; + function adler32(adler, buf, len, pos) { + var s1 = adler & 65535 | 0, s2 = adler >>> 16 & 65535 | 0, n = 0; + while (len !== 0) { + n = len > 2e3 ? 2e3 : len; + len -= n; + do { + s1 = s1 + buf[pos++] | 0; + s2 = s2 + s1 | 0; + } while (--n); + s1 %= 65521; + s2 %= 65521; + } + return s1 | s2 << 16 | 0; + } + module2.exports = adler32; + } +}); + +// node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/crc32.js +var require_crc32 = __commonJS({ + "node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/crc32.js"(exports, module2) { + "use strict"; + function makeTable() { + var c, table = []; + for (var n = 0; n < 256; n++) { + c = n; + for (var k = 0; k < 8; k++) { + c = c & 1 ? 3988292384 ^ c >>> 1 : c >>> 1; + } + table[n] = c; + } + return table; + } + var crcTable = makeTable(); + function crc32(crc, buf, len, pos) { + var t = crcTable, end = pos + len; + crc ^= -1; + for (var i = pos; i < end; i++) { + crc = crc >>> 8 ^ t[(crc ^ buf[i]) & 255]; + } + return crc ^ -1; + } + module2.exports = crc32; + } +}); + +// node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/messages.js +var require_messages = __commonJS({ + "node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/messages.js"(exports, module2) { + "use strict"; + module2.exports = { + 2: "need dictionary", + /* Z_NEED_DICT 2 */ + 1: "stream end", + /* Z_STREAM_END 1 */ + 0: "", + /* Z_OK 0 */ + "-1": "file error", + /* Z_ERRNO (-1) */ + "-2": "stream error", + /* Z_STREAM_ERROR (-2) */ + "-3": "data error", + /* Z_DATA_ERROR (-3) */ + "-4": "insufficient memory", + /* Z_MEM_ERROR (-4) */ + "-5": "buffer error", + /* Z_BUF_ERROR (-5) */ + "-6": "incompatible version" + /* Z_VERSION_ERROR (-6) */ + }; + } +}); + +// node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/deflate.js +var require_deflate = __commonJS({ + "node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/deflate.js"(exports) { + "use strict"; + var utils = require_common(); + var trees = require_trees(); + var adler32 = require_adler32(); + var crc32 = require_crc32(); + var msg = require_messages(); + var Z_NO_FLUSH = 0; + var Z_PARTIAL_FLUSH = 1; + var Z_FULL_FLUSH = 3; + var Z_FINISH = 4; + var Z_BLOCK = 5; + var Z_OK = 0; + var Z_STREAM_END = 1; + var Z_STREAM_ERROR = -2; + var Z_DATA_ERROR = -3; + var Z_BUF_ERROR = -5; + var Z_DEFAULT_COMPRESSION = -1; + var Z_FILTERED = 1; + var Z_HUFFMAN_ONLY = 2; + var Z_RLE = 3; + var Z_FIXED = 4; + var Z_DEFAULT_STRATEGY = 0; + var Z_UNKNOWN = 2; + var Z_DEFLATED = 8; + var MAX_MEM_LEVEL = 9; + var MAX_WBITS = 15; + var DEF_MEM_LEVEL = 8; + var LENGTH_CODES = 29; + var LITERALS = 256; + var L_CODES = LITERALS + 1 + LENGTH_CODES; + var D_CODES = 30; + var BL_CODES = 19; + var HEAP_SIZE = 2 * L_CODES + 1; + var MAX_BITS = 15; + var MIN_MATCH = 3; + var MAX_MATCH = 258; + var MIN_LOOKAHEAD = MAX_MATCH + MIN_MATCH + 1; + var PRESET_DICT = 32; + var INIT_STATE = 42; + var EXTRA_STATE = 69; + var NAME_STATE = 73; + var COMMENT_STATE = 91; + var HCRC_STATE = 103; + var BUSY_STATE = 113; + var FINISH_STATE = 666; + var BS_NEED_MORE = 1; + var BS_BLOCK_DONE = 2; + var BS_FINISH_STARTED = 3; + var BS_FINISH_DONE = 4; + var OS_CODE = 3; + function err(strm, errorCode) { + strm.msg = msg[errorCode]; + return errorCode; + } + function rank(f) { + return (f << 1) - (f > 4 ? 9 : 0); + } + function zero(buf) { + var len = buf.length; + while (--len >= 0) { + buf[len] = 0; + } + } + function flush_pending(strm) { + var s = strm.state; + var len = s.pending; + if (len > strm.avail_out) { + len = strm.avail_out; + } + if (len === 0) { + return; + } + utils.arraySet(strm.output, s.pending_buf, s.pending_out, len, strm.next_out); + strm.next_out += len; + s.pending_out += len; + strm.total_out += len; + strm.avail_out -= len; + s.pending -= len; + if (s.pending === 0) { + s.pending_out = 0; + } + } + function flush_block_only(s, last2) { + trees._tr_flush_block(s, s.block_start >= 0 ? s.block_start : -1, s.strstart - s.block_start, last2); + s.block_start = s.strstart; + flush_pending(s.strm); + } + function put_byte(s, b) { + s.pending_buf[s.pending++] = b; + } + function putShortMSB(s, b) { + s.pending_buf[s.pending++] = b >>> 8 & 255; + s.pending_buf[s.pending++] = b & 255; + } + function read_buf(strm, buf, start, size) { + var len = strm.avail_in; + if (len > size) { + len = size; + } + if (len === 0) { + return 0; + } + strm.avail_in -= len; + utils.arraySet(buf, strm.input, strm.next_in, len, start); + if (strm.state.wrap === 1) { + strm.adler = adler32(strm.adler, buf, len, start); + } else if (strm.state.wrap === 2) { + strm.adler = crc32(strm.adler, buf, len, start); + } + strm.next_in += len; + strm.total_in += len; + return len; + } + function longest_match(s, cur_match) { + var chain_length = s.max_chain_length; + var scan = s.strstart; + var match; + var len; + var best_len = s.prev_length; + var nice_match = s.nice_match; + var limit = s.strstart > s.w_size - MIN_LOOKAHEAD ? s.strstart - (s.w_size - MIN_LOOKAHEAD) : 0; + var _win = s.window; + var wmask = s.w_mask; + var prev = s.prev; + var strend = s.strstart + MAX_MATCH; + var scan_end1 = _win[scan + best_len - 1]; + var scan_end = _win[scan + best_len]; + if (s.prev_length >= s.good_match) { + chain_length >>= 2; + } + if (nice_match > s.lookahead) { + nice_match = s.lookahead; + } + do { + match = cur_match; + if (_win[match + best_len] !== scan_end || _win[match + best_len - 1] !== scan_end1 || _win[match] !== _win[scan] || _win[++match] !== _win[scan + 1]) { + continue; + } + scan += 2; + match++; + do { + } while (_win[++scan] === _win[++match] && _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && scan < strend); + len = MAX_MATCH - (strend - scan); + scan = strend - MAX_MATCH; + if (len > best_len) { + s.match_start = cur_match; + best_len = len; + if (len >= nice_match) { + break; + } + scan_end1 = _win[scan + best_len - 1]; + scan_end = _win[scan + best_len]; + } + } while ((cur_match = prev[cur_match & wmask]) > limit && --chain_length !== 0); + if (best_len <= s.lookahead) { + return best_len; + } + return s.lookahead; + } + function fill_window(s) { + var _w_size = s.w_size; + var p, n, m, more, str; + do { + more = s.window_size - s.lookahead - s.strstart; + if (s.strstart >= _w_size + (_w_size - MIN_LOOKAHEAD)) { + utils.arraySet(s.window, s.window, _w_size, _w_size, 0); + s.match_start -= _w_size; + s.strstart -= _w_size; + s.block_start -= _w_size; + n = s.hash_size; + p = n; + do { + m = s.head[--p]; + s.head[p] = m >= _w_size ? m - _w_size : 0; + } while (--n); + n = _w_size; + p = n; + do { + m = s.prev[--p]; + s.prev[p] = m >= _w_size ? m - _w_size : 0; + } while (--n); + more += _w_size; + } + if (s.strm.avail_in === 0) { + break; + } + n = read_buf(s.strm, s.window, s.strstart + s.lookahead, more); + s.lookahead += n; + if (s.lookahead + s.insert >= MIN_MATCH) { + str = s.strstart - s.insert; + s.ins_h = s.window[str]; + s.ins_h = (s.ins_h << s.hash_shift ^ s.window[str + 1]) & s.hash_mask; + while (s.insert) { + s.ins_h = (s.ins_h << s.hash_shift ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask; + s.prev[str & s.w_mask] = s.head[s.ins_h]; + s.head[s.ins_h] = str; + str++; + s.insert--; + if (s.lookahead + s.insert < MIN_MATCH) { + break; + } + } + } + } while (s.lookahead < MIN_LOOKAHEAD && s.strm.avail_in !== 0); + } + function deflate_stored(s, flush) { + var max_block_size = 65535; + if (max_block_size > s.pending_buf_size - 5) { + max_block_size = s.pending_buf_size - 5; + } + for (; ; ) { + if (s.lookahead <= 1) { + fill_window(s); + if (s.lookahead === 0 && flush === Z_NO_FLUSH) { + return BS_NEED_MORE; + } + if (s.lookahead === 0) { + break; + } + } + s.strstart += s.lookahead; + s.lookahead = 0; + var max_start = s.block_start + max_block_size; + if (s.strstart === 0 || s.strstart >= max_start) { + s.lookahead = s.strstart - max_start; + s.strstart = max_start; + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + } + if (s.strstart - s.block_start >= s.w_size - MIN_LOOKAHEAD) { + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + } + } + s.insert = 0; + if (flush === Z_FINISH) { + flush_block_only(s, true); + if (s.strm.avail_out === 0) { + return BS_FINISH_STARTED; + } + return BS_FINISH_DONE; + } + if (s.strstart > s.block_start) { + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + } + return BS_NEED_MORE; + } + function deflate_fast(s, flush) { + var hash_head; + var bflush; + for (; ; ) { + if (s.lookahead < MIN_LOOKAHEAD) { + fill_window(s); + if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) { + return BS_NEED_MORE; + } + if (s.lookahead === 0) { + break; + } + } + hash_head = 0; + if (s.lookahead >= MIN_MATCH) { + s.ins_h = (s.ins_h << s.hash_shift ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask; + hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h]; + s.head[s.ins_h] = s.strstart; + } + if (hash_head !== 0 && s.strstart - hash_head <= s.w_size - MIN_LOOKAHEAD) { + s.match_length = longest_match(s, hash_head); + } + if (s.match_length >= MIN_MATCH) { + bflush = trees._tr_tally(s, s.strstart - s.match_start, s.match_length - MIN_MATCH); + s.lookahead -= s.match_length; + if (s.match_length <= s.max_lazy_match && s.lookahead >= MIN_MATCH) { + s.match_length--; + do { + s.strstart++; + s.ins_h = (s.ins_h << s.hash_shift ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask; + hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h]; + s.head[s.ins_h] = s.strstart; + } while (--s.match_length !== 0); + s.strstart++; + } else { + s.strstart += s.match_length; + s.match_length = 0; + s.ins_h = s.window[s.strstart]; + s.ins_h = (s.ins_h << s.hash_shift ^ s.window[s.strstart + 1]) & s.hash_mask; + } + } else { + bflush = trees._tr_tally(s, 0, s.window[s.strstart]); + s.lookahead--; + s.strstart++; + } + if (bflush) { + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + } + } + s.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1; + if (flush === Z_FINISH) { + flush_block_only(s, true); + if (s.strm.avail_out === 0) { + return BS_FINISH_STARTED; + } + return BS_FINISH_DONE; + } + if (s.last_lit) { + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + } + return BS_BLOCK_DONE; + } + function deflate_slow(s, flush) { + var hash_head; + var bflush; + var max_insert; + for (; ; ) { + if (s.lookahead < MIN_LOOKAHEAD) { + fill_window(s); + if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) { + return BS_NEED_MORE; + } + if (s.lookahead === 0) { + break; + } + } + hash_head = 0; + if (s.lookahead >= MIN_MATCH) { + s.ins_h = (s.ins_h << s.hash_shift ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask; + hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h]; + s.head[s.ins_h] = s.strstart; + } + s.prev_length = s.match_length; + s.prev_match = s.match_start; + s.match_length = MIN_MATCH - 1; + if (hash_head !== 0 && s.prev_length < s.max_lazy_match && s.strstart - hash_head <= s.w_size - MIN_LOOKAHEAD) { + s.match_length = longest_match(s, hash_head); + if (s.match_length <= 5 && (s.strategy === Z_FILTERED || s.match_length === MIN_MATCH && s.strstart - s.match_start > 4096)) { + s.match_length = MIN_MATCH - 1; + } + } + if (s.prev_length >= MIN_MATCH && s.match_length <= s.prev_length) { + max_insert = s.strstart + s.lookahead - MIN_MATCH; + bflush = trees._tr_tally(s, s.strstart - 1 - s.prev_match, s.prev_length - MIN_MATCH); + s.lookahead -= s.prev_length - 1; + s.prev_length -= 2; + do { + if (++s.strstart <= max_insert) { + s.ins_h = (s.ins_h << s.hash_shift ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask; + hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h]; + s.head[s.ins_h] = s.strstart; + } + } while (--s.prev_length !== 0); + s.match_available = 0; + s.match_length = MIN_MATCH - 1; + s.strstart++; + if (bflush) { + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + } + } else if (s.match_available) { + bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]); + if (bflush) { + flush_block_only(s, false); + } + s.strstart++; + s.lookahead--; + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + } else { + s.match_available = 1; + s.strstart++; + s.lookahead--; + } + } + if (s.match_available) { + bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]); + s.match_available = 0; + } + s.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1; + if (flush === Z_FINISH) { + flush_block_only(s, true); + if (s.strm.avail_out === 0) { + return BS_FINISH_STARTED; + } + return BS_FINISH_DONE; + } + if (s.last_lit) { + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + } + return BS_BLOCK_DONE; + } + function deflate_rle(s, flush) { + var bflush; + var prev; + var scan, strend; + var _win = s.window; + for (; ; ) { + if (s.lookahead <= MAX_MATCH) { + fill_window(s); + if (s.lookahead <= MAX_MATCH && flush === Z_NO_FLUSH) { + return BS_NEED_MORE; + } + if (s.lookahead === 0) { + break; + } + } + s.match_length = 0; + if (s.lookahead >= MIN_MATCH && s.strstart > 0) { + scan = s.strstart - 1; + prev = _win[scan]; + if (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan]) { + strend = s.strstart + MAX_MATCH; + do { + } while (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan] && scan < strend); + s.match_length = MAX_MATCH - (strend - scan); + if (s.match_length > s.lookahead) { + s.match_length = s.lookahead; + } + } + } + if (s.match_length >= MIN_MATCH) { + bflush = trees._tr_tally(s, 1, s.match_length - MIN_MATCH); + s.lookahead -= s.match_length; + s.strstart += s.match_length; + s.match_length = 0; + } else { + bflush = trees._tr_tally(s, 0, s.window[s.strstart]); + s.lookahead--; + s.strstart++; + } + if (bflush) { + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + } + } + s.insert = 0; + if (flush === Z_FINISH) { + flush_block_only(s, true); + if (s.strm.avail_out === 0) { + return BS_FINISH_STARTED; + } + return BS_FINISH_DONE; + } + if (s.last_lit) { + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + } + return BS_BLOCK_DONE; + } + function deflate_huff(s, flush) { + var bflush; + for (; ; ) { + if (s.lookahead === 0) { + fill_window(s); + if (s.lookahead === 0) { + if (flush === Z_NO_FLUSH) { + return BS_NEED_MORE; + } + break; + } + } + s.match_length = 0; + bflush = trees._tr_tally(s, 0, s.window[s.strstart]); + s.lookahead--; + s.strstart++; + if (bflush) { + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + } + } + s.insert = 0; + if (flush === Z_FINISH) { + flush_block_only(s, true); + if (s.strm.avail_out === 0) { + return BS_FINISH_STARTED; + } + return BS_FINISH_DONE; + } + if (s.last_lit) { + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + } + return BS_BLOCK_DONE; + } + function Config(good_length, max_lazy, nice_length, max_chain, func) { + this.good_length = good_length; + this.max_lazy = max_lazy; + this.nice_length = nice_length; + this.max_chain = max_chain; + this.func = func; + } + var configuration_table; + configuration_table = [ + /* good lazy nice chain */ + new Config(0, 0, 0, 0, deflate_stored), + /* 0 store only */ + new Config(4, 4, 8, 4, deflate_fast), + /* 1 max speed, no lazy matches */ + new Config(4, 5, 16, 8, deflate_fast), + /* 2 */ + new Config(4, 6, 32, 32, deflate_fast), + /* 3 */ + new Config(4, 4, 16, 16, deflate_slow), + /* 4 lazy matches */ + new Config(8, 16, 32, 32, deflate_slow), + /* 5 */ + new Config(8, 16, 128, 128, deflate_slow), + /* 6 */ + new Config(8, 32, 128, 256, deflate_slow), + /* 7 */ + new Config(32, 128, 258, 1024, deflate_slow), + /* 8 */ + new Config(32, 258, 258, 4096, deflate_slow) + /* 9 max compression */ + ]; + function lm_init(s) { + s.window_size = 2 * s.w_size; + zero(s.head); + s.max_lazy_match = configuration_table[s.level].max_lazy; + s.good_match = configuration_table[s.level].good_length; + s.nice_match = configuration_table[s.level].nice_length; + s.max_chain_length = configuration_table[s.level].max_chain; + s.strstart = 0; + s.block_start = 0; + s.lookahead = 0; + s.insert = 0; + s.match_length = s.prev_length = MIN_MATCH - 1; + s.match_available = 0; + s.ins_h = 0; + } + function DeflateState() { + this.strm = null; + this.status = 0; + this.pending_buf = null; + this.pending_buf_size = 0; + this.pending_out = 0; + this.pending = 0; + this.wrap = 0; + this.gzhead = null; + this.gzindex = 0; + this.method = Z_DEFLATED; + this.last_flush = -1; + this.w_size = 0; + this.w_bits = 0; + this.w_mask = 0; + this.window = null; + this.window_size = 0; + this.prev = null; + this.head = null; + this.ins_h = 0; + this.hash_size = 0; + this.hash_bits = 0; + this.hash_mask = 0; + this.hash_shift = 0; + this.block_start = 0; + this.match_length = 0; + this.prev_match = 0; + this.match_available = 0; + this.strstart = 0; + this.match_start = 0; + this.lookahead = 0; + this.prev_length = 0; + this.max_chain_length = 0; + this.max_lazy_match = 0; + this.level = 0; + this.strategy = 0; + this.good_match = 0; + this.nice_match = 0; + this.dyn_ltree = new utils.Buf16(HEAP_SIZE * 2); + this.dyn_dtree = new utils.Buf16((2 * D_CODES + 1) * 2); + this.bl_tree = new utils.Buf16((2 * BL_CODES + 1) * 2); + zero(this.dyn_ltree); + zero(this.dyn_dtree); + zero(this.bl_tree); + this.l_desc = null; + this.d_desc = null; + this.bl_desc = null; + this.bl_count = new utils.Buf16(MAX_BITS + 1); + this.heap = new utils.Buf16(2 * L_CODES + 1); + zero(this.heap); + this.heap_len = 0; + this.heap_max = 0; + this.depth = new utils.Buf16(2 * L_CODES + 1); + zero(this.depth); + this.l_buf = 0; + this.lit_bufsize = 0; + this.last_lit = 0; + this.d_buf = 0; + this.opt_len = 0; + this.static_len = 0; + this.matches = 0; + this.insert = 0; + this.bi_buf = 0; + this.bi_valid = 0; + } + function deflateResetKeep(strm) { + var s; + if (!strm || !strm.state) { + return err(strm, Z_STREAM_ERROR); + } + strm.total_in = strm.total_out = 0; + strm.data_type = Z_UNKNOWN; + s = strm.state; + s.pending = 0; + s.pending_out = 0; + if (s.wrap < 0) { + s.wrap = -s.wrap; + } + s.status = s.wrap ? INIT_STATE : BUSY_STATE; + strm.adler = s.wrap === 2 ? 0 : 1; + s.last_flush = Z_NO_FLUSH; + trees._tr_init(s); + return Z_OK; + } + function deflateReset(strm) { + var ret = deflateResetKeep(strm); + if (ret === Z_OK) { + lm_init(strm.state); + } + return ret; + } + function deflateSetHeader(strm, head) { + if (!strm || !strm.state) { + return Z_STREAM_ERROR; + } + if (strm.state.wrap !== 2) { + return Z_STREAM_ERROR; + } + strm.state.gzhead = head; + return Z_OK; + } + function deflateInit2(strm, level, method, windowBits, memLevel, strategy) { + if (!strm) { + return Z_STREAM_ERROR; + } + var wrap = 1; + if (level === Z_DEFAULT_COMPRESSION) { + level = 6; + } + if (windowBits < 0) { + wrap = 0; + windowBits = -windowBits; + } else if (windowBits > 15) { + wrap = 2; + windowBits -= 16; + } + if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method !== Z_DEFLATED || windowBits < 8 || windowBits > 15 || level < 0 || level > 9 || strategy < 0 || strategy > Z_FIXED) { + return err(strm, Z_STREAM_ERROR); + } + if (windowBits === 8) { + windowBits = 9; + } + var s = new DeflateState(); + strm.state = s; + s.strm = strm; + s.wrap = wrap; + s.gzhead = null; + s.w_bits = windowBits; + s.w_size = 1 << s.w_bits; + s.w_mask = s.w_size - 1; + s.hash_bits = memLevel + 7; + s.hash_size = 1 << s.hash_bits; + s.hash_mask = s.hash_size - 1; + s.hash_shift = ~~((s.hash_bits + MIN_MATCH - 1) / MIN_MATCH); + s.window = new utils.Buf8(s.w_size * 2); + s.head = new utils.Buf16(s.hash_size); + s.prev = new utils.Buf16(s.w_size); + s.lit_bufsize = 1 << memLevel + 6; + s.pending_buf_size = s.lit_bufsize * 4; + s.pending_buf = new utils.Buf8(s.pending_buf_size); + s.d_buf = 1 * s.lit_bufsize; + s.l_buf = (1 + 2) * s.lit_bufsize; + s.level = level; + s.strategy = strategy; + s.method = method; + return deflateReset(strm); + } + function deflateInit(strm, level) { + return deflateInit2(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY); + } + function deflate(strm, flush) { + var old_flush, s; + var beg, val; + if (!strm || !strm.state || flush > Z_BLOCK || flush < 0) { + return strm ? err(strm, Z_STREAM_ERROR) : Z_STREAM_ERROR; + } + s = strm.state; + if (!strm.output || !strm.input && strm.avail_in !== 0 || s.status === FINISH_STATE && flush !== Z_FINISH) { + return err(strm, strm.avail_out === 0 ? Z_BUF_ERROR : Z_STREAM_ERROR); + } + s.strm = strm; + old_flush = s.last_flush; + s.last_flush = flush; + if (s.status === INIT_STATE) { + if (s.wrap === 2) { + strm.adler = 0; + put_byte(s, 31); + put_byte(s, 139); + put_byte(s, 8); + if (!s.gzhead) { + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, s.level === 9 ? 2 : s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ? 4 : 0); + put_byte(s, OS_CODE); + s.status = BUSY_STATE; + } else { + put_byte( + s, + (s.gzhead.text ? 1 : 0) + (s.gzhead.hcrc ? 2 : 0) + (!s.gzhead.extra ? 0 : 4) + (!s.gzhead.name ? 0 : 8) + (!s.gzhead.comment ? 0 : 16) + ); + put_byte(s, s.gzhead.time & 255); + put_byte(s, s.gzhead.time >> 8 & 255); + put_byte(s, s.gzhead.time >> 16 & 255); + put_byte(s, s.gzhead.time >> 24 & 255); + put_byte(s, s.level === 9 ? 2 : s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ? 4 : 0); + put_byte(s, s.gzhead.os & 255); + if (s.gzhead.extra && s.gzhead.extra.length) { + put_byte(s, s.gzhead.extra.length & 255); + put_byte(s, s.gzhead.extra.length >> 8 & 255); + } + if (s.gzhead.hcrc) { + strm.adler = crc32(strm.adler, s.pending_buf, s.pending, 0); + } + s.gzindex = 0; + s.status = EXTRA_STATE; + } + } else { + var header = Z_DEFLATED + (s.w_bits - 8 << 4) << 8; + var level_flags = -1; + if (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2) { + level_flags = 0; + } else if (s.level < 6) { + level_flags = 1; + } else if (s.level === 6) { + level_flags = 2; + } else { + level_flags = 3; + } + header |= level_flags << 6; + if (s.strstart !== 0) { + header |= PRESET_DICT; + } + header += 31 - header % 31; + s.status = BUSY_STATE; + putShortMSB(s, header); + if (s.strstart !== 0) { + putShortMSB(s, strm.adler >>> 16); + putShortMSB(s, strm.adler & 65535); + } + strm.adler = 1; + } + } + if (s.status === EXTRA_STATE) { + if (s.gzhead.extra) { + beg = s.pending; + while (s.gzindex < (s.gzhead.extra.length & 65535)) { + if (s.pending === s.pending_buf_size) { + if (s.gzhead.hcrc && s.pending > beg) { + strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); + } + flush_pending(strm); + beg = s.pending; + if (s.pending === s.pending_buf_size) { + break; + } + } + put_byte(s, s.gzhead.extra[s.gzindex] & 255); + s.gzindex++; + } + if (s.gzhead.hcrc && s.pending > beg) { + strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); + } + if (s.gzindex === s.gzhead.extra.length) { + s.gzindex = 0; + s.status = NAME_STATE; + } + } else { + s.status = NAME_STATE; + } + } + if (s.status === NAME_STATE) { + if (s.gzhead.name) { + beg = s.pending; + do { + if (s.pending === s.pending_buf_size) { + if (s.gzhead.hcrc && s.pending > beg) { + strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); + } + flush_pending(strm); + beg = s.pending; + if (s.pending === s.pending_buf_size) { + val = 1; + break; + } + } + if (s.gzindex < s.gzhead.name.length) { + val = s.gzhead.name.charCodeAt(s.gzindex++) & 255; + } else { + val = 0; + } + put_byte(s, val); + } while (val !== 0); + if (s.gzhead.hcrc && s.pending > beg) { + strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); + } + if (val === 0) { + s.gzindex = 0; + s.status = COMMENT_STATE; + } + } else { + s.status = COMMENT_STATE; + } + } + if (s.status === COMMENT_STATE) { + if (s.gzhead.comment) { + beg = s.pending; + do { + if (s.pending === s.pending_buf_size) { + if (s.gzhead.hcrc && s.pending > beg) { + strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); + } + flush_pending(strm); + beg = s.pending; + if (s.pending === s.pending_buf_size) { + val = 1; + break; + } + } + if (s.gzindex < s.gzhead.comment.length) { + val = s.gzhead.comment.charCodeAt(s.gzindex++) & 255; + } else { + val = 0; + } + put_byte(s, val); + } while (val !== 0); + if (s.gzhead.hcrc && s.pending > beg) { + strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); + } + if (val === 0) { + s.status = HCRC_STATE; + } + } else { + s.status = HCRC_STATE; + } + } + if (s.status === HCRC_STATE) { + if (s.gzhead.hcrc) { + if (s.pending + 2 > s.pending_buf_size) { + flush_pending(strm); + } + if (s.pending + 2 <= s.pending_buf_size) { + put_byte(s, strm.adler & 255); + put_byte(s, strm.adler >> 8 & 255); + strm.adler = 0; + s.status = BUSY_STATE; + } + } else { + s.status = BUSY_STATE; + } + } + if (s.pending !== 0) { + flush_pending(strm); + if (strm.avail_out === 0) { + s.last_flush = -1; + return Z_OK; + } + } else if (strm.avail_in === 0 && rank(flush) <= rank(old_flush) && flush !== Z_FINISH) { + return err(strm, Z_BUF_ERROR); + } + if (s.status === FINISH_STATE && strm.avail_in !== 0) { + return err(strm, Z_BUF_ERROR); + } + if (strm.avail_in !== 0 || s.lookahead !== 0 || flush !== Z_NO_FLUSH && s.status !== FINISH_STATE) { + var bstate = s.strategy === Z_HUFFMAN_ONLY ? deflate_huff(s, flush) : s.strategy === Z_RLE ? deflate_rle(s, flush) : configuration_table[s.level].func(s, flush); + if (bstate === BS_FINISH_STARTED || bstate === BS_FINISH_DONE) { + s.status = FINISH_STATE; + } + if (bstate === BS_NEED_MORE || bstate === BS_FINISH_STARTED) { + if (strm.avail_out === 0) { + s.last_flush = -1; + } + return Z_OK; + } + if (bstate === BS_BLOCK_DONE) { + if (flush === Z_PARTIAL_FLUSH) { + trees._tr_align(s); + } else if (flush !== Z_BLOCK) { + trees._tr_stored_block(s, 0, 0, false); + if (flush === Z_FULL_FLUSH) { + zero(s.head); + if (s.lookahead === 0) { + s.strstart = 0; + s.block_start = 0; + s.insert = 0; + } + } + } + flush_pending(strm); + if (strm.avail_out === 0) { + s.last_flush = -1; + return Z_OK; + } + } + } + if (flush !== Z_FINISH) { + return Z_OK; + } + if (s.wrap <= 0) { + return Z_STREAM_END; + } + if (s.wrap === 2) { + put_byte(s, strm.adler & 255); + put_byte(s, strm.adler >> 8 & 255); + put_byte(s, strm.adler >> 16 & 255); + put_byte(s, strm.adler >> 24 & 255); + put_byte(s, strm.total_in & 255); + put_byte(s, strm.total_in >> 8 & 255); + put_byte(s, strm.total_in >> 16 & 255); + put_byte(s, strm.total_in >> 24 & 255); + } else { + putShortMSB(s, strm.adler >>> 16); + putShortMSB(s, strm.adler & 65535); + } + flush_pending(strm); + if (s.wrap > 0) { + s.wrap = -s.wrap; + } + return s.pending !== 0 ? Z_OK : Z_STREAM_END; + } + function deflateEnd(strm) { + var status; + if (!strm || !strm.state) { + return Z_STREAM_ERROR; + } + status = strm.state.status; + if (status !== INIT_STATE && status !== EXTRA_STATE && status !== NAME_STATE && status !== COMMENT_STATE && status !== HCRC_STATE && status !== BUSY_STATE && status !== FINISH_STATE) { + return err(strm, Z_STREAM_ERROR); + } + strm.state = null; + return status === BUSY_STATE ? err(strm, Z_DATA_ERROR) : Z_OK; + } + function deflateSetDictionary(strm, dictionary) { + var dictLength = dictionary.length; + var s; + var str, n; + var wrap; + var avail; + var next; + var input; + var tmpDict; + if (!strm || !strm.state) { + return Z_STREAM_ERROR; + } + s = strm.state; + wrap = s.wrap; + if (wrap === 2 || wrap === 1 && s.status !== INIT_STATE || s.lookahead) { + return Z_STREAM_ERROR; + } + if (wrap === 1) { + strm.adler = adler32(strm.adler, dictionary, dictLength, 0); + } + s.wrap = 0; + if (dictLength >= s.w_size) { + if (wrap === 0) { + zero(s.head); + s.strstart = 0; + s.block_start = 0; + s.insert = 0; + } + tmpDict = new utils.Buf8(s.w_size); + utils.arraySet(tmpDict, dictionary, dictLength - s.w_size, s.w_size, 0); + dictionary = tmpDict; + dictLength = s.w_size; + } + avail = strm.avail_in; + next = strm.next_in; + input = strm.input; + strm.avail_in = dictLength; + strm.next_in = 0; + strm.input = dictionary; + fill_window(s); + while (s.lookahead >= MIN_MATCH) { + str = s.strstart; + n = s.lookahead - (MIN_MATCH - 1); + do { + s.ins_h = (s.ins_h << s.hash_shift ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask; + s.prev[str & s.w_mask] = s.head[s.ins_h]; + s.head[s.ins_h] = str; + str++; + } while (--n); + s.strstart = str; + s.lookahead = MIN_MATCH - 1; + fill_window(s); + } + s.strstart += s.lookahead; + s.block_start = s.strstart; + s.insert = s.lookahead; + s.lookahead = 0; + s.match_length = s.prev_length = MIN_MATCH - 1; + s.match_available = 0; + strm.next_in = next; + strm.input = input; + strm.avail_in = avail; + s.wrap = wrap; + return Z_OK; + } + exports.deflateInit = deflateInit; + exports.deflateInit2 = deflateInit2; + exports.deflateReset = deflateReset; + exports.deflateResetKeep = deflateResetKeep; + exports.deflateSetHeader = deflateSetHeader; + exports.deflate = deflate; + exports.deflateEnd = deflateEnd; + exports.deflateSetDictionary = deflateSetDictionary; + exports.deflateInfo = "pako deflate (from Nodeca project)"; + } +}); + +// node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/utils/strings.js +var require_strings = __commonJS({ + "node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/utils/strings.js"(exports) { + "use strict"; + var utils = require_common(); + var STR_APPLY_OK = true; + var STR_APPLY_UIA_OK = true; + try { + String.fromCharCode.apply(null, [0]); + } catch (__) { + STR_APPLY_OK = false; + } + try { + String.fromCharCode.apply(null, new Uint8Array(1)); + } catch (__) { + STR_APPLY_UIA_OK = false; + } + var _utf8len = new utils.Buf8(256); + for (q = 0; q < 256; q++) { + _utf8len[q] = q >= 252 ? 6 : q >= 248 ? 5 : q >= 240 ? 4 : q >= 224 ? 3 : q >= 192 ? 2 : 1; + } + var q; + _utf8len[254] = _utf8len[254] = 1; + exports.string2buf = function(str) { + var buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0; + for (m_pos = 0; m_pos < str_len; m_pos++) { + c = str.charCodeAt(m_pos); + if ((c & 64512) === 55296 && m_pos + 1 < str_len) { + c2 = str.charCodeAt(m_pos + 1); + if ((c2 & 64512) === 56320) { + c = 65536 + (c - 55296 << 10) + (c2 - 56320); + m_pos++; + } + } + buf_len += c < 128 ? 1 : c < 2048 ? 2 : c < 65536 ? 3 : 4; + } + buf = new utils.Buf8(buf_len); + for (i = 0, m_pos = 0; i < buf_len; m_pos++) { + c = str.charCodeAt(m_pos); + if ((c & 64512) === 55296 && m_pos + 1 < str_len) { + c2 = str.charCodeAt(m_pos + 1); + if ((c2 & 64512) === 56320) { + c = 65536 + (c - 55296 << 10) + (c2 - 56320); + m_pos++; + } + } + if (c < 128) { + buf[i++] = c; + } else if (c < 2048) { + buf[i++] = 192 | c >>> 6; + buf[i++] = 128 | c & 63; + } else if (c < 65536) { + buf[i++] = 224 | c >>> 12; + buf[i++] = 128 | c >>> 6 & 63; + buf[i++] = 128 | c & 63; + } else { + buf[i++] = 240 | c >>> 18; + buf[i++] = 128 | c >>> 12 & 63; + buf[i++] = 128 | c >>> 6 & 63; + buf[i++] = 128 | c & 63; + } + } + return buf; + }; + function buf2binstring(buf, len) { + if (len < 65534) { + if (buf.subarray && STR_APPLY_UIA_OK || !buf.subarray && STR_APPLY_OK) { + return String.fromCharCode.apply(null, utils.shrinkBuf(buf, len)); + } + } + var result = ""; + for (var i = 0; i < len; i++) { + result += String.fromCharCode(buf[i]); + } + return result; + } + exports.buf2binstring = function(buf) { + return buf2binstring(buf, buf.length); + }; + exports.binstring2buf = function(str) { + var buf = new utils.Buf8(str.length); + for (var i = 0, len = buf.length; i < len; i++) { + buf[i] = str.charCodeAt(i); + } + return buf; + }; + exports.buf2string = function(buf, max) { + var i, out, c, c_len; + var len = max || buf.length; + var utf16buf = new Array(len * 2); + for (out = 0, i = 0; i < len; ) { + c = buf[i++]; + if (c < 128) { + utf16buf[out++] = c; + continue; + } + c_len = _utf8len[c]; + if (c_len > 4) { + utf16buf[out++] = 65533; + i += c_len - 1; + continue; + } + c &= c_len === 2 ? 31 : c_len === 3 ? 15 : 7; + while (c_len > 1 && i < len) { + c = c << 6 | buf[i++] & 63; + c_len--; + } + if (c_len > 1) { + utf16buf[out++] = 65533; + continue; + } + if (c < 65536) { + utf16buf[out++] = c; + } else { + c -= 65536; + utf16buf[out++] = 55296 | c >> 10 & 1023; + utf16buf[out++] = 56320 | c & 1023; + } + } + return buf2binstring(utf16buf, out); + }; + exports.utf8border = function(buf, max) { + var pos; + max = max || buf.length; + if (max > buf.length) { + max = buf.length; + } + pos = max - 1; + while (pos >= 0 && (buf[pos] & 192) === 128) { + pos--; + } + if (pos < 0) { + return max; + } + if (pos === 0) { + return max; + } + return pos + _utf8len[buf[pos]] > max ? pos : max; + }; + } +}); + +// node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/zstream.js +var require_zstream = __commonJS({ + "node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/zstream.js"(exports, module2) { + "use strict"; + function ZStream() { + this.input = null; + this.next_in = 0; + this.avail_in = 0; + this.total_in = 0; + this.output = null; + this.next_out = 0; + this.avail_out = 0; + this.total_out = 0; + this.msg = ""; + this.state = null; + this.data_type = 2; + this.adler = 0; + } + module2.exports = ZStream; + } +}); + +// node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/deflate.js +var require_deflate2 = __commonJS({ + "node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/deflate.js"(exports) { + "use strict"; + var zlib_deflate = require_deflate(); + var utils = require_common(); + var strings = require_strings(); + var msg = require_messages(); + var ZStream = require_zstream(); + var toString = Object.prototype.toString; + var Z_NO_FLUSH = 0; + var Z_FINISH = 4; + var Z_OK = 0; + var Z_STREAM_END = 1; + var Z_SYNC_FLUSH = 2; + var Z_DEFAULT_COMPRESSION = -1; + var Z_DEFAULT_STRATEGY = 0; + var Z_DEFLATED = 8; + function Deflate(options) { + if (!(this instanceof Deflate)) return new Deflate(options); + this.options = utils.assign({ + level: Z_DEFAULT_COMPRESSION, + method: Z_DEFLATED, + chunkSize: 16384, + windowBits: 15, + memLevel: 8, + strategy: Z_DEFAULT_STRATEGY, + to: "" + }, options || {}); + var opt = this.options; + if (opt.raw && opt.windowBits > 0) { + opt.windowBits = -opt.windowBits; + } else if (opt.gzip && opt.windowBits > 0 && opt.windowBits < 16) { + opt.windowBits += 16; + } + this.err = 0; + this.msg = ""; + this.ended = false; + this.chunks = []; + this.strm = new ZStream(); + this.strm.avail_out = 0; + var status = zlib_deflate.deflateInit2( + this.strm, + opt.level, + opt.method, + opt.windowBits, + opt.memLevel, + opt.strategy + ); + if (status !== Z_OK) { + throw new Error(msg[status]); + } + if (opt.header) { + zlib_deflate.deflateSetHeader(this.strm, opt.header); + } + if (opt.dictionary) { + var dict; + if (typeof opt.dictionary === "string") { + dict = strings.string2buf(opt.dictionary); + } else if (toString.call(opt.dictionary) === "[object ArrayBuffer]") { + dict = new Uint8Array(opt.dictionary); + } else { + dict = opt.dictionary; + } + status = zlib_deflate.deflateSetDictionary(this.strm, dict); + if (status !== Z_OK) { + throw new Error(msg[status]); + } + this._dict_set = true; + } + } + Deflate.prototype.push = function(data, mode) { + var strm = this.strm; + var chunkSize = this.options.chunkSize; + var status, _mode; + if (this.ended) { + return false; + } + _mode = mode === ~~mode ? mode : mode === true ? Z_FINISH : Z_NO_FLUSH; + if (typeof data === "string") { + strm.input = strings.string2buf(data); + } else if (toString.call(data) === "[object ArrayBuffer]") { + strm.input = new Uint8Array(data); + } else { + strm.input = data; + } + strm.next_in = 0; + strm.avail_in = strm.input.length; + do { + if (strm.avail_out === 0) { + strm.output = new utils.Buf8(chunkSize); + strm.next_out = 0; + strm.avail_out = chunkSize; + } + status = zlib_deflate.deflate(strm, _mode); + if (status !== Z_STREAM_END && status !== Z_OK) { + this.onEnd(status); + this.ended = true; + return false; + } + if (strm.avail_out === 0 || strm.avail_in === 0 && (_mode === Z_FINISH || _mode === Z_SYNC_FLUSH)) { + if (this.options.to === "string") { + this.onData(strings.buf2binstring(utils.shrinkBuf(strm.output, strm.next_out))); + } else { + this.onData(utils.shrinkBuf(strm.output, strm.next_out)); + } + } + } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== Z_STREAM_END); + if (_mode === Z_FINISH) { + status = zlib_deflate.deflateEnd(this.strm); + this.onEnd(status); + this.ended = true; + return status === Z_OK; + } + if (_mode === Z_SYNC_FLUSH) { + this.onEnd(Z_OK); + strm.avail_out = 0; + return true; + } + return true; + }; + Deflate.prototype.onData = function(chunk) { + this.chunks.push(chunk); + }; + Deflate.prototype.onEnd = function(status) { + if (status === Z_OK) { + if (this.options.to === "string") { + this.result = this.chunks.join(""); + } else { + this.result = utils.flattenChunks(this.chunks); + } + } + this.chunks = []; + this.err = status; + this.msg = this.strm.msg; + }; + function deflate(input, options) { + var deflator = new Deflate(options); + deflator.push(input, true); + if (deflator.err) { + throw deflator.msg || msg[deflator.err]; + } + return deflator.result; + } + function deflateRaw(input, options) { + options = options || {}; + options.raw = true; + return deflate(input, options); + } + function gzip(input, options) { + options = options || {}; + options.gzip = true; + return deflate(input, options); + } + exports.Deflate = Deflate; + exports.deflate = deflate; + exports.deflateRaw = deflateRaw; + exports.gzip = gzip; + } +}); + +// node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/inffast.js +var require_inffast = __commonJS({ + "node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/inffast.js"(exports, module2) { + "use strict"; + var BAD = 30; + var TYPE = 12; + module2.exports = function inflate_fast(strm, start) { + var state; + var _in; + var last2; + var _out; + var beg; + var end; + var dmax; + var wsize; + var whave; + var wnext; + var s_window; + var hold; + var bits; + var lcode; + var dcode; + var lmask; + var dmask; + var here; + var op; + var len; + var dist; + var from; + var from_source; + var input, output; + state = strm.state; + _in = strm.next_in; + input = strm.input; + last2 = _in + (strm.avail_in - 5); + _out = strm.next_out; + output = strm.output; + beg = _out - (start - strm.avail_out); + end = _out + (strm.avail_out - 257); + dmax = state.dmax; + wsize = state.wsize; + whave = state.whave; + wnext = state.wnext; + s_window = state.window; + hold = state.hold; + bits = state.bits; + lcode = state.lencode; + dcode = state.distcode; + lmask = (1 << state.lenbits) - 1; + dmask = (1 << state.distbits) - 1; + top: + do { + if (bits < 15) { + hold += input[_in++] << bits; + bits += 8; + hold += input[_in++] << bits; + bits += 8; + } + here = lcode[hold & lmask]; + dolen: + for (; ; ) { + op = here >>> 24; + hold >>>= op; + bits -= op; + op = here >>> 16 & 255; + if (op === 0) { + output[_out++] = here & 65535; + } else if (op & 16) { + len = here & 65535; + op &= 15; + if (op) { + if (bits < op) { + hold += input[_in++] << bits; + bits += 8; + } + len += hold & (1 << op) - 1; + hold >>>= op; + bits -= op; + } + if (bits < 15) { + hold += input[_in++] << bits; + bits += 8; + hold += input[_in++] << bits; + bits += 8; + } + here = dcode[hold & dmask]; + dodist: + for (; ; ) { + op = here >>> 24; + hold >>>= op; + bits -= op; + op = here >>> 16 & 255; + if (op & 16) { + dist = here & 65535; + op &= 15; + if (bits < op) { + hold += input[_in++] << bits; + bits += 8; + if (bits < op) { + hold += input[_in++] << bits; + bits += 8; + } + } + dist += hold & (1 << op) - 1; + if (dist > dmax) { + strm.msg = "invalid distance too far back"; + state.mode = BAD; + break top; + } + hold >>>= op; + bits -= op; + op = _out - beg; + if (dist > op) { + op = dist - op; + if (op > whave) { + if (state.sane) { + strm.msg = "invalid distance too far back"; + state.mode = BAD; + break top; + } + } + from = 0; + from_source = s_window; + if (wnext === 0) { + from += wsize - op; + if (op < len) { + len -= op; + do { + output[_out++] = s_window[from++]; + } while (--op); + from = _out - dist; + from_source = output; + } + } else if (wnext < op) { + from += wsize + wnext - op; + op -= wnext; + if (op < len) { + len -= op; + do { + output[_out++] = s_window[from++]; + } while (--op); + from = 0; + if (wnext < len) { + op = wnext; + len -= op; + do { + output[_out++] = s_window[from++]; + } while (--op); + from = _out - dist; + from_source = output; + } + } + } else { + from += wnext - op; + if (op < len) { + len -= op; + do { + output[_out++] = s_window[from++]; + } while (--op); + from = _out - dist; + from_source = output; + } + } + while (len > 2) { + output[_out++] = from_source[from++]; + output[_out++] = from_source[from++]; + output[_out++] = from_source[from++]; + len -= 3; + } + if (len) { + output[_out++] = from_source[from++]; + if (len > 1) { + output[_out++] = from_source[from++]; + } + } + } else { + from = _out - dist; + do { + output[_out++] = output[from++]; + output[_out++] = output[from++]; + output[_out++] = output[from++]; + len -= 3; + } while (len > 2); + if (len) { + output[_out++] = output[from++]; + if (len > 1) { + output[_out++] = output[from++]; + } + } + } + } else if ((op & 64) === 0) { + here = dcode[(here & 65535) + (hold & (1 << op) - 1)]; + continue dodist; + } else { + strm.msg = "invalid distance code"; + state.mode = BAD; + break top; + } + break; + } + } else if ((op & 64) === 0) { + here = lcode[(here & 65535) + (hold & (1 << op) - 1)]; + continue dolen; + } else if (op & 32) { + state.mode = TYPE; + break top; + } else { + strm.msg = "invalid literal/length code"; + state.mode = BAD; + break top; + } + break; + } + } while (_in < last2 && _out < end); + len = bits >> 3; + _in -= len; + bits -= len << 3; + hold &= (1 << bits) - 1; + strm.next_in = _in; + strm.next_out = _out; + strm.avail_in = _in < last2 ? 5 + (last2 - _in) : 5 - (_in - last2); + strm.avail_out = _out < end ? 257 + (end - _out) : 257 - (_out - end); + state.hold = hold; + state.bits = bits; + return; + }; + } +}); + +// node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/inftrees.js +var require_inftrees = __commonJS({ + "node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/inftrees.js"(exports, module2) { + "use strict"; + var utils = require_common(); + var MAXBITS = 15; + var ENOUGH_LENS = 852; + var ENOUGH_DISTS = 592; + var CODES = 0; + var LENS = 1; + var DISTS = 2; + var lbase = [ + /* Length codes 257..285 base */ + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 13, + 15, + 17, + 19, + 23, + 27, + 31, + 35, + 43, + 51, + 59, + 67, + 83, + 99, + 115, + 131, + 163, + 195, + 227, + 258, + 0, + 0 + ]; + var lext = [ + /* Length codes 257..285 extra */ + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 17, + 17, + 17, + 17, + 18, + 18, + 18, + 18, + 19, + 19, + 19, + 19, + 20, + 20, + 20, + 20, + 21, + 21, + 21, + 21, + 16, + 72, + 78 + ]; + var dbase = [ + /* Distance codes 0..29 base */ + 1, + 2, + 3, + 4, + 5, + 7, + 9, + 13, + 17, + 25, + 33, + 49, + 65, + 97, + 129, + 193, + 257, + 385, + 513, + 769, + 1025, + 1537, + 2049, + 3073, + 4097, + 6145, + 8193, + 12289, + 16385, + 24577, + 0, + 0 + ]; + var dext = [ + /* Distance codes 0..29 extra */ + 16, + 16, + 16, + 16, + 17, + 17, + 18, + 18, + 19, + 19, + 20, + 20, + 21, + 21, + 22, + 22, + 23, + 23, + 24, + 24, + 25, + 25, + 26, + 26, + 27, + 27, + 28, + 28, + 29, + 29, + 64, + 64 + ]; + module2.exports = function inflate_table(type, lens, lens_index, codes, table, table_index, work, opts) { + var bits = opts.bits; + var len = 0; + var sym = 0; + var min = 0, max = 0; + var root = 0; + var curr = 0; + var drop = 0; + var left = 0; + var used = 0; + var huff = 0; + var incr; + var fill2; + var low; + var mask; + var next; + var base = null; + var base_index = 0; + var end; + var count = new utils.Buf16(MAXBITS + 1); + var offs = new utils.Buf16(MAXBITS + 1); + var extra = null; + var extra_index = 0; + var here_bits, here_op, here_val; + for (len = 0; len <= MAXBITS; len++) { + count[len] = 0; + } + for (sym = 0; sym < codes; sym++) { + count[lens[lens_index + sym]]++; + } + root = bits; + for (max = MAXBITS; max >= 1; max--) { + if (count[max] !== 0) { + break; + } + } + if (root > max) { + root = max; + } + if (max === 0) { + table[table_index++] = 1 << 24 | 64 << 16 | 0; + table[table_index++] = 1 << 24 | 64 << 16 | 0; + opts.bits = 1; + return 0; + } + for (min = 1; min < max; min++) { + if (count[min] !== 0) { + break; + } + } + if (root < min) { + root = min; + } + left = 1; + for (len = 1; len <= MAXBITS; len++) { + left <<= 1; + left -= count[len]; + if (left < 0) { + return -1; + } + } + if (left > 0 && (type === CODES || max !== 1)) { + return -1; + } + offs[1] = 0; + for (len = 1; len < MAXBITS; len++) { + offs[len + 1] = offs[len] + count[len]; + } + for (sym = 0; sym < codes; sym++) { + if (lens[lens_index + sym] !== 0) { + work[offs[lens[lens_index + sym]]++] = sym; + } + } + if (type === CODES) { + base = extra = work; + end = 19; + } else if (type === LENS) { + base = lbase; + base_index -= 257; + extra = lext; + extra_index -= 257; + end = 256; + } else { + base = dbase; + extra = dext; + end = -1; + } + huff = 0; + sym = 0; + len = min; + next = table_index; + curr = root; + drop = 0; + low = -1; + used = 1 << root; + mask = used - 1; + if (type === LENS && used > ENOUGH_LENS || type === DISTS && used > ENOUGH_DISTS) { + return 1; + } + for (; ; ) { + here_bits = len - drop; + if (work[sym] < end) { + here_op = 0; + here_val = work[sym]; + } else if (work[sym] > end) { + here_op = extra[extra_index + work[sym]]; + here_val = base[base_index + work[sym]]; + } else { + here_op = 32 + 64; + here_val = 0; + } + incr = 1 << len - drop; + fill2 = 1 << curr; + min = fill2; + do { + fill2 -= incr; + table[next + (huff >> drop) + fill2] = here_bits << 24 | here_op << 16 | here_val | 0; + } while (fill2 !== 0); + incr = 1 << len - 1; + while (huff & incr) { + incr >>= 1; + } + if (incr !== 0) { + huff &= incr - 1; + huff += incr; + } else { + huff = 0; + } + sym++; + if (--count[len] === 0) { + if (len === max) { + break; + } + len = lens[lens_index + work[sym]]; + } + if (len > root && (huff & mask) !== low) { + if (drop === 0) { + drop = root; + } + next += min; + curr = len - drop; + left = 1 << curr; + while (curr + drop < max) { + left -= count[curr + drop]; + if (left <= 0) { + break; + } + curr++; + left <<= 1; + } + used += 1 << curr; + if (type === LENS && used > ENOUGH_LENS || type === DISTS && used > ENOUGH_DISTS) { + return 1; + } + low = huff & mask; + table[low] = root << 24 | curr << 16 | next - table_index | 0; + } + } + if (huff !== 0) { + table[next + huff] = len - drop << 24 | 64 << 16 | 0; + } + opts.bits = root; + return 0; + }; + } +}); + +// node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/inflate.js +var require_inflate = __commonJS({ + "node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/inflate.js"(exports) { + "use strict"; + var utils = require_common(); + var adler32 = require_adler32(); + var crc32 = require_crc32(); + var inflate_fast = require_inffast(); + var inflate_table = require_inftrees(); + var CODES = 0; + var LENS = 1; + var DISTS = 2; + var Z_FINISH = 4; + var Z_BLOCK = 5; + var Z_TREES = 6; + var Z_OK = 0; + var Z_STREAM_END = 1; + var Z_NEED_DICT = 2; + var Z_STREAM_ERROR = -2; + var Z_DATA_ERROR = -3; + var Z_MEM_ERROR = -4; + var Z_BUF_ERROR = -5; + var Z_DEFLATED = 8; + var HEAD = 1; + var FLAGS = 2; + var TIME = 3; + var OS = 4; + var EXLEN = 5; + var EXTRA = 6; + var NAME = 7; + var COMMENT = 8; + var HCRC = 9; + var DICTID = 10; + var DICT = 11; + var TYPE = 12; + var TYPEDO = 13; + var STORED = 14; + var COPY_ = 15; + var COPY = 16; + var TABLE = 17; + var LENLENS = 18; + var CODELENS = 19; + var LEN_ = 20; + var LEN = 21; + var LENEXT = 22; + var DIST = 23; + var DISTEXT = 24; + var MATCH = 25; + var LIT = 26; + var CHECK = 27; + var LENGTH = 28; + var DONE = 29; + var BAD = 30; + var MEM = 31; + var SYNC = 32; + var ENOUGH_LENS = 852; + var ENOUGH_DISTS = 592; + var MAX_WBITS = 15; + var DEF_WBITS = MAX_WBITS; + function zswap32(q) { + return (q >>> 24 & 255) + (q >>> 8 & 65280) + ((q & 65280) << 8) + ((q & 255) << 24); + } + function InflateState() { + this.mode = 0; + this.last = false; + this.wrap = 0; + this.havedict = false; + this.flags = 0; + this.dmax = 0; + this.check = 0; + this.total = 0; + this.head = null; + this.wbits = 0; + this.wsize = 0; + this.whave = 0; + this.wnext = 0; + this.window = null; + this.hold = 0; + this.bits = 0; + this.length = 0; + this.offset = 0; + this.extra = 0; + this.lencode = null; + this.distcode = null; + this.lenbits = 0; + this.distbits = 0; + this.ncode = 0; + this.nlen = 0; + this.ndist = 0; + this.have = 0; + this.next = null; + this.lens = new utils.Buf16(320); + this.work = new utils.Buf16(288); + this.lendyn = null; + this.distdyn = null; + this.sane = 0; + this.back = 0; + this.was = 0; + } + function inflateResetKeep(strm) { + var state; + if (!strm || !strm.state) { + return Z_STREAM_ERROR; + } + state = strm.state; + strm.total_in = strm.total_out = state.total = 0; + strm.msg = ""; + if (state.wrap) { + strm.adler = state.wrap & 1; + } + state.mode = HEAD; + state.last = 0; + state.havedict = 0; + state.dmax = 32768; + state.head = null; + state.hold = 0; + state.bits = 0; + state.lencode = state.lendyn = new utils.Buf32(ENOUGH_LENS); + state.distcode = state.distdyn = new utils.Buf32(ENOUGH_DISTS); + state.sane = 1; + state.back = -1; + return Z_OK; + } + function inflateReset(strm) { + var state; + if (!strm || !strm.state) { + return Z_STREAM_ERROR; + } + state = strm.state; + state.wsize = 0; + state.whave = 0; + state.wnext = 0; + return inflateResetKeep(strm); + } + function inflateReset2(strm, windowBits) { + var wrap; + var state; + if (!strm || !strm.state) { + return Z_STREAM_ERROR; + } + state = strm.state; + if (windowBits < 0) { + wrap = 0; + windowBits = -windowBits; + } else { + wrap = (windowBits >> 4) + 1; + if (windowBits < 48) { + windowBits &= 15; + } + } + if (windowBits && (windowBits < 8 || windowBits > 15)) { + return Z_STREAM_ERROR; + } + if (state.window !== null && state.wbits !== windowBits) { + state.window = null; + } + state.wrap = wrap; + state.wbits = windowBits; + return inflateReset(strm); + } + function inflateInit2(strm, windowBits) { + var ret; + var state; + if (!strm) { + return Z_STREAM_ERROR; + } + state = new InflateState(); + strm.state = state; + state.window = null; + ret = inflateReset2(strm, windowBits); + if (ret !== Z_OK) { + strm.state = null; + } + return ret; + } + function inflateInit(strm) { + return inflateInit2(strm, DEF_WBITS); + } + var virgin = true; + var lenfix; + var distfix; + function fixedtables(state) { + if (virgin) { + var sym; + lenfix = new utils.Buf32(512); + distfix = new utils.Buf32(32); + sym = 0; + while (sym < 144) { + state.lens[sym++] = 8; + } + while (sym < 256) { + state.lens[sym++] = 9; + } + while (sym < 280) { + state.lens[sym++] = 7; + } + while (sym < 288) { + state.lens[sym++] = 8; + } + inflate_table(LENS, state.lens, 0, 288, lenfix, 0, state.work, { bits: 9 }); + sym = 0; + while (sym < 32) { + state.lens[sym++] = 5; + } + inflate_table(DISTS, state.lens, 0, 32, distfix, 0, state.work, { bits: 5 }); + virgin = false; + } + state.lencode = lenfix; + state.lenbits = 9; + state.distcode = distfix; + state.distbits = 5; + } + function updatewindow(strm, src, end, copy) { + var dist; + var state = strm.state; + if (state.window === null) { + state.wsize = 1 << state.wbits; + state.wnext = 0; + state.whave = 0; + state.window = new utils.Buf8(state.wsize); + } + if (copy >= state.wsize) { + utils.arraySet(state.window, src, end - state.wsize, state.wsize, 0); + state.wnext = 0; + state.whave = state.wsize; + } else { + dist = state.wsize - state.wnext; + if (dist > copy) { + dist = copy; + } + utils.arraySet(state.window, src, end - copy, dist, state.wnext); + copy -= dist; + if (copy) { + utils.arraySet(state.window, src, end - copy, copy, 0); + state.wnext = copy; + state.whave = state.wsize; + } else { + state.wnext += dist; + if (state.wnext === state.wsize) { + state.wnext = 0; + } + if (state.whave < state.wsize) { + state.whave += dist; + } + } + } + return 0; + } + function inflate(strm, flush) { + var state; + var input, output; + var next; + var put; + var have, left; + var hold; + var bits; + var _in, _out; + var copy; + var from; + var from_source; + var here = 0; + var here_bits, here_op, here_val; + var last_bits, last_op, last_val; + var len; + var ret; + var hbuf = new utils.Buf8(4); + var opts; + var n; + var order = ( + /* permutation of code lengths */ + [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15] + ); + if (!strm || !strm.state || !strm.output || !strm.input && strm.avail_in !== 0) { + return Z_STREAM_ERROR; + } + state = strm.state; + if (state.mode === TYPE) { + state.mode = TYPEDO; + } + put = strm.next_out; + output = strm.output; + left = strm.avail_out; + next = strm.next_in; + input = strm.input; + have = strm.avail_in; + hold = state.hold; + bits = state.bits; + _in = have; + _out = left; + ret = Z_OK; + inf_leave: + for (; ; ) { + switch (state.mode) { + case HEAD: + if (state.wrap === 0) { + state.mode = TYPEDO; + break; + } + while (bits < 16) { + if (have === 0) { + break inf_leave; + } + have--; + hold += input[next++] << bits; + bits += 8; + } + if (state.wrap & 2 && hold === 35615) { + state.check = 0; + hbuf[0] = hold & 255; + hbuf[1] = hold >>> 8 & 255; + state.check = crc32(state.check, hbuf, 2, 0); + hold = 0; + bits = 0; + state.mode = FLAGS; + break; + } + state.flags = 0; + if (state.head) { + state.head.done = false; + } + if (!(state.wrap & 1) || /* check if zlib header allowed */ + (((hold & 255) << 8) + (hold >> 8)) % 31) { + strm.msg = "incorrect header check"; + state.mode = BAD; + break; + } + if ((hold & 15) !== Z_DEFLATED) { + strm.msg = "unknown compression method"; + state.mode = BAD; + break; + } + hold >>>= 4; + bits -= 4; + len = (hold & 15) + 8; + if (state.wbits === 0) { + state.wbits = len; + } else if (len > state.wbits) { + strm.msg = "invalid window size"; + state.mode = BAD; + break; + } + state.dmax = 1 << len; + strm.adler = state.check = 1; + state.mode = hold & 512 ? DICTID : TYPE; + hold = 0; + bits = 0; + break; + case FLAGS: + while (bits < 16) { + if (have === 0) { + break inf_leave; + } + have--; + hold += input[next++] << bits; + bits += 8; + } + state.flags = hold; + if ((state.flags & 255) !== Z_DEFLATED) { + strm.msg = "unknown compression method"; + state.mode = BAD; + break; + } + if (state.flags & 57344) { + strm.msg = "unknown header flags set"; + state.mode = BAD; + break; + } + if (state.head) { + state.head.text = hold >> 8 & 1; + } + if (state.flags & 512) { + hbuf[0] = hold & 255; + hbuf[1] = hold >>> 8 & 255; + state.check = crc32(state.check, hbuf, 2, 0); + } + hold = 0; + bits = 0; + state.mode = TIME; + case TIME: + while (bits < 32) { + if (have === 0) { + break inf_leave; + } + have--; + hold += input[next++] << bits; + bits += 8; + } + if (state.head) { + state.head.time = hold; + } + if (state.flags & 512) { + hbuf[0] = hold & 255; + hbuf[1] = hold >>> 8 & 255; + hbuf[2] = hold >>> 16 & 255; + hbuf[3] = hold >>> 24 & 255; + state.check = crc32(state.check, hbuf, 4, 0); + } + hold = 0; + bits = 0; + state.mode = OS; + case OS: + while (bits < 16) { + if (have === 0) { + break inf_leave; + } + have--; + hold += input[next++] << bits; + bits += 8; + } + if (state.head) { + state.head.xflags = hold & 255; + state.head.os = hold >> 8; + } + if (state.flags & 512) { + hbuf[0] = hold & 255; + hbuf[1] = hold >>> 8 & 255; + state.check = crc32(state.check, hbuf, 2, 0); + } + hold = 0; + bits = 0; + state.mode = EXLEN; + case EXLEN: + if (state.flags & 1024) { + while (bits < 16) { + if (have === 0) { + break inf_leave; + } + have--; + hold += input[next++] << bits; + bits += 8; + } + state.length = hold; + if (state.head) { + state.head.extra_len = hold; + } + if (state.flags & 512) { + hbuf[0] = hold & 255; + hbuf[1] = hold >>> 8 & 255; + state.check = crc32(state.check, hbuf, 2, 0); + } + hold = 0; + bits = 0; + } else if (state.head) { + state.head.extra = null; + } + state.mode = EXTRA; + case EXTRA: + if (state.flags & 1024) { + copy = state.length; + if (copy > have) { + copy = have; + } + if (copy) { + if (state.head) { + len = state.head.extra_len - state.length; + if (!state.head.extra) { + state.head.extra = new Array(state.head.extra_len); + } + utils.arraySet( + state.head.extra, + input, + next, + // extra field is limited to 65536 bytes + // - no need for additional size check + copy, + /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/ + len + ); + } + if (state.flags & 512) { + state.check = crc32(state.check, input, copy, next); + } + have -= copy; + next += copy; + state.length -= copy; + } + if (state.length) { + break inf_leave; + } + } + state.length = 0; + state.mode = NAME; + case NAME: + if (state.flags & 2048) { + if (have === 0) { + break inf_leave; + } + copy = 0; + do { + len = input[next + copy++]; + if (state.head && len && state.length < 65536) { + state.head.name += String.fromCharCode(len); + } + } while (len && copy < have); + if (state.flags & 512) { + state.check = crc32(state.check, input, copy, next); + } + have -= copy; + next += copy; + if (len) { + break inf_leave; + } + } else if (state.head) { + state.head.name = null; + } + state.length = 0; + state.mode = COMMENT; + case COMMENT: + if (state.flags & 4096) { + if (have === 0) { + break inf_leave; + } + copy = 0; + do { + len = input[next + copy++]; + if (state.head && len && state.length < 65536) { + state.head.comment += String.fromCharCode(len); + } + } while (len && copy < have); + if (state.flags & 512) { + state.check = crc32(state.check, input, copy, next); + } + have -= copy; + next += copy; + if (len) { + break inf_leave; + } + } else if (state.head) { + state.head.comment = null; + } + state.mode = HCRC; + case HCRC: + if (state.flags & 512) { + while (bits < 16) { + if (have === 0) { + break inf_leave; + } + have--; + hold += input[next++] << bits; + bits += 8; + } + if (hold !== (state.check & 65535)) { + strm.msg = "header crc mismatch"; + state.mode = BAD; + break; + } + hold = 0; + bits = 0; + } + if (state.head) { + state.head.hcrc = state.flags >> 9 & 1; + state.head.done = true; + } + strm.adler = state.check = 0; + state.mode = TYPE; + break; + case DICTID: + while (bits < 32) { + if (have === 0) { + break inf_leave; + } + have--; + hold += input[next++] << bits; + bits += 8; + } + strm.adler = state.check = zswap32(hold); + hold = 0; + bits = 0; + state.mode = DICT; + case DICT: + if (state.havedict === 0) { + strm.next_out = put; + strm.avail_out = left; + strm.next_in = next; + strm.avail_in = have; + state.hold = hold; + state.bits = bits; + return Z_NEED_DICT; + } + strm.adler = state.check = 1; + state.mode = TYPE; + case TYPE: + if (flush === Z_BLOCK || flush === Z_TREES) { + break inf_leave; + } + case TYPEDO: + if (state.last) { + hold >>>= bits & 7; + bits -= bits & 7; + state.mode = CHECK; + break; + } + while (bits < 3) { + if (have === 0) { + break inf_leave; + } + have--; + hold += input[next++] << bits; + bits += 8; + } + state.last = hold & 1; + hold >>>= 1; + bits -= 1; + switch (hold & 3) { + case 0: + state.mode = STORED; + break; + case 1: + fixedtables(state); + state.mode = LEN_; + if (flush === Z_TREES) { + hold >>>= 2; + bits -= 2; + break inf_leave; + } + break; + case 2: + state.mode = TABLE; + break; + case 3: + strm.msg = "invalid block type"; + state.mode = BAD; + } + hold >>>= 2; + bits -= 2; + break; + case STORED: + hold >>>= bits & 7; + bits -= bits & 7; + while (bits < 32) { + if (have === 0) { + break inf_leave; + } + have--; + hold += input[next++] << bits; + bits += 8; + } + if ((hold & 65535) !== (hold >>> 16 ^ 65535)) { + strm.msg = "invalid stored block lengths"; + state.mode = BAD; + break; + } + state.length = hold & 65535; + hold = 0; + bits = 0; + state.mode = COPY_; + if (flush === Z_TREES) { + break inf_leave; + } + case COPY_: + state.mode = COPY; + case COPY: + copy = state.length; + if (copy) { + if (copy > have) { + copy = have; + } + if (copy > left) { + copy = left; + } + if (copy === 0) { + break inf_leave; + } + utils.arraySet(output, input, next, copy, put); + have -= copy; + next += copy; + left -= copy; + put += copy; + state.length -= copy; + break; + } + state.mode = TYPE; + break; + case TABLE: + while (bits < 14) { + if (have === 0) { + break inf_leave; + } + have--; + hold += input[next++] << bits; + bits += 8; + } + state.nlen = (hold & 31) + 257; + hold >>>= 5; + bits -= 5; + state.ndist = (hold & 31) + 1; + hold >>>= 5; + bits -= 5; + state.ncode = (hold & 15) + 4; + hold >>>= 4; + bits -= 4; + if (state.nlen > 286 || state.ndist > 30) { + strm.msg = "too many length or distance symbols"; + state.mode = BAD; + break; + } + state.have = 0; + state.mode = LENLENS; + case LENLENS: + while (state.have < state.ncode) { + while (bits < 3) { + if (have === 0) { + break inf_leave; + } + have--; + hold += input[next++] << bits; + bits += 8; + } + state.lens[order[state.have++]] = hold & 7; + hold >>>= 3; + bits -= 3; + } + while (state.have < 19) { + state.lens[order[state.have++]] = 0; + } + state.lencode = state.lendyn; + state.lenbits = 7; + opts = { bits: state.lenbits }; + ret = inflate_table(CODES, state.lens, 0, 19, state.lencode, 0, state.work, opts); + state.lenbits = opts.bits; + if (ret) { + strm.msg = "invalid code lengths set"; + state.mode = BAD; + break; + } + state.have = 0; + state.mode = CODELENS; + case CODELENS: + while (state.have < state.nlen + state.ndist) { + for (; ; ) { + here = state.lencode[hold & (1 << state.lenbits) - 1]; + here_bits = here >>> 24; + here_op = here >>> 16 & 255; + here_val = here & 65535; + if (here_bits <= bits) { + break; + } + if (have === 0) { + break inf_leave; + } + have--; + hold += input[next++] << bits; + bits += 8; + } + if (here_val < 16) { + hold >>>= here_bits; + bits -= here_bits; + state.lens[state.have++] = here_val; + } else { + if (here_val === 16) { + n = here_bits + 2; + while (bits < n) { + if (have === 0) { + break inf_leave; + } + have--; + hold += input[next++] << bits; + bits += 8; + } + hold >>>= here_bits; + bits -= here_bits; + if (state.have === 0) { + strm.msg = "invalid bit length repeat"; + state.mode = BAD; + break; + } + len = state.lens[state.have - 1]; + copy = 3 + (hold & 3); + hold >>>= 2; + bits -= 2; + } else if (here_val === 17) { + n = here_bits + 3; + while (bits < n) { + if (have === 0) { + break inf_leave; + } + have--; + hold += input[next++] << bits; + bits += 8; + } + hold >>>= here_bits; + bits -= here_bits; + len = 0; + copy = 3 + (hold & 7); + hold >>>= 3; + bits -= 3; + } else { + n = here_bits + 7; + while (bits < n) { + if (have === 0) { + break inf_leave; + } + have--; + hold += input[next++] << bits; + bits += 8; + } + hold >>>= here_bits; + bits -= here_bits; + len = 0; + copy = 11 + (hold & 127); + hold >>>= 7; + bits -= 7; + } + if (state.have + copy > state.nlen + state.ndist) { + strm.msg = "invalid bit length repeat"; + state.mode = BAD; + break; + } + while (copy--) { + state.lens[state.have++] = len; + } + } + } + if (state.mode === BAD) { + break; + } + if (state.lens[256] === 0) { + strm.msg = "invalid code -- missing end-of-block"; + state.mode = BAD; + break; + } + state.lenbits = 9; + opts = { bits: state.lenbits }; + ret = inflate_table(LENS, state.lens, 0, state.nlen, state.lencode, 0, state.work, opts); + state.lenbits = opts.bits; + if (ret) { + strm.msg = "invalid literal/lengths set"; + state.mode = BAD; + break; + } + state.distbits = 6; + state.distcode = state.distdyn; + opts = { bits: state.distbits }; + ret = inflate_table(DISTS, state.lens, state.nlen, state.ndist, state.distcode, 0, state.work, opts); + state.distbits = opts.bits; + if (ret) { + strm.msg = "invalid distances set"; + state.mode = BAD; + break; + } + state.mode = LEN_; + if (flush === Z_TREES) { + break inf_leave; + } + case LEN_: + state.mode = LEN; + case LEN: + if (have >= 6 && left >= 258) { + strm.next_out = put; + strm.avail_out = left; + strm.next_in = next; + strm.avail_in = have; + state.hold = hold; + state.bits = bits; + inflate_fast(strm, _out); + put = strm.next_out; + output = strm.output; + left = strm.avail_out; + next = strm.next_in; + input = strm.input; + have = strm.avail_in; + hold = state.hold; + bits = state.bits; + if (state.mode === TYPE) { + state.back = -1; + } + break; + } + state.back = 0; + for (; ; ) { + here = state.lencode[hold & (1 << state.lenbits) - 1]; + here_bits = here >>> 24; + here_op = here >>> 16 & 255; + here_val = here & 65535; + if (here_bits <= bits) { + break; + } + if (have === 0) { + break inf_leave; + } + have--; + hold += input[next++] << bits; + bits += 8; + } + if (here_op && (here_op & 240) === 0) { + last_bits = here_bits; + last_op = here_op; + last_val = here_val; + for (; ; ) { + here = state.lencode[last_val + ((hold & (1 << last_bits + last_op) - 1) >> last_bits)]; + here_bits = here >>> 24; + here_op = here >>> 16 & 255; + here_val = here & 65535; + if (last_bits + here_bits <= bits) { + break; + } + if (have === 0) { + break inf_leave; + } + have--; + hold += input[next++] << bits; + bits += 8; + } + hold >>>= last_bits; + bits -= last_bits; + state.back += last_bits; + } + hold >>>= here_bits; + bits -= here_bits; + state.back += here_bits; + state.length = here_val; + if (here_op === 0) { + state.mode = LIT; + break; + } + if (here_op & 32) { + state.back = -1; + state.mode = TYPE; + break; + } + if (here_op & 64) { + strm.msg = "invalid literal/length code"; + state.mode = BAD; + break; + } + state.extra = here_op & 15; + state.mode = LENEXT; + case LENEXT: + if (state.extra) { + n = state.extra; + while (bits < n) { + if (have === 0) { + break inf_leave; + } + have--; + hold += input[next++] << bits; + bits += 8; + } + state.length += hold & (1 << state.extra) - 1; + hold >>>= state.extra; + bits -= state.extra; + state.back += state.extra; + } + state.was = state.length; + state.mode = DIST; + case DIST: + for (; ; ) { + here = state.distcode[hold & (1 << state.distbits) - 1]; + here_bits = here >>> 24; + here_op = here >>> 16 & 255; + here_val = here & 65535; + if (here_bits <= bits) { + break; + } + if (have === 0) { + break inf_leave; + } + have--; + hold += input[next++] << bits; + bits += 8; + } + if ((here_op & 240) === 0) { + last_bits = here_bits; + last_op = here_op; + last_val = here_val; + for (; ; ) { + here = state.distcode[last_val + ((hold & (1 << last_bits + last_op) - 1) >> last_bits)]; + here_bits = here >>> 24; + here_op = here >>> 16 & 255; + here_val = here & 65535; + if (last_bits + here_bits <= bits) { + break; + } + if (have === 0) { + break inf_leave; + } + have--; + hold += input[next++] << bits; + bits += 8; + } + hold >>>= last_bits; + bits -= last_bits; + state.back += last_bits; + } + hold >>>= here_bits; + bits -= here_bits; + state.back += here_bits; + if (here_op & 64) { + strm.msg = "invalid distance code"; + state.mode = BAD; + break; + } + state.offset = here_val; + state.extra = here_op & 15; + state.mode = DISTEXT; + case DISTEXT: + if (state.extra) { + n = state.extra; + while (bits < n) { + if (have === 0) { + break inf_leave; + } + have--; + hold += input[next++] << bits; + bits += 8; + } + state.offset += hold & (1 << state.extra) - 1; + hold >>>= state.extra; + bits -= state.extra; + state.back += state.extra; + } + if (state.offset > state.dmax) { + strm.msg = "invalid distance too far back"; + state.mode = BAD; + break; + } + state.mode = MATCH; + case MATCH: + if (left === 0) { + break inf_leave; + } + copy = _out - left; + if (state.offset > copy) { + copy = state.offset - copy; + if (copy > state.whave) { + if (state.sane) { + strm.msg = "invalid distance too far back"; + state.mode = BAD; + break; + } + } + if (copy > state.wnext) { + copy -= state.wnext; + from = state.wsize - copy; + } else { + from = state.wnext - copy; + } + if (copy > state.length) { + copy = state.length; + } + from_source = state.window; + } else { + from_source = output; + from = put - state.offset; + copy = state.length; + } + if (copy > left) { + copy = left; + } + left -= copy; + state.length -= copy; + do { + output[put++] = from_source[from++]; + } while (--copy); + if (state.length === 0) { + state.mode = LEN; + } + break; + case LIT: + if (left === 0) { + break inf_leave; + } + output[put++] = state.length; + left--; + state.mode = LEN; + break; + case CHECK: + if (state.wrap) { + while (bits < 32) { + if (have === 0) { + break inf_leave; + } + have--; + hold |= input[next++] << bits; + bits += 8; + } + _out -= left; + strm.total_out += _out; + state.total += _out; + if (_out) { + strm.adler = state.check = /*UPDATE(state.check, put - _out, _out);*/ + state.flags ? crc32(state.check, output, _out, put - _out) : adler32(state.check, output, _out, put - _out); + } + _out = left; + if ((state.flags ? hold : zswap32(hold)) !== state.check) { + strm.msg = "incorrect data check"; + state.mode = BAD; + break; + } + hold = 0; + bits = 0; + } + state.mode = LENGTH; + case LENGTH: + if (state.wrap && state.flags) { + while (bits < 32) { + if (have === 0) { + break inf_leave; + } + have--; + hold += input[next++] << bits; + bits += 8; + } + if (hold !== (state.total & 4294967295)) { + strm.msg = "incorrect length check"; + state.mode = BAD; + break; + } + hold = 0; + bits = 0; + } + state.mode = DONE; + case DONE: + ret = Z_STREAM_END; + break inf_leave; + case BAD: + ret = Z_DATA_ERROR; + break inf_leave; + case MEM: + return Z_MEM_ERROR; + case SYNC: + default: + return Z_STREAM_ERROR; + } + } + strm.next_out = put; + strm.avail_out = left; + strm.next_in = next; + strm.avail_in = have; + state.hold = hold; + state.bits = bits; + if (state.wsize || _out !== strm.avail_out && state.mode < BAD && (state.mode < CHECK || flush !== Z_FINISH)) { + if (updatewindow(strm, strm.output, strm.next_out, _out - strm.avail_out)) { + state.mode = MEM; + return Z_MEM_ERROR; + } + } + _in -= strm.avail_in; + _out -= strm.avail_out; + strm.total_in += _in; + strm.total_out += _out; + state.total += _out; + if (state.wrap && _out) { + strm.adler = state.check = /*UPDATE(state.check, strm.next_out - _out, _out);*/ + state.flags ? crc32(state.check, output, _out, strm.next_out - _out) : adler32(state.check, output, _out, strm.next_out - _out); + } + strm.data_type = state.bits + (state.last ? 64 : 0) + (state.mode === TYPE ? 128 : 0) + (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0); + if ((_in === 0 && _out === 0 || flush === Z_FINISH) && ret === Z_OK) { + ret = Z_BUF_ERROR; + } + return ret; + } + function inflateEnd(strm) { + if (!strm || !strm.state) { + return Z_STREAM_ERROR; + } + var state = strm.state; + if (state.window) { + state.window = null; + } + strm.state = null; + return Z_OK; + } + function inflateGetHeader(strm, head) { + var state; + if (!strm || !strm.state) { + return Z_STREAM_ERROR; + } + state = strm.state; + if ((state.wrap & 2) === 0) { + return Z_STREAM_ERROR; + } + state.head = head; + head.done = false; + return Z_OK; + } + function inflateSetDictionary(strm, dictionary) { + var dictLength = dictionary.length; + var state; + var dictid; + var ret; + if (!strm || !strm.state) { + return Z_STREAM_ERROR; + } + state = strm.state; + if (state.wrap !== 0 && state.mode !== DICT) { + return Z_STREAM_ERROR; + } + if (state.mode === DICT) { + dictid = 1; + dictid = adler32(dictid, dictionary, dictLength, 0); + if (dictid !== state.check) { + return Z_DATA_ERROR; + } + } + ret = updatewindow(strm, dictionary, dictLength, dictLength); + if (ret) { + state.mode = MEM; + return Z_MEM_ERROR; + } + state.havedict = 1; + return Z_OK; + } + exports.inflateReset = inflateReset; + exports.inflateReset2 = inflateReset2; + exports.inflateResetKeep = inflateResetKeep; + exports.inflateInit = inflateInit; + exports.inflateInit2 = inflateInit2; + exports.inflate = inflate; + exports.inflateEnd = inflateEnd; + exports.inflateGetHeader = inflateGetHeader; + exports.inflateSetDictionary = inflateSetDictionary; + exports.inflateInfo = "pako inflate (from Nodeca project)"; + } +}); + +// node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/constants.js +var require_constants = __commonJS({ + "node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/constants.js"(exports, module2) { + "use strict"; + module2.exports = { + /* Allowed flush values; see deflate() and inflate() below for details */ + Z_NO_FLUSH: 0, + Z_PARTIAL_FLUSH: 1, + Z_SYNC_FLUSH: 2, + Z_FULL_FLUSH: 3, + Z_FINISH: 4, + Z_BLOCK: 5, + Z_TREES: 6, + /* Return codes for the compression/decompression functions. Negative values + * are errors, positive values are used for special but normal events. + */ + Z_OK: 0, + Z_STREAM_END: 1, + Z_NEED_DICT: 2, + Z_ERRNO: -1, + Z_STREAM_ERROR: -2, + Z_DATA_ERROR: -3, + //Z_MEM_ERROR: -4, + Z_BUF_ERROR: -5, + //Z_VERSION_ERROR: -6, + /* compression levels */ + Z_NO_COMPRESSION: 0, + Z_BEST_SPEED: 1, + Z_BEST_COMPRESSION: 9, + Z_DEFAULT_COMPRESSION: -1, + Z_FILTERED: 1, + Z_HUFFMAN_ONLY: 2, + Z_RLE: 3, + Z_FIXED: 4, + Z_DEFAULT_STRATEGY: 0, + /* Possible values of the data_type field (though see inflate()) */ + Z_BINARY: 0, + Z_TEXT: 1, + //Z_ASCII: 1, // = Z_TEXT (deprecated) + Z_UNKNOWN: 2, + /* The deflate compression method */ + Z_DEFLATED: 8 + //Z_NULL: null // Use -1 or null inline, depending on var type + }; + } +}); + +// node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/gzheader.js +var require_gzheader = __commonJS({ + "node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/zlib/gzheader.js"(exports, module2) { + "use strict"; + function GZheader() { + this.text = 0; + this.time = 0; + this.xflags = 0; + this.os = 0; + this.extra = null; + this.extra_len = 0; + this.name = ""; + this.comment = ""; + this.hcrc = 0; + this.done = false; + } + module2.exports = GZheader; + } +}); + +// node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/inflate.js +var require_inflate2 = __commonJS({ + "node_modules/.pnpm/pako@1.0.11/node_modules/pako/lib/inflate.js"(exports) { + "use strict"; + var zlib_inflate = require_inflate(); + var utils = require_common(); + var strings = require_strings(); + var c = require_constants(); + var msg = require_messages(); + var ZStream = require_zstream(); + var GZheader = require_gzheader(); + var toString = Object.prototype.toString; + function Inflate(options) { + if (!(this instanceof Inflate)) return new Inflate(options); + this.options = utils.assign({ + chunkSize: 16384, + windowBits: 0, + to: "" + }, options || {}); + var opt = this.options; + if (opt.raw && opt.windowBits >= 0 && opt.windowBits < 16) { + opt.windowBits = -opt.windowBits; + if (opt.windowBits === 0) { + opt.windowBits = -15; + } + } + if (opt.windowBits >= 0 && opt.windowBits < 16 && !(options && options.windowBits)) { + opt.windowBits += 32; + } + if (opt.windowBits > 15 && opt.windowBits < 48) { + if ((opt.windowBits & 15) === 0) { + opt.windowBits |= 15; + } + } + this.err = 0; + this.msg = ""; + this.ended = false; + this.chunks = []; + this.strm = new ZStream(); + this.strm.avail_out = 0; + var status = zlib_inflate.inflateInit2( + this.strm, + opt.windowBits + ); + if (status !== c.Z_OK) { + throw new Error(msg[status]); + } + this.header = new GZheader(); + zlib_inflate.inflateGetHeader(this.strm, this.header); + if (opt.dictionary) { + if (typeof opt.dictionary === "string") { + opt.dictionary = strings.string2buf(opt.dictionary); + } else if (toString.call(opt.dictionary) === "[object ArrayBuffer]") { + opt.dictionary = new Uint8Array(opt.dictionary); + } + if (opt.raw) { + status = zlib_inflate.inflateSetDictionary(this.strm, opt.dictionary); + if (status !== c.Z_OK) { + throw new Error(msg[status]); + } + } + } + } + Inflate.prototype.push = function(data, mode) { + var strm = this.strm; + var chunkSize = this.options.chunkSize; + var dictionary = this.options.dictionary; + var status, _mode; + var next_out_utf8, tail, utf8str; + var allowBufError = false; + if (this.ended) { + return false; + } + _mode = mode === ~~mode ? mode : mode === true ? c.Z_FINISH : c.Z_NO_FLUSH; + if (typeof data === "string") { + strm.input = strings.binstring2buf(data); + } else if (toString.call(data) === "[object ArrayBuffer]") { + strm.input = new Uint8Array(data); + } else { + strm.input = data; + } + strm.next_in = 0; + strm.avail_in = strm.input.length; + do { + if (strm.avail_out === 0) { + strm.output = new utils.Buf8(chunkSize); + strm.next_out = 0; + strm.avail_out = chunkSize; + } + status = zlib_inflate.inflate(strm, c.Z_NO_FLUSH); + if (status === c.Z_NEED_DICT && dictionary) { + status = zlib_inflate.inflateSetDictionary(this.strm, dictionary); + } + if (status === c.Z_BUF_ERROR && allowBufError === true) { + status = c.Z_OK; + allowBufError = false; + } + if (status !== c.Z_STREAM_END && status !== c.Z_OK) { + this.onEnd(status); + this.ended = true; + return false; + } + if (strm.next_out) { + if (strm.avail_out === 0 || status === c.Z_STREAM_END || strm.avail_in === 0 && (_mode === c.Z_FINISH || _mode === c.Z_SYNC_FLUSH)) { + if (this.options.to === "string") { + next_out_utf8 = strings.utf8border(strm.output, strm.next_out); + tail = strm.next_out - next_out_utf8; + utf8str = strings.buf2string(strm.output, next_out_utf8); + strm.next_out = tail; + strm.avail_out = chunkSize - tail; + if (tail) { + utils.arraySet(strm.output, strm.output, next_out_utf8, tail, 0); + } + this.onData(utf8str); + } else { + this.onData(utils.shrinkBuf(strm.output, strm.next_out)); + } + } + } + if (strm.avail_in === 0 && strm.avail_out === 0) { + allowBufError = true; + } + } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== c.Z_STREAM_END); + if (status === c.Z_STREAM_END) { + _mode = c.Z_FINISH; + } + if (_mode === c.Z_FINISH) { + status = zlib_inflate.inflateEnd(this.strm); + this.onEnd(status); + this.ended = true; + return status === c.Z_OK; + } + if (_mode === c.Z_SYNC_FLUSH) { + this.onEnd(c.Z_OK); + strm.avail_out = 0; + return true; + } + return true; + }; + Inflate.prototype.onData = function(chunk) { + this.chunks.push(chunk); + }; + Inflate.prototype.onEnd = function(status) { + if (status === c.Z_OK) { + if (this.options.to === "string") { + this.result = this.chunks.join(""); + } else { + this.result = utils.flattenChunks(this.chunks); + } + } + this.chunks = []; + this.err = status; + this.msg = this.strm.msg; + }; + function inflate(input, options) { + var inflator = new Inflate(options); + inflator.push(input, true); + if (inflator.err) { + throw inflator.msg || msg[inflator.err]; + } + return inflator.result; + } + function inflateRaw(input, options) { + options = options || {}; + options.raw = true; + return inflate(input, options); + } + exports.Inflate = Inflate; + exports.inflate = inflate; + exports.inflateRaw = inflateRaw; + exports.ungzip = inflate; + } +}); + +// node_modules/.pnpm/pako@1.0.11/node_modules/pako/index.js +var require_pako = __commonJS({ + "node_modules/.pnpm/pako@1.0.11/node_modules/pako/index.js"(exports, module2) { + "use strict"; + var assign = require_common().assign; + var deflate = require_deflate2(); + var inflate = require_inflate2(); + var constants = require_constants(); + var pako5 = {}; + assign(pako5, deflate, inflate, constants); + module2.exports = pako5; + } +}); + +// src/main.ts +var main_exports = {}; +__export(main_exports, { + default: () => BetterExportPdfPlugin +}); +module.exports = __toCommonJS(main_exports); +var import_obsidian5 = require("obsidian"); + +// src/i18n/index.ts +var import_deepmerge = __toESM(require_cjs()); + +// src/i18n/en.ts +var en_default = { + exportCurrentFile: "Export current file to PDF", + exportCurrentFileWithPrevious: "Export to PDF with previous Settings", + exportDialog: { + filenameAsTitle: "Include file name as title", + pageSize: "Page Size", + margin: "Margin", + downscalePercent: "Downscale Percent", + landscape: "Landscape", + displayHeader: "Display Header", + displayFooter: "Display Footer", + openAfterExport: "Open after export", + cssSnippets: "CSS snippets" + }, + settings: { + showTitle: "Add file name as title", + displayHeader: "Display headers", + displayFooter: "Display footer", + printBackground: "Print background", + maxLevel: "Max headings level of the outline", + displayMetadata: "PDF metadata", + headerTemplate: "Header Template", + footerTemplate: "Footer Template", + isTimestamp: "Add timestamp", + enabledCss: "Enable select css snippets", + debugMode: "Debug Mode" + } +}; + +// src/i18n/zh.ts +var zh_default = { + exportCurrentFile: "\u5BFC\u51FA\u5F53\u524D\u6587\u4EF6\u4E3APDF", + exportCurrentFileWithPrevious: "\u4F7F\u7528\u4E0A\u4E00\u6B21\u8BBE\u7F6E\u5BFC\u51FA\u4E3APDF", + exportDialog: { + filenameAsTitle: "\u5C06\u7B14\u8BB0\u540D\u4F5C\u4E3A\u6807\u9898", + pageSize: "\u7EB8\u5F20\u5C3A\u5BF8", + margin: "\u9875\u8FB9\u8DDD", + downscalePercent: "\u7F29\u653E", + landscape: "\u6A2A\u5411\u6253\u5370", + displayHeader: "\u9875\u7709", + displayFooter: "\u9875\u811A", + openAfterExport: "\u5BFC\u51FA\u540E\u6253\u5F00", + cssSnippets: "CSS\u4EE3\u7801\u7247\u6BB5" + }, + settings: { + showTitle: "\u5C06\u7B14\u8BB0\u540D\u4F5C\u4E3A\u6807\u9898", + displayHeader: "\u663E\u793A\u9875\u7709", + displayFooter: "\u663E\u793A\u9875\u811A", + printBackground: "\u6253\u5370\u80CC\u666F", + maxLevel: "\u6700\u5927\u6807\u9898\u7EA7\u522B", + displayMetadata: "PDF\u5143\u6570\u636E", + headerTemplate: "\u9875\u7709\u6A21\u677F", + footerTemplate: "\u9875\u811A\u6A21\u677F", + isTimestamp: "\u6587\u4EF6\u540D\u6DFB\u52A0\u65F6\u95F4\u6233", + enabledCss: "\u542F\u7528CSS\u7247\u6BB5\u9009\u62E9", + debugMode: "\u8C03\u8BD5\u6A21\u5F0F" + } +}; + +// src/i18n/index.ts +var i18n_default = { + i18n: { + en: en_default, + zh: zh_default + }, + get current() { + var _a, _b; + const lang = (_a = window.localStorage.getItem("language")) != null ? _a : "en"; + return (0, import_deepmerge.default)(this.i18n.en, (_b = this.i18n[lang]) != null ? _b : {}); + } +}; + +// src/modal.ts +var fs2 = __toESM(require("fs/promises")); +var import_obsidian3 = require("obsidian"); +var import_path = __toESM(require("path")); + +// src/constant.ts +var PageSize = { + A0: [841, 1189], + A1: [594, 841], + A2: [420, 594], + A3: [297, 420], + A4: [210, 297], + A5: [148, 210], + A6: [105, 148], + Legal: [216, 356], + Letter: [216, 279], + Tabloid: [279, 432], + Ledger: [432, 279] +}; + +// src/pdf.ts +var import_electron = __toESM(require("electron")); +var fs = __toESM(require("fs/promises")); + +// node_modules/.pnpm/tslib@1.14.1/node_modules/tslib/tslib.es6.js +var extendStatics = function(d, b) { + extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) { + d2.__proto__ = b2; + } || function(d2, b2) { + for (var p in b2) if (b2.hasOwnProperty(p)) d2[p] = b2[p]; + }; + return extendStatics(d, b); +}; +function __extends(d, b) { + extendStatics(d, b); + function __() { + this.constructor = d; + } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); +} +var __assign = function() { + __assign = Object.assign || function __assign2(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); +}; +function __rest(s, e) { + var t = {}; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) + t[p] = s[p]; + if (s != null && typeof Object.getOwnPropertySymbols === "function") + for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { + if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) + t[p[i]] = s[p[i]]; + } + return t; +} +function __awaiter(thisArg, _arguments, P, generator) { + function adopt(value) { + return value instanceof P ? value : new P(function(resolve) { + resolve(value); + }); + } + return new (P || (P = Promise))(function(resolve, reject) { + function fulfilled(value) { + try { + step(generator.next(value)); + } catch (e) { + reject(e); + } + } + function rejected(value) { + try { + step(generator["throw"](value)); + } catch (e) { + reject(e); + } + } + function step(result) { + result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); + } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +} +function __generator(thisArg, body) { + var _ = { label: 0, sent: function() { + if (t[0] & 1) throw t[1]; + return t[1]; + }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { + return this; + }), g; + function verb(n) { + return function(v) { + return step([n, v]); + }; + } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: + case 1: + t = op; + break; + case 4: + _.label++; + return { value: op[1], done: false }; + case 5: + _.label++; + y = op[1]; + op = [0]; + continue; + case 7: + op = _.ops.pop(); + _.trys.pop(); + continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { + _ = 0; + continue; + } + if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) { + _.label = op[1]; + break; + } + if (op[0] === 6 && _.label < t[1]) { + _.label = t[1]; + t = op; + break; + } + if (t && _.label < t[2]) { + _.label = t[2]; + _.ops.push(op); + break; + } + if (t[2]) _.ops.pop(); + _.trys.pop(); + continue; + } + op = body.call(thisArg, _); + } catch (e) { + op = [6, e]; + y = 0; + } finally { + f = t = 0; + } + if (op[0] & 5) throw op[1]; + return { value: op[0] ? op[1] : void 0, done: true }; + } +} +function __spreadArrays() { + for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length; + for (var r = Array(s), k = 0, i = 0; i < il; i++) + for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) + r[k] = a[j]; + return r; +} + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/utils/base64.js +var chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; +var lookup = new Uint8Array(256); +for (i = 0; i < chars.length; i++) { + lookup[chars.charCodeAt(i)] = i; +} +var i; +var encodeToBase64 = function(bytes) { + var base64 = ""; + var len = bytes.length; + for (var i = 0; i < len; i += 3) { + base64 += chars[bytes[i] >> 2]; + base64 += chars[(bytes[i] & 3) << 4 | bytes[i + 1] >> 4]; + base64 += chars[(bytes[i + 1] & 15) << 2 | bytes[i + 2] >> 6]; + base64 += chars[bytes[i + 2] & 63]; + } + if (len % 3 === 2) { + base64 = base64.substring(0, base64.length - 1) + "="; + } else if (len % 3 === 1) { + base64 = base64.substring(0, base64.length - 2) + "=="; + } + return base64; +}; +var decodeFromBase64 = function(base64) { + var bufferLength = base64.length * 0.75; + var len = base64.length; + var i; + var p = 0; + var encoded1; + var encoded2; + var encoded3; + var encoded4; + if (base64[base64.length - 1] === "=") { + bufferLength--; + if (base64[base64.length - 2] === "=") { + bufferLength--; + } + } + var bytes = new Uint8Array(bufferLength); + for (i = 0; i < len; i += 4) { + encoded1 = lookup[base64.charCodeAt(i)]; + encoded2 = lookup[base64.charCodeAt(i + 1)]; + encoded3 = lookup[base64.charCodeAt(i + 2)]; + encoded4 = lookup[base64.charCodeAt(i + 3)]; + bytes[p++] = encoded1 << 2 | encoded2 >> 4; + bytes[p++] = (encoded2 & 15) << 4 | encoded3 >> 2; + bytes[p++] = (encoded3 & 3) << 6 | encoded4 & 63; + } + return bytes; +}; +var DATA_URI_PREFIX_REGEX = /^(data)?:?([\w\/\+]+)?;?(charset=[\w-]+|base64)?.*,/i; +var decodeFromBase64DataUri = function(dataUri) { + var trimmedUri = dataUri.trim(); + var prefix = trimmedUri.substring(0, 100); + var res = prefix.match(DATA_URI_PREFIX_REGEX); + if (!res) + return decodeFromBase64(trimmedUri); + var fullMatch = res[0]; + var data = trimmedUri.substring(fullMatch.length); + return decodeFromBase64(data); +}; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/utils/strings.js +var toCharCode = function(character) { + return character.charCodeAt(0); +}; +var toCodePoint = function(character) { + return character.codePointAt(0); +}; +var toHexStringOfMinLength = function(num, minLength) { + return padStart(num.toString(16), minLength, "0").toUpperCase(); +}; +var toHexString = function(num) { + return toHexStringOfMinLength(num, 2); +}; +var charFromCode = function(code) { + return String.fromCharCode(code); +}; +var charFromHexCode = function(hex) { + return charFromCode(parseInt(hex, 16)); +}; +var padStart = function(value, length, padChar) { + var padding = ""; + for (var idx = 0, len = length - value.length; idx < len; idx++) { + padding += padChar; + } + return padding + value; +}; +var copyStringIntoBuffer = function(str, buffer, offset) { + var length = str.length; + for (var idx = 0; idx < length; idx++) { + buffer[offset++] = str.charCodeAt(idx); + } + return length; +}; +var escapeRegExp = function(str) { + return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); +}; +var cleanText = function(text) { + return text.replace(/\t|\u0085|\u2028|\u2029/g, " ").replace(/[\b\v]/g, ""); +}; +var escapedNewlineChars = ["\\n", "\\f", "\\r", "\\u000B"]; +var isNewlineChar = function(text) { + return /^[\n\f\r\u000B]$/.test(text); +}; +var lineSplit = function(text) { + return text.split(/[\n\f\r\u000B]/); +}; +var mergeLines = function(text) { + return text.replace(/[\n\f\r\u000B]/g, " "); +}; +var charAtIndex = function(text, index) { + var cuFirst = text.charCodeAt(index); + var cuSecond; + var nextIndex = index + 1; + var length = 1; + if ( + // Check if it's the start of a surrogate pair. + cuFirst >= 55296 && cuFirst <= 56319 && // high surrogate + text.length > nextIndex + ) { + cuSecond = text.charCodeAt(nextIndex); + if (cuSecond >= 56320 && cuSecond <= 57343) + length = 2; + } + return [text.slice(index, index + length), length]; +}; +var charSplit = function(text) { + var chars3 = []; + for (var idx = 0, len = text.length; idx < len; ) { + var _a = charAtIndex(text, idx), c = _a[0], cLen = _a[1]; + chars3.push(c); + idx += cLen; + } + return chars3; +}; +var buildWordBreakRegex = function(wordBreaks) { + var newlineCharUnion = escapedNewlineChars.join("|"); + var escapedRules = ["$"]; + for (var idx = 0, len = wordBreaks.length; idx < len; idx++) { + var wordBreak = wordBreaks[idx]; + if (isNewlineChar(wordBreak)) { + throw new TypeError("`wordBreak` must not include " + newlineCharUnion); + } + escapedRules.push(wordBreak === "" ? "." : escapeRegExp(wordBreak)); + } + var breakRules = escapedRules.join("|"); + return new RegExp("(" + newlineCharUnion + ")|((.*?)(" + breakRules + "))", "gm"); +}; +var breakTextIntoLines = function(text, wordBreaks, maxWidth, computeWidthOfText) { + var regex = buildWordBreakRegex(wordBreaks); + var words = cleanText(text).match(regex); + var currLine = ""; + var currWidth = 0; + var lines = []; + var pushCurrLine = function() { + if (currLine !== "") + lines.push(currLine); + currLine = ""; + currWidth = 0; + }; + for (var idx = 0, len = words.length; idx < len; idx++) { + var word = words[idx]; + if (isNewlineChar(word)) { + pushCurrLine(); + } else { + var width = computeWidthOfText(word); + if (currWidth + width > maxWidth) + pushCurrLine(); + currLine += word; + currWidth += width; + } + } + pushCurrLine(); + return lines; +}; +var dateRegex = /^D:(\d\d\d\d)(\d\d)?(\d\d)?(\d\d)?(\d\d)?(\d\d)?([+\-Z])?(\d\d)?'?(\d\d)?'?$/; +var parseDate = function(dateStr) { + var match = dateStr.match(dateRegex); + if (!match) + return void 0; + var year = match[1], _a = match[2], month = _a === void 0 ? "01" : _a, _b = match[3], day = _b === void 0 ? "01" : _b, _c = match[4], hours = _c === void 0 ? "00" : _c, _d = match[5], mins = _d === void 0 ? "00" : _d, _e = match[6], secs = _e === void 0 ? "00" : _e, _f = match[7], offsetSign = _f === void 0 ? "Z" : _f, _g = match[8], offsetHours = _g === void 0 ? "00" : _g, _h = match[9], offsetMins = _h === void 0 ? "00" : _h; + var tzOffset = offsetSign === "Z" ? "Z" : "" + offsetSign + offsetHours + ":" + offsetMins; + var date = /* @__PURE__ */ new Date(year + "-" + month + "-" + day + "T" + hours + ":" + mins + ":" + secs + tzOffset); + return date; +}; +var findLastMatch = function(value, regex) { + var _a; + var position = 0; + var lastMatch; + while (position < value.length) { + var match = value.substring(position).match(regex); + if (!match) + return { match: lastMatch, pos: position }; + lastMatch = match; + position += ((_a = match.index) !== null && _a !== void 0 ? _a : 0) + match[0].length; + } + return { match: lastMatch, pos: position }; +}; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/utils/arrays.js +var last = function(array) { + return array[array.length - 1]; +}; +var typedArrayFor = function(value) { + if (value instanceof Uint8Array) + return value; + var length = value.length; + var typedArray = new Uint8Array(length); + for (var idx = 0; idx < length; idx++) { + typedArray[idx] = value.charCodeAt(idx); + } + return typedArray; +}; +var mergeIntoTypedArray = function() { + var arrays = []; + for (var _i = 0; _i < arguments.length; _i++) { + arrays[_i] = arguments[_i]; + } + var arrayCount = arrays.length; + var typedArrays = []; + for (var idx = 0; idx < arrayCount; idx++) { + var element = arrays[idx]; + typedArrays[idx] = element instanceof Uint8Array ? element : typedArrayFor(element); + } + var totalSize = 0; + for (var idx = 0; idx < arrayCount; idx++) { + totalSize += arrays[idx].length; + } + var merged = new Uint8Array(totalSize); + var offset = 0; + for (var arrIdx = 0; arrIdx < arrayCount; arrIdx++) { + var arr = typedArrays[arrIdx]; + for (var byteIdx = 0, arrLen = arr.length; byteIdx < arrLen; byteIdx++) { + merged[offset++] = arr[byteIdx]; + } + } + return merged; +}; +var mergeUint8Arrays = function(arrays) { + var totalSize = 0; + for (var idx = 0, len = arrays.length; idx < len; idx++) { + totalSize += arrays[idx].length; + } + var mergedBuffer = new Uint8Array(totalSize); + var offset = 0; + for (var idx = 0, len = arrays.length; idx < len; idx++) { + var array = arrays[idx]; + mergedBuffer.set(array, offset); + offset += array.length; + } + return mergedBuffer; +}; +var arrayAsString = function(array) { + var str = ""; + for (var idx = 0, len = array.length; idx < len; idx++) { + str += charFromCode(array[idx]); + } + return str; +}; +var byAscendingId = function(a, b) { + return a.id - b.id; +}; +var sortedUniq = function(array, indexer) { + var uniq = []; + for (var idx = 0, len = array.length; idx < len; idx++) { + var curr = array[idx]; + var prev = array[idx - 1]; + if (idx === 0 || indexer(curr) !== indexer(prev)) { + uniq.push(curr); + } + } + return uniq; +}; +var reverseArray = function(array) { + var arrayLen = array.length; + for (var idx = 0, len = Math.floor(arrayLen / 2); idx < len; idx++) { + var leftIdx = idx; + var rightIdx = arrayLen - idx - 1; + var temp = array[idx]; + array[leftIdx] = array[rightIdx]; + array[rightIdx] = temp; + } + return array; +}; +var sum = function(array) { + var total = 0; + for (var idx = 0, len = array.length; idx < len; idx++) { + total += array[idx]; + } + return total; +}; +var range = function(start, end) { + var arr = new Array(end - start); + for (var idx = 0, len = arr.length; idx < len; idx++) { + arr[idx] = start + idx; + } + return arr; +}; +var pluckIndices = function(arr, indices) { + var plucked = new Array(indices.length); + for (var idx = 0, len = indices.length; idx < len; idx++) { + plucked[idx] = arr[indices[idx]]; + } + return plucked; +}; +var canBeConvertedToUint8Array = function(input) { + return input instanceof Uint8Array || input instanceof ArrayBuffer || typeof input === "string"; +}; +var toUint8Array = function(input) { + if (typeof input === "string") { + return decodeFromBase64DataUri(input); + } else if (input instanceof ArrayBuffer) { + return new Uint8Array(input); + } else if (input instanceof Uint8Array) { + return input; + } else { + throw new TypeError("`input` must be one of `string | ArrayBuffer | Uint8Array`"); + } +}; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/utils/async.js +var waitForTick = function() { + return new Promise(function(resolve) { + setTimeout(function() { + return resolve(); + }, 0); + }); +}; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/utils/unicode.js +var utf16Encode = function(input, byteOrderMark) { + if (byteOrderMark === void 0) { + byteOrderMark = true; + } + var encoded = []; + if (byteOrderMark) + encoded.push(65279); + for (var idx = 0, len = input.length; idx < len; ) { + var codePoint = input.codePointAt(idx); + if (codePoint < 65536) { + encoded.push(codePoint); + idx += 1; + } else if (codePoint < 1114112) { + encoded.push(highSurrogate(codePoint), lowSurrogate(codePoint)); + idx += 2; + } else + throw new Error("Invalid code point: 0x" + toHexString(codePoint)); + } + return new Uint16Array(encoded); +}; +var isWithinBMP = function(codePoint) { + return codePoint >= 0 && codePoint <= 65535; +}; +var hasSurrogates = function(codePoint) { + return codePoint >= 65536 && codePoint <= 1114111; +}; +var highSurrogate = function(codePoint) { + return Math.floor((codePoint - 65536) / 1024) + 55296; +}; +var lowSurrogate = function(codePoint) { + return (codePoint - 65536) % 1024 + 56320; +}; +var ByteOrder; +(function(ByteOrder2) { + ByteOrder2["BigEndian"] = "BigEndian"; + ByteOrder2["LittleEndian"] = "LittleEndian"; +})(ByteOrder || (ByteOrder = {})); +var REPLACEMENT = "\uFFFD".codePointAt(0); +var utf16Decode = function(input, byteOrderMark) { + if (byteOrderMark === void 0) { + byteOrderMark = true; + } + if (input.length <= 1) + return String.fromCodePoint(REPLACEMENT); + var byteOrder = byteOrderMark ? readBOM(input) : ByteOrder.BigEndian; + var idx = byteOrderMark ? 2 : 0; + var codePoints = []; + while (input.length - idx >= 2) { + var first = decodeValues(input[idx++], input[idx++], byteOrder); + if (isHighSurrogate(first)) { + if (input.length - idx < 2) { + codePoints.push(REPLACEMENT); + } else { + var second = decodeValues(input[idx++], input[idx++], byteOrder); + if (isLowSurrogate(second)) { + codePoints.push(first, second); + } else { + codePoints.push(REPLACEMENT); + } + } + } else if (isLowSurrogate(first)) { + idx += 2; + codePoints.push(REPLACEMENT); + } else { + codePoints.push(first); + } + } + if (idx < input.length) + codePoints.push(REPLACEMENT); + return String.fromCodePoint.apply(String, codePoints); +}; +var isHighSurrogate = function(codePoint) { + return codePoint >= 55296 && codePoint <= 56319; +}; +var isLowSurrogate = function(codePoint) { + return codePoint >= 56320 && codePoint <= 57343; +}; +var decodeValues = function(first, second, byteOrder) { + if (byteOrder === ByteOrder.LittleEndian) + return second << 8 | first; + if (byteOrder === ByteOrder.BigEndian) + return first << 8 | second; + throw new Error("Invalid byteOrder: " + byteOrder); +}; +var readBOM = function(bytes) { + return hasUtf16BigEndianBOM(bytes) ? ByteOrder.BigEndian : hasUtf16LittleEndianBOM(bytes) ? ByteOrder.LittleEndian : ByteOrder.BigEndian; +}; +var hasUtf16BigEndianBOM = function(bytes) { + return bytes[0] === 254 && bytes[1] === 255; +}; +var hasUtf16LittleEndianBOM = function(bytes) { + return bytes[0] === 255 && bytes[1] === 254; +}; +var hasUtf16BOM = function(bytes) { + return hasUtf16BigEndianBOM(bytes) || hasUtf16LittleEndianBOM(bytes); +}; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/utils/numbers.js +var numberToString = function(num) { + var numStr = String(num); + if (Math.abs(num) < 1) { + var e = parseInt(num.toString().split("e-")[1]); + if (e) { + var negative = num < 0; + if (negative) + num *= -1; + num *= Math.pow(10, e - 1); + numStr = "0." + new Array(e).join("0") + num.toString().substring(2); + if (negative) + numStr = "-" + numStr; + } + } else { + var e = parseInt(num.toString().split("+")[1]); + if (e > 20) { + e -= 20; + num /= Math.pow(10, e); + numStr = num.toString() + new Array(e + 1).join("0"); + } + } + return numStr; +}; +var sizeInBytes = function(n) { + return Math.ceil(n.toString(2).length / 8); +}; +var bytesFor = function(n) { + var bytes = new Uint8Array(sizeInBytes(n)); + for (var i = 1; i <= bytes.length; i++) { + bytes[i - 1] = n >> (bytes.length - i) * 8; + } + return bytes; +}; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/utils/errors.js +var error = function(msg) { + throw new Error(msg); +}; + +// node_modules/.pnpm/@pdf-lib+standard-fonts@1.0.0/node_modules/@pdf-lib/standard-fonts/es/utils.js +var import_pako = __toESM(require_pako()); +var chars2 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; +var lookup2 = new Uint8Array(256); +for (i = 0; i < chars2.length; i++) { + lookup2[chars2.charCodeAt(i)] = i; +} +var i; +var decodeFromBase642 = function(base64) { + var bufferLength = base64.length * 0.75; + var len = base64.length; + var i; + var p = 0; + var encoded1; + var encoded2; + var encoded3; + var encoded4; + if (base64[base64.length - 1] === "=") { + bufferLength--; + if (base64[base64.length - 2] === "=") { + bufferLength--; + } + } + var bytes = new Uint8Array(bufferLength); + for (i = 0; i < len; i += 4) { + encoded1 = lookup2[base64.charCodeAt(i)]; + encoded2 = lookup2[base64.charCodeAt(i + 1)]; + encoded3 = lookup2[base64.charCodeAt(i + 2)]; + encoded4 = lookup2[base64.charCodeAt(i + 3)]; + bytes[p++] = encoded1 << 2 | encoded2 >> 4; + bytes[p++] = (encoded2 & 15) << 4 | encoded3 >> 2; + bytes[p++] = (encoded3 & 3) << 6 | encoded4 & 63; + } + return bytes; +}; +var arrayToString = function(array) { + var str = ""; + for (var i = 0; i < array.length; i++) { + str += String.fromCharCode(array[i]); + } + return str; +}; +var decompressJson = function(compressedJson) { + return arrayToString(import_pako.default.inflate(decodeFromBase642(compressedJson))); +}; +var padStart2 = function(value, length, padChar) { + var padding = ""; + for (var idx = 0, len = length - value.length; idx < len; idx++) { + padding += padChar; + } + return padding + value; +}; + +// node_modules/.pnpm/@pdf-lib+standard-fonts@1.0.0/node_modules/@pdf-lib/standard-fonts/es/Courier-Bold.compressed.json +var Courier_Bold_compressed_default = "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"; + +// node_modules/.pnpm/@pdf-lib+standard-fonts@1.0.0/node_modules/@pdf-lib/standard-fonts/es/Courier-BoldOblique.compressed.json +var Courier_BoldOblique_compressed_default = "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"; + +// node_modules/.pnpm/@pdf-lib+standard-fonts@1.0.0/node_modules/@pdf-lib/standard-fonts/es/Courier-Oblique.compressed.json +var Courier_Oblique_compressed_default = "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"; + +// node_modules/.pnpm/@pdf-lib+standard-fonts@1.0.0/node_modules/@pdf-lib/standard-fonts/es/Courier.compressed.json +var Courier_compressed_default = "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"; + +// node_modules/.pnpm/@pdf-lib+standard-fonts@1.0.0/node_modules/@pdf-lib/standard-fonts/es/Helvetica-Bold.compressed.json +var Helvetica_Bold_compressed_default = "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"; + +// node_modules/.pnpm/@pdf-lib+standard-fonts@1.0.0/node_modules/@pdf-lib/standard-fonts/es/Helvetica-BoldOblique.compressed.json +var Helvetica_BoldOblique_compressed_default = "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"; + +// node_modules/.pnpm/@pdf-lib+standard-fonts@1.0.0/node_modules/@pdf-lib/standard-fonts/es/Helvetica-Oblique.compressed.json +var Helvetica_Oblique_compressed_default = "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"; + +// node_modules/.pnpm/@pdf-lib+standard-fonts@1.0.0/node_modules/@pdf-lib/standard-fonts/es/Helvetica.compressed.json +var Helvetica_compressed_default = "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"; + +// node_modules/.pnpm/@pdf-lib+standard-fonts@1.0.0/node_modules/@pdf-lib/standard-fonts/es/Times-Bold.compressed.json +var Times_Bold_compressed_default = "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"; + +// node_modules/.pnpm/@pdf-lib+standard-fonts@1.0.0/node_modules/@pdf-lib/standard-fonts/es/Times-BoldItalic.compressed.json +var Times_BoldItalic_compressed_default = "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"; + +// node_modules/.pnpm/@pdf-lib+standard-fonts@1.0.0/node_modules/@pdf-lib/standard-fonts/es/Times-Italic.compressed.json +var Times_Italic_compressed_default = "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"; + +// node_modules/.pnpm/@pdf-lib+standard-fonts@1.0.0/node_modules/@pdf-lib/standard-fonts/es/Times-Roman.compressed.json +var Times_Roman_compressed_default = "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"; + +// node_modules/.pnpm/@pdf-lib+standard-fonts@1.0.0/node_modules/@pdf-lib/standard-fonts/es/Symbol.compressed.json +var Symbol_compressed_default = "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"; + +// node_modules/.pnpm/@pdf-lib+standard-fonts@1.0.0/node_modules/@pdf-lib/standard-fonts/es/ZapfDingbats.compressed.json +var ZapfDingbats_compressed_default = "eJxtmNtu20YQhl+F4FULyMGeD7pz3AY1ChtG7NpFA18w1NomIlECSRcxgrx7SVk7+wOdG8H5OJydf2Z2d5gf9cV+t0v9VK/r+6vXsXlOlbHe28paq229qj/t++m62aXZ4J/m8PRb1z9/baZxefK63Z6eXN5dVMvTCh83u277xr/6kLrnl2XNq7TpXnczuZyabdee98/b2VzM/x4/dd/T5qab2pd6PQ2vaVVfvDRD005puE3Lu7eH1HbN9hTjx4/77/X6y5lcnUmjVzHIVVDicVX/1W/SsO36dLMfu6nb9/X6TAoBD+5euvZbn8axXtuZ36dhPJrVQqgPQoh5hev91LWLkIv94W1Ygq9+aX+tZAx2tfz64284/sblN/rqfLP/mqrbt3FKu7G67Nv9cNgPzZQ2H6rz7bb6vLgZq89pTMO/M/xfEqturJpqSM/d7GJIm2oamk3aNcO3av80O5xh3yyKmm1193ZIT02bqovTKjP+MAf++7zsZvZ3276kYyWWXB0z99S18/PbafPHQ71W4fjn/fxnFO+ZvkrT0LVzTr78qB/+nk38bHM9exgP8zr1z9U7jt6840YW5uSJKcZOCaBBnKgm5mU8MVNYyMwWFvO7Ukagkmgg6sDWQ5yFFqjzUrLEaQ3BEmiwNsMSaZS0vgWfOkPHWQowNeTUc0kumnxZvsgPxlGai6VTGUqAVCTQ6QkWnc77DKEiLktSUBJKqHIQZ86d8gCpHYoiEzMsb1ubYy8vW50DChB5ZhGqrijD0EqUIeiaEHIfCg5Kpuu0ApiToaGPSY0uaQsyr65L2oKi1yFt1PLaQ3lzfXTgXodGoJYzglndSLDMPg1sTPJpQJHJigw0QrGERqD9YhyTOgONQDUyuF1zaxuokc/BW2ztXCMrGZ9WMW1oQZHIXWNBkSCfRZEL5BMUiZw6CzVSFCfUSGZFNjIldoKDkonTKQiJIGzWmFd3BizJJ9SINoLDriOfUCOZS+zg+KGD1qGiLNMLxtJD1/ns00ON6EzyUCM6vbxhoBKaqbG3DFQCNiL1iHccBPV0DHhQH/JW8EW90dkyFKGywCJU0WkVSvSGeiSUODWFFD0HYdPQVoiRgfPMA+/nnRgiAyNYSjpWNQcNSMrtFCUH4ZIRpSCWocFCSuhCEY6hoUClc0WC52BJlCYYLQdhN+hygRRRlo5BKRRLS6oihSqh+ZzzRGG1Mo4Iz1LoP0qsxDGFzk0JE42ji0jCPejomJKCuwil4m5CiRMEUMVSzVLDUstSx1Juc0oVWMpqY295qVltmtWmWW2a1aZZbZrVplltmtWmWW2G1WZYbYbVZlhthtVmWG2G1WZYbYbVZlhtltVmWW2W1WZZbZbVZlltltVmWW2W1QYjQCh7E2aAQHeGhCFgPoNoy8KNb2wxBhmGKBxoUZXlLGsLI6AsftEDHV0wIURVbANLcTKlGGBIKPOAxCmhePCKUwFzAmpDFRQvjA9R06Hq8TONvshgKDCuRAZTXigUxjxNFfKRo3CLhnIJBMFRvMZpqpNBMlQJzGT5WFQMVQI/AikPMIhEU1aDjqJvQwmjSHB05cC9jbYwc5UtAHNLhDw41ha+lEqF4JaH3gmB61SYcqInxTDmQK8v08vjqv4zDf1N0w3Lf4A8/vwPpfK11w=="; + +// node_modules/.pnpm/@pdf-lib+standard-fonts@1.0.0/node_modules/@pdf-lib/standard-fonts/es/Font.js +var compressedJsonForFontName = { + "Courier": Courier_compressed_default, + "Courier-Bold": Courier_Bold_compressed_default, + "Courier-Oblique": Courier_Oblique_compressed_default, + "Courier-BoldOblique": Courier_BoldOblique_compressed_default, + "Helvetica": Helvetica_compressed_default, + "Helvetica-Bold": Helvetica_Bold_compressed_default, + "Helvetica-Oblique": Helvetica_Oblique_compressed_default, + "Helvetica-BoldOblique": Helvetica_BoldOblique_compressed_default, + "Times-Roman": Times_Roman_compressed_default, + "Times-Bold": Times_Bold_compressed_default, + "Times-Italic": Times_Italic_compressed_default, + "Times-BoldItalic": Times_BoldItalic_compressed_default, + "Symbol": Symbol_compressed_default, + "ZapfDingbats": ZapfDingbats_compressed_default +}; +var FontNames; +(function(FontNames2) { + FontNames2["Courier"] = "Courier"; + FontNames2["CourierBold"] = "Courier-Bold"; + FontNames2["CourierOblique"] = "Courier-Oblique"; + FontNames2["CourierBoldOblique"] = "Courier-BoldOblique"; + FontNames2["Helvetica"] = "Helvetica"; + FontNames2["HelveticaBold"] = "Helvetica-Bold"; + FontNames2["HelveticaOblique"] = "Helvetica-Oblique"; + FontNames2["HelveticaBoldOblique"] = "Helvetica-BoldOblique"; + FontNames2["TimesRoman"] = "Times-Roman"; + FontNames2["TimesRomanBold"] = "Times-Bold"; + FontNames2["TimesRomanItalic"] = "Times-Italic"; + FontNames2["TimesRomanBoldItalic"] = "Times-BoldItalic"; + FontNames2["Symbol"] = "Symbol"; + FontNames2["ZapfDingbats"] = "ZapfDingbats"; +})(FontNames || (FontNames = {})); +var fontCache = {}; +var Font = ( + /** @class */ + function() { + function Font2() { + var _this = this; + this.getWidthOfGlyph = function(glyphName) { + return _this.CharWidths[glyphName]; + }; + this.getXAxisKerningForPair = function(leftGlyphName, rightGlyphName) { + return (_this.KernPairXAmounts[leftGlyphName] || {})[rightGlyphName]; + }; + } + Font2.load = function(fontName) { + var cachedFont = fontCache[fontName]; + if (cachedFont) + return cachedFont; + var json = decompressJson(compressedJsonForFontName[fontName]); + var font = Object.assign(new Font2(), JSON.parse(json)); + font.CharWidths = font.CharMetrics.reduce(function(acc, metric) { + acc[metric.N] = metric.WX; + return acc; + }, {}); + font.KernPairXAmounts = font.KernPairs.reduce(function(acc, _a) { + var name1 = _a[0], name2 = _a[1], width = _a[2]; + if (!acc[name1]) + acc[name1] = {}; + acc[name1][name2] = width; + return acc; + }, {}); + fontCache[fontName] = font; + return font; + }; + return Font2; + }() +); + +// node_modules/.pnpm/@pdf-lib+standard-fonts@1.0.0/node_modules/@pdf-lib/standard-fonts/es/all-encodings.compressed.json +var all_encodings_compressed_default = "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"; + +// node_modules/.pnpm/@pdf-lib+standard-fonts@1.0.0/node_modules/@pdf-lib/standard-fonts/es/Encoding.js +var decompressedEncodings = decompressJson(all_encodings_compressed_default); +var allUnicodeMappings = JSON.parse(decompressedEncodings); +var Encoding = ( + /** @class */ + /* @__PURE__ */ function() { + function Encoding2(name, unicodeMappings) { + var _this = this; + this.canEncodeUnicodeCodePoint = function(codePoint) { + return codePoint in _this.unicodeMappings; + }; + this.encodeUnicodeCodePoint = function(codePoint) { + var mapped = _this.unicodeMappings[codePoint]; + if (!mapped) { + var str = String.fromCharCode(codePoint); + var hexCode = "0x" + padStart2(codePoint.toString(16), 4, "0"); + var msg = _this.name + ' cannot encode "' + str + '" (' + hexCode + ")"; + throw new Error(msg); + } + return { code: mapped[0], name: mapped[1] }; + }; + this.name = name; + this.supportedCodePoints = Object.keys(unicodeMappings).map(Number).sort(function(a, b) { + return a - b; + }); + this.unicodeMappings = unicodeMappings; + } + return Encoding2; + }() +); +var Encodings = { + Symbol: new Encoding("Symbol", allUnicodeMappings.symbol), + ZapfDingbats: new Encoding("ZapfDingbats", allUnicodeMappings.zapfdingbats), + WinAnsi: new Encoding("WinAnsi", allUnicodeMappings.win1252) +}; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/utils/objects.js +var values = function(obj) { + return Object.keys(obj).map(function(k) { + return obj[k]; + }); +}; +var StandardFontValues = values(FontNames); +var isStandardFont = function(input) { + return StandardFontValues.includes(input); +}; +var rectanglesAreEqual = function(a, b) { + return a.x === b.x && a.y === b.y && a.width === b.width && a.height === b.height; +}; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/utils/validators.js +var backtick = function(val) { + return "`" + val + "`"; +}; +var singleQuote = function(val) { + return "'" + val + "'"; +}; +var formatValue = function(value) { + var type = typeof value; + if (type === "string") + return singleQuote(value); + else if (type === "undefined") + return backtick(value); + else + return value; +}; +var createValueErrorMsg = function(value, valueName, values2) { + var allowedValues = new Array(values2.length); + for (var idx = 0, len = values2.length; idx < len; idx++) { + var v = values2[idx]; + allowedValues[idx] = formatValue(v); + } + var joinedValues = allowedValues.join(" or "); + return backtick(valueName) + " must be one of " + joinedValues + ", but was actually " + formatValue(value); +}; +var assertIsOneOf = function(value, valueName, allowedValues) { + if (!Array.isArray(allowedValues)) { + allowedValues = values(allowedValues); + } + for (var idx = 0, len = allowedValues.length; idx < len; idx++) { + if (value === allowedValues[idx]) + return; + } + throw new TypeError(createValueErrorMsg(value, valueName, allowedValues)); +}; +var assertIsOneOfOrUndefined = function(value, valueName, allowedValues) { + if (!Array.isArray(allowedValues)) { + allowedValues = values(allowedValues); + } + assertIsOneOf(value, valueName, allowedValues.concat(void 0)); +}; +var assertIsSubset = function(values2, valueName, allowedValues) { + if (!Array.isArray(allowedValues)) { + allowedValues = values(allowedValues); + } + for (var idx = 0, len = values2.length; idx < len; idx++) { + assertIsOneOf(values2[idx], valueName, allowedValues); + } +}; +var getType = function(val) { + if (val === null) + return "null"; + if (val === void 0) + return "undefined"; + if (typeof val === "string") + return "string"; + if (isNaN(val)) + return "NaN"; + if (typeof val === "number") + return "number"; + if (typeof val === "boolean") + return "boolean"; + if (typeof val === "symbol") + return "symbol"; + if (typeof val === "bigint") + return "bigint"; + if (val.constructor && val.constructor.name) + return val.constructor.name; + if (val.name) + return val.name; + if (val.constructor) + return String(val.constructor); + return String(val); +}; +var isType = function(value, type) { + if (type === "null") + return value === null; + if (type === "undefined") + return value === void 0; + if (type === "string") + return typeof value === "string"; + if (type === "number") + return typeof value === "number" && !isNaN(value); + if (type === "boolean") + return typeof value === "boolean"; + if (type === "symbol") + return typeof value === "symbol"; + if (type === "bigint") + return typeof value === "bigint"; + if (type === Date) + return value instanceof Date; + if (type === Array) + return value instanceof Array; + if (type === Uint8Array) + return value instanceof Uint8Array; + if (type === ArrayBuffer) + return value instanceof ArrayBuffer; + if (type === Function) + return value instanceof Function; + return value instanceof type[0]; +}; +var createTypeErrorMsg = function(value, valueName, types) { + var allowedTypes = new Array(types.length); + for (var idx = 0, len = types.length; idx < len; idx++) { + var type = types[idx]; + if (type === "null") + allowedTypes[idx] = backtick("null"); + if (type === "undefined") + allowedTypes[idx] = backtick("undefined"); + if (type === "string") + allowedTypes[idx] = backtick("string"); + else if (type === "number") + allowedTypes[idx] = backtick("number"); + else if (type === "boolean") + allowedTypes[idx] = backtick("boolean"); + else if (type === "symbol") + allowedTypes[idx] = backtick("symbol"); + else if (type === "bigint") + allowedTypes[idx] = backtick("bigint"); + else if (type === Array) + allowedTypes[idx] = backtick("Array"); + else if (type === Uint8Array) + allowedTypes[idx] = backtick("Uint8Array"); + else if (type === ArrayBuffer) + allowedTypes[idx] = backtick("ArrayBuffer"); + else + allowedTypes[idx] = backtick(type[1]); + } + var joinedTypes = allowedTypes.join(" or "); + return backtick(valueName) + " must be of type " + joinedTypes + ", but was actually of type " + backtick(getType(value)); +}; +var assertIs = function(value, valueName, types) { + for (var idx = 0, len = types.length; idx < len; idx++) { + if (isType(value, types[idx])) + return; + } + throw new TypeError(createTypeErrorMsg(value, valueName, types)); +}; +var assertOrUndefined = function(value, valueName, types) { + assertIs(value, valueName, types.concat("undefined")); +}; +var assertEachIs = function(values2, valueName, types) { + for (var idx = 0, len = values2.length; idx < len; idx++) { + assertIs(values2[idx], valueName, types); + } +}; +var assertRange = function(value, valueName, min, max) { + assertIs(value, valueName, ["number"]); + assertIs(min, "min", ["number"]); + assertIs(max, "max", ["number"]); + max = Math.max(min, max); + if (value < min || value > max) { + throw new Error(backtick(valueName) + " must be at least " + min + " and at most " + max + ", but was actually " + value); + } +}; +var assertRangeOrUndefined = function(value, valueName, min, max) { + assertIs(value, valueName, ["number", "undefined"]); + if (typeof value === "number") + assertRange(value, valueName, min, max); +}; +var assertMultiple = function(value, valueName, multiplier) { + assertIs(value, valueName, ["number"]); + if (value % multiplier !== 0) { + throw new Error(backtick(valueName) + " must be a multiple of " + multiplier + ", but was actually " + value); + } +}; +var assertInteger = function(value, valueName) { + if (!Number.isInteger(value)) { + throw new Error(backtick(valueName) + " must be an integer, but was actually " + value); + } +}; +var assertPositive = function(value, valueName) { + if (![1, 0].includes(Math.sign(value))) { + throw new Error(backtick(valueName) + " must be a positive number or 0, but was actually " + value); + } +}; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/utils/pdfDocEncoding.js +var pdfDocEncodingToUnicode = new Uint16Array(256); +for (idx = 0; idx < 256; idx++) { + pdfDocEncodingToUnicode[idx] = idx; +} +var idx; +pdfDocEncodingToUnicode[22] = toCharCode(""); +pdfDocEncodingToUnicode[24] = toCharCode("\u02D8"); +pdfDocEncodingToUnicode[25] = toCharCode("\u02C7"); +pdfDocEncodingToUnicode[26] = toCharCode("\u02C6"); +pdfDocEncodingToUnicode[27] = toCharCode("\u02D9"); +pdfDocEncodingToUnicode[28] = toCharCode("\u02DD"); +pdfDocEncodingToUnicode[29] = toCharCode("\u02DB"); +pdfDocEncodingToUnicode[30] = toCharCode("\u02DA"); +pdfDocEncodingToUnicode[31] = toCharCode("\u02DC"); +pdfDocEncodingToUnicode[127] = toCharCode("\uFFFD"); +pdfDocEncodingToUnicode[128] = toCharCode("\u2022"); +pdfDocEncodingToUnicode[129] = toCharCode("\u2020"); +pdfDocEncodingToUnicode[130] = toCharCode("\u2021"); +pdfDocEncodingToUnicode[131] = toCharCode("\u2026"); +pdfDocEncodingToUnicode[132] = toCharCode("\u2014"); +pdfDocEncodingToUnicode[133] = toCharCode("\u2013"); +pdfDocEncodingToUnicode[134] = toCharCode("\u0192"); +pdfDocEncodingToUnicode[135] = toCharCode("\u2044"); +pdfDocEncodingToUnicode[136] = toCharCode("\u2039"); +pdfDocEncodingToUnicode[137] = toCharCode("\u203A"); +pdfDocEncodingToUnicode[138] = toCharCode("\u2212"); +pdfDocEncodingToUnicode[139] = toCharCode("\u2030"); +pdfDocEncodingToUnicode[140] = toCharCode("\u201E"); +pdfDocEncodingToUnicode[141] = toCharCode("\u201C"); +pdfDocEncodingToUnicode[142] = toCharCode("\u201D"); +pdfDocEncodingToUnicode[143] = toCharCode("\u2018"); +pdfDocEncodingToUnicode[144] = toCharCode("\u2019"); +pdfDocEncodingToUnicode[145] = toCharCode("\u201A"); +pdfDocEncodingToUnicode[146] = toCharCode("\u2122"); +pdfDocEncodingToUnicode[147] = toCharCode("\uFB01"); +pdfDocEncodingToUnicode[148] = toCharCode("\uFB02"); +pdfDocEncodingToUnicode[149] = toCharCode("\u0141"); +pdfDocEncodingToUnicode[150] = toCharCode("\u0152"); +pdfDocEncodingToUnicode[151] = toCharCode("\u0160"); +pdfDocEncodingToUnicode[152] = toCharCode("\u0178"); +pdfDocEncodingToUnicode[153] = toCharCode("\u017D"); +pdfDocEncodingToUnicode[154] = toCharCode("\u0131"); +pdfDocEncodingToUnicode[155] = toCharCode("\u0142"); +pdfDocEncodingToUnicode[156] = toCharCode("\u0153"); +pdfDocEncodingToUnicode[157] = toCharCode("\u0161"); +pdfDocEncodingToUnicode[158] = toCharCode("\u017E"); +pdfDocEncodingToUnicode[159] = toCharCode("\uFFFD"); +pdfDocEncodingToUnicode[160] = toCharCode("\u20AC"); +pdfDocEncodingToUnicode[173] = toCharCode("\uFFFD"); +var pdfDocEncodingDecode = function(bytes) { + var codePoints = new Array(bytes.length); + for (var idx = 0, len = bytes.length; idx < len; idx++) { + codePoints[idx] = pdfDocEncodingToUnicode[bytes[idx]]; + } + return String.fromCodePoint.apply(String, codePoints); +}; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/utils/Cache.js +var Cache = ( + /** @class */ + function() { + function Cache2(populate) { + this.populate = populate; + this.value = void 0; + } + Cache2.prototype.getValue = function() { + return this.value; + }; + Cache2.prototype.access = function() { + if (!this.value) + this.value = this.populate(); + return this.value; + }; + Cache2.prototype.invalidate = function() { + this.value = void 0; + }; + Cache2.populatedBy = function(populate) { + return new Cache2(populate); + }; + return Cache2; + }() +); +var Cache_default = Cache; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/core/errors.js +var MethodNotImplementedError = ( + /** @class */ + function(_super) { + __extends(MethodNotImplementedError2, _super); + function MethodNotImplementedError2(className, methodName) { + var _this = this; + var msg = "Method " + className + "." + methodName + "() not implemented"; + _this = _super.call(this, msg) || this; + return _this; + } + return MethodNotImplementedError2; + }(Error) +); +var PrivateConstructorError = ( + /** @class */ + function(_super) { + __extends(PrivateConstructorError2, _super); + function PrivateConstructorError2(className) { + var _this = this; + var msg = "Cannot construct " + className + " - it has a private constructor"; + _this = _super.call(this, msg) || this; + return _this; + } + return PrivateConstructorError2; + }(Error) +); +var UnexpectedObjectTypeError = ( + /** @class */ + function(_super) { + __extends(UnexpectedObjectTypeError2, _super); + function UnexpectedObjectTypeError2(expected, actual) { + var _this = this; + var name = function(t) { + var _a, _b; + return (_a = t === null || t === void 0 ? void 0 : t.name) !== null && _a !== void 0 ? _a : (_b = t === null || t === void 0 ? void 0 : t.constructor) === null || _b === void 0 ? void 0 : _b.name; + }; + var expectedTypes = Array.isArray(expected) ? expected.map(name) : [name(expected)]; + var msg = "Expected instance of " + expectedTypes.join(" or ") + ", " + ("but got instance of " + (actual ? name(actual) : actual)); + _this = _super.call(this, msg) || this; + return _this; + } + return UnexpectedObjectTypeError2; + }(Error) +); +var UnsupportedEncodingError = ( + /** @class */ + function(_super) { + __extends(UnsupportedEncodingError2, _super); + function UnsupportedEncodingError2(encoding) { + var _this = this; + var msg = encoding + " stream encoding not supported"; + _this = _super.call(this, msg) || this; + return _this; + } + return UnsupportedEncodingError2; + }(Error) +); +var ReparseError = ( + /** @class */ + function(_super) { + __extends(ReparseError2, _super); + function ReparseError2(className, methodName) { + var _this = this; + var msg = "Cannot call " + className + "." + methodName + "() more than once"; + _this = _super.call(this, msg) || this; + return _this; + } + return ReparseError2; + }(Error) +); +var MissingCatalogError = ( + /** @class */ + function(_super) { + __extends(MissingCatalogError2, _super); + function MissingCatalogError2(ref) { + var _this = this; + var msg = "Missing catalog (ref=" + ref + ")"; + _this = _super.call(this, msg) || this; + return _this; + } + return MissingCatalogError2; + }(Error) +); +var MissingPageContentsEmbeddingError = ( + /** @class */ + function(_super) { + __extends(MissingPageContentsEmbeddingError2, _super); + function MissingPageContentsEmbeddingError2() { + var _this = this; + var msg = "Can't embed page with missing Contents"; + _this = _super.call(this, msg) || this; + return _this; + } + return MissingPageContentsEmbeddingError2; + }(Error) +); +var UnrecognizedStreamTypeError = ( + /** @class */ + function(_super) { + __extends(UnrecognizedStreamTypeError2, _super); + function UnrecognizedStreamTypeError2(stream2) { + var _a, _b, _c; + var _this = this; + var streamType = (_c = (_b = (_a = stream2 === null || stream2 === void 0 ? void 0 : stream2.contructor) === null || _a === void 0 ? void 0 : _a.name) !== null && _b !== void 0 ? _b : stream2 === null || stream2 === void 0 ? void 0 : stream2.name) !== null && _c !== void 0 ? _c : stream2; + var msg = "Unrecognized stream type: " + streamType; + _this = _super.call(this, msg) || this; + return _this; + } + return UnrecognizedStreamTypeError2; + }(Error) +); +var PageEmbeddingMismatchedContextError = ( + /** @class */ + function(_super) { + __extends(PageEmbeddingMismatchedContextError2, _super); + function PageEmbeddingMismatchedContextError2() { + var _this = this; + var msg = "Found mismatched contexts while embedding pages. All pages in the array passed to `PDFDocument.embedPages()` must be from the same document."; + _this = _super.call(this, msg) || this; + return _this; + } + return PageEmbeddingMismatchedContextError2; + }(Error) +); +var PDFArrayIsNotRectangleError = ( + /** @class */ + function(_super) { + __extends(PDFArrayIsNotRectangleError2, _super); + function PDFArrayIsNotRectangleError2(size) { + var _this = this; + var msg = "Attempted to convert PDFArray with " + size + " elements to rectangle, but must have exactly 4 elements."; + _this = _super.call(this, msg) || this; + return _this; + } + return PDFArrayIsNotRectangleError2; + }(Error) +); +var InvalidPDFDateStringError = ( + /** @class */ + function(_super) { + __extends(InvalidPDFDateStringError2, _super); + function InvalidPDFDateStringError2(value) { + var _this = this; + var msg = 'Attempted to convert "' + value + '" to a date, but it does not match the PDF date string format.'; + _this = _super.call(this, msg) || this; + return _this; + } + return InvalidPDFDateStringError2; + }(Error) +); +var InvalidTargetIndexError = ( + /** @class */ + function(_super) { + __extends(InvalidTargetIndexError2, _super); + function InvalidTargetIndexError2(targetIndex, Count) { + var _this = this; + var msg = "Invalid targetIndex specified: targetIndex=" + targetIndex + " must be less than Count=" + Count; + _this = _super.call(this, msg) || this; + return _this; + } + return InvalidTargetIndexError2; + }(Error) +); +var CorruptPageTreeError = ( + /** @class */ + function(_super) { + __extends(CorruptPageTreeError2, _super); + function CorruptPageTreeError2(targetIndex, operation) { + var _this = this; + var msg = "Failed to " + operation + " at targetIndex=" + targetIndex + " due to corrupt page tree: It is likely that one or more 'Count' entries are invalid"; + _this = _super.call(this, msg) || this; + return _this; + } + return CorruptPageTreeError2; + }(Error) +); +var IndexOutOfBoundsError = ( + /** @class */ + function(_super) { + __extends(IndexOutOfBoundsError2, _super); + function IndexOutOfBoundsError2(index, min, max) { + var _this = this; + var msg = "index should be at least " + min + " and at most " + max + ", but was actually " + index; + _this = _super.call(this, msg) || this; + return _this; + } + return IndexOutOfBoundsError2; + }(Error) +); +var InvalidAcroFieldValueError = ( + /** @class */ + function(_super) { + __extends(InvalidAcroFieldValueError2, _super); + function InvalidAcroFieldValueError2() { + var _this = this; + var msg = "Attempted to set invalid field value"; + _this = _super.call(this, msg) || this; + return _this; + } + return InvalidAcroFieldValueError2; + }(Error) +); +var MultiSelectValueError = ( + /** @class */ + function(_super) { + __extends(MultiSelectValueError2, _super); + function MultiSelectValueError2() { + var _this = this; + var msg = "Attempted to select multiple values for single-select field"; + _this = _super.call(this, msg) || this; + return _this; + } + return MultiSelectValueError2; + }(Error) +); +var MissingDAEntryError = ( + /** @class */ + function(_super) { + __extends(MissingDAEntryError2, _super); + function MissingDAEntryError2(fieldName) { + var _this = this; + var msg = "No /DA (default appearance) entry found for field: " + fieldName; + _this = _super.call(this, msg) || this; + return _this; + } + return MissingDAEntryError2; + }(Error) +); +var MissingTfOperatorError = ( + /** @class */ + function(_super) { + __extends(MissingTfOperatorError2, _super); + function MissingTfOperatorError2(fieldName) { + var _this = this; + var msg = "No Tf operator found for DA of field: " + fieldName; + _this = _super.call(this, msg) || this; + return _this; + } + return MissingTfOperatorError2; + }(Error) +); +var NumberParsingError = ( + /** @class */ + function(_super) { + __extends(NumberParsingError2, _super); + function NumberParsingError2(pos, value) { + var _this = this; + var msg = "Failed to parse number " + ("(line:" + pos.line + " col:" + pos.column + " offset=" + pos.offset + '): "' + value + '"'); + _this = _super.call(this, msg) || this; + return _this; + } + return NumberParsingError2; + }(Error) +); +var PDFParsingError = ( + /** @class */ + function(_super) { + __extends(PDFParsingError2, _super); + function PDFParsingError2(pos, details) { + var _this = this; + var msg = "Failed to parse PDF document " + ("(line:" + pos.line + " col:" + pos.column + " offset=" + pos.offset + "): " + details); + _this = _super.call(this, msg) || this; + return _this; + } + return PDFParsingError2; + }(Error) +); +var NextByteAssertionError = ( + /** @class */ + function(_super) { + __extends(NextByteAssertionError2, _super); + function NextByteAssertionError2(pos, expectedByte, actualByte) { + var _this = this; + var msg = "Expected next byte to be " + expectedByte + " but it was actually " + actualByte; + _this = _super.call(this, pos, msg) || this; + return _this; + } + return NextByteAssertionError2; + }(PDFParsingError) +); +var PDFObjectParsingError = ( + /** @class */ + function(_super) { + __extends(PDFObjectParsingError2, _super); + function PDFObjectParsingError2(pos, byte) { + var _this = this; + var msg = "Failed to parse PDF object starting with the following byte: " + byte; + _this = _super.call(this, pos, msg) || this; + return _this; + } + return PDFObjectParsingError2; + }(PDFParsingError) +); +var PDFInvalidObjectParsingError = ( + /** @class */ + function(_super) { + __extends(PDFInvalidObjectParsingError2, _super); + function PDFInvalidObjectParsingError2(pos) { + var _this = this; + var msg = "Failed to parse invalid PDF object"; + _this = _super.call(this, pos, msg) || this; + return _this; + } + return PDFInvalidObjectParsingError2; + }(PDFParsingError) +); +var PDFStreamParsingError = ( + /** @class */ + function(_super) { + __extends(PDFStreamParsingError2, _super); + function PDFStreamParsingError2(pos) { + var _this = this; + var msg = "Failed to parse PDF stream"; + _this = _super.call(this, pos, msg) || this; + return _this; + } + return PDFStreamParsingError2; + }(PDFParsingError) +); +var UnbalancedParenthesisError = ( + /** @class */ + function(_super) { + __extends(UnbalancedParenthesisError2, _super); + function UnbalancedParenthesisError2(pos) { + var _this = this; + var msg = "Failed to parse PDF literal string due to unbalanced parenthesis"; + _this = _super.call(this, pos, msg) || this; + return _this; + } + return UnbalancedParenthesisError2; + }(PDFParsingError) +); +var StalledParserError = ( + /** @class */ + function(_super) { + __extends(StalledParserError2, _super); + function StalledParserError2(pos) { + var _this = this; + var msg = "Parser stalled"; + _this = _super.call(this, pos, msg) || this; + return _this; + } + return StalledParserError2; + }(PDFParsingError) +); +var MissingPDFHeaderError = ( + /** @class */ + function(_super) { + __extends(MissingPDFHeaderError2, _super); + function MissingPDFHeaderError2(pos) { + var _this = this; + var msg = "No PDF header found"; + _this = _super.call(this, pos, msg) || this; + return _this; + } + return MissingPDFHeaderError2; + }(PDFParsingError) +); +var MissingKeywordError = ( + /** @class */ + function(_super) { + __extends(MissingKeywordError2, _super); + function MissingKeywordError2(pos, keyword) { + var _this = this; + var msg = "Did not find expected keyword '" + arrayAsString(keyword) + "'"; + _this = _super.call(this, pos, msg) || this; + return _this; + } + return MissingKeywordError2; + }(PDFParsingError) +); + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/core/syntax/CharCodes.js +var CharCodes; +(function(CharCodes2) { + CharCodes2[CharCodes2["Null"] = 0] = "Null"; + CharCodes2[CharCodes2["Backspace"] = 8] = "Backspace"; + CharCodes2[CharCodes2["Tab"] = 9] = "Tab"; + CharCodes2[CharCodes2["Newline"] = 10] = "Newline"; + CharCodes2[CharCodes2["FormFeed"] = 12] = "FormFeed"; + CharCodes2[CharCodes2["CarriageReturn"] = 13] = "CarriageReturn"; + CharCodes2[CharCodes2["Space"] = 32] = "Space"; + CharCodes2[CharCodes2["ExclamationPoint"] = 33] = "ExclamationPoint"; + CharCodes2[CharCodes2["Hash"] = 35] = "Hash"; + CharCodes2[CharCodes2["Percent"] = 37] = "Percent"; + CharCodes2[CharCodes2["LeftParen"] = 40] = "LeftParen"; + CharCodes2[CharCodes2["RightParen"] = 41] = "RightParen"; + CharCodes2[CharCodes2["Plus"] = 43] = "Plus"; + CharCodes2[CharCodes2["Minus"] = 45] = "Minus"; + CharCodes2[CharCodes2["Dash"] = 45] = "Dash"; + CharCodes2[CharCodes2["Period"] = 46] = "Period"; + CharCodes2[CharCodes2["ForwardSlash"] = 47] = "ForwardSlash"; + CharCodes2[CharCodes2["Zero"] = 48] = "Zero"; + CharCodes2[CharCodes2["One"] = 49] = "One"; + CharCodes2[CharCodes2["Two"] = 50] = "Two"; + CharCodes2[CharCodes2["Three"] = 51] = "Three"; + CharCodes2[CharCodes2["Four"] = 52] = "Four"; + CharCodes2[CharCodes2["Five"] = 53] = "Five"; + CharCodes2[CharCodes2["Six"] = 54] = "Six"; + CharCodes2[CharCodes2["Seven"] = 55] = "Seven"; + CharCodes2[CharCodes2["Eight"] = 56] = "Eight"; + CharCodes2[CharCodes2["Nine"] = 57] = "Nine"; + CharCodes2[CharCodes2["LessThan"] = 60] = "LessThan"; + CharCodes2[CharCodes2["GreaterThan"] = 62] = "GreaterThan"; + CharCodes2[CharCodes2["A"] = 65] = "A"; + CharCodes2[CharCodes2["D"] = 68] = "D"; + CharCodes2[CharCodes2["E"] = 69] = "E"; + CharCodes2[CharCodes2["F"] = 70] = "F"; + CharCodes2[CharCodes2["O"] = 79] = "O"; + CharCodes2[CharCodes2["P"] = 80] = "P"; + CharCodes2[CharCodes2["R"] = 82] = "R"; + CharCodes2[CharCodes2["LeftSquareBracket"] = 91] = "LeftSquareBracket"; + CharCodes2[CharCodes2["BackSlash"] = 92] = "BackSlash"; + CharCodes2[CharCodes2["RightSquareBracket"] = 93] = "RightSquareBracket"; + CharCodes2[CharCodes2["a"] = 97] = "a"; + CharCodes2[CharCodes2["b"] = 98] = "b"; + CharCodes2[CharCodes2["d"] = 100] = "d"; + CharCodes2[CharCodes2["e"] = 101] = "e"; + CharCodes2[CharCodes2["f"] = 102] = "f"; + CharCodes2[CharCodes2["i"] = 105] = "i"; + CharCodes2[CharCodes2["j"] = 106] = "j"; + CharCodes2[CharCodes2["l"] = 108] = "l"; + CharCodes2[CharCodes2["m"] = 109] = "m"; + CharCodes2[CharCodes2["n"] = 110] = "n"; + CharCodes2[CharCodes2["o"] = 111] = "o"; + CharCodes2[CharCodes2["r"] = 114] = "r"; + CharCodes2[CharCodes2["s"] = 115] = "s"; + CharCodes2[CharCodes2["t"] = 116] = "t"; + CharCodes2[CharCodes2["u"] = 117] = "u"; + CharCodes2[CharCodes2["x"] = 120] = "x"; + CharCodes2[CharCodes2["LeftCurly"] = 123] = "LeftCurly"; + CharCodes2[CharCodes2["RightCurly"] = 125] = "RightCurly"; + CharCodes2[CharCodes2["Tilde"] = 126] = "Tilde"; +})(CharCodes || (CharCodes = {})); +var CharCodes_default = CharCodes; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/core/PDFContext.js +var import_pako3 = __toESM(require_pako()); + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/core/document/PDFHeader.js +var PDFHeader = ( + /** @class */ + function() { + function PDFHeader2(major, minor) { + this.major = String(major); + this.minor = String(minor); + } + PDFHeader2.prototype.toString = function() { + var bc = charFromCode(129); + return "%PDF-" + this.major + "." + this.minor + "\n%" + bc + bc + bc + bc; + }; + PDFHeader2.prototype.sizeInBytes = function() { + return 12 + this.major.length + this.minor.length; + }; + PDFHeader2.prototype.copyBytesInto = function(buffer, offset) { + var initialOffset = offset; + buffer[offset++] = CharCodes_default.Percent; + buffer[offset++] = CharCodes_default.P; + buffer[offset++] = CharCodes_default.D; + buffer[offset++] = CharCodes_default.F; + buffer[offset++] = CharCodes_default.Dash; + offset += copyStringIntoBuffer(this.major, buffer, offset); + buffer[offset++] = CharCodes_default.Period; + offset += copyStringIntoBuffer(this.minor, buffer, offset); + buffer[offset++] = CharCodes_default.Newline; + buffer[offset++] = CharCodes_default.Percent; + buffer[offset++] = 129; + buffer[offset++] = 129; + buffer[offset++] = 129; + buffer[offset++] = 129; + return offset - initialOffset; + }; + PDFHeader2.forVersion = function(major, minor) { + return new PDFHeader2(major, minor); + }; + return PDFHeader2; + }() +); +var PDFHeader_default = PDFHeader; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/core/objects/PDFObject.js +var PDFObject = ( + /** @class */ + function() { + function PDFObject2() { + } + PDFObject2.prototype.clone = function(_context) { + throw new MethodNotImplementedError(this.constructor.name, "clone"); + }; + PDFObject2.prototype.toString = function() { + throw new MethodNotImplementedError(this.constructor.name, "toString"); + }; + PDFObject2.prototype.sizeInBytes = function() { + throw new MethodNotImplementedError(this.constructor.name, "sizeInBytes"); + }; + PDFObject2.prototype.copyBytesInto = function(_buffer, _offset) { + throw new MethodNotImplementedError(this.constructor.name, "copyBytesInto"); + }; + return PDFObject2; + }() +); +var PDFObject_default = PDFObject; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/core/objects/PDFNumber.js +var PDFNumber = ( + /** @class */ + function(_super) { + __extends(PDFNumber2, _super); + function PDFNumber2(value) { + var _this = _super.call(this) || this; + _this.numberValue = value; + _this.stringValue = numberToString(value); + return _this; + } + PDFNumber2.prototype.asNumber = function() { + return this.numberValue; + }; + PDFNumber2.prototype.value = function() { + return this.numberValue; + }; + PDFNumber2.prototype.clone = function() { + return PDFNumber2.of(this.numberValue); + }; + PDFNumber2.prototype.toString = function() { + return this.stringValue; + }; + PDFNumber2.prototype.sizeInBytes = function() { + return this.stringValue.length; + }; + PDFNumber2.prototype.copyBytesInto = function(buffer, offset) { + offset += copyStringIntoBuffer(this.stringValue, buffer, offset); + return this.stringValue.length; + }; + PDFNumber2.of = function(value) { + return new PDFNumber2(value); + }; + return PDFNumber2; + }(PDFObject_default) +); +var PDFNumber_default = PDFNumber; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/core/objects/PDFArray.js +var PDFArray = ( + /** @class */ + function(_super) { + __extends(PDFArray3, _super); + function PDFArray3(context) { + var _this = _super.call(this) || this; + _this.array = []; + _this.context = context; + return _this; + } + PDFArray3.prototype.size = function() { + return this.array.length; + }; + PDFArray3.prototype.push = function(object) { + this.array.push(object); + }; + PDFArray3.prototype.insert = function(index, object) { + this.array.splice(index, 0, object); + }; + PDFArray3.prototype.indexOf = function(object) { + var index = this.array.indexOf(object); + return index === -1 ? void 0 : index; + }; + PDFArray3.prototype.remove = function(index) { + this.array.splice(index, 1); + }; + PDFArray3.prototype.set = function(idx, object) { + this.array[idx] = object; + }; + PDFArray3.prototype.get = function(index) { + return this.array[index]; + }; + PDFArray3.prototype.lookupMaybe = function(index) { + var _a; + var types = []; + for (var _i = 1; _i < arguments.length; _i++) { + types[_i - 1] = arguments[_i]; + } + return (_a = this.context).lookupMaybe.apply(_a, __spreadArrays([this.get(index)], types)); + }; + PDFArray3.prototype.lookup = function(index) { + var _a; + var types = []; + for (var _i = 1; _i < arguments.length; _i++) { + types[_i - 1] = arguments[_i]; + } + return (_a = this.context).lookup.apply(_a, __spreadArrays([this.get(index)], types)); + }; + PDFArray3.prototype.asRectangle = function() { + if (this.size() !== 4) + throw new PDFArrayIsNotRectangleError(this.size()); + var lowerLeftX = this.lookup(0, PDFNumber_default).asNumber(); + var lowerLeftY = this.lookup(1, PDFNumber_default).asNumber(); + var upperRightX = this.lookup(2, PDFNumber_default).asNumber(); + var upperRightY = this.lookup(3, PDFNumber_default).asNumber(); + var x = lowerLeftX; + var y = lowerLeftY; + var width = upperRightX - lowerLeftX; + var height = upperRightY - lowerLeftY; + return { x, y, width, height }; + }; + PDFArray3.prototype.asArray = function() { + return this.array.slice(); + }; + PDFArray3.prototype.clone = function(context) { + var clone = PDFArray3.withContext(context || this.context); + for (var idx = 0, len = this.size(); idx < len; idx++) { + clone.push(this.array[idx]); + } + return clone; + }; + PDFArray3.prototype.toString = function() { + var arrayString = "[ "; + for (var idx = 0, len = this.size(); idx < len; idx++) { + arrayString += this.get(idx).toString(); + arrayString += " "; + } + arrayString += "]"; + return arrayString; + }; + PDFArray3.prototype.sizeInBytes = function() { + var size = 3; + for (var idx = 0, len = this.size(); idx < len; idx++) { + size += this.get(idx).sizeInBytes() + 1; + } + return size; + }; + PDFArray3.prototype.copyBytesInto = function(buffer, offset) { + var initialOffset = offset; + buffer[offset++] = CharCodes_default.LeftSquareBracket; + buffer[offset++] = CharCodes_default.Space; + for (var idx = 0, len = this.size(); idx < len; idx++) { + offset += this.get(idx).copyBytesInto(buffer, offset); + buffer[offset++] = CharCodes_default.Space; + } + buffer[offset++] = CharCodes_default.RightSquareBracket; + return offset - initialOffset; + }; + PDFArray3.prototype.scalePDFNumbers = function(x, y) { + for (var idx = 0, len = this.size(); idx < len; idx++) { + var el = this.lookup(idx); + if (el instanceof PDFNumber_default) { + var factor = idx % 2 === 0 ? x : y; + this.set(idx, PDFNumber_default.of(el.asNumber() * factor)); + } + } + }; + PDFArray3.withContext = function(context) { + return new PDFArray3(context); + }; + return PDFArray3; + }(PDFObject_default) +); +var PDFArray_default = PDFArray; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/core/objects/PDFBool.js +var ENFORCER = {}; +var PDFBool = ( + /** @class */ + function(_super) { + __extends(PDFBool2, _super); + function PDFBool2(enforcer, value) { + var _this = this; + if (enforcer !== ENFORCER) + throw new PrivateConstructorError("PDFBool"); + _this = _super.call(this) || this; + _this.value = value; + return _this; + } + PDFBool2.prototype.asBoolean = function() { + return this.value; + }; + PDFBool2.prototype.clone = function() { + return this; + }; + PDFBool2.prototype.toString = function() { + return String(this.value); + }; + PDFBool2.prototype.sizeInBytes = function() { + return this.value ? 4 : 5; + }; + PDFBool2.prototype.copyBytesInto = function(buffer, offset) { + if (this.value) { + buffer[offset++] = CharCodes_default.t; + buffer[offset++] = CharCodes_default.r; + buffer[offset++] = CharCodes_default.u; + buffer[offset++] = CharCodes_default.e; + return 4; + } else { + buffer[offset++] = CharCodes_default.f; + buffer[offset++] = CharCodes_default.a; + buffer[offset++] = CharCodes_default.l; + buffer[offset++] = CharCodes_default.s; + buffer[offset++] = CharCodes_default.e; + return 5; + } + }; + PDFBool2.True = new PDFBool2(ENFORCER, true); + PDFBool2.False = new PDFBool2(ENFORCER, false); + return PDFBool2; + }(PDFObject_default) +); +var PDFBool_default = PDFBool; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/core/syntax/Delimiters.js +var IsDelimiter = new Uint8Array(256); +IsDelimiter[CharCodes_default.LeftParen] = 1; +IsDelimiter[CharCodes_default.RightParen] = 1; +IsDelimiter[CharCodes_default.LessThan] = 1; +IsDelimiter[CharCodes_default.GreaterThan] = 1; +IsDelimiter[CharCodes_default.LeftSquareBracket] = 1; +IsDelimiter[CharCodes_default.RightSquareBracket] = 1; +IsDelimiter[CharCodes_default.LeftCurly] = 1; +IsDelimiter[CharCodes_default.RightCurly] = 1; +IsDelimiter[CharCodes_default.ForwardSlash] = 1; +IsDelimiter[CharCodes_default.Percent] = 1; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/core/syntax/Whitespace.js +var IsWhitespace = new Uint8Array(256); +IsWhitespace[CharCodes_default.Null] = 1; +IsWhitespace[CharCodes_default.Tab] = 1; +IsWhitespace[CharCodes_default.Newline] = 1; +IsWhitespace[CharCodes_default.FormFeed] = 1; +IsWhitespace[CharCodes_default.CarriageReturn] = 1; +IsWhitespace[CharCodes_default.Space] = 1; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/core/syntax/Irregular.js +var IsIrregular = new Uint8Array(256); +for (idx = 0, len = 256; idx < len; idx++) { + IsIrregular[idx] = IsWhitespace[idx] || IsDelimiter[idx] ? 1 : 0; +} +var idx; +var len; +IsIrregular[CharCodes_default.Hash] = 1; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/core/objects/PDFName.js +var decodeName = function(name) { + return name.replace(/#([\dABCDEF]{2})/g, function(_, hex) { + return charFromHexCode(hex); + }); +}; +var isRegularChar = function(charCode) { + return charCode >= CharCodes_default.ExclamationPoint && charCode <= CharCodes_default.Tilde && !IsIrregular[charCode]; +}; +var ENFORCER2 = {}; +var pool = /* @__PURE__ */ new Map(); +var PDFName = ( + /** @class */ + function(_super) { + __extends(PDFName2, _super); + function PDFName2(enforcer, name) { + var _this = this; + if (enforcer !== ENFORCER2) + throw new PrivateConstructorError("PDFName"); + _this = _super.call(this) || this; + var encodedName = "/"; + for (var idx = 0, len = name.length; idx < len; idx++) { + var character = name[idx]; + var code = toCharCode(character); + encodedName += isRegularChar(code) ? character : "#" + toHexString(code); + } + _this.encodedName = encodedName; + return _this; + } + PDFName2.prototype.asBytes = function() { + var bytes = []; + var hex = ""; + var escaped = false; + var pushByte = function(byte2) { + if (byte2 !== void 0) + bytes.push(byte2); + escaped = false; + }; + for (var idx = 1, len = this.encodedName.length; idx < len; idx++) { + var char = this.encodedName[idx]; + var byte = toCharCode(char); + var nextChar = this.encodedName[idx + 1]; + if (!escaped) { + if (byte === CharCodes_default.Hash) + escaped = true; + else + pushByte(byte); + } else { + if (byte >= CharCodes_default.Zero && byte <= CharCodes_default.Nine || byte >= CharCodes_default.a && byte <= CharCodes_default.f || byte >= CharCodes_default.A && byte <= CharCodes_default.F) { + hex += char; + if (hex.length === 2 || !(nextChar >= "0" && nextChar <= "9" || nextChar >= "a" && nextChar <= "f" || nextChar >= "A" && nextChar <= "F")) { + pushByte(parseInt(hex, 16)); + hex = ""; + } + } else { + pushByte(byte); + } + } + } + return new Uint8Array(bytes); + }; + PDFName2.prototype.decodeText = function() { + var bytes = this.asBytes(); + return String.fromCharCode.apply(String, Array.from(bytes)); + }; + PDFName2.prototype.asString = function() { + return this.encodedName; + }; + PDFName2.prototype.value = function() { + return this.encodedName; + }; + PDFName2.prototype.clone = function() { + return this; + }; + PDFName2.prototype.toString = function() { + return this.encodedName; + }; + PDFName2.prototype.sizeInBytes = function() { + return this.encodedName.length; + }; + PDFName2.prototype.copyBytesInto = function(buffer, offset) { + offset += copyStringIntoBuffer(this.encodedName, buffer, offset); + return this.encodedName.length; + }; + PDFName2.of = function(name) { + var decodedValue = decodeName(name); + var instance = pool.get(decodedValue); + if (!instance) { + instance = new PDFName2(ENFORCER2, decodedValue); + pool.set(decodedValue, instance); + } + return instance; + }; + PDFName2.Length = PDFName2.of("Length"); + PDFName2.FlateDecode = PDFName2.of("FlateDecode"); + PDFName2.Resources = PDFName2.of("Resources"); + PDFName2.Font = PDFName2.of("Font"); + PDFName2.XObject = PDFName2.of("XObject"); + PDFName2.ExtGState = PDFName2.of("ExtGState"); + PDFName2.Contents = PDFName2.of("Contents"); + PDFName2.Type = PDFName2.of("Type"); + PDFName2.Parent = PDFName2.of("Parent"); + PDFName2.MediaBox = PDFName2.of("MediaBox"); + PDFName2.Page = PDFName2.of("Page"); + PDFName2.Annots = PDFName2.of("Annots"); + PDFName2.TrimBox = PDFName2.of("TrimBox"); + PDFName2.ArtBox = PDFName2.of("ArtBox"); + PDFName2.BleedBox = PDFName2.of("BleedBox"); + PDFName2.CropBox = PDFName2.of("CropBox"); + PDFName2.Rotate = PDFName2.of("Rotate"); + PDFName2.Title = PDFName2.of("Title"); + PDFName2.Author = PDFName2.of("Author"); + PDFName2.Subject = PDFName2.of("Subject"); + PDFName2.Creator = PDFName2.of("Creator"); + PDFName2.Keywords = PDFName2.of("Keywords"); + PDFName2.Producer = PDFName2.of("Producer"); + PDFName2.CreationDate = PDFName2.of("CreationDate"); + PDFName2.ModDate = PDFName2.of("ModDate"); + return PDFName2; + }(PDFObject_default) +); +var PDFName_default = PDFName; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/core/objects/PDFNull.js +var PDFNull = ( + /** @class */ + function(_super) { + __extends(PDFNull2, _super); + function PDFNull2() { + return _super !== null && _super.apply(this, arguments) || this; + } + PDFNull2.prototype.asNull = function() { + return null; + }; + PDFNull2.prototype.clone = function() { + return this; + }; + PDFNull2.prototype.toString = function() { + return "null"; + }; + PDFNull2.prototype.sizeInBytes = function() { + return 4; + }; + PDFNull2.prototype.copyBytesInto = function(buffer, offset) { + buffer[offset++] = CharCodes_default.n; + buffer[offset++] = CharCodes_default.u; + buffer[offset++] = CharCodes_default.l; + buffer[offset++] = CharCodes_default.l; + return 4; + }; + return PDFNull2; + }(PDFObject_default) +); +var PDFNull_default = new PDFNull(); + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/core/objects/PDFDict.js +var PDFDict = ( + /** @class */ + function(_super) { + __extends(PDFDict2, _super); + function PDFDict2(map, context) { + var _this = _super.call(this) || this; + _this.dict = map; + _this.context = context; + return _this; + } + PDFDict2.prototype.keys = function() { + return Array.from(this.dict.keys()); + }; + PDFDict2.prototype.values = function() { + return Array.from(this.dict.values()); + }; + PDFDict2.prototype.entries = function() { + return Array.from(this.dict.entries()); + }; + PDFDict2.prototype.set = function(key, value) { + this.dict.set(key, value); + }; + PDFDict2.prototype.get = function(key, preservePDFNull) { + if (preservePDFNull === void 0) { + preservePDFNull = false; + } + var value = this.dict.get(key); + if (value === PDFNull_default && !preservePDFNull) + return void 0; + return value; + }; + PDFDict2.prototype.has = function(key) { + var value = this.dict.get(key); + return value !== void 0 && value !== PDFNull_default; + }; + PDFDict2.prototype.lookupMaybe = function(key) { + var _a; + var types = []; + for (var _i = 1; _i < arguments.length; _i++) { + types[_i - 1] = arguments[_i]; + } + var preservePDFNull = types.includes(PDFNull_default); + var value = (_a = this.context).lookupMaybe.apply(_a, __spreadArrays([this.get(key, preservePDFNull)], types)); + if (value === PDFNull_default && !preservePDFNull) + return void 0; + return value; + }; + PDFDict2.prototype.lookup = function(key) { + var _a; + var types = []; + for (var _i = 1; _i < arguments.length; _i++) { + types[_i - 1] = arguments[_i]; + } + var preservePDFNull = types.includes(PDFNull_default); + var value = (_a = this.context).lookup.apply(_a, __spreadArrays([this.get(key, preservePDFNull)], types)); + if (value === PDFNull_default && !preservePDFNull) + return void 0; + return value; + }; + PDFDict2.prototype.delete = function(key) { + return this.dict.delete(key); + }; + PDFDict2.prototype.asMap = function() { + return new Map(this.dict); + }; + PDFDict2.prototype.uniqueKey = function(tag) { + if (tag === void 0) { + tag = ""; + } + var existingKeys = this.keys(); + var key = PDFName_default.of(this.context.addRandomSuffix(tag, 10)); + while (existingKeys.includes(key)) { + key = PDFName_default.of(this.context.addRandomSuffix(tag, 10)); + } + return key; + }; + PDFDict2.prototype.clone = function(context) { + var clone = PDFDict2.withContext(context || this.context); + var entries = this.entries(); + for (var idx = 0, len = entries.length; idx < len; idx++) { + var _a = entries[idx], key = _a[0], value = _a[1]; + clone.set(key, value); + } + return clone; + }; + PDFDict2.prototype.toString = function() { + var dictString = "<<\n"; + var entries = this.entries(); + for (var idx = 0, len = entries.length; idx < len; idx++) { + var _a = entries[idx], key = _a[0], value = _a[1]; + dictString += key.toString() + " " + value.toString() + "\n"; + } + dictString += ">>"; + return dictString; + }; + PDFDict2.prototype.sizeInBytes = function() { + var size = 5; + var entries = this.entries(); + for (var idx = 0, len = entries.length; idx < len; idx++) { + var _a = entries[idx], key = _a[0], value = _a[1]; + size += key.sizeInBytes() + value.sizeInBytes() + 2; + } + return size; + }; + PDFDict2.prototype.copyBytesInto = function(buffer, offset) { + var initialOffset = offset; + buffer[offset++] = CharCodes_default.LessThan; + buffer[offset++] = CharCodes_default.LessThan; + buffer[offset++] = CharCodes_default.Newline; + var entries = this.entries(); + for (var idx = 0, len = entries.length; idx < len; idx++) { + var _a = entries[idx], key = _a[0], value = _a[1]; + offset += key.copyBytesInto(buffer, offset); + buffer[offset++] = CharCodes_default.Space; + offset += value.copyBytesInto(buffer, offset); + buffer[offset++] = CharCodes_default.Newline; + } + buffer[offset++] = CharCodes_default.GreaterThan; + buffer[offset++] = CharCodes_default.GreaterThan; + return offset - initialOffset; + }; + PDFDict2.withContext = function(context) { + return new PDFDict2(/* @__PURE__ */ new Map(), context); + }; + PDFDict2.fromMapWithContext = function(map, context) { + return new PDFDict2(map, context); + }; + return PDFDict2; + }(PDFObject_default) +); +var PDFDict_default = PDFDict; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/core/objects/PDFStream.js +var PDFStream = ( + /** @class */ + function(_super) { + __extends(PDFStream2, _super); + function PDFStream2(dict) { + var _this = _super.call(this) || this; + _this.dict = dict; + return _this; + } + PDFStream2.prototype.clone = function(_context) { + throw new MethodNotImplementedError(this.constructor.name, "clone"); + }; + PDFStream2.prototype.getContentsString = function() { + throw new MethodNotImplementedError(this.constructor.name, "getContentsString"); + }; + PDFStream2.prototype.getContents = function() { + throw new MethodNotImplementedError(this.constructor.name, "getContents"); + }; + PDFStream2.prototype.getContentsSize = function() { + throw new MethodNotImplementedError(this.constructor.name, "getContentsSize"); + }; + PDFStream2.prototype.updateDict = function() { + var contentsSize = this.getContentsSize(); + this.dict.set(PDFName_default.Length, PDFNumber_default.of(contentsSize)); + }; + PDFStream2.prototype.sizeInBytes = function() { + this.updateDict(); + return this.dict.sizeInBytes() + this.getContentsSize() + 18; + }; + PDFStream2.prototype.toString = function() { + this.updateDict(); + var streamString = this.dict.toString(); + streamString += "\nstream\n"; + streamString += this.getContentsString(); + streamString += "\nendstream"; + return streamString; + }; + PDFStream2.prototype.copyBytesInto = function(buffer, offset) { + this.updateDict(); + var initialOffset = offset; + offset += this.dict.copyBytesInto(buffer, offset); + buffer[offset++] = CharCodes_default.Newline; + buffer[offset++] = CharCodes_default.s; + buffer[offset++] = CharCodes_default.t; + buffer[offset++] = CharCodes_default.r; + buffer[offset++] = CharCodes_default.e; + buffer[offset++] = CharCodes_default.a; + buffer[offset++] = CharCodes_default.m; + buffer[offset++] = CharCodes_default.Newline; + var contents = this.getContents(); + for (var idx = 0, len = contents.length; idx < len; idx++) { + buffer[offset++] = contents[idx]; + } + buffer[offset++] = CharCodes_default.Newline; + buffer[offset++] = CharCodes_default.e; + buffer[offset++] = CharCodes_default.n; + buffer[offset++] = CharCodes_default.d; + buffer[offset++] = CharCodes_default.s; + buffer[offset++] = CharCodes_default.t; + buffer[offset++] = CharCodes_default.r; + buffer[offset++] = CharCodes_default.e; + buffer[offset++] = CharCodes_default.a; + buffer[offset++] = CharCodes_default.m; + return offset - initialOffset; + }; + return PDFStream2; + }(PDFObject_default) +); +var PDFStream_default = PDFStream; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/core/objects/PDFRawStream.js +var PDFRawStream = ( + /** @class */ + function(_super) { + __extends(PDFRawStream2, _super); + function PDFRawStream2(dict, contents) { + var _this = _super.call(this, dict) || this; + _this.contents = contents; + return _this; + } + PDFRawStream2.prototype.asUint8Array = function() { + return this.contents.slice(); + }; + PDFRawStream2.prototype.clone = function(context) { + return PDFRawStream2.of(this.dict.clone(context), this.contents.slice()); + }; + PDFRawStream2.prototype.getContentsString = function() { + return arrayAsString(this.contents); + }; + PDFRawStream2.prototype.getContents = function() { + return this.contents; + }; + PDFRawStream2.prototype.getContentsSize = function() { + return this.contents.length; + }; + PDFRawStream2.of = function(dict, contents) { + return new PDFRawStream2(dict, contents); + }; + return PDFRawStream2; + }(PDFStream_default) +); +var PDFRawStream_default = PDFRawStream; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/core/objects/PDFRef.js +var ENFORCER3 = {}; +var pool2 = /* @__PURE__ */ new Map(); +var PDFRef = ( + /** @class */ + function(_super) { + __extends(PDFRef3, _super); + function PDFRef3(enforcer, objectNumber, generationNumber) { + var _this = this; + if (enforcer !== ENFORCER3) + throw new PrivateConstructorError("PDFRef"); + _this = _super.call(this) || this; + _this.objectNumber = objectNumber; + _this.generationNumber = generationNumber; + _this.tag = objectNumber + " " + generationNumber + " R"; + return _this; + } + PDFRef3.prototype.clone = function() { + return this; + }; + PDFRef3.prototype.toString = function() { + return this.tag; + }; + PDFRef3.prototype.sizeInBytes = function() { + return this.tag.length; + }; + PDFRef3.prototype.copyBytesInto = function(buffer, offset) { + offset += copyStringIntoBuffer(this.tag, buffer, offset); + return this.tag.length; + }; + PDFRef3.of = function(objectNumber, generationNumber) { + if (generationNumber === void 0) { + generationNumber = 0; + } + var tag = objectNumber + " " + generationNumber + " R"; + var instance = pool2.get(tag); + if (!instance) { + instance = new PDFRef3(ENFORCER3, objectNumber, generationNumber); + pool2.set(tag, instance); + } + return instance; + }; + return PDFRef3; + }(PDFObject_default) +); +var PDFRef_default = PDFRef; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/core/operators/PDFOperator.js +var PDFOperator = ( + /** @class */ + function() { + function PDFOperator2(name, args) { + this.name = name; + this.args = args || []; + } + PDFOperator2.prototype.clone = function(context) { + var args = new Array(this.args.length); + for (var idx = 0, len = args.length; idx < len; idx++) { + var arg = this.args[idx]; + args[idx] = arg instanceof PDFObject_default ? arg.clone(context) : arg; + } + return PDFOperator2.of(this.name, args); + }; + PDFOperator2.prototype.toString = function() { + var value = ""; + for (var idx = 0, len = this.args.length; idx < len; idx++) { + value += String(this.args[idx]) + " "; + } + value += this.name; + return value; + }; + PDFOperator2.prototype.sizeInBytes = function() { + var size = 0; + for (var idx = 0, len = this.args.length; idx < len; idx++) { + var arg = this.args[idx]; + size += (arg instanceof PDFObject_default ? arg.sizeInBytes() : arg.length) + 1; + } + size += this.name.length; + return size; + }; + PDFOperator2.prototype.copyBytesInto = function(buffer, offset) { + var initialOffset = offset; + for (var idx = 0, len = this.args.length; idx < len; idx++) { + var arg = this.args[idx]; + if (arg instanceof PDFObject_default) { + offset += arg.copyBytesInto(buffer, offset); + } else { + offset += copyStringIntoBuffer(arg, buffer, offset); + } + buffer[offset++] = CharCodes_default.Space; + } + offset += copyStringIntoBuffer(this.name, buffer, offset); + return offset - initialOffset; + }; + PDFOperator2.of = function(name, args) { + return new PDFOperator2(name, args); + }; + return PDFOperator2; + }() +); +var PDFOperator_default = PDFOperator; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/core/operators/PDFOperatorNames.js +var PDFOperatorNames; +(function(PDFOperatorNames2) { + PDFOperatorNames2["NonStrokingColor"] = "sc"; + PDFOperatorNames2["NonStrokingColorN"] = "scn"; + PDFOperatorNames2["NonStrokingColorRgb"] = "rg"; + PDFOperatorNames2["NonStrokingColorGray"] = "g"; + PDFOperatorNames2["NonStrokingColorCmyk"] = "k"; + PDFOperatorNames2["NonStrokingColorspace"] = "cs"; + PDFOperatorNames2["StrokingColor"] = "SC"; + PDFOperatorNames2["StrokingColorN"] = "SCN"; + PDFOperatorNames2["StrokingColorRgb"] = "RG"; + PDFOperatorNames2["StrokingColorGray"] = "G"; + PDFOperatorNames2["StrokingColorCmyk"] = "K"; + PDFOperatorNames2["StrokingColorspace"] = "CS"; + PDFOperatorNames2["BeginMarkedContentSequence"] = "BDC"; + PDFOperatorNames2["BeginMarkedContent"] = "BMC"; + PDFOperatorNames2["EndMarkedContent"] = "EMC"; + PDFOperatorNames2["MarkedContentPointWithProps"] = "DP"; + PDFOperatorNames2["MarkedContentPoint"] = "MP"; + PDFOperatorNames2["DrawObject"] = "Do"; + PDFOperatorNames2["ConcatTransformationMatrix"] = "cm"; + PDFOperatorNames2["PopGraphicsState"] = "Q"; + PDFOperatorNames2["PushGraphicsState"] = "q"; + PDFOperatorNames2["SetFlatness"] = "i"; + PDFOperatorNames2["SetGraphicsStateParams"] = "gs"; + PDFOperatorNames2["SetLineCapStyle"] = "J"; + PDFOperatorNames2["SetLineDashPattern"] = "d"; + PDFOperatorNames2["SetLineJoinStyle"] = "j"; + PDFOperatorNames2["SetLineMiterLimit"] = "M"; + PDFOperatorNames2["SetLineWidth"] = "w"; + PDFOperatorNames2["SetTextMatrix"] = "Tm"; + PDFOperatorNames2["SetRenderingIntent"] = "ri"; + PDFOperatorNames2["AppendRectangle"] = "re"; + PDFOperatorNames2["BeginInlineImage"] = "BI"; + PDFOperatorNames2["BeginInlineImageData"] = "ID"; + PDFOperatorNames2["EndInlineImage"] = "EI"; + PDFOperatorNames2["ClipEvenOdd"] = "W*"; + PDFOperatorNames2["ClipNonZero"] = "W"; + PDFOperatorNames2["CloseAndStroke"] = "s"; + PDFOperatorNames2["CloseFillEvenOddAndStroke"] = "b*"; + PDFOperatorNames2["CloseFillNonZeroAndStroke"] = "b"; + PDFOperatorNames2["ClosePath"] = "h"; + PDFOperatorNames2["AppendBezierCurve"] = "c"; + PDFOperatorNames2["CurveToReplicateFinalPoint"] = "y"; + PDFOperatorNames2["CurveToReplicateInitialPoint"] = "v"; + PDFOperatorNames2["EndPath"] = "n"; + PDFOperatorNames2["FillEvenOddAndStroke"] = "B*"; + PDFOperatorNames2["FillEvenOdd"] = "f*"; + PDFOperatorNames2["FillNonZeroAndStroke"] = "B"; + PDFOperatorNames2["FillNonZero"] = "f"; + PDFOperatorNames2["LegacyFillNonZero"] = "F"; + PDFOperatorNames2["LineTo"] = "l"; + PDFOperatorNames2["MoveTo"] = "m"; + PDFOperatorNames2["ShadingFill"] = "sh"; + PDFOperatorNames2["StrokePath"] = "S"; + PDFOperatorNames2["BeginText"] = "BT"; + PDFOperatorNames2["EndText"] = "ET"; + PDFOperatorNames2["MoveText"] = "Td"; + PDFOperatorNames2["MoveTextSetLeading"] = "TD"; + PDFOperatorNames2["NextLine"] = "T*"; + PDFOperatorNames2["SetCharacterSpacing"] = "Tc"; + PDFOperatorNames2["SetFontAndSize"] = "Tf"; + PDFOperatorNames2["SetTextHorizontalScaling"] = "Tz"; + PDFOperatorNames2["SetTextLineHeight"] = "TL"; + PDFOperatorNames2["SetTextRenderingMode"] = "Tr"; + PDFOperatorNames2["SetTextRise"] = "Ts"; + PDFOperatorNames2["SetWordSpacing"] = "Tw"; + PDFOperatorNames2["ShowText"] = "Tj"; + PDFOperatorNames2["ShowTextAdjusted"] = "TJ"; + PDFOperatorNames2["ShowTextLine"] = "'"; + PDFOperatorNames2["ShowTextLineAndSpace"] = '"'; + PDFOperatorNames2["Type3D0"] = "d0"; + PDFOperatorNames2["Type3D1"] = "d1"; + PDFOperatorNames2["BeginCompatibilitySection"] = "BX"; + PDFOperatorNames2["EndCompatibilitySection"] = "EX"; +})(PDFOperatorNames || (PDFOperatorNames = {})); +var PDFOperatorNames_default = PDFOperatorNames; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/core/structures/PDFFlateStream.js +var import_pako2 = __toESM(require_pako()); +var PDFFlateStream = ( + /** @class */ + function(_super) { + __extends(PDFFlateStream2, _super); + function PDFFlateStream2(dict, encode) { + var _this = _super.call(this, dict) || this; + _this.computeContents = function() { + var unencodedContents = _this.getUnencodedContents(); + return _this.encode ? import_pako2.default.deflate(unencodedContents) : unencodedContents; + }; + _this.encode = encode; + if (encode) + dict.set(PDFName_default.of("Filter"), PDFName_default.of("FlateDecode")); + _this.contentsCache = Cache_default.populatedBy(_this.computeContents); + return _this; + } + PDFFlateStream2.prototype.getContents = function() { + return this.contentsCache.access(); + }; + PDFFlateStream2.prototype.getContentsSize = function() { + return this.contentsCache.access().length; + }; + PDFFlateStream2.prototype.getUnencodedContents = function() { + throw new MethodNotImplementedError(this.constructor.name, "getUnencodedContents"); + }; + return PDFFlateStream2; + }(PDFStream_default) +); +var PDFFlateStream_default = PDFFlateStream; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/core/structures/PDFContentStream.js +var PDFContentStream = ( + /** @class */ + function(_super) { + __extends(PDFContentStream2, _super); + function PDFContentStream2(dict, operators, encode) { + if (encode === void 0) { + encode = true; + } + var _this = _super.call(this, dict, encode) || this; + _this.operators = operators; + return _this; + } + PDFContentStream2.prototype.push = function() { + var _a; + var operators = []; + for (var _i = 0; _i < arguments.length; _i++) { + operators[_i] = arguments[_i]; + } + (_a = this.operators).push.apply(_a, operators); + }; + PDFContentStream2.prototype.clone = function(context) { + var operators = new Array(this.operators.length); + for (var idx = 0, len = this.operators.length; idx < len; idx++) { + operators[idx] = this.operators[idx].clone(context); + } + var _a = this, dict = _a.dict, encode = _a.encode; + return PDFContentStream2.of(dict.clone(context), operators, encode); + }; + PDFContentStream2.prototype.getContentsString = function() { + var value = ""; + for (var idx = 0, len = this.operators.length; idx < len; idx++) { + value += this.operators[idx] + "\n"; + } + return value; + }; + PDFContentStream2.prototype.getUnencodedContents = function() { + var buffer = new Uint8Array(this.getUnencodedContentsSize()); + var offset = 0; + for (var idx = 0, len = this.operators.length; idx < len; idx++) { + offset += this.operators[idx].copyBytesInto(buffer, offset); + buffer[offset++] = CharCodes_default.Newline; + } + return buffer; + }; + PDFContentStream2.prototype.getUnencodedContentsSize = function() { + var size = 0; + for (var idx = 0, len = this.operators.length; idx < len; idx++) { + size += this.operators[idx].sizeInBytes() + 1; + } + return size; + }; + PDFContentStream2.of = function(dict, operators, encode) { + if (encode === void 0) { + encode = true; + } + return new PDFContentStream2(dict, operators, encode); + }; + return PDFContentStream2; + }(PDFFlateStream_default) +); +var PDFContentStream_default = PDFContentStream; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/utils/rng.js +var SimpleRNG = ( + /** @class */ + function() { + function SimpleRNG2(seed) { + this.seed = seed; + } + SimpleRNG2.prototype.nextInt = function() { + var x = Math.sin(this.seed++) * 1e4; + return x - Math.floor(x); + }; + SimpleRNG2.withSeed = function(seed) { + return new SimpleRNG2(seed); + }; + return SimpleRNG2; + }() +); + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/core/PDFContext.js +var byAscendingObjectNumber = function(_a, _b) { + var a = _a[0]; + var b = _b[0]; + return a.objectNumber - b.objectNumber; +}; +var PDFContext = ( + /** @class */ + function() { + function PDFContext2() { + this.largestObjectNumber = 0; + this.header = PDFHeader_default.forVersion(1, 7); + this.trailerInfo = {}; + this.indirectObjects = /* @__PURE__ */ new Map(); + this.rng = SimpleRNG.withSeed(1); + } + PDFContext2.prototype.assign = function(ref, object) { + this.indirectObjects.set(ref, object); + if (ref.objectNumber > this.largestObjectNumber) { + this.largestObjectNumber = ref.objectNumber; + } + }; + PDFContext2.prototype.nextRef = function() { + this.largestObjectNumber += 1; + return PDFRef_default.of(this.largestObjectNumber); + }; + PDFContext2.prototype.register = function(object) { + var ref = this.nextRef(); + this.assign(ref, object); + return ref; + }; + PDFContext2.prototype.delete = function(ref) { + return this.indirectObjects.delete(ref); + }; + PDFContext2.prototype.lookupMaybe = function(ref) { + var types = []; + for (var _i = 1; _i < arguments.length; _i++) { + types[_i - 1] = arguments[_i]; + } + var preservePDFNull = types.includes(PDFNull_default); + var result = ref instanceof PDFRef_default ? this.indirectObjects.get(ref) : ref; + if (!result || result === PDFNull_default && !preservePDFNull) + return void 0; + for (var idx = 0, len = types.length; idx < len; idx++) { + var type = types[idx]; + if (type === PDFNull_default) { + if (result === PDFNull_default) + return result; + } else { + if (result instanceof type) + return result; + } + } + throw new UnexpectedObjectTypeError(types, result); + }; + PDFContext2.prototype.lookup = function(ref) { + var types = []; + for (var _i = 1; _i < arguments.length; _i++) { + types[_i - 1] = arguments[_i]; + } + var result = ref instanceof PDFRef_default ? this.indirectObjects.get(ref) : ref; + if (types.length === 0) + return result; + for (var idx = 0, len = types.length; idx < len; idx++) { + var type = types[idx]; + if (type === PDFNull_default) { + if (result === PDFNull_default) + return result; + } else { + if (result instanceof type) + return result; + } + } + throw new UnexpectedObjectTypeError(types, result); + }; + PDFContext2.prototype.getObjectRef = function(pdfObject) { + var entries = Array.from(this.indirectObjects.entries()); + for (var idx = 0, len = entries.length; idx < len; idx++) { + var _a = entries[idx], ref = _a[0], object = _a[1]; + if (object === pdfObject) { + return ref; + } + } + return void 0; + }; + PDFContext2.prototype.enumerateIndirectObjects = function() { + return Array.from(this.indirectObjects.entries()).sort(byAscendingObjectNumber); + }; + PDFContext2.prototype.obj = function(literal) { + if (literal instanceof PDFObject_default) { + return literal; + } else if (literal === null || literal === void 0) { + return PDFNull_default; + } else if (typeof literal === "string") { + return PDFName_default.of(literal); + } else if (typeof literal === "number") { + return PDFNumber_default.of(literal); + } else if (typeof literal === "boolean") { + return literal ? PDFBool_default.True : PDFBool_default.False; + } else if (Array.isArray(literal)) { + var array = PDFArray_default.withContext(this); + for (var idx = 0, len = literal.length; idx < len; idx++) { + array.push(this.obj(literal[idx])); + } + return array; + } else { + var dict = PDFDict_default.withContext(this); + var keys = Object.keys(literal); + for (var idx = 0, len = keys.length; idx < len; idx++) { + var key = keys[idx]; + var value = literal[key]; + if (value !== void 0) + dict.set(PDFName_default.of(key), this.obj(value)); + } + return dict; + } + }; + PDFContext2.prototype.stream = function(contents, dict) { + if (dict === void 0) { + dict = {}; + } + return PDFRawStream_default.of(this.obj(dict), typedArrayFor(contents)); + }; + PDFContext2.prototype.flateStream = function(contents, dict) { + if (dict === void 0) { + dict = {}; + } + return this.stream(import_pako3.default.deflate(typedArrayFor(contents)), __assign(__assign({}, dict), { Filter: "FlateDecode" })); + }; + PDFContext2.prototype.contentStream = function(operators, dict) { + if (dict === void 0) { + dict = {}; + } + return PDFContentStream_default.of(this.obj(dict), operators); + }; + PDFContext2.prototype.formXObject = function(operators, dict) { + if (dict === void 0) { + dict = {}; + } + return this.contentStream(operators, __assign(__assign({ BBox: this.obj([0, 0, 0, 0]), Matrix: this.obj([1, 0, 0, 1, 0, 0]) }, dict), { Type: "XObject", Subtype: "Form" })); + }; + PDFContext2.prototype.getPushGraphicsStateContentStream = function() { + if (this.pushGraphicsStateContentStreamRef) { + return this.pushGraphicsStateContentStreamRef; + } + var dict = this.obj({}); + var op = PDFOperator_default.of(PDFOperatorNames_default.PushGraphicsState); + var stream2 = PDFContentStream_default.of(dict, [op]); + this.pushGraphicsStateContentStreamRef = this.register(stream2); + return this.pushGraphicsStateContentStreamRef; + }; + PDFContext2.prototype.getPopGraphicsStateContentStream = function() { + if (this.popGraphicsStateContentStreamRef) { + return this.popGraphicsStateContentStreamRef; + } + var dict = this.obj({}); + var op = PDFOperator_default.of(PDFOperatorNames_default.PopGraphicsState); + var stream2 = PDFContentStream_default.of(dict, [op]); + this.popGraphicsStateContentStreamRef = this.register(stream2); + return this.popGraphicsStateContentStreamRef; + }; + PDFContext2.prototype.addRandomSuffix = function(prefix, suffixLength) { + if (suffixLength === void 0) { + suffixLength = 4; + } + return prefix + "-" + Math.floor(this.rng.nextInt() * Math.pow(10, suffixLength)); + }; + PDFContext2.create = function() { + return new PDFContext2(); + }; + return PDFContext2; + }() +); +var PDFContext_default = PDFContext; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/core/structures/PDFPageLeaf.js +var PDFPageLeaf = ( + /** @class */ + function(_super) { + __extends(PDFPageLeaf2, _super); + function PDFPageLeaf2(map, context, autoNormalizeCTM) { + if (autoNormalizeCTM === void 0) { + autoNormalizeCTM = true; + } + var _this = _super.call(this, map, context) || this; + _this.normalized = false; + _this.autoNormalizeCTM = autoNormalizeCTM; + return _this; + } + PDFPageLeaf2.prototype.clone = function(context) { + var clone = PDFPageLeaf2.fromMapWithContext(/* @__PURE__ */ new Map(), context || this.context, this.autoNormalizeCTM); + var entries = this.entries(); + for (var idx = 0, len = entries.length; idx < len; idx++) { + var _a = entries[idx], key = _a[0], value = _a[1]; + clone.set(key, value); + } + return clone; + }; + PDFPageLeaf2.prototype.Parent = function() { + return this.lookupMaybe(PDFName_default.Parent, PDFDict_default); + }; + PDFPageLeaf2.prototype.Contents = function() { + return this.lookup(PDFName_default.of("Contents")); + }; + PDFPageLeaf2.prototype.Annots = function() { + return this.lookupMaybe(PDFName_default.Annots, PDFArray_default); + }; + PDFPageLeaf2.prototype.BleedBox = function() { + return this.lookupMaybe(PDFName_default.BleedBox, PDFArray_default); + }; + PDFPageLeaf2.prototype.TrimBox = function() { + return this.lookupMaybe(PDFName_default.TrimBox, PDFArray_default); + }; + PDFPageLeaf2.prototype.ArtBox = function() { + return this.lookupMaybe(PDFName_default.ArtBox, PDFArray_default); + }; + PDFPageLeaf2.prototype.Resources = function() { + var dictOrRef = this.getInheritableAttribute(PDFName_default.Resources); + return this.context.lookupMaybe(dictOrRef, PDFDict_default); + }; + PDFPageLeaf2.prototype.MediaBox = function() { + var arrayOrRef = this.getInheritableAttribute(PDFName_default.MediaBox); + return this.context.lookup(arrayOrRef, PDFArray_default); + }; + PDFPageLeaf2.prototype.CropBox = function() { + var arrayOrRef = this.getInheritableAttribute(PDFName_default.CropBox); + return this.context.lookupMaybe(arrayOrRef, PDFArray_default); + }; + PDFPageLeaf2.prototype.Rotate = function() { + var numberOrRef = this.getInheritableAttribute(PDFName_default.Rotate); + return this.context.lookupMaybe(numberOrRef, PDFNumber_default); + }; + PDFPageLeaf2.prototype.getInheritableAttribute = function(name) { + var attribute; + this.ascend(function(node) { + if (!attribute) + attribute = node.get(name); + }); + return attribute; + }; + PDFPageLeaf2.prototype.setParent = function(parentRef) { + this.set(PDFName_default.Parent, parentRef); + }; + PDFPageLeaf2.prototype.addContentStream = function(contentStreamRef) { + var Contents = this.normalizedEntries().Contents || this.context.obj([]); + this.set(PDFName_default.Contents, Contents); + Contents.push(contentStreamRef); + }; + PDFPageLeaf2.prototype.wrapContentStreams = function(startStream, endStream) { + var Contents = this.Contents(); + if (Contents instanceof PDFArray_default) { + Contents.insert(0, startStream); + Contents.push(endStream); + return true; + } + return false; + }; + PDFPageLeaf2.prototype.addAnnot = function(annotRef) { + var Annots = this.normalizedEntries().Annots; + Annots.push(annotRef); + }; + PDFPageLeaf2.prototype.removeAnnot = function(annotRef) { + var Annots = this.normalizedEntries().Annots; + var index = Annots.indexOf(annotRef); + if (index !== void 0) { + Annots.remove(index); + } + }; + PDFPageLeaf2.prototype.setFontDictionary = function(name, fontDictRef) { + var Font2 = this.normalizedEntries().Font; + Font2.set(name, fontDictRef); + }; + PDFPageLeaf2.prototype.newFontDictionaryKey = function(tag) { + var Font2 = this.normalizedEntries().Font; + return Font2.uniqueKey(tag); + }; + PDFPageLeaf2.prototype.newFontDictionary = function(tag, fontDictRef) { + var key = this.newFontDictionaryKey(tag); + this.setFontDictionary(key, fontDictRef); + return key; + }; + PDFPageLeaf2.prototype.setXObject = function(name, xObjectRef) { + var XObject = this.normalizedEntries().XObject; + XObject.set(name, xObjectRef); + }; + PDFPageLeaf2.prototype.newXObjectKey = function(tag) { + var XObject = this.normalizedEntries().XObject; + return XObject.uniqueKey(tag); + }; + PDFPageLeaf2.prototype.newXObject = function(tag, xObjectRef) { + var key = this.newXObjectKey(tag); + this.setXObject(key, xObjectRef); + return key; + }; + PDFPageLeaf2.prototype.setExtGState = function(name, extGStateRef) { + var ExtGState = this.normalizedEntries().ExtGState; + ExtGState.set(name, extGStateRef); + }; + PDFPageLeaf2.prototype.newExtGStateKey = function(tag) { + var ExtGState = this.normalizedEntries().ExtGState; + return ExtGState.uniqueKey(tag); + }; + PDFPageLeaf2.prototype.newExtGState = function(tag, extGStateRef) { + var key = this.newExtGStateKey(tag); + this.setExtGState(key, extGStateRef); + return key; + }; + PDFPageLeaf2.prototype.ascend = function(visitor) { + visitor(this); + var Parent = this.Parent(); + if (Parent) + Parent.ascend(visitor); + }; + PDFPageLeaf2.prototype.normalize = function() { + if (this.normalized) + return; + var context = this.context; + var contentsRef = this.get(PDFName_default.Contents); + var contents = this.context.lookup(contentsRef); + if (contents instanceof PDFStream_default) { + this.set(PDFName_default.Contents, context.obj([contentsRef])); + } + if (this.autoNormalizeCTM) { + this.wrapContentStreams(this.context.getPushGraphicsStateContentStream(), this.context.getPopGraphicsStateContentStream()); + } + var dictOrRef = this.getInheritableAttribute(PDFName_default.Resources); + var Resources = context.lookupMaybe(dictOrRef, PDFDict_default) || context.obj({}); + this.set(PDFName_default.Resources, Resources); + var Font2 = Resources.lookupMaybe(PDFName_default.Font, PDFDict_default) || context.obj({}); + Resources.set(PDFName_default.Font, Font2); + var XObject = Resources.lookupMaybe(PDFName_default.XObject, PDFDict_default) || context.obj({}); + Resources.set(PDFName_default.XObject, XObject); + var ExtGState = Resources.lookupMaybe(PDFName_default.ExtGState, PDFDict_default) || context.obj({}); + Resources.set(PDFName_default.ExtGState, ExtGState); + var Annots = this.Annots() || context.obj([]); + this.set(PDFName_default.Annots, Annots); + this.normalized = true; + }; + PDFPageLeaf2.prototype.normalizedEntries = function() { + this.normalize(); + var Annots = this.Annots(); + var Resources = this.Resources(); + var Contents = this.Contents(); + return { + Annots, + Resources, + Contents, + Font: Resources.lookup(PDFName_default.Font, PDFDict_default), + XObject: Resources.lookup(PDFName_default.XObject, PDFDict_default), + ExtGState: Resources.lookup(PDFName_default.ExtGState, PDFDict_default) + }; + }; + PDFPageLeaf2.InheritableEntries = [ + "Resources", + "MediaBox", + "CropBox", + "Rotate" + ]; + PDFPageLeaf2.withContextAndParent = function(context, parent) { + var dict = /* @__PURE__ */ new Map(); + dict.set(PDFName_default.Type, PDFName_default.Page); + dict.set(PDFName_default.Parent, parent); + dict.set(PDFName_default.Resources, context.obj({})); + dict.set(PDFName_default.MediaBox, context.obj([0, 0, 612, 792])); + return new PDFPageLeaf2(dict, context, false); + }; + PDFPageLeaf2.fromMapWithContext = function(map, context, autoNormalizeCTM) { + if (autoNormalizeCTM === void 0) { + autoNormalizeCTM = true; + } + return new PDFPageLeaf2(map, context, autoNormalizeCTM); + }; + return PDFPageLeaf2; + }(PDFDict_default) +); +var PDFPageLeaf_default = PDFPageLeaf; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/core/PDFObjectCopier.js +var PDFObjectCopier = ( + /** @class */ + function() { + function PDFObjectCopier2(src, dest) { + var _this = this; + this.traversedObjects = /* @__PURE__ */ new Map(); + this.copy = function(object) { + return object instanceof PDFPageLeaf_default ? _this.copyPDFPage(object) : object instanceof PDFDict_default ? _this.copyPDFDict(object) : object instanceof PDFArray_default ? _this.copyPDFArray(object) : object instanceof PDFStream_default ? _this.copyPDFStream(object) : object instanceof PDFRef_default ? _this.copyPDFIndirectObject(object) : object.clone(); + }; + this.copyPDFPage = function(originalPage) { + var clonedPage = originalPage.clone(); + var InheritableEntries = PDFPageLeaf_default.InheritableEntries; + for (var idx = 0, len = InheritableEntries.length; idx < len; idx++) { + var key = PDFName_default.of(InheritableEntries[idx]); + var value = clonedPage.getInheritableAttribute(key); + if (!clonedPage.get(key) && value) + clonedPage.set(key, value); + } + clonedPage.delete(PDFName_default.of("Parent")); + return _this.copyPDFDict(clonedPage); + }; + this.copyPDFDict = function(originalDict) { + if (_this.traversedObjects.has(originalDict)) { + return _this.traversedObjects.get(originalDict); + } + var clonedDict = originalDict.clone(_this.dest); + _this.traversedObjects.set(originalDict, clonedDict); + var entries = originalDict.entries(); + for (var idx = 0, len = entries.length; idx < len; idx++) { + var _a = entries[idx], key = _a[0], value = _a[1]; + clonedDict.set(key, _this.copy(value)); + } + return clonedDict; + }; + this.copyPDFArray = function(originalArray) { + if (_this.traversedObjects.has(originalArray)) { + return _this.traversedObjects.get(originalArray); + } + var clonedArray = originalArray.clone(_this.dest); + _this.traversedObjects.set(originalArray, clonedArray); + for (var idx = 0, len = originalArray.size(); idx < len; idx++) { + var value = originalArray.get(idx); + clonedArray.set(idx, _this.copy(value)); + } + return clonedArray; + }; + this.copyPDFStream = function(originalStream) { + if (_this.traversedObjects.has(originalStream)) { + return _this.traversedObjects.get(originalStream); + } + var clonedStream = originalStream.clone(_this.dest); + _this.traversedObjects.set(originalStream, clonedStream); + var entries = originalStream.dict.entries(); + for (var idx = 0, len = entries.length; idx < len; idx++) { + var _a = entries[idx], key = _a[0], value = _a[1]; + clonedStream.dict.set(key, _this.copy(value)); + } + return clonedStream; + }; + this.copyPDFIndirectObject = function(ref) { + var alreadyMapped = _this.traversedObjects.has(ref); + if (!alreadyMapped) { + var newRef = _this.dest.nextRef(); + _this.traversedObjects.set(ref, newRef); + var dereferencedValue = _this.src.lookup(ref); + if (dereferencedValue) { + var cloned = _this.copy(dereferencedValue); + _this.dest.assign(newRef, cloned); + } + } + return _this.traversedObjects.get(ref); + }; + this.src = src; + this.dest = dest; + } + PDFObjectCopier2.for = function(src, dest) { + return new PDFObjectCopier2(src, dest); + }; + return PDFObjectCopier2; + }() +); +var PDFObjectCopier_default = PDFObjectCopier; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/core/document/PDFCrossRefSection.js +var PDFCrossRefSection = ( + /** @class */ + function() { + function PDFCrossRefSection2(firstEntry) { + this.subsections = firstEntry ? [[firstEntry]] : []; + this.chunkIdx = 0; + this.chunkLength = firstEntry ? 1 : 0; + } + PDFCrossRefSection2.prototype.addEntry = function(ref, offset) { + this.append({ ref, offset, deleted: false }); + }; + PDFCrossRefSection2.prototype.addDeletedEntry = function(ref, nextFreeObjectNumber) { + this.append({ ref, offset: nextFreeObjectNumber, deleted: true }); + }; + PDFCrossRefSection2.prototype.toString = function() { + var section = "xref\n"; + for (var rangeIdx = 0, rangeLen = this.subsections.length; rangeIdx < rangeLen; rangeIdx++) { + var range2 = this.subsections[rangeIdx]; + section += range2[0].ref.objectNumber + " " + range2.length + "\n"; + for (var entryIdx = 0, entryLen = range2.length; entryIdx < entryLen; entryIdx++) { + var entry = range2[entryIdx]; + section += padStart(String(entry.offset), 10, "0"); + section += " "; + section += padStart(String(entry.ref.generationNumber), 5, "0"); + section += " "; + section += entry.deleted ? "f" : "n"; + section += " \n"; + } + } + return section; + }; + PDFCrossRefSection2.prototype.sizeInBytes = function() { + var size = 5; + for (var idx = 0, len = this.subsections.length; idx < len; idx++) { + var subsection = this.subsections[idx]; + var subsectionLength = subsection.length; + var firstEntry = subsection[0]; + size += 2; + size += String(firstEntry.ref.objectNumber).length; + size += String(subsectionLength).length; + size += 20 * subsectionLength; + } + return size; + }; + PDFCrossRefSection2.prototype.copyBytesInto = function(buffer, offset) { + var initialOffset = offset; + buffer[offset++] = CharCodes_default.x; + buffer[offset++] = CharCodes_default.r; + buffer[offset++] = CharCodes_default.e; + buffer[offset++] = CharCodes_default.f; + buffer[offset++] = CharCodes_default.Newline; + offset += this.copySubsectionsIntoBuffer(this.subsections, buffer, offset); + return offset - initialOffset; + }; + PDFCrossRefSection2.prototype.copySubsectionsIntoBuffer = function(subsections, buffer, offset) { + var initialOffset = offset; + var length = subsections.length; + for (var idx = 0; idx < length; idx++) { + var subsection = this.subsections[idx]; + var firstObjectNumber = String(subsection[0].ref.objectNumber); + offset += copyStringIntoBuffer(firstObjectNumber, buffer, offset); + buffer[offset++] = CharCodes_default.Space; + var rangeLength = String(subsection.length); + offset += copyStringIntoBuffer(rangeLength, buffer, offset); + buffer[offset++] = CharCodes_default.Newline; + offset += this.copyEntriesIntoBuffer(subsection, buffer, offset); + } + return offset - initialOffset; + }; + PDFCrossRefSection2.prototype.copyEntriesIntoBuffer = function(entries, buffer, offset) { + var length = entries.length; + for (var idx = 0; idx < length; idx++) { + var entry = entries[idx]; + var entryOffset = padStart(String(entry.offset), 10, "0"); + offset += copyStringIntoBuffer(entryOffset, buffer, offset); + buffer[offset++] = CharCodes_default.Space; + var entryGen = padStart(String(entry.ref.generationNumber), 5, "0"); + offset += copyStringIntoBuffer(entryGen, buffer, offset); + buffer[offset++] = CharCodes_default.Space; + buffer[offset++] = entry.deleted ? CharCodes_default.f : CharCodes_default.n; + buffer[offset++] = CharCodes_default.Space; + buffer[offset++] = CharCodes_default.Newline; + } + return 20 * length; + }; + PDFCrossRefSection2.prototype.append = function(currEntry) { + if (this.chunkLength === 0) { + this.subsections.push([currEntry]); + this.chunkIdx = 0; + this.chunkLength = 1; + return; + } + var chunk = this.subsections[this.chunkIdx]; + var prevEntry = chunk[this.chunkLength - 1]; + if (currEntry.ref.objectNumber - prevEntry.ref.objectNumber > 1) { + this.subsections.push([currEntry]); + this.chunkIdx += 1; + this.chunkLength = 1; + } else { + chunk.push(currEntry); + this.chunkLength += 1; + } + }; + PDFCrossRefSection2.create = function() { + return new PDFCrossRefSection2({ + ref: PDFRef_default.of(0, 65535), + offset: 0, + deleted: true + }); + }; + PDFCrossRefSection2.createEmpty = function() { + return new PDFCrossRefSection2(); + }; + return PDFCrossRefSection2; + }() +); +var PDFCrossRefSection_default = PDFCrossRefSection; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/core/document/PDFTrailer.js +var PDFTrailer = ( + /** @class */ + function() { + function PDFTrailer2(lastXRefOffset) { + this.lastXRefOffset = String(lastXRefOffset); + } + PDFTrailer2.prototype.toString = function() { + return "startxref\n" + this.lastXRefOffset + "\n%%EOF"; + }; + PDFTrailer2.prototype.sizeInBytes = function() { + return 16 + this.lastXRefOffset.length; + }; + PDFTrailer2.prototype.copyBytesInto = function(buffer, offset) { + var initialOffset = offset; + buffer[offset++] = CharCodes_default.s; + buffer[offset++] = CharCodes_default.t; + buffer[offset++] = CharCodes_default.a; + buffer[offset++] = CharCodes_default.r; + buffer[offset++] = CharCodes_default.t; + buffer[offset++] = CharCodes_default.x; + buffer[offset++] = CharCodes_default.r; + buffer[offset++] = CharCodes_default.e; + buffer[offset++] = CharCodes_default.f; + buffer[offset++] = CharCodes_default.Newline; + offset += copyStringIntoBuffer(this.lastXRefOffset, buffer, offset); + buffer[offset++] = CharCodes_default.Newline; + buffer[offset++] = CharCodes_default.Percent; + buffer[offset++] = CharCodes_default.Percent; + buffer[offset++] = CharCodes_default.E; + buffer[offset++] = CharCodes_default.O; + buffer[offset++] = CharCodes_default.F; + return offset - initialOffset; + }; + PDFTrailer2.forLastCrossRefSectionOffset = function(offset) { + return new PDFTrailer2(offset); + }; + return PDFTrailer2; + }() +); +var PDFTrailer_default = PDFTrailer; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/core/document/PDFTrailerDict.js +var PDFTrailerDict = ( + /** @class */ + function() { + function PDFTrailerDict2(dict) { + this.dict = dict; + } + PDFTrailerDict2.prototype.toString = function() { + return "trailer\n" + this.dict.toString(); + }; + PDFTrailerDict2.prototype.sizeInBytes = function() { + return 8 + this.dict.sizeInBytes(); + }; + PDFTrailerDict2.prototype.copyBytesInto = function(buffer, offset) { + var initialOffset = offset; + buffer[offset++] = CharCodes_default.t; + buffer[offset++] = CharCodes_default.r; + buffer[offset++] = CharCodes_default.a; + buffer[offset++] = CharCodes_default.i; + buffer[offset++] = CharCodes_default.l; + buffer[offset++] = CharCodes_default.e; + buffer[offset++] = CharCodes_default.r; + buffer[offset++] = CharCodes_default.Newline; + offset += this.dict.copyBytesInto(buffer, offset); + return offset - initialOffset; + }; + PDFTrailerDict2.of = function(dict) { + return new PDFTrailerDict2(dict); + }; + return PDFTrailerDict2; + }() +); +var PDFTrailerDict_default = PDFTrailerDict; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/core/structures/PDFObjectStream.js +var PDFObjectStream = ( + /** @class */ + function(_super) { + __extends(PDFObjectStream2, _super); + function PDFObjectStream2(context, objects, encode) { + if (encode === void 0) { + encode = true; + } + var _this = _super.call(this, context.obj({}), encode) || this; + _this.objects = objects; + _this.offsets = _this.computeObjectOffsets(); + _this.offsetsString = _this.computeOffsetsString(); + _this.dict.set(PDFName_default.of("Type"), PDFName_default.of("ObjStm")); + _this.dict.set(PDFName_default.of("N"), PDFNumber_default.of(_this.objects.length)); + _this.dict.set(PDFName_default.of("First"), PDFNumber_default.of(_this.offsetsString.length)); + return _this; + } + PDFObjectStream2.prototype.getObjectsCount = function() { + return this.objects.length; + }; + PDFObjectStream2.prototype.clone = function(context) { + return PDFObjectStream2.withContextAndObjects(context || this.dict.context, this.objects.slice(), this.encode); + }; + PDFObjectStream2.prototype.getContentsString = function() { + var value = this.offsetsString; + for (var idx = 0, len = this.objects.length; idx < len; idx++) { + var _a = this.objects[idx], object = _a[1]; + value += object + "\n"; + } + return value; + }; + PDFObjectStream2.prototype.getUnencodedContents = function() { + var buffer = new Uint8Array(this.getUnencodedContentsSize()); + var offset = copyStringIntoBuffer(this.offsetsString, buffer, 0); + for (var idx = 0, len = this.objects.length; idx < len; idx++) { + var _a = this.objects[idx], object = _a[1]; + offset += object.copyBytesInto(buffer, offset); + buffer[offset++] = CharCodes_default.Newline; + } + return buffer; + }; + PDFObjectStream2.prototype.getUnencodedContentsSize = function() { + return this.offsetsString.length + last(this.offsets)[1] + last(this.objects)[1].sizeInBytes() + 1; + }; + PDFObjectStream2.prototype.computeOffsetsString = function() { + var offsetsString = ""; + for (var idx = 0, len = this.offsets.length; idx < len; idx++) { + var _a = this.offsets[idx], objectNumber = _a[0], offset = _a[1]; + offsetsString += objectNumber + " " + offset + " "; + } + return offsetsString; + }; + PDFObjectStream2.prototype.computeObjectOffsets = function() { + var offset = 0; + var offsets = new Array(this.objects.length); + for (var idx = 0, len = this.objects.length; idx < len; idx++) { + var _a = this.objects[idx], ref = _a[0], object = _a[1]; + offsets[idx] = [ref.objectNumber, offset]; + offset += object.sizeInBytes() + 1; + } + return offsets; + }; + PDFObjectStream2.withContextAndObjects = function(context, objects, encode) { + if (encode === void 0) { + encode = true; + } + return new PDFObjectStream2(context, objects, encode); + }; + return PDFObjectStream2; + }(PDFFlateStream_default) +); +var PDFObjectStream_default = PDFObjectStream; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/core/writers/PDFWriter.js +var PDFWriter = ( + /** @class */ + function() { + function PDFWriter2(context, objectsPerTick) { + var _this = this; + this.parsedObjects = 0; + this.shouldWaitForTick = function(n) { + _this.parsedObjects += n; + return _this.parsedObjects % _this.objectsPerTick === 0; + }; + this.context = context; + this.objectsPerTick = objectsPerTick; + } + PDFWriter2.prototype.serializeToBuffer = function() { + return __awaiter(this, void 0, void 0, function() { + var _a, size, header, indirectObjects, xref, trailerDict, trailer, offset, buffer, idx, len, _b, ref, object, objectNumber, generationNumber, n; + return __generator(this, function(_c) { + switch (_c.label) { + case 0: + return [4, this.computeBufferSize()]; + case 1: + _a = _c.sent(), size = _a.size, header = _a.header, indirectObjects = _a.indirectObjects, xref = _a.xref, trailerDict = _a.trailerDict, trailer = _a.trailer; + offset = 0; + buffer = new Uint8Array(size); + offset += header.copyBytesInto(buffer, offset); + buffer[offset++] = CharCodes_default.Newline; + buffer[offset++] = CharCodes_default.Newline; + idx = 0, len = indirectObjects.length; + _c.label = 2; + case 2: + if (!(idx < len)) return [3, 5]; + _b = indirectObjects[idx], ref = _b[0], object = _b[1]; + objectNumber = String(ref.objectNumber); + offset += copyStringIntoBuffer(objectNumber, buffer, offset); + buffer[offset++] = CharCodes_default.Space; + generationNumber = String(ref.generationNumber); + offset += copyStringIntoBuffer(generationNumber, buffer, offset); + buffer[offset++] = CharCodes_default.Space; + buffer[offset++] = CharCodes_default.o; + buffer[offset++] = CharCodes_default.b; + buffer[offset++] = CharCodes_default.j; + buffer[offset++] = CharCodes_default.Newline; + offset += object.copyBytesInto(buffer, offset); + buffer[offset++] = CharCodes_default.Newline; + buffer[offset++] = CharCodes_default.e; + buffer[offset++] = CharCodes_default.n; + buffer[offset++] = CharCodes_default.d; + buffer[offset++] = CharCodes_default.o; + buffer[offset++] = CharCodes_default.b; + buffer[offset++] = CharCodes_default.j; + buffer[offset++] = CharCodes_default.Newline; + buffer[offset++] = CharCodes_default.Newline; + n = object instanceof PDFObjectStream_default ? object.getObjectsCount() : 1; + if (!this.shouldWaitForTick(n)) return [3, 4]; + return [4, waitForTick()]; + case 3: + _c.sent(); + _c.label = 4; + case 4: + idx++; + return [3, 2]; + case 5: + if (xref) { + offset += xref.copyBytesInto(buffer, offset); + buffer[offset++] = CharCodes_default.Newline; + } + if (trailerDict) { + offset += trailerDict.copyBytesInto(buffer, offset); + buffer[offset++] = CharCodes_default.Newline; + buffer[offset++] = CharCodes_default.Newline; + } + offset += trailer.copyBytesInto(buffer, offset); + return [2, buffer]; + } + }); + }); + }; + PDFWriter2.prototype.computeIndirectObjectSize = function(_a) { + var ref = _a[0], object = _a[1]; + var refSize = ref.sizeInBytes() + 3; + var objectSize = object.sizeInBytes() + 9; + return refSize + objectSize; + }; + PDFWriter2.prototype.createTrailerDict = function() { + return this.context.obj({ + Size: this.context.largestObjectNumber + 1, + Root: this.context.trailerInfo.Root, + Encrypt: this.context.trailerInfo.Encrypt, + Info: this.context.trailerInfo.Info, + ID: this.context.trailerInfo.ID + }); + }; + PDFWriter2.prototype.computeBufferSize = function() { + return __awaiter(this, void 0, void 0, function() { + var header, size, xref, indirectObjects, idx, len, indirectObject, ref, xrefOffset, trailerDict, trailer; + return __generator(this, function(_a) { + switch (_a.label) { + case 0: + header = PDFHeader_default.forVersion(1, 7); + size = header.sizeInBytes() + 2; + xref = PDFCrossRefSection_default.create(); + indirectObjects = this.context.enumerateIndirectObjects(); + idx = 0, len = indirectObjects.length; + _a.label = 1; + case 1: + if (!(idx < len)) return [3, 4]; + indirectObject = indirectObjects[idx]; + ref = indirectObject[0]; + xref.addEntry(ref, size); + size += this.computeIndirectObjectSize(indirectObject); + if (!this.shouldWaitForTick(1)) return [3, 3]; + return [4, waitForTick()]; + case 2: + _a.sent(); + _a.label = 3; + case 3: + idx++; + return [3, 1]; + case 4: + xrefOffset = size; + size += xref.sizeInBytes() + 1; + trailerDict = PDFTrailerDict_default.of(this.createTrailerDict()); + size += trailerDict.sizeInBytes() + 2; + trailer = PDFTrailer_default.forLastCrossRefSectionOffset(xrefOffset); + size += trailer.sizeInBytes(); + return [2, { size, header, indirectObjects, xref, trailerDict, trailer }]; + } + }); + }); + }; + PDFWriter2.forContext = function(context, objectsPerTick) { + return new PDFWriter2(context, objectsPerTick); + }; + return PDFWriter2; + }() +); +var PDFWriter_default = PDFWriter; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/core/objects/PDFInvalidObject.js +var PDFInvalidObject = ( + /** @class */ + function(_super) { + __extends(PDFInvalidObject2, _super); + function PDFInvalidObject2(data) { + var _this = _super.call(this) || this; + _this.data = data; + return _this; + } + PDFInvalidObject2.prototype.clone = function() { + return PDFInvalidObject2.of(this.data.slice()); + }; + PDFInvalidObject2.prototype.toString = function() { + return "PDFInvalidObject(" + this.data.length + " bytes)"; + }; + PDFInvalidObject2.prototype.sizeInBytes = function() { + return this.data.length; + }; + PDFInvalidObject2.prototype.copyBytesInto = function(buffer, offset) { + var length = this.data.length; + for (var idx = 0; idx < length; idx++) { + buffer[offset++] = this.data[idx]; + } + return length; + }; + PDFInvalidObject2.of = function(data) { + return new PDFInvalidObject2(data); + }; + return PDFInvalidObject2; + }(PDFObject_default) +); +var PDFInvalidObject_default = PDFInvalidObject; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/core/structures/PDFCrossRefStream.js +var EntryType; +(function(EntryType2) { + EntryType2[EntryType2["Deleted"] = 0] = "Deleted"; + EntryType2[EntryType2["Uncompressed"] = 1] = "Uncompressed"; + EntryType2[EntryType2["Compressed"] = 2] = "Compressed"; +})(EntryType || (EntryType = {})); +var PDFCrossRefStream = ( + /** @class */ + function(_super) { + __extends(PDFCrossRefStream2, _super); + function PDFCrossRefStream2(dict, entries, encode) { + if (encode === void 0) { + encode = true; + } + var _this = _super.call(this, dict, encode) || this; + _this.computeIndex = function() { + var subsections = []; + var subsectionLength = 0; + for (var idx = 0, len = _this.entries.length; idx < len; idx++) { + var currEntry = _this.entries[idx]; + var prevEntry = _this.entries[idx - 1]; + if (idx === 0) { + subsections.push(currEntry.ref.objectNumber); + } else if (currEntry.ref.objectNumber - prevEntry.ref.objectNumber > 1) { + subsections.push(subsectionLength); + subsections.push(currEntry.ref.objectNumber); + subsectionLength = 0; + } + subsectionLength += 1; + } + subsections.push(subsectionLength); + return subsections; + }; + _this.computeEntryTuples = function() { + var entryTuples = new Array(_this.entries.length); + for (var idx = 0, len = _this.entries.length; idx < len; idx++) { + var entry = _this.entries[idx]; + if (entry.type === EntryType.Deleted) { + var type = entry.type, nextFreeObjectNumber = entry.nextFreeObjectNumber, ref = entry.ref; + entryTuples[idx] = [type, nextFreeObjectNumber, ref.generationNumber]; + } + if (entry.type === EntryType.Uncompressed) { + var type = entry.type, offset = entry.offset, ref = entry.ref; + entryTuples[idx] = [type, offset, ref.generationNumber]; + } + if (entry.type === EntryType.Compressed) { + var type = entry.type, objectStreamRef = entry.objectStreamRef, index = entry.index; + entryTuples[idx] = [type, objectStreamRef.objectNumber, index]; + } + } + return entryTuples; + }; + _this.computeMaxEntryByteWidths = function() { + var entryTuples = _this.entryTuplesCache.access(); + var widths = [0, 0, 0]; + for (var idx = 0, len = entryTuples.length; idx < len; idx++) { + var _a = entryTuples[idx], first = _a[0], second = _a[1], third = _a[2]; + var firstSize = sizeInBytes(first); + var secondSize = sizeInBytes(second); + var thirdSize = sizeInBytes(third); + if (firstSize > widths[0]) + widths[0] = firstSize; + if (secondSize > widths[1]) + widths[1] = secondSize; + if (thirdSize > widths[2]) + widths[2] = thirdSize; + } + return widths; + }; + _this.entries = entries || []; + _this.entryTuplesCache = Cache_default.populatedBy(_this.computeEntryTuples); + _this.maxByteWidthsCache = Cache_default.populatedBy(_this.computeMaxEntryByteWidths); + _this.indexCache = Cache_default.populatedBy(_this.computeIndex); + dict.set(PDFName_default.of("Type"), PDFName_default.of("XRef")); + return _this; + } + PDFCrossRefStream2.prototype.addDeletedEntry = function(ref, nextFreeObjectNumber) { + var type = EntryType.Deleted; + this.entries.push({ type, ref, nextFreeObjectNumber }); + this.entryTuplesCache.invalidate(); + this.maxByteWidthsCache.invalidate(); + this.indexCache.invalidate(); + this.contentsCache.invalidate(); + }; + PDFCrossRefStream2.prototype.addUncompressedEntry = function(ref, offset) { + var type = EntryType.Uncompressed; + this.entries.push({ type, ref, offset }); + this.entryTuplesCache.invalidate(); + this.maxByteWidthsCache.invalidate(); + this.indexCache.invalidate(); + this.contentsCache.invalidate(); + }; + PDFCrossRefStream2.prototype.addCompressedEntry = function(ref, objectStreamRef, index) { + var type = EntryType.Compressed; + this.entries.push({ type, ref, objectStreamRef, index }); + this.entryTuplesCache.invalidate(); + this.maxByteWidthsCache.invalidate(); + this.indexCache.invalidate(); + this.contentsCache.invalidate(); + }; + PDFCrossRefStream2.prototype.clone = function(context) { + var _a = this, dict = _a.dict, entries = _a.entries, encode = _a.encode; + return PDFCrossRefStream2.of(dict.clone(context), entries.slice(), encode); + }; + PDFCrossRefStream2.prototype.getContentsString = function() { + var entryTuples = this.entryTuplesCache.access(); + var byteWidths = this.maxByteWidthsCache.access(); + var value = ""; + for (var entryIdx = 0, entriesLen = entryTuples.length; entryIdx < entriesLen; entryIdx++) { + var _a = entryTuples[entryIdx], first = _a[0], second = _a[1], third = _a[2]; + var firstBytes = reverseArray(bytesFor(first)); + var secondBytes = reverseArray(bytesFor(second)); + var thirdBytes = reverseArray(bytesFor(third)); + for (var idx = byteWidths[0] - 1; idx >= 0; idx--) { + value += (firstBytes[idx] || 0).toString(2); + } + for (var idx = byteWidths[1] - 1; idx >= 0; idx--) { + value += (secondBytes[idx] || 0).toString(2); + } + for (var idx = byteWidths[2] - 1; idx >= 0; idx--) { + value += (thirdBytes[idx] || 0).toString(2); + } + } + return value; + }; + PDFCrossRefStream2.prototype.getUnencodedContents = function() { + var entryTuples = this.entryTuplesCache.access(); + var byteWidths = this.maxByteWidthsCache.access(); + var buffer = new Uint8Array(this.getUnencodedContentsSize()); + var offset = 0; + for (var entryIdx = 0, entriesLen = entryTuples.length; entryIdx < entriesLen; entryIdx++) { + var _a = entryTuples[entryIdx], first = _a[0], second = _a[1], third = _a[2]; + var firstBytes = reverseArray(bytesFor(first)); + var secondBytes = reverseArray(bytesFor(second)); + var thirdBytes = reverseArray(bytesFor(third)); + for (var idx = byteWidths[0] - 1; idx >= 0; idx--) { + buffer[offset++] = firstBytes[idx] || 0; + } + for (var idx = byteWidths[1] - 1; idx >= 0; idx--) { + buffer[offset++] = secondBytes[idx] || 0; + } + for (var idx = byteWidths[2] - 1; idx >= 0; idx--) { + buffer[offset++] = thirdBytes[idx] || 0; + } + } + return buffer; + }; + PDFCrossRefStream2.prototype.getUnencodedContentsSize = function() { + var byteWidths = this.maxByteWidthsCache.access(); + var entryWidth = sum(byteWidths); + return entryWidth * this.entries.length; + }; + PDFCrossRefStream2.prototype.updateDict = function() { + _super.prototype.updateDict.call(this); + var byteWidths = this.maxByteWidthsCache.access(); + var index = this.indexCache.access(); + var context = this.dict.context; + this.dict.set(PDFName_default.of("W"), context.obj(byteWidths)); + this.dict.set(PDFName_default.of("Index"), context.obj(index)); + }; + PDFCrossRefStream2.create = function(dict, encode) { + if (encode === void 0) { + encode = true; + } + var stream2 = new PDFCrossRefStream2(dict, [], encode); + stream2.addDeletedEntry(PDFRef_default.of(0, 65535), 0); + return stream2; + }; + PDFCrossRefStream2.of = function(dict, entries, encode) { + if (encode === void 0) { + encode = true; + } + return new PDFCrossRefStream2(dict, entries, encode); + }; + return PDFCrossRefStream2; + }(PDFFlateStream_default) +); +var PDFCrossRefStream_default = PDFCrossRefStream; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/core/writers/PDFStreamWriter.js +var PDFStreamWriter = ( + /** @class */ + function(_super) { + __extends(PDFStreamWriter2, _super); + function PDFStreamWriter2(context, objectsPerTick, encodeStreams, objectsPerStream) { + var _this = _super.call(this, context, objectsPerTick) || this; + _this.encodeStreams = encodeStreams; + _this.objectsPerStream = objectsPerStream; + return _this; + } + PDFStreamWriter2.prototype.computeBufferSize = function() { + return __awaiter(this, void 0, void 0, function() { + var objectNumber, header, size, xrefStream, uncompressedObjects, compressedObjects, objectStreamRefs, indirectObjects, idx, len, indirectObject, ref, object, shouldNotCompress, chunk, objectStreamRef, idx, len, chunk, ref, objectStream, xrefStreamRef, xrefOffset, trailer; + return __generator(this, function(_a) { + switch (_a.label) { + case 0: + objectNumber = this.context.largestObjectNumber + 1; + header = PDFHeader_default.forVersion(1, 7); + size = header.sizeInBytes() + 2; + xrefStream = PDFCrossRefStream_default.create(this.createTrailerDict(), this.encodeStreams); + uncompressedObjects = []; + compressedObjects = []; + objectStreamRefs = []; + indirectObjects = this.context.enumerateIndirectObjects(); + idx = 0, len = indirectObjects.length; + _a.label = 1; + case 1: + if (!(idx < len)) return [3, 6]; + indirectObject = indirectObjects[idx]; + ref = indirectObject[0], object = indirectObject[1]; + shouldNotCompress = ref === this.context.trailerInfo.Encrypt || object instanceof PDFStream_default || object instanceof PDFInvalidObject_default || ref.generationNumber !== 0; + if (!shouldNotCompress) return [3, 4]; + uncompressedObjects.push(indirectObject); + xrefStream.addUncompressedEntry(ref, size); + size += this.computeIndirectObjectSize(indirectObject); + if (!this.shouldWaitForTick(1)) return [3, 3]; + return [4, waitForTick()]; + case 2: + _a.sent(); + _a.label = 3; + case 3: + return [3, 5]; + case 4: + chunk = last(compressedObjects); + objectStreamRef = last(objectStreamRefs); + if (!chunk || chunk.length % this.objectsPerStream === 0) { + chunk = []; + compressedObjects.push(chunk); + objectStreamRef = PDFRef_default.of(objectNumber++); + objectStreamRefs.push(objectStreamRef); + } + xrefStream.addCompressedEntry(ref, objectStreamRef, chunk.length); + chunk.push(indirectObject); + _a.label = 5; + case 5: + idx++; + return [3, 1]; + case 6: + idx = 0, len = compressedObjects.length; + _a.label = 7; + case 7: + if (!(idx < len)) return [3, 10]; + chunk = compressedObjects[idx]; + ref = objectStreamRefs[idx]; + objectStream = PDFObjectStream_default.withContextAndObjects(this.context, chunk, this.encodeStreams); + xrefStream.addUncompressedEntry(ref, size); + size += this.computeIndirectObjectSize([ref, objectStream]); + uncompressedObjects.push([ref, objectStream]); + if (!this.shouldWaitForTick(chunk.length)) return [3, 9]; + return [4, waitForTick()]; + case 8: + _a.sent(); + _a.label = 9; + case 9: + idx++; + return [3, 7]; + case 10: + xrefStreamRef = PDFRef_default.of(objectNumber++); + xrefStream.dict.set(PDFName_default.of("Size"), PDFNumber_default.of(objectNumber)); + xrefStream.addUncompressedEntry(xrefStreamRef, size); + xrefOffset = size; + size += this.computeIndirectObjectSize([xrefStreamRef, xrefStream]); + uncompressedObjects.push([xrefStreamRef, xrefStream]); + trailer = PDFTrailer_default.forLastCrossRefSectionOffset(xrefOffset); + size += trailer.sizeInBytes(); + return [2, { size, header, indirectObjects: uncompressedObjects, trailer }]; + } + }); + }); + }; + PDFStreamWriter2.forContext = function(context, objectsPerTick, encodeStreams, objectsPerStream) { + if (encodeStreams === void 0) { + encodeStreams = true; + } + if (objectsPerStream === void 0) { + objectsPerStream = 50; + } + return new PDFStreamWriter2(context, objectsPerTick, encodeStreams, objectsPerStream); + }; + return PDFStreamWriter2; + }(PDFWriter_default) +); +var PDFStreamWriter_default = PDFStreamWriter; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/core/objects/PDFHexString.js +var PDFHexString = ( + /** @class */ + function(_super) { + __extends(PDFHexString2, _super); + function PDFHexString2(value) { + var _this = _super.call(this) || this; + _this.value = value; + return _this; + } + PDFHexString2.prototype.asBytes = function() { + var hex = this.value + (this.value.length % 2 === 1 ? "0" : ""); + var hexLength = hex.length; + var bytes = new Uint8Array(hex.length / 2); + var hexOffset = 0; + var bytesOffset = 0; + while (hexOffset < hexLength) { + var byte = parseInt(hex.substring(hexOffset, hexOffset + 2), 16); + bytes[bytesOffset] = byte; + hexOffset += 2; + bytesOffset += 1; + } + return bytes; + }; + PDFHexString2.prototype.decodeText = function() { + var bytes = this.asBytes(); + if (hasUtf16BOM(bytes)) + return utf16Decode(bytes); + return pdfDocEncodingDecode(bytes); + }; + PDFHexString2.prototype.decodeDate = function() { + var text = this.decodeText(); + var date = parseDate(text); + if (!date) + throw new InvalidPDFDateStringError(text); + return date; + }; + PDFHexString2.prototype.asString = function() { + return this.value; + }; + PDFHexString2.prototype.clone = function() { + return PDFHexString2.of(this.value); + }; + PDFHexString2.prototype.toString = function() { + return "<" + this.value + ">"; + }; + PDFHexString2.prototype.sizeInBytes = function() { + return this.value.length + 2; + }; + PDFHexString2.prototype.copyBytesInto = function(buffer, offset) { + buffer[offset++] = CharCodes_default.LessThan; + offset += copyStringIntoBuffer(this.value, buffer, offset); + buffer[offset++] = CharCodes_default.GreaterThan; + return this.value.length + 2; + }; + PDFHexString2.of = function(value) { + return new PDFHexString2(value); + }; + PDFHexString2.fromText = function(value) { + var encoded = utf16Encode(value); + var hex = ""; + for (var idx = 0, len = encoded.length; idx < len; idx++) { + hex += toHexStringOfMinLength(encoded[idx], 4); + } + return new PDFHexString2(hex); + }; + return PDFHexString2; + }(PDFObject_default) +); +var PDFHexString_default = PDFHexString; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/core/embedders/StandardFontEmbedder.js +var StandardFontEmbedder = ( + /** @class */ + function() { + function StandardFontEmbedder2(fontName, customName) { + this.encoding = fontName === FontNames.ZapfDingbats ? Encodings.ZapfDingbats : fontName === FontNames.Symbol ? Encodings.Symbol : Encodings.WinAnsi; + this.font = Font.load(fontName); + this.fontName = this.font.FontName; + this.customName = customName; + } + StandardFontEmbedder2.prototype.encodeText = function(text) { + var glyphs = this.encodeTextAsGlyphs(text); + var hexCodes = new Array(glyphs.length); + for (var idx = 0, len = glyphs.length; idx < len; idx++) { + hexCodes[idx] = toHexString(glyphs[idx].code); + } + return PDFHexString_default.of(hexCodes.join("")); + }; + StandardFontEmbedder2.prototype.widthOfTextAtSize = function(text, size) { + var glyphs = this.encodeTextAsGlyphs(text); + var totalWidth = 0; + for (var idx = 0, len = glyphs.length; idx < len; idx++) { + var left = glyphs[idx].name; + var right = (glyphs[idx + 1] || {}).name; + var kernAmount = this.font.getXAxisKerningForPair(left, right) || 0; + totalWidth += this.widthOfGlyph(left) + kernAmount; + } + var scale2 = size / 1e3; + return totalWidth * scale2; + }; + StandardFontEmbedder2.prototype.heightOfFontAtSize = function(size, options) { + if (options === void 0) { + options = {}; + } + var _a = options.descender, descender = _a === void 0 ? true : _a; + var _b = this.font, Ascender = _b.Ascender, Descender = _b.Descender, FontBBox = _b.FontBBox; + var yTop = Ascender || FontBBox[3]; + var yBottom = Descender || FontBBox[1]; + var height = yTop - yBottom; + if (!descender) + height += Descender || 0; + return height / 1e3 * size; + }; + StandardFontEmbedder2.prototype.sizeOfFontAtHeight = function(height) { + var _a = this.font, Ascender = _a.Ascender, Descender = _a.Descender, FontBBox = _a.FontBBox; + var yTop = Ascender || FontBBox[3]; + var yBottom = Descender || FontBBox[1]; + return 1e3 * height / (yTop - yBottom); + }; + StandardFontEmbedder2.prototype.embedIntoContext = function(context, ref) { + var fontDict = context.obj({ + Type: "Font", + Subtype: "Type1", + BaseFont: this.customName || this.fontName, + Encoding: this.encoding === Encodings.WinAnsi ? "WinAnsiEncoding" : void 0 + }); + if (ref) { + context.assign(ref, fontDict); + return ref; + } else { + return context.register(fontDict); + } + }; + StandardFontEmbedder2.prototype.widthOfGlyph = function(glyphName) { + return this.font.getWidthOfGlyph(glyphName) || 250; + }; + StandardFontEmbedder2.prototype.encodeTextAsGlyphs = function(text) { + var codePoints = Array.from(text); + var glyphs = new Array(codePoints.length); + for (var idx = 0, len = codePoints.length; idx < len; idx++) { + var codePoint = toCodePoint(codePoints[idx]); + glyphs[idx] = this.encoding.encodeUnicodeCodePoint(codePoint); + } + return glyphs; + }; + StandardFontEmbedder2.for = function(fontName, customName) { + return new StandardFontEmbedder2(fontName, customName); + }; + return StandardFontEmbedder2; + }() +); +var StandardFontEmbedder_default = StandardFontEmbedder; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/core/embedders/CMap.js +var createCmap = function(glyphs, glyphId) { + var bfChars = new Array(glyphs.length); + for (var idx = 0, len = glyphs.length; idx < len; idx++) { + var glyph = glyphs[idx]; + var id = cmapHexFormat(cmapHexString(glyphId(glyph))); + var unicode = cmapHexFormat.apply(void 0, glyph.codePoints.map(cmapCodePointFormat)); + bfChars[idx] = [id, unicode]; + } + return fillCmapTemplate(bfChars); +}; +var fillCmapTemplate = function(bfChars) { + return "/CIDInit /ProcSet findresource begin\n12 dict begin\nbegincmap\n/CIDSystemInfo <<\n /Registry (Adobe)\n /Ordering (UCS)\n /Supplement 0\n>> def\n/CMapName /Adobe-Identity-UCS def\n/CMapType 2 def\n1 begincodespacerange\n<0000>\nendcodespacerange\n" + bfChars.length + " beginbfchar\n" + bfChars.map(function(_a) { + var glyphId = _a[0], codePoint = _a[1]; + return glyphId + " " + codePoint; + }).join("\n") + "\nendbfchar\nendcmap\nCMapName currentdict /CMap defineresource pop\nend\nend"; +}; +var cmapHexFormat = function() { + var values2 = []; + for (var _i = 0; _i < arguments.length; _i++) { + values2[_i] = arguments[_i]; + } + return "<" + values2.join("") + ">"; +}; +var cmapHexString = function(value) { + return toHexStringOfMinLength(value, 4); +}; +var cmapCodePointFormat = function(codePoint) { + if (isWithinBMP(codePoint)) + return cmapHexString(codePoint); + if (hasSurrogates(codePoint)) { + var hs = highSurrogate(codePoint); + var ls = lowSurrogate(codePoint); + return "" + cmapHexString(hs) + cmapHexString(ls); + } + var hex = toHexString(codePoint); + var msg = "0x" + hex + " is not a valid UTF-8 or UTF-16 codepoint."; + throw new Error(msg); +}; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/core/embedders/FontFlags.js +var makeFontFlags = function(options) { + var flags = 0; + var flipBit = function(bit) { + flags |= 1 << bit - 1; + }; + if (options.fixedPitch) + flipBit(1); + if (options.serif) + flipBit(2); + if (options.symbolic) + flipBit(3); + if (options.script) + flipBit(4); + if (options.nonsymbolic) + flipBit(6); + if (options.italic) + flipBit(7); + if (options.allCap) + flipBit(17); + if (options.smallCap) + flipBit(18); + if (options.forceBold) + flipBit(19); + return flags; +}; +var deriveFontFlags = function(font) { + var familyClass = font["OS/2"] ? font["OS/2"].sFamilyClass : 0; + var flags = makeFontFlags({ + fixedPitch: font.post.isFixedPitch, + serif: 1 <= familyClass && familyClass <= 7, + symbolic: true, + script: familyClass === 10, + italic: font.head.macStyle.italic + }); + return flags; +}; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/core/objects/PDFString.js +var PDFString = ( + /** @class */ + function(_super) { + __extends(PDFString2, _super); + function PDFString2(value) { + var _this = _super.call(this) || this; + _this.value = value; + return _this; + } + PDFString2.prototype.asBytes = function() { + var bytes = []; + var octal = ""; + var escaped = false; + var pushByte = function(byte2) { + if (byte2 !== void 0) + bytes.push(byte2); + escaped = false; + }; + for (var idx = 0, len = this.value.length; idx < len; idx++) { + var char = this.value[idx]; + var byte = toCharCode(char); + var nextChar = this.value[idx + 1]; + if (!escaped) { + if (byte === CharCodes_default.BackSlash) + escaped = true; + else + pushByte(byte); + } else { + if (byte === CharCodes_default.Newline) + pushByte(); + else if (byte === CharCodes_default.CarriageReturn) + pushByte(); + else if (byte === CharCodes_default.n) + pushByte(CharCodes_default.Newline); + else if (byte === CharCodes_default.r) + pushByte(CharCodes_default.CarriageReturn); + else if (byte === CharCodes_default.t) + pushByte(CharCodes_default.Tab); + else if (byte === CharCodes_default.b) + pushByte(CharCodes_default.Backspace); + else if (byte === CharCodes_default.f) + pushByte(CharCodes_default.FormFeed); + else if (byte === CharCodes_default.LeftParen) + pushByte(CharCodes_default.LeftParen); + else if (byte === CharCodes_default.RightParen) + pushByte(CharCodes_default.RightParen); + else if (byte === CharCodes_default.Backspace) + pushByte(CharCodes_default.BackSlash); + else if (byte >= CharCodes_default.Zero && byte <= CharCodes_default.Seven) { + octal += char; + if (octal.length === 3 || !(nextChar >= "0" && nextChar <= "7")) { + pushByte(parseInt(octal, 8)); + octal = ""; + } + } else { + pushByte(byte); + } + } + } + return new Uint8Array(bytes); + }; + PDFString2.prototype.decodeText = function() { + var bytes = this.asBytes(); + if (hasUtf16BOM(bytes)) + return utf16Decode(bytes); + return pdfDocEncodingDecode(bytes); + }; + PDFString2.prototype.decodeDate = function() { + var text = this.decodeText(); + var date = parseDate(text); + if (!date) + throw new InvalidPDFDateStringError(text); + return date; + }; + PDFString2.prototype.asString = function() { + return this.value; + }; + PDFString2.prototype.clone = function() { + return PDFString2.of(this.value); + }; + PDFString2.prototype.toString = function() { + return "(" + this.value + ")"; + }; + PDFString2.prototype.sizeInBytes = function() { + return this.value.length + 2; + }; + PDFString2.prototype.copyBytesInto = function(buffer, offset) { + buffer[offset++] = CharCodes_default.LeftParen; + offset += copyStringIntoBuffer(this.value, buffer, offset); + buffer[offset++] = CharCodes_default.RightParen; + return this.value.length + 2; + }; + PDFString2.of = function(value) { + return new PDFString2(value); + }; + PDFString2.fromDate = function(date) { + var year = padStart(String(date.getUTCFullYear()), 4, "0"); + var month = padStart(String(date.getUTCMonth() + 1), 2, "0"); + var day = padStart(String(date.getUTCDate()), 2, "0"); + var hours = padStart(String(date.getUTCHours()), 2, "0"); + var mins = padStart(String(date.getUTCMinutes()), 2, "0"); + var secs = padStart(String(date.getUTCSeconds()), 2, "0"); + return new PDFString2("D:" + year + month + day + hours + mins + secs + "Z"); + }; + return PDFString2; + }(PDFObject_default) +); +var PDFString_default = PDFString; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/core/embedders/CustomFontEmbedder.js +var CustomFontEmbedder = ( + /** @class */ + function() { + function CustomFontEmbedder2(font, fontData, customName, fontFeatures) { + var _this = this; + this.allGlyphsInFontSortedById = function() { + var glyphs = new Array(_this.font.characterSet.length); + for (var idx = 0, len = glyphs.length; idx < len; idx++) { + var codePoint = _this.font.characterSet[idx]; + glyphs[idx] = _this.font.glyphForCodePoint(codePoint); + } + return sortedUniq(glyphs.sort(byAscendingId), function(g) { + return g.id; + }); + }; + this.font = font; + this.scale = 1e3 / this.font.unitsPerEm; + this.fontData = fontData; + this.fontName = this.font.postscriptName || "Font"; + this.customName = customName; + this.fontFeatures = fontFeatures; + this.baseFontName = ""; + this.glyphCache = Cache_default.populatedBy(this.allGlyphsInFontSortedById); + } + CustomFontEmbedder2.for = function(fontkit, fontData, customName, fontFeatures) { + return __awaiter(this, void 0, void 0, function() { + var font; + return __generator(this, function(_a) { + switch (_a.label) { + case 0: + return [4, fontkit.create(fontData)]; + case 1: + font = _a.sent(); + return [2, new CustomFontEmbedder2(font, fontData, customName, fontFeatures)]; + } + }); + }); + }; + CustomFontEmbedder2.prototype.encodeText = function(text) { + var glyphs = this.font.layout(text, this.fontFeatures).glyphs; + var hexCodes = new Array(glyphs.length); + for (var idx = 0, len = glyphs.length; idx < len; idx++) { + hexCodes[idx] = toHexStringOfMinLength(glyphs[idx].id, 4); + } + return PDFHexString_default.of(hexCodes.join("")); + }; + CustomFontEmbedder2.prototype.widthOfTextAtSize = function(text, size) { + var glyphs = this.font.layout(text, this.fontFeatures).glyphs; + var totalWidth = 0; + for (var idx = 0, len = glyphs.length; idx < len; idx++) { + totalWidth += glyphs[idx].advanceWidth * this.scale; + } + var scale2 = size / 1e3; + return totalWidth * scale2; + }; + CustomFontEmbedder2.prototype.heightOfFontAtSize = function(size, options) { + if (options === void 0) { + options = {}; + } + var _a = options.descender, descender = _a === void 0 ? true : _a; + var _b = this.font, ascent = _b.ascent, descent = _b.descent, bbox = _b.bbox; + var yTop = (ascent || bbox.maxY) * this.scale; + var yBottom = (descent || bbox.minY) * this.scale; + var height = yTop - yBottom; + if (!descender) + height -= Math.abs(descent) || 0; + return height / 1e3 * size; + }; + CustomFontEmbedder2.prototype.sizeOfFontAtHeight = function(height) { + var _a = this.font, ascent = _a.ascent, descent = _a.descent, bbox = _a.bbox; + var yTop = (ascent || bbox.maxY) * this.scale; + var yBottom = (descent || bbox.minY) * this.scale; + return 1e3 * height / (yTop - yBottom); + }; + CustomFontEmbedder2.prototype.embedIntoContext = function(context, ref) { + this.baseFontName = this.customName || context.addRandomSuffix(this.fontName); + return this.embedFontDict(context, ref); + }; + CustomFontEmbedder2.prototype.embedFontDict = function(context, ref) { + return __awaiter(this, void 0, void 0, function() { + var cidFontDictRef, unicodeCMapRef, fontDict; + return __generator(this, function(_a) { + switch (_a.label) { + case 0: + return [4, this.embedCIDFontDict(context)]; + case 1: + cidFontDictRef = _a.sent(); + unicodeCMapRef = this.embedUnicodeCmap(context); + fontDict = context.obj({ + Type: "Font", + Subtype: "Type0", + BaseFont: this.baseFontName, + Encoding: "Identity-H", + DescendantFonts: [cidFontDictRef], + ToUnicode: unicodeCMapRef + }); + if (ref) { + context.assign(ref, fontDict); + return [2, ref]; + } else { + return [2, context.register(fontDict)]; + } + return [ + 2 + /*return*/ + ]; + } + }); + }); + }; + CustomFontEmbedder2.prototype.isCFF = function() { + return this.font.cff; + }; + CustomFontEmbedder2.prototype.embedCIDFontDict = function(context) { + return __awaiter(this, void 0, void 0, function() { + var fontDescriptorRef, cidFontDict; + return __generator(this, function(_a) { + switch (_a.label) { + case 0: + return [4, this.embedFontDescriptor(context)]; + case 1: + fontDescriptorRef = _a.sent(); + cidFontDict = context.obj({ + Type: "Font", + Subtype: this.isCFF() ? "CIDFontType0" : "CIDFontType2", + CIDToGIDMap: "Identity", + BaseFont: this.baseFontName, + CIDSystemInfo: { + Registry: PDFString_default.of("Adobe"), + Ordering: PDFString_default.of("Identity"), + Supplement: 0 + }, + FontDescriptor: fontDescriptorRef, + W: this.computeWidths() + }); + return [2, context.register(cidFontDict)]; + } + }); + }); + }; + CustomFontEmbedder2.prototype.embedFontDescriptor = function(context) { + return __awaiter(this, void 0, void 0, function() { + var fontStreamRef, scale2, _a, italicAngle, ascent, descent, capHeight, xHeight, _b, minX, minY, maxX, maxY, fontDescriptor; + var _c; + return __generator(this, function(_d) { + switch (_d.label) { + case 0: + return [4, this.embedFontStream(context)]; + case 1: + fontStreamRef = _d.sent(); + scale2 = this.scale; + _a = this.font, italicAngle = _a.italicAngle, ascent = _a.ascent, descent = _a.descent, capHeight = _a.capHeight, xHeight = _a.xHeight; + _b = this.font.bbox, minX = _b.minX, minY = _b.minY, maxX = _b.maxX, maxY = _b.maxY; + fontDescriptor = context.obj((_c = { + Type: "FontDescriptor", + FontName: this.baseFontName, + Flags: deriveFontFlags(this.font), + FontBBox: [minX * scale2, minY * scale2, maxX * scale2, maxY * scale2], + ItalicAngle: italicAngle, + Ascent: ascent * scale2, + Descent: descent * scale2, + CapHeight: (capHeight || ascent) * scale2, + XHeight: (xHeight || 0) * scale2, + // Not sure how to compute/find this, nor is anybody else really: + // https://stackoverflow.com/questions/35485179/stemv-value-of-the-truetype-font + StemV: 0 + }, _c[this.isCFF() ? "FontFile3" : "FontFile2"] = fontStreamRef, _c)); + return [2, context.register(fontDescriptor)]; + } + }); + }); + }; + CustomFontEmbedder2.prototype.serializeFont = function() { + return __awaiter(this, void 0, void 0, function() { + return __generator(this, function(_a) { + return [2, this.fontData]; + }); + }); + }; + CustomFontEmbedder2.prototype.embedFontStream = function(context) { + return __awaiter(this, void 0, void 0, function() { + var fontStream, _a, _b; + return __generator(this, function(_c) { + switch (_c.label) { + case 0: + _b = (_a = context).flateStream; + return [4, this.serializeFont()]; + case 1: + fontStream = _b.apply(_a, [_c.sent(), { + Subtype: this.isCFF() ? "CIDFontType0C" : void 0 + }]); + return [2, context.register(fontStream)]; + } + }); + }); + }; + CustomFontEmbedder2.prototype.embedUnicodeCmap = function(context) { + var cmap = createCmap(this.glyphCache.access(), this.glyphId.bind(this)); + var cmapStream = context.flateStream(cmap); + return context.register(cmapStream); + }; + CustomFontEmbedder2.prototype.glyphId = function(glyph) { + return glyph ? glyph.id : -1; + }; + CustomFontEmbedder2.prototype.computeWidths = function() { + var glyphs = this.glyphCache.access(); + var widths = []; + var currSection = []; + for (var idx = 0, len = glyphs.length; idx < len; idx++) { + var currGlyph = glyphs[idx]; + var prevGlyph = glyphs[idx - 1]; + var currGlyphId = this.glyphId(currGlyph); + var prevGlyphId = this.glyphId(prevGlyph); + if (idx === 0) { + widths.push(currGlyphId); + } else if (currGlyphId - prevGlyphId !== 1) { + widths.push(currSection); + widths.push(currGlyphId); + currSection = []; + } + currSection.push(currGlyph.advanceWidth * this.scale); + } + widths.push(currSection); + return widths; + }; + return CustomFontEmbedder2; + }() +); +var CustomFontEmbedder_default = CustomFontEmbedder; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/core/embedders/CustomFontSubsetEmbedder.js +var CustomFontSubsetEmbedder = ( + /** @class */ + function(_super) { + __extends(CustomFontSubsetEmbedder2, _super); + function CustomFontSubsetEmbedder2(font, fontData, customFontName, fontFeatures) { + var _this = _super.call(this, font, fontData, customFontName, fontFeatures) || this; + _this.subset = _this.font.createSubset(); + _this.glyphs = []; + _this.glyphCache = Cache_default.populatedBy(function() { + return _this.glyphs; + }); + _this.glyphIdMap = /* @__PURE__ */ new Map(); + return _this; + } + CustomFontSubsetEmbedder2.for = function(fontkit, fontData, customFontName, fontFeatures) { + return __awaiter(this, void 0, void 0, function() { + var font; + return __generator(this, function(_a) { + switch (_a.label) { + case 0: + return [4, fontkit.create(fontData)]; + case 1: + font = _a.sent(); + return [2, new CustomFontSubsetEmbedder2(font, fontData, customFontName, fontFeatures)]; + } + }); + }); + }; + CustomFontSubsetEmbedder2.prototype.encodeText = function(text) { + var glyphs = this.font.layout(text, this.fontFeatures).glyphs; + var hexCodes = new Array(glyphs.length); + for (var idx = 0, len = glyphs.length; idx < len; idx++) { + var glyph = glyphs[idx]; + var subsetGlyphId = this.subset.includeGlyph(glyph); + this.glyphs[subsetGlyphId - 1] = glyph; + this.glyphIdMap.set(glyph.id, subsetGlyphId); + hexCodes[idx] = toHexStringOfMinLength(subsetGlyphId, 4); + } + this.glyphCache.invalidate(); + return PDFHexString_default.of(hexCodes.join("")); + }; + CustomFontSubsetEmbedder2.prototype.isCFF = function() { + return this.subset.cff; + }; + CustomFontSubsetEmbedder2.prototype.glyphId = function(glyph) { + return glyph ? this.glyphIdMap.get(glyph.id) : -1; + }; + CustomFontSubsetEmbedder2.prototype.serializeFont = function() { + var _this = this; + return new Promise(function(resolve, reject) { + var parts = []; + _this.subset.encodeStream().on("data", function(bytes) { + return parts.push(bytes); + }).on("end", function() { + return resolve(mergeUint8Arrays(parts)); + }).on("error", function(err) { + return reject(err); + }); + }); + }; + return CustomFontSubsetEmbedder2; + }(CustomFontEmbedder_default) +); +var CustomFontSubsetEmbedder_default = CustomFontSubsetEmbedder; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/core/embedders/FileEmbedder.js +var AFRelationship; +(function(AFRelationship2) { + AFRelationship2["Source"] = "Source"; + AFRelationship2["Data"] = "Data"; + AFRelationship2["Alternative"] = "Alternative"; + AFRelationship2["Supplement"] = "Supplement"; + AFRelationship2["EncryptedPayload"] = "EncryptedPayload"; + AFRelationship2["FormData"] = "EncryptedPayload"; + AFRelationship2["Schema"] = "Schema"; + AFRelationship2["Unspecified"] = "Unspecified"; +})(AFRelationship || (AFRelationship = {})); +var FileEmbedder = ( + /** @class */ + function() { + function FileEmbedder2(fileData, fileName, options) { + if (options === void 0) { + options = {}; + } + this.fileData = fileData; + this.fileName = fileName; + this.options = options; + } + FileEmbedder2.for = function(bytes, fileName, options) { + if (options === void 0) { + options = {}; + } + return new FileEmbedder2(bytes, fileName, options); + }; + FileEmbedder2.prototype.embedIntoContext = function(context, ref) { + return __awaiter(this, void 0, void 0, function() { + var _a, mimeType, description, creationDate, modificationDate, afRelationship, embeddedFileStream, embeddedFileStreamRef, fileSpecDict; + return __generator(this, function(_b) { + _a = this.options, mimeType = _a.mimeType, description = _a.description, creationDate = _a.creationDate, modificationDate = _a.modificationDate, afRelationship = _a.afRelationship; + embeddedFileStream = context.flateStream(this.fileData, { + Type: "EmbeddedFile", + Subtype: mimeType !== null && mimeType !== void 0 ? mimeType : void 0, + Params: { + Size: this.fileData.length, + CreationDate: creationDate ? PDFString_default.fromDate(creationDate) : void 0, + ModDate: modificationDate ? PDFString_default.fromDate(modificationDate) : void 0 + } + }); + embeddedFileStreamRef = context.register(embeddedFileStream); + fileSpecDict = context.obj({ + Type: "Filespec", + F: PDFString_default.of(this.fileName), + UF: PDFHexString_default.fromText(this.fileName), + EF: { F: embeddedFileStreamRef }, + Desc: description ? PDFHexString_default.fromText(description) : void 0, + AFRelationship: afRelationship !== null && afRelationship !== void 0 ? afRelationship : void 0 + }); + if (ref) { + context.assign(ref, fileSpecDict); + return [2, ref]; + } else { + return [2, context.register(fileSpecDict)]; + } + return [ + 2 + /*return*/ + ]; + }); + }); + }; + return FileEmbedder2; + }() +); +var FileEmbedder_default = FileEmbedder; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/core/embedders/JpegEmbedder.js +var MARKERS = [ + 65472, + 65473, + 65474, + 65475, + 65477, + 65478, + 65479, + 65480, + 65481, + 65482, + 65483, + 65484, + 65485, + 65486, + 65487 +]; +var ColorSpace; +(function(ColorSpace2) { + ColorSpace2["DeviceGray"] = "DeviceGray"; + ColorSpace2["DeviceRGB"] = "DeviceRGB"; + ColorSpace2["DeviceCMYK"] = "DeviceCMYK"; +})(ColorSpace || (ColorSpace = {})); +var ChannelToColorSpace = { + 1: ColorSpace.DeviceGray, + 3: ColorSpace.DeviceRGB, + 4: ColorSpace.DeviceCMYK +}; +var JpegEmbedder = ( + /** @class */ + function() { + function JpegEmbedder2(imageData, bitsPerComponent, width, height, colorSpace) { + this.imageData = imageData; + this.bitsPerComponent = bitsPerComponent; + this.width = width; + this.height = height; + this.colorSpace = colorSpace; + } + JpegEmbedder2.for = function(imageData) { + return __awaiter(this, void 0, void 0, function() { + var dataView, soi, pos, marker, bitsPerComponent, height, width, channelByte, channelName, colorSpace; + return __generator(this, function(_a) { + dataView = new DataView(imageData.buffer); + soi = dataView.getUint16(0); + if (soi !== 65496) + throw new Error("SOI not found in JPEG"); + pos = 2; + while (pos < dataView.byteLength) { + marker = dataView.getUint16(pos); + pos += 2; + if (MARKERS.includes(marker)) + break; + pos += dataView.getUint16(pos); + } + if (!MARKERS.includes(marker)) + throw new Error("Invalid JPEG"); + pos += 2; + bitsPerComponent = dataView.getUint8(pos++); + height = dataView.getUint16(pos); + pos += 2; + width = dataView.getUint16(pos); + pos += 2; + channelByte = dataView.getUint8(pos++); + channelName = ChannelToColorSpace[channelByte]; + if (!channelName) + throw new Error("Unknown JPEG channel."); + colorSpace = channelName; + return [2, new JpegEmbedder2(imageData, bitsPerComponent, width, height, colorSpace)]; + }); + }); + }; + JpegEmbedder2.prototype.embedIntoContext = function(context, ref) { + return __awaiter(this, void 0, void 0, function() { + var xObject; + return __generator(this, function(_a) { + xObject = context.stream(this.imageData, { + Type: "XObject", + Subtype: "Image", + BitsPerComponent: this.bitsPerComponent, + Width: this.width, + Height: this.height, + ColorSpace: this.colorSpace, + Filter: "DCTDecode", + // CMYK JPEG streams in PDF are typically stored complemented, + // with 1 as 'off' and 0 as 'on' (PDF 32000-1:2008, 8.6.4.4). + // + // Standalone CMYK JPEG (usually exported by Photoshop) are + // stored inverse, with 0 as 'off' and 1 as 'on', like RGB. + // + // Applying a swap here as a hedge that most bytes passing + // through this method will benefit from it. + Decode: this.colorSpace === ColorSpace.DeviceCMYK ? [1, 0, 1, 0, 1, 0, 1, 0] : void 0 + }); + if (ref) { + context.assign(ref, xObject); + return [2, ref]; + } else { + return [2, context.register(xObject)]; + } + return [ + 2 + /*return*/ + ]; + }); + }); + }; + return JpegEmbedder2; + }() +); +var JpegEmbedder_default = JpegEmbedder; + +// node_modules/.pnpm/@pdf-lib+upng@1.0.1/node_modules/@pdf-lib/upng/UPNG.js +var import_pako4 = __toESM(require_pako()); +var UPNG = {}; +UPNG.toRGBA8 = function(out) { + var w = out.width, h = out.height; + if (out.tabs.acTL == null) return [UPNG.toRGBA8.decodeImage(out.data, w, h, out).buffer]; + var frms = []; + if (out.frames[0].data == null) out.frames[0].data = out.data; + var len = w * h * 4, img = new Uint8Array(len), empty = new Uint8Array(len), prev = new Uint8Array(len); + for (var i = 0; i < out.frames.length; i++) { + var frm = out.frames[i]; + var fx = frm.rect.x, fy = frm.rect.y, fw = frm.rect.width, fh = frm.rect.height; + var fdata = UPNG.toRGBA8.decodeImage(frm.data, fw, fh, out); + if (i != 0) for (var j = 0; j < len; j++) prev[j] = img[j]; + if (frm.blend == 0) UPNG._copyTile(fdata, fw, fh, img, w, h, fx, fy, 0); + else if (frm.blend == 1) UPNG._copyTile(fdata, fw, fh, img, w, h, fx, fy, 1); + frms.push(img.buffer.slice(0)); + if (frm.dispose == 0) { + } else if (frm.dispose == 1) UPNG._copyTile(empty, fw, fh, img, w, h, fx, fy, 0); + else if (frm.dispose == 2) for (var j = 0; j < len; j++) img[j] = prev[j]; + } + return frms; +}; +UPNG.toRGBA8.decodeImage = function(data, w, h, out) { + var area = w * h, bpp = UPNG.decode._getBPP(out); + var bpl = Math.ceil(w * bpp / 8); + var bf = new Uint8Array(area * 4), bf32 = new Uint32Array(bf.buffer); + var ctype = out.ctype, depth = out.depth; + var rs = UPNG._bin.readUshort; + var time = Date.now(); + if (ctype == 6) { + var qarea = area << 2; + if (depth == 8) for (var i = 0; i < qarea; i += 4) { + bf[i] = data[i]; + bf[i + 1] = data[i + 1]; + bf[i + 2] = data[i + 2]; + bf[i + 3] = data[i + 3]; + } + if (depth == 16) for (var i = 0; i < qarea; i++) { + bf[i] = data[i << 1]; + } + } else if (ctype == 2) { + var ts = out.tabs["tRNS"]; + if (ts == null) { + if (depth == 8) for (var i = 0; i < area; i++) { + var ti = i * 3; + bf32[i] = 255 << 24 | data[ti + 2] << 16 | data[ti + 1] << 8 | data[ti]; + } + if (depth == 16) for (var i = 0; i < area; i++) { + var ti = i * 6; + bf32[i] = 255 << 24 | data[ti + 4] << 16 | data[ti + 2] << 8 | data[ti]; + } + } else { + var tr = ts[0], tg = ts[1], tb = ts[2]; + if (depth == 8) for (var i = 0; i < area; i++) { + var qi = i << 2, ti = i * 3; + bf32[i] = 255 << 24 | data[ti + 2] << 16 | data[ti + 1] << 8 | data[ti]; + if (data[ti] == tr && data[ti + 1] == tg && data[ti + 2] == tb) bf[qi + 3] = 0; + } + if (depth == 16) for (var i = 0; i < area; i++) { + var qi = i << 2, ti = i * 6; + bf32[i] = 255 << 24 | data[ti + 4] << 16 | data[ti + 2] << 8 | data[ti]; + if (rs(data, ti) == tr && rs(data, ti + 2) == tg && rs(data, ti + 4) == tb) bf[qi + 3] = 0; + } + } + } else if (ctype == 3) { + var p = out.tabs["PLTE"], ap = out.tabs["tRNS"], tl = ap ? ap.length : 0; + if (depth == 1) for (var y = 0; y < h; y++) { + var s0 = y * bpl, t0 = y * w; + for (var i = 0; i < w; i++) { + var qi = t0 + i << 2, j = data[s0 + (i >> 3)] >> 7 - ((i & 7) << 0) & 1, cj = 3 * j; + bf[qi] = p[cj]; + bf[qi + 1] = p[cj + 1]; + bf[qi + 2] = p[cj + 2]; + bf[qi + 3] = j < tl ? ap[j] : 255; + } + } + if (depth == 2) for (var y = 0; y < h; y++) { + var s0 = y * bpl, t0 = y * w; + for (var i = 0; i < w; i++) { + var qi = t0 + i << 2, j = data[s0 + (i >> 2)] >> 6 - ((i & 3) << 1) & 3, cj = 3 * j; + bf[qi] = p[cj]; + bf[qi + 1] = p[cj + 1]; + bf[qi + 2] = p[cj + 2]; + bf[qi + 3] = j < tl ? ap[j] : 255; + } + } + if (depth == 4) for (var y = 0; y < h; y++) { + var s0 = y * bpl, t0 = y * w; + for (var i = 0; i < w; i++) { + var qi = t0 + i << 2, j = data[s0 + (i >> 1)] >> 4 - ((i & 1) << 2) & 15, cj = 3 * j; + bf[qi] = p[cj]; + bf[qi + 1] = p[cj + 1]; + bf[qi + 2] = p[cj + 2]; + bf[qi + 3] = j < tl ? ap[j] : 255; + } + } + if (depth == 8) for (var i = 0; i < area; i++) { + var qi = i << 2, j = data[i], cj = 3 * j; + bf[qi] = p[cj]; + bf[qi + 1] = p[cj + 1]; + bf[qi + 2] = p[cj + 2]; + bf[qi + 3] = j < tl ? ap[j] : 255; + } + } else if (ctype == 4) { + if (depth == 8) for (var i = 0; i < area; i++) { + var qi = i << 2, di = i << 1, gr = data[di]; + bf[qi] = gr; + bf[qi + 1] = gr; + bf[qi + 2] = gr; + bf[qi + 3] = data[di + 1]; + } + if (depth == 16) for (var i = 0; i < area; i++) { + var qi = i << 2, di = i << 2, gr = data[di]; + bf[qi] = gr; + bf[qi + 1] = gr; + bf[qi + 2] = gr; + bf[qi + 3] = data[di + 2]; + } + } else if (ctype == 0) { + var tr = out.tabs["tRNS"] ? out.tabs["tRNS"] : -1; + for (var y = 0; y < h; y++) { + var off = y * bpl, to = y * w; + if (depth == 1) for (var x = 0; x < w; x++) { + var gr = 255 * (data[off + (x >>> 3)] >>> 7 - (x & 7) & 1), al = gr == tr * 255 ? 0 : 255; + bf32[to + x] = al << 24 | gr << 16 | gr << 8 | gr; + } + else if (depth == 2) for (var x = 0; x < w; x++) { + var gr = 85 * (data[off + (x >>> 2)] >>> 6 - ((x & 3) << 1) & 3), al = gr == tr * 85 ? 0 : 255; + bf32[to + x] = al << 24 | gr << 16 | gr << 8 | gr; + } + else if (depth == 4) for (var x = 0; x < w; x++) { + var gr = 17 * (data[off + (x >>> 1)] >>> 4 - ((x & 1) << 2) & 15), al = gr == tr * 17 ? 0 : 255; + bf32[to + x] = al << 24 | gr << 16 | gr << 8 | gr; + } + else if (depth == 8) for (var x = 0; x < w; x++) { + var gr = data[off + x], al = gr == tr ? 0 : 255; + bf32[to + x] = al << 24 | gr << 16 | gr << 8 | gr; + } + else if (depth == 16) for (var x = 0; x < w; x++) { + var gr = data[off + (x << 1)], al = rs(data, off + (x << i)) == tr ? 0 : 255; + bf32[to + x] = al << 24 | gr << 16 | gr << 8 | gr; + } + } + } + return bf; +}; +UPNG.decode = function(buff) { + var data = new Uint8Array(buff), offset = 8, bin = UPNG._bin, rUs = bin.readUshort, rUi = bin.readUint; + var out = { tabs: {}, frames: [] }; + var dd = new Uint8Array(data.length), doff = 0; + var fd, foff = 0; + var mgck = [137, 80, 78, 71, 13, 10, 26, 10]; + for (var i = 0; i < 8; i++) if (data[i] != mgck[i]) throw "The input is not a PNG file!"; + while (offset < data.length) { + var len = bin.readUint(data, offset); + offset += 4; + var type = bin.readASCII(data, offset, 4); + offset += 4; + if (type == "IHDR") { + UPNG.decode._IHDR(data, offset, out); + } else if (type == "IDAT") { + for (var i = 0; i < len; i++) dd[doff + i] = data[offset + i]; + doff += len; + } else if (type == "acTL") { + out.tabs[type] = { num_frames: rUi(data, offset), num_plays: rUi(data, offset + 4) }; + fd = new Uint8Array(data.length); + } else if (type == "fcTL") { + if (foff != 0) { + var fr = out.frames[out.frames.length - 1]; + fr.data = UPNG.decode._decompress(out, fd.slice(0, foff), fr.rect.width, fr.rect.height); + foff = 0; + } + var rct = { x: rUi(data, offset + 12), y: rUi(data, offset + 16), width: rUi(data, offset + 4), height: rUi(data, offset + 8) }; + var del = rUs(data, offset + 22); + del = rUs(data, offset + 20) / (del == 0 ? 100 : del); + var frm = { rect: rct, delay: Math.round(del * 1e3), dispose: data[offset + 24], blend: data[offset + 25] }; + out.frames.push(frm); + } else if (type == "fdAT") { + for (var i = 0; i < len - 4; i++) fd[foff + i] = data[offset + i + 4]; + foff += len - 4; + } else if (type == "pHYs") { + out.tabs[type] = [bin.readUint(data, offset), bin.readUint(data, offset + 4), data[offset + 8]]; + } else if (type == "cHRM") { + out.tabs[type] = []; + for (var i = 0; i < 8; i++) out.tabs[type].push(bin.readUint(data, offset + i * 4)); + } else if (type == "tEXt") { + if (out.tabs[type] == null) out.tabs[type] = {}; + var nz = bin.nextZero(data, offset); + var keyw = bin.readASCII(data, offset, nz - offset); + var text = bin.readASCII(data, nz + 1, offset + len - nz - 1); + out.tabs[type][keyw] = text; + } else if (type == "iTXt") { + if (out.tabs[type] == null) out.tabs[type] = {}; + var nz = 0, off = offset; + nz = bin.nextZero(data, off); + var keyw = bin.readASCII(data, off, nz - off); + off = nz + 1; + var cflag = data[off], cmeth = data[off + 1]; + off += 2; + nz = bin.nextZero(data, off); + var ltag = bin.readASCII(data, off, nz - off); + off = nz + 1; + nz = bin.nextZero(data, off); + var tkeyw = bin.readUTF8(data, off, nz - off); + off = nz + 1; + var text = bin.readUTF8(data, off, len - (off - offset)); + out.tabs[type][keyw] = text; + } else if (type == "PLTE") { + out.tabs[type] = bin.readBytes(data, offset, len); + } else if (type == "hIST") { + var pl = out.tabs["PLTE"].length / 3; + out.tabs[type] = []; + for (var i = 0; i < pl; i++) out.tabs[type].push(rUs(data, offset + i * 2)); + } else if (type == "tRNS") { + if (out.ctype == 3) out.tabs[type] = bin.readBytes(data, offset, len); + else if (out.ctype == 0) out.tabs[type] = rUs(data, offset); + else if (out.ctype == 2) out.tabs[type] = [rUs(data, offset), rUs(data, offset + 2), rUs(data, offset + 4)]; + } else if (type == "gAMA") out.tabs[type] = bin.readUint(data, offset) / 1e5; + else if (type == "sRGB") out.tabs[type] = data[offset]; + else if (type == "bKGD") { + if (out.ctype == 0 || out.ctype == 4) out.tabs[type] = [rUs(data, offset)]; + else if (out.ctype == 2 || out.ctype == 6) out.tabs[type] = [rUs(data, offset), rUs(data, offset + 2), rUs(data, offset + 4)]; + else if (out.ctype == 3) out.tabs[type] = data[offset]; + } else if (type == "IEND") { + break; + } + offset += len; + var crc = bin.readUint(data, offset); + offset += 4; + } + if (foff != 0) { + var fr = out.frames[out.frames.length - 1]; + fr.data = UPNG.decode._decompress(out, fd.slice(0, foff), fr.rect.width, fr.rect.height); + foff = 0; + } + out.data = UPNG.decode._decompress(out, dd, out.width, out.height); + delete out.compress; + delete out.interlace; + delete out.filter; + return out; +}; +UPNG.decode._decompress = function(out, dd, w, h) { + var time = Date.now(); + var bpp = UPNG.decode._getBPP(out), bpl = Math.ceil(w * bpp / 8), buff = new Uint8Array((bpl + 1 + out.interlace) * h); + dd = UPNG.decode._inflate(dd, buff); + var time = Date.now(); + if (out.interlace == 0) dd = UPNG.decode._filterZero(dd, out, 0, w, h); + else if (out.interlace == 1) dd = UPNG.decode._readInterlace(dd, out); + return dd; +}; +UPNG.decode._inflate = function(data, buff) { + var out = UPNG["inflateRaw"](new Uint8Array(data.buffer, 2, data.length - 6), buff); + return out; +}; +UPNG.inflateRaw = function() { + var H = {}; + H.H = {}; + H.H.N = function(N, W) { + var R = Uint8Array, i = 0, m = 0, J = 0, h = 0, Q = 0, X = 0, u = 0, w = 0, d = 0, v, C; + if (N[0] == 3 && N[1] == 0) return W ? W : new R(0); + var V = H.H, n = V.b, A = V.e, l = V.R, M = V.n, I = V.A, e = V.Z, b = V.m, Z = W == null; + if (Z) W = new R(N.length >>> 2 << 3); + while (i == 0) { + i = n(N, d, 1); + m = n(N, d + 1, 2); + d += 3; + if (m == 0) { + if ((d & 7) != 0) d += 8 - (d & 7); + var D = (d >>> 3) + 4, q = N[D - 4] | N[D - 3] << 8; + if (Z) W = H.H.W(W, w + q); + W.set(new R(N.buffer, N.byteOffset + D, q), w); + d = D + q << 3; + w += q; + continue; + } + if (Z) W = H.H.W(W, w + (1 << 17)); + if (m == 1) { + v = b.J; + C = b.h; + X = (1 << 9) - 1; + u = (1 << 5) - 1; + } + if (m == 2) { + J = A(N, d, 5) + 257; + h = A(N, d + 5, 5) + 1; + Q = A(N, d + 10, 4) + 4; + d += 14; + var E = d, j = 1; + for (var c = 0; c < 38; c += 2) { + b.Q[c] = 0; + b.Q[c + 1] = 0; + } + for (var c = 0; c < Q; c++) { + var K = A(N, d + c * 3, 3); + b.Q[(b.X[c] << 1) + 1] = K; + if (K > j) j = K; + } + d += 3 * Q; + M(b.Q, j); + I(b.Q, j, b.u); + v = b.w; + C = b.d; + d = l(b.u, (1 << j) - 1, J + h, N, d, b.v); + var r = V.V(b.v, 0, J, b.C); + X = (1 << r) - 1; + var S = V.V(b.v, J, h, b.D); + u = (1 << S) - 1; + M(b.C, r); + I(b.C, r, v); + M(b.D, S); + I(b.D, S, C); + } + while (true) { + var T = v[e(N, d) & X]; + d += T & 15; + var p = T >>> 4; + if (p >>> 8 == 0) { + W[w++] = p; + } else if (p == 256) { + break; + } else { + var z = w + p - 254; + if (p > 264) { + var _ = b.q[p - 257]; + z = w + (_ >>> 3) + A(N, d, _ & 7); + d += _ & 7; + } + var $ = C[e(N, d) & u]; + d += $ & 15; + var s = $ >>> 4, Y = b.c[s], a = (Y >>> 4) + n(N, d, Y & 15); + d += Y & 15; + while (w < z) { + W[w] = W[w++ - a]; + W[w] = W[w++ - a]; + W[w] = W[w++ - a]; + W[w] = W[w++ - a]; + } + w = z; + } + } + } + return W.length == w ? W : W.slice(0, w); + }; + H.H.W = function(N, W) { + var R = N.length; + if (W <= R) return N; + var V = new Uint8Array(R << 1); + V.set(N, 0); + return V; + }; + H.H.R = function(N, W, R, V, n, A) { + var l = H.H.e, M = H.H.Z, I = 0; + while (I < R) { + var e = N[M(V, n) & W]; + n += e & 15; + var b = e >>> 4; + if (b <= 15) { + A[I] = b; + I++; + } else { + var Z = 0, m = 0; + if (b == 16) { + m = 3 + l(V, n, 2); + n += 2; + Z = A[I - 1]; + } else if (b == 17) { + m = 3 + l(V, n, 3); + n += 3; + } else if (b == 18) { + m = 11 + l(V, n, 7); + n += 7; + } + var J = I + m; + while (I < J) { + A[I] = Z; + I++; + } + } + } + return n; + }; + H.H.V = function(N, W, R, V) { + var n = 0, A = 0, l = V.length >>> 1; + while (A < R) { + var M = N[A + W]; + V[A << 1] = 0; + V[(A << 1) + 1] = M; + if (M > n) n = M; + A++; + } + while (A < l) { + V[A << 1] = 0; + V[(A << 1) + 1] = 0; + A++; + } + return n; + }; + H.H.n = function(N, W) { + var R = H.H.m, V = N.length, n, A, l, M, I, e = R.j; + for (var M = 0; M <= W; M++) e[M] = 0; + for (M = 1; M < V; M += 2) e[N[M]]++; + var b = R.K; + n = 0; + e[0] = 0; + for (A = 1; A <= W; A++) { + n = n + e[A - 1] << 1; + b[A] = n; + } + for (l = 0; l < V; l += 2) { + I = N[l + 1]; + if (I != 0) { + N[l] = b[I]; + b[I]++; + } + } + }; + H.H.A = function(N, W, R) { + var V = N.length, n = H.H.m, A = n.r; + for (var l = 0; l < V; l += 2) if (N[l + 1] != 0) { + var M = l >> 1, I = N[l + 1], e = M << 4 | I, b = W - I, Z = N[l] << b, m = Z + (1 << b); + while (Z != m) { + var J = A[Z] >>> 15 - W; + R[J] = e; + Z++; + } + } + }; + H.H.l = function(N, W) { + var R = H.H.m.r, V = 15 - W; + for (var n = 0; n < N.length; n += 2) { + var A = N[n] << W - N[n + 1]; + N[n] = R[A] >>> V; + } + }; + H.H.M = function(N, W, R) { + R = R << (W & 7); + var V = W >>> 3; + N[V] |= R; + N[V + 1] |= R >>> 8; + }; + H.H.I = function(N, W, R) { + R = R << (W & 7); + var V = W >>> 3; + N[V] |= R; + N[V + 1] |= R >>> 8; + N[V + 2] |= R >>> 16; + }; + H.H.e = function(N, W, R) { + return (N[W >>> 3] | N[(W >>> 3) + 1] << 8) >>> (W & 7) & (1 << R) - 1; + }; + H.H.b = function(N, W, R) { + return (N[W >>> 3] | N[(W >>> 3) + 1] << 8 | N[(W >>> 3) + 2] << 16) >>> (W & 7) & (1 << R) - 1; + }; + H.H.Z = function(N, W) { + return (N[W >>> 3] | N[(W >>> 3) + 1] << 8 | N[(W >>> 3) + 2] << 16) >>> (W & 7); + }; + H.H.i = function(N, W) { + return (N[W >>> 3] | N[(W >>> 3) + 1] << 8 | N[(W >>> 3) + 2] << 16 | N[(W >>> 3) + 3] << 24) >>> (W & 7); + }; + H.H.m = function() { + var N = Uint16Array, W = Uint32Array; + return { K: new N(16), j: new N(16), X: [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15], S: [3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 999, 999, 999], T: [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 0, 0, 0], q: new N(32), p: [1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577, 65535, 65535], z: [0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 0, 0], c: new W(32), J: new N(512), _: [], h: new N(32), $: [], w: new N(32768), C: [], v: [], d: new N(32768), D: [], u: new N(512), Q: [], r: new N(1 << 15), s: new W(286), Y: new W(30), a: new W(19), t: new W(15e3), k: new N(1 << 16), g: new N(1 << 15) }; + }(); + (function() { + var N = H.H.m, W = 1 << 15; + for (var R = 0; R < W; R++) { + var V = R; + V = (V & 2863311530) >>> 1 | (V & 1431655765) << 1; + V = (V & 3435973836) >>> 2 | (V & 858993459) << 2; + V = (V & 4042322160) >>> 4 | (V & 252645135) << 4; + V = (V & 4278255360) >>> 8 | (V & 16711935) << 8; + N.r[R] = (V >>> 16 | V << 16) >>> 17; + } + function n(A, l, M) { + while (l-- != 0) A.push(0, M); + } + for (var R = 0; R < 32; R++) { + N.q[R] = N.S[R] << 3 | N.T[R]; + N.c[R] = N.p[R] << 4 | N.z[R]; + } + n(N._, 144, 8); + n(N._, 255 - 143, 9); + n(N._, 279 - 255, 7); + n(N._, 287 - 279, 8); + H.H.n(N._, 9); + H.H.A(N._, 9, N.J); + H.H.l(N._, 9); + n(N.$, 32, 5); + H.H.n(N.$, 5); + H.H.A(N.$, 5, N.h); + H.H.l(N.$, 5); + n(N.Q, 19, 0); + n(N.C, 286, 0); + n(N.D, 30, 0); + n(N.v, 320, 0); + })(); + return H.H.N; +}(); +UPNG.decode._readInterlace = function(data, out) { + var w = out.width, h = out.height; + var bpp = UPNG.decode._getBPP(out), cbpp = bpp >> 3, bpl = Math.ceil(w * bpp / 8); + var img = new Uint8Array(h * bpl); + var di = 0; + var starting_row = [0, 0, 4, 0, 2, 0, 1]; + var starting_col = [0, 4, 0, 2, 0, 1, 0]; + var row_increment = [8, 8, 8, 4, 4, 2, 2]; + var col_increment = [8, 8, 4, 4, 2, 2, 1]; + var pass = 0; + while (pass < 7) { + var ri = row_increment[pass], ci = col_increment[pass]; + var sw = 0, sh = 0; + var cr = starting_row[pass]; + while (cr < h) { + cr += ri; + sh++; + } + var cc = starting_col[pass]; + while (cc < w) { + cc += ci; + sw++; + } + var bpll = Math.ceil(sw * bpp / 8); + UPNG.decode._filterZero(data, out, di, sw, sh); + var y = 0, row = starting_row[pass]; + while (row < h) { + var col = starting_col[pass]; + var cdi = di + y * bpll << 3; + while (col < w) { + if (bpp == 1) { + var val = data[cdi >> 3]; + val = val >> 7 - (cdi & 7) & 1; + img[row * bpl + (col >> 3)] |= val << 7 - ((col & 7) << 0); + } + if (bpp == 2) { + var val = data[cdi >> 3]; + val = val >> 6 - (cdi & 7) & 3; + img[row * bpl + (col >> 2)] |= val << 6 - ((col & 3) << 1); + } + if (bpp == 4) { + var val = data[cdi >> 3]; + val = val >> 4 - (cdi & 7) & 15; + img[row * bpl + (col >> 1)] |= val << 4 - ((col & 1) << 2); + } + if (bpp >= 8) { + var ii = row * bpl + col * cbpp; + for (var j = 0; j < cbpp; j++) img[ii + j] = data[(cdi >> 3) + j]; + } + cdi += bpp; + col += ci; + } + y++; + row += ri; + } + if (sw * sh != 0) di += sh * (1 + bpll); + pass = pass + 1; + } + return img; +}; +UPNG.decode._getBPP = function(out) { + var noc = [1, null, 3, 1, 2, null, 4][out.ctype]; + return noc * out.depth; +}; +UPNG.decode._filterZero = function(data, out, off, w, h) { + var bpp = UPNG.decode._getBPP(out), bpl = Math.ceil(w * bpp / 8), paeth = UPNG.decode._paeth; + bpp = Math.ceil(bpp / 8); + var i = 0, di = 1, type = data[off], x = 0; + if (type > 1) data[off] = [0, 0, 1][type - 2]; + if (type == 3) for (x = bpp; x < bpl; x++) data[x + 1] = data[x + 1] + (data[x + 1 - bpp] >>> 1) & 255; + for (var y = 0; y < h; y++) { + i = off + y * bpl; + di = i + y + 1; + type = data[di - 1]; + x = 0; + if (type == 0) for (; x < bpl; x++) data[i + x] = data[di + x]; + else if (type == 1) { + for (; x < bpp; x++) data[i + x] = data[di + x]; + for (; x < bpl; x++) data[i + x] = data[di + x] + data[i + x - bpp]; + } else if (type == 2) { + for (; x < bpl; x++) data[i + x] = data[di + x] + data[i + x - bpl]; + } else if (type == 3) { + for (; x < bpp; x++) data[i + x] = data[di + x] + (data[i + x - bpl] >>> 1); + for (; x < bpl; x++) data[i + x] = data[di + x] + (data[i + x - bpl] + data[i + x - bpp] >>> 1); + } else { + for (; x < bpp; x++) data[i + x] = data[di + x] + paeth(0, data[i + x - bpl], 0); + for (; x < bpl; x++) data[i + x] = data[di + x] + paeth(data[i + x - bpp], data[i + x - bpl], data[i + x - bpp - bpl]); + } + } + return data; +}; +UPNG.decode._paeth = function(a, b, c) { + var p = a + b - c, pa = p - a, pb = p - b, pc = p - c; + if (pa * pa <= pb * pb && pa * pa <= pc * pc) return a; + else if (pb * pb <= pc * pc) return b; + return c; +}; +UPNG.decode._IHDR = function(data, offset, out) { + var bin = UPNG._bin; + out.width = bin.readUint(data, offset); + offset += 4; + out.height = bin.readUint(data, offset); + offset += 4; + out.depth = data[offset]; + offset++; + out.ctype = data[offset]; + offset++; + out.compress = data[offset]; + offset++; + out.filter = data[offset]; + offset++; + out.interlace = data[offset]; + offset++; +}; +UPNG._bin = { + nextZero: function(data, p) { + while (data[p] != 0) p++; + return p; + }, + readUshort: function(buff, p) { + return buff[p] << 8 | buff[p + 1]; + }, + writeUshort: function(buff, p, n) { + buff[p] = n >> 8 & 255; + buff[p + 1] = n & 255; + }, + readUint: function(buff, p) { + return buff[p] * (256 * 256 * 256) + (buff[p + 1] << 16 | buff[p + 2] << 8 | buff[p + 3]); + }, + writeUint: function(buff, p, n) { + buff[p] = n >> 24 & 255; + buff[p + 1] = n >> 16 & 255; + buff[p + 2] = n >> 8 & 255; + buff[p + 3] = n & 255; + }, + readASCII: function(buff, p, l) { + var s = ""; + for (var i = 0; i < l; i++) s += String.fromCharCode(buff[p + i]); + return s; + }, + writeASCII: function(data, p, s) { + for (var i = 0; i < s.length; i++) data[p + i] = s.charCodeAt(i); + }, + readBytes: function(buff, p, l) { + var arr = []; + for (var i = 0; i < l; i++) arr.push(buff[p + i]); + return arr; + }, + pad: function(n) { + return n.length < 2 ? "0" + n : n; + }, + readUTF8: function(buff, p, l) { + var s = "", ns; + for (var i = 0; i < l; i++) s += "%" + UPNG._bin.pad(buff[p + i].toString(16)); + try { + ns = decodeURIComponent(s); + } catch (e) { + return UPNG._bin.readASCII(buff, p, l); + } + return ns; + } +}; +UPNG._copyTile = function(sb, sw, sh, tb, tw, th, xoff, yoff, mode) { + var w = Math.min(sw, tw), h = Math.min(sh, th); + var si = 0, ti = 0; + for (var y = 0; y < h; y++) + for (var x = 0; x < w; x++) { + if (xoff >= 0 && yoff >= 0) { + si = y * sw + x << 2; + ti = (yoff + y) * tw + xoff + x << 2; + } else { + si = (-yoff + y) * sw - xoff + x << 2; + ti = y * tw + x << 2; + } + if (mode == 0) { + tb[ti] = sb[si]; + tb[ti + 1] = sb[si + 1]; + tb[ti + 2] = sb[si + 2]; + tb[ti + 3] = sb[si + 3]; + } else if (mode == 1) { + var fa = sb[si + 3] * (1 / 255), fr = sb[si] * fa, fg = sb[si + 1] * fa, fb = sb[si + 2] * fa; + var ba = tb[ti + 3] * (1 / 255), br = tb[ti] * ba, bg = tb[ti + 1] * ba, bb = tb[ti + 2] * ba; + var ifa = 1 - fa, oa = fa + ba * ifa, ioa = oa == 0 ? 0 : 1 / oa; + tb[ti + 3] = 255 * oa; + tb[ti + 0] = (fr + br * ifa) * ioa; + tb[ti + 1] = (fg + bg * ifa) * ioa; + tb[ti + 2] = (fb + bb * ifa) * ioa; + } else if (mode == 2) { + var fa = sb[si + 3], fr = sb[si], fg = sb[si + 1], fb = sb[si + 2]; + var ba = tb[ti + 3], br = tb[ti], bg = tb[ti + 1], bb = tb[ti + 2]; + if (fa == ba && fr == br && fg == bg && fb == bb) { + tb[ti] = 0; + tb[ti + 1] = 0; + tb[ti + 2] = 0; + tb[ti + 3] = 0; + } else { + tb[ti] = fr; + tb[ti + 1] = fg; + tb[ti + 2] = fb; + tb[ti + 3] = fa; + } + } else if (mode == 3) { + var fa = sb[si + 3], fr = sb[si], fg = sb[si + 1], fb = sb[si + 2]; + var ba = tb[ti + 3], br = tb[ti], bg = tb[ti + 1], bb = tb[ti + 2]; + if (fa == ba && fr == br && fg == bg && fb == bb) continue; + if (fa < 220 && ba > 20) return false; + } + } + return true; +}; +UPNG.encode = function(bufs, w, h, ps, dels, tabs, forbidPlte) { + if (ps == null) ps = 0; + if (forbidPlte == null) forbidPlte = false; + var nimg = UPNG.encode.compress(bufs, w, h, ps, [false, false, false, 0, forbidPlte]); + UPNG.encode.compressPNG(nimg, -1); + return UPNG.encode._main(nimg, w, h, dels, tabs); +}; +UPNG.encodeLL = function(bufs, w, h, cc, ac, depth, dels, tabs) { + var nimg = { ctype: 0 + (cc == 1 ? 0 : 2) + (ac == 0 ? 0 : 4), depth, frames: [] }; + var time = Date.now(); + var bipp = (cc + ac) * depth, bipl = bipp * w; + for (var i = 0; i < bufs.length; i++) + nimg.frames.push({ rect: { x: 0, y: 0, width: w, height: h }, img: new Uint8Array(bufs[i]), blend: 0, dispose: 1, bpp: Math.ceil(bipp / 8), bpl: Math.ceil(bipl / 8) }); + UPNG.encode.compressPNG(nimg, 0, true); + var out = UPNG.encode._main(nimg, w, h, dels, tabs); + return out; +}; +UPNG.encode._main = function(nimg, w, h, dels, tabs) { + if (tabs == null) tabs = {}; + var crc = UPNG.crc.crc, wUi = UPNG._bin.writeUint, wUs = UPNG._bin.writeUshort, wAs = UPNG._bin.writeASCII; + var offset = 8, anim = nimg.frames.length > 1, pltAlpha = false; + var leng = 8 + (16 + 5 + 4) + (anim ? 20 : 0); + if (tabs["sRGB"] != null) leng += 8 + 1 + 4; + if (tabs["pHYs"] != null) leng += 8 + 9 + 4; + if (nimg.ctype == 3) { + var dl = nimg.plte.length; + for (var i = 0; i < dl; i++) if (nimg.plte[i] >>> 24 != 255) pltAlpha = true; + leng += 8 + dl * 3 + 4 + (pltAlpha ? 8 + dl * 1 + 4 : 0); + } + for (var j = 0; j < nimg.frames.length; j++) { + var fr = nimg.frames[j]; + if (anim) leng += 38; + leng += fr.cimg.length + 12; + if (j != 0) leng += 4; + } + leng += 12; + var data = new Uint8Array(leng); + var wr = [137, 80, 78, 71, 13, 10, 26, 10]; + for (var i = 0; i < 8; i++) data[i] = wr[i]; + wUi(data, offset, 13); + offset += 4; + wAs(data, offset, "IHDR"); + offset += 4; + wUi(data, offset, w); + offset += 4; + wUi(data, offset, h); + offset += 4; + data[offset] = nimg.depth; + offset++; + data[offset] = nimg.ctype; + offset++; + data[offset] = 0; + offset++; + data[offset] = 0; + offset++; + data[offset] = 0; + offset++; + wUi(data, offset, crc(data, offset - 17, 17)); + offset += 4; + if (tabs["sRGB"] != null) { + wUi(data, offset, 1); + offset += 4; + wAs(data, offset, "sRGB"); + offset += 4; + data[offset] = tabs["sRGB"]; + offset++; + wUi(data, offset, crc(data, offset - 5, 5)); + offset += 4; + } + if (tabs["pHYs"] != null) { + wUi(data, offset, 9); + offset += 4; + wAs(data, offset, "pHYs"); + offset += 4; + wUi(data, offset, tabs["pHYs"][0]); + offset += 4; + wUi(data, offset, tabs["pHYs"][1]); + offset += 4; + data[offset] = tabs["pHYs"][2]; + offset++; + wUi(data, offset, crc(data, offset - 13, 13)); + offset += 4; + } + if (anim) { + wUi(data, offset, 8); + offset += 4; + wAs(data, offset, "acTL"); + offset += 4; + wUi(data, offset, nimg.frames.length); + offset += 4; + wUi(data, offset, tabs["loop"] != null ? tabs["loop"] : 0); + offset += 4; + wUi(data, offset, crc(data, offset - 12, 12)); + offset += 4; + } + if (nimg.ctype == 3) { + var dl = nimg.plte.length; + wUi(data, offset, dl * 3); + offset += 4; + wAs(data, offset, "PLTE"); + offset += 4; + for (var i = 0; i < dl; i++) { + var ti = i * 3, c = nimg.plte[i], r = c & 255, g = c >>> 8 & 255, b = c >>> 16 & 255; + data[offset + ti + 0] = r; + data[offset + ti + 1] = g; + data[offset + ti + 2] = b; + } + offset += dl * 3; + wUi(data, offset, crc(data, offset - dl * 3 - 4, dl * 3 + 4)); + offset += 4; + if (pltAlpha) { + wUi(data, offset, dl); + offset += 4; + wAs(data, offset, "tRNS"); + offset += 4; + for (var i = 0; i < dl; i++) data[offset + i] = nimg.plte[i] >>> 24 & 255; + offset += dl; + wUi(data, offset, crc(data, offset - dl - 4, dl + 4)); + offset += 4; + } + } + var fi = 0; + for (var j = 0; j < nimg.frames.length; j++) { + var fr = nimg.frames[j]; + if (anim) { + wUi(data, offset, 26); + offset += 4; + wAs(data, offset, "fcTL"); + offset += 4; + wUi(data, offset, fi++); + offset += 4; + wUi(data, offset, fr.rect.width); + offset += 4; + wUi(data, offset, fr.rect.height); + offset += 4; + wUi(data, offset, fr.rect.x); + offset += 4; + wUi(data, offset, fr.rect.y); + offset += 4; + wUs(data, offset, dels[j]); + offset += 2; + wUs(data, offset, 1e3); + offset += 2; + data[offset] = fr.dispose; + offset++; + data[offset] = fr.blend; + offset++; + wUi(data, offset, crc(data, offset - 30, 30)); + offset += 4; + } + var imgd = fr.cimg, dl = imgd.length; + wUi(data, offset, dl + (j == 0 ? 0 : 4)); + offset += 4; + var ioff = offset; + wAs(data, offset, j == 0 ? "IDAT" : "fdAT"); + offset += 4; + if (j != 0) { + wUi(data, offset, fi++); + offset += 4; + } + data.set(imgd, offset); + offset += dl; + wUi(data, offset, crc(data, ioff, offset - ioff)); + offset += 4; + } + wUi(data, offset, 0); + offset += 4; + wAs(data, offset, "IEND"); + offset += 4; + wUi(data, offset, crc(data, offset - 4, 4)); + offset += 4; + return data.buffer; +}; +UPNG.encode.compressPNG = function(out, filter, levelZero) { + for (var i = 0; i < out.frames.length; i++) { + var frm = out.frames[i], nw = frm.rect.width, nh = frm.rect.height; + var fdata = new Uint8Array(nh * frm.bpl + nh); + frm.cimg = UPNG.encode._filterZero(frm.img, nh, frm.bpp, frm.bpl, fdata, filter, levelZero); + } +}; +UPNG.encode.compress = function(bufs, w, h, ps, prms) { + var onlyBlend = prms[0], evenCrd = prms[1], forbidPrev = prms[2], minBits = prms[3], forbidPlte = prms[4]; + var ctype = 6, depth = 8, alphaAnd = 255; + for (var j = 0; j < bufs.length; j++) { + var img = new Uint8Array(bufs[j]), ilen = img.length; + for (var i = 0; i < ilen; i += 4) alphaAnd &= img[i + 3]; + } + var gotAlpha = alphaAnd != 255; + var frms = UPNG.encode.framize(bufs, w, h, onlyBlend, evenCrd, forbidPrev); + var cmap = {}, plte = [], inds = []; + if (ps != 0) { + var nbufs = []; + for (var i = 0; i < frms.length; i++) nbufs.push(frms[i].img.buffer); + var abuf = UPNG.encode.concatRGBA(nbufs), qres = UPNG.quantize(abuf, ps); + var cof = 0, bb = new Uint8Array(qres.abuf); + for (var i = 0; i < frms.length; i++) { + var ti = frms[i].img, bln = ti.length; + inds.push(new Uint8Array(qres.inds.buffer, cof >> 2, bln >> 2)); + for (var j = 0; j < bln; j += 4) { + ti[j] = bb[cof + j]; + ti[j + 1] = bb[cof + j + 1]; + ti[j + 2] = bb[cof + j + 2]; + ti[j + 3] = bb[cof + j + 3]; + } + cof += bln; + } + for (var i = 0; i < qres.plte.length; i++) plte.push(qres.plte[i].est.rgba); + } else { + for (var j = 0; j < frms.length; j++) { + var frm = frms[j], img32 = new Uint32Array(frm.img.buffer), nw = frm.rect.width, ilen = img32.length; + var ind = new Uint8Array(ilen); + inds.push(ind); + for (var i = 0; i < ilen; i++) { + var c = img32[i]; + if (i != 0 && c == img32[i - 1]) ind[i] = ind[i - 1]; + else if (i > nw && c == img32[i - nw]) ind[i] = ind[i - nw]; + else { + var cmc = cmap[c]; + if (cmc == null) { + cmap[c] = cmc = plte.length; + plte.push(c); + if (plte.length >= 300) break; + } + ind[i] = cmc; + } + } + } + } + var cc = plte.length; + if (cc <= 256 && forbidPlte == false) { + if (cc <= 2) depth = 1; + else if (cc <= 4) depth = 2; + else if (cc <= 16) depth = 4; + else depth = 8; + depth = Math.max(depth, minBits); + } + for (var j = 0; j < frms.length; j++) { + var frm = frms[j], nx = frm.rect.x, ny = frm.rect.y, nw = frm.rect.width, nh = frm.rect.height; + var cimg = frm.img, cimg32 = new Uint32Array(cimg.buffer); + var bpl = 4 * nw, bpp = 4; + if (cc <= 256 && forbidPlte == false) { + bpl = Math.ceil(depth * nw / 8); + var nimg = new Uint8Array(bpl * nh); + var inj = inds[j]; + for (var y = 0; y < nh; y++) { + var i = y * bpl, ii = y * nw; + if (depth == 8) for (var x = 0; x < nw; x++) nimg[i + x] = inj[ii + x]; + else if (depth == 4) for (var x = 0; x < nw; x++) nimg[i + (x >> 1)] |= inj[ii + x] << 4 - (x & 1) * 4; + else if (depth == 2) for (var x = 0; x < nw; x++) nimg[i + (x >> 2)] |= inj[ii + x] << 6 - (x & 3) * 2; + else if (depth == 1) for (var x = 0; x < nw; x++) nimg[i + (x >> 3)] |= inj[ii + x] << 7 - (x & 7) * 1; + } + cimg = nimg; + ctype = 3; + bpp = 1; + } else if (gotAlpha == false && frms.length == 1) { + var nimg = new Uint8Array(nw * nh * 3), area = nw * nh; + for (var i = 0; i < area; i++) { + var ti = i * 3, qi = i * 4; + nimg[ti] = cimg[qi]; + nimg[ti + 1] = cimg[qi + 1]; + nimg[ti + 2] = cimg[qi + 2]; + } + cimg = nimg; + ctype = 2; + bpp = 3; + bpl = 3 * nw; + } + frm.img = cimg; + frm.bpl = bpl; + frm.bpp = bpp; + } + return { ctype, depth, plte, frames: frms }; +}; +UPNG.encode.framize = function(bufs, w, h, alwaysBlend, evenCrd, forbidPrev) { + var frms = []; + for (var j = 0; j < bufs.length; j++) { + var cimg = new Uint8Array(bufs[j]), cimg32 = new Uint32Array(cimg.buffer); + var nimg; + var nx = 0, ny = 0, nw = w, nh = h, blend = alwaysBlend ? 1 : 0; + if (j != 0) { + var tlim = forbidPrev || alwaysBlend || j == 1 || frms[j - 2].dispose != 0 ? 1 : 2, tstp = 0, tarea = 1e9; + for (var it = 0; it < tlim; it++) { + var pimg = new Uint8Array(bufs[j - 1 - it]), p32 = new Uint32Array(bufs[j - 1 - it]); + var mix = w, miy = h, max = -1, may = -1; + for (var y = 0; y < h; y++) for (var x = 0; x < w; x++) { + var i = y * w + x; + if (cimg32[i] != p32[i]) { + if (x < mix) mix = x; + if (x > max) max = x; + if (y < miy) miy = y; + if (y > may) may = y; + } + } + if (max == -1) mix = miy = max = may = 0; + if (evenCrd) { + if ((mix & 1) == 1) mix--; + if ((miy & 1) == 1) miy--; + } + var sarea = (max - mix + 1) * (may - miy + 1); + if (sarea < tarea) { + tarea = sarea; + tstp = it; + nx = mix; + ny = miy; + nw = max - mix + 1; + nh = may - miy + 1; + } + } + var pimg = new Uint8Array(bufs[j - 1 - tstp]); + if (tstp == 1) frms[j - 1].dispose = 2; + nimg = new Uint8Array(nw * nh * 4); + UPNG._copyTile(pimg, w, h, nimg, nw, nh, -nx, -ny, 0); + blend = UPNG._copyTile(cimg, w, h, nimg, nw, nh, -nx, -ny, 3) ? 1 : 0; + if (blend == 1) UPNG.encode._prepareDiff(cimg, w, h, nimg, { x: nx, y: ny, width: nw, height: nh }); + else UPNG._copyTile(cimg, w, h, nimg, nw, nh, -nx, -ny, 0); + } else nimg = cimg.slice(0); + frms.push({ rect: { x: nx, y: ny, width: nw, height: nh }, img: nimg, blend, dispose: 0 }); + } + if (alwaysBlend) for (var j = 0; j < frms.length; j++) { + var frm = frms[j]; + if (frm.blend == 1) continue; + var r0 = frm.rect, r1 = frms[j - 1].rect; + var miX = Math.min(r0.x, r1.x), miY = Math.min(r0.y, r1.y); + var maX = Math.max(r0.x + r0.width, r1.x + r1.width), maY = Math.max(r0.y + r0.height, r1.y + r1.height); + var r = { x: miX, y: miY, width: maX - miX, height: maY - miY }; + frms[j - 1].dispose = 1; + if (j - 1 != 0) + UPNG.encode._updateFrame(bufs, w, h, frms, j - 1, r, evenCrd); + UPNG.encode._updateFrame(bufs, w, h, frms, j, r, evenCrd); + } + var area = 0; + if (bufs.length != 1) for (var i = 0; i < frms.length; i++) { + var frm = frms[i]; + area += frm.rect.width * frm.rect.height; + } + return frms; +}; +UPNG.encode._updateFrame = function(bufs, w, h, frms, i, r, evenCrd) { + var U8 = Uint8Array, U32 = Uint32Array; + var pimg = new U8(bufs[i - 1]), pimg32 = new U32(bufs[i - 1]), nimg = i + 1 < bufs.length ? new U8(bufs[i + 1]) : null; + var cimg = new U8(bufs[i]), cimg32 = new U32(cimg.buffer); + var mix = w, miy = h, max = -1, may = -1; + for (var y = 0; y < r.height; y++) for (var x = 0; x < r.width; x++) { + var cx2 = r.x + x, cy2 = r.y + y; + var j = cy2 * w + cx2, cc = cimg32[j]; + if (cc == 0 || frms[i - 1].dispose == 0 && pimg32[j] == cc && (nimg == null || nimg[j * 4 + 3] != 0)) { + } else { + if (cx2 < mix) mix = cx2; + if (cx2 > max) max = cx2; + if (cy2 < miy) miy = cy2; + if (cy2 > may) may = cy2; + } + } + if (max == -1) mix = miy = max = may = 0; + if (evenCrd) { + if ((mix & 1) == 1) mix--; + if ((miy & 1) == 1) miy--; + } + r = { x: mix, y: miy, width: max - mix + 1, height: may - miy + 1 }; + var fr = frms[i]; + fr.rect = r; + fr.blend = 1; + fr.img = new Uint8Array(r.width * r.height * 4); + if (frms[i - 1].dispose == 0) { + UPNG._copyTile(pimg, w, h, fr.img, r.width, r.height, -r.x, -r.y, 0); + UPNG.encode._prepareDiff(cimg, w, h, fr.img, r); + } else + UPNG._copyTile(cimg, w, h, fr.img, r.width, r.height, -r.x, -r.y, 0); +}; +UPNG.encode._prepareDiff = function(cimg, w, h, nimg, rec) { + UPNG._copyTile(cimg, w, h, nimg, rec.width, rec.height, -rec.x, -rec.y, 2); +}; +UPNG.encode._filterZero = function(img, h, bpp, bpl, data, filter, levelZero) { + var fls = [], ftry = [0, 1, 2, 3, 4]; + if (filter != -1) ftry = [filter]; + else if (h * bpl > 5e5 || bpp == 1) ftry = [0]; + var opts; + if (levelZero) opts = { level: 0 }; + var CMPR = levelZero && UZIP != null ? UZIP : import_pako4.default; + for (var i = 0; i < ftry.length; i++) { + for (var y = 0; y < h; y++) UPNG.encode._filterLine(data, img, y, bpl, bpp, ftry[i]); + fls.push(CMPR["deflate"](data, opts)); + } + var ti, tsize = 1e9; + for (var i = 0; i < fls.length; i++) if (fls[i].length < tsize) { + ti = i; + tsize = fls[i].length; + } + return fls[ti]; +}; +UPNG.encode._filterLine = function(data, img, y, bpl, bpp, type) { + var i = y * bpl, di = i + y, paeth = UPNG.decode._paeth; + data[di] = type; + di++; + if (type == 0) { + if (bpl < 500) for (var x = 0; x < bpl; x++) data[di + x] = img[i + x]; + else data.set(new Uint8Array(img.buffer, i, bpl), di); + } else if (type == 1) { + for (var x = 0; x < bpp; x++) data[di + x] = img[i + x]; + for (var x = bpp; x < bpl; x++) data[di + x] = img[i + x] - img[i + x - bpp] + 256 & 255; + } else if (y == 0) { + for (var x = 0; x < bpp; x++) data[di + x] = img[i + x]; + if (type == 2) for (var x = bpp; x < bpl; x++) data[di + x] = img[i + x]; + if (type == 3) for (var x = bpp; x < bpl; x++) data[di + x] = img[i + x] - (img[i + x - bpp] >> 1) + 256 & 255; + if (type == 4) for (var x = bpp; x < bpl; x++) data[di + x] = img[i + x] - paeth(img[i + x - bpp], 0, 0) + 256 & 255; + } else { + if (type == 2) { + for (var x = 0; x < bpl; x++) data[di + x] = img[i + x] + 256 - img[i + x - bpl] & 255; + } + if (type == 3) { + for (var x = 0; x < bpp; x++) data[di + x] = img[i + x] + 256 - (img[i + x - bpl] >> 1) & 255; + for (var x = bpp; x < bpl; x++) data[di + x] = img[i + x] + 256 - (img[i + x - bpl] + img[i + x - bpp] >> 1) & 255; + } + if (type == 4) { + for (var x = 0; x < bpp; x++) data[di + x] = img[i + x] + 256 - paeth(0, img[i + x - bpl], 0) & 255; + for (var x = bpp; x < bpl; x++) data[di + x] = img[i + x] + 256 - paeth(img[i + x - bpp], img[i + x - bpl], img[i + x - bpp - bpl]) & 255; + } + } +}; +UPNG.crc = { + table: function() { + var tab = new Uint32Array(256); + for (var n = 0; n < 256; n++) { + var c = n; + for (var k = 0; k < 8; k++) { + if (c & 1) c = 3988292384 ^ c >>> 1; + else c = c >>> 1; + } + tab[n] = c; + } + return tab; + }(), + update: function(c, buf, off, len) { + for (var i = 0; i < len; i++) c = UPNG.crc.table[(c ^ buf[off + i]) & 255] ^ c >>> 8; + return c; + }, + crc: function(b, o, l) { + return UPNG.crc.update(4294967295, b, o, l) ^ 4294967295; + } +}; +UPNG.quantize = function(abuf, ps) { + var oimg = new Uint8Array(abuf), nimg = oimg.slice(0), nimg32 = new Uint32Array(nimg.buffer); + var KD = UPNG.quantize.getKDtree(nimg, ps); + var root = KD[0], leafs = KD[1]; + var planeDst = UPNG.quantize.planeDst; + var sb = oimg, tb = nimg32, len = sb.length; + var inds = new Uint8Array(oimg.length >> 2); + for (var i = 0; i < len; i += 4) { + var r = sb[i] * (1 / 255), g = sb[i + 1] * (1 / 255), b = sb[i + 2] * (1 / 255), a = sb[i + 3] * (1 / 255); + var nd = UPNG.quantize.getNearest(root, r, g, b, a); + inds[i >> 2] = nd.ind; + tb[i >> 2] = nd.est.rgba; + } + return { abuf: nimg.buffer, inds, plte: leafs }; +}; +UPNG.quantize.getKDtree = function(nimg, ps, err) { + if (err == null) err = 1e-4; + var nimg32 = new Uint32Array(nimg.buffer); + var root = { i0: 0, i1: nimg.length, bst: null, est: null, tdst: 0, left: null, right: null }; + root.bst = UPNG.quantize.stats(nimg, root.i0, root.i1); + root.est = UPNG.quantize.estats(root.bst); + var leafs = [root]; + while (leafs.length < ps) { + var maxL = 0, mi = 0; + for (var i = 0; i < leafs.length; i++) if (leafs[i].est.L > maxL) { + maxL = leafs[i].est.L; + mi = i; + } + if (maxL < err) break; + var node = leafs[mi]; + var s0 = UPNG.quantize.splitPixels(nimg, nimg32, node.i0, node.i1, node.est.e, node.est.eMq255); + var s0wrong = node.i0 >= s0 || node.i1 <= s0; + if (s0wrong) { + node.est.L = 0; + continue; + } + var ln = { i0: node.i0, i1: s0, bst: null, est: null, tdst: 0, left: null, right: null }; + ln.bst = UPNG.quantize.stats(nimg, ln.i0, ln.i1); + ln.est = UPNG.quantize.estats(ln.bst); + var rn = { i0: s0, i1: node.i1, bst: null, est: null, tdst: 0, left: null, right: null }; + rn.bst = { R: [], m: [], N: node.bst.N - ln.bst.N }; + for (var i = 0; i < 16; i++) rn.bst.R[i] = node.bst.R[i] - ln.bst.R[i]; + for (var i = 0; i < 4; i++) rn.bst.m[i] = node.bst.m[i] - ln.bst.m[i]; + rn.est = UPNG.quantize.estats(rn.bst); + node.left = ln; + node.right = rn; + leafs[mi] = ln; + leafs.push(rn); + } + leafs.sort(function(a, b) { + return b.bst.N - a.bst.N; + }); + for (var i = 0; i < leafs.length; i++) leafs[i].ind = i; + return [root, leafs]; +}; +UPNG.quantize.getNearest = function(nd, r, g, b, a) { + if (nd.left == null) { + nd.tdst = UPNG.quantize.dist(nd.est.q, r, g, b, a); + return nd; + } + var planeDst = UPNG.quantize.planeDst(nd.est, r, g, b, a); + var node0 = nd.left, node1 = nd.right; + if (planeDst > 0) { + node0 = nd.right; + node1 = nd.left; + } + var ln = UPNG.quantize.getNearest(node0, r, g, b, a); + if (ln.tdst <= planeDst * planeDst) return ln; + var rn = UPNG.quantize.getNearest(node1, r, g, b, a); + return rn.tdst < ln.tdst ? rn : ln; +}; +UPNG.quantize.planeDst = function(est, r, g, b, a) { + var e = est.e; + return e[0] * r + e[1] * g + e[2] * b + e[3] * a - est.eMq; +}; +UPNG.quantize.dist = function(q, r, g, b, a) { + var d0 = r - q[0], d1 = g - q[1], d2 = b - q[2], d3 = a - q[3]; + return d0 * d0 + d1 * d1 + d2 * d2 + d3 * d3; +}; +UPNG.quantize.splitPixels = function(nimg, nimg32, i0, i1, e, eMq) { + var vecDot = UPNG.quantize.vecDot; + i1 -= 4; + var shfs = 0; + while (i0 < i1) { + while (vecDot(nimg, i0, e) <= eMq) i0 += 4; + while (vecDot(nimg, i1, e) > eMq) i1 -= 4; + if (i0 >= i1) break; + var t = nimg32[i0 >> 2]; + nimg32[i0 >> 2] = nimg32[i1 >> 2]; + nimg32[i1 >> 2] = t; + i0 += 4; + i1 -= 4; + } + while (vecDot(nimg, i0, e) > eMq) i0 -= 4; + return i0 + 4; +}; +UPNG.quantize.vecDot = function(nimg, i, e) { + return nimg[i] * e[0] + nimg[i + 1] * e[1] + nimg[i + 2] * e[2] + nimg[i + 3] * e[3]; +}; +UPNG.quantize.stats = function(nimg, i0, i1) { + var R = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; + var m = [0, 0, 0, 0]; + var N = i1 - i0 >> 2; + for (var i = i0; i < i1; i += 4) { + var r = nimg[i] * (1 / 255), g = nimg[i + 1] * (1 / 255), b = nimg[i + 2] * (1 / 255), a = nimg[i + 3] * (1 / 255); + m[0] += r; + m[1] += g; + m[2] += b; + m[3] += a; + R[0] += r * r; + R[1] += r * g; + R[2] += r * b; + R[3] += r * a; + R[5] += g * g; + R[6] += g * b; + R[7] += g * a; + R[10] += b * b; + R[11] += b * a; + R[15] += a * a; + } + R[4] = R[1]; + R[8] = R[2]; + R[9] = R[6]; + R[12] = R[3]; + R[13] = R[7]; + R[14] = R[11]; + return { R, m, N }; +}; +UPNG.quantize.estats = function(stats) { + var R = stats.R, m = stats.m, N = stats.N; + var m0 = m[0], m1 = m[1], m2 = m[2], m3 = m[3], iN = N == 0 ? 0 : 1 / N; + var Rj = [ + R[0] - m0 * m0 * iN, + R[1] - m0 * m1 * iN, + R[2] - m0 * m2 * iN, + R[3] - m0 * m3 * iN, + R[4] - m1 * m0 * iN, + R[5] - m1 * m1 * iN, + R[6] - m1 * m2 * iN, + R[7] - m1 * m3 * iN, + R[8] - m2 * m0 * iN, + R[9] - m2 * m1 * iN, + R[10] - m2 * m2 * iN, + R[11] - m2 * m3 * iN, + R[12] - m3 * m0 * iN, + R[13] - m3 * m1 * iN, + R[14] - m3 * m2 * iN, + R[15] - m3 * m3 * iN + ]; + var A = Rj, M = UPNG.M4; + var b = [0.5, 0.5, 0.5, 0.5], mi = 0, tmi = 0; + if (N != 0) + for (var i = 0; i < 10; i++) { + b = M.multVec(A, b); + tmi = Math.sqrt(M.dot(b, b)); + b = M.sml(1 / tmi, b); + if (Math.abs(tmi - mi) < 1e-9) break; + mi = tmi; + } + var q = [m0 * iN, m1 * iN, m2 * iN, m3 * iN]; + var eMq255 = M.dot(M.sml(255, q), b); + return { + Cov: Rj, + q, + e: b, + L: mi, + eMq255, + eMq: M.dot(b, q), + rgba: (Math.round(255 * q[3]) << 24 | Math.round(255 * q[2]) << 16 | Math.round(255 * q[1]) << 8 | Math.round(255 * q[0]) << 0) >>> 0 + }; +}; +UPNG.M4 = { + multVec: function(m, v) { + return [ + m[0] * v[0] + m[1] * v[1] + m[2] * v[2] + m[3] * v[3], + m[4] * v[0] + m[5] * v[1] + m[6] * v[2] + m[7] * v[3], + m[8] * v[0] + m[9] * v[1] + m[10] * v[2] + m[11] * v[3], + m[12] * v[0] + m[13] * v[1] + m[14] * v[2] + m[15] * v[3] + ]; + }, + dot: function(x, y) { + return x[0] * y[0] + x[1] * y[1] + x[2] * y[2] + x[3] * y[3]; + }, + sml: function(a, y) { + return [a * y[0], a * y[1], a * y[2], a * y[3]]; + } +}; +UPNG.encode.concatRGBA = function(bufs) { + var tlen = 0; + for (var i = 0; i < bufs.length; i++) tlen += bufs[i].byteLength; + var nimg = new Uint8Array(tlen), noff = 0; + for (var i = 0; i < bufs.length; i++) { + var img = new Uint8Array(bufs[i]), il = img.length; + for (var j = 0; j < il; j += 4) { + var r = img[j], g = img[j + 1], b = img[j + 2], a = img[j + 3]; + if (a == 0) r = g = b = 0; + nimg[noff + j] = r; + nimg[noff + j + 1] = g; + nimg[noff + j + 2] = b; + nimg[noff + j + 3] = a; + } + noff += il; + } + return nimg.buffer; +}; +var UPNG_default = UPNG; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/utils/png.js +var getImageType = function(ctype) { + if (ctype === 0) + return PngType.Greyscale; + if (ctype === 2) + return PngType.Truecolour; + if (ctype === 3) + return PngType.IndexedColour; + if (ctype === 4) + return PngType.GreyscaleWithAlpha; + if (ctype === 6) + return PngType.TruecolourWithAlpha; + throw new Error("Unknown color type: " + ctype); +}; +var splitAlphaChannel = function(rgbaChannel) { + var pixelCount = Math.floor(rgbaChannel.length / 4); + var rgbChannel = new Uint8Array(pixelCount * 3); + var alphaChannel = new Uint8Array(pixelCount * 1); + var rgbaOffset = 0; + var rgbOffset = 0; + var alphaOffset = 0; + while (rgbaOffset < rgbaChannel.length) { + rgbChannel[rgbOffset++] = rgbaChannel[rgbaOffset++]; + rgbChannel[rgbOffset++] = rgbaChannel[rgbaOffset++]; + rgbChannel[rgbOffset++] = rgbaChannel[rgbaOffset++]; + alphaChannel[alphaOffset++] = rgbaChannel[rgbaOffset++]; + } + return { rgbChannel, alphaChannel }; +}; +var PngType; +(function(PngType2) { + PngType2["Greyscale"] = "Greyscale"; + PngType2["Truecolour"] = "Truecolour"; + PngType2["IndexedColour"] = "IndexedColour"; + PngType2["GreyscaleWithAlpha"] = "GreyscaleWithAlpha"; + PngType2["TruecolourWithAlpha"] = "TruecolourWithAlpha"; +})(PngType || (PngType = {})); +var PNG = ( + /** @class */ + function() { + function PNG2(pngData) { + var upng = UPNG_default.decode(pngData); + var frames = UPNG_default.toRGBA8(upng); + if (frames.length > 1) + throw new Error("Animated PNGs are not supported"); + var frame = new Uint8Array(frames[0]); + var _a = splitAlphaChannel(frame), rgbChannel = _a.rgbChannel, alphaChannel = _a.alphaChannel; + this.rgbChannel = rgbChannel; + var hasAlphaValues = alphaChannel.some(function(a) { + return a < 255; + }); + if (hasAlphaValues) + this.alphaChannel = alphaChannel; + this.type = getImageType(upng.ctype); + this.width = upng.width; + this.height = upng.height; + this.bitsPerComponent = 8; + } + PNG2.load = function(pngData) { + return new PNG2(pngData); + }; + return PNG2; + }() +); + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/core/embedders/PngEmbedder.js +var PngEmbedder = ( + /** @class */ + function() { + function PngEmbedder2(png) { + this.image = png; + this.bitsPerComponent = png.bitsPerComponent; + this.width = png.width; + this.height = png.height; + this.colorSpace = "DeviceRGB"; + } + PngEmbedder2.for = function(imageData) { + return __awaiter(this, void 0, void 0, function() { + var png; + return __generator(this, function(_a) { + png = PNG.load(imageData); + return [2, new PngEmbedder2(png)]; + }); + }); + }; + PngEmbedder2.prototype.embedIntoContext = function(context, ref) { + return __awaiter(this, void 0, void 0, function() { + var SMask, xObject; + return __generator(this, function(_a) { + SMask = this.embedAlphaChannel(context); + xObject = context.flateStream(this.image.rgbChannel, { + Type: "XObject", + Subtype: "Image", + BitsPerComponent: this.image.bitsPerComponent, + Width: this.image.width, + Height: this.image.height, + ColorSpace: this.colorSpace, + SMask + }); + if (ref) { + context.assign(ref, xObject); + return [2, ref]; + } else { + return [2, context.register(xObject)]; + } + return [ + 2 + /*return*/ + ]; + }); + }); + }; + PngEmbedder2.prototype.embedAlphaChannel = function(context) { + if (!this.image.alphaChannel) + return void 0; + var xObject = context.flateStream(this.image.alphaChannel, { + Type: "XObject", + Subtype: "Image", + Height: this.image.height, + Width: this.image.width, + BitsPerComponent: this.image.bitsPerComponent, + ColorSpace: "DeviceGray", + Decode: [0, 1] + }); + return context.register(xObject); + }; + return PngEmbedder2; + }() +); +var PngEmbedder_default = PngEmbedder; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/core/streams/Stream.js +var Stream = ( + /** @class */ + function() { + function Stream2(buffer, start, length) { + this.bytes = buffer; + this.start = start || 0; + this.pos = this.start; + this.end = !!start && !!length ? start + length : this.bytes.length; + } + Object.defineProperty(Stream2.prototype, "length", { + get: function() { + return this.end - this.start; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(Stream2.prototype, "isEmpty", { + get: function() { + return this.length === 0; + }, + enumerable: false, + configurable: true + }); + Stream2.prototype.getByte = function() { + if (this.pos >= this.end) { + return -1; + } + return this.bytes[this.pos++]; + }; + Stream2.prototype.getUint16 = function() { + var b0 = this.getByte(); + var b1 = this.getByte(); + if (b0 === -1 || b1 === -1) { + return -1; + } + return (b0 << 8) + b1; + }; + Stream2.prototype.getInt32 = function() { + var b0 = this.getByte(); + var b1 = this.getByte(); + var b2 = this.getByte(); + var b3 = this.getByte(); + return (b0 << 24) + (b1 << 16) + (b2 << 8) + b3; + }; + Stream2.prototype.getBytes = function(length, forceClamped) { + if (forceClamped === void 0) { + forceClamped = false; + } + var bytes = this.bytes; + var pos = this.pos; + var strEnd = this.end; + if (!length) { + var subarray = bytes.subarray(pos, strEnd); + return forceClamped ? new Uint8ClampedArray(subarray) : subarray; + } else { + var end = pos + length; + if (end > strEnd) { + end = strEnd; + } + this.pos = end; + var subarray = bytes.subarray(pos, end); + return forceClamped ? new Uint8ClampedArray(subarray) : subarray; + } + }; + Stream2.prototype.peekByte = function() { + var peekedByte = this.getByte(); + this.pos--; + return peekedByte; + }; + Stream2.prototype.peekBytes = function(length, forceClamped) { + if (forceClamped === void 0) { + forceClamped = false; + } + var bytes = this.getBytes(length, forceClamped); + this.pos -= bytes.length; + return bytes; + }; + Stream2.prototype.skip = function(n) { + if (!n) { + n = 1; + } + this.pos += n; + }; + Stream2.prototype.reset = function() { + this.pos = this.start; + }; + Stream2.prototype.moveStart = function() { + this.start = this.pos; + }; + Stream2.prototype.makeSubStream = function(start, length) { + return new Stream2(this.bytes, start, length); + }; + Stream2.prototype.decode = function() { + return this.bytes; + }; + return Stream2; + }() +); +var Stream_default = Stream; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/core/streams/DecodeStream.js +var emptyBuffer = new Uint8Array(0); +var DecodeStream = ( + /** @class */ + function() { + function DecodeStream2(maybeMinBufferLength) { + this.pos = 0; + this.bufferLength = 0; + this.eof = false; + this.buffer = emptyBuffer; + this.minBufferLength = 512; + if (maybeMinBufferLength) { + while (this.minBufferLength < maybeMinBufferLength) { + this.minBufferLength *= 2; + } + } + } + Object.defineProperty(DecodeStream2.prototype, "isEmpty", { + get: function() { + while (!this.eof && this.bufferLength === 0) { + this.readBlock(); + } + return this.bufferLength === 0; + }, + enumerable: false, + configurable: true + }); + DecodeStream2.prototype.getByte = function() { + var pos = this.pos; + while (this.bufferLength <= pos) { + if (this.eof) { + return -1; + } + this.readBlock(); + } + return this.buffer[this.pos++]; + }; + DecodeStream2.prototype.getUint16 = function() { + var b0 = this.getByte(); + var b1 = this.getByte(); + if (b0 === -1 || b1 === -1) { + return -1; + } + return (b0 << 8) + b1; + }; + DecodeStream2.prototype.getInt32 = function() { + var b0 = this.getByte(); + var b1 = this.getByte(); + var b2 = this.getByte(); + var b3 = this.getByte(); + return (b0 << 24) + (b1 << 16) + (b2 << 8) + b3; + }; + DecodeStream2.prototype.getBytes = function(length, forceClamped) { + if (forceClamped === void 0) { + forceClamped = false; + } + var end; + var pos = this.pos; + if (length) { + this.ensureBuffer(pos + length); + end = pos + length; + while (!this.eof && this.bufferLength < end) { + this.readBlock(); + } + var bufEnd = this.bufferLength; + if (end > bufEnd) { + end = bufEnd; + } + } else { + while (!this.eof) { + this.readBlock(); + } + end = this.bufferLength; + } + this.pos = end; + var subarray = this.buffer.subarray(pos, end); + return forceClamped && !(subarray instanceof Uint8ClampedArray) ? new Uint8ClampedArray(subarray) : subarray; + }; + DecodeStream2.prototype.peekByte = function() { + var peekedByte = this.getByte(); + this.pos--; + return peekedByte; + }; + DecodeStream2.prototype.peekBytes = function(length, forceClamped) { + if (forceClamped === void 0) { + forceClamped = false; + } + var bytes = this.getBytes(length, forceClamped); + this.pos -= bytes.length; + return bytes; + }; + DecodeStream2.prototype.skip = function(n) { + if (!n) { + n = 1; + } + this.pos += n; + }; + DecodeStream2.prototype.reset = function() { + this.pos = 0; + }; + DecodeStream2.prototype.makeSubStream = function(start, length) { + var end = start + length; + while (this.bufferLength <= end && !this.eof) { + this.readBlock(); + } + return new Stream_default( + this.buffer, + start, + length + /* dict */ + ); + }; + DecodeStream2.prototype.decode = function() { + while (!this.eof) + this.readBlock(); + return this.buffer.subarray(0, this.bufferLength); + }; + DecodeStream2.prototype.readBlock = function() { + throw new MethodNotImplementedError(this.constructor.name, "readBlock"); + }; + DecodeStream2.prototype.ensureBuffer = function(requested) { + var buffer = this.buffer; + if (requested <= buffer.byteLength) { + return buffer; + } + var size = this.minBufferLength; + while (size < requested) { + size *= 2; + } + var buffer2 = new Uint8Array(size); + buffer2.set(buffer); + return this.buffer = buffer2; + }; + return DecodeStream2; + }() +); +var DecodeStream_default = DecodeStream; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/core/streams/Ascii85Stream.js +var isSpace = function(ch) { + return ch === 32 || ch === 9 || ch === 13 || ch === 10; +}; +var Ascii85Stream = ( + /** @class */ + function(_super) { + __extends(Ascii85Stream2, _super); + function Ascii85Stream2(stream2, maybeLength) { + var _this = _super.call(this, maybeLength) || this; + _this.stream = stream2; + _this.input = new Uint8Array(5); + if (maybeLength) { + maybeLength = 0.8 * maybeLength; + } + return _this; + } + Ascii85Stream2.prototype.readBlock = function() { + var TILDA_CHAR = 126; + var Z_LOWER_CHAR = 122; + var EOF = -1; + var stream2 = this.stream; + var c = stream2.getByte(); + while (isSpace(c)) { + c = stream2.getByte(); + } + if (c === EOF || c === TILDA_CHAR) { + this.eof = true; + return; + } + var bufferLength = this.bufferLength; + var buffer; + var i; + if (c === Z_LOWER_CHAR) { + buffer = this.ensureBuffer(bufferLength + 4); + for (i = 0; i < 4; ++i) { + buffer[bufferLength + i] = 0; + } + this.bufferLength += 4; + } else { + var input = this.input; + input[0] = c; + for (i = 1; i < 5; ++i) { + c = stream2.getByte(); + while (isSpace(c)) { + c = stream2.getByte(); + } + input[i] = c; + if (c === EOF || c === TILDA_CHAR) { + break; + } + } + buffer = this.ensureBuffer(bufferLength + i - 1); + this.bufferLength += i - 1; + if (i < 5) { + for (; i < 5; ++i) { + input[i] = 33 + 84; + } + this.eof = true; + } + var t = 0; + for (i = 0; i < 5; ++i) { + t = t * 85 + (input[i] - 33); + } + for (i = 3; i >= 0; --i) { + buffer[bufferLength + i] = t & 255; + t >>= 8; + } + } + }; + return Ascii85Stream2; + }(DecodeStream_default) +); +var Ascii85Stream_default = Ascii85Stream; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/core/streams/AsciiHexStream.js +var AsciiHexStream = ( + /** @class */ + function(_super) { + __extends(AsciiHexStream2, _super); + function AsciiHexStream2(stream2, maybeLength) { + var _this = _super.call(this, maybeLength) || this; + _this.stream = stream2; + _this.firstDigit = -1; + if (maybeLength) { + maybeLength = 0.5 * maybeLength; + } + return _this; + } + AsciiHexStream2.prototype.readBlock = function() { + var UPSTREAM_BLOCK_SIZE = 8e3; + var bytes = this.stream.getBytes(UPSTREAM_BLOCK_SIZE); + if (!bytes.length) { + this.eof = true; + return; + } + var maxDecodeLength = bytes.length + 1 >> 1; + var buffer = this.ensureBuffer(this.bufferLength + maxDecodeLength); + var bufferLength = this.bufferLength; + var firstDigit = this.firstDigit; + for (var i = 0, ii = bytes.length; i < ii; i++) { + var ch = bytes[i]; + var digit = void 0; + if (ch >= 48 && ch <= 57) { + digit = ch & 15; + } else if (ch >= 65 && ch <= 70 || ch >= 97 && ch <= 102) { + digit = (ch & 15) + 9; + } else if (ch === 62) { + this.eof = true; + break; + } else { + continue; + } + if (firstDigit < 0) { + firstDigit = digit; + } else { + buffer[bufferLength++] = firstDigit << 4 | digit; + firstDigit = -1; + } + } + if (firstDigit >= 0 && this.eof) { + buffer[bufferLength++] = firstDigit << 4; + firstDigit = -1; + } + this.firstDigit = firstDigit; + this.bufferLength = bufferLength; + }; + return AsciiHexStream2; + }(DecodeStream_default) +); +var AsciiHexStream_default = AsciiHexStream; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/core/streams/FlateStream.js +var codeLenCodeMap = new Int32Array([ + 16, + 17, + 18, + 0, + 8, + 7, + 9, + 6, + 10, + 5, + 11, + 4, + 12, + 3, + 13, + 2, + 14, + 1, + 15 +]); +var lengthDecode = new Int32Array([ + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 65547, + 65549, + 65551, + 65553, + 131091, + 131095, + 131099, + 131103, + 196643, + 196651, + 196659, + 196667, + 262211, + 262227, + 262243, + 262259, + 327811, + 327843, + 327875, + 327907, + 258, + 258, + 258 +]); +var distDecode = new Int32Array([ + 1, + 2, + 3, + 4, + 65541, + 65543, + 131081, + 131085, + 196625, + 196633, + 262177, + 262193, + 327745, + 327777, + 393345, + 393409, + 459009, + 459137, + 524801, + 525057, + 590849, + 591361, + 657409, + 658433, + 724993, + 727041, + 794625, + 798721, + 868353, + 876545 +]); +var fixedLitCodeTab = [new Int32Array([ + 459008, + 524368, + 524304, + 524568, + 459024, + 524400, + 524336, + 590016, + 459016, + 524384, + 524320, + 589984, + 524288, + 524416, + 524352, + 590048, + 459012, + 524376, + 524312, + 589968, + 459028, + 524408, + 524344, + 590032, + 459020, + 524392, + 524328, + 59e4, + 524296, + 524424, + 524360, + 590064, + 459010, + 524372, + 524308, + 524572, + 459026, + 524404, + 524340, + 590024, + 459018, + 524388, + 524324, + 589992, + 524292, + 524420, + 524356, + 590056, + 459014, + 524380, + 524316, + 589976, + 459030, + 524412, + 524348, + 590040, + 459022, + 524396, + 524332, + 590008, + 524300, + 524428, + 524364, + 590072, + 459009, + 524370, + 524306, + 524570, + 459025, + 524402, + 524338, + 590020, + 459017, + 524386, + 524322, + 589988, + 524290, + 524418, + 524354, + 590052, + 459013, + 524378, + 524314, + 589972, + 459029, + 524410, + 524346, + 590036, + 459021, + 524394, + 524330, + 590004, + 524298, + 524426, + 524362, + 590068, + 459011, + 524374, + 524310, + 524574, + 459027, + 524406, + 524342, + 590028, + 459019, + 524390, + 524326, + 589996, + 524294, + 524422, + 524358, + 590060, + 459015, + 524382, + 524318, + 589980, + 459031, + 524414, + 524350, + 590044, + 459023, + 524398, + 524334, + 590012, + 524302, + 524430, + 524366, + 590076, + 459008, + 524369, + 524305, + 524569, + 459024, + 524401, + 524337, + 590018, + 459016, + 524385, + 524321, + 589986, + 524289, + 524417, + 524353, + 590050, + 459012, + 524377, + 524313, + 589970, + 459028, + 524409, + 524345, + 590034, + 459020, + 524393, + 524329, + 590002, + 524297, + 524425, + 524361, + 590066, + 459010, + 524373, + 524309, + 524573, + 459026, + 524405, + 524341, + 590026, + 459018, + 524389, + 524325, + 589994, + 524293, + 524421, + 524357, + 590058, + 459014, + 524381, + 524317, + 589978, + 459030, + 524413, + 524349, + 590042, + 459022, + 524397, + 524333, + 590010, + 524301, + 524429, + 524365, + 590074, + 459009, + 524371, + 524307, + 524571, + 459025, + 524403, + 524339, + 590022, + 459017, + 524387, + 524323, + 589990, + 524291, + 524419, + 524355, + 590054, + 459013, + 524379, + 524315, + 589974, + 459029, + 524411, + 524347, + 590038, + 459021, + 524395, + 524331, + 590006, + 524299, + 524427, + 524363, + 590070, + 459011, + 524375, + 524311, + 524575, + 459027, + 524407, + 524343, + 590030, + 459019, + 524391, + 524327, + 589998, + 524295, + 524423, + 524359, + 590062, + 459015, + 524383, + 524319, + 589982, + 459031, + 524415, + 524351, + 590046, + 459023, + 524399, + 524335, + 590014, + 524303, + 524431, + 524367, + 590078, + 459008, + 524368, + 524304, + 524568, + 459024, + 524400, + 524336, + 590017, + 459016, + 524384, + 524320, + 589985, + 524288, + 524416, + 524352, + 590049, + 459012, + 524376, + 524312, + 589969, + 459028, + 524408, + 524344, + 590033, + 459020, + 524392, + 524328, + 590001, + 524296, + 524424, + 524360, + 590065, + 459010, + 524372, + 524308, + 524572, + 459026, + 524404, + 524340, + 590025, + 459018, + 524388, + 524324, + 589993, + 524292, + 524420, + 524356, + 590057, + 459014, + 524380, + 524316, + 589977, + 459030, + 524412, + 524348, + 590041, + 459022, + 524396, + 524332, + 590009, + 524300, + 524428, + 524364, + 590073, + 459009, + 524370, + 524306, + 524570, + 459025, + 524402, + 524338, + 590021, + 459017, + 524386, + 524322, + 589989, + 524290, + 524418, + 524354, + 590053, + 459013, + 524378, + 524314, + 589973, + 459029, + 524410, + 524346, + 590037, + 459021, + 524394, + 524330, + 590005, + 524298, + 524426, + 524362, + 590069, + 459011, + 524374, + 524310, + 524574, + 459027, + 524406, + 524342, + 590029, + 459019, + 524390, + 524326, + 589997, + 524294, + 524422, + 524358, + 590061, + 459015, + 524382, + 524318, + 589981, + 459031, + 524414, + 524350, + 590045, + 459023, + 524398, + 524334, + 590013, + 524302, + 524430, + 524366, + 590077, + 459008, + 524369, + 524305, + 524569, + 459024, + 524401, + 524337, + 590019, + 459016, + 524385, + 524321, + 589987, + 524289, + 524417, + 524353, + 590051, + 459012, + 524377, + 524313, + 589971, + 459028, + 524409, + 524345, + 590035, + 459020, + 524393, + 524329, + 590003, + 524297, + 524425, + 524361, + 590067, + 459010, + 524373, + 524309, + 524573, + 459026, + 524405, + 524341, + 590027, + 459018, + 524389, + 524325, + 589995, + 524293, + 524421, + 524357, + 590059, + 459014, + 524381, + 524317, + 589979, + 459030, + 524413, + 524349, + 590043, + 459022, + 524397, + 524333, + 590011, + 524301, + 524429, + 524365, + 590075, + 459009, + 524371, + 524307, + 524571, + 459025, + 524403, + 524339, + 590023, + 459017, + 524387, + 524323, + 589991, + 524291, + 524419, + 524355, + 590055, + 459013, + 524379, + 524315, + 589975, + 459029, + 524411, + 524347, + 590039, + 459021, + 524395, + 524331, + 590007, + 524299, + 524427, + 524363, + 590071, + 459011, + 524375, + 524311, + 524575, + 459027, + 524407, + 524343, + 590031, + 459019, + 524391, + 524327, + 589999, + 524295, + 524423, + 524359, + 590063, + 459015, + 524383, + 524319, + 589983, + 459031, + 524415, + 524351, + 590047, + 459023, + 524399, + 524335, + 590015, + 524303, + 524431, + 524367, + 590079 +]), 9]; +var fixedDistCodeTab = [new Int32Array([ + 327680, + 327696, + 327688, + 327704, + 327684, + 327700, + 327692, + 327708, + 327682, + 327698, + 327690, + 327706, + 327686, + 327702, + 327694, + 0, + 327681, + 327697, + 327689, + 327705, + 327685, + 327701, + 327693, + 327709, + 327683, + 327699, + 327691, + 327707, + 327687, + 327703, + 327695, + 0 +]), 5]; +var FlateStream = ( + /** @class */ + function(_super) { + __extends(FlateStream2, _super); + function FlateStream2(stream2, maybeLength) { + var _this = _super.call(this, maybeLength) || this; + _this.stream = stream2; + var cmf = stream2.getByte(); + var flg = stream2.getByte(); + if (cmf === -1 || flg === -1) { + throw new Error("Invalid header in flate stream: " + cmf + ", " + flg); + } + if ((cmf & 15) !== 8) { + throw new Error("Unknown compression method in flate stream: " + cmf + ", " + flg); + } + if (((cmf << 8) + flg) % 31 !== 0) { + throw new Error("Bad FCHECK in flate stream: " + cmf + ", " + flg); + } + if (flg & 32) { + throw new Error("FDICT bit set in flate stream: " + cmf + ", " + flg); + } + _this.codeSize = 0; + _this.codeBuf = 0; + return _this; + } + FlateStream2.prototype.readBlock = function() { + var buffer; + var len; + var str = this.stream; + var hdr = this.getBits(3); + if (hdr & 1) { + this.eof = true; + } + hdr >>= 1; + if (hdr === 0) { + var b = void 0; + if ((b = str.getByte()) === -1) { + throw new Error("Bad block header in flate stream"); + } + var blockLen = b; + if ((b = str.getByte()) === -1) { + throw new Error("Bad block header in flate stream"); + } + blockLen |= b << 8; + if ((b = str.getByte()) === -1) { + throw new Error("Bad block header in flate stream"); + } + var check = b; + if ((b = str.getByte()) === -1) { + throw new Error("Bad block header in flate stream"); + } + check |= b << 8; + if (check !== (~blockLen & 65535) && (blockLen !== 0 || check !== 0)) { + throw new Error("Bad uncompressed block length in flate stream"); + } + this.codeBuf = 0; + this.codeSize = 0; + var bufferLength = this.bufferLength; + buffer = this.ensureBuffer(bufferLength + blockLen); + var end = bufferLength + blockLen; + this.bufferLength = end; + if (blockLen === 0) { + if (str.peekByte() === -1) { + this.eof = true; + } + } else { + for (var n = bufferLength; n < end; ++n) { + if ((b = str.getByte()) === -1) { + this.eof = true; + break; + } + buffer[n] = b; + } + } + return; + } + var litCodeTable; + var distCodeTable; + if (hdr === 1) { + litCodeTable = fixedLitCodeTab; + distCodeTable = fixedDistCodeTab; + } else if (hdr === 2) { + var numLitCodes = this.getBits(5) + 257; + var numDistCodes = this.getBits(5) + 1; + var numCodeLenCodes = this.getBits(4) + 4; + var codeLenCodeLengths = new Uint8Array(codeLenCodeMap.length); + var i = void 0; + for (i = 0; i < numCodeLenCodes; ++i) { + codeLenCodeLengths[codeLenCodeMap[i]] = this.getBits(3); + } + var codeLenCodeTab = this.generateHuffmanTable(codeLenCodeLengths); + len = 0; + i = 0; + var codes = numLitCodes + numDistCodes; + var codeLengths = new Uint8Array(codes); + var bitsLength = void 0; + var bitsOffset = void 0; + var what = void 0; + while (i < codes) { + var code = this.getCode(codeLenCodeTab); + if (code === 16) { + bitsLength = 2; + bitsOffset = 3; + what = len; + } else if (code === 17) { + bitsLength = 3; + bitsOffset = 3; + what = len = 0; + } else if (code === 18) { + bitsLength = 7; + bitsOffset = 11; + what = len = 0; + } else { + codeLengths[i++] = len = code; + continue; + } + var repeatLength = this.getBits(bitsLength) + bitsOffset; + while (repeatLength-- > 0) { + codeLengths[i++] = what; + } + } + litCodeTable = this.generateHuffmanTable(codeLengths.subarray(0, numLitCodes)); + distCodeTable = this.generateHuffmanTable(codeLengths.subarray(numLitCodes, codes)); + } else { + throw new Error("Unknown block type in flate stream"); + } + buffer = this.buffer; + var limit = buffer ? buffer.length : 0; + var pos = this.bufferLength; + while (true) { + var code1 = this.getCode(litCodeTable); + if (code1 < 256) { + if (pos + 1 >= limit) { + buffer = this.ensureBuffer(pos + 1); + limit = buffer.length; + } + buffer[pos++] = code1; + continue; + } + if (code1 === 256) { + this.bufferLength = pos; + return; + } + code1 -= 257; + code1 = lengthDecode[code1]; + var code2 = code1 >> 16; + if (code2 > 0) { + code2 = this.getBits(code2); + } + len = (code1 & 65535) + code2; + code1 = this.getCode(distCodeTable); + code1 = distDecode[code1]; + code2 = code1 >> 16; + if (code2 > 0) { + code2 = this.getBits(code2); + } + var dist = (code1 & 65535) + code2; + if (pos + len >= limit) { + buffer = this.ensureBuffer(pos + len); + limit = buffer.length; + } + for (var k = 0; k < len; ++k, ++pos) { + buffer[pos] = buffer[pos - dist]; + } + } + }; + FlateStream2.prototype.getBits = function(bits) { + var str = this.stream; + var codeSize = this.codeSize; + var codeBuf = this.codeBuf; + var b; + while (codeSize < bits) { + if ((b = str.getByte()) === -1) { + throw new Error("Bad encoding in flate stream"); + } + codeBuf |= b << codeSize; + codeSize += 8; + } + b = codeBuf & (1 << bits) - 1; + this.codeBuf = codeBuf >> bits; + this.codeSize = codeSize -= bits; + return b; + }; + FlateStream2.prototype.getCode = function(table) { + var str = this.stream; + var codes = table[0]; + var maxLen = table[1]; + var codeSize = this.codeSize; + var codeBuf = this.codeBuf; + var b; + while (codeSize < maxLen) { + if ((b = str.getByte()) === -1) { + break; + } + codeBuf |= b << codeSize; + codeSize += 8; + } + var code = codes[codeBuf & (1 << maxLen) - 1]; + if (typeof codes === "number") { + console.log("FLATE:", code); + } + var codeLen = code >> 16; + var codeVal = code & 65535; + if (codeLen < 1 || codeSize < codeLen) { + throw new Error("Bad encoding in flate stream"); + } + this.codeBuf = codeBuf >> codeLen; + this.codeSize = codeSize - codeLen; + return codeVal; + }; + FlateStream2.prototype.generateHuffmanTable = function(lengths) { + var n = lengths.length; + var maxLen = 0; + var i; + for (i = 0; i < n; ++i) { + if (lengths[i] > maxLen) { + maxLen = lengths[i]; + } + } + var size = 1 << maxLen; + var codes = new Int32Array(size); + for (var len = 1, code = 0, skip = 2; len <= maxLen; ++len, code <<= 1, skip <<= 1) { + for (var val = 0; val < n; ++val) { + if (lengths[val] === len) { + var code2 = 0; + var t = code; + for (i = 0; i < len; ++i) { + code2 = code2 << 1 | t & 1; + t >>= 1; + } + for (i = code2; i < size; i += skip) { + codes[i] = len << 16 | val; + } + ++code; + } + } + } + return [codes, maxLen]; + }; + return FlateStream2; + }(DecodeStream_default) +); +var FlateStream_default = FlateStream; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/core/streams/LZWStream.js +var LZWStream = ( + /** @class */ + function(_super) { + __extends(LZWStream2, _super); + function LZWStream2(stream2, maybeLength, earlyChange) { + var _this = _super.call(this, maybeLength) || this; + _this.stream = stream2; + _this.cachedData = 0; + _this.bitsCached = 0; + var maxLzwDictionarySize = 4096; + var lzwState = { + earlyChange, + codeLength: 9, + nextCode: 258, + dictionaryValues: new Uint8Array(maxLzwDictionarySize), + dictionaryLengths: new Uint16Array(maxLzwDictionarySize), + dictionaryPrevCodes: new Uint16Array(maxLzwDictionarySize), + currentSequence: new Uint8Array(maxLzwDictionarySize), + currentSequenceLength: 0 + }; + for (var i = 0; i < 256; ++i) { + lzwState.dictionaryValues[i] = i; + lzwState.dictionaryLengths[i] = 1; + } + _this.lzwState = lzwState; + return _this; + } + LZWStream2.prototype.readBlock = function() { + var blockSize = 512; + var estimatedDecodedSize = blockSize * 2; + var decodedSizeDelta = blockSize; + var i; + var j; + var q; + var lzwState = this.lzwState; + if (!lzwState) { + return; + } + var earlyChange = lzwState.earlyChange; + var nextCode = lzwState.nextCode; + var dictionaryValues = lzwState.dictionaryValues; + var dictionaryLengths = lzwState.dictionaryLengths; + var dictionaryPrevCodes = lzwState.dictionaryPrevCodes; + var codeLength = lzwState.codeLength; + var prevCode = lzwState.prevCode; + var currentSequence = lzwState.currentSequence; + var currentSequenceLength = lzwState.currentSequenceLength; + var decodedLength = 0; + var currentBufferLength = this.bufferLength; + var buffer = this.ensureBuffer(this.bufferLength + estimatedDecodedSize); + for (i = 0; i < blockSize; i++) { + var code = this.readBits(codeLength); + var hasPrev = currentSequenceLength > 0; + if (!code || code < 256) { + currentSequence[0] = code; + currentSequenceLength = 1; + } else if (code >= 258) { + if (code < nextCode) { + currentSequenceLength = dictionaryLengths[code]; + for (j = currentSequenceLength - 1, q = code; j >= 0; j--) { + currentSequence[j] = dictionaryValues[q]; + q = dictionaryPrevCodes[q]; + } + } else { + currentSequence[currentSequenceLength++] = currentSequence[0]; + } + } else if (code === 256) { + codeLength = 9; + nextCode = 258; + currentSequenceLength = 0; + continue; + } else { + this.eof = true; + delete this.lzwState; + break; + } + if (hasPrev) { + dictionaryPrevCodes[nextCode] = prevCode; + dictionaryLengths[nextCode] = dictionaryLengths[prevCode] + 1; + dictionaryValues[nextCode] = currentSequence[0]; + nextCode++; + codeLength = nextCode + earlyChange & nextCode + earlyChange - 1 ? codeLength : Math.min(Math.log(nextCode + earlyChange) / 0.6931471805599453 + 1, 12) | 0; + } + prevCode = code; + decodedLength += currentSequenceLength; + if (estimatedDecodedSize < decodedLength) { + do { + estimatedDecodedSize += decodedSizeDelta; + } while (estimatedDecodedSize < decodedLength); + buffer = this.ensureBuffer(this.bufferLength + estimatedDecodedSize); + } + for (j = 0; j < currentSequenceLength; j++) { + buffer[currentBufferLength++] = currentSequence[j]; + } + } + lzwState.nextCode = nextCode; + lzwState.codeLength = codeLength; + lzwState.prevCode = prevCode; + lzwState.currentSequenceLength = currentSequenceLength; + this.bufferLength = currentBufferLength; + }; + LZWStream2.prototype.readBits = function(n) { + var bitsCached = this.bitsCached; + var cachedData = this.cachedData; + while (bitsCached < n) { + var c = this.stream.getByte(); + if (c === -1) { + this.eof = true; + return null; + } + cachedData = cachedData << 8 | c; + bitsCached += 8; + } + this.bitsCached = bitsCached -= n; + this.cachedData = cachedData; + return cachedData >>> bitsCached & (1 << n) - 1; + }; + return LZWStream2; + }(DecodeStream_default) +); +var LZWStream_default = LZWStream; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/core/streams/RunLengthStream.js +var RunLengthStream = ( + /** @class */ + function(_super) { + __extends(RunLengthStream2, _super); + function RunLengthStream2(stream2, maybeLength) { + var _this = _super.call(this, maybeLength) || this; + _this.stream = stream2; + return _this; + } + RunLengthStream2.prototype.readBlock = function() { + var repeatHeader = this.stream.getBytes(2); + if (!repeatHeader || repeatHeader.length < 2 || repeatHeader[0] === 128) { + this.eof = true; + return; + } + var buffer; + var bufferLength = this.bufferLength; + var n = repeatHeader[0]; + if (n < 128) { + buffer = this.ensureBuffer(bufferLength + n + 1); + buffer[bufferLength++] = repeatHeader[1]; + if (n > 0) { + var source = this.stream.getBytes(n); + buffer.set(source, bufferLength); + bufferLength += n; + } + } else { + n = 257 - n; + var b = repeatHeader[1]; + buffer = this.ensureBuffer(bufferLength + n + 1); + for (var i = 0; i < n; i++) { + buffer[bufferLength++] = b; + } + } + this.bufferLength = bufferLength; + }; + return RunLengthStream2; + }(DecodeStream_default) +); +var RunLengthStream_default = RunLengthStream; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/core/streams/decode.js +var decodeStream = function(stream2, encoding, params) { + if (encoding === PDFName_default.of("FlateDecode")) { + return new FlateStream_default(stream2); + } + if (encoding === PDFName_default.of("LZWDecode")) { + var earlyChange = 1; + if (params instanceof PDFDict_default) { + var EarlyChange = params.lookup(PDFName_default.of("EarlyChange")); + if (EarlyChange instanceof PDFNumber_default) { + earlyChange = EarlyChange.asNumber(); + } + } + return new LZWStream_default(stream2, void 0, earlyChange); + } + if (encoding === PDFName_default.of("ASCII85Decode")) { + return new Ascii85Stream_default(stream2); + } + if (encoding === PDFName_default.of("ASCIIHexDecode")) { + return new AsciiHexStream_default(stream2); + } + if (encoding === PDFName_default.of("RunLengthDecode")) { + return new RunLengthStream_default(stream2); + } + throw new UnsupportedEncodingError(encoding.asString()); +}; +var decodePDFRawStream = function(_a) { + var dict = _a.dict, contents = _a.contents; + var stream2 = new Stream_default(contents); + var Filter = dict.lookup(PDFName_default.of("Filter")); + var DecodeParms = dict.lookup(PDFName_default.of("DecodeParms")); + if (Filter instanceof PDFName_default) { + stream2 = decodeStream(stream2, Filter, DecodeParms); + } else if (Filter instanceof PDFArray_default) { + for (var idx = 0, len = Filter.size(); idx < len; idx++) { + stream2 = decodeStream(stream2, Filter.lookup(idx, PDFName_default), DecodeParms && DecodeParms.lookupMaybe(idx, PDFDict_default)); + } + } else if (!!Filter) { + throw new UnexpectedObjectTypeError([PDFName_default, PDFArray_default], Filter); + } + return stream2; +}; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/core/embedders/PDFPageEmbedder.js +var fullPageBoundingBox = function(page) { + var mediaBox = page.MediaBox(); + var width = mediaBox.lookup(2, PDFNumber_default).asNumber() - mediaBox.lookup(0, PDFNumber_default).asNumber(); + var height = mediaBox.lookup(3, PDFNumber_default).asNumber() - mediaBox.lookup(1, PDFNumber_default).asNumber(); + return { left: 0, bottom: 0, right: width, top: height }; +}; +var boundingBoxAdjustedMatrix = function(bb) { + return [1, 0, 0, 1, -bb.left, -bb.bottom]; +}; +var PDFPageEmbedder = ( + /** @class */ + function() { + function PDFPageEmbedder2(page, boundingBox, transformationMatrix) { + this.page = page; + var bb = boundingBox !== null && boundingBox !== void 0 ? boundingBox : fullPageBoundingBox(page); + this.width = bb.right - bb.left; + this.height = bb.top - bb.bottom; + this.boundingBox = bb; + this.transformationMatrix = transformationMatrix !== null && transformationMatrix !== void 0 ? transformationMatrix : boundingBoxAdjustedMatrix(bb); + } + PDFPageEmbedder2.for = function(page, boundingBox, transformationMatrix) { + return __awaiter(this, void 0, void 0, function() { + return __generator(this, function(_a) { + return [2, new PDFPageEmbedder2(page, boundingBox, transformationMatrix)]; + }); + }); + }; + PDFPageEmbedder2.prototype.embedIntoContext = function(context, ref) { + return __awaiter(this, void 0, void 0, function() { + var _a, Contents, Resources, decodedContents, _b, left, bottom, right, top, xObject; + return __generator(this, function(_c) { + _a = this.page.normalizedEntries(), Contents = _a.Contents, Resources = _a.Resources; + if (!Contents) + throw new MissingPageContentsEmbeddingError(); + decodedContents = this.decodeContents(Contents); + _b = this.boundingBox, left = _b.left, bottom = _b.bottom, right = _b.right, top = _b.top; + xObject = context.flateStream(decodedContents, { + Type: "XObject", + Subtype: "Form", + FormType: 1, + BBox: [left, bottom, right, top], + Matrix: this.transformationMatrix, + Resources + }); + if (ref) { + context.assign(ref, xObject); + return [2, ref]; + } else { + return [2, context.register(xObject)]; + } + return [ + 2 + /*return*/ + ]; + }); + }); + }; + PDFPageEmbedder2.prototype.decodeContents = function(contents) { + var newline = Uint8Array.of(CharCodes_default.Newline); + var decodedContents = []; + for (var idx = 0, len = contents.size(); idx < len; idx++) { + var stream2 = contents.lookup(idx, PDFStream_default); + var content = void 0; + if (stream2 instanceof PDFRawStream_default) { + content = decodePDFRawStream(stream2).decode(); + } else if (stream2 instanceof PDFContentStream_default) { + content = stream2.getUnencodedContents(); + } else { + throw new UnrecognizedStreamTypeError(stream2); + } + decodedContents.push(content, newline); + } + return mergeIntoTypedArray.apply(void 0, decodedContents); + }; + return PDFPageEmbedder2; + }() +); +var PDFPageEmbedder_default = PDFPageEmbedder; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/core/interactive/ViewerPreferences.js +var asEnum = function(rawValue, enumType) { + if (rawValue === void 0) + return void 0; + return enumType[rawValue]; +}; +var NonFullScreenPageMode; +(function(NonFullScreenPageMode2) { + NonFullScreenPageMode2["UseNone"] = "UseNone"; + NonFullScreenPageMode2["UseOutlines"] = "UseOutlines"; + NonFullScreenPageMode2["UseThumbs"] = "UseThumbs"; + NonFullScreenPageMode2["UseOC"] = "UseOC"; +})(NonFullScreenPageMode || (NonFullScreenPageMode = {})); +var ReadingDirection; +(function(ReadingDirection2) { + ReadingDirection2["L2R"] = "L2R"; + ReadingDirection2["R2L"] = "R2L"; +})(ReadingDirection || (ReadingDirection = {})); +var PrintScaling; +(function(PrintScaling2) { + PrintScaling2["None"] = "None"; + PrintScaling2["AppDefault"] = "AppDefault"; +})(PrintScaling || (PrintScaling = {})); +var Duplex; +(function(Duplex2) { + Duplex2["Simplex"] = "Simplex"; + Duplex2["DuplexFlipShortEdge"] = "DuplexFlipShortEdge"; + Duplex2["DuplexFlipLongEdge"] = "DuplexFlipLongEdge"; +})(Duplex || (Duplex = {})); +var ViewerPreferences = ( + /** @class */ + function() { + function ViewerPreferences2(dict) { + this.dict = dict; + } + ViewerPreferences2.prototype.lookupBool = function(key) { + var returnObj = this.dict.lookup(PDFName_default.of(key)); + if (returnObj instanceof PDFBool_default) + return returnObj; + return void 0; + }; + ViewerPreferences2.prototype.lookupName = function(key) { + var returnObj = this.dict.lookup(PDFName_default.of(key)); + if (returnObj instanceof PDFName_default) + return returnObj; + return void 0; + }; + ViewerPreferences2.prototype.HideToolbar = function() { + return this.lookupBool("HideToolbar"); + }; + ViewerPreferences2.prototype.HideMenubar = function() { + return this.lookupBool("HideMenubar"); + }; + ViewerPreferences2.prototype.HideWindowUI = function() { + return this.lookupBool("HideWindowUI"); + }; + ViewerPreferences2.prototype.FitWindow = function() { + return this.lookupBool("FitWindow"); + }; + ViewerPreferences2.prototype.CenterWindow = function() { + return this.lookupBool("CenterWindow"); + }; + ViewerPreferences2.prototype.DisplayDocTitle = function() { + return this.lookupBool("DisplayDocTitle"); + }; + ViewerPreferences2.prototype.NonFullScreenPageMode = function() { + return this.lookupName("NonFullScreenPageMode"); + }; + ViewerPreferences2.prototype.Direction = function() { + return this.lookupName("Direction"); + }; + ViewerPreferences2.prototype.PrintScaling = function() { + return this.lookupName("PrintScaling"); + }; + ViewerPreferences2.prototype.Duplex = function() { + return this.lookupName("Duplex"); + }; + ViewerPreferences2.prototype.PickTrayByPDFSize = function() { + return this.lookupBool("PickTrayByPDFSize"); + }; + ViewerPreferences2.prototype.PrintPageRange = function() { + var PrintPageRange = this.dict.lookup(PDFName_default.of("PrintPageRange")); + if (PrintPageRange instanceof PDFArray_default) + return PrintPageRange; + return void 0; + }; + ViewerPreferences2.prototype.NumCopies = function() { + var NumCopies = this.dict.lookup(PDFName_default.of("NumCopies")); + if (NumCopies instanceof PDFNumber_default) + return NumCopies; + return void 0; + }; + ViewerPreferences2.prototype.getHideToolbar = function() { + var _a, _b; + return (_b = (_a = this.HideToolbar()) === null || _a === void 0 ? void 0 : _a.asBoolean()) !== null && _b !== void 0 ? _b : false; + }; + ViewerPreferences2.prototype.getHideMenubar = function() { + var _a, _b; + return (_b = (_a = this.HideMenubar()) === null || _a === void 0 ? void 0 : _a.asBoolean()) !== null && _b !== void 0 ? _b : false; + }; + ViewerPreferences2.prototype.getHideWindowUI = function() { + var _a, _b; + return (_b = (_a = this.HideWindowUI()) === null || _a === void 0 ? void 0 : _a.asBoolean()) !== null && _b !== void 0 ? _b : false; + }; + ViewerPreferences2.prototype.getFitWindow = function() { + var _a, _b; + return (_b = (_a = this.FitWindow()) === null || _a === void 0 ? void 0 : _a.asBoolean()) !== null && _b !== void 0 ? _b : false; + }; + ViewerPreferences2.prototype.getCenterWindow = function() { + var _a, _b; + return (_b = (_a = this.CenterWindow()) === null || _a === void 0 ? void 0 : _a.asBoolean()) !== null && _b !== void 0 ? _b : false; + }; + ViewerPreferences2.prototype.getDisplayDocTitle = function() { + var _a, _b; + return (_b = (_a = this.DisplayDocTitle()) === null || _a === void 0 ? void 0 : _a.asBoolean()) !== null && _b !== void 0 ? _b : false; + }; + ViewerPreferences2.prototype.getNonFullScreenPageMode = function() { + var _a, _b; + var mode = (_a = this.NonFullScreenPageMode()) === null || _a === void 0 ? void 0 : _a.decodeText(); + return (_b = asEnum(mode, NonFullScreenPageMode)) !== null && _b !== void 0 ? _b : NonFullScreenPageMode.UseNone; + }; + ViewerPreferences2.prototype.getReadingDirection = function() { + var _a, _b; + var direction = (_a = this.Direction()) === null || _a === void 0 ? void 0 : _a.decodeText(); + return (_b = asEnum(direction, ReadingDirection)) !== null && _b !== void 0 ? _b : ReadingDirection.L2R; + }; + ViewerPreferences2.prototype.getPrintScaling = function() { + var _a, _b; + var scaling = (_a = this.PrintScaling()) === null || _a === void 0 ? void 0 : _a.decodeText(); + return (_b = asEnum(scaling, PrintScaling)) !== null && _b !== void 0 ? _b : PrintScaling.AppDefault; + }; + ViewerPreferences2.prototype.getDuplex = function() { + var _a; + var duplex = (_a = this.Duplex()) === null || _a === void 0 ? void 0 : _a.decodeText(); + return asEnum(duplex, Duplex); + }; + ViewerPreferences2.prototype.getPickTrayByPDFSize = function() { + var _a; + return (_a = this.PickTrayByPDFSize()) === null || _a === void 0 ? void 0 : _a.asBoolean(); + }; + ViewerPreferences2.prototype.getPrintPageRange = function() { + var rng = this.PrintPageRange(); + if (!rng) + return []; + var pageRanges = []; + for (var i = 0; i < rng.size(); i += 2) { + var start = rng.lookup(i, PDFNumber_default).asNumber(); + var end = rng.lookup(i + 1, PDFNumber_default).asNumber(); + pageRanges.push({ start, end }); + } + return pageRanges; + }; + ViewerPreferences2.prototype.getNumCopies = function() { + var _a, _b; + return (_b = (_a = this.NumCopies()) === null || _a === void 0 ? void 0 : _a.asNumber()) !== null && _b !== void 0 ? _b : 1; + }; + ViewerPreferences2.prototype.setHideToolbar = function(hideToolbar) { + var HideToolbar = this.dict.context.obj(hideToolbar); + this.dict.set(PDFName_default.of("HideToolbar"), HideToolbar); + }; + ViewerPreferences2.prototype.setHideMenubar = function(hideMenubar) { + var HideMenubar = this.dict.context.obj(hideMenubar); + this.dict.set(PDFName_default.of("HideMenubar"), HideMenubar); + }; + ViewerPreferences2.prototype.setHideWindowUI = function(hideWindowUI) { + var HideWindowUI = this.dict.context.obj(hideWindowUI); + this.dict.set(PDFName_default.of("HideWindowUI"), HideWindowUI); + }; + ViewerPreferences2.prototype.setFitWindow = function(fitWindow) { + var FitWindow = this.dict.context.obj(fitWindow); + this.dict.set(PDFName_default.of("FitWindow"), FitWindow); + }; + ViewerPreferences2.prototype.setCenterWindow = function(centerWindow) { + var CenterWindow = this.dict.context.obj(centerWindow); + this.dict.set(PDFName_default.of("CenterWindow"), CenterWindow); + }; + ViewerPreferences2.prototype.setDisplayDocTitle = function(displayTitle) { + var DisplayDocTitle = this.dict.context.obj(displayTitle); + this.dict.set(PDFName_default.of("DisplayDocTitle"), DisplayDocTitle); + }; + ViewerPreferences2.prototype.setNonFullScreenPageMode = function(nonFullScreenPageMode) { + assertIsOneOf(nonFullScreenPageMode, "nonFullScreenPageMode", NonFullScreenPageMode); + var mode = PDFName_default.of(nonFullScreenPageMode); + this.dict.set(PDFName_default.of("NonFullScreenPageMode"), mode); + }; + ViewerPreferences2.prototype.setReadingDirection = function(readingDirection) { + assertIsOneOf(readingDirection, "readingDirection", ReadingDirection); + var direction = PDFName_default.of(readingDirection); + this.dict.set(PDFName_default.of("Direction"), direction); + }; + ViewerPreferences2.prototype.setPrintScaling = function(printScaling) { + assertIsOneOf(printScaling, "printScaling", PrintScaling); + var scaling = PDFName_default.of(printScaling); + this.dict.set(PDFName_default.of("PrintScaling"), scaling); + }; + ViewerPreferences2.prototype.setDuplex = function(duplex) { + assertIsOneOf(duplex, "duplex", Duplex); + var dup = PDFName_default.of(duplex); + this.dict.set(PDFName_default.of("Duplex"), dup); + }; + ViewerPreferences2.prototype.setPickTrayByPDFSize = function(pickTrayByPDFSize) { + var PickTrayByPDFSize = this.dict.context.obj(pickTrayByPDFSize); + this.dict.set(PDFName_default.of("PickTrayByPDFSize"), PickTrayByPDFSize); + }; + ViewerPreferences2.prototype.setPrintPageRange = function(printPageRange) { + if (!Array.isArray(printPageRange)) + printPageRange = [printPageRange]; + var flatRange = []; + for (var idx = 0, len = printPageRange.length; idx < len; idx++) { + flatRange.push(printPageRange[idx].start); + flatRange.push(printPageRange[idx].end); + } + assertEachIs(flatRange, "printPageRange", ["number"]); + var pageRanges = this.dict.context.obj(flatRange); + this.dict.set(PDFName_default.of("PrintPageRange"), pageRanges); + }; + ViewerPreferences2.prototype.setNumCopies = function(numCopies) { + assertRange(numCopies, "numCopies", 1, Number.MAX_VALUE); + assertInteger(numCopies, "numCopies"); + var NumCopies = this.dict.context.obj(numCopies); + this.dict.set(PDFName_default.of("NumCopies"), NumCopies); + }; + ViewerPreferences2.fromDict = function(dict) { + return new ViewerPreferences2(dict); + }; + ViewerPreferences2.create = function(context) { + var dict = context.obj({}); + return new ViewerPreferences2(dict); + }; + return ViewerPreferences2; + }() +); +var ViewerPreferences_default = ViewerPreferences; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/core/acroform/PDFAcroField.js +var tfRegex = /\/([^\0\t\n\f\r\ ]+)[\0\t\n\f\r\ ]*(\d*\.\d+|\d+)?[\0\t\n\f\r\ ]+Tf/; +var PDFAcroField = ( + /** @class */ + function() { + function PDFAcroField2(dict, ref) { + this.dict = dict; + this.ref = ref; + } + PDFAcroField2.prototype.T = function() { + return this.dict.lookupMaybe(PDFName_default.of("T"), PDFString_default, PDFHexString_default); + }; + PDFAcroField2.prototype.Ff = function() { + var numberOrRef = this.getInheritableAttribute(PDFName_default.of("Ff")); + return this.dict.context.lookupMaybe(numberOrRef, PDFNumber_default); + }; + PDFAcroField2.prototype.V = function() { + var valueOrRef = this.getInheritableAttribute(PDFName_default.of("V")); + return this.dict.context.lookup(valueOrRef); + }; + PDFAcroField2.prototype.Kids = function() { + return this.dict.lookupMaybe(PDFName_default.of("Kids"), PDFArray_default); + }; + PDFAcroField2.prototype.DA = function() { + var da = this.dict.lookup(PDFName_default.of("DA")); + if (da instanceof PDFString_default || da instanceof PDFHexString_default) + return da; + return void 0; + }; + PDFAcroField2.prototype.setKids = function(kids) { + this.dict.set(PDFName_default.of("Kids"), this.dict.context.obj(kids)); + }; + PDFAcroField2.prototype.getParent = function() { + var parentRef = this.dict.get(PDFName_default.of("Parent")); + if (parentRef instanceof PDFRef_default) { + var parent_1 = this.dict.lookup(PDFName_default.of("Parent"), PDFDict_default); + return new PDFAcroField2(parent_1, parentRef); + } + return void 0; + }; + PDFAcroField2.prototype.setParent = function(parent) { + if (!parent) + this.dict.delete(PDFName_default.of("Parent")); + else + this.dict.set(PDFName_default.of("Parent"), parent); + }; + PDFAcroField2.prototype.getFullyQualifiedName = function() { + var parent = this.getParent(); + if (!parent) + return this.getPartialName(); + return parent.getFullyQualifiedName() + "." + this.getPartialName(); + }; + PDFAcroField2.prototype.getPartialName = function() { + var _a; + return (_a = this.T()) === null || _a === void 0 ? void 0 : _a.decodeText(); + }; + PDFAcroField2.prototype.setPartialName = function(partialName) { + if (!partialName) + this.dict.delete(PDFName_default.of("T")); + else + this.dict.set(PDFName_default.of("T"), PDFHexString_default.fromText(partialName)); + }; + PDFAcroField2.prototype.setDefaultAppearance = function(appearance) { + this.dict.set(PDFName_default.of("DA"), PDFString_default.of(appearance)); + }; + PDFAcroField2.prototype.getDefaultAppearance = function() { + var DA = this.DA(); + if (DA instanceof PDFHexString_default) { + return DA.decodeText(); + } + return DA === null || DA === void 0 ? void 0 : DA.asString(); + }; + PDFAcroField2.prototype.setFontSize = function(fontSize) { + var _a; + var name = (_a = this.getFullyQualifiedName()) !== null && _a !== void 0 ? _a : ""; + var da = this.getDefaultAppearance(); + if (!da) + throw new MissingDAEntryError(name); + var daMatch = findLastMatch(da, tfRegex); + if (!daMatch.match) + throw new MissingTfOperatorError(name); + var daStart = da.slice(0, daMatch.pos - daMatch.match[0].length); + var daEnd = daMatch.pos <= da.length ? da.slice(daMatch.pos) : ""; + var fontName = daMatch.match[1]; + var modifiedDa = daStart + " /" + fontName + " " + fontSize + " Tf " + daEnd; + this.setDefaultAppearance(modifiedDa); + }; + PDFAcroField2.prototype.getFlags = function() { + var _a, _b; + return (_b = (_a = this.Ff()) === null || _a === void 0 ? void 0 : _a.asNumber()) !== null && _b !== void 0 ? _b : 0; + }; + PDFAcroField2.prototype.setFlags = function(flags) { + this.dict.set(PDFName_default.of("Ff"), PDFNumber_default.of(flags)); + }; + PDFAcroField2.prototype.hasFlag = function(flag3) { + var flags = this.getFlags(); + return (flags & flag3) !== 0; + }; + PDFAcroField2.prototype.setFlag = function(flag3) { + var flags = this.getFlags(); + this.setFlags(flags | flag3); + }; + PDFAcroField2.prototype.clearFlag = function(flag3) { + var flags = this.getFlags(); + this.setFlags(flags & ~flag3); + }; + PDFAcroField2.prototype.setFlagTo = function(flag3, enable) { + if (enable) + this.setFlag(flag3); + else + this.clearFlag(flag3); + }; + PDFAcroField2.prototype.getInheritableAttribute = function(name) { + var attribute; + this.ascend(function(node) { + if (!attribute) + attribute = node.dict.get(name); + }); + return attribute; + }; + PDFAcroField2.prototype.ascend = function(visitor) { + visitor(this); + var parent = this.getParent(); + if (parent) + parent.ascend(visitor); + }; + return PDFAcroField2; + }() +); +var PDFAcroField_default = PDFAcroField; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/core/annotation/BorderStyle.js +var BorderStyle = ( + /** @class */ + function() { + function BorderStyle2(dict) { + this.dict = dict; + } + BorderStyle2.prototype.W = function() { + var W = this.dict.lookup(PDFName_default.of("W")); + if (W instanceof PDFNumber_default) + return W; + return void 0; + }; + BorderStyle2.prototype.getWidth = function() { + var _a, _b; + return (_b = (_a = this.W()) === null || _a === void 0 ? void 0 : _a.asNumber()) !== null && _b !== void 0 ? _b : 1; + }; + BorderStyle2.prototype.setWidth = function(width) { + var W = this.dict.context.obj(width); + this.dict.set(PDFName_default.of("W"), W); + }; + BorderStyle2.fromDict = function(dict) { + return new BorderStyle2(dict); + }; + return BorderStyle2; + }() +); +var BorderStyle_default = BorderStyle; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/core/annotation/PDFAnnotation.js +var PDFAnnotation = ( + /** @class */ + function() { + function PDFAnnotation2(dict) { + this.dict = dict; + } + PDFAnnotation2.prototype.Rect = function() { + return this.dict.lookup(PDFName_default.of("Rect"), PDFArray_default); + }; + PDFAnnotation2.prototype.AP = function() { + return this.dict.lookupMaybe(PDFName_default.of("AP"), PDFDict_default); + }; + PDFAnnotation2.prototype.F = function() { + var numberOrRef = this.dict.lookup(PDFName_default.of("F")); + return this.dict.context.lookupMaybe(numberOrRef, PDFNumber_default); + }; + PDFAnnotation2.prototype.getRectangle = function() { + var _a; + var Rect = this.Rect(); + return (_a = Rect === null || Rect === void 0 ? void 0 : Rect.asRectangle()) !== null && _a !== void 0 ? _a : { x: 0, y: 0, width: 0, height: 0 }; + }; + PDFAnnotation2.prototype.setRectangle = function(rect) { + var x = rect.x, y = rect.y, width = rect.width, height = rect.height; + var Rect = this.dict.context.obj([x, y, x + width, y + height]); + this.dict.set(PDFName_default.of("Rect"), Rect); + }; + PDFAnnotation2.prototype.getAppearanceState = function() { + var AS = this.dict.lookup(PDFName_default.of("AS")); + if (AS instanceof PDFName_default) + return AS; + return void 0; + }; + PDFAnnotation2.prototype.setAppearanceState = function(state) { + this.dict.set(PDFName_default.of("AS"), state); + }; + PDFAnnotation2.prototype.setAppearances = function(appearances) { + this.dict.set(PDFName_default.of("AP"), appearances); + }; + PDFAnnotation2.prototype.ensureAP = function() { + var AP = this.AP(); + if (!AP) { + AP = this.dict.context.obj({}); + this.dict.set(PDFName_default.of("AP"), AP); + } + return AP; + }; + PDFAnnotation2.prototype.getNormalAppearance = function() { + var AP = this.ensureAP(); + var N = AP.get(PDFName_default.of("N")); + if (N instanceof PDFRef_default || N instanceof PDFDict_default) + return N; + throw new Error("Unexpected N type: " + (N === null || N === void 0 ? void 0 : N.constructor.name)); + }; + PDFAnnotation2.prototype.setNormalAppearance = function(appearance) { + var AP = this.ensureAP(); + AP.set(PDFName_default.of("N"), appearance); + }; + PDFAnnotation2.prototype.setRolloverAppearance = function(appearance) { + var AP = this.ensureAP(); + AP.set(PDFName_default.of("R"), appearance); + }; + PDFAnnotation2.prototype.setDownAppearance = function(appearance) { + var AP = this.ensureAP(); + AP.set(PDFName_default.of("D"), appearance); + }; + PDFAnnotation2.prototype.removeRolloverAppearance = function() { + var AP = this.AP(); + AP === null || AP === void 0 ? void 0 : AP.delete(PDFName_default.of("R")); + }; + PDFAnnotation2.prototype.removeDownAppearance = function() { + var AP = this.AP(); + AP === null || AP === void 0 ? void 0 : AP.delete(PDFName_default.of("D")); + }; + PDFAnnotation2.prototype.getAppearances = function() { + var AP = this.AP(); + if (!AP) + return void 0; + var N = AP.lookup(PDFName_default.of("N"), PDFDict_default, PDFStream_default); + var R = AP.lookupMaybe(PDFName_default.of("R"), PDFDict_default, PDFStream_default); + var D = AP.lookupMaybe(PDFName_default.of("D"), PDFDict_default, PDFStream_default); + return { normal: N, rollover: R, down: D }; + }; + PDFAnnotation2.prototype.getFlags = function() { + var _a, _b; + return (_b = (_a = this.F()) === null || _a === void 0 ? void 0 : _a.asNumber()) !== null && _b !== void 0 ? _b : 0; + }; + PDFAnnotation2.prototype.setFlags = function(flags) { + this.dict.set(PDFName_default.of("F"), PDFNumber_default.of(flags)); + }; + PDFAnnotation2.prototype.hasFlag = function(flag3) { + var flags = this.getFlags(); + return (flags & flag3) !== 0; + }; + PDFAnnotation2.prototype.setFlag = function(flag3) { + var flags = this.getFlags(); + this.setFlags(flags | flag3); + }; + PDFAnnotation2.prototype.clearFlag = function(flag3) { + var flags = this.getFlags(); + this.setFlags(flags & ~flag3); + }; + PDFAnnotation2.prototype.setFlagTo = function(flag3, enable) { + if (enable) + this.setFlag(flag3); + else + this.clearFlag(flag3); + }; + PDFAnnotation2.fromDict = function(dict) { + return new PDFAnnotation2(dict); + }; + return PDFAnnotation2; + }() +); +var PDFAnnotation_default = PDFAnnotation; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/core/annotation/AppearanceCharacteristics.js +var AppearanceCharacteristics = ( + /** @class */ + function() { + function AppearanceCharacteristics2(dict) { + this.dict = dict; + } + AppearanceCharacteristics2.prototype.R = function() { + var R = this.dict.lookup(PDFName_default.of("R")); + if (R instanceof PDFNumber_default) + return R; + return void 0; + }; + AppearanceCharacteristics2.prototype.BC = function() { + var BC = this.dict.lookup(PDFName_default.of("BC")); + if (BC instanceof PDFArray_default) + return BC; + return void 0; + }; + AppearanceCharacteristics2.prototype.BG = function() { + var BG = this.dict.lookup(PDFName_default.of("BG")); + if (BG instanceof PDFArray_default) + return BG; + return void 0; + }; + AppearanceCharacteristics2.prototype.CA = function() { + var CA = this.dict.lookup(PDFName_default.of("CA")); + if (CA instanceof PDFHexString_default || CA instanceof PDFString_default) + return CA; + return void 0; + }; + AppearanceCharacteristics2.prototype.RC = function() { + var RC = this.dict.lookup(PDFName_default.of("RC")); + if (RC instanceof PDFHexString_default || RC instanceof PDFString_default) + return RC; + return void 0; + }; + AppearanceCharacteristics2.prototype.AC = function() { + var AC = this.dict.lookup(PDFName_default.of("AC")); + if (AC instanceof PDFHexString_default || AC instanceof PDFString_default) + return AC; + return void 0; + }; + AppearanceCharacteristics2.prototype.getRotation = function() { + var _a; + return (_a = this.R()) === null || _a === void 0 ? void 0 : _a.asNumber(); + }; + AppearanceCharacteristics2.prototype.getBorderColor = function() { + var BC = this.BC(); + if (!BC) + return void 0; + var components = []; + for (var idx = 0, len = BC === null || BC === void 0 ? void 0 : BC.size(); idx < len; idx++) { + var component = BC.get(idx); + if (component instanceof PDFNumber_default) + components.push(component.asNumber()); + } + return components; + }; + AppearanceCharacteristics2.prototype.getBackgroundColor = function() { + var BG = this.BG(); + if (!BG) + return void 0; + var components = []; + for (var idx = 0, len = BG === null || BG === void 0 ? void 0 : BG.size(); idx < len; idx++) { + var component = BG.get(idx); + if (component instanceof PDFNumber_default) + components.push(component.asNumber()); + } + return components; + }; + AppearanceCharacteristics2.prototype.getCaptions = function() { + var CA = this.CA(); + var RC = this.RC(); + var AC = this.AC(); + return { + normal: CA === null || CA === void 0 ? void 0 : CA.decodeText(), + rollover: RC === null || RC === void 0 ? void 0 : RC.decodeText(), + down: AC === null || AC === void 0 ? void 0 : AC.decodeText() + }; + }; + AppearanceCharacteristics2.prototype.setRotation = function(rotation) { + var R = this.dict.context.obj(rotation); + this.dict.set(PDFName_default.of("R"), R); + }; + AppearanceCharacteristics2.prototype.setBorderColor = function(color) { + var BC = this.dict.context.obj(color); + this.dict.set(PDFName_default.of("BC"), BC); + }; + AppearanceCharacteristics2.prototype.setBackgroundColor = function(color) { + var BG = this.dict.context.obj(color); + this.dict.set(PDFName_default.of("BG"), BG); + }; + AppearanceCharacteristics2.prototype.setCaptions = function(captions) { + var CA = PDFHexString_default.fromText(captions.normal); + this.dict.set(PDFName_default.of("CA"), CA); + if (captions.rollover) { + var RC = PDFHexString_default.fromText(captions.rollover); + this.dict.set(PDFName_default.of("RC"), RC); + } else { + this.dict.delete(PDFName_default.of("RC")); + } + if (captions.down) { + var AC = PDFHexString_default.fromText(captions.down); + this.dict.set(PDFName_default.of("AC"), AC); + } else { + this.dict.delete(PDFName_default.of("AC")); + } + }; + AppearanceCharacteristics2.fromDict = function(dict) { + return new AppearanceCharacteristics2(dict); + }; + return AppearanceCharacteristics2; + }() +); +var AppearanceCharacteristics_default = AppearanceCharacteristics; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/core/annotation/PDFWidgetAnnotation.js +var PDFWidgetAnnotation = ( + /** @class */ + function(_super) { + __extends(PDFWidgetAnnotation2, _super); + function PDFWidgetAnnotation2() { + return _super !== null && _super.apply(this, arguments) || this; + } + PDFWidgetAnnotation2.prototype.MK = function() { + var MK = this.dict.lookup(PDFName_default.of("MK")); + if (MK instanceof PDFDict_default) + return MK; + return void 0; + }; + PDFWidgetAnnotation2.prototype.BS = function() { + var BS = this.dict.lookup(PDFName_default.of("BS")); + if (BS instanceof PDFDict_default) + return BS; + return void 0; + }; + PDFWidgetAnnotation2.prototype.DA = function() { + var da = this.dict.lookup(PDFName_default.of("DA")); + if (da instanceof PDFString_default || da instanceof PDFHexString_default) + return da; + return void 0; + }; + PDFWidgetAnnotation2.prototype.P = function() { + var P = this.dict.get(PDFName_default.of("P")); + if (P instanceof PDFRef_default) + return P; + return void 0; + }; + PDFWidgetAnnotation2.prototype.setP = function(page) { + this.dict.set(PDFName_default.of("P"), page); + }; + PDFWidgetAnnotation2.prototype.setDefaultAppearance = function(appearance) { + this.dict.set(PDFName_default.of("DA"), PDFString_default.of(appearance)); + }; + PDFWidgetAnnotation2.prototype.getDefaultAppearance = function() { + var DA = this.DA(); + if (DA instanceof PDFHexString_default) { + return DA.decodeText(); + } + return DA === null || DA === void 0 ? void 0 : DA.asString(); + }; + PDFWidgetAnnotation2.prototype.getAppearanceCharacteristics = function() { + var MK = this.MK(); + if (MK) + return AppearanceCharacteristics_default.fromDict(MK); + return void 0; + }; + PDFWidgetAnnotation2.prototype.getOrCreateAppearanceCharacteristics = function() { + var MK = this.MK(); + if (MK) + return AppearanceCharacteristics_default.fromDict(MK); + var ac = AppearanceCharacteristics_default.fromDict(this.dict.context.obj({})); + this.dict.set(PDFName_default.of("MK"), ac.dict); + return ac; + }; + PDFWidgetAnnotation2.prototype.getBorderStyle = function() { + var BS = this.BS(); + if (BS) + return BorderStyle_default.fromDict(BS); + return void 0; + }; + PDFWidgetAnnotation2.prototype.getOrCreateBorderStyle = function() { + var BS = this.BS(); + if (BS) + return BorderStyle_default.fromDict(BS); + var bs = BorderStyle_default.fromDict(this.dict.context.obj({})); + this.dict.set(PDFName_default.of("BS"), bs.dict); + return bs; + }; + PDFWidgetAnnotation2.prototype.getOnValue = function() { + var _a; + var normal = (_a = this.getAppearances()) === null || _a === void 0 ? void 0 : _a.normal; + if (normal instanceof PDFDict_default) { + var keys = normal.keys(); + for (var idx = 0, len = keys.length; idx < len; idx++) { + var key = keys[idx]; + if (key !== PDFName_default.of("Off")) + return key; + } + } + return void 0; + }; + PDFWidgetAnnotation2.fromDict = function(dict) { + return new PDFWidgetAnnotation2(dict); + }; + PDFWidgetAnnotation2.create = function(context, parent) { + var dict = context.obj({ + Type: "Annot", + Subtype: "Widget", + Rect: [0, 0, 0, 0], + Parent: parent + }); + return new PDFWidgetAnnotation2(dict); + }; + return PDFWidgetAnnotation2; + }(PDFAnnotation_default) +); +var PDFWidgetAnnotation_default = PDFWidgetAnnotation; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/core/acroform/PDFAcroTerminal.js +var PDFAcroTerminal = ( + /** @class */ + function(_super) { + __extends(PDFAcroTerminal2, _super); + function PDFAcroTerminal2() { + return _super !== null && _super.apply(this, arguments) || this; + } + PDFAcroTerminal2.prototype.FT = function() { + var nameOrRef = this.getInheritableAttribute(PDFName_default.of("FT")); + return this.dict.context.lookup(nameOrRef, PDFName_default); + }; + PDFAcroTerminal2.prototype.getWidgets = function() { + var kidDicts = this.Kids(); + if (!kidDicts) + return [PDFWidgetAnnotation_default.fromDict(this.dict)]; + var widgets = new Array(kidDicts.size()); + for (var idx = 0, len = kidDicts.size(); idx < len; idx++) { + var dict = kidDicts.lookup(idx, PDFDict_default); + widgets[idx] = PDFWidgetAnnotation_default.fromDict(dict); + } + return widgets; + }; + PDFAcroTerminal2.prototype.addWidget = function(ref) { + var Kids = this.normalizedEntries().Kids; + Kids.push(ref); + }; + PDFAcroTerminal2.prototype.removeWidget = function(idx) { + var kidDicts = this.Kids(); + if (!kidDicts) { + if (idx !== 0) + throw new IndexOutOfBoundsError(idx, 0, 0); + this.setKids([]); + } else { + if (idx < 0 || idx > kidDicts.size()) { + throw new IndexOutOfBoundsError(idx, 0, kidDicts.size()); + } + kidDicts.remove(idx); + } + }; + PDFAcroTerminal2.prototype.normalizedEntries = function() { + var Kids = this.Kids(); + if (!Kids) { + Kids = this.dict.context.obj([this.ref]); + this.dict.set(PDFName_default.of("Kids"), Kids); + } + return { Kids }; + }; + PDFAcroTerminal2.fromDict = function(dict, ref) { + return new PDFAcroTerminal2(dict, ref); + }; + return PDFAcroTerminal2; + }(PDFAcroField_default) +); +var PDFAcroTerminal_default = PDFAcroTerminal; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/core/acroform/PDFAcroButton.js +var PDFAcroButton = ( + /** @class */ + function(_super) { + __extends(PDFAcroButton2, _super); + function PDFAcroButton2() { + return _super !== null && _super.apply(this, arguments) || this; + } + PDFAcroButton2.prototype.Opt = function() { + return this.dict.lookupMaybe(PDFName_default.of("Opt"), PDFString_default, PDFHexString_default, PDFArray_default); + }; + PDFAcroButton2.prototype.setOpt = function(opt) { + this.dict.set(PDFName_default.of("Opt"), this.dict.context.obj(opt)); + }; + PDFAcroButton2.prototype.getExportValues = function() { + var opt = this.Opt(); + if (!opt) + return void 0; + if (opt instanceof PDFString_default || opt instanceof PDFHexString_default) { + return [opt]; + } + var values2 = []; + for (var idx = 0, len = opt.size(); idx < len; idx++) { + var value = opt.lookup(idx); + if (value instanceof PDFString_default || value instanceof PDFHexString_default) { + values2.push(value); + } + } + return values2; + }; + PDFAcroButton2.prototype.removeExportValue = function(idx) { + var opt = this.Opt(); + if (!opt) + return; + if (opt instanceof PDFString_default || opt instanceof PDFHexString_default) { + if (idx !== 0) + throw new IndexOutOfBoundsError(idx, 0, 0); + this.setOpt([]); + } else { + if (idx < 0 || idx > opt.size()) { + throw new IndexOutOfBoundsError(idx, 0, opt.size()); + } + opt.remove(idx); + } + }; + PDFAcroButton2.prototype.normalizeExportValues = function() { + var _a, _b, _c, _d; + var exportValues = (_a = this.getExportValues()) !== null && _a !== void 0 ? _a : []; + var Opt = []; + var widgets = this.getWidgets(); + for (var idx = 0, len = widgets.length; idx < len; idx++) { + var widget = widgets[idx]; + var exportVal = (_b = exportValues[idx]) !== null && _b !== void 0 ? _b : PDFHexString_default.fromText((_d = (_c = widget.getOnValue()) === null || _c === void 0 ? void 0 : _c.decodeText()) !== null && _d !== void 0 ? _d : ""); + Opt.push(exportVal); + } + this.setOpt(Opt); + }; + PDFAcroButton2.prototype.addOpt = function(opt, useExistingOptIdx) { + var _a; + this.normalizeExportValues(); + var optText = opt.decodeText(); + var existingIdx; + if (useExistingOptIdx) { + var exportValues = (_a = this.getExportValues()) !== null && _a !== void 0 ? _a : []; + for (var idx = 0, len = exportValues.length; idx < len; idx++) { + var exportVal = exportValues[idx]; + if (exportVal.decodeText() === optText) + existingIdx = idx; + } + } + var Opt = this.Opt(); + Opt.push(opt); + return existingIdx !== null && existingIdx !== void 0 ? existingIdx : Opt.size() - 1; + }; + PDFAcroButton2.prototype.addWidgetWithOpt = function(widget, opt, useExistingOptIdx) { + var optIdx = this.addOpt(opt, useExistingOptIdx); + var apStateValue = PDFName_default.of(String(optIdx)); + this.addWidget(widget); + return apStateValue; + }; + return PDFAcroButton2; + }(PDFAcroTerminal_default) +); +var PDFAcroButton_default = PDFAcroButton; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/core/acroform/PDFAcroCheckBox.js +var PDFAcroCheckBox = ( + /** @class */ + function(_super) { + __extends(PDFAcroCheckBox2, _super); + function PDFAcroCheckBox2() { + return _super !== null && _super.apply(this, arguments) || this; + } + PDFAcroCheckBox2.prototype.setValue = function(value) { + var _a; + var onValue = (_a = this.getOnValue()) !== null && _a !== void 0 ? _a : PDFName_default.of("Yes"); + if (value !== onValue && value !== PDFName_default.of("Off")) { + throw new InvalidAcroFieldValueError(); + } + this.dict.set(PDFName_default.of("V"), value); + var widgets = this.getWidgets(); + for (var idx = 0, len = widgets.length; idx < len; idx++) { + var widget = widgets[idx]; + var state = widget.getOnValue() === value ? value : PDFName_default.of("Off"); + widget.setAppearanceState(state); + } + }; + PDFAcroCheckBox2.prototype.getValue = function() { + var v = this.V(); + if (v instanceof PDFName_default) + return v; + return PDFName_default.of("Off"); + }; + PDFAcroCheckBox2.prototype.getOnValue = function() { + var widget = this.getWidgets()[0]; + return widget === null || widget === void 0 ? void 0 : widget.getOnValue(); + }; + PDFAcroCheckBox2.fromDict = function(dict, ref) { + return new PDFAcroCheckBox2(dict, ref); + }; + PDFAcroCheckBox2.create = function(context) { + var dict = context.obj({ + FT: "Btn", + Kids: [] + }); + var ref = context.register(dict); + return new PDFAcroCheckBox2(dict, ref); + }; + return PDFAcroCheckBox2; + }(PDFAcroButton_default) +); +var PDFAcroCheckBox_default = PDFAcroCheckBox; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/core/acroform/flags.js +var flag = function(bitIndex) { + return 1 << bitIndex; +}; +var AcroFieldFlags; +(function(AcroFieldFlags2) { + AcroFieldFlags2[AcroFieldFlags2["ReadOnly"] = flag(1 - 1)] = "ReadOnly"; + AcroFieldFlags2[AcroFieldFlags2["Required"] = flag(2 - 1)] = "Required"; + AcroFieldFlags2[AcroFieldFlags2["NoExport"] = flag(3 - 1)] = "NoExport"; +})(AcroFieldFlags || (AcroFieldFlags = {})); +var AcroButtonFlags; +(function(AcroButtonFlags2) { + AcroButtonFlags2[AcroButtonFlags2["NoToggleToOff"] = flag(15 - 1)] = "NoToggleToOff"; + AcroButtonFlags2[AcroButtonFlags2["Radio"] = flag(16 - 1)] = "Radio"; + AcroButtonFlags2[AcroButtonFlags2["PushButton"] = flag(17 - 1)] = "PushButton"; + AcroButtonFlags2[AcroButtonFlags2["RadiosInUnison"] = flag(26 - 1)] = "RadiosInUnison"; +})(AcroButtonFlags || (AcroButtonFlags = {})); +var AcroTextFlags; +(function(AcroTextFlags2) { + AcroTextFlags2[AcroTextFlags2["Multiline"] = flag(13 - 1)] = "Multiline"; + AcroTextFlags2[AcroTextFlags2["Password"] = flag(14 - 1)] = "Password"; + AcroTextFlags2[AcroTextFlags2["FileSelect"] = flag(21 - 1)] = "FileSelect"; + AcroTextFlags2[AcroTextFlags2["DoNotSpellCheck"] = flag(23 - 1)] = "DoNotSpellCheck"; + AcroTextFlags2[AcroTextFlags2["DoNotScroll"] = flag(24 - 1)] = "DoNotScroll"; + AcroTextFlags2[AcroTextFlags2["Comb"] = flag(25 - 1)] = "Comb"; + AcroTextFlags2[AcroTextFlags2["RichText"] = flag(26 - 1)] = "RichText"; +})(AcroTextFlags || (AcroTextFlags = {})); +var AcroChoiceFlags; +(function(AcroChoiceFlags2) { + AcroChoiceFlags2[AcroChoiceFlags2["Combo"] = flag(18 - 1)] = "Combo"; + AcroChoiceFlags2[AcroChoiceFlags2["Edit"] = flag(19 - 1)] = "Edit"; + AcroChoiceFlags2[AcroChoiceFlags2["Sort"] = flag(20 - 1)] = "Sort"; + AcroChoiceFlags2[AcroChoiceFlags2["MultiSelect"] = flag(22 - 1)] = "MultiSelect"; + AcroChoiceFlags2[AcroChoiceFlags2["DoNotSpellCheck"] = flag(23 - 1)] = "DoNotSpellCheck"; + AcroChoiceFlags2[AcroChoiceFlags2["CommitOnSelChange"] = flag(27 - 1)] = "CommitOnSelChange"; +})(AcroChoiceFlags || (AcroChoiceFlags = {})); + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/core/acroform/PDFAcroChoice.js +var PDFAcroChoice = ( + /** @class */ + function(_super) { + __extends(PDFAcroChoice2, _super); + function PDFAcroChoice2() { + return _super !== null && _super.apply(this, arguments) || this; + } + PDFAcroChoice2.prototype.setValues = function(values2) { + if (this.hasFlag(AcroChoiceFlags.Combo) && !this.hasFlag(AcroChoiceFlags.Edit) && !this.valuesAreValid(values2)) { + throw new InvalidAcroFieldValueError(); + } + if (values2.length === 0) { + this.dict.delete(PDFName_default.of("V")); + } + if (values2.length === 1) { + this.dict.set(PDFName_default.of("V"), values2[0]); + } + if (values2.length > 1) { + if (!this.hasFlag(AcroChoiceFlags.MultiSelect)) { + throw new MultiSelectValueError(); + } + this.dict.set(PDFName_default.of("V"), this.dict.context.obj(values2)); + } + this.updateSelectedIndices(values2); + }; + PDFAcroChoice2.prototype.valuesAreValid = function(values2) { + var options = this.getOptions(); + var _loop_1 = function(idx2, len2) { + var val = values2[idx2].decodeText(); + if (!options.find(function(o) { + return val === (o.display || o.value).decodeText(); + })) { + return { value: false }; + } + }; + for (var idx = 0, len = values2.length; idx < len; idx++) { + var state_1 = _loop_1(idx, len); + if (typeof state_1 === "object") + return state_1.value; + } + return true; + }; + PDFAcroChoice2.prototype.updateSelectedIndices = function(values2) { + if (values2.length > 1) { + var indices = new Array(values2.length); + var options = this.getOptions(); + var _loop_2 = function(idx2, len2) { + var val = values2[idx2].decodeText(); + indices[idx2] = options.findIndex(function(o) { + return val === (o.display || o.value).decodeText(); + }); + }; + for (var idx = 0, len = values2.length; idx < len; idx++) { + _loop_2(idx, len); + } + this.dict.set(PDFName_default.of("I"), this.dict.context.obj(indices.sort())); + } else { + this.dict.delete(PDFName_default.of("I")); + } + }; + PDFAcroChoice2.prototype.getValues = function() { + var v = this.V(); + if (v instanceof PDFString_default || v instanceof PDFHexString_default) + return [v]; + if (v instanceof PDFArray_default) { + var values2 = []; + for (var idx = 0, len = v.size(); idx < len; idx++) { + var value = v.lookup(idx); + if (value instanceof PDFString_default || value instanceof PDFHexString_default) { + values2.push(value); + } + } + return values2; + } + return []; + }; + PDFAcroChoice2.prototype.Opt = function() { + return this.dict.lookupMaybe(PDFName_default.of("Opt"), PDFString_default, PDFHexString_default, PDFArray_default); + }; + PDFAcroChoice2.prototype.setOptions = function(options) { + var newOpt = new Array(options.length); + for (var idx = 0, len = options.length; idx < len; idx++) { + var _a = options[idx], value = _a.value, display = _a.display; + newOpt[idx] = this.dict.context.obj([value, display || value]); + } + this.dict.set(PDFName_default.of("Opt"), this.dict.context.obj(newOpt)); + }; + PDFAcroChoice2.prototype.getOptions = function() { + var Opt = this.Opt(); + if (Opt instanceof PDFString_default || Opt instanceof PDFHexString_default) { + return [{ value: Opt, display: Opt }]; + } + if (Opt instanceof PDFArray_default) { + var res = []; + for (var idx = 0, len = Opt.size(); idx < len; idx++) { + var item = Opt.lookup(idx); + if (item instanceof PDFString_default || item instanceof PDFHexString_default) { + res.push({ value: item, display: item }); + } + if (item instanceof PDFArray_default) { + if (item.size() > 0) { + var first = item.lookup(0, PDFString_default, PDFHexString_default); + var second = item.lookupMaybe(1, PDFString_default, PDFHexString_default); + res.push({ value: first, display: second || first }); + } + } + } + return res; + } + return []; + }; + return PDFAcroChoice2; + }(PDFAcroTerminal_default) +); +var PDFAcroChoice_default = PDFAcroChoice; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/core/acroform/PDFAcroComboBox.js +var PDFAcroComboBox = ( + /** @class */ + function(_super) { + __extends(PDFAcroComboBox2, _super); + function PDFAcroComboBox2() { + return _super !== null && _super.apply(this, arguments) || this; + } + PDFAcroComboBox2.fromDict = function(dict, ref) { + return new PDFAcroComboBox2(dict, ref); + }; + PDFAcroComboBox2.create = function(context) { + var dict = context.obj({ + FT: "Ch", + Ff: AcroChoiceFlags.Combo, + Kids: [] + }); + var ref = context.register(dict); + return new PDFAcroComboBox2(dict, ref); + }; + return PDFAcroComboBox2; + }(PDFAcroChoice_default) +); +var PDFAcroComboBox_default = PDFAcroComboBox; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/core/acroform/PDFAcroNonTerminal.js +var PDFAcroNonTerminal = ( + /** @class */ + function(_super) { + __extends(PDFAcroNonTerminal2, _super); + function PDFAcroNonTerminal2() { + return _super !== null && _super.apply(this, arguments) || this; + } + PDFAcroNonTerminal2.prototype.addField = function(field) { + var Kids = this.normalizedEntries().Kids; + Kids === null || Kids === void 0 ? void 0 : Kids.push(field); + }; + PDFAcroNonTerminal2.prototype.normalizedEntries = function() { + var Kids = this.Kids(); + if (!Kids) { + Kids = this.dict.context.obj([]); + this.dict.set(PDFName_default.of("Kids"), Kids); + } + return { Kids }; + }; + PDFAcroNonTerminal2.fromDict = function(dict, ref) { + return new PDFAcroNonTerminal2(dict, ref); + }; + PDFAcroNonTerminal2.create = function(context) { + var dict = context.obj({}); + var ref = context.register(dict); + return new PDFAcroNonTerminal2(dict, ref); + }; + return PDFAcroNonTerminal2; + }(PDFAcroField_default) +); +var PDFAcroNonTerminal_default = PDFAcroNonTerminal; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/core/acroform/PDFAcroSignature.js +var PDFAcroSignature = ( + /** @class */ + function(_super) { + __extends(PDFAcroSignature2, _super); + function PDFAcroSignature2() { + return _super !== null && _super.apply(this, arguments) || this; + } + PDFAcroSignature2.fromDict = function(dict, ref) { + return new PDFAcroSignature2(dict, ref); + }; + return PDFAcroSignature2; + }(PDFAcroTerminal_default) +); +var PDFAcroSignature_default = PDFAcroSignature; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/core/acroform/PDFAcroText.js +var PDFAcroText = ( + /** @class */ + function(_super) { + __extends(PDFAcroText2, _super); + function PDFAcroText2() { + return _super !== null && _super.apply(this, arguments) || this; + } + PDFAcroText2.prototype.MaxLen = function() { + var maxLen = this.dict.lookup(PDFName_default.of("MaxLen")); + if (maxLen instanceof PDFNumber_default) + return maxLen; + return void 0; + }; + PDFAcroText2.prototype.Q = function() { + var q = this.dict.lookup(PDFName_default.of("Q")); + if (q instanceof PDFNumber_default) + return q; + return void 0; + }; + PDFAcroText2.prototype.setMaxLength = function(maxLength) { + this.dict.set(PDFName_default.of("MaxLen"), PDFNumber_default.of(maxLength)); + }; + PDFAcroText2.prototype.removeMaxLength = function() { + this.dict.delete(PDFName_default.of("MaxLen")); + }; + PDFAcroText2.prototype.getMaxLength = function() { + var _a; + return (_a = this.MaxLen()) === null || _a === void 0 ? void 0 : _a.asNumber(); + }; + PDFAcroText2.prototype.setQuadding = function(quadding) { + this.dict.set(PDFName_default.of("Q"), PDFNumber_default.of(quadding)); + }; + PDFAcroText2.prototype.getQuadding = function() { + var _a; + return (_a = this.Q()) === null || _a === void 0 ? void 0 : _a.asNumber(); + }; + PDFAcroText2.prototype.setValue = function(value) { + this.dict.set(PDFName_default.of("V"), value); + }; + PDFAcroText2.prototype.removeValue = function() { + this.dict.delete(PDFName_default.of("V")); + }; + PDFAcroText2.prototype.getValue = function() { + var v = this.V(); + if (v instanceof PDFString_default || v instanceof PDFHexString_default) + return v; + return void 0; + }; + PDFAcroText2.fromDict = function(dict, ref) { + return new PDFAcroText2(dict, ref); + }; + PDFAcroText2.create = function(context) { + var dict = context.obj({ + FT: "Tx", + Kids: [] + }); + var ref = context.register(dict); + return new PDFAcroText2(dict, ref); + }; + return PDFAcroText2; + }(PDFAcroTerminal_default) +); +var PDFAcroText_default = PDFAcroText; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/core/acroform/PDFAcroPushButton.js +var PDFAcroPushButton = ( + /** @class */ + function(_super) { + __extends(PDFAcroPushButton2, _super); + function PDFAcroPushButton2() { + return _super !== null && _super.apply(this, arguments) || this; + } + PDFAcroPushButton2.fromDict = function(dict, ref) { + return new PDFAcroPushButton2(dict, ref); + }; + PDFAcroPushButton2.create = function(context) { + var dict = context.obj({ + FT: "Btn", + Ff: AcroButtonFlags.PushButton, + Kids: [] + }); + var ref = context.register(dict); + return new PDFAcroPushButton2(dict, ref); + }; + return PDFAcroPushButton2; + }(PDFAcroButton_default) +); +var PDFAcroPushButton_default = PDFAcroPushButton; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/core/acroform/PDFAcroRadioButton.js +var PDFAcroRadioButton = ( + /** @class */ + function(_super) { + __extends(PDFAcroRadioButton2, _super); + function PDFAcroRadioButton2() { + return _super !== null && _super.apply(this, arguments) || this; + } + PDFAcroRadioButton2.prototype.setValue = function(value) { + var onValues = this.getOnValues(); + if (!onValues.includes(value) && value !== PDFName_default.of("Off")) { + throw new InvalidAcroFieldValueError(); + } + this.dict.set(PDFName_default.of("V"), value); + var widgets = this.getWidgets(); + for (var idx = 0, len = widgets.length; idx < len; idx++) { + var widget = widgets[idx]; + var state = widget.getOnValue() === value ? value : PDFName_default.of("Off"); + widget.setAppearanceState(state); + } + }; + PDFAcroRadioButton2.prototype.getValue = function() { + var v = this.V(); + if (v instanceof PDFName_default) + return v; + return PDFName_default.of("Off"); + }; + PDFAcroRadioButton2.prototype.getOnValues = function() { + var widgets = this.getWidgets(); + var onValues = []; + for (var idx = 0, len = widgets.length; idx < len; idx++) { + var onValue = widgets[idx].getOnValue(); + if (onValue) + onValues.push(onValue); + } + return onValues; + }; + PDFAcroRadioButton2.fromDict = function(dict, ref) { + return new PDFAcroRadioButton2(dict, ref); + }; + PDFAcroRadioButton2.create = function(context) { + var dict = context.obj({ + FT: "Btn", + Ff: AcroButtonFlags.Radio, + Kids: [] + }); + var ref = context.register(dict); + return new PDFAcroRadioButton2(dict, ref); + }; + return PDFAcroRadioButton2; + }(PDFAcroButton_default) +); +var PDFAcroRadioButton_default = PDFAcroRadioButton; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/core/acroform/PDFAcroListBox.js +var PDFAcroListBox = ( + /** @class */ + function(_super) { + __extends(PDFAcroListBox2, _super); + function PDFAcroListBox2() { + return _super !== null && _super.apply(this, arguments) || this; + } + PDFAcroListBox2.fromDict = function(dict, ref) { + return new PDFAcroListBox2(dict, ref); + }; + PDFAcroListBox2.create = function(context) { + var dict = context.obj({ + FT: "Ch", + Kids: [] + }); + var ref = context.register(dict); + return new PDFAcroListBox2(dict, ref); + }; + return PDFAcroListBox2; + }(PDFAcroChoice_default) +); +var PDFAcroListBox_default = PDFAcroListBox; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/core/acroform/utils.js +var createPDFAcroFields = function(kidDicts) { + if (!kidDicts) + return []; + var kids = []; + for (var idx = 0, len = kidDicts.size(); idx < len; idx++) { + var ref = kidDicts.get(idx); + var dict = kidDicts.lookup(idx); + if (ref instanceof PDFRef_default && dict instanceof PDFDict_default) { + kids.push([createPDFAcroField(dict, ref), ref]); + } + } + return kids; +}; +var createPDFAcroField = function(dict, ref) { + var isNonTerminal = isNonTerminalAcroField(dict); + if (isNonTerminal) + return PDFAcroNonTerminal_default.fromDict(dict, ref); + return createPDFAcroTerminal(dict, ref); +}; +var isNonTerminalAcroField = function(dict) { + var kids = dict.lookup(PDFName_default.of("Kids")); + if (kids instanceof PDFArray_default) { + for (var idx = 0, len = kids.size(); idx < len; idx++) { + var kid = kids.lookup(idx); + var kidIsField = kid instanceof PDFDict_default && kid.has(PDFName_default.of("T")); + if (kidIsField) + return true; + } + } + return false; +}; +var createPDFAcroTerminal = function(dict, ref) { + var ftNameOrRef = getInheritableAttribute(dict, PDFName_default.of("FT")); + var type = dict.context.lookup(ftNameOrRef, PDFName_default); + if (type === PDFName_default.of("Btn")) + return createPDFAcroButton(dict, ref); + if (type === PDFName_default.of("Ch")) + return createPDFAcroChoice(dict, ref); + if (type === PDFName_default.of("Tx")) + return PDFAcroText_default.fromDict(dict, ref); + if (type === PDFName_default.of("Sig")) + return PDFAcroSignature_default.fromDict(dict, ref); + return PDFAcroTerminal_default.fromDict(dict, ref); +}; +var createPDFAcroButton = function(dict, ref) { + var _a; + var ffNumberOrRef = getInheritableAttribute(dict, PDFName_default.of("Ff")); + var ffNumber = dict.context.lookupMaybe(ffNumberOrRef, PDFNumber_default); + var flags = (_a = ffNumber === null || ffNumber === void 0 ? void 0 : ffNumber.asNumber()) !== null && _a !== void 0 ? _a : 0; + if (flagIsSet(flags, AcroButtonFlags.PushButton)) { + return PDFAcroPushButton_default.fromDict(dict, ref); + } else if (flagIsSet(flags, AcroButtonFlags.Radio)) { + return PDFAcroRadioButton_default.fromDict(dict, ref); + } else { + return PDFAcroCheckBox_default.fromDict(dict, ref); + } +}; +var createPDFAcroChoice = function(dict, ref) { + var _a; + var ffNumberOrRef = getInheritableAttribute(dict, PDFName_default.of("Ff")); + var ffNumber = dict.context.lookupMaybe(ffNumberOrRef, PDFNumber_default); + var flags = (_a = ffNumber === null || ffNumber === void 0 ? void 0 : ffNumber.asNumber()) !== null && _a !== void 0 ? _a : 0; + if (flagIsSet(flags, AcroChoiceFlags.Combo)) { + return PDFAcroComboBox_default.fromDict(dict, ref); + } else { + return PDFAcroListBox_default.fromDict(dict, ref); + } +}; +var flagIsSet = function(flags, flag3) { + return (flags & flag3) !== 0; +}; +var getInheritableAttribute = function(startNode, name) { + var attribute; + ascend(startNode, function(node) { + if (!attribute) + attribute = node.get(name); + }); + return attribute; +}; +var ascend = function(startNode, visitor) { + visitor(startNode); + var Parent = startNode.lookupMaybe(PDFName_default.of("Parent"), PDFDict_default); + if (Parent) + ascend(Parent, visitor); +}; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/core/acroform/PDFAcroForm.js +var PDFAcroForm = ( + /** @class */ + function() { + function PDFAcroForm2(dict) { + this.dict = dict; + } + PDFAcroForm2.prototype.Fields = function() { + var fields = this.dict.lookup(PDFName_default.of("Fields")); + if (fields instanceof PDFArray_default) + return fields; + return void 0; + }; + PDFAcroForm2.prototype.getFields = function() { + var Fields = this.normalizedEntries().Fields; + var fields = new Array(Fields.size()); + for (var idx = 0, len = Fields.size(); idx < len; idx++) { + var ref = Fields.get(idx); + var dict = Fields.lookup(idx, PDFDict_default); + fields[idx] = [createPDFAcroField(dict, ref), ref]; + } + return fields; + }; + PDFAcroForm2.prototype.getAllFields = function() { + var allFields = []; + var pushFields = function(fields) { + if (!fields) + return; + for (var idx = 0, len = fields.length; idx < len; idx++) { + var field = fields[idx]; + allFields.push(field); + var fieldModel = field[0]; + if (fieldModel instanceof PDFAcroNonTerminal_default) { + pushFields(createPDFAcroFields(fieldModel.Kids())); + } + } + }; + pushFields(this.getFields()); + return allFields; + }; + PDFAcroForm2.prototype.addField = function(field) { + var Fields = this.normalizedEntries().Fields; + Fields === null || Fields === void 0 ? void 0 : Fields.push(field); + }; + PDFAcroForm2.prototype.removeField = function(field) { + var parent = field.getParent(); + var fields = parent === void 0 ? this.normalizedEntries().Fields : parent.Kids(); + var index = fields === null || fields === void 0 ? void 0 : fields.indexOf(field.ref); + if (fields === void 0 || index === void 0) { + throw new Error("Tried to remove inexistent field " + field.getFullyQualifiedName()); + } + fields.remove(index); + if (parent !== void 0 && fields.size() === 0) { + this.removeField(parent); + } + }; + PDFAcroForm2.prototype.normalizedEntries = function() { + var Fields = this.Fields(); + if (!Fields) { + Fields = this.dict.context.obj([]); + this.dict.set(PDFName_default.of("Fields"), Fields); + } + return { Fields }; + }; + PDFAcroForm2.fromDict = function(dict) { + return new PDFAcroForm2(dict); + }; + PDFAcroForm2.create = function(context) { + var dict = context.obj({ Fields: [] }); + return new PDFAcroForm2(dict); + }; + return PDFAcroForm2; + }() +); +var PDFAcroForm_default = PDFAcroForm; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/core/structures/PDFCatalog.js +var PDFCatalog = ( + /** @class */ + function(_super) { + __extends(PDFCatalog2, _super); + function PDFCatalog2() { + return _super !== null && _super.apply(this, arguments) || this; + } + PDFCatalog2.prototype.Pages = function() { + return this.lookup(PDFName_default.of("Pages"), PDFDict_default); + }; + PDFCatalog2.prototype.AcroForm = function() { + return this.lookupMaybe(PDFName_default.of("AcroForm"), PDFDict_default); + }; + PDFCatalog2.prototype.getAcroForm = function() { + var dict = this.AcroForm(); + if (!dict) + return void 0; + return PDFAcroForm_default.fromDict(dict); + }; + PDFCatalog2.prototype.getOrCreateAcroForm = function() { + var acroForm = this.getAcroForm(); + if (!acroForm) { + acroForm = PDFAcroForm_default.create(this.context); + var acroFormRef = this.context.register(acroForm.dict); + this.set(PDFName_default.of("AcroForm"), acroFormRef); + } + return acroForm; + }; + PDFCatalog2.prototype.ViewerPreferences = function() { + return this.lookupMaybe(PDFName_default.of("ViewerPreferences"), PDFDict_default); + }; + PDFCatalog2.prototype.getViewerPreferences = function() { + var dict = this.ViewerPreferences(); + if (!dict) + return void 0; + return ViewerPreferences_default.fromDict(dict); + }; + PDFCatalog2.prototype.getOrCreateViewerPreferences = function() { + var viewerPrefs = this.getViewerPreferences(); + if (!viewerPrefs) { + viewerPrefs = ViewerPreferences_default.create(this.context); + var viewerPrefsRef = this.context.register(viewerPrefs.dict); + this.set(PDFName_default.of("ViewerPreferences"), viewerPrefsRef); + } + return viewerPrefs; + }; + PDFCatalog2.prototype.insertLeafNode = function(leafRef, index) { + var pagesRef = this.get(PDFName_default.of("Pages")); + var maybeParentRef = this.Pages().insertLeafNode(leafRef, index); + return maybeParentRef || pagesRef; + }; + PDFCatalog2.prototype.removeLeafNode = function(index) { + this.Pages().removeLeafNode(index); + }; + PDFCatalog2.withContextAndPages = function(context, pages) { + var dict = /* @__PURE__ */ new Map(); + dict.set(PDFName_default.of("Type"), PDFName_default.of("Catalog")); + dict.set(PDFName_default.of("Pages"), pages); + return new PDFCatalog2(dict, context); + }; + PDFCatalog2.fromMapWithContext = function(map, context) { + return new PDFCatalog2(map, context); + }; + return PDFCatalog2; + }(PDFDict_default) +); +var PDFCatalog_default = PDFCatalog; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/core/structures/PDFPageTree.js +var PDFPageTree = ( + /** @class */ + function(_super) { + __extends(PDFPageTree2, _super); + function PDFPageTree2() { + return _super !== null && _super.apply(this, arguments) || this; + } + PDFPageTree2.prototype.Parent = function() { + return this.lookup(PDFName_default.of("Parent")); + }; + PDFPageTree2.prototype.Kids = function() { + return this.lookup(PDFName_default.of("Kids"), PDFArray_default); + }; + PDFPageTree2.prototype.Count = function() { + return this.lookup(PDFName_default.of("Count"), PDFNumber_default); + }; + PDFPageTree2.prototype.pushTreeNode = function(treeRef) { + var Kids = this.Kids(); + Kids.push(treeRef); + }; + PDFPageTree2.prototype.pushLeafNode = function(leafRef) { + var Kids = this.Kids(); + this.insertLeafKid(Kids.size(), leafRef); + }; + PDFPageTree2.prototype.insertLeafNode = function(leafRef, targetIndex) { + var Kids = this.Kids(); + var Count = this.Count().asNumber(); + if (targetIndex > Count) { + throw new InvalidTargetIndexError(targetIndex, Count); + } + var leafsRemainingUntilTarget = targetIndex; + for (var idx = 0, len = Kids.size(); idx < len; idx++) { + if (leafsRemainingUntilTarget === 0) { + this.insertLeafKid(idx, leafRef); + return void 0; + } + var kidRef = Kids.get(idx); + var kid = this.context.lookup(kidRef); + if (kid instanceof PDFPageTree2) { + if (kid.Count().asNumber() > leafsRemainingUntilTarget) { + return kid.insertLeafNode(leafRef, leafsRemainingUntilTarget) || kidRef; + } else { + leafsRemainingUntilTarget -= kid.Count().asNumber(); + } + } + if (kid instanceof PDFPageLeaf_default) { + leafsRemainingUntilTarget -= 1; + } + } + if (leafsRemainingUntilTarget === 0) { + this.insertLeafKid(Kids.size(), leafRef); + return void 0; + } + throw new CorruptPageTreeError(targetIndex, "insertLeafNode"); + }; + PDFPageTree2.prototype.removeLeafNode = function(targetIndex, prune) { + if (prune === void 0) { + prune = true; + } + var Kids = this.Kids(); + var Count = this.Count().asNumber(); + if (targetIndex >= Count) { + throw new InvalidTargetIndexError(targetIndex, Count); + } + var leafsRemainingUntilTarget = targetIndex; + for (var idx = 0, len = Kids.size(); idx < len; idx++) { + var kidRef = Kids.get(idx); + var kid = this.context.lookup(kidRef); + if (kid instanceof PDFPageTree2) { + if (kid.Count().asNumber() > leafsRemainingUntilTarget) { + kid.removeLeafNode(leafsRemainingUntilTarget, prune); + if (prune && kid.Kids().size() === 0) + Kids.remove(idx); + return; + } else { + leafsRemainingUntilTarget -= kid.Count().asNumber(); + } + } + if (kid instanceof PDFPageLeaf_default) { + if (leafsRemainingUntilTarget === 0) { + this.removeKid(idx); + return; + } else { + leafsRemainingUntilTarget -= 1; + } + } + } + throw new CorruptPageTreeError(targetIndex, "removeLeafNode"); + }; + PDFPageTree2.prototype.ascend = function(visitor) { + visitor(this); + var Parent = this.Parent(); + if (Parent) + Parent.ascend(visitor); + }; + PDFPageTree2.prototype.traverse = function(visitor) { + var Kids = this.Kids(); + for (var idx = 0, len = Kids.size(); idx < len; idx++) { + var kidRef = Kids.get(idx); + var kid = this.context.lookup(kidRef); + if (kid instanceof PDFPageTree2) + kid.traverse(visitor); + visitor(kid, kidRef); + } + }; + PDFPageTree2.prototype.insertLeafKid = function(kidIdx, leafRef) { + var Kids = this.Kids(); + this.ascend(function(node) { + var newCount = node.Count().asNumber() + 1; + node.set(PDFName_default.of("Count"), PDFNumber_default.of(newCount)); + }); + Kids.insert(kidIdx, leafRef); + }; + PDFPageTree2.prototype.removeKid = function(kidIdx) { + var Kids = this.Kids(); + var kid = Kids.lookup(kidIdx); + if (kid instanceof PDFPageLeaf_default) { + this.ascend(function(node) { + var newCount = node.Count().asNumber() - 1; + node.set(PDFName_default.of("Count"), PDFNumber_default.of(newCount)); + }); + } + Kids.remove(kidIdx); + }; + PDFPageTree2.withContext = function(context, parent) { + var dict = /* @__PURE__ */ new Map(); + dict.set(PDFName_default.of("Type"), PDFName_default.of("Pages")); + dict.set(PDFName_default.of("Kids"), context.obj([])); + dict.set(PDFName_default.of("Count"), context.obj(0)); + if (parent) + dict.set(PDFName_default.of("Parent"), parent); + return new PDFPageTree2(dict, context); + }; + PDFPageTree2.fromMapWithContext = function(map, context) { + return new PDFPageTree2(map, context); + }; + return PDFPageTree2; + }(PDFDict_default) +); +var PDFPageTree_default = PDFPageTree; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/core/syntax/Numeric.js +var IsDigit = new Uint8Array(256); +IsDigit[CharCodes_default.Zero] = 1; +IsDigit[CharCodes_default.One] = 1; +IsDigit[CharCodes_default.Two] = 1; +IsDigit[CharCodes_default.Three] = 1; +IsDigit[CharCodes_default.Four] = 1; +IsDigit[CharCodes_default.Five] = 1; +IsDigit[CharCodes_default.Six] = 1; +IsDigit[CharCodes_default.Seven] = 1; +IsDigit[CharCodes_default.Eight] = 1; +IsDigit[CharCodes_default.Nine] = 1; +var IsNumericPrefix = new Uint8Array(256); +IsNumericPrefix[CharCodes_default.Period] = 1; +IsNumericPrefix[CharCodes_default.Plus] = 1; +IsNumericPrefix[CharCodes_default.Minus] = 1; +var IsNumeric = new Uint8Array(256); +for (idx = 0, len = 256; idx < len; idx++) { + IsNumeric[idx] = IsDigit[idx] || IsNumericPrefix[idx] ? 1 : 0; +} +var idx; +var len; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/core/parser/BaseParser.js +var Newline = CharCodes_default.Newline; +var CarriageReturn = CharCodes_default.CarriageReturn; +var BaseParser = ( + /** @class */ + function() { + function BaseParser2(bytes, capNumbers) { + if (capNumbers === void 0) { + capNumbers = false; + } + this.bytes = bytes; + this.capNumbers = capNumbers; + } + BaseParser2.prototype.parseRawInt = function() { + var value = ""; + while (!this.bytes.done()) { + var byte = this.bytes.peek(); + if (!IsDigit[byte]) + break; + value += charFromCode(this.bytes.next()); + } + var numberValue = Number(value); + if (!value || !isFinite(numberValue)) { + throw new NumberParsingError(this.bytes.position(), value); + } + return numberValue; + }; + BaseParser2.prototype.parseRawNumber = function() { + var value = ""; + while (!this.bytes.done()) { + var byte = this.bytes.peek(); + if (!IsNumeric[byte]) + break; + value += charFromCode(this.bytes.next()); + if (byte === CharCodes_default.Period) + break; + } + while (!this.bytes.done()) { + var byte = this.bytes.peek(); + if (!IsDigit[byte]) + break; + value += charFromCode(this.bytes.next()); + } + var numberValue = Number(value); + if (!value || !isFinite(numberValue)) { + throw new NumberParsingError(this.bytes.position(), value); + } + if (numberValue > Number.MAX_SAFE_INTEGER) { + if (this.capNumbers) { + var msg = "Parsed number that is too large for some PDF readers: " + value + ", using Number.MAX_SAFE_INTEGER instead."; + console.warn(msg); + return Number.MAX_SAFE_INTEGER; + } else { + var msg = "Parsed number that is too large for some PDF readers: " + value + ", not capping."; + console.warn(msg); + } + } + return numberValue; + }; + BaseParser2.prototype.skipWhitespace = function() { + while (!this.bytes.done() && IsWhitespace[this.bytes.peek()]) { + this.bytes.next(); + } + }; + BaseParser2.prototype.skipLine = function() { + while (!this.bytes.done()) { + var byte = this.bytes.peek(); + if (byte === Newline || byte === CarriageReturn) + return; + this.bytes.next(); + } + }; + BaseParser2.prototype.skipComment = function() { + if (this.bytes.peek() !== CharCodes_default.Percent) + return false; + while (!this.bytes.done()) { + var byte = this.bytes.peek(); + if (byte === Newline || byte === CarriageReturn) + return true; + this.bytes.next(); + } + return true; + }; + BaseParser2.prototype.skipWhitespaceAndComments = function() { + this.skipWhitespace(); + while (this.skipComment()) + this.skipWhitespace(); + }; + BaseParser2.prototype.matchKeyword = function(keyword) { + var initialOffset = this.bytes.offset(); + for (var idx = 0, len = keyword.length; idx < len; idx++) { + if (this.bytes.done() || this.bytes.next() !== keyword[idx]) { + this.bytes.moveTo(initialOffset); + return false; + } + } + return true; + }; + return BaseParser2; + }() +); +var BaseParser_default = BaseParser; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/core/parser/ByteStream.js +var ByteStream = ( + /** @class */ + function() { + function ByteStream2(bytes) { + this.idx = 0; + this.line = 0; + this.column = 0; + this.bytes = bytes; + this.length = this.bytes.length; + } + ByteStream2.prototype.moveTo = function(offset) { + this.idx = offset; + }; + ByteStream2.prototype.next = function() { + var byte = this.bytes[this.idx++]; + if (byte === CharCodes_default.Newline) { + this.line += 1; + this.column = 0; + } else { + this.column += 1; + } + return byte; + }; + ByteStream2.prototype.assertNext = function(expected) { + if (this.peek() !== expected) { + throw new NextByteAssertionError(this.position(), expected, this.peek()); + } + return this.next(); + }; + ByteStream2.prototype.peek = function() { + return this.bytes[this.idx]; + }; + ByteStream2.prototype.peekAhead = function(steps) { + return this.bytes[this.idx + steps]; + }; + ByteStream2.prototype.peekAt = function(offset) { + return this.bytes[offset]; + }; + ByteStream2.prototype.done = function() { + return this.idx >= this.length; + }; + ByteStream2.prototype.offset = function() { + return this.idx; + }; + ByteStream2.prototype.slice = function(start, end) { + return this.bytes.slice(start, end); + }; + ByteStream2.prototype.position = function() { + return { line: this.line, column: this.column, offset: this.idx }; + }; + ByteStream2.of = function(bytes) { + return new ByteStream2(bytes); + }; + ByteStream2.fromPDFRawStream = function(rawStream) { + return ByteStream2.of(decodePDFRawStream(rawStream).decode()); + }; + return ByteStream2; + }() +); +var ByteStream_default = ByteStream; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/core/syntax/Keywords.js +var Space = CharCodes_default.Space; +var CarriageReturn2 = CharCodes_default.CarriageReturn; +var Newline2 = CharCodes_default.Newline; +var stream = [ + CharCodes_default.s, + CharCodes_default.t, + CharCodes_default.r, + CharCodes_default.e, + CharCodes_default.a, + CharCodes_default.m +]; +var endstream = [ + CharCodes_default.e, + CharCodes_default.n, + CharCodes_default.d, + CharCodes_default.s, + CharCodes_default.t, + CharCodes_default.r, + CharCodes_default.e, + CharCodes_default.a, + CharCodes_default.m +]; +var Keywords = { + header: [ + CharCodes_default.Percent, + CharCodes_default.P, + CharCodes_default.D, + CharCodes_default.F, + CharCodes_default.Dash + ], + eof: [ + CharCodes_default.Percent, + CharCodes_default.Percent, + CharCodes_default.E, + CharCodes_default.O, + CharCodes_default.F + ], + obj: [CharCodes_default.o, CharCodes_default.b, CharCodes_default.j], + endobj: [ + CharCodes_default.e, + CharCodes_default.n, + CharCodes_default.d, + CharCodes_default.o, + CharCodes_default.b, + CharCodes_default.j + ], + xref: [CharCodes_default.x, CharCodes_default.r, CharCodes_default.e, CharCodes_default.f], + trailer: [ + CharCodes_default.t, + CharCodes_default.r, + CharCodes_default.a, + CharCodes_default.i, + CharCodes_default.l, + CharCodes_default.e, + CharCodes_default.r + ], + startxref: [ + CharCodes_default.s, + CharCodes_default.t, + CharCodes_default.a, + CharCodes_default.r, + CharCodes_default.t, + CharCodes_default.x, + CharCodes_default.r, + CharCodes_default.e, + CharCodes_default.f + ], + true: [CharCodes_default.t, CharCodes_default.r, CharCodes_default.u, CharCodes_default.e], + false: [CharCodes_default.f, CharCodes_default.a, CharCodes_default.l, CharCodes_default.s, CharCodes_default.e], + null: [CharCodes_default.n, CharCodes_default.u, CharCodes_default.l, CharCodes_default.l], + stream, + streamEOF1: __spreadArrays(stream, [Space, CarriageReturn2, Newline2]), + streamEOF2: __spreadArrays(stream, [CarriageReturn2, Newline2]), + streamEOF3: __spreadArrays(stream, [CarriageReturn2]), + streamEOF4: __spreadArrays(stream, [Newline2]), + endstream, + EOF1endstream: __spreadArrays([CarriageReturn2, Newline2], endstream), + EOF2endstream: __spreadArrays([CarriageReturn2], endstream), + EOF3endstream: __spreadArrays([Newline2], endstream) +}; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/core/parser/PDFObjectParser.js +var PDFObjectParser = ( + /** @class */ + function(_super) { + __extends(PDFObjectParser2, _super); + function PDFObjectParser2(byteStream, context, capNumbers) { + if (capNumbers === void 0) { + capNumbers = false; + } + var _this = _super.call(this, byteStream, capNumbers) || this; + _this.context = context; + return _this; + } + PDFObjectParser2.prototype.parseObject = function() { + this.skipWhitespaceAndComments(); + if (this.matchKeyword(Keywords.true)) + return PDFBool_default.True; + if (this.matchKeyword(Keywords.false)) + return PDFBool_default.False; + if (this.matchKeyword(Keywords.null)) + return PDFNull_default; + var byte = this.bytes.peek(); + if (byte === CharCodes_default.LessThan && this.bytes.peekAhead(1) === CharCodes_default.LessThan) { + return this.parseDictOrStream(); + } + if (byte === CharCodes_default.LessThan) + return this.parseHexString(); + if (byte === CharCodes_default.LeftParen) + return this.parseString(); + if (byte === CharCodes_default.ForwardSlash) + return this.parseName(); + if (byte === CharCodes_default.LeftSquareBracket) + return this.parseArray(); + if (IsNumeric[byte]) + return this.parseNumberOrRef(); + throw new PDFObjectParsingError(this.bytes.position(), byte); + }; + PDFObjectParser2.prototype.parseNumberOrRef = function() { + var firstNum = this.parseRawNumber(); + this.skipWhitespaceAndComments(); + var lookaheadStart = this.bytes.offset(); + if (IsDigit[this.bytes.peek()]) { + var secondNum = this.parseRawNumber(); + this.skipWhitespaceAndComments(); + if (this.bytes.peek() === CharCodes_default.R) { + this.bytes.assertNext(CharCodes_default.R); + return PDFRef_default.of(firstNum, secondNum); + } + } + this.bytes.moveTo(lookaheadStart); + return PDFNumber_default.of(firstNum); + }; + PDFObjectParser2.prototype.parseHexString = function() { + var value = ""; + this.bytes.assertNext(CharCodes_default.LessThan); + while (!this.bytes.done() && this.bytes.peek() !== CharCodes_default.GreaterThan) { + value += charFromCode(this.bytes.next()); + } + this.bytes.assertNext(CharCodes_default.GreaterThan); + return PDFHexString_default.of(value); + }; + PDFObjectParser2.prototype.parseString = function() { + var nestingLvl = 0; + var isEscaped = false; + var value = ""; + while (!this.bytes.done()) { + var byte = this.bytes.next(); + value += charFromCode(byte); + if (!isEscaped) { + if (byte === CharCodes_default.LeftParen) + nestingLvl += 1; + if (byte === CharCodes_default.RightParen) + nestingLvl -= 1; + } + if (byte === CharCodes_default.BackSlash) { + isEscaped = !isEscaped; + } else if (isEscaped) { + isEscaped = false; + } + if (nestingLvl === 0) { + return PDFString_default.of(value.substring(1, value.length - 1)); + } + } + throw new UnbalancedParenthesisError(this.bytes.position()); + }; + PDFObjectParser2.prototype.parseName = function() { + this.bytes.assertNext(CharCodes_default.ForwardSlash); + var name = ""; + while (!this.bytes.done()) { + var byte = this.bytes.peek(); + if (IsWhitespace[byte] || IsDelimiter[byte]) + break; + name += charFromCode(byte); + this.bytes.next(); + } + return PDFName_default.of(name); + }; + PDFObjectParser2.prototype.parseArray = function() { + this.bytes.assertNext(CharCodes_default.LeftSquareBracket); + this.skipWhitespaceAndComments(); + var pdfArray = PDFArray_default.withContext(this.context); + while (this.bytes.peek() !== CharCodes_default.RightSquareBracket) { + var element = this.parseObject(); + pdfArray.push(element); + this.skipWhitespaceAndComments(); + } + this.bytes.assertNext(CharCodes_default.RightSquareBracket); + return pdfArray; + }; + PDFObjectParser2.prototype.parseDict = function() { + this.bytes.assertNext(CharCodes_default.LessThan); + this.bytes.assertNext(CharCodes_default.LessThan); + this.skipWhitespaceAndComments(); + var dict = /* @__PURE__ */ new Map(); + while (!this.bytes.done() && this.bytes.peek() !== CharCodes_default.GreaterThan && this.bytes.peekAhead(1) !== CharCodes_default.GreaterThan) { + var key = this.parseName(); + var value = this.parseObject(); + dict.set(key, value); + this.skipWhitespaceAndComments(); + } + this.skipWhitespaceAndComments(); + this.bytes.assertNext(CharCodes_default.GreaterThan); + this.bytes.assertNext(CharCodes_default.GreaterThan); + var Type = dict.get(PDFName_default.of("Type")); + if (Type === PDFName_default.of("Catalog")) { + return PDFCatalog_default.fromMapWithContext(dict, this.context); + } else if (Type === PDFName_default.of("Pages")) { + return PDFPageTree_default.fromMapWithContext(dict, this.context); + } else if (Type === PDFName_default.of("Page")) { + return PDFPageLeaf_default.fromMapWithContext(dict, this.context); + } else { + return PDFDict_default.fromMapWithContext(dict, this.context); + } + }; + PDFObjectParser2.prototype.parseDictOrStream = function() { + var startPos = this.bytes.position(); + var dict = this.parseDict(); + this.skipWhitespaceAndComments(); + if (!this.matchKeyword(Keywords.streamEOF1) && !this.matchKeyword(Keywords.streamEOF2) && !this.matchKeyword(Keywords.streamEOF3) && !this.matchKeyword(Keywords.streamEOF4) && !this.matchKeyword(Keywords.stream)) { + return dict; + } + var start = this.bytes.offset(); + var end; + var Length = dict.get(PDFName_default.of("Length")); + if (Length instanceof PDFNumber_default) { + end = start + Length.asNumber(); + this.bytes.moveTo(end); + this.skipWhitespaceAndComments(); + if (!this.matchKeyword(Keywords.endstream)) { + this.bytes.moveTo(start); + end = this.findEndOfStreamFallback(startPos); + } + } else { + end = this.findEndOfStreamFallback(startPos); + } + var contents = this.bytes.slice(start, end); + return PDFRawStream_default.of(dict, contents); + }; + PDFObjectParser2.prototype.findEndOfStreamFallback = function(startPos) { + var nestingLvl = 1; + var end = this.bytes.offset(); + while (!this.bytes.done()) { + end = this.bytes.offset(); + if (this.matchKeyword(Keywords.stream)) { + nestingLvl += 1; + } else if (this.matchKeyword(Keywords.EOF1endstream) || this.matchKeyword(Keywords.EOF2endstream) || this.matchKeyword(Keywords.EOF3endstream) || this.matchKeyword(Keywords.endstream)) { + nestingLvl -= 1; + } else { + this.bytes.next(); + } + if (nestingLvl === 0) + break; + } + if (nestingLvl !== 0) + throw new PDFStreamParsingError(startPos); + return end; + }; + PDFObjectParser2.forBytes = function(bytes, context, capNumbers) { + return new PDFObjectParser2(ByteStream_default.of(bytes), context, capNumbers); + }; + PDFObjectParser2.forByteStream = function(byteStream, context, capNumbers) { + if (capNumbers === void 0) { + capNumbers = false; + } + return new PDFObjectParser2(byteStream, context, capNumbers); + }; + return PDFObjectParser2; + }(BaseParser_default) +); +var PDFObjectParser_default = PDFObjectParser; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/core/parser/PDFObjectStreamParser.js +var PDFObjectStreamParser = ( + /** @class */ + function(_super) { + __extends(PDFObjectStreamParser2, _super); + function PDFObjectStreamParser2(rawStream, shouldWaitForTick) { + var _this = _super.call(this, ByteStream_default.fromPDFRawStream(rawStream), rawStream.dict.context) || this; + var dict = rawStream.dict; + _this.alreadyParsed = false; + _this.shouldWaitForTick = shouldWaitForTick || function() { + return false; + }; + _this.firstOffset = dict.lookup(PDFName_default.of("First"), PDFNumber_default).asNumber(); + _this.objectCount = dict.lookup(PDFName_default.of("N"), PDFNumber_default).asNumber(); + return _this; + } + PDFObjectStreamParser2.prototype.parseIntoContext = function() { + return __awaiter(this, void 0, void 0, function() { + var offsetsAndObjectNumbers, idx, len, _a, objectNumber, offset, object, ref; + return __generator(this, function(_b) { + switch (_b.label) { + case 0: + if (this.alreadyParsed) { + throw new ReparseError("PDFObjectStreamParser", "parseIntoContext"); + } + this.alreadyParsed = true; + offsetsAndObjectNumbers = this.parseOffsetsAndObjectNumbers(); + idx = 0, len = offsetsAndObjectNumbers.length; + _b.label = 1; + case 1: + if (!(idx < len)) return [3, 4]; + _a = offsetsAndObjectNumbers[idx], objectNumber = _a.objectNumber, offset = _a.offset; + this.bytes.moveTo(this.firstOffset + offset); + object = this.parseObject(); + ref = PDFRef_default.of(objectNumber, 0); + this.context.assign(ref, object); + if (!this.shouldWaitForTick()) return [3, 3]; + return [4, waitForTick()]; + case 2: + _b.sent(); + _b.label = 3; + case 3: + idx++; + return [3, 1]; + case 4: + return [ + 2 + /*return*/ + ]; + } + }); + }); + }; + PDFObjectStreamParser2.prototype.parseOffsetsAndObjectNumbers = function() { + var offsetsAndObjectNumbers = []; + for (var idx = 0, len = this.objectCount; idx < len; idx++) { + this.skipWhitespaceAndComments(); + var objectNumber = this.parseRawInt(); + this.skipWhitespaceAndComments(); + var offset = this.parseRawInt(); + offsetsAndObjectNumbers.push({ objectNumber, offset }); + } + return offsetsAndObjectNumbers; + }; + PDFObjectStreamParser2.forStream = function(rawStream, shouldWaitForTick) { + return new PDFObjectStreamParser2(rawStream, shouldWaitForTick); + }; + return PDFObjectStreamParser2; + }(PDFObjectParser_default) +); +var PDFObjectStreamParser_default = PDFObjectStreamParser; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/core/parser/PDFXRefStreamParser.js +var PDFXRefStreamParser = ( + /** @class */ + function() { + function PDFXRefStreamParser2(rawStream) { + this.alreadyParsed = false; + this.dict = rawStream.dict; + this.bytes = ByteStream_default.fromPDFRawStream(rawStream); + this.context = this.dict.context; + var Size = this.dict.lookup(PDFName_default.of("Size"), PDFNumber_default); + var Index = this.dict.lookup(PDFName_default.of("Index")); + if (Index instanceof PDFArray_default) { + this.subsections = []; + for (var idx = 0, len = Index.size(); idx < len; idx += 2) { + var firstObjectNumber = Index.lookup(idx + 0, PDFNumber_default).asNumber(); + var length_1 = Index.lookup(idx + 1, PDFNumber_default).asNumber(); + this.subsections.push({ firstObjectNumber, length: length_1 }); + } + } else { + this.subsections = [{ firstObjectNumber: 0, length: Size.asNumber() }]; + } + var W = this.dict.lookup(PDFName_default.of("W"), PDFArray_default); + this.byteWidths = [-1, -1, -1]; + for (var idx = 0, len = W.size(); idx < len; idx++) { + this.byteWidths[idx] = W.lookup(idx, PDFNumber_default).asNumber(); + } + } + PDFXRefStreamParser2.prototype.parseIntoContext = function() { + if (this.alreadyParsed) { + throw new ReparseError("PDFXRefStreamParser", "parseIntoContext"); + } + this.alreadyParsed = true; + this.context.trailerInfo = { + Root: this.dict.get(PDFName_default.of("Root")), + Encrypt: this.dict.get(PDFName_default.of("Encrypt")), + Info: this.dict.get(PDFName_default.of("Info")), + ID: this.dict.get(PDFName_default.of("ID")) + }; + var entries = this.parseEntries(); + return entries; + }; + PDFXRefStreamParser2.prototype.parseEntries = function() { + var entries = []; + var _a = this.byteWidths, typeFieldWidth = _a[0], offsetFieldWidth = _a[1], genFieldWidth = _a[2]; + for (var subsectionIdx = 0, subsectionLen = this.subsections.length; subsectionIdx < subsectionLen; subsectionIdx++) { + var _b = this.subsections[subsectionIdx], firstObjectNumber = _b.firstObjectNumber, length_2 = _b.length; + for (var objIdx = 0; objIdx < length_2; objIdx++) { + var type = 0; + for (var idx = 0, len = typeFieldWidth; idx < len; idx++) { + type = type << 8 | this.bytes.next(); + } + var offset = 0; + for (var idx = 0, len = offsetFieldWidth; idx < len; idx++) { + offset = offset << 8 | this.bytes.next(); + } + var generationNumber = 0; + for (var idx = 0, len = genFieldWidth; idx < len; idx++) { + generationNumber = generationNumber << 8 | this.bytes.next(); + } + if (typeFieldWidth === 0) + type = 1; + var objectNumber = firstObjectNumber + objIdx; + var entry = { + ref: PDFRef_default.of(objectNumber, generationNumber), + offset, + deleted: type === 0, + inObjectStream: type === 2 + }; + entries.push(entry); + } + } + return entries; + }; + PDFXRefStreamParser2.forStream = function(rawStream) { + return new PDFXRefStreamParser2(rawStream); + }; + return PDFXRefStreamParser2; + }() +); +var PDFXRefStreamParser_default = PDFXRefStreamParser; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/core/parser/PDFParser.js +var PDFParser = ( + /** @class */ + function(_super) { + __extends(PDFParser2, _super); + function PDFParser2(pdfBytes, objectsPerTick, throwOnInvalidObject, capNumbers) { + if (objectsPerTick === void 0) { + objectsPerTick = Infinity; + } + if (throwOnInvalidObject === void 0) { + throwOnInvalidObject = false; + } + if (capNumbers === void 0) { + capNumbers = false; + } + var _this = _super.call(this, ByteStream_default.of(pdfBytes), PDFContext_default.create(), capNumbers) || this; + _this.alreadyParsed = false; + _this.parsedObjects = 0; + _this.shouldWaitForTick = function() { + _this.parsedObjects += 1; + return _this.parsedObjects % _this.objectsPerTick === 0; + }; + _this.objectsPerTick = objectsPerTick; + _this.throwOnInvalidObject = throwOnInvalidObject; + return _this; + } + PDFParser2.prototype.parseDocument = function() { + return __awaiter(this, void 0, void 0, function() { + var prevOffset, offset; + return __generator(this, function(_a) { + switch (_a.label) { + case 0: + if (this.alreadyParsed) { + throw new ReparseError("PDFParser", "parseDocument"); + } + this.alreadyParsed = true; + this.context.header = this.parseHeader(); + _a.label = 1; + case 1: + if (!!this.bytes.done()) return [3, 3]; + return [4, this.parseDocumentSection()]; + case 2: + _a.sent(); + offset = this.bytes.offset(); + if (offset === prevOffset) { + throw new StalledParserError(this.bytes.position()); + } + prevOffset = offset; + return [3, 1]; + case 3: + this.maybeRecoverRoot(); + if (this.context.lookup(PDFRef_default.of(0))) { + console.warn("Removing parsed object: 0 0 R"); + this.context.delete(PDFRef_default.of(0)); + } + return [2, this.context]; + } + }); + }); + }; + PDFParser2.prototype.maybeRecoverRoot = function() { + var isValidCatalog = function(obj) { + return obj instanceof PDFDict_default && obj.lookup(PDFName_default.of("Type")) === PDFName_default.of("Catalog"); + }; + var catalog = this.context.lookup(this.context.trailerInfo.Root); + if (!isValidCatalog(catalog)) { + var indirectObjects = this.context.enumerateIndirectObjects(); + for (var idx = 0, len = indirectObjects.length; idx < len; idx++) { + var _a = indirectObjects[idx], ref = _a[0], object = _a[1]; + if (isValidCatalog(object)) { + this.context.trailerInfo.Root = ref; + } + } + } + }; + PDFParser2.prototype.parseHeader = function() { + while (!this.bytes.done()) { + if (this.matchKeyword(Keywords.header)) { + var major = this.parseRawInt(); + this.bytes.assertNext(CharCodes_default.Period); + var minor = this.parseRawInt(); + var header = PDFHeader_default.forVersion(major, minor); + this.skipBinaryHeaderComment(); + return header; + } + this.bytes.next(); + } + throw new MissingPDFHeaderError(this.bytes.position()); + }; + PDFParser2.prototype.parseIndirectObjectHeader = function() { + this.skipWhitespaceAndComments(); + var objectNumber = this.parseRawInt(); + this.skipWhitespaceAndComments(); + var generationNumber = this.parseRawInt(); + this.skipWhitespaceAndComments(); + if (!this.matchKeyword(Keywords.obj)) { + throw new MissingKeywordError(this.bytes.position(), Keywords.obj); + } + return PDFRef_default.of(objectNumber, generationNumber); + }; + PDFParser2.prototype.matchIndirectObjectHeader = function() { + var initialOffset = this.bytes.offset(); + try { + this.parseIndirectObjectHeader(); + return true; + } catch (e) { + this.bytes.moveTo(initialOffset); + return false; + } + }; + PDFParser2.prototype.parseIndirectObject = function() { + return __awaiter(this, void 0, void 0, function() { + var ref, object; + return __generator(this, function(_a) { + switch (_a.label) { + case 0: + ref = this.parseIndirectObjectHeader(); + this.skipWhitespaceAndComments(); + object = this.parseObject(); + this.skipWhitespaceAndComments(); + this.matchKeyword(Keywords.endobj); + if (!(object instanceof PDFRawStream_default && object.dict.lookup(PDFName_default.of("Type")) === PDFName_default.of("ObjStm"))) return [3, 2]; + return [4, PDFObjectStreamParser_default.forStream(object, this.shouldWaitForTick).parseIntoContext()]; + case 1: + _a.sent(); + return [3, 3]; + case 2: + if (object instanceof PDFRawStream_default && object.dict.lookup(PDFName_default.of("Type")) === PDFName_default.of("XRef")) { + PDFXRefStreamParser_default.forStream(object).parseIntoContext(); + } else { + this.context.assign(ref, object); + } + _a.label = 3; + case 3: + return [2, ref]; + } + }); + }); + }; + PDFParser2.prototype.tryToParseInvalidIndirectObject = function() { + var startPos = this.bytes.position(); + var msg = "Trying to parse invalid object: " + JSON.stringify(startPos) + ")"; + if (this.throwOnInvalidObject) + throw new Error(msg); + console.warn(msg); + var ref = this.parseIndirectObjectHeader(); + console.warn("Invalid object ref: " + ref); + this.skipWhitespaceAndComments(); + var start = this.bytes.offset(); + var failed = true; + while (!this.bytes.done()) { + if (this.matchKeyword(Keywords.endobj)) { + failed = false; + } + if (!failed) + break; + this.bytes.next(); + } + if (failed) + throw new PDFInvalidObjectParsingError(startPos); + var end = this.bytes.offset() - Keywords.endobj.length; + var object = PDFInvalidObject_default.of(this.bytes.slice(start, end)); + this.context.assign(ref, object); + return ref; + }; + PDFParser2.prototype.parseIndirectObjects = function() { + return __awaiter(this, void 0, void 0, function() { + var initialOffset, e_1; + return __generator(this, function(_a) { + switch (_a.label) { + case 0: + this.skipWhitespaceAndComments(); + _a.label = 1; + case 1: + if (!(!this.bytes.done() && IsDigit[this.bytes.peek()])) return [3, 8]; + initialOffset = this.bytes.offset(); + _a.label = 2; + case 2: + _a.trys.push([2, 4, , 5]); + return [4, this.parseIndirectObject()]; + case 3: + _a.sent(); + return [3, 5]; + case 4: + e_1 = _a.sent(); + this.bytes.moveTo(initialOffset); + this.tryToParseInvalidIndirectObject(); + return [3, 5]; + case 5: + this.skipWhitespaceAndComments(); + this.skipJibberish(); + if (!this.shouldWaitForTick()) return [3, 7]; + return [4, waitForTick()]; + case 6: + _a.sent(); + _a.label = 7; + case 7: + return [3, 1]; + case 8: + return [ + 2 + /*return*/ + ]; + } + }); + }); + }; + PDFParser2.prototype.maybeParseCrossRefSection = function() { + this.skipWhitespaceAndComments(); + if (!this.matchKeyword(Keywords.xref)) + return; + this.skipWhitespaceAndComments(); + var objectNumber = -1; + var xref = PDFCrossRefSection_default.createEmpty(); + while (!this.bytes.done() && IsDigit[this.bytes.peek()]) { + var firstInt = this.parseRawInt(); + this.skipWhitespaceAndComments(); + var secondInt = this.parseRawInt(); + this.skipWhitespaceAndComments(); + var byte = this.bytes.peek(); + if (byte === CharCodes_default.n || byte === CharCodes_default.f) { + var ref = PDFRef_default.of(objectNumber, secondInt); + if (this.bytes.next() === CharCodes_default.n) { + xref.addEntry(ref, firstInt); + } else { + xref.addDeletedEntry(ref, firstInt); + } + objectNumber += 1; + } else { + objectNumber = firstInt; + } + this.skipWhitespaceAndComments(); + } + return xref; + }; + PDFParser2.prototype.maybeParseTrailerDict = function() { + this.skipWhitespaceAndComments(); + if (!this.matchKeyword(Keywords.trailer)) + return; + this.skipWhitespaceAndComments(); + var dict = this.parseDict(); + var context = this.context; + context.trailerInfo = { + Root: dict.get(PDFName_default.of("Root")) || context.trailerInfo.Root, + Encrypt: dict.get(PDFName_default.of("Encrypt")) || context.trailerInfo.Encrypt, + Info: dict.get(PDFName_default.of("Info")) || context.trailerInfo.Info, + ID: dict.get(PDFName_default.of("ID")) || context.trailerInfo.ID + }; + }; + PDFParser2.prototype.maybeParseTrailer = function() { + this.skipWhitespaceAndComments(); + if (!this.matchKeyword(Keywords.startxref)) + return; + this.skipWhitespaceAndComments(); + var offset = this.parseRawInt(); + this.skipWhitespace(); + this.matchKeyword(Keywords.eof); + this.skipWhitespaceAndComments(); + this.matchKeyword(Keywords.eof); + this.skipWhitespaceAndComments(); + return PDFTrailer_default.forLastCrossRefSectionOffset(offset); + }; + PDFParser2.prototype.parseDocumentSection = function() { + return __awaiter(this, void 0, void 0, function() { + return __generator(this, function(_a) { + switch (_a.label) { + case 0: + return [4, this.parseIndirectObjects()]; + case 1: + _a.sent(); + this.maybeParseCrossRefSection(); + this.maybeParseTrailerDict(); + this.maybeParseTrailer(); + this.skipJibberish(); + return [ + 2 + /*return*/ + ]; + } + }); + }); + }; + PDFParser2.prototype.skipJibberish = function() { + this.skipWhitespaceAndComments(); + while (!this.bytes.done()) { + var initialOffset = this.bytes.offset(); + var byte = this.bytes.peek(); + var isAlphaNumeric = byte >= CharCodes_default.Space && byte <= CharCodes_default.Tilde; + if (isAlphaNumeric) { + if (this.matchKeyword(Keywords.xref) || this.matchKeyword(Keywords.trailer) || this.matchKeyword(Keywords.startxref) || this.matchIndirectObjectHeader()) { + this.bytes.moveTo(initialOffset); + break; + } + } + this.bytes.next(); + } + }; + PDFParser2.prototype.skipBinaryHeaderComment = function() { + this.skipWhitespaceAndComments(); + try { + var initialOffset = this.bytes.offset(); + this.parseIndirectObjectHeader(); + this.bytes.moveTo(initialOffset); + } catch (e) { + this.bytes.next(); + this.skipWhitespaceAndComments(); + } + }; + PDFParser2.forBytesWithOptions = function(pdfBytes, objectsPerTick, throwOnInvalidObject, capNumbers) { + return new PDFParser2(pdfBytes, objectsPerTick, throwOnInvalidObject, capNumbers); + }; + return PDFParser2; + }(PDFObjectParser_default) +); +var PDFParser_default = PDFParser; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/core/annotation/flags.js +var flag2 = function(bitIndex) { + return 1 << bitIndex; +}; +var AnnotationFlags; +(function(AnnotationFlags2) { + AnnotationFlags2[AnnotationFlags2["Invisible"] = flag2(1 - 1)] = "Invisible"; + AnnotationFlags2[AnnotationFlags2["Hidden"] = flag2(2 - 1)] = "Hidden"; + AnnotationFlags2[AnnotationFlags2["Print"] = flag2(3 - 1)] = "Print"; + AnnotationFlags2[AnnotationFlags2["NoZoom"] = flag2(4 - 1)] = "NoZoom"; + AnnotationFlags2[AnnotationFlags2["NoRotate"] = flag2(5 - 1)] = "NoRotate"; + AnnotationFlags2[AnnotationFlags2["NoView"] = flag2(6 - 1)] = "NoView"; + AnnotationFlags2[AnnotationFlags2["ReadOnly"] = flag2(7 - 1)] = "ReadOnly"; + AnnotationFlags2[AnnotationFlags2["Locked"] = flag2(8 - 1)] = "Locked"; + AnnotationFlags2[AnnotationFlags2["ToggleNoView"] = flag2(9 - 1)] = "ToggleNoView"; + AnnotationFlags2[AnnotationFlags2["LockedContents"] = flag2(10 - 1)] = "LockedContents"; +})(AnnotationFlags || (AnnotationFlags = {})); + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/api/objects.js +var asPDFName = function(name) { + return name instanceof PDFName_default ? name : PDFName_default.of(name); +}; +var asPDFNumber = function(num) { + return num instanceof PDFNumber_default ? num : PDFNumber_default.of(num); +}; +var asNumber = function(num) { + return num instanceof PDFNumber_default ? num.asNumber() : num; +}; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/api/rotations.js +var RotationTypes; +(function(RotationTypes2) { + RotationTypes2["Degrees"] = "degrees"; + RotationTypes2["Radians"] = "radians"; +})(RotationTypes || (RotationTypes = {})); +var degrees = function(degreeAngle) { + assertIs(degreeAngle, "degreeAngle", ["number"]); + return { type: RotationTypes.Degrees, angle: degreeAngle }; +}; +var Radians = RotationTypes.Radians; +var Degrees = RotationTypes.Degrees; +var degreesToRadians = function(degree) { + return degree * Math.PI / 180; +}; +var radiansToDegrees = function(radian) { + return radian * 180 / Math.PI; +}; +var toRadians = function(rotation) { + return rotation.type === Radians ? rotation.angle : rotation.type === Degrees ? degreesToRadians(rotation.angle) : error("Invalid rotation: " + JSON.stringify(rotation)); +}; +var toDegrees = function(rotation) { + return rotation.type === Radians ? radiansToDegrees(rotation.angle) : rotation.type === Degrees ? rotation.angle : error("Invalid rotation: " + JSON.stringify(rotation)); +}; +var reduceRotation = function(degreeAngle) { + if (degreeAngle === void 0) { + degreeAngle = 0; + } + var quadrants = degreeAngle / 90 % 4; + if (quadrants === 0) + return 0; + if (quadrants === 1) + return 90; + if (quadrants === 2) + return 180; + if (quadrants === 3) + return 270; + return 0; +}; +var adjustDimsForRotation = function(dims, degreeAngle) { + if (degreeAngle === void 0) { + degreeAngle = 0; + } + var rotation = reduceRotation(degreeAngle); + return rotation === 90 || rotation === 270 ? { width: dims.height, height: dims.width } : { width: dims.width, height: dims.height }; +}; +var rotateRectangle = function(rectangle, borderWidth, degreeAngle) { + if (borderWidth === void 0) { + borderWidth = 0; + } + if (degreeAngle === void 0) { + degreeAngle = 0; + } + var x = rectangle.x, y = rectangle.y, w = rectangle.width, h = rectangle.height; + var r = reduceRotation(degreeAngle); + var b = borderWidth / 2; + if (r === 0) + return { x: x - b, y: y - b, width: w, height: h }; + else if (r === 90) + return { x: x - h + b, y: y - b, width: h, height: w }; + else if (r === 180) + return { x: x - w + b, y: y - h + b, width: w, height: h }; + else if (r === 270) + return { x: x - b, y: y - w + b, width: h, height: w }; + else + return { x: x - b, y: y - b, width: w, height: h }; +}; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/api/operators.js +var clip = function() { + return PDFOperator_default.of(PDFOperatorNames_default.ClipNonZero); +}; +var cos = Math.cos; +var sin = Math.sin; +var tan = Math.tan; +var concatTransformationMatrix = function(a, b, c, d, e, f) { + return PDFOperator_default.of(PDFOperatorNames_default.ConcatTransformationMatrix, [ + asPDFNumber(a), + asPDFNumber(b), + asPDFNumber(c), + asPDFNumber(d), + asPDFNumber(e), + asPDFNumber(f) + ]); +}; +var translate = function(xPos, yPos) { + return concatTransformationMatrix(1, 0, 0, 1, xPos, yPos); +}; +var scale = function(xPos, yPos) { + return concatTransformationMatrix(xPos, 0, 0, yPos, 0, 0); +}; +var rotateRadians = function(angle) { + return concatTransformationMatrix(cos(asNumber(angle)), sin(asNumber(angle)), -sin(asNumber(angle)), cos(asNumber(angle)), 0, 0); +}; +var rotateDegrees = function(angle) { + return rotateRadians(degreesToRadians(asNumber(angle))); +}; +var skewRadians = function(xSkewAngle, ySkewAngle) { + return concatTransformationMatrix(1, tan(asNumber(xSkewAngle)), tan(asNumber(ySkewAngle)), 1, 0, 0); +}; +var setDashPattern = function(dashArray, dashPhase) { + return PDFOperator_default.of(PDFOperatorNames_default.SetLineDashPattern, [ + "[" + dashArray.map(asPDFNumber).join(" ") + "]", + asPDFNumber(dashPhase) + ]); +}; +var LineCapStyle; +(function(LineCapStyle2) { + LineCapStyle2[LineCapStyle2["Butt"] = 0] = "Butt"; + LineCapStyle2[LineCapStyle2["Round"] = 1] = "Round"; + LineCapStyle2[LineCapStyle2["Projecting"] = 2] = "Projecting"; +})(LineCapStyle || (LineCapStyle = {})); +var setLineCap = function(style) { + return PDFOperator_default.of(PDFOperatorNames_default.SetLineCapStyle, [asPDFNumber(style)]); +}; +var LineJoinStyle; +(function(LineJoinStyle2) { + LineJoinStyle2[LineJoinStyle2["Miter"] = 0] = "Miter"; + LineJoinStyle2[LineJoinStyle2["Round"] = 1] = "Round"; + LineJoinStyle2[LineJoinStyle2["Bevel"] = 2] = "Bevel"; +})(LineJoinStyle || (LineJoinStyle = {})); +var setGraphicsState = function(state) { + return PDFOperator_default.of(PDFOperatorNames_default.SetGraphicsStateParams, [asPDFName(state)]); +}; +var pushGraphicsState = function() { + return PDFOperator_default.of(PDFOperatorNames_default.PushGraphicsState); +}; +var popGraphicsState = function() { + return PDFOperator_default.of(PDFOperatorNames_default.PopGraphicsState); +}; +var setLineWidth = function(width) { + return PDFOperator_default.of(PDFOperatorNames_default.SetLineWidth, [asPDFNumber(width)]); +}; +var appendBezierCurve = function(x1, y1, x2, y2, x3, y3) { + return PDFOperator_default.of(PDFOperatorNames_default.AppendBezierCurve, [ + asPDFNumber(x1), + asPDFNumber(y1), + asPDFNumber(x2), + asPDFNumber(y2), + asPDFNumber(x3), + asPDFNumber(y3) + ]); +}; +var appendQuadraticCurve = function(x1, y1, x2, y2) { + return PDFOperator_default.of(PDFOperatorNames_default.CurveToReplicateInitialPoint, [ + asPDFNumber(x1), + asPDFNumber(y1), + asPDFNumber(x2), + asPDFNumber(y2) + ]); +}; +var closePath = function() { + return PDFOperator_default.of(PDFOperatorNames_default.ClosePath); +}; +var moveTo = function(xPos, yPos) { + return PDFOperator_default.of(PDFOperatorNames_default.MoveTo, [asPDFNumber(xPos), asPDFNumber(yPos)]); +}; +var lineTo = function(xPos, yPos) { + return PDFOperator_default.of(PDFOperatorNames_default.LineTo, [asPDFNumber(xPos), asPDFNumber(yPos)]); +}; +var stroke = function() { + return PDFOperator_default.of(PDFOperatorNames_default.StrokePath); +}; +var fill = function() { + return PDFOperator_default.of(PDFOperatorNames_default.FillNonZero); +}; +var fillAndStroke = function() { + return PDFOperator_default.of(PDFOperatorNames_default.FillNonZeroAndStroke); +}; +var endPath = function() { + return PDFOperator_default.of(PDFOperatorNames_default.EndPath); +}; +var nextLine = function() { + return PDFOperator_default.of(PDFOperatorNames_default.NextLine); +}; +var showText = function(text) { + return PDFOperator_default.of(PDFOperatorNames_default.ShowText, [text]); +}; +var beginText = function() { + return PDFOperator_default.of(PDFOperatorNames_default.BeginText); +}; +var endText = function() { + return PDFOperator_default.of(PDFOperatorNames_default.EndText); +}; +var setFontAndSize = function(name, size) { + return PDFOperator_default.of(PDFOperatorNames_default.SetFontAndSize, [asPDFName(name), asPDFNumber(size)]); +}; +var setLineHeight = function(lineHeight) { + return PDFOperator_default.of(PDFOperatorNames_default.SetTextLineHeight, [asPDFNumber(lineHeight)]); +}; +var TextRenderingMode; +(function(TextRenderingMode2) { + TextRenderingMode2[TextRenderingMode2["Fill"] = 0] = "Fill"; + TextRenderingMode2[TextRenderingMode2["Outline"] = 1] = "Outline"; + TextRenderingMode2[TextRenderingMode2["FillAndOutline"] = 2] = "FillAndOutline"; + TextRenderingMode2[TextRenderingMode2["Invisible"] = 3] = "Invisible"; + TextRenderingMode2[TextRenderingMode2["FillAndClip"] = 4] = "FillAndClip"; + TextRenderingMode2[TextRenderingMode2["OutlineAndClip"] = 5] = "OutlineAndClip"; + TextRenderingMode2[TextRenderingMode2["FillAndOutlineAndClip"] = 6] = "FillAndOutlineAndClip"; + TextRenderingMode2[TextRenderingMode2["Clip"] = 7] = "Clip"; +})(TextRenderingMode || (TextRenderingMode = {})); +var setTextMatrix = function(a, b, c, d, e, f) { + return PDFOperator_default.of(PDFOperatorNames_default.SetTextMatrix, [ + asPDFNumber(a), + asPDFNumber(b), + asPDFNumber(c), + asPDFNumber(d), + asPDFNumber(e), + asPDFNumber(f) + ]); +}; +var rotateAndSkewTextRadiansAndTranslate = function(rotationAngle, xSkewAngle, ySkewAngle, x, y) { + return setTextMatrix(cos(asNumber(rotationAngle)), sin(asNumber(rotationAngle)) + tan(asNumber(xSkewAngle)), -sin(asNumber(rotationAngle)) + tan(asNumber(ySkewAngle)), cos(asNumber(rotationAngle)), x, y); +}; +var drawObject = function(name) { + return PDFOperator_default.of(PDFOperatorNames_default.DrawObject, [asPDFName(name)]); +}; +var setFillingGrayscaleColor = function(gray) { + return PDFOperator_default.of(PDFOperatorNames_default.NonStrokingColorGray, [asPDFNumber(gray)]); +}; +var setStrokingGrayscaleColor = function(gray) { + return PDFOperator_default.of(PDFOperatorNames_default.StrokingColorGray, [asPDFNumber(gray)]); +}; +var setFillingRgbColor = function(red, green, blue) { + return PDFOperator_default.of(PDFOperatorNames_default.NonStrokingColorRgb, [ + asPDFNumber(red), + asPDFNumber(green), + asPDFNumber(blue) + ]); +}; +var setStrokingRgbColor = function(red, green, blue) { + return PDFOperator_default.of(PDFOperatorNames_default.StrokingColorRgb, [ + asPDFNumber(red), + asPDFNumber(green), + asPDFNumber(blue) + ]); +}; +var setFillingCmykColor = function(cyan, magenta, yellow, key) { + return PDFOperator_default.of(PDFOperatorNames_default.NonStrokingColorCmyk, [ + asPDFNumber(cyan), + asPDFNumber(magenta), + asPDFNumber(yellow), + asPDFNumber(key) + ]); +}; +var setStrokingCmykColor = function(cyan, magenta, yellow, key) { + return PDFOperator_default.of(PDFOperatorNames_default.StrokingColorCmyk, [ + asPDFNumber(cyan), + asPDFNumber(magenta), + asPDFNumber(yellow), + asPDFNumber(key) + ]); +}; +var beginMarkedContent = function(tag) { + return PDFOperator_default.of(PDFOperatorNames_default.BeginMarkedContent, [asPDFName(tag)]); +}; +var endMarkedContent = function() { + return PDFOperator_default.of(PDFOperatorNames_default.EndMarkedContent); +}; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/api/colors.js +var ColorTypes; +(function(ColorTypes2) { + ColorTypes2["Grayscale"] = "Grayscale"; + ColorTypes2["RGB"] = "RGB"; + ColorTypes2["CMYK"] = "CMYK"; +})(ColorTypes || (ColorTypes = {})); +var grayscale = function(gray) { + assertRange(gray, "gray", 0, 1); + return { type: ColorTypes.Grayscale, gray }; +}; +var rgb = function(red, green, blue) { + assertRange(red, "red", 0, 1); + assertRange(green, "green", 0, 1); + assertRange(blue, "blue", 0, 1); + return { type: ColorTypes.RGB, red, green, blue }; +}; +var cmyk = function(cyan, magenta, yellow, key) { + assertRange(cyan, "cyan", 0, 1); + assertRange(magenta, "magenta", 0, 1); + assertRange(yellow, "yellow", 0, 1); + assertRange(key, "key", 0, 1); + return { type: ColorTypes.CMYK, cyan, magenta, yellow, key }; +}; +var Grayscale = ColorTypes.Grayscale; +var RGB = ColorTypes.RGB; +var CMYK = ColorTypes.CMYK; +var setFillingColor = function(color) { + return color.type === Grayscale ? setFillingGrayscaleColor(color.gray) : color.type === RGB ? setFillingRgbColor(color.red, color.green, color.blue) : color.type === CMYK ? setFillingCmykColor(color.cyan, color.magenta, color.yellow, color.key) : error("Invalid color: " + JSON.stringify(color)); +}; +var setStrokingColor = function(color) { + return color.type === Grayscale ? setStrokingGrayscaleColor(color.gray) : color.type === RGB ? setStrokingRgbColor(color.red, color.green, color.blue) : color.type === CMYK ? setStrokingCmykColor(color.cyan, color.magenta, color.yellow, color.key) : error("Invalid color: " + JSON.stringify(color)); +}; +var componentsToColor = function(comps, scale2) { + if (scale2 === void 0) { + scale2 = 1; + } + return (comps === null || comps === void 0 ? void 0 : comps.length) === 1 ? grayscale(comps[0] * scale2) : (comps === null || comps === void 0 ? void 0 : comps.length) === 3 ? rgb(comps[0] * scale2, comps[1] * scale2, comps[2] * scale2) : (comps === null || comps === void 0 ? void 0 : comps.length) === 4 ? cmyk(comps[0] * scale2, comps[1] * scale2, comps[2] * scale2, comps[3] * scale2) : void 0; +}; +var colorToComponents = function(color) { + return color.type === Grayscale ? [color.gray] : color.type === RGB ? [color.red, color.green, color.blue] : color.type === CMYK ? [color.cyan, color.magenta, color.yellow, color.key] : error("Invalid color: " + JSON.stringify(color)); +}; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/api/svgPath.js +var cx = 0; +var cy = 0; +var px = 0; +var py = 0; +var sx = 0; +var sy = 0; +var parameters = /* @__PURE__ */ new Map([ + ["A", 7], + ["a", 7], + ["C", 6], + ["c", 6], + ["H", 1], + ["h", 1], + ["L", 2], + ["l", 2], + ["M", 2], + ["m", 2], + ["Q", 4], + ["q", 4], + ["S", 4], + ["s", 4], + ["T", 2], + ["t", 2], + ["V", 1], + ["v", 1], + ["Z", 0], + ["z", 0] +]); +var parse = function(path2) { + var cmd; + var ret = []; + var args = []; + var curArg = ""; + var foundDecimal = false; + var params = 0; + for (var _i = 0, path_1 = path2; _i < path_1.length; _i++) { + var c = path_1[_i]; + if (parameters.has(c)) { + params = parameters.get(c); + if (cmd) { + if (curArg.length > 0) { + args[args.length] = +curArg; + } + ret[ret.length] = { cmd, args }; + args = []; + curArg = ""; + foundDecimal = false; + } + cmd = c; + } else if ([" ", ","].includes(c) || c === "-" && curArg.length > 0 && curArg[curArg.length - 1] !== "e" || c === "." && foundDecimal) { + if (curArg.length === 0) { + continue; + } + if (args.length === params) { + ret[ret.length] = { cmd, args }; + args = [+curArg]; + if (cmd === "M") { + cmd = "L"; + } + if (cmd === "m") { + cmd = "l"; + } + } else { + args[args.length] = +curArg; + } + foundDecimal = c === "."; + curArg = ["-", "."].includes(c) ? c : ""; + } else { + curArg += c; + if (c === ".") { + foundDecimal = true; + } + } + } + if (curArg.length > 0) { + if (args.length === params) { + ret[ret.length] = { cmd, args }; + args = [+curArg]; + if (cmd === "M") { + cmd = "L"; + } + if (cmd === "m") { + cmd = "l"; + } + } else { + args[args.length] = +curArg; + } + } + ret[ret.length] = { cmd, args }; + return ret; +}; +var apply = function(commands) { + cx = cy = px = py = sx = sy = 0; + var cmds = []; + for (var i = 0; i < commands.length; i++) { + var c = commands[i]; + if (c.cmd && typeof runners[c.cmd] === "function") { + var cmd = runners[c.cmd](c.args); + if (Array.isArray(cmd)) { + cmds = cmds.concat(cmd); + } else { + cmds.push(cmd); + } + } + } + return cmds; +}; +var runners = { + M: function(a) { + cx = a[0]; + cy = a[1]; + px = py = null; + sx = cx; + sy = cy; + return moveTo(cx, cy); + }, + m: function(a) { + cx += a[0]; + cy += a[1]; + px = py = null; + sx = cx; + sy = cy; + return moveTo(cx, cy); + }, + C: function(a) { + cx = a[4]; + cy = a[5]; + px = a[2]; + py = a[3]; + return appendBezierCurve(a[0], a[1], a[2], a[3], a[4], a[5]); + }, + c: function(a) { + var cmd = appendBezierCurve(a[0] + cx, a[1] + cy, a[2] + cx, a[3] + cy, a[4] + cx, a[5] + cy); + px = cx + a[2]; + py = cy + a[3]; + cx += a[4]; + cy += a[5]; + return cmd; + }, + S: function(a) { + if (px === null || py === null) { + px = cx; + py = cy; + } + var cmd = appendBezierCurve(cx - (px - cx), cy - (py - cy), a[0], a[1], a[2], a[3]); + px = a[0]; + py = a[1]; + cx = a[2]; + cy = a[3]; + return cmd; + }, + s: function(a) { + if (px === null || py === null) { + px = cx; + py = cy; + } + var cmd = appendBezierCurve(cx - (px - cx), cy - (py - cy), cx + a[0], cy + a[1], cx + a[2], cy + a[3]); + px = cx + a[0]; + py = cy + a[1]; + cx += a[2]; + cy += a[3]; + return cmd; + }, + Q: function(a) { + px = a[0]; + py = a[1]; + cx = a[2]; + cy = a[3]; + return appendQuadraticCurve(a[0], a[1], cx, cy); + }, + q: function(a) { + var cmd = appendQuadraticCurve(a[0] + cx, a[1] + cy, a[2] + cx, a[3] + cy); + px = cx + a[0]; + py = cy + a[1]; + cx += a[2]; + cy += a[3]; + return cmd; + }, + T: function(a) { + if (px === null || py === null) { + px = cx; + py = cy; + } else { + px = cx - (px - cx); + py = cy - (py - cy); + } + var cmd = appendQuadraticCurve(px, py, a[0], a[1]); + px = cx - (px - cx); + py = cy - (py - cy); + cx = a[0]; + cy = a[1]; + return cmd; + }, + t: function(a) { + if (px === null || py === null) { + px = cx; + py = cy; + } else { + px = cx - (px - cx); + py = cy - (py - cy); + } + var cmd = appendQuadraticCurve(px, py, cx + a[0], cy + a[1]); + cx += a[0]; + cy += a[1]; + return cmd; + }, + A: function(a) { + var cmds = solveArc(cx, cy, a); + cx = a[5]; + cy = a[6]; + return cmds; + }, + a: function(a) { + a[5] += cx; + a[6] += cy; + var cmds = solveArc(cx, cy, a); + cx = a[5]; + cy = a[6]; + return cmds; + }, + L: function(a) { + cx = a[0]; + cy = a[1]; + px = py = null; + return lineTo(cx, cy); + }, + l: function(a) { + cx += a[0]; + cy += a[1]; + px = py = null; + return lineTo(cx, cy); + }, + H: function(a) { + cx = a[0]; + px = py = null; + return lineTo(cx, cy); + }, + h: function(a) { + cx += a[0]; + px = py = null; + return lineTo(cx, cy); + }, + V: function(a) { + cy = a[0]; + px = py = null; + return lineTo(cx, cy); + }, + v: function(a) { + cy += a[0]; + px = py = null; + return lineTo(cx, cy); + }, + Z: function() { + var cmd = closePath(); + cx = sx; + cy = sy; + return cmd; + }, + z: function() { + var cmd = closePath(); + cx = sx; + cy = sy; + return cmd; + } +}; +var solveArc = function(x, y, coords) { + var rx = coords[0], ry = coords[1], rot = coords[2], large = coords[3], sweep = coords[4], ex = coords[5], ey = coords[6]; + var segs = arcToSegments(ex, ey, rx, ry, large, sweep, rot, x, y); + var cmds = []; + for (var _i = 0, segs_1 = segs; _i < segs_1.length; _i++) { + var seg = segs_1[_i]; + var bez = segmentToBezier.apply(void 0, seg); + cmds.push(appendBezierCurve.apply(void 0, bez)); + } + return cmds; +}; +var arcToSegments = function(x, y, rx, ry, large, sweep, rotateX, ox, oy) { + var th = rotateX * (Math.PI / 180); + var sinTh = Math.sin(th); + var cosTh = Math.cos(th); + rx = Math.abs(rx); + ry = Math.abs(ry); + px = cosTh * (ox - x) * 0.5 + sinTh * (oy - y) * 0.5; + py = cosTh * (oy - y) * 0.5 - sinTh * (ox - x) * 0.5; + var pl = px * px / (rx * rx) + py * py / (ry * ry); + if (pl > 1) { + pl = Math.sqrt(pl); + rx *= pl; + ry *= pl; + } + var a00 = cosTh / rx; + var a01 = sinTh / rx; + var a10 = -sinTh / ry; + var a11 = cosTh / ry; + var x0 = a00 * ox + a01 * oy; + var y0 = a10 * ox + a11 * oy; + var x1 = a00 * x + a01 * y; + var y1 = a10 * x + a11 * y; + var d = (x1 - x0) * (x1 - x0) + (y1 - y0) * (y1 - y0); + var sfactorSq = 1 / d - 0.25; + if (sfactorSq < 0) { + sfactorSq = 0; + } + var sfactor = Math.sqrt(sfactorSq); + if (sweep === large) { + sfactor = -sfactor; + } + var xc = 0.5 * (x0 + x1) - sfactor * (y1 - y0); + var yc = 0.5 * (y0 + y1) + sfactor * (x1 - x0); + var th0 = Math.atan2(y0 - yc, x0 - xc); + var th1 = Math.atan2(y1 - yc, x1 - xc); + var thArc = th1 - th0; + if (thArc < 0 && sweep === 1) { + thArc += 2 * Math.PI; + } else if (thArc > 0 && sweep === 0) { + thArc -= 2 * Math.PI; + } + var segments = Math.ceil(Math.abs(thArc / (Math.PI * 0.5 + 1e-3))); + var result = []; + for (var i = 0; i < segments; i++) { + var th2 = th0 + i * thArc / segments; + var th3 = th0 + (i + 1) * thArc / segments; + result[i] = [xc, yc, th2, th3, rx, ry, sinTh, cosTh]; + } + return result; +}; +var segmentToBezier = function(cx1, cy1, th0, th1, rx, ry, sinTh, cosTh) { + var a00 = cosTh * rx; + var a01 = -sinTh * ry; + var a10 = sinTh * rx; + var a11 = cosTh * ry; + var thHalf = 0.5 * (th1 - th0); + var t = 8 / 3 * Math.sin(thHalf * 0.5) * Math.sin(thHalf * 0.5) / Math.sin(thHalf); + var x1 = cx1 + Math.cos(th0) - t * Math.sin(th0); + var y1 = cy1 + Math.sin(th0) + t * Math.cos(th0); + var x3 = cx1 + Math.cos(th1); + var y3 = cy1 + Math.sin(th1); + var x2 = x3 + t * Math.sin(th1); + var y2 = y3 - t * Math.cos(th1); + var result = [ + a00 * x1 + a01 * y1, + a10 * x1 + a11 * y1, + a00 * x2 + a01 * y2, + a10 * x2 + a11 * y2, + a00 * x3 + a01 * y3, + a10 * x3 + a11 * y3 + ]; + return result; +}; +var svgPathToOperators = function(path2) { + return apply(parse(path2)); +}; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/api/operations.js +var drawLinesOfText = function(lines, options) { + var operators = [ + pushGraphicsState(), + options.graphicsState && setGraphicsState(options.graphicsState), + beginText(), + setFillingColor(options.color), + setFontAndSize(options.font, options.size), + setLineHeight(options.lineHeight), + rotateAndSkewTextRadiansAndTranslate(toRadians(options.rotate), toRadians(options.xSkew), toRadians(options.ySkew), options.x, options.y) + ].filter(Boolean); + for (var idx = 0, len = lines.length; idx < len; idx++) { + operators.push(showText(lines[idx]), nextLine()); + } + operators.push(endText(), popGraphicsState()); + return operators; +}; +var drawImage = function(name, options) { + return [ + pushGraphicsState(), + options.graphicsState && setGraphicsState(options.graphicsState), + translate(options.x, options.y), + rotateRadians(toRadians(options.rotate)), + scale(options.width, options.height), + skewRadians(toRadians(options.xSkew), toRadians(options.ySkew)), + drawObject(name), + popGraphicsState() + ].filter(Boolean); +}; +var drawPage = function(name, options) { + return [ + pushGraphicsState(), + options.graphicsState && setGraphicsState(options.graphicsState), + translate(options.x, options.y), + rotateRadians(toRadians(options.rotate)), + scale(options.xScale, options.yScale), + skewRadians(toRadians(options.xSkew), toRadians(options.ySkew)), + drawObject(name), + popGraphicsState() + ].filter(Boolean); +}; +var drawLine = function(options) { + var _a, _b; + return [ + pushGraphicsState(), + options.graphicsState && setGraphicsState(options.graphicsState), + options.color && setStrokingColor(options.color), + setLineWidth(options.thickness), + setDashPattern((_a = options.dashArray) !== null && _a !== void 0 ? _a : [], (_b = options.dashPhase) !== null && _b !== void 0 ? _b : 0), + moveTo(options.start.x, options.start.y), + options.lineCap && setLineCap(options.lineCap), + moveTo(options.start.x, options.start.y), + lineTo(options.end.x, options.end.y), + stroke(), + popGraphicsState() + ].filter(Boolean); +}; +var drawRectangle = function(options) { + var _a, _b; + return [ + pushGraphicsState(), + options.graphicsState && setGraphicsState(options.graphicsState), + options.color && setFillingColor(options.color), + options.borderColor && setStrokingColor(options.borderColor), + setLineWidth(options.borderWidth), + options.borderLineCap && setLineCap(options.borderLineCap), + setDashPattern((_a = options.borderDashArray) !== null && _a !== void 0 ? _a : [], (_b = options.borderDashPhase) !== null && _b !== void 0 ? _b : 0), + translate(options.x, options.y), + rotateRadians(toRadians(options.rotate)), + skewRadians(toRadians(options.xSkew), toRadians(options.ySkew)), + moveTo(0, 0), + lineTo(0, options.height), + lineTo(options.width, options.height), + lineTo(options.width, 0), + closePath(), + // prettier-ignore + options.color && options.borderWidth ? fillAndStroke() : options.color ? fill() : options.borderColor ? stroke() : closePath(), + popGraphicsState() + ].filter(Boolean); +}; +var KAPPA = 4 * ((Math.sqrt(2) - 1) / 3); +var drawEllipsePath = function(config) { + var x = asNumber(config.x); + var y = asNumber(config.y); + var xScale = asNumber(config.xScale); + var yScale = asNumber(config.yScale); + x -= xScale; + y -= yScale; + var ox = xScale * KAPPA; + var oy = yScale * KAPPA; + var xe = x + xScale * 2; + var ye = y + yScale * 2; + var xm = x + xScale; + var ym = y + yScale; + return [ + pushGraphicsState(), + moveTo(x, ym), + appendBezierCurve(x, ym - oy, xm - ox, y, xm, y), + appendBezierCurve(xm + ox, y, xe, ym - oy, xe, ym), + appendBezierCurve(xe, ym + oy, xm + ox, ye, xm, ye), + appendBezierCurve(xm - ox, ye, x, ym + oy, x, ym), + popGraphicsState() + ]; +}; +var drawEllipseCurves = function(config) { + var centerX = asNumber(config.x); + var centerY = asNumber(config.y); + var xScale = asNumber(config.xScale); + var yScale = asNumber(config.yScale); + var x = -xScale; + var y = -yScale; + var ox = xScale * KAPPA; + var oy = yScale * KAPPA; + var xe = x + xScale * 2; + var ye = y + yScale * 2; + var xm = x + xScale; + var ym = y + yScale; + return [ + translate(centerX, centerY), + rotateRadians(toRadians(config.rotate)), + moveTo(x, ym), + appendBezierCurve(x, ym - oy, xm - ox, y, xm, y), + appendBezierCurve(xm + ox, y, xe, ym - oy, xe, ym), + appendBezierCurve(xe, ym + oy, xm + ox, ye, xm, ye), + appendBezierCurve(xm - ox, ye, x, ym + oy, x, ym) + ]; +}; +var drawEllipse = function(options) { + var _a, _b, _c; + return __spreadArrays([ + pushGraphicsState(), + options.graphicsState && setGraphicsState(options.graphicsState), + options.color && setFillingColor(options.color), + options.borderColor && setStrokingColor(options.borderColor), + setLineWidth(options.borderWidth), + options.borderLineCap && setLineCap(options.borderLineCap), + setDashPattern((_a = options.borderDashArray) !== null && _a !== void 0 ? _a : [], (_b = options.borderDashPhase) !== null && _b !== void 0 ? _b : 0) + ], options.rotate === void 0 ? drawEllipsePath({ + x: options.x, + y: options.y, + xScale: options.xScale, + yScale: options.yScale + }) : drawEllipseCurves({ + x: options.x, + y: options.y, + xScale: options.xScale, + yScale: options.yScale, + rotate: (_c = options.rotate) !== null && _c !== void 0 ? _c : degrees(0) + }), [ + // prettier-ignore + options.color && options.borderWidth ? fillAndStroke() : options.color ? fill() : options.borderColor ? stroke() : closePath(), + popGraphicsState() + ]).filter(Boolean); +}; +var drawSvgPath = function(path2, options) { + var _a, _b, _c; + return __spreadArrays([ + pushGraphicsState(), + options.graphicsState && setGraphicsState(options.graphicsState), + translate(options.x, options.y), + rotateRadians(toRadians((_a = options.rotate) !== null && _a !== void 0 ? _a : degrees(0))), + // SVG path Y axis is opposite pdf-lib's + options.scale ? scale(options.scale, -options.scale) : scale(1, -1), + options.color && setFillingColor(options.color), + options.borderColor && setStrokingColor(options.borderColor), + options.borderWidth && setLineWidth(options.borderWidth), + options.borderLineCap && setLineCap(options.borderLineCap), + setDashPattern((_b = options.borderDashArray) !== null && _b !== void 0 ? _b : [], (_c = options.borderDashPhase) !== null && _c !== void 0 ? _c : 0) + ], svgPathToOperators(path2), [ + // prettier-ignore + options.color && options.borderWidth ? fillAndStroke() : options.color ? fill() : options.borderColor ? stroke() : closePath(), + popGraphicsState() + ]).filter(Boolean); +}; +var drawCheckMark = function(options) { + var size = asNumber(options.size); + var p2x = -1 + 0.75; + var p2y = -1 + 0.51; + var p3y = 1 - 0.525; + var p3x = 1 - 0.31; + var p1x = -1 + 0.325; + var p1y = -((p1x - p2x) * (p3x - p2x)) / (p3y - p2y) + p2y; + return [ + pushGraphicsState(), + options.color && setStrokingColor(options.color), + setLineWidth(options.thickness), + translate(options.x, options.y), + moveTo(p1x * size, p1y * size), + lineTo(p2x * size, p2y * size), + lineTo(p3x * size, p3y * size), + stroke(), + popGraphicsState() + ].filter(Boolean); +}; +var rotateInPlace = function(options) { + return options.rotation === 0 ? [ + translate(0, 0), + rotateDegrees(0) + ] : options.rotation === 90 ? [ + translate(options.width, 0), + rotateDegrees(90) + ] : options.rotation === 180 ? [ + translate(options.width, options.height), + rotateDegrees(180) + ] : options.rotation === 270 ? [ + translate(0, options.height), + rotateDegrees(270) + ] : []; +}; +var drawCheckBox = function(options) { + var outline = drawRectangle({ + x: options.x, + y: options.y, + width: options.width, + height: options.height, + borderWidth: options.borderWidth, + color: options.color, + borderColor: options.borderColor, + rotate: degrees(0), + xSkew: degrees(0), + ySkew: degrees(0) + }); + if (!options.filled) + return outline; + var width = asNumber(options.width); + var height = asNumber(options.height); + var checkMarkSize = Math.min(width, height) / 2; + var checkMark = drawCheckMark({ + x: width / 2, + y: height / 2, + size: checkMarkSize, + thickness: options.thickness, + color: options.markColor + }); + return __spreadArrays([pushGraphicsState()], outline, checkMark, [popGraphicsState()]); +}; +var drawRadioButton = function(options) { + var width = asNumber(options.width); + var height = asNumber(options.height); + var outlineScale = Math.min(width, height) / 2; + var outline = drawEllipse({ + x: options.x, + y: options.y, + xScale: outlineScale, + yScale: outlineScale, + color: options.color, + borderColor: options.borderColor, + borderWidth: options.borderWidth + }); + if (!options.filled) + return outline; + var dot = drawEllipse({ + x: options.x, + y: options.y, + xScale: outlineScale * 0.45, + yScale: outlineScale * 0.45, + color: options.dotColor, + borderColor: void 0, + borderWidth: 0 + }); + return __spreadArrays([pushGraphicsState()], outline, dot, [popGraphicsState()]); +}; +var drawButton = function(options) { + var x = asNumber(options.x); + var y = asNumber(options.y); + var width = asNumber(options.width); + var height = asNumber(options.height); + var background = drawRectangle({ + x, + y, + width, + height, + borderWidth: options.borderWidth, + color: options.color, + borderColor: options.borderColor, + rotate: degrees(0), + xSkew: degrees(0), + ySkew: degrees(0) + }); + var lines = drawTextLines(options.textLines, { + color: options.textColor, + font: options.font, + size: options.fontSize, + rotate: degrees(0), + xSkew: degrees(0), + ySkew: degrees(0) + }); + return __spreadArrays([pushGraphicsState()], background, lines, [popGraphicsState()]); +}; +var drawTextLines = function(lines, options) { + var operators = [ + beginText(), + setFillingColor(options.color), + setFontAndSize(options.font, options.size) + ]; + for (var idx = 0, len = lines.length; idx < len; idx++) { + var _a = lines[idx], encoded = _a.encoded, x = _a.x, y = _a.y; + operators.push(rotateAndSkewTextRadiansAndTranslate(toRadians(options.rotate), toRadians(options.xSkew), toRadians(options.ySkew), x, y), showText(encoded)); + } + operators.push(endText()); + return operators; +}; +var drawTextField = function(options) { + var x = asNumber(options.x); + var y = asNumber(options.y); + var width = asNumber(options.width); + var height = asNumber(options.height); + var borderWidth = asNumber(options.borderWidth); + var padding = asNumber(options.padding); + var clipX = x + borderWidth / 2 + padding; + var clipY = y + borderWidth / 2 + padding; + var clipWidth = width - (borderWidth / 2 + padding) * 2; + var clipHeight = height - (borderWidth / 2 + padding) * 2; + var clippingArea = [ + moveTo(clipX, clipY), + lineTo(clipX, clipY + clipHeight), + lineTo(clipX + clipWidth, clipY + clipHeight), + lineTo(clipX + clipWidth, clipY), + closePath(), + clip(), + endPath() + ]; + var background = drawRectangle({ + x, + y, + width, + height, + borderWidth: options.borderWidth, + color: options.color, + borderColor: options.borderColor, + rotate: degrees(0), + xSkew: degrees(0), + ySkew: degrees(0) + }); + var lines = drawTextLines(options.textLines, { + color: options.textColor, + font: options.font, + size: options.fontSize, + rotate: degrees(0), + xSkew: degrees(0), + ySkew: degrees(0) + }); + var markedContent = __spreadArrays([ + beginMarkedContent("Tx"), + pushGraphicsState() + ], lines, [ + popGraphicsState(), + endMarkedContent() + ]); + return __spreadArrays([ + pushGraphicsState() + ], background, clippingArea, markedContent, [ + popGraphicsState() + ]); +}; +var drawOptionList = function(options) { + var x = asNumber(options.x); + var y = asNumber(options.y); + var width = asNumber(options.width); + var height = asNumber(options.height); + var lineHeight = asNumber(options.lineHeight); + var borderWidth = asNumber(options.borderWidth); + var padding = asNumber(options.padding); + var clipX = x + borderWidth / 2 + padding; + var clipY = y + borderWidth / 2 + padding; + var clipWidth = width - (borderWidth / 2 + padding) * 2; + var clipHeight = height - (borderWidth / 2 + padding) * 2; + var clippingArea = [ + moveTo(clipX, clipY), + lineTo(clipX, clipY + clipHeight), + lineTo(clipX + clipWidth, clipY + clipHeight), + lineTo(clipX + clipWidth, clipY), + closePath(), + clip(), + endPath() + ]; + var background = drawRectangle({ + x, + y, + width, + height, + borderWidth: options.borderWidth, + color: options.color, + borderColor: options.borderColor, + rotate: degrees(0), + xSkew: degrees(0), + ySkew: degrees(0) + }); + var highlights = []; + for (var idx = 0, len = options.selectedLines.length; idx < len; idx++) { + var line = options.textLines[options.selectedLines[idx]]; + highlights.push.apply(highlights, drawRectangle({ + x: line.x - padding, + y: line.y - (lineHeight - line.height) / 2, + width: width - borderWidth, + height: line.height + (lineHeight - line.height) / 2, + borderWidth: 0, + color: options.selectedColor, + borderColor: void 0, + rotate: degrees(0), + xSkew: degrees(0), + ySkew: degrees(0) + })); + } + var lines = drawTextLines(options.textLines, { + color: options.textColor, + font: options.font, + size: options.fontSize, + rotate: degrees(0), + xSkew: degrees(0), + ySkew: degrees(0) + }); + var markedContent = __spreadArrays([ + beginMarkedContent("Tx"), + pushGraphicsState() + ], lines, [ + popGraphicsState(), + endMarkedContent() + ]); + return __spreadArrays([ + pushGraphicsState() + ], background, highlights, clippingArea, markedContent, [ + popGraphicsState() + ]); +}; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/api/errors.js +var EncryptedPDFError = ( + /** @class */ + function(_super) { + __extends(EncryptedPDFError2, _super); + function EncryptedPDFError2() { + var _this = this; + var msg = "Input document to `PDFDocument.load` is encrypted. You can use `PDFDocument.load(..., { ignoreEncryption: true })` if you wish to load the document anyways."; + _this = _super.call(this, msg) || this; + return _this; + } + return EncryptedPDFError2; + }(Error) +); +var FontkitNotRegisteredError = ( + /** @class */ + function(_super) { + __extends(FontkitNotRegisteredError2, _super); + function FontkitNotRegisteredError2() { + var _this = this; + var msg = "Input to `PDFDocument.embedFont` was a custom font, but no `fontkit` instance was found. You must register a `fontkit` instance with `PDFDocument.registerFontkit(...)` before embedding custom fonts."; + _this = _super.call(this, msg) || this; + return _this; + } + return FontkitNotRegisteredError2; + }(Error) +); +var ForeignPageError = ( + /** @class */ + function(_super) { + __extends(ForeignPageError2, _super); + function ForeignPageError2() { + var _this = this; + var msg = "A `page` passed to `PDFDocument.addPage` or `PDFDocument.insertPage` was from a different (foreign) PDF document. If you want to copy pages from one PDFDocument to another, you must use `PDFDocument.copyPages(...)` to copy the pages before adding or inserting them."; + _this = _super.call(this, msg) || this; + return _this; + } + return ForeignPageError2; + }(Error) +); +var RemovePageFromEmptyDocumentError = ( + /** @class */ + function(_super) { + __extends(RemovePageFromEmptyDocumentError2, _super); + function RemovePageFromEmptyDocumentError2() { + var _this = this; + var msg = "PDFDocument has no pages so `PDFDocument.removePage` cannot be called"; + _this = _super.call(this, msg) || this; + return _this; + } + return RemovePageFromEmptyDocumentError2; + }(Error) +); +var NoSuchFieldError = ( + /** @class */ + function(_super) { + __extends(NoSuchFieldError2, _super); + function NoSuchFieldError2(name) { + var _this = this; + var msg = 'PDFDocument has no form field with the name "' + name + '"'; + _this = _super.call(this, msg) || this; + return _this; + } + return NoSuchFieldError2; + }(Error) +); +var UnexpectedFieldTypeError = ( + /** @class */ + function(_super) { + __extends(UnexpectedFieldTypeError2, _super); + function UnexpectedFieldTypeError2(name, expected, actual) { + var _a, _b; + var _this = this; + var expectedType = expected === null || expected === void 0 ? void 0 : expected.name; + var actualType = (_b = (_a = actual === null || actual === void 0 ? void 0 : actual.constructor) === null || _a === void 0 ? void 0 : _a.name) !== null && _b !== void 0 ? _b : actual; + var msg = 'Expected field "' + name + '" to be of type ' + expectedType + ", " + ("but it is actually of type " + actualType); + _this = _super.call(this, msg) || this; + return _this; + } + return UnexpectedFieldTypeError2; + }(Error) +); +var MissingOnValueCheckError = ( + /** @class */ + function(_super) { + __extends(MissingOnValueCheckError2, _super); + function MissingOnValueCheckError2(onValue) { + var _this = this; + var msg = 'Failed to select check box due to missing onValue: "' + onValue + '"'; + _this = _super.call(this, msg) || this; + return _this; + } + return MissingOnValueCheckError2; + }(Error) +); +var FieldAlreadyExistsError = ( + /** @class */ + function(_super) { + __extends(FieldAlreadyExistsError2, _super); + function FieldAlreadyExistsError2(name) { + var _this = this; + var msg = 'A field already exists with the specified name: "' + name + '"'; + _this = _super.call(this, msg) || this; + return _this; + } + return FieldAlreadyExistsError2; + }(Error) +); +var InvalidFieldNamePartError = ( + /** @class */ + function(_super) { + __extends(InvalidFieldNamePartError2, _super); + function InvalidFieldNamePartError2(namePart) { + var _this = this; + var msg = 'Field name contains invalid component: "' + namePart + '"'; + _this = _super.call(this, msg) || this; + return _this; + } + return InvalidFieldNamePartError2; + }(Error) +); +var FieldExistsAsNonTerminalError = ( + /** @class */ + function(_super) { + __extends(FieldExistsAsNonTerminalError2, _super); + function FieldExistsAsNonTerminalError2(name) { + var _this = this; + var msg = 'A non-terminal field already exists with the specified name: "' + name + '"'; + _this = _super.call(this, msg) || this; + return _this; + } + return FieldExistsAsNonTerminalError2; + }(Error) +); +var RichTextFieldReadError = ( + /** @class */ + function(_super) { + __extends(RichTextFieldReadError2, _super); + function RichTextFieldReadError2(fieldName) { + var _this = this; + var msg = "Reading rich text fields is not supported: Attempted to read rich text field: " + fieldName; + _this = _super.call(this, msg) || this; + return _this; + } + return RichTextFieldReadError2; + }(Error) +); +var CombedTextLayoutError = ( + /** @class */ + function(_super) { + __extends(CombedTextLayoutError2, _super); + function CombedTextLayoutError2(lineLength, cellCount) { + var _this = this; + var msg = "Failed to layout combed text as lineLength=" + lineLength + " is greater than cellCount=" + cellCount; + _this = _super.call(this, msg) || this; + return _this; + } + return CombedTextLayoutError2; + }(Error) +); +var ExceededMaxLengthError = ( + /** @class */ + function(_super) { + __extends(ExceededMaxLengthError2, _super); + function ExceededMaxLengthError2(textLength, maxLength, name) { + var _this = this; + var msg = "Attempted to set text with length=" + textLength + " for TextField with maxLength=" + maxLength + " and name=" + name; + _this = _super.call(this, msg) || this; + return _this; + } + return ExceededMaxLengthError2; + }(Error) +); +var InvalidMaxLengthError = ( + /** @class */ + function(_super) { + __extends(InvalidMaxLengthError2, _super); + function InvalidMaxLengthError2(textLength, maxLength, name) { + var _this = this; + var msg = "Attempted to set maxLength=" + maxLength + ", which is less than " + textLength + ", the length of this field's current value (name=" + name + ")"; + _this = _super.call(this, msg) || this; + return _this; + } + return InvalidMaxLengthError2; + }(Error) +); + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/api/text/alignment.js +var TextAlignment; +(function(TextAlignment2) { + TextAlignment2[TextAlignment2["Left"] = 0] = "Left"; + TextAlignment2[TextAlignment2["Center"] = 1] = "Center"; + TextAlignment2[TextAlignment2["Right"] = 2] = "Right"; +})(TextAlignment || (TextAlignment = {})); + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/api/text/layout.js +var MIN_FONT_SIZE = 4; +var MAX_FONT_SIZE = 500; +var computeFontSize = function(lines, font, bounds, multiline) { + if (multiline === void 0) { + multiline = false; + } + var fontSize = MIN_FONT_SIZE; + while (fontSize < MAX_FONT_SIZE) { + var linesUsed = 0; + for (var lineIdx = 0, lineLen = lines.length; lineIdx < lineLen; lineIdx++) { + linesUsed += 1; + var line = lines[lineIdx]; + var words = line.split(" "); + var spaceInLineRemaining = bounds.width; + for (var idx = 0, len = words.length; idx < len; idx++) { + var isLastWord = idx === len - 1; + var word = isLastWord ? words[idx] : words[idx] + " "; + var widthOfWord = font.widthOfTextAtSize(word, fontSize); + spaceInLineRemaining -= widthOfWord; + if (spaceInLineRemaining <= 0) { + linesUsed += 1; + spaceInLineRemaining = bounds.width - widthOfWord; + } + } + } + if (!multiline && linesUsed > lines.length) + return fontSize - 1; + var height = font.heightAtSize(fontSize); + var lineHeight = height + height * 0.2; + var totalHeight = lineHeight * linesUsed; + if (totalHeight > Math.abs(bounds.height)) + return fontSize - 1; + fontSize += 1; + } + return fontSize; +}; +var computeCombedFontSize = function(line, font, bounds, cellCount) { + var cellWidth = bounds.width / cellCount; + var cellHeight = bounds.height; + var fontSize = MIN_FONT_SIZE; + var chars3 = charSplit(line); + while (fontSize < MAX_FONT_SIZE) { + for (var idx = 0, len = chars3.length; idx < len; idx++) { + var c = chars3[idx]; + var tooLong = font.widthOfTextAtSize(c, fontSize) > cellWidth * 0.75; + if (tooLong) + return fontSize - 1; + } + var height = font.heightAtSize(fontSize, { descender: false }); + if (height > cellHeight) + return fontSize - 1; + fontSize += 1; + } + return fontSize; +}; +var lastIndexOfWhitespace = function(line) { + for (var idx = line.length; idx > 0; idx--) { + if (/\s/.test(line[idx])) + return idx; + } + return void 0; +}; +var splitOutLines = function(input, maxWidth, font, fontSize) { + var _a; + var lastWhitespaceIdx = input.length; + while (lastWhitespaceIdx > 0) { + var line = input.substring(0, lastWhitespaceIdx); + var encoded = font.encodeText(line); + var width = font.widthOfTextAtSize(line, fontSize); + if (width < maxWidth) { + var remainder = input.substring(lastWhitespaceIdx) || void 0; + return { line, encoded, width, remainder }; + } + lastWhitespaceIdx = (_a = lastIndexOfWhitespace(line)) !== null && _a !== void 0 ? _a : 0; + } + return { + line: input, + encoded: font.encodeText(input), + width: font.widthOfTextAtSize(input, fontSize), + remainder: void 0 + }; +}; +var layoutMultilineText = function(text, _a) { + var alignment = _a.alignment, fontSize = _a.fontSize, font = _a.font, bounds = _a.bounds; + var lines = lineSplit(cleanText(text)); + if (fontSize === void 0 || fontSize === 0) { + fontSize = computeFontSize(lines, font, bounds, true); + } + var height = font.heightAtSize(fontSize); + var lineHeight = height + height * 0.2; + var textLines = []; + var minX = bounds.x; + var minY = bounds.y; + var maxX = bounds.x + bounds.width; + var maxY = bounds.y + bounds.height; + var y = bounds.y + bounds.height; + for (var idx = 0, len = lines.length; idx < len; idx++) { + var prevRemainder = lines[idx]; + while (prevRemainder !== void 0) { + var _b = splitOutLines(prevRemainder, bounds.width, font, fontSize), line = _b.line, encoded = _b.encoded, width = _b.width, remainder = _b.remainder; + var x = alignment === TextAlignment.Left ? bounds.x : alignment === TextAlignment.Center ? bounds.x + bounds.width / 2 - width / 2 : alignment === TextAlignment.Right ? bounds.x + bounds.width - width : bounds.x; + y -= lineHeight; + if (x < minX) + minX = x; + if (y < minY) + minY = y; + if (x + width > maxX) + maxX = x + width; + if (y + height > maxY) + maxY = y + height; + textLines.push({ text: line, encoded, width, height, x, y }); + prevRemainder = remainder === null || remainder === void 0 ? void 0 : remainder.trim(); + } + } + return { + fontSize, + lineHeight, + lines: textLines, + bounds: { + x: minX, + y: minY, + width: maxX - minX, + height: maxY - minY + } + }; +}; +var layoutCombedText = function(text, _a) { + var fontSize = _a.fontSize, font = _a.font, bounds = _a.bounds, cellCount = _a.cellCount; + var line = mergeLines(cleanText(text)); + if (line.length > cellCount) { + throw new CombedTextLayoutError(line.length, cellCount); + } + if (fontSize === void 0 || fontSize === 0) { + fontSize = computeCombedFontSize(line, font, bounds, cellCount); + } + var cellWidth = bounds.width / cellCount; + var height = font.heightAtSize(fontSize, { descender: false }); + var y = bounds.y + (bounds.height / 2 - height / 2); + var cells = []; + var minX = bounds.x; + var minY = bounds.y; + var maxX = bounds.x + bounds.width; + var maxY = bounds.y + bounds.height; + var cellOffset = 0; + var charOffset = 0; + while (cellOffset < cellCount) { + var _b = charAtIndex(line, charOffset), char = _b[0], charLength = _b[1]; + var encoded = font.encodeText(char); + var width = font.widthOfTextAtSize(char, fontSize); + var cellCenter = bounds.x + (cellWidth * cellOffset + cellWidth / 2); + var x = cellCenter - width / 2; + if (x < minX) + minX = x; + if (y < minY) + minY = y; + if (x + width > maxX) + maxX = x + width; + if (y + height > maxY) + maxY = y + height; + cells.push({ text: line, encoded, width, height, x, y }); + cellOffset += 1; + charOffset += charLength; + } + return { + fontSize, + cells, + bounds: { + x: minX, + y: minY, + width: maxX - minX, + height: maxY - minY + } + }; +}; +var layoutSinglelineText = function(text, _a) { + var alignment = _a.alignment, fontSize = _a.fontSize, font = _a.font, bounds = _a.bounds; + var line = mergeLines(cleanText(text)); + if (fontSize === void 0 || fontSize === 0) { + fontSize = computeFontSize([line], font, bounds); + } + var encoded = font.encodeText(line); + var width = font.widthOfTextAtSize(line, fontSize); + var height = font.heightAtSize(fontSize, { descender: false }); + var x = alignment === TextAlignment.Left ? bounds.x : alignment === TextAlignment.Center ? bounds.x + bounds.width / 2 - width / 2 : alignment === TextAlignment.Right ? bounds.x + bounds.width - width : bounds.x; + var y = bounds.y + (bounds.height / 2 - height / 2); + return { + fontSize, + line: { text: line, encoded, width, height, x, y }, + bounds: { x, y, width, height } + }; +}; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/api/form/appearances.js +var normalizeAppearance = function(appearance) { + if ("normal" in appearance) + return appearance; + return { normal: appearance }; +}; +var tfRegex2 = /\/([^\0\t\n\f\r\ ]+)[\0\t\n\f\r\ ]+(\d*\.\d+|\d+)[\0\t\n\f\r\ ]+Tf/; +var getDefaultFontSize = function(field) { + var _a, _b; + var da = (_a = field.getDefaultAppearance()) !== null && _a !== void 0 ? _a : ""; + var daMatch = (_b = findLastMatch(da, tfRegex2).match) !== null && _b !== void 0 ? _b : []; + var defaultFontSize = Number(daMatch[2]); + return isFinite(defaultFontSize) ? defaultFontSize : void 0; +}; +var colorRegex = /(\d*\.\d+|\d+)[\0\t\n\f\r\ ]*(\d*\.\d+|\d+)?[\0\t\n\f\r\ ]*(\d*\.\d+|\d+)?[\0\t\n\f\r\ ]*(\d*\.\d+|\d+)?[\0\t\n\f\r\ ]+(g|rg|k)/; +var getDefaultColor = function(field) { + var _a; + var da = (_a = field.getDefaultAppearance()) !== null && _a !== void 0 ? _a : ""; + var daMatch = findLastMatch(da, colorRegex).match; + var _b = daMatch !== null && daMatch !== void 0 ? daMatch : [], c1 = _b[1], c2 = _b[2], c3 = _b[3], c4 = _b[4], colorSpace = _b[5]; + if (colorSpace === "g" && c1) { + return grayscale(Number(c1)); + } + if (colorSpace === "rg" && c1 && c2 && c3) { + return rgb(Number(c1), Number(c2), Number(c3)); + } + if (colorSpace === "k" && c1 && c2 && c3 && c4) { + return cmyk(Number(c1), Number(c2), Number(c3), Number(c4)); + } + return void 0; +}; +var updateDefaultAppearance = function(field, color, font, fontSize) { + var _a; + if (fontSize === void 0) { + fontSize = 0; + } + var da = [ + setFillingColor(color).toString(), + setFontAndSize((_a = font === null || font === void 0 ? void 0 : font.name) !== null && _a !== void 0 ? _a : "dummy__noop", fontSize).toString() + ].join("\n"); + field.setDefaultAppearance(da); +}; +var defaultCheckBoxAppearanceProvider = function(checkBox, widget) { + var _a, _b, _c; + var widgetColor = getDefaultColor(widget); + var fieldColor = getDefaultColor(checkBox.acroField); + var rectangle = widget.getRectangle(); + var ap = widget.getAppearanceCharacteristics(); + var bs = widget.getBorderStyle(); + var borderWidth = (_a = bs === null || bs === void 0 ? void 0 : bs.getWidth()) !== null && _a !== void 0 ? _a : 0; + var rotation = reduceRotation(ap === null || ap === void 0 ? void 0 : ap.getRotation()); + var _d = adjustDimsForRotation(rectangle, rotation), width = _d.width, height = _d.height; + var rotate = rotateInPlace(__assign(__assign({}, rectangle), { rotation })); + var black = rgb(0, 0, 0); + var borderColor = (_b = componentsToColor(ap === null || ap === void 0 ? void 0 : ap.getBorderColor())) !== null && _b !== void 0 ? _b : black; + var normalBackgroundColor = componentsToColor(ap === null || ap === void 0 ? void 0 : ap.getBackgroundColor()); + var downBackgroundColor = componentsToColor(ap === null || ap === void 0 ? void 0 : ap.getBackgroundColor(), 0.8); + var textColor = (_c = widgetColor !== null && widgetColor !== void 0 ? widgetColor : fieldColor) !== null && _c !== void 0 ? _c : black; + if (widgetColor) { + updateDefaultAppearance(widget, textColor); + } else { + updateDefaultAppearance(checkBox.acroField, textColor); + } + var options = { + x: 0 + borderWidth / 2, + y: 0 + borderWidth / 2, + width: width - borderWidth, + height: height - borderWidth, + thickness: 1.5, + borderWidth, + borderColor, + markColor: textColor + }; + return { + normal: { + on: __spreadArrays(rotate, drawCheckBox(__assign(__assign({}, options), { color: normalBackgroundColor, filled: true }))), + off: __spreadArrays(rotate, drawCheckBox(__assign(__assign({}, options), { color: normalBackgroundColor, filled: false }))) + }, + down: { + on: __spreadArrays(rotate, drawCheckBox(__assign(__assign({}, options), { color: downBackgroundColor, filled: true }))), + off: __spreadArrays(rotate, drawCheckBox(__assign(__assign({}, options), { color: downBackgroundColor, filled: false }))) + } + }; +}; +var defaultRadioGroupAppearanceProvider = function(radioGroup, widget) { + var _a, _b, _c; + var widgetColor = getDefaultColor(widget); + var fieldColor = getDefaultColor(radioGroup.acroField); + var rectangle = widget.getRectangle(); + var ap = widget.getAppearanceCharacteristics(); + var bs = widget.getBorderStyle(); + var borderWidth = (_a = bs === null || bs === void 0 ? void 0 : bs.getWidth()) !== null && _a !== void 0 ? _a : 0; + var rotation = reduceRotation(ap === null || ap === void 0 ? void 0 : ap.getRotation()); + var _d = adjustDimsForRotation(rectangle, rotation), width = _d.width, height = _d.height; + var rotate = rotateInPlace(__assign(__assign({}, rectangle), { rotation })); + var black = rgb(0, 0, 0); + var borderColor = (_b = componentsToColor(ap === null || ap === void 0 ? void 0 : ap.getBorderColor())) !== null && _b !== void 0 ? _b : black; + var normalBackgroundColor = componentsToColor(ap === null || ap === void 0 ? void 0 : ap.getBackgroundColor()); + var downBackgroundColor = componentsToColor(ap === null || ap === void 0 ? void 0 : ap.getBackgroundColor(), 0.8); + var textColor = (_c = widgetColor !== null && widgetColor !== void 0 ? widgetColor : fieldColor) !== null && _c !== void 0 ? _c : black; + if (widgetColor) { + updateDefaultAppearance(widget, textColor); + } else { + updateDefaultAppearance(radioGroup.acroField, textColor); + } + var options = { + x: width / 2, + y: height / 2, + width: width - borderWidth, + height: height - borderWidth, + borderWidth, + borderColor, + dotColor: textColor + }; + return { + normal: { + on: __spreadArrays(rotate, drawRadioButton(__assign(__assign({}, options), { color: normalBackgroundColor, filled: true }))), + off: __spreadArrays(rotate, drawRadioButton(__assign(__assign({}, options), { color: normalBackgroundColor, filled: false }))) + }, + down: { + on: __spreadArrays(rotate, drawRadioButton(__assign(__assign({}, options), { color: downBackgroundColor, filled: true }))), + off: __spreadArrays(rotate, drawRadioButton(__assign(__assign({}, options), { color: downBackgroundColor, filled: false }))) + } + }; +}; +var defaultButtonAppearanceProvider = function(button, widget, font) { + var _a, _b, _c, _d, _e; + var widgetColor = getDefaultColor(widget); + var fieldColor = getDefaultColor(button.acroField); + var widgetFontSize = getDefaultFontSize(widget); + var fieldFontSize = getDefaultFontSize(button.acroField); + var rectangle = widget.getRectangle(); + var ap = widget.getAppearanceCharacteristics(); + var bs = widget.getBorderStyle(); + var captions = ap === null || ap === void 0 ? void 0 : ap.getCaptions(); + var normalText = (_a = captions === null || captions === void 0 ? void 0 : captions.normal) !== null && _a !== void 0 ? _a : ""; + var downText = (_c = (_b = captions === null || captions === void 0 ? void 0 : captions.down) !== null && _b !== void 0 ? _b : normalText) !== null && _c !== void 0 ? _c : ""; + var borderWidth = (_d = bs === null || bs === void 0 ? void 0 : bs.getWidth()) !== null && _d !== void 0 ? _d : 0; + var rotation = reduceRotation(ap === null || ap === void 0 ? void 0 : ap.getRotation()); + var _f = adjustDimsForRotation(rectangle, rotation), width = _f.width, height = _f.height; + var rotate = rotateInPlace(__assign(__assign({}, rectangle), { rotation })); + var black = rgb(0, 0, 0); + var borderColor = componentsToColor(ap === null || ap === void 0 ? void 0 : ap.getBorderColor()); + var normalBackgroundColor = componentsToColor(ap === null || ap === void 0 ? void 0 : ap.getBackgroundColor()); + var downBackgroundColor = componentsToColor(ap === null || ap === void 0 ? void 0 : ap.getBackgroundColor(), 0.8); + var bounds = { + x: borderWidth, + y: borderWidth, + width: width - borderWidth * 2, + height: height - borderWidth * 2 + }; + var normalLayout = layoutSinglelineText(normalText, { + alignment: TextAlignment.Center, + fontSize: widgetFontSize !== null && widgetFontSize !== void 0 ? widgetFontSize : fieldFontSize, + font, + bounds + }); + var downLayout = layoutSinglelineText(downText, { + alignment: TextAlignment.Center, + fontSize: widgetFontSize !== null && widgetFontSize !== void 0 ? widgetFontSize : fieldFontSize, + font, + bounds + }); + var fontSize = Math.min(normalLayout.fontSize, downLayout.fontSize); + var textColor = (_e = widgetColor !== null && widgetColor !== void 0 ? widgetColor : fieldColor) !== null && _e !== void 0 ? _e : black; + if (widgetColor || widgetFontSize !== void 0) { + updateDefaultAppearance(widget, textColor, font, fontSize); + } else { + updateDefaultAppearance(button.acroField, textColor, font, fontSize); + } + var options = { + x: 0 + borderWidth / 2, + y: 0 + borderWidth / 2, + width: width - borderWidth, + height: height - borderWidth, + borderWidth, + borderColor, + textColor, + font: font.name, + fontSize + }; + return { + normal: __spreadArrays(rotate, drawButton(__assign(__assign({}, options), { color: normalBackgroundColor, textLines: [normalLayout.line] }))), + down: __spreadArrays(rotate, drawButton(__assign(__assign({}, options), { color: downBackgroundColor, textLines: [downLayout.line] }))) + }; +}; +var defaultTextFieldAppearanceProvider = function(textField, widget, font) { + var _a, _b, _c, _d; + var widgetColor = getDefaultColor(widget); + var fieldColor = getDefaultColor(textField.acroField); + var widgetFontSize = getDefaultFontSize(widget); + var fieldFontSize = getDefaultFontSize(textField.acroField); + var rectangle = widget.getRectangle(); + var ap = widget.getAppearanceCharacteristics(); + var bs = widget.getBorderStyle(); + var text = (_a = textField.getText()) !== null && _a !== void 0 ? _a : ""; + var borderWidth = (_b = bs === null || bs === void 0 ? void 0 : bs.getWidth()) !== null && _b !== void 0 ? _b : 0; + var rotation = reduceRotation(ap === null || ap === void 0 ? void 0 : ap.getRotation()); + var _e = adjustDimsForRotation(rectangle, rotation), width = _e.width, height = _e.height; + var rotate = rotateInPlace(__assign(__assign({}, rectangle), { rotation })); + var black = rgb(0, 0, 0); + var borderColor = componentsToColor(ap === null || ap === void 0 ? void 0 : ap.getBorderColor()); + var normalBackgroundColor = componentsToColor(ap === null || ap === void 0 ? void 0 : ap.getBackgroundColor()); + var textLines; + var fontSize; + var padding = textField.isCombed() ? 0 : 1; + var bounds = { + x: borderWidth + padding, + y: borderWidth + padding, + width: width - (borderWidth + padding) * 2, + height: height - (borderWidth + padding) * 2 + }; + if (textField.isMultiline()) { + var layout = layoutMultilineText(text, { + alignment: textField.getAlignment(), + fontSize: widgetFontSize !== null && widgetFontSize !== void 0 ? widgetFontSize : fieldFontSize, + font, + bounds + }); + textLines = layout.lines; + fontSize = layout.fontSize; + } else if (textField.isCombed()) { + var layout = layoutCombedText(text, { + fontSize: widgetFontSize !== null && widgetFontSize !== void 0 ? widgetFontSize : fieldFontSize, + font, + bounds, + cellCount: (_c = textField.getMaxLength()) !== null && _c !== void 0 ? _c : 0 + }); + textLines = layout.cells; + fontSize = layout.fontSize; + } else { + var layout = layoutSinglelineText(text, { + alignment: textField.getAlignment(), + fontSize: widgetFontSize !== null && widgetFontSize !== void 0 ? widgetFontSize : fieldFontSize, + font, + bounds + }); + textLines = [layout.line]; + fontSize = layout.fontSize; + } + var textColor = (_d = widgetColor !== null && widgetColor !== void 0 ? widgetColor : fieldColor) !== null && _d !== void 0 ? _d : black; + if (widgetColor || widgetFontSize !== void 0) { + updateDefaultAppearance(widget, textColor, font, fontSize); + } else { + updateDefaultAppearance(textField.acroField, textColor, font, fontSize); + } + var options = { + x: 0 + borderWidth / 2, + y: 0 + borderWidth / 2, + width: width - borderWidth, + height: height - borderWidth, + borderWidth: borderWidth !== null && borderWidth !== void 0 ? borderWidth : 0, + borderColor, + textColor, + font: font.name, + fontSize, + color: normalBackgroundColor, + textLines, + padding + }; + return __spreadArrays(rotate, drawTextField(options)); +}; +var defaultDropdownAppearanceProvider = function(dropdown, widget, font) { + var _a, _b, _c; + var widgetColor = getDefaultColor(widget); + var fieldColor = getDefaultColor(dropdown.acroField); + var widgetFontSize = getDefaultFontSize(widget); + var fieldFontSize = getDefaultFontSize(dropdown.acroField); + var rectangle = widget.getRectangle(); + var ap = widget.getAppearanceCharacteristics(); + var bs = widget.getBorderStyle(); + var text = (_a = dropdown.getSelected()[0]) !== null && _a !== void 0 ? _a : ""; + var borderWidth = (_b = bs === null || bs === void 0 ? void 0 : bs.getWidth()) !== null && _b !== void 0 ? _b : 0; + var rotation = reduceRotation(ap === null || ap === void 0 ? void 0 : ap.getRotation()); + var _d = adjustDimsForRotation(rectangle, rotation), width = _d.width, height = _d.height; + var rotate = rotateInPlace(__assign(__assign({}, rectangle), { rotation })); + var black = rgb(0, 0, 0); + var borderColor = componentsToColor(ap === null || ap === void 0 ? void 0 : ap.getBorderColor()); + var normalBackgroundColor = componentsToColor(ap === null || ap === void 0 ? void 0 : ap.getBackgroundColor()); + var padding = 1; + var bounds = { + x: borderWidth + padding, + y: borderWidth + padding, + width: width - (borderWidth + padding) * 2, + height: height - (borderWidth + padding) * 2 + }; + var _e = layoutSinglelineText(text, { + alignment: TextAlignment.Left, + fontSize: widgetFontSize !== null && widgetFontSize !== void 0 ? widgetFontSize : fieldFontSize, + font, + bounds + }), line = _e.line, fontSize = _e.fontSize; + var textColor = (_c = widgetColor !== null && widgetColor !== void 0 ? widgetColor : fieldColor) !== null && _c !== void 0 ? _c : black; + if (widgetColor || widgetFontSize !== void 0) { + updateDefaultAppearance(widget, textColor, font, fontSize); + } else { + updateDefaultAppearance(dropdown.acroField, textColor, font, fontSize); + } + var options = { + x: 0 + borderWidth / 2, + y: 0 + borderWidth / 2, + width: width - borderWidth, + height: height - borderWidth, + borderWidth: borderWidth !== null && borderWidth !== void 0 ? borderWidth : 0, + borderColor, + textColor, + font: font.name, + fontSize, + color: normalBackgroundColor, + textLines: [line], + padding + }; + return __spreadArrays(rotate, drawTextField(options)); +}; +var defaultOptionListAppearanceProvider = function(optionList, widget, font) { + var _a, _b; + var widgetColor = getDefaultColor(widget); + var fieldColor = getDefaultColor(optionList.acroField); + var widgetFontSize = getDefaultFontSize(widget); + var fieldFontSize = getDefaultFontSize(optionList.acroField); + var rectangle = widget.getRectangle(); + var ap = widget.getAppearanceCharacteristics(); + var bs = widget.getBorderStyle(); + var borderWidth = (_a = bs === null || bs === void 0 ? void 0 : bs.getWidth()) !== null && _a !== void 0 ? _a : 0; + var rotation = reduceRotation(ap === null || ap === void 0 ? void 0 : ap.getRotation()); + var _c = adjustDimsForRotation(rectangle, rotation), width = _c.width, height = _c.height; + var rotate = rotateInPlace(__assign(__assign({}, rectangle), { rotation })); + var black = rgb(0, 0, 0); + var borderColor = componentsToColor(ap === null || ap === void 0 ? void 0 : ap.getBorderColor()); + var normalBackgroundColor = componentsToColor(ap === null || ap === void 0 ? void 0 : ap.getBackgroundColor()); + var options = optionList.getOptions(); + var selected = optionList.getSelected(); + if (optionList.isSorted()) + options.sort(); + var text = ""; + for (var idx = 0, len = options.length; idx < len; idx++) { + text += options[idx]; + if (idx < len - 1) + text += "\n"; + } + var padding = 1; + var bounds = { + x: borderWidth + padding, + y: borderWidth + padding, + width: width - (borderWidth + padding) * 2, + height: height - (borderWidth + padding) * 2 + }; + var _d = layoutMultilineText(text, { + alignment: TextAlignment.Left, + fontSize: widgetFontSize !== null && widgetFontSize !== void 0 ? widgetFontSize : fieldFontSize, + font, + bounds + }), lines = _d.lines, fontSize = _d.fontSize, lineHeight = _d.lineHeight; + var selectedLines = []; + for (var idx = 0, len = lines.length; idx < len; idx++) { + var line = lines[idx]; + if (selected.includes(line.text)) + selectedLines.push(idx); + } + var blue = rgb(153 / 255, 193 / 255, 218 / 255); + var textColor = (_b = widgetColor !== null && widgetColor !== void 0 ? widgetColor : fieldColor) !== null && _b !== void 0 ? _b : black; + if (widgetColor || widgetFontSize !== void 0) { + updateDefaultAppearance(widget, textColor, font, fontSize); + } else { + updateDefaultAppearance(optionList.acroField, textColor, font, fontSize); + } + return __spreadArrays(rotate, drawOptionList({ + x: 0 + borderWidth / 2, + y: 0 + borderWidth / 2, + width: width - borderWidth, + height: height - borderWidth, + borderWidth: borderWidth !== null && borderWidth !== void 0 ? borderWidth : 0, + borderColor, + textColor, + font: font.name, + fontSize, + color: normalBackgroundColor, + textLines: lines, + lineHeight, + selectedColor: blue, + selectedLines, + padding + })); +}; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/api/PDFEmbeddedPage.js +var PDFEmbeddedPage = ( + /** @class */ + function() { + function PDFEmbeddedPage2(ref, doc, embedder) { + this.alreadyEmbedded = false; + assertIs(ref, "ref", [[PDFRef_default, "PDFRef"]]); + assertIs(doc, "doc", [[PDFDocument_default, "PDFDocument"]]); + assertIs(embedder, "embedder", [[PDFPageEmbedder_default, "PDFPageEmbedder"]]); + this.ref = ref; + this.doc = doc; + this.width = embedder.width; + this.height = embedder.height; + this.embedder = embedder; + } + PDFEmbeddedPage2.prototype.scale = function(factor) { + assertIs(factor, "factor", ["number"]); + return { width: this.width * factor, height: this.height * factor }; + }; + PDFEmbeddedPage2.prototype.size = function() { + return this.scale(1); + }; + PDFEmbeddedPage2.prototype.embed = function() { + return __awaiter(this, void 0, void 0, function() { + return __generator(this, function(_a) { + switch (_a.label) { + case 0: + if (!!this.alreadyEmbedded) return [3, 2]; + return [4, this.embedder.embedIntoContext(this.doc.context, this.ref)]; + case 1: + _a.sent(); + this.alreadyEmbedded = true; + _a.label = 2; + case 2: + return [ + 2 + /*return*/ + ]; + } + }); + }); + }; + PDFEmbeddedPage2.of = function(ref, doc, embedder) { + return new PDFEmbeddedPage2(ref, doc, embedder); + }; + return PDFEmbeddedPage2; + }() +); +var PDFEmbeddedPage_default = PDFEmbeddedPage; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/api/PDFFont.js +var PDFFont = ( + /** @class */ + function() { + function PDFFont2(ref, doc, embedder) { + this.modified = true; + assertIs(ref, "ref", [[PDFRef_default, "PDFRef"]]); + assertIs(doc, "doc", [[PDFDocument_default, "PDFDocument"]]); + assertIs(embedder, "embedder", [ + [CustomFontEmbedder_default, "CustomFontEmbedder"], + [StandardFontEmbedder_default, "StandardFontEmbedder"] + ]); + this.ref = ref; + this.doc = doc; + this.name = embedder.fontName; + this.embedder = embedder; + } + PDFFont2.prototype.encodeText = function(text) { + assertIs(text, "text", ["string"]); + this.modified = true; + return this.embedder.encodeText(text); + }; + PDFFont2.prototype.widthOfTextAtSize = function(text, size) { + assertIs(text, "text", ["string"]); + assertIs(size, "size", ["number"]); + return this.embedder.widthOfTextAtSize(text, size); + }; + PDFFont2.prototype.heightAtSize = function(size, options) { + var _a; + assertIs(size, "size", ["number"]); + assertOrUndefined(options === null || options === void 0 ? void 0 : options.descender, "options.descender", ["boolean"]); + return this.embedder.heightOfFontAtSize(size, { + descender: (_a = options === null || options === void 0 ? void 0 : options.descender) !== null && _a !== void 0 ? _a : true + }); + }; + PDFFont2.prototype.sizeAtHeight = function(height) { + assertIs(height, "height", ["number"]); + return this.embedder.sizeOfFontAtHeight(height); + }; + PDFFont2.prototype.getCharacterSet = function() { + if (this.embedder instanceof StandardFontEmbedder_default) { + return this.embedder.encoding.supportedCodePoints; + } else { + return this.embedder.font.characterSet; + } + }; + PDFFont2.prototype.embed = function() { + return __awaiter(this, void 0, void 0, function() { + return __generator(this, function(_a) { + switch (_a.label) { + case 0: + if (!this.modified) return [3, 2]; + return [4, this.embedder.embedIntoContext(this.doc.context, this.ref)]; + case 1: + _a.sent(); + this.modified = false; + _a.label = 2; + case 2: + return [ + 2 + /*return*/ + ]; + } + }); + }); + }; + PDFFont2.of = function(ref, doc, embedder) { + return new PDFFont2(ref, doc, embedder); + }; + return PDFFont2; + }() +); +var PDFFont_default = PDFFont; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/api/PDFImage.js +var PDFImage = ( + /** @class */ + function() { + function PDFImage2(ref, doc, embedder) { + assertIs(ref, "ref", [[PDFRef_default, "PDFRef"]]); + assertIs(doc, "doc", [[PDFDocument_default, "PDFDocument"]]); + assertIs(embedder, "embedder", [ + [JpegEmbedder_default, "JpegEmbedder"], + [PngEmbedder_default, "PngEmbedder"] + ]); + this.ref = ref; + this.doc = doc; + this.width = embedder.width; + this.height = embedder.height; + this.embedder = embedder; + } + PDFImage2.prototype.scale = function(factor) { + assertIs(factor, "factor", ["number"]); + return { width: this.width * factor, height: this.height * factor }; + }; + PDFImage2.prototype.scaleToFit = function(width, height) { + assertIs(width, "width", ["number"]); + assertIs(height, "height", ["number"]); + var imgWidthScale = width / this.width; + var imgHeightScale = height / this.height; + var scale2 = Math.min(imgWidthScale, imgHeightScale); + return this.scale(scale2); + }; + PDFImage2.prototype.size = function() { + return this.scale(1); + }; + PDFImage2.prototype.embed = function() { + return __awaiter(this, void 0, void 0, function() { + var _a, doc, ref; + return __generator(this, function(_b) { + switch (_b.label) { + case 0: + if (!this.embedder) + return [ + 2 + /*return*/ + ]; + if (!this.embedTask) { + _a = this, doc = _a.doc, ref = _a.ref; + this.embedTask = this.embedder.embedIntoContext(doc.context, ref); + } + return [4, this.embedTask]; + case 1: + _b.sent(); + this.embedder = void 0; + return [ + 2 + /*return*/ + ]; + } + }); + }); + }; + PDFImage2.of = function(ref, doc, embedder) { + return new PDFImage2(ref, doc, embedder); + }; + return PDFImage2; + }() +); +var PDFImage_default = PDFImage; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/api/image/alignment.js +var ImageAlignment; +(function(ImageAlignment2) { + ImageAlignment2[ImageAlignment2["Left"] = 0] = "Left"; + ImageAlignment2[ImageAlignment2["Center"] = 1] = "Center"; + ImageAlignment2[ImageAlignment2["Right"] = 2] = "Right"; +})(ImageAlignment || (ImageAlignment = {})); + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/api/form/PDFField.js +var assertFieldAppearanceOptions = function(options) { + assertOrUndefined(options === null || options === void 0 ? void 0 : options.x, "options.x", ["number"]); + assertOrUndefined(options === null || options === void 0 ? void 0 : options.y, "options.y", ["number"]); + assertOrUndefined(options === null || options === void 0 ? void 0 : options.width, "options.width", ["number"]); + assertOrUndefined(options === null || options === void 0 ? void 0 : options.height, "options.height", ["number"]); + assertOrUndefined(options === null || options === void 0 ? void 0 : options.textColor, "options.textColor", [ + [Object, "Color"] + ]); + assertOrUndefined(options === null || options === void 0 ? void 0 : options.backgroundColor, "options.backgroundColor", [ + [Object, "Color"] + ]); + assertOrUndefined(options === null || options === void 0 ? void 0 : options.borderColor, "options.borderColor", [ + [Object, "Color"] + ]); + assertOrUndefined(options === null || options === void 0 ? void 0 : options.borderWidth, "options.borderWidth", ["number"]); + assertOrUndefined(options === null || options === void 0 ? void 0 : options.rotate, "options.rotate", [[Object, "Rotation"]]); +}; +var PDFField = ( + /** @class */ + function() { + function PDFField2(acroField, ref, doc) { + assertIs(acroField, "acroField", [[PDFAcroTerminal_default, "PDFAcroTerminal"]]); + assertIs(ref, "ref", [[PDFRef_default, "PDFRef"]]); + assertIs(doc, "doc", [[PDFDocument_default, "PDFDocument"]]); + this.acroField = acroField; + this.ref = ref; + this.doc = doc; + } + PDFField2.prototype.getName = function() { + var _a; + return (_a = this.acroField.getFullyQualifiedName()) !== null && _a !== void 0 ? _a : ""; + }; + PDFField2.prototype.isReadOnly = function() { + return this.acroField.hasFlag(AcroFieldFlags.ReadOnly); + }; + PDFField2.prototype.enableReadOnly = function() { + this.acroField.setFlagTo(AcroFieldFlags.ReadOnly, true); + }; + PDFField2.prototype.disableReadOnly = function() { + this.acroField.setFlagTo(AcroFieldFlags.ReadOnly, false); + }; + PDFField2.prototype.isRequired = function() { + return this.acroField.hasFlag(AcroFieldFlags.Required); + }; + PDFField2.prototype.enableRequired = function() { + this.acroField.setFlagTo(AcroFieldFlags.Required, true); + }; + PDFField2.prototype.disableRequired = function() { + this.acroField.setFlagTo(AcroFieldFlags.Required, false); + }; + PDFField2.prototype.isExported = function() { + return !this.acroField.hasFlag(AcroFieldFlags.NoExport); + }; + PDFField2.prototype.enableExporting = function() { + this.acroField.setFlagTo(AcroFieldFlags.NoExport, false); + }; + PDFField2.prototype.disableExporting = function() { + this.acroField.setFlagTo(AcroFieldFlags.NoExport, true); + }; + PDFField2.prototype.needsAppearancesUpdate = function() { + throw new MethodNotImplementedError(this.constructor.name, "needsAppearancesUpdate"); + }; + PDFField2.prototype.defaultUpdateAppearances = function(_font) { + throw new MethodNotImplementedError(this.constructor.name, "defaultUpdateAppearances"); + }; + PDFField2.prototype.markAsDirty = function() { + this.doc.getForm().markFieldAsDirty(this.ref); + }; + PDFField2.prototype.markAsClean = function() { + this.doc.getForm().markFieldAsClean(this.ref); + }; + PDFField2.prototype.isDirty = function() { + return this.doc.getForm().fieldIsDirty(this.ref); + }; + PDFField2.prototype.createWidget = function(options) { + var _a; + var textColor = options.textColor; + var backgroundColor = options.backgroundColor; + var borderColor = options.borderColor; + var borderWidth = options.borderWidth; + var degreesAngle = toDegrees(options.rotate); + var caption = options.caption; + var x = options.x; + var y = options.y; + var width = options.width + borderWidth; + var height = options.height + borderWidth; + var hidden = Boolean(options.hidden); + var pageRef = options.page; + assertMultiple(degreesAngle, "degreesAngle", 90); + var widget = PDFWidgetAnnotation_default.create(this.doc.context, this.ref); + var rect = rotateRectangle({ x, y, width, height }, borderWidth, degreesAngle); + widget.setRectangle(rect); + if (pageRef) + widget.setP(pageRef); + var ac = widget.getOrCreateAppearanceCharacteristics(); + if (backgroundColor) { + ac.setBackgroundColor(colorToComponents(backgroundColor)); + } + ac.setRotation(degreesAngle); + if (caption) + ac.setCaptions({ normal: caption }); + if (borderColor) + ac.setBorderColor(colorToComponents(borderColor)); + var bs = widget.getOrCreateBorderStyle(); + if (borderWidth !== void 0) + bs.setWidth(borderWidth); + widget.setFlagTo(AnnotationFlags.Print, true); + widget.setFlagTo(AnnotationFlags.Hidden, hidden); + widget.setFlagTo(AnnotationFlags.Invisible, false); + if (textColor) { + var da = (_a = this.acroField.getDefaultAppearance()) !== null && _a !== void 0 ? _a : ""; + var newDa = da + "\n" + setFillingColor(textColor).toString(); + this.acroField.setDefaultAppearance(newDa); + } + return widget; + }; + PDFField2.prototype.updateWidgetAppearanceWithFont = function(widget, font, _a) { + var normal = _a.normal, rollover = _a.rollover, down = _a.down; + this.updateWidgetAppearances(widget, { + normal: this.createAppearanceStream(widget, normal, font), + rollover: rollover && this.createAppearanceStream(widget, rollover, font), + down: down && this.createAppearanceStream(widget, down, font) + }); + }; + PDFField2.prototype.updateOnOffWidgetAppearance = function(widget, onValue, _a) { + var normal = _a.normal, rollover = _a.rollover, down = _a.down; + this.updateWidgetAppearances(widget, { + normal: this.createAppearanceDict(widget, normal, onValue), + rollover: rollover && this.createAppearanceDict(widget, rollover, onValue), + down: down && this.createAppearanceDict(widget, down, onValue) + }); + }; + PDFField2.prototype.updateWidgetAppearances = function(widget, _a) { + var normal = _a.normal, rollover = _a.rollover, down = _a.down; + widget.setNormalAppearance(normal); + if (rollover) { + widget.setRolloverAppearance(rollover); + } else { + widget.removeRolloverAppearance(); + } + if (down) { + widget.setDownAppearance(down); + } else { + widget.removeDownAppearance(); + } + }; + PDFField2.prototype.createAppearanceStream = function(widget, appearance, font) { + var _a; + var context = this.acroField.dict.context; + var _b = widget.getRectangle(), width = _b.width, height = _b.height; + var Resources = font && { Font: (_a = {}, _a[font.name] = font.ref, _a) }; + var stream2 = context.formXObject(appearance, { + Resources, + BBox: context.obj([0, 0, width, height]), + Matrix: context.obj([1, 0, 0, 1, 0, 0]) + }); + var streamRef = context.register(stream2); + return streamRef; + }; + PDFField2.prototype.createImageAppearanceStream = function(widget, image, alignment) { + var _a; + var _b; + var context = this.acroField.dict.context; + var rectangle = widget.getRectangle(); + var ap = widget.getAppearanceCharacteristics(); + var bs = widget.getBorderStyle(); + var borderWidth = (_b = bs === null || bs === void 0 ? void 0 : bs.getWidth()) !== null && _b !== void 0 ? _b : 0; + var rotation = reduceRotation(ap === null || ap === void 0 ? void 0 : ap.getRotation()); + var rotate = rotateInPlace(__assign(__assign({}, rectangle), { rotation })); + var adj = adjustDimsForRotation(rectangle, rotation); + var imageDims = image.scaleToFit(adj.width - borderWidth * 2, adj.height - borderWidth * 2); + var options = { + x: borderWidth, + y: borderWidth, + width: imageDims.width, + height: imageDims.height, + // + rotate: degrees(0), + xSkew: degrees(0), + ySkew: degrees(0) + }; + if (alignment === ImageAlignment.Center) { + options.x += (adj.width - borderWidth * 2) / 2 - imageDims.width / 2; + options.y += (adj.height - borderWidth * 2) / 2 - imageDims.height / 2; + } else if (alignment === ImageAlignment.Right) { + options.x = adj.width - borderWidth - imageDims.width; + options.y = adj.height - borderWidth - imageDims.height; + } + var imageName = this.doc.context.addRandomSuffix("Image", 10); + var appearance = __spreadArrays(rotate, drawImage(imageName, options)); + var Resources = { XObject: (_a = {}, _a[imageName] = image.ref, _a) }; + var stream2 = context.formXObject(appearance, { + Resources, + BBox: context.obj([0, 0, rectangle.width, rectangle.height]), + Matrix: context.obj([1, 0, 0, 1, 0, 0]) + }); + return context.register(stream2); + }; + PDFField2.prototype.createAppearanceDict = function(widget, appearance, onValue) { + var context = this.acroField.dict.context; + var onStreamRef = this.createAppearanceStream(widget, appearance.on); + var offStreamRef = this.createAppearanceStream(widget, appearance.off); + var appearanceDict = context.obj({}); + appearanceDict.set(onValue, onStreamRef); + appearanceDict.set(PDFName_default.of("Off"), offStreamRef); + return appearanceDict; + }; + return PDFField2; + }() +); +var PDFField_default = PDFField; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/api/form/PDFCheckBox.js +var PDFCheckBox = ( + /** @class */ + function(_super) { + __extends(PDFCheckBox2, _super); + function PDFCheckBox2(acroCheckBox, ref, doc) { + var _this = _super.call(this, acroCheckBox, ref, doc) || this; + assertIs(acroCheckBox, "acroCheckBox", [ + [PDFAcroCheckBox_default, "PDFAcroCheckBox"] + ]); + _this.acroField = acroCheckBox; + return _this; + } + PDFCheckBox2.prototype.check = function() { + var _a; + var onValue = (_a = this.acroField.getOnValue()) !== null && _a !== void 0 ? _a : PDFName_default.of("Yes"); + this.markAsDirty(); + this.acroField.setValue(onValue); + }; + PDFCheckBox2.prototype.uncheck = function() { + this.markAsDirty(); + this.acroField.setValue(PDFName_default.of("Off")); + }; + PDFCheckBox2.prototype.isChecked = function() { + var onValue = this.acroField.getOnValue(); + return !!onValue && onValue === this.acroField.getValue(); + }; + PDFCheckBox2.prototype.addToPage = function(page, options) { + var _a, _b, _c, _d, _e, _f; + assertIs(page, "page", [[PDFPage_default, "PDFPage"]]); + assertFieldAppearanceOptions(options); + if (!options) + options = {}; + if (!("textColor" in options)) + options.textColor = rgb(0, 0, 0); + if (!("backgroundColor" in options)) + options.backgroundColor = rgb(1, 1, 1); + if (!("borderColor" in options)) + options.borderColor = rgb(0, 0, 0); + if (!("borderWidth" in options)) + options.borderWidth = 1; + var widget = this.createWidget({ + x: (_a = options.x) !== null && _a !== void 0 ? _a : 0, + y: (_b = options.y) !== null && _b !== void 0 ? _b : 0, + width: (_c = options.width) !== null && _c !== void 0 ? _c : 50, + height: (_d = options.height) !== null && _d !== void 0 ? _d : 50, + textColor: options.textColor, + backgroundColor: options.backgroundColor, + borderColor: options.borderColor, + borderWidth: (_e = options.borderWidth) !== null && _e !== void 0 ? _e : 0, + rotate: (_f = options.rotate) !== null && _f !== void 0 ? _f : degrees(0), + hidden: options.hidden, + page: page.ref + }); + var widgetRef = this.doc.context.register(widget.dict); + this.acroField.addWidget(widgetRef); + widget.setAppearanceState(PDFName_default.of("Off")); + this.updateWidgetAppearance(widget, PDFName_default.of("Yes")); + page.node.addAnnot(widgetRef); + }; + PDFCheckBox2.prototype.needsAppearancesUpdate = function() { + var _a; + var widgets = this.acroField.getWidgets(); + for (var idx = 0, len = widgets.length; idx < len; idx++) { + var widget = widgets[idx]; + var state = widget.getAppearanceState(); + var normal = (_a = widget.getAppearances()) === null || _a === void 0 ? void 0 : _a.normal; + if (!(normal instanceof PDFDict_default)) + return true; + if (state && !normal.has(state)) + return true; + } + return false; + }; + PDFCheckBox2.prototype.defaultUpdateAppearances = function() { + this.updateAppearances(); + }; + PDFCheckBox2.prototype.updateAppearances = function(provider) { + var _a; + assertOrUndefined(provider, "provider", [Function]); + var widgets = this.acroField.getWidgets(); + for (var idx = 0, len = widgets.length; idx < len; idx++) { + var widget = widgets[idx]; + var onValue = (_a = widget.getOnValue()) !== null && _a !== void 0 ? _a : PDFName_default.of("Yes"); + if (!onValue) + continue; + this.updateWidgetAppearance(widget, onValue, provider); + } + this.markAsClean(); + }; + PDFCheckBox2.prototype.updateWidgetAppearance = function(widget, onValue, provider) { + var apProvider = provider !== null && provider !== void 0 ? provider : defaultCheckBoxAppearanceProvider; + var appearances = normalizeAppearance(apProvider(this, widget)); + this.updateOnOffWidgetAppearance(widget, onValue, appearances); + }; + PDFCheckBox2.of = function(acroCheckBox, ref, doc) { + return new PDFCheckBox2(acroCheckBox, ref, doc); + }; + return PDFCheckBox2; + }(PDFField_default) +); +var PDFCheckBox_default = PDFCheckBox; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/api/form/PDFDropdown.js +var PDFDropdown = ( + /** @class */ + function(_super) { + __extends(PDFDropdown2, _super); + function PDFDropdown2(acroComboBox, ref, doc) { + var _this = _super.call(this, acroComboBox, ref, doc) || this; + assertIs(acroComboBox, "acroComboBox", [ + [PDFAcroComboBox_default, "PDFAcroComboBox"] + ]); + _this.acroField = acroComboBox; + return _this; + } + PDFDropdown2.prototype.getOptions = function() { + var rawOptions = this.acroField.getOptions(); + var options = new Array(rawOptions.length); + for (var idx = 0, len = options.length; idx < len; idx++) { + var _a = rawOptions[idx], display = _a.display, value = _a.value; + options[idx] = (display !== null && display !== void 0 ? display : value).decodeText(); + } + return options; + }; + PDFDropdown2.prototype.getSelected = function() { + var values2 = this.acroField.getValues(); + var selected = new Array(values2.length); + for (var idx = 0, len = values2.length; idx < len; idx++) { + selected[idx] = values2[idx].decodeText(); + } + return selected; + }; + PDFDropdown2.prototype.setOptions = function(options) { + assertIs(options, "options", [Array]); + var optionObjects = new Array(options.length); + for (var idx = 0, len = options.length; idx < len; idx++) { + optionObjects[idx] = { value: PDFHexString_default.fromText(options[idx]) }; + } + this.acroField.setOptions(optionObjects); + }; + PDFDropdown2.prototype.addOptions = function(options) { + assertIs(options, "options", ["string", Array]); + var optionsArr = Array.isArray(options) ? options : [options]; + var existingOptions = this.acroField.getOptions(); + var newOptions = new Array(optionsArr.length); + for (var idx = 0, len = optionsArr.length; idx < len; idx++) { + newOptions[idx] = { value: PDFHexString_default.fromText(optionsArr[idx]) }; + } + this.acroField.setOptions(existingOptions.concat(newOptions)); + }; + PDFDropdown2.prototype.select = function(options, merge2) { + if (merge2 === void 0) { + merge2 = false; + } + assertIs(options, "options", ["string", Array]); + assertIs(merge2, "merge", ["boolean"]); + var optionsArr = Array.isArray(options) ? options : [options]; + var validOptions = this.getOptions(); + var hasCustomOption = optionsArr.find(function(option) { + return !validOptions.includes(option); + }); + if (hasCustomOption) + this.enableEditing(); + this.markAsDirty(); + if (optionsArr.length > 1 || optionsArr.length === 1 && merge2) { + this.enableMultiselect(); + } + var values2 = new Array(optionsArr.length); + for (var idx = 0, len = optionsArr.length; idx < len; idx++) { + values2[idx] = PDFHexString_default.fromText(optionsArr[idx]); + } + if (merge2) { + var existingValues = this.acroField.getValues(); + this.acroField.setValues(existingValues.concat(values2)); + } else { + this.acroField.setValues(values2); + } + }; + PDFDropdown2.prototype.clear = function() { + this.markAsDirty(); + this.acroField.setValues([]); + }; + PDFDropdown2.prototype.setFontSize = function(fontSize) { + assertPositive(fontSize, "fontSize"); + this.acroField.setFontSize(fontSize); + this.markAsDirty(); + }; + PDFDropdown2.prototype.isEditable = function() { + return this.acroField.hasFlag(AcroChoiceFlags.Edit); + }; + PDFDropdown2.prototype.enableEditing = function() { + this.acroField.setFlagTo(AcroChoiceFlags.Edit, true); + }; + PDFDropdown2.prototype.disableEditing = function() { + this.acroField.setFlagTo(AcroChoiceFlags.Edit, false); + }; + PDFDropdown2.prototype.isSorted = function() { + return this.acroField.hasFlag(AcroChoiceFlags.Sort); + }; + PDFDropdown2.prototype.enableSorting = function() { + this.acroField.setFlagTo(AcroChoiceFlags.Sort, true); + }; + PDFDropdown2.prototype.disableSorting = function() { + this.acroField.setFlagTo(AcroChoiceFlags.Sort, false); + }; + PDFDropdown2.prototype.isMultiselect = function() { + return this.acroField.hasFlag(AcroChoiceFlags.MultiSelect); + }; + PDFDropdown2.prototype.enableMultiselect = function() { + this.acroField.setFlagTo(AcroChoiceFlags.MultiSelect, true); + }; + PDFDropdown2.prototype.disableMultiselect = function() { + this.acroField.setFlagTo(AcroChoiceFlags.MultiSelect, false); + }; + PDFDropdown2.prototype.isSpellChecked = function() { + return !this.acroField.hasFlag(AcroChoiceFlags.DoNotSpellCheck); + }; + PDFDropdown2.prototype.enableSpellChecking = function() { + this.acroField.setFlagTo(AcroChoiceFlags.DoNotSpellCheck, false); + }; + PDFDropdown2.prototype.disableSpellChecking = function() { + this.acroField.setFlagTo(AcroChoiceFlags.DoNotSpellCheck, true); + }; + PDFDropdown2.prototype.isSelectOnClick = function() { + return this.acroField.hasFlag(AcroChoiceFlags.CommitOnSelChange); + }; + PDFDropdown2.prototype.enableSelectOnClick = function() { + this.acroField.setFlagTo(AcroChoiceFlags.CommitOnSelChange, true); + }; + PDFDropdown2.prototype.disableSelectOnClick = function() { + this.acroField.setFlagTo(AcroChoiceFlags.CommitOnSelChange, false); + }; + PDFDropdown2.prototype.addToPage = function(page, options) { + var _a, _b, _c, _d, _e, _f, _g; + assertIs(page, "page", [[PDFPage_default, "PDFPage"]]); + assertFieldAppearanceOptions(options); + if (!options) + options = {}; + if (!("textColor" in options)) + options.textColor = rgb(0, 0, 0); + if (!("backgroundColor" in options)) + options.backgroundColor = rgb(1, 1, 1); + if (!("borderColor" in options)) + options.borderColor = rgb(0, 0, 0); + if (!("borderWidth" in options)) + options.borderWidth = 1; + var widget = this.createWidget({ + x: (_a = options.x) !== null && _a !== void 0 ? _a : 0, + y: (_b = options.y) !== null && _b !== void 0 ? _b : 0, + width: (_c = options.width) !== null && _c !== void 0 ? _c : 200, + height: (_d = options.height) !== null && _d !== void 0 ? _d : 50, + textColor: options.textColor, + backgroundColor: options.backgroundColor, + borderColor: options.borderColor, + borderWidth: (_e = options.borderWidth) !== null && _e !== void 0 ? _e : 0, + rotate: (_f = options.rotate) !== null && _f !== void 0 ? _f : degrees(0), + hidden: options.hidden, + page: page.ref + }); + var widgetRef = this.doc.context.register(widget.dict); + this.acroField.addWidget(widgetRef); + var font = (_g = options.font) !== null && _g !== void 0 ? _g : this.doc.getForm().getDefaultFont(); + this.updateWidgetAppearance(widget, font); + page.node.addAnnot(widgetRef); + }; + PDFDropdown2.prototype.needsAppearancesUpdate = function() { + var _a; + if (this.isDirty()) + return true; + var widgets = this.acroField.getWidgets(); + for (var idx = 0, len = widgets.length; idx < len; idx++) { + var widget = widgets[idx]; + var hasAppearances = ((_a = widget.getAppearances()) === null || _a === void 0 ? void 0 : _a.normal) instanceof PDFStream_default; + if (!hasAppearances) + return true; + } + return false; + }; + PDFDropdown2.prototype.defaultUpdateAppearances = function(font) { + assertIs(font, "font", [[PDFFont_default, "PDFFont"]]); + this.updateAppearances(font); + }; + PDFDropdown2.prototype.updateAppearances = function(font, provider) { + assertIs(font, "font", [[PDFFont_default, "PDFFont"]]); + assertOrUndefined(provider, "provider", [Function]); + var widgets = this.acroField.getWidgets(); + for (var idx = 0, len = widgets.length; idx < len; idx++) { + var widget = widgets[idx]; + this.updateWidgetAppearance(widget, font, provider); + } + this.markAsClean(); + }; + PDFDropdown2.prototype.updateWidgetAppearance = function(widget, font, provider) { + var apProvider = provider !== null && provider !== void 0 ? provider : defaultDropdownAppearanceProvider; + var appearances = normalizeAppearance(apProvider(this, widget, font)); + this.updateWidgetAppearanceWithFont(widget, font, appearances); + }; + PDFDropdown2.of = function(acroComboBox, ref, doc) { + return new PDFDropdown2(acroComboBox, ref, doc); + }; + return PDFDropdown2; + }(PDFField_default) +); +var PDFDropdown_default = PDFDropdown; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/api/form/PDFOptionList.js +var PDFOptionList = ( + /** @class */ + function(_super) { + __extends(PDFOptionList2, _super); + function PDFOptionList2(acroListBox, ref, doc) { + var _this = _super.call(this, acroListBox, ref, doc) || this; + assertIs(acroListBox, "acroListBox", [[PDFAcroListBox_default, "PDFAcroListBox"]]); + _this.acroField = acroListBox; + return _this; + } + PDFOptionList2.prototype.getOptions = function() { + var rawOptions = this.acroField.getOptions(); + var options = new Array(rawOptions.length); + for (var idx = 0, len = options.length; idx < len; idx++) { + var _a = rawOptions[idx], display = _a.display, value = _a.value; + options[idx] = (display !== null && display !== void 0 ? display : value).decodeText(); + } + return options; + }; + PDFOptionList2.prototype.getSelected = function() { + var values2 = this.acroField.getValues(); + var selected = new Array(values2.length); + for (var idx = 0, len = values2.length; idx < len; idx++) { + selected[idx] = values2[idx].decodeText(); + } + return selected; + }; + PDFOptionList2.prototype.setOptions = function(options) { + assertIs(options, "options", [Array]); + this.markAsDirty(); + var optionObjects = new Array(options.length); + for (var idx = 0, len = options.length; idx < len; idx++) { + optionObjects[idx] = { value: PDFHexString_default.fromText(options[idx]) }; + } + this.acroField.setOptions(optionObjects); + }; + PDFOptionList2.prototype.addOptions = function(options) { + assertIs(options, "options", ["string", Array]); + this.markAsDirty(); + var optionsArr = Array.isArray(options) ? options : [options]; + var existingOptions = this.acroField.getOptions(); + var newOptions = new Array(optionsArr.length); + for (var idx = 0, len = optionsArr.length; idx < len; idx++) { + newOptions[idx] = { value: PDFHexString_default.fromText(optionsArr[idx]) }; + } + this.acroField.setOptions(existingOptions.concat(newOptions)); + }; + PDFOptionList2.prototype.select = function(options, merge2) { + if (merge2 === void 0) { + merge2 = false; + } + assertIs(options, "options", ["string", Array]); + assertIs(merge2, "merge", ["boolean"]); + var optionsArr = Array.isArray(options) ? options : [options]; + var validOptions = this.getOptions(); + assertIsSubset(optionsArr, "option", validOptions); + this.markAsDirty(); + if (optionsArr.length > 1 || optionsArr.length === 1 && merge2) { + this.enableMultiselect(); + } + var values2 = new Array(optionsArr.length); + for (var idx = 0, len = optionsArr.length; idx < len; idx++) { + values2[idx] = PDFHexString_default.fromText(optionsArr[idx]); + } + if (merge2) { + var existingValues = this.acroField.getValues(); + this.acroField.setValues(existingValues.concat(values2)); + } else { + this.acroField.setValues(values2); + } + }; + PDFOptionList2.prototype.clear = function() { + this.markAsDirty(); + this.acroField.setValues([]); + }; + PDFOptionList2.prototype.setFontSize = function(fontSize) { + assertPositive(fontSize, "fontSize"); + this.acroField.setFontSize(fontSize); + this.markAsDirty(); + }; + PDFOptionList2.prototype.isSorted = function() { + return this.acroField.hasFlag(AcroChoiceFlags.Sort); + }; + PDFOptionList2.prototype.enableSorting = function() { + this.acroField.setFlagTo(AcroChoiceFlags.Sort, true); + }; + PDFOptionList2.prototype.disableSorting = function() { + this.acroField.setFlagTo(AcroChoiceFlags.Sort, false); + }; + PDFOptionList2.prototype.isMultiselect = function() { + return this.acroField.hasFlag(AcroChoiceFlags.MultiSelect); + }; + PDFOptionList2.prototype.enableMultiselect = function() { + this.acroField.setFlagTo(AcroChoiceFlags.MultiSelect, true); + }; + PDFOptionList2.prototype.disableMultiselect = function() { + this.acroField.setFlagTo(AcroChoiceFlags.MultiSelect, false); + }; + PDFOptionList2.prototype.isSelectOnClick = function() { + return this.acroField.hasFlag(AcroChoiceFlags.CommitOnSelChange); + }; + PDFOptionList2.prototype.enableSelectOnClick = function() { + this.acroField.setFlagTo(AcroChoiceFlags.CommitOnSelChange, true); + }; + PDFOptionList2.prototype.disableSelectOnClick = function() { + this.acroField.setFlagTo(AcroChoiceFlags.CommitOnSelChange, false); + }; + PDFOptionList2.prototype.addToPage = function(page, options) { + var _a, _b, _c, _d, _e, _f, _g; + assertIs(page, "page", [[PDFPage_default, "PDFPage"]]); + assertFieldAppearanceOptions(options); + if (!options) + options = {}; + if (!("textColor" in options)) + options.textColor = rgb(0, 0, 0); + if (!("backgroundColor" in options)) + options.backgroundColor = rgb(1, 1, 1); + if (!("borderColor" in options)) + options.borderColor = rgb(0, 0, 0); + if (!("borderWidth" in options)) + options.borderWidth = 1; + var widget = this.createWidget({ + x: (_a = options.x) !== null && _a !== void 0 ? _a : 0, + y: (_b = options.y) !== null && _b !== void 0 ? _b : 0, + width: (_c = options.width) !== null && _c !== void 0 ? _c : 200, + height: (_d = options.height) !== null && _d !== void 0 ? _d : 100, + textColor: options.textColor, + backgroundColor: options.backgroundColor, + borderColor: options.borderColor, + borderWidth: (_e = options.borderWidth) !== null && _e !== void 0 ? _e : 0, + rotate: (_f = options.rotate) !== null && _f !== void 0 ? _f : degrees(0), + hidden: options.hidden, + page: page.ref + }); + var widgetRef = this.doc.context.register(widget.dict); + this.acroField.addWidget(widgetRef); + var font = (_g = options.font) !== null && _g !== void 0 ? _g : this.doc.getForm().getDefaultFont(); + this.updateWidgetAppearance(widget, font); + page.node.addAnnot(widgetRef); + }; + PDFOptionList2.prototype.needsAppearancesUpdate = function() { + var _a; + if (this.isDirty()) + return true; + var widgets = this.acroField.getWidgets(); + for (var idx = 0, len = widgets.length; idx < len; idx++) { + var widget = widgets[idx]; + var hasAppearances = ((_a = widget.getAppearances()) === null || _a === void 0 ? void 0 : _a.normal) instanceof PDFStream_default; + if (!hasAppearances) + return true; + } + return false; + }; + PDFOptionList2.prototype.defaultUpdateAppearances = function(font) { + assertIs(font, "font", [[PDFFont_default, "PDFFont"]]); + this.updateAppearances(font); + }; + PDFOptionList2.prototype.updateAppearances = function(font, provider) { + assertIs(font, "font", [[PDFFont_default, "PDFFont"]]); + assertOrUndefined(provider, "provider", [Function]); + var widgets = this.acroField.getWidgets(); + for (var idx = 0, len = widgets.length; idx < len; idx++) { + var widget = widgets[idx]; + this.updateWidgetAppearance(widget, font, provider); + } + this.markAsClean(); + }; + PDFOptionList2.prototype.updateWidgetAppearance = function(widget, font, provider) { + var apProvider = provider !== null && provider !== void 0 ? provider : defaultOptionListAppearanceProvider; + var appearances = normalizeAppearance(apProvider(this, widget, font)); + this.updateWidgetAppearanceWithFont(widget, font, appearances); + }; + PDFOptionList2.of = function(acroListBox, ref, doc) { + return new PDFOptionList2(acroListBox, ref, doc); + }; + return PDFOptionList2; + }(PDFField_default) +); +var PDFOptionList_default = PDFOptionList; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/api/form/PDFRadioGroup.js +var PDFRadioGroup = ( + /** @class */ + function(_super) { + __extends(PDFRadioGroup2, _super); + function PDFRadioGroup2(acroRadioButton, ref, doc) { + var _this = _super.call(this, acroRadioButton, ref, doc) || this; + assertIs(acroRadioButton, "acroRadioButton", [ + [PDFAcroRadioButton_default, "PDFAcroRadioButton"] + ]); + _this.acroField = acroRadioButton; + return _this; + } + PDFRadioGroup2.prototype.getOptions = function() { + var exportValues = this.acroField.getExportValues(); + if (exportValues) { + var exportOptions = new Array(exportValues.length); + for (var idx = 0, len = exportValues.length; idx < len; idx++) { + exportOptions[idx] = exportValues[idx].decodeText(); + } + return exportOptions; + } + var onValues = this.acroField.getOnValues(); + var onOptions = new Array(onValues.length); + for (var idx = 0, len = onOptions.length; idx < len; idx++) { + onOptions[idx] = onValues[idx].decodeText(); + } + return onOptions; + }; + PDFRadioGroup2.prototype.getSelected = function() { + var value = this.acroField.getValue(); + if (value === PDFName_default.of("Off")) + return void 0; + var exportValues = this.acroField.getExportValues(); + if (exportValues) { + var onValues = this.acroField.getOnValues(); + for (var idx = 0, len = onValues.length; idx < len; idx++) { + if (onValues[idx] === value) + return exportValues[idx].decodeText(); + } + } + return value.decodeText(); + }; + PDFRadioGroup2.prototype.select = function(option) { + assertIs(option, "option", ["string"]); + var validOptions = this.getOptions(); + assertIsOneOf(option, "option", validOptions); + this.markAsDirty(); + var onValues = this.acroField.getOnValues(); + var exportValues = this.acroField.getExportValues(); + if (exportValues) { + for (var idx = 0, len = exportValues.length; idx < len; idx++) { + if (exportValues[idx].decodeText() === option) { + this.acroField.setValue(onValues[idx]); + } + } + } else { + for (var idx = 0, len = onValues.length; idx < len; idx++) { + var value = onValues[idx]; + if (value.decodeText() === option) + this.acroField.setValue(value); + } + } + }; + PDFRadioGroup2.prototype.clear = function() { + this.markAsDirty(); + this.acroField.setValue(PDFName_default.of("Off")); + }; + PDFRadioGroup2.prototype.isOffToggleable = function() { + return !this.acroField.hasFlag(AcroButtonFlags.NoToggleToOff); + }; + PDFRadioGroup2.prototype.enableOffToggling = function() { + this.acroField.setFlagTo(AcroButtonFlags.NoToggleToOff, false); + }; + PDFRadioGroup2.prototype.disableOffToggling = function() { + this.acroField.setFlagTo(AcroButtonFlags.NoToggleToOff, true); + }; + PDFRadioGroup2.prototype.isMutuallyExclusive = function() { + return !this.acroField.hasFlag(AcroButtonFlags.RadiosInUnison); + }; + PDFRadioGroup2.prototype.enableMutualExclusion = function() { + this.acroField.setFlagTo(AcroButtonFlags.RadiosInUnison, false); + }; + PDFRadioGroup2.prototype.disableMutualExclusion = function() { + this.acroField.setFlagTo(AcroButtonFlags.RadiosInUnison, true); + }; + PDFRadioGroup2.prototype.addOptionToPage = function(option, page, options) { + var _a, _b, _c, _d, _e, _f, _g, _h, _j; + assertIs(option, "option", ["string"]); + assertIs(page, "page", [[PDFPage_default, "PDFPage"]]); + assertFieldAppearanceOptions(options); + var widget = this.createWidget({ + x: (_a = options === null || options === void 0 ? void 0 : options.x) !== null && _a !== void 0 ? _a : 0, + y: (_b = options === null || options === void 0 ? void 0 : options.y) !== null && _b !== void 0 ? _b : 0, + width: (_c = options === null || options === void 0 ? void 0 : options.width) !== null && _c !== void 0 ? _c : 50, + height: (_d = options === null || options === void 0 ? void 0 : options.height) !== null && _d !== void 0 ? _d : 50, + textColor: (_e = options === null || options === void 0 ? void 0 : options.textColor) !== null && _e !== void 0 ? _e : rgb(0, 0, 0), + backgroundColor: (_f = options === null || options === void 0 ? void 0 : options.backgroundColor) !== null && _f !== void 0 ? _f : rgb(1, 1, 1), + borderColor: (_g = options === null || options === void 0 ? void 0 : options.borderColor) !== null && _g !== void 0 ? _g : rgb(0, 0, 0), + borderWidth: (_h = options === null || options === void 0 ? void 0 : options.borderWidth) !== null && _h !== void 0 ? _h : 1, + rotate: (_j = options === null || options === void 0 ? void 0 : options.rotate) !== null && _j !== void 0 ? _j : degrees(0), + hidden: options === null || options === void 0 ? void 0 : options.hidden, + page: page.ref + }); + var widgetRef = this.doc.context.register(widget.dict); + var apStateValue = this.acroField.addWidgetWithOpt(widgetRef, PDFHexString_default.fromText(option), !this.isMutuallyExclusive()); + widget.setAppearanceState(PDFName_default.of("Off")); + this.updateWidgetAppearance(widget, apStateValue); + page.node.addAnnot(widgetRef); + }; + PDFRadioGroup2.prototype.needsAppearancesUpdate = function() { + var _a; + var widgets = this.acroField.getWidgets(); + for (var idx = 0, len = widgets.length; idx < len; idx++) { + var widget = widgets[idx]; + var state = widget.getAppearanceState(); + var normal = (_a = widget.getAppearances()) === null || _a === void 0 ? void 0 : _a.normal; + if (!(normal instanceof PDFDict_default)) + return true; + if (state && !normal.has(state)) + return true; + } + return false; + }; + PDFRadioGroup2.prototype.defaultUpdateAppearances = function() { + this.updateAppearances(); + }; + PDFRadioGroup2.prototype.updateAppearances = function(provider) { + assertOrUndefined(provider, "provider", [Function]); + var widgets = this.acroField.getWidgets(); + for (var idx = 0, len = widgets.length; idx < len; idx++) { + var widget = widgets[idx]; + var onValue = widget.getOnValue(); + if (!onValue) + continue; + this.updateWidgetAppearance(widget, onValue, provider); + } + }; + PDFRadioGroup2.prototype.updateWidgetAppearance = function(widget, onValue, provider) { + var apProvider = provider !== null && provider !== void 0 ? provider : defaultRadioGroupAppearanceProvider; + var appearances = normalizeAppearance(apProvider(this, widget)); + this.updateOnOffWidgetAppearance(widget, onValue, appearances); + }; + PDFRadioGroup2.of = function(acroRadioButton, ref, doc) { + return new PDFRadioGroup2(acroRadioButton, ref, doc); + }; + return PDFRadioGroup2; + }(PDFField_default) +); +var PDFRadioGroup_default = PDFRadioGroup; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/api/form/PDFSignature.js +var PDFSignature = ( + /** @class */ + function(_super) { + __extends(PDFSignature2, _super); + function PDFSignature2(acroSignature, ref, doc) { + var _this = _super.call(this, acroSignature, ref, doc) || this; + assertIs(acroSignature, "acroSignature", [ + [PDFAcroSignature_default, "PDFAcroSignature"] + ]); + _this.acroField = acroSignature; + return _this; + } + PDFSignature2.prototype.needsAppearancesUpdate = function() { + return false; + }; + PDFSignature2.of = function(acroSignature, ref, doc) { + return new PDFSignature2(acroSignature, ref, doc); + }; + return PDFSignature2; + }(PDFField_default) +); +var PDFSignature_default = PDFSignature; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/api/form/PDFTextField.js +var PDFTextField = ( + /** @class */ + function(_super) { + __extends(PDFTextField2, _super); + function PDFTextField2(acroText, ref, doc) { + var _this = _super.call(this, acroText, ref, doc) || this; + assertIs(acroText, "acroText", [[PDFAcroText_default, "PDFAcroText"]]); + _this.acroField = acroText; + return _this; + } + PDFTextField2.prototype.getText = function() { + var value = this.acroField.getValue(); + if (!value && this.isRichFormatted()) { + throw new RichTextFieldReadError(this.getName()); + } + return value === null || value === void 0 ? void 0 : value.decodeText(); + }; + PDFTextField2.prototype.setText = function(text) { + assertOrUndefined(text, "text", ["string"]); + var maxLength = this.getMaxLength(); + if (maxLength !== void 0 && text && text.length > maxLength) { + throw new ExceededMaxLengthError(text.length, maxLength, this.getName()); + } + this.markAsDirty(); + this.disableRichFormatting(); + if (text) { + this.acroField.setValue(PDFHexString_default.fromText(text)); + } else { + this.acroField.removeValue(); + } + }; + PDFTextField2.prototype.getAlignment = function() { + var quadding = this.acroField.getQuadding(); + return quadding === 0 ? TextAlignment.Left : quadding === 1 ? TextAlignment.Center : quadding === 2 ? TextAlignment.Right : TextAlignment.Left; + }; + PDFTextField2.prototype.setAlignment = function(alignment) { + assertIsOneOf(alignment, "alignment", TextAlignment); + this.markAsDirty(); + this.acroField.setQuadding(alignment); + }; + PDFTextField2.prototype.getMaxLength = function() { + return this.acroField.getMaxLength(); + }; + PDFTextField2.prototype.setMaxLength = function(maxLength) { + assertRangeOrUndefined(maxLength, "maxLength", 0, Number.MAX_SAFE_INTEGER); + this.markAsDirty(); + if (maxLength === void 0) { + this.acroField.removeMaxLength(); + } else { + var text = this.getText(); + if (text && text.length > maxLength) { + throw new InvalidMaxLengthError(text.length, maxLength, this.getName()); + } + this.acroField.setMaxLength(maxLength); + } + }; + PDFTextField2.prototype.removeMaxLength = function() { + this.markAsDirty(); + this.acroField.removeMaxLength(); + }; + PDFTextField2.prototype.setImage = function(image) { + var fieldAlignment = this.getAlignment(); + var alignment = fieldAlignment === TextAlignment.Center ? ImageAlignment.Center : fieldAlignment === TextAlignment.Right ? ImageAlignment.Right : ImageAlignment.Left; + var widgets = this.acroField.getWidgets(); + for (var idx = 0, len = widgets.length; idx < len; idx++) { + var widget = widgets[idx]; + var streamRef = this.createImageAppearanceStream(widget, image, alignment); + this.updateWidgetAppearances(widget, { normal: streamRef }); + } + this.markAsClean(); + }; + PDFTextField2.prototype.setFontSize = function(fontSize) { + assertPositive(fontSize, "fontSize"); + this.acroField.setFontSize(fontSize); + this.markAsDirty(); + }; + PDFTextField2.prototype.isMultiline = function() { + return this.acroField.hasFlag(AcroTextFlags.Multiline); + }; + PDFTextField2.prototype.enableMultiline = function() { + this.markAsDirty(); + this.acroField.setFlagTo(AcroTextFlags.Multiline, true); + }; + PDFTextField2.prototype.disableMultiline = function() { + this.markAsDirty(); + this.acroField.setFlagTo(AcroTextFlags.Multiline, false); + }; + PDFTextField2.prototype.isPassword = function() { + return this.acroField.hasFlag(AcroTextFlags.Password); + }; + PDFTextField2.prototype.enablePassword = function() { + this.acroField.setFlagTo(AcroTextFlags.Password, true); + }; + PDFTextField2.prototype.disablePassword = function() { + this.acroField.setFlagTo(AcroTextFlags.Password, false); + }; + PDFTextField2.prototype.isFileSelector = function() { + return this.acroField.hasFlag(AcroTextFlags.FileSelect); + }; + PDFTextField2.prototype.enableFileSelection = function() { + this.acroField.setFlagTo(AcroTextFlags.FileSelect, true); + }; + PDFTextField2.prototype.disableFileSelection = function() { + this.acroField.setFlagTo(AcroTextFlags.FileSelect, false); + }; + PDFTextField2.prototype.isSpellChecked = function() { + return !this.acroField.hasFlag(AcroTextFlags.DoNotSpellCheck); + }; + PDFTextField2.prototype.enableSpellChecking = function() { + this.acroField.setFlagTo(AcroTextFlags.DoNotSpellCheck, false); + }; + PDFTextField2.prototype.disableSpellChecking = function() { + this.acroField.setFlagTo(AcroTextFlags.DoNotSpellCheck, true); + }; + PDFTextField2.prototype.isScrollable = function() { + return !this.acroField.hasFlag(AcroTextFlags.DoNotScroll); + }; + PDFTextField2.prototype.enableScrolling = function() { + this.acroField.setFlagTo(AcroTextFlags.DoNotScroll, false); + }; + PDFTextField2.prototype.disableScrolling = function() { + this.acroField.setFlagTo(AcroTextFlags.DoNotScroll, true); + }; + PDFTextField2.prototype.isCombed = function() { + return this.acroField.hasFlag(AcroTextFlags.Comb) && !this.isMultiline() && !this.isPassword() && !this.isFileSelector() && this.getMaxLength() !== void 0; + }; + PDFTextField2.prototype.enableCombing = function() { + if (this.getMaxLength() === void 0) { + var msg = "PDFTextFields must have a max length in order to be combed"; + console.warn(msg); + } + this.markAsDirty(); + this.disableMultiline(); + this.disablePassword(); + this.disableFileSelection(); + this.acroField.setFlagTo(AcroTextFlags.Comb, true); + }; + PDFTextField2.prototype.disableCombing = function() { + this.markAsDirty(); + this.acroField.setFlagTo(AcroTextFlags.Comb, false); + }; + PDFTextField2.prototype.isRichFormatted = function() { + return this.acroField.hasFlag(AcroTextFlags.RichText); + }; + PDFTextField2.prototype.enableRichFormatting = function() { + this.acroField.setFlagTo(AcroTextFlags.RichText, true); + }; + PDFTextField2.prototype.disableRichFormatting = function() { + this.acroField.setFlagTo(AcroTextFlags.RichText, false); + }; + PDFTextField2.prototype.addToPage = function(page, options) { + var _a, _b, _c, _d, _e, _f, _g; + assertIs(page, "page", [[PDFPage_default, "PDFPage"]]); + assertFieldAppearanceOptions(options); + if (!options) + options = {}; + if (!("textColor" in options)) + options.textColor = rgb(0, 0, 0); + if (!("backgroundColor" in options)) + options.backgroundColor = rgb(1, 1, 1); + if (!("borderColor" in options)) + options.borderColor = rgb(0, 0, 0); + if (!("borderWidth" in options)) + options.borderWidth = 1; + var widget = this.createWidget({ + x: (_a = options.x) !== null && _a !== void 0 ? _a : 0, + y: (_b = options.y) !== null && _b !== void 0 ? _b : 0, + width: (_c = options.width) !== null && _c !== void 0 ? _c : 200, + height: (_d = options.height) !== null && _d !== void 0 ? _d : 50, + textColor: options.textColor, + backgroundColor: options.backgroundColor, + borderColor: options.borderColor, + borderWidth: (_e = options.borderWidth) !== null && _e !== void 0 ? _e : 0, + rotate: (_f = options.rotate) !== null && _f !== void 0 ? _f : degrees(0), + hidden: options.hidden, + page: page.ref + }); + var widgetRef = this.doc.context.register(widget.dict); + this.acroField.addWidget(widgetRef); + var font = (_g = options.font) !== null && _g !== void 0 ? _g : this.doc.getForm().getDefaultFont(); + this.updateWidgetAppearance(widget, font); + page.node.addAnnot(widgetRef); + }; + PDFTextField2.prototype.needsAppearancesUpdate = function() { + var _a; + if (this.isDirty()) + return true; + var widgets = this.acroField.getWidgets(); + for (var idx = 0, len = widgets.length; idx < len; idx++) { + var widget = widgets[idx]; + var hasAppearances = ((_a = widget.getAppearances()) === null || _a === void 0 ? void 0 : _a.normal) instanceof PDFStream_default; + if (!hasAppearances) + return true; + } + return false; + }; + PDFTextField2.prototype.defaultUpdateAppearances = function(font) { + assertIs(font, "font", [[PDFFont_default, "PDFFont"]]); + this.updateAppearances(font); + }; + PDFTextField2.prototype.updateAppearances = function(font, provider) { + assertIs(font, "font", [[PDFFont_default, "PDFFont"]]); + assertOrUndefined(provider, "provider", [Function]); + var widgets = this.acroField.getWidgets(); + for (var idx = 0, len = widgets.length; idx < len; idx++) { + var widget = widgets[idx]; + this.updateWidgetAppearance(widget, font, provider); + } + this.markAsClean(); + }; + PDFTextField2.prototype.updateWidgetAppearance = function(widget, font, provider) { + var apProvider = provider !== null && provider !== void 0 ? provider : defaultTextFieldAppearanceProvider; + var appearances = normalizeAppearance(apProvider(this, widget, font)); + this.updateWidgetAppearanceWithFont(widget, font, appearances); + }; + PDFTextField2.of = function(acroText, ref, doc) { + return new PDFTextField2(acroText, ref, doc); + }; + return PDFTextField2; + }(PDFField_default) +); +var PDFTextField_default = PDFTextField; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/api/StandardFonts.js +var StandardFonts; +(function(StandardFonts2) { + StandardFonts2["Courier"] = "Courier"; + StandardFonts2["CourierBold"] = "Courier-Bold"; + StandardFonts2["CourierOblique"] = "Courier-Oblique"; + StandardFonts2["CourierBoldOblique"] = "Courier-BoldOblique"; + StandardFonts2["Helvetica"] = "Helvetica"; + StandardFonts2["HelveticaBold"] = "Helvetica-Bold"; + StandardFonts2["HelveticaOblique"] = "Helvetica-Oblique"; + StandardFonts2["HelveticaBoldOblique"] = "Helvetica-BoldOblique"; + StandardFonts2["TimesRoman"] = "Times-Roman"; + StandardFonts2["TimesRomanBold"] = "Times-Bold"; + StandardFonts2["TimesRomanItalic"] = "Times-Italic"; + StandardFonts2["TimesRomanBoldItalic"] = "Times-BoldItalic"; + StandardFonts2["Symbol"] = "Symbol"; + StandardFonts2["ZapfDingbats"] = "ZapfDingbats"; +})(StandardFonts || (StandardFonts = {})); + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/api/form/PDFForm.js +var PDFForm = ( + /** @class */ + function() { + function PDFForm2(acroForm, doc) { + var _this = this; + this.embedDefaultFont = function() { + return _this.doc.embedStandardFont(StandardFonts.Helvetica); + }; + assertIs(acroForm, "acroForm", [[PDFAcroForm_default, "PDFAcroForm"]]); + assertIs(doc, "doc", [[PDFDocument_default, "PDFDocument"]]); + this.acroForm = acroForm; + this.doc = doc; + this.dirtyFields = /* @__PURE__ */ new Set(); + this.defaultFontCache = Cache_default.populatedBy(this.embedDefaultFont); + } + PDFForm2.prototype.hasXFA = function() { + return this.acroForm.dict.has(PDFName_default.of("XFA")); + }; + PDFForm2.prototype.deleteXFA = function() { + this.acroForm.dict.delete(PDFName_default.of("XFA")); + }; + PDFForm2.prototype.getFields = function() { + var allFields = this.acroForm.getAllFields(); + var fields = []; + for (var idx = 0, len = allFields.length; idx < len; idx++) { + var _a = allFields[idx], acroField = _a[0], ref = _a[1]; + var field = convertToPDFField(acroField, ref, this.doc); + if (field) + fields.push(field); + } + return fields; + }; + PDFForm2.prototype.getFieldMaybe = function(name) { + assertIs(name, "name", ["string"]); + var fields = this.getFields(); + for (var idx = 0, len = fields.length; idx < len; idx++) { + var field = fields[idx]; + if (field.getName() === name) + return field; + } + return void 0; + }; + PDFForm2.prototype.getField = function(name) { + assertIs(name, "name", ["string"]); + var field = this.getFieldMaybe(name); + if (field) + return field; + throw new NoSuchFieldError(name); + }; + PDFForm2.prototype.getButton = function(name) { + assertIs(name, "name", ["string"]); + var field = this.getField(name); + if (field instanceof PDFButton_default) + return field; + throw new UnexpectedFieldTypeError(name, PDFButton_default, field); + }; + PDFForm2.prototype.getCheckBox = function(name) { + assertIs(name, "name", ["string"]); + var field = this.getField(name); + if (field instanceof PDFCheckBox_default) + return field; + throw new UnexpectedFieldTypeError(name, PDFCheckBox_default, field); + }; + PDFForm2.prototype.getDropdown = function(name) { + assertIs(name, "name", ["string"]); + var field = this.getField(name); + if (field instanceof PDFDropdown_default) + return field; + throw new UnexpectedFieldTypeError(name, PDFDropdown_default, field); + }; + PDFForm2.prototype.getOptionList = function(name) { + assertIs(name, "name", ["string"]); + var field = this.getField(name); + if (field instanceof PDFOptionList_default) + return field; + throw new UnexpectedFieldTypeError(name, PDFOptionList_default, field); + }; + PDFForm2.prototype.getRadioGroup = function(name) { + assertIs(name, "name", ["string"]); + var field = this.getField(name); + if (field instanceof PDFRadioGroup_default) + return field; + throw new UnexpectedFieldTypeError(name, PDFRadioGroup_default, field); + }; + PDFForm2.prototype.getSignature = function(name) { + assertIs(name, "name", ["string"]); + var field = this.getField(name); + if (field instanceof PDFSignature_default) + return field; + throw new UnexpectedFieldTypeError(name, PDFSignature_default, field); + }; + PDFForm2.prototype.getTextField = function(name) { + assertIs(name, "name", ["string"]); + var field = this.getField(name); + if (field instanceof PDFTextField_default) + return field; + throw new UnexpectedFieldTypeError(name, PDFTextField_default, field); + }; + PDFForm2.prototype.createButton = function(name) { + assertIs(name, "name", ["string"]); + var nameParts = splitFieldName(name); + var parent = this.findOrCreateNonTerminals(nameParts.nonTerminal); + var button = PDFAcroPushButton_default.create(this.doc.context); + button.setPartialName(nameParts.terminal); + addFieldToParent(parent, [button, button.ref], nameParts.terminal); + return PDFButton_default.of(button, button.ref, this.doc); + }; + PDFForm2.prototype.createCheckBox = function(name) { + assertIs(name, "name", ["string"]); + var nameParts = splitFieldName(name); + var parent = this.findOrCreateNonTerminals(nameParts.nonTerminal); + var checkBox = PDFAcroCheckBox_default.create(this.doc.context); + checkBox.setPartialName(nameParts.terminal); + addFieldToParent(parent, [checkBox, checkBox.ref], nameParts.terminal); + return PDFCheckBox_default.of(checkBox, checkBox.ref, this.doc); + }; + PDFForm2.prototype.createDropdown = function(name) { + assertIs(name, "name", ["string"]); + var nameParts = splitFieldName(name); + var parent = this.findOrCreateNonTerminals(nameParts.nonTerminal); + var comboBox = PDFAcroComboBox_default.create(this.doc.context); + comboBox.setPartialName(nameParts.terminal); + addFieldToParent(parent, [comboBox, comboBox.ref], nameParts.terminal); + return PDFDropdown_default.of(comboBox, comboBox.ref, this.doc); + }; + PDFForm2.prototype.createOptionList = function(name) { + assertIs(name, "name", ["string"]); + var nameParts = splitFieldName(name); + var parent = this.findOrCreateNonTerminals(nameParts.nonTerminal); + var listBox = PDFAcroListBox_default.create(this.doc.context); + listBox.setPartialName(nameParts.terminal); + addFieldToParent(parent, [listBox, listBox.ref], nameParts.terminal); + return PDFOptionList_default.of(listBox, listBox.ref, this.doc); + }; + PDFForm2.prototype.createRadioGroup = function(name) { + assertIs(name, "name", ["string"]); + var nameParts = splitFieldName(name); + var parent = this.findOrCreateNonTerminals(nameParts.nonTerminal); + var radioButton = PDFAcroRadioButton_default.create(this.doc.context); + radioButton.setPartialName(nameParts.terminal); + addFieldToParent(parent, [radioButton, radioButton.ref], nameParts.terminal); + return PDFRadioGroup_default.of(radioButton, radioButton.ref, this.doc); + }; + PDFForm2.prototype.createTextField = function(name) { + assertIs(name, "name", ["string"]); + var nameParts = splitFieldName(name); + var parent = this.findOrCreateNonTerminals(nameParts.nonTerminal); + var text = PDFAcroText_default.create(this.doc.context); + text.setPartialName(nameParts.terminal); + addFieldToParent(parent, [text, text.ref], nameParts.terminal); + return PDFTextField_default.of(text, text.ref, this.doc); + }; + PDFForm2.prototype.flatten = function(options) { + if (options === void 0) { + options = { updateFieldAppearances: true }; + } + if (options.updateFieldAppearances) { + this.updateFieldAppearances(); + } + var fields = this.getFields(); + for (var i = 0, lenFields = fields.length; i < lenFields; i++) { + var field = fields[i]; + var widgets = field.acroField.getWidgets(); + for (var j = 0, lenWidgets = widgets.length; j < lenWidgets; j++) { + var widget = widgets[j]; + var page = this.findWidgetPage(widget); + var widgetRef = this.findWidgetAppearanceRef(field, widget); + var xObjectKey = page.node.newXObject("FlatWidget", widgetRef); + var rectangle = widget.getRectangle(); + var operators = __spreadArrays([ + pushGraphicsState(), + translate(rectangle.x, rectangle.y) + ], rotateInPlace(__assign(__assign({}, rectangle), { rotation: 0 })), [ + drawObject(xObjectKey), + popGraphicsState() + ]).filter(Boolean); + page.pushOperators.apply(page, operators); + } + this.removeField(field); + } + }; + PDFForm2.prototype.removeField = function(field) { + var widgets = field.acroField.getWidgets(); + var pages = /* @__PURE__ */ new Set(); + for (var i = 0, len = widgets.length; i < len; i++) { + var widget = widgets[i]; + var widgetRef = this.findWidgetAppearanceRef(field, widget); + var page = this.findWidgetPage(widget); + pages.add(page); + page.node.removeAnnot(widgetRef); + } + pages.forEach(function(page2) { + return page2.node.removeAnnot(field.ref); + }); + this.acroForm.removeField(field.acroField); + var fieldKids = field.acroField.normalizedEntries().Kids; + var kidsCount = fieldKids.size(); + for (var childIndex = 0; childIndex < kidsCount; childIndex++) { + var child = fieldKids.get(childIndex); + if (child instanceof PDFRef_default) { + this.doc.context.delete(child); + } + } + this.doc.context.delete(field.ref); + }; + PDFForm2.prototype.updateFieldAppearances = function(font) { + assertOrUndefined(font, "font", [[PDFFont_default, "PDFFont"]]); + font = font !== null && font !== void 0 ? font : this.getDefaultFont(); + var fields = this.getFields(); + for (var idx = 0, len = fields.length; idx < len; idx++) { + var field = fields[idx]; + if (field.needsAppearancesUpdate()) { + field.defaultUpdateAppearances(font); + } + } + }; + PDFForm2.prototype.markFieldAsDirty = function(fieldRef) { + assertOrUndefined(fieldRef, "fieldRef", [[PDFRef_default, "PDFRef"]]); + this.dirtyFields.add(fieldRef); + }; + PDFForm2.prototype.markFieldAsClean = function(fieldRef) { + assertOrUndefined(fieldRef, "fieldRef", [[PDFRef_default, "PDFRef"]]); + this.dirtyFields.delete(fieldRef); + }; + PDFForm2.prototype.fieldIsDirty = function(fieldRef) { + assertOrUndefined(fieldRef, "fieldRef", [[PDFRef_default, "PDFRef"]]); + return this.dirtyFields.has(fieldRef); + }; + PDFForm2.prototype.getDefaultFont = function() { + return this.defaultFontCache.access(); + }; + PDFForm2.prototype.findWidgetPage = function(widget) { + var pageRef = widget.P(); + var page = this.doc.getPages().find(function(x) { + return x.ref === pageRef; + }); + if (page === void 0) { + var widgetRef = this.doc.context.getObjectRef(widget.dict); + if (widgetRef === void 0) { + throw new Error("Could not find PDFRef for PDFObject"); + } + page = this.doc.findPageForAnnotationRef(widgetRef); + if (page === void 0) { + throw new Error("Could not find page for PDFRef " + widgetRef); + } + } + return page; + }; + PDFForm2.prototype.findWidgetAppearanceRef = function(field, widget) { + var _a; + var refOrDict = widget.getNormalAppearance(); + if (refOrDict instanceof PDFDict_default && (field instanceof PDFCheckBox_default || field instanceof PDFRadioGroup_default)) { + var value = field.acroField.getValue(); + var ref = (_a = refOrDict.get(value)) !== null && _a !== void 0 ? _a : refOrDict.get(PDFName_default.of("Off")); + if (ref instanceof PDFRef_default) { + refOrDict = ref; + } + } + if (!(refOrDict instanceof PDFRef_default)) { + var name_1 = field.getName(); + throw new Error("Failed to extract appearance ref for: " + name_1); + } + return refOrDict; + }; + PDFForm2.prototype.findOrCreateNonTerminals = function(partialNames) { + var nonTerminal = [ + this.acroForm + ]; + for (var idx = 0, len = partialNames.length; idx < len; idx++) { + var namePart = partialNames[idx]; + if (!namePart) + throw new InvalidFieldNamePartError(namePart); + var parent_1 = nonTerminal[0], parentRef = nonTerminal[1]; + var res = this.findNonTerminal(namePart, parent_1); + if (res) { + nonTerminal = res; + } else { + var node = PDFAcroNonTerminal_default.create(this.doc.context); + node.setPartialName(namePart); + node.setParent(parentRef); + var nodeRef = this.doc.context.register(node.dict); + parent_1.addField(nodeRef); + nonTerminal = [node, nodeRef]; + } + } + return nonTerminal; + }; + PDFForm2.prototype.findNonTerminal = function(partialName, parent) { + var fields = parent instanceof PDFAcroForm_default ? this.acroForm.getFields() : createPDFAcroFields(parent.Kids()); + for (var idx = 0, len = fields.length; idx < len; idx++) { + var _a = fields[idx], field = _a[0], ref = _a[1]; + if (field.getPartialName() === partialName) { + if (field instanceof PDFAcroNonTerminal_default) + return [field, ref]; + throw new FieldAlreadyExistsError(partialName); + } + } + return void 0; + }; + PDFForm2.of = function(acroForm, doc) { + return new PDFForm2(acroForm, doc); + }; + return PDFForm2; + }() +); +var PDFForm_default = PDFForm; +var convertToPDFField = function(field, ref, doc) { + if (field instanceof PDFAcroPushButton_default) + return PDFButton_default.of(field, ref, doc); + if (field instanceof PDFAcroCheckBox_default) + return PDFCheckBox_default.of(field, ref, doc); + if (field instanceof PDFAcroComboBox_default) + return PDFDropdown_default.of(field, ref, doc); + if (field instanceof PDFAcroListBox_default) + return PDFOptionList_default.of(field, ref, doc); + if (field instanceof PDFAcroText_default) + return PDFTextField_default.of(field, ref, doc); + if (field instanceof PDFAcroRadioButton_default) { + return PDFRadioGroup_default.of(field, ref, doc); + } + if (field instanceof PDFAcroSignature_default) { + return PDFSignature_default.of(field, ref, doc); + } + return void 0; +}; +var splitFieldName = function(fullyQualifiedName) { + if (fullyQualifiedName.length === 0) { + throw new Error("PDF field names must not be empty strings"); + } + var parts = fullyQualifiedName.split("."); + for (var idx = 0, len = parts.length; idx < len; idx++) { + if (parts[idx] === "") { + throw new Error('Periods in PDF field names must be separated by at least one character: "' + fullyQualifiedName + '"'); + } + } + if (parts.length === 1) + return { nonTerminal: [], terminal: parts[0] }; + return { + nonTerminal: parts.slice(0, parts.length - 1), + terminal: parts[parts.length - 1] + }; +}; +var addFieldToParent = function(_a, _b, partialName) { + var parent = _a[0], parentRef = _a[1]; + var field = _b[0], fieldRef = _b[1]; + var entries = parent.normalizedEntries(); + var fields = createPDFAcroFields("Kids" in entries ? entries.Kids : entries.Fields); + for (var idx = 0, len = fields.length; idx < len; idx++) { + if (fields[idx][0].getPartialName() === partialName) { + throw new FieldAlreadyExistsError(partialName); + } + } + parent.addField(fieldRef); + field.setParent(parentRef); +}; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/api/sizes.js +var PageSizes = { + "4A0": [4767.87, 6740.79], + "2A0": [3370.39, 4767.87], + A0: [2383.94, 3370.39], + A1: [1683.78, 2383.94], + A2: [1190.55, 1683.78], + A3: [841.89, 1190.55], + A4: [595.28, 841.89], + A5: [419.53, 595.28], + A6: [297.64, 419.53], + A7: [209.76, 297.64], + A8: [147.4, 209.76], + A9: [104.88, 147.4], + A10: [73.7, 104.88], + B0: [2834.65, 4008.19], + B1: [2004.09, 2834.65], + B2: [1417.32, 2004.09], + B3: [1000.63, 1417.32], + B4: [708.66, 1000.63], + B5: [498.9, 708.66], + B6: [354.33, 498.9], + B7: [249.45, 354.33], + B8: [175.75, 249.45], + B9: [124.72, 175.75], + B10: [87.87, 124.72], + C0: [2599.37, 3676.54], + C1: [1836.85, 2599.37], + C2: [1298.27, 1836.85], + C3: [918.43, 1298.27], + C4: [649.13, 918.43], + C5: [459.21, 649.13], + C6: [323.15, 459.21], + C7: [229.61, 323.15], + C8: [161.57, 229.61], + C9: [113.39, 161.57], + C10: [79.37, 113.39], + RA0: [2437.8, 3458.27], + RA1: [1729.13, 2437.8], + RA2: [1218.9, 1729.13], + RA3: [864.57, 1218.9], + RA4: [609.45, 864.57], + SRA0: [2551.18, 3628.35], + SRA1: [1814.17, 2551.18], + SRA2: [1275.59, 1814.17], + SRA3: [907.09, 1275.59], + SRA4: [637.8, 907.09], + Executive: [521.86, 756], + Folio: [612, 936], + Legal: [612, 1008], + Letter: [612, 792], + Tabloid: [792, 1224] +}; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/api/PDFDocumentOptions.js +var ParseSpeeds; +(function(ParseSpeeds2) { + ParseSpeeds2[ParseSpeeds2["Fastest"] = Infinity] = "Fastest"; + ParseSpeeds2[ParseSpeeds2["Fast"] = 1500] = "Fast"; + ParseSpeeds2[ParseSpeeds2["Medium"] = 500] = "Medium"; + ParseSpeeds2[ParseSpeeds2["Slow"] = 100] = "Slow"; +})(ParseSpeeds || (ParseSpeeds = {})); + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/api/PDFEmbeddedFile.js +var PDFEmbeddedFile = ( + /** @class */ + function() { + function PDFEmbeddedFile2(ref, doc, embedder) { + this.alreadyEmbedded = false; + this.ref = ref; + this.doc = doc; + this.embedder = embedder; + } + PDFEmbeddedFile2.prototype.embed = function() { + return __awaiter(this, void 0, void 0, function() { + var ref, Names, EmbeddedFiles, EFNames, AF; + return __generator(this, function(_a) { + switch (_a.label) { + case 0: + if (!!this.alreadyEmbedded) return [3, 2]; + return [4, this.embedder.embedIntoContext(this.doc.context, this.ref)]; + case 1: + ref = _a.sent(); + if (!this.doc.catalog.has(PDFName_default.of("Names"))) { + this.doc.catalog.set(PDFName_default.of("Names"), this.doc.context.obj({})); + } + Names = this.doc.catalog.lookup(PDFName_default.of("Names"), PDFDict_default); + if (!Names.has(PDFName_default.of("EmbeddedFiles"))) { + Names.set(PDFName_default.of("EmbeddedFiles"), this.doc.context.obj({})); + } + EmbeddedFiles = Names.lookup(PDFName_default.of("EmbeddedFiles"), PDFDict_default); + if (!EmbeddedFiles.has(PDFName_default.of("Names"))) { + EmbeddedFiles.set(PDFName_default.of("Names"), this.doc.context.obj([])); + } + EFNames = EmbeddedFiles.lookup(PDFName_default.of("Names"), PDFArray_default); + EFNames.push(PDFHexString_default.fromText(this.embedder.fileName)); + EFNames.push(ref); + if (!this.doc.catalog.has(PDFName_default.of("AF"))) { + this.doc.catalog.set(PDFName_default.of("AF"), this.doc.context.obj([])); + } + AF = this.doc.catalog.lookup(PDFName_default.of("AF"), PDFArray_default); + AF.push(ref); + this.alreadyEmbedded = true; + _a.label = 2; + case 2: + return [ + 2 + /*return*/ + ]; + } + }); + }); + }; + PDFEmbeddedFile2.of = function(ref, doc, embedder) { + return new PDFEmbeddedFile2(ref, doc, embedder); + }; + return PDFEmbeddedFile2; + }() +); +var PDFEmbeddedFile_default = PDFEmbeddedFile; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/api/PDFJavaScript.js +var PDFJavaScript = ( + /** @class */ + function() { + function PDFJavaScript2(ref, doc, embedder) { + this.alreadyEmbedded = false; + this.ref = ref; + this.doc = doc; + this.embedder = embedder; + } + PDFJavaScript2.prototype.embed = function() { + return __awaiter(this, void 0, void 0, function() { + var _a, catalog, context, ref, Names, Javascript, JSNames; + return __generator(this, function(_b) { + switch (_b.label) { + case 0: + if (!!this.alreadyEmbedded) return [3, 2]; + _a = this.doc, catalog = _a.catalog, context = _a.context; + return [4, this.embedder.embedIntoContext(this.doc.context, this.ref)]; + case 1: + ref = _b.sent(); + if (!catalog.has(PDFName_default.of("Names"))) { + catalog.set(PDFName_default.of("Names"), context.obj({})); + } + Names = catalog.lookup(PDFName_default.of("Names"), PDFDict_default); + if (!Names.has(PDFName_default.of("JavaScript"))) { + Names.set(PDFName_default.of("JavaScript"), context.obj({})); + } + Javascript = Names.lookup(PDFName_default.of("JavaScript"), PDFDict_default); + if (!Javascript.has(PDFName_default.of("Names"))) { + Javascript.set(PDFName_default.of("Names"), context.obj([])); + } + JSNames = Javascript.lookup(PDFName_default.of("Names"), PDFArray_default); + JSNames.push(PDFHexString_default.fromText(this.embedder.scriptName)); + JSNames.push(ref); + this.alreadyEmbedded = true; + _b.label = 2; + case 2: + return [ + 2 + /*return*/ + ]; + } + }); + }); + }; + PDFJavaScript2.of = function(ref, doc, embedder) { + return new PDFJavaScript2(ref, doc, embedder); + }; + return PDFJavaScript2; + }() +); +var PDFJavaScript_default = PDFJavaScript; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/core/embedders/JavaScriptEmbedder.js +var JavaScriptEmbedder = ( + /** @class */ + function() { + function JavaScriptEmbedder2(script, scriptName) { + this.script = script; + this.scriptName = scriptName; + } + JavaScriptEmbedder2.for = function(script, scriptName) { + return new JavaScriptEmbedder2(script, scriptName); + }; + JavaScriptEmbedder2.prototype.embedIntoContext = function(context, ref) { + return __awaiter(this, void 0, void 0, function() { + var jsActionDict; + return __generator(this, function(_a) { + jsActionDict = context.obj({ + Type: "Action", + S: "JavaScript", + JS: PDFHexString_default.fromText(this.script) + }); + if (ref) { + context.assign(ref, jsActionDict); + return [2, ref]; + } else { + return [2, context.register(jsActionDict)]; + } + return [ + 2 + /*return*/ + ]; + }); + }); + }; + return JavaScriptEmbedder2; + }() +); +var JavaScriptEmbedder_default = JavaScriptEmbedder; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/api/PDFDocument.js +var PDFDocument = ( + /** @class */ + function() { + function PDFDocument2(context, ignoreEncryption, updateMetadata) { + var _this = this; + this.defaultWordBreaks = [" "]; + this.computePages = function() { + var pages = []; + _this.catalog.Pages().traverse(function(node, ref) { + if (node instanceof PDFPageLeaf_default) { + var page = _this.pageMap.get(node); + if (!page) { + page = PDFPage_default.of(node, ref, _this); + _this.pageMap.set(node, page); + } + pages.push(page); + } + }); + return pages; + }; + this.getOrCreateForm = function() { + var acroForm = _this.catalog.getOrCreateAcroForm(); + return PDFForm_default.of(acroForm, _this); + }; + assertIs(context, "context", [[PDFContext_default, "PDFContext"]]); + assertIs(ignoreEncryption, "ignoreEncryption", ["boolean"]); + this.context = context; + this.catalog = context.lookup(context.trailerInfo.Root); + this.isEncrypted = !!context.lookup(context.trailerInfo.Encrypt); + this.pageCache = Cache_default.populatedBy(this.computePages); + this.pageMap = /* @__PURE__ */ new Map(); + this.formCache = Cache_default.populatedBy(this.getOrCreateForm); + this.fonts = []; + this.images = []; + this.embeddedPages = []; + this.embeddedFiles = []; + this.javaScripts = []; + if (!ignoreEncryption && this.isEncrypted) + throw new EncryptedPDFError(); + if (updateMetadata) + this.updateInfoDict(); + } + PDFDocument2.load = function(pdf, options) { + if (options === void 0) { + options = {}; + } + return __awaiter(this, void 0, void 0, function() { + var _a, ignoreEncryption, _b, parseSpeed, _c, throwOnInvalidObject, _d, updateMetadata, _e, capNumbers, bytes, context; + return __generator(this, function(_f) { + switch (_f.label) { + case 0: + _a = options.ignoreEncryption, ignoreEncryption = _a === void 0 ? false : _a, _b = options.parseSpeed, parseSpeed = _b === void 0 ? ParseSpeeds.Slow : _b, _c = options.throwOnInvalidObject, throwOnInvalidObject = _c === void 0 ? false : _c, _d = options.updateMetadata, updateMetadata = _d === void 0 ? true : _d, _e = options.capNumbers, capNumbers = _e === void 0 ? false : _e; + assertIs(pdf, "pdf", ["string", Uint8Array, ArrayBuffer]); + assertIs(ignoreEncryption, "ignoreEncryption", ["boolean"]); + assertIs(parseSpeed, "parseSpeed", ["number"]); + assertIs(throwOnInvalidObject, "throwOnInvalidObject", ["boolean"]); + bytes = toUint8Array(pdf); + return [4, PDFParser_default.forBytesWithOptions(bytes, parseSpeed, throwOnInvalidObject, capNumbers).parseDocument()]; + case 1: + context = _f.sent(); + return [2, new PDFDocument2(context, ignoreEncryption, updateMetadata)]; + } + }); + }); + }; + PDFDocument2.create = function(options) { + if (options === void 0) { + options = {}; + } + return __awaiter(this, void 0, void 0, function() { + var _a, updateMetadata, context, pageTree, pageTreeRef, catalog; + return __generator(this, function(_b) { + _a = options.updateMetadata, updateMetadata = _a === void 0 ? true : _a; + context = PDFContext_default.create(); + pageTree = PDFPageTree_default.withContext(context); + pageTreeRef = context.register(pageTree); + catalog = PDFCatalog_default.withContextAndPages(context, pageTreeRef); + context.trailerInfo.Root = context.register(catalog); + return [2, new PDFDocument2(context, false, updateMetadata)]; + }); + }); + }; + PDFDocument2.prototype.registerFontkit = function(fontkit) { + this.fontkit = fontkit; + }; + PDFDocument2.prototype.getForm = function() { + var form = this.formCache.access(); + if (form.hasXFA()) { + console.warn("Removing XFA form data as pdf-lib does not support reading or writing XFA"); + form.deleteXFA(); + } + return form; + }; + PDFDocument2.prototype.getTitle = function() { + var title = this.getInfoDict().lookup(PDFName_default.Title); + if (!title) + return void 0; + assertIsLiteralOrHexString(title); + return title.decodeText(); + }; + PDFDocument2.prototype.getAuthor = function() { + var author = this.getInfoDict().lookup(PDFName_default.Author); + if (!author) + return void 0; + assertIsLiteralOrHexString(author); + return author.decodeText(); + }; + PDFDocument2.prototype.getSubject = function() { + var subject = this.getInfoDict().lookup(PDFName_default.Subject); + if (!subject) + return void 0; + assertIsLiteralOrHexString(subject); + return subject.decodeText(); + }; + PDFDocument2.prototype.getKeywords = function() { + var keywords = this.getInfoDict().lookup(PDFName_default.Keywords); + if (!keywords) + return void 0; + assertIsLiteralOrHexString(keywords); + return keywords.decodeText(); + }; + PDFDocument2.prototype.getCreator = function() { + var creator = this.getInfoDict().lookup(PDFName_default.Creator); + if (!creator) + return void 0; + assertIsLiteralOrHexString(creator); + return creator.decodeText(); + }; + PDFDocument2.prototype.getProducer = function() { + var producer = this.getInfoDict().lookup(PDFName_default.Producer); + if (!producer) + return void 0; + assertIsLiteralOrHexString(producer); + return producer.decodeText(); + }; + PDFDocument2.prototype.getCreationDate = function() { + var creationDate = this.getInfoDict().lookup(PDFName_default.CreationDate); + if (!creationDate) + return void 0; + assertIsLiteralOrHexString(creationDate); + return creationDate.decodeDate(); + }; + PDFDocument2.prototype.getModificationDate = function() { + var modificationDate = this.getInfoDict().lookup(PDFName_default.ModDate); + if (!modificationDate) + return void 0; + assertIsLiteralOrHexString(modificationDate); + return modificationDate.decodeDate(); + }; + PDFDocument2.prototype.setTitle = function(title, options) { + assertIs(title, "title", ["string"]); + var key = PDFName_default.of("Title"); + this.getInfoDict().set(key, PDFHexString_default.fromText(title)); + if (options === null || options === void 0 ? void 0 : options.showInWindowTitleBar) { + var prefs = this.catalog.getOrCreateViewerPreferences(); + prefs.setDisplayDocTitle(true); + } + }; + PDFDocument2.prototype.setAuthor = function(author) { + assertIs(author, "author", ["string"]); + var key = PDFName_default.of("Author"); + this.getInfoDict().set(key, PDFHexString_default.fromText(author)); + }; + PDFDocument2.prototype.setSubject = function(subject) { + assertIs(subject, "author", ["string"]); + var key = PDFName_default.of("Subject"); + this.getInfoDict().set(key, PDFHexString_default.fromText(subject)); + }; + PDFDocument2.prototype.setKeywords = function(keywords) { + assertIs(keywords, "keywords", [Array]); + var key = PDFName_default.of("Keywords"); + this.getInfoDict().set(key, PDFHexString_default.fromText(keywords.join(" "))); + }; + PDFDocument2.prototype.setCreator = function(creator) { + assertIs(creator, "creator", ["string"]); + var key = PDFName_default.of("Creator"); + this.getInfoDict().set(key, PDFHexString_default.fromText(creator)); + }; + PDFDocument2.prototype.setProducer = function(producer) { + assertIs(producer, "creator", ["string"]); + var key = PDFName_default.of("Producer"); + this.getInfoDict().set(key, PDFHexString_default.fromText(producer)); + }; + PDFDocument2.prototype.setLanguage = function(language) { + assertIs(language, "language", ["string"]); + var key = PDFName_default.of("Lang"); + this.catalog.set(key, PDFString_default.of(language)); + }; + PDFDocument2.prototype.setCreationDate = function(creationDate) { + assertIs(creationDate, "creationDate", [[Date, "Date"]]); + var key = PDFName_default.of("CreationDate"); + this.getInfoDict().set(key, PDFString_default.fromDate(creationDate)); + }; + PDFDocument2.prototype.setModificationDate = function(modificationDate) { + assertIs(modificationDate, "modificationDate", [[Date, "Date"]]); + var key = PDFName_default.of("ModDate"); + this.getInfoDict().set(key, PDFString_default.fromDate(modificationDate)); + }; + PDFDocument2.prototype.getPageCount = function() { + if (this.pageCount === void 0) + this.pageCount = this.getPages().length; + return this.pageCount; + }; + PDFDocument2.prototype.getPages = function() { + return this.pageCache.access(); + }; + PDFDocument2.prototype.getPage = function(index) { + var pages = this.getPages(); + assertRange(index, "index", 0, pages.length - 1); + return pages[index]; + }; + PDFDocument2.prototype.getPageIndices = function() { + return range(0, this.getPageCount()); + }; + PDFDocument2.prototype.removePage = function(index) { + var pageCount = this.getPageCount(); + if (this.pageCount === 0) + throw new RemovePageFromEmptyDocumentError(); + assertRange(index, "index", 0, pageCount - 1); + this.catalog.removeLeafNode(index); + this.pageCount = pageCount - 1; + }; + PDFDocument2.prototype.addPage = function(page) { + assertIs(page, "page", ["undefined", [PDFPage_default, "PDFPage"], Array]); + return this.insertPage(this.getPageCount(), page); + }; + PDFDocument2.prototype.insertPage = function(index, page) { + var pageCount = this.getPageCount(); + assertRange(index, "index", 0, pageCount); + assertIs(page, "page", ["undefined", [PDFPage_default, "PDFPage"], Array]); + if (!page || Array.isArray(page)) { + var dims = Array.isArray(page) ? page : PageSizes.A4; + page = PDFPage_default.create(this); + page.setSize.apply(page, dims); + } else if (page.doc !== this) { + throw new ForeignPageError(); + } + var parentRef = this.catalog.insertLeafNode(page.ref, index); + page.node.setParent(parentRef); + this.pageMap.set(page.node, page); + this.pageCache.invalidate(); + this.pageCount = pageCount + 1; + return page; + }; + PDFDocument2.prototype.copyPages = function(srcDoc, indices) { + return __awaiter(this, void 0, void 0, function() { + var copier, srcPages, copiedPages, idx, len, srcPage, copiedPage, ref; + return __generator(this, function(_a) { + switch (_a.label) { + case 0: + assertIs(srcDoc, "srcDoc", [[PDFDocument2, "PDFDocument"]]); + assertIs(indices, "indices", [Array]); + return [4, srcDoc.flush()]; + case 1: + _a.sent(); + copier = PDFObjectCopier_default.for(srcDoc.context, this.context); + srcPages = srcDoc.getPages(); + copiedPages = new Array(indices.length); + for (idx = 0, len = indices.length; idx < len; idx++) { + srcPage = srcPages[indices[idx]]; + copiedPage = copier.copy(srcPage.node); + ref = this.context.register(copiedPage); + copiedPages[idx] = PDFPage_default.of(copiedPage, ref, this); + } + return [2, copiedPages]; + } + }); + }); + }; + PDFDocument2.prototype.copy = function() { + return __awaiter(this, void 0, void 0, function() { + var pdfCopy, contentPages, idx, len; + return __generator(this, function(_a) { + switch (_a.label) { + case 0: + return [4, PDFDocument2.create()]; + case 1: + pdfCopy = _a.sent(); + return [4, pdfCopy.copyPages(this, this.getPageIndices())]; + case 2: + contentPages = _a.sent(); + for (idx = 0, len = contentPages.length; idx < len; idx++) { + pdfCopy.addPage(contentPages[idx]); + } + if (this.getAuthor() !== void 0) { + pdfCopy.setAuthor(this.getAuthor()); + } + if (this.getCreationDate() !== void 0) { + pdfCopy.setCreationDate(this.getCreationDate()); + } + if (this.getCreator() !== void 0) { + pdfCopy.setCreator(this.getCreator()); + } + if (this.getModificationDate() !== void 0) { + pdfCopy.setModificationDate(this.getModificationDate()); + } + if (this.getProducer() !== void 0) { + pdfCopy.setProducer(this.getProducer()); + } + if (this.getSubject() !== void 0) { + pdfCopy.setSubject(this.getSubject()); + } + if (this.getTitle() !== void 0) { + pdfCopy.setTitle(this.getTitle()); + } + pdfCopy.defaultWordBreaks = this.defaultWordBreaks; + return [2, pdfCopy]; + } + }); + }); + }; + PDFDocument2.prototype.addJavaScript = function(name, script) { + assertIs(name, "name", ["string"]); + assertIs(script, "script", ["string"]); + var embedder = JavaScriptEmbedder_default.for(script, name); + var ref = this.context.nextRef(); + var javaScript = PDFJavaScript_default.of(ref, this, embedder); + this.javaScripts.push(javaScript); + }; + PDFDocument2.prototype.attach = function(attachment, name, options) { + if (options === void 0) { + options = {}; + } + return __awaiter(this, void 0, void 0, function() { + var bytes, embedder, ref, embeddedFile; + return __generator(this, function(_a) { + assertIs(attachment, "attachment", ["string", Uint8Array, ArrayBuffer]); + assertIs(name, "name", ["string"]); + assertOrUndefined(options.mimeType, "mimeType", ["string"]); + assertOrUndefined(options.description, "description", ["string"]); + assertOrUndefined(options.creationDate, "options.creationDate", [Date]); + assertOrUndefined(options.modificationDate, "options.modificationDate", [ + Date + ]); + assertIsOneOfOrUndefined(options.afRelationship, "options.afRelationship", AFRelationship); + bytes = toUint8Array(attachment); + embedder = FileEmbedder_default.for(bytes, name, options); + ref = this.context.nextRef(); + embeddedFile = PDFEmbeddedFile_default.of(ref, this, embedder); + this.embeddedFiles.push(embeddedFile); + return [ + 2 + /*return*/ + ]; + }); + }); + }; + PDFDocument2.prototype.embedFont = function(font, options) { + if (options === void 0) { + options = {}; + } + return __awaiter(this, void 0, void 0, function() { + var _a, subset, customName, features, embedder, bytes, fontkit, _b, ref, pdfFont; + return __generator(this, function(_c) { + switch (_c.label) { + case 0: + _a = options.subset, subset = _a === void 0 ? false : _a, customName = options.customName, features = options.features; + assertIs(font, "font", ["string", Uint8Array, ArrayBuffer]); + assertIs(subset, "subset", ["boolean"]); + if (!isStandardFont(font)) return [3, 1]; + embedder = StandardFontEmbedder_default.for(font, customName); + return [3, 7]; + case 1: + if (!canBeConvertedToUint8Array(font)) return [3, 6]; + bytes = toUint8Array(font); + fontkit = this.assertFontkit(); + if (!subset) return [3, 3]; + return [4, CustomFontSubsetEmbedder_default.for(fontkit, bytes, customName, features)]; + case 2: + _b = _c.sent(); + return [3, 5]; + case 3: + return [4, CustomFontEmbedder_default.for(fontkit, bytes, customName, features)]; + case 4: + _b = _c.sent(); + _c.label = 5; + case 5: + embedder = _b; + return [3, 7]; + case 6: + throw new TypeError("`font` must be one of `StandardFonts | string | Uint8Array | ArrayBuffer`"); + case 7: + ref = this.context.nextRef(); + pdfFont = PDFFont_default.of(ref, this, embedder); + this.fonts.push(pdfFont); + return [2, pdfFont]; + } + }); + }); + }; + PDFDocument2.prototype.embedStandardFont = function(font, customName) { + assertIs(font, "font", ["string"]); + if (!isStandardFont(font)) { + throw new TypeError("`font` must be one of type `StandardFonts`"); + } + var embedder = StandardFontEmbedder_default.for(font, customName); + var ref = this.context.nextRef(); + var pdfFont = PDFFont_default.of(ref, this, embedder); + this.fonts.push(pdfFont); + return pdfFont; + }; + PDFDocument2.prototype.embedJpg = function(jpg) { + return __awaiter(this, void 0, void 0, function() { + var bytes, embedder, ref, pdfImage; + return __generator(this, function(_a) { + switch (_a.label) { + case 0: + assertIs(jpg, "jpg", ["string", Uint8Array, ArrayBuffer]); + bytes = toUint8Array(jpg); + return [4, JpegEmbedder_default.for(bytes)]; + case 1: + embedder = _a.sent(); + ref = this.context.nextRef(); + pdfImage = PDFImage_default.of(ref, this, embedder); + this.images.push(pdfImage); + return [2, pdfImage]; + } + }); + }); + }; + PDFDocument2.prototype.embedPng = function(png) { + return __awaiter(this, void 0, void 0, function() { + var bytes, embedder, ref, pdfImage; + return __generator(this, function(_a) { + switch (_a.label) { + case 0: + assertIs(png, "png", ["string", Uint8Array, ArrayBuffer]); + bytes = toUint8Array(png); + return [4, PngEmbedder_default.for(bytes)]; + case 1: + embedder = _a.sent(); + ref = this.context.nextRef(); + pdfImage = PDFImage_default.of(ref, this, embedder); + this.images.push(pdfImage); + return [2, pdfImage]; + } + }); + }); + }; + PDFDocument2.prototype.embedPdf = function(pdf, indices) { + if (indices === void 0) { + indices = [0]; + } + return __awaiter(this, void 0, void 0, function() { + var srcDoc, _a, srcPages; + return __generator(this, function(_b) { + switch (_b.label) { + case 0: + assertIs(pdf, "pdf", [ + "string", + Uint8Array, + ArrayBuffer, + [PDFDocument2, "PDFDocument"] + ]); + assertIs(indices, "indices", [Array]); + if (!(pdf instanceof PDFDocument2)) return [3, 1]; + _a = pdf; + return [3, 3]; + case 1: + return [4, PDFDocument2.load(pdf)]; + case 2: + _a = _b.sent(); + _b.label = 3; + case 3: + srcDoc = _a; + srcPages = pluckIndices(srcDoc.getPages(), indices); + return [2, this.embedPages(srcPages)]; + } + }); + }); + }; + PDFDocument2.prototype.embedPage = function(page, boundingBox, transformationMatrix) { + return __awaiter(this, void 0, void 0, function() { + var embeddedPage; + return __generator(this, function(_a) { + switch (_a.label) { + case 0: + assertIs(page, "page", [[PDFPage_default, "PDFPage"]]); + return [4, this.embedPages([page], [boundingBox], [transformationMatrix])]; + case 1: + embeddedPage = _a.sent()[0]; + return [2, embeddedPage]; + } + }); + }); + }; + PDFDocument2.prototype.embedPages = function(pages, boundingBoxes, transformationMatrices) { + if (boundingBoxes === void 0) { + boundingBoxes = []; + } + if (transformationMatrices === void 0) { + transformationMatrices = []; + } + return __awaiter(this, void 0, void 0, function() { + var idx, len, currPage, nextPage, context, maybeCopyPage, embeddedPages, idx, len, page, box, matrix, embedder, ref; + var _a; + return __generator(this, function(_b) { + switch (_b.label) { + case 0: + if (pages.length === 0) + return [2, []]; + for (idx = 0, len = pages.length - 1; idx < len; idx++) { + currPage = pages[idx]; + nextPage = pages[idx + 1]; + if (currPage.node.context !== nextPage.node.context) { + throw new PageEmbeddingMismatchedContextError(); + } + } + context = pages[0].node.context; + maybeCopyPage = context === this.context ? function(p) { + return p; + } : PDFObjectCopier_default.for(context, this.context).copy; + embeddedPages = new Array(pages.length); + idx = 0, len = pages.length; + _b.label = 1; + case 1: + if (!(idx < len)) return [3, 4]; + page = maybeCopyPage(pages[idx].node); + box = boundingBoxes[idx]; + matrix = transformationMatrices[idx]; + return [4, PDFPageEmbedder_default.for(page, box, matrix)]; + case 2: + embedder = _b.sent(); + ref = this.context.nextRef(); + embeddedPages[idx] = PDFEmbeddedPage_default.of(ref, this, embedder); + _b.label = 3; + case 3: + idx++; + return [3, 1]; + case 4: + (_a = this.embeddedPages).push.apply(_a, embeddedPages); + return [2, embeddedPages]; + } + }); + }); + }; + PDFDocument2.prototype.flush = function() { + return __awaiter(this, void 0, void 0, function() { + return __generator(this, function(_a) { + switch (_a.label) { + case 0: + return [4, this.embedAll(this.fonts)]; + case 1: + _a.sent(); + return [4, this.embedAll(this.images)]; + case 2: + _a.sent(); + return [4, this.embedAll(this.embeddedPages)]; + case 3: + _a.sent(); + return [4, this.embedAll(this.embeddedFiles)]; + case 4: + _a.sent(); + return [4, this.embedAll(this.javaScripts)]; + case 5: + _a.sent(); + return [ + 2 + /*return*/ + ]; + } + }); + }); + }; + PDFDocument2.prototype.save = function(options) { + if (options === void 0) { + options = {}; + } + return __awaiter(this, void 0, void 0, function() { + var _a, useObjectStreams, _b, addDefaultPage, _c, objectsPerTick, _d, updateFieldAppearances, form, Writer; + return __generator(this, function(_e) { + switch (_e.label) { + case 0: + _a = options.useObjectStreams, useObjectStreams = _a === void 0 ? true : _a, _b = options.addDefaultPage, addDefaultPage = _b === void 0 ? true : _b, _c = options.objectsPerTick, objectsPerTick = _c === void 0 ? 50 : _c, _d = options.updateFieldAppearances, updateFieldAppearances = _d === void 0 ? true : _d; + assertIs(useObjectStreams, "useObjectStreams", ["boolean"]); + assertIs(addDefaultPage, "addDefaultPage", ["boolean"]); + assertIs(objectsPerTick, "objectsPerTick", ["number"]); + assertIs(updateFieldAppearances, "updateFieldAppearances", ["boolean"]); + if (addDefaultPage && this.getPageCount() === 0) + this.addPage(); + if (updateFieldAppearances) { + form = this.formCache.getValue(); + if (form) + form.updateFieldAppearances(); + } + return [4, this.flush()]; + case 1: + _e.sent(); + Writer = useObjectStreams ? PDFStreamWriter_default : PDFWriter_default; + return [2, Writer.forContext(this.context, objectsPerTick).serializeToBuffer()]; + } + }); + }); + }; + PDFDocument2.prototype.saveAsBase64 = function(options) { + if (options === void 0) { + options = {}; + } + return __awaiter(this, void 0, void 0, function() { + var _a, dataUri, otherOptions, bytes, base64; + return __generator(this, function(_b) { + switch (_b.label) { + case 0: + _a = options.dataUri, dataUri = _a === void 0 ? false : _a, otherOptions = __rest(options, ["dataUri"]); + assertIs(dataUri, "dataUri", ["boolean"]); + return [4, this.save(otherOptions)]; + case 1: + bytes = _b.sent(); + base64 = encodeToBase64(bytes); + return [2, dataUri ? "data:application/pdf;base64," + base64 : base64]; + } + }); + }); + }; + PDFDocument2.prototype.findPageForAnnotationRef = function(ref) { + var pages = this.getPages(); + for (var idx = 0, len = pages.length; idx < len; idx++) { + var page = pages[idx]; + var annotations = page.node.Annots(); + if ((annotations === null || annotations === void 0 ? void 0 : annotations.indexOf(ref)) !== void 0) { + return page; + } + } + return void 0; + }; + PDFDocument2.prototype.embedAll = function(embeddables) { + return __awaiter(this, void 0, void 0, function() { + var idx, len; + return __generator(this, function(_a) { + switch (_a.label) { + case 0: + idx = 0, len = embeddables.length; + _a.label = 1; + case 1: + if (!(idx < len)) return [3, 4]; + return [4, embeddables[idx].embed()]; + case 2: + _a.sent(); + _a.label = 3; + case 3: + idx++; + return [3, 1]; + case 4: + return [ + 2 + /*return*/ + ]; + } + }); + }); + }; + PDFDocument2.prototype.updateInfoDict = function() { + var pdfLib = "pdf-lib (https://github.com/Hopding/pdf-lib)"; + var now = /* @__PURE__ */ new Date(); + var info = this.getInfoDict(); + this.setProducer(pdfLib); + this.setModificationDate(now); + if (!info.get(PDFName_default.of("Creator"))) + this.setCreator(pdfLib); + if (!info.get(PDFName_default.of("CreationDate"))) + this.setCreationDate(now); + }; + PDFDocument2.prototype.getInfoDict = function() { + var existingInfo = this.context.lookup(this.context.trailerInfo.Info); + if (existingInfo instanceof PDFDict_default) + return existingInfo; + var newInfo = this.context.obj({}); + this.context.trailerInfo.Info = this.context.register(newInfo); + return newInfo; + }; + PDFDocument2.prototype.assertFontkit = function() { + if (!this.fontkit) + throw new FontkitNotRegisteredError(); + return this.fontkit; + }; + return PDFDocument2; + }() +); +var PDFDocument_default = PDFDocument; +function assertIsLiteralOrHexString(pdfObject) { + if (!(pdfObject instanceof PDFHexString_default) && !(pdfObject instanceof PDFString_default)) { + throw new UnexpectedObjectTypeError([PDFHexString_default, PDFString_default], pdfObject); + } +} + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/api/PDFPageOptions.js +var BlendMode; +(function(BlendMode2) { + BlendMode2["Normal"] = "Normal"; + BlendMode2["Multiply"] = "Multiply"; + BlendMode2["Screen"] = "Screen"; + BlendMode2["Overlay"] = "Overlay"; + BlendMode2["Darken"] = "Darken"; + BlendMode2["Lighten"] = "Lighten"; + BlendMode2["ColorDodge"] = "ColorDodge"; + BlendMode2["ColorBurn"] = "ColorBurn"; + BlendMode2["HardLight"] = "HardLight"; + BlendMode2["SoftLight"] = "SoftLight"; + BlendMode2["Difference"] = "Difference"; + BlendMode2["Exclusion"] = "Exclusion"; +})(BlendMode || (BlendMode = {})); + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/api/PDFPage.js +var PDFPage = ( + /** @class */ + function() { + function PDFPage2(leafNode, ref, doc) { + this.fontSize = 24; + this.fontColor = rgb(0, 0, 0); + this.lineHeight = 24; + this.x = 0; + this.y = 0; + assertIs(leafNode, "leafNode", [[PDFPageLeaf_default, "PDFPageLeaf"]]); + assertIs(ref, "ref", [[PDFRef_default, "PDFRef"]]); + assertIs(doc, "doc", [[PDFDocument_default, "PDFDocument"]]); + this.node = leafNode; + this.ref = ref; + this.doc = doc; + } + PDFPage2.prototype.setRotation = function(angle) { + var degreesAngle = toDegrees(angle); + assertMultiple(degreesAngle, "degreesAngle", 90); + this.node.set(PDFName_default.of("Rotate"), this.doc.context.obj(degreesAngle)); + }; + PDFPage2.prototype.getRotation = function() { + var Rotate = this.node.Rotate(); + return degrees(Rotate ? Rotate.asNumber() : 0); + }; + PDFPage2.prototype.setSize = function(width, height) { + assertIs(width, "width", ["number"]); + assertIs(height, "height", ["number"]); + var mediaBox = this.getMediaBox(); + this.setMediaBox(mediaBox.x, mediaBox.y, width, height); + var cropBox = this.getCropBox(); + var bleedBox = this.getBleedBox(); + var trimBox = this.getTrimBox(); + var artBox = this.getArtBox(); + var hasCropBox = this.node.CropBox(); + var hasBleedBox = this.node.BleedBox(); + var hasTrimBox = this.node.TrimBox(); + var hasArtBox = this.node.ArtBox(); + if (hasCropBox && rectanglesAreEqual(cropBox, mediaBox)) { + this.setCropBox(mediaBox.x, mediaBox.y, width, height); + } + if (hasBleedBox && rectanglesAreEqual(bleedBox, mediaBox)) { + this.setBleedBox(mediaBox.x, mediaBox.y, width, height); + } + if (hasTrimBox && rectanglesAreEqual(trimBox, mediaBox)) { + this.setTrimBox(mediaBox.x, mediaBox.y, width, height); + } + if (hasArtBox && rectanglesAreEqual(artBox, mediaBox)) { + this.setArtBox(mediaBox.x, mediaBox.y, width, height); + } + }; + PDFPage2.prototype.setWidth = function(width) { + assertIs(width, "width", ["number"]); + this.setSize(width, this.getSize().height); + }; + PDFPage2.prototype.setHeight = function(height) { + assertIs(height, "height", ["number"]); + this.setSize(this.getSize().width, height); + }; + PDFPage2.prototype.setMediaBox = function(x, y, width, height) { + assertIs(x, "x", ["number"]); + assertIs(y, "y", ["number"]); + assertIs(width, "width", ["number"]); + assertIs(height, "height", ["number"]); + var mediaBox = this.doc.context.obj([x, y, x + width, y + height]); + this.node.set(PDFName_default.MediaBox, mediaBox); + }; + PDFPage2.prototype.setCropBox = function(x, y, width, height) { + assertIs(x, "x", ["number"]); + assertIs(y, "y", ["number"]); + assertIs(width, "width", ["number"]); + assertIs(height, "height", ["number"]); + var cropBox = this.doc.context.obj([x, y, x + width, y + height]); + this.node.set(PDFName_default.CropBox, cropBox); + }; + PDFPage2.prototype.setBleedBox = function(x, y, width, height) { + assertIs(x, "x", ["number"]); + assertIs(y, "y", ["number"]); + assertIs(width, "width", ["number"]); + assertIs(height, "height", ["number"]); + var bleedBox = this.doc.context.obj([x, y, x + width, y + height]); + this.node.set(PDFName_default.BleedBox, bleedBox); + }; + PDFPage2.prototype.setTrimBox = function(x, y, width, height) { + assertIs(x, "x", ["number"]); + assertIs(y, "y", ["number"]); + assertIs(width, "width", ["number"]); + assertIs(height, "height", ["number"]); + var trimBox = this.doc.context.obj([x, y, x + width, y + height]); + this.node.set(PDFName_default.TrimBox, trimBox); + }; + PDFPage2.prototype.setArtBox = function(x, y, width, height) { + assertIs(x, "x", ["number"]); + assertIs(y, "y", ["number"]); + assertIs(width, "width", ["number"]); + assertIs(height, "height", ["number"]); + var artBox = this.doc.context.obj([x, y, x + width, y + height]); + this.node.set(PDFName_default.ArtBox, artBox); + }; + PDFPage2.prototype.getSize = function() { + var _a = this.getMediaBox(), width = _a.width, height = _a.height; + return { width, height }; + }; + PDFPage2.prototype.getWidth = function() { + return this.getSize().width; + }; + PDFPage2.prototype.getHeight = function() { + return this.getSize().height; + }; + PDFPage2.prototype.getMediaBox = function() { + var mediaBox = this.node.MediaBox(); + return mediaBox.asRectangle(); + }; + PDFPage2.prototype.getCropBox = function() { + var _a; + var cropBox = this.node.CropBox(); + return (_a = cropBox === null || cropBox === void 0 ? void 0 : cropBox.asRectangle()) !== null && _a !== void 0 ? _a : this.getMediaBox(); + }; + PDFPage2.prototype.getBleedBox = function() { + var _a; + var bleedBox = this.node.BleedBox(); + return (_a = bleedBox === null || bleedBox === void 0 ? void 0 : bleedBox.asRectangle()) !== null && _a !== void 0 ? _a : this.getCropBox(); + }; + PDFPage2.prototype.getTrimBox = function() { + var _a; + var trimBox = this.node.TrimBox(); + return (_a = trimBox === null || trimBox === void 0 ? void 0 : trimBox.asRectangle()) !== null && _a !== void 0 ? _a : this.getCropBox(); + }; + PDFPage2.prototype.getArtBox = function() { + var _a; + var artBox = this.node.ArtBox(); + return (_a = artBox === null || artBox === void 0 ? void 0 : artBox.asRectangle()) !== null && _a !== void 0 ? _a : this.getCropBox(); + }; + PDFPage2.prototype.translateContent = function(x, y) { + assertIs(x, "x", ["number"]); + assertIs(y, "y", ["number"]); + this.node.normalize(); + this.getContentStream(); + var start = this.createContentStream(pushGraphicsState(), translate(x, y)); + var startRef = this.doc.context.register(start); + var end = this.createContentStream(popGraphicsState()); + var endRef = this.doc.context.register(end); + this.node.wrapContentStreams(startRef, endRef); + }; + PDFPage2.prototype.scale = function(x, y) { + assertIs(x, "x", ["number"]); + assertIs(y, "y", ["number"]); + this.setSize(this.getWidth() * x, this.getHeight() * y); + this.scaleContent(x, y); + this.scaleAnnotations(x, y); + }; + PDFPage2.prototype.scaleContent = function(x, y) { + assertIs(x, "x", ["number"]); + assertIs(y, "y", ["number"]); + this.node.normalize(); + this.getContentStream(); + var start = this.createContentStream(pushGraphicsState(), scale(x, y)); + var startRef = this.doc.context.register(start); + var end = this.createContentStream(popGraphicsState()); + var endRef = this.doc.context.register(end); + this.node.wrapContentStreams(startRef, endRef); + }; + PDFPage2.prototype.scaleAnnotations = function(x, y) { + assertIs(x, "x", ["number"]); + assertIs(y, "y", ["number"]); + var annots = this.node.Annots(); + if (!annots) + return; + for (var idx = 0; idx < annots.size(); idx++) { + var annot = annots.lookup(idx); + if (annot instanceof PDFDict_default) + this.scaleAnnot(annot, x, y); + } + }; + PDFPage2.prototype.resetPosition = function() { + this.getContentStream(false); + this.x = 0; + this.y = 0; + }; + PDFPage2.prototype.setFont = function(font) { + assertIs(font, "font", [[PDFFont_default, "PDFFont"]]); + this.font = font; + this.fontKey = this.node.newFontDictionary(this.font.name, this.font.ref); + }; + PDFPage2.prototype.setFontSize = function(fontSize) { + assertIs(fontSize, "fontSize", ["number"]); + this.fontSize = fontSize; + }; + PDFPage2.prototype.setFontColor = function(fontColor) { + assertIs(fontColor, "fontColor", [[Object, "Color"]]); + this.fontColor = fontColor; + }; + PDFPage2.prototype.setLineHeight = function(lineHeight) { + assertIs(lineHeight, "lineHeight", ["number"]); + this.lineHeight = lineHeight; + }; + PDFPage2.prototype.getPosition = function() { + return { x: this.x, y: this.y }; + }; + PDFPage2.prototype.getX = function() { + return this.x; + }; + PDFPage2.prototype.getY = function() { + return this.y; + }; + PDFPage2.prototype.moveTo = function(x, y) { + assertIs(x, "x", ["number"]); + assertIs(y, "y", ["number"]); + this.x = x; + this.y = y; + }; + PDFPage2.prototype.moveDown = function(yDecrease) { + assertIs(yDecrease, "yDecrease", ["number"]); + this.y -= yDecrease; + }; + PDFPage2.prototype.moveUp = function(yIncrease) { + assertIs(yIncrease, "yIncrease", ["number"]); + this.y += yIncrease; + }; + PDFPage2.prototype.moveLeft = function(xDecrease) { + assertIs(xDecrease, "xDecrease", ["number"]); + this.x -= xDecrease; + }; + PDFPage2.prototype.moveRight = function(xIncrease) { + assertIs(xIncrease, "xIncrease", ["number"]); + this.x += xIncrease; + }; + PDFPage2.prototype.pushOperators = function() { + var operator = []; + for (var _i = 0; _i < arguments.length; _i++) { + operator[_i] = arguments[_i]; + } + assertEachIs(operator, "operator", [[PDFOperator_default, "PDFOperator"]]); + var contentStream = this.getContentStream(); + contentStream.push.apply(contentStream, operator); + }; + PDFPage2.prototype.drawText = function(text, options) { + var _a, _b, _c, _d, _e, _f, _g; + if (options === void 0) { + options = {}; + } + assertIs(text, "text", ["string"]); + assertOrUndefined(options.color, "options.color", [[Object, "Color"]]); + assertRangeOrUndefined(options.opacity, "opacity.opacity", 0, 1); + assertOrUndefined(options.font, "options.font", [[PDFFont_default, "PDFFont"]]); + assertOrUndefined(options.size, "options.size", ["number"]); + assertOrUndefined(options.rotate, "options.rotate", [[Object, "Rotation"]]); + assertOrUndefined(options.xSkew, "options.xSkew", [[Object, "Rotation"]]); + assertOrUndefined(options.ySkew, "options.ySkew", [[Object, "Rotation"]]); + assertOrUndefined(options.x, "options.x", ["number"]); + assertOrUndefined(options.y, "options.y", ["number"]); + assertOrUndefined(options.lineHeight, "options.lineHeight", ["number"]); + assertOrUndefined(options.maxWidth, "options.maxWidth", ["number"]); + assertOrUndefined(options.wordBreaks, "options.wordBreaks", [Array]); + assertIsOneOfOrUndefined(options.blendMode, "options.blendMode", BlendMode); + var _h = this.setOrEmbedFont(options.font), oldFont = _h.oldFont, newFont = _h.newFont, newFontKey = _h.newFontKey; + var fontSize = options.size || this.fontSize; + var wordBreaks = options.wordBreaks || this.doc.defaultWordBreaks; + var textWidth = function(t) { + return newFont.widthOfTextAtSize(t, fontSize); + }; + var lines = options.maxWidth === void 0 ? lineSplit(cleanText(text)) : breakTextIntoLines(text, wordBreaks, options.maxWidth, textWidth); + var encodedLines = new Array(lines.length); + for (var idx = 0, len = lines.length; idx < len; idx++) { + encodedLines[idx] = newFont.encodeText(lines[idx]); + } + var graphicsStateKey = this.maybeEmbedGraphicsState({ + opacity: options.opacity, + blendMode: options.blendMode + }); + var contentStream = this.getContentStream(); + contentStream.push.apply(contentStream, drawLinesOfText(encodedLines, { + color: (_a = options.color) !== null && _a !== void 0 ? _a : this.fontColor, + font: newFontKey, + size: fontSize, + rotate: (_b = options.rotate) !== null && _b !== void 0 ? _b : degrees(0), + xSkew: (_c = options.xSkew) !== null && _c !== void 0 ? _c : degrees(0), + ySkew: (_d = options.ySkew) !== null && _d !== void 0 ? _d : degrees(0), + x: (_e = options.x) !== null && _e !== void 0 ? _e : this.x, + y: (_f = options.y) !== null && _f !== void 0 ? _f : this.y, + lineHeight: (_g = options.lineHeight) !== null && _g !== void 0 ? _g : this.lineHeight, + graphicsState: graphicsStateKey + })); + if (options.font) { + if (oldFont) + this.setFont(oldFont); + else + this.resetFont(); + } + }; + PDFPage2.prototype.drawImage = function(image, options) { + var _a, _b, _c, _d, _e, _f, _g; + if (options === void 0) { + options = {}; + } + assertIs(image, "image", [[PDFImage_default, "PDFImage"]]); + assertOrUndefined(options.x, "options.x", ["number"]); + assertOrUndefined(options.y, "options.y", ["number"]); + assertOrUndefined(options.width, "options.width", ["number"]); + assertOrUndefined(options.height, "options.height", ["number"]); + assertOrUndefined(options.rotate, "options.rotate", [[Object, "Rotation"]]); + assertOrUndefined(options.xSkew, "options.xSkew", [[Object, "Rotation"]]); + assertOrUndefined(options.ySkew, "options.ySkew", [[Object, "Rotation"]]); + assertRangeOrUndefined(options.opacity, "opacity.opacity", 0, 1); + assertIsOneOfOrUndefined(options.blendMode, "options.blendMode", BlendMode); + var xObjectKey = this.node.newXObject("Image", image.ref); + var graphicsStateKey = this.maybeEmbedGraphicsState({ + opacity: options.opacity, + blendMode: options.blendMode + }); + var contentStream = this.getContentStream(); + contentStream.push.apply(contentStream, drawImage(xObjectKey, { + x: (_a = options.x) !== null && _a !== void 0 ? _a : this.x, + y: (_b = options.y) !== null && _b !== void 0 ? _b : this.y, + width: (_c = options.width) !== null && _c !== void 0 ? _c : image.size().width, + height: (_d = options.height) !== null && _d !== void 0 ? _d : image.size().height, + rotate: (_e = options.rotate) !== null && _e !== void 0 ? _e : degrees(0), + xSkew: (_f = options.xSkew) !== null && _f !== void 0 ? _f : degrees(0), + ySkew: (_g = options.ySkew) !== null && _g !== void 0 ? _g : degrees(0), + graphicsState: graphicsStateKey + })); + }; + PDFPage2.prototype.drawPage = function(embeddedPage, options) { + var _a, _b, _c, _d, _e; + if (options === void 0) { + options = {}; + } + assertIs(embeddedPage, "embeddedPage", [ + [PDFEmbeddedPage_default, "PDFEmbeddedPage"] + ]); + assertOrUndefined(options.x, "options.x", ["number"]); + assertOrUndefined(options.y, "options.y", ["number"]); + assertOrUndefined(options.xScale, "options.xScale", ["number"]); + assertOrUndefined(options.yScale, "options.yScale", ["number"]); + assertOrUndefined(options.width, "options.width", ["number"]); + assertOrUndefined(options.height, "options.height", ["number"]); + assertOrUndefined(options.rotate, "options.rotate", [[Object, "Rotation"]]); + assertOrUndefined(options.xSkew, "options.xSkew", [[Object, "Rotation"]]); + assertOrUndefined(options.ySkew, "options.ySkew", [[Object, "Rotation"]]); + assertRangeOrUndefined(options.opacity, "opacity.opacity", 0, 1); + assertIsOneOfOrUndefined(options.blendMode, "options.blendMode", BlendMode); + var xObjectKey = this.node.newXObject("EmbeddedPdfPage", embeddedPage.ref); + var graphicsStateKey = this.maybeEmbedGraphicsState({ + opacity: options.opacity, + blendMode: options.blendMode + }); + var xScale = options.width !== void 0 ? options.width / embeddedPage.width : options.xScale !== void 0 ? options.xScale : 1; + var yScale = options.height !== void 0 ? options.height / embeddedPage.height : options.yScale !== void 0 ? options.yScale : 1; + var contentStream = this.getContentStream(); + contentStream.push.apply(contentStream, drawPage(xObjectKey, { + x: (_a = options.x) !== null && _a !== void 0 ? _a : this.x, + y: (_b = options.y) !== null && _b !== void 0 ? _b : this.y, + xScale, + yScale, + rotate: (_c = options.rotate) !== null && _c !== void 0 ? _c : degrees(0), + xSkew: (_d = options.xSkew) !== null && _d !== void 0 ? _d : degrees(0), + ySkew: (_e = options.ySkew) !== null && _e !== void 0 ? _e : degrees(0), + graphicsState: graphicsStateKey + })); + }; + PDFPage2.prototype.drawSvgPath = function(path2, options) { + var _a, _b, _c, _d, _e, _f, _g, _h, _j; + if (options === void 0) { + options = {}; + } + assertIs(path2, "path", ["string"]); + assertOrUndefined(options.x, "options.x", ["number"]); + assertOrUndefined(options.y, "options.y", ["number"]); + assertOrUndefined(options.scale, "options.scale", ["number"]); + assertOrUndefined(options.rotate, "options.rotate", [[Object, "Rotation"]]); + assertOrUndefined(options.borderWidth, "options.borderWidth", ["number"]); + assertOrUndefined(options.color, "options.color", [[Object, "Color"]]); + assertRangeOrUndefined(options.opacity, "opacity.opacity", 0, 1); + assertOrUndefined(options.borderColor, "options.borderColor", [ + [Object, "Color"] + ]); + assertOrUndefined(options.borderDashArray, "options.borderDashArray", [ + Array + ]); + assertOrUndefined(options.borderDashPhase, "options.borderDashPhase", [ + "number" + ]); + assertIsOneOfOrUndefined(options.borderLineCap, "options.borderLineCap", LineCapStyle); + assertRangeOrUndefined(options.borderOpacity, "options.borderOpacity", 0, 1); + assertIsOneOfOrUndefined(options.blendMode, "options.blendMode", BlendMode); + var graphicsStateKey = this.maybeEmbedGraphicsState({ + opacity: options.opacity, + borderOpacity: options.borderOpacity, + blendMode: options.blendMode + }); + if (!("color" in options) && !("borderColor" in options)) { + options.borderColor = rgb(0, 0, 0); + } + var contentStream = this.getContentStream(); + contentStream.push.apply(contentStream, drawSvgPath(path2, { + x: (_a = options.x) !== null && _a !== void 0 ? _a : this.x, + y: (_b = options.y) !== null && _b !== void 0 ? _b : this.y, + scale: options.scale, + rotate: (_c = options.rotate) !== null && _c !== void 0 ? _c : degrees(0), + color: (_d = options.color) !== null && _d !== void 0 ? _d : void 0, + borderColor: (_e = options.borderColor) !== null && _e !== void 0 ? _e : void 0, + borderWidth: (_f = options.borderWidth) !== null && _f !== void 0 ? _f : 0, + borderDashArray: (_g = options.borderDashArray) !== null && _g !== void 0 ? _g : void 0, + borderDashPhase: (_h = options.borderDashPhase) !== null && _h !== void 0 ? _h : void 0, + borderLineCap: (_j = options.borderLineCap) !== null && _j !== void 0 ? _j : void 0, + graphicsState: graphicsStateKey + })); + }; + PDFPage2.prototype.drawLine = function(options) { + var _a, _b, _c, _d, _e; + assertIs(options.start, "options.start", [ + [Object, "{ x: number, y: number }"] + ]); + assertIs(options.end, "options.end", [ + [Object, "{ x: number, y: number }"] + ]); + assertIs(options.start.x, "options.start.x", ["number"]); + assertIs(options.start.y, "options.start.y", ["number"]); + assertIs(options.end.x, "options.end.x", ["number"]); + assertIs(options.end.y, "options.end.y", ["number"]); + assertOrUndefined(options.thickness, "options.thickness", ["number"]); + assertOrUndefined(options.color, "options.color", [[Object, "Color"]]); + assertOrUndefined(options.dashArray, "options.dashArray", [Array]); + assertOrUndefined(options.dashPhase, "options.dashPhase", ["number"]); + assertIsOneOfOrUndefined(options.lineCap, "options.lineCap", LineCapStyle); + assertRangeOrUndefined(options.opacity, "opacity.opacity", 0, 1); + assertIsOneOfOrUndefined(options.blendMode, "options.blendMode", BlendMode); + var graphicsStateKey = this.maybeEmbedGraphicsState({ + borderOpacity: options.opacity, + blendMode: options.blendMode + }); + if (!("color" in options)) { + options.color = rgb(0, 0, 0); + } + var contentStream = this.getContentStream(); + contentStream.push.apply(contentStream, drawLine({ + start: options.start, + end: options.end, + thickness: (_a = options.thickness) !== null && _a !== void 0 ? _a : 1, + color: (_b = options.color) !== null && _b !== void 0 ? _b : void 0, + dashArray: (_c = options.dashArray) !== null && _c !== void 0 ? _c : void 0, + dashPhase: (_d = options.dashPhase) !== null && _d !== void 0 ? _d : void 0, + lineCap: (_e = options.lineCap) !== null && _e !== void 0 ? _e : void 0, + graphicsState: graphicsStateKey + })); + }; + PDFPage2.prototype.drawRectangle = function(options) { + var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o; + if (options === void 0) { + options = {}; + } + assertOrUndefined(options.x, "options.x", ["number"]); + assertOrUndefined(options.y, "options.y", ["number"]); + assertOrUndefined(options.width, "options.width", ["number"]); + assertOrUndefined(options.height, "options.height", ["number"]); + assertOrUndefined(options.rotate, "options.rotate", [[Object, "Rotation"]]); + assertOrUndefined(options.xSkew, "options.xSkew", [[Object, "Rotation"]]); + assertOrUndefined(options.ySkew, "options.ySkew", [[Object, "Rotation"]]); + assertOrUndefined(options.borderWidth, "options.borderWidth", ["number"]); + assertOrUndefined(options.color, "options.color", [[Object, "Color"]]); + assertRangeOrUndefined(options.opacity, "opacity.opacity", 0, 1); + assertOrUndefined(options.borderColor, "options.borderColor", [ + [Object, "Color"] + ]); + assertOrUndefined(options.borderDashArray, "options.borderDashArray", [ + Array + ]); + assertOrUndefined(options.borderDashPhase, "options.borderDashPhase", [ + "number" + ]); + assertIsOneOfOrUndefined(options.borderLineCap, "options.borderLineCap", LineCapStyle); + assertRangeOrUndefined(options.borderOpacity, "options.borderOpacity", 0, 1); + assertIsOneOfOrUndefined(options.blendMode, "options.blendMode", BlendMode); + var graphicsStateKey = this.maybeEmbedGraphicsState({ + opacity: options.opacity, + borderOpacity: options.borderOpacity, + blendMode: options.blendMode + }); + if (!("color" in options) && !("borderColor" in options)) { + options.color = rgb(0, 0, 0); + } + var contentStream = this.getContentStream(); + contentStream.push.apply(contentStream, drawRectangle({ + x: (_a = options.x) !== null && _a !== void 0 ? _a : this.x, + y: (_b = options.y) !== null && _b !== void 0 ? _b : this.y, + width: (_c = options.width) !== null && _c !== void 0 ? _c : 150, + height: (_d = options.height) !== null && _d !== void 0 ? _d : 100, + rotate: (_e = options.rotate) !== null && _e !== void 0 ? _e : degrees(0), + xSkew: (_f = options.xSkew) !== null && _f !== void 0 ? _f : degrees(0), + ySkew: (_g = options.ySkew) !== null && _g !== void 0 ? _g : degrees(0), + borderWidth: (_h = options.borderWidth) !== null && _h !== void 0 ? _h : 0, + color: (_j = options.color) !== null && _j !== void 0 ? _j : void 0, + borderColor: (_k = options.borderColor) !== null && _k !== void 0 ? _k : void 0, + borderDashArray: (_l = options.borderDashArray) !== null && _l !== void 0 ? _l : void 0, + borderDashPhase: (_m = options.borderDashPhase) !== null && _m !== void 0 ? _m : void 0, + graphicsState: graphicsStateKey, + borderLineCap: (_o = options.borderLineCap) !== null && _o !== void 0 ? _o : void 0 + })); + }; + PDFPage2.prototype.drawSquare = function(options) { + if (options === void 0) { + options = {}; + } + var size = options.size; + assertOrUndefined(size, "size", ["number"]); + this.drawRectangle(__assign(__assign({}, options), { width: size, height: size })); + }; + PDFPage2.prototype.drawEllipse = function(options) { + var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l; + if (options === void 0) { + options = {}; + } + assertOrUndefined(options.x, "options.x", ["number"]); + assertOrUndefined(options.y, "options.y", ["number"]); + assertOrUndefined(options.xScale, "options.xScale", ["number"]); + assertOrUndefined(options.yScale, "options.yScale", ["number"]); + assertOrUndefined(options.rotate, "options.rotate", [[Object, "Rotation"]]); + assertOrUndefined(options.color, "options.color", [[Object, "Color"]]); + assertRangeOrUndefined(options.opacity, "opacity.opacity", 0, 1); + assertOrUndefined(options.borderColor, "options.borderColor", [ + [Object, "Color"] + ]); + assertRangeOrUndefined(options.borderOpacity, "options.borderOpacity", 0, 1); + assertOrUndefined(options.borderWidth, "options.borderWidth", ["number"]); + assertOrUndefined(options.borderDashArray, "options.borderDashArray", [ + Array + ]); + assertOrUndefined(options.borderDashPhase, "options.borderDashPhase", [ + "number" + ]); + assertIsOneOfOrUndefined(options.borderLineCap, "options.borderLineCap", LineCapStyle); + assertIsOneOfOrUndefined(options.blendMode, "options.blendMode", BlendMode); + var graphicsStateKey = this.maybeEmbedGraphicsState({ + opacity: options.opacity, + borderOpacity: options.borderOpacity, + blendMode: options.blendMode + }); + if (!("color" in options) && !("borderColor" in options)) { + options.color = rgb(0, 0, 0); + } + var contentStream = this.getContentStream(); + contentStream.push.apply(contentStream, drawEllipse({ + x: (_a = options.x) !== null && _a !== void 0 ? _a : this.x, + y: (_b = options.y) !== null && _b !== void 0 ? _b : this.y, + xScale: (_c = options.xScale) !== null && _c !== void 0 ? _c : 100, + yScale: (_d = options.yScale) !== null && _d !== void 0 ? _d : 100, + rotate: (_e = options.rotate) !== null && _e !== void 0 ? _e : void 0, + color: (_f = options.color) !== null && _f !== void 0 ? _f : void 0, + borderColor: (_g = options.borderColor) !== null && _g !== void 0 ? _g : void 0, + borderWidth: (_h = options.borderWidth) !== null && _h !== void 0 ? _h : 0, + borderDashArray: (_j = options.borderDashArray) !== null && _j !== void 0 ? _j : void 0, + borderDashPhase: (_k = options.borderDashPhase) !== null && _k !== void 0 ? _k : void 0, + borderLineCap: (_l = options.borderLineCap) !== null && _l !== void 0 ? _l : void 0, + graphicsState: graphicsStateKey + })); + }; + PDFPage2.prototype.drawCircle = function(options) { + if (options === void 0) { + options = {}; + } + var _a = options.size, size = _a === void 0 ? 100 : _a; + assertOrUndefined(size, "size", ["number"]); + this.drawEllipse(__assign(__assign({}, options), { xScale: size, yScale: size })); + }; + PDFPage2.prototype.setOrEmbedFont = function(font) { + var oldFont = this.font; + var oldFontKey = this.fontKey; + if (font) + this.setFont(font); + else + this.getFont(); + var newFont = this.font; + var newFontKey = this.fontKey; + return { oldFont, oldFontKey, newFont, newFontKey }; + }; + PDFPage2.prototype.getFont = function() { + if (!this.font || !this.fontKey) { + var font = this.doc.embedStandardFont(StandardFonts.Helvetica); + this.setFont(font); + } + return [this.font, this.fontKey]; + }; + PDFPage2.prototype.resetFont = function() { + this.font = void 0; + this.fontKey = void 0; + }; + PDFPage2.prototype.getContentStream = function(useExisting) { + if (useExisting === void 0) { + useExisting = true; + } + if (useExisting && this.contentStream) + return this.contentStream; + this.contentStream = this.createContentStream(); + this.contentStreamRef = this.doc.context.register(this.contentStream); + this.node.addContentStream(this.contentStreamRef); + return this.contentStream; + }; + PDFPage2.prototype.createContentStream = function() { + var operators = []; + for (var _i = 0; _i < arguments.length; _i++) { + operators[_i] = arguments[_i]; + } + var dict = this.doc.context.obj({}); + var contentStream = PDFContentStream_default.of(dict, operators); + return contentStream; + }; + PDFPage2.prototype.maybeEmbedGraphicsState = function(options) { + var opacity = options.opacity, borderOpacity = options.borderOpacity, blendMode = options.blendMode; + if (opacity === void 0 && borderOpacity === void 0 && blendMode === void 0) { + return void 0; + } + var graphicsState = this.doc.context.obj({ + Type: "ExtGState", + ca: opacity, + CA: borderOpacity, + BM: blendMode + }); + var key = this.node.newExtGState("GS", graphicsState); + return key; + }; + PDFPage2.prototype.scaleAnnot = function(annot, x, y) { + var selectors = ["RD", "CL", "Vertices", "QuadPoints", "L", "Rect"]; + for (var idx = 0, len = selectors.length; idx < len; idx++) { + var list = annot.lookup(PDFName_default.of(selectors[idx])); + if (list instanceof PDFArray_default) + list.scalePDFNumbers(x, y); + } + var inkLists = annot.lookup(PDFName_default.of("InkList")); + if (inkLists instanceof PDFArray_default) { + for (var idx = 0, len = inkLists.size(); idx < len; idx++) { + var arr = inkLists.lookup(idx); + if (arr instanceof PDFArray_default) + arr.scalePDFNumbers(x, y); + } + } + }; + PDFPage2.of = function(leafNode, ref, doc) { + return new PDFPage2(leafNode, ref, doc); + }; + PDFPage2.create = function(doc) { + assertIs(doc, "doc", [[PDFDocument_default, "PDFDocument"]]); + var dummyRef = PDFRef_default.of(-1); + var pageLeaf = PDFPageLeaf_default.withContextAndParent(doc.context, dummyRef); + var pageRef = doc.context.register(pageLeaf); + return new PDFPage2(pageLeaf, pageRef, doc); + }; + return PDFPage2; + }() +); +var PDFPage_default = PDFPage; + +// node_modules/.pnpm/pdf-lib@1.17.1/node_modules/pdf-lib/es/api/form/PDFButton.js +var PDFButton = ( + /** @class */ + function(_super) { + __extends(PDFButton2, _super); + function PDFButton2(acroPushButton, ref, doc) { + var _this = _super.call(this, acroPushButton, ref, doc) || this; + assertIs(acroPushButton, "acroButton", [ + [PDFAcroPushButton_default, "PDFAcroPushButton"] + ]); + _this.acroField = acroPushButton; + return _this; + } + PDFButton2.prototype.setImage = function(image, alignment) { + if (alignment === void 0) { + alignment = ImageAlignment.Center; + } + var widgets = this.acroField.getWidgets(); + for (var idx = 0, len = widgets.length; idx < len; idx++) { + var widget = widgets[idx]; + var streamRef = this.createImageAppearanceStream(widget, image, alignment); + this.updateWidgetAppearances(widget, { normal: streamRef }); + } + this.markAsClean(); + }; + PDFButton2.prototype.setFontSize = function(fontSize) { + assertPositive(fontSize, "fontSize"); + this.acroField.setFontSize(fontSize); + this.markAsDirty(); + }; + PDFButton2.prototype.addToPage = function(text, page, options) { + var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l; + assertOrUndefined(text, "text", ["string"]); + assertOrUndefined(page, "page", [[PDFPage_default, "PDFPage"]]); + assertFieldAppearanceOptions(options); + var widget = this.createWidget({ + x: ((_a = options === null || options === void 0 ? void 0 : options.x) !== null && _a !== void 0 ? _a : 0) - ((_b = options === null || options === void 0 ? void 0 : options.borderWidth) !== null && _b !== void 0 ? _b : 0) / 2, + y: ((_c = options === null || options === void 0 ? void 0 : options.y) !== null && _c !== void 0 ? _c : 0) - ((_d = options === null || options === void 0 ? void 0 : options.borderWidth) !== null && _d !== void 0 ? _d : 0) / 2, + width: (_e = options === null || options === void 0 ? void 0 : options.width) !== null && _e !== void 0 ? _e : 100, + height: (_f = options === null || options === void 0 ? void 0 : options.height) !== null && _f !== void 0 ? _f : 50, + textColor: (_g = options === null || options === void 0 ? void 0 : options.textColor) !== null && _g !== void 0 ? _g : rgb(0, 0, 0), + backgroundColor: (_h = options === null || options === void 0 ? void 0 : options.backgroundColor) !== null && _h !== void 0 ? _h : rgb(0.75, 0.75, 0.75), + borderColor: options === null || options === void 0 ? void 0 : options.borderColor, + borderWidth: (_j = options === null || options === void 0 ? void 0 : options.borderWidth) !== null && _j !== void 0 ? _j : 0, + rotate: (_k = options === null || options === void 0 ? void 0 : options.rotate) !== null && _k !== void 0 ? _k : degrees(0), + caption: text, + hidden: options === null || options === void 0 ? void 0 : options.hidden, + page: page.ref + }); + var widgetRef = this.doc.context.register(widget.dict); + this.acroField.addWidget(widgetRef); + var font = (_l = options === null || options === void 0 ? void 0 : options.font) !== null && _l !== void 0 ? _l : this.doc.getForm().getDefaultFont(); + this.updateWidgetAppearance(widget, font); + page.node.addAnnot(widgetRef); + }; + PDFButton2.prototype.needsAppearancesUpdate = function() { + var _a; + if (this.isDirty()) + return true; + var widgets = this.acroField.getWidgets(); + for (var idx = 0, len = widgets.length; idx < len; idx++) { + var widget = widgets[idx]; + var hasAppearances = ((_a = widget.getAppearances()) === null || _a === void 0 ? void 0 : _a.normal) instanceof PDFStream_default; + if (!hasAppearances) + return true; + } + return false; + }; + PDFButton2.prototype.defaultUpdateAppearances = function(font) { + assertIs(font, "font", [[PDFFont_default, "PDFFont"]]); + this.updateAppearances(font); + }; + PDFButton2.prototype.updateAppearances = function(font, provider) { + assertIs(font, "font", [[PDFFont_default, "PDFFont"]]); + assertOrUndefined(provider, "provider", [Function]); + var widgets = this.acroField.getWidgets(); + for (var idx = 0, len = widgets.length; idx < len; idx++) { + var widget = widgets[idx]; + this.updateWidgetAppearance(widget, font, provider); + } + }; + PDFButton2.prototype.updateWidgetAppearance = function(widget, font, provider) { + var apProvider = provider !== null && provider !== void 0 ? provider : defaultButtonAppearanceProvider; + var appearances = normalizeAppearance(apProvider(this, widget, font)); + this.updateWidgetAppearanceWithFont(widget, font, appearances); + }; + PDFButton2.of = function(acroPushButton, ref, doc) { + return new PDFButton2(acroPushButton, ref, doc); + }; + return PDFButton2; + }(PDFField_default) +); +var PDFButton_default = PDFButton; + +// src/utils.ts +var import_obsidian = require("obsidian"); +var TreeNode = class { + constructor(key, title, level) { + this.children = []; + this.key = key; + this.title = title; + this.level = level; + this.children = []; + } +}; +function getHeadingTree(doc = document) { + const headings = doc.querySelectorAll("h1, h2, h3, h4, h5, h6"); + const root = new TreeNode("", "Root", 0); + let prev = root; + headings.forEach((heading) => { + var _a; + if (heading.style.display == "none") { + return; + } + const level = parseInt(heading.tagName.slice(1)); + const link = heading.querySelector("a.md-print-anchor"); + const regexMatch = /^af:\/\/(.+)$/.exec((_a = link == null ? void 0 : link.href) != null ? _a : ""); + if (!regexMatch) { + return; + } + const newNode = new TreeNode(regexMatch[1], heading.innerText, level); + while (prev.level >= level) { + prev = prev.parent; + } + prev.children.push(newNode); + newNode.parent = prev; + prev = newNode; + }); + return root; +} +function modifyDest(doc) { + const data = /* @__PURE__ */ new Map(); + doc.querySelectorAll("h1, h2, h3, h4, h5, h6").forEach((heading, i) => { + const link = document.createElement("a"); + const flag3 = `${heading.tagName.toLowerCase()}-${i}`; + link.href = `af://${flag3}`; + link.className = "md-print-anchor"; + heading.appendChild(link); + data.set(heading.dataset.heading, flag3); + }); + return data; +} +function convertMapKeysToLowercase(map) { + return new Map(Array.from(map).map(([key, value]) => [key == null ? void 0 : key.toLowerCase(), value])); +} +function fixAnchors(doc, dest, basename) { + const lowerDest = convertMapKeysToLowercase(dest); + doc.querySelectorAll("a.internal-link").forEach((el, i) => { + var _a, _b, _c; + const [title, anchor] = (_b = (_a = el.dataset.href) == null ? void 0 : _a.split("#")) != null ? _b : []; + if (anchor == null ? void 0 : anchor.startsWith("^")) { + el.href = (_c = el.dataset.href) == null ? void 0 : _c.toLowerCase(); + } + if ((anchor == null ? void 0 : anchor.length) > 0) { + if ((title == null ? void 0 : title.length) > 0 && title != basename) { + return; + } + const flag3 = dest.get(anchor) || lowerDest.get(anchor == null ? void 0 : anchor.toLowerCase()); + if (flag3 && !anchor.startsWith("^")) { + el.href = `an://${flag3}`; + } + } + }); +} +var px2mm = (px2) => { + return Math.round(px2 * 0.26458333333719); +}; +var mm2px = (mm) => { + return Math.round(mm * 3.779527559); +}; +function traverseFolder(path2) { + if (path2 instanceof import_obsidian.TFile) { + if (path2.extension == "md") { + return [path2]; + } else { + return []; + } + } + const arr = []; + for (const item of path2.children) { + arr.push(...traverseFolder(item)); + } + return arr; +} +function copyAttributes(node, attributes) { + Array.from(attributes).forEach((attr) => { + node.setAttribute(attr.name, attr.value); + }); +} + +// src/pdf.ts +async function getDestPosition(pdfDoc) { + const pages = pdfDoc.getPages(); + const links = {}; + pages.forEach((page, pageIndex) => { + var _a, _b; + const annotations = page.node.Annots(); + if (!annotations) { + return; + } + const numAnnotations = (_a = annotations == null ? void 0 : annotations.size()) != null ? _a : 0; + for (let annotIndex = 0; annotIndex < numAnnotations; annotIndex++) { + try { + const annotation = annotations.lookup(annotIndex, PDFDict_default); + const subtype = annotation.get(PDFName_default.of("Subtype")); + if ((subtype == null ? void 0 : subtype.toString()) === "/Link") { + const linkDict = annotation.get(PDFName_default.of("A")); + const uri = linkDict == null ? void 0 : linkDict.get(PDFName_default.of("URI")).toString(); + console.debug("uri", uri); + const regexMatch = /^\(af:\/\/(.+)\)$/.exec(uri || ""); + if (regexMatch) { + const rect = (_b = annotation.get(PDFName_default.of("Rect"))) == null ? void 0 : _b.asRectangle(); + const linkUrl = regexMatch[1]; + const yPos = rect.y; + links[linkUrl] = [pageIndex, yPos]; + } + } + } catch (err) { + console.error(err); + } + } + }); + return links; +} +async function setAnchors(pdfDoc, links) { + const pages = pdfDoc.getPages(); + pages.forEach((page, _) => { + var _a; + const annots = page.node.Annots(); + if (!annots) { + return; + } + const numAnnotations = (_a = annots == null ? void 0 : annots.size()) != null ? _a : 0; + for (let idx = 0; idx < numAnnotations; idx++) { + try { + const linkAnnotRef = annots.get(idx); + const linkAnnot = annots.lookup(idx, PDFDict_default); + const subtype = linkAnnot.get(PDFName_default.of("Subtype")); + if ((subtype == null ? void 0 : subtype.toString()) === "/Link") { + const linkDict = linkAnnot.get(PDFName_default.of("A")); + const uri = linkDict == null ? void 0 : linkDict.get(PDFName_default.of("URI")).toString(); + console.debug("uri", uri); + const regexMatch = /^\(an:\/\/(.+)\)$/.exec(uri || ""); + const key = regexMatch == null ? void 0 : regexMatch[1]; + if (key && (links == null ? void 0 : links[key])) { + const [pageIdx, yPos] = links[key]; + const newAnnot = pdfDoc.context.obj({ + Type: "Annot", + Subtype: "Link", + Rect: linkAnnot.lookup(PDFName_default.of("Rect")), + Border: linkAnnot.lookup(PDFName_default.of("Border")), + C: linkAnnot.lookup(PDFName_default.of("C")), + Dest: [pages[pageIdx].ref, "XYZ", null, yPos, null] + }); + pdfDoc.context.assign(linkAnnotRef, newAnnot); + } + } + } catch (err) { + console.error(err); + } + } + }); + return links; +} +function generateOutlines(root, positions, maxLevel = 6) { + var _a, _b; + const _outline = (node) => { + var _a2, _b2; + if (node.level > maxLevel) { + return; + } + const [pageIdx, pos] = (_a2 = positions == null ? void 0 : positions[node.key]) != null ? _a2 : [0, 0]; + const outline = { + title: node.title, + to: [pageIdx, 0, pos], + open: false, + children: [] + }; + if (((_b2 = node.children) == null ? void 0 : _b2.length) > 0) { + for (const item of node.children) { + const child = _outline(item); + if (child) { + outline.children.push(child); + } + } + } + return outline; + }; + return (_b = (_a = _outline(root)) == null ? void 0 : _a.children) != null ? _b : []; +} +var walk = (outlines, callback) => { + for (const outline of outlines) { + const ret = callback(outline); + if ("children" in outline && ret !== false) walk(outline.children, callback); + } +}; +var flatten = (outlines) => { + const result = []; + walk(outlines, (outline) => void result.push(outline)); + return result; +}; +var getOpeningCount = (outlines) => { + let count = 0; + walk(outlines, (outline) => { + count += 1; + return !("open" in outline && !outline.open); + }); + return count; +}; +var setOutline = async (doc, outlines) => { + const rootRef = doc.context.nextRef(); + const refMap = /* @__PURE__ */ new WeakMap(); + for (const outline of flatten(outlines)) { + refMap.set(outline, doc.context.nextRef()); + } + const pageRefs = (() => { + const refs = []; + doc.catalog.Pages().traverse((kid, ref) => { + var _a; + if (((_a = kid.get(kid.context.obj("Type"))) == null ? void 0 : _a.toString()) === "/Page") { + refs.push(ref); + } + }); + return refs; + })(); + const createOutline = (outlines2, parent) => { + const { length } = outlines2; + for (let i = 0; i < length; i += 1) { + const outline = outlines2[i]; + const outlineRef = refMap.get(outline); + const destOrAction = (() => { + if (typeof outline.to === "number") { + return { Dest: [pageRefs[outline.to], "Fit"] }; + } else if (Array.isArray(outline.to)) { + return { + Dest: [pageRefs[outline.to[0]], "XYZ", outline.to[1], outline.to[2], null] + }; + } + return {}; + })(); + const childrenDict = (() => { + if ("children" in outline && outline.children.length > 0) { + createOutline(outline.children, outlineRef); + return { + First: refMap.get(outline.children[0]), + Last: refMap.get(outline.children[outline.children.length - 1]), + Count: getOpeningCount(outline.children) * (outline.open ? 1 : -1) + }; + } + return {}; + })(); + doc.context.assign( + outlineRef, + doc.context.obj({ + Title: PDFHexString_default.fromText(outline.title), + Parent: parent, + ...i > 0 ? { Prev: refMap.get(outlines2[i - 1]) } : {}, + ...i < length - 1 ? { Next: refMap.get(outlines2[i + 1]) } : {}, + ...childrenDict, + ...destOrAction, + F: (outline.italic ? 1 : 0) | (outline.bold ? 2 : 0) + }) + ); + } + }; + createOutline(outlines, rootRef); + const rootCount = getOpeningCount(outlines); + doc.context.assign( + rootRef, + doc.context.obj({ + Type: "Outlines", + ...rootCount > 0 ? { + First: refMap.get(outlines[0]), + Last: refMap.get(outlines[outlines.length - 1]) + } : {}, + Count: rootCount + }) + ); + doc.catalog.set(doc.context.obj("Outlines"), rootRef); +}; +async function editPDF(data, { headings, maxLevel, frontMatter, displayMetadata }) { + const pdfDoc = await PDFDocument_default.load(data); + const posistions = await getDestPosition(pdfDoc); + setAnchors(pdfDoc, posistions); + const outlines = generateOutlines(headings, posistions, maxLevel); + setOutline(pdfDoc, outlines); + if (displayMetadata) { + setMetadata(pdfDoc, frontMatter != null ? frontMatter : {}); + } + data = await pdfDoc.save(); + return data; +} +function setMetadata(pdfDoc, { title, author, keywords, subject, creator, created_at, updated_at }) { + if (title) { + pdfDoc.setTitle(title, { showInWindowTitleBar: true }); + } + if (author) { + pdfDoc.setAuthor(author); + } + if (keywords) { + pdfDoc.setKeywords(typeof keywords == "string" ? [keywords] : keywords); + } + if (subject) { + pdfDoc.setSubject(subject); + } + pdfDoc.setCreator(creator != null ? creator : "Obsidian"); + pdfDoc.setProducer("Obsidian"); + pdfDoc.setCreationDate(new Date(created_at != null ? created_at : /* @__PURE__ */ new Date())); + pdfDoc.setModificationDate(new Date(updated_at != null ? updated_at : /* @__PURE__ */ new Date())); +} +async function exportToPDF(outputFile, config, w, { doc, frontMatter }) { + var _a, _b, _c, _d, _e, _f, _g, _h, _i; + console.log("output pdf:", outputFile); + let pageSize = config["pageSize"]; + if (config["pageSize"] == "Custom" && config["pageWidth"] && config["pageHeight"]) { + pageSize = { + width: parseFloat((_a = config["pageWidth"]) != null ? _a : "0") / 25.4, + height: parseFloat((_b = config["pageHeight"]) != null ? _b : "0") / 25.4 + }; + } + const printOptions = { + landscape: config == null ? void 0 : config["landscape"], + printBackground: config == null ? void 0 : config["printBackground"], + generateTaggedPDF: config == null ? void 0 : config["generateTaggedPDF"], + pageSize, + scale: config["scale"] / 100, + margins: { + marginType: "default" + }, + displayHeaderFooter: config["displayHeader"] || config["displayFooter"], + headerTemplate: config["displayHeader"] ? (_c = frontMatter == null ? void 0 : frontMatter["headerTemplate"]) != null ? _c : config["headerTemplate"] : "", + footerTemplate: config["displayFooter"] ? (_d = frontMatter == null ? void 0 : frontMatter["footerTemplate"]) != null ? _d : config["footerTemplate"] : "" + }; + if (config.marginType == "0") { + printOptions["margins"] = { + marginType: "custom", + top: 0, + bottom: 0, + left: 0, + right: 0 + }; + } else if (config.marginType == "1") { + printOptions["margins"] = { + marginType: "default" + }; + } else if (config.marginType == "2") { + printOptions["margins"] = { + marginType: "custom", + top: 0.1, + bottom: 0.1, + left: 0.1, + right: 0.1 + }; + } else if (config.marginType == "3") { + printOptions["margins"] = { + marginType: "custom", + top: parseFloat((_e = config["marginTop"]) != null ? _e : "0") / 25.4, + bottom: parseFloat((_f = config["marginBottom"]) != null ? _f : "0") / 25.4, + left: parseFloat((_g = config["marginLeft"]) != null ? _g : "0") / 25.4, + right: parseFloat((_h = config["marginRight"]) != null ? _h : "0") / 25.4 + }; + } + try { + let data = await w.printToPDF(printOptions); + data = await editPDF(data, { + headings: getHeadingTree(doc), + frontMatter, + displayMetadata: config == null ? void 0 : config.displayMetadata, + maxLevel: parseInt((_i = config == null ? void 0 : config.maxLevel) != null ? _i : "6") + }); + await fs.writeFile(outputFile, data); + if (config.open) { + import_electron.default.remote.shell.openPath(outputFile); + } + } catch (error2) { + console.error(error2); + } +} +async function getOutputFile(filename, isTimestamp) { + const result = await import_electron.default.remote.dialog.showSaveDialog({ + title: "Export to PDF", + defaultPath: filename + (isTimestamp ? "-" + Date.now() : "") + ".pdf", + filters: [ + { name: "All Files", extensions: ["*"] }, + { name: "PDF", extensions: ["pdf"] } + ], + properties: ["showOverwriteConfirmation", "createDirectory"] + }); + if (result.canceled) { + return; + } + return result.filePath; +} +async function getOutputPath(filename, isTimestamp) { + const result = await import_electron.default.remote.dialog.showOpenDialog({ + title: "Export to PDF", + defaultPath: filename, + properties: ["openDirectory"] + }); + if (result.canceled) { + return; + } + return result.filePaths[0]; +} + +// src/render.ts +var import_obsidian2 = require("obsidian"); +function getAllStyles() { + const cssTexts = []; + Array.from(document.styleSheets).forEach((sheet) => { + var _a, _b, _c; + const id = (_a = sheet.ownerNode) == null ? void 0 : _a.id; + if (id == null ? void 0 : id.startsWith("svelte-")) { + return; + } + const href = (_b = sheet.ownerNode) == null ? void 0 : _b.href; + const division = `/* ----------${id ? `id:${id}` : href ? `href:${href}` : ""}---------- */`; + cssTexts.push(division); + try { + Array.from((_c = sheet == null ? void 0 : sheet.cssRules) != null ? _c : []).forEach((rule) => { + cssTexts.push(rule.cssText); + }); + } catch (error2) { + console.error(error2); + } + }); + cssTexts.push(...getPatchStyle()); + return cssTexts; +} +var CSS_PATCH = ` +/* ---------- css patch ---------- */ + +body { + overflow: auto !important; +} +@media print { + .print .markdown-preview-view { + height: auto !important; + } + .md-print-anchor, .blockid { + white-space: pre !important; + border-left: none !important; + border-right: none !important; + border-top: none !important; + border-bottom: none !important; + display: inline-block !important; + position: absolute !important; + width: 1px !important; + height: 1px !important; + right: 0 !important; + outline: 0 !important; + background: 0 0 !important; + text-decoration: initial !important; + text-shadow: initial !important; + } +} +@media print { + table { + break-inside: auto; + } + tr { + break-inside: avoid; + break-after: auto; + } +} +`; +function getPatchStyle() { + return [CSS_PATCH, ...getPrintStyle()]; +} +function getPrintStyle() { + const cssTexts = []; + Array.from(document.styleSheets).forEach((sheet) => { + var _a; + try { + const cssRules = (_a = sheet == null ? void 0 : sheet.cssRules) != null ? _a : []; + Array.from(cssRules).forEach((rule) => { + if (rule.constructor.name == "CSSMediaRule") { + if (rule.conditionText === "print") { + const res = rule.cssText.replace(/@media print\s*\{(.+)\}/gms, "$1"); + cssTexts.push(res); + } + } + }); + } catch (error2) { + console.error(error2); + } + }); + return cssTexts; +} +function generateDocId(n) { + return Array.from({ length: n }, () => (16 * Math.random() | 0).toString(16)).join(""); +} +function getFrontMatter(app, file) { + var _a; + const cache = app.metadataCache.getFileCache(file); + return (_a = cache == null ? void 0 : cache.frontmatter) != null ? _a : {}; +} +async function renderMarkdown(app, file, config, extra) { + var _a, _b, _c, _d, _e, _f, _g, _h; + const startTime = (/* @__PURE__ */ new Date()).getTime(); + const ws = app.workspace; + if (((_a = ws.getActiveFile()) == null ? void 0 : _a.path) != file.path) { + const leaf = ws.getLeaf(); + await leaf.openFile(file); + } + const view = ws.getActiveViewOfType(import_obsidian2.MarkdownView); + const data = (_e = (_c = view == null ? void 0 : view.data) != null ? _c : (_b = ws == null ? void 0 : ws.getActiveFileView()) == null ? void 0 : _b.data) != null ? _e : (_d = ws.activeEditor) == null ? void 0 : _d.data; + if (!data) { + new import_obsidian2.Notice("data is empty!"); + } + const frontMatter = getFrontMatter(app, file); + const cssclasses = []; + for (const [key, val] of Object.entries(frontMatter)) { + if (key.toLowerCase() == "cssclass" || key.toLowerCase() == "cssclasses") { + if (Array.isArray(val)) { + cssclasses.push(...val); + } else { + cssclasses.push(val); + } + } + } + const comp = new import_obsidian2.Component(); + comp.load(); + const printEl = document.body.createDiv("print"); + const viewEl = printEl.createDiv({ + cls: "markdown-preview-view markdown-rendered " + cssclasses.join(" ") + }); + app.vault.cachedRead(file); + viewEl.toggleClass("rtl", app.vault.getConfig("rightToLeft")); + viewEl.toggleClass("show-properties", "hidden" !== app.vault.getConfig("propertiesInDocument")); + const title = (_f = extra == null ? void 0 : extra.title) != null ? _f : file.basename; + viewEl.createEl("h1", { text: title }, (e) => { + var _a2; + e.addClass("__title__"); + e.style.display = config.showTitle ? "block" : "none"; + e.id = (_a2 = extra == null ? void 0 : extra.id) != null ? _a2 : ""; + }); + const cache = app.metadataCache.getFileCache(file); + const blocks = new Map(Object.entries((_g = cache == null ? void 0 : cache.blocks) != null ? _g : {})); + const lines = ((_h = data == null ? void 0 : data.split("\n")) != null ? _h : []).map((line, i) => { + for (const { + id, + position: { start, end } + } of blocks.values()) { + const blockid = `^${id}`; + if (line.includes(blockid) && i >= start.line && i <= end.line) { + blocks.delete(id); + return line.replace(blockid, ` ${blockid}`); + } + } + return line; + }); + [...blocks.values()].forEach(({ id, position: { start, end } }) => { + const idx = start.line; + lines[idx] = ` + +` + lines[idx]; + }); + const fragment = { + children: void 0, + appendChild(e) { + this.children = e == null ? void 0 : e.children; + throw new Error("exit"); + } + }; + const promises = []; + try { + await import_obsidian2.MarkdownRenderer.render(app, lines.join("\n"), fragment, file.path, comp); + } catch (error2) { + } + const el = createFragment(); + Array.from(fragment.children).forEach((item) => { + el.createDiv({}, (t) => { + return t.appendChild(item); + }); + }); + viewEl.appendChild(el); + await import_obsidian2.MarkdownRenderer.postProcess(app, { + docId: generateDocId(16), + sourcePath: file.path, + frontmatter: {}, + promises, + addChild: function(e) { + return comp.addChild(e); + }, + getSectionInfo: function() { + return null; + }, + containerEl: viewEl, + el: viewEl, + displayMode: true + }); + await Promise.all(promises); + printEl.findAll("a.internal-link").forEach((el2) => { + var _a2, _b2; + const [title2, anchor] = (_b2 = (_a2 = el2.dataset.href) == null ? void 0 : _a2.split("#")) != null ? _b2 : []; + if ((!title2 || (title2 == null ? void 0 : title2.length) == 0 || title2 == file.basename) && (anchor == null ? void 0 : anchor.startsWith("^"))) { + return; + } + el2.removeAttribute("href"); + }); + try { + await fixWaitRender(data, viewEl); + } catch (error2) { + console.warn("wait timeout"); + } + fixCanvasToImage(viewEl); + const doc = document.implementation.createHTMLDocument("document"); + doc.body.appendChild(printEl.cloneNode(true)); + printEl.detach(); + comp.unload(); + printEl.remove(); + doc.title = title; + console.log(`md render time:${(/* @__PURE__ */ new Date()).getTime() - startTime}ms`); + return { doc, frontMatter, file }; +} +function fixDoc(doc, title) { + const dest = modifyDest(doc); + fixAnchors(doc, dest, title); + encodeEmbeds(doc); + return doc; +} +function encodeEmbeds(doc) { + const spans = Array.from(doc.querySelectorAll("span.markdown-embed")).reverse(); + spans.forEach((span) => span.innerHTML = encodeURIComponent(span.innerHTML)); +} +async function fixWaitRender(data, viewEl) { + if (data.includes("```dataview") || data.includes("```gEvent") || data.includes("![[")) { + await sleep(2e3); + } + try { + await waitForDomChange(viewEl); + } catch (error2) { + await sleep(1e3); + } +} +function fixCanvasToImage(el) { + for (const canvas of Array.from(el.querySelectorAll("canvas"))) { + const data = canvas.toDataURL(); + const img = document.createElement("img"); + img.src = data; + copyAttributes(img, canvas.attributes); + img.className = "__canvas__"; + canvas.replaceWith(img); + } +} +function createWebview(scale2 = 1.25) { + const webview = document.createElement("webview"); + webview.src = `app://obsidian.md/help.html`; + webview.setAttribute( + "style", + `height:calc(${scale2} * 100%); + width: calc(${scale2} * 100%); + transform: scale(${1 / scale2}, ${1 / scale2}); + transform-origin: top left; + border: 1px solid #f2f2f2; + ` + ); + webview.nodeintegration = true; + return webview; +} +function waitForDomChange(target, timeout = 2e3, interval = 200) { + return new Promise((resolve, reject) => { + let timer; + const observer = new MutationObserver((m) => { + clearTimeout(timer); + timer = setTimeout(() => { + observer.disconnect(); + resolve(true); + }, interval); + }); + observer.observe(target, { + childList: true, + subtree: true, + attributes: true, + characterData: true + }); + setTimeout(() => { + observer.disconnect(); + reject(new Error(`timeout ${timeout}ms`)); + }, timeout); + }); +} + +// src/modal.ts +function fullWidthButton(button) { + button.buttonEl.setAttribute("style", `margin: "0 auto"; width: -webkit-fill-available`); +} +function setInputWidth(inputEl) { + inputEl.setAttribute("style", `width: 100px;`); +} +var ExportConfigModal = class extends import_obsidian3.Modal { + constructor(plugin, file, multiplePdf) { + var _a, _b, _c, _d, _e; + super(plugin.app); + this.canceled = true; + this.plugin = plugin; + this.file = file; + this.completed = false; + this.i18n = i18n_default.current; + this.docs = []; + this.scale = 0.75; + this.webviews = []; + this.multiplePdf = multiplePdf; + this.config = { + pageSize: "A4", + marginType: "1", + showTitle: (_a = plugin.settings.showTitle) != null ? _a : true, + open: true, + scale: 100, + landscape: false, + marginTop: "10", + marginBottom: "10", + marginLeft: "10", + marginRight: "10", + displayHeader: (_b = plugin.settings.displayHeader) != null ? _b : true, + displayFooter: (_c = plugin.settings.displayHeader) != null ? _c : true, + cssSnippet: "0", + ...(_e = (_d = plugin.settings) == null ? void 0 : _d.prevConfig) != null ? _e : {} + }; + } + getFileCache(file) { + return this.app.metadataCache.getFileCache(file); + } + async renderFiles() { + var _a, _b; + const app = this.plugin.app; + const docs = []; + if (this.file instanceof import_obsidian3.TFolder) { + const files = traverseFolder(this.file); + for (const file of files) { + docs.push(await renderMarkdown(app, file, this.config)); + } + } else { + const { doc, frontMatter, file } = await renderMarkdown(app, this.file, this.config); + docs.push({ doc, frontMatter, file }); + if (frontMatter.toc) { + const cache = this.getFileCache(this.file); + const files = (_b = (_a = cache == null ? void 0 : cache.links) == null ? void 0 : _a.map(({ link, displayText }) => { + const id = crypto.randomUUID(); + const elem = doc.querySelector(`a[data-href="${link}"]`); + if (elem) { + elem.href = `#${id}`; + } + return { + title: displayText, + file: this.app.metadataCache.getFirstLinkpathDest(link, this.file.path), + id + }; + }).filter((item) => item.file instanceof import_obsidian3.TFile)) != null ? _b : []; + for (const item of files) { + docs.push(await renderMarkdown(app, item.file, this.config, item)); + } + const leaf = this.app.workspace.getLeaf(); + await leaf.openFile(this.file); + } + } + if (!this.multiplePdf) { + this.mergeDoc(docs); + } + this.docs = docs.map(({ doc, ...rest }) => { + return { ...rest, doc: fixDoc(doc, doc.title) }; + }); + } + mergeDoc(docs) { + const { doc: doc0, frontMatter, file } = docs[0]; + const sections = []; + for (const { doc } of docs) { + const element = doc.querySelector(".markdown-preview-view"); + if (element) { + const section = doc0.createElement("section"); + Array.from(element.children).forEach((child) => { + section.appendChild(doc0.importNode(child, true)); + }); + sections.push(section); + } + } + const root = doc0.querySelector(".markdown-preview-view"); + if (root) { + root.innerHTML = ""; + } + sections.forEach((section) => { + root == null ? void 0 : root.appendChild(section); + }); + this.docs = [{ doc: doc0, frontMatter, file }]; + } + calcPageSize(element, config) { + var _a, _b, _c; + const { pageSize, pageWidth } = config != null ? config : this.config; + const el = element != null ? element : this.previewDiv; + let width = (_c = (_b = (_a = PageSize) == null ? void 0 : _a[pageSize]) == null ? void 0 : _b[0]) != null ? _c : parseFloat(pageWidth); + if (isNaN(width)) { + width = 210; + } + const scale2 = Math.floor(mm2px(width) / el.offsetWidth * 100) / 100; + this.webviews.forEach((wb) => { + wb.style.transform = `scale(${1 / scale2},${1 / scale2})`; + wb.style.width = `calc(${scale2} * 100%)`; + wb.style.height = `calc(${scale2} * 100%)`; + }); + this.scale = scale2; + return scale2; + } + async calcWebviewSize() { + await sleep(500); + this.webviews.forEach(async (e, i) => { + var _a; + const [width, height] = await e.executeJavaScript("[document.body.offsetWidth, document.body.offsetHeight]"); + const sizeEl = (_a = e.parentNode) == null ? void 0 : _a.querySelector(".print-size"); + if (sizeEl) { + sizeEl.innerHTML = `${width}\xD7${height}px +${px2mm(width)}\xD7${px2mm(height)}mm`; + } + }); + } + async togglePrintSize() { + var _a; + (_a = document.querySelectorAll(".print-size")) == null ? void 0 : _a.forEach((sizeEl) => { + if (this.config["pageSize"] == "Custom") { + sizeEl.style.visibility = "visible"; + } else { + sizeEl.style.visibility = "hidden"; + } + }); + } + makeWebviewJs(doc) { + return ` + document.body.innerHTML = decodeURIComponent(\`${encodeURIComponent(doc.body.innerHTML)}\`); + document.head.innerHTML = decodeURIComponent(\`${encodeURIComponent(document.head.innerHTML)}\`); + + // Function to recursively decode and replace innerHTML of span.markdown-embed elements + function decodeAndReplaceEmbed(element) { + // Replace the innerHTML with the decoded content + element.innerHTML = decodeURIComponent(element.innerHTML); + // Check if the new content contains further span.markdown-embed elements + const newEmbeds = element.querySelectorAll("span.markdown-embed"); + newEmbeds.forEach(decodeAndReplaceEmbed); + } + + // Start the process with all span.markdown-embed elements in the document + document.querySelectorAll("span.markdown-embed").forEach(decodeAndReplaceEmbed); + + document.body.setAttribute("class", \`${document.body.getAttribute("class")}\`) + document.body.setAttribute("style", \`${document.body.getAttribute("style")}\`) + document.body.addClass("theme-light"); + document.body.removeClass("theme-dark"); + document.title = \`${doc.title}\`; + `; + } + /** + * append webview + * @param e HTMLDivElement + * @param render Rerender or not + */ + async appendWebview(e, doc) { + const webview = createWebview(this.scale); + const preview = e.appendChild(webview); + this.webviews.push(preview); + this.preview = preview; + preview.addEventListener("dom-ready", async (e2) => { + this.completed = true; + getAllStyles().forEach(async (css) => { + await preview.insertCSS(css); + }); + if (this.config.cssSnippet && this.config.cssSnippet != "0") { + try { + const cssSnippet = await fs2.readFile(this.config.cssSnippet, { encoding: "utf8" }); + const printCss = cssSnippet.replaceAll(/@media print\s*{([^}]+)}/g, "$1"); + await preview.insertCSS(printCss); + await preview.insertCSS(cssSnippet); + } catch (error2) { + console.warn(error2); + } + } + await preview.executeJavaScript(this.makeWebviewJs(doc)); + getPatchStyle().forEach(async (css) => { + await preview.insertCSS(css); + }); + }); + } + async appendWebviews(e, render = true) { + var _a; + if (render) { + await this.renderFiles(); + } + e.empty(); + await Promise.all( + (_a = this.docs) == null ? void 0 : _a.map(async ({ doc }, i) => { + if (this.multiplePdf) { + e.createDiv({ + text: `${i + 1}-${doc.title}`, + attr: { class: "filename" } + }); + } + const div = e.createDiv({ attr: { class: "webview-wrapper" } }); + div.createDiv({ attr: { class: "print-size" } }); + await this.appendWebview(div, doc); + }) + ); + await this.calcWebviewSize(); + } + async onOpen() { + var _a, _b, _c; + this.contentEl.empty(); + this.containerEl.style.setProperty("--dialog-width", "60vw"); + this.titleEl.setText("Export to PDF"); + const wrapper = this.contentEl.createDiv({ attr: { id: "better-export-pdf" } }); + const title = (_c = (_a = this.file) == null ? void 0 : _a.basename) != null ? _c : (_b = this.file) == null ? void 0 : _b.name; + this.previewDiv = wrapper.createDiv({ attr: { class: "pdf-preview" } }, async (el) => { + el.empty(); + const resizeObserver = new ResizeObserver(() => { + this.calcPageSize(el); + }); + resizeObserver.observe(el); + await this.appendWebviews(el); + this.togglePrintSize(); + }); + const contentEl = wrapper.createDiv(); + contentEl.setAttribute("style", "width:320px;margin-left:16px;"); + contentEl.addEventListener("keyup", (event) => { + if (event.key === "Enter") { + handleExport(); + } + }); + this.generateForm(contentEl); + const handleExport = async () => { + this.plugin.settings.prevConfig = this.config; + await this.plugin.saveSettings(); + if (this.multiplePdf) { + const outputPath = await getOutputPath(title); + console.log("output:", outputPath); + if (outputPath) { + await Promise.all( + this.webviews.map(async (wb, i) => { + await exportToPDF( + `${outputPath}/${this.docs[i].file.basename}.pdf`, + { ...this.plugin.settings, ...this.config }, + wb, + this.docs[i] + ); + }) + ); + this.close(); + } + } else { + const outputFile = await getOutputFile(title, this.plugin.settings.isTimestamp); + if (outputFile) { + await exportToPDF(outputFile, { ...this.plugin.settings, ...this.config }, this.webviews[0], this.docs[0]); + this.close(); + } + } + }; + new import_obsidian3.Setting(contentEl).setHeading().addButton((button) => { + button.setButtonText("Export").onClick(handleExport); + button.setCta(); + fullWidthButton(button); + }); + new import_obsidian3.Setting(contentEl).setHeading().addButton((button) => { + button.setButtonText("Refresh").onClick(async () => { + await this.appendWebviews(this.previewDiv); + }); + fullWidthButton(button); + }); + const debugEl = new import_obsidian3.Setting(contentEl).setHeading().addButton((button) => { + button.setButtonText("Debug").onClick(async () => { + var _a2; + (_a2 = this.preview) == null ? void 0 : _a2.openDevTools(); + }); + fullWidthButton(button); + }); + debugEl.settingEl.hidden = !this.plugin.settings.debug; + } + generateForm(contentEl) { + new import_obsidian3.Setting(contentEl).setName(this.i18n.exportDialog.filenameAsTitle).addToggle( + (toggle) => toggle.setTooltip("Include file name as title").setValue(this.config["showTitle"]).onChange(async (value) => { + this.config["showTitle"] = value; + this.webviews.forEach((wv, i) => { + var _a, _b; + wv.executeJavaScript(` + var _title = document.querySelector("h1.__title__"); + if (_title) { + _title.style.display = "${value ? "block" : "none"}"; + } + `); + const _title = (_b = (_a = this.docs[i]) == null ? void 0 : _a.doc) == null ? void 0 : _b.querySelector("h1.__title__"); + if (_title) { + _title.style.display = value ? "block" : "none"; + } + }); + }) + ); + const pageSizes = [ + "A0", + "A1", + "A2", + "A3", + "A4", + "A5", + "A6", + "Legal", + "Letter", + "Tabloid", + "Ledger", + "Custom" + ]; + new import_obsidian3.Setting(contentEl).setName(this.i18n.exportDialog.pageSize).addDropdown((dropdown) => { + dropdown.addOptions(Object.fromEntries(pageSizes.map((size) => [size, size]))).setValue(this.config.pageSize).onChange(async (value) => { + this.config["pageSize"] = value; + if (value == "Custom") { + sizeEl.settingEl.hidden = false; + } else { + sizeEl.settingEl.hidden = true; + } + this.togglePrintSize(); + this.calcPageSize(); + await this.calcWebviewSize(); + }); + }); + const sizeEl = new import_obsidian3.Setting(contentEl).setName("Width/Height").addText((text) => { + setInputWidth(text.inputEl); + text.setPlaceholder("width").setValue(this.config["pageWidth"]).onChange( + (0, import_obsidian3.debounce)( + async (value) => { + this.config["pageWidth"] = value; + this.calcPageSize(); + await this.calcWebviewSize(); + }, + 500, + true + ) + ); + }).addText((text) => { + setInputWidth(text.inputEl); + text.setPlaceholder("height").setValue(this.config["pageHeight"]).onChange((value) => { + this.config["pageHeight"] = value; + }); + }); + sizeEl.settingEl.hidden = this.config["pageSize"] !== "Custom"; + new import_obsidian3.Setting(contentEl).setName(this.i18n.exportDialog.margin).setDesc("The unit is millimeters.").addDropdown((dropdown) => { + dropdown.addOption("0", "None").addOption("1", "Default").addOption("2", "Small").addOption("3", "Custom").setValue(this.config["marginType"]).onChange(async (value) => { + this.config["marginType"] = value; + if (value == "3") { + topEl.settingEl.hidden = false; + btmEl.settingEl.hidden = false; + } else { + topEl.settingEl.hidden = true; + btmEl.settingEl.hidden = true; + } + }); + }); + const topEl = new import_obsidian3.Setting(contentEl).setName("Top/Bottom").addText((text) => { + setInputWidth(text.inputEl); + text.setPlaceholder("margin top").setValue(this.config["marginTop"]).onChange((value) => { + this.config["marginTop"] = value; + }); + }).addText((text) => { + setInputWidth(text.inputEl); + text.setPlaceholder("margin bottom").setValue(this.config["marginBottom"]).onChange((value) => { + this.config["marginBottom"] = value; + }); + }); + topEl.settingEl.hidden = this.config["marginType"] != "3"; + const btmEl = new import_obsidian3.Setting(contentEl).setName("Left/Right").addText((text) => { + setInputWidth(text.inputEl); + text.setPlaceholder("margin left").setValue(this.config["marginLeft"]).onChange((value) => { + this.config["marginLeft"] = value; + }); + }).addText((text) => { + setInputWidth(text.inputEl); + text.setPlaceholder("margin right").setValue(this.config["marginRight"]).onChange((value) => { + this.config["marginRight"] = value; + }); + }); + btmEl.settingEl.hidden = this.config["marginType"] != "3"; + new import_obsidian3.Setting(contentEl).setName(this.i18n.exportDialog.downscalePercent).addSlider((slider) => { + slider.setLimits(0, 100, 1).setValue(this.config["scale"]).onChange(async (value) => { + this.config["scale"] = value; + slider.showTooltip(); + }); + }); + new import_obsidian3.Setting(contentEl).setName(this.i18n.exportDialog.landscape).addToggle( + (toggle) => toggle.setTooltip("landscape").setValue(this.config["landscape"]).onChange(async (value) => { + this.config["landscape"] = value; + }) + ); + new import_obsidian3.Setting(contentEl).setName(this.i18n.exportDialog.displayHeader).addToggle( + (toggle) => toggle.setTooltip("Display header").setValue(this.config["displayHeader"]).onChange(async (value) => { + this.config["displayHeader"] = value; + }) + ); + new import_obsidian3.Setting(contentEl).setName(this.i18n.exportDialog.displayFooter).addToggle( + (toggle) => toggle.setTooltip("Display footer").setValue(this.config["displayFooter"]).onChange(async (value) => { + this.config["displayFooter"] = value; + }) + ); + new import_obsidian3.Setting(contentEl).setName(this.i18n.exportDialog.openAfterExport).addToggle( + (toggle) => toggle.setTooltip("Open the exported file after exporting.").setValue(this.config["open"]).onChange(async (value) => { + this.config["open"] = value; + }) + ); + const snippets = this.cssSnippets(); + if (Object.keys(snippets).length > 0 && this.plugin.settings.enabledCss) { + new import_obsidian3.Setting(contentEl).setName(this.i18n.exportDialog.cssSnippets).addDropdown((dropdown) => { + dropdown.addOption("0", "Not select").addOptions(snippets).setValue(this.config["cssSnippet"]).onChange(async (value) => { + this.config["cssSnippet"] = value; + await this.appendWebviews(this.previewDiv, false); + }); + }); + } + } + onClose() { + const { contentEl } = this; + contentEl.empty(); + } + cssSnippets() { + var _a, _b; + const { snippets, enabledSnippets } = (_b = (_a = this.app) == null ? void 0 : _a.customCss) != null ? _b : {}; + const basePath = this.app.vault.adapter.basePath; + return Object.fromEntries( + snippets == null ? void 0 : snippets.filter((item) => !enabledSnippets.has(item)).map((name) => { + const file = import_path.default.join(basePath, ".obsidian/snippets", name + ".css"); + return [file, name]; + }) + ); + } +}; + +// src/setting.ts +var import_obsidian4 = require("obsidian"); +function setAttributes(element, attributes) { + for (const key in attributes) { + element.setAttribute(key, attributes[key]); + } +} +var renderBuyMeACoffeeBadge = (contentEl, width = 175) => { + const linkEl = contentEl.createEl("a", { + href: "https://www.buymeacoffee.com/l1xnan" + }); + const imgEl = linkEl.createEl("img"); + imgEl.src = "https://img.buymeacoffee.com/button-api/?text=Buy me a coffee&emoji=&slug=nathangeorge&button_colour=6a8696&font_colour=ffffff&font_family=Poppins&outline_colour=000000&coffee_colour=FFDD00"; + imgEl.alt = "Buy me a coffee"; + imgEl.width = width; +}; +var ConfigSettingTab = class extends import_obsidian4.PluginSettingTab { + constructor(app, plugin) { + super(app, plugin); + this.plugin = plugin; + this.i18n = i18n_default.current; + } + display() { + const { containerEl } = this; + containerEl.empty(); + const supportDesc = new DocumentFragment(); + supportDesc.createDiv({ + text: "Support the continued development of this plugin." + }); + new import_obsidian4.Setting(containerEl).setDesc(supportDesc); + renderBuyMeACoffeeBadge(containerEl); + new import_obsidian4.Setting(containerEl).setName(this.i18n.settings.showTitle).addToggle( + (toggle) => toggle.setTooltip(this.i18n.settings.showTitle).setValue(this.plugin.settings.showTitle).onChange(async (value) => { + this.plugin.settings.showTitle = value; + this.plugin.saveSettings(); + }) + ); + new import_obsidian4.Setting(containerEl).setName(this.i18n.settings.displayHeader).addToggle( + (toggle) => toggle.setTooltip("Display header").setValue(this.plugin.settings.displayHeader).onChange(async (value) => { + this.plugin.settings.displayHeader = value; + this.plugin.saveSettings(); + }) + ); + new import_obsidian4.Setting(containerEl).setName(this.i18n.settings.displayFooter).addToggle( + (toggle) => toggle.setTooltip("Display footer").setValue(this.plugin.settings.displayFooter).onChange(async (value) => { + this.plugin.settings.displayFooter = value; + this.plugin.saveSettings(); + }) + ); + new import_obsidian4.Setting(containerEl).setName(this.i18n.settings.printBackground).setDesc("Whether to print background graphics").addToggle( + (toggle) => toggle.setValue(this.plugin.settings.printBackground).onChange(async (value) => { + this.plugin.settings.printBackground = value; + this.plugin.saveSettings(); + }) + ); + new import_obsidian4.Setting(containerEl).setName("Generate tagged PDF").setDesc( + "Whether or not to generate a tagged (accessible) PDF. Defaults to false. As this property is experimental, the generated PDF may not adhere fully to PDF/UA and WCAG standards." + ).addToggle( + (toggle) => toggle.setValue(this.plugin.settings.generateTaggedPDF).onChange(async (value) => { + this.plugin.settings.generateTaggedPDF = value; + this.plugin.saveSettings(); + }) + ); + new import_obsidian4.Setting(containerEl).setName(this.i18n.settings.maxLevel).addDropdown((dropdown) => { + dropdown.addOptions(Object.fromEntries(["1", "2", "3", "4", "5", "6"].map((level) => [level, `h${level}`]))).setValue(this.plugin.settings.maxLevel).onChange(async (value) => { + this.plugin.settings.maxLevel = value; + this.plugin.saveSettings(); + }); + }); + new import_obsidian4.Setting(containerEl).setName(this.i18n.settings.displayMetadata).setDesc("Add frontMatter(title, author, keywords, subject creator, etc) to pdf metadata").addToggle( + (toggle) => toggle.setValue(this.plugin.settings.displayMetadata).onChange(async (value) => { + this.plugin.settings.displayMetadata = value; + this.plugin.saveSettings(); + }) + ); + new import_obsidian4.Setting(containerEl).setName("Advanced").setHeading(); + const headerContentAreaSetting = new import_obsidian4.Setting(containerEl); + headerContentAreaSetting.settingEl.setAttribute("style", "display: grid; grid-template-columns: 1fr;"); + headerContentAreaSetting.setName(this.i18n.settings.headerTemplate).setDesc( + 'HTML template for the print header. Should be valid HTML markup with following classes used to inject printing values into them: date (formatted print date), title (document title), url (document location), pageNumber (current page number) and totalPages (total pages in the document). For example, would generate span containing the title.' + ); + const hederContentArea = new import_obsidian4.TextAreaComponent(headerContentAreaSetting.controlEl); + setAttributes(hederContentArea.inputEl, { + style: "margin-top: 12px; width: 100%; height: 6vh;" + }); + hederContentArea.setValue(this.plugin.settings.headerTemplate).onChange(async (value) => { + this.plugin.settings.headerTemplate = value; + this.plugin.saveSettings(); + }); + const footerContentAreaSetting = new import_obsidian4.Setting(containerEl); + footerContentAreaSetting.settingEl.setAttribute("style", "display: grid; grid-template-columns: 1fr;"); + footerContentAreaSetting.setName(this.i18n.settings.footerTemplate).setDesc("HTML template for the print footer. Should use the same format as the headerTemplate."); + const footerContentArea = new import_obsidian4.TextAreaComponent(footerContentAreaSetting.controlEl); + setAttributes(footerContentArea.inputEl, { + style: "margin-top: 12px; width: 100%; height: 6vh;" + }); + footerContentArea.setValue(this.plugin.settings.footerTemplate).onChange(async (value) => { + this.plugin.settings.footerTemplate = value; + this.plugin.saveSettings(); + }); + new import_obsidian4.Setting(containerEl).setName(this.i18n.settings.isTimestamp).setDesc("Add timestamp to output file name").addToggle((cb) => { + cb.setValue(this.plugin.settings.isTimestamp).onChange(async (value) => { + this.plugin.settings.isTimestamp = value; + await this.plugin.saveSettings(); + }); + }); + new import_obsidian4.Setting(containerEl).setName(this.i18n.settings.enabledCss).setDesc("Select the css snippet that are not enabled").addToggle((cb) => { + cb.setValue(this.plugin.settings.enabledCss).onChange(async (value) => { + this.plugin.settings.enabledCss = value; + await this.plugin.saveSettings(); + }); + }); + new import_obsidian4.Setting(containerEl).setName("Debug").setHeading(); + new import_obsidian4.Setting(containerEl).setName(this.i18n.settings.debugMode).setDesc("This is useful for troubleshooting.").addToggle((cb) => { + cb.setValue(this.plugin.settings.debug).onChange(async (value) => { + this.plugin.settings.debug = value; + await this.plugin.saveSettings(); + }); + }); + } +}; + +// src/main.ts +var isDev = false; +var DEFAULT_SETTINGS = { + showTitle: true, + maxLevel: "6", + displayHeader: true, + displayFooter: true, + headerTemplate: `
`, + footerTemplate: `
/
`, + printBackground: false, + generateTaggedPDF: false, + displayMetadata: false, + debug: false, + isTimestamp: false, + enabledCss: false +}; +var BetterExportPdfPlugin = class extends import_obsidian5.Plugin { + constructor(app, manifest) { + super(app, manifest); + this.i18n = i18n_default.current; + } + async onload() { + await this.loadSettings(); + this.registerCommand(); + this.registerSetting(); + this.registerEvents(); + } + registerCommand() { + this.addCommand({ + id: "export-current-file-to-pdf", + name: this.i18n.exportCurrentFile, + checkCallback: (checking) => { + const view = this.app.workspace.getActiveViewOfType(import_obsidian5.MarkdownView); + const file = view == null ? void 0 : view.file; + if (!file) { + return false; + } + if (checking) { + return true; + } + new ExportConfigModal(this, file).open(); + return true; + } + }); + } + registerSetting() { + this.addSettingTab(new ConfigSettingTab(this.app, this)); + } + registerEvents() { + this.registerEvent( + this.app.workspace.on("file-menu", (menu, file) => { + let title = file instanceof import_obsidian5.TFolder ? "Export folder to PDF" : "Better Export PDF"; + if (isDev) { + title = `${title} (dev)`; + } + menu.addItem((item) => { + item.setTitle(title).setIcon("download").setSection("action").onClick(async () => { + new ExportConfigModal(this, file).open(); + }); + }); + }) + ); + this.registerEvent( + this.app.workspace.on("file-menu", (menu, file) => { + if (file instanceof import_obsidian5.TFolder) { + let title = "Export each file to PDF"; + if (isDev) { + title = `${title} (dev)`; + } + menu.addItem((item) => { + item.setTitle(title).setIcon("download").setSection("action").onClick(async () => { + new ExportConfigModal(this, file, true).open(); + }); + }); + } + }) + ); + } + onunload() { + } + async loadSettings() { + this.settings = Object.assign({}, DEFAULT_SETTINGS, await this.loadData()); + } + async saveSettings() { + await this.saveData(this.settings); + } + changeConfig() { + var _a; + const theme = "obsidian" === ((_a = this.app.vault) == null ? void 0 : _a.getConfig("theme")); + if (theme) { + document.body.addClass("theme-light"); + document.body.removeClass("theme-dark"); + } + document.body.removeClass("theme-dark"); + const node = document.body.createDiv("print"); + const reset = function() { + node.detach(); + if (theme) { + document.body.removeClass("theme-light"); + document.body.addClass("theme-dark"); + } + }; + node.addEventListener("click", reset); + const el = document.body.createDiv("print"); + const el2 = el.createDiv("markdown-preview-view markdown-rendered"); + el2.toggleClass("rtl", this.app.vault.getConfig("rightToLeft")); + el2.toggleClass("show-frontmatter", this.app.vault.getConfig("showFrontmatter")); + el2.createEl("h1", { + text: "xxxxx" + // a.basename + }); + } +}; +/*! Bundled license information: + +tslib/tslib.es6.js: + (*! ***************************************************************************** + Copyright (c) Microsoft Corporation. + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH + REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, + INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM + LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR + OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + PERFORMANCE OF THIS SOFTWARE. + ***************************************************************************** *) +*/ + +/* nosourcemap */ \ No newline at end of file diff --git a/.obsidian/plugins/better-export-pdf/manifest.json b/.obsidian/plugins/better-export-pdf/manifest.json new file mode 100644 index 0000000..d101cb3 --- /dev/null +++ b/.obsidian/plugins/better-export-pdf/manifest.json @@ -0,0 +1,11 @@ +{ + "id": "better-export-pdf", + "name": "Better Export PDF", + "version": "1.9.2", + "minAppVersion": "0.15.0", + "description": "Export your notes to PDF, support export preview, add bookmarks outline and header/footer.", + "author": "l1xnan", + "authorUrl": "https://github.com/l1xnan", + "fundingUrl": "https://www.buymeacoffee.com/l1xnan", + "isDesktopOnly": true +} diff --git a/.obsidian/plugins/better-export-pdf/styles.css b/.obsidian/plugins/better-export-pdf/styles.css new file mode 100644 index 0000000..1ae02d6 --- /dev/null +++ b/.obsidian/plugins/better-export-pdf/styles.css @@ -0,0 +1,52 @@ +#better-export-pdf { + display: flex; + flex-direction: row; + height: 75vh; +} + +#better-export-pdf .pdf-preview { + flex: auto; + position: relative; + display: flex; + flex-direction: column; + overflow-x: hidden; + overflow-y: scroll; + align-content: flex-start; +} + +#better-export-pdf .pdf-preview .webview-wrapper { + position: relative; + height: 100%; + width: 100%; +} + +#better-export-pdf .pdf-preview .print-size { + position: absolute; + right: 8px; + top: 8px; + z-index: 99; + font-size: 0.6rem; + white-space: pre-wrap; + text-align: right; + visibility: hidden; +} + +#better-export-pdf .pdf-preview > div { + flex: 1; + height: 100%; + width: 100%; +} + +#better-export-pdf .pdf-preview .filename { + font-size: 0.75rem; + color: var(--color-base-60); +} +#better-export-pdf .pdf-preview .filename:not(:first-child) { + padding-top: calc(var(--p-spacing)); +} + +#better-export-pdf webview { + flex: 1; + height: 100%; + width: 100%; +} From 456283d25b0e33f60ec9b8f5e3d3ff2db3c4c952 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Mon, 4 Nov 2024 11:25:50 -0700 Subject: [PATCH 0550/1027] vault backup: 2024-11-04 11:25:50 --- education/math/MATH1060 (trig)/cheatsheet.pdf | Bin 0 -> 227141 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 education/math/MATH1060 (trig)/cheatsheet.pdf diff --git a/education/math/MATH1060 (trig)/cheatsheet.pdf b/education/math/MATH1060 (trig)/cheatsheet.pdf new file mode 100644 index 0000000000000000000000000000000000000000..85a51236243e4ecb51aeb4e10e1467e64505d88d GIT binary patch literal 227141 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
+0gWbo4Qxbu&*zQyS#*8yTs+> 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�ZK+-;41j7+0`0{a{>lTN`uxu^zgdlTRD) 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 d%IJYc$u9F4L18FJ^| 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 Bti}KU literal 0 HcmV?d00001 From b2145afe2d62d5353b4791a5d4fc79daa05cf384 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Mon, 4 Nov 2024 11:55:02 -0700 Subject: [PATCH 0551/1027] vault backup: 2024-11-04 11:55:02 --- education/nutrition/Vitamins.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/education/nutrition/Vitamins.md b/education/nutrition/Vitamins.md index 32384dd..01cbe1d 100644 --- a/education/nutrition/Vitamins.md +++ b/education/nutrition/Vitamins.md @@ -32,6 +32,8 @@ Vitamins were first discovered in 1921 | Vitamin D (Calciferol) | - Calcium Absorption
- Bone Strength
- Blood Calcium Levels
- Supports Immune Function
- Reduces Inflammation | - Rickets (children)
- Osteomalacia (Adults)
- Osteoporosis (Elderly)
- Decreased immune function
- Decreased growth | - Hypercalcemia (Calcium deposits in soft tissue, Weakness, Nausea/Vomiting)
- Kidney Stones | - Milk and Dairy Products
- Fish (Salmon, Tuna)
- Breakfast Cereals
- Sunlight or UV Light | - Often referred to as the sunshine vitamin
- Acts as a hormone (interacts with para-thyroid hormone and calcitonin) | | Vitamin E (Tocopherol) | - Antioxidant
- Wound healing
- Cell Membranes
- Supports immune function | - Hemolysis of red blood cells
- Anemia
- Reduced muscular coordination | Supplements can interfere with vitamin K metabolism and cause uncontrolled bleeding | - Vegetable oils
- Nuts or Seeds
- Wheat germ
- Green leafy veggies
- Breakfast Cereals | - Doesn't increase sexual performance, prevent aging, or cure Parkinson's disease (despite claims) | | Vitamin K (Phylloquinone) | - Blood clotting
- Bone health | - Hemorrhaging or Hemorrhagic Disease (Excessive bleeding or internal bleeding)
- Increased risk of hip failure | Not common | - Green leafy veggies (spinach, kale, et cetera)
- Beans and soybeans
- Vegetable Oils
- Healthy GI tract | - 50% of needed amount can be synthesized in the GI tract
- Babies are given a shot at birth
- Interacts with blood clotting meds (coumadin or warfarin) | + +Dairy products are typically fortified with vitamins A and D. # Water soluble vitamins - Water soluble vitamins are the **B-vitamins**: thiamin, riboflavin, niacin, vitamin B-6, pantothenic acid, folate, biotin, vitamin B-12, and **vitamin C**. - They dissolve in water From 086b771d9e5a20140aa337fd0c88b65910389f7b Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 5 Nov 2024 11:23:09 -0700 Subject: [PATCH 0552/1027] vault backup: 2024-11-05 11:23:09 --- education/software development/ECE1400/Chapter 14 Exercises.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 education/software development/ECE1400/Chapter 14 Exercises.md diff --git a/education/software development/ECE1400/Chapter 14 Exercises.md b/education/software development/ECE1400/Chapter 14 Exercises.md new file mode 100644 index 0000000..ad27a20 --- /dev/null +++ b/education/software development/ECE1400/Chapter 14 Exercises.md @@ -0,0 +1 @@ +> **13.** Show what the following program will look like after preprocessing. You may ignore any lines added to the program as a result of including the `` header. From 73e3013160d5187a8b972b964b64095e042c44de Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 5 Nov 2024 11:28:09 -0700 Subject: [PATCH 0553/1027] vault backup: 2024-11-05 11:28:09 --- .../ECE1400/Chapter 14 Exercises.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/education/software development/ECE1400/Chapter 14 Exercises.md b/education/software development/ECE1400/Chapter 14 Exercises.md index ad27a20..2d24f30 100644 --- a/education/software development/ECE1400/Chapter 14 Exercises.md +++ b/education/software development/ECE1400/Chapter 14 Exercises.md @@ -1 +1,13 @@ +> **12.** Suppose that the macro `M` has been defined as follows: +```c +#define M 10 +``` +> Which of the following tests will fail? +```c +// C will fail, because `M` is defined. +#ifndef M +``` + +--- + > **13.** Show what the following program will look like after preprocessing. You may ignore any lines added to the program as a result of including the `` header. From a8819068c35f5b329ceb98d2885e512b20c4f2a5 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 5 Nov 2024 11:33:13 -0700 Subject: [PATCH 0554/1027] vault backup: 2024-11-05 11:33:13 --- education/software development/ECE1400/Chapter 14 Exercises.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/education/software development/ECE1400/Chapter 14 Exercises.md b/education/software development/ECE1400/Chapter 14 Exercises.md index 2d24f30..194bfa9 100644 --- a/education/software development/ECE1400/Chapter 14 Exercises.md +++ b/education/software development/ECE1400/Chapter 14 Exercises.md @@ -6,6 +6,9 @@ ```c // C will fail, because `M` is defined. #ifndef M + +// E will fail, because `M` is defined +#if !defined(M) ``` --- From 5c37c59fa81b9b0692a2e9839a41aba36c309b13 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 5 Nov 2024 11:38:30 -0700 Subject: [PATCH 0555/1027] vault backup: 2024-11-05 11:38:30 --- .../ECE1400/Chapter 14 Exercises.md | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/education/software development/ECE1400/Chapter 14 Exercises.md b/education/software development/ECE1400/Chapter 14 Exercises.md index 194bfa9..89d7817 100644 --- a/education/software development/ECE1400/Chapter 14 Exercises.md +++ b/education/software development/ECE1400/Chapter 14 Exercises.md @@ -14,3 +14,26 @@ --- > **13.** Show what the following program will look like after preprocessing. You may ignore any lines added to the program as a result of including the `` header. + +```c +#include + +int main(void) +{ + f(); + +} + + void f(void) { + printf("N is %d\n", 100); + } +``` + +--- + +> **15.** Suppose that a program needs to display messages in either English, French, or Spanish. Using conditional compilation, write a program fragment that displays one of the following three messages, depending on whether or not the specified macro is defined. + +```c + + +``` \ No newline at end of file From 0940db21c81ca734740861e81faceb3a49d2fe75 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 5 Nov 2024 11:43:30 -0700 Subject: [PATCH 0556/1027] vault backup: 2024-11-05 11:43:30 --- .obsidian/app.json | 2 +- .../ECE1400/Chapter 14 Exercises.md | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/.obsidian/app.json b/.obsidian/app.json index 3595e31..83fdb69 100644 --- a/.obsidian/app.json +++ b/.obsidian/app.json @@ -2,7 +2,7 @@ "vimMode": true, "promptDelete": false, "pdfExportSettings": { - "includeName": false, + "includeName": true, "pageSize": "Letter", "landscape": false, "margin": "0", diff --git a/education/software development/ECE1400/Chapter 14 Exercises.md b/education/software development/ECE1400/Chapter 14 Exercises.md index 89d7817..d63459e 100644 --- a/education/software development/ECE1400/Chapter 14 Exercises.md +++ b/education/software development/ECE1400/Chapter 14 Exercises.md @@ -34,6 +34,17 @@ int main(void) > **15.** Suppose that a program needs to display messages in either English, French, or Spanish. Using conditional compilation, write a program fragment that displays one of the following three messages, depending on whether or not the specified macro is defined. ```c +#ifdef ENGLISH +#define MESSAGE "Insert Disk 1" +#endif +#ifdef FRENCH +#define MESSAGE "Inserez Le Disque 1" +#endif +#ifdef SPANISH +#define MESSAGE "Inserte El Disco 1" +#endif + +printf(MESSAGE); ``` \ No newline at end of file From 151a88c14e67464271102959f66c37cc6ab5d3ae Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 6 Nov 2024 11:30:08 -0700 Subject: [PATCH 0557/1027] vault backup: 2024-11-06 11:30:08 --- education/math/MATH1050/Systems of Equations.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/education/math/MATH1050/Systems of Equations.md b/education/math/MATH1050/Systems of Equations.md index dfca9f7..f9643bd 100644 --- a/education/math/MATH1050/Systems of Equations.md +++ b/education/math/MATH1050/Systems of Equations.md @@ -1,9 +1,9 @@ -| Term | Definition | -| ---- | ---- | -| Consistent | The system of equations has at least one solution | -| Inconsistent | Parallel lines, no solution | -| Independent | The lines only cross at one point. | -| Dependant | The lines are identical, and there are infinitely many solutions. Both equations represent the same line when plotted. | +| Term | Definition | +| ------------ | ---------------------------------------------------------------------------------------------------------------------- | +| Consistent | The system of equations has at least one solution | +| Inconsistent | Parallel lines, no solution | +| Independent | The lines only cross at one point. | +| Dependant | The lines are identical, and there are infinitely many solutions. Both equations represent the same line when plotted. | # Solving ## Graphing Graph the two equations, and look for points where they intersect From 7308d94e02f269e62b647839c2553d4d3070b4e7 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Thu, 7 Nov 2024 07:40:37 -0700 Subject: [PATCH 0558/1027] vault backup: 2024-11-07 07:40:37 --- education/nutrition/Vitamins.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/education/nutrition/Vitamins.md b/education/nutrition/Vitamins.md index 01cbe1d..a2ca868 100644 --- a/education/nutrition/Vitamins.md +++ b/education/nutrition/Vitamins.md @@ -59,3 +59,8 @@ It's important to preserve the vitamin content of food, ways to do so include: - Fresh produce should refrigerated at high humidity, away from the open air - Exposure to excessive heat, alkaline (salty) substances, light, and air can all reduce the vitamin content of food - **Vegetables should be cooked in small amounts of water, using quick cook methods** + +# Water Soluble Vitamins +Water soluble vitamins dissolve in watery components of food and the body. Most excess water soluble vitamins are filtered through the kidneys and eliminated in urine, whereas fat soluble vitamins are stored in large amounts. + +| Vitamin | Major Functions in the body | Adult RDA/AI | Good Sources | Deficiency Disease \ No newline at end of file From 0ebe13465ee7a2096b64114e909a28f43c58e477 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Thu, 7 Nov 2024 07:46:04 -0700 Subject: [PATCH 0559/1027] vault backup: 2024-11-07 07:46:04 --- education/nutrition/Vitamins.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/education/nutrition/Vitamins.md b/education/nutrition/Vitamins.md index a2ca868..c70df9e 100644 --- a/education/nutrition/Vitamins.md +++ b/education/nutrition/Vitamins.md @@ -63,4 +63,6 @@ It's important to preserve the vitamin content of food, ways to do so include: # Water Soluble Vitamins Water soluble vitamins dissolve in watery components of food and the body. Most excess water soluble vitamins are filtered through the kidneys and eliminated in urine, whereas fat soluble vitamins are stored in large amounts. -| Vitamin | Major Functions in the body | Adult RDA/AI | Good Sources | Deficiency Disease \ No newline at end of file +| Vitamin | Major Functions in the body | Adult RDA/AI | Good Sources | Deficiency Signs and Symptoms | Major Toxicity Signs and Symptoms | +| ------- | --------------------------- | ------------ | ------------ | ----------------------------- | --------------------------------- | +| | | | | | | \ No newline at end of file From 6884a6918845683e9e7e5ad2612912249a1e17e5 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Thu, 7 Nov 2024 07:56:09 -0700 Subject: [PATCH 0560/1027] vault backup: 2024-11-07 07:56:09 --- education/nutrition/Vitamins.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/education/nutrition/Vitamins.md b/education/nutrition/Vitamins.md index c70df9e..5dc91dd 100644 --- a/education/nutrition/Vitamins.md +++ b/education/nutrition/Vitamins.md @@ -63,6 +63,8 @@ It's important to preserve the vitamin content of food, ways to do so include: # Water Soluble Vitamins Water soluble vitamins dissolve in watery components of food and the body. Most excess water soluble vitamins are filtered through the kidneys and eliminated in urine, whereas fat soluble vitamins are stored in large amounts. -| Vitamin | Major Functions in the body | Adult RDA/AI | Good Sources | Deficiency Signs and Symptoms | Major Toxicity Signs and Symptoms | -| ------- | --------------------------- | ------------ | ------------ | ----------------------------- | --------------------------------- | -| | | | | | | \ No newline at end of file +| Vitamin | Major Functions in the body | Adult RDA/AI | Good Sources | Deficiency Signs and Symptoms | Major Toxicity Signs and Symptoms | +| ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------ | ------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | --------------------------------- | +| Thiamin | Part of TPP, a coenzyme needed for carbohydrate metabolism and the metabolism of certain amino acids. May help with the production of neurotransmitters | 1.1-1.2 mg | Pork, wheat germ, enriched breads and cereals, legumes, nuts | Beriberi and Wenicke-Korsakoff syndrome; weakness, abnormal nervous system functioning. | None (UL not determined. | +| Riboflavin | Part of FMN and FAD, coenzymes needed for carbohydrate, amino acid, and lipid metabolism. | 1.1-1.3mg | Cow's milk, yogurt, and other dairy products; enriched breads and cereals | Inflammation of the mouth and tongue, eye disorders | None (UL not determined) | +| Niacin | Part of | | | | | \ No newline at end of file From 00c5149d7d6fed4d3be9e0967c96d0315d2f674c Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Thu, 7 Nov 2024 08:01:10 -0700 Subject: [PATCH 0561/1027] vault backup: 2024-11-07 08:01:10 --- Untitled.md | 0 education/nutrition/Vitamins.md | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 Untitled.md diff --git a/Untitled.md b/Untitled.md new file mode 100644 index 0000000..e69de29 diff --git a/education/nutrition/Vitamins.md b/education/nutrition/Vitamins.md index 5dc91dd..0a591c4 100644 --- a/education/nutrition/Vitamins.md +++ b/education/nutrition/Vitamins.md @@ -67,4 +67,4 @@ Water soluble vitamins dissolve in watery components of food and the body. Most | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------ | ------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | --------------------------------- | | Thiamin | Part of TPP, a coenzyme needed for carbohydrate metabolism and the metabolism of certain amino acids. May help with the production of neurotransmitters | 1.1-1.2 mg | Pork, wheat germ, enriched breads and cereals, legumes, nuts | Beriberi and Wenicke-Korsakoff syndrome; weakness, abnormal nervous system functioning. | None (UL not determined. | | Riboflavin | Part of FMN and FAD, coenzymes needed for carbohydrate, amino acid, and lipid metabolism. | 1.1-1.3mg | Cow's milk, yogurt, and other dairy products; enriched breads and cereals | Inflammation of the mouth and tongue, eye disorders | None (UL not determined) | -| Niacin | Part of | | | | | \ No newline at end of file +| Niacin | Part of NAD and NADP, coenzymes needed for energy metabolism. | | | | | \ No newline at end of file From c652257eae4446b83b93d8f6fc4f6fc190dcbf16 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Thu, 7 Nov 2024 08:27:36 -0700 Subject: [PATCH 0562/1027] vault backup: 2024-11-07 08:27:36 --- education/nutrition/Vitamins.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/education/nutrition/Vitamins.md b/education/nutrition/Vitamins.md index 0a591c4..33b54e0 100644 --- a/education/nutrition/Vitamins.md +++ b/education/nutrition/Vitamins.md @@ -63,8 +63,8 @@ It's important to preserve the vitamin content of food, ways to do so include: # Water Soluble Vitamins Water soluble vitamins dissolve in watery components of food and the body. Most excess water soluble vitamins are filtered through the kidneys and eliminated in urine, whereas fat soluble vitamins are stored in large amounts. -| Vitamin | Major Functions in the body | Adult RDA/AI | Good Sources | Deficiency Signs and Symptoms | Major Toxicity Signs and Symptoms | -| ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------ | ------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | --------------------------------- | -| Thiamin | Part of TPP, a coenzyme needed for carbohydrate metabolism and the metabolism of certain amino acids. May help with the production of neurotransmitters | 1.1-1.2 mg | Pork, wheat germ, enriched breads and cereals, legumes, nuts | Beriberi and Wenicke-Korsakoff syndrome; weakness, abnormal nervous system functioning. | None (UL not determined. | -| Riboflavin | Part of FMN and FAD, coenzymes needed for carbohydrate, amino acid, and lipid metabolism. | 1.1-1.3mg | Cow's milk, yogurt, and other dairy products; enriched breads and cereals | Inflammation of the mouth and tongue, eye disorders | None (UL not determined) | -| Niacin | Part of NAD and NADP, coenzymes needed for energy metabolism. | | | | | \ No newline at end of file +| Vitamin | Major Functions in the body | Adult RDA/AI | Good Sources | Deficiency Signs and Symptoms | Major Toxicity Signs and Symptoms | +| ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------ | -------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | --------------------------------- | +| Thiamin | Part of TPP, a coenzyme needed for carbohydrate metabolism and the metabolism of certain amino acids. May help with the production of neurotransmitters | 1.1-1.2 mg | Pork, wheat germ, enriched breads and cereals, legumes, nuts | Beriberi and Wenicke-Korsakoff syndrome; weakness, abnormal nervous system functioning. | None (UL not determined. | +| Riboflavin | Part of FMN and FAD, coenzymes needed for carbohydrate, amino acid, and lipid metabolism. | 1.1-1.3mg | Cow's milk, yogurt, and other dairy products; enriched breads and cereals | Inflammation of the mouth and tongue, eye disorders | None (UL not determined) | +| Niacin | Part of NAD and NADP, coenzymes needed for energy metabolism. | 14-16mg | Enriched breads and cereals, beef, liver, tuna, salmon, poultry, pork, mushrooms | Pellegra
- Diarrhea
| | \ No newline at end of file From 59bfa717b98e24c26656381e003ede5e711e2d3c Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Thu, 7 Nov 2024 08:32:36 -0700 Subject: [PATCH 0563/1027] vault backup: 2024-11-07 08:32:36 --- education/nutrition/Vitamins.md | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/education/nutrition/Vitamins.md b/education/nutrition/Vitamins.md index 33b54e0..e5f7a49 100644 --- a/education/nutrition/Vitamins.md +++ b/education/nutrition/Vitamins.md @@ -63,8 +63,11 @@ It's important to preserve the vitamin content of food, ways to do so include: # Water Soluble Vitamins Water soluble vitamins dissolve in watery components of food and the body. Most excess water soluble vitamins are filtered through the kidneys and eliminated in urine, whereas fat soluble vitamins are stored in large amounts. -| Vitamin | Major Functions in the body | Adult RDA/AI | Good Sources | Deficiency Signs and Symptoms | Major Toxicity Signs and Symptoms | -| ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------ | -------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | --------------------------------- | -| Thiamin | Part of TPP, a coenzyme needed for carbohydrate metabolism and the metabolism of certain amino acids. May help with the production of neurotransmitters | 1.1-1.2 mg | Pork, wheat germ, enriched breads and cereals, legumes, nuts | Beriberi and Wenicke-Korsakoff syndrome; weakness, abnormal nervous system functioning. | None (UL not determined. | -| Riboflavin | Part of FMN and FAD, coenzymes needed for carbohydrate, amino acid, and lipid metabolism. | 1.1-1.3mg | Cow's milk, yogurt, and other dairy products; enriched breads and cereals | Inflammation of the mouth and tongue, eye disorders | None (UL not determined) | -| Niacin | Part of NAD and NADP, coenzymes needed for energy metabolism. | 14-16mg | Enriched breads and cereals, beef, liver, tuna, salmon, poultry, pork, mushrooms | Pellegra
- Diarrhea
| | \ No newline at end of file +| Vitamin | Major Functions in the body | Adult RDA/AI | Good Sources | Deficiency Signs and Symptoms | Major Toxicity Signs and Symptoms | +| ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------- | -------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | +| Thiamin | Part of TPP, a coenzyme needed for carbohydrate metabolism and the metabolism of certain amino acids. May help with the production of neurotransmitters | 1.1-1.2 mg | Pork, wheat germ, enriched breads and cereals, legumes, nuts | Beriberi and Wenicke-Korsakoff syndrome; weakness, abnormal nervous system functioning. | None (UL not determined. | +| Riboflavin | Part of FMN and FAD, coenzymes needed for carbohydrate, amino acid, and lipid metabolism. | 1.1-1.3mg | Cow's milk, yogurt, and other dairy products; enriched breads and cereals | Inflammation of the mouth and tongue, eye disorders | None (UL not determined) | +| Niacin | Part of NAD and NADP, coenzymes needed for energy metabolism. | 14-16mg | Enriched breads and cereals, beef, liver, tuna, salmon, poultry, pork, mushrooms | Pellegra
- Diarrhea
- Dermatitis
- Dementia
- Death | Adult UL = 35mg/day
Flushing of facial skin, itchy skin, nausea and vomiting, liver damage | +| Pantothenic acid | Part of coenzyme A that is needed for synthesizing fat and that helps release energy from carbohydrates, fats, and protein | 5mg | Beef and chicken liver, sunflower seeds, mushrooms, yogurt, fortified cereals | Rarely occurs | Unknown | +| Biotin | Coenzyme needed for synthesizing glucose and fatty acids | 30 micrograms | Eggs, peanuts, salmon, pork, liver, mushrooms, sunflower seeds | Rarely occurs, skin rash, hair loss, convulsions, and other neurological disorders; developmental delays in infants | Unknown | +| Vitamin B-6 | Part of PLP, coenzyme needed for animo acid metabolism, involved in neurotransmitter synthesis and hemoglobin synthesis | 1.3-1.7mg | Meat, fish, poultry, potatoes, bananas, spinach, sweet red peppers, broccoli | Dermatitis | | \ No newline at end of file From af925265e85d375b15dc6130b6ca101cd465e057 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Thu, 7 Nov 2024 08:37:36 -0700 Subject: [PATCH 0564/1027] vault backup: 2024-11-07 08:37:36 --- education/nutrition/Vitamins.md | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/education/nutrition/Vitamins.md b/education/nutrition/Vitamins.md index e5f7a49..bfea592 100644 --- a/education/nutrition/Vitamins.md +++ b/education/nutrition/Vitamins.md @@ -63,11 +63,12 @@ It's important to preserve the vitamin content of food, ways to do so include: # Water Soluble Vitamins Water soluble vitamins dissolve in watery components of food and the body. Most excess water soluble vitamins are filtered through the kidneys and eliminated in urine, whereas fat soluble vitamins are stored in large amounts. -| Vitamin | Major Functions in the body | Adult RDA/AI | Good Sources | Deficiency Signs and Symptoms | Major Toxicity Signs and Symptoms | -| ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------- | -------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | -| Thiamin | Part of TPP, a coenzyme needed for carbohydrate metabolism and the metabolism of certain amino acids. May help with the production of neurotransmitters | 1.1-1.2 mg | Pork, wheat germ, enriched breads and cereals, legumes, nuts | Beriberi and Wenicke-Korsakoff syndrome; weakness, abnormal nervous system functioning. | None (UL not determined. | -| Riboflavin | Part of FMN and FAD, coenzymes needed for carbohydrate, amino acid, and lipid metabolism. | 1.1-1.3mg | Cow's milk, yogurt, and other dairy products; enriched breads and cereals | Inflammation of the mouth and tongue, eye disorders | None (UL not determined) | -| Niacin | Part of NAD and NADP, coenzymes needed for energy metabolism. | 14-16mg | Enriched breads and cereals, beef, liver, tuna, salmon, poultry, pork, mushrooms | Pellegra
- Diarrhea
- Dermatitis
- Dementia
- Death | Adult UL = 35mg/day
Flushing of facial skin, itchy skin, nausea and vomiting, liver damage | -| Pantothenic acid | Part of coenzyme A that is needed for synthesizing fat and that helps release energy from carbohydrates, fats, and protein | 5mg | Beef and chicken liver, sunflower seeds, mushrooms, yogurt, fortified cereals | Rarely occurs | Unknown | -| Biotin | Coenzyme needed for synthesizing glucose and fatty acids | 30 micrograms | Eggs, peanuts, salmon, pork, liver, mushrooms, sunflower seeds | Rarely occurs, skin rash, hair loss, convulsions, and other neurological disorders; developmental delays in infants | Unknown | -| Vitamin B-6 | Part of PLP, coenzyme needed for animo acid metabolism, involved in neurotransmitter synthesis and hemoglobin synthesis | 1.3-1.7mg | Meat, fish, poultry, potatoes, bananas, spinach, sweet red peppers, broccoli | Dermatitis | | \ No newline at end of file +| Vitamin | Major Functions in the body | Adult RDA/AI | Good Sources | Deficiency Signs and Symptoms | Major Toxicity Signs and Symptoms | +| ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------- | ----------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | +| Thiamin | Part of TPP, a coenzyme needed for carbohydrate metabolism and the metabolism of certain amino acids. May help with the production of neurotransmitters | 1.1-1.2 mg | Pork, wheat germ, enriched breads and cereals, legumes, nuts | Beriberi and Wenicke-Korsakoff syndrome; weakness, abnormal nervous system functioning. | None (UL not determined. | +| Riboflavin | Part of FMN and FAD, coenzymes needed for carbohydrate, amino acid, and lipid metabolism. | 1.1-1.3mg | Cow's milk, yogurt, and other dairy products; enriched breads and cereals | Inflammation of the mouth and tongue, eye disorders | None (UL not determined) | +| Niacin | Part of NAD and NADP, coenzymes needed for energy metabolism. | 14-16mg | Enriched breads and cereals, beef, liver, tuna, salmon, poultry, pork, mushrooms | Pellegra
- Diarrhea
- Dermatitis
- Dementia
- Death | Adult UL = 35mg/day
Flushing of facial skin, itchy skin, nausea and vomiting, liver damage | +| Pantothenic acid | Part of coenzyme A that is needed for synthesizing fat and that helps release energy from carbohydrates, fats, and protein | 5mg | Beef and chicken liver, sunflower seeds, mushrooms, yogurt, fortified cereals | Rarely occurs | Unknown | +| Biotin | Coenzyme needed for synthesizing glucose and fatty acids | 30 micrograms | Eggs, peanuts, salmon, pork, liver, mushrooms, sunflower seeds | Rarely occurs, skin rash, hair loss, convulsions, and other neurological disorders; developmental delays in infants | Unknown | +| Vitamin B-6 | Part of PLP, coenzyme needed for animo acid metabolism, involved in neurotransmitter synthesis and hemoglobin synthesis | 1.3-1.7mg | Meat, fish, poultry, potatoes, bananas, spinach, sweet red peppers, broccoli | Dermatitis, anemia, depression, confusion, and neurological disorders such as convulsions | Adult UL = 100 mg per day

Nerve destruction | +| Folate | Part of THFA, a coenzyme needed for DNA synthesis and conversion of cysteine to methionine, preventing homocysteine accumulation | 400 micrograms | Dark green, leafy vegetables; papayas; asparagus; broccoli; orange juice; enriched breads and cereals | | | \ No newline at end of file From 1aea8df3726e64062bbea0f4e9fab83fc76897ff Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Thu, 7 Nov 2024 08:42:40 -0700 Subject: [PATCH 0565/1027] vault backup: 2024-11-07 08:42:40 --- education/nutrition/Vitamins.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/education/nutrition/Vitamins.md b/education/nutrition/Vitamins.md index bfea592..c403c94 100644 --- a/education/nutrition/Vitamins.md +++ b/education/nutrition/Vitamins.md @@ -71,4 +71,5 @@ Water soluble vitamins dissolve in watery components of food and the body. Most | Pantothenic acid | Part of coenzyme A that is needed for synthesizing fat and that helps release energy from carbohydrates, fats, and protein | 5mg | Beef and chicken liver, sunflower seeds, mushrooms, yogurt, fortified cereals | Rarely occurs | Unknown | | Biotin | Coenzyme needed for synthesizing glucose and fatty acids | 30 micrograms | Eggs, peanuts, salmon, pork, liver, mushrooms, sunflower seeds | Rarely occurs, skin rash, hair loss, convulsions, and other neurological disorders; developmental delays in infants | Unknown | | Vitamin B-6 | Part of PLP, coenzyme needed for animo acid metabolism, involved in neurotransmitter synthesis and hemoglobin synthesis | 1.3-1.7mg | Meat, fish, poultry, potatoes, bananas, spinach, sweet red peppers, broccoli | Dermatitis, anemia, depression, confusion, and neurological disorders such as convulsions | Adult UL = 100 mg per day

Nerve destruction | -| Folate | Part of THFA, a coenzyme needed for DNA synthesis and conversion of cysteine to methionine, preventing homocysteine accumulation | 400 micrograms | Dark green, leafy vegetables; papayas; asparagus; broccoli; orange juice; enriched breads and cereals | | | \ No newline at end of file +| Folate | Part of THFA, a coenzyme needed for DNA synthesis and conversion of cysteine to methionine, preventing homocysteine accumulation | 400 micrograms | Dark green, leafy vegetables; papayas; asparagus; broccoli; orange juice; enriched breads and cereals | Megaloblastic anemia, diarrhea, neural tube defects in embryos | Adult UL = 1000 micrograms per day | +| Vitamin B-12 | Part of coenzymes needed for various cellular processes, including folate and metabolism; maintenance of myelin sheaths | 2.4 micrograms | Peppers, citrus fruits, cherries, broccoli, cabbage, and berries | Scurveyl | | \ No newline at end of file From 7935e9d8a87d88541fb3e330716003f5a9954623 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Thu, 7 Nov 2024 08:47:40 -0700 Subject: [PATCH 0566/1027] vault backup: 2024-11-07 08:47:40 --- education/nutrition/Vitamins.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/education/nutrition/Vitamins.md b/education/nutrition/Vitamins.md index c403c94..e3af7ec 100644 --- a/education/nutrition/Vitamins.md +++ b/education/nutrition/Vitamins.md @@ -72,4 +72,4 @@ Water soluble vitamins dissolve in watery components of food and the body. Most | Biotin | Coenzyme needed for synthesizing glucose and fatty acids | 30 micrograms | Eggs, peanuts, salmon, pork, liver, mushrooms, sunflower seeds | Rarely occurs, skin rash, hair loss, convulsions, and other neurological disorders; developmental delays in infants | Unknown | | Vitamin B-6 | Part of PLP, coenzyme needed for animo acid metabolism, involved in neurotransmitter synthesis and hemoglobin synthesis | 1.3-1.7mg | Meat, fish, poultry, potatoes, bananas, spinach, sweet red peppers, broccoli | Dermatitis, anemia, depression, confusion, and neurological disorders such as convulsions | Adult UL = 100 mg per day

Nerve destruction | | Folate | Part of THFA, a coenzyme needed for DNA synthesis and conversion of cysteine to methionine, preventing homocysteine accumulation | 400 micrograms | Dark green, leafy vegetables; papayas; asparagus; broccoli; orange juice; enriched breads and cereals | Megaloblastic anemia, diarrhea, neural tube defects in embryos | Adult UL = 1000 micrograms per day | -| Vitamin B-12 | Part of coenzymes needed for various cellular processes, including folate and metabolism; maintenance of myelin sheaths | 2.4 micrograms | Peppers, citrus fruits, cherries, broccoli, cabbage, and berries | Scurveyl | | \ No newline at end of file +| Vitamin B-12 | Part of coenzymes needed for various cellular processes, including folate and metabolism; maintenance of myelin sheaths | 2.4 micrograms | Peppers, citrus fruits, cherries, broccoli, cabbage, and berries | Scurvy, poor wound healing, pinpoint hemorrhages, bleeding gums, bruises, depression | Adult UL = 2000 mg/day Diarrhea and GI tract discomfort | From 908a3dce9db3ee257f41ffb58744ab1a745a440e Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Thu, 7 Nov 2024 09:02:40 -0700 Subject: [PATCH 0567/1027] vault backup: 2024-11-07 09:02:40 --- education/nutrition/Vitamins.md | 1 + 1 file changed, 1 insertion(+) diff --git a/education/nutrition/Vitamins.md b/education/nutrition/Vitamins.md index e3af7ec..201f62f 100644 --- a/education/nutrition/Vitamins.md +++ b/education/nutrition/Vitamins.md @@ -73,3 +73,4 @@ Water soluble vitamins dissolve in watery components of food and the body. Most | Vitamin B-6 | Part of PLP, coenzyme needed for animo acid metabolism, involved in neurotransmitter synthesis and hemoglobin synthesis | 1.3-1.7mg | Meat, fish, poultry, potatoes, bananas, spinach, sweet red peppers, broccoli | Dermatitis, anemia, depression, confusion, and neurological disorders such as convulsions | Adult UL = 100 mg per day

Nerve destruction | | Folate | Part of THFA, a coenzyme needed for DNA synthesis and conversion of cysteine to methionine, preventing homocysteine accumulation | 400 micrograms | Dark green, leafy vegetables; papayas; asparagus; broccoli; orange juice; enriched breads and cereals | Megaloblastic anemia, diarrhea, neural tube defects in embryos | Adult UL = 1000 micrograms per day | | Vitamin B-12 | Part of coenzymes needed for various cellular processes, including folate and metabolism; maintenance of myelin sheaths | 2.4 micrograms | Peppers, citrus fruits, cherries, broccoli, cabbage, and berries | Scurvy, poor wound healing, pinpoint hemorrhages, bleeding gums, bruises, depression | Adult UL = 2000 mg/day Diarrhea and GI tract discomfort | +- As people age, HCl production \ No newline at end of file From c80df1b114b056aaacea973d4507e04b0c2ab61f Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Thu, 7 Nov 2024 09:07:40 -0700 Subject: [PATCH 0568/1027] vault backup: 2024-11-07 09:07:40 --- education/nutrition/Vitamins.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/education/nutrition/Vitamins.md b/education/nutrition/Vitamins.md index 201f62f..81adf89 100644 --- a/education/nutrition/Vitamins.md +++ b/education/nutrition/Vitamins.md @@ -73,4 +73,5 @@ Water soluble vitamins dissolve in watery components of food and the body. Most | Vitamin B-6 | Part of PLP, coenzyme needed for animo acid metabolism, involved in neurotransmitter synthesis and hemoglobin synthesis | 1.3-1.7mg | Meat, fish, poultry, potatoes, bananas, spinach, sweet red peppers, broccoli | Dermatitis, anemia, depression, confusion, and neurological disorders such as convulsions | Adult UL = 100 mg per day

Nerve destruction | | Folate | Part of THFA, a coenzyme needed for DNA synthesis and conversion of cysteine to methionine, preventing homocysteine accumulation | 400 micrograms | Dark green, leafy vegetables; papayas; asparagus; broccoli; orange juice; enriched breads and cereals | Megaloblastic anemia, diarrhea, neural tube defects in embryos | Adult UL = 1000 micrograms per day | | Vitamin B-12 | Part of coenzymes needed for various cellular processes, including folate and metabolism; maintenance of myelin sheaths | 2.4 micrograms | Peppers, citrus fruits, cherries, broccoli, cabbage, and berries | Scurvy, poor wound healing, pinpoint hemorrhages, bleeding gums, bruises, depression | Adult UL = 2000 mg/day Diarrhea and GI tract discomfort | -- As people age, HCl production \ No newline at end of file +- As people age, HCl production decreases, making it harder for the body to process vitamin b12 +- Choline, carnitine, inositol, taurine, and lipoic acid are vitamin-like compounds that necessary to maintain normal metabolism. Because the body can synthesize these compounds, they are not considered essential nutrients. \ No newline at end of file From c411cc2ee75fe3dbe4bd5e2650b256d7c09396ad Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Thu, 7 Nov 2024 09:12:40 -0700 Subject: [PATCH 0569/1027] vault backup: 2024-11-07 09:12:40 --- education/nutrition/Vitamins.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/education/nutrition/Vitamins.md b/education/nutrition/Vitamins.md index 81adf89..6f053b7 100644 --- a/education/nutrition/Vitamins.md +++ b/education/nutrition/Vitamins.md @@ -66,12 +66,13 @@ Water soluble vitamins dissolve in watery components of food and the body. Most | Vitamin | Major Functions in the body | Adult RDA/AI | Good Sources | Deficiency Signs and Symptoms | Major Toxicity Signs and Symptoms | | ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------- | ----------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | | Thiamin | Part of TPP, a coenzyme needed for carbohydrate metabolism and the metabolism of certain amino acids. May help with the production of neurotransmitters | 1.1-1.2 mg | Pork, wheat germ, enriched breads and cereals, legumes, nuts | Beriberi and Wenicke-Korsakoff syndrome; weakness, abnormal nervous system functioning. | None (UL not determined. | -| Riboflavin | Part of FMN and FAD, coenzymes needed for carbohydrate, amino acid, and lipid metabolism. | 1.1-1.3mg | Cow's milk, yogurt, and other dairy products; enriched breads and cereals | Inflammation of the mouth and tongue, eye disorders | None (UL not determined) | -| Niacin | Part of NAD and NADP, coenzymes needed for energy metabolism. | 14-16mg | Enriched breads and cereals, beef, liver, tuna, salmon, poultry, pork, mushrooms | Pellegra
- Diarrhea
- Dermatitis
- Dementia
- Death | Adult UL = 35mg/day
Flushing of facial skin, itchy skin, nausea and vomiting, liver damage | -| Pantothenic acid | Part of coenzyme A that is needed for synthesizing fat and that helps release energy from carbohydrates, fats, and protein | 5mg | Beef and chicken liver, sunflower seeds, mushrooms, yogurt, fortified cereals | Rarely occurs | Unknown | +| Riboflavin | Part of FMN and FAD, coenzymes needed for carbohydrate, amino acid, and lipid metabolism. | 1.1-1.3mg | Cow's milk, yogurt, and other dairy products; spinach; enriched breads and cereals | Inflammation of the mouth and tongue, eye disorders | None (UL not determined) | +| Niacin | Part of NAD and NADP, coenzymes needed for energy metabolism. | 14-16mg | Enriched breads and cereals, beef liver, tuna, salmon, poultry, pork, mushrooms | Pellegra
- Diarrhea
- Dermatitis
- Dementia
- Death | Adult UL = 35mg/day
Flushing of facial skin, itchy skin, nausea and vomiting, liver damage | +| Pantothenic acid | Part of coenzyme A that is needed for synthesizing fat and that helps release energy from carbohydrates, fats, and protein | 5mg | Beef and chicken liver, sunflower seeds, mushrooms, yogurt, fortified cereals | Rarely occurs because it's so common in foods. | Unknown | | Biotin | Coenzyme needed for synthesizing glucose and fatty acids | 30 micrograms | Eggs, peanuts, salmon, pork, liver, mushrooms, sunflower seeds | Rarely occurs, skin rash, hair loss, convulsions, and other neurological disorders; developmental delays in infants | Unknown | | Vitamin B-6 | Part of PLP, coenzyme needed for animo acid metabolism, involved in neurotransmitter synthesis and hemoglobin synthesis | 1.3-1.7mg | Meat, fish, poultry, potatoes, bananas, spinach, sweet red peppers, broccoli | Dermatitis, anemia, depression, confusion, and neurological disorders such as convulsions | Adult UL = 100 mg per day

Nerve destruction | | Folate | Part of THFA, a coenzyme needed for DNA synthesis and conversion of cysteine to methionine, preventing homocysteine accumulation | 400 micrograms | Dark green, leafy vegetables; papayas; asparagus; broccoli; orange juice; enriched breads and cereals | Megaloblastic anemia, diarrhea, neural tube defects in embryos | Adult UL = 1000 micrograms per day | | Vitamin B-12 | Part of coenzymes needed for various cellular processes, including folate and metabolism; maintenance of myelin sheaths | 2.4 micrograms | Peppers, citrus fruits, cherries, broccoli, cabbage, and berries | Scurvy, poor wound healing, pinpoint hemorrhages, bleeding gums, bruises, depression | Adult UL = 2000 mg/day Diarrhea and GI tract discomfort | +- Coenzymes are a water soluble vitamin that assists in the metabolism of macronutrients. - As people age, HCl production decreases, making it harder for the body to process vitamin b12 - Choline, carnitine, inositol, taurine, and lipoic acid are vitamin-like compounds that necessary to maintain normal metabolism. Because the body can synthesize these compounds, they are not considered essential nutrients. \ No newline at end of file From 5d7e7e7f3045569e1f824c319db9d7bef8181f3c Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Thu, 7 Nov 2024 09:17:40 -0700 Subject: [PATCH 0570/1027] vault backup: 2024-11-07 09:17:40 --- education/nutrition/Vitamins.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/education/nutrition/Vitamins.md b/education/nutrition/Vitamins.md index 6f053b7..4091164 100644 --- a/education/nutrition/Vitamins.md +++ b/education/nutrition/Vitamins.md @@ -75,4 +75,7 @@ Water soluble vitamins dissolve in watery components of food and the body. Most | Vitamin B-12 | Part of coenzymes needed for various cellular processes, including folate and metabolism; maintenance of myelin sheaths | 2.4 micrograms | Peppers, citrus fruits, cherries, broccoli, cabbage, and berries | Scurvy, poor wound healing, pinpoint hemorrhages, bleeding gums, bruises, depression | Adult UL = 2000 mg/day Diarrhea and GI tract discomfort | - Coenzymes are a water soluble vitamin that assists in the metabolism of macronutrients. - As people age, HCl production decreases, making it harder for the body to process vitamin b12 -- Choline, carnitine, inositol, taurine, and lipoic acid are vitamin-like compounds that necessary to maintain normal metabolism. Because the body can synthesize these compounds, they are not considered essential nutrients. \ No newline at end of file +- Choline, carnitine, inositol, taurine, and lipoic acid are vitamin-like compounds that necessary to maintain normal metabolism. Because the body can synthesize these compounds, they are not considered essential nutrients. +- Biotin can be produced by intestinal bacteria +- The 4 "D"s are signs of pellegra +- Adequate folate status is critical in early pregnancy because the neural tube forms about 21 days after conception \ No newline at end of file From 580c08eecb479cf107ff09426b816679639fb923 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Thu, 7 Nov 2024 09:22:40 -0700 Subject: [PATCH 0571/1027] vault backup: 2024-11-07 09:22:40 --- education/nutrition/Vitamins.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/education/nutrition/Vitamins.md b/education/nutrition/Vitamins.md index 4091164..f1556c4 100644 --- a/education/nutrition/Vitamins.md +++ b/education/nutrition/Vitamins.md @@ -72,10 +72,12 @@ Water soluble vitamins dissolve in watery components of food and the body. Most | Biotin | Coenzyme needed for synthesizing glucose and fatty acids | 30 micrograms | Eggs, peanuts, salmon, pork, liver, mushrooms, sunflower seeds | Rarely occurs, skin rash, hair loss, convulsions, and other neurological disorders; developmental delays in infants | Unknown | | Vitamin B-6 | Part of PLP, coenzyme needed for animo acid metabolism, involved in neurotransmitter synthesis and hemoglobin synthesis | 1.3-1.7mg | Meat, fish, poultry, potatoes, bananas, spinach, sweet red peppers, broccoli | Dermatitis, anemia, depression, confusion, and neurological disorders such as convulsions | Adult UL = 100 mg per day

Nerve destruction | | Folate | Part of THFA, a coenzyme needed for DNA synthesis and conversion of cysteine to methionine, preventing homocysteine accumulation | 400 micrograms | Dark green, leafy vegetables; papayas; asparagus; broccoli; orange juice; enriched breads and cereals | Megaloblastic anemia, diarrhea, neural tube defects in embryos | Adult UL = 1000 micrograms per day | -| Vitamin B-12 | Part of coenzymes needed for various cellular processes, including folate and metabolism; maintenance of myelin sheaths | 2.4 micrograms | Peppers, citrus fruits, cherries, broccoli, cabbage, and berries | Scurvy, poor wound healing, pinpoint hemorrhages, bleeding gums, bruises, depression | Adult UL = 2000 mg/day Diarrhea and GI tract discomfort | +| Vitamin B-12 | Part of coenzymes needed for various cellular processes, including folate and metabolism; maintenance of myelin sheaths | 2.4 micrograms | Peppers, citrus fruits, cherries, broccoli, cabbage, and berries, shellfish, poultry, meat, and eggs | Scurvy, poor wound healing, pinpoint hemorrhages, bleeding gums, bruises, depression | Adult UL = 2000 mg/day Diarrhea and GI tract discomfort | - Coenzymes are a water soluble vitamin that assists in the metabolism of macronutrients. - As people age, HCl production decreases, making it harder for the body to process vitamin b12 - Choline, carnitine, inositol, taurine, and lipoic acid are vitamin-like compounds that necessary to maintain normal metabolism. Because the body can synthesize these compounds, they are not considered essential nutrients. - Biotin can be produced by intestinal bacteria - The 4 "D"s are signs of pellegra -- Adequate folate status is critical in early pregnancy because the neural tube forms about 21 days after conception \ No newline at end of file +- Adequate folate status is critical in early pregnancy because the neural tube forms about 21 days after conception +- Pregnant individuals should consume 400 ug of folate to prevent neural tube defects (eg spina bifida or anancephaly). It should reduce the rate of spinal defects by 50% +- \ No newline at end of file From 41753138524e8752a943108801293b7f89a8a27d Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Thu, 7 Nov 2024 13:08:13 -0700 Subject: [PATCH 0572/1027] vault backup: 2024-11-07 13:08:13 --- education/nutrition/Vitamins.md | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/education/nutrition/Vitamins.md b/education/nutrition/Vitamins.md index f1556c4..64905b3 100644 --- a/education/nutrition/Vitamins.md +++ b/education/nutrition/Vitamins.md @@ -63,16 +63,17 @@ It's important to preserve the vitamin content of food, ways to do so include: # Water Soluble Vitamins Water soluble vitamins dissolve in watery components of food and the body. Most excess water soluble vitamins are filtered through the kidneys and eliminated in urine, whereas fat soluble vitamins are stored in large amounts. -| Vitamin | Major Functions in the body | Adult RDA/AI | Good Sources | Deficiency Signs and Symptoms | Major Toxicity Signs and Symptoms | -| ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------- | ----------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | -| Thiamin | Part of TPP, a coenzyme needed for carbohydrate metabolism and the metabolism of certain amino acids. May help with the production of neurotransmitters | 1.1-1.2 mg | Pork, wheat germ, enriched breads and cereals, legumes, nuts | Beriberi and Wenicke-Korsakoff syndrome; weakness, abnormal nervous system functioning. | None (UL not determined. | -| Riboflavin | Part of FMN and FAD, coenzymes needed for carbohydrate, amino acid, and lipid metabolism. | 1.1-1.3mg | Cow's milk, yogurt, and other dairy products; spinach; enriched breads and cereals | Inflammation of the mouth and tongue, eye disorders | None (UL not determined) | -| Niacin | Part of NAD and NADP, coenzymes needed for energy metabolism. | 14-16mg | Enriched breads and cereals, beef liver, tuna, salmon, poultry, pork, mushrooms | Pellegra
- Diarrhea
- Dermatitis
- Dementia
- Death | Adult UL = 35mg/day
Flushing of facial skin, itchy skin, nausea and vomiting, liver damage | -| Pantothenic acid | Part of coenzyme A that is needed for synthesizing fat and that helps release energy from carbohydrates, fats, and protein | 5mg | Beef and chicken liver, sunflower seeds, mushrooms, yogurt, fortified cereals | Rarely occurs because it's so common in foods. | Unknown | -| Biotin | Coenzyme needed for synthesizing glucose and fatty acids | 30 micrograms | Eggs, peanuts, salmon, pork, liver, mushrooms, sunflower seeds | Rarely occurs, skin rash, hair loss, convulsions, and other neurological disorders; developmental delays in infants | Unknown | -| Vitamin B-6 | Part of PLP, coenzyme needed for animo acid metabolism, involved in neurotransmitter synthesis and hemoglobin synthesis | 1.3-1.7mg | Meat, fish, poultry, potatoes, bananas, spinach, sweet red peppers, broccoli | Dermatitis, anemia, depression, confusion, and neurological disorders such as convulsions | Adult UL = 100 mg per day

Nerve destruction | -| Folate | Part of THFA, a coenzyme needed for DNA synthesis and conversion of cysteine to methionine, preventing homocysteine accumulation | 400 micrograms | Dark green, leafy vegetables; papayas; asparagus; broccoli; orange juice; enriched breads and cereals | Megaloblastic anemia, diarrhea, neural tube defects in embryos | Adult UL = 1000 micrograms per day | -| Vitamin B-12 | Part of coenzymes needed for various cellular processes, including folate and metabolism; maintenance of myelin sheaths | 2.4 micrograms | Peppers, citrus fruits, cherries, broccoli, cabbage, and berries, shellfish, poultry, meat, and eggs | Scurvy, poor wound healing, pinpoint hemorrhages, bleeding gums, bruises, depression | Adult UL = 2000 mg/day Diarrhea and GI tract discomfort | +| Vitamin | Major Functions in the body | Adult RDA/AI | Good Sources | Deficiency Signs and Symptoms | Major Toxicity Signs and Symptoms | +| ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------- | ----------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | +| Thiamin | Part of TPP, a coenzyme needed for carbohydrate metabolism and the metabolism of certain amino acids. May help with the production of neurotransmitters | 1.1-1.2 mg | Pork, wheat germ, enriched breads and cereals, legumes, nuts | Beriberi and Wenicke-Korsakoff syndrome; weakness, abnormal nervous system functioning. | None (UL not determined. | +| Riboflavin | Part of FMN and FAD, coenzymes needed for carbohydrate, amino acid, and lipid metabolism. | 1.1-1.3mg | Cow's milk, yogurt, and other dairy products; spinach; enriched breads and cereals | Inflammation of the mouth and tongue, eye disorders | None (UL not determined) | +| Niacin | Part of NAD and NADP, coenzymes needed for energy metabolism. | 14-16mg | Enriched breads and cereals, beef liver, tuna, salmon, poultry, pork, mushrooms | Pellegra
- Diarrhea
- Dermatitis
- Dementia
- Death | Adult UL = 35mg/day
Flushing of facial skin, itchy skin, nausea and vomiting, liver damage | +| Pantothenic acid | Part of coenzyme A that is needed for synthesizing fat and that helps release energy from carbohydrates, fats, and protein | 5mg | Beef and chicken liver, sunflower seeds, mushrooms, yogurt, fortified cereals | Rarely occurs because it's so common in foods. | Unknown | +| Biotin | Coenzyme needed for synthesizing glucose and fatty acids | 30 micrograms | Eggs, peanuts, salmon, pork, liver, mushrooms, sunflower seeds | Rarely occurs, skin rash, hair loss, convulsions, and other neurological disorders; developmental delays in infants | Unknown | +| Vitamin B-6 | Part of PLP, coenzyme needed for animo acid metabolism, involved in neurotransmitter synthesis and hemoglobin synthesis | 1.3-1.7mg | Meat, fish, poultry, potatoes, bananas, spinach, sweet red peppers, broccoli | Dermatitis, anemia, depression, confusion, and neurological disorders such as convulsions | Adult UL = 100 mg per day

Nerve destruction | +| Folate | Part of THFA, a coenzyme needed for DNA synthesis and conversion of cysteine to methionine, preventing homocysteine accumulation | 400 micrograms | Dark green, leafy vegetables; papayas; asparagus; broccoli; orange juice; enriched breads and cereals | Megaloblastic anemia, diarrhea, neural tube defects in embryos | Adult UL = 1000 micrograms per day | +| Vitamin B-12 | Part of coenzymes needed for various cellular processes, including folate and metabolism; maintenance of myelin sheaths | 2.4 micrograms | Peppers, citrus fruits, cherries, broccoli, cabbage, and berries, shellfish, poultry, meat, and eggs | Scurvy, poor wound healing, pinpoint hemorrhages, bleeding gums, bruises, depression | Adult UL = 2000 mg/day Diarrhea and GI tract discomfort | +| Vitamin C (ascorbic acid) | Lots of things, collagen synthesis, antioxidant activity, and immune function. It can act as an antioxidant, and it can recycle vitamin E. | | | Scurvy | In high doses it has pro-oxidant effects | - Coenzymes are a water soluble vitamin that assists in the metabolism of macronutrients. - As people age, HCl production decreases, making it harder for the body to process vitamin b12 - Choline, carnitine, inositol, taurine, and lipoic acid are vitamin-like compounds that necessary to maintain normal metabolism. Because the body can synthesize these compounds, they are not considered essential nutrients. From 33e56653a67da752b1f29e23aef2c38362507ec0 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Thu, 7 Nov 2024 13:13:12 -0700 Subject: [PATCH 0573/1027] vault backup: 2024-11-07 13:13:12 --- education/nutrition/Vitamins.md | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/education/nutrition/Vitamins.md b/education/nutrition/Vitamins.md index 64905b3..9fb854b 100644 --- a/education/nutrition/Vitamins.md +++ b/education/nutrition/Vitamins.md @@ -63,17 +63,17 @@ It's important to preserve the vitamin content of food, ways to do so include: # Water Soluble Vitamins Water soluble vitamins dissolve in watery components of food and the body. Most excess water soluble vitamins are filtered through the kidneys and eliminated in urine, whereas fat soluble vitamins are stored in large amounts. -| Vitamin | Major Functions in the body | Adult RDA/AI | Good Sources | Deficiency Signs and Symptoms | Major Toxicity Signs and Symptoms | -| ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------- | ----------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | -| Thiamin | Part of TPP, a coenzyme needed for carbohydrate metabolism and the metabolism of certain amino acids. May help with the production of neurotransmitters | 1.1-1.2 mg | Pork, wheat germ, enriched breads and cereals, legumes, nuts | Beriberi and Wenicke-Korsakoff syndrome; weakness, abnormal nervous system functioning. | None (UL not determined. | -| Riboflavin | Part of FMN and FAD, coenzymes needed for carbohydrate, amino acid, and lipid metabolism. | 1.1-1.3mg | Cow's milk, yogurt, and other dairy products; spinach; enriched breads and cereals | Inflammation of the mouth and tongue, eye disorders | None (UL not determined) | -| Niacin | Part of NAD and NADP, coenzymes needed for energy metabolism. | 14-16mg | Enriched breads and cereals, beef liver, tuna, salmon, poultry, pork, mushrooms | Pellegra
- Diarrhea
- Dermatitis
- Dementia
- Death | Adult UL = 35mg/day
Flushing of facial skin, itchy skin, nausea and vomiting, liver damage | -| Pantothenic acid | Part of coenzyme A that is needed for synthesizing fat and that helps release energy from carbohydrates, fats, and protein | 5mg | Beef and chicken liver, sunflower seeds, mushrooms, yogurt, fortified cereals | Rarely occurs because it's so common in foods. | Unknown | -| Biotin | Coenzyme needed for synthesizing glucose and fatty acids | 30 micrograms | Eggs, peanuts, salmon, pork, liver, mushrooms, sunflower seeds | Rarely occurs, skin rash, hair loss, convulsions, and other neurological disorders; developmental delays in infants | Unknown | -| Vitamin B-6 | Part of PLP, coenzyme needed for animo acid metabolism, involved in neurotransmitter synthesis and hemoglobin synthesis | 1.3-1.7mg | Meat, fish, poultry, potatoes, bananas, spinach, sweet red peppers, broccoli | Dermatitis, anemia, depression, confusion, and neurological disorders such as convulsions | Adult UL = 100 mg per day

Nerve destruction | -| Folate | Part of THFA, a coenzyme needed for DNA synthesis and conversion of cysteine to methionine, preventing homocysteine accumulation | 400 micrograms | Dark green, leafy vegetables; papayas; asparagus; broccoli; orange juice; enriched breads and cereals | Megaloblastic anemia, diarrhea, neural tube defects in embryos | Adult UL = 1000 micrograms per day | -| Vitamin B-12 | Part of coenzymes needed for various cellular processes, including folate and metabolism; maintenance of myelin sheaths | 2.4 micrograms | Peppers, citrus fruits, cherries, broccoli, cabbage, and berries, shellfish, poultry, meat, and eggs | Scurvy, poor wound healing, pinpoint hemorrhages, bleeding gums, bruises, depression | Adult UL = 2000 mg/day Diarrhea and GI tract discomfort | -| Vitamin C (ascorbic acid) | Lots of things, collagen synthesis, antioxidant activity, and immune function. It can act as an antioxidant, and it can recycle vitamin E. | | | Scurvy | In high doses it has pro-oxidant effects | +| Vitamin | Major Functions in the body | Adult RDA/AI | Good Sources | Deficiency Signs and Symptoms | Major Toxicity Signs and Symptoms | +| ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------- | ---------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | +| Thiamin | Part of TPP, a coenzyme needed for carbohydrate metabolism and the metabolism of certain amino acids. May help with the production of neurotransmitters | 1.1-1.2 mg | Pork, wheat germ, enriched breads and cereals, legumes, nuts | Beriberi and Wenicke-Korsakoff syndrome; weakness, abnormal nervous system functioning. | None (UL not determined. | +| Riboflavin | Part of FMN and FAD, coenzymes needed for carbohydrate, amino acid, and lipid metabolism. | 1.1-1.3mg | Cow's milk, yogurt, and other dairy products; spinach; enriched breads and cereals | Inflammation of the mouth and tongue, eye disorders | None (UL not determined) | +| Niacin | Part of NAD and NADP, coenzymes needed for energy metabolism. | 14-16mg | Enriched breads and cereals, beef liver, tuna, salmon, poultry, pork, mushrooms | Pellegra
- Diarrhea
- Dermatitis
- Dementia
- Death | Adult UL = 35mg/day
Flushing of facial skin, itchy skin, nausea and vomiting, liver damage | +| Pantothenic acid | Part of coenzyme A that is needed for synthesizing fat and that helps release energy from carbohydrates, fats, and protein | 5mg | Beef and chicken liver, sunflower seeds, mushrooms, yogurt, fortified cereals | Rarely occurs because it's so common in foods. | Unknown | +| Biotin | Coenzyme needed for synthesizing glucose and fatty acids | 30 micrograms | Eggs, peanuts, salmon, pork, liver, mushrooms, sunflower seeds | Rarely occurs, skin rash, hair loss, convulsions, and other neurological disorders; developmental delays in infants | Unknown | +| Vitamin B-6 | Part of PLP, coenzyme needed for animo acid metabolism, involved in neurotransmitter synthesis and hemoglobin synthesis | 1.3-1.7mg | Meat, fish, poultry, potatoes, bananas, spinach, sweet red peppers, broccoli | Dermatitis, anemia, depression, confusion, and neurological disorders such as convulsions | Adult UL = 100 mg per day

Nerve destruction | +| Folate | Part of THFA, a coenzyme needed for DNA synthesis and conversion of cysteine to methionine, preventing homocysteine accumulation | 400 micrograms | Dark green, leafy vegetables; papayas; asparagus; broccoli; orange juice; enriched breads and cereals | Megaloblastic anemia, diarrhea, neural tube defects in embryos | Adult UL = 1000 micrograms per day | +| Vitamin B-12 | Part of coenzymes needed for various cellular processes, including folate and metabolism; maintenance of myelin sheaths | 2.4 micrograms | Peppers, citrus fruits, cherries, broccoli, cabbage, and berries, shellfish, poultry, meat, milk, and eggs | Scurvy, poor wound healing, pinpoint hemorrhages, bleeding gums, bruises, depression | Adult UL = 2000 mg/day Diarrhea and GI tract discomfort | +| Vitamin C (ascorbic acid) | Lots of things, collagen synthesis, antioxidant activity, and immune function. It can act as an antioxidant, and it can recycle vitamin E. | | Plant foods, peppers, citrus fruits | Scurvy | In high doses it has pro-oxidant effects | - Coenzymes are a water soluble vitamin that assists in the metabolism of macronutrients. - As people age, HCl production decreases, making it harder for the body to process vitamin b12 - Choline, carnitine, inositol, taurine, and lipoic acid are vitamin-like compounds that necessary to maintain normal metabolism. Because the body can synthesize these compounds, they are not considered essential nutrients. From 2fdeda7c0aaa2c68c7154207f6063cd367d8d7ee Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sun, 10 Nov 2024 20:21:05 -0700 Subject: [PATCH 0574/1027] vault backup: 2024-11-10 20:21:05 --- education/software development/ECE1400/Chapter 15 Exercises.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 education/software development/ECE1400/Chapter 15 Exercises.md diff --git a/education/software development/ECE1400/Chapter 15 Exercises.md b/education/software development/ECE1400/Chapter 15 Exercises.md new file mode 100644 index 0000000..e69de29 From 669658b79e83e94fc06f2694a003b511fb9bf505 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sun, 10 Nov 2024 20:31:05 -0700 Subject: [PATCH 0575/1027] vault backup: 2024-11-10 20:31:05 --- .../software development/ECE1400/Chapter 15 Exercises.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/education/software development/ECE1400/Chapter 15 Exercises.md b/education/software development/ECE1400/Chapter 15 Exercises.md index e69de29..ae05ac5 100644 --- a/education/software development/ECE1400/Chapter 15 Exercises.md +++ b/education/software development/ECE1400/Chapter 15 Exercises.md @@ -0,0 +1,6 @@ +> **1.** Section 15.1 listed several advantages of dividing a program into multiple source files.(a). Describe several other advantages + +> (b). Describe some disadvantages + +--- + From 6fc73295aead7e8149425e373d3403b3ce78d98b Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sun, 10 Nov 2024 20:36:05 -0700 Subject: [PATCH 0576/1027] vault backup: 2024-11-10 20:36:05 --- .../software development/ECE1400/Chapter 15 Exercises.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/education/software development/ECE1400/Chapter 15 Exercises.md b/education/software development/ECE1400/Chapter 15 Exercises.md index ae05ac5..56b51ea 100644 --- a/education/software development/ECE1400/Chapter 15 Exercises.md +++ b/education/software development/ECE1400/Chapter 15 Exercises.md @@ -4,3 +4,10 @@ --- +> **2.** Which of the following should *not* be put in a header file? Why not? + +b. Function definitions - Functions should only be defined once, and this allows multiple files to share the same function definition + +--- + +> **3.** We saw that writing `#include ` instead of `#include "file"` may not work if file is one that we've written. Would there be any problem with writing `$include "file` \ No newline at end of file From 21f55263c0fd72cfc7e88c8796a95787d2add636 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sun, 10 Nov 2024 20:41:05 -0700 Subject: [PATCH 0577/1027] vault backup: 2024-11-10 20:41:05 --- .../ECE1400/Chapter 15 Exercises.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/education/software development/ECE1400/Chapter 15 Exercises.md b/education/software development/ECE1400/Chapter 15 Exercises.md index 56b51ea..71f2c06 100644 --- a/education/software development/ECE1400/Chapter 15 Exercises.md +++ b/education/software development/ECE1400/Chapter 15 Exercises.md @@ -10,4 +10,14 @@ b. Function definitions - Functions should only be defined once, and this allows --- -> **3.** We saw that writing `#include ` instead of `#include "file"` may not work if file is one that we've written. Would there be any problem with writing `$include "file` \ No newline at end of file +> **3.** We saw that writing `#include ` instead of `#include "file"` may not work if file is one that we've written. Would there be any problem with writing `$include "file"` instead of `#include ` if *file* is a system header? + +Yes, `""` is a path relative to the current file, whereas `<>` is a path to the system's standard library headers. + +--- + +> **4.** Assume that `debug.h` is a header file with the following contents... +>(a). What is the output when the program is executed? +``` + +``` \ No newline at end of file From 2799f844b485d88c2ac70fccf50348297c6dfc6f Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sun, 10 Nov 2024 20:46:06 -0700 Subject: [PATCH 0578/1027] vault backup: 2024-11-10 20:46:05 --- education/software development/ECE1400/Chapter 15 Exercises.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/education/software development/ECE1400/Chapter 15 Exercises.md b/education/software development/ECE1400/Chapter 15 Exercises.md index 71f2c06..ad32e50 100644 --- a/education/software development/ECE1400/Chapter 15 Exercises.md +++ b/education/software development/ECE1400/Chapter 15 Exercises.md @@ -19,5 +19,6 @@ Yes, `""` is a path relative to the current file, whereas `<>` is a path to the > **4.** Assume that `debug.h` is a header file with the following contents... >(a). What is the output when the program is executed? ``` - +Output if DEBUG is defined:\n +Value of " #n" ``` \ No newline at end of file From 86ecc96c92e2ff900cbe2869beb545fa03231c9e Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sun, 10 Nov 2024 20:51:05 -0700 Subject: [PATCH 0579/1027] vault backup: 2024-11-10 20:51:05 --- .../ECE1400/Chapter 15 Exercises.md | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/education/software development/ECE1400/Chapter 15 Exercises.md b/education/software development/ECE1400/Chapter 15 Exercises.md index ad32e50..3675fc5 100644 --- a/education/software development/ECE1400/Chapter 15 Exercises.md +++ b/education/software development/ECE1400/Chapter 15 Exercises.md @@ -19,6 +19,11 @@ Yes, `""` is a path relative to the current file, whereas `<>` is a path to the > **4.** Assume that `debug.h` is a header file with the following contents... >(a). What is the output when the program is executed? ``` -Output if DEBUG is defined:\n -Value of " #n" -``` \ No newline at end of file +Output if DEBUG is defined: +Value of i: 1 +Value of j: 2 +Value of i + j: 3 +Value of 2 * i + j - k: 1 +``` +> (b). What is the output if the `#define` directive is removed from `testdebug.c`? +> \ No newline at end of file From 081dfe711624506d8d946a1383becd62b6522f78 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sun, 10 Nov 2024 20:56:06 -0700 Subject: [PATCH 0580/1027] vault backup: 2024-11-10 20:56:06 --- .../ECE1400/Chapter 15 Exercises.md | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/education/software development/ECE1400/Chapter 15 Exercises.md b/education/software development/ECE1400/Chapter 15 Exercises.md index 3675fc5..ef5a070 100644 --- a/education/software development/ECE1400/Chapter 15 Exercises.md +++ b/education/software development/ECE1400/Chapter 15 Exercises.md @@ -18,6 +18,7 @@ Yes, `""` is a path relative to the current file, whereas `<>` is a path to the > **4.** Assume that `debug.h` is a header file with the following contents... >(a). What is the output when the program is executed? + ``` Output if DEBUG is defined: Value of i: 1 @@ -25,5 +26,13 @@ Value of j: 2 Value of i + j: 3 Value of 2 * i + j - k: 1 ``` + > (b). What is the output if the `#define` directive is removed from `testdebug.c`? -> \ No newline at end of file + +``` +Output if DEBUG is not defined: +``` + +> (c). Explain why the output is different in parts (a) and (b) + +When `DEBUG` is defined, any instances of the `PRINT_DEBUG` token are replaced with a `printf` call during compile time, but when it's not defined, they're replaced with nothing. \ No newline at end of file From 5fee60ba7b5dc5ada0a01b199a114d5b6cf15c0d Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sun, 10 Nov 2024 21:01:06 -0700 Subject: [PATCH 0581/1027] vault backup: 2024-11-10 21:01:06 --- .../software development/ECE1400/Chapter 15 Exercises.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/education/software development/ECE1400/Chapter 15 Exercises.md b/education/software development/ECE1400/Chapter 15 Exercises.md index ef5a070..cbd6ac6 100644 --- a/education/software development/ECE1400/Chapter 15 Exercises.md +++ b/education/software development/ECE1400/Chapter 15 Exercises.md @@ -35,4 +35,8 @@ Output if DEBUG is not defined: > (c). Explain why the output is different in parts (a) and (b) -When `DEBUG` is defined, any instances of the `PRINT_DEBUG` token are replaced with a `printf` call during compile time, but when it's not defined, they're replaced with nothing. \ No newline at end of file +When `DEBUG` is defined, any instances of the `PRINT_DEBUG` token are replaced with a `printf` call during compile time, but when it's not defined, they're replaced with nothing. + +> (d). Is it necessary for the `DEBUG` macro to be defined *before* `debug.h` is included in order for `PRINT_DEBUG` to have the desired effect? Justify your answer. + +Macro invocations are evaluated sequentially, and so if `DEBUG` was defined after `PRINT_DEBUG`, then any usages of `PRINT_EVALUATION` would be have like `DEBUG` was not defined. \ No newline at end of file From b502602382caa1e7a5c07447d5c564c5d8cdbfde Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sun, 10 Nov 2024 21:21:06 -0700 Subject: [PATCH 0582/1027] vault backup: 2024-11-10 21:21:06 --- .../ECE1400/Chapter 15 Exercises.md | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/education/software development/ECE1400/Chapter 15 Exercises.md b/education/software development/ECE1400/Chapter 15 Exercises.md index cbd6ac6..41822ad 100644 --- a/education/software development/ECE1400/Chapter 15 Exercises.md +++ b/education/software development/ECE1400/Chapter 15 Exercises.md @@ -39,4 +39,13 @@ When `DEBUG` is defined, any instances of the `PRINT_DEBUG` token are replaced w > (d). Is it necessary for the `DEBUG` macro to be defined *before* `debug.h` is included in order for `PRINT_DEBUG` to have the desired effect? Justify your answer. -Macro invocations are evaluated sequentially, and so if `DEBUG` was defined after `PRINT_DEBUG`, then any usages of `PRINT_EVALUATION` would be have like `DEBUG` was not defined. \ No newline at end of file +Macro invocations are evaluated sequentially, and so if `DEBUG` was defined after `PRINT_DEBUG`, then any usages of `PRINT_EVALUATION` would be have like `DEBUG` was not defined. + +--- + +> **5.** Suppose that a program consists of three source files - `main.c`, `f1.c`, and `f2.c`- Plus two header files, `f1.h` and `f2.h`. All three source files include `f1.h` but only `f1.c` and `f2.c` include `f2.h`. Write a makefile for this program, assuming that the compiler is `gcc` and that the executable file is to be named `demo`. + +--- + +> **6.** The following questions refer to the program described in Exercise 5. +> (a). Wh From a720c5d1f705bbe9f233f6c4e1f640019813a202 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sun, 10 Nov 2024 21:26:06 -0700 Subject: [PATCH 0583/1027] vault backup: 2024-11-10 21:26:06 --- .../software development/ECE1400/Chapter 15 Exercises.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/education/software development/ECE1400/Chapter 15 Exercises.md b/education/software development/ECE1400/Chapter 15 Exercises.md index 41822ad..222d970 100644 --- a/education/software development/ECE1400/Chapter 15 Exercises.md +++ b/education/software development/ECE1400/Chapter 15 Exercises.md @@ -48,4 +48,10 @@ Macro invocations are evaluated sequentially, and so if `DEBUG` was defined afte --- > **6.** The following questions refer to the program described in Exercise 5. -> (a). Wh +> (a). Which files need to be compiled when the program is built for the first time? + +> (b). If `f1.c` is changed after the program has been built, which files need to be recompiled? + +> (c). If `f1.h` is changed after the program has been built, which files need to be recompiled? + +> (d). If `f2.h` is changed after the program has been built, which files need to be recompiled? From a722cdd3b7d650622d7225074948b8654f5185c3 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sun, 10 Nov 2024 21:31:06 -0700 Subject: [PATCH 0584/1027] vault backup: 2024-11-10 21:31:06 --- .../ECE1400/Chapter 15 Exercises.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/education/software development/ECE1400/Chapter 15 Exercises.md b/education/software development/ECE1400/Chapter 15 Exercises.md index 222d970..0b141db 100644 --- a/education/software development/ECE1400/Chapter 15 Exercises.md +++ b/education/software development/ECE1400/Chapter 15 Exercises.md @@ -1,6 +1,11 @@ > **1.** Section 15.1 listed several advantages of dividing a program into multiple source files.(a). Describe several other advantages +- Easier to scale horizontally as developers are added to the team +- Reduced cognitive load from less global scope to keep track of + > (b). Describe some disadvantages +- Increased complexity +- Need to maintain/troubleshoot a build system --- @@ -44,7 +49,11 @@ Macro invocations are evaluated sequentially, and so if `DEBUG` was defined afte --- > **5.** Suppose that a program consists of three source files - `main.c`, `f1.c`, and `f2.c`- Plus two header files, `f1.h` and `f2.h`. All three source files include `f1.h` but only `f1.c` and `f2.c` include `f2.h`. Write a makefile for this program, assuming that the compiler is `gcc` and that the executable file is to be named `demo`. +```makefile +demo: main.o f1.o f2.o + +``` --- > **6.** The following questions refer to the program described in Exercise 5. @@ -55,3 +64,4 @@ Macro invocations are evaluated sequentially, and so if `DEBUG` was defined afte > (c). If `f1.h` is changed after the program has been built, which files need to be recompiled? > (d). If `f2.h` is changed after the program has been built, which files need to be recompiled? + From d6f47d0f9564aeb827e022b00382df222f89f7ae Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sun, 10 Nov 2024 21:36:06 -0700 Subject: [PATCH 0585/1027] vault backup: 2024-11-10 21:36:06 --- education/software development/ECE1400/Chapter 15 Exercises.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/education/software development/ECE1400/Chapter 15 Exercises.md b/education/software development/ECE1400/Chapter 15 Exercises.md index 0b141db..9b95c45 100644 --- a/education/software development/ECE1400/Chapter 15 Exercises.md +++ b/education/software development/ECE1400/Chapter 15 Exercises.md @@ -51,7 +51,10 @@ Macro invocations are evaluated sequentially, and so if `DEBUG` was defined afte > **5.** Suppose that a program consists of three source files - `main.c`, `f1.c`, and `f2.c`- Plus two header files, `f1.h` and `f2.h`. All three source files include `f1.h` but only `f1.c` and `f2.c` include `f2.h`. Write a makefile for this program, assuming that the compiler is `gcc` and that the executable file is to be named `demo`. ```makefile demo: main.o f1.o f2.o + gcc -o demo main.o f1.o f2.o +main.o: main.c f1.h + gcc -c main.c ``` --- From 71e73a9ef1202a3c29c7b2bead0d92459a5a78a1 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sun, 10 Nov 2024 21:41:06 -0700 Subject: [PATCH 0586/1027] vault backup: 2024-11-10 21:41:06 --- .../software development/ECE1400/Chapter 15 Exercises.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/education/software development/ECE1400/Chapter 15 Exercises.md b/education/software development/ECE1400/Chapter 15 Exercises.md index 9b95c45..0d56933 100644 --- a/education/software development/ECE1400/Chapter 15 Exercises.md +++ b/education/software development/ECE1400/Chapter 15 Exercises.md @@ -56,6 +56,11 @@ demo: main.o f1.o f2.o main.o: main.c f1.h gcc -c main.c +f1.o: f1.c f1.h + gcc -c f1.c + +f2.o + ``` --- From 54375bff529801c1bee6f1330cea39e18a32e298 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sun, 10 Nov 2024 21:46:06 -0700 Subject: [PATCH 0587/1027] vault backup: 2024-11-10 21:46:06 --- .../software development/ECE1400/Chapter 15 Exercises.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/education/software development/ECE1400/Chapter 15 Exercises.md b/education/software development/ECE1400/Chapter 15 Exercises.md index 0d56933..90c787c 100644 --- a/education/software development/ECE1400/Chapter 15 Exercises.md +++ b/education/software development/ECE1400/Chapter 15 Exercises.md @@ -59,7 +59,8 @@ main.o: main.c f1.h f1.o: f1.c f1.h gcc -c f1.c -f2.o +f2.o: f1.o f2.c f2.h + gcc -c f2.c f1.o ``` --- @@ -67,8 +68,12 @@ f2.o > **6.** The following questions refer to the program described in Exercise 5. > (a). Which files need to be compiled when the program is built for the first time? +`f1.c`, `f1.h`, `f2.c`, `f2.h`, `main.c`, `main.h` + > (b). If `f1.c` is changed after the program has been built, which files need to be recompiled? +All dependents of `f1.c` and `f1.c`, in this case `f1.c`, `main.c`, and `f2.c` (including header files). + > (c). If `f1.h` is changed after the program has been built, which files need to be recompiled? > (d). If `f2.h` is changed after the program has been built, which files need to be recompiled? From a1a72612696c81f81c892e69591fdc7ca9279dcb Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sun, 10 Nov 2024 21:51:06 -0700 Subject: [PATCH 0588/1027] vault backup: 2024-11-10 21:51:06 --- .../software development/ECE1400/Chapter 15 Exercises.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/education/software development/ECE1400/Chapter 15 Exercises.md b/education/software development/ECE1400/Chapter 15 Exercises.md index 90c787c..f6c0577 100644 --- a/education/software development/ECE1400/Chapter 15 Exercises.md +++ b/education/software development/ECE1400/Chapter 15 Exercises.md @@ -56,7 +56,7 @@ demo: main.o f1.o f2.o main.o: main.c f1.h gcc -c main.c -f1.o: f1.c f1.h +f1.o: f1.c f1.h f2.h gcc -c f1.c f2.o: f1.o f2.c f2.h @@ -72,9 +72,12 @@ f2.o: f1.o f2.c f2.h > (b). If `f1.c` is changed after the program has been built, which files need to be recompiled? -All dependents of `f1.c` and `f1.c`, in this case `f1.c`, `main.c`, and `f2.c` (including header files). +All dependents of `f1.c` and `f1.c`, in this case `f1.c`, `main.c`, and `f2.c`. > (c). If `f1.h` is changed after the program has been built, which files need to be recompiled? +All source files. + > (d). If `f2.h` is changed after the program has been built, which files need to be recompiled? + From d1232122ffe1d00f7542590c381e0da69d4ea71c Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sun, 10 Nov 2024 21:56:06 -0700 Subject: [PATCH 0589/1027] vault backup: 2024-11-10 21:56:06 --- .../software development/ECE1400/Chapter 15 Exercises.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/education/software development/ECE1400/Chapter 15 Exercises.md b/education/software development/ECE1400/Chapter 15 Exercises.md index f6c0577..d26c8bb 100644 --- a/education/software development/ECE1400/Chapter 15 Exercises.md +++ b/education/software development/ECE1400/Chapter 15 Exercises.md @@ -59,8 +59,8 @@ main.o: main.c f1.h f1.o: f1.c f1.h f2.h gcc -c f1.c -f2.o: f1.o f2.c f2.h - gcc -c f2.c f1.o +f2.o: f2.c f2.h + gcc -c f2.c ``` --- @@ -72,11 +72,11 @@ f2.o: f1.o f2.c f2.h > (b). If `f1.c` is changed after the program has been built, which files need to be recompiled? -All dependents of `f1.c` and `f1.c`, in this case `f1.c`, `main.c`, and `f2.c`. +Just `f1.c`. > (c). If `f1.h` is changed after the program has been built, which files need to be recompiled? -All source files. +All source files, because they all include `f1.h`. > (d). If `f2.h` is changed after the program has been built, which files need to be recompiled? From 6a21810c797864df2bde1654a0ee6b1adc854cb7 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sun, 10 Nov 2024 22:11:06 -0700 Subject: [PATCH 0590/1027] vault backup: 2024-11-10 22:11:06 --- education/software development/ECE1400/Chapter 15 Exercises.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/education/software development/ECE1400/Chapter 15 Exercises.md b/education/software development/ECE1400/Chapter 15 Exercises.md index d26c8bb..21d08cd 100644 --- a/education/software development/ECE1400/Chapter 15 Exercises.md +++ b/education/software development/ECE1400/Chapter 15 Exercises.md @@ -80,4 +80,4 @@ All source files, because they all include `f1.h`. > (d). If `f2.h` is changed after the program has been built, which files need to be recompiled? - +`f1.c` and `f2.c`. From 86f96308060041455af13fe8b13fa6059af68e19 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Mon, 11 Nov 2024 21:28:15 -0700 Subject: [PATCH 0591/1027] vault backup: 2024-11-11 21:28:15 --- education/math/MATH1060 (trig)/Law of Sines.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 education/math/MATH1060 (trig)/Law of Sines.md diff --git a/education/math/MATH1060 (trig)/Law of Sines.md b/education/math/MATH1060 (trig)/Law of Sines.md new file mode 100644 index 0000000..70d3932 --- /dev/null +++ b/education/math/MATH1060 (trig)/Law of Sines.md @@ -0,0 +1,3 @@ +# Intro +Tl;dr, the law of sines is: +$$ \frac{\sin(\alpha)}{a} = \frac{\sin(\beta)}{b} = \frac{\sin{\beta}} $$ \ No newline at end of file From 01a3e6ed52e804037fa8a4a588726de480fe5924 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Mon, 11 Nov 2024 21:33:17 -0700 Subject: [PATCH 0592/1027] vault backup: 2024-11-11 21:33:17 --- education/math/MATH1060 (trig)/Law of Sines.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/education/math/MATH1060 (trig)/Law of Sines.md b/education/math/MATH1060 (trig)/Law of Sines.md index 70d3932..298ad53 100644 --- a/education/math/MATH1060 (trig)/Law of Sines.md +++ b/education/math/MATH1060 (trig)/Law of Sines.md @@ -1,3 +1,4 @@ # Intro Tl;dr, the law of sines is: -$$ \frac{\sin(\alpha)}{a} = \frac{\sin(\beta)}{b} = \frac{\sin{\beta}} $$ \ No newline at end of file +$$ \frac{\sin(\alpha)}{a} = \frac{\sin(\beta)}{b} = \frac{\sin(\gamma)}{c} $$ + From 8dba7a9dc1ba32adfd960515fce192c9919d84ff Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Mon, 11 Nov 2024 21:38:16 -0700 Subject: [PATCH 0593/1027] vault backup: 2024-11-11 21:38:16 --- education/math/MATH1060 (trig)/Law of Sines.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/education/math/MATH1060 (trig)/Law of Sines.md b/education/math/MATH1060 (trig)/Law of Sines.md index 298ad53..107b1a1 100644 --- a/education/math/MATH1060 (trig)/Law of Sines.md +++ b/education/math/MATH1060 (trig)/Law of Sines.md @@ -2,3 +2,6 @@ Tl;dr, the law of sines is: $$ \frac{\sin(\alpha)}{a} = \frac{\sin(\beta)}{b} = \frac{\sin(\gamma)}{c} $$ +- Any triangle that is *not a right triangle* is called an oblique triangle. There are two types of oblique triangles: + - **Acute triangles**: This is an oblique triangle where all three interior angles are less than $90\degree$ or $\dfrac{\pi}{2}$ radians. + - **Obtuse Triangle**: This is an oblique triangle where one of the interior angles is greater than $90\degree$. \ No newline at end of file From 3cb8e2c5419243b4163a1c7f116a96a832078857 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Mon, 11 Nov 2024 21:43:16 -0700 Subject: [PATCH 0594/1027] vault backup: 2024-11-11 21:43:16 --- education/math/MATH1060 (trig)/Law of Sines.md | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/education/math/MATH1060 (trig)/Law of Sines.md b/education/math/MATH1060 (trig)/Law of Sines.md index 107b1a1..bf62b11 100644 --- a/education/math/MATH1060 (trig)/Law of Sines.md +++ b/education/math/MATH1060 (trig)/Law of Sines.md @@ -1,7 +1,20 @@ # Intro Tl;dr, the law of sines is: $$ \frac{\sin(\alpha)}{a} = \frac{\sin(\beta)}{b} = \frac{\sin(\gamma)}{c} $$ +Under convention: +- Angle $\alpha$ is opposite side $a$ +- Angle $\beta$ is opposite side $b$ +- Angle $\gamma$ is opposite side $c$ - Any triangle that is *not a right triangle* is called an oblique triangle. There are two types of oblique triangles: - **Acute triangles**: This is an oblique triangle where all three interior angles are less than $90\degree$ or $\dfrac{\pi}{2}$ radians. - - **Obtuse Triangle**: This is an oblique triangle where one of the interior angles is greater than $90\degree$. \ No newline at end of file + - **Obtuse Triangle**: This is an oblique triangle where one of the interior angles is greater than $90\degree$. +## Different types of oblique triangles +1. **ASA Triangle**: (Angle Side Angle) - We know the measurements of two angles and the side between them +2. **AAS**: We know the measurements of two angles and a side that is not between the known angles. +3. **SSA**: We know the measurements of two sides and an angle that is not between the known sides. +These triangles can be solved by adding a line that goes from one vertex to intersect perpendicular to the opposite side, forming two right triangles ($h$). + +## Solving for the law of sines +We know that $\sin\alpha = \dfrac{h}{b}$ + From 4dcb55ab6cf5a314ead3364fb78d2424331cfcd9 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Mon, 11 Nov 2024 21:48:16 -0700 Subject: [PATCH 0595/1027] vault backup: 2024-11-11 21:48:16 --- education/math/MATH1060 (trig)/Law of Sines.md | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/education/math/MATH1060 (trig)/Law of Sines.md b/education/math/MATH1060 (trig)/Law of Sines.md index bf62b11..6a1c6ef 100644 --- a/education/math/MATH1060 (trig)/Law of Sines.md +++ b/education/math/MATH1060 (trig)/Law of Sines.md @@ -16,5 +16,18 @@ Under convention: These triangles can be solved by adding a line that goes from one vertex to intersect perpendicular to the opposite side, forming two right triangles ($h$). ## Solving for the law of sines -We know that $\sin\alpha = \dfrac{h}{b}$ +We know that $\sin\alpha = \dfrac{h}{b}$ and $\sin\beta = \dfrac{h}{a}$. We can sole both equations for $h$ to get: +- $h = b\sin\alpha$ +- $h = a\sin\beta$ +Setting both equations equal to each other gives us: +$b\sin\alpha = a\sin\beta$ +Multiply both sides by $\dfrac{1}{ab}$ gives yields $\dfrac{\sin\alpha}{a} = \dfrac{\sin\beta}{b}$ + +# SSA triangles +Side side angle triangles may be solved to have one possible solution, two possible solutions, or no possible solutions. + +- No triangle: $a < h$ +- One triangle: $a \ge b$ +- Two triangles: $h < a < b$ +- One right triangle: $a = h$ From 90cf76f26b144db696d85e708d1c169b595c3dad Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 12 Nov 2024 12:38:49 -0700 Subject: [PATCH 0596/1027] vault backup: 2024-11-12 12:38:49 --- education/nutrition/Vitamins.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/education/nutrition/Vitamins.md b/education/nutrition/Vitamins.md index 9fb854b..1fabeae 100644 --- a/education/nutrition/Vitamins.md +++ b/education/nutrition/Vitamins.md @@ -76,8 +76,9 @@ Water soluble vitamins dissolve in watery components of food and the body. Most | Vitamin C (ascorbic acid) | Lots of things, collagen synthesis, antioxidant activity, and immune function. It can act as an antioxidant, and it can recycle vitamin E. | | Plant foods, peppers, citrus fruits | Scurvy | In high doses it has pro-oxidant effects | - Coenzymes are a water soluble vitamin that assists in the metabolism of macronutrients. - As people age, HCl production decreases, making it harder for the body to process vitamin b12 +- Vitamin b12 comes mostly from animals, so vegans need to supplement their intake - Choline, carnitine, inositol, taurine, and lipoic acid are vitamin-like compounds that necessary to maintain normal metabolism. Because the body can synthesize these compounds, they are not considered essential nutrients. -- Biotin can be produced by intestinal bacteria +- Biotin and vitamin K can be produced by intestinal bacteria - The 4 "D"s are signs of pellegra - Adequate folate status is critical in early pregnancy because the neural tube forms about 21 days after conception - Pregnant individuals should consume 400 ug of folate to prevent neural tube defects (eg spina bifida or anancephaly). It should reduce the rate of spinal defects by 50% From de40f0ef643f012b4c2f58e36adcb280860b2489 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 12 Nov 2024 12:43:48 -0700 Subject: [PATCH 0597/1027] vault backup: 2024-11-12 12:43:48 --- education/nutrition/Untitled.md | 0 education/nutrition/Vitamins.md | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 education/nutrition/Untitled.md diff --git a/education/nutrition/Untitled.md b/education/nutrition/Untitled.md new file mode 100644 index 0000000..e69de29 diff --git a/education/nutrition/Vitamins.md b/education/nutrition/Vitamins.md index 1fabeae..9c58055 100644 --- a/education/nutrition/Vitamins.md +++ b/education/nutrition/Vitamins.md @@ -82,4 +82,4 @@ Water soluble vitamins dissolve in watery components of food and the body. Most - The 4 "D"s are signs of pellegra - Adequate folate status is critical in early pregnancy because the neural tube forms about 21 days after conception - Pregnant individuals should consume 400 ug of folate to prevent neural tube defects (eg spina bifida or anancephaly). It should reduce the rate of spinal defects by 50% -- \ No newline at end of file +- High doses of niacin can be taken to reduce LDL. This can cause facial flushing and liver damage \ No newline at end of file From e228e51a4735a2d523c26af8bbee1f924a74f9a6 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 12 Nov 2024 12:48:48 -0700 Subject: [PATCH 0598/1027] vault backup: 2024-11-12 12:48:48 --- education/nutrition/Untitled.md | 0 education/nutrition/Water.md | 20 ++++++++++++++++++++ 2 files changed, 20 insertions(+) delete mode 100644 education/nutrition/Untitled.md create mode 100644 education/nutrition/Water.md diff --git a/education/nutrition/Untitled.md b/education/nutrition/Untitled.md deleted file mode 100644 index e69de29..0000000 diff --git a/education/nutrition/Water.md b/education/nutrition/Water.md new file mode 100644 index 0000000..5d40a4a --- /dev/null +++ b/education/nutrition/Water.md @@ -0,0 +1,20 @@ +- The body is composed of 50 to 75% water + - Lean muscle contains more water (73$ + - Fat tissue contains less water (20%) + +# Functions +- Is a solvent +- Is a major component of blood, saliva, sweat, tears, mucus, and joint fluid +- Removes waste +- Helps transport substances +- Lubricates tissues +- Regulates body tempurature +- Helps digest foods +- Participates in many chemical reactions +- Helps maintain proper blood pH +- **Doesn't play a major role in immune system function** + +# Compartments +- The body has two major fluid compartments: +- **Intracellular water** is inside the cells - Managed by potassium +- **Extracellular water** surrounds cells or is in the blood - managed by sodium and chloride \ No newline at end of file From 2b6daad0951307f0314d1d68fe0f41eb4477c9d3 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 12 Nov 2024 12:53:50 -0700 Subject: [PATCH 0599/1027] vault backup: 2024-11-12 12:53:50 --- education/nutrition/Water.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/education/nutrition/Water.md b/education/nutrition/Water.md index 5d40a4a..176cd35 100644 --- a/education/nutrition/Water.md +++ b/education/nutrition/Water.md @@ -1,6 +1,7 @@ - The body is composed of 50 to 75% water - Lean muscle contains more water (73$ - Fat tissue contains less water (20%) +- For a healthy person, water intake equals water outtake # Functions - Is a solvent @@ -16,5 +17,6 @@ # Compartments - The body has two major fluid compartments: -- **Intracellular water** is inside the cells - Managed by potassium -- **Extracellular water** surrounds cells or is in the blood - managed by sodium and chloride \ No newline at end of file + - **Intracellular water** is inside the cells - Managed by potassium and phosphorus + - **Extracellular water** surrounds cells or is in the blood - managed by sodium and chloride +- Water **follows** sodium \ No newline at end of file From 3249a4962f078f889e5cd6f766502fa8a74df3a1 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 12 Nov 2024 12:59:01 -0700 Subject: [PATCH 0600/1027] vault backup: 2024-11-12 12:59:01 --- education/nutrition/Water.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/education/nutrition/Water.md b/education/nutrition/Water.md index 176cd35..aac1ad5 100644 --- a/education/nutrition/Water.md +++ b/education/nutrition/Water.md @@ -19,4 +19,14 @@ - The body has two major fluid compartments: - **Intracellular water** is inside the cells - Managed by potassium and phosphorus - **Extracellular water** surrounds cells or is in the blood - managed by sodium and chloride -- Water **follows** sodium \ No newline at end of file +- Water **follows** sodium + +# Dehydration + - Common signs of dehydration: + - Rapid weight loss + - Dry or sticky mouth + - Low or no urine output + - Dark urine + - No tears + - Sunken eyes + - If not corrected, dehydration can lead to death \ No newline at end of file From 8494819529384fc4535ffb800da1d04882e0ea8a Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 12 Nov 2024 13:05:01 -0700 Subject: [PATCH 0601/1027] vault backup: 2024-11-12 13:05:01 --- education/nutrition/Water.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/education/nutrition/Water.md b/education/nutrition/Water.md index aac1ad5..5c4c1a8 100644 --- a/education/nutrition/Water.md +++ b/education/nutrition/Water.md @@ -29,4 +29,10 @@ - Dark urine - No tears - Sunken eyes - - If not corrected, dehydration can lead to death \ No newline at end of file + - If not corrected, dehydration can lead to death +# Hyponatremia +- Water intoxication is a condition that occurs when too much water is consumed in a short period of time or kidneys can't filter water from blood + - Excess water dilutes sodium concentration of blood + - Results in hyponatremia + - Low blood sodium + - Symptoms: confusion, dizziness, headache, can lead to death \ No newline at end of file From 5f25b7571eeb38402d9dfc54998ccd025233b914 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 12 Nov 2024 13:27:51 -0700 Subject: [PATCH 0602/1027] vault backup: 2024-11-12 13:27:51 --- education/nutrition/Minerals.md | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 education/nutrition/Minerals.md diff --git a/education/nutrition/Minerals.md b/education/nutrition/Minerals.md new file mode 100644 index 0000000..d23162c --- /dev/null +++ b/education/nutrition/Minerals.md @@ -0,0 +1,2 @@ +- Major minerals are essential mineral elements required in amounts of **100mg or more per day** +- Trace minerals are essential mineral elements required in amounts that are **less than 100mg per day** \ No newline at end of file From 6b2010fc363abb86bb9ff327b5ba0a2d10fac4a2 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 13 Nov 2024 23:30:50 -0700 Subject: [PATCH 0603/1027] vault backup: 2024-11-13 23:30:50 --- .../ENGL2010/Engl2010 Writing Project.md | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 education/english/ENGL2010/Engl2010 Writing Project.md diff --git a/education/english/ENGL2010/Engl2010 Writing Project.md b/education/english/ENGL2010/Engl2010 Writing Project.md new file mode 100644 index 0000000..5d02d8b --- /dev/null +++ b/education/english/ENGL2010/Engl2010 Writing Project.md @@ -0,0 +1,51 @@ +- Chose something to genuinely research, because I don't know, rather than a topic I'm passionate about. +- Write out my opinion on the topic *before* starting formal research + +- An issue or topic I've always wanted to learn more about is the political system +- An issue or topic I have a personal connection to is philosophy, technology +- A conversation or debate I spend a lot of time thinking about is the art of improvement +- Something I think needs to change in society is the existence of self propagating norms +- An issue that affects my community negatively is political discourse. +- Something I wish more people cared about was fixing the world +- I worry that I see safe spaces being used in a negative way +# Primary research +- Interview prominent public figures or heads of clubs that have public stated feelings about safe spaces, asking about why they did it, how they did it, what impact they feel it's had. +- https://www.usu.edu/safe-at-usu/ +# Secondary Research +- https://qz.com/398723/slavoj-zizek-thinks-political-correctness-is-exactly-what-perpetuates-prejudice-and-racism +- https://en.wikipedia.org/wiki/Jonathan_Haidt +- https://www.insidehighered.com/node/7407 +- https://www.vox.com/2016/7/5/11949258/safe-spaces-explained +- https://www.dochaspsych.com/blog-defining-your-safe-space-what-does-safe-space-mean/ +- https://dictionary.cambridge.org/us/dictionary/english/safe-space +- https://www.merriam-webster.com/dictionary/safe%20space +- https://chicagomaroon.com/2016/news/reg-honors-chicago-blood-bank-founder/ +# The Complex Case of Fear and Safe Space +## Introduction +- The Chicago School board considered a proposal for a magnet school intended to be a safe space for LGBT individuals +- The only reliable way to prevent disrespectful treatment is through separation +- The rational commonly used for safe spaces makes it difficult for an educator to effectively respond to actual harassment +- The need for safe space for students who experience social exclusion and harassment is the result of a political economy that was *intended to create safe space for others*. (2) Students *who are able* to articulate a need for safe space often don’t need the kind of space separation offers; *students who need (if only temporarily) separation, often are unable to say so.* (3) ‘‘Safe space’’ does not always or only function to defuse fear and establish safety for students; safe space may also function to create emotional relief for adults +- Safe spaces translate feelings of fear into separation, creating a divide +- The desire for safe spaces comes from the inherent idea that being hurt is an uncomfortable emotion, and fearing being hurt is an uncomfortable emotion. These are generally perceived to impede students' abilities to learn and grow. As such, safety is the antidote for fear, but this safety creates separation +- The creation of safe spaces relies on the assumption that the creators of safe spaces are able to effectively anticipate the fears of students across cultural, racial, and social divides. +- In this context, fear is fear of harm and danger. By operating on the assumption that more harm will come, this establishes a power relationship that's rooted in *past histories*, where the disadvantaged group is harmed. +- By implementing safe spaces, you create a dynamic where the response to harassment (assumed or real) is fear. +- If safe spaces create a dynamic of fear, the effect of safe spaces is less than desirable, and it doesn't move towards the intended goal of making students feel safer, rather it moves them away. +## Where do calls for safe spaces come from? +- Many students do not want to be separated from their peers +- Many students who have the luxury of asking for a safe space don't truly need one +- Calls for safe spaces have typically come from parents or educators +- Many of the dynamics that enable harassment are invisible to those who enjoy privilege, social or otherwise +- A call for a safe space indicates acknowledgement that a student feels uncomfortable in the face of other peers' behavior. The call for a safe space as a solution places that uncomfortable feeling into the box of "fear" +- As long as we assume that emotions are instinctual reactions of a person to external events (even if triggered by cognitive judgment) that prompt action, the only available analysis of emotion relies on an outmoded faculty psychology. This has the troubling effect of divorcing logic and affect in action +## Fear +- Emotions can be viewed through the lens of a cognitive device that can help create and form habits. +- As Dewey helps us to understand, *it is not that fear as emotion causes us to move away from persons perceived as somehow dangerous; rather, affect becomes ‘‘fear’’ by the interpreted action of separation.* +- Therefore, neurologically, *fear stems from habit*, not the other way around +- Affect arises unbidden in a reaction to a problematic circumstance in which habits of adjustment are inadequate + - Basically: You feel fear when you are unable to resolve the perceived issue through typical means +- This emotional response doesn't necessarily need to be fear, leading to separation +- This emotional response can be redirected into a search for understanding, creating a productive output (Dewey) +- The author disagrees with the above sentiment, arguing that fear and anger can be intelligent, productive, emotions. +- According to Ahmed, objects and rhetoric can become "sticky, or saturated with emotion" \ No newline at end of file From e92632bfccdc434e19a5a7282b06b91fc948ea78 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 13 Nov 2024 23:35:50 -0700 Subject: [PATCH 0604/1027] vault backup: 2024-11-13 23:35:50 --- education/english/ENGL2010/Engl2010 Writing Project.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/education/english/ENGL2010/Engl2010 Writing Project.md b/education/english/ENGL2010/Engl2010 Writing Project.md index 5d02d8b..0897a3b 100644 --- a/education/english/ENGL2010/Engl2010 Writing Project.md +++ b/education/english/ENGL2010/Engl2010 Writing Project.md @@ -48,4 +48,5 @@ - This emotional response doesn't necessarily need to be fear, leading to separation - This emotional response can be redirected into a search for understanding, creating a productive output (Dewey) - The author disagrees with the above sentiment, arguing that fear and anger can be intelligent, productive, emotions. -- According to Ahmed, objects and rhetoric can become "sticky, or saturated with emotion" \ No newline at end of file +- According to Ahmed, objects and rhetoric can become "sticky, or saturated with emotion" +- The author then uses this to reinforce the idea that by attaching \ No newline at end of file From 90c66a4b222b5198731980e282e4dc192f4340d7 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 13 Nov 2024 23:40:50 -0700 Subject: [PATCH 0605/1027] vault backup: 2024-11-13 23:40:50 --- education/english/ENGL2010/Engl2010 Writing Project.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/education/english/ENGL2010/Engl2010 Writing Project.md b/education/english/ENGL2010/Engl2010 Writing Project.md index 0897a3b..5893bbd 100644 --- a/education/english/ENGL2010/Engl2010 Writing Project.md +++ b/education/english/ENGL2010/Engl2010 Writing Project.md @@ -49,4 +49,8 @@ - This emotional response can be redirected into a search for understanding, creating a productive output (Dewey) - The author disagrees with the above sentiment, arguing that fear and anger can be intelligent, productive, emotions. - According to Ahmed, objects and rhetoric can become "sticky, or saturated with emotion" -- The author then uses this to reinforce the idea that by attaching \ No newline at end of file +- The author then uses this to reinforce the idea that by propagating "past feelings" forward by proactively acting against them, we continue to let these ideas hold meaning, and power. +- You can change the narrative around an idea, thus changing the emotions associated with it +- *By designating fears \[at a societal level], we divide the world into safe spaces and unsafe spaces \[for different groups of people]* +- By creating a designated "zone" of safety, you're allowing fear to restrict the space in which "targeted groups" exist in, which in turn allows "attacking groups" to grow and occupy more space +- Without the ability to attach fear to certain objects, the "world itself" becomes fearsome. Humans attach fear to certain objects, thus enableing \ No newline at end of file From 1a89180a383ac0d57d68a632745a21aeb5cf8a4e Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 13 Nov 2024 23:45:50 -0700 Subject: [PATCH 0606/1027] vault backup: 2024-11-13 23:45:50 --- education/english/ENGL2010/Engl2010 Writing Project.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/education/english/ENGL2010/Engl2010 Writing Project.md b/education/english/ENGL2010/Engl2010 Writing Project.md index 5893bbd..0761448 100644 --- a/education/english/ENGL2010/Engl2010 Writing Project.md +++ b/education/english/ENGL2010/Engl2010 Writing Project.md @@ -50,7 +50,9 @@ - The author disagrees with the above sentiment, arguing that fear and anger can be intelligent, productive, emotions. - According to Ahmed, objects and rhetoric can become "sticky, or saturated with emotion" - The author then uses this to reinforce the idea that by propagating "past feelings" forward by proactively acting against them, we continue to let these ideas hold meaning, and power. + - The author refers to this propagation of fear as "habituated fear" + - - You can change the narrative around an idea, thus changing the emotions associated with it - *By designating fears \[at a societal level], we divide the world into safe spaces and unsafe spaces \[for different groups of people]* - By creating a designated "zone" of safety, you're allowing fear to restrict the space in which "targeted groups" exist in, which in turn allows "attacking groups" to grow and occupy more space -- Without the ability to attach fear to certain objects, the "world itself" becomes fearsome. Humans attach fear to certain objects, thus enableing \ No newline at end of file +- Without the ability to attach fear to certain objects, the "world itself" becomes fearsome. Humans attach fear to certain objects, thus enabling them to view the world from a simpler perspective of "safe", and "unsafe \ No newline at end of file From 505cf89f710e7610f4bf1d861cd29cc0d23aa5b9 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 13 Nov 2024 23:50:50 -0700 Subject: [PATCH 0607/1027] vault backup: 2024-11-13 23:50:50 --- education/english/ENGL2010/Engl2010 Writing Project.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/education/english/ENGL2010/Engl2010 Writing Project.md b/education/english/ENGL2010/Engl2010 Writing Project.md index 0761448..952f810 100644 --- a/education/english/ENGL2010/Engl2010 Writing Project.md +++ b/education/english/ENGL2010/Engl2010 Writing Project.md @@ -51,8 +51,10 @@ - According to Ahmed, objects and rhetoric can become "sticky, or saturated with emotion" - The author then uses this to reinforce the idea that by propagating "past feelings" forward by proactively acting against them, we continue to let these ideas hold meaning, and power. - The author refers to this propagation of fear as "habituated fear" - - + - This fear works in two ways, the discriminated group fears further discrimination, and the dominant group fears losing control, change, and that which it does not understand. "The more we don't know \[understand] what or who it is we fear, *the more the world becomes fearsome*" - You can change the narrative around an idea, thus changing the emotions associated with it - *By designating fears \[at a societal level], we divide the world into safe spaces and unsafe spaces \[for different groups of people]* - By creating a designated "zone" of safety, you're allowing fear to restrict the space in which "targeted groups" exist in, which in turn allows "attacking groups" to grow and occupy more space -- Without the ability to attach fear to certain objects, the "world itself" becomes fearsome. Humans attach fear to certain objects, thus enabling them to view the world from a simpler perspective of "safe", and "unsafe \ No newline at end of file +- Without the ability to attach fear to certain objects, the "world itself" becomes fearsome. Humans attach fear to certain objects, thus enabling them to view the world from a simpler perspective of "safe", and "unsafe +- Those in the discriminated group are often led to mask discomfort because societally, especially in "dominant groups", showing fear is seen as a sign of weakness. They are not able to avoid interacting with the dominant group without facing significant socioeconomic consequences. +- the \ No newline at end of file From b222200373ed41c7db62e58f4408f00e28ac91f5 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 13 Nov 2024 23:55:50 -0700 Subject: [PATCH 0608/1027] vault backup: 2024-11-13 23:55:50 --- education/english/ENGL2010/Engl2010 Writing Project.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/education/english/ENGL2010/Engl2010 Writing Project.md b/education/english/ENGL2010/Engl2010 Writing Project.md index 952f810..04964a1 100644 --- a/education/english/ENGL2010/Engl2010 Writing Project.md +++ b/education/english/ENGL2010/Engl2010 Writing Project.md @@ -57,4 +57,5 @@ - By creating a designated "zone" of safety, you're allowing fear to restrict the space in which "targeted groups" exist in, which in turn allows "attacking groups" to grow and occupy more space - Without the ability to attach fear to certain objects, the "world itself" becomes fearsome. Humans attach fear to certain objects, thus enabling them to view the world from a simpler perspective of "safe", and "unsafe - Those in the discriminated group are often led to mask discomfort because societally, especially in "dominant groups", showing fear is seen as a sign of weakness. They are not able to avoid interacting with the dominant group without facing significant socioeconomic consequences. -- the \ No newline at end of file +- The effect of safe spaces is to restrict the movement of parties *least likely* to cause trouble. This includes examples like restricting females to dorms to keep them safe from roving males, to the creation of a LGBT school for the protection of those students +- The creation of safe spaces places people into categories, categories built around fear. This is effectively actively *investing* in the set of societal norms, creating further discrimination and harm. \ No newline at end of file From 95e8231a61598db48b885b2e37c7c48f1e8f15bc Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Thu, 14 Nov 2024 07:01:01 -0700 Subject: [PATCH 0609/1027] vault backup: 2024-11-14 07:01:01 --- education/english/ENGL2010/Engl2010 Writing Project.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/education/english/ENGL2010/Engl2010 Writing Project.md b/education/english/ENGL2010/Engl2010 Writing Project.md index 04964a1..839dd8b 100644 --- a/education/english/ENGL2010/Engl2010 Writing Project.md +++ b/education/english/ENGL2010/Engl2010 Writing Project.md @@ -41,6 +41,7 @@ - As long as we assume that emotions are instinctual reactions of a person to external events (even if triggered by cognitive judgment) that prompt action, the only available analysis of emotion relies on an outmoded faculty psychology. This has the troubling effect of divorcing logic and affect in action ## Fear - Emotions can be viewed through the lens of a cognitive device that can help create and form habits. +### Fear as an evolutionary tool - As Dewey helps us to understand, *it is not that fear as emotion causes us to move away from persons perceived as somehow dangerous; rather, affect becomes ‘‘fear’’ by the interpreted action of separation.* - Therefore, neurologically, *fear stems from habit*, not the other way around - Affect arises unbidden in a reaction to a problematic circumstance in which habits of adjustment are inadequate @@ -48,6 +49,7 @@ - This emotional response doesn't necessarily need to be fear, leading to separation - This emotional response can be redirected into a search for understanding, creating a productive output (Dewey) - The author disagrees with the above sentiment, arguing that fear and anger can be intelligent, productive, emotions. +### Fear as a Sociocultural Practice - According to Ahmed, objects and rhetoric can become "sticky, or saturated with emotion" - The author then uses this to reinforce the idea that by propagating "past feelings" forward by proactively acting against them, we continue to let these ideas hold meaning, and power. - The author refers to this propagation of fear as "habituated fear" From 1b01b359cf2f6e7d67120993d0b5f4f7864ba898 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Thu, 14 Nov 2024 07:06:01 -0700 Subject: [PATCH 0610/1027] vault backup: 2024-11-14 07:06:01 --- education/english/ENGL2010/Engl2010 Writing Project.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/education/english/ENGL2010/Engl2010 Writing Project.md b/education/english/ENGL2010/Engl2010 Writing Project.md index 839dd8b..7490269 100644 --- a/education/english/ENGL2010/Engl2010 Writing Project.md +++ b/education/english/ENGL2010/Engl2010 Writing Project.md @@ -60,4 +60,9 @@ - Without the ability to attach fear to certain objects, the "world itself" becomes fearsome. Humans attach fear to certain objects, thus enabling them to view the world from a simpler perspective of "safe", and "unsafe - Those in the discriminated group are often led to mask discomfort because societally, especially in "dominant groups", showing fear is seen as a sign of weakness. They are not able to avoid interacting with the dominant group without facing significant socioeconomic consequences. - The effect of safe spaces is to restrict the movement of parties *least likely* to cause trouble. This includes examples like restricting females to dorms to keep them safe from roving males, to the creation of a LGBT school for the protection of those students -- The creation of safe spaces places people into categories, categories built around fear. This is effectively actively *investing* in the set of societal norms, creating further discrimination and harm. \ No newline at end of file +- The creation of safe spaces places people into categories, categories built around fear. This is effectively actively *investing* in the set of societal norms, creating further discrimination and harm. +### Understanding emotions +- Emotions come to be with reference to relational, socially constructed, context oriented experience +- Separation is one way in which responding to an event results in the event being recorded as "something to be afraid of" in the amygdala +- In may ways, safe spaces enable the habituation of fear in this manner +- Fear is an emotion that's more easily used to hurt or control others, by making targeted groups afraid, then you give the dominant group control over them \ No newline at end of file From 8ba8dc5a1931afefc31547c9cfbbfc383ef5946c Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Thu, 14 Nov 2024 07:11:01 -0700 Subject: [PATCH 0611/1027] vault backup: 2024-11-14 07:11:01 --- education/english/ENGL2010/Engl2010 Writing Project.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/education/english/ENGL2010/Engl2010 Writing Project.md b/education/english/ENGL2010/Engl2010 Writing Project.md index 7490269..d5b9eac 100644 --- a/education/english/ENGL2010/Engl2010 Writing Project.md +++ b/education/english/ENGL2010/Engl2010 Writing Project.md @@ -65,4 +65,8 @@ - Emotions come to be with reference to relational, socially constructed, context oriented experience - Separation is one way in which responding to an event results in the event being recorded as "something to be afraid of" in the amygdala - In may ways, safe spaces enable the habituation of fear in this manner -- Fear is an emotion that's more easily used to hurt or control others, by making targeted groups afraid, then you give the dominant group control over them \ No newline at end of file +- Fear is an emotion that's more easily used to hurt or control others, by making targeted groups afraid, then you give the dominant group control over them +- *Safe spaces are a simple solution for an inherently complicated problem*. They limit rich deconstruction and interpretation of a situation, leading to limited ability to act on a fitting response. +- When fear becomes habitually associated with an object, it becomes resistant to rational control +- **How does fear benefit the fearful one?** +- As people put up defenses from each other, we grow farther apart, and it becomes easier to view a group of people as "the other" \ No newline at end of file From 053e749c500b24001c08f48b106fa75a36db1a52 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Thu, 14 Nov 2024 07:16:30 -0700 Subject: [PATCH 0612/1027] vault backup: 2024-11-14 07:16:30 --- education/english/ENGL2010/Engl2010 Writing Project.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/education/english/ENGL2010/Engl2010 Writing Project.md b/education/english/ENGL2010/Engl2010 Writing Project.md index d5b9eac..dfb6760 100644 --- a/education/english/ENGL2010/Engl2010 Writing Project.md +++ b/education/english/ENGL2010/Engl2010 Writing Project.md @@ -69,4 +69,5 @@ - *Safe spaces are a simple solution for an inherently complicated problem*. They limit rich deconstruction and interpretation of a situation, leading to limited ability to act on a fitting response. - When fear becomes habitually associated with an object, it becomes resistant to rational control - **How does fear benefit the fearful one?** -- As people put up defenses from each other, we grow farther apart, and it becomes easier to view a group of people as "the other" \ No newline at end of file +- As people put up defenses from each other, we grow farther apart, and it becomes easier to view a group of people as "the other" +- These groups tend to \ No newline at end of file From 9fdee9481f532d393467e6147d0f304655bd1771 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Thu, 14 Nov 2024 07:21:30 -0700 Subject: [PATCH 0613/1027] vault backup: 2024-11-14 07:21:30 --- education/english/ENGL2010/Engl2010 Writing Project.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/education/english/ENGL2010/Engl2010 Writing Project.md b/education/english/ENGL2010/Engl2010 Writing Project.md index dfb6760..4acacfa 100644 --- a/education/english/ENGL2010/Engl2010 Writing Project.md +++ b/education/english/ENGL2010/Engl2010 Writing Project.md @@ -70,4 +70,6 @@ - When fear becomes habitually associated with an object, it becomes resistant to rational control - **How does fear benefit the fearful one?** - As people put up defenses from each other, we grow farther apart, and it becomes easier to view a group of people as "the other" -- These groups tend to \ No newline at end of file +- These groups tend to +- Harassment can be more effectively combatted by re-interpreting the treatment they receive. +- \ No newline at end of file From 07e4d325b80472b16a4e2baf9fe60756913bbfb1 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Thu, 14 Nov 2024 07:26:30 -0700 Subject: [PATCH 0614/1027] vault backup: 2024-11-14 07:26:30 --- education/english/ENGL2010/Engl2010 Writing Project.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/education/english/ENGL2010/Engl2010 Writing Project.md b/education/english/ENGL2010/Engl2010 Writing Project.md index 4acacfa..4472094 100644 --- a/education/english/ENGL2010/Engl2010 Writing Project.md +++ b/education/english/ENGL2010/Engl2010 Writing Project.md @@ -72,4 +72,9 @@ - As people put up defenses from each other, we grow farther apart, and it becomes easier to view a group of people as "the other" - These groups tend to - Harassment can be more effectively combatted by re-interpreting the treatment they receive. -- \ No newline at end of file + +# Dilemmas of political correctness + +- Discussions around political correctness can often be simplified down into such: + - Proponents see nothing to fear in erecting norms that inhibit expression on one side, and opponents see this as a misguided effort to silence political enemies. +- The author defines political correctness as "the attempt to establish norms of speech (or sometimes behavior) that are thought to protect vulnerable, marginalized, or historically victimized groups, with the goal of shaping public discourse with the goal of avoiding insult or outrage, a lowered sense of self esteem, or otherwise " \ No newline at end of file From 6f59428472687d25a8c01e79b26656850ceadac4 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Thu, 14 Nov 2024 07:31:30 -0700 Subject: [PATCH 0615/1027] vault backup: 2024-11-14 07:31:30 --- education/english/ENGL2010/Engl2010 Writing Project.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/education/english/ENGL2010/Engl2010 Writing Project.md b/education/english/ENGL2010/Engl2010 Writing Project.md index 4472094..a57217f 100644 --- a/education/english/ENGL2010/Engl2010 Writing Project.md +++ b/education/english/ENGL2010/Engl2010 Writing Project.md @@ -77,4 +77,5 @@ - Discussions around political correctness can often be simplified down into such: - Proponents see nothing to fear in erecting norms that inhibit expression on one side, and opponents see this as a misguided effort to silence political enemies. -- The author defines political correctness as "the attempt to establish norms of speech (or sometimes behavior) that are thought to protect vulnerable, marginalized, or historically victimized groups, with the goal of shaping public discourse with the goal of avoiding insult or outrage, a lowered sense of self esteem, or otherwise " \ No newline at end of file +- The author defines political correctness as "the attempt to establish norms of speech (or sometimes behavior) that are thought to protect vulnerable, marginalized, or historically victimized groups, with the goal of shaping public discourse with the goal of avoiding insult or outrage, a lowered sense of self esteem, or otherwise offending sensibilities." By dubbing something politically incorrect, it implies that there is something worrisome or objectionable at work +- The author places strong emphasis on the id \ No newline at end of file From 22b825052589662bd20cfe64ba1df9121a1339b7 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Thu, 14 Nov 2024 07:36:30 -0700 Subject: [PATCH 0616/1027] vault backup: 2024-11-14 07:36:30 --- education/english/ENGL2010/Engl2010 Writing Project.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/education/english/ENGL2010/Engl2010 Writing Project.md b/education/english/ENGL2010/Engl2010 Writing Project.md index a57217f..30079ca 100644 --- a/education/english/ENGL2010/Engl2010 Writing Project.md +++ b/education/english/ENGL2010/Engl2010 Writing Project.md @@ -78,4 +78,7 @@ - Discussions around political correctness can often be simplified down into such: - Proponents see nothing to fear in erecting norms that inhibit expression on one side, and opponents see this as a misguided effort to silence political enemies. - The author defines political correctness as "the attempt to establish norms of speech (or sometimes behavior) that are thought to protect vulnerable, marginalized, or historically victimized groups, with the goal of shaping public discourse with the goal of avoiding insult or outrage, a lowered sense of self esteem, or otherwise offending sensibilities." By dubbing something politically incorrect, it implies that there is something worrisome or objectionable at work -- The author places strong emphasis on the id \ No newline at end of file +- The author places strong emphasis on the distinction between an idea being morally right or wrong, and being politically correct. He provides the examples that: + - Criticizing someone for referring to an administrative assistant as a "secretary" constitutes political correctness, but advocating for higher wages is not + - Insisting on trigger warnings or deleting offending material is a form of political correctness, but arguing for rape prevention security measures is not. + - In the inverse, it's not politically incorrect to make a donation to fight gay marriage, but it is politically incorrect to speak publicly against gay marriage \ No newline at end of file From 3e17b9c0f7e0be1ad0764ce76035a54d130a9f65 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Thu, 14 Nov 2024 07:41:30 -0700 Subject: [PATCH 0617/1027] vault backup: 2024-11-14 07:41:30 --- education/english/ENGL2010/Engl2010 Writing Project.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/education/english/ENGL2010/Engl2010 Writing Project.md b/education/english/ENGL2010/Engl2010 Writing Project.md index 30079ca..39c9a2a 100644 --- a/education/english/ENGL2010/Engl2010 Writing Project.md +++ b/education/english/ENGL2010/Engl2010 Writing Project.md @@ -81,4 +81,7 @@ - The author places strong emphasis on the distinction between an idea being morally right or wrong, and being politically correct. He provides the examples that: - Criticizing someone for referring to an administrative assistant as a "secretary" constitutes political correctness, but advocating for higher wages is not - Insisting on trigger warnings or deleting offending material is a form of political correctness, but arguing for rape prevention security measures is not. - - In the inverse, it's not politically incorrect to make a donation to fight gay marriage, but it is politically incorrect to speak publicly against gay marriage \ No newline at end of file + - In the inverse, it's not politically incorrect to make a donation to fight gay marriage, but it is politically incorrect to speak publicly against gay marriage +- Political correctness can be viewed as something to benefit marginalized groups, or as a societal movement towards restraint on public expression +- Given the idea that political correctness is a societal movement, it culminates in a form of self censorship where there are consequences for those who violate communal norms +- One practical example of this is when German politician Phillipp Jenninger fell into disgrace after a speech that engaged rhetorically \ No newline at end of file From be7d2ba90af69cba61242f697f972b0f75d59652 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Thu, 14 Nov 2024 07:46:30 -0700 Subject: [PATCH 0618/1027] vault backup: 2024-11-14 07:46:30 --- education/english/ENGL2010/Engl2010 Writing Project.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/education/english/ENGL2010/Engl2010 Writing Project.md b/education/english/ENGL2010/Engl2010 Writing Project.md index 39c9a2a..b10dde7 100644 --- a/education/english/ENGL2010/Engl2010 Writing Project.md +++ b/education/english/ENGL2010/Engl2010 Writing Project.md @@ -84,4 +84,6 @@ - In the inverse, it's not politically incorrect to make a donation to fight gay marriage, but it is politically incorrect to speak publicly against gay marriage - Political correctness can be viewed as something to benefit marginalized groups, or as a societal movement towards restraint on public expression - Given the idea that political correctness is a societal movement, it culminates in a form of self censorship where there are consequences for those who violate communal norms -- One practical example of this is when German politician Phillipp Jenninger fell into disgrace after a speech that engaged rhetorically \ No newline at end of file +- One practical example of this is when German politician Phillipp Jenninger fell into disgrace after a speech that engaged rhetorically with the perspective of Nazi Germany, even though the speech was devoid of Nazi sympathy or anti-semitism. The same speech was given in a jewish synagogue by a jewish leader, and it received no negative response, demonstrating that the worry was the *signal* sent by the speech being given by a german politican +- Another practical example is when the mayor of Washington DC was forced to resign after making use of the word "niggardly" + - The N word is derived from latin roots (*niger* - dark) and developed from french and spanish roots in the mid 18th century, whereas niggardly is derived from the old english word *nigon*, meaning stingy. The \ No newline at end of file From e73027234b4926dc061b867ffcd4305add7aed54 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Thu, 14 Nov 2024 07:51:30 -0700 Subject: [PATCH 0619/1027] vault backup: 2024-11-14 07:51:30 --- education/english/ENGL2010/Engl2010 Writing Project.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/education/english/ENGL2010/Engl2010 Writing Project.md b/education/english/ENGL2010/Engl2010 Writing Project.md index b10dde7..0d06e44 100644 --- a/education/english/ENGL2010/Engl2010 Writing Project.md +++ b/education/english/ENGL2010/Engl2010 Writing Project.md @@ -86,4 +86,7 @@ - Given the idea that political correctness is a societal movement, it culminates in a form of self censorship where there are consequences for those who violate communal norms - One practical example of this is when German politician Phillipp Jenninger fell into disgrace after a speech that engaged rhetorically with the perspective of Nazi Germany, even though the speech was devoid of Nazi sympathy or anti-semitism. The same speech was given in a jewish synagogue by a jewish leader, and it received no negative response, demonstrating that the worry was the *signal* sent by the speech being given by a german politican - Another practical example is when the mayor of Washington DC was forced to resign after making use of the word "niggardly" - - The N word is derived from latin roots (*niger* - dark) and developed from french and spanish roots in the mid 18th century, whereas niggardly is derived from the old english word *nigon*, meaning stingy. The \ No newline at end of file + - The N word is derived from latin roots (*niger* - dark) and developed from french and spanish roots in the mid 18th century, whereas niggardly is derived from the old english word *nigon*, meaning stingy. The modern etymological root is niggle, meaning giving excessive attention to minor details +- Self censorship is an ultimate victory for those seeking to eliminate a form of censorship +- Political correctness stems from concern for the victimized groups, and is typically seen on the left end of the political co +- Political corre \ No newline at end of file From 172db6b48185f40a470de92a0474af4639783173 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Thu, 14 Nov 2024 07:56:30 -0700 Subject: [PATCH 0620/1027] vault backup: 2024-11-14 07:56:30 --- education/english/ENGL2010/Engl2010 Writing Project.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/education/english/ENGL2010/Engl2010 Writing Project.md b/education/english/ENGL2010/Engl2010 Writing Project.md index 0d06e44..2103c0a 100644 --- a/education/english/ENGL2010/Engl2010 Writing Project.md +++ b/education/english/ENGL2010/Engl2010 Writing Project.md @@ -88,5 +88,5 @@ - Another practical example is when the mayor of Washington DC was forced to resign after making use of the word "niggardly" - The N word is derived from latin roots (*niger* - dark) and developed from french and spanish roots in the mid 18th century, whereas niggardly is derived from the old english word *nigon*, meaning stingy. The modern etymological root is niggle, meaning giving excessive attention to minor details - Self censorship is an ultimate victory for those seeking to eliminate a form of censorship -- Political correctness stems from concern for the victimized groups, and is typically seen on the left end of the political co -- Political corre \ No newline at end of file +- Political correctness stems from concern for the victimized groups, and is typically seen on the left end of the political spectrum, but it can also be seen on the right + - One example attempts to delegitimize opposition to war by suggesting dissenters are insulting "the brave men and women who fight on our behalf" \ No newline at end of file From 1bf8873a0e5e1b091ca51d9f1d45d78fecefca92 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Thu, 14 Nov 2024 08:01:30 -0700 Subject: [PATCH 0621/1027] vault backup: 2024-11-14 08:01:30 --- education/english/ENGL2010/Engl2010 Writing Project.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/education/english/ENGL2010/Engl2010 Writing Project.md b/education/english/ENGL2010/Engl2010 Writing Project.md index 2103c0a..fb0f74d 100644 --- a/education/english/ENGL2010/Engl2010 Writing Project.md +++ b/education/english/ENGL2010/Engl2010 Writing Project.md @@ -89,4 +89,5 @@ - The N word is derived from latin roots (*niger* - dark) and developed from french and spanish roots in the mid 18th century, whereas niggardly is derived from the old english word *nigon*, meaning stingy. The modern etymological root is niggle, meaning giving excessive attention to minor details - Self censorship is an ultimate victory for those seeking to eliminate a form of censorship - Political correctness stems from concern for the victimized groups, and is typically seen on the left end of the political spectrum, but it can also be seen on the right - - One example attempts to delegitimize opposition to war by suggesting dissenters are insulting "the brave men and women who fight on our behalf" \ No newline at end of file + - One example includes attempts to delegitimize opposition to war by suggesting dissenters are insulting "the brave men and women who fight on our behalf" +- Those opposed to political correctness often dismiss it as a trivial insistence to redefine words, or an attempt to sol \ No newline at end of file From 449bcdd287373497f70427ebe9c12409479d6c49 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Thu, 14 Nov 2024 08:06:40 -0700 Subject: [PATCH 0622/1027] vault backup: 2024-11-14 08:06:40 --- education/english/ENGL2010/Engl2010 Writing Project.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/education/english/ENGL2010/Engl2010 Writing Project.md b/education/english/ENGL2010/Engl2010 Writing Project.md index fb0f74d..1e25203 100644 --- a/education/english/ENGL2010/Engl2010 Writing Project.md +++ b/education/english/ENGL2010/Engl2010 Writing Project.md @@ -90,4 +90,5 @@ - Self censorship is an ultimate victory for those seeking to eliminate a form of censorship - Political correctness stems from concern for the victimized groups, and is typically seen on the left end of the political spectrum, but it can also be seen on the right - One example includes attempts to delegitimize opposition to war by suggesting dissenters are insulting "the brave men and women who fight on our behalf" -- Those opposed to political correctness often dismiss it as a trivial insistence to redefine words, or an attempt to sol \ No newline at end of file +- Those opposed to political correctness often dismiss it as a trivial insistence to redefine words, or an attempt to silence opposition. +- It's easy to dismiss some cases, but it's harder to dismiss others (eg, the taboo on the N word or certain taboos around racial science, or the underlying worries around such ideas). \ No newline at end of file From a81d45d0c366c6069f8beed4820aa795af5ad42c Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Thu, 14 Nov 2024 08:11:40 -0700 Subject: [PATCH 0623/1027] vault backup: 2024-11-14 08:11:40 --- education/english/ENGL2010/Engl2010 Writing Project.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/education/english/ENGL2010/Engl2010 Writing Project.md b/education/english/ENGL2010/Engl2010 Writing Project.md index 1e25203..d26315c 100644 --- a/education/english/ENGL2010/Engl2010 Writing Project.md +++ b/education/english/ENGL2010/Engl2010 Writing Project.md @@ -91,4 +91,7 @@ - Political correctness stems from concern for the victimized groups, and is typically seen on the left end of the political spectrum, but it can also be seen on the right - One example includes attempts to delegitimize opposition to war by suggesting dissenters are insulting "the brave men and women who fight on our behalf" - Those opposed to political correctness often dismiss it as a trivial insistence to redefine words, or an attempt to silence opposition. -- It's easy to dismiss some cases, but it's harder to dismiss others (eg, the taboo on the N word or certain taboos around racial science, or the underlying worries around such ideas). \ No newline at end of file +- It's easy to dismiss some cases, but it's harder to dismiss others (eg, the taboo on the N word or certain taboos around racial science, or the underlying worries around such ideas). + - There are perfectly valid motivations for attempting to cultivate and enforce political norms, eg a record of violence and injustice directed towards African Americans being promoted through superficially respectable means +- On a broader level, enlightened moral thinking has led society to converge on a *default norm against advancing ideas associated with oppression or marginalization* +- \ No newline at end of file From df744f66247095e76e7376624d478ecc6500e9de Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Thu, 14 Nov 2024 08:16:40 -0700 Subject: [PATCH 0624/1027] vault backup: 2024-11-14 08:16:40 --- education/english/ENGL2010/Engl2010 Writing Project.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/education/english/ENGL2010/Engl2010 Writing Project.md b/education/english/ENGL2010/Engl2010 Writing Project.md index d26315c..812e821 100644 --- a/education/english/ENGL2010/Engl2010 Writing Project.md +++ b/education/english/ENGL2010/Engl2010 Writing Project.md @@ -94,4 +94,4 @@ - It's easy to dismiss some cases, but it's harder to dismiss others (eg, the taboo on the N word or certain taboos around racial science, or the underlying worries around such ideas). - There are perfectly valid motivations for attempting to cultivate and enforce political norms, eg a record of violence and injustice directed towards African Americans being promoted through superficially respectable means - On a broader level, enlightened moral thinking has led society to converge on a *default norm against advancing ideas associated with oppression or marginalization* -- \ No newline at end of file +- The author agrees with the idea that political correctness has made “the casual infliction of humiliation...much less socially acceptable than it was,” and even that “encouraging students to be ‘politically correct’ has made our country a far better place.” \ No newline at end of file From 8e5907493c8c8b208f0f30da29bfcbde31ee6925 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Thu, 14 Nov 2024 08:21:40 -0700 Subject: [PATCH 0625/1027] vault backup: 2024-11-14 08:21:40 --- education/english/ENGL2010/Engl2010 Writing Project.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/education/english/ENGL2010/Engl2010 Writing Project.md b/education/english/ENGL2010/Engl2010 Writing Project.md index 812e821..0acb9c7 100644 --- a/education/english/ENGL2010/Engl2010 Writing Project.md +++ b/education/english/ENGL2010/Engl2010 Writing Project.md @@ -94,4 +94,6 @@ - It's easy to dismiss some cases, but it's harder to dismiss others (eg, the taboo on the N word or certain taboos around racial science, or the underlying worries around such ideas). - There are perfectly valid motivations for attempting to cultivate and enforce political norms, eg a record of violence and injustice directed towards African Americans being promoted through superficially respectable means - On a broader level, enlightened moral thinking has led society to converge on a *default norm against advancing ideas associated with oppression or marginalization* -- The author agrees with the idea that political correctness has made “the casual infliction of humiliation...much less socially acceptable than it was,” and even that “encouraging students to be ‘politically correct’ has made our country a far better place.” \ No newline at end of file +- The author agrees with the idea that political correctness has made “the casual infliction of humiliation...much less socially acceptable than it was,” and even that “encouraging students to be ‘politically correct’ has made our country a far better place.” +- The author argues that political correctness has brought huge benefits, but there are limits of being politically correct + - Where those limits should be located is subject to disagreement. On one end of the spectrum are minor conventions and taboos, at the other end are explicit laws prohibiting forms of expression (hate speech) \ No newline at end of file From 0b58a2c232775c8362fe6b8b8a3cf85fb92912f1 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Thu, 14 Nov 2024 08:26:40 -0700 Subject: [PATCH 0626/1027] vault backup: 2024-11-14 08:26:40 --- education/english/ENGL2010/Engl2010 Writing Project.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/education/english/ENGL2010/Engl2010 Writing Project.md b/education/english/ENGL2010/Engl2010 Writing Project.md index 0acb9c7..f40152c 100644 --- a/education/english/ENGL2010/Engl2010 Writing Project.md +++ b/education/english/ENGL2010/Engl2010 Writing Project.md @@ -96,4 +96,6 @@ - On a broader level, enlightened moral thinking has led society to converge on a *default norm against advancing ideas associated with oppression or marginalization* - The author agrees with the idea that political correctness has made “the casual infliction of humiliation...much less socially acceptable than it was,” and even that “encouraging students to be ‘politically correct’ has made our country a far better place.” - The author argues that political correctness has brought huge benefits, but there are limits of being politically correct - - Where those limits should be located is subject to disagreement. On one end of the spectrum are minor conventions and taboos, at the other end are explicit laws prohibiting forms of expression (hate speech) \ No newline at end of file + - Where those limits should be located is subject to disagreement. On one end of the spectrum are minor conventions and taboos, at the other end are explicit laws prohibiting forms of expression (hate speech) + - You can acknowledge the value of political correctness without endorsing all uses of political correctness as a barrier in public discourse + - Potential drawbacks of politica \ No newline at end of file From dc84d2706eabf98563fdc1d258ccf1d8e879a19f Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Thu, 14 Nov 2024 08:31:40 -0700 Subject: [PATCH 0627/1027] vault backup: 2024-11-14 08:31:40 --- education/english/ENGL2010/Engl2010 Writing Project.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/education/english/ENGL2010/Engl2010 Writing Project.md b/education/english/ENGL2010/Engl2010 Writing Project.md index f40152c..91378e6 100644 --- a/education/english/ENGL2010/Engl2010 Writing Project.md +++ b/education/english/ENGL2010/Engl2010 Writing Project.md @@ -98,4 +98,6 @@ - The author argues that political correctness has brought huge benefits, but there are limits of being politically correct - Where those limits should be located is subject to disagreement. On one end of the spectrum are minor conventions and taboos, at the other end are explicit laws prohibiting forms of expression (hate speech) - You can acknowledge the value of political correctness without endorsing all uses of political correctness as a barrier in public discourse - - Potential drawbacks of politica \ No newline at end of file + - Potential drawbacks of political correctness are especially relevant when you note how individual applications of political correctness are applied at an extreme level. + - Extreme political correctness can often revolve around morally superficial applications of reasonable norms, taken to an extreme + - \ No newline at end of file From 4e837f338972a25efd5f0c3156a687e4185d4ba1 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Thu, 14 Nov 2024 08:41:40 -0700 Subject: [PATCH 0628/1027] vault backup: 2024-11-14 08:41:40 --- education/english/ENGL2010/Engl2010 Writing Project.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/education/english/ENGL2010/Engl2010 Writing Project.md b/education/english/ENGL2010/Engl2010 Writing Project.md index 91378e6..d00d5fd 100644 --- a/education/english/ENGL2010/Engl2010 Writing Project.md +++ b/education/english/ENGL2010/Engl2010 Writing Project.md @@ -89,7 +89,7 @@ - The N word is derived from latin roots (*niger* - dark) and developed from french and spanish roots in the mid 18th century, whereas niggardly is derived from the old english word *nigon*, meaning stingy. The modern etymological root is niggle, meaning giving excessive attention to minor details - Self censorship is an ultimate victory for those seeking to eliminate a form of censorship - Political correctness stems from concern for the victimized groups, and is typically seen on the left end of the political spectrum, but it can also be seen on the right - - One example includes attempts to delegitimize opposition to war by suggesting dissenters are insulting "the brave men and women who fight on our behalf" + - Examples includes attempts to delegitimize opposition to war by suggesting dissenters are insulting "the brave men and women who fight on our behalf" - Those opposed to political correctness often dismiss it as a trivial insistence to redefine words, or an attempt to silence opposition. - It's easy to dismiss some cases, but it's harder to dismiss others (eg, the taboo on the N word or certain taboos around racial science, or the underlying worries around such ideas). - There are perfectly valid motivations for attempting to cultivate and enforce political norms, eg a record of violence and injustice directed towards African Americans being promoted through superficially respectable means @@ -100,4 +100,5 @@ - You can acknowledge the value of political correctness without endorsing all uses of political correctness as a barrier in public discourse - Potential drawbacks of political correctness are especially relevant when you note how individual applications of political correctness are applied at an extreme level. - Extreme political correctness can often revolve around morally superficial applications of reasonable norms, taken to an extreme - - \ No newline at end of file +- Political correctness concerns offense and sensibilities, not the objective interests of everyone involved. +- \ No newline at end of file From 055f5d5f4fe72405b16738693b3042a89aa1b154 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Thu, 14 Nov 2024 08:51:40 -0700 Subject: [PATCH 0629/1027] vault backup: 2024-11-14 08:51:40 --- education/english/ENGL2010/Engl2010 Writing Project.md | 1 + 1 file changed, 1 insertion(+) diff --git a/education/english/ENGL2010/Engl2010 Writing Project.md b/education/english/ENGL2010/Engl2010 Writing Project.md index d00d5fd..c2334ce 100644 --- a/education/english/ENGL2010/Engl2010 Writing Project.md +++ b/education/english/ENGL2010/Engl2010 Writing Project.md @@ -101,4 +101,5 @@ - Potential drawbacks of political correctness are especially relevant when you note how individual applications of political correctness are applied at an extreme level. - Extreme political correctness can often revolve around morally superficial applications of reasonable norms, taken to an extreme - Political correctness concerns offense and sensibilities, not the objective interests of everyone involved. +- There's an increasing tendency to reject government terms like "illegal alien" in favor of "undocumented immigrant" with the implication that refusing to do so implies reactionary or hateful views. - \ No newline at end of file From e174520f8ebd57fff41b9b1596a26aeffe44e551 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Thu, 14 Nov 2024 09:01:40 -0700 Subject: [PATCH 0630/1027] vault backup: 2024-11-14 09:01:40 --- education/english/ENGL2010/Engl2010 Writing Project.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/education/english/ENGL2010/Engl2010 Writing Project.md b/education/english/ENGL2010/Engl2010 Writing Project.md index c2334ce..73e9fd6 100644 --- a/education/english/ENGL2010/Engl2010 Writing Project.md +++ b/education/english/ENGL2010/Engl2010 Writing Project.md @@ -102,4 +102,4 @@ - Extreme political correctness can often revolve around morally superficial applications of reasonable norms, taken to an extreme - Political correctness concerns offense and sensibilities, not the objective interests of everyone involved. - There's an increasing tendency to reject government terms like "illegal alien" in favor of "undocumented immigrant" with the implication that refusing to do so implies reactionary or hateful views. -- \ No newline at end of file +- One example of political correctness backfiring is when "sensitive" material is removed from coursework to avoid upsetting students. \ No newline at end of file From 1503169e996efaf8c79d224ee7fffd821d4b1e6c Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Thu, 14 Nov 2024 09:06:40 -0700 Subject: [PATCH 0631/1027] vault backup: 2024-11-14 09:06:40 --- education/english/ENGL2010/Engl2010 Writing Project.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/education/english/ENGL2010/Engl2010 Writing Project.md b/education/english/ENGL2010/Engl2010 Writing Project.md index 73e9fd6..1d3ff60 100644 --- a/education/english/ENGL2010/Engl2010 Writing Project.md +++ b/education/english/ENGL2010/Engl2010 Writing Project.md @@ -102,4 +102,7 @@ - Extreme political correctness can often revolve around morally superficial applications of reasonable norms, taken to an extreme - Political correctness concerns offense and sensibilities, not the objective interests of everyone involved. - There's an increasing tendency to reject government terms like "illegal alien" in favor of "undocumented immigrant" with the implication that refusing to do so implies reactionary or hateful views. -- One example of political correctness backfiring is when "sensitive" material is removed from coursework to avoid upsetting students. \ No newline at end of file +- One example of political correctness backfiring is when "sensitive" material is removed from coursework to avoid upsetting students. +- This is shown with affirmative action causing problems and not having the intended affect +- We want to avoid "being gored on either horn" +- Enforcing political correctness can lead to widespread "preference falsification", in which what people believe in private is detached from what is spoken in public \ No newline at end of file From be3194801f121ba6d0656f5299eadab8c22dff6e Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Thu, 14 Nov 2024 09:11:40 -0700 Subject: [PATCH 0632/1027] vault backup: 2024-11-14 09:11:40 --- education/english/ENGL2010/Engl2010 Writing Project.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/education/english/ENGL2010/Engl2010 Writing Project.md b/education/english/ENGL2010/Engl2010 Writing Project.md index 1d3ff60..273e709 100644 --- a/education/english/ENGL2010/Engl2010 Writing Project.md +++ b/education/english/ENGL2010/Engl2010 Writing Project.md @@ -105,4 +105,7 @@ - One example of political correctness backfiring is when "sensitive" material is removed from coursework to avoid upsetting students. - This is shown with affirmative action causing problems and not having the intended affect - We want to avoid "being gored on either horn" -- Enforcing political correctness can lead to widespread "preference falsification", in which what people believe in private is detached from what is spoken in public \ No newline at end of file +- Enforcing political correctness can lead to widespread "preference falsification", in which what people believe in private is detached from what is spoken in public +- "preference falsification" can lead to polarization. +- In the example of social justice, many attribute poor social outcomes to factors *external* to the person, because then you can avoid directly blaming the person, an inherently uncomfortable discussion. Regardless of how correct the end result is, this tendency is still present. +- In promoting norms intended to benefit marginalized groups, we both help and hurt them \ No newline at end of file From 6572205b37deb76e00040f906d2a8eece9c749b0 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Fri, 15 Nov 2024 13:48:25 -0700 Subject: [PATCH 0633/1027] vault backup: 2024-11-15 13:48:25 --- education/english/ENGL2010/Engl2010 Writing Project.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/education/english/ENGL2010/Engl2010 Writing Project.md b/education/english/ENGL2010/Engl2010 Writing Project.md index 273e709..644c396 100644 --- a/education/english/ENGL2010/Engl2010 Writing Project.md +++ b/education/english/ENGL2010/Engl2010 Writing Project.md @@ -84,7 +84,7 @@ - In the inverse, it's not politically incorrect to make a donation to fight gay marriage, but it is politically incorrect to speak publicly against gay marriage - Political correctness can be viewed as something to benefit marginalized groups, or as a societal movement towards restraint on public expression - Given the idea that political correctness is a societal movement, it culminates in a form of self censorship where there are consequences for those who violate communal norms -- One practical example of this is when German politician Phillipp Jenninger fell into disgrace after a speech that engaged rhetorically with the perspective of Nazi Germany, even though the speech was devoid of Nazi sympathy or anti-semitism. The same speech was given in a jewish synagogue by a jewish leader, and it received no negative response, demonstrating that the worry was the *signal* sent by the speech being given by a german politican +- One practical example of this is when German politician Phillipp Jenninger fell into disgrace after a speech that engaged rhetorically with the perspective of Nazi Germany, even though the speech was devoid of Nazi sympathy or anti-semitism. The same speech was given in a jewish synagogue by a jewish leader, and it received no negative response, demonstrating that the worry was the *signal* sent by the speech being given by a german politician - Another practical example is when the mayor of Washington DC was forced to resign after making use of the word "niggardly" - The N word is derived from latin roots (*niger* - dark) and developed from french and spanish roots in the mid 18th century, whereas niggardly is derived from the old english word *nigon*, meaning stingy. The modern etymological root is niggle, meaning giving excessive attention to minor details - Self censorship is an ultimate victory for those seeking to eliminate a form of censorship From f307123921adb5accfd8058b3b39887eaa9c4941 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Fri, 15 Nov 2024 13:53:25 -0700 Subject: [PATCH 0634/1027] vault backup: 2024-11-15 13:53:25 --- education/english/ENGL2010/Engl2010 Writing Project.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/education/english/ENGL2010/Engl2010 Writing Project.md b/education/english/ENGL2010/Engl2010 Writing Project.md index 644c396..b8550e1 100644 --- a/education/english/ENGL2010/Engl2010 Writing Project.md +++ b/education/english/ENGL2010/Engl2010 Writing Project.md @@ -108,4 +108,8 @@ - Enforcing political correctness can lead to widespread "preference falsification", in which what people believe in private is detached from what is spoken in public - "preference falsification" can lead to polarization. - In the example of social justice, many attribute poor social outcomes to factors *external* to the person, because then you can avoid directly blaming the person, an inherently uncomfortable discussion. Regardless of how correct the end result is, this tendency is still present. -- In promoting norms intended to benefit marginalized groups, we both help and hurt them \ No newline at end of file +- In promoting norms intended to benefit marginalized groups, we both help and hurt them + +# Safe spaces, explained +- The author introduces the paper by showcasing some of the negative ways in which safe spaces are viewed and understood. +- The author then explains that safe spaces are a place where marginalized groups can feel welcome and accepted \ No newline at end of file From 6dc499f25385ff73e3f250e7323fa7f759142e35 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Fri, 15 Nov 2024 13:58:25 -0700 Subject: [PATCH 0635/1027] vault backup: 2024-11-15 13:58:25 --- education/english/ENGL2010/Engl2010 Writing Project.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/education/english/ENGL2010/Engl2010 Writing Project.md b/education/english/ENGL2010/Engl2010 Writing Project.md index b8550e1..aa65a04 100644 --- a/education/english/ENGL2010/Engl2010 Writing Project.md +++ b/education/english/ENGL2010/Engl2010 Writing Project.md @@ -112,4 +112,7 @@ # Safe spaces, explained - The author introduces the paper by showcasing some of the negative ways in which safe spaces are viewed and understood. -- The author then explains that safe spaces are a place where marginalized groups can feel welcome and accepted \ No newline at end of file +- The author then explains that safe spaces are a place where marginalized groups can feel welcome and accepted +- Distinction is made between psychological safety and physical safety +- The first usages of the term "safe space" came from the 1960s, where same sex relationships were outlawed, so a safe space was a place where people were able to practice same sex relationships without being noticed by the cops. +- Examples of situations where the classical term "safe space" still applies exist in areas where queer individuals \ No newline at end of file From 0ba62cee12d3178dbeff3cbdaedc13f9f8679587 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Fri, 15 Nov 2024 14:03:25 -0700 Subject: [PATCH 0636/1027] vault backup: 2024-11-15 14:03:25 --- education/english/ENGL2010/Engl2010 Writing Project.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/education/english/ENGL2010/Engl2010 Writing Project.md b/education/english/ENGL2010/Engl2010 Writing Project.md index aa65a04..4a900ac 100644 --- a/education/english/ENGL2010/Engl2010 Writing Project.md +++ b/education/english/ENGL2010/Engl2010 Writing Project.md @@ -108,11 +108,13 @@ - Enforcing political correctness can lead to widespread "preference falsification", in which what people believe in private is detached from what is spoken in public - "preference falsification" can lead to polarization. - In the example of social justice, many attribute poor social outcomes to factors *external* to the person, because then you can avoid directly blaming the person, an inherently uncomfortable discussion. Regardless of how correct the end result is, this tendency is still present. -- In promoting norms intended to benefit marginalized groups, we both help and hurt them +- In promoting norms intended to benefit marginalized groups, we both help and hurt them. # Safe spaces, explained - The author introduces the paper by showcasing some of the negative ways in which safe spaces are viewed and understood. - The author then explains that safe spaces are a place where marginalized groups can feel welcome and accepted - Distinction is made between psychological safety and physical safety - The first usages of the term "safe space" came from the 1960s, where same sex relationships were outlawed, so a safe space was a place where people were able to practice same sex relationships without being noticed by the cops. -- Examples of situations where the classical term "safe space" still applies exist in areas where queer individuals \ No newline at end of file +- Examples of situations where the classical term "safe space" still applies exist in areas where non-heteronormative behavior is outlawed or socially shamed. +- The same idea applies to other groups, like women, and people of color. +- One advocate for safe spaces states that they've found that being able to surround themselves with people of the same marginalized group makes it easier to be themselves. \ No newline at end of file From 0ce9c71a395f35834cda881e397e082f92bf05ed Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Fri, 15 Nov 2024 14:08:25 -0700 Subject: [PATCH 0637/1027] vault backup: 2024-11-15 14:08:25 --- education/english/ENGL2010/Engl2010 Writing Project.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/education/english/ENGL2010/Engl2010 Writing Project.md b/education/english/ENGL2010/Engl2010 Writing Project.md index 4a900ac..c43e1cb 100644 --- a/education/english/ENGL2010/Engl2010 Writing Project.md +++ b/education/english/ENGL2010/Engl2010 Writing Project.md @@ -117,4 +117,7 @@ - The first usages of the term "safe space" came from the 1960s, where same sex relationships were outlawed, so a safe space was a place where people were able to practice same sex relationships without being noticed by the cops. - Examples of situations where the classical term "safe space" still applies exist in areas where non-heteronormative behavior is outlawed or socially shamed. - The same idea applies to other groups, like women, and people of color. -- One advocate for safe spaces states that they've found that being able to surround themselves with people of the same marginalized group makes it easier to be themselves. \ No newline at end of file +- One advocate for safe spaces states that they've found that being able to surround themselves with people of the same marginalized group makes it easier to be themselves +- Some safe spaces are created explicitly, whereas others are created organically +- Safe spaces create a place for marginalized groups to truly relax. The author makes the claim that stress caused by discrimination creates poor health outcomes among groups who experience systemic discrimination. +- Opponents of safe spaces caution that safe spaces limit social change by preventing "messy work" \ No newline at end of file From 23a2998a462de780aee2b9503e2c8285db2ac8de Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Fri, 15 Nov 2024 14:13:25 -0700 Subject: [PATCH 0638/1027] vault backup: 2024-11-15 14:13:25 --- education/english/ENGL2010/Engl2010 Writing Project.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/education/english/ENGL2010/Engl2010 Writing Project.md b/education/english/ENGL2010/Engl2010 Writing Project.md index c43e1cb..1646297 100644 --- a/education/english/ENGL2010/Engl2010 Writing Project.md +++ b/education/english/ENGL2010/Engl2010 Writing Project.md @@ -120,4 +120,8 @@ - One advocate for safe spaces states that they've found that being able to surround themselves with people of the same marginalized group makes it easier to be themselves - Some safe spaces are created explicitly, whereas others are created organically - Safe spaces create a place for marginalized groups to truly relax. The author makes the claim that stress caused by discrimination creates poor health outcomes among groups who experience systemic discrimination. -- Opponents of safe spaces caution that safe spaces limit social change by preventing "messy work" \ No newline at end of file +- Opponents of safe spaces caution that safe spaces limit social change by preventing the "messy work" of fighting for social change from occurring. +- Debate and conflict isn't always what people want or feel they need. +- There's a fear that social justice issues are nearly impossible to effectively resolve +- Groupthink is a real issue that can occur within safe spaces. +- People in marginalized groups have to face the \ No newline at end of file From 489b010ab551ff24556cdf8bdac95155c1388598 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Fri, 15 Nov 2024 14:18:25 -0700 Subject: [PATCH 0639/1027] vault backup: 2024-11-15 14:18:25 --- education/english/ENGL2010/Engl2010 Writing Project.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/education/english/ENGL2010/Engl2010 Writing Project.md b/education/english/ENGL2010/Engl2010 Writing Project.md index 1646297..131d9ff 100644 --- a/education/english/ENGL2010/Engl2010 Writing Project.md +++ b/education/english/ENGL2010/Engl2010 Writing Project.md @@ -124,4 +124,4 @@ - Debate and conflict isn't always what people want or feel they need. - There's a fear that social justice issues are nearly impossible to effectively resolve - Groupthink is a real issue that can occur within safe spaces. -- People in marginalized groups have to face the \ No newline at end of file +- People in marginalized groups have to face the feeling that society wasn't really designed for them, whereas people in dominant groups don't face that experience. \ No newline at end of file From d92830fb1cac52afe73c99da4c670832ca31f526 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Fri, 15 Nov 2024 14:28:32 -0700 Subject: [PATCH 0640/1027] vault backup: 2024-11-15 14:28:32 --- Ch 16 exericses.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 Ch 16 exericses.md diff --git a/Ch 16 exericses.md b/Ch 16 exericses.md new file mode 100644 index 0000000..9d6d2eb --- /dev/null +++ b/Ch 16 exericses.md @@ -0,0 +1,18 @@ +> 1 + +Yes they are, different structs can have the same field names. + +> 2 + +```c +struct c1 C1 { 0.0, 1.0}; + +struct c1 C2 { 1.0, 1.0}; +``` + +> 8a +```c +const struct color MAGENTA { 255, 0, 255}; +``` + +>11A From f6133e40111cf95eccb5ff2ca9672f0b216f04df Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Fri, 15 Nov 2024 18:36:06 -0700 Subject: [PATCH 0641/1027] vault backup: 2024-11-15 18:36:06 --- Ch 16 exericses.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Ch 16 exericses.md b/Ch 16 exericses.md index 9d6d2eb..fa0ca5d 100644 --- a/Ch 16 exericses.md +++ b/Ch 16 exericses.md @@ -15,4 +15,8 @@ struct c1 C2 { 1.0, 1.0}; const struct color MAGENTA { 255, 0, 255}; ``` ->11A +>11 + +20 bytes + +UNCOMPLETED \ No newline at end of file From af8092a3e940aa23680f8e606b2cf712255ebc0d Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Fri, 15 Nov 2024 23:23:12 -0700 Subject: [PATCH 0642/1027] vault backup: 2024-11-15 23:23:12 --- education/english/ENGL2010/Engl2010 Writing Project.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/education/english/ENGL2010/Engl2010 Writing Project.md b/education/english/ENGL2010/Engl2010 Writing Project.md index 131d9ff..a2ff00f 100644 --- a/education/english/ENGL2010/Engl2010 Writing Project.md +++ b/education/english/ENGL2010/Engl2010 Writing Project.md @@ -124,4 +124,6 @@ - Debate and conflict isn't always what people want or feel they need. - There's a fear that social justice issues are nearly impossible to effectively resolve - Groupthink is a real issue that can occur within safe spaces. -- People in marginalized groups have to face the feeling that society wasn't really designed for them, whereas people in dominant groups don't face that experience. \ No newline at end of file +- People in marginalized groups have to face the feeling that society wasn't really designed for them, whereas people in dominant groups don't face that experience. + +# The tools of Campus Activists are being turned against them \ No newline at end of file From bccb5776d1a2c280fb7d4b718a6299ece0c91c14 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Sat, 16 Nov 2024 20:33:44 -0700 Subject: [PATCH 0643/1027] vault backup: 2024-11-16 20:33:44 --- education/english/ENGL2010/Engl2010 Writing Project.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/education/english/ENGL2010/Engl2010 Writing Project.md b/education/english/ENGL2010/Engl2010 Writing Project.md index a2ff00f..b27ba90 100644 --- a/education/english/ENGL2010/Engl2010 Writing Project.md +++ b/education/english/ENGL2010/Engl2010 Writing Project.md @@ -126,4 +126,5 @@ - Groupthink is a real issue that can occur within safe spaces. - People in marginalized groups have to face the feeling that society wasn't really designed for them, whereas people in dominant groups don't face that experience. -# The tools of Campus Activists are being turned against them \ No newline at end of file +# How Safe Spaces Contribute to Mental Health +- The term safe space is broadly used to describe designated areas or communities \ No newline at end of file From 4e8b44c0b15ef3809475fb69f1ba1d2b6580ae94 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Mon, 18 Nov 2024 11:00:09 -0700 Subject: [PATCH 0644/1027] vault backup: 2024-11-18 11:00:09 --- Ch 16 exericses.md | 1 - Law of Cosines.md | 0 2 files changed, 1 deletion(-) create mode 100644 Law of Cosines.md diff --git a/Ch 16 exericses.md b/Ch 16 exericses.md index fa0ca5d..cc67e57 100644 --- a/Ch 16 exericses.md +++ b/Ch 16 exericses.md @@ -1,4 +1,3 @@ -> 1 Yes they are, different structs can have the same field names. diff --git a/Law of Cosines.md b/Law of Cosines.md new file mode 100644 index 0000000..e69de29 From 1e91beb6314ee372ecd8a68fc935e3be438977c3 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Mon, 18 Nov 2024 11:05:09 -0700 Subject: [PATCH 0645/1027] vault backup: 2024-11-18 11:05:09 --- Law of Cosines.md | 0 education/math/MATH1060 (trig)/Law of Cosines.md | 6 ++++++ .../software development/ECE1400/Ch 16 exericses.md | 0 3 files changed, 6 insertions(+) delete mode 100644 Law of Cosines.md create mode 100644 education/math/MATH1060 (trig)/Law of Cosines.md rename Ch 16 exericses.md => education/software development/ECE1400/Ch 16 exericses.md (100%) diff --git a/Law of Cosines.md b/Law of Cosines.md deleted file mode 100644 index e69de29..0000000 diff --git a/education/math/MATH1060 (trig)/Law of Cosines.md b/education/math/MATH1060 (trig)/Law of Cosines.md new file mode 100644 index 0000000..ef92c84 --- /dev/null +++ b/education/math/MATH1060 (trig)/Law of Cosines.md @@ -0,0 +1,6 @@ +The Law of Cosines is useful when solving for SAS or SSS triangles. +$$ a^2 = b^2 + c^2 -2bc\cos(\alpha) $$ +$$ b^2 = a^2 + c^2 -2ac\cos(\beta) $$ +$$ c^2 = a^2 + b^2 -2ab\cos(\gamma) $$ +- When using the Law of Cosines to solve for SSS triangles, start solving for the largest angle. +- When correctly solved, the smallest angle will be opposite the smallest side, and the largest angle will be opposite the largest side. \ No newline at end of file diff --git a/Ch 16 exericses.md b/education/software development/ECE1400/Ch 16 exericses.md similarity index 100% rename from Ch 16 exericses.md rename to education/software development/ECE1400/Ch 16 exericses.md From 450f6c42280373a0a1b0c74f26d08ae4182ee058 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 19 Nov 2024 12:12:21 -0700 Subject: [PATCH 0646/1027] vault backup: 2024-11-19 12:12:21 --- education/nutrition/Misc.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/education/nutrition/Misc.md b/education/nutrition/Misc.md index 85afad7..bfa4394 100644 --- a/education/nutrition/Misc.md +++ b/education/nutrition/Misc.md @@ -3,7 +3,7 @@ - Water is the major nutrient in most foods. - All foods have *some* nutritional value - Some food is healthier than others - * **Nutrient dense** food supplies more vitamins and minerals in relation to total calories. Examples inclue: + * **Nutrient dense** food supplies more vitamins and minerals in relation to total calories. Examples include: * Broccoli * Leafy greans * Fat free milk From 3c8bba0d8ff0f1c3b651a21c876f761330e33e44 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 19 Nov 2024 12:22:21 -0700 Subject: [PATCH 0647/1027] vault backup: 2024-11-19 12:22:21 --- education/nutrition/Water.md | 1 + 1 file changed, 1 insertion(+) diff --git a/education/nutrition/Water.md b/education/nutrition/Water.md index 5c4c1a8..d65f2f2 100644 --- a/education/nutrition/Water.md +++ b/education/nutrition/Water.md @@ -2,6 +2,7 @@ - Lean muscle contains more water (73$ - Fat tissue contains less water (20%) - For a healthy person, water intake equals water outtake +- For every pound of water weight lost, you should intake two cups of fluid. # Functions - Is a solvent From b4645c291f29022b2b02f0683e20702e58fe4179 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 19 Nov 2024 12:27:21 -0700 Subject: [PATCH 0648/1027] vault backup: 2024-11-19 12:27:21 --- education/nutrition/Minerals.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/education/nutrition/Minerals.md b/education/nutrition/Minerals.md index d23162c..a8aff40 100644 --- a/education/nutrition/Minerals.md +++ b/education/nutrition/Minerals.md @@ -1,2 +1,12 @@ - Major minerals are essential mineral elements required in amounts of **100mg or more per day** -- Trace minerals are essential mineral elements required in amounts that are **less than 100mg per day** \ No newline at end of file + +# Trace Minerals +- Trace minerals are essential mineral elements required in amounts that are **less than 100mg per day** +- They still perform vital roles +- Obtaining adequate amounts of them from food is difficult +- **Iron** is the most important trace mineral + - Iron has 4 major roles: + 1. **Oxygen transport** - Needed for production of hemoglobin (red blood cells), myoglobin (muscle cells), and cytochromes (most body cells) + 2. Cell division - Required by an enzyme needed for DNA production + 3. Immune system - Needed for production of lymphocytes (a type of white blood cell). Enables neutrophils (another type of white blood cell) to destroy bacteria + 4. Nervous system - Needed to help maintain the myelin sheath that covers parts of certain nerve cells, needed for the production of neurotransmitters (eg, dopamine, epinephrine, and norepinephrine that regulate br) \ No newline at end of file From fb9dd21b96db4f63102d2ec11d79d982626bc869 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 19 Nov 2024 12:32:21 -0700 Subject: [PATCH 0649/1027] vault backup: 2024-11-19 12:32:21 --- education/nutrition/Minerals.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/education/nutrition/Minerals.md b/education/nutrition/Minerals.md index a8aff40..28e8372 100644 --- a/education/nutrition/Minerals.md +++ b/education/nutrition/Minerals.md @@ -9,4 +9,11 @@ 1. **Oxygen transport** - Needed for production of hemoglobin (red blood cells), myoglobin (muscle cells), and cytochromes (most body cells) 2. Cell division - Required by an enzyme needed for DNA production 3. Immune system - Needed for production of lymphocytes (a type of white blood cell). Enables neutrophils (another type of white blood cell) to destroy bacteria - 4. Nervous system - Needed to help maintain the myelin sheath that covers parts of certain nerve cells, needed for the production of neurotransmitters (eg, dopamine, epinephrine, and norepinephrine that regulate br) \ No newline at end of file + 4. Nervous system - Needed to help maintain the myelin sheath that covers parts of certain nerve cells, needed for the production of neurotransmitters (eg, dopamine, epinephrine, and norepinephrine that regulate brain and muscle activity). + - **Heme** is the iron-containing component of hemoglobin and myoglobin. Heme is a type of iron found in our food, food sources provide both heme iron and non-heme iron. + - **Hemoglobin** is the iron-containing protein in red blood cells that transports oxygen **to** cells, and carbon dioxide **away** from tissues. + - Myoglobin is the iron containing protein in red muscle cells that controls oxygen uptake from red blood cells + - Cytochromes are a group of proteins necessary for certain chemical reactions involved in the release of energy from macronutrients + - Heme iron is the form of iron found in meat, and it's absorbed efficiently + - Nonheme iron is a form of iron that's not absorbed as efficiently as heme iron + - Meat, vegtables, grains, supplements, and foritifed or enriched foods \ No newline at end of file From c15919b524b4ac77f2ba8a2e5a5820d1ccfd4a96 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 19 Nov 2024 12:37:21 -0700 Subject: [PATCH 0650/1027] vault backup: 2024-11-19 12:37:21 --- education/nutrition/Minerals.md | 35 +++++++++++++++++++++------------ 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/education/nutrition/Minerals.md b/education/nutrition/Minerals.md index 28e8372..c4bd632 100644 --- a/education/nutrition/Minerals.md +++ b/education/nutrition/Minerals.md @@ -4,16 +4,25 @@ - Trace minerals are essential mineral elements required in amounts that are **less than 100mg per day** - They still perform vital roles - Obtaining adequate amounts of them from food is difficult -- **Iron** is the most important trace mineral - - Iron has 4 major roles: - 1. **Oxygen transport** - Needed for production of hemoglobin (red blood cells), myoglobin (muscle cells), and cytochromes (most body cells) - 2. Cell division - Required by an enzyme needed for DNA production - 3. Immune system - Needed for production of lymphocytes (a type of white blood cell). Enables neutrophils (another type of white blood cell) to destroy bacteria - 4. Nervous system - Needed to help maintain the myelin sheath that covers parts of certain nerve cells, needed for the production of neurotransmitters (eg, dopamine, epinephrine, and norepinephrine that regulate brain and muscle activity). - - **Heme** is the iron-containing component of hemoglobin and myoglobin. Heme is a type of iron found in our food, food sources provide both heme iron and non-heme iron. - - **Hemoglobin** is the iron-containing protein in red blood cells that transports oxygen **to** cells, and carbon dioxide **away** from tissues. - - Myoglobin is the iron containing protein in red muscle cells that controls oxygen uptake from red blood cells - - Cytochromes are a group of proteins necessary for certain chemical reactions involved in the release of energy from macronutrients - - Heme iron is the form of iron found in meat, and it's absorbed efficiently - - Nonheme iron is a form of iron that's not absorbed as efficiently as heme iron - - Meat, vegtables, grains, supplements, and foritifed or enriched foods \ No newline at end of file +## Iron +**Iron** is the most important trace mineral +- Iron has 4 major roles: + 1. **Oxygen transport** - Needed for production of hemoglobin (red blood cells), myoglobin (muscle cells), and cytochromes (most body cells) + 2. Cell division - Required by an enzyme needed for DNA production + 3. Immune system - Needed for production of lymphocytes (a type of white blood cell). Enables neutrophils (another type of white blood cell) to destroy bacteria + 4. Nervous system - Needed to help maintain the myelin sheath that covers parts of certain nerve cells, needed for the production of neurotransmitters (eg, dopamine, epinephrine, and norepinephrine that regulate brain and muscle activity). +- **Heme** is the iron-containing component of hemoglobin and myoglobin. Heme is a type of iron found in our food, food sources provide both heme iron and non-heme iron. +- **Hemoglobin** is the iron-containing protein in red blood cells that transports oxygen **to** cells, and carbon dioxide **away** from tissues. +- Myoglobin is the iron containing protein in red muscle cells that controls oxygen uptake from red blood cells +- Cytochromes are a group of proteins necessary for certain chemical reactions involved in the release of energy from macronutrients +- Heme iron is the form of iron found in meat, and it's absorbed efficiently +- Non-heme iron is a form of iron that's not absorbed as efficiently as heme iron + - Meat, vegetables, grains, supplements, and fortified or enriched foods + - To increase bioavailability, cook veggies in a cast iron pan with tomatoes or lemon juice (acid) + - Enriched foods are enriched with **non-heme** iron + +Iron bioavailability +- Vitamin C - high intake of calcium with iron containing food +- Heme iron - Medications that reduce stomach acidity +- Leavening of bread - Oxalic acid from foods such as spinach +- Fermentation - Phytic acid from foods such as whole grains From e69b5e9365af07fa1612feb888c25a20f91f9908 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 19 Nov 2024 12:42:21 -0700 Subject: [PATCH 0651/1027] vault backup: 2024-11-19 12:42:21 --- education/nutrition/Minerals.md | 6 ++++++ education/nutrition/Water.md | 12 ++++++------ 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/education/nutrition/Minerals.md b/education/nutrition/Minerals.md index c4bd632..4bd17fd 100644 --- a/education/nutrition/Minerals.md +++ b/education/nutrition/Minerals.md @@ -1,3 +1,5 @@ +# Major Minerals +Miner - Major minerals are essential mineral elements required in amounts of **100mg or more per day** # Trace Minerals @@ -26,3 +28,7 @@ Iron bioavailability - Heme iron - Medications that reduce stomach acidity - Leavening of bread - Oxalic acid from foods such as spinach - Fermentation - Phytic acid from foods such as whole grains +- Soaking beans or grains - Soy protein such as tofu + +## Iron + diff --git a/education/nutrition/Water.md b/education/nutrition/Water.md index d65f2f2..b4e368f 100644 --- a/education/nutrition/Water.md +++ b/education/nutrition/Water.md @@ -31,9 +31,9 @@ - No tears - Sunken eyes - If not corrected, dehydration can lead to death -# Hyponatremia -- Water intoxication is a condition that occurs when too much water is consumed in a short period of time or kidneys can't filter water from blood - - Excess water dilutes sodium concentration of blood - - Results in hyponatremia - - Low blood sodium - - Symptoms: confusion, dizziness, headache, can lead to death \ No newline at end of file +# Water intoxication +Water intoxication is a condition that occurs when too much water is consumed in a short period of time or kidneys can't filter water from blood +- Excess water dilutes sodium concentration of blood +- Results in **hyponatremia** + - Low blood sodium +- Symptoms: confusion, dizziness, headache, can lead to death \ No newline at end of file From 3329ef62f5bfd61ca82da9a9f6dd59a64927a157 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 19 Nov 2024 12:47:21 -0700 Subject: [PATCH 0652/1027] vault backup: 2024-11-19 12:47:21 --- education/nutrition/Minerals.md | 11 +++++++++-- education/nutrition/Vitamins.md | 2 +- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/education/nutrition/Minerals.md b/education/nutrition/Minerals.md index 4bd17fd..7842c2f 100644 --- a/education/nutrition/Minerals.md +++ b/education/nutrition/Minerals.md @@ -1,5 +1,5 @@ +Minerals are inorganic, and **NOT** susceptible to degradation. Like vitamins, they provide 0 kcals per per gram # Major Minerals -Miner - Major minerals are essential mineral elements required in amounts of **100mg or more per day** # Trace Minerals @@ -30,5 +30,12 @@ Iron bioavailability - Fermentation - Phytic acid from foods such as whole grains - Soaking beans or grains - Soy protein such as tofu -## Iron +## Iron Toxicity +- **Hereditary hemochromatosis (HH)** is an inherited genetic defect that causes people to absorb too much iron +- Iron accumulates in tissues and can cause joint pain, abnormal bronze skin color, damage to the liver, heart, adrenal glands, and pancreas +- Organ damage caused by hemochromatosis can lead to cirrhosis, liver cancer, diabetes, or *cardiac arrhythmias (irregular heartbeats)* +- Common signs and symptoms include fatigue, lack of energy, abdominal pain, loss of sex drive, and heart problems +- Can be deadly if untreated + +### Iron Deficiency diff --git a/education/nutrition/Vitamins.md b/education/nutrition/Vitamins.md index 9c58055..6694bae 100644 --- a/education/nutrition/Vitamins.md +++ b/education/nutrition/Vitamins.md @@ -1,4 +1,4 @@ -Vitamins were first discovered in 1921 +Vitamins were first discovered in 1921, and are an organic nutrient - Casamir Runk coined the term vitamin - Vita = life - Amine = a type of nitrogen containing substance From 99e8593199e76e718deacee5609445eb5e306379 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 19 Nov 2024 12:52:21 -0700 Subject: [PATCH 0653/1027] vault backup: 2024-11-19 12:52:21 --- education/nutrition/Minerals.md | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/education/nutrition/Minerals.md b/education/nutrition/Minerals.md index 7842c2f..223ef53 100644 --- a/education/nutrition/Minerals.md +++ b/education/nutrition/Minerals.md @@ -38,4 +38,17 @@ Iron bioavailability - Can be deadly if untreated ### Iron Deficiency - +Anemia is the deficiency disorder caused by iron efficiency +- After red blood cells die, the body breaks them down and conserves most of the iron that was in hemoglobin +- Some iron is lost each day via the gastrointestinal tract, urine, skin, or any form of bleeding +- **Iron deficiency** refers to low iron stores in the body, and **iron deficiency is the most common nutrient deficiency in the US**. +- Anemic red blood cells can shrink, becoming pale, and misshapen +- Negative effects of iron deficiency anemia include interference with + - Growth + - Behavior + - Immune system function + - Energy metabolism +- Signs and symptoms of iron deficiency include: + - Pale skin and pale mucous membranes + - Fatigue and weakness + - Irritabilit From f0e5fbd5ccc83d0fae39422b07f76e634ece055d Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 19 Nov 2024 12:57:21 -0700 Subject: [PATCH 0654/1027] vault backup: 2024-11-19 12:57:21 --- education/nutrition/Minerals.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/education/nutrition/Minerals.md b/education/nutrition/Minerals.md index 223ef53..1415b5c 100644 --- a/education/nutrition/Minerals.md +++ b/education/nutrition/Minerals.md @@ -51,4 +51,8 @@ Anemia is the deficiency disorder caused by iron efficiency - Signs and symptoms of iron deficiency include: - Pale skin and pale mucous membranes - Fatigue and weakness - - Irritabilit + - Irritability + - Shortness of breath + - Brittle, cupped nails + - Decreased appetite + - Headache From 67562c24a2b5fcc0d464008b349f4cf50d24351b Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 19 Nov 2024 13:02:21 -0700 Subject: [PATCH 0655/1027] vault backup: 2024-11-19 13:02:21 --- education/nutrition/Minerals.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/education/nutrition/Minerals.md b/education/nutrition/Minerals.md index 1415b5c..6c36a08 100644 --- a/education/nutrition/Minerals.md +++ b/education/nutrition/Minerals.md @@ -56,3 +56,10 @@ Anemia is the deficiency disorder caused by iron efficiency - Brittle, cupped nails - Decreased appetite - Headache + +## Iodine +- Iodide is the form of iodine that the boy absorbs and uses +- **Goiter** is the enlargement of the thyroid gland that is **not** the result of cancer + - Often occurs among populations living in areas that lack iodine in locally produced foods +- Iodine is required for **normal thyroid functions** and the production of thyroid hormone +- Hyperthyroidism refers to abnormally high blood levels of thyroid hormone \ No newline at end of file From 21a02793484e61c49704328db0630c7d8dcb127b Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 19 Nov 2024 13:07:21 -0700 Subject: [PATCH 0656/1027] vault backup: 2024-11-19 13:07:21 --- education/nutrition/Minerals.md | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/education/nutrition/Minerals.md b/education/nutrition/Minerals.md index 6c36a08..ea29b4b 100644 --- a/education/nutrition/Minerals.md +++ b/education/nutrition/Minerals.md @@ -62,4 +62,18 @@ Anemia is the deficiency disorder caused by iron efficiency - **Goiter** is the enlargement of the thyroid gland that is **not** the result of cancer - Often occurs among populations living in areas that lack iodine in locally produced foods - Iodine is required for **normal thyroid functions** and the production of thyroid hormone -- Hyperthyroidism refers to abnormally high blood levels of thyroid hormone \ No newline at end of file +- Hyperthyroidism refers to abnormally high blood levels of thyroid hormone +- Hypothyroidism refers to low levels of thyroid hormone +- Signs and symptoms include: + - Reduced metabolism + - Elevated blood cholesterol levels + - **Cretinism** is a condition in infants who are born to iodine-deficient women. The infants have permanent brain damage and growth retardation + - Iodine deficiency is the most common cause of preventable intellectual disability worldwide + +## Zinc +Zinc is necessary for: +- Growth and development +- Wound healing +- Sense of taste and smell +- DNA synthesis +- Proper functioning of the nervous and immune system \ No newline at end of file From d35fb4f30454ec51c0c985e32c888cc3567466ca Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 19 Nov 2024 13:24:02 -0700 Subject: [PATCH 0657/1027] vault backup: 2024-11-19 13:24:02 --- education/nutrition/Minerals.md | 35 ++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/education/nutrition/Minerals.md b/education/nutrition/Minerals.md index ea29b4b..40af628 100644 --- a/education/nutrition/Minerals.md +++ b/education/nutrition/Minerals.md @@ -76,4 +76,37 @@ Zinc is necessary for: - Wound healing - Sense of taste and smell - DNA synthesis -- Proper functioning of the nervous and immune system \ No newline at end of file +- Proper functioning of the nervous and immune system +- Oysters are one of the best sources of Zinc + +### Zinc Toxicity +- Excess of the UL -> Decreases HDL levels +- Even higher can cause: + - Diarrhea + - Cramps + - Nausea + - Vomiting + - Decreased immune function + - Interfere with copper absorption and metabolism +### Zinc Deficiency +- loss of appetite +- Diarrhea +- Hair loss +- Skin rash +- Poor wound healing +- Impaired sense of taste +- Mental slowness +- Iron deficiency anemia +- Poor growth and development + +# Selenium +- Antioxidant + +# Fluoride +Fluoride is not considered an essential nutrient +- Regular fluoride intake helps: + - Mineralize teeth and bones + - Presents tooth decay + +### Fluoride Toxicity +- Dental fluorosis is an abnormal change in the appearance of tooth enamel due to chroncially high fluoride exposure during tooth development From eecd4ba098e01b6c7d5c3a802546e6619edbb885 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 19 Nov 2024 13:55:06 -0700 Subject: [PATCH 0658/1027] vault backup: 2024-11-19 13:55:06 --- .../ECE1400/{Ch 16 exericses.md => Chapter 16 Exercises.md} | 0 education/software development/ECE1400/Chapter 17 Exercises.md | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename education/software development/ECE1400/{Ch 16 exericses.md => Chapter 16 Exercises.md} (100%) create mode 100644 education/software development/ECE1400/Chapter 17 Exercises.md diff --git a/education/software development/ECE1400/Ch 16 exericses.md b/education/software development/ECE1400/Chapter 16 Exercises.md similarity index 100% rename from education/software development/ECE1400/Ch 16 exericses.md rename to education/software development/ECE1400/Chapter 16 Exercises.md diff --git a/education/software development/ECE1400/Chapter 17 Exercises.md b/education/software development/ECE1400/Chapter 17 Exercises.md new file mode 100644 index 0000000..e69de29 From 8ffad9760738c8b1ed6e73332bdbe1648898b3d3 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 19 Nov 2024 14:05:06 -0700 Subject: [PATCH 0659/1027] vault backup: 2024-11-19 14:05:06 --- .../ECE1400/Chapter 17 Exercises.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/education/software development/ECE1400/Chapter 17 Exercises.md b/education/software development/ECE1400/Chapter 17 Exercises.md index e69de29..bce3cde 100644 --- a/education/software development/ECE1400/Chapter 17 Exercises.md +++ b/education/software development/ECE1400/Chapter 17 Exercises.md @@ -0,0 +1,18 @@ +> **1.** Having to check the return function of `malloc` (or any other memory allocation function) each time we call it can be an annoyance. Write a function named `my_malloc` that serves as a "wrapper" for `malloc`. When we call `my_malloc` and ask it to allocate `n` bytes, it in turn calls `malloc`, tests to make sure that `malloc` doesn't return a null pointer, then returns the pointer from `malloc`. Have `my_malloc` print an error message and terminate the program if `malloc` returns a null pointer. + +```c +void *my_malloc(size_t n) { + void *p = malloc(n); + if (p == NULL) { + printf("Failed to allocate memory"); + exit(EXIT_FAILURE); + } + return p; +} +``` + +--- + +> **2.** + + From c4e36ab80453aa83d979afb473d56d9f73ae2551 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 19 Nov 2024 14:10:06 -0700 Subject: [PATCH 0660/1027] vault backup: 2024-11-19 14:10:06 --- .../ECE1400/Chapter 17 Exercises.md | 20 +++++-------------- 1 file changed, 5 insertions(+), 15 deletions(-) diff --git a/education/software development/ECE1400/Chapter 17 Exercises.md b/education/software development/ECE1400/Chapter 17 Exercises.md index bce3cde..9f71533 100644 --- a/education/software development/ECE1400/Chapter 17 Exercises.md +++ b/education/software development/ECE1400/Chapter 17 Exercises.md @@ -1,18 +1,8 @@ -> **1.** Having to check the return function of `malloc` (or any other memory allocation function) each time we call it can be an annoyance. Write a function named `my_malloc` that serves as a "wrapper" for `malloc`. When we call `my_malloc` and ask it to allocate `n` bytes, it in turn calls `malloc`, tests to make sure that `malloc` doesn't return a null pointer, then returns the pointer from `malloc`. Have `my_malloc` print an error message and terminate the program if `malloc` returns a null pointer. - +> **4.** Suppose that the following declarations are in effect: ```c -void *my_malloc(size_t n) { - void *p = malloc(n); - if (p == NULL) { - printf("Failed to allocate memory"); - exit(EXIT_FAILURE); - } - return p; -} +struct point {int x, y; }; +struct rectangle { struct point upper_left, lower_right; }; +struct rectangle *p; ``` - ---- - -> **2.** - +> Assume that we want `p` to point to a rectangle structure whose upper left corner is at $(10, 25)$, and whose lower right corner is at $(20, 15)$. Write a series of statements that allocate such a structure and initialize it as indicated. From 5484db6823fb1d31b638cfef5cd80204ac3fe029 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 19 Nov 2024 14:15:06 -0700 Subject: [PATCH 0661/1027] vault backup: 2024-11-19 14:15:06 --- .../software development/ECE1400/Chapter 17 Exercises.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/education/software development/ECE1400/Chapter 17 Exercises.md b/education/software development/ECE1400/Chapter 17 Exercises.md index 9f71533..c970b07 100644 --- a/education/software development/ECE1400/Chapter 17 Exercises.md +++ b/education/software development/ECE1400/Chapter 17 Exercises.md @@ -6,3 +6,9 @@ struct rectangle *p; ``` > Assume that we want `p` to point to a rectangle structure whose upper left corner is at $(10, 25)$, and whose lower right corner is at $(20, 15)$. Write a series of statements that allocate such a structure and initialize it as indicated. +```c +struct rectangle rect = { { 10, 25 }, { 20, 15 } }; +p = ▭ +``` + +--- From a036bfb790861e4ffe7e6a4ad224f588450c7d4d Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 19 Nov 2024 14:20:06 -0700 Subject: [PATCH 0662/1027] vault backup: 2024-11-19 14:20:06 --- .../ECE1400/Chapter 17 Exercises.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/education/software development/ECE1400/Chapter 17 Exercises.md b/education/software development/ECE1400/Chapter 17 Exercises.md index c970b07..bb3a09a 100644 --- a/education/software development/ECE1400/Chapter 17 Exercises.md +++ b/education/software development/ECE1400/Chapter 17 Exercises.md @@ -12,3 +12,14 @@ p = ▭ ``` --- + +> **5.** Suppose that `f` and `p` are declared as follows: +```c +struct { + union { + char a, b; + int c; + } d; + int e[5]; +} f, *p = &f; +``` \ No newline at end of file From d5d9a922db8a15857c4c303c302512248086a94b Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 19 Nov 2024 14:25:06 -0700 Subject: [PATCH 0663/1027] vault backup: 2024-11-19 14:25:06 --- .../software development/ECE1400/Chapter 17 Exercises.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/education/software development/ECE1400/Chapter 17 Exercises.md b/education/software development/ECE1400/Chapter 17 Exercises.md index bb3a09a..78dd595 100644 --- a/education/software development/ECE1400/Chapter 17 Exercises.md +++ b/education/software development/ECE1400/Chapter 17 Exercises.md @@ -22,4 +22,10 @@ struct { } d; int e[5]; } f, *p = &f; -``` \ No newline at end of file +``` +> Which of the following statements are legal? + +(a) `p->b = ' ';` +(b) `p->e[3] = 10;` +(c) `(*p).d.a = '*';` +(d) `p->d->c = 20;` \ No newline at end of file From 743e1a320d542eea513482eae25020e2c409fd97 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 19 Nov 2024 20:57:20 -0700 Subject: [PATCH 0664/1027] vault backup: 2024-11-19 20:57:20 --- .../ECE1400/Chapter 17 Exercises.md | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/education/software development/ECE1400/Chapter 17 Exercises.md b/education/software development/ECE1400/Chapter 17 Exercises.md index 78dd595..4d0498c 100644 --- a/education/software development/ECE1400/Chapter 17 Exercises.md +++ b/education/software development/ECE1400/Chapter 17 Exercises.md @@ -26,6 +26,16 @@ struct { > Which of the following statements are legal? (a) `p->b = ' ';` -(b) `p->e[3] = 10;` -(c) `(*p).d.a = '*';` -(d) `p->d->c = 20;` \ No newline at end of file +(b) `p->e[3] = 10;` - **Legal** +(c) `(*p).d.a = '*';` - **Legal** +(d) `p->d->c = 20;` + +--- + +> **7.** The following loop is supposed to delete all nodes from a linked list and release the memory that they occupy. Unfortunately, the loop is incorrect. Explain what's wrong with it and show how to fix the bug. +```c +for (p = first; p != NULL; p = p->next) + free(p); +``` + +The above loop won't function because it deallocates an entry, resulting \ No newline at end of file From 35c54292c811a407864ea028f5485a58dd651320 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 19 Nov 2024 21:02:30 -0700 Subject: [PATCH 0665/1027] vault backup: 2024-11-19 21:02:30 --- .../software development/ECE1400/Chapter 17 Exercises.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/education/software development/ECE1400/Chapter 17 Exercises.md b/education/software development/ECE1400/Chapter 17 Exercises.md index 4d0498c..e57b3a3 100644 --- a/education/software development/ECE1400/Chapter 17 Exercises.md +++ b/education/software development/ECE1400/Chapter 17 Exercises.md @@ -38,4 +38,10 @@ for (p = first; p != NULL; p = p->next) free(p); ``` -The above loop won't function because it deallocates an entry, resulting \ No newline at end of file +The above loop won't function because it deallocates the entry, then attempts to access the pointer to the next item, *after* it's already been freed. + +A functional example might look like this: +```c +struct entry* p = first; + +``` \ No newline at end of file From a5ad33523fa13746fc3c804e945a380777e30a9e Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 19 Nov 2024 21:26:03 -0700 Subject: [PATCH 0666/1027] vault backup: 2024-11-19 21:26:03 --- .../ECE1400/Chapter 17 Exercises.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/education/software development/ECE1400/Chapter 17 Exercises.md b/education/software development/ECE1400/Chapter 17 Exercises.md index e57b3a3..b1295c5 100644 --- a/education/software development/ECE1400/Chapter 17 Exercises.md +++ b/education/software development/ECE1400/Chapter 17 Exercises.md @@ -43,5 +43,13 @@ The above loop won't function because it deallocates the entry, then attempts to A functional example might look like this: ```c struct entry* p = first; +while (p != NULL) { + void *current = p; + p = p->next; + free(p); +} +``` -``` \ No newline at end of file +--- + +> **9.** True or false: If `x` is a structure and `a` is a member of that structure, then `(&x)->a` is the same as `x.a`. Justify your answer \ No newline at end of file From 59395f8e1c2c3a39f26d479a73174c5354c503da Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 19 Nov 2024 21:31:02 -0700 Subject: [PATCH 0667/1027] vault backup: 2024-11-19 21:31:02 --- .../software development/ECE1400/Chapter 17 Exercises.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/education/software development/ECE1400/Chapter 17 Exercises.md b/education/software development/ECE1400/Chapter 17 Exercises.md index b1295c5..16325d9 100644 --- a/education/software development/ECE1400/Chapter 17 Exercises.md +++ b/education/software development/ECE1400/Chapter 17 Exercises.md @@ -52,4 +52,10 @@ while (p != NULL) { --- -> **9.** True or false: If `x` is a structure and `a` is a member of that structure, then `(&x)->a` is the same as `x.a`. Justify your answer \ No newline at end of file +> **9.** True or false: If `x` is a structure and `a` is a member of that structure, then `(&x)->a` is the same as `x.a`. Justify your answer. + +**True**: The arrow operator is used to access a member of a struct through a pointer. `(&x)` creates a pointer to the `x` struct, therefore the arrow operator can be used to access fields on `x`. + +--- + +> **13.** \ No newline at end of file From 7661f4b835511a6344a72d59ac62ddd1aeb6359d Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 19 Nov 2024 21:44:36 -0700 Subject: [PATCH 0668/1027] vault backup: 2024-11-19 21:44:36 --- education/software development/ECE1400/Chapter 17 Exercises.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/education/software development/ECE1400/Chapter 17 Exercises.md b/education/software development/ECE1400/Chapter 17 Exercises.md index 16325d9..5149ff8 100644 --- a/education/software development/ECE1400/Chapter 17 Exercises.md +++ b/education/software development/ECE1400/Chapter 17 Exercises.md @@ -58,4 +58,4 @@ while (p != NULL) { --- -> **13.** \ No newline at end of file +> **13.** The following function is supposed to insert a new node into its proper place in an ordered list, returning a pointer to the first node in the modified list. Unfortunately \ No newline at end of file From b677e73bbe9c4d63157d256d5904c6d44c812402 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 19 Nov 2024 21:49:36 -0700 Subject: [PATCH 0669/1027] vault backup: 2024-11-19 21:49:36 --- .../ECE1400/Chapter 17 Exercises.md | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/education/software development/ECE1400/Chapter 17 Exercises.md b/education/software development/ECE1400/Chapter 17 Exercises.md index 5149ff8..53868b1 100644 --- a/education/software development/ECE1400/Chapter 17 Exercises.md +++ b/education/software development/ECE1400/Chapter 17 Exercises.md @@ -42,7 +42,7 @@ The above loop won't function because it deallocates the entry, then attempts to A functional example might look like this: ```c -struct entry* p = first; +struct entry *p = first; while (p != NULL) { void *current = p; p = p->next; @@ -58,4 +58,15 @@ while (p != NULL) { --- -> **13.** The following function is supposed to insert a new node into its proper place in an ordered list, returning a pointer to the first node in the modified list. Unfortunately \ No newline at end of file +> **13.** The following function is supposed to insert a new node into its proper place in an ordered list, returning a pointer to the first node in the modified list. Unfortunately, the function doesn't work correctly in all cases. Explain what's wrong with it and show how to fix it. Assume that the `node` structure is the one defined in Section 17.5. +```c +struct node *insert_into_ordered_list(struct node *list, struct node *new_node) { + struct node *cur = list, *prev = NULL; + while (cur->value <= new_node->value) { + + } + prev->next = new_node; + new_node->next = cur; + return list; +} +``` \ No newline at end of file From 9225582340de1679222ae5ce7aae49d8e7440e79 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 19 Nov 2024 21:54:36 -0700 Subject: [PATCH 0670/1027] vault backup: 2024-11-19 21:54:36 --- .../ECE1400/Chapter 17 Exercises.md | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/education/software development/ECE1400/Chapter 17 Exercises.md b/education/software development/ECE1400/Chapter 17 Exercises.md index 53868b1..78e449d 100644 --- a/education/software development/ECE1400/Chapter 17 Exercises.md +++ b/education/software development/ECE1400/Chapter 17 Exercises.md @@ -63,7 +63,22 @@ while (p != NULL) { struct node *insert_into_ordered_list(struct node *list, struct node *new_node) { struct node *cur = list, *prev = NULL; while (cur->value <= new_node->value) { - + prev = cur; + cur = cur->next; + } + prev->next = new_node; + new_node->next = cur; + return list; +} +``` + + +```c +struct node *insert_into_ordered_list(struct node *list, struct node *new_node) { + struct node *cur = list, *prev = NULL; + while (cur->value <= new_node->value) { + prev = cur; + cur = cur->next; } prev->next = new_node; new_node->next = cur; From a406845641e802ed102e85d59639127f97a157e3 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 19 Nov 2024 22:00:20 -0700 Subject: [PATCH 0671/1027] vault backup: 2024-11-19 22:00:20 --- education/software development/ECE1400/Chapter 17 Exercises.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/education/software development/ECE1400/Chapter 17 Exercises.md b/education/software development/ECE1400/Chapter 17 Exercises.md index 78e449d..1ebd569 100644 --- a/education/software development/ECE1400/Chapter 17 Exercises.md +++ b/education/software development/ECE1400/Chapter 17 Exercises.md @@ -72,7 +72,7 @@ struct node *insert_into_ordered_list(struct node *list, struct node *new_node) } ``` - +In the above code, if the new item needs to be ine ```c struct node *insert_into_ordered_list(struct node *list, struct node *new_node) { struct node *cur = list, *prev = NULL; From 56b77cc8ff6fb04623f5137b6839cb199c29ad47 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 19 Nov 2024 22:05:20 -0700 Subject: [PATCH 0672/1027] vault backup: 2024-11-19 22:05:20 --- .../software development/ECE1400/Chapter 17 Exercises.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/education/software development/ECE1400/Chapter 17 Exercises.md b/education/software development/ECE1400/Chapter 17 Exercises.md index 1ebd569..67adf53 100644 --- a/education/software development/ECE1400/Chapter 17 Exercises.md +++ b/education/software development/ECE1400/Chapter 17 Exercises.md @@ -72,11 +72,14 @@ struct node *insert_into_ordered_list(struct node *list, struct node *new_node) } ``` -In the above code, if the new item needs to be ine +In the above code, if the new item needs to be inserted at the *end* of the list, it breaks, because `cur` is set to `NULL`, then it attempts to access `cur->value`. ```c struct node *insert_into_ordered_list(struct node *list, struct node *new_node) { struct node *cur = list, *prev = NULL; while (cur->value <= new_node->value) { + if (cur->next == NULL) { + break; + } prev = cur; cur = cur->next; } From 1911f9cfef687fbe38d62eaadb8beec2424eda2c Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Tue, 19 Nov 2024 22:10:22 -0700 Subject: [PATCH 0673/1027] vault backup: 2024-11-19 22:10:22 --- .../software development/ECE1400/Chapter 17 Exercises.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/education/software development/ECE1400/Chapter 17 Exercises.md b/education/software development/ECE1400/Chapter 17 Exercises.md index 67adf53..6f3d402 100644 --- a/education/software development/ECE1400/Chapter 17 Exercises.md +++ b/education/software development/ECE1400/Chapter 17 Exercises.md @@ -77,11 +77,11 @@ In the above code, if the new item needs to be inserted at the *end* of the list struct node *insert_into_ordered_list(struct node *list, struct node *new_node) { struct node *cur = list, *prev = NULL; while (cur->value <= new_node->value) { + prev = cur; + cur = cur->next; if (cur->next == NULL) { break; } - prev = cur; - cur = cur->next; } prev->next = new_node; new_node->next = cur; From bd95038b9c6d85d3c5dffeb8f86fce1af479b114 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 20 Nov 2024 10:53:57 -0700 Subject: [PATCH 0674/1027] vault backup: 2024-11-20 10:53:57 --- education/nutrition/Minerals.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/education/nutrition/Minerals.md b/education/nutrition/Minerals.md index 40af628..2187c67 100644 --- a/education/nutrition/Minerals.md +++ b/education/nutrition/Minerals.md @@ -23,7 +23,15 @@ Minerals are inorganic, and **NOT** susceptible to degradation. Like vitamins, t - To increase bioavailability, cook veggies in a cast iron pan with tomatoes or lemon juice (acid) - Enriched foods are enriched with **non-heme** iron -Iron bioavailability +| Improve | Harm | +| ---------------------------------------------------------- | ------------------------------------------------ | +| High intake of vitamin C with iron-containing food | High intake of calcium with iron-containing food | +| Consuming more heme, as compared to nonheme, forms of iron | Medications that reduce stomach acidity | +| Consuming bread that has been leavened | Oxalic acids from foods such as spinach | +| Consuming iron-containing foods that are fermentted | Phytic acid from foods such as whole grains | +| Soaking of beans or grains before consuming | Soy proteins from foods such as tofu | +| | Polyphenols from food and beverages such as tea | + - Vitamin C - high intake of calcium with iron containing food - Heme iron - Medications that reduce stomach acidity - Leavening of bread - Oxalic acid from foods such as spinach From 3777c8a9fb87eadf78b9fe320001b22d8dea6385 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 20 Nov 2024 10:58:57 -0700 Subject: [PATCH 0675/1027] vault backup: 2024-11-20 10:58:57 --- education/nutrition/Minerals.md | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/education/nutrition/Minerals.md b/education/nutrition/Minerals.md index 2187c67..5cb8751 100644 --- a/education/nutrition/Minerals.md +++ b/education/nutrition/Minerals.md @@ -15,9 +15,9 @@ Minerals are inorganic, and **NOT** susceptible to degradation. Like vitamins, t 4. Nervous system - Needed to help maintain the myelin sheath that covers parts of certain nerve cells, needed for the production of neurotransmitters (eg, dopamine, epinephrine, and norepinephrine that regulate brain and muscle activity). - **Heme** is the iron-containing component of hemoglobin and myoglobin. Heme is a type of iron found in our food, food sources provide both heme iron and non-heme iron. - **Hemoglobin** is the iron-containing protein in red blood cells that transports oxygen **to** cells, and carbon dioxide **away** from tissues. -- Myoglobin is the iron containing protein in red muscle cells that controls oxygen uptake from red blood cells -- Cytochromes are a group of proteins necessary for certain chemical reactions involved in the release of energy from macronutrients -- Heme iron is the form of iron found in meat, and it's absorbed efficiently +- **Myoglobin** is the iron containing protein in red **muscle cells** that controls oxygen uptake from red blood cells +- **Cytochromes** are a group of proteins necessary for certain chemical reactions involved in the release of energy from macronutrients +- Heme iron is the form of iron **found in meat**, and it's absorbed efficiently - Non-heme iron is a form of iron that's not absorbed as efficiently as heme iron - Meat, vegetables, grains, supplements, and fortified or enriched foods - To increase bioavailability, cook veggies in a cast iron pan with tomatoes or lemon juice (acid) @@ -31,12 +31,9 @@ Minerals are inorganic, and **NOT** susceptible to degradation. Like vitamins, t | Consuming iron-containing foods that are fermentted | Phytic acid from foods such as whole grains | | Soaking of beans or grains before consuming | Soy proteins from foods such as tofu | | | Polyphenols from food and beverages such as tea | +The RDA for men and postmenopausal women is **8 mg/day**, and for premenopausal women, it's **18 mg/day**. -- Vitamin C - high intake of calcium with iron containing food -- Heme iron - Medications that reduce stomach acidity -- Leavening of bread - Oxalic acid from foods such as spinach -- Fermentation - Phytic acid from foods such as whole grains -- Soaking beans or grains - Soy protein such as tofu +Iron intake for adolescent females is significantly higher because of increased iron needs to support growth, and iron losses due to menstruation. Iron deficiency in this demographic is exacerbated by poor dietary choices. ## Iron Toxicity - **Hereditary hemochromatosis (HH)** is an inherited genetic defect that causes people to absorb too much iron From d4325eb5282bdee17da82782ba445774acfa2788 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 20 Nov 2024 11:03:57 -0700 Subject: [PATCH 0676/1027] vault backup: 2024-11-20 11:03:57 --- education/nutrition/Minerals.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/education/nutrition/Minerals.md b/education/nutrition/Minerals.md index 5cb8751..af47f2d 100644 --- a/education/nutrition/Minerals.md +++ b/education/nutrition/Minerals.md @@ -61,9 +61,20 @@ Anemia is the deficiency disorder caused by iron efficiency - Brittle, cupped nails - Decreased appetite - Headache +- Over time, anemia can cause: + - Chest pain + - An enlarged heart + - Irregular heartbeat ## Iodine - Iodide is the form of iodine that the boy absorbs and uses +- Sources of iodine include: + - Seaweed + - Saltwater fish + - Grains + - Cow's milk + - Eggs + - Iodized salt - **Goiter** is the enlargement of the thyroid gland that is **not** the result of cancer - Often occurs among populations living in areas that lack iodine in locally produced foods - Iodine is required for **normal thyroid functions** and the production of thyroid hormone @@ -73,6 +84,7 @@ Anemia is the deficiency disorder caused by iron efficiency - Reduced metabolism - Elevated blood cholesterol levels - **Cretinism** is a condition in infants who are born to iodine-deficient women. The infants have permanent brain damage and growth retardation + - The fetus of a female who is deficient in iodine is likely to be born with a condition called **congenital hypothyroidism** - Iodine deficiency is the most common cause of preventable intellectual disability worldwide ## Zinc @@ -81,8 +93,10 @@ Zinc is necessary for: - Wound healing - Sense of taste and smell - DNA synthesis +- Cofactor for more than 50 enzymes - Proper functioning of the nervous and immune system - Oysters are one of the best sources of Zinc +The bioavailability of zinc is enhanced when eaten with ### Zinc Toxicity - Excess of the UL -> Decreases HDL levels From 8fdb1c61bfa1e06970c9000a4a8afaca5610e700 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Wed, 20 Nov 2024 11:08:57 -0700 Subject: [PATCH 0677/1027] vault backup: 2024-11-20 11:08:57 --- education/nutrition/Minerals.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/education/nutrition/Minerals.md b/education/nutrition/Minerals.md index af47f2d..a5fa6a2 100644 --- a/education/nutrition/Minerals.md +++ b/education/nutrition/Minerals.md @@ -96,7 +96,8 @@ Zinc is necessary for: - Cofactor for more than 50 enzymes - Proper functioning of the nervous and immune system - Oysters are one of the best sources of Zinc -The bioavailability of zinc is enhanced when eaten with +- Other sources include whole grains, baked beans, beef roast, crab, yogurt, turkey, and soybeans +The bioavailability of zinc is enhanced when eaten with proteins, especially with sulfur containing amino acids ### Zinc Toxicity - Excess of the UL -> Decreases HDL levels @@ -128,4 +129,4 @@ Fluoride is not considered an essential nutrient - Presents tooth decay ### Fluoride Toxicity -- Dental fluorosis is an abnormal change in the appearance of tooth enamel due to chroncially high fluoride exposure during tooth development +- Dental fluorosis is an abnormal change in the appearance of tooth enamel due to chronically high fluoride exposure during tooth development From eaef75538b095219d842c04f182fd63846da3826 Mon Sep 17 00:00:00 2001 From: zleyyij <75810274+zleyyij@users.noreply.github.com> Date: Fri, 22 Nov 2024 18:22:25 -0700 Subject: [PATCH 0678/1027] vault backup: 2024-11-22 18:22:25 --- education/nutrition/Water.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/education/nutrition/Water.md b/education/nutrition/Water.md index b4e368f..5523d65 100644 --- a/education/nutrition/Water.md +++ b/education/nutrition/Water.md @@ -10,7 +10,7 @@ - Removes waste - Helps transport substances - Lubricates tissues -- Regulates body tempurature +- Regulates body temperature - Helps digest foods - Participates in many chemical reactions - Helps maintain proper blood pH From e24bb9e78cb93abf36f52737119cf839c0b36a91 Mon Sep 17 00:00:00 2001 From: arc Date: Mon, 25 Nov 2024 09:43:43 -0700 Subject: [PATCH 0679/1027] sync --- education/math/MATH1060 (trig)/Vectors.md | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 education/math/MATH1060 (trig)/Vectors.md diff --git a/education/math/MATH1060 (trig)/Vectors.md b/education/math/MATH1060 (trig)/Vectors.md new file mode 100644 index 0000000..c566ffb --- /dev/null +++ b/education/math/MATH1060 (trig)/Vectors.md @@ -0,0 +1,8 @@ +A vector is a mathematical concept that denotes direction and magnitude. They're often notated using an arrow ($\overrightarrow{v}$), or with a bold, lowercase letter. (**v**). + + +$$\begin{bmatrix} +1 \\ +2 +\end{bmatrix} +$$ \ No newline at end of file From 33fe8466754876b9a269a252834841ef42635b03 Mon Sep 17 00:00:00 2001 From: arc Date: Mon, 25 Nov 2024 09:46:37 -0700 Subject: [PATCH 0680/1027] vault backup: 2024-11-25 09:46:37 --- education/math/MATH1060 (trig)/Vectors.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/education/math/MATH1060 (trig)/Vectors.md b/education/math/MATH1060 (trig)/Vectors.md index c566ffb..dacead2 100644 --- a/education/math/MATH1060 (trig)/Vectors.md +++ b/education/math/MATH1060 (trig)/Vectors.md @@ -1,8 +1,15 @@ A vector is a mathematical concept that denotes direction and magnitude. They're often notated using an arrow ($\overrightarrow{v}$), or with a bold, lowercase letter. (**v**). + + $$\begin{bmatrix} 1 \\ 2 \end{bmatrix} -$$ \ No newline at end of file +$$ + +# Magnitude +The magnitude of a vector is $|\overrightarrow{v}| = \sqrt{a^2 + b^2}$ +# Direction +The direction of a vector is $\theta = \tan^-1 From 2f1d3f2f7280bea453fab46884d25b5964800286 Mon Sep 17 00:00:00 2001 From: arc Date: Mon, 25 Nov 2024 09:51:37 -0700 Subject: [PATCH 0681/1027] vault backup: 2024-11-25 09:51:37 --- education/math/MATH1060 (trig)/Vectors.md | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/education/math/MATH1060 (trig)/Vectors.md b/education/math/MATH1060 (trig)/Vectors.md index dacead2..a66302e 100644 --- a/education/math/MATH1060 (trig)/Vectors.md +++ b/education/math/MATH1060 (trig)/Vectors.md @@ -1,15 +1,9 @@ -A vector is a mathematical concept that denotes direction and magnitude. They're often notated using an arrow ($\overrightarrow{v}$), or with a bold, lowercase letter. (**v**). +A vector is a mathematical concept that denotes direction and magnitude. They're often notated using an arrow ($\vec{v}$), or with a bold, lowercase letter. (**v**). - - -$$\begin{bmatrix} -1 \\ -2 -\end{bmatrix} -$$ +Vectors are often denoted as a matrix with two rows: $\begin{bmatrix}1 \\2\end{bmatrix}$ # Magnitude -The magnitude of a vector is $|\overrightarrow{v}| = \sqrt{a^2 + b^2}$ +The magnitude of a vector is $|\vec{v}| = \sqrt{a^2 + b^2}$ # Direction -The direction of a vector is $\theta = \tan^-1 +The direction of a vector is $\theta = \tan^-1(\frac{b}{a})$. From e5ba16e8a1a8c21da7c65bcab247a5e3ec9c0a11 Mon Sep 17 00:00:00 2001 From: arc Date: Mon, 25 Nov 2024 09:56:37 -0700 Subject: [PATCH 0682/1027] vault backup: 2024-11-25 09:56:37 --- education/math/MATH1060 (trig)/Vectors.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/education/math/MATH1060 (trig)/Vectors.md b/education/math/MATH1060 (trig)/Vectors.md index a66302e..b2fbfed 100644 --- a/education/math/MATH1060 (trig)/Vectors.md +++ b/education/math/MATH1060 (trig)/Vectors.md @@ -5,5 +5,13 @@ Vectors are often denoted as a matrix with two rows: $\begin{bmatrix}1 \\2\end{b # Magnitude The magnitude of a vector is $|\vec{v}| = \sqrt{a^2 + b^2}$ + # Direction The direction of a vector is $\theta = \tan^-1(\frac{b}{a})$. + +# Addition +To find $\vec{u} + \vec{v}$, we can put one vector on the end of another vector. The resulting vector will share the same tail as the first vector, and the same head as the second vector. + +# Scalar Multiplication + +A **scalar** is just a real number. Scalar multiplication is multiplying a vector with a real number. This will scale or shrink a vector, but will not change \ No newline at end of file From bae0e45d2138bd5702e9baa2d90ae25347dd3556 Mon Sep 17 00:00:00 2001 From: arc Date: Mon, 25 Nov 2024 10:01:37 -0700 Subject: [PATCH 0683/1027] vault backup: 2024-11-25 10:01:37 --- education/math/MATH1060 (trig)/Vectors.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/education/math/MATH1060 (trig)/Vectors.md b/education/math/MATH1060 (trig)/Vectors.md index b2fbfed..0009367 100644 --- a/education/math/MATH1060 (trig)/Vectors.md +++ b/education/math/MATH1060 (trig)/Vectors.md @@ -13,5 +13,13 @@ The direction of a vector is $\theta = \tan^-1(\frac{b}{a})$. To find $\vec{u} + \vec{v}$, we can put one vector on the end of another vector. The resulting vector will share the same tail as the first vector, and the same head as the second vector. # Scalar Multiplication +A **scalar** is just a real number. Scalar multiplication is multiplying a vector with a real number. This will scale or shrink a vector, but does not change the direction it points at. -A **scalar** is just a real number. Scalar multiplication is multiplying a vector with a real number. This will scale or shrink a vector, but will not change \ No newline at end of file +We do not multiply two vectors together. +# Unit Vector +A vector with a magnitude of 1 is a **unit vector**. + +If $\vec{v}$ is a nonzero vector, the unit vector can be found using the equation $\vec{u} = \dfrac{1}{|\vec{v}|}\vec{v}$ . In other words, to find a unit vector, divide the vector by its magnitude. + +# $i$, $j$ Notation +Every 2 \ No newline at end of file From 1cba982320606f695072e987e11ece5bde2c9a9b Mon Sep 17 00:00:00 2001 From: arc Date: Mon, 25 Nov 2024 10:06:37 -0700 Subject: [PATCH 0684/1027] vault backup: 2024-11-25 10:06:37 --- education/math/MATH1060 (trig)/Vectors.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/education/math/MATH1060 (trig)/Vectors.md b/education/math/MATH1060 (trig)/Vectors.md index 0009367..42bd778 100644 --- a/education/math/MATH1060 (trig)/Vectors.md +++ b/education/math/MATH1060 (trig)/Vectors.md @@ -22,4 +22,4 @@ A vector with a magnitude of 1 is a **unit vector**. If $\vec{v}$ is a nonzero vector, the unit vector can be found using the equation $\vec{u} = \dfrac{1}{|\vec{v}|}\vec{v}$ . In other words, to find a unit vector, divide the vector by its magnitude. # $i$, $j$ Notation -Every 2 \ No newline at end of file +Every 2d vector has a horizontal component and a vertical component. The horizontal unit vector could be written as $i = < 1, 0 >$, and the vertical unit vector could be written as $j = <0, 1 >$. Every vector can be made up using a combination of these standard unit vectors. \ No newline at end of file From f91a30aa5b77a78b2c97cc344422b4dd519bd87c Mon Sep 17 00:00:00 2001 From: arc Date: Mon, 25 Nov 2024 10:11:37 -0700 Subject: [PATCH 0685/1027] vault backup: 2024-11-25 10:11:37 --- education/math/MATH1060 (trig)/Vectors.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/education/math/MATH1060 (trig)/Vectors.md b/education/math/MATH1060 (trig)/Vectors.md index 42bd778..72450ee 100644 --- a/education/math/MATH1060 (trig)/Vectors.md +++ b/education/math/MATH1060 (trig)/Vectors.md @@ -2,7 +2,8 @@ A vector is a mathematical concept that denotes direction and magnitude. They're Vectors are often denoted as a matrix with two rows: $\begin{bmatrix}1 \\2\end{bmatrix}$ - +# Component Form +If $\vec{v}$ is a vector with the initial point $(x_y,\ y_i)$, and a terminal point $(x_t,\ y_t)$, we can express $\vec{v}$ in component form as $\vec{v} = Date: Mon, 25 Nov 2024 10:16:37 -0700 Subject: [PATCH 0686/1027] vault backup: 2024-11-25 10:16:37 --- education/math/MATH1060 (trig)/Vectors.md | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/education/math/MATH1060 (trig)/Vectors.md b/education/math/MATH1060 (trig)/Vectors.md index 72450ee..c7657fb 100644 --- a/education/math/MATH1060 (trig)/Vectors.md +++ b/education/math/MATH1060 (trig)/Vectors.md @@ -3,7 +3,7 @@ A vector is a mathematical concept that denotes direction and magnitude. They're Vectors are often denoted as a matrix with two rows: $\begin{bmatrix}1 \\2\end{bmatrix}$ # Component Form -If $\vec{v}$ is a vector with the initial point $(x_y,\ y_i)$, and a terminal point $(x_t,\ y_t)$, we can express $\vec{v}$ in component form as $\vec{v} = $, and the vertical unit vector could be written as $j = <0, 1 >$. Every vector can be made up using a combination of these standard unit vectors. \ No newline at end of file +Every 2d vector has a horizontal component and a vertical component. The horizontal unit vector could be written as $i = \langle 1, 0 \rangle$, and the vertical unit vector could be written as $j = \langle 0, 1 \rangle$ Every vector can be made up using a combination of these standard unit vectors. + +# Trigonometric Form +Given a vector $\vec{v}$ with a magnitude $|\vec{v}|$ and direction $\theta$: + +The component form is given as: + +$$ \vec{v} = \langle \cos \theta,\ |\vec{v}|\sin\theta \rangle $$ \ No newline at end of file From 2650229bce3a4bda94a4b2aa1d298eeb788ec026 Mon Sep 17 00:00:00 2001 From: arc Date: Mon, 25 Nov 2024 10:26:36 -0700 Subject: [PATCH 0687/1027] vault backup: 2024-11-25 10:26:36 --- .obsidian/plugins/obsidian-git/data.json | 27 ------------------------ 1 file changed, 27 deletions(-) diff --git a/.obsidian/plugins/obsidian-git/data.json b/.obsidian/plugins/obsidian-git/data.json index bef4c6e..e69de29 100644 --- a/.obsidian/plugins/obsidian-git/data.json +++ b/.obsidian/plugins/obsidian-git/data.json @@ -1,27 +0,0 @@ -{ - "commitMessage": "vault backup: {{date}}", - "autoCommitMessage": "vault backup: {{date}}", - "commitDateFormat": "YYYY-MM-DD HH:mm:ss", - "autoSaveInterval": 5, - "autoPushInterval": 0, - "autoPullInterval": 5, - "autoPullOnBoot": true, - "disablePush": false, - "pullBeforePush": true, - "disablePopups": false, - "listChangedFilesInMessageBody": false, - "showStatusBar": true, - "updateSubmodules": false, - "syncMethod": "merge", - "customMessageOnAutoBackup": false, - "autoBackupAfterFileChange": false, - "treeStructure": false, - "refreshSourceControl": true, - "basePath": "", - "differentIntervalCommitAndPush": false, - "changedFilesInStatusBar": false, - "showedMobileNotice": true, - "refreshSourceControlTimer": 7000, - "showBranchStatusBar": true, - "setLastSaveToLastCommit": false -} \ No newline at end of file From 8a19d78dfcaf6ef53edcee399f95eb46e10a419b Mon Sep 17 00:00:00 2001 From: arc Date: Mon, 25 Nov 2024 13:08:35 -0700 Subject: [PATCH 0688/1027] vault backup: 2024-11-25 13:08:35 --- .obsidian/plugins/obsidian-git/data.json | 27 ++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/.obsidian/plugins/obsidian-git/data.json b/.obsidian/plugins/obsidian-git/data.json index e69de29..bef4c6e 100644 --- a/.obsidian/plugins/obsidian-git/data.json +++ b/.obsidian/plugins/obsidian-git/data.json @@ -0,0 +1,27 @@ +{ + "commitMessage": "vault backup: {{date}}", + "autoCommitMessage": "vault backup: {{date}}", + "commitDateFormat": "YYYY-MM-DD HH:mm:ss", + "autoSaveInterval": 5, + "autoPushInterval": 0, + "autoPullInterval": 5, + "autoPullOnBoot": true, + "disablePush": false, + "pullBeforePush": true, + "disablePopups": false, + "listChangedFilesInMessageBody": false, + "showStatusBar": true, + "updateSubmodules": false, + "syncMethod": "merge", + "customMessageOnAutoBackup": false, + "autoBackupAfterFileChange": false, + "treeStructure": false, + "refreshSourceControl": true, + "basePath": "", + "differentIntervalCommitAndPush": false, + "changedFilesInStatusBar": false, + "showedMobileNotice": true, + "refreshSourceControlTimer": 7000, + "showBranchStatusBar": true, + "setLastSaveToLastCommit": false +} \ No newline at end of file From 1749c6225e798714df7a0c572bc6dd88924fc1a3 Mon Sep 17 00:00:00 2001 From: arc Date: Thu, 28 Nov 2024 16:12:59 -0700 Subject: [PATCH 0689/1027] vault backup: 2024-11-28 16:12:59 --- Untitled.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 Untitled.md diff --git a/Untitled.md b/Untitled.md deleted file mode 100644 index e69de29..0000000 From e56a34a41c9da745669962a01fe7f34c80bca7cb Mon Sep 17 00:00:00 2001 From: arc Date: Mon, 2 Dec 2024 09:48:12 -0700 Subject: [PATCH 0690/1027] vault backup: 2024-12-02 09:48:12 --- education/math/MATH1060 (trig)/Vectors.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/education/math/MATH1060 (trig)/Vectors.md b/education/math/MATH1060 (trig)/Vectors.md index c7657fb..a75703a 100644 --- a/education/math/MATH1060 (trig)/Vectors.md +++ b/education/math/MATH1060 (trig)/Vectors.md @@ -30,4 +30,7 @@ Given a vector $\vec{v}$ with a magnitude $|\vec{v}|$ and direction $\theta$: The component form is given as: -$$ \vec{v} = \langle \cos \theta,\ |\vec{v}|\sin\theta \rangle $$ \ No newline at end of file +$$ \vec{v} = \langle \cos \theta,\ |\vec{v}|\sin\theta \rangle $$ + +# Standard position +- A vector is in standard position if the initial point is at $(0, 0)$. \ No newline at end of file From 1bd382f85c874b140768cecbda5a834654401b25 Mon Sep 17 00:00:00 2001 From: arc Date: Mon, 2 Dec 2024 10:08:13 -0700 Subject: [PATCH 0691/1027] vault backup: 2024-12-02 10:08:13 --- education/math/MATH1060 (trig)/Vectors.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/education/math/MATH1060 (trig)/Vectors.md b/education/math/MATH1060 (trig)/Vectors.md index a75703a..b839f12 100644 --- a/education/math/MATH1060 (trig)/Vectors.md +++ b/education/math/MATH1060 (trig)/Vectors.md @@ -33,4 +33,9 @@ The component form is given as: $$ \vec{v} = \langle \cos \theta,\ |\vec{v}|\sin\theta \rangle $$ # Standard position -- A vector is in standard position if the initial point is at $(0, 0)$. \ No newline at end of file +- A vector is in standard position if the initial point is at $(0, 0)$. + +# The Dot Product +The dot product of two vectors $\vec{u} = \rangle a, b \langle$ and $\vec{v} = \langle c, d \rangle$ is $\vec{u} * \vec{v} = ac + bd$. + +- Given that $\vec{u} = \langle -7, 3 \rangle$, and $\vec{v} = \langle -3, 4 \rangle \ No newline at end of file From 0356193ef6a6aa19a3e08c741f6c2fa1e4c3d0a6 Mon Sep 17 00:00:00 2001 From: arc Date: Mon, 2 Dec 2024 10:13:13 -0700 Subject: [PATCH 0692/1027] vault backup: 2024-12-02 10:13:13 --- education/math/MATH1060 (trig)/Vectors.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/education/math/MATH1060 (trig)/Vectors.md b/education/math/MATH1060 (trig)/Vectors.md index b839f12..ed8a9fc 100644 --- a/education/math/MATH1060 (trig)/Vectors.md +++ b/education/math/MATH1060 (trig)/Vectors.md @@ -36,6 +36,7 @@ $$ \vec{v} = \langle \cos \theta,\ |\vec{v}|\sin\theta \rangle $$ - A vector is in standard position if the initial point is at $(0, 0)$. # The Dot Product -The dot product of two vectors $\vec{u} = \rangle a, b \langle$ and $\vec{v} = \langle c, d \rangle$ is $\vec{u} * \vec{v} = ac + bd$. +The dot product of two vectors $\vec{u} = \langle a, b \rangle$ and $\vec{v} = \langle c, d \rangle$ is $\vec{u} * \vec{v} = ac + bd$. -- Given that $\vec{u} = \langle -7, 3 \rangle$, and $\vec{v} = \langle -3, 4 \rangle \ No newline at end of file +- Given that $\vec{u} = \langle -7, 3 \rangle$, and $\vec{v} = \langle -3, 4 \rangle$, find $\vec{u} * \vec{v}$. +- $\vec{u} * \vec{v} = -7 * -4 + 3 * 4$ \ No newline at end of file From c01734fb7a6163943a3c126fe3174368fe2d526d Mon Sep 17 00:00:00 2001 From: arc Date: Mon, 2 Dec 2024 10:18:13 -0700 Subject: [PATCH 0693/1027] vault backup: 2024-12-02 10:18:13 --- education/math/MATH1060 (trig)/Vectors.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/education/math/MATH1060 (trig)/Vectors.md b/education/math/MATH1060 (trig)/Vectors.md index ed8a9fc..ee064bf 100644 --- a/education/math/MATH1060 (trig)/Vectors.md +++ b/education/math/MATH1060 (trig)/Vectors.md @@ -39,4 +39,9 @@ $$ \vec{v} = \langle \cos \theta,\ |\vec{v}|\sin\theta \rangle $$ The dot product of two vectors $\vec{u} = \langle a, b \rangle$ and $\vec{v} = \langle c, d \rangle$ is $\vec{u} * \vec{v} = ac + bd$. - Given that $\vec{u} = \langle -7, 3 \rangle$, and $\vec{v} = \langle -3, 4 \rangle$, find $\vec{u} * \vec{v}$. -- $\vec{u} * \vec{v} = -7 * -4 + 3 * 4$ \ No newline at end of file +- $\vec{u} * \vec{v} = -7 * -4 + 3 * 4$ + +The dot product can be used to find the angle between two vectors. + +If $\theta (0\degree < \theta < 180\degree)$, is the angle between two nonzero vectors $\vec{u}$ and $\vec{v}$, then +$$ \cos\theta = \dfrac{\vec{u}*\vec{v}}{|\vec{u}||\vec{v}|} $$ From 20ea35ac142e10c9c51697aa5808ecdea4cb9d29 Mon Sep 17 00:00:00 2001 From: arc Date: Mon, 2 Dec 2024 11:42:53 -0700 Subject: [PATCH 0694/1027] vault backup: 2024-12-02 11:42:53 --- .obsidian/plugins/obsidian-git/data.json | 27 ------------------------ 1 file changed, 27 deletions(-) diff --git a/.obsidian/plugins/obsidian-git/data.json b/.obsidian/plugins/obsidian-git/data.json index bef4c6e..e69de29 100644 --- a/.obsidian/plugins/obsidian-git/data.json +++ b/.obsidian/plugins/obsidian-git/data.json @@ -1,27 +0,0 @@ -{ - "commitMessage": "vault backup: {{date}}", - "autoCommitMessage": "vault backup: {{date}}", - "commitDateFormat": "YYYY-MM-DD HH:mm:ss", - "autoSaveInterval": 5, - "autoPushInterval": 0, - "autoPullInterval": 5, - "autoPullOnBoot": true, - "disablePush": false, - "pullBeforePush": true, - "disablePopups": false, - "listChangedFilesInMessageBody": false, - "showStatusBar": true, - "updateSubmodules": false, - "syncMethod": "merge", - "customMessageOnAutoBackup": false, - "autoBackupAfterFileChange": false, - "treeStructure": false, - "refreshSourceControl": true, - "basePath": "", - "differentIntervalCommitAndPush": false, - "changedFilesInStatusBar": false, - "showedMobileNotice": true, - "refreshSourceControlTimer": 7000, - "showBranchStatusBar": true, - "setLastSaveToLastCommit": false -} \ No newline at end of file From 939d0f9684add742542e5d01854e1672b59be681 Mon Sep 17 00:00:00 2001 From: arc Date: Tue, 3 Dec 2024 12:11:09 -0700 Subject: [PATCH 0695/1027] vault backup: 2024-12-03 12:11:09 --- .obsidian/plugins/obsidian-git/data.json | 27 ++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/.obsidian/plugins/obsidian-git/data.json b/.obsidian/plugins/obsidian-git/data.json index e69de29..bef4c6e 100644 --- a/.obsidian/plugins/obsidian-git/data.json +++ b/.obsidian/plugins/obsidian-git/data.json @@ -0,0 +1,27 @@ +{ + "commitMessage": "vault backup: {{date}}", + "autoCommitMessage": "vault backup: {{date}}", + "commitDateFormat": "YYYY-MM-DD HH:mm:ss", + "autoSaveInterval": 5, + "autoPushInterval": 0, + "autoPullInterval": 5, + "autoPullOnBoot": true, + "disablePush": false, + "pullBeforePush": true, + "disablePopups": false, + "listChangedFilesInMessageBody": false, + "showStatusBar": true, + "updateSubmodules": false, + "syncMethod": "merge", + "customMessageOnAutoBackup": false, + "autoBackupAfterFileChange": false, + "treeStructure": false, + "refreshSourceControl": true, + "basePath": "", + "differentIntervalCommitAndPush": false, + "changedFilesInStatusBar": false, + "showedMobileNotice": true, + "refreshSourceControlTimer": 7000, + "showBranchStatusBar": true, + "setLastSaveToLastCommit": false +} \ No newline at end of file From d8a5a79e5128936df624255d6d82b5ff9d424c85 Mon Sep 17 00:00:00 2001 From: arc Date: Tue, 3 Dec 2024 12:16:09 -0700 Subject: [PATCH 0696/1027] vault backup: 2024-12-03 12:16:09 --- education/nutrition/Review.md | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 education/nutrition/Review.md diff --git a/education/nutrition/Review.md b/education/nutrition/Review.md new file mode 100644 index 0000000..22feae6 --- /dev/null +++ b/education/nutrition/Review.md @@ -0,0 +1,31 @@ +# Macronutrients +- We need a larger amount +- Provides Calories +## Carbs +- Provides 4 calories per gram +## Protein +- Provides 4 calories per gram +## Lipids/Fats +- Provides 9 calories per gram +# Micronutrients +- Smaller Amounts +- Don't provide calories +## Vitamins +## Minerals + +## Water +- Not a macro or micronutrient, but still one of the 6 major nutrition groups +## Alcohol +- While not in a food group, provides 7 calories per gram + +# Digestive System +1. Mouth +2. + +# DRI (Dietary Reference Intakes) +## EAR +## RDA +## AI +## UL +## AMDR +## EER \ No newline at end of file From 716569071bbd7966053b35f180282161c7e13c97 Mon Sep 17 00:00:00 2001 From: arc Date: Tue, 3 Dec 2024 12:21:09 -0700 Subject: [PATCH 0697/1027] vault backup: 2024-12-03 12:21:09 --- education/nutrition/Review.md | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/education/nutrition/Review.md b/education/nutrition/Review.md index 22feae6..bf4e64a 100644 --- a/education/nutrition/Review.md +++ b/education/nutrition/Review.md @@ -20,7 +20,19 @@ # Digestive System 1. Mouth -2. + - Digestion of carbs/starches, and fats begin here. + - Mechanical digestion (chewing) + - Chemical digestion (amalayses (starch) and lipases (fat) in the mouth) +2. Esophagus +3. Gastroesophageal/Lower Esophageal/Cardiac Sphincter + - When this sphincter misfires, it can cause heartburn or gastroesphageal reflex disease (GERD) +4. Stomach + - Protein +5. Pyloric Sphincter +6. Small Intestine (DJI) + 1. Duodenum + 2. Jejunum + 3. Ilium # DRI (Dietary Reference Intakes) ## EAR From cbb77a9283dc22e1a53fad02973f552914a07b6a Mon Sep 17 00:00:00 2001 From: arc Date: Tue, 3 Dec 2024 12:26:09 -0700 Subject: [PATCH 0698/1027] vault backup: 2024-12-03 12:26:09 --- education/nutrition/Review.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/education/nutrition/Review.md b/education/nutrition/Review.md index bf4e64a..0055105 100644 --- a/education/nutrition/Review.md +++ b/education/nutrition/Review.md @@ -24,15 +24,17 @@ - Mechanical digestion (chewing) - Chemical digestion (amalayses (starch) and lipases (fat) in the mouth) 2. Esophagus -3. Gastroesophageal/Lower Esophageal/Cardiac Sphincter + - Peristalsis is an involuntary relaxation and contraction of muscles to move food down +1. Gastroesophageal/Lower Esophageal/Cardiac Sphincter - When this sphincter misfires, it can cause heartburn or gastroesphageal reflex disease (GERD) -4. Stomach +2. Stomach - Protein -5. Pyloric Sphincter -6. Small Intestine (DJI) +3. Pyloric Sphincter +4. Small Intestine (DJI) 1. Duodenum 2. Jejunum 3. Ilium +5. Ilieocecal Valve # DRI (Dietary Reference Intakes) ## EAR From ff72fd447e0b9e2a2451ef96ab40ac75096431db Mon Sep 17 00:00:00 2001 From: arc Date: Tue, 3 Dec 2024 12:31:09 -0700 Subject: [PATCH 0699/1027] vault backup: 2024-12-03 12:31:09 --- education/nutrition/Review.md | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/education/nutrition/Review.md b/education/nutrition/Review.md index 0055105..5e65a24 100644 --- a/education/nutrition/Review.md +++ b/education/nutrition/Review.md @@ -37,9 +37,19 @@ 5. Ilieocecal Valve # DRI (Dietary Reference Intakes) -## EAR -## RDA -## AI -## UL -## AMDR -## EER \ No newline at end of file +## EAR (Estimated Average Requirement) +- Meet the requirements of 50% of healthy individuals +## RDA (Recommended Daily Allowance) +- 97.5% of healthy people +- EAR plus a margin of safety +## AI (Adequate Intake) +- The average amount of nutrients a healthy population needs to consume +## UL (Upper Limit) +- Prevents overconsumption +## AMDR (Acceptable Macronutrient Distribution Range) +- Carbs: 45-65% / kCal +- Protein: 10-35% / kCal +- Fats: 20-35% / kCal +## EER (Estimated Energy Requirements) +- Average estimated caloric needs +- Actual needs vary \ No newline at end of file From b53776eabe2c82b8b1904b47efbb727128b2a4af Mon Sep 17 00:00:00 2001 From: arc Date: Tue, 3 Dec 2024 12:36:09 -0700 Subject: [PATCH 0700/1027] vault backup: 2024-12-03 12:36:09 --- education/nutrition/Review.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/education/nutrition/Review.md b/education/nutrition/Review.md index 5e65a24..524cae4 100644 --- a/education/nutrition/Review.md +++ b/education/nutrition/Review.md @@ -3,6 +3,23 @@ - Provides Calories ## Carbs - Provides 4 calories per gram +### Simple +- Mono/Disaccharides +Monosaccharides include: +- Glucose +- Fructose (fruit sugar) +- Galactose +Disaccharides include: +- Sucrose (glucose + fructose) +- Maltose (glucose + glucose) +- Lactose (glucose + galactose) +### Complex +- Polysaccharides +Polysaccharides include: +- Starches + - Amalose + - Amalopectin +- ## Protein - Provides 4 calories per gram ## Lipids/Fats From d3fc0c4951c6e98b404a31f65d0c190c5434b86e Mon Sep 17 00:00:00 2001 From: arc Date: Tue, 3 Dec 2024 12:41:09 -0700 Subject: [PATCH 0701/1027] vault backup: 2024-12-03 12:41:09 --- education/nutrition/Review.md | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/education/nutrition/Review.md b/education/nutrition/Review.md index 524cae4..81c9501 100644 --- a/education/nutrition/Review.md +++ b/education/nutrition/Review.md @@ -1,8 +1,10 @@ # Macronutrients - We need a larger amount - Provides Calories -## Carbs +## Carbohydrates - Provides 4 calories per gram +- The storage form of carbohydrates in the body is as glycogen (very branched sugar). Stored in muscles and in liver +- Only **monosaccharides** can be directly absorbed. Everything else must be broken down first. ### Simple - Mono/Disaccharides Monosaccharides include: @@ -18,8 +20,10 @@ Disaccharides include: Polysaccharides include: - Starches - Amalose - - Amalopectin -- + - Amalopectin (More branched) +- Fiber + - Photosynthesis +Sun + carbon + hydrogen + oxygen + ## Protein - Provides 4 calories per gram ## Lipids/Fats From 7b2836e81cabd2281f3f47eaaffc4b25bc271481 Mon Sep 17 00:00:00 2001 From: arc Date: Tue, 3 Dec 2024 12:46:09 -0700 Subject: [PATCH 0702/1027] vault backup: 2024-12-03 12:46:09 --- education/nutrition/Review.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/education/nutrition/Review.md b/education/nutrition/Review.md index 81c9501..0560130 100644 --- a/education/nutrition/Review.md +++ b/education/nutrition/Review.md @@ -26,6 +26,12 @@ Polysaccharides include: ## Protein - Provides 4 calories per gram +- Protein is composed of amino acids +- There are **9 essential** amino acids +- There are **11 non-essential** amino acids + - Donkey bridge: If it starts with the letter A, it's a non-essential amino acid +- Protein has nitrogen alongside hydrogen, carbon, and +- To use protein as energy, it must be **deanimated**. ## Lipids/Fats - Provides 9 calories per gram # Micronutrients From 35f029178abf191fc97cb36b76f557e194c6bc4d Mon Sep 17 00:00:00 2001 From: arc Date: Tue, 3 Dec 2024 12:51:09 -0700 Subject: [PATCH 0703/1027] vault backup: 2024-12-03 12:51:09 --- education/nutrition/Review.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/education/nutrition/Review.md b/education/nutrition/Review.md index 0560130..9620421 100644 --- a/education/nutrition/Review.md +++ b/education/nutrition/Review.md @@ -34,6 +34,16 @@ Polysaccharides include: - To use protein as energy, it must be **deanimated**. ## Lipids/Fats - Provides 9 calories per gram +- Fat is composed of hydrocarbon chains +- Tryglicerine - 3 fatty acid chains, with glycerol backbone +### Saturated Fats +- Saturated fats have no double bonds +### Unsaturated Fats +- Unsaturated fats have one or more double bond + +### HDL +- We want high HDL levels +- Takes cholesterol out of the cells to the liver to be # Micronutrients - Smaller Amounts - Don't provide calories From 2a79b50cd3240c5bb0a892d8c49fc5e2f5bed473 Mon Sep 17 00:00:00 2001 From: arc Date: Tue, 3 Dec 2024 12:56:09 -0700 Subject: [PATCH 0704/1027] vault backup: 2024-12-03 12:56:09 --- education/nutrition/Review.md | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/education/nutrition/Review.md b/education/nutrition/Review.md index 9620421..1eb7e42 100644 --- a/education/nutrition/Review.md +++ b/education/nutrition/Review.md @@ -41,9 +41,15 @@ Polysaccharides include: ### Unsaturated Fats - Unsaturated fats have one or more double bond -### HDL +### HDL (High Density Lipoprotein) - We want high HDL levels -- Takes cholesterol out of the cells to the liver to be +- Takes cholesterol out of the cells to the liver to be excreted +### LDL (Low Density Lipoprotein) +- We want low LDL levels +- Takes cholesterol into arteries +### oLDL (Oxidized Low Density Lipoprotein) +- Damaged LDL +- Deposits plaque # Micronutrients - Smaller Amounts - Don't provide calories @@ -89,4 +95,10 @@ Polysaccharides include: - Fats: 20-35% / kCal ## EER (Estimated Energy Requirements) - Average estimated caloric needs -- Actual needs vary \ No newline at end of file +- Actual needs vary + +# Hormones +## Insulin +## Glucagon +## Grelin +## Leptin \ No newline at end of file From c49a89b19e132c4534419f3ee8903d5eef30482b Mon Sep 17 00:00:00 2001 From: arc Date: Tue, 3 Dec 2024 13:01:09 -0700 Subject: [PATCH 0705/1027] vault backup: 2024-12-03 13:01:09 --- education/nutrition/Review.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/education/nutrition/Review.md b/education/nutrition/Review.md index 1eb7e42..a92b412 100644 --- a/education/nutrition/Review.md +++ b/education/nutrition/Review.md @@ -101,4 +101,10 @@ Polysaccharides include: ## Insulin ## Glucagon ## Grelin -## Leptin \ No newline at end of file +## Leptin + +# Study Types +## Exprimental +- A systematic way of testing a hypothesis +## Epidemiological +- Observations of the occurrence, distribution, and associations \ No newline at end of file From 6373eecb703d92ceda701114476e90dca9f04f0b Mon Sep 17 00:00:00 2001 From: arc Date: Tue, 3 Dec 2024 16:23:30 -0700 Subject: [PATCH 0706/1027] vault backup: 2024-12-03 16:23:30 --- education/nutrition/Review.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/education/nutrition/Review.md b/education/nutrition/Review.md index a92b412..9534488 100644 --- a/education/nutrition/Review.md +++ b/education/nutrition/Review.md @@ -99,8 +99,13 @@ Polysaccharides include: # Hormones ## Insulin +Insulin is made by the beta cells in the pancreas, and promotes absorption of glucose from the blood into liver, fat, and skeletal muscles. +- Insulin is released when blood sugar levels are too high ## Glucagon -## Grelin +Glucagon is a peptide hormone, produced by the alpha cells of the pancreas. It's the opposite of insulin, and it increases blood sugar levels. +- Glucagon is released when blood sugar levels are too low +## Ghrelin +Ghrellin is known as the "hunger hormone", and it increases the drive to eat. It increases gastric motility and stimulates the secretion of gasti ## Leptin # Study Types From ccce9cd4bf28d13bbe0a5d6b8d22614b66356eb3 Mon Sep 17 00:00:00 2001 From: arc Date: Tue, 3 Dec 2024 16:28:30 -0700 Subject: [PATCH 0707/1027] vault backup: 2024-12-03 16:28:30 --- .obsidian/plugins/obsidian-git/data.json | 27 ------------------------ education/nutrition/Review.md | 3 ++- 2 files changed, 2 insertions(+), 28 deletions(-) diff --git a/.obsidian/plugins/obsidian-git/data.json b/.obsidian/plugins/obsidian-git/data.json index bef4c6e..e69de29 100644 --- a/.obsidian/plugins/obsidian-git/data.json +++ b/.obsidian/plugins/obsidian-git/data.json @@ -1,27 +0,0 @@ -{ - "commitMessage": "vault backup: {{date}}", - "autoCommitMessage": "vault backup: {{date}}", - "commitDateFormat": "YYYY-MM-DD HH:mm:ss", - "autoSaveInterval": 5, - "autoPushInterval": 0, - "autoPullInterval": 5, - "autoPullOnBoot": true, - "disablePush": false, - "pullBeforePush": true, - "disablePopups": false, - "listChangedFilesInMessageBody": false, - "showStatusBar": true, - "updateSubmodules": false, - "syncMethod": "merge", - "customMessageOnAutoBackup": false, - "autoBackupAfterFileChange": false, - "treeStructure": false, - "refreshSourceControl": true, - "basePath": "", - "differentIntervalCommitAndPush": false, - "changedFilesInStatusBar": false, - "showedMobileNotice": true, - "refreshSourceControlTimer": 7000, - "showBranchStatusBar": true, - "setLastSaveToLastCommit": false -} \ No newline at end of file diff --git a/education/nutrition/Review.md b/education/nutrition/Review.md index 9534488..3b29fbd 100644 --- a/education/nutrition/Review.md +++ b/education/nutrition/Review.md @@ -105,8 +105,9 @@ Insulin is made by the beta cells in the pancreas, and promotes absorption of gl Glucagon is a peptide hormone, produced by the alpha cells of the pancreas. It's the opposite of insulin, and it increases blood sugar levels. - Glucagon is released when blood sugar levels are too low ## Ghrelin -Ghrellin is known as the "hunger hormone", and it increases the drive to eat. It increases gastric motility and stimulates the secretion of gasti +Ghrellin is known as the "hunger hormone", and it increases the drive to eat. It increases gastric motility and stimulates the secretion of gastric acid. ## Leptin +Leptin's primary role is to regulate long-term energy balance. High leptin levels indicate to the brain that energy reserves are high. # Study Types ## Exprimental From 27f5e2bdef4e10569d88eb9984b6feb0ac6fcb34 Mon Sep 17 00:00:00 2001 From: arc Date: Wed, 4 Dec 2024 09:56:27 -0700 Subject: [PATCH 0708/1027] vault backup: 2024-12-04 09:56:27 --- .obsidian/plugins/obsidian-git/data.json | 27 +++++++++++++++++++++++ education/math/MATH1060 (trig)/Vectors.md | 4 ++++ 2 files changed, 31 insertions(+) diff --git a/.obsidian/plugins/obsidian-git/data.json b/.obsidian/plugins/obsidian-git/data.json index e69de29..bef4c6e 100644 --- a/.obsidian/plugins/obsidian-git/data.json +++ b/.obsidian/plugins/obsidian-git/data.json @@ -0,0 +1,27 @@ +{ + "commitMessage": "vault backup: {{date}}", + "autoCommitMessage": "vault backup: {{date}}", + "commitDateFormat": "YYYY-MM-DD HH:mm:ss", + "autoSaveInterval": 5, + "autoPushInterval": 0, + "autoPullInterval": 5, + "autoPullOnBoot": true, + "disablePush": false, + "pullBeforePush": true, + "disablePopups": false, + "listChangedFilesInMessageBody": false, + "showStatusBar": true, + "updateSubmodules": false, + "syncMethod": "merge", + "customMessageOnAutoBackup": false, + "autoBackupAfterFileChange": false, + "treeStructure": false, + "refreshSourceControl": true, + "basePath": "", + "differentIntervalCommitAndPush": false, + "changedFilesInStatusBar": false, + "showedMobileNotice": true, + "refreshSourceControlTimer": 7000, + "showBranchStatusBar": true, + "setLastSaveToLastCommit": false +} \ No newline at end of file diff --git a/education/math/MATH1060 (trig)/Vectors.md b/education/math/MATH1060 (trig)/Vectors.md index ee064bf..a419b2b 100644 --- a/education/math/MATH1060 (trig)/Vectors.md +++ b/education/math/MATH1060 (trig)/Vectors.md @@ -45,3 +45,7 @@ The dot product can be used to find the angle between two vectors. If $\theta (0\degree < \theta < 180\degree)$, is the angle between two nonzero vectors $\vec{u}$ and $\vec{v}$, then $$ \cos\theta = \dfrac{\vec{u}*\vec{v}}{|\vec{u}||\vec{v}|} $$ + +# Work +The work $W$ is done by a constant force $\vec{F}$ in moving an object from a point $P$ to a point $Q$ is defined by: +$$ W = \vec{p} \cdot\vec{PQ} = |\vec{F}||\vec{PQ}|\cos\theta $$ From 2d797bd20e6d348d2aaac633f3a08441b16449ca Mon Sep 17 00:00:00 2001 From: arc Date: Wed, 4 Dec 2024 10:01:27 -0700 Subject: [PATCH 0709/1027] vault backup: 2024-12-04 10:01:27 --- education/math/MATH1060 (trig)/Vectors.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/education/math/MATH1060 (trig)/Vectors.md b/education/math/MATH1060 (trig)/Vectors.md index a419b2b..1ed8a8b 100644 --- a/education/math/MATH1060 (trig)/Vectors.md +++ b/education/math/MATH1060 (trig)/Vectors.md @@ -47,5 +47,11 @@ If $\theta (0\degree < \theta < 180\degree)$, is the angle between two nonzero v $$ \cos\theta = \dfrac{\vec{u}*\vec{v}}{|\vec{u}||\vec{v}|} $$ # Work +The dot product can be used to compute the work required to move an object a certain distance. + +To compute work, you need a force and direction. If the force is applied in the same direction: + +$$ W = Fd $$ + The work $W$ is done by a constant force $\vec{F}$ in moving an object from a point $P$ to a point $Q$ is defined by: -$$ W = \vec{p} \cdot\vec{PQ} = |\vec{F}||\vec{PQ}|\cos\theta $$ +$$ W = \vec{F} \cdot\vec{PQ} = |\vec{F}||\vec{PQ}|\cos\theta $$Where $\theta$ is the angle between $\vec{F}$ and $\vec{PQ}$. From 0b4f0774cb7f034e7f1884e3d23c9c356921aba8 Mon Sep 17 00:00:00 2001 From: arc Date: Wed, 4 Dec 2024 11:03:03 -0700 Subject: [PATCH 0710/1027] vault backup: 2024-12-04 11:03:03 --- education/math/MATH1060 (trig)/Vectors.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/education/math/MATH1060 (trig)/Vectors.md b/education/math/MATH1060 (trig)/Vectors.md index 1ed8a8b..2f10e88 100644 --- a/education/math/MATH1060 (trig)/Vectors.md +++ b/education/math/MATH1060 (trig)/Vectors.md @@ -38,13 +38,13 @@ $$ \vec{v} = \langle \cos \theta,\ |\vec{v}|\sin\theta \rangle $$ # The Dot Product The dot product of two vectors $\vec{u} = \langle a, b \rangle$ and $\vec{v} = \langle c, d \rangle$ is $\vec{u} * \vec{v} = ac + bd$. -- Given that $\vec{u} = \langle -7, 3 \rangle$, and $\vec{v} = \langle -3, 4 \rangle$, find $\vec{u} * \vec{v}$. -- $\vec{u} * \vec{v} = -7 * -4 + 3 * 4$ +- Given that $\vec{u} = \langle -7, 3 \rangle$, and $\vec{v} = \langle -3, 4 \rangle$, find $\vec{u} \cdot \vec{v}$. +- $\vec{u} \cdot \vec{v} = -7 \cdot -4 + 3 \cdot 4$ The dot product can be used to find the angle between two vectors. If $\theta (0\degree < \theta < 180\degree)$, is the angle between two nonzero vectors $\vec{u}$ and $\vec{v}$, then -$$ \cos\theta = \dfrac{\vec{u}*\vec{v}}{|\vec{u}||\vec{v}|} $$ +$$ \cos\theta = \dfrac{\vec{u}\cdot\vec{v}}{|\vec{u}||\vec{v}|} $$ # Work The dot product can be used to compute the work required to move an object a certain distance. From 54f5138921d694e3dd13d5d897172495fdab9409 Mon Sep 17 00:00:00 2001 From: arc Date: Wed, 4 Dec 2024 15:43:49 -0700 Subject: [PATCH 0711/1027] vault backup: 2024-12-04 15:43:49 --- education/math/MATH1060 (trig)/Vectors.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/education/math/MATH1060 (trig)/Vectors.md b/education/math/MATH1060 (trig)/Vectors.md index 2f10e88..fefd077 100644 --- a/education/math/MATH1060 (trig)/Vectors.md +++ b/education/math/MATH1060 (trig)/Vectors.md @@ -23,14 +23,14 @@ A vector with a magnitude of 1 is a **unit vector**. If $\vec{v}$ is a nonzero vector, the unit vector can be found using the equation $\vec{u} = \dfrac{1}{|\vec{v}|}\vec{v}$ . In other words, to find a unit vector, divide the vector by its magnitude. # $i$, $j$ Notation -Every 2d vector has a horizontal component and a vertical component. The horizontal unit vector could be written as $i = \langle 1, 0 \rangle$, and the vertical unit vector could be written as $j = \langle 0, 1 \rangle$ Every vector can be made up using a combination of these standard unit vectors. +Every 2D vector has a horizontal component and a vertical component. The horizontal unit vector could be written as $i = \langle 1, 0 \rangle$, and the vertical unit vector could be written as $j = \langle 0, 1 \rangle$ Every vector can be made up using a combination of these standard unit vectors. # Trigonometric Form Given a vector $\vec{v}$ with a magnitude $|\vec{v}|$ and direction $\theta$: The component form is given as: -$$ \vec{v} = \langle \cos \theta,\ |\vec{v}|\sin\theta \rangle $$ +$$ \vec{v} = \langle |\vec{v}||\cos \theta,\ |\vec{v}|\sin\theta \rangle $$ # Standard position - A vector is in standard position if the initial point is at $(0, 0)$. From 3445037dbdabf0e9a80ca44fd071ee2e95923855 Mon Sep 17 00:00:00 2001 From: arc Date: Thu, 5 Dec 2024 08:50:05 -0700 Subject: [PATCH 0712/1027] vault backup: 2024-12-05 08:50:05 --- education/nutrition/Review.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/education/nutrition/Review.md b/education/nutrition/Review.md index 3b29fbd..f0edebd 100644 --- a/education/nutrition/Review.md +++ b/education/nutrition/Review.md @@ -113,4 +113,6 @@ Leptin's primary role is to regulate long-term energy balance. High leptin level ## Exprimental - A systematic way of testing a hypothesis ## Epidemiological -- Observations of the occurrence, distribution, and associations \ No newline at end of file +- Observations of the occurrence, distribution, and associations + +# Practice Final From 8b843bde9cea554b9707be56892f289c592c9508 Mon Sep 17 00:00:00 2001 From: arc Date: Thu, 5 Dec 2024 09:59:29 -0700 Subject: [PATCH 0713/1027] vault backup: 2024-12-05 09:59:29 --- education/nutrition/Review.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/education/nutrition/Review.md b/education/nutrition/Review.md index f0edebd..e205ef1 100644 --- a/education/nutrition/Review.md +++ b/education/nutrition/Review.md @@ -116,3 +116,5 @@ Leptin's primary role is to regulate long-term energy balance. High leptin level - Observations of the occurrence, distribution, and associations # Practice Final +- To reduce blood pressure, one should follow the DASH diet +- From 561b65dcba9201c2f591e6ad1c9cd0f385207181 Mon Sep 17 00:00:00 2001 From: arc Date: Thu, 5 Dec 2024 10:34:01 -0700 Subject: [PATCH 0714/1027] vault backup: 2024-12-05 10:34:01 --- Untitled.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 Untitled.md diff --git a/Untitled.md b/Untitled.md new file mode 100644 index 0000000..e69de29 From 5b981260aa472562fa11a85cfcb1422783de38b4 Mon Sep 17 00:00:00 2001 From: arc Date: Thu, 5 Dec 2024 20:00:17 -0700 Subject: [PATCH 0715/1027] vault backup: 2024-12-05 20:00:17 --- Untitled.md | 0 education/nutrition/Review.md | 4 +++- 2 files changed, 3 insertions(+), 1 deletion(-) delete mode 100644 Untitled.md diff --git a/Untitled.md b/Untitled.md deleted file mode 100644 index e69de29..0000000 diff --git a/education/nutrition/Review.md b/education/nutrition/Review.md index e205ef1..8f188a4 100644 --- a/education/nutrition/Review.md +++ b/education/nutrition/Review.md @@ -117,4 +117,6 @@ Leptin's primary role is to regulate long-term energy balance. High leptin level # Practice Final - To reduce blood pressure, one should follow the DASH diet -- +- Bleeding gums, easy bruising, and poor wound healing that characterize scurvey are all related to vitamin C's role in synthesis of collagen. +- Vitamin K is a fat soluble vitamin that can be made in the GI tract +- Parathyroid hormone enhances the body's ability to retain calcium. \ No newline at end of file From 05583a43ee85fe6303ea9ce271ac6728cb76c516 Mon Sep 17 00:00:00 2001 From: arc Date: Thu, 5 Dec 2024 20:05:17 -0700 Subject: [PATCH 0716/1027] vault backup: 2024-12-05 20:05:17 --- education/nutrition/Review.md | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/education/nutrition/Review.md b/education/nutrition/Review.md index 8f188a4..0ca65bb 100644 --- a/education/nutrition/Review.md +++ b/education/nutrition/Review.md @@ -119,4 +119,19 @@ Leptin's primary role is to regulate long-term energy balance. High leptin level - To reduce blood pressure, one should follow the DASH diet - Bleeding gums, easy bruising, and poor wound healing that characterize scurvey are all related to vitamin C's role in synthesis of collagen. - Vitamin K is a fat soluble vitamin that can be made in the GI tract -- Parathyroid hormone enhances the body's ability to retain calcium. \ No newline at end of file +- Parathyroid hormone enhances the body's ability to retain calcium. +- Males have a higher basal metabolic rate than females +- On the intuitive eating spectrum, awareness, balance, moderation, and variety would exist in the middle. Apathy is on the left and anxiety is on the right +- The term appetite describes a biological need for food + +- The 10 principals of intuitive eating are: + 1. Reject Diet Culture +2. Honor Your Hunger +3. Make Peace with Food +4. Discover the Satisfaction Factor +5. Feel Your Fullness +6. Challenge the Food Police +7. Cope with Your Emotions with Kindness +8. Respect Your Body +9. Movement -- Feel the Difference +10. Honor Your Health with Gentle Nutrition From 14fb33389fdfb48cd7db82b6c1b9dc9b868afa01 Mon Sep 17 00:00:00 2001 From: arc Date: Sun, 8 Dec 2024 18:54:15 -0700 Subject: [PATCH 0717/1027] vault backup: 2024-12-08 18:54:15 --- ...e a Wild Tongue - Anzaldua.md => How to Tame a Wild Tongue.md} | 0 ...ld Colleges Teach? - Fish.md => What Should Colleges Teach.md} | 0 ...ent Matters - Aikin and Talisse.md => Why Argument Matters.md} | 0 .../{Why Do We Argue? - Talisse & Aikin.md => Why Do We Argue.md} | 0 4 files changed, 0 insertions(+), 0 deletions(-) rename education/english/ENGL2010/{How to Tame a Wild Tongue - Anzaldua.md => How to Tame a Wild Tongue.md} (100%) rename education/english/ENGL2010/{What Should Colleges Teach? - Fish.md => What Should Colleges Teach.md} (100%) rename education/english/ENGL2010/{Why Argument Matters - Aikin and Talisse.md => Why Argument Matters.md} (100%) rename education/english/ENGL2010/{Why Do We Argue? - Talisse & Aikin.md => Why Do We Argue.md} (100%) diff --git a/education/english/ENGL2010/How to Tame a Wild Tongue - Anzaldua.md b/education/english/ENGL2010/How to Tame a Wild Tongue.md similarity index 100% rename from education/english/ENGL2010/How to Tame a Wild Tongue - Anzaldua.md rename to education/english/ENGL2010/How to Tame a Wild Tongue.md diff --git a/education/english/ENGL2010/What Should Colleges Teach? - Fish.md b/education/english/ENGL2010/What Should Colleges Teach.md similarity index 100% rename from education/english/ENGL2010/What Should Colleges Teach? - Fish.md rename to education/english/ENGL2010/What Should Colleges Teach.md diff --git a/education/english/ENGL2010/Why Argument Matters - Aikin and Talisse.md b/education/english/ENGL2010/Why Argument Matters.md similarity index 100% rename from education/english/ENGL2010/Why Argument Matters - Aikin and Talisse.md rename to education/english/ENGL2010/Why Argument Matters.md diff --git a/education/english/ENGL2010/Why Do We Argue? - Talisse & Aikin.md b/education/english/ENGL2010/Why Do We Argue.md similarity index 100% rename from education/english/ENGL2010/Why Do We Argue? - Talisse & Aikin.md rename to education/english/ENGL2010/Why Do We Argue.md From 7304a3eaf2e4a2d1742a323478ea664e140c386d Mon Sep 17 00:00:00 2001 From: arc Date: Tue, 10 Dec 2024 09:24:37 -0700 Subject: [PATCH 0718/1027] vault backup: 2024-12-10 09:24:37 --- education/nutrition.zip | Bin 0 -> 31146 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 education/nutrition.zip diff --git a/education/nutrition.zip b/education/nutrition.zip new file mode 100644 index 0000000000000000000000000000000000000000..ed6255a8a16a2816f0f5a66784afbeb5baab6060 GIT binary patch literal 31146 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
ixf8l)u3LxlWREgEc+@nm#E1*qNyR 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 j{+Tzn{`dU Date: Mon, 16 Dec 2024 16:17:49 -0700 Subject: [PATCH 0719/1027] vault backup: 2024-12-16 16:17:49 --- .obsidian/plugins/obsidian-git/data.json | 27 ------------------------ 1 file changed, 27 deletions(-) diff --git a/.obsidian/plugins/obsidian-git/data.json b/.obsidian/plugins/obsidian-git/data.json index bef4c6e..e69de29 100644 --- a/.obsidian/plugins/obsidian-git/data.json +++ b/.obsidian/plugins/obsidian-git/data.json @@ -1,27 +0,0 @@ -{ - "commitMessage": "vault backup: {{date}}", - "autoCommitMessage": "vault backup: {{date}}", - "commitDateFormat": "YYYY-MM-DD HH:mm:ss", - "autoSaveInterval": 5, - "autoPushInterval": 0, - "autoPullInterval": 5, - "autoPullOnBoot": true, - "disablePush": false, - "pullBeforePush": true, - "disablePopups": false, - "listChangedFilesInMessageBody": false, - "showStatusBar": true, - "updateSubmodules": false, - "syncMethod": "merge", - "customMessageOnAutoBackup": false, - "autoBackupAfterFileChange": false, - "treeStructure": false, - "refreshSourceControl": true, - "basePath": "", - "differentIntervalCommitAndPush": false, - "changedFilesInStatusBar": false, - "showedMobileNotice": true, - "refreshSourceControlTimer": 7000, - "showBranchStatusBar": true, - "setLastSaveToLastCommit": false -} \ No newline at end of file From d99bc67e121cbea49eb57f445dc6777f0875fa00 Mon Sep 17 00:00:00 2001 From: arc Date: Tue, 17 Dec 2024 12:40:57 -0700 Subject: [PATCH 0720/1027] vault backup: 2024-12-17 12:40:57 --- .obsidian/plugins/obsidian-git/data.json | 27 ++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/.obsidian/plugins/obsidian-git/data.json b/.obsidian/plugins/obsidian-git/data.json index e69de29..bef4c6e 100644 --- a/.obsidian/plugins/obsidian-git/data.json +++ b/.obsidian/plugins/obsidian-git/data.json @@ -0,0 +1,27 @@ +{ + "commitMessage": "vault backup: {{date}}", + "autoCommitMessage": "vault backup: {{date}}", + "commitDateFormat": "YYYY-MM-DD HH:mm:ss", + "autoSaveInterval": 5, + "autoPushInterval": 0, + "autoPullInterval": 5, + "autoPullOnBoot": true, + "disablePush": false, + "pullBeforePush": true, + "disablePopups": false, + "listChangedFilesInMessageBody": false, + "showStatusBar": true, + "updateSubmodules": false, + "syncMethod": "merge", + "customMessageOnAutoBackup": false, + "autoBackupAfterFileChange": false, + "treeStructure": false, + "refreshSourceControl": true, + "basePath": "", + "differentIntervalCommitAndPush": false, + "changedFilesInStatusBar": false, + "showedMobileNotice": true, + "refreshSourceControlTimer": 7000, + "showBranchStatusBar": true, + "setLastSaveToLastCommit": false +} \ No newline at end of file From 53fae8644712aa8f9f2955ad7f5be620211c7541 Mon Sep 17 00:00:00 2001 From: arc Date: Fri, 20 Dec 2024 13:00:15 -0700 Subject: [PATCH 0721/1027] vault backup: 2024-12-20 13:00:15 --- .obsidian/plugins/obsidian-git/data.json | 27 ------------------------ 1 file changed, 27 deletions(-) diff --git a/.obsidian/plugins/obsidian-git/data.json b/.obsidian/plugins/obsidian-git/data.json index bef4c6e..e69de29 100644 --- a/.obsidian/plugins/obsidian-git/data.json +++ b/.obsidian/plugins/obsidian-git/data.json @@ -1,27 +0,0 @@ -{ - "commitMessage": "vault backup: {{date}}", - "autoCommitMessage": "vault backup: {{date}}", - "commitDateFormat": "YYYY-MM-DD HH:mm:ss", - "autoSaveInterval": 5, - "autoPushInterval": 0, - "autoPullInterval": 5, - "autoPullOnBoot": true, - "disablePush": false, - "pullBeforePush": true, - "disablePopups": false, - "listChangedFilesInMessageBody": false, - "showStatusBar": true, - "updateSubmodules": false, - "syncMethod": "merge", - "customMessageOnAutoBackup": false, - "autoBackupAfterFileChange": false, - "treeStructure": false, - "refreshSourceControl": true, - "basePath": "", - "differentIntervalCommitAndPush": false, - "changedFilesInStatusBar": false, - "showedMobileNotice": true, - "refreshSourceControlTimer": 7000, - "showBranchStatusBar": true, - "setLastSaveToLastCommit": false -} \ No newline at end of file From 552f7226d44038f4b5f2597af5030b26af771326 Mon Sep 17 00:00:00 2001 From: arc Date: Fri, 20 Dec 2024 13:30:15 -0700 Subject: [PATCH 0722/1027] vault backup: 2024-12-20 13:30:15 --- .obsidian/plugins/obsidian-git/data.json | 27 ++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/.obsidian/plugins/obsidian-git/data.json b/.obsidian/plugins/obsidian-git/data.json index e69de29..bef4c6e 100644 --- a/.obsidian/plugins/obsidian-git/data.json +++ b/.obsidian/plugins/obsidian-git/data.json @@ -0,0 +1,27 @@ +{ + "commitMessage": "vault backup: {{date}}", + "autoCommitMessage": "vault backup: {{date}}", + "commitDateFormat": "YYYY-MM-DD HH:mm:ss", + "autoSaveInterval": 5, + "autoPushInterval": 0, + "autoPullInterval": 5, + "autoPullOnBoot": true, + "disablePush": false, + "pullBeforePush": true, + "disablePopups": false, + "listChangedFilesInMessageBody": false, + "showStatusBar": true, + "updateSubmodules": false, + "syncMethod": "merge", + "customMessageOnAutoBackup": false, + "autoBackupAfterFileChange": false, + "treeStructure": false, + "refreshSourceControl": true, + "basePath": "", + "differentIntervalCommitAndPush": false, + "changedFilesInStatusBar": false, + "showedMobileNotice": true, + "refreshSourceControlTimer": 7000, + "showBranchStatusBar": true, + "setLastSaveToLastCommit": false +} \ No newline at end of file From 54a644d8e41988e6c388979bc82f4f3b13ee443e Mon Sep 17 00:00:00 2001 From: arc Date: Fri, 20 Dec 2024 13:36:41 -0700 Subject: [PATCH 0723/1027] vault backup: 2024-12-20 13:36:41 --- .obsidian/plugins/obsidian-git/data.json | 27 ------------------------ 1 file changed, 27 deletions(-) diff --git a/.obsidian/plugins/obsidian-git/data.json b/.obsidian/plugins/obsidian-git/data.json index bef4c6e..e69de29 100644 --- a/.obsidian/plugins/obsidian-git/data.json +++ b/.obsidian/plugins/obsidian-git/data.json @@ -1,27 +0,0 @@ -{ - "commitMessage": "vault backup: {{date}}", - "autoCommitMessage": "vault backup: {{date}}", - "commitDateFormat": "YYYY-MM-DD HH:mm:ss", - "autoSaveInterval": 5, - "autoPushInterval": 0, - "autoPullInterval": 5, - "autoPullOnBoot": true, - "disablePush": false, - "pullBeforePush": true, - "disablePopups": false, - "listChangedFilesInMessageBody": false, - "showStatusBar": true, - "updateSubmodules": false, - "syncMethod": "merge", - "customMessageOnAutoBackup": false, - "autoBackupAfterFileChange": false, - "treeStructure": false, - "refreshSourceControl": true, - "basePath": "", - "differentIntervalCommitAndPush": false, - "changedFilesInStatusBar": false, - "showedMobileNotice": true, - "refreshSourceControlTimer": 7000, - "showBranchStatusBar": true, - "setLastSaveToLastCommit": false -} \ No newline at end of file From 6150508f04f0eacd91216566219f8b483516f092 Mon Sep 17 00:00:00 2001 From: arc Date: Fri, 20 Dec 2024 14:11:41 -0700 Subject: [PATCH 0724/1027] vault backup: 2024-12-20 14:11:41 --- .obsidian/plugins/better-export-pdf/data.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.obsidian/plugins/better-export-pdf/data.json b/.obsidian/plugins/better-export-pdf/data.json index 29b7ae9..e9527ec 100644 --- a/.obsidian/plugins/better-export-pdf/data.json +++ b/.obsidian/plugins/better-export-pdf/data.json @@ -14,7 +14,7 @@ "prevConfig": { "pageSize": "A4", "marginType": "1", - "showTitle": false, + "showTitle": true, "open": true, "scale": 100, "landscape": false, From e93c22f9280ccde214021c1068ea3e75b1a9eb89 Mon Sep 17 00:00:00 2001 From: arc Date: Mon, 23 Dec 2024 12:47:11 -0700 Subject: [PATCH 0725/1027] vault backup: 2024-12-23 12:47:11 --- .obsidian/plugins/obsidian-git/data.json | 27 ++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/.obsidian/plugins/obsidian-git/data.json b/.obsidian/plugins/obsidian-git/data.json index e69de29..bef4c6e 100644 --- a/.obsidian/plugins/obsidian-git/data.json +++ b/.obsidian/plugins/obsidian-git/data.json @@ -0,0 +1,27 @@ +{ + "commitMessage": "vault backup: {{date}}", + "autoCommitMessage": "vault backup: {{date}}", + "commitDateFormat": "YYYY-MM-DD HH:mm:ss", + "autoSaveInterval": 5, + "autoPushInterval": 0, + "autoPullInterval": 5, + "autoPullOnBoot": true, + "disablePush": false, + "pullBeforePush": true, + "disablePopups": false, + "listChangedFilesInMessageBody": false, + "showStatusBar": true, + "updateSubmodules": false, + "syncMethod": "merge", + "customMessageOnAutoBackup": false, + "autoBackupAfterFileChange": false, + "treeStructure": false, + "refreshSourceControl": true, + "basePath": "", + "differentIntervalCommitAndPush": false, + "changedFilesInStatusBar": false, + "showedMobileNotice": true, + "refreshSourceControlTimer": 7000, + "showBranchStatusBar": true, + "setLastSaveToLastCommit": false +} \ No newline at end of file From 544cfb24fc12bc3ffe293dd0afa3ec626c42e557 Mon Sep 17 00:00:00 2001 From: arc Date: Tue, 7 Jan 2025 18:09:44 -0700 Subject: [PATCH 0726/1027] vault backup: 2025-01-07 18:09:44 --- .../ECE1400/(not) Chapter 11 Exercises.md | 0 education/{software development => music}/ECE1400/C.md | 0 .../ECE1400/Chapter 11 Exercises.md | 0 .../ECE1400/Chapter 12 Exercises.md | 0 .../ECE1400/Chapter 13 Exercises.md | 0 .../ECE1400/Chapter 14 Exercises.md | 0 .../ECE1400/Chapter 15 Exercises.md | 0 .../ECE1400/Chapter 16 Exercises.md | 0 .../ECE1400/Chapter 17 Exercises.md | 0 .../ECE1400/Chapter 2 Exercises.md | 0 .../ECE1400/Chapter 3 Exercises.md | 0 .../ECE1400/Chapter 4 Exercises.md | 0 .../ECE1400/Chapter 5 Exercises.md | 0 .../ECE1400/Chapter 6 Exercises.md | 0 .../ECE1400/Chapter 7 Exercises.md | 0 .../ECE1400/Chapter 8 Exercises.md | 0 .../ECE1400/Chapter 9 Exercises.md | 0 .../ECE1400/Flowcharts and Pseudocode.md | 0 18 files changed, 0 insertions(+), 0 deletions(-) rename education/{software development => music}/ECE1400/(not) Chapter 11 Exercises.md (100%) rename education/{software development => music}/ECE1400/C.md (100%) rename education/{software development => music}/ECE1400/Chapter 11 Exercises.md (100%) rename education/{software development => music}/ECE1400/Chapter 12 Exercises.md (100%) rename education/{software development => music}/ECE1400/Chapter 13 Exercises.md (100%) rename education/{software development => music}/ECE1400/Chapter 14 Exercises.md (100%) rename education/{software development => music}/ECE1400/Chapter 15 Exercises.md (100%) rename education/{software development => music}/ECE1400/Chapter 16 Exercises.md (100%) rename education/{software development => music}/ECE1400/Chapter 17 Exercises.md (100%) rename education/{software development => music}/ECE1400/Chapter 2 Exercises.md (100%) rename education/{software development => music}/ECE1400/Chapter 3 Exercises.md (100%) rename education/{software development => music}/ECE1400/Chapter 4 Exercises.md (100%) rename education/{software development => music}/ECE1400/Chapter 5 Exercises.md (100%) rename education/{software development => music}/ECE1400/Chapter 6 Exercises.md (100%) rename education/{software development => music}/ECE1400/Chapter 7 Exercises.md (100%) rename education/{software development => music}/ECE1400/Chapter 8 Exercises.md (100%) rename education/{software development => music}/ECE1400/Chapter 9 Exercises.md (100%) rename education/{software development => music}/ECE1400/Flowcharts and Pseudocode.md (100%) diff --git a/education/software development/ECE1400/(not) Chapter 11 Exercises.md b/education/music/ECE1400/(not) Chapter 11 Exercises.md similarity index 100% rename from education/software development/ECE1400/(not) Chapter 11 Exercises.md rename to education/music/ECE1400/(not) Chapter 11 Exercises.md diff --git a/education/software development/ECE1400/C.md b/education/music/ECE1400/C.md similarity index 100% rename from education/software development/ECE1400/C.md rename to education/music/ECE1400/C.md diff --git a/education/software development/ECE1400/Chapter 11 Exercises.md b/education/music/ECE1400/Chapter 11 Exercises.md similarity index 100% rename from education/software development/ECE1400/Chapter 11 Exercises.md rename to education/music/ECE1400/Chapter 11 Exercises.md diff --git a/education/software development/ECE1400/Chapter 12 Exercises.md b/education/music/ECE1400/Chapter 12 Exercises.md similarity index 100% rename from education/software development/ECE1400/Chapter 12 Exercises.md rename to education/music/ECE1400/Chapter 12 Exercises.md diff --git a/education/software development/ECE1400/Chapter 13 Exercises.md b/education/music/ECE1400/Chapter 13 Exercises.md similarity index 100% rename from education/software development/ECE1400/Chapter 13 Exercises.md rename to education/music/ECE1400/Chapter 13 Exercises.md diff --git a/education/software development/ECE1400/Chapter 14 Exercises.md b/education/music/ECE1400/Chapter 14 Exercises.md similarity index 100% rename from education/software development/ECE1400/Chapter 14 Exercises.md rename to education/music/ECE1400/Chapter 14 Exercises.md diff --git a/education/software development/ECE1400/Chapter 15 Exercises.md b/education/music/ECE1400/Chapter 15 Exercises.md similarity index 100% rename from education/software development/ECE1400/Chapter 15 Exercises.md rename to education/music/ECE1400/Chapter 15 Exercises.md diff --git a/education/software development/ECE1400/Chapter 16 Exercises.md b/education/music/ECE1400/Chapter 16 Exercises.md similarity index 100% rename from education/software development/ECE1400/Chapter 16 Exercises.md rename to education/music/ECE1400/Chapter 16 Exercises.md diff --git a/education/software development/ECE1400/Chapter 17 Exercises.md b/education/music/ECE1400/Chapter 17 Exercises.md similarity index 100% rename from education/software development/ECE1400/Chapter 17 Exercises.md rename to education/music/ECE1400/Chapter 17 Exercises.md diff --git a/education/software development/ECE1400/Chapter 2 Exercises.md b/education/music/ECE1400/Chapter 2 Exercises.md similarity index 100% rename from education/software development/ECE1400/Chapter 2 Exercises.md rename to education/music/ECE1400/Chapter 2 Exercises.md diff --git a/education/software development/ECE1400/Chapter 3 Exercises.md b/education/music/ECE1400/Chapter 3 Exercises.md similarity index 100% rename from education/software development/ECE1400/Chapter 3 Exercises.md rename to education/music/ECE1400/Chapter 3 Exercises.md diff --git a/education/software development/ECE1400/Chapter 4 Exercises.md b/education/music/ECE1400/Chapter 4 Exercises.md similarity index 100% rename from education/software development/ECE1400/Chapter 4 Exercises.md rename to education/music/ECE1400/Chapter 4 Exercises.md diff --git a/education/software development/ECE1400/Chapter 5 Exercises.md b/education/music/ECE1400/Chapter 5 Exercises.md similarity index 100% rename from education/software development/ECE1400/Chapter 5 Exercises.md rename to education/music/ECE1400/Chapter 5 Exercises.md diff --git a/education/software development/ECE1400/Chapter 6 Exercises.md b/education/music/ECE1400/Chapter 6 Exercises.md similarity index 100% rename from education/software development/ECE1400/Chapter 6 Exercises.md rename to education/music/ECE1400/Chapter 6 Exercises.md diff --git a/education/software development/ECE1400/Chapter 7 Exercises.md b/education/music/ECE1400/Chapter 7 Exercises.md similarity index 100% rename from education/software development/ECE1400/Chapter 7 Exercises.md rename to education/music/ECE1400/Chapter 7 Exercises.md diff --git a/education/software development/ECE1400/Chapter 8 Exercises.md b/education/music/ECE1400/Chapter 8 Exercises.md similarity index 100% rename from education/software development/ECE1400/Chapter 8 Exercises.md rename to education/music/ECE1400/Chapter 8 Exercises.md diff --git a/education/software development/ECE1400/Chapter 9 Exercises.md b/education/music/ECE1400/Chapter 9 Exercises.md similarity index 100% rename from education/software development/ECE1400/Chapter 9 Exercises.md rename to education/music/ECE1400/Chapter 9 Exercises.md diff --git a/education/software development/ECE1400/Flowcharts and Pseudocode.md b/education/music/ECE1400/Flowcharts and Pseudocode.md similarity index 100% rename from education/software development/ECE1400/Flowcharts and Pseudocode.md rename to education/music/ECE1400/Flowcharts and Pseudocode.md From c99ca523f4a7aaaf02f65fffe58c9d5690b96055 Mon Sep 17 00:00:00 2001 From: arc Date: Tue, 7 Jan 2025 18:14:44 -0700 Subject: [PATCH 0727/1027] vault backup: 2025-01-07 18:14:44 --- .../ECE1400/(not) Chapter 11 Exercises.md | 0 education/{music => computer engineering}/ECE1400/C.md | 0 .../ECE1400/Chapter 11 Exercises.md | 0 .../ECE1400/Chapter 12 Exercises.md | 0 .../ECE1400/Chapter 13 Exercises.md | 0 .../ECE1400/Chapter 14 Exercises.md | 0 .../ECE1400/Chapter 15 Exercises.md | 0 .../ECE1400/Chapter 16 Exercises.md | 0 .../ECE1400/Chapter 17 Exercises.md | 0 .../ECE1400/Chapter 2 Exercises.md | 0 .../ECE1400/Chapter 3 Exercises.md | 0 .../ECE1400/Chapter 4 Exercises.md | 0 .../ECE1400/Chapter 5 Exercises.md | 0 .../ECE1400/Chapter 6 Exercises.md | 0 .../ECE1400/Chapter 7 Exercises.md | 0 .../ECE1400/Chapter 8 Exercises.md | 0 .../ECE1400/Chapter 9 Exercises.md | 0 .../ECE1400/Flowcharts and Pseudocode.md | 0 education/computer engineering/ECE2700/Introduction.md | 2 ++ .../Ohm's Law.md | 0 education/math/MATH1210 (calc 1)/Limits.md | 8 ++++++++ 21 files changed, 10 insertions(+) rename education/{music => computer engineering}/ECE1400/(not) Chapter 11 Exercises.md (100%) rename education/{music => computer engineering}/ECE1400/C.md (100%) rename education/{music => computer engineering}/ECE1400/Chapter 11 Exercises.md (100%) rename education/{music => computer engineering}/ECE1400/Chapter 12 Exercises.md (100%) rename education/{music => computer engineering}/ECE1400/Chapter 13 Exercises.md (100%) rename education/{music => computer engineering}/ECE1400/Chapter 14 Exercises.md (100%) rename education/{music => computer engineering}/ECE1400/Chapter 15 Exercises.md (100%) rename education/{music => computer engineering}/ECE1400/Chapter 16 Exercises.md (100%) rename education/{music => computer engineering}/ECE1400/Chapter 17 Exercises.md (100%) rename education/{music => computer engineering}/ECE1400/Chapter 2 Exercises.md (100%) rename education/{music => computer engineering}/ECE1400/Chapter 3 Exercises.md (100%) rename education/{music => computer engineering}/ECE1400/Chapter 4 Exercises.md (100%) rename education/{music => computer engineering}/ECE1400/Chapter 5 Exercises.md (100%) rename education/{music => computer engineering}/ECE1400/Chapter 6 Exercises.md (100%) rename education/{music => computer engineering}/ECE1400/Chapter 7 Exercises.md (100%) rename education/{music => computer engineering}/ECE1400/Chapter 8 Exercises.md (100%) rename education/{music => computer engineering}/ECE1400/Chapter 9 Exercises.md (100%) rename education/{music => computer engineering}/ECE1400/Flowcharts and Pseudocode.md (100%) create mode 100644 education/computer engineering/ECE2700/Introduction.md rename education/{electrical engineering => computer engineering}/Ohm's Law.md (100%) create mode 100644 education/math/MATH1210 (calc 1)/Limits.md diff --git a/education/music/ECE1400/(not) Chapter 11 Exercises.md b/education/computer engineering/ECE1400/(not) Chapter 11 Exercises.md similarity index 100% rename from education/music/ECE1400/(not) Chapter 11 Exercises.md rename to education/computer engineering/ECE1400/(not) Chapter 11 Exercises.md diff --git a/education/music/ECE1400/C.md b/education/computer engineering/ECE1400/C.md similarity index 100% rename from education/music/ECE1400/C.md rename to education/computer engineering/ECE1400/C.md diff --git a/education/music/ECE1400/Chapter 11 Exercises.md b/education/computer engineering/ECE1400/Chapter 11 Exercises.md similarity index 100% rename from education/music/ECE1400/Chapter 11 Exercises.md rename to education/computer engineering/ECE1400/Chapter 11 Exercises.md diff --git a/education/music/ECE1400/Chapter 12 Exercises.md b/education/computer engineering/ECE1400/Chapter 12 Exercises.md similarity index 100% rename from education/music/ECE1400/Chapter 12 Exercises.md rename to education/computer engineering/ECE1400/Chapter 12 Exercises.md diff --git a/education/music/ECE1400/Chapter 13 Exercises.md b/education/computer engineering/ECE1400/Chapter 13 Exercises.md similarity index 100% rename from education/music/ECE1400/Chapter 13 Exercises.md rename to education/computer engineering/ECE1400/Chapter 13 Exercises.md diff --git a/education/music/ECE1400/Chapter 14 Exercises.md b/education/computer engineering/ECE1400/Chapter 14 Exercises.md similarity index 100% rename from education/music/ECE1400/Chapter 14 Exercises.md rename to education/computer engineering/ECE1400/Chapter 14 Exercises.md diff --git a/education/music/ECE1400/Chapter 15 Exercises.md b/education/computer engineering/ECE1400/Chapter 15 Exercises.md similarity index 100% rename from education/music/ECE1400/Chapter 15 Exercises.md rename to education/computer engineering/ECE1400/Chapter 15 Exercises.md diff --git a/education/music/ECE1400/Chapter 16 Exercises.md b/education/computer engineering/ECE1400/Chapter 16 Exercises.md similarity index 100% rename from education/music/ECE1400/Chapter 16 Exercises.md rename to education/computer engineering/ECE1400/Chapter 16 Exercises.md diff --git a/education/music/ECE1400/Chapter 17 Exercises.md b/education/computer engineering/ECE1400/Chapter 17 Exercises.md similarity index 100% rename from education/music/ECE1400/Chapter 17 Exercises.md rename to education/computer engineering/ECE1400/Chapter 17 Exercises.md diff --git a/education/music/ECE1400/Chapter 2 Exercises.md b/education/computer engineering/ECE1400/Chapter 2 Exercises.md similarity index 100% rename from education/music/ECE1400/Chapter 2 Exercises.md rename to education/computer engineering/ECE1400/Chapter 2 Exercises.md diff --git a/education/music/ECE1400/Chapter 3 Exercises.md b/education/computer engineering/ECE1400/Chapter 3 Exercises.md similarity index 100% rename from education/music/ECE1400/Chapter 3 Exercises.md rename to education/computer engineering/ECE1400/Chapter 3 Exercises.md diff --git a/education/music/ECE1400/Chapter 4 Exercises.md b/education/computer engineering/ECE1400/Chapter 4 Exercises.md similarity index 100% rename from education/music/ECE1400/Chapter 4 Exercises.md rename to education/computer engineering/ECE1400/Chapter 4 Exercises.md diff --git a/education/music/ECE1400/Chapter 5 Exercises.md b/education/computer engineering/ECE1400/Chapter 5 Exercises.md similarity index 100% rename from education/music/ECE1400/Chapter 5 Exercises.md rename to education/computer engineering/ECE1400/Chapter 5 Exercises.md diff --git a/education/music/ECE1400/Chapter 6 Exercises.md b/education/computer engineering/ECE1400/Chapter 6 Exercises.md similarity index 100% rename from education/music/ECE1400/Chapter 6 Exercises.md rename to education/computer engineering/ECE1400/Chapter 6 Exercises.md diff --git a/education/music/ECE1400/Chapter 7 Exercises.md b/education/computer engineering/ECE1400/Chapter 7 Exercises.md similarity index 100% rename from education/music/ECE1400/Chapter 7 Exercises.md rename to education/computer engineering/ECE1400/Chapter 7 Exercises.md diff --git a/education/music/ECE1400/Chapter 8 Exercises.md b/education/computer engineering/ECE1400/Chapter 8 Exercises.md similarity index 100% rename from education/music/ECE1400/Chapter 8 Exercises.md rename to education/computer engineering/ECE1400/Chapter 8 Exercises.md diff --git a/education/music/ECE1400/Chapter 9 Exercises.md b/education/computer engineering/ECE1400/Chapter 9 Exercises.md similarity index 100% rename from education/music/ECE1400/Chapter 9 Exercises.md rename to education/computer engineering/ECE1400/Chapter 9 Exercises.md diff --git a/education/music/ECE1400/Flowcharts and Pseudocode.md b/education/computer engineering/ECE1400/Flowcharts and Pseudocode.md similarity index 100% rename from education/music/ECE1400/Flowcharts and Pseudocode.md rename to education/computer engineering/ECE1400/Flowcharts and Pseudocode.md diff --git a/education/computer engineering/ECE2700/Introduction.md b/education/computer engineering/ECE2700/Introduction.md new file mode 100644 index 0000000..3e5e61d --- /dev/null +++ b/education/computer engineering/ECE2700/Introduction.md @@ -0,0 +1,2 @@ +- **Xtor* is an abbreviation for *transistor* +- **Moore's Law** states that the number of transistors on a chip doubles every two years. \ No newline at end of file diff --git a/education/electrical engineering/Ohm's Law.md b/education/computer engineering/Ohm's Law.md similarity index 100% rename from education/electrical engineering/Ohm's Law.md rename to education/computer engineering/Ohm's Law.md diff --git a/education/math/MATH1210 (calc 1)/Limits.md b/education/math/MATH1210 (calc 1)/Limits.md new file mode 100644 index 0000000..d146d6d --- /dev/null +++ b/education/math/MATH1210 (calc 1)/Limits.md @@ -0,0 +1,8 @@ +# Introduction +- Every mathematical function can be thought of as a set of ordered pairs, or an input value and an output value. + - Examples include $f(x) = x^2 + 2x + 1$, and $\{(1, 3), (2, 5), (4, 7)\}$. + +# Definitions + +| Term | Definition | + From b34904f8956d930030b1b071381b52c90caefd0b Mon Sep 17 00:00:00 2001 From: arc Date: Tue, 7 Jan 2025 18:19:44 -0700 Subject: [PATCH 0728/1027] vault backup: 2025-01-07 18:19:44 --- education/math/MATH1210 (calc 1)/Limits.md | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/education/math/MATH1210 (calc 1)/Limits.md b/education/math/MATH1210 (calc 1)/Limits.md index d146d6d..f927baf 100644 --- a/education/math/MATH1210 (calc 1)/Limits.md +++ b/education/math/MATH1210 (calc 1)/Limits.md @@ -1,8 +1,15 @@ # Introduction -- Every mathematical function can be thought of as a set of ordered pairs, or an input value and an output value. - - Examples include $f(x) = x^2 + 2x + 1$, and $\{(1, 3), (2, 5), (4, 7)\}$. +Every mathematical function can be thought of as a set of ordered pairs, or an input value and an output value. +- Examples include $f(x) = x^2 + 2x + 1$, and $\{(1, 3), (2, 5), (4, 7)\}$. +**A limit describes how a function behaves *near* a point, rather than *at* that point.*** +- As an example, given a well behaved function~ $f(x)$ and $f(2) = 9$, we can assume that # Definitions -| Term | Definition | +| Term | Definition | +| --------------------- | ----------------------------------------------------------------------------- | +| Well behaved function | A function that is continuous, has a single value, and is defined everywhere. | +| | | + + From f5c776708a509327969e352aa07cf72ff2bd00e0 Mon Sep 17 00:00:00 2001 From: arc Date: Tue, 7 Jan 2025 18:24:44 -0700 Subject: [PATCH 0729/1027] vault backup: 2025-01-07 18:24:44 --- education/math/MATH1210 (calc 1)/Limits.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/education/math/MATH1210 (calc 1)/Limits.md b/education/math/MATH1210 (calc 1)/Limits.md index f927baf..811bd50 100644 --- a/education/math/MATH1210 (calc 1)/Limits.md +++ b/education/math/MATH1210 (calc 1)/Limits.md @@ -3,7 +3,7 @@ Every mathematical function can be thought of as a set of ordered pairs, or an i - Examples include $f(x) = x^2 + 2x + 1$, and $\{(1, 3), (2, 5), (4, 7)\}$. **A limit describes how a function behaves *near* a point, rather than *at* that point.*** -- As an example, given a well behaved function~ $f(x)$ and $f(2) = 9$, we can assume that +- As an example, given a *well behaved function*~ $f(x)$ and $f(2) = 9$, we can assume that # Definitions | Term | Definition | From 236165cdd221e429c0a40f64a0a5ddda6e2eb1a6 Mon Sep 17 00:00:00 2001 From: arc Date: Tue, 7 Jan 2025 18:29:44 -0700 Subject: [PATCH 0730/1027] vault backup: 2025-01-07 18:29:44 --- education/math/MATH1210 (calc 1)/Limits.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/education/math/MATH1210 (calc 1)/Limits.md b/education/math/MATH1210 (calc 1)/Limits.md index 811bd50..c5dd15c 100644 --- a/education/math/MATH1210 (calc 1)/Limits.md +++ b/education/math/MATH1210 (calc 1)/Limits.md @@ -3,7 +3,13 @@ Every mathematical function can be thought of as a set of ordered pairs, or an i - Examples include $f(x) = x^2 + 2x + 1$, and $\{(1, 3), (2, 5), (4, 7)\}$. **A limit describes how a function behaves *near* a point, rather than *at* that point.*** -- As an example, given a *well behaved function*~ $f(x)$ and $f(2) = 9$, we can assume that +- As an example, given a *well behaved function* $f(x)$ and the fact that: + - $f(1.9) = 8.41$ + - $f(1.999) = 8.99401$ + - $f(2.1) = 9.61$ + - $f(2.01) = 9.061$ + - $f(2.0001) = 9.0006$ + We can note that the smaller the distance of the input value $x$ to $2$, the smaller the distance of the output to $9$. This is most commonly described in the terms "As $x$ approaches $2$, $f(x)$ approaches $9$. $ \rarrow$" # Definitions | Term | Definition | From d9aeb6320a2805a2338db9b8d78155cf7c224a3b Mon Sep 17 00:00:00 2001 From: arc Date: Tue, 7 Jan 2025 18:34:44 -0700 Subject: [PATCH 0731/1027] vault backup: 2025-01-07 18:34:44 --- .obsidian/plugins/obsidian-git/data.json | 27 ---------------------- education/math/MATH1210 (calc 1)/Limits.md | 10 ++++++-- 2 files changed, 8 insertions(+), 29 deletions(-) diff --git a/.obsidian/plugins/obsidian-git/data.json b/.obsidian/plugins/obsidian-git/data.json index bef4c6e..e69de29 100644 --- a/.obsidian/plugins/obsidian-git/data.json +++ b/.obsidian/plugins/obsidian-git/data.json @@ -1,27 +0,0 @@ -{ - "commitMessage": "vault backup: {{date}}", - "autoCommitMessage": "vault backup: {{date}}", - "commitDateFormat": "YYYY-MM-DD HH:mm:ss", - "autoSaveInterval": 5, - "autoPushInterval": 0, - "autoPullInterval": 5, - "autoPullOnBoot": true, - "disablePush": false, - "pullBeforePush": true, - "disablePopups": false, - "listChangedFilesInMessageBody": false, - "showStatusBar": true, - "updateSubmodules": false, - "syncMethod": "merge", - "customMessageOnAutoBackup": false, - "autoBackupAfterFileChange": false, - "treeStructure": false, - "refreshSourceControl": true, - "basePath": "", - "differentIntervalCommitAndPush": false, - "changedFilesInStatusBar": false, - "showedMobileNotice": true, - "refreshSourceControlTimer": 7000, - "showBranchStatusBar": true, - "setLastSaveToLastCommit": false -} \ No newline at end of file diff --git a/education/math/MATH1210 (calc 1)/Limits.md b/education/math/MATH1210 (calc 1)/Limits.md index c5dd15c..8a271ce 100644 --- a/education/math/MATH1210 (calc 1)/Limits.md +++ b/education/math/MATH1210 (calc 1)/Limits.md @@ -9,13 +9,19 @@ Every mathematical function can be thought of as a set of ordered pairs, or an i - $f(2.1) = 9.61$ - $f(2.01) = 9.061$ - $f(2.0001) = 9.0006$ - We can note that the smaller the distance of the input value $x$ to $2$, the smaller the distance of the output to $9$. This is most commonly described in the terms "As $x$ approaches $2$, $f(x)$ approaches $9$. $ \rarrow$" + We can note that the smaller the distance of the input value $x$ to $2$, the smaller the distance of the output to $9$. This is most commonly described in the terms "As $x$ approaches $2$, $f(x)$ approaches $9$", or "As $x \to 2$, $f(x) \to 9$." + +Limits are valuable because they can be used to describe a point on a graph, even if that point is not present. +# Standard Notation +The standard notation for a limit is: +$$ \lim_{x \to a} f(x) = L $$ +- As $x$ approaches $a$, the output of $f(x)$ draws closer to $L$. # Definitions | Term | Definition | | --------------------- | ----------------------------------------------------------------------------- | | Well behaved function | A function that is continuous, has a single value, and is defined everywhere. | -| | | + From 6a8bda4f8b18c9c05a007c3fc7af0a6664ef5198 Mon Sep 17 00:00:00 2001 From: arc Date: Wed, 8 Jan 2025 11:58:17 -0700 Subject: [PATCH 0732/1027] vault backup: 2025-01-08 11:58:17 --- .obsidian/plugins/obsidian-git/data.json | 27 ++++++++++++++++++++++ education/math/MATH1210 (calc 1)/Limits.md | 3 ++- 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/.obsidian/plugins/obsidian-git/data.json b/.obsidian/plugins/obsidian-git/data.json index e69de29..bef4c6e 100644 --- a/.obsidian/plugins/obsidian-git/data.json +++ b/.obsidian/plugins/obsidian-git/data.json @@ -0,0 +1,27 @@ +{ + "commitMessage": "vault backup: {{date}}", + "autoCommitMessage": "vault backup: {{date}}", + "commitDateFormat": "YYYY-MM-DD HH:mm:ss", + "autoSaveInterval": 5, + "autoPushInterval": 0, + "autoPullInterval": 5, + "autoPullOnBoot": true, + "disablePush": false, + "pullBeforePush": true, + "disablePopups": false, + "listChangedFilesInMessageBody": false, + "showStatusBar": true, + "updateSubmodules": false, + "syncMethod": "merge", + "customMessageOnAutoBackup": false, + "autoBackupAfterFileChange": false, + "treeStructure": false, + "refreshSourceControl": true, + "basePath": "", + "differentIntervalCommitAndPush": false, + "changedFilesInStatusBar": false, + "showedMobileNotice": true, + "refreshSourceControlTimer": 7000, + "showBranchStatusBar": true, + "setLastSaveToLastCommit": false +} \ No newline at end of file diff --git a/education/math/MATH1210 (calc 1)/Limits.md b/education/math/MATH1210 (calc 1)/Limits.md index 8a271ce..b6e60c2 100644 --- a/education/math/MATH1210 (calc 1)/Limits.md +++ b/education/math/MATH1210 (calc 1)/Limits.md @@ -15,7 +15,8 @@ Limits are valuable because they can be used to describe a point on a graph, eve # Standard Notation The standard notation for a limit is: $$ \lim_{x \to a} f(x) = L $$ -- As $x$ approaches $a$, the output of $f(x)$ draws closer to $L$. +- As $x$ approaches $a$, the output of $f(x)$ draws closer to $L$. In the above notation, $x$ and $a$ are not necessarily equal. +- When plotted, the hole is located at $(a, L)$. # Definitions | Term | Definition | From 00b837abaf5e03eb12adfd8f4b5cd7b32128958d Mon Sep 17 00:00:00 2001 From: arc Date: Wed, 8 Jan 2025 12:03:17 -0700 Subject: [PATCH 0733/1027] vault backup: 2025-01-08 12:03:17 --- .../computer engineering/ECE2700/Digital Hardware.md | 10 ++++++++++ education/computer engineering/ECE2700/Introduction.md | 2 -- 2 files changed, 10 insertions(+), 2 deletions(-) create mode 100644 education/computer engineering/ECE2700/Digital Hardware.md delete mode 100644 education/computer engineering/ECE2700/Introduction.md diff --git a/education/computer engineering/ECE2700/Digital Hardware.md b/education/computer engineering/ECE2700/Digital Hardware.md new file mode 100644 index 0000000..9e75f68 --- /dev/null +++ b/education/computer engineering/ECE2700/Digital Hardware.md @@ -0,0 +1,10 @@ +Any product that contains a logic circuit is classified as digital hardware. +- Moore's Law states that the number of a transistors on a chip doubles every two years + - The International Technology Roadmap for Semiconductors (ITRS) forecasts technology, including the number of transistors on a chip +- Multiple integrated circuits can be connected using a printed circuit board, or PCB. +- *Standard chips* conform to an agreed upon standard for functionality and physical configuration. They are usually less than 100 transistors in size, and provide basic building blocks for logic. + - These chips are combined to form a larger logic circuit + - THey were popu +# Definitions +- **Xtor** is an abbreviation for *transistor* +- **Moore's Law** states that the number of transistors on a chip doubles every two years. \ No newline at end of file diff --git a/education/computer engineering/ECE2700/Introduction.md b/education/computer engineering/ECE2700/Introduction.md deleted file mode 100644 index 3e5e61d..0000000 --- a/education/computer engineering/ECE2700/Introduction.md +++ /dev/null @@ -1,2 +0,0 @@ -- **Xtor* is an abbreviation for *transistor* -- **Moore's Law** states that the number of transistors on a chip doubles every two years. \ No newline at end of file From 562b78346364058788bf9f1d90c4ead9a8807d8f Mon Sep 17 00:00:00 2001 From: arc Date: Wed, 8 Jan 2025 12:08:17 -0700 Subject: [PATCH 0734/1027] vault backup: 2025-01-08 12:08:17 --- .../ECE2700/Digital Hardware.md | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/education/computer engineering/ECE2700/Digital Hardware.md b/education/computer engineering/ECE2700/Digital Hardware.md index 9e75f68..fd54c26 100644 --- a/education/computer engineering/ECE2700/Digital Hardware.md +++ b/education/computer engineering/ECE2700/Digital Hardware.md @@ -1,10 +1,23 @@ -Any product that contains a logic circuit is classified as digital hardware. +Any poduct that contains a logic circuit is classified as digital hardware. - Moore's Law states that the number of a transistors on a chip doubles every two years - The International Technology Roadmap for Semiconductors (ITRS) forecasts technology, including the number of transistors on a chip - Multiple integrated circuits can be connected using a printed circuit board, or PCB. - *Standard chips* conform to an agreed upon standard for functionality and physical configuration. They are usually less than 100 transistors in size, and provide basic building blocks for logic. - These chips are combined to form a larger logic circuit - - THey were popu + - They were popular until the 1980s + - As ICs improved, it became inefficient space-wise to have separate chips for each logical building block + - The functionality of these chips is fixed, and they do not change. +# Programmable Logic Devices +Programmable logic devices (PLDs) include a number of programmable switches that can configure the internal circuitry of a chip +- The most common type of PLD is a Field Programmable Gate Array (FPGA) +- FPGAs are widely available, but come with the drawback that they're limited in speed and performance + +# Application Specific Integrated Circuits +Application Specific Integrated Circuits (ASICs) have higher maximum performance and transistor density compared to FPGAs, but the cost of production is very high. +- A logic circuit is made of connected logic gates + +# Binary Numbers + # Definitions - **Xtor** is an abbreviation for *transistor* - **Moore's Law** states that the number of transistors on a chip doubles every two years. \ No newline at end of file From b8eb7ce64058885fbd06ede7258f183cec1573b0 Mon Sep 17 00:00:00 2001 From: arc Date: Wed, 8 Jan 2025 12:13:17 -0700 Subject: [PATCH 0735/1027] vault backup: 2025-01-08 12:13:17 --- .../computer engineering/ECE2700/Digital Hardware.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/education/computer engineering/ECE2700/Digital Hardware.md b/education/computer engineering/ECE2700/Digital Hardware.md index fd54c26..6171dc1 100644 --- a/education/computer engineering/ECE2700/Digital Hardware.md +++ b/education/computer engineering/ECE2700/Digital Hardware.md @@ -17,7 +17,11 @@ Application Specific Integrated Circuits (ASICs) have higher maximum performance - A logic circuit is made of connected logic gates # Binary Numbers - +In base 10, a value is expressed by an n-tuple with n digits +$$ D = d_{n-1}d_{n-2} \cdots d_1 d_0 $$ +This represents the value +$$ V(D) = d_{n-1} * 10^{n-1} + d_{n - 2} * 10^{n-2} + \cdots + d_1 * 10^1 + d$$ # Definitions - **Xtor** is an abbreviation for *transistor* -- **Moore's Law** states that the number of transistors on a chip doubles every two years. \ No newline at end of file +- **Moore's Law** states that the number of transistors on a chip doubles every two years. +- A tuple is a finite and ordered list of things \ No newline at end of file From 6234484ffe660d63aa8f90ecebc7425e76045ca5 Mon Sep 17 00:00:00 2001 From: arc Date: Wed, 8 Jan 2025 12:18:17 -0700 Subject: [PATCH 0736/1027] vault backup: 2025-01-08 12:18:17 --- education/computer engineering/ECE2700/Digital Hardware.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/education/computer engineering/ECE2700/Digital Hardware.md b/education/computer engineering/ECE2700/Digital Hardware.md index 6171dc1..7d40ae8 100644 --- a/education/computer engineering/ECE2700/Digital Hardware.md +++ b/education/computer engineering/ECE2700/Digital Hardware.md @@ -20,7 +20,8 @@ Application Specific Integrated Circuits (ASICs) have higher maximum performance In base 10, a value is expressed by an n-tuple with n digits $$ D = d_{n-1}d_{n-2} \cdots d_1 d_0 $$ This represents the value -$$ V(D) = d_{n-1} * 10^{n-1} + d_{n - 2} * 10^{n-2} + \cdots + d_1 * 10^1 + d$$ +$$ V(D) = d_{n-1} * 10^{n-1} + d_{n - 2} * 10^{n-2} + \cdots + d_1 * 10^1 + d_0 * 10^0 $$ + # Definitions - **Xtor** is an abbreviation for *transistor* - **Moore's Law** states that the number of transistors on a chip doubles every two years. From b8b1ac748de41b330487268201818814b30938be Mon Sep 17 00:00:00 2001 From: arc Date: Thu, 9 Jan 2025 11:00:52 -0700 Subject: [PATCH 0737/1027] vault backup: 2025-01-09 11:00:52 --- .obsidian/plugins/obsidian-git/data.json | 27 ------------------------ 1 file changed, 27 deletions(-) diff --git a/.obsidian/plugins/obsidian-git/data.json b/.obsidian/plugins/obsidian-git/data.json index bef4c6e..e69de29 100644 --- a/.obsidian/plugins/obsidian-git/data.json +++ b/.obsidian/plugins/obsidian-git/data.json @@ -1,27 +0,0 @@ -{ - "commitMessage": "vault backup: {{date}}", - "autoCommitMessage": "vault backup: {{date}}", - "commitDateFormat": "YYYY-MM-DD HH:mm:ss", - "autoSaveInterval": 5, - "autoPushInterval": 0, - "autoPullInterval": 5, - "autoPullOnBoot": true, - "disablePush": false, - "pullBeforePush": true, - "disablePopups": false, - "listChangedFilesInMessageBody": false, - "showStatusBar": true, - "updateSubmodules": false, - "syncMethod": "merge", - "customMessageOnAutoBackup": false, - "autoBackupAfterFileChange": false, - "treeStructure": false, - "refreshSourceControl": true, - "basePath": "", - "differentIntervalCommitAndPush": false, - "changedFilesInStatusBar": false, - "showedMobileNotice": true, - "refreshSourceControlTimer": 7000, - "showBranchStatusBar": true, - "setLastSaveToLastCommit": false -} \ No newline at end of file From c3016ca48350016e5405b6d8ed8ab8007297b6b4 Mon Sep 17 00:00:00 2001 From: arc Date: Thu, 9 Jan 2025 11:25:52 -0700 Subject: [PATCH 0738/1027] vault backup: 2025-01-09 11:25:52 --- .obsidian/plugins/obsidian-git/data.json | 27 +++++++++++++++++++ .../ECE1410/Binary Manipulation.md | 2 ++ 2 files changed, 29 insertions(+) create mode 100644 education/computer engineering/ECE1410/Binary Manipulation.md diff --git a/.obsidian/plugins/obsidian-git/data.json b/.obsidian/plugins/obsidian-git/data.json index e69de29..bef4c6e 100644 --- a/.obsidian/plugins/obsidian-git/data.json +++ b/.obsidian/plugins/obsidian-git/data.json @@ -0,0 +1,27 @@ +{ + "commitMessage": "vault backup: {{date}}", + "autoCommitMessage": "vault backup: {{date}}", + "commitDateFormat": "YYYY-MM-DD HH:mm:ss", + "autoSaveInterval": 5, + "autoPushInterval": 0, + "autoPullInterval": 5, + "autoPullOnBoot": true, + "disablePush": false, + "pullBeforePush": true, + "disablePopups": false, + "listChangedFilesInMessageBody": false, + "showStatusBar": true, + "updateSubmodules": false, + "syncMethod": "merge", + "customMessageOnAutoBackup": false, + "autoBackupAfterFileChange": false, + "treeStructure": false, + "refreshSourceControl": true, + "basePath": "", + "differentIntervalCommitAndPush": false, + "changedFilesInStatusBar": false, + "showedMobileNotice": true, + "refreshSourceControlTimer": 7000, + "showBranchStatusBar": true, + "setLastSaveToLastCommit": false +} \ No newline at end of file diff --git a/education/computer engineering/ECE1410/Binary Manipulation.md b/education/computer engineering/ECE1410/Binary Manipulation.md new file mode 100644 index 0000000..211a823 --- /dev/null +++ b/education/computer engineering/ECE1410/Binary Manipulation.md @@ -0,0 +1,2 @@ +- To find the magnitude of a negative twos compliment number, flip all of the bits and add one. +- \ No newline at end of file From 57a37356cc2af43d0bd08d63f992612caf5f0f04 Mon Sep 17 00:00:00 2001 From: arc Date: Thu, 9 Jan 2025 13:06:59 -0700 Subject: [PATCH 0739/1027] vault backup: 2025-01-09 13:06:59 --- education/computer engineering/ECE2700/Digital Hardware.md | 1 + 1 file changed, 1 insertion(+) diff --git a/education/computer engineering/ECE2700/Digital Hardware.md b/education/computer engineering/ECE2700/Digital Hardware.md index 7d40ae8..e8b9c9c 100644 --- a/education/computer engineering/ECE2700/Digital Hardware.md +++ b/education/computer engineering/ECE2700/Digital Hardware.md @@ -21,6 +21,7 @@ In base 10, a value is expressed by an n-tuple with n digits $$ D = d_{n-1}d_{n-2} \cdots d_1 d_0 $$ This represents the value $$ V(D) = d_{n-1} * 10^{n-1} + d_{n - 2} * 10^{n-2} + \cdots + d_1 * 10^1 + d_0 * 10^0 $$ +In a binary or base 2 number system, each digit can be a zero or one, called a *bit*. # Definitions - **Xtor** is an abbreviation for *transistor* From 0fc3adb51426dfdb7202755bb0c716c0cdee8cab Mon Sep 17 00:00:00 2001 From: arc Date: Thu, 9 Jan 2025 13:11:59 -0700 Subject: [PATCH 0740/1027] vault backup: 2025-01-09 13:11:59 --- education/computer engineering/ECE2700/Digital Hardware.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/education/computer engineering/ECE2700/Digital Hardware.md b/education/computer engineering/ECE2700/Digital Hardware.md index e8b9c9c..2498766 100644 --- a/education/computer engineering/ECE2700/Digital Hardware.md +++ b/education/computer engineering/ECE2700/Digital Hardware.md @@ -22,6 +22,9 @@ $$ D = d_{n-1}d_{n-2} \cdots d_1 d_0 $$ This represents the value $$ V(D) = d_{n-1} * 10^{n-1} + d_{n - 2} * 10^{n-2} + \cdots + d_1 * 10^1 + d_0 * 10^0 $$ In a binary or base 2 number system, each digit can be a zero or one, called a *bit*. +$$ D = d_{n-1}d_{n-2} \cdots d_1 d_0 $$ +To determine the integer value, a very similar formula can be used. +$$ V(B) = b_{n-1} * 2^{n-1} + b_{n-2} * 2^{n-2} \cdots b_{1} * 2^1 + b_0 * 2^0 $$ # Definitions - **Xtor** is an abbreviation for *transistor* From 7e6d46d6995e6c53e62202310cbc73ac6f27abe0 Mon Sep 17 00:00:00 2001 From: arc Date: Thu, 9 Jan 2025 13:16:59 -0700 Subject: [PATCH 0741/1027] vault backup: 2025-01-09 13:16:59 --- education/computer engineering/ECE2700/Digital Hardware.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/education/computer engineering/ECE2700/Digital Hardware.md b/education/computer engineering/ECE2700/Digital Hardware.md index 2498766..2f7773b 100644 --- a/education/computer engineering/ECE2700/Digital Hardware.md +++ b/education/computer engineering/ECE2700/Digital Hardware.md @@ -25,6 +25,9 @@ In a binary or base 2 number system, each digit can be a zero or one, called a * $$ D = d_{n-1}d_{n-2} \cdots d_1 d_0 $$ To determine the integer value, a very similar formula can be used. $$ V(B) = b_{n-1} * 2^{n-1} + b_{n-2} * 2^{n-2} \cdots b_{1} * 2^1 + b_0 * 2^0 $$ +- The base of a number is often notated in the format of $(n)_b$, EG a base 10 number might be $(14)_{10}$, and a binary number might be $(10)_2$. +- The *least significant bit* (LSB) is usually the right-most bit. The highest value bit, or the *most significant bit* (MSB). +- A # Definitions - **Xtor** is an abbreviation for *transistor* From d743d8ca93fa67a67f8ca37a6d709dcf2953196e Mon Sep 17 00:00:00 2001 From: arc Date: Thu, 9 Jan 2025 13:21:59 -0700 Subject: [PATCH 0742/1027] vault backup: 2025-01-09 13:21:59 --- .../computer engineering/ECE2700/Binary Logic.md | 0 .../ECE2700/Digital Hardware.md | 15 ++++++++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 education/computer engineering/ECE2700/Binary Logic.md diff --git a/education/computer engineering/ECE2700/Binary Logic.md b/education/computer engineering/ECE2700/Binary Logic.md new file mode 100644 index 0000000..e69de29 diff --git a/education/computer engineering/ECE2700/Digital Hardware.md b/education/computer engineering/ECE2700/Digital Hardware.md index 2f7773b..0ff0391 100644 --- a/education/computer engineering/ECE2700/Digital Hardware.md +++ b/education/computer engineering/ECE2700/Digital Hardware.md @@ -27,8 +27,21 @@ To determine the integer value, a very similar formula can be used. $$ V(B) = b_{n-1} * 2^{n-1} + b_{n-2} * 2^{n-2} \cdots b_{1} * 2^1 + b_0 * 2^0 $$ - The base of a number is often notated in the format of $(n)_b$, EG a base 10 number might be $(14)_{10}$, and a binary number might be $(10)_2$. - The *least significant bit* (LSB) is usually the right-most bit. The highest value bit, or the *most significant bit* (MSB). -- A +- A nibble is 4 bits, and a byte is 8 bits +## Conversions +### Base 10 to Binary +Repeatedly divide by 2, and track the remainder. +As an example, the below table shows how one might convert from $(857)_{10}$ to base 2. + +| Equation | Remainder | +| --------------- | --------- | +| $857 / 2 = 428$ | $1$ | +| $428 / 2 = 214$ | $0$ | +| $214 / 2 = 107$ | $0$ | +| $107 / 2 = 53$ | $1$ | +| $53 / 2 = 26$ | $ | +| | | # Definitions - **Xtor** is an abbreviation for *transistor* - **Moore's Law** states that the number of transistors on a chip doubles every two years. From 2170f4a2643f0609693221e704977707889c13b1 Mon Sep 17 00:00:00 2001 From: arc Date: Thu, 9 Jan 2025 13:47:04 -0700 Subject: [PATCH 0743/1027] vault backup: 2025-01-09 13:47:04 --- .../computer engineering/ECE2700/Digital Hardware.md | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/education/computer engineering/ECE2700/Digital Hardware.md b/education/computer engineering/ECE2700/Digital Hardware.md index 0ff0391..a989613 100644 --- a/education/computer engineering/ECE2700/Digital Hardware.md +++ b/education/computer engineering/ECE2700/Digital Hardware.md @@ -40,8 +40,13 @@ As an example, the below table shows how one might convert from $(857)_{10}$ to | $428 / 2 = 214$ | $0$ | | $214 / 2 = 107$ | $0$ | | $107 / 2 = 53$ | $1$ | -| $53 / 2 = 26$ | $ | -| | | +| $53 / 2 = 26$ | $1$ | +| $26 / 2 = 13$ | $0$ | +| $13 / 2 = 6$ | $1$ | +| $6 / 2 = 3$ | $0$ | +| $3 / 2 = 1$ | $1$ | +| $1 / 2 = 0$ | $1$ | +The final answer is $1101011001$. # Definitions - **Xtor** is an abbreviation for *transistor* - **Moore's Law** states that the number of transistors on a chip doubles every two years. From 2e2ae5fd4e48ea65305867ee9dcc38da6613eb86 Mon Sep 17 00:00:00 2001 From: arc Date: Thu, 9 Jan 2025 14:07:03 -0700 Subject: [PATCH 0744/1027] vault backup: 2025-01-09 14:07:03 --- assets/boolean-lo.md | 0 .../ECE2700/Boolean Algebra.md | 1 + .../ECE2700/Digital Hardware.md | 1 + .../ECE2700/assets/logic-gates.jpeg | Bin 0 -> 65494 bytes 4 files changed, 2 insertions(+) create mode 100644 assets/boolean-lo.md create mode 100644 education/computer engineering/ECE2700/Boolean Algebra.md create mode 100644 education/computer engineering/ECE2700/assets/logic-gates.jpeg diff --git a/assets/boolean-lo.md b/assets/boolean-lo.md new file mode 100644 index 0000000..e69de29 diff --git a/education/computer engineering/ECE2700/Boolean Algebra.md b/education/computer engineering/ECE2700/Boolean Algebra.md new file mode 100644 index 0000000..085a864 --- /dev/null +++ b/education/computer engineering/ECE2700/Boolean Algebra.md @@ -0,0 +1 @@ +![](./assets/logic-gate) \ No newline at end of file diff --git a/education/computer engineering/ECE2700/Digital Hardware.md b/education/computer engineering/ECE2700/Digital Hardware.md index a989613..a30948f 100644 --- a/education/computer engineering/ECE2700/Digital Hardware.md +++ b/education/computer engineering/ECE2700/Digital Hardware.md @@ -46,6 +46,7 @@ As an example, the below table shows how one might convert from $(857)_{10}$ to | $6 / 2 = 3$ | $0$ | | $3 / 2 = 1$ | $1$ | | $1 / 2 = 0$ | $1$ | + The final answer is $1101011001$. # Definitions - **Xtor** is an abbreviation for *transistor* diff --git a/education/computer engineering/ECE2700/assets/logic-gates.jpeg b/education/computer engineering/ECE2700/assets/logic-gates.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..87dae340d6ba27695deba36ba9a5afc42694fa56 GIT binary patch literal 65494 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

Click this link for the date and time format reference.

",FILENAME_SAMPLE:"Filename for a new drawing is: ",FILENAME_EMBED_SAMPLE:"Filename for a new embedded drawing is: ",FILENAME_PREFIX_NAME:"Filename prefix",FILENAME_PREFIX_DESC:"The first part of the filename",FILENAME_PREFIX_EMBED_NAME:"Filename prefix when embedding a new drawing into a markdown note",FILENAME_PREFIX_EMBED_DESC:"Should the filename of the newly inserted drawing start with the name of the active markdown note when using the command palette action: Create a new drawing and embed into active document?
Toggle ON: Yes, the filename of a new drawing should start with filename of the active document
Toggle OFF: No, filename of a new drawing should not include the filename of the active document",FILENAME_POSTFIX_NAME:"Custom text after markdown Note's name when embedding",FILENAME_POSTFIX_DESC:"Affects filename only when embedding into a markdown document. This text will be inserted after the note's name, but before the date.",FILENAME_DATE_NAME:"Filename Date",FILENAME_DATE_DESC:"The last part of the filename. Leave empty if you do not want a date.",FILENAME_EXCALIDRAW_EXTENSION_NAME:".excalidraw.md or .md",FILENAME_EXCALIDRAW_EXTENSION_DESC:"This setting does not apply if you use Excalidraw in compatibility mode, i.e. you are not using Excalidraw markdown files.
Toggle ON: filename ends with .excalidraw.md
Toggle OFF: filename ends with .md",DISPLAY_HEAD:"Excalidraw appearance and behavior",DISPLAY_DESC:"In the 'appearance and behavior' section of Excalidraw Settings, you can fine-tune how Excalidraw appears and behaves. This includes options for dynamic styling, left-handed mode, matching Excalidraw and Obsidian themes, default modes, and more.",OVERRIDE_OBSIDIAN_FONT_SIZE_NAME:"Limit Obsidian Font Size to Editor Text",OVERRIDE_OBSIDIAN_FONT_SIZE_DESC:"Obsidian's custom font size setting affects the entire interface, including Excalidraw and themes that depend on the default font size. Enabling this option restricts font size changes to editor text, which will improve the look of Excalidraw. If parts of the UI look incorrect after enabling, try turning this setting off.",DYNAMICSTYLE_NAME:"Dynamic styling",DYNAMICSTYLE_DESC:"Change Excalidraw UI colors to match the canvas color",LEFTHANDED_MODE_NAME:"Left-handed mode",LEFTHANDED_MODE_DESC:"Currently only has effect in tray-mode. If turned on, the tray will be on the right side.
Toggle ON: Left-handed mode.
Toggle OFF: Right-handed moded",IFRAME_MATCH_THEME_NAME:"Markdown embeds to match Excalidraw theme",IFRAME_MATCH_THEME_DESC:"Toggle ON: Set this to true if for example you are using Obsidian in dark-mode but use excalidraw with a light background. With this setting the embedded Obsidian markdown document will match the Excalidraw theme (i.e. light colors if Excalidraw is in light mode).
Toggle OFF: Set this to false if you want the embedded Obsidian markdown document to match the Obsidian theme (i.e. dark colors if Obsidian is in dark mode).",MATCH_THEME_NAME:"New drawing to match Obsidian theme",MATCH_THEME_DESC:"If theme is dark, new drawing will be created in dark mode. This does not apply when you use a template for new drawings. Also this will not affect when you open an existing drawing. Those will follow the theme of the template/drawing respectively.
Toggle ON: Follow Obsidian Theme
Toggle OFF: Follow theme defined in your template",MATCH_THEME_ALWAYS_NAME:"Existing drawings to match Obsidian theme",MATCH_THEME_ALWAYS_DESC:"If theme is dark, drawings will be opened in dark mode. If your theme is light, they will be opened in light mode.
Toggle ON: Match Obsidian theme
Toggle OFF: Open with the same theme as last saved",MATCH_THEME_TRIGGER_NAME:"Excalidraw to follow when Obsidian Theme changes",MATCH_THEME_TRIGGER_DESC:"If this option is enabled open Excalidraw pane will switch to light/dark mode when Obsidian theme changes.
Toggle ON: Follow theme changes
Toggle OFF: Drawings are not affected by Obsidian theme changes",DEFAULT_OPEN_MODE_NAME:"Default mode when opening Excalidraw",DEFAULT_OPEN_MODE_DESC:"Specifies the mode how Excalidraw opens: Normal, Zen, or View mode. You may also set this behavior on a file level by adding the excalidraw-default-mode frontmatter key with a value of: normal, view, or zen to your document.",DEFAULT_PEN_MODE_NAME:"Pen mode",DEFAULT_PEN_MODE_DESC:"Should pen mode be automatically enabled when opening Excalidraw?",DISABLE_DOUBLE_TAP_ERASER_NAME:"Enable double-tap eraser in pen mode",DISABLE_SINGLE_FINGER_PANNING_NAME:"Enable single-finger panning in pen mode",SHOW_PEN_MODE_FREEDRAW_CROSSHAIR_NAME:"Show (+) crosshair in pen mode",SHOW_PEN_MODE_FREEDRAW_CROSSHAIR_DESC:"Show crosshair in pen mode when using the freedraw tool. Toggle ON: SHOW Toggle OFF: HIDE
The effect depends on the device. Crosshair is typically visible on drawing tablets, MS Surface, but not on iOS.",SHOW_DRAWING_OR_MD_IN_HOVER_PREVIEW_NAME:"Render Excalidraw file as an image in hover preview...",SHOW_DRAWING_OR_MD_IN_HOVER_PREVIEW_DESC:"...even if the file has the excalidraw-open-md: true frontmatter key.
When this setting is off and the file is set to open in md by default, the hover preview will show the markdown side of the document.",SHOW_DRAWING_OR_MD_IN_READING_MODE_NAME:"Render as image when in markdown reading mode of an Excalidraw file",SHOW_DRAWING_OR_MD_IN_READING_MODE_DESC:"When you are in markdown reading mode (aka. reading the back side of the drawing) should the Excalidraw drawing be rendered as an image? This setting will not affect the display of the drawing when you are in Excalidraw mode or when you embed the drawing into a markdown document or when rendering hover preview.
  • See other related setting for PDF Export under 'Embedding and Exporting' further below.

You must close the active excalidraw/markdown file and reopen it for this change to take effect.",SHOW_DRAWING_OR_MD_IN_EXPORTPDF_NAME:"Render Excalidraw as Image in Obsidian PDF Export",SHOW_DRAWING_OR_MD_IN_EXPORTPDF_DESC:"This setting controls how Excalidraw files are exported to PDF using Obsidian's built-in Export to PDF feature.
  • Enabled: The PDF will include the Excalidraw drawing as an image.
  • Disabled: The PDF will include the markdown content as text.
Note: This setting does not affect the PDF export feature within Excalidraw itself.
See the other related setting for Markdown Reading Mode under 'Appearance and Behavior' further above.
⚠️ You must close and reopen the Excalidraw/markdown file for changes to take effect. ⚠️",HOTKEY_OVERRIDE_HEAD:"Hotkey overrides",HOTKEY_OVERRIDE_DESC:`Some of the Excalidraw hotkeys such as ${labelCTRL()}+Enter to edit text or ${labelCTRL()}+K to create an element link conflict with Obsidian hotkey settings. The hotkey combinations you add below will override Obsidian's hotkey settings while useing Excalidraw, thus you can add ${labelCTRL()}+G if you want to default to Group Object in Excalidraw instead of opening Graph View.`,THEME_HEAD:"Theme and styling",ZOOM_HEAD:"Zoom",DEFAULT_PINCHZOOM_NAME:"Allow pinch zoom in pen mode",DEFAULT_PINCHZOOM_DESC:"Pinch zoom in pen mode when using the freedraw tool is disabled by default to prevent unwanted accidental zooming with your palm.
Toggle ON: Enable pinch zoom in pen mode
Toggle OFF:Disable pinch zoom in pen mode",DEFAULT_WHEELZOOM_NAME:"Mouse wheel to zoom by default",DEFAULT_WHEELZOOM_DESC:`Toggle ON: Mouse wheel to zoom; ${labelCTRL()} + mouse wheel to scroll
Toggle OFF:${labelCTRL()} + mouse wheel to zoom; Mouse wheel to scroll`,ZOOM_TO_FIT_NAME:"Zoom to fit on view resize",ZOOM_TO_FIT_DESC:"Zoom to fit drawing when the pane is resized
Toggle ON: Zoom to fit
Toggle OFF: Auto zoom disabled",ZOOM_TO_FIT_ONOPEN_NAME:"Zoom to fit on file open",ZOOM_TO_FIT_ONOPEN_DESC:"Zoom to fit drawing when the drawing is first opened
Toggle ON: Zoom to fit
Toggle OFF: Auto zoom disabled",ZOOM_TO_FIT_MAX_LEVEL_NAME:"Zoom to fit max ZOOM level",ZOOM_TO_FIT_MAX_LEVEL_DESC:"Set the maximum level to which zoom to fit will enlarge the drawing. Minimum is 0.5 (50%) and maximum is 10 (1000%).",PEN_HEAD:"Pen",GRID_HEAD:"Grid",GRID_DYNAMIC_COLOR_NAME:"Dynamic grid color",GRID_DYNAMIC_COLOR_DESC:"Toggle ON:Change grid color to match the canvas color
Toggle OFF:Use the color below as the grid color",GRID_COLOR_NAME:"Grid color",GRID_OPACITY_NAME:"Grid opacity",GRID_OPACITY_DESC:"Grid opacity will also control the opacity of the binding box when binding an arrow to an element.
Set the opacity of the grid. 0 is transparent, 100 is opaque.",LASER_HEAD:"Laser pointer",LASER_COLOR:"Laser pointer color",LASER_DECAY_TIME_NAME:"Laser pointer decay time",LASER_DECAY_TIME_DESC:"Laser pointer decay time in milliseconds. Default is 1000 (i.e. 1 second).",LASER_DECAY_LENGTH_NAME:"Laser pointer decay length.",LASER_DECAY_LENGTH_DESC:"Laser pointer decay length in line points. Default is 50.",LINKS_HEAD:"Links, transclusion and TODOs",LINKS_HEAD_DESC:"In the 'Links, transclusion and TODOs' section of Excalidraw Settings, you can configure how Excalidraw handles links, transclusions, and TODO items. This includes options for opening links, managing panes, displaying links with brackets, customizing link prefixes, handling TODO items, and more. ",LINKS_DESC:`${labelCTRL()}+CLICK on [[Text Elements]] to open them as links. If the selected text has more than one [[valid Obsidian links]], only the first will be opened. If the text starts as a valid web link (i.e. https:// or http://), then the plugin will open it in a browser. When Obsidian files change, the matching [[link]] in your drawings will also change. If you don't want text accidentally changing in your drawings use [[links|with aliases]].`,DRAG_MODIFIER_NAME:"Link Click and Drag&Drop Modifier Keys",DRAG_MODIFIER_DESC:"Modifier key behavior when clicking links and dragging and dropping elements. Excalidraw will not validate your configuration... pay attention to avoid conflicting settings. These settings are different for Apple and non-Apple. If you use Obsidian on multiple platforms, you'll need to make the settings separately. The toggles follow the order of "+(DEVICE.isIOS||DEVICE.isMacOS?"SHIFT, CMD, OPT, CONTROL.":"SHIFT, CTRL, ALT, META (Windows key)."),LONG_PRESS_DESKTOP_NAME:"Long press to open desktop",LONG_PRESS_DESKTOP_DESC:"Long press delay in milliseconds to open an Excalidraw Drawing embedded in a Markdown file. ",LONG_PRESS_MOBILE_NAME:"Long press to open mobile",LONG_PRESS_MOBILE_DESC:"Long press delay in milliseconds to open an Excalidraw Drawing embedded in a Markdown file. ",DOUBLE_CLICK_LINK_OPEN_VIEW_MODE:"Allow double-click to open links in view mode",FOCUS_ON_EXISTING_TAB_NAME:"Focus on Existing Tab",FOCUS_ON_EXISTING_TAB_DESC:"When opening a link, Excalidraw will focus on the existing tab if the file is already open. Enabling this setting overrides 'Reuse Adjacent Pane' when the file is already open.",SECOND_ORDER_LINKS_NAME:"Show second-order links",SECOND_ORDER_LINKS_DESC:"Show links when clicking on a link in Excalidraw. Second-order link are backlinks pointing to the link being clicked. When using image icons to connect similar notes, second order links allow you to get to related notes in one click instead of two. See YT Short to understand.",ADJACENT_PANE_NAME:"Reuse adjacent pane",ADJACENT_PANE_DESC:`When ${labelCTRL()}+${labelALT()} clicking a link in Excalidraw, by default the plugin will open the link in a new pane. Turning this setting on, Excalidraw will first look for an existing pane, and try to open the link there. Excalidraw will look for the other workspace pane based on your focus/navigation history, i.e. the workpane that was active before you activated Excalidraw.`,MAINWORKSPACE_PANE_NAME:"Open in main workspace",MAINWORKSPACE_PANE_DESC:`When ${labelCTRL()}+${labelALT()} clicking a link in Excalidraw, by default the plugin will open the link in a new pane in the current active window. Turning this setting on, Excalidraw will open the link in an existing or new pane in the main workspace. `,LINK_BRACKETS_NAME:"Show [[brackets]] around links",LINK_BRACKETS_DESC:`In PREVIEW mode, when parsing Text Elements, place brackets around links. You can override this setting for a specific drawing by adding ${FRONTMATTER_KEYS["link-brackets"].name}: true/false to the file's frontmatter.`,LINK_PREFIX_NAME:"Link prefix",LINK_PREFIX_DESC:`In PREVIEW mode, if the Text Element contains a link, precede the text with these characters. You can override this setting for a specific drawing by adding ${FRONTMATTER_KEYS["link-prefix"].name}: "📍 " to the file's frontmatter.`,URL_PREFIX_NAME:"URL prefix",URL_PREFIX_DESC:`In PREVIEW mode, if the Text Element contains a URL link, precede the text with these characters. You can override this setting for a specific drawing by adding ${FRONTMATTER_KEYS["url-prefix"].name}: "🌐 " to the file's frontmatter.`,PARSE_TODO_NAME:"Parse todo",PARSE_TODO_DESC:"Convert '- [ ] ' and '- [x] ' to checkbox and tick in the box.",TODO_NAME:"Open TODO icon",TODO_DESC:"Icon to use for open TODO items",DONE_NAME:"Completed TODO icon",DONE_DESC:"Icon to use for completed TODO items",HOVERPREVIEW_NAME:`Hover preview without pressing the ${labelCTRL()} key`,HOVERPREVIEW_DESC:`Toggle ON: In Exalidraw view mode the hover preview for [[wiki links]] will be shown immediately, without the need to hold the ${labelCTRL()} key. In Excalidraw normal mode, the preview will be shown immediately only when hovering the blue link icon in the top right of the element.
Toggle OFF: Hover preview is shown only when you hold the ${labelCTRL()} key while hovering the link.`,LINKOPACITY_NAME:"Opacity of link icon",LINKOPACITY_DESC:"Opacity of the link indicator icon in the top right corner of an element. 1 is opaque, 0 is transparent.",LINK_CTRL_CLICK_NAME:`${labelCTRL()}+CLICK on text with [[links]] or [](links) to open them`,LINK_CTRL_CLICK_DESC:`You can turn this feature off if it interferes with default Excalidraw features you want to use. If this is turned off, you can either use ${labelCTRL()} + ${labelMETA()} or the link indicator in the top right of the element to open links.`,TRANSCLUSION_WRAP_NAME:"Overflow wrap behavior of transcluded text",TRANSCLUSION_WRAP_DESC:"Number specifies the character count where the text should be wrapped. Set the text wrapping behavior of transcluded text. Turn this ON to force-wrap text (i.e. no overflow), or OFF to soft-wrap text (at the nearest whitespace).",TRANSCLUSION_DEFAULT_WRAP_NAME:"Transclusion word wrap default",TRANSCLUSION_DEFAULT_WRAP_DESC:"You can manually set/override word wrapping length using the `![[page#^block]]{NUMBER}` format. Normally you will not want to set a default, because if you transclude text inside a sticky note, then Excalidraw will automatically take care of word wrapping. Set this value to `0` if you do not want to set a default. ",PAGE_TRANSCLUSION_CHARCOUNT_NAME:"Page transclusion max char count",PAGE_TRANSCLUSION_CHARCOUNT_DESC:"The maximum number of characters to display from the page when transcluding an entire page with the ![[markdown page]] format.",QUOTE_TRANSCLUSION_REMOVE_NAME:"Quote translusion: remove leading '> ' from each line",QUOTE_TRANSCLUSION_REMOVE_DESC:"Remove the leading '> ' from each line of the transclusion. This will improve readability of quotes in text only transclusions
Toggle ON: Remove leading '> '
Toggle OFF: Do not remove leading '> ' (note it will still be removed from the first row due to Obsidian API functionality)",GET_URL_TITLE_NAME:"Use iframely to resolve page title",GET_URL_TITLE_DESC:"Use the http://iframely.server.crestify.com/iframely?url= to get title of page when dropping a link into Excalidraw",PDF_TO_IMAGE:"PDF to Image",PDF_TO_IMAGE_SCALE_NAME:"PDF to Image conversion scale",PDF_TO_IMAGE_SCALE_DESC:"Sets the resolution of the image that is generated from the PDF page. Higher resolution will result in bigger images in memory and consequently a higher load on your system (slower performance), but sharper imagee. Additionally, if you want to copy PDF pages (as images) to Excalidraw.com, the bigger image size may result in exceeding the 2MB limit on Excalidraw.com.",EMBED_TOEXCALIDRAW_HEAD:"Embed files into Excalidraw",EMBED_TOEXCALIDRAW_DESC:"In the Embed Files section of Excalidraw Settings, you can configure how various files are embedded into Excalidraw. This includes options for embedding interactive markdown files, PDFs, and markdown files as images.",MD_HEAD:"Embed markdown into Excalidraw as image",MD_EMBED_CUSTOMDATA_HEAD_NAME:"Interactive Markdown Files",MD_EMBED_CUSTOMDATA_HEAD_DESC:'The below settings will only effect future embeds. Current embeds remain unchanged. The theme setting of embedded frames is under the "Excalidraw appearance and behavior" section.',MD_EMBED_SINGLECLICK_EDIT_NAME:"Single click to edit embedded markdown",MD_EMBED_SINGLECLICK_EDIT_DESC:"Single click on an embedded markdown file to edit it. When turned off, the markdown file will first open in preview mode, then switch to edit mode when you click on it again.",MD_TRANSCLUDE_WIDTH_NAME:"Default width of a transcluded markdown document",MD_TRANSCLUDE_WIDTH_DESC:"The width of the markdown page. This affects the word wrapping when transcluding longer paragraphs, and the width of the image element. You can override the default width of an embedded file using the [[filename#heading|WIDTHxMAXHEIGHT]] syntax in markdown view mode under embedded files.",MD_TRANSCLUDE_HEIGHT_NAME:"Default maximum height of a transcluded markdown document",MD_TRANSCLUDE_HEIGHT_DESC:"The embedded image will be as high as the markdown text requires, but not higher than this value. You can override this value by editing the embedded image link in markdown view mode with the following syntax [[filename#^blockref|WIDTHxMAXHEIGHT]].",MD_DEFAULT_FONT_NAME:"The default font typeface to use for embedded markdown files.",MD_DEFAULT_FONT_DESC:'Set this value to "Virgil" or "Cascadia" or the filename of a valid .ttf, .woff, or .woff2 font e.g. MyFont.woff2 You can override this setting by adding the following frontmatter-key to the embedded markdown file: excalidraw-font: font_or_filename',MD_DEFAULT_COLOR_NAME:"The default font color to use for embedded markdown files.",MD_DEFAULT_COLOR_DESC:'Set this to any valid css color name e.g. "steelblue" (color names), or a valid hexadecimal color e.g. "#e67700", or any other valid css color string. You can override this setting by adding the following frontmatter-key to the embedded markdown file: excalidraw-font-color: steelblue',MD_DEFAULT_BORDER_COLOR_NAME:"The default border color to use for embedded markdown files.",MD_DEFAULT_BORDER_COLOR_DESC:'Set this to any valid css color name e.g. "steelblue" (color names), or a valid hexadecimal color e.g. "#e67700", or any other valid css color string. You can override this setting by adding the following frontmatter-key to the embedded markdown file: excalidraw-border-color: gray. Leave empty if you don\'t want a border. ',MD_CSS_NAME:"CSS file",MD_CSS_DESC:`The filename of the CSS to apply to markdown embeds. Provide the filename with extension (e.g. 'md-embed.css'). The css file may also be a plain markdown file (e.g. 'md-embed-css.md'), just make sure the content is written using valid css syntax. If you need to look at the HTML code you are applying the CSS to, then open Obsidian Developer Console (${DEVICE.isIOS||DEVICE.isMacOS?"CMD+OPT+i":"CTRL+SHIFT+i"}) and type in the following command: "ExcalidrawAutomate.mostRecentMarkdownSVG". This will display the most recent SVG generated by Excalidraw. Setting the font-family in the css is has limitations. By default only your operating system's standard fonts are available (see README for details). You can add one custom font beyond that using the setting above. You can override this css setting by adding the following frontmatter-key to the embedded markdown file: "excalidraw-css: css_file_in_vault|css-snippet".`,EMBED_HEAD:"Embedding Excalidraw into your Notes and Exporting",EMBED_DESC:'In the "Embed & Export" settings, you can configure how images and Excalidraw drawings are embedded and exported within your documents. Key settings include choosing the image type for markdown preview (such as Native SVG or PNG), specifying the type of file to insert into the document (original Excalidraw, PNG, or SVG), and managing image caching for embedding in markdown. You can also control image sizing, whether to embed drawings using wiki links or markdown links, and adjust settings related to image themes, background colors, and Obsidian integration. \n Additionally, there are settings for auto-export, which automatically generates SVG and/or PNG files to match the title of your Excalidraw drawings, keeping them in sync with file renames and deletions.',EMBED_CANVAS:"Obsidian Canvas support",EMBED_CANVAS_NAME:"Immersive embedding",EMBED_CANVAS_DESC:"Hide canvas node border and background when embedding an Excalidraw drawing to Canvas. Note that for a full transparent background for your image, you will still need to configure Excalidraw to export images with transparent background.",EMBED_CACHING:"Image caching and rendering optimization",RENDERING_CONCURRENCY_NAME:"Image rendering concurrency",RENDERING_CONCURRENCY_DESC:"Number of parallel workers to use for image rendering. Increasing this number will speed up the rendering process, but may slow down the rest of the system. The default value is 3. You can increase this number if you have a powerful system.",EXPORT_SUBHEAD:"Export Settings",EMBED_SIZING:"Image sizing",EMBED_THEME_BACKGROUND:"Image theme and background color",EMBED_IMAGE_CACHE_NAME:"Cache images for embedding in markdown",EMBED_IMAGE_CACHE_DESC:"Cache images for embedding in markdown. This will speed up the embedding process, but in case you compose images of several sub-component drawings, the embedded image in Markdown won't update until you open the drawing and save it to trigger an update of the cache.",SCENE_IMAGE_CACHE_NAME:"Cache nested Excalidraws in Scene",SCENE_IMAGE_CACHE_DESC:"Cache nested Excalidraws in the Scene for faster scene rendering. This will speed up the rendering process, especially if you have deeply nested Excalidraws in your scene. Excalidraw will try to intelligently identify if any children of a nested Excalidraw have changed and will update the cache accordingly. You may want to turn this off, in case you are suspecting that the cache is not updating properly.",EMBED_IMAGE_CACHE_CLEAR:"Purge Cache",BACKUP_CACHE_CLEAR:"Purge Backups",BACKUP_CACHE_CLEAR_CONFIRMATION:"This action will delete all Excalidraw drawing backups. Backups are used as a safety measure in case your drawing file gets damaged. Each time you open Obsidian the plugin automatically deletes backups for files that no longer exist in your Vault. Are you sure you want to clear all backups?",EMBED_REUSE_EXPORTED_IMAGE_NAME:"If found, use the already exported image for preview",EMBED_REUSE_EXPORTED_IMAGE_DESC:"This setting works in conjunction with the Auto-export SVG/PNG setting. If an exported image that matches the file name of the drawing is available, use that image instead of generating a preview image on the fly. This will result in faster previews especially when you have many embedded objects in the drawing, however, it may happen that your latest changes are not displayed and that the image will not automatically match your Obsidian theme in case you have changed the Obsidian theme since the export was created. This setting only applies to embedding images into markdown documents. For a number of reasons, the same approach cannot be used to expedite the loading of drawings with many embedded objects. See demonstration here.",EMBED_PREVIEW_IMAGETYPE_NAME:"Image type in markdown preview",EMBED_PREVIEW_IMAGETYPE_DESC:"Native SVG: High Image Quality. Embedded Websites, YouTube videos, Obsidian Links, and external images embedded via a URL will all work. Embedded Obsidian pages will not
SVG Image: High Image Quality. Embedded elements and images embedded via URL only have placeholders, links don't work
PNG Image: Lower Image Quality, but in some cases better performance with large drawings. Embedded elements and images embedded via URL only have placeholders, links don't work. Also some of the image block referencing features do not work with PNG embeds.",PREVIEW_MATCH_OBSIDIAN_NAME:"Excalidraw preview to match Obsidian theme",PREVIEW_MATCH_OBSIDIAN_DESC:"Image preview in documents should match the Obsidian theme. If enabled, when Obsidian is in dark mode, Excalidraw images will render in dark mode. When Obsidian is in light mode, Excalidraw will render light mode as well. You may want to switch 'Export image with background' off for a more Obsidian-integrated look and feel.",EMBED_WIDTH_NAME:"Default width of embedded (transcluded) image",EMBED_WIDTH_DESC:"The default width of an embedded drawing. This applies to live preview edit and reading mode, as well as to hover previews. You can specify a custom width when embedding an image using the ![[drawing.excalidraw|100]] or [[drawing.excalidraw|100x100]] format.",EMBED_HEIGHT_NAME:"Default height of embedded (transcluded) image",EMBED_HEIGHT_DESC:"The default height of an embedded drawing. This applies to live preview edit and reading mode, as well as to hover previews. You can specify a custom height when embedding an image using the ![[drawing.excalidraw|100]] or [[drawing.excalidraw|100x100]] format.",EMBED_TYPE_NAME:"Type of file to insert into the document",EMBED_TYPE_DESC:"When you embed an image into a document using the command palette this setting will specify if Excalidraw should embed the original Excalidraw file or a PNG or an SVG copy. You need to enable auto-export PNG / SVG (see below under Export Settings) for those image types to be available in the dropdown. For drawings that do not have a a corresponding PNG or SVG readily available the command palette action will insert a broken link. You need to open the original drawing and initiate export manually. This option will not autogenerate PNG/SVG files, but will simply reference the already existing files.",EMBED_MARKDOWN_COMMENT_NAME:"Embed link to drawing as comment",EMBED_MARKDOWN_COMMENT_DESC:"Embed the link to the original Excalidraw file as a markdown link under the image, e.g.:%%[[drawing.excalidraw]]%%.
Instead of adding a markdown comment you may also select the embedded SVG or PNG line and use the command palette action: 'Excalidraw: Open Excalidraw drawing' to open the drawing.",EMBED_WIKILINK_NAME:"Embed Drawing using Wiki link",EMBED_WIKILINK_DESC:"Toggle ON: Excalidraw will embed a [[wiki link]].
Toggle OFF: Excalidraw will embed a [markdown](link).",EXPORT_PNG_SCALE_NAME:"PNG export image scale",EXPORT_PNG_SCALE_DESC:"The size-scale of the exported PNG image",EXPORT_BACKGROUND_NAME:"Export image with background",EXPORT_BACKGROUND_DESC:"If turned off, the exported image will be transparent.",EXPORT_PADDING_NAME:"Image Padding",EXPORT_PADDING_DESC:"The padding (in pixels) around the exported SVG or PNG image. Padding is set to 0 for clippedFrame references.If you have curved lines close to the edge of the image they might get cropped during image export. You can increase this value to avoid cropping. You can also override this setting at a file level by adding the excalidraw-export-padding: 5 frontmatter key.",EXPORT_THEME_NAME:"Export image with theme",EXPORT_THEME_DESC:"Export the image matching the dark/light theme of your drawing. If turned off, drawings created in dark mode will appear as they would in light mode.",EXPORT_EMBED_SCENE_NAME:"Embed scene in exported image",EXPORT_EMBED_SCENE_DESC:"Embed Excalidraw scene in exported image. Can be overridden at a file level by adding the excalidraw-export-embed-scene: true/false frontmatter key. The setting only takes effect the next time you (re)open drawings.",PDF_EXPORT_SETTINGS:"PDF Export Settings",EXPORT_HEAD:"Auto-export Settings",EXPORT_SYNC_NAME:"Keep the .SVG and/or .PNG filenames in sync with the drawing file",EXPORT_SYNC_DESC:"When turned on, the plugin will automatically update the filename of the .SVG and/or .PNG files when the drawing in the same folder (and same name) is renamed. The plugin will also automatically delete the .SVG and/or .PNG files when the drawing in the same folder (and same name) is deleted. ",EXPORT_SVG_NAME:"Auto-export SVG",EXPORT_SVG_DESC:"Automatically create an SVG export of your drawing matching the title of your file. The plugin will save the *.SVG file in the same folder as the drawing. Embed the .svg file into your documents instead of Excalidraw making you embeds platform independent. While the auto-export switch is on, this file will get updated every time you edit the Excalidraw drawing with the matching name. You can override this setting on a file level by adding the excalidraw-autoexport frontmatter key. Valid values for this key are none,both,svg, and png.",EXPORT_PNG_NAME:"Auto-export PNG",EXPORT_PNG_DESC:"Same as the auto-export SVG, but for *.PNG",EXPORT_BOTH_DARK_AND_LIGHT_NAME:"Export both dark- and light-themed image",EXPORT_BOTH_DARK_AND_LIGHT_DESC:"When enabled, Excalidraw will export two files instead of one: filename.dark.png, filename.light.png and/or filename.dark.svg and filename.light.svg
Double files will be exported both if auto-export SVG or PNG (or both) are enabled, as well as when clicking export on a single image.",COMPATIBILITY_HEAD:"Compatibility features",COMPATIBILITY_DESC:"You should only enable these features if you have a strong reason for wanting to work with excalidraw.com files instead of markdown files. Many of the plugin features are not supported on legacy files. Typical usecase would be if you use set your vault up on top of a Visual Studio Code project folder and you have .excalidraw drawings you want to access from Visual Studio Code as well. Another usecase might be using Excalidraw in Logseq and Obsidian in parallel.",DUMMY_TEXT_ELEMENT_LINT_SUPPORT_NAME:"Linter compatibility",DUMMY_TEXT_ELEMENT_LINT_SUPPORT_DESC:"Excalidraw is sensitive to the file structure below # Excalidraw Data. Automatic linting of documents can create errors in Excalidraw Data. While I've made some effort to make the data loading resilient to lint changes, this solution is not foolproof.
The best is to avoid liniting or otherwise automatically changing Excalidraw documents using different plugins.
Use this setting if for good reasons you have decided to ignore my recommendation and configured linting of Excalidraw files.
The ## Text Elements section is sensitive to empty lines. A common linting approach is to add an empty line after section headings. In case of Excalidraw this will break/change the first text element in your drawing. To overcome this, you can enable this setting. When enabled, Excalidraw will add a dummy element to the beginning of ## Text Elements that the linter can safely modify.",PRESERVE_TEXT_AFTER_DRAWING_NAME:"Zotero and Footnotes compatibility",PRESERVE_TEXT_AFTER_DRAWING_DESC:"Preserve text after the ## Drawing section of the markdown file. This may have a very slight performance impact when saving very large drawings.",DEBUGMODE_NAME:"Enable debug messages",DEBUGMODE_DESC:"I recommend restarting Obsidian after enabling/disabling this setting. This enable debug messages in the console. This is useful for troubleshooting issues. If you are experiencing problems with the plugin, please enable this setting, reproduce the issue, and include the console log in the issue you raise on GitHub",SLIDING_PANES_NAME:"Sliding panes plugin support",SLIDING_PANES_DESC:"Need to restart Obsidian for this change to take effect.
If you use the Sliding Panes plugin you can enable this setting to make Excalidraw drawings work with the Sliding Panes plugin.
Note, that Excalidraw Sliding Panes support causes compatibility issues with Obsidian Workspaces.
Note also, that the 'Stack Tabs' feature is now available in Obsidian, providing native support for most of the Sliding Panes functionality.",EXPORT_EXCALIDRAW_NAME:"Auto-export Excalidraw",EXPORT_EXCALIDRAW_DESC:"Same as the auto-export SVG, but for *.Excalidraw",SYNC_EXCALIDRAW_NAME:"Sync *.excalidraw with *.md version of the same drawing",SYNC_EXCALIDRAW_DESC:"If the modified date of the *.excalidraw file is more recent than the modified date of the *.md file then update the drawing in the .md file based on the .excalidraw file",COMPATIBILITY_MODE_NAME:"New drawings as legacy files",COMPATIBILITY_MODE_DESC:"⚠️ Enable this only if you know what you are doing. In 99.9% of the cases you DO NOT want this on. By enabling this feature drawings you create with the ribbon icon, the command palette actions, and the file explorer are going to be all legacy *.excalidraw files. This setting will also turn off the reminder message when you open a legacy file for editing.",MATHJAX_NAME:"MathJax (LaTeX) javascript library host",MATHJAX_DESC:"If you are using LaTeX equations in Excalidraw, then the plugin needs to load a javascript library for that. Some users are unable to access certain host servers. If you are experiencing issues, try changing the host here. You may need to restart Obsidian after closing settings, for this change to take effect.",LATEX_DEFAULT_NAME:"Default LaTeX formula for new equations",LATEX_DEFAULT_DESC:"Leave empty if you don't want a default formula. You can add default formatting here such as \\color{white}.",LATEX_PREAMBLE_NAME:"LaTeX preamble file (CasE SEnSiTivE!)",LATEX_PREAMBLE_DESC:"Full filepath to the preamble file, leave empty for default. If the file doesn't exist this option will be ignored.
Important: Requires obsidian reload after change to take effect!",NONSTANDARD_HEAD:"Non-Excalidraw.com supported features",NONSTANDARD_DESC:'These settings in the "Non-Excalidraw.com Supported Features" section provide customization options beyond the default Excalidraw.com features. These features are not available on excalidraw.com. When exporting the drawing to Excalidraw.com these features will appear different.\n You can configure the number of custom pens displayed next to the Obsidian Menu on the canvas, allowing you to choose from a range of options. Additionally, you can enable a local font option, which adds a local font to the list of fonts on the element properties panel for text elements. ',RENDER_TWEAK_HEAD:"Rendering tweaks",MAX_IMAGE_ZOOM_IN_NAME:"Maximum image zoom in resolution",MAX_IMAGE_ZOOM_IN_DESC:"To save on memory and because Apple Safari (Obsidian on iOS) has some hard-coded limitations, Excalidraw.com limits the max resolution of images and large objects when zooming in. You can override this limitation using a multiplicator. This means you are multiplying the limit set by default in Excalidraw, the larger the multiplier the better the image zoom in resolution will be, and the more memory it will consume. I recommend playing with multiple values for this setting. You know you've hit the wall, when zooming in to a larger PNG image suddenly the image disappears from view. The default value is 1. The setting has no effect on iOS.",CUSTOM_PEN_HEAD:"Custom pens",CUSTOM_PEN_NAME:"Number of custom pens",CUSTOM_PEN_DESC:"You will see these pens next to the Obsidian Menu on the canvas. You can customize the pens on the canvas by long-pressing the pen button.",EXPERIMENTAL_HEAD:"Miscellaneous features",EXPERIMENTAL_DESC:"These miscellaneous features in Excalidraw include options for setting default LaTeX formulas for new equations, enabling a Field Suggester for autocompletion, displaying type indicators for Excalidraw files, enabling immersive image embedding in live preview editing mode, and experimenting with Taskbone Optical Character Recognition for text extraction from images and drawings. Users can also enter a Taskbone API key for extended usage of the OCR service.",EA_HEAD:"Excalidraw Automate",EA_DESC:"ExcalidrawAutomate is a scripting and automation API for Excalidraw. Unfortunately, the documentation of the API is sparse. I recommend reading the ExcalidrawAutomate.d.ts file, visiting the ExcalidrawAutomate How-to page - though the information here has not been updated for a long while -, and finally to enable the field suggester below. The field suggester will show you the available functions, their parameters and short description as you type. The field suggester is the most up-to-date documentation of the API.",FIELD_SUGGESTER_NAME:"Enable Field Suggester",FIELD_SUGGESTER_DESC:"Field Suggester borrowed from Breadcrumbs and Templater plugins. The Field Suggester will show an autocomplete menu when you type excalidraw- or ea. with function description as hints on the individual items in the list.",STARTUP_SCRIPT_NAME:"Startup script",STARTUP_SCRIPT_DESC:"If set, excalidraw will execute the script at plugin startup. This is useful if you want to set any of the Excalidraw Automate hooks. The startup script is a markdown file that should contain the javascript code you want to execute when Excalidraw starts.",STARTUP_SCRIPT_BUTTON_CREATE:"Create startup script",STARTUP_SCRIPT_BUTTON_OPEN:"Open startup script",STARTUP_SCRIPT_EXISTS:"Startup script file already exists",FILETYPE_NAME:"Display type (✏️) for excalidraw.md files in File Explorer",FILETYPE_DESC:"Excalidraw files will receive an indicator using the emoji or text defined in the next setting.",FILETAG_NAME:"Set the type indicator for excalidraw.md files",FILETAG_DESC:"The text or emoji to display as type indicator.",INSERT_EMOJI:"Insert an emoji",LIVEPREVIEW_NAME:"Immersive image embedding in live preview editing mode",LIVEPREVIEW_DESC:"Turn this on to support image embedding styles such as ![[drawing|width|style]] in live preview editing mode. The setting will not affect the currently open documents. You need close the open documents and re-open them for the change to take effect.",FADE_OUT_EXCALIDRAW_MARKUP_NAME:"Fade out Excalidraw markup",FADE_OUT_EXCALIDRAW_MARKUP_DESC:"In Markdown view mode, the section after the markdown comment %% fades out. The text is still there, but the visual clutter is reduced. Note, you can place the %% in the line right above # Text Elements, in this case the entire drawing markdown will fade out including # Text Elements. The side effect is you won't be able to block reference text in other markdown notes, that is after the %% comment section. This is seldom an issue. Should you want to edit the Excalidraw markdown script, simply switch to markdown view mode and temporarily remove the %% comment.",EXCALIDRAW_PROPERTIES_NAME:"Load Excalidraw Properties into Obsidian Suggester",EXCALIDRAW_PROPERTIES_DESC:"Toggle this setting to load Excalidraw document properties into Obsidian's property suggester at plugin startup. Enabling this feature simplifies the use of Excalidraw front matter properties, allowing you to leverage many powerful settings. If you prefer not to load these properties automatically, you can disable this feature, but you will need to manually remove any unwanted properties from the suggester. Note that turning on this setting requires restarting the plugin as properties are loaded at startup.",FONTS_HEAD:"Fonts",FONTS_DESC:"Configure local fontfaces and downloaded CJK fonts for Excalidraw.",CUSTOM_FONT_HEAD:"Local font",ENABLE_FOURTH_FONT_NAME:"Enable local font option",ENABLE_FOURTH_FONT_DESC:"Enabling this option will add a local font to the font list in the properties panel for text elements. Be aware that using this local font may compromise platform independence. Files using the custom font might render differently when opened in a different vault or at a later time, depending on the font settings. Additionally, the 4th font will default to the system font on excalidraw.com or other Excalidraw versions.",FOURTH_FONT_NAME:"Local font file",FOURTH_FONT_DESC:"Select a .otf, .ttf, .woff, or .woff2 font file from your vault to use as the local font. If no file is selected, Excalidraw will default to the Virgil font. For optimal performance, it is recommended to use a .woff2 file, as Excalidraw will encode only the necessary glyphs when exporting images to SVG. Other font formats will embed the entire font in the exported file, potentially resulting in significantly larger file sizes.",OFFLINE_CJK_NAME:"Offline CJK font support",OFFLINE_CJK_DESC:'Changes you make here will only take effect after restarting Obsidian.
\n Excalidraw.com offers handwritten CJK fonts. By default these fonts are not included in the plugin locally, but are served from the Internet. \n If you prefer to keep Excalidraw fully local, allowing it to work without Internet access you can download the necessary font files from GitHub.\n After downloading, unzip the contents into a folder within your Vault.
\n Pre-loading fonts will impact startup performance. For this reason you can select which fonts to load.',CJK_ASSETS_FOLDER_NAME:"CJK Font Folder (cAsE sENsiTIvE!)",CJK_ASSETS_FOLDER_DESC:'You can set the location of the CJK fonts folder here. For example, you may choose to place it under Excalidraw/CJK Fonts.

\n Important: Do not set this folder to the Vault root! Do not put other fonts in this folder.

\n Note: If you\'re using Obsidian Sync and want to synchronize these font files across your devices, ensure that Obsidian Sync is set to synchronize "All other file types".',LOAD_CHINESE_FONTS_NAME:"Load Chinese fonts from file at startup",LOAD_JAPANESE_FONTS_NAME:"Load Japanese fonts from file at startup",LOAD_KOREAN_FONTS_NAME:"Load Korean fonts frome file at startup",SCRIPT_SETTINGS_HEAD:"Settings for installed Scripts",SCRIPT_SETTINGS_DESC:"Some of the Excalidraw Automate Scripts include settings. Settings are organized by script. Settings will only become visible in this list after you have executed the newly downloaded script once.",TASKBONE_HEAD:"Taskbone Optical Character Recogntion",TASKBONE_DESC:"This is an experimental integration of optical character recognition into Excalidraw. Please note, that taskbone is an independent external service not provided by Excalidraw, nor the Excalidraw-Obsidian plugin project. The OCR service will grab legible text from freedraw lines and embedded pictures on your canvas and place the recognized text in the frontmatter of your drawing as well as onto clipboard. Having the text in the frontmatter will enable you to search in Obsidian for the text contents of these. Note, that the process of extracting the text from the image is not done locally, but via an online API. The taskbone service stores the image on its servers only as long as necessary for the text extraction. However, if this is a dealbreaker, then please don't use this feature.",TASKBONE_ENABLE_NAME:"Enable Taskbone",TASKBONE_ENABLE_DESC:"By enabling this service your agree to the Taskbone Terms and Conditions and the Privacy Policy.",TASKBONE_APIKEY_NAME:"Taskbone API Key",TASKBONE_APIKEY_DESC:"Taskbone offers a free service with a reasonable number of scans per month. If you want to use this feature more frequently, or you want to supoprt the developer of Taskbone (as you can imagine, there is no such thing as 'free', providing this awesome OCR service costs some money to the developer of Taskbone), you can purchase a paid API key from taskbone.com. In case you have purchased a key, simply overwrite this auto generated free-tier API-key with your paid key.",HOTKEY_PRESS_COMBO_NANE:"Press your hotkey combination",HOTKEY_PRESS_COMBO_DESC:"Please press the desired key combination",HOTKEY_BUTTON_ADD_OVERRIDE:"Add New Override",HOTKEY_BUTTON_REMOVE:"Remove",SELECT_FILE:"Select a file then press enter.",SELECT_COMMAND:"Select a command then press enter.",SELECT_FILE_WITH_OPTION_TO_SCALE:`Select a file then press ENTER, or ${labelSHIFT()}+${labelMETA()}+ENTER to insert at 100% scale.`,NO_MATCH:"No file matches your query.",NO_MATCHING_COMMAND:"No command matches your query.",SELECT_FILE_TO_LINK:"Select the file you want to insert the link for.",SELECT_COMMAND_PLACEHOLDER:"Select the command you want to insert the link for.",SELECT_DRAWING:"Select the image or drawing you want to insert",TYPE_FILENAME:"Type name of drawing to select.",SELECT_FILE_OR_TYPE_NEW:"Select existing drawing or type name of a new drawing then press Enter.",SELECT_TO_EMBED:"Select the drawing to insert into active document.",SELECT_MD:"Select the markdown document you want to insert",SELECT_PDF:"Select the PDF document you want to insert",PDF_PAGES_HEADER:"Pages to load?",PDF_PAGES_DESC:"Format: 1, 3-5, 7, 9-11",TYPE_SECTION:"Type section name to select.",SELECT_SECTION_OR_TYPE_NEW:"Select existing section or type name of a new section then press Enter.",INVALID_SECTION_NAME:"Invalid section name.",EMPTY_SECTION_MESSAGE:"Type the Section Name and hit enter to create a new Section",INFINITE_LOOP_WARNING:"EXCALIDRAW WARNING\nAborted loading embedded images due to infinite loop in file:\n",SCRIPT_EXECUTION_ERROR:"Script execution error. Please find error message on the developer console.",LOAD_FROM_BACKUP:"Excalidraw file was corrupted. Loading from backup file.",FONT_LOAD_SLOW:"Loading Fonts...\n\n This is taking longer than expected. If this delay occurs regulary then you may download the fonts locally to your Vault. \n\n(click=dismiss, right-click=Info)",FONT_INFO_TITLE:"Starting v2.5.3 fonts load from the Internet",FONT_INFO_DETAILED:`\n

\n To improve Obsidian's startup time and manage the large CJK font family, \n I've moved the CJK fonts out of the plugin's main.js. CJK fonts will be loaded from the internet by default.\n This typically shouldn't cause issues as Obsidian caches these files after first use.\n

\n

\n If you prefer to keep Obsidian 100% local or experience performance issues, you can download the font assets.\n

\n

Instructions:

\n
    \n
  1. Download the fonts from GitHub.
  2. \n
  3. Unzip and copy files into a Vault folder (default: Excalidraw/${CJK_FONTS}; folder names are cAse-senSITive).
  4. \n
  5. DO NOT set this folder to the Vault root or mix with other local fonts.
  6. \n
\n

For Obsidian Sync Users:

\n

\n Ensure Obsidian Sync is set to synchronize "All other file types" or download and unzip the file on all devices.\n

\n

Note:

\n

\n If you find this process cumbersome, please submit a feature request to Obsidian.md for supporting assets in the plugin folder. \n Currently, only a single main.js is supported, which leads to large files and slow startup times for complex plugins like Excalidraw. \n I apologize for the inconvenience.\n

\n `,GOTO_FULLSCREEN:"Goto fullscreen mode",EXIT_FULLSCREEN:"Exit fullscreen mode",TOGGLE_FULLSCREEN:"Toggle fullscreen mode",TOGGLE_DISABLEBINDING:"Toggle to invert default binding behavior",TOGGLE_FRAME_RENDERING:"Toggle frame rendering",TOGGLE_FRAME_CLIPPING:"Toggle frame clipping",OPEN_LINK_CLICK:"Open Link",OPEN_LINK_PROPS:"Open the image-link or LaTeX-formula editor",NARROW_TO_HEADING:"Narrow to heading...",NARROW_TO_BLOCK:"Narrow to block...",SHOW_ENTIRE_FILE:"Show entire file",ZOOM_TO_FIT:"Zoom to fit",RELOAD:"Reload original link",OPEN_IN_BROWSER:"Open current link in browser",PROPERTIES:"Properties",COPYCODE:"Copy source to clipboard",ES_TITLE:"Embeddable Element Settings",ES_RENAME:"Rename File",ES_ZOOM:"Embedded Content Scaling",ES_YOUTUBE_START:"YouTube Start Time",ES_YOUTUBE_START_DESC:"ss, mm:ss, hh:mm:ss",ES_YOUTUBE_START_INVALID:"The YouTube Start Time is invalid. Please check the format and try again",ES_FILENAME_VISIBLE:"Filename Visible",ES_BACKGROUND_HEAD:"Embedded note background color",ES_BACKGROUND_DESC_INFO:"Click here for more info on colors",ES_BACKGROUND_DESC_DETAIL:"Background color affects only the preview mode of the markdown embeddable. When editing, it follows the Obsidian light/dark theme as set for the scene (via document property) or in plugin settings. The background color has two layers: the element background color (lower layer) and a color on top (upper layer). Selecting 'Match Element Background' means both layers follow the element color. Selecting 'Match Canvas' or a specific background color keeps the element background layer. Setting opacity (e.g., 50%) mixes the canvas or selected color with the element background color. To remove the element background layer, set the element color to transparent in Excalidraw's element properties editor. This makes only the upper layer effective.",ES_BACKGROUND_MATCH_ELEMENT:"Match Element Background Color",ES_BACKGROUND_MATCH_CANVAS:"Match Canvas Background Color",ES_BACKGROUND_COLOR:"Background Color",ES_BORDER_HEAD:"Embedded note border color",ES_BORDER_COLOR:"Border Color",ES_BORDER_MATCH_ELEMENT:"Match Element Border Color",ES_BACKGROUND_OPACITY:"Background Opacity",ES_BORDER_OPACITY:"Border Opacity",ES_EMBEDDABLE_SETTINGS:"Embeddable Markdown Settings",ES_USE_OBSIDIAN_DEFAULTS:"Use Obsidian Defaults",ES_ZOOM_100_RELATIVE_DESC:"The button will adjust the element scale so it will show the content at 100% relative to the current zoom level of your canvas",ES_ZOOM_100:"Relative 100%",PROMPT_FILE_DOES_NOT_EXIST:"File does not exist. Do you want to create it?",PROMPT_ERROR_NO_FILENAME:"Error: Filename for new file may not be empty",PROMPT_ERROR_DRAWING_CLOSED:"Unknown error. It seems as if your drawing was closed or the drawing file is missing",PROMPT_TITLE_NEW_FILE:"New File",PROMPT_TITLE_CONFIRMATION:"Confirmation",PROMPT_BUTTON_CREATE_EXCALIDRAW:"Create EX",PROMPT_BUTTON_CREATE_EXCALIDRAW_ARIA:"Create Excalidraw drawing and open in new tab",PROMPT_BUTTON_CREATE_MARKDOWN:"Create MD",PROMPT_BUTTON_CREATE_MARKDOWN_ARIA:"Create markdown document and open in new tab",PROMPT_BUTTON_EMBED_MARKDOWN:"Embed MD",PROMPT_BUTTON_EMBED_MARKDOWN_ARIA:"Replace selected element with embedded markdown document",PROMPT_BUTTON_NEVERMIND:"Nevermind",PROMPT_BUTTON_OK:"OK",PROMPT_BUTTON_CANCEL:"Cancel",PROMPT_BUTTON_INSERT_LINE:"Insert new line",PROMPT_BUTTON_INSERT_SPACE:"Insert space",PROMPT_BUTTON_INSERT_LINK:"Insert markdown link to file",PROMPT_BUTTON_UPPERCASE:"Uppercase",PROMPT_SELECT_TEMPLATE:"Select a template",WEB_BROWSER_DRAG_ACTION:"Web Browser Drag Action",LOCAL_FILE_DRAG_ACTION:"OS Local File Drag Action",INTERNAL_DRAG_ACTION:"Obsidian Internal Drag Action",PANE_TARGET:"Link click behavior",DEFAULT_ACTION_DESC:"In case none of the combinations apply the default action for this group is: ",FRAME_SETTINGS_TITLE:"Frame Settings",FRAME_SETTINGS_ENABLE:"Enable Frames",FRAME_SETTIGNS_NAME:"Display Frame Name",FRAME_SETTINGS_OUTLINE:"Display Frame Outline",FRAME_SETTINGS_CLIP:"Enable Frame Clipping",IPM_PAGES_TO_IMPORT_NAME:"Pages to import",IPM_SELECT_PAGES_TO_IMPORT:"Please select pages to import",IPM_ADD_BORDER_BOX_NAME:"Add border box",IPM_ADD_FRAME_NAME:"Add page to frame",IPM_ADD_FRAME_DESC:"For easier handling I recommend to lock the page inside the frame. If, however, you do lock the page inside the frame then the only way to unlock it is to right-click the frame, select remove elements from frame, then unlock the page.",IPM_GROUP_PAGES_NAME:"Group pages",IPM_GROUP_PAGES_DESC:"This will group all pages into a single group. This is recommended if you are locking the pages after import, because the group will be easier to unlock later rather than unlocking one by one.",IPM_SELECT_PDF:"Please select a PDF file",UPDATE_AVAILABLE:`A newer version of Excalidraw is available in Community Plugins.\n\nYou are using ${PLUGIN_VERSION}.\nThe latest is`,ERROR_PNG_TOO_LARGE:"Error exporting PNG - PNG too large, try a smaller resolution",WEB_DRAG_IMPORT_IMAGE:"Import Image to Vault",WEB_DRAG_IMAGE_URL:"Insert Image or YouTube Thumbnail with URL",WEB_DRAG_LINK:"Insert Link",WEB_DRAG_EMBEDDABLE:"Insert Interactive-Frame",LOCAL_DRAG_IMPORT:"Import external file or reuse existing file if path is from the Vault",LOCAL_DRAG_IMAGE:"Insert Image: with local URI or internal-link if from Vault",LOCAL_DRAG_LINK:"Insert Link: local URI or internal-link if from Vault",LOCAL_DRAG_EMBEDDABLE:"Insert Interactive-Frame: local URI or internal-link if from Vault",INTERNAL_DRAG_IMAGE:"Insert Image",INTERNAL_DRAG_IMAGE_FULL:"Insert Image @100%",INTERNAL_DRAG_LINK:"Insert Link",INTERNAL_DRAG_EMBEDDABLE:"Insert Interactive-Frame",LINK_CLICK_ACTIVE:"Open in current active window",LINK_CLICK_NEW_PANE:"Open in a new adjacent window",LINK_CLICK_POPOUT:"Open in a popout window",LINK_CLICK_NEW_TAB:"Open in a new tab",LINK_CLICK_MD_PROPS:"Show the Markdown image-properties dialog (only relevant if you have embedded a markdown document as an image)",EXPORTDIALOG_TITLE:"Export Drawing",EXPORTDIALOG_TAB_IMAGE:"Image",EXPORTDIALOG_TAB_PDF:"PDF",EXPORTDIALOG_SAVE_SETTINGS:"Save image settings to file doc.properties?",EXPORTDIALOG_SAVE_SETTINGS_SAVE:"Save as preset",EXPORTDIALOG_SAVE_SETTINGS_ONETIME:"One-time use",EXPORTDIALOG_IMAGE_SETTINGS:"Image",EXPORTDIALOG_IMAGE_DESC:"PNG supports transparency. External files can include Excalidraw scene data.",EXPORTDIALOG_PADDING:"Padding",EXPORTDIALOG_SCALE:"Scale",EXPORTDIALOG_CURRENT_PADDING:"Current padding:",EXPORTDIALOG_SIZE_DESC:"Scale affects output size",EXPORTDIALOG_SCALE_VALUE:"Scale:",EXPORTDIALOG_IMAGE_SIZE:"Size:",EXPORTDIALOG_EXPORT_THEME:"Theme",EXPORTDIALOG_THEME_LIGHT:"Light",EXPORTDIALOG_THEME_DARK:"Dark",EXPORTDIALOG_BACKGROUND:"Background",EXPORTDIALOG_BACKGROUND_TRANSPARENT:"Transparent",EXPORTDIALOG_BACKGROUND_USE_COLOR:"Use scene color",EXPORTDIALOG_SELECTED_ELEMENTS:"Export",EXPORTDIALOG_SELECTED_ALL:"Entire scene",EXPORTDIALOG_SELECTED_SELECTED:"Selection only",EXPORTDIALOG_EMBED_SCENE:"Include scene data?",EXPORTDIALOG_EMBED_YES:"Yes",EXPORTDIALOG_EMBED_NO:"No",EXPORTDIALOG_PDF_SETTINGS:"PDF",EXPORTDIALOG_PAGE_SIZE:"Size",EXPORTDIALOG_PAGE_ORIENTATION:"Orientation",EXPORTDIALOG_ORIENTATION_PORTRAIT:"Portrait",EXPORTDIALOG_ORIENTATION_LANDSCAPE:"Landscape",EXPORTDIALOG_PDF_FIT_TO_PAGE:"Page Fitting",EXPORTDIALOG_PDF_FIT_OPTION:"Fit to page",EXPORTDIALOG_PDF_FIT_2_OPTION:"Fit to max 2-pages",EXPORTDIALOG_PDF_FIT_4_OPTION:"Fit to max 4-pages",EXPORTDIALOG_PDF_FIT_6_OPTION:"Fit to max 6-pages",EXPORTDIALOG_PDF_FIT_8_OPTION:"Fit to max 8-pages",EXPORTDIALOG_PDF_FIT_12_OPTION:"Fit to max 12-pages",EXPORTDIALOG_PDF_FIT_16_OPTION:"Fit to max 16-pages",EXPORTDIALOG_PDF_SCALE_OPTION:"Use image scale (may span multiple pages)",EXPORTDIALOG_PDF_PAPER_COLOR:"Paper Color",EXPORTDIALOG_PDF_PAPER_WHITE:"White",EXPORTDIALOG_PDF_PAPER_SCENE:"Use scene color",EXPORTDIALOG_PDF_PAPER_CUSTOM:"Custom color",EXPORTDIALOG_PDF_ALIGNMENT:"Position on Page",EXPORTDIALOG_PDF_ALIGN_CENTER:"Center",EXPORTDIALOG_PDF_ALIGN_CENTER_LEFT:"Center Left",EXPORTDIALOG_PDF_ALIGN_CENTER_RIGHT:"Center Right",EXPORTDIALOG_PDF_ALIGN_TOP_LEFT:"Top Left",EXPORTDIALOG_PDF_ALIGN_TOP_CENTER:"Top Center",EXPORTDIALOG_PDF_ALIGN_TOP_RIGHT:"Top Right",EXPORTDIALOG_PDF_ALIGN_BOTTOM_LEFT:"Bottom Left",EXPORTDIALOG_PDF_ALIGN_BOTTOM_CENTER:"Bottom Center",EXPORTDIALOG_PDF_ALIGN_BOTTOM_RIGHT:"Bottom Right",EXPORTDIALOG_PDF_MARGIN:"Margin",EXPORTDIALOG_PDF_MARGIN_NONE:"None",EXPORTDIALOG_PDF_MARGIN_TINY:"Small",EXPORTDIALOG_PDF_MARGIN_NORMAL:"Normal",EXPORTDIALOG_SAVE_PDF_SETTINGS:"Save PDF settings",EXPORTDIALOG_SAVE_CONFIRMATION:"PDF config saved to plugin settings as default",EXPORTDIALOG_PNGTOFILE:"Export PNG",EXPORTDIALOG_SVGTOFILE:"Export SVG",EXPORTDIALOG_PNGTOVAULT:"PNG to Vault",EXPORTDIALOG_SVGTOVAULT:"SVG to Vault",EXPORTDIALOG_EXCALIDRAW:"Excalidraw",EXPORTDIALOG_PNGTOCLIPBOARD:"PNG to Clipboard",EXPORTDIALOG_SVGTOCLIPBOARD:"SVG to Clipboard",EXPORTDIALOG_PDF:"Export PDF",EXPORTDIALOG_PDF_PROGRESS_NOTICE:"Exporting PDF. If this image is large, it may take a while.",EXPORTDIALOG_PDF_PROGRESS_DONE:"Export complete",EXPORTDIALOG_PDF_PROGRESS_ERROR:"Error exporting PDF, check developer console for details",PDF_EXPORT_DESKTOP_ONLY:"PDF export is only available on desktop"};let locale=null;function loadLocale(lang){if("zh"===lang&&(lang="zh-cn"),Object.keys(PLUGIN_LANGUAGES).includes(lang)){const decompressed=LZString.decompressFromBase64(PLUGIN_LANGUAGES[lang]);let x={};return eval(decompressed),x}return en}function t$d(e){return locale||(locale=loadLocale(LOCALE)),locale&&locale[e]||en[e]}var PreviewImageType;!function(e){e.PNG="PNG",e.SVGIMG="SVGIMG",e.SVG="SVG"}(PreviewImageType||(PreviewImageType={}));class Random{constructor(e){this.seed=e}next(){return this.seed?(2**31-1&(this.seed=Math.imul(48271,this.seed)))/2**31:Math.random()}}let mathjaxLoaded=!1,tex2dataURLExternal,clearVariables,loadMathJaxPromise=null;const loadMathJax=async()=>(loadMathJaxPromise||(loadMathJaxPromise=(async()=>{if(!mathjaxLoaded){const e=await loadMathjaxToSVG();tex2dataURLExternal=e.tex2dataURL,clearVariables=e.clearMathJaxVariables,mathjaxLoaded=!0}})()),loadMathJaxPromise),updateEquation=async(e,t,a,i)=>{await loadMathJax();const n=await tex2dataURLExternal(e,4,a.app);if(n){const e=[];e.push({mimeType:n.mimeType,id:t,dataURL:n.dataURL,created:n.created,size:n.size,hasSVGwithBitmap:!1,shouldScale:!0}),i(e,a)}};async function tex2dataURL(e,t=4,a){return await loadMathJax(),tex2dataURLExternal(e,t,a)}const clearMathJaxVariables=()=>{clearVariables&&clearVariables()};function getMermaidImageElements(e){return e?e.filter((e=>"image"===e.type&&e.customData?.mermaidText)):[]}function getMermaidText(e){return e.customData?.mermaidText}function shouldRenderMermaid(){return obsidian_module.requireApiVersion("1.4.14")}const DB_NAME="Excalidraw "+app.appId,CACHE_STORE="imageCache",BACKUP_STORE="drawingBAK",getKey=e=>`${e.filepath}#${e.blockref??""}#${e.sectionref??""}#${e.isDark?1:0}#${e.hasGroupref}#${e.hasArearef}#${e.hasFrameref}#${e.hasClippedFrameref}#${e.hasSectionref}#${e.inlineFonts}#${e.previewImageType===PreviewImageType.SVGIMG?1:e.previewImageType===PreviewImageType.PNG?0:2}#${e.scale}${e.isTransparent?"#t":""}`;class ImageCache{dbName;cacheStoreName;backupStoreName;db;isInitializing;plugin;app;initializationNotice=!1;obsidanURLCache=new Map;purgeInvalidCacheTimer=null;purgeInvalidBackupTimer=null;destroy(){this.isInitializing=!0,this.purgeInvalidCacheTimer&&clearTimeout(this.purgeInvalidCacheTimer),this.purgeInvalidBackupTimer&&clearTimeout(this.purgeInvalidBackupTimer),this.db=null,this.plugin=null,this.app=null,this.obsidanURLCache.clear(),this.obsidanURLCache=null}constructor(e,t,a){this.dbName=e,this.cacheStoreName=t,this.backupStoreName=a,this.db=null,this.isInitializing=!1,this.plugin=null}async initializeDB(e){if(this.plugin=e,this.app=e.app,!this.isInitializing&&null===this.db){this.isInitializing=!0;try{const e=indexedDB.open(this.dbName);if(e.onupgradeneeded=e=>{const t=e.target.result;t.objectStoreNames.contains(this.cacheStoreName)||t.createObjectStore(this.cacheStoreName),t.objectStoreNames.contains(this.backupStoreName)||t.createObjectStore(this.backupStoreName)},this.db=await new Promise(((t,a)=>{e.onsuccess=e=>{const a=e.target.result;t(a)},e.onerror=()=>{a(new Error(`Failed to open or create IndexedDB database: ${this.dbName}`))}})),!this.db.objectStoreNames.contains(this.cacheStoreName)||!this.db.objectStoreNames.contains(this.backupStoreName)){const e=this.db.version+1;this.db.close();const t=indexedDB.open(this.dbName,e);t.onupgradeneeded=e=>{const t=e.target.result;t.objectStoreNames.contains(this.cacheStoreName)||t.createObjectStore(this.cacheStoreName),t.objectStoreNames.contains(this.backupStoreName)||t.createObjectStore(this.backupStoreName)},await new Promise(((e,a)=>{t.onsuccess=()=>{t.result.close(),e()},t.onerror=()=>{a(new Error(`Failed to upgrade IndexedDB database: ${this.dbName}`))}})),this.db=await new Promise(((e,t)=>{const a=indexedDB.open(this.dbName);a.onsuccess=()=>{const t=a.result;e(t)},a.onerror=()=>{t(new Error(`Failed to open IndexedDB database: ${this.dbName}`))}}))}this.purgeInvalidCacheTimer=window.setTimeout((async()=>{this.purgeInvalidCacheTimer=null,this.purgeInvalidCacheFiles()}),6e4),this.purgeInvalidBackupTimer=window.setTimeout((async()=>{this.purgeInvalidBackupTimer=null,this.purgeInvalidBackupFiles()}),12e4)}finally{this.isInitializing=!1,this.initializationNotice&&(new obsidian_module.Notice("Excalidraw Image Cache is Initialized - You may now retry opening your damaged drawing."),this.initializationNotice=!1),console.log("Initialized Excalidraw Image Cache")}}}async purgeInvalidCacheFiles(){return new Promise(((e,t)=>{const a=this.db.transaction(this.cacheStoreName,"readwrite"),i=a.objectStore(this.cacheStoreName),n=this.app.vault.getFiles(),r=[],s=i.openCursor();s.onsuccess=s=>{const o=s.target.result;if(o){const e=o.key,t=e.split("#").length-1<12,a=e.split("#")[0],s=n.some((e=>e.path===a)),l=s?n.find((e=>e.path===a)):null;(t||!l||l&&l.stat.mtime>o.value.mtime||!o.value.blob&&!o.value.svg)&&r.push(new Promise(((t,a)=>{const n=i.delete(o.primaryKey);n.onsuccess=()=>t(),n.onerror=t=>{const i=n.error,r=`Failed to delete file with key: ${e}. Error: ${i.message}`;a(new Error(r))}}))),o.continue()}else Promise.all(r).then((()=>{a.commit(),e()})).catch((e=>t(e)))},s.onerror=()=>{const e=s.error;console.log(e);const a=`Failed to purge invalid files from IndexedDB. Error: ${e.message}`;t(new Error(a))}}))}async purgeInvalidBackupFiles(){const e=this.db.transaction(this.backupStoreName,"readwrite"),t=e.objectStore(this.backupStoreName),a=this.app.vault.getFiles(),i=[],n=t.openCursor();return await new Promise(((r,s)=>{n.onsuccess=n=>{const o=n.target.result;if(o){const e=o.key,n=a.some((t=>t.path===e));n||i.push(new Promise(((a,i)=>{const n=t.delete(o.primaryKey);n.onsuccess=()=>a(),n.onerror=()=>i(new Error(`Failed to delete backup file with key: ${e}`))}))),o.continue()}else Promise.all(i).then((()=>{e.commit(),r()})).catch((e=>s(e)))},n.onerror=()=>{const e=n.error,t=`Failed to purge invalid backup files from IndexedDB. Error: ${e.message}`;console.log(e),s(new Error(t))}}))}getObjectStore(e,t){return this.db.transaction(t,e).objectStore(t)}async getCacheData(e){const t=this.getObjectStore("readonly",this.cacheStoreName).get(e);return await new Promise(((e,a)=>{t.onsuccess=()=>{const a=t.result;e(a||null)},t.onerror=()=>{a(new Error("Failed to retrieve data from IndexedDB."))}}))}async getBackupData(e){const t=this.getObjectStore("readonly",this.backupStoreName).get(e);return new Promise(((e,a)=>{t.onsuccess=()=>{const a=t.result;e(a||null)},t.onerror=()=>{a(new Error("Failed to retrieve backup data from IndexedDB."))}}))}isReady(){return!!this.db&&!this.isInitializing&&!!this.plugin&&this.plugin.settings.allowImageCache}fullyInitialized=!1;async getImageFromCache(e){if(!this.isReady())return null;const t=getKey(e);try{const a=this.fullyInitialized?await this.getCacheData(t):await Promise.race([this.getCacheData(t),new Promise(((e,t)=>setTimeout((()=>{t(void 0)}),100)))]);if(this.fullyInitialized=!0,!a)return;const i=this.app.vault.getAbstractFileByPath(e.filepath.split("#")[0]);if(!(i&&i instanceof obsidian_module.TFile))return;if(a&&a.mtime>=i.stat.mtime){if(hasExcalidrawEmbeddedImagesTreeChanged(i,a.mtime,this.plugin))return;if(a.svg)return convertSVGStringToElement(a.svg);if(this.obsidanURLCache.has(t))return this.obsidanURLCache.get(t);const e=URL.createObjectURL(a.blob);return this.obsidanURLCache.set(t,e),e}return}catch(e){return}}async getBAKFromCache(e){return this.isReady()?this.getBackupData(e):null}addImageToCache(e,t,a){if(!this.isReady())return;const i=this.app.vault.getAbstractFileByPath(e.filepath.split("#")[0]);if(!(i&&i instanceof obsidian_module.TFile))return;let n=null,r=null;a instanceof SVGSVGElement?n=a.outerHTML:r=a;const s={mtime:Date.now(),blob:r,svg:n},o=this.db.transaction(this.cacheStoreName,"readwrite").objectStore(this.cacheStoreName),l=getKey(e);o.put(s,l),Boolean(n)||this.obsidanURLCache.set(l,t)}async addBAKToCache(e,t){this.isReady()&&this.db.transaction(this.backupStoreName,"readwrite").objectStore(this.backupStoreName).put(t,e)}async clearImageCache(){if(this.isReady())return this.clear(this.cacheStoreName,"Image cache was cleared")}async clearBackupCache(){if(this.isReady())return this.clear(this.backupStoreName,"All backups were cleared")}async clear(e,t){if(!this.isReady())return;const a=this.db.transaction([e],"readwrite").objectStore(e);return new Promise(((i,n)=>{const r=a.clear();r.onsuccess=()=>{new obsidian_module.Notice(t),i()},r.onerror=()=>n(new Error(`Failed to clear ${e}.`))}))}}const imageCache=new ImageCache(DB_NAME,CACHE_STORE,BACKUP_STORE),markdownRendererRecursionWatcthdog=new Set,IMAGE_MIME_TYPES={svg:"image/svg+xml",png:"image/png",jpg:"image/jpeg",jpeg:"image/jpeg",gif:"image/gif",webp:"image/webp",bmp:"image/bmp",ico:"image/x-icon",avif:"image/avif",jfif:"image/jfif"},replaceSVGColors=(e,t)=>{if(!t)return e;if("string"==typeof e){for(const[a,i]of Object.entries(t)){if("stroke"===a||"fill"===a){const[t,n,r]=e.match(/(]*)(>)/i)||[];if(!t)continue;e=e.replace(t,t.match(new RegExp(`${a}=["'][^"']*["']`))?n.replace(new RegExp(`${a}=["'][^"']*["']`,"i"),`${a}="${i}"`)+r:`${n} ${a}="${i}"${r}`);continue}const t=new RegExp(`fill="${a}"`,"gi");e=e.replaceAll(t,`fill="${i}"`);const n=new RegExp(`fill:${a}`,"gi");e=e.replaceAll(n,`fill:${i}`);const r=new RegExp(`stroke="${a}"`,"gi");e=e.replaceAll(r,`stroke="${i}"`);const s=new RegExp(`stroke:${a}`,"gi");e=e.replaceAll(s,`stroke:${i}`)}return e}const a=e=>{if(e instanceof SVGElement){const a=e.getAttribute("fill")?.toLocaleLowerCase(),i=e.getAttribute("stroke")?.toLocaleLowerCase();a&&t[a]&&e.setAttribute("fill",t[a]),i&&t[i]&&e.setAttribute("stroke",t[i])}for(const t of e.childNodes)a(t)};"fill"in t&&e.setAttribute("fill",t.fill),"stroke"in t&&e.setAttribute("stroke",t.stroke);for(const t of e.childNodes)a(t);return e};class EmbeddedFile{file=null;isSVGwithBitmap=!1;img="";imgInverted="";mtime=0;plugin;mimeType="application/octet-stream";size={height:0,width:0};linkParts;filenameparts;hostPath;attemptCounter=0;isHyperLink=!1;isLocalLink=!1;hyperlink;colorMap=null;pdfPageViewProps;constructor(e,t,a,i){if(this.plugin=e,this.resetImage(t,a),this.file&&(this.plugin.isExcalidrawFile(this.file)||"svg"===this.file.extension.toLowerCase()))try{this.colorMap=i?JSON.parse(i.toLocaleLowerCase()):null}catch(e){this.colorMap=null}}resetImage(e,t){return this.imgInverted=this.img="",this.mtime=0,t.startsWith("https://")||t.startsWith("http://")||t.startsWith("ftp://")||t.startsWith("ftps://")?(this.isHyperLink=!0,void(this.hyperlink=t)):t.startsWith("file://")?(this.isLocalLink=!0,void(this.hyperlink=t)):(this.linkParts=getLinkParts(t),this.hostPath=e,void(this.linkParts.path?(this.linkParts.width||(this.linkParts.width=this.plugin.settings.mdSVGwidth),this.linkParts.height||(this.linkParts.height=this.plugin.settings.mdSVGmaxHeight),this.file=this.plugin.app.metadataCache.getFirstLinkpathDest(this.linkParts.path,e),this.file?(this.filenameparts=getEmbeddedFilenameParts(t),this.filenameparts.filepath=this.file.path):0==this.attemptCounter++&&new obsidian_module.Notice(`Excalidraw Warning: could not find image file: ${t}`,5e3)):new obsidian_module.Notice(`Excalidraw Error\nIncorrect embedded filename: ${t}`)))}fileChanged(){return!this.isHyperLink&&!this.isLocalLink&&(this.file||(this.file=this.plugin.app.metadataCache.getFirstLinkpathDest(this.linkParts.path,this.hostPath),this.file)?this.mtime!==this.file.stat.mtime:(this.attemptCounter++,!1))}setImage({imgBase64:e,mimeType:t,size:a,isDark:i,isSVGwithBitmap:n,pdfPageViewProps:r}){if(this.file||this.isHyperLink||this.isLocalLink){switch(this.fileChanged()&&(this.imgInverted=this.img=""),this.mtime=this.isHyperLink||this.isLocalLink?0:this.file.stat.mtime,this.pdfPageViewProps=r,this.size=a,this.mimeType=t,i&&n){case!0:this.imgInverted=e;break;case!1:this.img=e}this.isSVGwithBitmap=n}}isLoaded(e){if(!this.isHyperLink&&!this.isLocalLink){if(!this.file&&(this.file=this.plugin.app.metadataCache.getFirstLinkpathDest(this.linkParts.path,this.hostPath),!this.file))return this.attemptCounter++,!0;if(this.fileChanged())return!1}return this.isSVGwithBitmap&&e?""!==this.imgInverted:""!==this.img}getImage(e){return this.file||this.isHyperLink||this.isLocalLink?e&&this.isSVGwithBitmap?this.imgInverted:this.img:""}shouldScale(){return this.isHyperLink||this.isLocalLink||!Boolean(this.linkParts&&this.linkParts.original&&this.linkParts.original.endsWith("|100%"))}}class EmbeddedFilesLoader{pdfDocsMap=new Map;plugin;isDark;terminate=!1;uid;constructor(e,t){this.plugin=e,this.isDark=t,this.uid=nanoid()}emptyPDFDocsMap(){this.pdfDocsMap.forEach((e=>e.destroy())),this.pdfDocsMap.clear()}async getObsidianImage(e,t){const a=await this._getObsidianImage(e,t);return this.emptyPDFDocsMap(),a}async getExcalidrawSVG({isDark:e,file:t,depth:a,inFile:i,hasSVGwithBitmap:n,elements:r=[]}){const s=isMaskFile(this.plugin,t),o=hasExportTheme(this.plugin,t)?getExportTheme(this.plugin,t,"light"):void 0,l={withBackground:!!hasExportBackground(this.plugin,t)&&getWithBackground(this.plugin,t),withTheme:!!o,isMask:s,skipInliningFonts:!1},c=!Boolean(i instanceof EmbeddedFile?i.colorMap:null)&&this.plugin.settings.allowImageCacheInScene&&t&&imageCache.isReady(),d=Boolean(i instanceof EmbeddedFile&&i.filenameparts),h=d?i.filenameparts:null,p={...d?{...h,inlineFonts:!l.skipInliningFonts}:{filepath:t.path,hasBlockref:!1,hasGroupref:!1,hasTaskbone:!1,hasArearef:!1,hasFrameref:!1,hasClippedFrameref:!1,hasSectionref:!1,inlineFonts:!l.skipInliningFonts,blockref:null,sectionref:null,linkpartReference:null,linkpartAlias:null},isDark:e,previewImageType:PreviewImageType.SVG,scale:1,isTransparent:!l.withBackground},u=c?await imageCache.getImageFromCache(p):void 0,m=u&&u instanceof SVGSVGElement?u:replaceSVGColors(await createSVG(d?h.hasGroupref||h.hasBlockref||h.hasSectionref||h.hasFrameref||h.hasClippedFrameref?h.filepath+h.linkpartReference:t.path:t?.path,!1,d&&h.hasClippedFrameref?{...l,frameRendering:{enabled:!0,name:!1,outline:!1,clip:!0}}:l,this,o,null,null,r,this.plugin,a+1,getExportPadding(this.plugin,t)),i instanceof EmbeddedFile?i.colorMap:null),f=m.querySelectorAll("image:not([href^='data:image/svg'])");if(f.length>0&&(n=!0),n&&e&&!Boolean(u)&&f.forEach((e=>{const t=e.parentElement?.id;m.querySelectorAll(`use[href='#${t}']`).forEach((e=>{e.setAttribute("filter",THEME_FILTER)}))})),!n&&m.getAttribute("hasbitmap")&&(n=!0),c&&!Boolean(u)&&imageCache.addImageToCache(p,"",m),!m.hasAttribute("width")&&m.hasAttribute("viewBox")){const e=m.getAttr("viewBox").split(" ");Boolean(e[2])&&m.setAttribute("width",e[2]),Boolean(e[3])&&m.setAttribute("height",e[3])}return{dataURL:svgToBase64(m.outerHTML),hasSVGwithBitmap:n}}getLocalPath(e){const t=e.split("file://")[1];return t.startsWith("/")?t.substring(1):t}async _getObsidianImage(e,t){if(!this.plugin||!e)return null;const a=this.plugin.app,i=e instanceof EmbeddedFile&&e.isHyperLink,n=e instanceof EmbeddedFile&&e.isLocalLink,r=e instanceof EmbeddedFile?e.hyperlink:"",s=e instanceof EmbeddedFile?e.file:e;if(s&&markdownRendererRecursionWatcthdog.has(s))return new obsidian_module.Notice(`Loading of ${s.path}. Please check if there is an inifinite loop of one file embedded in the other.`),null;const o=i?null:e instanceof EmbeddedFile?e.linkParts:{original:s.path,path:s.path,isBlockRef:!1,ref:null,width:this.plugin.settings.mdSVGwidth,height:this.plugin.settings.mdSVGmaxHeight,page:null};let l=!1;const c=!i&&!n&&this.plugin.isExcalidrawFile(s),d=!i&&!n&&"pdf"===s.extension.toLowerCase();if(!(i||d||n||IMAGE_TYPES.contains(s.extension)||c||"md"===s.extension))return null;const h=i||d||c?null:n?await readLocalFileBinary(this.getLocalPath(e.hyperlink)):await a.vault.readBinary(s);let p=null;if(c){const a=await this.getExcalidrawSVG({isDark:this.isDark,file:s,depth:t,inFile:e,hasSVGwithBitmap:l});p=a.dataURL,l=a.hasSVGwithBitmap}const u=c?p:null,[m,f,g]=d?await this.pdfToDataURL(s,o):[null,null,null];let U=d?"image/png":"image/svg+xml";const b=i||n?getURLImageExtension(r):s.extension;c||d||(U=getMimeType(b));let E=i?e instanceof EmbeddedFile?await getDataURLFromURL(e.hyperlink,U):null:u??m??("svg"===s?.extension?await getSVGData(a,s,e instanceof EmbeddedFile?e.colorMap:null):"md"===s?.extension?null:await getDataURL(h,U));if(!i&&!E&&!n){markdownRendererRecursionWatcthdog.add(s);const e=await this.convertMarkdownToSVG(this.plugin,s,o,t);markdownRendererRecursionWatcthdog.delete(s),E=e.dataURL,l=e.hasSVGwithBitmap}try{const t=d?f:await getImageSize(E);return{mimeType:U,fileId:await generateIdFromFile(i||d||c?(new TextEncoder).encode(E):h,e instanceof EmbeddedFile?e.filenameparts?.linkpartReference:void 0),dataURL:E,created:i||n?0:s.stat.mtime,hasSVGwithBitmap:l,size:t,pdfPageViewProps:g}}catch(e){return null}}async loadSceneFiles({excalidrawData:e,addFiles:t,depth:a,isThemeChange:i=!1,fileIDWhiteList:n}){if(a>7)return void new obsidian_module.Notice(t$d("INFINITE_LOOP_WARNING")+a.toString(),6e3);const r=e.getFileEntries();let s;void 0===this.isDark&&(this.isDark="dark"===e?.scene?.appState?.theme);const o=[];o.push([]);let l=0;const c=setInterval((()=>{if(0!==o[l].length){try{t(o[l],this.isDark,!1)}catch(e){errorlog({where:"EmbeddedFileLoader.loadSceneFiles",error:e})}o.push([]),l++}}),1200),d=function*(){for(;!(s=r.next()).done;){if(n&&!n.has(s.value[0]))continue;const e=s.value[1],t=s.value[0];yield promiseTry((async()=>{if(!this.terminate)if(e.isLoaded(this.isDark)){if(e.isSVGwithBitmap&&(0!==a||i)){const a={mimeType:e.mimeType,id:t,dataURL:e.getImage(this.isDark),created:e.mtime,size:e.size,hasSVGwithBitmap:e.isSVGwithBitmap,shouldScale:e.shouldScale(),pdfPageViewProps:e.pdfPageViewProps};o[l].push(a)}}else{const i=await this._getObsidianImage(e,a);if(i){const a={mimeType:i.mimeType,id:t,dataURL:i.dataURL,created:i.created,size:i.size,hasSVGwithBitmap:i.hasSVGwithBitmap,shouldScale:e.shouldScale(),pdfPageViewProps:i.pdfPageViewProps};o[l].push(a)}}}))}let t;const c=e.getEquationEntries();for(;!(t=c.next()).done;){if(n&&!n.has(t.value[0]))continue;const a=t.value[1],i=t.value[0];yield promiseTry((async()=>{if(!this.terminate&&!e.getEquation(i).isLoaded){const e=a.latex,t=await tex2dataURL(e,4,this.plugin);if(t){const e={mimeType:t.mimeType,id:i,dataURL:t.dataURL,created:t.created,size:t.size,hasSVGwithBitmap:!1,shouldScale:!0};o[l].push(e)}}}))}if(shouldRenderMermaid()){const t=getMermaidImageElements(e.scene.elements);for(const e of t)yield promiseTry((async()=>{if(this.terminate)return;const t=getMermaidText(e),i=await mermaidToExcalidraw(t,{themeVariables:{fontSize:"20"}},!0);if(i)if(i?.files)for(const t in i.files){const a={...i.files[t],id:e.fileId,created:Date.now(),hasSVGwithBitmap:!1,shouldScale:!0,size:await getImageSize(i.files[t].dataURL)};o[l].push(a)}else if(i?.elements){if(this.terminate)return;const t=await this.getExcalidrawSVG({isDark:this.isDark,file:null,depth:a,inFile:null,hasSVGwithBitmap:!1,elements:i.elements});if(t?.dataURL){const a=await getImageSize(t.dataURL),i={mimeType:"image/svg+xml",id:e.fileId,dataURL:t.dataURL,created:Date.now(),hasSVGwithBitmap:t.hasSVGwithBitmap,size:a,shouldScale:!0};o[l].push(i)}}}))}}.bind(this)(),h=this.plugin.settings.renderingConcurrency;if(await new PromisePool(d,h).all(),clearInterval(c),this.emptyPDFDocsMap(),this.terminate)t(void 0,this.isDark,!0);else try{t(o[l],this.isDark,!0)}catch(e){errorlog({where:"EmbeddedFileLoader.loadSceneFiles",error:e})}}async pdfToDataURL(e,t){try{let a=0,i=0;const n=this.pdfDocsMap.get(e.path)??await getPDFDoc(e);this.pdfDocsMap.has(e.path)||this.pdfDocsMap.set(e.path,n);const r=isNaN(t.page)?1:t.page??1,s=this.plugin.settings.pdfScale,o=t.ref.split("rect=")[1]?.split(",").map((e=>parseInt(e))),l=o&&4===o.length&&o.every((e=>!isNaN(e)));let c;const d=async e=>{const t=createEl("canvas"),r=t.getContext("2d"),d=await n.getPage(e),h=d.getViewport({scale:s});i=t.height=Math.round(h.height),a=t.width=Math.round(h.width);const p={canvasContext:r,background:"rgba(0,0,0,0)",viewport:h};for(let e=0;e<4;e++)try{await d.render(p).promise;break}catch(t){if(3===e)throw t;await sleep(50*(e+1));continue}const[u,m,f,g]=d.view;if(c={left:u,bottom:m,right:f,top:g},c.rotate=d.rotate,l){const e=g-m,n=f-u;if(!d.rotate||0===d.rotate)return a=(o[2]-o[0])*s,i=(o[3]-o[1])*s,cropCanvas(t,{left:(o[0]-u)*s,top:(m+e-o[3])*s,width:a,height:i});if(90===d.rotate)return a=(o[3]-o[1])*s,i=(o[2]-o[0])*s,cropCanvas(t,{left:o[1]*s,top:(e-o[2])*s,width:a,height:i});if(180===d.rotate)return a=(o[2]-o[0])*s,i=(o[3]-o[1])*s,cropCanvas(t,{left:(n-o[2])*s,top:o[1]*s,width:a,height:i});if(270===d.rotate)return a=(o[3]-o[1])*s,i=(o[2]-o[0])*s,cropCanvas(t,{left:(n-o[3])*s,top:o[0]*s,width:a,height:i})}return t},h=await d(r);if(h){const e=[`data:image/png;base64,${await new Promise(((e,t)=>{h.toBlob((async t=>{const a=await blobToBase64(t);e(a)}))}))}`,{width:a,height:i},c];return h.width=0,h.height=0,e}}catch(e){return console.log(e),[null,null,null]}}async convertMarkdownToSVG(e,t,a,i){let n=!1;const r=await getTransclusion(a,e.app,t);let s=(r.leadingHashes??"")+r.contents;""===s&&(s="# Empty markdown file\nCTRL+Click here to open the file for editing in the current active pane, or CTRL+SHIFT+Click to open it in an adjacent pane.");const o=e.app.metadataCache.getFileCache(t);let l,c=e.settings.mdFont;switch(o?.frontmatter&&Boolean(o.frontmatter[FRONTMATTER_KEYS.font.name])&&(c=o.frontmatter[FRONTMATTER_KEYS.font.name]),c){case"Virgil":l=await getCSSFontDefinition(1);break;case"Cascadia":l=await getCSSFontDefinition(3);break;case"Assistant":case"Helvetica":l=await getCSSFontDefinition(2);break;case"Excalifont":l=await getCSSFontDefinition(5);break;case"Nunito":l=await getCSSFontDefinition(6);break;case"Lilita One":l=await getCSSFontDefinition(7);break;case"Comic Shanns":l=await getCSSFontDefinition(8);break;case"Liberation Sans":l=await getCSSFontDefinition(9);break;case"":l="";break;default:const a=await getFontDataURL(e.app,c,t.path);l=a.fontDef,c=a.fontName}o?.frontmatter&&null!==o.frontmatter.banner&&(s=s.replace(/banner:\s*.*/,""));const d=o?.frontmatter?o.frontmatter[FRONTMATTER_KEYS["font-color"].name]??e.settings.mdFontColor:e.settings.mdFontColor;let h=o?.frontmatter?o.frontmatter[FRONTMATTER_KEYS["md-css"].name]??"":"",p=!1;if(h&&""!==h){const a=e.app.metadataCache.getFirstLinkpathDest(h,t.path);a&&(h=await e.app.vault.read(a),p=!0)}if(!p)if(e.settings.mdCSS&&""!==e.settings.mdCSS){const a=e.app.metadataCache.getFirstLinkpathDest(e.settings.mdCSS,t.path);h+=a?`\n${await e.app.vault.read(a)}`:DEFAULT_MD_EMBED_CSS}else h+=DEFAULT_MD_EMBED_CSS;const u=o?.frontmatter?o.frontmatter[FRONTMATTER_KEYS["border-color"].name]??e.settings.mdBorderColor:e.settings.mdBorderColor;u&&""!==u&&!h.match(/svg/i)&&(h+=`svg{border:2px solid;color:${u};transform:scale(.95)}`);let m=` width="${a.width}px" height="100000"`,f=` width="${a.width}px" height="100%"`;const g=(e,t,a)=>`${a?``:""}${e}${t}${""!==l?``:""}`,U=createDiv();U.setAttribute("xmlns","http://www.w3.org/1999/xhtml"),U.setAttribute("class","excalidraw-md-host"),""!==c&&(U.style.fontFamily=c),U.style.overflow="auto",U.style.display="block",U.style.color=d&&""!==d?d:"initial",await obsidian_module.MarkdownRenderer.render(this.plugin.app,s,U,t.path,this.plugin),U.querySelectorAll(":scope > *[class^='frontmatter']").forEach((e=>U.removeChild(e))),await replaceBlobWithBase64(U);const b=Array.from(U.querySelectorAll("span[class='internal-embed']"));for(let a=0;a{const t=e.style,a=window.getComputedStyle(e);let i="";for(const e in t)t.hasOwnProperty(e)&&(i+=`${e}: ${a[e]};`);e.setAttribute("style",i)}));const T=(new XMLSerializer).serializeToString(y),S=(new XMLSerializer).serializeToString(v);document.body.removeChild(E);const _=new DOMParser,x=_.parseFromString(g(T,S),"image/svg+xml").firstElementChild,C=createDiv();C.appendChild(x),document.body.appendChild(C);const I=x.querySelector(".excalidraw-md-footer").scrollHeight,A=x.querySelector(".excalidraw-md-host").scrollHeight+I,k=A<=a.height?A:a.height;document.body.removeChild(C),m=` width="${a.width}px" height="${k}px"`,f=` width="${a.width}px" height="${k}px"`,U.style.height=k-I+"px",U.style.overflow="hidden";const O=U.querySelectorAll("img:not([src^='data:image/svg+xml'])");O.length>0&&(n=!0),n&&this.isDark&&O.forEach((e=>{e instanceof HTMLImageElement&&(e.style.filter=THEME_FILTER)}));const R=g((new XMLSerializer).serializeToString(U),'',h);return e.ea.mostRecentMarkdownSVG=_.parseFromString(R,"image/svg+xml").firstElementChild,{dataURL:svgToBase64(R),hasSVGwithBitmap:n}}}const getSVGData=async(e,t,a)=>svgToBase64(replaceSVGColors(await e.vault.read(t),a)),generateIdFromFile=async(e,t)=>{let a;try{const i=new Uint8Array(e);let n;if(t){const e=(new TextEncoder).encode(t);n=new Uint8Array(i.length+e.length),n.set(i),n.set(e,i.length)}else n=i;const r=await window.crypto.subtle.digest("SHA-1",n);a=Array.from(new Uint8Array(r)).map((e=>e.toString(16).padStart(2,"0"))).join("")}catch(e){errorlog({where:"EmbeddedFileLoader.generateIdFromFile",error:e}),a=fileid()}return a},replaceBlobWithBase64=async e=>{const t=e.querySelectorAll('img[src^="blob:app://obsidian.md"]');for(let e of t){const t=e.src;try{const a=await fetch(t),i=await a.blob(),n=await blobToBase64(i);e.src=`data:${i.type};base64,${n}`}catch(e){console.error(`Failed to fetch or convert blob: ${t}`,e)}}},getEA=e=>{try{return window.ExcalidrawAutomate.getAPI(e)}catch(e){return console.log({message:"Excalidraw not available",fn:getEA}),null}},CROPPED_PREFIX="cropped_",ANNOTATED_PREFIX="annotated_",carveOutImage=async(e,t)=>{if(!t?.fileId)return;if(!e?.targetView)return;const a=getEA(e.targetView);a.copyViewElementsToEAforEditing([t],!0);const{height:i,width:n}=await e.getOriginalImageSize(t);if(!i||!n||0===i||0===n)return void a.destroy();const r=a.getElement(t.id);r.x=0,r.y=0,r.width=n,r.height=i;const s=r.scale,o=r.angle;r.scale=[1,1],r.angle=0;const l=e.targetView.excalidrawData.getFile(t.fileId);let c="",d="";if(l.file){d=l.file.basename;const e=l.linkParts?.ref?`#${l.linkParts.ref}`:"";c=`[[${l.file.path}${e}]]`}else{const e=l.hyperlink?.match(/^.*\/([^?]*)\??.*$/)?.[1];c=l.hyperlink,d=t?e.substring(0,e.lastIndexOf(".")):"_image"}const{folderpath:h,filename:p}=await getCropFileNameAndFolder(e.plugin,e.targetView.file.path,d),u=await createImageCropperFile(a,r.id,c,h,p);if(!u)return void a.destroy();e.clear(),e.copyViewElementsToEAforEditing([t]);const m=e.getElement(t.id);m.isDeleted=!0;const f=await e.addImage(m.x,m.y,u,!0),g=e.getElement(f);g.width=m.width,g.height=m.height,g.scale=s,g.angle=o,await e.addElementsToView(!1,!0,!0),a.destroy()},carveOutPDF=async(e,t,a,i)=>{if(!t||!a||!e?.targetView)return;const n=getEA(e.targetView);let{height:r,width:s}=t;if(!r||!s||0===r||0===s)return void n.destroy();const o=await n.addImage(0,0,a),l=n.getElement(o);l.x=0,l.y=0;const c=t.angle,d=i.basename,h=`[[${a}]]`,{folderpath:p,filename:u}=await getCropFileNameAndFolder(e.plugin,e.targetView.file.path,d),m=await createImageCropperFile(n,l.id,h,p,u);if(!m)return void n.destroy();e.clear();const f=await e.addImage(t.x+t.width+10,t.y,m,!0),g=e.getElement(f),U=g.width/g.height;U>1?(g.width=t.width,g.height=g.width/U):(g.height=t.height,g.width=g.height*U),g.angle=c,await e.addElementsToView(!1,!0,!0),n.destroy()},createImageCropperFile=async(e,t,a,i,n)=>{const r=e.plugin.app.vault,s=e.getElement(t),{width:o,height:l}=s,c=a.match(/\[\[([^#]*)#.*]]/)?.[1]?.endsWith(".pdf");s.opacity=100,s.locked=!0,s.link=a;const d=e.addFrame(0,0,o,l,"Adjust frame to crop image. Add elements for mask: White shows, Black hides.");e.getElement(d).link=a,s.frameId=d,e.style.opacity=50,e.style.fillStyle="solid",e.style.strokeStyle="solid",e.style.strokeColor="black",e.style.backgroundColor="black",e.style.roughness=0,e.style.roundness=null,e.canvas.theme="light",e.canvas.viewBackgroundColor=c?"#5d5d5d":"#3d3d3d";const h=getListOfTemplateFiles(e.plugin),p=h&&h.length>0?h[0]:null;if(p&&p instanceof obsidian_module.TFile){const{appState:t}=await e.getSceneFromFile(p);t&&(e.style.fontFamily=t.currentItemFontFamily,e.style.fontSize=t.currentItemFontSize)}const u=await e.create({filename:n,foldername:i,onNewPane:!0,frontmatterKeys:{"excalidraw-mask":!0,"excalidraw-export-dark":!1,"excalidraw-export-padding":0,"excalidraw-export-transparent":!0,...c?{cssclasses:"excalidraw-cropped-pdfpage"}:{}}});let m=r.getAbstractFileByPath(u),f=0;for(;(!m||!e.isExcalidrawFile(m))&&f<50;)await sleep(100),m=r.getAbstractFileByPath(u),f++;if(m&&m instanceof obsidian_module.TFile)return m;new obsidian_module.Notice("File not found. NewExcalidraw Drawing is taking too long to create. Please try again.")};function isNothing(e){return null==e}function isObject(e){return"object"==typeof e&&null!==e}function toArray(e){return Array.isArray(e)?e:isNothing(e)?[]:[e]}function extend(e,t){var a,i,n,r;if(t)for(a=0,i=(r=Object.keys(t)).length;ao&&(t=i-o+(r=" ... ").length),a-i>o&&(a=i+o-(s=" ...").length),{str:r+e.slice(t,a).replace(/\t/g,"→")+s,pos:i-t+r.length}}function padStart(e,t){return common.repeat(" ",t-e.length)+e}function makeSnippet(e,t){if(t=Object.create(t||null),!e.buffer)return null;t.maxLength||(t.maxLength=79),"number"!=typeof t.indent&&(t.indent=1),"number"!=typeof t.linesBefore&&(t.linesBefore=3),"number"!=typeof t.linesAfter&&(t.linesAfter=2);for(var a,i=/\r?\n|\r|\0/g,n=[0],r=[],s=-1;a=i.exec(e.buffer);)r.push(a.index),n.push(a.index+a[0].length),e.position<=a.index&&s<0&&(s=n.length-2);s<0&&(s=n.length-1);var o,l,c="",d=Math.min(e.line+t.linesAfter,r.length).toString().length,h=t.maxLength-(t.indent+d+3);for(o=1;o<=t.linesBefore&&!(s-o<0);o++)l=getLine(e.buffer,n[s-o],r[s-o],e.position-(n[s]-n[s-o]),h),c=common.repeat(" ",t.indent)+padStart((e.line-o+1).toString(),d)+" | "+l.str+"\n"+c;for(l=getLine(e.buffer,n[s],r[s],e.position,h),c+=common.repeat(" ",t.indent)+padStart((e.line+1).toString(),d)+" | "+l.str+"\n",c+=common.repeat("-",t.indent+d+3+l.pos)+"^\n",o=1;o<=t.linesAfter&&!(s+o>=r.length);o++)l=getLine(e.buffer,n[s+o],r[s+o],e.position-(n[s]-n[s+o]),h),c+=common.repeat(" ",t.indent)+padStart((e.line+o+1).toString(),d)+" | "+l.str+"\n";return c.replace(/\n$/,"")}var snippet=makeSnippet,TYPE_CONSTRUCTOR_OPTIONS=["kind","multi","resolve","construct","instanceOf","predicate","represent","representName","defaultStyle","styleAliases"],YAML_NODE_KINDS=["scalar","sequence","mapping"];function compileStyleAliases(e){var t={};return null!==e&&Object.keys(e).forEach((function(a){e[a].forEach((function(e){t[String(e)]=a}))})),t}function Type$1(e,t){if(t=t||{},Object.keys(t).forEach((function(t){if(-1===TYPE_CONSTRUCTOR_OPTIONS.indexOf(t))throw new exception('Unknown option "'+t+'" is met in definition of "'+e+'" YAML type.')})),this.options=t,this.tag=e,this.kind=t.kind||null,this.resolve=t.resolve||function(){return!0},this.construct=t.construct||function(e){return e},this.instanceOf=t.instanceOf||null,this.predicate=t.predicate||null,this.represent=t.represent||null,this.representName=t.representName||null,this.defaultStyle=t.defaultStyle||null,this.multi=t.multi||!1,this.styleAliases=compileStyleAliases(t.styleAliases||null),-1===YAML_NODE_KINDS.indexOf(this.kind))throw new exception('Unknown kind "'+this.kind+'" is specified for "'+e+'" YAML type.')}var type=Type$1;function compileList(e,t){var a=[];return e[t].forEach((function(e){var t=a.length;a.forEach((function(a,i){a.tag===e.tag&&a.kind===e.kind&&a.multi===e.multi&&(t=i)})),a[t]=e})),a}function compileMap(){var e,t,a={scalar:{},sequence:{},mapping:{},fallback:{},multi:{scalar:[],sequence:[],mapping:[],fallback:[]}};function i(e){e.multi?(a.multi[e.kind].push(e),a.multi.fallback.push(e)):a[e.kind][e.tag]=a.fallback[e.tag]=e}for(e=0,t=arguments.length;e=0?"0b"+e.toString(2):"-0b"+e.toString(2).slice(1)},octal:function(e){return e>=0?"0o"+e.toString(8):"-0o"+e.toString(8).slice(1)},decimal:function(e){return e.toString(10)},hexadecimal:function(e){return e>=0?"0x"+e.toString(16).toUpperCase():"-0x"+e.toString(16).toUpperCase().slice(1)}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}}),YAML_FLOAT_PATTERN=new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");function resolveYamlFloat(e){return null!==e&&!(!YAML_FLOAT_PATTERN.test(e)||"_"===e[e.length-1])}function constructYamlFloat(e){var t,a;return a="-"===(t=e.replace(/_/g,"").toLowerCase())[0]?-1:1,"+-".indexOf(t[0])>=0&&(t=t.slice(1)),".inf"===t?1===a?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:".nan"===t?NaN:a*parseFloat(t,10)}var SCIENTIFIC_WITHOUT_DOT=/^[-+]?[0-9]+e/;function representYamlFloat(e,t){var a;if(isNaN(e))switch(t){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===e)switch(t){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===e)switch(t){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(common.isNegativeZero(e))return"-0.0";return a=e.toString(10),SCIENTIFIC_WITHOUT_DOT.test(a)?a.replace("e",".e"):a}function isFloat(e){return"[object Number]"===Object.prototype.toString.call(e)&&(e%1!=0||common.isNegativeZero(e))}var float=new type("tag:yaml.org,2002:float",{kind:"scalar",resolve:resolveYamlFloat,construct:constructYamlFloat,predicate:isFloat,represent:representYamlFloat,defaultStyle:"lowercase"}),json=failsafe.extend({implicit:[_null,bool,int,float]}),core=json,YAML_DATE_REGEXP=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),YAML_TIMESTAMP_REGEXP=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");function resolveYamlTimestamp(e){return null!==e&&(null!==YAML_DATE_REGEXP.exec(e)||null!==YAML_TIMESTAMP_REGEXP.exec(e))}function constructYamlTimestamp(e){var t,a,i,n,r,s,o,l,c=0,d=null;if(null===(t=YAML_DATE_REGEXP.exec(e))&&(t=YAML_TIMESTAMP_REGEXP.exec(e)),null===t)throw new Error("Date resolve error");if(a=+t[1],i=+t[2]-1,n=+t[3],!t[4])return new Date(Date.UTC(a,i,n));if(r=+t[4],s=+t[5],o=+t[6],t[7]){for(c=t[7].slice(0,3);c.length<3;)c+="0";c=+c}return t[9]&&(d=6e4*(60*+t[10]+ +(t[11]||0)),"-"===t[9]&&(d=-d)),l=new Date(Date.UTC(a,i,n,r,s,o,c)),d&&l.setTime(l.getTime()-d),l}function representYamlTimestamp(e){return e.toISOString()}var timestamp=new type("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:resolveYamlTimestamp,construct:constructYamlTimestamp,instanceOf:Date,represent:representYamlTimestamp});function resolveYamlMerge(e){return"<<"===e||null===e}var merge=new type("tag:yaml.org,2002:merge",{kind:"scalar",resolve:resolveYamlMerge}),BASE64_MAP="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r";function resolveYamlBinary(e){if(null===e)return!1;var t,a,i=0,n=e.length,r=BASE64_MAP;for(a=0;a64)){if(t<0)return!1;i+=6}return i%8==0}function constructYamlBinary(e){var t,a,i=e.replace(/[\r\n=]/g,""),n=i.length,r=BASE64_MAP,s=0,o=[];for(t=0;t>16&255),o.push(s>>8&255),o.push(255&s)),s=s<<6|r.indexOf(i.charAt(t));return 0==(a=n%4*6)?(o.push(s>>16&255),o.push(s>>8&255),o.push(255&s)):18===a?(o.push(s>>10&255),o.push(s>>2&255)):12===a&&o.push(s>>4&255),new Uint8Array(o)}function representYamlBinary(e){var t,a,i="",n=0,r=e.length,s=BASE64_MAP;for(t=0;t>18&63],i+=s[n>>12&63],i+=s[n>>6&63],i+=s[63&n]),n=(n<<8)+e[t];return 0==(a=r%3)?(i+=s[n>>18&63],i+=s[n>>12&63],i+=s[n>>6&63],i+=s[63&n]):2===a?(i+=s[n>>10&63],i+=s[n>>4&63],i+=s[n<<2&63],i+=s[64]):1===a&&(i+=s[n>>2&63],i+=s[n<<4&63],i+=s[64],i+=s[64]),i}function isBinary(e){return"[object Uint8Array]"===Object.prototype.toString.call(e)}var binary=new type("tag:yaml.org,2002:binary",{kind:"scalar",resolve:resolveYamlBinary,construct:constructYamlBinary,predicate:isBinary,represent:representYamlBinary}),_hasOwnProperty$3=Object.prototype.hasOwnProperty,_toString$2=Object.prototype.toString;function resolveYamlOmap(e){if(null===e)return!0;var t,a,i,n,r,s=[],o=e;for(t=0,a=o.length;t>10),56320+(e-65536&1023))}for(var simpleEscapeCheck=new Array(256),simpleEscapeMap=new Array(256),i$b=0;i$b<256;i$b++)simpleEscapeCheck[i$b]=simpleEscapeSequence(i$b)?1:0,simpleEscapeMap[i$b]=simpleEscapeSequence(i$b);function State$1(e,t){this.input=e,this.filename=t.filename||null,this.schema=t.schema||_default,this.onWarning=t.onWarning||null,this.legacy=t.legacy||!1,this.json=t.json||!1,this.listener=t.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=e.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.firstTabInLine=-1,this.documents=[]}function generateError(e,t){var a={name:e.filename,buffer:e.input.slice(0,-1),position:e.position,line:e.line,column:e.position-e.lineStart};return a.snippet=snippet(a),new exception(t,a)}function throwError(e,t){throw generateError(e,t)}function throwWarning(e,t){e.onWarning&&e.onWarning.call(null,generateError(e,t))}var directiveHandlers={YAML:function(e,t,a){var i,n,r;null!==e.version&&throwError(e,"duplication of %YAML directive"),1!==a.length&&throwError(e,"YAML directive accepts exactly one argument"),null===(i=/^([0-9]+)\.([0-9]+)$/.exec(a[0]))&&throwError(e,"ill-formed argument of the YAML directive"),n=parseInt(i[1],10),r=parseInt(i[2],10),1!==n&&throwError(e,"unacceptable YAML version of the document"),e.version=a[0],e.checkLineBreaks=r<2,1!==r&&2!==r&&throwWarning(e,"unsupported YAML version of the document")},TAG:function(e,t,a){var i,n;2!==a.length&&throwError(e,"TAG directive accepts exactly two arguments"),i=a[0],n=a[1],PATTERN_TAG_HANDLE.test(i)||throwError(e,"ill-formed tag handle (first argument) of the TAG directive"),_hasOwnProperty$1.call(e.tagMap,i)&&throwError(e,'there is a previously declared suffix for "'+i+'" tag handle'),PATTERN_TAG_URI.test(n)||throwError(e,"ill-formed tag prefix (second argument) of the TAG directive");try{n=decodeURIComponent(n)}catch(t){throwError(e,"tag prefix is malformed: "+n)}e.tagMap[i]=n}};function captureSegment(e,t,a,i){var n,r,s,o;if(t1&&(e.result+=common.repeat("\n",t-1))}function readPlainScalar(e,t,a){var i,n,r,s,o,l,c,d,h=e.kind,p=e.result;if(is_WS_OR_EOL(d=e.input.charCodeAt(e.position))||is_FLOW_INDICATOR(d)||35===d||38===d||42===d||33===d||124===d||62===d||39===d||34===d||37===d||64===d||96===d)return!1;if((63===d||45===d)&&(is_WS_OR_EOL(i=e.input.charCodeAt(e.position+1))||a&&is_FLOW_INDICATOR(i)))return!1;for(e.kind="scalar",e.result="",n=r=e.position,s=!1;0!==d;){if(58===d){if(is_WS_OR_EOL(i=e.input.charCodeAt(e.position+1))||a&&is_FLOW_INDICATOR(i))break}else if(35===d){if(is_WS_OR_EOL(e.input.charCodeAt(e.position-1)))break}else{if(e.position===e.lineStart&&testDocumentSeparator(e)||a&&is_FLOW_INDICATOR(d))break;if(is_EOL(d)){if(o=e.line,l=e.lineStart,c=e.lineIndent,skipSeparationSpace(e,!1,-1),e.lineIndent>=t){s=!0,d=e.input.charCodeAt(e.position);continue}e.position=r,e.line=o,e.lineStart=l,e.lineIndent=c;break}}s&&(captureSegment(e,n,r,!1),writeFoldedLines(e,e.line-o),n=r=e.position,s=!1),is_WHITE_SPACE(d)||(r=e.position+1),d=e.input.charCodeAt(++e.position)}return captureSegment(e,n,r,!1),!!e.result||(e.kind=h,e.result=p,!1)}function readSingleQuotedScalar(e,t){var a,i,n;if(39!==(a=e.input.charCodeAt(e.position)))return!1;for(e.kind="scalar",e.result="",e.position++,i=n=e.position;0!==(a=e.input.charCodeAt(e.position));)if(39===a){if(captureSegment(e,i,e.position,!0),39!==(a=e.input.charCodeAt(++e.position)))return!0;i=e.position,e.position++,n=e.position}else is_EOL(a)?(captureSegment(e,i,n,!0),writeFoldedLines(e,skipSeparationSpace(e,!1,t)),i=n=e.position):e.position===e.lineStart&&testDocumentSeparator(e)?throwError(e,"unexpected end of the document within a single quoted scalar"):(e.position++,n=e.position);throwError(e,"unexpected end of the stream within a single quoted scalar")}function readDoubleQuotedScalar(e,t){var a,i,n,r,s,o;if(34!==(o=e.input.charCodeAt(e.position)))return!1;for(e.kind="scalar",e.result="",e.position++,a=i=e.position;0!==(o=e.input.charCodeAt(e.position));){if(34===o)return captureSegment(e,a,e.position,!0),e.position++,!0;if(92===o){if(captureSegment(e,a,e.position,!0),is_EOL(o=e.input.charCodeAt(++e.position)))skipSeparationSpace(e,!1,t);else if(o<256&&simpleEscapeCheck[o])e.result+=simpleEscapeMap[o],e.position++;else if((s=escapedHexLen(o))>0){for(n=s,r=0;n>0;n--)(s=fromHexCode(o=e.input.charCodeAt(++e.position)))>=0?r=(r<<4)+s:throwError(e,"expected hexadecimal character");e.result+=charFromCodepoint(r),e.position++}else throwError(e,"unknown escape sequence");a=i=e.position}else is_EOL(o)?(captureSegment(e,a,i,!0),writeFoldedLines(e,skipSeparationSpace(e,!1,t)),a=i=e.position):e.position===e.lineStart&&testDocumentSeparator(e)?throwError(e,"unexpected end of the document within a double quoted scalar"):(e.position++,i=e.position)}throwError(e,"unexpected end of the stream within a double quoted scalar")}function readFlowCollection(e,t){var a,i,n,r,s,o,l,c,d,h,p,u,m=!0,f=e.tag,g=e.anchor,U=Object.create(null);if(91===(u=e.input.charCodeAt(e.position)))s=93,c=!1,r=[];else{if(123!==u)return!1;s=125,c=!0,r={}}for(null!==e.anchor&&(e.anchorMap[e.anchor]=r),u=e.input.charCodeAt(++e.position);0!==u;){if(skipSeparationSpace(e,!0,t),(u=e.input.charCodeAt(e.position))===s)return e.position++,e.tag=f,e.anchor=g,e.kind=c?"mapping":"sequence",e.result=r,!0;m?44===u&&throwError(e,"expected the node content, but found ','"):throwError(e,"missed comma between flow collection entries"),p=null,o=l=!1,63===u&&is_WS_OR_EOL(e.input.charCodeAt(e.position+1))&&(o=l=!0,e.position++,skipSeparationSpace(e,!0,t)),a=e.line,i=e.lineStart,n=e.position,composeNode(e,t,CONTEXT_FLOW_IN,!1,!0),h=e.tag,d=e.result,skipSeparationSpace(e,!0,t),u=e.input.charCodeAt(e.position),!l&&e.line!==a||58!==u||(o=!0,u=e.input.charCodeAt(++e.position),skipSeparationSpace(e,!0,t),composeNode(e,t,CONTEXT_FLOW_IN,!1,!0),p=e.result),c?storeMappingPair(e,r,U,h,d,p,a,i,n):o?r.push(storeMappingPair(e,null,U,h,d,p,a,i,n)):r.push(d),skipSeparationSpace(e,!0,t),44===(u=e.input.charCodeAt(e.position))?(m=!0,u=e.input.charCodeAt(++e.position)):m=!1}throwError(e,"unexpected end of the stream within a flow collection")}function readBlockScalar(e,t){var a,i,n,r,s=CHOMPING_CLIP,o=!1,l=!1,c=t,d=0,h=!1;if(124===(r=e.input.charCodeAt(e.position)))i=!1;else{if(62!==r)return!1;i=!0}for(e.kind="scalar",e.result="";0!==r;)if(43===(r=e.input.charCodeAt(++e.position))||45===r)CHOMPING_CLIP===s?s=43===r?CHOMPING_KEEP:CHOMPING_STRIP:throwError(e,"repeat of a chomping mode identifier");else{if(!((n=fromDecimalCode(r))>=0))break;0===n?throwError(e,"bad explicit indentation width of a block scalar; it cannot be less than one"):l?throwError(e,"repeat of an indentation width identifier"):(c=t+n-1,l=!0)}if(is_WHITE_SPACE(r)){do{r=e.input.charCodeAt(++e.position)}while(is_WHITE_SPACE(r));if(35===r)do{r=e.input.charCodeAt(++e.position)}while(!is_EOL(r)&&0!==r)}for(;0!==r;){for(readLineBreak(e),e.lineIndent=0,r=e.input.charCodeAt(e.position);(!l||e.lineIndentc&&(c=e.lineIndent),is_EOL(r))d++;else{if(e.lineIndentt)&&0!==i)throwError(e,"bad indentation of a sequence entry");else if(e.lineIndentt)&&(U&&(s=e.line,o=e.lineStart,l=e.position),composeNode(e,t,CONTEXT_BLOCK_OUT,!0,n)&&(U?f=e.result:g=e.result),U||(storeMappingPair(e,p,u,m,f,g,s,o,l),m=f=g=null),skipSeparationSpace(e,!0,-1),c=e.input.charCodeAt(e.position)),(e.line===r||e.lineIndent>t)&&0!==c)throwError(e,"bad indentation of a mapping entry");else if(e.lineIndentt?m=1:e.lineIndent===t?m=0:e.lineIndentt?m=1:e.lineIndent===t?m=0:e.lineIndent tag; it should be "scalar", not "'+e.kind+'"'),l=0,c=e.implicitTypes.length;l"),null!==e.result&&h.kind!==e.kind&&throwError(e,"unacceptable node kind for !<"+e.tag+'> tag; it should be "'+h.kind+'", not "'+e.kind+'"'),h.resolve(e.result,e.tag)?(e.result=h.construct(e.result,e.tag),null!==e.anchor&&(e.anchorMap[e.anchor]=e.result)):throwError(e,"cannot resolve a node with !<"+e.tag+"> explicit tag")}return null!==e.listener&&e.listener("close",e),null!==e.tag||null!==e.anchor||g}function readDocument(e){var t,a,i,n,r=e.position,s=!1;for(e.version=null,e.checkLineBreaks=e.legacy,e.tagMap=Object.create(null),e.anchorMap=Object.create(null);0!==(n=e.input.charCodeAt(e.position))&&(skipSeparationSpace(e,!0,-1),n=e.input.charCodeAt(e.position),!(e.lineIndent>0||37!==n));){for(s=!0,n=e.input.charCodeAt(++e.position),t=e.position;0!==n&&!is_WS_OR_EOL(n);)n=e.input.charCodeAt(++e.position);for(i=[],(a=e.input.slice(t,e.position)).length<1&&throwError(e,"directive name must not be less than one character in length");0!==n;){for(;is_WHITE_SPACE(n);)n=e.input.charCodeAt(++e.position);if(35===n){do{n=e.input.charCodeAt(++e.position)}while(0!==n&&!is_EOL(n));break}if(is_EOL(n))break;for(t=e.position;0!==n&&!is_WS_OR_EOL(n);)n=e.input.charCodeAt(++e.position);i.push(e.input.slice(t,e.position))}0!==n&&readLineBreak(e),_hasOwnProperty$1.call(directiveHandlers,a)?directiveHandlers[a](e,a,i):throwWarning(e,'unknown document directive "'+a+'"')}skipSeparationSpace(e,!0,-1),0===e.lineIndent&&45===e.input.charCodeAt(e.position)&&45===e.input.charCodeAt(e.position+1)&&45===e.input.charCodeAt(e.position+2)?(e.position+=3,skipSeparationSpace(e,!0,-1)):s&&throwError(e,"directives end mark is expected"),composeNode(e,e.lineIndent-1,CONTEXT_BLOCK_OUT,!1,!0),skipSeparationSpace(e,!0,-1),e.checkLineBreaks&&PATTERN_NON_ASCII_LINE_BREAKS.test(e.input.slice(r,e.position))&&throwWarning(e,"non-ASCII line breaks are interpreted as content"),e.documents.push(e.result),e.position===e.lineStart&&testDocumentSeparator(e)?46===e.input.charCodeAt(e.position)&&(e.position+=3,skipSeparationSpace(e,!0,-1)):e.position=55296&&i<=56319&&t+1=56320&&a<=57343?1024*(i-55296)+a-56320+65536:i}function needIndentIndicator(e){return/^\n* /.test(e)}var STYLE_PLAIN=1,STYLE_SINGLE=2,STYLE_LITERAL=3,STYLE_FOLDED=4,STYLE_DOUBLE=5;function chooseScalarStyle(e,t,a,i,n,r,s,o){var l,c=0,d=null,h=!1,p=!1,u=-1!==i,m=-1,f=isPlainSafeFirst(codePointAt(e,0))&&isPlainSafeLast(codePointAt(e,e.length-1));if(t||s)for(l=0;l=65536?l+=2:l++){if(!isPrintable(c=codePointAt(e,l)))return STYLE_DOUBLE;f=f&&isPlainSafe(c,d,o),d=c}else{for(l=0;l=65536?l+=2:l++){if((c=codePointAt(e,l))===CHAR_LINE_FEED)h=!0,u&&(p=p||l-m-1>i&&" "!==e[m+1],m=l);else if(!isPrintable(c))return STYLE_DOUBLE;f=f&&isPlainSafe(c,d,o),d=c}p=p||u&&l-m-1>i&&" "!==e[m+1]}return h||p?a>9&&needIndentIndicator(e)?STYLE_DOUBLE:s?r===QUOTING_TYPE_DOUBLE?STYLE_DOUBLE:STYLE_SINGLE:p?STYLE_FOLDED:STYLE_LITERAL:!f||s||n(e)?r===QUOTING_TYPE_DOUBLE?STYLE_DOUBLE:STYLE_SINGLE:STYLE_PLAIN}function writeScalar(e,t,a,i,n){e.dump=function(){if(0===t.length)return e.quotingType===QUOTING_TYPE_DOUBLE?'""':"''";if(!e.noCompatMode&&(-1!==DEPRECATED_BOOLEANS_SYNTAX.indexOf(t)||DEPRECATED_BASE60_SYNTAX.test(t)))return e.quotingType===QUOTING_TYPE_DOUBLE?'"'+t+'"':"'"+t+"'";var r=e.indent*Math.max(1,a),s=-1===e.lineWidth?-1:Math.max(Math.min(e.lineWidth,40),e.lineWidth-r),o=i||e.flowLevel>-1&&a>=e.flowLevel;switch(chooseScalarStyle(t,o,e.indent,s,(function(t){return testImplicitResolving(e,t)}),e.quotingType,e.forceQuotes&&!i,n)){case STYLE_PLAIN:return t;case STYLE_SINGLE:return"'"+t.replace(/'/g,"''")+"'";case STYLE_LITERAL:return"|"+blockHeader(t,e.indent)+dropEndingNewline(indentString(t,r));case STYLE_FOLDED:return">"+blockHeader(t,e.indent)+dropEndingNewline(indentString(foldString(t,s),r));case STYLE_DOUBLE:return'"'+escapeString(t)+'"';default:throw new exception("impossible error: invalid scalar style")}}()}function blockHeader(e,t){var a=needIndentIndicator(e)?String(t):"",i="\n"===e[e.length-1];return a+(!i||"\n"!==e[e.length-2]&&"\n"!==e?i?"":"-":"+")+"\n"}function dropEndingNewline(e){return"\n"===e[e.length-1]?e.slice(0,-1):e}function foldString(e,t){for(var a,i,n,r=/(\n+)([^\n]*)/g,s=(a=-1!==(a=e.indexOf("\n"))?a:e.length,r.lastIndex=a,foldLine(e.slice(0,a),t)),o="\n"===e[0]||" "===e[0];n=r.exec(e);){var l=n[1],c=n[2];i=" "===c[0],s+=l+(o||i||""===c?"":"\n")+foldLine(c,t),o=i}return s}function foldLine(e,t){if(""===e||" "===e[0])return e;for(var a,i,n=/ [^ ]/g,r=0,s=0,o=0,l="";a=n.exec(e);)(o=a.index)-r>t&&(i=s>r?s:o,l+="\n"+e.slice(r,i),r=i+1),s=o;return l+="\n",e.length-r>t&&s>r?l+=e.slice(r,s)+"\n"+e.slice(s+1):l+=e.slice(r),l.slice(1)}function escapeString(e){for(var t,a="",i=0,n=0;n=65536?n+=2:n++)i=codePointAt(e,n),!(t=ESCAPE_SEQUENCES[i])&&isPrintable(i)?(a+=e[n],i>=65536&&(a+=e[n+1])):a+=t||encodeHex(i);return a}function writeFlowSequence(e,t,a){var i,n,r,s="",o=e.tag;for(i=0,n=a.length;i1024&&(o+="? "),o+=e.dump+(e.condenseFlow?'"':"")+":"+(e.condenseFlow?"":" "),writeNode(e,t,s,!1,!1)&&(l+=o+=e.dump));e.tag=c,e.dump="{"+l+"}"}function writeBlockMapping(e,t,a,i){var n,r,s,o,l,c,d="",h=e.tag,p=Object.keys(a);if(!0===e.sortKeys)p.sort();else if("function"==typeof e.sortKeys)p.sort(e.sortKeys);else if(e.sortKeys)throw new exception("sortKeys must be a boolean or a function");for(n=0,r=p.length;n1024)&&(e.dump&&CHAR_LINE_FEED===e.dump.charCodeAt(0)?c+="?":c+="? "),c+=e.dump,l&&(c+=generateNextLine(e,t)),writeNode(e,t+1,o,!0,l)&&(e.dump&&CHAR_LINE_FEED===e.dump.charCodeAt(0)?c+=":":c+=": ",d+=c+=e.dump));e.tag=h,e.dump=d||"{}"}function detectType(e,t,a){var i,n,r,s,o,l;for(r=0,s=(n=a?e.explicitTypes:e.implicitTypes).length;r tag resolver accepts not "'+l+'" style');i=o.represent[l](t,l)}e.dump=i}return!0}return!1}function writeNode(e,t,a,i,n,r,s){e.tag=null,e.dump=a,detectType(e,a,!1)||detectType(e,a,!0);var o,l=_toString.call(e.dump),c=i;i&&(i=e.flowLevel<0||e.flowLevel>t);var d,h,p="[object Object]"===l||"[object Array]"===l;if(p&&(h=-1!==(d=e.duplicates.indexOf(a))),(null!==e.tag&&"?"!==e.tag||h||2!==e.indent&&t>0)&&(n=!1),h&&e.usedDuplicates[d])e.dump="*ref_"+d;else{if(p&&h&&!e.usedDuplicates[d]&&(e.usedDuplicates[d]=!0),"[object Object]"===l)i&&0!==Object.keys(e.dump).length?(writeBlockMapping(e,t,e.dump,n),h&&(e.dump="&ref_"+d+e.dump)):(writeFlowMapping(e,t,e.dump),h&&(e.dump="&ref_"+d+" "+e.dump));else if("[object Array]"===l)i&&0!==e.dump.length?(e.noArrayIndent&&!s&&t>0?writeBlockSequence(e,t-1,e.dump,n):writeBlockSequence(e,t,e.dump,n),h&&(e.dump="&ref_"+d+e.dump)):(writeFlowSequence(e,t,e.dump),h&&(e.dump="&ref_"+d+" "+e.dump));else{if("[object String]"!==l){if("[object Undefined]"===l)return!1;if(e.skipInvalid)return!1;throw new exception("unacceptable kind of an object to dump "+l)}"?"!==e.tag&&writeScalar(e,e.dump,t,r,c)}null!==e.tag&&"?"!==e.tag&&(o=encodeURI("!"===e.tag[0]?e.tag.slice(1):e.tag).replace(/!/g,"%21"),o="!"===e.tag[0]?"!"+o:"tag:yaml.org,2002:"===o.slice(0,18)?"!!"+o.slice(18):"!<"+o+">",e.dump=o+" "+e.dump)}return!0}function getDuplicateReferences(e,t){var a,i,n=[],r=[];for(inspectNode(e,n,r),a=0,i=r.length;a{console.log(t,...a)};class CustomMutationObserver{originalCallback;observer;name;constructor(e,t){this.originalCallback=e,this.observer=null,this.name=t}observe(e,t){this.observer=new MutationObserver((async(e,t)=>{const a=performance.now();await this.originalCallback(e,t);const i=performance.now()-a;i>durationTreshold&&console.log(`Excalidraw ${this.name} MutationObserver callback took ${i}ms to execute`,t)})),this.observer.observe(e,t)}disconnect(){this.observer&&(this.observer.disconnect(),this.observer=null)}}const getParentOfClass=(e,t)=>{let a=e.parentElement;for(;a&&!a.classList.contains(t)&&!(a instanceof window.HTMLBodyElement);)a=a.parentElement;return a?.classList?.contains(t)?a:null};function getExcalidrawViews(e){const t=e.workspace.getLeavesOfType(VIEW_TYPE_EXCALIDRAW).filter((e=>e.view instanceof ExcalidrawView));return t.map((e=>e.view))}const getLeaf=(e,t,a)=>{switch(linkClickModifierType(a)){case"active-pane":return t;case"new-tab":default:return(()=>{if(!e.settings.openInMainWorkspace)return e.app.workspace.getLeaf("tab");const[a,i]=getLeafLoc(t);return"main"===a?e.app.workspace.getLeaf("tab"):getNewOrAdjacentLeaf(e,t)})();case"new-pane":return getNewOrAdjacentLeaf(e,t);case"popout-window":return e.app.workspace.openPopoutLeaf()}},getLeafLoc=e=>{const t=e.id,a=EXCALIDRAW_PLUGIN.app.workspace.getLayout(),i=e=>e.children.filter((e=>"leaf"!==e.type)).map((e=>i(e))).flat().concat(e.children.filter((e=>"leaf"===e.type)).map((e=>e.id))),n=i(a.main);return[a.main&&n.contains(t)?"main":a.floating&&i(a.floating).contains(t)?"popout":a.left&&i(a.left).contains(t)?"left":a.right&&i(a.right).contains(t)?"right":"hover",n]},getNewOrAdjacentLeaf=(e,t)=>{const[a,i]=getLeafLoc(t),n=a=>{let n=e.app.workspace.getMostRecentLeaf();return n&&n!==t&&n.view?.containerEl.ownerDocument===document||(n=null,i.forEach((i=>{const r=e.app.workspace.getLeafById(i);n||!r.view?.navigation||t===r||a&&r?.parent===t?.parent||(n=r)}))),n};if(e.settings.openInMainWorkspace||["main","left","right"].contains(a)){if(!e.settings.openInAdjacentPane){if("main"===a)return e.app.workspace.createLeafBySplit(t);const i=n();return i?"empty"===i.view.getViewType()?i:e.app.workspace.createLeafBySplit(i):e.app.workspace.getLeaf(!0)}return n(!0)??e.app.workspace.createLeafBySplit(t)}if(!e.settings.openInAdjacentPane)return e.app.workspace.createLeafBySplit(t);if("hover"===a){const a=new Set;return e.app.workspace.iterateAllLeaves((e=>{e!==t&&t.containerEl.parentElement===e.containerEl.parentElement&&a.add(e)})),0===a.size?e.app.workspace.createLeafBySplit(t):Array.from(a)[0]}if("popout"===a){const a=new Set;return e.app.workspace.iterateAllLeaves((e=>{e!==t&&e.view.navigation&&e.view.containerEl.ownerDocument===t.view.containerEl.ownerDocument&&a.add(e)})),0===a.size?e.app.workspace.createLeafBySplit(t):Array.from(a)[0]}return e.app.workspace.createLeafBySplit(t)},getAttachmentsFolderAndFilePath=async(e,t,a)=>{let i=e.vault.getConfig("attachmentFolderPath");if(i&&i.startsWith("./")){const e=`${splitFolderAndFilename(t).folderpath}/`;i=obsidian_module.normalizePath(e+i.substring(2))}return i&&"/"!==i||(i=""),await checkAndCreateFolder(i),{folder:i,filepath:obsidian_module.normalizePath(""===i?a:`${i}/${a}`)}},isObsidianThemeDark=()=>document.body.classList.contains("theme-dark"),getContainerForDocument=e=>{if(e!==document&&EXCALIDRAW_PLUGIN.app.workspace.floatingSplit)for(const t of EXCALIDRAW_PLUGIN.app.workspace.floatingSplit.children)if(t.doc===e)return t;return EXCALIDRAW_PLUGIN.app.workspace.rootSplit},cleanSectionHeading=e=>e?e.replace(REG_SECTION_REF_CLEAN,"").replace(/\s+/g," ").trim():e,cleanBlockRef=e=>e?e.replace(REG_BLOCK_REF_CLEAN,"").replace(/\s+/g," ").trim():e,getAllWindowDocuments=e=>{const t=new Set;return t.add(document),e.workspace.iterateAllLeaves((e=>{e.view.containerEl.ownerDocument!==document&&t.add(e.view.containerEl.ownerDocument)})),Array.from(t)},obsidianPDFQuoteWithRef=e=>{const t=/^> (.*)\n\n\[\[([^|\]]*)\|[^\]]*]]$/gm.exec(e);return t?{quote:t[1],link:t[2]}:null},extractSVGPNGFileName=e=>{const t=e.match(/\[\[([^\]|#^]+\.(?:svg|png))(?:[^\]]+)?\]\]|\[[^\]]+\]\(([^\)]+\.(?:svg|png))\)/);return t?t[1]||t[2]:null},getFileCSSClasses=e=>{if(e){const t=window?.ExcalidrawAutomate?.plugin;if(!t)return[];const a=t.app.metadataCache.getFileCache(e);if(!a?.frontmatter)return[];const i=obsidian_module.parseFrontMatterEntry(a.frontmatter,"cssclasses");return Array.isArray(i)?i:"string"==typeof i?Array.from(new Set(i.split(/[, ]+/).filter(Boolean))):[]}return[]},getActivePDFPageNumberFromPDFView=e=>e?.viewer?.child?.pdfViewer?.page,openLeaf=({plugin:e,fnGetLeaf:t,file:a,openState:i})=>{let n=null;if(e.settings.focusOnFileTab&&(e.app.workspace.iterateAllLeaves((t=>{n||t?.view?.file===a&&(e.app.workspace.setActiveLeaf(t,{focus:!0}),n=t)})),n)){if(i){const e=n.openFile(a,i);return{leaf:n,promise:e}}return{leaf:n,promise:Promise.resolve()}}n=t();const r=n.openFile(a,i);return{leaf:n,promise:r}};function mergeMarkdownFiles(e,t){const a=e.indexOf("---",4),i=e.substring(4,a).trim(),n=e.substring(a+3),r=jsYaml.load(i)||{};let s={},o="";if(t.startsWith("---\n")&&t.indexOf("---\n",4)>0){const e=t.indexOf("---\n",4),a=t.substring(4,e).trim();o=t.substring(e+3),s=jsYaml.load(a)||{}}else o=t.trim();const l={...r};for(const e in s)if(Array.isArray(s[e])&&Array.isArray(l[e])){const t=[...new Set([...l[e],...s[e]])];l[e]=t}else l[e]=s[e];return`---\n${jsYaml.dump(l)}---\n${o}\n\n${n.trim()}\n`}const editorInsertText=(e,t)=>{const a=e.getCursor(),i=e.getLine(a.line),n=i.slice(0,a.ch)+t+i.slice(a.ch);e.setLine(a.line,n)},foldExcalidrawSection=e=>{if(!(e&&e instanceof obsidian_module.MarkdownView))return;const t={ed:-1,te:-1,el:-1,ef:-1,d:-1},a=e.currentMode.getFoldInfo()?.folds??[],i=e.editor.lineCount();for(let a=0;a-1&&t.d>-1){const n=[...a,...t.te>-1?[{from:t.te,to:(t.el>-1?t.el:t.ef>-1?t.ef:t.d)-1}]:[],...t.el>-1?[{from:t.el,to:(t.ef>-1?t.ef:t.d)-1}]:[],...t.ef>-1?[{from:t.ef,to:t.d-1}]:[],{from:t.d,to:i-1},{from:t.ed,to:i-1}];e.currentMode.applyFoldInfo({folds:n,lines:i})}};async function setExcalidrawView(e){await e.setViewState({type:VIEW_TYPE_EXCALIDRAW,state:e.view.getState(),popstate:!0})}async function closeLeafView(e){await e.setViewState({type:"empty",state:{}})}function splitFolderAndFilename(e){const t=e.lastIndexOf("/"),a=-1==t?e:e.substring(t+1);return{folderpath:obsidian_module.normalizePath(e.substring(0,t)),filename:a,basename:a.replace(/\.[^/.]+$/,""),extension:a.substring(a.lastIndexOf(".")+1)}}const download=(e,t,a)=>{const i=document.createElement("a");i.setAttribute("href",(e?`${e},`:"")+t),i.setAttribute("download",a),i.style.display="none",document.body.appendChild(i),i.click(),document.body.removeChild(i)};function getIMGFilename(e,t){return`${e.substring(0,e.lastIndexOf("."))}.${t}`}function getNewUniqueFilepath(e,t,a){let i=obsidian_module.normalizePath(`${a}/${t}`),n=e.getAbstractFileByPath(i),r=0;const s=t.endsWith(".excalidraw.md")?".excalidraw.md":t.slice(t.lastIndexOf("."));for(;n;)i=obsidian_module.normalizePath(`${a}/${t.slice(0,t.lastIndexOf(s))}_${r}${s}`),r++,n=e.getAbstractFileByPath(i);return i}function getDrawingFilename(e){return e.drawingFilenamePrefix+(""!==e.drawingFilenameDateTime?window.moment().format(e.drawingFilenameDateTime):"")+(e.compatibilityMode?".excalidraw":e.useExcalidrawExtension?".excalidraw.md":".md")}function getEmbedFilename(e,t){return((t.drawingEmbedPrefixWithFilename?e:"")+t.drawingFilnameEmbedPostfix+(""!==t.drawingFilenameDateTime?window.moment().format(t.drawingFilenameDateTime):"")+(t.compatibilityMode?".excalidraw":t.useExcalidrawExtension?".excalidraw.md":".md")).trim()}async function checkAndCreateFolder(e){const t=EXCALIDRAW_PLUGIN.app.vault;e=obsidian_module.normalizePath(e);const a=t.getAbstractFileByPathInsensitive(e);if(!(a&&a instanceof obsidian_module.TFolder))return a&&a instanceof obsidian_module.TFile&&new obsidian_module.Notice(`The folder cannot be created because it already exists as a file: ${e}.`),await t.createFolder(e)}const getURLImageExtension=e=>{const t=e.split("?")[0];return t.substring(t.lastIndexOf(".")+1)},getMimeType=e=>IMAGE_MIME_TYPES.hasOwnProperty(e)?IMAGE_MIME_TYPES[e]:"md"===e?"image/svg+xml":"application/octet-stream",getFileFromURL=async(e,t,a=URLFETCHTIMEOUT)=>{try{const t=new Promise((e=>setTimeout((()=>e(null)),a))),i=await Promise.race([fetch(e,{mode:"no-cors"}),t]);if(!i)return errorlog({where:getFileFromURL,message:`URL did not load within the timeout period of ${a}ms.\n\nTry force-saving again in a few seconds.\n\n${e}`,url:e}),null;const n=await i.arrayBuffer();return{status:i.status,headers:Object.fromEntries(i.headers.entries()),arrayBuffer:n,json:null,text:null}}catch(e){return null}},getFileFromURLFallback=async(e,t,a=URLFETCHTIMEOUT)=>{try{const t=new Promise((e=>setTimeout((()=>e(null)),a)));return await Promise.race([t,obsidian_module.requestUrl({url:e,throw:!1})])}catch(t){return errorlog({where:getFileFromURLFallback,message:`URL did not load within timeout period of ${a}ms`,url:e}),null}},getDataURLFromURL=async(e,t,a=URLFETCHTIMEOUT)=>{let i=await getFileFromURL(e,t,a);return i&&200===i?.status||(i=await getFileFromURLFallback(e,t,a)),i&&200===i.status?await getDataURL(i.arrayBuffer,t):e},blobToBase64=async e=>{const t=await e.arrayBuffer(),a=new Uint8Array(t);let i="",n=a.byteLength;for(let e=0;e(void 0===window.pdfjsLib&&await obsidian_module.loadPdfJs(),await window.pdfjsLib.getDocument(EXCALIDRAW_PLUGIN.app.vault.getResourcePath(e)).promise),readLocalFileBinary=async e=>DEVICE.isDesktop?new Promise(((t,a)=>{const i=decodeURI(e);app.vault.adapter.fs.readFile(i,((e,i)=>{if(e)a(e);else{const e=i.buffer.slice(i.byteOffset,i.byteOffset+i.byteLength);t(e)}}))})):null,getPathWithoutExtension=e=>e?e.path.substring(0,e.path.lastIndexOf(".")):null;let _VAULT_BASE_URL=null;const VAULT_BASE_URL=()=>_VAULT_BASE_URL||(_VAULT_BASE_URL=DEVICE.isDesktop?EXCALIDRAW_PLUGIN.app.vault.adapter.url.pathToFileURL(EXCALIDRAW_PLUGIN.app.vault.adapter.basePath).toString():"",_VAULT_BASE_URL),getInternalLinkOrFileURLLink=(e,t,a,i)=>{if(!DEVICE.isDesktop)return{link:`[${a??""}](${e})`,isInternal:!1,url:e};const n=t.app.vault,r=n.adapter.url.pathToFileURL(e).toString();if(r.startsWith(VAULT_BASE_URL())){const e=obsidian_module.normalizePath(decodeURIComponent(r.substring(VAULT_BASE_URL().length))),s=n.getAbstractFileByPath(e);if(s&&s instanceof obsidian_module.TFile){const e=t.app.metadataCache.fileToLinktext(s,i?.path,!0);return{link:getLink(t,{embed:!1,path:e,alias:a}),isInternal:!0,file:s}}}return{link:`[${a??""}](${r})`,isInternal:!1,url:r}},getLink=(e,{embed:t=!0,path:a,alias:i},n)=>(void 0!==n?n:e.settings.embedWikiLink)?`${t?"!":""}[[${a}${i?`|${i}`:""}]]`:`${t?"!":""}[${i??""}](${encodeURI(a)})`,getAliasWithSize=(e,t)=>e&&""!==e?`${e}${t?`|${t}`:""}`:t,getCropFileNameAndFolder=async(e,t,a)=>{let i=e.settings.cropPrefix;i&&""!==i.trim()||(i=CROPPED_PREFIX);const n=i+a+".md";if(!e.settings.cropFolder||""===e.settings.cropFolder.trim())return{folderpath:(await getAttachmentsFolderAndFilePath(e.app,t,n)).folder,filename:n};const r=obsidian_module.normalizePath(e.settings.cropFolder);return await checkAndCreateFolder(r),{folderpath:r,filename:n}},getAnnotationFileNameAndFolder=async(e,t,a)=>{let i=e.settings.annotatePrefix;i&&""!==i.trim()||(i=ANNOTATED_PREFIX);const n=i+a+".md";if(!e.settings.annotateFolder||""===e.settings.annotateFolder.trim())return{folderpath:(await getAttachmentsFolderAndFilePath(e.app,t,n)).folder,filename:n};const r=obsidian_module.normalizePath(e.settings.annotateFolder);return await checkAndCreateFolder(r),{folderpath:r,filename:n}},getListOfTemplateFiles=e=>{const t=obsidian_module.normalizePath(e.settings.templateFilePath),a=e.app.vault.getAbstractFileByPath(t);if(a&&a instanceof obsidian_module.TFolder)return e.app.vault.getFiles().filter((e=>e.path.startsWith(a.path))).filter((t=>e.isExcalidrawFile(t))).sort(((e,t)=>e.path.localeCompare(t.path)));if(a&&a instanceof obsidian_module.TFile)return[a];const i=e.app.metadataCache.getFirstLinkpathDest(t,"");return i?[i]:null},fileShouldDefaultAsExcalidraw=(e,t)=>{if(!e)return!1;const a=t.metadataCache.getCache(e);return a?.frontmatter&&a.frontmatter[FRONTMATTER_KEYS.plugin.name]&&!Boolean(a.frontmatter[FRONTMATTER_KEYS["open-as-markdown"].name])},getExcalidrawEmbeddedFilesFiletree=(e,t)=>{if(!e||!t.isExcalidrawFile(e))return[];const a=new Set,i=t.app,n=e=>Object.keys(i.metadataCache.resolvedLinks[e.path]).forEach((e=>{const r=i.vault.getAbstractFileByPath(e);if(!(r&&r instanceof obsidian_module.TFile))return;const s=t.isExcalidrawFile(r);"md"===r.extension&&!s||a.has(r)||(a.add(r),s&&n(r))}));return n(e),Array.from(a)},hasExcalidrawEmbeddedImagesTreeChanged=(e,t,a)=>getExcalidrawEmbeddedFilesFiletree(e,a).some((e=>e.stat.mtime>t));async function createOrOverwriteFile(e,t,a){const i=e.vault.getAbstractFileByPath(obsidian_module.normalizePath(t));return a instanceof ArrayBuffer?i&&i instanceof obsidian_module.TFile?(await e.vault.modifyBinary(i,a),i):await e.vault.createBinary(t,a):i&&i instanceof obsidian_module.TFile?(await e.vault.modify(i,a),i):await e.vault.create(t,a)}const useDefaultExcalidrawFrame=e=>!(e.link.startsWith("[")||e.link.startsWith("file:")||e.link.startsWith("data:")),patchMobileView=e=>{if(DEVICE.isDesktop)return;console.log("patching mobile view");const t=getParentOfClass(e.containerEl,"mod-top");t&&(t.hasClass("mod-visible")||t.addClass("mod-visible"))},processLinkText=(e,t)=>{let a=null;if(e.search("#")>-1){const i=getLinkParts(e,t.file);a=`#${i.isBlockRef?"^":""}${i.ref}`,e=i.path}return e.match(REG_LINKINDEX_INVALIDCHARS)?{subpath:a,file:null}:{subpath:a,file:t.app.metadataCache.getFirstLinkpathDest(e,t.file.path)}},generateEmbeddableLink=(e,t)=>e;function setFileToLocalGraph(e,t){let a;e.workspace.iterateAllLeaves((e=>{"localgraph"===e.view?.getViewType()&&(a=e.view)}));try{a&&a.loadFile(t)}catch(e){console.error(e)}}class CropImage{elements;imageEA;maskEA;bbox;constructor(e,t){this.elements=e;const a=getEA();this.imageEA=a;const i=getEA();this.maskEA=i,this.bbox=a.getBoundingBox(e),this.setBoundingEl(a,"transparent"),this.setBoundingEl(i,"white"),e.forEach((e=>{const t=cloneElement(e);"image"!==e.type&&"frame"!==e.type&&(t.opacity=100,i.elementsDict[e.id]=t),"image"===e.type&&(a.elementsDict[e.id]=t)})),Object.values(t).forEach((e=>{a.imagesDict[e.id]=e}))}destroy(){this.imageEA.destroy(),this.maskEA.destroy(),this.imageEA=null,this.maskEA=null,this.elements=null,this.bbox=null}setBoundingEl(e,t){const{topX:a,topY:i,width:n,height:r}=this.bbox;e.style.backgroundColor=t,e.style.strokeColor="transparent",e.style.strokeWidth="0",e.style.strokeStyle="solid",e.style.fillStyle="solid",e.style.roughness=0,e.addRect(a,i,n,r)}getViewBoxAndSize(){const e=this.elements.filter((e=>"frame"===e.type));e.length>1&&new obsidian_module.Notice("Multiple frames are not supported for image cropping. Discarding frames from mask.");const t=this.imageEA.getElements().filter((e=>"image"===e.type)),{x:a,y:i,width:n,height:r}=1===e.length?e[0]:mapToXY(this.imageEA.getBoundingBox(t)),{topX:s,topY:o,width:l,height:c}=this.bbox;return{viewBox:`${a-s} ${i-o} ${n} ${r}`,vbWidth:n,vbHeight:r,width:l,height:c}}async getMaskSVG(){const e=await this.maskEA.createSVG(null,!0,{withBackground:!1,withTheme:!1,isMask:!1},null,null,0),t=e.querySelector("defs"),a=e.querySelector("style"),i=a?a.outerHTML:"";return t.parentElement.removeChild(t),{style:i,mask:e.innerHTML}}async getImage(){const e=this.imageEA.getElements().filter((e=>"image"===e.type&&!1===e.isDeleted)),t=e.some((e=>0!==e.angle)),a=Object.values(this.imageEA.imagesDict);if(!t&&1===e.length&&1===a.length){const{width:t,height:i}=this.bbox;if(e[0].width===t&&e[0].height===i)return a[0].dataURL}return await this.imageEA.createPNGBase64(null,1,{withBackground:!1,withTheme:!1,isMask:!1},null,null,0)}async buildSVG(){if(0===this.imageEA.getElements().filter((e=>"image"===e.type)).length)return void new obsidian_module.Notice("No image found. Cannot crop.");const e=nanoid(),t=nanoid(),{viewBox:a,vbWidth:i,vbHeight:n,width:r,height:s}=this.getViewBoxAndSize(),o=new DOMParser,{style:l,mask:c}=await this.getMaskSVG(),d=`\n\n${l}\n\n${c}\n\n\n\n`;return o.parseFromString(d,"image/svg+xml").firstElementChild}async getCroppedPNG(){app.plugins.plugins["obsidian-excalidraw-plugin"];const e=await this.buildSVG();return new Promise(((t,a)=>{const i=e.outerHTML,n=document.createElement("canvas"),r=n.getContext("2d");if(!r)return void a("Unable to get 2D context");n.width=e.width.baseVal.value,n.height=e.height.baseVal.value;const s=new Image;s.onload=()=>{r.clearRect(0,0,n.width,n.height),r.drawImage(s,0,0),n.toBlob((e=>{e?t(e):a(new Error("Failed to convert to PNG"))}),"image/png",1)},s.src=svgToBase64(i)}))}async getCroppedSVG(){return await this.buildSVG()}}const mapToXY=({topX:e,topY:t,width:a,height:i})=>({x:e,y:t,width:a,height:i});String.prototype.codePointAt||function(){var e=function(){try{var e={},t=Object.defineProperty,a=t(e,e,e)&&t}catch(e){}return a}(),t=function(e){if(null==this)throw TypeError();var t=String(this),a=t.length,i=e?Number(e):0;if(i!=i&&(i=0),!(i<0||i>=a)){var n,r=t.charCodeAt(i);return r>=55296&&r<=56319&&a>i+1&&(n=t.charCodeAt(i+1))>=56320&&n<=57343?1024*(r-55296)+n-56320+65536:r}};e?e(String.prototype,"codePointAt",{value:t,configurable:!0,writable:!0}):String.prototype.codePointAt=t}();var TINF_OK=0,TINF_DATA_ERROR=-3;function Tree(){this.table=new Uint16Array(16),this.trans=new Uint16Array(288)}function Data(e,t){this.source=e,this.sourceIndex=0,this.tag=0,this.bitcount=0,this.dest=t,this.destLen=0,this.ltree=new Tree,this.dtree=new Tree}var sltree=new Tree,sdtree=new Tree,length_bits=new Uint8Array(30),length_base=new Uint16Array(30),dist_bits=new Uint8Array(30),dist_base=new Uint16Array(30),clcidx=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),code_tree=new Tree,lengths=new Uint8Array(320);function tinf_build_bits_base(e,t,a,i){var n,r;for(n=0;n>>=1,t}function tinf_read_bits(e,t,a){if(!t)return a;for(;e.bitcount<24;)e.tag|=e.source[e.sourceIndex++]<>>16-t;return e.tag>>>=t,e.bitcount-=t,i+a}function tinf_decode_symbol(e,t){for(;e.bitcount<24;)e.tag|=e.source[e.sourceIndex++]<>>=1,++n,a+=t.table[n],i-=t.table[n]}while(i>=0);return e.tag=r,e.bitcount-=n,t.trans[a+i]}function tinf_decode_trees(e,t,a){var i,n,r,s,o,l;for(i=tinf_read_bits(e,5,257),n=tinf_read_bits(e,5,1),r=tinf_read_bits(e,4,4),s=0;s<19;++s)lengths[s]=0;for(s=0;s8;)e.sourceIndex--,e.bitcount-=8;if((t=256*(t=e.source[e.sourceIndex+1])+e.source[e.sourceIndex])!==(65535&~(256*e.source[e.sourceIndex+3]+e.source[e.sourceIndex+2])))return TINF_DATA_ERROR;for(e.sourceIndex+=4,a=t;a;--a)e.dest[e.destLen++]=e.source[e.sourceIndex++];return e.bitcount=0,TINF_OK}function tinf_uncompress(e,t){var a,i,n=new Data(e,t);do{switch(a=tinf_getbit(n),tinf_read_bits(n,2,0)){case 0:i=tinf_inflate_uncompressed_block(n);break;case 1:i=tinf_inflate_block_data(n,sltree,sdtree);break;case 2:tinf_decode_trees(n,n.ltree,n.dtree),i=tinf_inflate_block_data(n,n.ltree,n.dtree);break;default:i=TINF_DATA_ERROR}if(i!==TINF_OK)throw new Error("Data error")}while(!a);return n.destLenthis.x2&&(this.x2=e)),"number"==typeof t&&((isNaN(this.y1)||isNaN(this.y2))&&(this.y1=t,this.y2=t),tthis.y2&&(this.y2=t))},BoundingBox.prototype.addX=function(e){this.addPoint(e,null)},BoundingBox.prototype.addY=function(e){this.addPoint(null,e)},BoundingBox.prototype.addBezier=function(e,t,a,i,n,r,s,o){var l=[e,t],c=[a,i],d=[n,r],h=[s,o];this.addPoint(e,t),this.addPoint(s,o);for(var p=0;p<=1;p++){var u=6*l[p]-12*c[p]+6*d[p],m=-3*l[p]+9*c[p]-9*d[p]+3*h[p],f=3*c[p]-3*l[p];if(0!==m){var g=Math.pow(u,2)-4*f*m;if(!(g<0)){var U=(-u+Math.sqrt(g))/(2*m);0=0&&i>0&&(a+=" "),a+=t(n)}return a}e=void 0!==e?e:2;for(var i="",n=0;n"},Path.prototype.toDOMElement=function(e){var t=this.toPathData(e),a=document.createElementNS("http://www.w3.org/2000/svg","path");return a.setAttribute("d",t),a};var check={fail:fail,argument:argument,assert:argument},LIMIT16=32768,LIMIT32=2147483648,decode={},encode={},sizeOf={};function constant(e){return function(){return e}}encode.BYTE=function(e){return check.argument(e>=0&&e<=255,"Byte value should be between 0 and 255."),[e]},sizeOf.BYTE=constant(1),encode.CHAR=function(e){return[e.charCodeAt(0)]},sizeOf.CHAR=constant(1),encode.CHARARRAY=function(e){void 0===e&&(e="",console.warn("Undefined CHARARRAY encountered and treated as an empty string. This is probably caused by a missing glyph name."));for(var t=[],a=0;a>8&255,255&e]},sizeOf.USHORT=constant(2),encode.SHORT=function(e){return e>=LIMIT16&&(e=-(2*LIMIT16-e)),[e>>8&255,255&e]},sizeOf.SHORT=constant(2),encode.UINT24=function(e){return[e>>16&255,e>>8&255,255&e]},sizeOf.UINT24=constant(3),encode.ULONG=function(e){return[e>>24&255,e>>16&255,e>>8&255,255&e]},sizeOf.ULONG=constant(4),encode.LONG=function(e){return e>=LIMIT32&&(e=-(2*LIMIT32-e)),[e>>24&255,e>>16&255,e>>8&255,255&e]},sizeOf.LONG=constant(4),encode.FIXED=encode.ULONG,sizeOf.FIXED=sizeOf.ULONG,encode.FWORD=encode.SHORT,sizeOf.FWORD=sizeOf.SHORT,encode.UFWORD=encode.USHORT,sizeOf.UFWORD=sizeOf.USHORT,encode.LONGDATETIME=function(e){return[0,0,0,0,e>>24&255,e>>16&255,e>>8&255,255&e]},sizeOf.LONGDATETIME=constant(8),encode.TAG=function(e){return check.argument(4===e.length,"Tag should be exactly 4 ASCII characters."),[e.charCodeAt(0),e.charCodeAt(1),e.charCodeAt(2),e.charCodeAt(3)]},sizeOf.TAG=constant(4),encode.Card8=encode.BYTE,sizeOf.Card8=sizeOf.BYTE,encode.Card16=encode.USHORT,sizeOf.Card16=sizeOf.USHORT,encode.OffSize=encode.BYTE,sizeOf.OffSize=sizeOf.BYTE,encode.SID=encode.USHORT,sizeOf.SID=sizeOf.USHORT,encode.NUMBER=function(e){return e>=-107&&e<=107?[e+139]:e>=108&&e<=1131?[247+((e-=108)>>8),255&e]:e>=-1131&&e<=-108?[251+((e=-e-108)>>8),255&e]:e>=-32768&&e<=32767?encode.NUMBER16(e):encode.NUMBER32(e)},sizeOf.NUMBER=function(e){return encode.NUMBER(e).length},encode.NUMBER16=function(e){return[28,e>>8&255,255&e]},sizeOf.NUMBER16=constant(3),encode.NUMBER32=function(e){return[29,e>>24&255,e>>16&255,e>>8&255,255&e]},sizeOf.NUMBER32=constant(5),encode.REAL=function(e){var t=e.toString(),a=/\.(\d*?)(?:9{5,20}|0{5,20})\d{0,2}(?:e(.+)|$)/.exec(t);if(a){var i=parseFloat("1e"+((a[2]?+a[2]:0)+a[1].length));t=(Math.round(e*i)/i).toString()}for(var n="",r=0,s=t.length;r>8&255,t[t.length]=255&i}return t},sizeOf.UTF16=function(e){return 2*e.length};var eightBitMacEncodings={"x-mac-croatian":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®Š™´¨≠ŽØ∞±≤≥∆µ∂∑∏š∫ªºΩžø¿¡¬√ƒ≈ƫȅ ÀÃÕŒœĐ—“”‘’÷◊©⁄€‹›Æ»–·‚„‰ÂćÁčÈÍÎÏÌÓÔđÒÚÛÙıˆ˜¯πË˚¸Êæˇ","x-mac-cyrillic":"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°Ґ£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµґЈЄєЇїЉљЊњјЅ¬√ƒ≈∆«»… ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю","x-mac-gaelic":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØḂ±≤≥ḃĊċḊḋḞḟĠġṀæøṁṖṗɼƒſṠ«»… ÀÃÕŒœ–—“”‘’ṡẛÿŸṪ€‹›Ŷŷṫ·Ỳỳ⁊ÂÊÁËÈÍÎÏÌÓÔ♣ÒÚÛÙıÝýŴŵẄẅẀẁẂẃ","x-mac-greek":"Ĺ²É³ÖÜ΅àâä΄¨çéèê룙î‰ôö¦€ùûü†ΓΔΘΛΞΠß®©ΣΪ§≠°·Α±≤≥¥ΒΕΖΗΙΚΜΦΫΨΩάΝ¬ΟΡ≈Τ«»… ΥΧΆΈœ–―“”‘’÷ΉΊΌΎέήίόΏύαβψδεφγηιξκλμνοπώρστθωςχυζϊϋΐΰ­","x-mac-icelandic":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûüݰ¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€ÐðÞþý·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ","x-mac-inuit":"ᐃᐄᐅᐆᐊᐋᐱᐲᐳᐴᐸᐹᑉᑎᑏᑐᑑᑕᑖᑦᑭᑮᑯᑰᑲᑳᒃᒋᒌᒍᒎᒐᒑ°ᒡᒥᒦ•¶ᒧ®©™ᒨᒪᒫᒻᓂᓃᓄᓅᓇᓈᓐᓯᓰᓱᓲᓴᓵᔅᓕᓖᓗᓘᓚᓛᓪᔨᔩᔪᔫᔭ… ᔮᔾᕕᕖᕗ–—“”‘’ᕘᕙᕚᕝᕆᕇᕈᕉᕋᕌᕐᕿᖀᖁᖂᖃᖄᖅᖏᖐᖑᖒᖓᖔᖕᙱᙲᙳᙴᙵᙶᖖᖠᖡᖢᖣᖤᖥᖦᕼŁł","x-mac-ce":"ÄĀāÉĄÖÜáąČäčĆć鏟ĎíďĒēĖóėôöõúĚěü†°Ę£§•¶ß®©™ę¨≠ģĮįĪ≤≥īĶ∂∑łĻļĽľĹĺŅņѬ√ńŇ∆«»… ňŐÕőŌ–—“”‘’÷◊ōŔŕŘ‹›řŖŗŠ‚„šŚśÁŤťÍŽžŪÓÔūŮÚůŰűŲųÝýķŻŁżĢˇ",macintosh:"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€‹›fifl‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ","x-mac-romanian":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ĂȘ∞±≤≥¥µ∂∑∏π∫ªºΩăș¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€‹›Țț‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ","x-mac-turkish":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸĞğİıŞş‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙˆ˜¯˘˙˚¸˝˛ˇ"};decode.MACSTRING=function(e,t,a,i){var n=eightBitMacEncodings[i];if(void 0!==n){for(var r="",s=0;s=-128&&e<=127}function encodeVarDeltaRunAsZeroes(e,t,a){for(var i=0,n=e.length;t>8&255,l+256&255)}return r}encode.MACSTRING=function(e,t){var a=getMacEncodingTable(t);if(void 0!==a){for(var i=[],n=0;n=128&&void 0===(r=a[r]))return;i[n]=r}return i}},sizeOf.MACSTRING=function(e,t){var a=encode.MACSTRING(e,t);return void 0!==a?a.length:0},encode.VARDELTAS=function(e){for(var t=0,a=[];t=-128&&i<=127?encodeVarDeltaRunAsBytes(e,t,a):encodeVarDeltaRunAsWords(e,t,a)}return a},encode.INDEX=function(e){for(var t=1,a=[t],i=[],n=0;n>8,t[h+1]=255&p,t=t.concat(i[d])}return t},sizeOf.TABLE=function(e){for(var t=0,a=e.fields.length,i=0;i0)return new Parser(this.data,this.offset+t).parseStruct(e)},Parser.prototype.parsePointer32=function(e){var t=this.parseOffset32();if(t>0)return new Parser(this.data,this.offset+t).parseStruct(e)},Parser.prototype.parseListOfLists=function(e){for(var t=this.parseOffset16List(),a=t.length,i=this.relativeOffset,n=new Array(a),r=0;r>1,t.skip("uShort",3),e.glyphIndexMap={};for(var s=new parse.Parser(a,i+n+14),o=new parse.Parser(a,i+n+16+2*r),l=new parse.Parser(a,i+n+16+4*r),c=new parse.Parser(a,i+n+16+6*r),d=i+n+16+8*r,h=0;h=0;n-=1){var r=parse.getUShort(e,t+4+8*n),s=parse.getUShort(e,t+4+8*n+2);if(3===r&&(0===s||1===s||10===s)||0===r&&(0===s||1===s||2===s||3===s||4===s)){i=parse.getULong(e,t+4+8*n+4);break}}if(-1===i)throw new Error("No valid cmap sub-tables found.");var o=new parse.Parser(e,t+i);if(a.format=o.parseUShort(),12===a.format)parseCmapTableFormat12(a,o);else{if(4!==a.format)throw new Error("Only format 4 and 12 cmap tables are supported (found format "+a.format+").");parseCmapTableFormat4(a,o,e,t,i)}return a}function addSegment(e,t,a){e.segments.push({end:t,start:t,delta:-(t-a),offset:0,glyphIndex:a})}function addTerminatorSegment(e){e.segments.push({end:65535,start:65535,delta:1,offset:0})}function makeCmapTable(e){var t,a=!0;for(t=e.length-1;t>0;t-=1)if(e.get(t).unicode>65535){console.log("Adding CMAP format 12 (needed!)"),a=!1;break}var i=[{name:"version",type:"USHORT",value:0},{name:"numTables",type:"USHORT",value:a?1:2},{name:"platformID",type:"USHORT",value:3},{name:"encodingID",type:"USHORT",value:1},{name:"offset",type:"ULONG",value:a?12:20}];a||(i=i.concat([{name:"cmap12PlatformID",type:"USHORT",value:3},{name:"cmap12EncodingID",type:"USHORT",value:10},{name:"cmap12Offset",type:"ULONG",value:0}])),i=i.concat([{name:"format",type:"USHORT",value:4},{name:"cmap4Length",type:"USHORT",value:0},{name:"language",type:"USHORT",value:0},{name:"segCountX2",type:"USHORT",value:0},{name:"searchRange",type:"USHORT",value:0},{name:"entrySelector",type:"USHORT",value:0},{name:"rangeShift",type:"USHORT",value:0}]);var n=new table.Table("cmap",i);for(n.segments=[],t=0;t>4,r=15&i;if(15===n)break;if(t+=a[n],15===r)break;t+=a[r]}return parseFloat(t)}function parseOperand(e,t){if(28===t)return e.parseByte()<<8|e.parseByte();if(29===t)return e.parseByte()<<24|e.parseByte()<<16|e.parseByte()<<8|e.parseByte();if(30===t)return parseFloatOperand(e);if(t>=32&&t<=246)return t-139;if(t>=247&&t<=250)return 256*(t-247)+e.parseByte()+108;if(t>=251&&t<=254)return 256*-(t-251)-e.parseByte()-108;throw new Error("Invalid b0 "+t)}function entriesToObject(e){for(var t={},a=0;a>1,p.length=0,m=!0}return function a(c){for(var b,E,T,S,_,x,C,I,A,k,O,R,M=0;M1&&!m&&(w=p.shift()+d,m=!0),U+=p.pop(),y(g,U);break;case 5:for(;p.length>0;)g+=p.shift(),U+=p.shift(),h.lineTo(g,U);break;case 6:for(;p.length>0&&(g+=p.shift(),h.lineTo(g,U),0!==p.length);)U+=p.shift(),h.lineTo(g,U);break;case 7:for(;p.length>0&&(U+=p.shift(),h.lineTo(g,U),0!==p.length);)g+=p.shift(),h.lineTo(g,U);break;case 8:for(;p.length>0;)i=g+p.shift(),n=U+p.shift(),r=i+p.shift(),s=n+p.shift(),g=r+p.shift(),U=s+p.shift(),h.curveTo(i,n,r,s,g,U);break;case 10:_=p.pop()+l,(x=o[_])&&a(x);break;case 11:return;case 12:switch(L=c[M],M+=1,L){case 35:i=g+p.shift(),n=U+p.shift(),r=i+p.shift(),s=n+p.shift(),C=r+p.shift(),I=s+p.shift(),A=C+p.shift(),k=I+p.shift(),O=A+p.shift(),R=k+p.shift(),g=O+p.shift(),U=R+p.shift(),p.shift(),h.curveTo(i,n,r,s,C,I),h.curveTo(A,k,O,R,g,U);break;case 34:i=g+p.shift(),n=U,r=i+p.shift(),s=n+p.shift(),C=r+p.shift(),I=s,A=C+p.shift(),k=s,O=A+p.shift(),R=U,g=O+p.shift(),h.curveTo(i,n,r,s,C,I),h.curveTo(A,k,O,R,g,U);break;case 36:i=g+p.shift(),n=U+p.shift(),r=i+p.shift(),s=n+p.shift(),C=r+p.shift(),I=s,A=C+p.shift(),k=s,O=A+p.shift(),R=k+p.shift(),g=O+p.shift(),h.curveTo(i,n,r,s,C,I),h.curveTo(A,k,O,R,g,U);break;case 37:i=g+p.shift(),n=U+p.shift(),r=i+p.shift(),s=n+p.shift(),C=r+p.shift(),I=s+p.shift(),A=C+p.shift(),k=I+p.shift(),O=A+p.shift(),R=k+p.shift(),Math.abs(O-g)>Math.abs(R-U)?g=O+p.shift():U=R+p.shift(),h.curveTo(i,n,r,s,C,I),h.curveTo(A,k,O,R,g,U);break;default:console.log("Glyph "+t.index+": unknown operator 1200"+L),p.length=0}break;case 14:p.length>0&&!m&&(w=p.shift()+d,m=!0),f&&(h.closePath(),f=!1);break;case 19:case 20:v(),M+=u+7>>3;break;case 21:p.length>2&&!m&&(w=p.shift()+d,m=!0),U+=p.pop(),y(g+=p.pop(),U);break;case 22:p.length>1&&!m&&(w=p.shift()+d,m=!0),y(g+=p.pop(),U);break;case 24:for(;p.length>2;)i=g+p.shift(),n=U+p.shift(),r=i+p.shift(),s=n+p.shift(),g=r+p.shift(),U=s+p.shift(),h.curveTo(i,n,r,s,g,U);g+=p.shift(),U+=p.shift(),h.lineTo(g,U);break;case 25:for(;p.length>6;)g+=p.shift(),U+=p.shift(),h.lineTo(g,U);i=g+p.shift(),n=U+p.shift(),r=i+p.shift(),s=n+p.shift(),g=r+p.shift(),U=s+p.shift(),h.curveTo(i,n,r,s,g,U);break;case 26:for(p.length%2&&(g+=p.shift());p.length>0;)i=g,n=U+p.shift(),r=i+p.shift(),s=n+p.shift(),g=r,U=s+p.shift(),h.curveTo(i,n,r,s,g,U);break;case 27:for(p.length%2&&(U+=p.shift());p.length>0;)i=g+p.shift(),n=U,r=i+p.shift(),s=n+p.shift(),g=r+p.shift(),U=s,h.curveTo(i,n,r,s,g,U);break;case 28:b=c[M],E=c[M+1],p.push((b<<24|E<<16)>>16),M+=2;break;case 29:_=p.pop()+e.gsubrsBias,(x=e.gsubrs[_])&&a(x);break;case 30:for(;p.length>0&&(i=g,n=U+p.shift(),r=i+p.shift(),s=n+p.shift(),g=r+p.shift(),U=s+(1===p.length?p.shift():0),h.curveTo(i,n,r,s,g,U),0!==p.length);)i=g+p.shift(),n=U,r=i+p.shift(),s=n+p.shift(),U=s+p.shift(),g=r+(1===p.length?p.shift():0),h.curveTo(i,n,r,s,g,U);break;case 31:for(;p.length>0&&(i=g+p.shift(),n=U,r=i+p.shift(),s=n+p.shift(),U=s+p.shift(),g=r+(1===p.length?p.shift():0),h.curveTo(i,n,r,s,g,U),0!==p.length);)i=g,n=U+p.shift(),r=i+p.shift(),s=n+p.shift(),g=r+p.shift(),U=s+(1===p.length?p.shift():0),h.curveTo(i,n,r,s,g,U);break;default:L<32?console.log("Glyph "+t.index+": unknown operator "+L):L<247?p.push(L-139):L<251?(b=c[M],M+=1,p.push(256*(L-247)+b+108)):L<255?(b=c[M],M+=1,p.push(256*-(L-251)-b-108)):(b=c[M],E=c[M+1],T=c[M+2],S=c[M+3],M+=4,p.push((b<<24|E<<16|T<<8|S)/65536))}}}(a),t.advanceWidth=w,h}function parseCFFFDSelect(e,t,a,i){var n,r=[],s=new parse.Parser(e,t),o=s.parseCard8();if(0===o)for(var l=0;l=i)throw new Error("CFF table CID Font FDSelect has bad FD index value "+n+" (FD count "+i+")");r.push(n)}else{if(3!==o)throw new Error("CFF Table CID Font FDSelect table has unsupported format "+o);var c,d=s.parseCard16(),h=s.parseCard16();if(0!==h)throw new Error("CFF Table CID Font FDSelect format 3 range has bad initial GID "+h);for(var p=0;p=i)throw new Error("CFF table CID Font FDSelect has bad FD index value "+n+" (FD count "+i+")");if(c>a)throw new Error("CFF Table CID Font FDSelect format 3 range has bad GID "+c);for(;h=0&&(a=i),(i=t.indexOf(e))>=0?a=i+cffStandardStrings.length:(a=cffStandardStrings.length+t.length,t.push(e)),a}function makeHeader(){return new table.Record("Header",[{name:"major",type:"Card8",value:1},{name:"minor",type:"Card8",value:0},{name:"hdrSize",type:"Card8",value:4},{name:"major",type:"Card8",value:1}])}function makeNameIndex(e){var t=new table.Record("Name INDEX",[{name:"names",type:"INDEX",value:[]}]);t.names=[];for(var a=0;a=a.begin&&e=1&&(a.ulCodePageRange1=i.parseULong(),a.ulCodePageRange2=i.parseULong()),a.version>=2&&(a.sxHeight=i.parseShort(),a.sCapHeight=i.parseShort(),a.usDefaultChar=i.parseUShort(),a.usBreakChar=i.parseUShort(),a.usMaxContent=i.parseUShort()),a}function makeOS2Table(e){return new table.Table("OS/2",[{name:"version",type:"USHORT",value:3},{name:"xAvgCharWidth",type:"SHORT",value:0},{name:"usWeightClass",type:"USHORT",value:0},{name:"usWidthClass",type:"USHORT",value:0},{name:"fsType",type:"USHORT",value:0},{name:"ySubscriptXSize",type:"SHORT",value:650},{name:"ySubscriptYSize",type:"SHORT",value:699},{name:"ySubscriptXOffset",type:"SHORT",value:0},{name:"ySubscriptYOffset",type:"SHORT",value:140},{name:"ySuperscriptXSize",type:"SHORT",value:650},{name:"ySuperscriptYSize",type:"SHORT",value:699},{name:"ySuperscriptXOffset",type:"SHORT",value:0},{name:"ySuperscriptYOffset",type:"SHORT",value:479},{name:"yStrikeoutSize",type:"SHORT",value:49},{name:"yStrikeoutPosition",type:"SHORT",value:258},{name:"sFamilyClass",type:"SHORT",value:0},{name:"bFamilyType",type:"BYTE",value:0},{name:"bSerifStyle",type:"BYTE",value:0},{name:"bWeight",type:"BYTE",value:0},{name:"bProportion",type:"BYTE",value:0},{name:"bContrast",type:"BYTE",value:0},{name:"bStrokeVariation",type:"BYTE",value:0},{name:"bArmStyle",type:"BYTE",value:0},{name:"bLetterform",type:"BYTE",value:0},{name:"bMidline",type:"BYTE",value:0},{name:"bXHeight",type:"BYTE",value:0},{name:"ulUnicodeRange1",type:"ULONG",value:0},{name:"ulUnicodeRange2",type:"ULONG",value:0},{name:"ulUnicodeRange3",type:"ULONG",value:0},{name:"ulUnicodeRange4",type:"ULONG",value:0},{name:"achVendID",type:"CHARARRAY",value:"XXXX"},{name:"fsSelection",type:"USHORT",value:0},{name:"usFirstCharIndex",type:"USHORT",value:0},{name:"usLastCharIndex",type:"USHORT",value:0},{name:"sTypoAscender",type:"SHORT",value:0},{name:"sTypoDescender",type:"SHORT",value:0},{name:"sTypoLineGap",type:"SHORT",value:0},{name:"usWinAscent",type:"USHORT",value:0},{name:"usWinDescent",type:"USHORT",value:0},{name:"ulCodePageRange1",type:"ULONG",value:0},{name:"ulCodePageRange2",type:"ULONG",value:0},{name:"sxHeight",type:"SHORT",value:0},{name:"sCapHeight",type:"SHORT",value:0},{name:"usDefaultChar",type:"USHORT",value:0},{name:"usBreakChar",type:"USHORT",value:0},{name:"usMaxContext",type:"USHORT",value:0}],e)}var os2={parse:parseOS2Table,make:makeOS2Table,unicodeRanges:unicodeRanges,getUnicodeRange:getUnicodeRange};function parsePostTable(e,t){var a={},i=new parse.Parser(e,t);switch(a.version=i.parseVersion(),a.italicAngle=i.parseFixed(),a.underlinePosition=i.parseShort(),a.underlineThickness=i.parseShort(),a.isFixedPitch=i.parseULong(),a.minMemType42=i.parseULong(),a.maxMemType42=i.parseULong(),a.minMemType1=i.parseULong(),a.maxMemType1=i.parseULong(),a.version){case 1:a.names=standardNames.slice();break;case 2:a.numberOfGlyphs=i.parseUShort(),a.glyphNameIndex=new Array(a.numberOfGlyphs);for(var n=0;n=standardNames.length){var s=i.parseChar();a.names.push(i.parseString(s))}break;case 2.5:a.numberOfGlyphs=i.parseUShort(),a.offset=new Array(a.numberOfGlyphs);for(var o=0;ot.value.tag?1:-1})),t.fields=t.fields.concat(i),t.fields=t.fields.concat(n),t}function metricsForChar(e,t,a){for(var i=0;i0)return e.glyphs.get(n).getMetrics()}return a}function average(e){for(var t=0,a=0;ag||void 0===t)&&g>0&&(t=g),c 123 are reserved for internal usage");u|=1<0?ltag.make(R):void 0,D=post.make(),P=cff.make(e.glyphs,{version:e.getEnglishName("version"),fullName:I,familyName:x,weightName:C,postScriptName:A,unitsPerEm:e.unitsPerEm,fontBBox:[0,E.yMin,E.ascender,E.advanceWidthMax]}),N=e.metas&&Object.keys(e.metas).length>0?meta.make(e.metas):void 0,F=[w,y,v,T,M,_,D,P,S];L&&F.push(L),e.tables.gsub&&F.push(gsub.make(e.tables.gsub)),N&&F.push(N);for(var V=makeSfntTable(F),G=computeCheckSum(V.encode()),B=V.fields,$=!1,W=0;W>>1,r=e[n].tag;if(r===t)return n;r>>1,r=e[n];if(r===t)return n;r>>1,s=(a=e[r]).start;if(s===t)return a;s0)return t>(a=e[i-1]).end?0:a}function Layout(e,t){this.font=e,this.tableName=t}function Position(e){Layout.call(this,e,"gpos")}function Substitution(e){Layout.call(this,e,"gsub")}function arraysEqual(e,t){var a=e.length;if(a!==t.length)return!1;for(var i=0;i0?(r=e.parseByte(),t&n||(r=-r),r=a+r):r=(t&n)>0?a:a+e.parseShort(),r}function parseGlyph(e,t,a){var i,n,r=new parse.Parser(t,a);if(e.numberOfContours=r.parseShort(),e._xMin=r.parseShort(),e._yMin=r.parseShort(),e._xMax=r.parseShort(),e._yMax=r.parseShort(),e.numberOfContours>0){for(var s=e.endPointIndices=[],o=0;o0)for(var h=r.parseByte(),p=0;p0){var u,m=[];if(c>0){for(var f=0;f=0,m.push(u);for(var g=0,U=0;U0?(2&i)>0?(y.dx=r.parseShort(),y.dy=r.parseShort()):y.matchedPoints=[r.parseUShort(),r.parseUShort()]:(2&i)>0?(y.dx=r.parseChar(),y.dy=r.parseChar()):y.matchedPoints=[r.parseByte(),r.parseByte()],(8&i)>0?y.xScale=y.yScale=r.parseF2Dot14():(64&i)>0?(y.xScale=r.parseF2Dot14(),y.yScale=r.parseF2Dot14()):(128&i)>0&&(y.xScale=r.parseF2Dot14(),y.scale01=r.parseF2Dot14(),y.scale10=r.parseF2Dot14(),y.yScale=r.parseF2Dot14()),e.components.push(y),w=!!(32&i)}if(256&i){e.instructionLength=r.parseUShort(),e.instructions=[];for(var v=0;vt.points.length-1||i.matchedPoints[1]>n.points.length-1)throw Error("Matched points out of range in "+t.name);var s=t.points[i.matchedPoints[0]],o=n.points[i.matchedPoints[1]],l={xScale:i.xScale,scale01:i.scale01,scale10:i.scale10,yScale:i.yScale,dx:0,dy:0};o=transformPoints$1([o],l)[0],l.dx=s.x-o.x,l.dy=s.y-o.y,r=transformPoints$1(n.points,l)}t.points=t.points.concat(r)}}return getPath(t.points)}function parseGlyfTableAll(e,t,a,i){for(var n=new glyphset.GlyphSet(i),r=0;r=0)return i[n].script;if(t){var r={tag:e,script:{defaultLangSys:{reserved:0,reqFeatureIndex:65535,featureIndexes:[]},langSysRecords:[]}};return i.splice(-1-n,0,r),r.script}}},getLangSysTable:function(e,t,a){var i=this.getScriptTable(e,a);if(i){if(!t||"dflt"===t||"DFLT"===t)return i.defaultLangSys;var n=searchTag(i.langSysRecords,t);if(n>=0)return i.langSysRecords[n].langSys;if(a){var r={tag:t,langSys:{reserved:0,reqFeatureIndex:65535,featureIndexes:[]}};return i.langSysRecords.splice(-1-n,0,r),r.langSys}}},getFeatureTable:function(e,t,a,i){var n=this.getLangSysTable(e,t,i);if(n){for(var r,s=n.featureIndexes,o=this.font.tables[this.tableName].features,l=0;l=o[c-1].tag,"Features must be added in alphabetical order."),r={tag:a,feature:{params:0,lookupListIndexes:[]}},o.push(r),s.push(c),r.feature}}},getLookupTables:function(e,t,a,i,n){var r=this.getFeatureTable(e,t,a,n),s=[];if(r){for(var o,l=r.lookupListIndexes,c=this.font.tables[this.tableName].lookups,d=0;d=0?a:-1;case 2:var i=searchRange(e.ranges,t);return i?i.index+t-i.start:-1}},expandCoverage:function(e){if(1===e.format)return e.glyphs;for(var t=[],a=e.ranges,i=0;i1,'Multiple: "by" must be an array of two or more ids');var n=getSubstFormat(this.getLookupTables(a,i,e,2,!0)[0],1,{substFormat:1,coverage:{format:1,glyphs:[]},sequences:[]});check.assert(1===n.coverage.format,"Multiple: unable to modify coverage table format "+n.coverage.format);var r=t.sub,s=this.binSearch(n.coverage.glyphs,r);s<0&&(s=-1-s,n.coverage.glyphs.splice(s,0,r),n.sequences.splice(s,0,0)),n.sequences[s]=t.by},Substitution.prototype.addAlternate=function(e,t,a,i){var n=getSubstFormat(this.getLookupTables(a,i,e,3,!0)[0],1,{substFormat:1,coverage:{format:1,glyphs:[]},alternateSets:[]});check.assert(1===n.coverage.format,"Alternate: unable to modify coverage table format "+n.coverage.format);var r=t.sub,s=this.binSearch(n.coverage.glyphs,r);s<0&&(s=-1-s,n.coverage.glyphs.splice(s,0,r),n.alternateSets.splice(s,0,0)),n.alternateSets[s]=t.by},Substitution.prototype.addLigature=function(e,t,a,i){var n=this.getLookupTables(a,i,e,4,!0)[0],r=n.subtables[0];r||(r={substFormat:1,coverage:{format:1,glyphs:[]},ligatureSets:[]},n.subtables[0]=r),check.assert(1===r.coverage.format,"Ligature: unable to modify coverage table format "+r.coverage.format);var s=t.sub[0],o=t.sub.slice(1),l={ligGlyph:t.by,components:o},c=this.binSearch(r.coverage.glyphs,s);if(c>=0){for(var d=r.ligatureSets[c],h=0;h=176&&a<=183)n+=a-176+1;else if(a>=184&&a<=191)n+=2*(a-184+1);else if(t&&1===r&&27===a)break}while(r>0);e.ip=n}function SVTCA(e,t){exports.DEBUG&&console.log(t.step,"SVTCA["+e.axis+"]"),t.fv=t.pv=t.dpv=e}function SPVTCA(e,t){exports.DEBUG&&console.log(t.step,"SPVTCA["+e.axis+"]"),t.pv=t.dpv=e}function SFVTCA(e,t){exports.DEBUG&&console.log(t.step,"SFVTCA["+e.axis+"]"),t.fv=e}function SPVTL(e,t){var a,i,n=t.stack,r=n.pop(),s=n.pop(),o=t.z2[r],l=t.z1[s];exports.DEBUG&&console.log("SPVTL["+e+"]",r,s),e?(a=o.y-l.y,i=l.x-o.x):(a=l.x-o.x,i=l.y-o.y),t.pv=t.dpv=getUnitVector(a,i)}function SFVTL(e,t){var a,i,n=t.stack,r=n.pop(),s=n.pop(),o=t.z2[r],l=t.z1[s];exports.DEBUG&&console.log("SFVTL["+e+"]",r,s),e?(a=o.y-l.y,i=l.x-o.x):(a=l.x-o.x,i=l.y-o.y),t.fv=getUnitVector(a,i)}function SPVFS(e){var t=e.stack,a=t.pop(),i=t.pop();exports.DEBUG&&console.log(e.step,"SPVFS[]",a,i),e.pv=e.dpv=getUnitVector(i,a)}function SFVFS(e){var t=e.stack,a=t.pop(),i=t.pop();exports.DEBUG&&console.log(e.step,"SPVFS[]",a,i),e.fv=getUnitVector(i,a)}function GPV(e){var t=e.stack,a=e.pv;exports.DEBUG&&console.log(e.step,"GPV[]"),t.push(16384*a.x),t.push(16384*a.y)}function GFV(e){var t=e.stack,a=e.fv;exports.DEBUG&&console.log(e.step,"GFV[]"),t.push(16384*a.x),t.push(16384*a.y)}function SFVTPV(e){e.fv=e.pv,exports.DEBUG&&console.log(e.step,"SFVTPV[]")}function ISECT(e){var t=e.stack,a=t.pop(),i=t.pop(),n=t.pop(),r=t.pop(),s=t.pop(),o=e.z0,l=e.z1,c=o[a],d=o[i],h=l[n],p=l[r],u=e.z2[s];exports.DEBUG&&console.log("ISECT[], ",a,i,n,r,s);var m=c.x,f=c.y,g=d.x,U=d.y,b=h.x,E=h.y,w=p.x,y=p.y,v=(m-g)*(E-y)-(f-U)*(b-w),T=m*U-f*g,S=b*y-E*w;u.x=(T*(b-w)-S*(m-g))/v,u.y=(T*(E-y)-S*(f-U))/v}function SRP0(e){e.rp0=e.stack.pop(),exports.DEBUG&&console.log(e.step,"SRP0[]",e.rp0)}function SRP1(e){e.rp1=e.stack.pop(),exports.DEBUG&&console.log(e.step,"SRP1[]",e.rp1)}function SRP2(e){e.rp2=e.stack.pop(),exports.DEBUG&&console.log(e.step,"SRP2[]",e.rp2)}function SZP0(e){var t=e.stack.pop();switch(exports.DEBUG&&console.log(e.step,"SZP0[]",t),e.zp0=t,t){case 0:e.tZone||initTZone(e),e.z0=e.tZone;break;case 1:e.z0=e.gZone;break;default:throw new Error("Invalid zone pointer")}}function SZP1(e){var t=e.stack.pop();switch(exports.DEBUG&&console.log(e.step,"SZP1[]",t),e.zp1=t,t){case 0:e.tZone||initTZone(e),e.z1=e.tZone;break;case 1:e.z1=e.gZone;break;default:throw new Error("Invalid zone pointer")}}function SZP2(e){var t=e.stack.pop();switch(exports.DEBUG&&console.log(e.step,"SZP2[]",t),e.zp2=t,t){case 0:e.tZone||initTZone(e),e.z2=e.tZone;break;case 1:e.z2=e.gZone;break;default:throw new Error("Invalid zone pointer")}}function SZPS(e){var t=e.stack.pop();switch(exports.DEBUG&&console.log(e.step,"SZPS[]",t),e.zp0=e.zp1=e.zp2=t,t){case 0:e.tZone||initTZone(e),e.z0=e.z1=e.z2=e.tZone;break;case 1:e.z0=e.z1=e.z2=e.gZone;break;default:throw new Error("Invalid zone pointer")}}function SLOOP(e){e.loop=e.stack.pop(),exports.DEBUG&&console.log(e.step,"SLOOP[]",e.loop)}function RTG(e){exports.DEBUG&&console.log(e.step,"RTG[]"),e.round=roundToGrid}function RTHG(e){exports.DEBUG&&console.log(e.step,"RTHG[]"),e.round=roundToHalfGrid}function SMD(e){var t=e.stack.pop();exports.DEBUG&&console.log(e.step,"SMD[]",t),e.minDis=t/64}function ELSE(e){exports.DEBUG&&console.log(e.step,"ELSE[]"),skip(e,!1)}function JMPR(e){var t=e.stack.pop();exports.DEBUG&&console.log(e.step,"JMPR[]",t),e.ip+=t-1}function SCVTCI(e){var t=e.stack.pop();exports.DEBUG&&console.log(e.step,"SCVTCI[]",t),e.cvCutIn=t/64}function DUP(e){var t=e.stack;exports.DEBUG&&console.log(e.step,"DUP[]"),t.push(t[t.length-1])}function POP(e){exports.DEBUG&&console.log(e.step,"POP[]"),e.stack.pop()}function CLEAR(e){exports.DEBUG&&console.log(e.step,"CLEAR[]"),e.stack.length=0}function SWAP(e){var t=e.stack,a=t.pop(),i=t.pop();exports.DEBUG&&console.log(e.step,"SWAP[]"),t.push(a),t.push(i)}function DEPTH(e){var t=e.stack;exports.DEBUG&&console.log(e.step,"DEPTH[]"),t.push(t.length)}function LOOPCALL(e){var t=e.stack,a=t.pop(),i=t.pop();exports.DEBUG&&console.log(e.step,"LOOPCALL[]",a,i);var n=e.ip,r=e.prog;e.prog=e.funcs[a];for(var s=0;s1?"loop "+(t.loop-o)+": ":"")+"SHP["+(e?"rp1":"rp2")+"]",c)}t.loop=1}function SHC(e,t){var a=t.stack,i=e?t.rp1:t.rp2,n=(e?t.z0:t.z1)[i],r=t.fv,s=t.pv,o=a.pop(),l=t.z2[t.contours[o]],c=l;exports.DEBUG&&console.log(t.step,"SHC["+e+"]",o);var d=s.distance(n,n,!1,!0);do{c!==n&&r.setRelative(c,c,d,s),c=c.nextPointOnContour}while(c!==l)}function SHZ(e,t){var a,i,n=t.stack,r=e?t.rp1:t.rp2,s=(e?t.z0:t.z1)[r],o=t.fv,l=t.pv,c=n.pop();switch(exports.DEBUG&&console.log(t.step,"SHZ["+e+"]",c),c){case 0:a=t.tZone;break;case 1:a=t.gZone;break;default:throw new Error("Invalid zone")}for(var d=l.distance(s,s,!1,!0),h=a.length-2,p=0;p1?"loop "+(e.loop-a)+": ":"")+"SHPIX[]",s,n),i.setRelative(o,o,n),i.touch(o)}e.loop=1}function IP(e){for(var t=e.stack,a=e.rp1,i=e.rp2,n=e.loop,r=e.z0[a],s=e.z1[i],o=e.fv,l=e.dpv,c=e.z2;n--;){var d=t.pop(),h=c[d];exports.DEBUG&&console.log(e.step,(e.loop>1?"loop "+(e.loop-n)+": ":"")+"IP[]",d,a,"<->",i),o.interpolate(h,r,s,l),o.touch(h)}e.loop=1}function MSIRP(e,t){var a=t.stack,i=a.pop()/64,n=a.pop(),r=t.z1[n],s=t.z0[t.rp0],o=t.fv,l=t.pv;o.setRelative(r,s,i,l),o.touch(r),exports.DEBUG&&console.log(t.step,"MSIRP["+e+"]",i,n),t.rp1=t.rp0,t.rp2=n,e&&(t.rp0=n)}function ALIGNRP(e){for(var t=e.stack,a=e.rp0,i=e.z0[a],n=e.loop,r=e.fv,s=e.pv,o=e.z1;n--;){var l=t.pop(),c=o[l];exports.DEBUG&&console.log(e.step,(e.loop>1?"loop "+(e.loop-n)+": ":"")+"ALIGNRP[]",l),r.setRelative(c,i,0,s),r.touch(c)}e.loop=1}function RTDG(e){exports.DEBUG&&console.log(e.step,"RTDG[]"),e.round=roundToDoubleGrid}function MIAP(e,t){var a=t.stack,i=a.pop(),n=a.pop(),r=t.z0[n],s=t.fv,o=t.pv,l=t.cvt[i];exports.DEBUG&&console.log(t.step,"MIAP["+e+"]",i,"(",l,")",n);var c=o.distance(r,HPZero);e&&(Math.abs(c-l)",o),t.stack.push(Math.round(64*o))}function MPPEM(e){exports.DEBUG&&console.log(e.step,"MPPEM[]"),e.stack.push(e.ppem)}function FLIPON(e){exports.DEBUG&&console.log(e.step,"FLIPON[]"),e.autoFlip=!0}function LT(e){var t=e.stack,a=t.pop(),i=t.pop();exports.DEBUG&&console.log(e.step,"LT[]",a,i),t.push(ia?1:0)}function GTEQ(e){var t=e.stack,a=t.pop(),i=t.pop();exports.DEBUG&&console.log(e.step,"GTEQ[]",a,i),t.push(i>=a?1:0)}function EQ(e){var t=e.stack,a=t.pop(),i=t.pop();exports.DEBUG&&console.log(e.step,"EQ[]",a,i),t.push(a===i?1:0)}function NEQ(e){var t=e.stack,a=t.pop(),i=t.pop();exports.DEBUG&&console.log(e.step,"NEQ[]",a,i),t.push(a!==i?1:0)}function ODD(e){var t=e.stack,a=t.pop();exports.DEBUG&&console.log(e.step,"ODD[]",a),t.push(Math.trunc(a)%2?1:0)}function EVEN(e){var t=e.stack,a=t.pop();exports.DEBUG&&console.log(e.step,"EVEN[]",a),t.push(Math.trunc(a)%2?0:1)}function IF(e){var t=e.stack.pop();exports.DEBUG&&console.log(e.step,"IF[]",t),t||(skip(e,!0),exports.DEBUG&&console.log(e.step,"EIF[]"))}function EIF(e){exports.DEBUG&&console.log(e.step,"EIF[]")}function AND(e){var t=e.stack,a=t.pop(),i=t.pop();exports.DEBUG&&console.log(e.step,"AND[]",a,i),t.push(a&&i?1:0)}function OR(e){var t=e.stack,a=t.pop(),i=t.pop();exports.DEBUG&&console.log(e.step,"OR[]",a,i),t.push(a||i?1:0)}function NOT(e){var t=e.stack,a=t.pop();exports.DEBUG&&console.log(e.step,"NOT[]",a),t.push(a?0:1)}function DELTAP123(e,t){var a=t.stack,i=a.pop(),n=t.fv,r=t.pv,s=t.ppem,o=t.deltaBase+16*(e-1),l=t.deltaShift,c=t.z0;exports.DEBUG&&console.log(t.step,"DELTAP["+e+"]",i,a);for(var d=0;d>4)===s){var u=(15&p)-8;u>=0&&u++,exports.DEBUG&&console.log(t.step,"DELTAPFIX",h,"by",u*l);var m=c[h];n.setRelative(m,m,u*l,r)}}}function SDB(e){var t=e.stack.pop();exports.DEBUG&&console.log(e.step,"SDB[]",t),e.deltaBase=t}function SDS(e){var t=e.stack.pop();exports.DEBUG&&console.log(e.step,"SDS[]",t),e.deltaShift=Math.pow(.5,t)}function ADD(e){var t=e.stack,a=t.pop(),i=t.pop();exports.DEBUG&&console.log(e.step,"ADD[]",a,i),t.push(i+a)}function SUB(e){var t=e.stack,a=t.pop(),i=t.pop();exports.DEBUG&&console.log(e.step,"SUB[]",a,i),t.push(i-a)}function DIV(e){var t=e.stack,a=t.pop(),i=t.pop();exports.DEBUG&&console.log(e.step,"DIV[]",a,i),t.push(64*i/a)}function MUL(e){var t=e.stack,a=t.pop(),i=t.pop();exports.DEBUG&&console.log(e.step,"MUL[]",a,i),t.push(i*a/64)}function ABS(e){var t=e.stack,a=t.pop();exports.DEBUG&&console.log(e.step,"ABS[]",a),t.push(Math.abs(a))}function NEG(e){var t=e.stack,a=t.pop();exports.DEBUG&&console.log(e.step,"NEG[]",a),t.push(-a)}function FLOOR(e){var t=e.stack,a=t.pop();exports.DEBUG&&console.log(e.step,"FLOOR[]",a),t.push(64*Math.floor(a/64))}function CEILING(e){var t=e.stack,a=t.pop();exports.DEBUG&&console.log(e.step,"CEILING[]",a),t.push(64*Math.ceil(a/64))}function ROUND(e,t){var a=t.stack,i=a.pop();exports.DEBUG&&console.log(t.step,"ROUND[]"),a.push(64*t.round(i/64))}function WCVTF(e){var t=e.stack,a=t.pop(),i=t.pop();exports.DEBUG&&console.log(e.step,"WCVTF[]",a,i),e.cvt[i]=a*e.ppem/e.font.unitsPerEm}function DELTAC123(e,t){var a=t.stack,i=a.pop(),n=t.ppem,r=t.deltaBase+16*(e-1),s=t.deltaShift;exports.DEBUG&&console.log(t.step,"DELTAC["+e+"]",i,a);for(var o=0;o>4)===n){var d=(15&c)-8;d>=0&&d++;var h=d*s;exports.DEBUG&&console.log(t.step,"DELTACFIX",l,"by",h),t.cvt[l]+=h}}}function SROUND(e){var t,a=e.stack.pop();switch(exports.DEBUG&&console.log(e.step,"SROUND[]",a),e.round=roundSuper,192&a){case 0:t=.5;break;case 64:t=1;break;case 128:t=2;break;default:throw new Error("invalid SROUND value")}switch(e.srPeriod=t,48&a){case 0:e.srPhase=0;break;case 16:e.srPhase=.25*t;break;case 32:e.srPhase=.5*t;break;case 48:e.srPhase=.75*t;break;default:throw new Error("invalid SROUND value")}a&=15,e.srThreshold=0===a?0:(a/8-.5)*t}function S45ROUND(e){var t,a=e.stack.pop();switch(exports.DEBUG&&console.log(e.step,"S45ROUND[]",a),e.round=roundSuper,192&a){case 0:t=Math.sqrt(2)/2;break;case 64:t=Math.sqrt(2);break;case 128:t=2*Math.sqrt(2);break;default:throw new Error("invalid S45ROUND value")}switch(e.srPeriod=t,48&a){case 0:e.srPhase=0;break;case 16:e.srPhase=.25*t;break;case 32:e.srPhase=.5*t;break;case 48:e.srPhase=.75*t;break;default:throw new Error("invalid S45ROUND value")}a&=15,e.srThreshold=0===a?0:(a/8-.5)*t}function ROFF(e){exports.DEBUG&&console.log(e.step,"ROFF[]"),e.round=roundOff}function RUTG(e){exports.DEBUG&&console.log(e.step,"RUTG[]"),e.round=roundUpToGrid}function RDTG(e){exports.DEBUG&&console.log(e.step,"RDTG[]"),e.round=roundDownToGrid}function SCANCTRL(e){var t=e.stack.pop();exports.DEBUG&&console.log(e.step,"SCANCTRL[]",t)}function SDPVTL(e,t){var a,i,n=t.stack,r=n.pop(),s=n.pop(),o=t.z2[r],l=t.z1[s];exports.DEBUG&&console.log(t.step,"SDPVTL["+e+"]",r,s),e?(a=o.y-l.y,i=l.x-o.x):(a=l.x-o.x,i=l.y-o.y),t.dpv=getUnitVector(a,i)}function GETINFO(e){var t=e.stack,a=t.pop(),i=0;exports.DEBUG&&console.log(e.step,"GETINFO[]",a),1&a&&(i=35),32&a&&(i|=4096),t.push(i)}function ROLL(e){var t=e.stack,a=t.pop(),i=t.pop(),n=t.pop();exports.DEBUG&&console.log(e.step,"ROLL[]"),t.push(i),t.push(a),t.push(n)}function MAX(e){var t=e.stack,a=t.pop(),i=t.pop();exports.DEBUG&&console.log(e.step,"MAX[]",a,i),t.push(Math.max(i,a))}function MIN(e){var t=e.stack,a=t.pop(),i=t.pop();exports.DEBUG&&console.log(e.step,"MIN[]",a,i),t.push(Math.min(i,a))}function SCANTYPE(e){var t=e.stack.pop();exports.DEBUG&&console.log(e.step,"SCANTYPE[]",t)}function INSTCTRL(e){var t=e.stack.pop(),a=e.stack.pop();switch(exports.DEBUG&&console.log(e.step,"INSTCTRL[]",t,a),t){case 1:return void(e.inhibitGridFit=!!a);case 2:return void(e.ignoreCvt=!!a);default:throw new Error("invalid INSTCTRL[] selector")}}function PUSHB(e,t){var a=t.stack,i=t.prog,n=t.ip;exports.DEBUG&&console.log(t.step,"PUSHB["+e+"]");for(var r=0;r=0?1:-1,o=Math.abs(o),e&&(c=r.cvt[h],i&&Math.abs(o-c)":"_")+(i?"R":"_")+(0===n?"Gr":1===n?"Bl":2===n?"Wh":"")+"]",e?h+"("+r.cvt[h]+","+c+")":"",p,"(d =",s,"->",l*o,")"),r.rp1=r.rp0,r.rp2=p,t&&(r.rp0=p)}function Token(e){this.char=e,this.state={},this.activeState=null}function ContextRange(e,t,a){this.contextName=a,this.startIndex=e,this.endOffset=t}function ContextChecker(e,t,a){this.contextName=e,this.openRange=null,this.ranges=[],this.checkStart=t,this.checkEnd=a}function ContextParams(e,t){this.context=e,this.index=t,this.length=e.length,this.current=e[t],this.backtrack=e.slice(0,t),this.lookahead=e.slice(t+1)}function Event$1(e){this.eventId=e,this.subscribers=[]}function initializeCoreEvents(e){var t=this,a=["start","end","next","newToken","contextStart","contextEnd","insertToken","removeToken","removeRange","replaceToken","replaceRange","composeRUD","updateContextsRanges"];a.forEach((function(e){Object.defineProperty(t.events,e,{value:new Event$1(e)})})),e&&a.forEach((function(a){var i=e[a];"function"==typeof i&&t.events[a].subscribe(i)})),["insertToken","removeToken","removeRange","replaceToken","replaceRange","composeRUD"].forEach((function(e){t.events[e].subscribe(t.updateContextsRanges)}))}function Tokenizer(e){this.tokens=[],this.registeredContexts={},this.contextCheckers=[],this.events={},this.registeredModifiers=[],initializeCoreEvents.call(this,e)}function isArabicChar(e){return/[\u0600-\u065F\u066A-\u06D2\u06FA-\u06FF]/.test(e)}function isIsolatedArabicChar(e){return/[\u0630\u0690\u0621\u0631\u0661\u0671\u0622\u0632\u0672\u0692\u06C2\u0623\u0673\u0693\u06C3\u0624\u0694\u06C4\u0625\u0675\u0695\u06C5\u06E5\u0676\u0696\u06C6\u0627\u0677\u0697\u06C7\u0648\u0688\u0698\u06C8\u0689\u0699\u06C9\u068A\u06CA\u066B\u068B\u06CB\u068C\u068D\u06CD\u06FD\u068E\u06EE\u06FE\u062F\u068F\u06CF\u06EF]/.test(e)}function isTashkeelArabicChar(e){return/[\u0600-\u0605\u060C-\u060E\u0610-\u061B\u061E\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED]/.test(e)}function isLatinChar(e){return/[A-z]/.test(e)}function isWhiteSpace(e){return/\s/.test(e)}function FeatureQuery(e){this.font=e,this.features={}}function SubstitutionAction(e){this.id=e.id,this.tag=e.tag,this.substitution=e.substitution}function lookupCoverage(e,t){if(!e)return-1;switch(t.format){case 1:return t.glyphs.indexOf(e);case 2:for(var a=t.ranges,i=0;i=n.start&&e<=n.end){var r=e-n.start;return n.index+r}}break;default:return-1}return-1}function singleSubstitutionFormat1(e,t){return-1===lookupCoverage(e,t.coverage)?null:e+t.deltaGlyphId}function singleSubstitutionFormat2(e,t){var a=lookupCoverage(e,t.coverage);return-1===a?null:t.substitute[a]}function lookupCoverageList(e,t){for(var a=[],i=0;i2)){var a=this.font,i=this._prepState;if(!i||i.ppem!==t){var n=this._fpgmState;if(!n){State.prototype=defaultState,(n=this._fpgmState=new State("fpgm",a.tables.fpgm)).funcs=[],n.font=a,exports.DEBUG&&(console.log("---EXEC FPGM---"),n.step=-1);try{exec(n)}catch(e){return console.log("Hinting error in FPGM:"+e),void(this._errorState=3)}}State.prototype=n,(i=this._prepState=new State("prep",a.tables.prep)).ppem=t;var r=a.tables.cvt;if(r)for(var s=i.cvt=new Array(r.length),o=t/a.unitsPerEm,l=0;l1))try{return execGlyph(e,i)}catch(e){return this._errorState<1&&(console.log("Hinting error:"+e),console.log("Note: further hinting errors are silenced")),void(this._errorState=1)}}},execGlyph=function(e,t){var a,i,n,r=t.ppem/t.font.unitsPerEm,s=r,o=e.components;if(State.prototype=t,o){var l=t.font;i=[],a=[];for(var c=0;c=0&&e0&&e<=this.lookahead.length:return this.lookahead[e-1];default:return null}},Tokenizer.prototype.rangeToText=function(e){if(e instanceof ContextRange)return this.getRangeTokens(e).map((function(e){return e.char})).join("")},Tokenizer.prototype.getText=function(){return this.tokens.map((function(e){return e.char})).join("")},Tokenizer.prototype.getContext=function(e){return this.registeredContexts[e]||null},Tokenizer.prototype.on=function(e,t){var a=this.events[e];return a?a.subscribe(t):null},Tokenizer.prototype.dispatch=function(e,t){var a=this,i=this.events[e];i instanceof Event$1&&i.subscribers.forEach((function(e){e.apply(a,t||[])}))},Tokenizer.prototype.registerContextChecker=function(e,t,a){if(this.getContext(e))return{FAIL:"context name '"+e+"' is already registered."};if("function"!=typeof t)return{FAIL:"missing context start check."};if("function"!=typeof a)return{FAIL:"missing context end check."};var i=new ContextChecker(e,t,a);return this.registeredContexts[e]=i,this.contextCheckers.push(i),i},Tokenizer.prototype.getRangeTokens=function(e){var t=e.startIndex+e.endOffset;return[].concat(this.tokens.slice(e.startIndex,t))},Tokenizer.prototype.getContextRanges=function(e){var t=this.getContext(e);return t?t.ranges:{FAIL:"context checker '"+e+"' is not registered."}},Tokenizer.prototype.resetContextsRanges=function(){var e=this.registeredContexts;for(var t in e)e.hasOwnProperty(t)&&(e[t].ranges=[])},Tokenizer.prototype.updateContextsRanges=function(){this.resetContextsRanges();for(var e=this.tokens.map((function(e){return e.char})),t=0;t=0;a--){var i=t[a],n=isIsolatedArabicChar(i),r=isTashkeelArabicChar(i);if(!n&&!r)return!0;if(n)return!1}return!1}function willConnectNext(e){if(isIsolatedArabicChar(e.current))return!1;for(var t=0;t=1.2&&(n.markGlyphSets=a.parsePointer(markGlyphSets)),n}var gdef={parse:parseGDEFTable},subtableParsers$1=new Array(10);function parseGposTable(e,t){var a=new Parser(e,t=t||0),i=a.parseVersion(1);return check.argument(1===i||1.1===i,"Unsupported GPOS table version "+i),1===i?{version:i,scripts:a.parseScriptList(),features:a.parseFeatureList(),lookups:a.parseLookupList(subtableParsers$1)}:{version:i,scripts:a.parseScriptList(),features:a.parseFeatureList(),lookups:a.parseLookupList(subtableParsers$1),variations:a.parseFeatureVariationsList()}}subtableParsers$1[1]=function(){var e=this.offset+this.relativeOffset,t=this.parseUShort();return 1===t?{posFormat:1,coverage:this.parsePointer(Parser.coverage),value:this.parseValueRecord()}:2===t?{posFormat:2,coverage:this.parsePointer(Parser.coverage),values:this.parseValueRecordList()}:void check.assert(!1,"0x"+e.toString(16)+": GPOS lookup type 1 format must be 1 or 2.")},subtableParsers$1[2]=function(){var e=this.offset+this.relativeOffset,t=this.parseUShort();check.assert(1===t||2===t,"0x"+e.toString(16)+": GPOS lookup type 2 format must be 1 or 2.");var a=this.parsePointer(Parser.coverage),i=this.parseUShort(),n=this.parseUShort();if(1===t)return{posFormat:t,coverage:a,valueFormat1:i,valueFormat2:n,pairSets:this.parseList(Parser.pointer(Parser.list((function(){return{secondGlyph:this.parseUShort(),value1:this.parseValueRecord(i),value2:this.parseValueRecord(n)}}))))};if(2===t){var r=this.parsePointer(Parser.classDef),s=this.parsePointer(Parser.classDef),o=this.parseUShort(),l=this.parseUShort();return{posFormat:t,coverage:a,valueFormat1:i,valueFormat2:n,classDef1:r,classDef2:s,class1Count:o,class2Count:l,classRecords:this.parseList(o,Parser.list(l,(function(){return{value1:this.parseValueRecord(i),value2:this.parseValueRecord(n)}})))}}},subtableParsers$1[3]=function(){return{error:"GPOS Lookup 3 not supported"}},subtableParsers$1[4]=function(){return{error:"GPOS Lookup 4 not supported"}},subtableParsers$1[5]=function(){return{error:"GPOS Lookup 5 not supported"}},subtableParsers$1[6]=function(){return{error:"GPOS Lookup 6 not supported"}},subtableParsers$1[7]=function(){return{error:"GPOS Lookup 7 not supported"}},subtableParsers$1[8]=function(){return{error:"GPOS Lookup 8 not supported"}},subtableParsers$1[9]=function(){return{error:"GPOS Lookup 9 not supported"}};var subtableMakers$1=new Array(10);function makeGposTable(e){return new table.Table("GPOS",[{name:"version",type:"ULONG",value:65536},{name:"scripts",type:"TABLE",value:new table.ScriptList(e.scripts)},{name:"features",type:"TABLE",value:new table.FeatureList(e.features)},{name:"lookups",type:"TABLE",value:new table.LookupList(e.lookups,subtableMakers$1)}])}var gpos={parse:parseGposTable,make:makeGposTable};function parseWindowsKernTable(e){var t={};e.skip("uShort");var a=e.parseUShort();check.argument(0===a,"Unsupported kern sub-table version."),e.skip("uShort",2);var i=e.parseUShort();e.skip("uShort",3);for(var n=0;n1&&console.warn("Only the first kern subtable is supported."),e.skip("uLong");var a=255&e.parseUShort();if(e.skip("uShort"),0===a){var i=e.parseUShort();e.skip("uShort",3);for(var n=0;n{pendingOperations.set(a,{resolve:i,reject:n}),worker.onmessage||(worker.onmessage=function(e){const{messageId:t,compressed:a,decompressed:i,error:n}=e.data,r=pendingOperations.get(t);r&&(n?r.reject(new Error(n)):a||i?r.resolve(a||i):r.reject(new Error("Unexpected response from worker")),pendingOperations.delete(t))},worker.onerror=function(e){for(const[t,a]of pendingOperations)a.reject(new Error(e.message)),pendingOperations.delete(t)}),worker.postMessage({messageId:a,data:e,action:t})}))}function terminateCompressionWorker(){worker.terminate(),worker=null}let IS_WORKER_SUPPORTED=!1;function canCreateWorkerFromBlob(){try{const e=new Blob(["self.onmessage = function() {}"]),t=URL.createObjectURL(e);new Worker(t).terminate(),URL.revokeObjectURL(t),IS_WORKER_SUPPORTED=!0}catch(e){IS_WORKER_SUPPORTED=!1}}canCreateWorkerFromBlob();var commonjsGlobal="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function getDefaultExportFromCjs(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var es6PromisePool={exports:{}};es6PromisePool.exports,function(e,t){e.exports=function(){var e=function(){this._listeners={}};e.prototype.addEventListener=function(e,t){this._listeners[e]=this._listeners[e]||[],this._listeners[e].indexOf(t)<0&&this._listeners[e].push(t)},e.prototype.removeEventListener=function(e,t){if(this._listeners[e]){var a=this._listeners[e].indexOf(t);a>=0&&this._listeners[e].splice(a,1)}},e.prototype.dispatchEvent=function(e){if(this._listeners[e.type]&&this._listeners[e.type].length)for(var t=this._listeners[e.type].slice(),a=0,i=t.length;aJSON.parse(await obsidian_module.request({url:"https://api.github.com/repos/zsviczian/obsidian-excalidraw-plugin/releases?per_page=15&page=1"})),t=(await e()).filter((e=>!e.draft&&!e.prerelease)).map((e=>({version:e.tag_name,published:new Date(e.published_at)}))).filter((e=>e.version.match(/^\d+\.\d+\.\d+$/))).sort(((e,t)=>t.published-e.published))[0].version;isVersionNewerThanOther(t,PLUGIN_VERSION)&&new obsidian_module.Notice(t$d("UPDATE_AVAILABLE")+` ${t}`)}catch(e){errorlog({where:"Utils/checkExcalidrawVersion",error:e})}versionUpdateCheckTimer=window.setTimeout((()=>{versionUpdateChecked=!1,versionUpdateCheckTimer=null}),288e5)}}function wrapTextAtCharLength(e,t,a=!1,i=0){if(!t)return e;let n="";if(a){for(const a of e.split("\n")){const e=a.match(new RegExp(`(.){1,${t}}`,"g"));n+=e?`${e.join("\n")}\n`:"\n"}return n.replace(/\n$/,"")}const r=new RegExp(`(.{1,${t}})(\\s+|$\\n?)|([^\\s]{1,${t+i}})(\\s+|$\\n?)?`,"gm"),s=e.matchAll(r);let o;for(;!(o=s.next()).done;){n+=o.value[1]?o.value[1].trimEnd():o.value[3].trimEnd();const e=(o.value[2]?o.value[2].split("\n").length-1:0)+(o.value[4]?o.value[4].split("\n").length-1:0);n+="\n".repeat(e),0===e&&(n+="\n")}return n.replace(/\n$/,"")}function rotatedDimensions(e){const t=getCommonBoundingBox([e]);return[t.minX,t.minY,t.maxX-t.minX,t.maxY-t.minY]}async function getDataURL(e,t){return new Promise(((a,i)=>{const n=new FileReader;n.onload=()=>{const e=n.result;a(e)},n.onerror=e=>i(e),n.readAsDataURL(new Blob([new Uint8Array(e)],{type:t}))}))}async function getFontDataURL(e,t,a,i){let n="",r="",s="";const o=e.metadataCache.getFirstLinkpathDest(t,a);if(o){const t=await e.vault.readBinary(o);let a="",l="";switch(o.extension){case"woff":a="application/font-woff",l="woff";break;case"woff2":a="font/woff2",l="woff2";break;case"ttf":a="font/ttf",l="truetype";break;case"otf":a="font/otf",l="opentype";break;default:a="application/octet-stream"}r=i??o.basename,s=await getDataURL(t,a);const c=s.split(";base64,",2);s=`${c[0]};charset=utf-8;base64,${c[1]}`,n=` @font-face {font-family: "${r}";src: url("${s}") format("${l}")}`}return{fontDef:n,fontName:r,dataURL:s}}function svgToBase64(e){const t=e.replaceAll(" "," "),a=encodeURIComponent(t).replace(/%([0-9A-F]{2})/g,((e,t)=>String.fromCharCode(parseInt(t,16))));return`data:image/svg+xml;base64,${btoa(a)}`}async function getBinaryFileFromDataURL(e){if(!e)return null;if(e.match(/^(https?|ftp):\/\/[^\s/$.?#].[^\s]*$/i)){const t=e,a=getURLImageExtension(t),i=getMimeType(a);e=await getDataURLFromURL(t,i)}const t=e.matchAll(/base64,(.*)/g).next();if(!t.value)return null;const a=window.atob(t.value[1]),i=a.length,n=new Uint8Array(i);for(let e=0;e"embeddable"===e.type))&&(n=JSON.parse(JSON.stringify(n)),n.filter((e=>"embeddable"===e.type)).forEach((t=>{t.link=generateEmbeddableLink(t.link,e.appState?.theme??"light")}))),n=i?updateElementLinksToObsidianLinks({elements:n,hostFile:i}):n;try{let r;if(t.isMask){const t=new CropImage(n,e.files);r=await t.getCroppedSVG(),t.destroy()}else r=await exportToSvg({elements:n.filter((e=>!0!==e.isDeleted)),appState:{...e.appState,exportBackground:t.withBackground,exportWithDarkMode:!!t.withTheme&&"light"!==e.appState?.theme,...t.frameRendering?{frameRendering:t.frameRendering}:{}},files:e.files,exportPadding:t.frameRendering?.enabled?0:a,exportingFrame:null,renderEmbeddables:!0,skipInliningFonts:t.skipInliningFonts});return r&&(r.addClass("excalidraw-svg"),i instanceof obsidian_module.TFile)&&getFileCSSClasses(i).forEach((e=>r.addClass(e))),r}catch(e){return null}}function filterFiles(e){let t={};return Object.entries(e).forEach((([e,a])=>{a.dataURL.startsWith("http")||(t[e]=a)})),t}async function getPNG(e,t,a,i=1){try{if(t.isMask){const t=new CropImage(e.elements,e.files),a=await t.getCroppedPNG();return t.destroy(),a}return await exportToBlob({elements:e.elements.filter((e=>!0!==e.isDeleted)),appState:{...e.appState,exportBackground:t.withBackground,exportWithDarkMode:!!t.withTheme&&"light"!==e.appState?.theme,...t.frameRendering?{frameRendering:t.frameRendering}:{}},files:filterFiles(e.files),exportPadding:t.frameRendering?.enabled?0:a,mimeType:"image/png",getDimensions:(e,t)=>({width:e*i,height:t*i,scale:i})})}catch(e){return new obsidian_module.Notice(t$d("ERROR_PNG_TOO_LARGE")),errorlog({where:"Utils.getPNG",error:e}),null}}async function getQuickImagePreview(e,t,a){if(!e.settings.displayExportedImageIfAvailable)return null;const i=getIMGFilename(t,a),n=e.app.vault.getAbstractFileByPath(i);return n&&n instanceof obsidian_module.TFile?"png"===a?await e.app.vault.readBinary(n):await e.app.vault.read(n):null}async function getImageSize(e){return new Promise(((t,a)=>{const i=new Image;i.onload=()=>{t({height:i.naturalHeight,width:i.naturalWidth})},i.onerror=a,i.src=e}))}function addAppendUpdateCustomData(e,t){if(!t)return e;e.customData||(e.customData={});for(const a in t)void 0!==t[a]?e.customData[a]=t[a]:delete e.customData[a];return e}function scaleLoadedImage(e,t){let a=!1;if(!t||!e)return{dirty:a,scene:e};for(const i of t.filter((e=>{if(!Boolean(EXCALIDRAW_PLUGIN))return!0;const t=EXCALIDRAW_PLUGIN.filesMaster.get(e.id);if(!t)return!0;const a=EXCALIDRAW_PLUGIN.app.vault.getAbstractFileByPath(t.path.replace(/#.*$/,"").replace(/\|.*$/,""));return!(!a||a instanceof obsidian_module.TFolder)&&("md"===a.extension||EXCALIDRAW_PLUGIN.isExcalidrawFile(a))}))){const[t,n]=[i.size.width,i.size.height],r=t/n;e.elements.filter((e=>"image"===e.type&&e.fileId===i.id)).forEach((e=>{const[s,o]=[e.width,e.height],l=i.shouldScale,c=e.crop,d=Boolean(c);if((e.customData?.isAnchored&&i.shouldScale||!e.customData?.isAnchored&&!i.shouldScale)&&(addAppendUpdateCustomData(e,i.shouldScale?{isAnchored:!1}:{isAnchored:!0}),a=!0),d){if(c.naturalWidth!==t||c.naturalHeight!==n){if(a=!0,e.crop.y+=(n-c.naturalHeight)/2,tt&&(e.crop.x=(t-c.width)/2)}if(nn&&(e.crop.y=(n-c.height)/2)}e.crop.naturalWidth=t,e.crop.naturalHeight=n,e.crop.width===t&&e.crop.height===n&&(e.crop=null)}}else if(l){if(r!==s/o){a=!0;const i=Math.sqrt(s*o*n/t),r=Math.sqrt(s*o*t/n);e.height=i,e.width=r,e.y+=(o-i)/2,e.x+=(s-r)/2}}else s===t&&o===n||(a=!0,e.height=n,e.width=t,e.y+=(o-n)/2,e.x+=(s-t)/2)}))}return{dirty:a,scene:e}}function setDocLeftHandedMode(e,t){const a=t.createElement("style");a.id="excalidraw-left-handed",a.textContent=".excalidraw .App-bottom-bar{justify-content:flex-end;}";const i=t.getElementById(a.id);i&&t.head.removeChild(i),e&&t.head.appendChild(a)}function setLeftHandedMode(e){const t=new Set;EXCALIDRAW_PLUGIN.app.workspace.iterateAllLeaves((a=>{const i=DEVICE.isMobile?document:a.view.containerEl.ownerDocument;i&&(t.has(i)||(t.add(i),setDocLeftHandedMode(e,i)))}))}function getLinkParts(e,t){const a=e.match(/(^[^#\|]*)#?(\^)?([^\|]*)?\|?(\d*)x?(\d*)/),i="^"===a[2];return{original:e,path:t&&""===a[1]?t.path:a[1],isBlockRef:i,ref:a[3]?.match(/^page=\d*$/i)?a[3]:i?cleanBlockRef(a[3]):cleanSectionHeading(a[3]),width:a[4]?parseInt(a[4]):void 0,height:a[5]?parseInt(a[5]):void 0,page:parseInt(a[3]?.match(/page=(\d*)/)?.[1])}}async function compressAsync(e){return await runCompressionWorker(e,"compress")}function compress(e){const t=LZString.compressToBase64(e);let a="";for(let e=0;e0)return e}}return e.settings.pngExportScale}function isVersionNewerThanOther(e,t){if(!e||!t)return!0;const a=e.match(/(\d*)\.(\d*)\.(\d*)/),i=t.match(/(\d*)\.(\d*)\.(\d*)/);return Boolean(a&&4===a.length&&i&&4===i.length&&!(isNaN(parseInt(a[1]))||isNaN(parseInt(a[2]))||isNaN(parseInt(a[3])))&&!(isNaN(parseInt(i[1]))||isNaN(parseInt(i[2]))||isNaN(parseInt(i[3])))&&(parseInt(a[1])>parseInt(i[1])||parseInt(a[1])>=parseInt(i[1])&&parseInt(a[2])>parseInt(i[2])||parseInt(a[1])>=parseInt(i[1])&&parseInt(a[2])>=parseInt(i[2])&&parseInt(a[3])>parseInt(i[3])))}function getEmbeddedFilenameParts(e){const t=e?.match(/([^#\^]*)((#\^)(group=|area=|frame=|clippedframe=|taskbone)?([^\|]*)|(#)(group=|area=|frame=|clippedframe=|taskbone)?([^\^\|]*))(.*)/);return t?{filepath:t[1],hasBlockref:Boolean(t[3]),hasGroupref:"group="===t[4]||"group="===t[7],hasTaskbone:"taskbone"===t[4]||"taskbone"===t[7],hasArearef:"area="===t[4]||"area="===t[7],hasFrameref:"frame="===t[4]||"frame="===t[7],hasClippedFrameref:"clippedframe="===t[4]||"clippedframe="===t[7],blockref:t[5],hasSectionref:Boolean(t[6]),sectionref:t[8],linkpartReference:t[2],linkpartAlias:t[9]}:{filepath:e,hasBlockref:!1,hasGroupref:!1,hasTaskbone:!1,hasArearef:!1,hasFrameref:!1,hasClippedFrameref:!1,blockref:"",hasSectionref:!1,sectionref:"",linkpartReference:"",linkpartAlias:""}}function isImagePartRef(e){return e.hasGroupref||e.hasArearef||e.hasFrameref||e.hasClippedFrameref}function fragWithHTML(e){return createFragment((t=>t.createDiv().innerHTML=e))}function errorlog(e){console.error({plugin:"Excalidraw",...e})}async function sleep$1(e){return new Promise((t=>setTimeout(t,e)))}function _getContainerElement(e,t){return e&&t?.elements&&"text"===e.type&&e.containerId?getContainerElement(e,arrayToMap(t.elements)):null}function arrayToMap(e){return e instanceof Map?e:e.reduce(((e,t)=>(e.set("string"==typeof t?t:t.id,t),e)),new Map)}function updateFrontmatterInString(e,t){if(!e||!t)return e;for(const a of t){const t=new RegExp(`${a[0]}:\\s.*\\n`,"g");e=e.match(t)?e.replaceAll(t,`${a[0]}: ${a[1]}\n`):e.replace(/^---\n/,`---\n${a[0]}: ${a[1]}\n`)}return e}function isHyperLink(e){return e&&!e.includes("\n")&&!e.includes("\r")&&e.match(/^https?:(\d*)?\/\/[^\s]*$/)}function isContainer(e){return"arrow"!==e.type&&e.boundElements?.map((e=>e.type)).includes("text")}function hyperlinkIsImage(e){isHyperLink(e);const t=e.split("?")[0];return IMAGE_TYPES.contains(t.substring(t.lastIndexOf(".")+1))}function hyperlinkIsYouTubeLink(e){return isHyperLink(e)&&(e.startsWith("https://youtu.be")||e.startsWith("https://www.youtube.com")||e.startsWith("https://youtube.com")||e.startsWith("https//www.youtu.be"))&&null!==e.match(/(youtu.be\/|v=)([^?\/\&]*)/)}async function getYouTubeThumbnailLink(e){const t=e.match(/(youtu.be\/|v=)([^?\/\&]*)/);if(!t||!t[2])return null;const a=t[2];let i=`https://i.ytimg.com/vi/${a}/maxresdefault.jpg`,n=await obsidian_module.requestUrl({url:i,method:"get",contentType:"image/jpeg",throw:!1});return n&&200===n.status?i:(i=`https://i.ytimg.com/vi/${a}/hq720.jpg`,n=await obsidian_module.requestUrl({url:i,method:"get",contentType:"image/jpeg",throw:!1}),n&&200===n.status?i:(i=`https://i.ytimg.com/vi/${a}/mqdefault.jpg`,n=await obsidian_module.requestUrl({url:i,method:"get",contentType:"image/jpeg",throw:!1}),n&&200===n.status?i:`https://i.ytimg.com/vi/${a}/default.jpg`))}function isCallerFromTemplaterPlugin(e){const t=e.split("\n");for(const e of t)if(e.trim().startsWith("at Templater."))return!0;return!1}function convertSVGStringToElement(e){const t=document.createElement("div");t.innerHTML=e;const a=t.firstChild;if(a instanceof SVGSVGElement)return a}function escapeRegExp(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function addIframe(e,t,a,i="settings"){e.createDiv({cls:`excalidraw-videoWrapper ${i}`}).createEl("iframe",{attr:{allowfullscreen:!0,allow:"encrypted-media;picture-in-picture",frameborder:"0",title:"YouTube video player",src:"https://www.youtube.com/embed/"+t+(a?"?start="+a:""),sandbox:"allow-forms allow-presentation allow-same-origin allow-scripts allow-modals"}})}async function getFontMetrics(e,t){try{const a=await opentype.load(e),i=a.unitsPerEm,n=a.ascender,r=a.descender;return{unitsPerEm:i,ascender:n,descender:r,lineHeight:(n-r)/i,fontName:a.names.fontFamily.en??t}}catch(e){return console.error("Error loading font:",e),null}}function cropCanvas(e,t,a={width:t.width,height:t.height}){const i=createEl("canvas");return i.width=a.width,i.height=a.height,i.getContext("2d").drawImage(e,t.left,t.top,t.width,t.height,0,0,a.width,a.height),i}async function promiseTry(e,...t){return new Promise((a=>{a(e(...t))}))}new Random(Date.now());class PromisePool{pool;entries={};constructor(e,t){this.pool=new Pool(e,t)}all(){const e=e=>{if(e.data.result){const[t,a]=e.data.result;this.entries[t]=a}};return this.pool.addEventListener("fulfilled",e),this.pool.start().then((()=>(setTimeout((()=>{this.pool.removeEventListener("fulfilled",e)})),Object.values(this.entries))))}}class WeakArray{weakArray=[];constructor(){}push(e){this.weakArray.push(new WeakRef(e))}forEach(e){this.weakArray.forEach(((t,a)=>{const i=t.deref();i&&e(i,a)}))}removeObjects(e){this.weakArray=this.weakArray.filter((t=>{const a=t.deref();return a&&!e.has(a)}))}clear(){this.weakArray=[]}}class ScriptEngine{plugin;app;scriptPath;scriptIconMap;eaInstances=new WeakArray;constructor(e){this.plugin=e,this.app=e.app,this.scriptIconMap={},this.loadScripts(),this.registerEventHandlers()}removeViewEAs(e){const t=new Set;this.eaInstances.forEach((a=>{a.targetView===e&&(t.add(a),a.destroy())})),this.eaInstances.removeObjects(t)}destroy(){this.eaInstances.forEach((e=>e.destroy())),this.eaInstances.clear(),this.eaInstances=null,this.scriptIconMap=null,this.plugin=null,this.scriptPath=null}handleSvgFileChange(e){if(!e.endsWith(".svg"))return;const t=this.app.vault.getAbstractFileByPath(getIMGFilename(e,"md"));t&&t instanceof obsidian_module.TFile&&(this.unloadScript(this.getScriptName(t),t.path),this.loadScript(t))}async deleteEventHandler(e){e instanceof obsidian_module.TFile&&e.path.startsWith(this.scriptPath)&&(this.unloadScript(this.getScriptName(e),e.path),this.handleSvgFileChange(e.path))}async createEventHandler(e){e instanceof obsidian_module.TFile&&e.path.startsWith(this.scriptPath)&&(this.loadScript(e),this.handleSvgFileChange(e.path))}async renameEventHandler(e,t){if(!(e instanceof obsidian_module.TFile))return;const a=t.startsWith(this.scriptPath),i=e.path.startsWith(this.scriptPath);a&&(this.unloadScript(this.getScriptName(t),t),this.handleSvgFileChange(t)),i&&(this.loadScript(e),this.handleSvgFileChange(e.path))}registerEventHandlers(){this.plugin.registerEvent(this.app.vault.on("delete",(e=>this.deleteEventHandler(e)))),this.plugin.registerEvent(this.app.vault.on("create",(e=>this.createEventHandler(e)))),this.plugin.registerEvent(this.app.vault.on("rename",((e,t)=>this.renameEventHandler(e,t))))}updateScriptPath(){this.scriptPath!==this.plugin.settings.scriptFolderPath&&(this.scriptPath&&this.unloadScripts(),this.loadScripts())}getListofScripts(){if(this.scriptPath=this.plugin.settings.scriptFolderPath,this.scriptPath&&(this.scriptPath=obsidian_module.normalizePath(this.scriptPath),this.app.vault.getAbstractFileByPath(this.scriptPath)))return this.app.vault.getFiles().filter((e=>e.path.startsWith(this.scriptPath+"/")&&"md"===e.extension))}loadScripts(){this.getListofScripts()?.forEach((e=>this.loadScript(e)))}getScriptName(e){let t="",a="";e instanceof obsidian_module.TFile?(t=e.basename,a=e.path):(t=splitFolderAndFilename(e).basename,a=e);const i=a.split(`${this.scriptPath}/`)[1];i||console.warn(`ScriptEngine.getScriptName unexpected basename: ${t}; path: ${a}`);const n=i?.lastIndexOf("/");return n>-1?i.substring(0,n+1)+t:t}async addScriptIconToMap(e,t){const a=getIMGFilename(e,"svg"),i=this.app.vault.getAbstractFileByPath(a),n=i&&i instanceof obsidian_module.TFile?await this.app.vault.read(i):null;this.scriptIconMap={...this.scriptIconMap};const r=splitFolderAndFilename(t);this.scriptIconMap[e]={name:r.filename,group:"/"===r.folderpath?"":r.folderpath,svgString:n},this.updateToolPannels()}loadScript(e){if("md"!==e.extension)return;const t=this.getScriptName(e);this.addScriptIconToMap(e.path,t),this.plugin.addCommand({id:t,name:`(Script) ${t}`,checkCallback:a=>{if(a)return Boolean(this.app.workspace.getActiveViewOfType(ExcalidrawView));const i=this.app.workspace.getActiveViewOfType(ExcalidrawView);return!!i&&((async()=>{const a=await this.app.vault.read(e);a&&this.executeScript(i,a,t,e)})(),!0)}})}unloadScripts(){const e=this.app.vault.getFiles().filter((e=>e.path.startsWith(this.scriptPath)));e.forEach((e=>{this.unloadScript(this.getScriptName(e),e.path)}))}unloadScript(e,t){if(!t.endsWith(".md"))return;delete this.scriptIconMap[t],this.scriptIconMap={...this.scriptIconMap},this.updateToolPannels();const a=`${PLUGIN_ID}:${e}`;this.app.commands.commands[a]&&delete this.app.commands.commands[a]}async executeScript(e,t,a,i){if(!e||!t||!a)return;e.getScene().elements.some((e=>!e.isDeleted&&"text"===e.type&&e.id.length>8))&&await e.save(!1,!0),t=t.replace(/^---.*?---\n/gs,"");const n=getEA(e);this.eaInstances.push(n),n.activeScript=a;const r=Object.getPrototypeOf((async()=>{})).constructor;let s=null;return s=await new r("ea","utils",t)(n,{inputPrompt:(t,a,i,n,r,s,o,l)=>ScriptEngine.inputPrompt(e,this.plugin,this.app,t,a,i,n,r,s,o,l),suggester:(e,t,a,i)=>ScriptEngine.suggester(this.app,e,t,a,i),scriptFile:i}),s}updateToolPannels(){getExcalidrawViews(this.app).forEach((e=>{e.toolsPanelRef?.current?.updateScriptIconMap(this.scriptIconMap)}))}static async inputPrompt(e,t,a,i,n,r,s,o,l,c,d){try{return await GenericInputPrompt.Prompt(e,t,a,i,n,r,s,o,l,c,d)}catch{return}}static async suggester(e,t,a,i,n){try{return await GenericSuggester.Suggest(e,t,a,i,n)}catch(e){return}}}async function insertImageToView(e,t,a,i,n=!0,r=!1){n&&e.clear(),e.style.strokeColor="transparent",e.style.backgroundColor="transparent";const s=e.getExcalidrawAPI();e.canvas.theme=s.getAppState().theme;const o=await e.addImage(t.x,t.y,a,i);return n&&await e.addElementsToView(r,!0,!0),o}async function insertEmbeddableToView(e,t,a,i,n=!0){n&&e.clear();const r=e.getExcalidrawAPI().getAppState();if(e.plugin.settings.embeddableMarkdownDefaults.backgroundMatchElement?e.style.backgroundColor=r.currentItemBackgroundColor:e.style.backgroundColor="transparent",e.plugin.settings.embeddableMarkdownDefaults.borderMatchElement?e.style.strokeColor=r.currentItemStrokeColor:e.style.strokeColor="transparent",a&&(IMAGE_TYPES.contains(a.extension)||e.isExcalidrawFile(a))&&!ANIMATED_IMAGE_TYPES.contains(a.extension))return await insertImageToView(e,t,i??a,void 0,n);{const r=e.addEmbeddable(t.x,t.y,MAX_IMAGE_SIZE,MAX_IMAGE_SIZE,i,a);return n&&await e.addElementsToView(!1,!0,!0),r}}function getLinkTextFromLink(e){if(!e)return;if(e.match(REG_LINKINDEX_HYPERLINK))return;const t=REGEX_LINK.getRes(e).next();if(!t.value)return;const a=REGEX_LINK.getLink(t);return a.match(REG_LINKINDEX_HYPERLINK)?void 0:a}function openTagSearch(e,t,a){const i=REGEX_TAGS.getResList(e);if(!i.length||!i[0].value||i[0].value.length<2)return;const n=`tag:${i[0].value[1]}`,r=t.internalPlugins.getPluginById("global-search");if(r){const e=r.instance;e&&e.openGlobalSearch(n)}a&&a.isFullscreen()&&a.exitFullscreen()}function getLinkFromMarkdownLink(e){const t=/^\[[^\]]*]\(([^\)]*)\)/.exec(e);return t?t[1]:e}function openExternalLink(e,t,a){if((e=getLinkFromMarkdownLink(e)).match(/^cmd:\/\/.*/)){const a=e.replace("cmd://","");return t.commands.executeCommandById(a),!0}return!(e.startsWith("obsidian://")||!e.match(REG_LINKINDEX_HYPERLINK)||(window.open(e,"_blank"),0))}function parseObsidianLink(e,t,a=!0,i=!0){if(!e)return!1;if(e=getLinkFromMarkdownLink(e),!e?.startsWith("obsidian://"))return!1;const n=new URL(e),r=n.pathname.slice(2),s={};if(n.searchParams.forEach(((e,t)=>{s[t]=decodeURIComponent(e)})),"open"===r&&s.vault===t.vault.getName()){const e=s.file,i=t.metadataCache.getFirstLinkpathDest(e,"");if(i&&i instanceof obsidian_module.TFile)return a?`[[${i.path}]]`:i.path}return i&&window.open(e,"_blank"),!0}function getExcalidrawFileForwardLinks(e,t,a){let i="";const n=e.metadataCache.getLinks()[t.path];if(n&&n.length>0){const r=new Set;n.forEach((i=>{const n=getLinkParts(i.link),s=e.metadataCache.getFirstLinkpathDest(n.path,t.path);if(s&&s.path!==t.path){if(a.has(s.path))return;a.add(s.path),r.add(`[[${s.path}${n.ref?"#"+n.ref:""}|Second Order Link: ${s.basename}]]`)}})),i=[...r].join(" ")}return i}function getFrameBasedOnFrameNameOrId(e,t){const a=t.filter((e=>"frame"===e.type)).map(((e,t)=>({el:e,id:e.id,name:e.name??`Frame ${String(t+1).padStart(2,"0")}`}))).filter((t=>t.id===e||t.name===e)).map((e=>e.el));return 1===a.length?a[0]:null}async function addBackOfTheNoteCard(e,t,a=!0,i,n){const r=e.data,s=getExcalidrawMarkdownHeaderSection(r),o=r.split(s)[1],l=o&&o.startsWith("%%"),c=s.match(/#\n+$/m),d=Boolean(c);e.data=r.replace(s,(d?s.substring(0,s.length-c[0].length):s)+`\n# ${t}\n\n${i?i+"\n\n":""}${l||d?"#\n":""}`),await e.forceSave(!0);let h,p=0;for(await sleep(200);p++<10&&!(h=(await e.app.metadataCache.blockCache.getForFile({isCancelled:()=>!1},e.file)).blocks.filter((e=>e.display&&"heading"===e.node?.type)).filter((e=>!MD_EX_SECTIONS.includes(e.display))).map((e=>cleanSectionHeading(e.display))).find((e=>e===t)));)await sleep(200);const u=getEA(e),m=u.addEmbeddable(0,0,400,500,`[[${e.file.path}#${t}]]`,void 0,n);await u.addElementsToView(!0,!1,!0);const f=e.excalidrawAPI,g=u.getViewElements().find((e=>e.id===m));return f.selectElements([g]),a&&window.setTimeout((()=>{f.updateScene({appState:{activeEmbeddable:{element:g,state:"active"}},storeAction:"update"}),h&&e.getEmbeddableLeafElementById(g.id)?.editNode?.()})),u.destroy(),g.id}function renderContextMenuAction(e,t,a,i){return e.createElement("li",{key:nanoid$1(),onClick:()=>{i((()=>a()))}},e.createElement("button",{className:"context-menu-item"},e.createElement("div",{className:"context-menu-item__label"},t),e.createElement("kbd",{className:"context-menu-item__shortcut"},"")))}function tmpBruteForceCleanup(e){window.setTimeout((()=>{e&&Object.keys(e).forEach((t=>{delete e[t]}))}),500)}function isTextImageTransclusion(e,t,a){const i=e.trim().matchAll(/^!\[\[([^|\]]*)?.*?]]$|^!\[[^\]]*?]\((.*?)\)$/g).next();if(i?.value?.[0]){const e=i.value[1]??i.value[2],n=t.app.metadataCache.getFirstLinkpathDest(e?.split("#")[0],t.file.path);if(t.file===n)return e?.split("#")[1]&&!isImagePartRef(getEmbeddedFilenameParts(e))||new obsidian_module.Notice(t$d("RECURSIVE_INSERT_ERROR")),!1;if(n&&n instanceof obsidian_module.TFile){if(t.plugin.isExcalidrawFile(n)&&e?.split("#")[1]&&!isImagePartRef(getEmbeddedFilenameParts(e)))return!1;if("md"!==n.extension||t.plugin.isExcalidrawFile(n))return a(e,n),!0;new obsidian_module.Notice(t$d("USE_INSERT_FILE_MODAL"),5e3)}}return!1}function displayFontMessage(e){const t=new obsidian_module.Modal(e);t.onOpen=()=>{const e=t.contentEl;e.createEl("h2",{text:t$d("FONT_INFO_TITLE")});const a=t$d("FONT_INFO_DETAILED");e.createDiv({cls:"release-notes"}).innerHTML=a},t.open()}async function toggleImageAnchoring(e,t,a,i){const n=getEA(t);let r=t.getViewElements().find((t=>t.id===e.id));if(r){if(n.copyViewElementsToEAforEditing([r]),r=n.getElements()[0],r.customData||(r.customData={}),r.customData.isAnchored=a,a){const{height:e,width:t}=i.size,a=t-r.width,n=e-r.height;r.height=e,r.width=t,r.x-=a/2,r.y-=n/2}await n.addElementsToView(!1,!1),n.destroy()}else n.destroy()}class Prompt extends obsidian_module.Modal{prompt_text;default_value;placeholder;prompt_desc;promptEl;resolve;constructor(e,t,a,i,n){super(e),this.prompt_text=t,this.default_value=a,this.placeholder=i,this.prompt_desc=n}onOpen(){this.titleEl.setText(this.prompt_text),this.createForm()}onClose(){this.contentEl.empty()}createForm(){let e=this.contentEl.createDiv();e.addClass("excalidraw-prompt-div"),this.prompt_desc&&(e=e.createDiv(),e.style.width="100%",e.createEl("p").innerHTML=this.prompt_desc);const t=e.createEl("form");t.addClass("excalidraw-prompt-form"),t.type="submit",t.onsubmit=e=>{e.preventDefault(),this.resolve(this.promptEl.value),this.close()},this.promptEl=t.createEl("input"),this.promptEl.type="text",this.promptEl.placeholder=this.placeholder,this.promptEl.value=this.default_value??"",this.promptEl.addClass("excalidraw-prompt-input"),this.promptEl.select()}async openAndGetValue(e){this.resolve=e,this.open()}}class GenericInputPrompt extends obsidian_module.Modal{header;waitForClose;view;plugin;resolvePromise;rejectPromise;didSubmit=!1;inputComponent;input;buttons;lines=1;displayEditorButtons=!1;placeholder;selectionStart=0;selectionEnd=0;selectionUpdateTimer=0;customComponents;blockPointerInputOutsideModal=!1;static Prompt(e,t,a,i,n,r,s,o,l,c,d){return new GenericInputPrompt(e,t,a,i,n,r,s,o,l,c,d).waitForClose}constructor(e,t,a,i,n,r,s,o,l,c,d){super(a),this.header=i,this.view=e,this.plugin=t,this.placeholder=n,this.input=r,this.buttons=s,this.lines=o??1,this.displayEditorButtons=this.lines>1&&(l??!1),this.customComponents=c,this.blockPointerInputOutsideModal=d??!1,this.waitForClose=new Promise(((e,t)=>{this.resolvePromise=e,this.rejectPromise=t})),this.display(),this.inputComponent.inputEl.focus(),this.open()}display(){this.contentEl.empty(),this.blockPointerInputOutsideModal&&(this.bgEl.style.pointerEvents=this.blockPointerInputOutsideModal?"none":"auto"),this.titleEl.textContent=this.header;const e=this.contentEl.createDiv();this.inputComponent=this.createInputField(e,this.placeholder,this.input),this.customComponents?.(e),this.createButtonBar(e)}createInputField(e,t,a){const i=new obsidian_module.TextAreaComponent(e);i.inputEl.style.width="100%",i.inputEl.style.height=2*this.lines+"em",1===this.lines&&(i.inputEl.style.resize="none",i.inputEl.style.overflow="hidden"),i.setPlaceholder(t??"").setValue(a??"").onChange((e=>this.input=e));const n=()=>{this.selectionUpdateTimer=this.view.ownerWindow.setTimeout((()=>{this.selectionStart=this.inputComponent.inputEl.selectionStart,this.selectionEnd=this.inputComponent.inputEl.selectionEnd}),30)};return i.inputEl.addEventListener("keydown",this.keyDownCallback.bind(this)),i.inputEl.addEventListener("keyup",n.bind(this)),i.inputEl.addEventListener("pointerup",n.bind(this)),i.inputEl.addEventListener("touchend",n.bind(this)),i.inputEl.addEventListener("input",n.bind(this)),i.inputEl.addEventListener("paste",n.bind(this)),i.inputEl.addEventListener("cut",n.bind(this)),i.inputEl.addEventListener("select",n.bind(this)),i.inputEl.addEventListener("selectionchange",n.bind(this)),i}createButton(e,t,a,i="",n="5px"){const r=new obsidian_module.ButtonComponent(e);return r.buttonEl.style.padding="0.5em",r.buttonEl.style.marginLeft=n,r.setTooltip(i),r.setButtonText(t).onClick(a),r}createButtonBar(e){const t=e.createDiv();t.style.display="flex",t.style.justifyContent="space-between",t.style.marginTop="1rem";const a=t.createDiv(),i=t.createDiv();if(this.buttons&&this.buttons.length>0){let e=null;for(const t of this.buttons){const a=new obsidian_module.ButtonComponent(i);a.buttonEl.style.marginLeft="5px",t.tooltip&&a.setTooltip(t.tooltip),a.setButtonText(t.caption).onClick((e=>{const a=t.action(this.input);a&&(this.input=a),this.submit()})),e=e??a}e&&(e.setCta(),e.buttonEl.style.marginRight="0")}else this.createButton(i,"✅",this.submitClickCallback.bind(this)).setCta().buttonEl.style.marginRight="0";this.createButton(i,"❌",this.cancelClickCallback.bind(this),t$d("PROMPT_BUTTON_CANCEL")),this.displayEditorButtons&&(this.createButton(a,"⏎",(()=>this.insertStringBtnClickCallback("\n")),t$d("PROMPT_BUTTON_INSERT_LINE"),"0"),this.createButton(a,"⌫",this.delBtnClickCallback.bind(this),"Delete"),this.createButton(a,"⎵",(()=>this.insertStringBtnClickCallback(" ")),t$d("PROMPT_BUTTON_INSERT_SPACE")),this.view&&this.createButton(a,"🔗",this.linkBtnClickCallback.bind(this),t$d("PROMPT_BUTTON_INSERT_LINK")),this.createButton(a,"🔠",this.uppercaseBtnClickCallback.bind(this),t$d("PROMPT_BUTTON_UPPERCASE")))}linkBtnClickCallback=()=>{this.view.ownerWindow.clearTimeout(this.selectionUpdateTimer),this.plugin.insertLinkDialog.start(this.view.file.path,(e=>{const t=this.inputComponent.inputEl.value;this.selectionStart>0&&" "!==t.slice(this.selectionStart-1,this.selectionStart)&&(e=" "+e),this.selectionStart{this.view.ownerWindow.clearTimeout(this.selectionUpdateTimer);const t=this.inputComponent.inputEl.value.slice(0,this.selectionStart)+e+this.inputComponent.inputEl.value.slice(this.selectionStart);this.inputComponent.inputEl.value=t,this.input=this.inputComponent.inputEl.value,this.inputComponent.inputEl.focus(),this.selectionStart=this.selectionStart+1,this.selectionEnd=this.selectionStart,this.inputComponent.inputEl.setSelectionRange(this.selectionStart,this.selectionEnd)};delBtnClickCallback=()=>{if(this.view.ownerWindow.clearTimeout(this.selectionUpdateTimer),0===this.input.length)return;const e=this.selectionEnd>this.selectionStart?this.selectionStart:this.selectionStart>0?this.selectionStart-1:0,t=this.selectionEnd,a=this.inputComponent.inputEl.value.slice(0,e)+this.inputComponent.inputEl.value.slice(t);this.inputComponent.inputEl.value=a,this.input=this.inputComponent.inputEl.value,this.inputComponent.inputEl.focus(),this.selectionStart=e,this.selectionEnd=e,this.inputComponent.inputEl.setSelectionRange(e,e)};uppercaseBtnClickCallback=()=>{if(this.view.ownerWindow.clearTimeout(this.selectionUpdateTimer),this.selectionEnd===this.selectionStart)return;const e=this.inputComponent.inputEl.value.slice(0,this.selectionStart)+this.inputComponent.inputEl.value.slice(this.selectionStart,this.selectionEnd).toUpperCase()+this.inputComponent.inputEl.value.slice(this.selectionEnd);this.inputComponent.inputEl.value=e,this.input=this.inputComponent.inputEl.value,this.inputComponent.inputEl.focus(),this.inputComponent.inputEl.setSelectionRange(this.selectionStart,this.selectionEnd)};submitClickCallback(){this.submit()}cancelClickCallback(){this.cancel()}keyDownCallback=e=>{("Enter"===e.key&&1===this.lines||isWinCTRLorMacCMD(e)&&"Enter"===e.key)&&(e.preventDefault(),this.submit()),this.displayEditorButtons&&"k"===e.key&&isWinCTRLorMacCMD(e)&&(e.preventDefault(),this.linkBtnClickCallback())};submit(){this.didSubmit=!0,this.close()}cancel(){this.close()}resolveInput(){this.didSubmit?this.resolvePromise(this.input):this.rejectPromise("No input given.")}removeInputListener(){this.inputComponent?.inputEl?.removeEventListener("keydown",this.keyDownCallback)}onOpen(){super.onOpen(),this.inputComponent.inputEl.focus(),this.inputComponent.inputEl.select()}onClose(){super.onClose(),this.resolveInput(),this.removeInputListener()}}class GenericSuggester extends obsidian_module.FuzzySuggestModal{displayItems;items;hint;instructions;resolvePromise;rejectPromise;promise;resolved;static Suggest(e,t,a,i,n){return new GenericSuggester(e,t,a,i,n).promise}constructor(e,t,a,i,n){super(e),this.displayItems=t,this.items=a,this.hint=i,this.instructions=n,this.limit=20,this.setPlaceholder(this.hint??""),n&&this.setInstructions(this.instructions),this.promise=new Promise(((e,t)=>{this.resolvePromise=e,this.rejectPromise=t})),this.open()}getItemText(e){return this.displayItems[this.items.indexOf(e)]}getItems(){return this.items}selectSuggestion(e,t){this.resolved=!0,super.selectSuggestion(e,t)}onChooseItem(e){this.resolved=!0,this.resolvePromise(e)}onClose(){super.onClose(),this.resolved||this.rejectPromise(this.inputEl.value)}}class NewFileActions extends obsidian_module.Modal{waitForClose;resolvePromise;rejectPromise;newFile=null;plugin;path;keys;view;openNewFile;parentFile;sourceElement;constructor({plugin:e,path:t,keys:a,view:i,openNewFile:n=!0,parentFile:r,sourceElement:s}){super(e.app),this.plugin=e,this.path=t,this.keys=a,this.view=i,this.openNewFile=n,this.sourceElement=s,this.parentFile=r??i.file,this.waitForClose=new Promise(((e,t)=>{this.resolvePromise=e,this.rejectPromise=t}))}onOpen(){this.createForm()}openFile(e){this.newFile=e,e&&this.openNewFile&&openLeaf({plugin:this.plugin,fnGetLeaf:()=>getLeaf(this.plugin,this.view.leaf,this.keys),file:e,openState:{active:!0}})}onClose(){super.onClose(),this.resolvePromise(this.newFile),this.app=null,this.plugin=null,this.view=null,this.parentFile=null,this.sourceElement=null}createForm(){this.titleEl.setText(t$d("PROMPT_TITLE_NEW_FILE")),this.contentEl.createDiv({cls:"excalidraw-prompt-center",text:t$d("PROMPT_FILE_DOES_NOT_EXIST")}),this.contentEl.createDiv({cls:"excalidraw-prompt-center filepath",text:this.path}),this.contentEl.createDiv({cls:"excalidraw-prompt-center"},(e=>{e.style.textAlign="right";const t=()=>this.path&&""!==this.path?!!this.parentFile||(new obsidian_module.Notice(t$d("PROMPT_ERROR_DRAWING_CLOSED")),!1):(new obsidian_module.Notice(t$d("PROMPT_ERROR_NO_FILENAME")),!1),a=async e=>{if(!this.path.includes("/")){const e=new RegExp(`${escapeRegExp(this.parentFile.name)}$`,"g");this.path=this.parentFile.path.replace(e,this.path)}return this.path.match(/\.md$/)||(this.path=`${this.path}.md`),checkAndCreateFolder(splitFolderAndFilename(this.path).folderpath),await this.app.vault.create(this.path,e)};this.sourceElement&&(e.createEl("button",{text:t$d("PROMPT_BUTTON_EMBED_MARKDOWN"),attr:{"aria-label":t$d("PROMPT_BUTTON_EMBED_MARKDOWN_ARIA")}}).onclick=async()=>{if(!t)return;const e=await a("");if(e){const t=getEA(this.view);t.copyViewElementsToEAforEditing([this.sourceElement]),t.getElement(this.sourceElement.id).isDeleted=!0,t.addEmbeddable(this.sourceElement.x,this.sourceElement.y,MAX_IMAGE_SIZE,MAX_IMAGE_SIZE,void 0,e),await t.addElementsToView(),t.destroy()}this.close()}),e.createEl("button",{text:t$d("PROMPT_BUTTON_CREATE_MARKDOWN"),attr:{"aria-label":t$d("PROMPT_BUTTON_CREATE_MARKDOWN_ARIA")}}).onclick=async()=>{if(!t)return;const e=await a("");this.openFile(e),this.close()},e.createEl("button",{text:t$d("PROMPT_BUTTON_CREATE_EXCALIDRAW"),attr:{"aria-label":t$d("PROMPT_BUTTON_CREATE_EXCALIDRAW_ARIA")}}).onclick=async()=>{if(!t)return;const e=await a(await this.plugin.getBlankDrawing());await sleep$1(200),this.openFile(e),this.close()},e.createEl("button",{text:t$d("PROMPT_BUTTON_NEVERMIND")}).onclick=()=>{this.close()}}))}}class ConfirmationPrompt extends obsidian_module.Modal{plugin;waitForClose;resolvePromise;rejectPromise;didConfirm=!1;message;constructor(e,t){super(e.app),this.plugin=e,this.message=t,this.waitForClose=new Promise(((e,t)=>{this.resolvePromise=e,this.rejectPromise=t})),this.display(),this.open()}display(){this.contentEl.empty(),this.titleEl.textContent=t$d("PROMPT_TITLE_CONFIRMATION");const e=this.contentEl.createDiv();e.style.marginBottom="1rem",e.innerHTML=this.message;const t=this.contentEl.createDiv();t.style.display="flex",t.style.justifyContent="flex-end";const a=this.createButton(t,t$d("PROMPT_BUTTON_CANCEL"),this.cancelClickCallback.bind(this));a.buttonEl.style.marginRight="0.5rem",this.createButton(t,t$d("PROMPT_BUTTON_OK"),this.confirmClickCallback.bind(this)).buttonEl.style.marginRight="0",a.buttonEl.focus()}createButton(e,t,a){const i=new obsidian_module.ButtonComponent(e);return i.setButtonText(t).onClick(a),i}cancelClickCallback(){this.didConfirm=!1,this.close()}confirmClickCallback(){this.didConfirm=!0,this.close()}onOpen(){super.onOpen(),this.contentEl.querySelector("button")?.focus()}onClose(){super.onClose(),this.didConfirm?this.resolvePromise(!0):this.resolvePromise(!1)}}async function linkPrompt(e,t,a,i=t$d("SELECT_LINK_TO_OPEN")){const n=REGEX_LINK.getResList(e).filter((e=>Boolean(e.value))),r=n.map((e=>REGEX_LINK.getLink(e))),s=new Map;r.forEach(((e,t)=>{const a=e.split("&rect=")[0];s.has(a)||s.set(a,[]),s.get(a).push(t)}));const o=new Set;s.forEach((e=>{if(1===e.length)o.add(e[0]);else{const t=e.find((e=>r[e].includes("&rect=")));void 0!==t?o.add(t):o.add(e[0])}})),s.forEach((e=>{const t=e.some((e=>o.has(e)));t||o.add(e[0])}));const l=n.filter(((e,t)=>o.has(t))),c=REGEX_TAGS.getResList(e.replaceAll(/([^\s])#/g,"$1 ")).filter((e=>Boolean(e.value)));let d=null,h=null,p=l[0]??c[0];const u=[...l.map((e=>{const t=REGEX_LINK.getAliasOrLink(e);return"100%"===t?REGEX_LINK.getLink(e):t})),...c.map((e=>REGEX_TAGS.getTag(e)))],m=[...l,...c];if(m.length>1&&(p=await ScriptEngine.suggester(t,u,m,i),!p))return;if(!p)return;if(REGEX_TAGS.isTag(p))return void openTagSearch(REGEX_TAGS.getTag(p),t);if(openExternalLink(e=REGEX_LINK.getLink(p),t))return;const f=parseObsidianLink(e,t,!1);if("boolean"!=typeof f||!f){if("string"==typeof f&&(e=f),e.search("#")>-1){const t=getLinkParts(e,a?a.file:void 0);d=`#${t.isBlockRef?"^":""}${t.ref}`,e=t.path}if(!e.match(REG_LINKINDEX_INVALIDCHARS))return h=t.metadataCache.getFirstLinkpathDest(e,a?a.file.path:""),[h,e,d];new obsidian_module.Notice(t$d("FILENAME_INVALID_CHARS"),4e3)}}const templatePromt=async(e,t)=>1===e.length?e[0]:(await linkPrompt(e.map((e=>`[[${e.path}|${e.name}]]`)).join(" "),t,void 0,t$d("PROMPT_SELECT_TEMPLATE"))??[null,null,null])[0];function updateElementIdsInScene({elements:e},t,a){if("text"===t.type){const i=t;if(i.containerId){const t=e.find((e=>e.id===i.containerId));t.boundElements?.filter((e=>e.id===i.id)).forEach((e=>{e.id=a}))}}t.boundElements?.length>0&&t.boundElements.forEach((i=>{const n=e.find((e=>e.id===i.id));if(n.boundElements?.filter((e=>e.id===t.id)).forEach((e=>{e.id=a})),"text"===n.type&&(n.containerId=a),"arrow"===n.type){const e=n;e.startBinding?.elementId===t.id&&(e.startBinding.elementId=a),e.endBinding?.elementId===t.id&&(e.endBinding.elementId=a)}})),"frame"===t.type&&e.filter((e=>e.frameId===t.id)).forEach((e=>{e.frameId=a})),t.id=a}function getPDFCropRect(e){const t=e.link.match(/&rect=(\d*),(\d*),(\d*),(\d*)/);if(!t||5!==t.length)return null;const a=e.pdfPageViewProps.rotate??0,{left:i,bottom:n}=e.pdfPageViewProps,r=parseInt(t[1]),s=parseInt(t[2]),o=parseInt(t[3]),l=parseInt(t[4]);if(90===a){const t=r,a=o,i=l,n=s*e.scale,c=t*e.scale;return{x:n,y:c,width:i*e.scale-n,height:a*e.scale-c,naturalWidth:e.naturalWidth,naturalHeight:e.naturalHeight}}if(180===a){const t=r,a=o,i=l,n=s*e.scale,c=e.naturalWidth-a*e.scale;return{x:c,y:n,width:e.naturalWidth-c-t*e.scale,height:i*e.scale-n,naturalWidth:e.naturalWidth,naturalHeight:e.naturalHeight}}if(270===a){const t=r,a=s,i=o,n=l,c=e.naturalWidth-n*e.scale,d=e.naturalHeight-i*e.scale;return{x:c,y:d,width:e.naturalWidth-c-a*e.scale,height:e.naturalHeight-d-t*e.scale,naturalWidth:e.naturalWidth,naturalHeight:e.naturalHeight}}const c=r,d=s,h=o,p=l;return{x:(c-i)*e.scale,y:e.naturalHeight-(p-n)*e.scale,width:(h-c)*e.scale,height:(p-d)*e.scale,naturalWidth:e.naturalWidth,naturalHeight:e.naturalHeight}}function getPDFRect({elCrop:e,scale:t,customData:a}){const i=a.pdfPageViewProps?.rotate??0,{left:n,bottom:r}=a&&a.pdfPageViewProps?a.pdfPageViewProps:{left:0,bottom:0};if(90===i){const a=e.y/t,i=e.x/t,n=(e.height+e.y)/t,r=(e.width+e.x)/t;return`&rect=${Math.round(a)},${Math.round(i)},${Math.round(n)},${Math.round(r)}`}if(180===i){const a=(e.naturalWidth-e.x-e.width)/t,i=e.y/t,n=(e.naturalWidth-e.x)/t,r=(e.height+e.y)/t;return`&rect=${Math.round(a)},${Math.round(i)},${Math.round(n)},${Math.round(r)}`}if(270===i){const a=(e.naturalHeight-e.height-e.y)/t,i=(e.naturalWidth-e.width-e.x)/t,n=(e.naturalHeight-e.y)/t,r=(e.naturalWidth-e.x)/t;return`&rect=${Math.round(a)},${Math.round(i)},${Math.round(n)},${Math.round(r)}`}const s=e.x/t+n,o=e.width/t+s,l=r+(e.naturalHeight-e.y)/t,c=l-e.height/t;return`&rect=${Math.round(s)},${Math.round(c)},${Math.round(o)},${Math.round(l)}`}var AutoexportPreference;!function(e){e[e.none=0]="none",e[e.both=1]="both",e[e.png=2]="png",e[e.svg=3]="svg",e[e.inherit=4]="inherit"}(AutoexportPreference||(AutoexportPreference={}));const REGEX_TAGS={EXPR:/(#[\p{Letter}\p{Emoji_Presentation}\p{Number}\/_-]+)/gu,getResList:e=>{const t=e.matchAll(REGEX_TAGS.EXPR);let a;const i=[];for(;!(a=t.next()).done;)i.push(a);return i},getTag:e=>e.value[1],isTag:e=>e.value[1]?.startsWith("#")},REGEX_LINK={EXPR:/(!)?(\[\[([^|\]]+)\|?([^\]]+)?]]|\[([^\]]*)]\(((?:[^\(\)]|\([^\(\)]*\))*)\))(\{(\d+)\})?/g,getResList:e=>{const t=e.matchAll(REGEX_LINK.EXPR);let a;const i=[];for(;!(a=t.next()).done;)i.push(a);return i},getRes:e=>e.matchAll(REGEX_LINK.EXPR),isTransclusion:e=>!!e.value[1],getLink:e=>e.value[3]?e.value[3]:e.value[6],isWikiLink:e=>!!e.value[3],getAliasOrLink:e=>REGEX_LINK.isWikiLink(e)?e.value[4]?e.value[4]:e.value[3]:e.value[5]?e.value[5]:e.value[6],getWrapLength:(e,t)=>{const a=parseInt(e.value[8]);return isNaN(a)?t>0?t:null:a}},DRAWING_REG=/\n##? Drawing\n[^`]*(```json\n)([\s\S]*?)```\n/gm,DRAWING_REG_FALLBACK=/\n##? Drawing\n(```json\n)?(.*)(```)?(%%)?/gm,DRAWING_COMPRESSED_REG=/(\n##? Drawing\n[^`]*(?:```compressed\-json\n))([\s\S]*?)(```\n)/gm,DRAWING_COMPRESSED_REG_FALLBACK=/(\n##? Drawing\n(?:```compressed\-json\n)?)(.*)((```)?(%%)?)/gm,REG_LINKINDEX_HYPERLINK=/^\w+:\/\//,isCompressedMD=e=>null!==e.match(/```compressed\-json\n/gm),getDecompressedScene=e=>{let t,a=e.matchAll(DRAWING_COMPRESSED_REG);return t=a.next(),t.done&&(a=e.matchAll(DRAWING_COMPRESSED_REG_FALLBACK),t=a.next()),t.value&&t.value.length>1?[decompress(t.value[2]),t]:[null,t]},changeThemeOfExcalidrawMD=e=>{const t=isCompressedMD(e);let a=t?getDecompressedScene(e)[0]:e;return a?(isObsidianThemeDark?1===(a.match(/"theme"\s*:\s*"light"\s*,/g)||[]).length&&(a=a.replace(/"theme"\s*:\s*"light"\s*,/,'"theme": "dark",')):1===(a.match(/"theme"\s*:\s*"dark"\s*,/g)||[]).length&&(a=a.replace(/"theme"\s*:\s*"dark"\s*,/,'"theme": "light",')),t?e.replace(DRAWING_COMPRESSED_REG,`$1${compress(a)}$3`):a):e};function getJSON(e){let t,a;if(isCompressedMD(e)){const[t,a]=getDecompressedScene(e);return t?{scene:t.substring(0,t.lastIndexOf("}")+1),pos:a.value.index}:{scene:e,pos:a.value?a.value.index:0}}if(t=e.matchAll(DRAWING_REG),a=t.next(),a.done&&(t=e.matchAll(DRAWING_REG_FALLBACK),a=t.next()),a.value&&a.value.length>1){const e=a.value[2];return{scene:e.substr(0,e.lastIndexOf("}")+1),pos:a.value.index}}return{scene:e,pos:a.value?a.value.index:0}}async function getMarkdownDrawingSectionAsync(e,t){return t?`## Drawing\n\`\`\`compressed-json\n${await compressAsync(e)}\n\`\`\`\n%%`:`## Drawing\n\`\`\`json\n${e}\n\`\`\`\n%%`}function getMarkdownDrawingSection(e,t){return t?`## Drawing\n\`\`\`compressed-json\n${compress(e)}\n\`\`\`\n%%`:`## Drawing\n\`\`\`json\n${e}\n\`\`\`\n%%`}const RE_EXCALIDRAWDATA_WITHSECTION_OK=/^(#\n+)%%\n+# Excalidraw Data(?:\n|$)/m,RE_EXCALIDRAWDATA_WITHSECTION_NOTOK=/#\n+%%\n+# Excalidraw Data(?:\n|$)/m,RE_EXCALIDRAWDATA_NOSECTION_OK=/^(%%\n+)?# Excalidraw Data(?:\n|$)/m,RE_TEXTELEMENTS_WITHSECTION_OK=/^#\n+%%\n+##? Text Elements(?:\n|$)/m,RE_TEXTELEMENTS_WITHSECTION_NOTOK=/#\n+%%\n+##? Text Elements(?:\n|$)/m,RE_TEXTELEMENTS_NOSECTION_OK=/^(%%\n+)?##? Text Elements(?:\n|$)/m,RE_EXCALIDRAWDATA_FALLBACK_1=/(.*)%%\n+# Excalidraw Data(?:\n|$)/m,RE_EXCALIDRAWDATA_FALLBACK_2=/(.*)# Excalidraw Data(?:\n|$)/m,RE_TEXTELEMENTS_FALLBACK_1=/(.*)%%\n+##? Text Elements(?:\n|$)/m,RE_TEXTELEMENTS_FALLBACK_2=/(.*)##? Text Elements(?:\n|$)/m,RE_DRAWING=/^(%%\n+)?##? Drawing\n/m,getExcalidrawMarkdownHeaderSection=(e,t)=>{const a=e.search(RE_DRAWING);a>0&&(e=e.substring(0,a));const i=e.match(RE_EXCALIDRAWDATA_WITHSECTION_OK);let n=i?.index??-1,r=!1;if(n>0&&(n+=i[1].length),-1===n&&(n=e.search(RE_EXCALIDRAWDATA_WITHSECTION_NOTOK),n>0&&(r=!0)),-1===n&&(n=e.search(RE_EXCALIDRAWDATA_NOSECTION_OK)),-1===n){const t=e.match(RE_EXCALIDRAWDATA_FALLBACK_1);t&&Boolean(t[1])&&(n=t.index+t[1].length)}if(-1===n){const t=e.match(RE_EXCALIDRAWDATA_FALLBACK_2);t&&Boolean(t[1])&&(n=t.index+t[1].length)}if(-1===n&&(n=e.search(RE_TEXTELEMENTS_WITHSECTION_OK),n>0&&(n+=2)),-1===n&&(n=e.search(RE_TEXTELEMENTS_WITHSECTION_NOTOK),n>0&&(r=!0)),-1===n&&(n=e.search(RE_TEXTELEMENTS_NOSECTION_OK)),-1===n){const t=e.match(RE_TEXTELEMENTS_FALLBACK_1);t&&Boolean(t[1])&&(n=t.index+t[1].length)}if(-1===n){const t=e.match(RE_TEXTELEMENTS_FALLBACK_2);t&&Boolean(t[1])&&(n=t.index+t[1].length)}if(-1===n&&a>0&&(n=a),-1===n)return e.endsWith("\n")?e:e+"\n";let s=updateFrontmatterInString(e.substring(0,n),t);return r?s+"\n#\n":s.endsWith("\n")?s:s+"\n"};class ExcalidrawData{plugin;view;textElements=null;scene=null;deletedElements=[];file=null;app;showLinkBrackets;linkPrefix;embeddableTheme="auto";urlPrefix;autoexportPreference=AutoexportPreference.inherit;textMode=TextMode.raw;loaded=!1;elementLinks=null;files=null;equations=null;mermaids=null;compatibilityMode=!1;textElementCommentedOut=!1;selectedElementIds={};constructor(e,t){this.plugin=e,this.view=t,this.app=this.plugin.app,this.files=new Map,this.equations=new Map,this.mermaids=new Map}destroy(){this.textElements=null,this.scene=null,this.deletedElements=[],this.file=null,this.app=null,this.showLinkBrackets=null,this.linkPrefix=null,this.embeddableTheme=null,this.urlPrefix=null,this.autoexportPreference=null,this.textMode=null,this.loaded=!1,this.elementLinks=null,this.files=null,this.equations=null,this.mermaids=null,this.compatibilityMode=null,this.textElementCommentedOut=null,this.selectedElementIds=null}initializeNonInitializedFields(){if(!this.scene||!this.scene.elements)return;const e=this.scene.source?.split("https://github.com/zsviczian/obsidian-excalidraw-plugin/releases/tag/")[1]??"1.8.16",t=this.scene.elements;for(const e of t){if("iframe"!==e.type||e.customData||(e.type="embeddable"),e.boundElements){const a=new Map;let i=!1;e.boundElements.forEach((e=>{if("text"===e.type)if(i){const a=t.find((t=>t.id===e.id));a&&(a.containerId=null)}else a.set(e.id,e.type),i=!0;else a.set(e.id,e.type)}));const n=Array.from(a,(([e,t])=>({id:e,type:t})));n.length!==e.boundElements.length&&(e.boundElements=n)}e.boundElementIds&&(e.boundElements||(e.boundElements=[]),e.boundElements=e.boundElements.concat(e.boundElementIds.map((e=>({type:"arrow",id:e})))),delete e.boundElementIds),"text"!==e.type||e.containerId||(e.containerId=null),null===e.x&&(e.x=0),null===e.y&&(e.y=0),null===e.startBinding?.focus&&(e.startBinding.focus=0),null===e.endBinding?.focus&&(e.endBinding.focus=0),null===e.fontSize&&(e.fontSize=20),"text"!==e.type||e.hasOwnProperty("autoResize")||(e.autoResize=!0),"text"!==e.type||e.hasOwnProperty("lineHeight")||(e.lineHeight=getLineHeight(e.fontFamily)),"image"!==e.type||e.hasOwnProperty("roundness")||(e.roundness=null)}try{t.filter((e=>"text"===e.type&&e.containerId&&t.some((t=>t.id===e.containerId&&t.boundElements.length>0&&t.boundElements.some((t=>"text"===t.type&&t.id!==e.id&&t.id.length>8)))))).forEach((e=>{try{const a=t.filter((t=>t.id===e.containerId))[0],i=a.boundElements.filter((e=>!("text"===e.type&&!t.some((t=>t.id===e.id)))));a.boundElements=[{id:e.id,type:"text"}].concat(i)}catch(e){}}));const a=!isVersionNewerThanOther(e,"1.8.16");t.filter((e=>e.boundElements&&e.boundElements.length>0)).forEach((e=>{a&&!e.customData?.legacyTextWrap&&addAppendUpdateCustomData(e,{legacyTextWrap:!0});const i=e.boundElements.filter((e=>t.some((t=>t.id===e.id))));i.length!==e.boundElements.length&&(e.boundElements=i)})),t.filter((e=>"text"===e.type&&e.containerId&&!t.some((t=>t.id===e.containerId)))).forEach((e=>{e.containerId=null}))}catch{}}async loadData(e,t,a){if(!t)return!1;if(this.loaded=!1,this.selectedElementIds={},this.textElements=new Map,this.elementLinks=new Map,this.file!==t&&(this.files.clear(),this.equations.clear(),this.mermaids.clear()),this.file=t,this.compatibilityMode=!1,this.setShowLinkBrackets(),this.setLinkPrefix(),this.setUrlPrefix(),this.setAutoexportPreferences(),this.setembeddableThemePreference(),this.scene=null,this.plugin.settings.syncExcalidraw){const e=`${t.path.substring(0,t.path.lastIndexOf(".md"))}.excalidraw`,a=this.app.vault.getAbstractFileByPath(e);if(a&&a instanceof obsidian_module.TFile&&a.stat.mtime>t.stat.mtime){const e=await this.app.vault.read(a);this.scene=JSON.parse(e)}}let i=null;i=(()=>{const t=getJSON(e);if(-1===t.pos)throw new Error("Excalidraw JSON not found in the file");return this.scene||(this.scene=JSON_parse(t.scene)),t})(),this.deletedElements=this.scene.elements.filter((e=>e.isDeleted)),this.scene.elements=this.scene.elements.filter((e=>!e.isDeleted));const n=window.setTimeout((()=>{new obsidian_module.Notice(t$d("FONT_LOAD_SLOW"),15e3).noticeEl.oncontextmenu=()=>{displayFontMessage(this.app)}}),5e3);if(await loadSceneFonts(this.scene.elements),clearTimeout(n),this.scene.files||(this.scene.files={}),hasExportTheme(this.plugin,this.file)?this.scene.appState.theme=getExportTheme(this.plugin,this.file,"light"):this.plugin.settings.matchThemeAlways&&(this.scene.appState.theme=isObsidianThemeDark()?"dark":"light"),this.scene.appState.hasOwnProperty("previousGridSize")&&(null===this.scene.appState.gridSize?(this.scene.appState.gridSize=this.scene.appState.previousGridSize,this.scene.appState.gridModeEnabled=!1):this.scene.appState.gridModeEnabled=!0,delete this.scene.appState.previousGridSize),this.scene.appState?.gridColor?.hasOwnProperty("MajorGridFrequency")&&(this.scene.appState.gridColor.MajorGridFrequency>1&&(this.scene.gridStep=this.scene.appState.gridColor.MajorGridFrequency),delete this.scene.appState.gridColor.MajorGridFrequency),this.scene?.elements?.some((e=>"iframe"===e.type&&!e.customData))){const e=new ConfirmationPrompt(this.plugin,"This file contains embedded frames which will be migrated to a newer version for compatibility with excalidraw.com.
🔄 If you're using Obsidian on multiple devices, you may proceed now, but please, before opening this file on your other devices, update Excalidraw on those as well.
🔍 More info is available here.
🌐 Translate.");if(e.contentEl.focus(),!await e.waitForClose)throw new Error(ERROR_IFRAME_CONVERSION_CANCELED)}this.initializeNonInitializedFields();let r=(e=e.substring(0,i.pos)).search(RE_EXCALIDRAWDATA_NOSECTION_OK);if(-1===r&&(r=e.search(RE_EXCALIDRAWDATA_FALLBACK_2)),-1===r&&(r=e.search(RE_TEXTELEMENTS_NOSECTION_OK)),-1===r&&(r=e.search(RE_TEXTELEMENTS_FALLBACK_2)),-1===r)return await this.setTextMode(a,!1),this.loaded=!0,!0;const s=(e=e.slice(r)).match(/^((%%\n*)?# Excalidraw Data\n\n?## Text Elements(?:\n|$))/m)??e.match(/^((%%\n*)?##? Text Elements(?:\n|$))/m),o=s?s[0]:e.match(/(.*##? Text Elements(?:\n|$))/m)[0];let l;e=e.slice(o.length),this.textElementCommentedOut=o.startsWith("%%\n"),r=0;const c=new Map,d=e.indexOf("## Element Links\n"),h=e.indexOf("# Element Links\n"),p=(d>-1?e.substring(d+17):e.substring(h+16)).matchAll(/^(.{8}):\s*(.*)$/gm);for(;!(l=p.next()).done;)c.set(l.value[1],l.value[2]);const u=/^%%\*\*\*>>>text element-link:(\[\[[^<*\]]*]])<<<\*\*\*%%/gm;let m=e.matchAll(/\s\^(.{8})[\n]+/g);for(;!(l=m.next()).done;){let t=e.substring(r,l.value.index);const a=l.value[1],i=this.scene.elements.filter((e=>e.id===a))[0];if(i)if("text"!==i.type)i.link!==t&&(i.link=t,i.version++,i.versionNonce++),this.elementLinks.set(a,t);else{const e=t.matchAll(u).next();e.done||(t=t.replace(u,""),i.link=e.value[1]),c.has(a)&&(i.link=c.get(a),c.delete(a));const n=await this.parse(t);i.rawText=t,this.textElements.set(a,{raw:t,parsed:n.parsed}),n.link&&(i.link=n.link),!i||i.rawText&&""!==i.rawText||(i.rawText=t)}r=l.value.index+12}for(const[e,t]of c){const a=this.scene.elements.filter((t=>t.id===e))[0];a&&(a.link=t,a.version++,a.versionNonce++,this.elementLinks.set(e,t))}const f=e.indexOf("## Embedded Files\n"),g=e.indexOf("# Embedded files\n");if(f>-1||g>-1){const t=/([\w\d]*):\s*\!?\[\[([^\]]*)]]\s*(\{[^}]*})?\n/gm;for(m=(e=f>-1?e.substring(f+18):e.substring(g+17)).matchAll(t);!(l=m.next()).done;){const e=new EmbeddedFile(this.plugin,this.file.path,l.value[2],l.value[3]);this.setFile(l.value[1],e)}const a=/([\w\d]*):\s*((?:https?|file|ftps?):\/\/[^\s]*)\n/gm;for(m=e.matchAll(a);!(l=m.next()).done;){const e=new EmbeddedFile(this.plugin,null,l.value[2]);this.setFile(l.value[1],e)}const i=/([\w\d]*):\s*\$\$([\s\S]*?)(\$\$\s*\n)/gm;for(m=e.matchAll(i);!(l=m.next()).done;)this.setEquation(l.value[1],{latex:l.value[2],isLoaded:!1});const n=getMermaidImageElements(this.scene.elements);n.length>0&&!shouldRenderMermaid()?new obsidian_module.Notice("Mermaid images are only supported in Obsidian 1.4.14 and above. Please update Obsidian to see the mermaid images in this drawing. Obsidian mobile 1.4.14 currently only avaiable to Obsidian insiders",5e3):n.forEach((e=>this.setMermaid(e.fileId,{mermaid:getMermaidText(e),isLoaded:!1})))}return this.findNewTextElementsInScene(),this.findNewElementLinksInScene(),await this.setTextMode(a,!0),this.loaded=!0,!0}async loadLegacyData(e,t){return!!t&&(this.loaded=!1,this.selectedElementIds={},this.compatibilityMode=!0,this.file=t,this.textElements=new Map,this.elementLinks=new Map,this.setShowLinkBrackets(),this.setLinkPrefix(),this.setUrlPrefix(),this.setembeddableThemePreference(),this.scene=JSON.parse(e),this.scene.files||(this.scene.files={}),this.initializeNonInitializedFields(),this.plugin.settings.matchThemeAlways&&(this.scene.appState.theme=isObsidianThemeDark()?"dark":"light"),this.files.clear(),this.equations.clear(),this.mermaids.clear(),this.findNewTextElementsInScene(),this.findNewElementLinksInScene(),await this.setTextMode(TextMode.raw,!0),this.loaded=!0,!0)}async setTextMode(e,t=!1){this.scene&&(this.textMode=e,await this.updateSceneTextElements(t))}async updateSceneTextElements(e=!1){const t=arrayToMap(this.scene.elements),a=this.scene.elements?.filter((e=>"text"===e.type&&!e.isDeleted));for(const e of a){const a=getContainerElement(e,t),i=await this.getText(e.id)??e.originalText??e.text,{text:n,x:r,y:s,width:o,height:l}=refreshTextDimensions(e,a,t,i);try{e.originalText=i,e.text=n,e.x=r,e.y=s,e.width=o,e.height=l}catch(e){}}}async getText(e){const t=this.textElements.get(e);return t?this.textMode===TextMode.parsed?(t.parsed||this.textElements.set(e,{raw:t.raw,parsed:(await this.parse(t.raw)).parsed}),t.parsed):t.raw:null}findNewElementLinksInScene(){let e=!1;const t=this.scene.elements?.filter((e=>"text"!==e.type&&e.link&&!this.elementLinks.has(e.id)));if(0===t.length)return e;let a;for(const i of t)a=i.id,i.id.length>8&&(e=!0,a=nanoid(),updateElementIdsInScene(this.scene,i,a)),this.elementLinks.set(a,i.link);return e}findNewTextElementsInScene(e={}){this.selectedElementIds=e;const t=this.scene.elements?.filter((e=>"text"===e.type));let a,i=!1;for(const e of t)if(a=e.id,e.id.length>8){if(i=!0,a=nanoid(),this.selectedElementIds[e.id]&&(delete this.selectedElementIds[e.id],this.selectedElementIds[a]=!0),updateElementIdsInScene(this.scene,e,a),this.textElements.has(e.id)){const t=this.textElements.get(e.id);this.textElements.set(a,{raw:t.raw,parsed:t.parsed}),this.textElements.delete(e.id)}if(!this.textElements.has(a)){const t=e.rawText&&""!==e.rawText?e.rawText:e.text;this.textElements.set(a,{raw:t,parsed:null}),this.parseasync(a,t)}}else if(!this.textElements.has(e.id)){const t=e.rawText&&""!==e.rawText?e.rawText:e.text;this.textElements.set(a,{raw:t,parsed:null}),this.parseasync(a,t)}return i}updateElementLinksFromScene(){for(const e of this.elementLinks.keys()){const t=this.scene.elements?.filter((t=>"text"!==t.type&&t.id===e&&t.link));0===t.length?this.elementLinks.delete(e):this.elementLinks.set(e,t[0].link)}}async updateTextElementsFromScene(){for(const e of this.textElements.keys()){const t=this.scene.elements?.filter((t=>"text"===t.type&&t.id===e));if(0===t.length)this.textElements.delete(e);else{const a=await this.getText(e),i=this.scene.prevTextMode===TextMode.parsed?t[0].rawText:t[0].originalText??t[0].text;a!==(t[0].originalText??t[0].text)&&this.textElements.set(e,{raw:i,parsed:(await this.parse(i)).parsed})}}}async parseasync(e,t){this.textElements.set(e,{raw:t,parsed:(await this.parse(t)).parsed})}parseLinks(e,t,a){return e.substring(t,a.value.index)+(this.showLinkBrackets?"[[":"")+REGEX_LINK.getAliasOrLink(a)+(this.showLinkBrackets?"]]":"")}async getTransclusion(e){const t=getLinkParts(e,this.file),a=this.app.metadataCache.getFirstLinkpathDest(t.path,this.file.path);return await getTransclusion(t,this.app,a,this.plugin.settings.pageTransclusionCharLimit)}async parse(e){e=this.parseCheckbox(e);let t="",a=null,i=0;const n=REGEX_LINK.getRes(e);let r,s=!1,o=!1;for(e.match(REG_LINKINDEX_HYPERLINK)&&(a=e,o=!0);!(r=n.next()).done;){if(!a){const e=REGEX_LINK.getLink(r);a=e.match(REG_LINKINDEX_HYPERLINK)?e:`[[${e}]]`}if(REGEX_LINK.isTransclusion(r)){let a=this.parseCheckbox((await this.getTransclusion(REGEX_LINK.getLink(r))).contents).replaceAll(/%%[^%]*%%/gm,"");this.plugin.settings.removeTransclusionQuoteSigns&&(a=a.replaceAll(/\n\s*>\s?/gm,"\n")),t+=e.substring(i,r.value.index)+wrapTextAtCharLength(a,REGEX_LINK.getWrapLength(r,this.plugin.settings.wordWrappingDefault),this.plugin.settings.forceWrap)}else{const a=this.parseLinks(e,i,r);if(a&&(t+=a,!o&&!s)){const e=REGEX_LINK.getLink(r);e.match(REG_LINKINDEX_HYPERLINK)?o=!e.startsWith("cmd://"):s=!0}}i=r.value.index+r.value[0].length}return t+=e.substring(i,e.length),s&&(t=this.linkPrefix+t),o&&(t=this.urlPrefix+t),{parsed:t,link:a}}parseCheckbox(e){return this.plugin.settings.parseTODO?e.replaceAll(/^- \[\s] /g,`${this.plugin.settings.todo} `).replaceAll(/\n- \[\s] /g,`\n${this.plugin.settings.todo} `).replaceAll(/^- \[[^\s]] /g,`${this.plugin.settings.done} `).replaceAll(/\n- \[[^\s]] /g,`\n${this.plugin.settings.done} `):e}quickParse(e){if((e=>{const t=REGEX_LINK.getRes(e);let a;for(;!(a=t.next()).done;)if(REGEX_LINK.isTransclusion(a))return!0;return!1})(e))return[null,null];e=this.parseCheckbox(e);let t="",a=null,i=0;const n=REGEX_LINK.getRes(e);let r,s=!1,o=!1;for(e.match(REG_LINKINDEX_HYPERLINK)&&(a=e,o=!0);!(r=n.next()).done;){if(!a){const e=REGEX_LINK.getLink(r);a=e.match(REG_LINKINDEX_HYPERLINK)?e:`[[${e}]]`}const n=this.parseLinks(e,i,r);if(n&&(t+=n,!o&&!s)){const e=REGEX_LINK.getLink(r);e.match(REG_LINKINDEX_HYPERLINK)?o=!e.startsWith("cmd://"):s=!0}i=r.value.index+r.value[0].length}return t+=e.substring(i,e.length),s&&(t=this.linkPrefix+t),o&&(t=this.urlPrefix+t),[t,a]}disableCompression=!1;generateMDBase(e=[]){let t=this.textElementCommentedOut?"%%\n":"";t+="# Excalidraw Data\n\n## Text Elements\n",this.plugin.settings.addDummyTextElement&&(t+="\n^_dummy!_\n\n");const a=new Map;for(const e of this.textElements.keys()){const i=this.scene.elements.filter((t=>t.id===e));let n=this.textElements.get(e).raw;i&&1===i.length&&i[0].link&&i[0].rawText===i[0].originalText&&a.set(e,i[0].link),t+=`${n} ^${e}\n\n`}if(this.elementLinks.size>0||a.size>0){t+="## Element Links\n";for(const e of this.elementLinks.keys())t+=`${e}: ${this.elementLinks.get(e)}\n\n`;for(const e of a.keys())t+=`${e}: ${a.get(e)}\n\n`}if(t+=this.equations.size>0||this.files.size>0?"## Embedded Files\n":"",this.equations.size>0)for(const e of this.equations.keys())t+=`${e}: $$${this.equations.get(e).latex.trim()}$$\n\n`;if(this.files.size>0)for(const e of this.files.keys()){const a=/(^[^#\|]*)/,i=this.files.get(e);i.isHyperLink||i.isLocalLink?t+=`${e}: ${i.hyperlink}\n\n`:t+=`${e}: [[${i.file?i.linkParts.original.replace(a,this.app.metadataCache.fileToLinktext(i.file,this.file.path)):i.linkParts.original}]]${i.colorMap?" "+JSON.stringify(i.colorMap):""}\n\n`}return{outString:t,sceneJSONstring:JSON.stringify({type:this.scene.type,version:this.scene.version,source:this.scene.source,elements:this.scene.elements.concat(e),appState:this.scene.appState,files:this.scene.files},null,"\t")}}async generateMDAsync(e=[]){const{outString:t,sceneJSONstring:a}=this.generateMDBase(e);return t+(this.textElementCommentedOut?"":"%%\n")+await getMarkdownDrawingSectionAsync(a,!this.disableCompression&&this.plugin.settings.compress)}generateMDSync(e=[]){const{outString:t,sceneJSONstring:a}=this.generateMDBase(e);return t+(this.textElementCommentedOut?"":"%%\n")+getMarkdownDrawingSection(a,!this.disableCompression&&this.plugin.settings.compress)}async saveDataURLtoVault(e,t,a,i){const n=this.scene;let r,s=i;if(!s)switch(s=`Pasted Image ${window.moment().format("YYYYMMDDHHmmss_SSS")}`,t){case"image/png":default:s+=".png";break;case"image/jpeg":s+=".jpg";break;case"image/svg+xml":s+=".svg";break;case"image/gif":s+=".gif"}const o=this.view?.getHookServer();let l;if(o?.onImageFilePathHook&&(r=o.onImageFilePathHook({currentImageName:s,drawingFilePath:this.view?.file?.path})),r){const{folderpath:e,filename:t}=splitFolderAndFilename(r);await checkAndCreateFolder(e),l=getNewUniqueFilepath(this.app.vault,t,e)}else{const e=await getAttachmentsFolderAndFilePath(this.app,this.file.path,s);l=getNewUniqueFilepath(this.app.vault,s,e.folder)}const c=await getBinaryFileFromDataURL(e);if(!c)return null;const d=await this.app.vault.createBinary(l,c),h=new EmbeddedFile(this.plugin,this.file.path,l);return h.setImage({imgBase64:e,mimeType:t,size:{height:0,width:0},isDark:"dark"===n.appState?.theme,isSVGwithBitmap:"image/svg+xml"===t}),this.setFile(a,h),d}syncCroppedPDFs(){const e=this.scene,t=this.plugin.settings.pdfScale;e.elements.filter((e=>"image"===e.type&&e.crop&&!e.isDeleted)).forEach((e=>{const a=this.getFile(e.fileId);if(!a.file)return;if("pdf"!==a.file.extension)return;const i=a.linkParts.original.split("#")?.[1];if(!i||!i.startsWith("page=")||i.includes("rect"))return;const n=e.link?e.link.match(/&rect=\d*,\d*,\d*,\d*(.*)/)?.[1]:"",r=a.linkParts.original+getPDFRect({elCrop:e.crop,scale:t,customData:e.customData})+(n||"]]");e.link=`[[${r}`,this.elementLinks.set(e.id,e.link)}))}async syncFiles(){let e=!1;const t=this.scene,a=t.elements.filter((e=>"image"===e.type)),i=a.map((e=>e.fileId));if(this.files.forEach(((t,a)=>{i.contains(a)||(this.files.delete(a),e=!0)})),this.equations.forEach(((t,a)=>{i.contains(a)||(this.equations.delete(a),e=!0)})),this.mermaids.forEach(((t,a)=>{i.contains(a)||(this.mermaids.delete(a),e=!0)})),!t.files||0===Object.keys(t.files).length)return!1;const n=new Set;i.forEach(((i,r)=>{if(n.has(i)){const s=this.getFile(i),o=this.getEquation(i),l=this.getMermaid(i);if(s&&(s.isHyperLink||s.isLocalLink||s.file&&("md"!==s.file.extension||this.plugin.isExcalidrawFile(s.file))))return;if(l)return;if(getMermaidText(a[r]))return void this.setMermaid(i,{mermaid:getMermaidText(a[r]),isLoaded:!0});if(!s&&!o&&!l)return;const c=fileid();t.elements.filter((e=>e.fileId===i)).sort(((e,t)=>e.updatede.fileId===a)));this.hasFile(a)||this.hasEquation(a)||this.hasMermaid(a)||i.length>0||(e=!0,await this.saveDataURLtoVault(t.files[a].dataURL,t.files[a].mimeType,a,t.files[a].name))}return e}async syncElements(e,t){this.scene=e;let a=!1;return this.compatibilityMode||(a=await this.syncFiles(),this.scene.files={}),this.updateElementLinksFromScene(),a=a||this.syncCroppedPDFs()||this.setLinkPrefix()||this.setUrlPrefix()||this.setShowLinkBrackets()||this.findNewElementLinksInScene(),await this.updateTextElementsFromScene(),a||this.findNewTextElementsInScene(t)}async updateScene(e){this.scene=JSON_parse(e),this.updateElementLinksFromScene();const t=this.setLinkPrefix()||this.setUrlPrefix()||this.setShowLinkBrackets()||this.setembeddableThemePreference()||this.findNewElementLinksInScene();return await this.updateTextElementsFromScene(),!(!t&&!this.findNewTextElementsInScene()||(await this.updateSceneTextElements(),0))}getRawText(e){return this.textElements.get(e)?.raw}getParsedText(e){const t=this.textElements.get(e);return t?t.parsed:null}setTextElement(e,t,a){const[i,n]=this.quickParse(t);return i?(this.textElements.set(e,{raw:t,parsed:i}),[i,n]):(this.parse(t).then((i=>{const n=i.parsed;this.textElements.set(e,{raw:t,parsed:n}),n&&a(n)})),[null,null])}async addTextElement(e,t,a){const i=await this.parse(a);return this.textElements.set(e,{raw:a,parsed:i.parsed}),{parseResult:i.parsed,link:i.link}}deleteTextElement(e){this.textElements.delete(e)}getOpenMode(){const e=this.app.metadataCache.getFileCache(this.file);let t="view-mobile"===this.plugin.settings.defaultMode?DEVICE.isPhone?"view":"normal":this.plugin.settings.defaultMode;switch(e?.frontmatter&&null!==e.frontmatter[FRONTMATTER_KEYS["default-mode"].name]&&void 0!==e.frontmatter[FRONTMATTER_KEYS["default-mode"].name]&&(t=e.frontmatter[FRONTMATTER_KEYS["default-mode"].name]),t){case"zen":return{viewModeEnabled:!1,zenModeEnabled:!0};case"view":return{viewModeEnabled:!0,zenModeEnabled:!1};default:return{viewModeEnabled:!1,zenModeEnabled:!1}}}getLinkOpacity(){const e=this.app.metadataCache.getFileCache(this.file);let t=this.plugin.settings.linkOpacity;return e?.frontmatter&&null!==e.frontmatter[FRONTMATTER_KEYS["linkbutton-opacity"].name]&&void 0!==e.frontmatter[FRONTMATTER_KEYS["linkbutton-opacity"].name]&&(t=e.frontmatter[FRONTMATTER_KEYS["linkbutton-opacity"].name]),t}getOnLoadScript(){const e=this.app.metadataCache.getFileCache(this.file);return e?.frontmatter&&null!==e.frontmatter[FRONTMATTER_KEYS["onload-script"].name]&&void 0!==e.frontmatter[FRONTMATTER_KEYS["onload-script"].name]?e.frontmatter[FRONTMATTER_KEYS["onload-script"].name]:null}setLinkPrefix(){const e=this.linkPrefix,t=this.app.metadataCache.getFileCache(this.file);return t?.frontmatter&&void 0!==t.frontmatter[FRONTMATTER_KEYS["link-prefix"].name]?this.linkPrefix=t.frontmatter[FRONTMATTER_KEYS["link-prefix"].name]??"":this.linkPrefix=this.plugin.settings.linkPrefix,e!==this.linkPrefix}setUrlPrefix(){const e=this.urlPrefix,t=this.app.metadataCache.getFileCache(this.file);return t?.frontmatter&&void 0!==t.frontmatter[FRONTMATTER_KEYS["url-prefix"].name]?this.urlPrefix=t.frontmatter[FRONTMATTER_KEYS["url-prefix"].name]??"":this.urlPrefix=this.plugin.settings.urlPrefix,e!==this.urlPrefix}setAutoexportPreferences(){const e=this.app.metadataCache.getFileCache(this.file);if(e?.frontmatter&&null!==e.frontmatter[FRONTMATTER_KEYS.autoexport.name]&&void 0!==e.frontmatter[FRONTMATTER_KEYS.autoexport.name])switch(e.frontmatter[FRONTMATTER_KEYS.autoexport.name].toLowerCase()){case"none":this.autoexportPreference=AutoexportPreference.none;break;case"both":this.autoexportPreference=AutoexportPreference.both;break;case"png":this.autoexportPreference=AutoexportPreference.png;break;case"svg":this.autoexportPreference=AutoexportPreference.svg;break;default:this.autoexportPreference=AutoexportPreference.inherit}else this.autoexportPreference=AutoexportPreference.inherit}setembeddableThemePreference(){const e=this.embeddableTheme,t=this.app.metadataCache.getFileCache(this.file);return t?.frontmatter&&null!==t.frontmatter[FRONTMATTER_KEYS["embeddable-theme"].name]&&void 0!==t.frontmatter[FRONTMATTER_KEYS["embeddable-theme"].name]?(this.embeddableTheme=t.frontmatter[FRONTMATTER_KEYS["embeddable-theme"].name].toLowerCase(),EMBEDDABLE_THEME_FRONTMATTER_VALUES.includes(this.embeddableTheme)||(this.embeddableTheme="default")):t?.frontmatter&&null!==t.frontmatter[FRONTMATTER_KEYS["iframe-theme"].name]&&void 0!==t.frontmatter[FRONTMATTER_KEYS["iframe-theme"].name]?(this.embeddableTheme=t.frontmatter[FRONTMATTER_KEYS["iframe-theme"].name].toLowerCase(),EMBEDDABLE_THEME_FRONTMATTER_VALUES.includes(this.embeddableTheme)||(this.embeddableTheme="default")):this.embeddableTheme=this.plugin.settings.iframeMatchExcalidrawTheme?"auto":"default",e!==this.embeddableTheme}setShowLinkBrackets(){const e=this.showLinkBrackets,t=this.app.metadataCache.getFileCache(this.file);return t?.frontmatter&&null!==t.frontmatter[FRONTMATTER_KEYS["link-brackets"].name]&&void 0!==t.frontmatter[FRONTMATTER_KEYS["link-brackets"].name]?this.showLinkBrackets=!1!==t.frontmatter[FRONTMATTER_KEYS["link-brackets"].name]:this.showLinkBrackets=this.plugin.settings.showLinkBrackets,e!==this.showLinkBrackets}setFile(e,t){if(!t)return;if(this.files.set(e,t),t.isHyperLink||t.isLocalLink)return void this.plugin.filesMaster.set(e,{isHyperLink:t.isHyperLink,isLocalLink:t.isLocalLink,path:t.hyperlink,blockrefData:null,hasSVGwithBitmap:t.isSVGwithBitmap});if(!t.file)return;const a=t.linkParts.original.split("#");this.plugin.filesMaster.set(e,{isHyperLink:!1,isLocalLink:!1,path:t.file.path+(t.shouldScale()?"":"|100%"),blockrefData:1===a.length?null:a[1],hasSVGwithBitmap:t.isSVGwithBitmap,colorMapJSON:t.colorMap?JSON.stringify(t.colorMap):null})}getFiles(){return Object.values(this.files)}getFile(e){let t=this.files.get(e);if(t)return t;const a=this.plugin.filesMaster.get(e);return a?(t=new EmbeddedFile(this.plugin,this.file.path,a.blockrefData?a.path+"#"+a.blockrefData:a.path,a.colorMapJSON),this.files.set(e,t),t):t}getFileEntries(){return this.files.entries()}deleteFile(e){this.files.delete(e)}hasFile(e){if(this.files.has(e))return!0;if(this.plugin.filesMaster.has(e)){const t=this.plugin.filesMaster.get(e);if(t.isHyperLink||t.isLocalLink)return this.files.set(e,new EmbeddedFile(this.plugin,this.file.path,t.path)),!0;const a=t.path.split("|")[0].split("#")[0];if(!this.app.vault.getAbstractFileByPath(a))return this.plugin.filesMaster.delete(e),!0;const i=t.path.endsWith("100%"),n=new EmbeddedFile(this.plugin,this.file.path,(t.blockrefData?a+"#"+t.blockrefData:a)+(i?"|100%":""),t.colorMapJSON);return this.files.set(e,n),!0}return!1}setEquation(e,t){this.equations.set(e,{latex:t.latex,isLoaded:t.isLoaded}),this.plugin.equationsMaster.set(e,t.latex)}getEquation(e){let t=this.equations.get(e);if(t)return t;const a=this.plugin.equationsMaster.get(e);return a?(this.equations.set(e,{latex:a,isLoaded:!1}),{latex:a,isLoaded:!1}):t}getEquationEntries(){return this.equations?.entries()}deleteEquation(e){this.equations.delete(e)}hasEquation(e){return!!this.equations.has(e)||!!this.plugin.equationsMaster.has(e)&&(this.equations.set(e,{latex:this.plugin.equationsMaster.get(e),isLoaded:!1}),!0)}setMermaid(e,t){this.mermaids.set(e,{mermaid:t.mermaid,isLoaded:t.isLoaded}),this.plugin.mermaidsMaster.set(e,t.mermaid)}getMermaid(e){let t=this.mermaids.get(e);if(t)return t;const a=this.plugin.mermaidsMaster.get(e);return a?(this.mermaids.set(e,{mermaid:a,isLoaded:!1}),{mermaid:a,isLoaded:!1}):t}getMermaidEntries(){return this.mermaids.entries()}deleteMermaid(e){this.mermaids.delete(e)}hasMermaid(e){return!!this.mermaids.has(e)||!!this.plugin.mermaidsMaster.has(e)&&(this.mermaids.set(e,{mermaid:this.plugin.mermaidsMaster.get(e),isLoaded:!1}),!0)}}const getTransclusion=async(e,t,a,i)=>{if(!e.path)return{contents:e.original.trim(),lineNum:0};if(!(a&&a instanceof obsidian_module.TFile))return{contents:e.original.trim(),lineNum:0};const n=await t.vault.read(a);if(!e.ref)return i?{contents:n.substring(0,i).trim(),lineNum:0}:{contents:n.trim(),lineNum:0};const r=(await t.metadataCache.blockCache.getForFile({isCancelled:()=>!1},a)).blocks.filter((e=>"comment"!==e.node.type));if(!r)return{contents:e.original.trim(),lineNum:0};if(e.isBlockRef){let t=r.filter((t=>t.node.id==e.ref))[0]?.node;if(!t)return{contents:e.original.trim(),lineNum:0};["blockquote"].includes(t.type)&&(t=t.children[0]);const a=t.position.start.offset,i=t.position.start.line,s=t.position.end.offset;return{contents:n.substring(a,s).replaceAll(/ \^\S*$|^\^\S*$/gm,"").trim(),lineNum:i}}const s=r.filter((e=>0===e.display.search(/^#+\s/)));let o=null,l=0,c=null,d=1;for(let t=0;td;)e++;return e===s.length&&s[e-1].node.depth>d?{leadingHashes:"#".repeat(d)+" ",contents:n.substring(o).trim(),lineNum:l}:(c=s[e].node.position.start.offset-1,{leadingHashes:"#".repeat(d)+" ",contents:n.substring(o,c).trim(),lineNum:l})}const a=s[t].node.children[0],i=s[t].node.data?.hProperties?.dataHeading,r=a?.children;!o&&(cleanBlockRef(a?.value)===e.ref||cleanBlockRef(a?.title)===e.ref||cleanBlockRef(i)===e.ref||r&&cleanBlockRef(r[0]?.value)===e.ref||cleanSectionHeading(a?.value)===e.ref||cleanSectionHeading(a?.title)===e.ref||cleanSectionHeading(i)===e.ref||r&&cleanSectionHeading(r[0]?.value)===e.ref)&&(o=s[t].node.children[0]?.position.start.offset,d=s[t].node.depth,l=s[t].node.children[0]?.position.start.line)}return o?{leadingHashes:"#".repeat(d)+" ",contents:n.substring(o).trim(),lineNum:l}:{contents:e.original.trim(),lineNum:0}},URL$1="https://raw.githubusercontent.com/zsviczian/obsidian-excalidraw-plugin/master/ea-scripts/index-new.md";class ScriptInstallPrompt extends obsidian_module.Modal{plugin;contentDiv;constructor(e){super(e.app),this.plugin=e}async onOpen(){const e=document.createElement("div");e.classList.add("search-bar-wrapper");const t=document.createElement("input");t.type="text",t.id="search-bar",t.placeholder="Search...";const a=document.createElement("button");a.textContent="→",a.onclick=()=>this.navigateSearchResults("next");const i=document.createElement("button");i.textContent="←",i.onclick=()=>this.navigateSearchResults("previous");const n=document.createElement("span");n.id="hit-count",n.classList.add("hit-count"),e.appendChild(i),e.appendChild(a),e.appendChild(t),e.appendChild(n),this.contentEl.prepend(e),t.addEventListener("input",(e=>{this.clearHighlights();const t=e.target.value;if(t&&t.length>0){this.highlightSearchTerm(t);const e=this.contentDiv.querySelectorAll("mark.search-highlight").length;n.textContent=e>0?`1/${e}`:"",setTimeout((()=>this.navigateSearchResults("next")))}else n.textContent=""})),t.addEventListener("keydown",(e=>{(e.ctrlKey||e.metaKey)&&"f"===e.key?(e.preventDefault(),t.focus()):"Enter"===e.key&&(e.preventDefault(),this.navigateSearchResults(e.shiftKey?"previous":"next"))})),this.contentEl.classList.add("excalidraw-scriptengine-install"),this.contentDiv=document.createElement("div"),this.contentEl.appendChild(this.contentDiv),this.containerEl.classList.add("excalidraw-scriptengine-install");try{const e=await obsidian_module.request({url:URL$1});if(!e)return new obsidian_module.Notice("Error opening the Excalidraw Script Store page. Please double check that you can access the website. I've logged the link in developer console (press CTRL+SHIFT+i)",5e3),log(URL$1),void this.close();await obsidian_module.MarkdownRenderer.render(this.plugin.app,e,this.contentDiv,"",this.plugin),this.contentDiv.querySelectorAll("h1[data-heading],h2[data-heading],h3[data-heading]").forEach((e=>{e.setAttribute("id",e.getAttribute("data-heading"))})),this.contentDiv.querySelectorAll("a.internal-link").forEach((e=>{e.removeAttribute("target")}))}catch(e){errorlog({where:"ScriptInstallPrompt.onOpen",error:e}),new obsidian_module.Notice("Could not open ScriptEngine repository"),this.close()}}highlightSearchTerm(e){const t=document.createTreeWalker(this.contentDiv,NodeFilter.SHOW_TEXT,{acceptNode:t=>t.nodeValue.toLowerCase().includes(e.toLowerCase())?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_REJECT}),a=[];for(;t.nextNode();)a.push(t.currentNode);a.forEach((t=>{const a=t.nodeValue,i=document.createDocumentFragment();let n,r=0;const s=new RegExp(escapeRegExp(e),"gi");for(;null!==(n=s.exec(a));){const e=document.createTextNode(a.slice(r,n.index)),t=document.createElement("mark");t.className="search-highlight",t.textContent=n[0],t.classList.add("search-result"),i.appendChild(e),i.appendChild(t),r=s.lastIndex}i.appendChild(document.createTextNode(a.slice(r))),t.replaceWith(i)}))}clearHighlights(){this.contentDiv.querySelectorAll("mark.search-highlight").forEach((e=>{e.outerHTML=e.innerHTML}))}navigateSearchResults(e){const t=Array.from(this.contentDiv.querySelectorAll("mark.search-highlight"));if(0===t.length)return;const a=t.findIndex((e=>e.classList.contains("active-highlight")));-1!==a&&(t[a].classList.remove("active-highlight"),t[a].style.border="none");let i=0;"next"===e?i=a===t.length-1?0:a+1:"previous"===e&&(i=0===a?t.length-1:a-1);const n=t[i];n.classList.add("active-highlight"),n.scrollIntoView({behavior:"smooth",block:"nearest"}),document.getElementById("hit-count").textContent=`${i+1}/${t.length}`}onClose(){this.contentEl.empty()}}function r$e(e){var t,a,i="";if("string"==typeof e||"number"==typeof e)i+=e;else if("object"==typeof e)if(Array.isArray(e)){var n=e.length;for(t=0;te.updatePinnedCustomPens())),this.plugin.saveSettings();const e=this.plugin.settings.customPens[this.pen],t=this.view.excalidrawAPI;setPen(e,t),t.setActiveTool({type:"freedraw"})}}async createForm(){const e=e=>{let t="";if(COLOR_NAMES.has(e))return[COLOR_NAMES.get(e),t];const a=(new Option).style;if(a.color=e,a.color){const e=a.color.match(/^[^\d]*(\d*)[^\d]*(\d*)[^\d]*(\d*)[^\d]*([\d\.]*)?/);return e?(t=e[4]?(0|Math.round(255*parseFloat(e[4]))).toString(16).padStart(2,"0"):"",[`#${(0|parseInt(e[1])).toString(16).padStart(2,"0")}${(0|parseInt(e[2])).toString(16).padStart(2,"0")}${(0|parseInt(e[3])).toString(16).padStart(2,"0")}`,t]):[null,t]}return[null,t]},t=this.plugin.settings.customPens[this.pen],a=this.contentEl;let i,n,r,s,o;a.createEl("h1",{text:"Pen settings"}),new obsidian_module.Setting(a).setName("Pen type").setDesc("Select type of pen").addDropdown((e=>{e.addOption("default","Excalidraw Default").addOption("highlighter","Highlighter").addOption("finetip","Fine tip pen").addOption("fountain","Fountain pen").addOption("marker","Marker with Outline").addOption("thick-thin","Mindmap Thick-Thin").addOption("thin-thick-thin","Mindmap Thin-Thick-Thin").setValue(t.type).onChange((e=>{this.dirty=!0,t.type=e}))})).addButton((e=>e.setButtonText("Apply").onClick((()=>{this.dirty=!0,t.strokeColor=PENS[t.type].strokeColor,t.backgroundColor=PENS[t.type].backgroundColor,t.fillStyle=PENS[t.type].fillStyle,t.strokeWidth=PENS[t.type].strokeWidth,t.roughness=PENS[t.type].roughness,t.penOptions={...PENS[t.type].penOptions},a.empty(),this.createForm()})))),i=new obsidian_module.Setting(a).setName(fragWithHTML(t.freedrawOnly?"Stroke & fill applies to: Freedraw only":"Stroke & fill applies to: All shapes")).setDesc(fragWithHTML('"All shapes" means that if for example, you select a blue pen with dashed fill and then switch to a different tool (e.g. to a line, a circle, an arrow - i.e. not the freedraw tool), those will all have the same blue line and dashed fill.
"Only applies to the freedraw line" means that if for example you are writing black text, and you select a custom pen (e.g. a yellow highlighter), then after using the highlighter you switch to another tool, the previous settings (e.g. black stroke color) will apply to the new shape.')).addToggle((e=>e.setValue(t.freedrawOnly).onChange((e=>{this.dirty=!0,i.setName(fragWithHTML(e?"Stroke & fill applies to: Freedraw only":"Stroke & fill applies to: All shapes")),t.freedrawOnly=e}))));let l,c,d,h,p,u,m,[f,g]=e(t.strokeColor),U=!1;o=new obsidian_module.Setting(a).setName(fragWithHTML(Boolean(t.strokeColor)?"Stroke color: Preset color":"Stroke color: Current")).setDesc(fragWithHTML("Use current stroke color of the canvas, or set a specific preset color for the pen")).addToggle((a=>a.setValue(!Boolean(t.strokeColor)).onChange((a=>{this.dirty=!0,n.settingEl.style.display=a?"none":"",o.setName(fragWithHTML(a?"Stroke color: Current":"Stroke color: Preset color")),a?delete t.strokeColor:(s.getValue()||([f,g]=e("black"),r.setValue(f),s.setValue("black")),t.strokeColor=s.getValue())})))),n=new obsidian_module.Setting(a).setName("Select stroke color").addButton((a=>a.setButtonText("Use Canvas Current").onClick((()=>{const a=this.api.getAppState(),i=a.resetCustomPen?.currentItemStrokeColor??a.currentItemStrokeColor;[f,g]=e(i),t.strokeColor=i,this.dirty=!0,s.setValue(i),U=!0,r.setValue(f)})))).addText((a=>{s=a,a.setValue(t.strokeColor).onChange((a=>{U=!0,this.dirty=!0,t.strokeColor=a,[f,g]=e(a),f&&r.setValue(f)}))})).addColorPicker((e=>{r=e,e.setValue(f??"#000000").onChange((e=>{U?U=!1:(this.dirty=!0,t.strokeColor=e+g,s.setValue(e+g))}))})),n.settingEl.style.display=Boolean(t.strokeColor)?"":"none";let[b,E]=e(t.backgroundColor);l=new obsidian_module.Setting(a).setName(fragWithHTML(Boolean(t.backgroundColor)?"Background color: Preset color":"Background color: Current")).setDesc(fragWithHTML("Toggle to use the current background color of the canvas; or a preset color")).addToggle((a=>a.setValue(!Boolean(t.backgroundColor)).onChange((a=>{this.dirty=!0,l.setName(fragWithHTML(a?"Background color: Current":"Background color: Preset color")),d.settingEl.style.display=a?"none":"",c.settingEl.style.display=a||"transparent"===t.backgroundColor?"none":"",a?delete t.backgroundColor:(p.getValue()||([b,E]=e("black"),h.setValue(b),p.setValue("black")),u.setValue(!1))})))),d=new obsidian_module.Setting(a).setName(fragWithHTML("transparent"===t.backgroundColor?"Background: Transparent":"Color: Preset color")).setDesc("Background has color or is transparent").addToggle((e=>{u=e,e.setValue("transparent"===t.backgroundColor).onChange((e=>{this.dirty=!0,c.settingEl.style.display=e?"none":"",m.settingEl.style.display=e?"none":"",d.setName(fragWithHTML(e?"Background: Transparent":"Color: Preset color")),t.backgroundColor=e?"transparent":h.getValue()}))})),d.settingEl.style.display=Boolean(t.backgroundColor)?"":"none";let w,y,v,T,S,_,x,C,I,A=!1;c=new obsidian_module.Setting(a).setName("Background color").addButton((a=>a.setButtonText("Use Canvas Current").onClick((()=>{const a=this.api.getAppState(),i=a.resetCustomPen?.currentItemBackgroundColor??a.currentItemBackgroundColor;[b,E]=e(i),t.backgroundColor=i,this.dirty=!0,p.setValue(i),A=!0,h.setValue(b)})))).addText((a=>{p=a,a.setValue(t.backgroundColor).onChange((a=>{A=!0,this.dirty=!0,t.backgroundColor=a,[b,E]=e(a),b&&h.setValue(b)}))})).addColorPicker((e=>{h=e,e.setValue(b??"#000000").onChange((e=>{A?A=!1:(this.dirty=!0,t.backgroundColor=e+E,p.setValue(e+E))}))})),c.settingEl.style.display=Boolean(t.backgroundColor)&&"transparent"!==t.backgroundColor?"":"none",m=new obsidian_module.Setting(a).setName("Fill Style").addDropdown((e=>e.addOption("","Unset").addOption("dots","Dots (⚠ VERY SLOW performance on large objects!)").addOption("zigzag","Zigzag").addOption("zigzag-line","Zigzag-line").addOption("dashed","Dashed").addOption("hachure","Hachure").addOption("cross-hatch","Cross-hatch").addOption("solid","Solid").setValue(t.fillStyle).onChange((e=>{this.dirty=!0,t.fillStyle=e})))),m.settingEl.style.display=Boolean(t.backgroundColor)&&"transparent"!==t.backgroundColor?"":"none",w=new obsidian_module.Setting(a).setName(fragWithHTML(`Sloppiness: ${null===t.roughness?"Not Set":t.roughness<=.5?"Architect (":t.roughness<=1.5?"Artist (":"Cartoonist ("}${null===t.roughness?"":`${t.roughness})`}`)).setDesc("Line sloppiness of the shape fill pattern").addSlider((e=>e.setLimits(-.5,3,.5).setValue(null===t.roughness?-.5:t.roughness).onChange((e=>{this.dirty=!0,t.roughness=-.5===e?null:e,w.setName(fragWithHTML(`Sloppiness: ${null===t.roughness?"Not Set":t.roughness<=.5?"Architect (":t.roughness<=1.5?"Artist (":"Cartoonist ("}${null===t.roughness?"":`${t.roughness})`}`))})))),y=new obsidian_module.Setting(a).setName(fragWithHTML(`Stroke Width ${0===t.strokeWidth?"Not Set":t.strokeWidth}`)).addSlider((e=>e.setLimits(0,5,.5).setValue(t.strokeWidth).onChange((e=>{this.dirty=!0,t.strokeWidth=e,y.setName(fragWithHTML(`Stroke Width ${0===t.strokeWidth?"Not Set":t.strokeWidth}`))})))),new obsidian_module.Setting(a).setName("Highlighter pen?").addToggle((e=>e.setValue(t.penOptions.highlighter).onChange((e=>{this.dirty=!0,t.penOptions.highlighter=e})))),new obsidian_module.Setting(a).setName("Pressure sensitive pen?").setDesc(fragWithHTML("toggle on: pressure sensitive
toggle off: constant pressure")).addToggle((e=>e.setValue(!t.penOptions.constantPressure).onChange((e=>{this.dirty=!0,t.penOptions.constantPressure=!e,v.settingEl.style.display=t.penOptions.constantPressure?"none":""})))),t.penOptions.hasOutline&&0===t.penOptions.outlineWidth&&(t.penOptions.outlineWidth=.5,this.dirty=!0),!t.penOptions.hasOutline&&t.penOptions.outlineWidth>0&&(t.penOptions.outlineWidth=0,this.dirty=!0),T=new obsidian_module.Setting(a).setName(fragWithHTML(0===t.penOptions.outlineWidth?"No outline":`Outline width ${t.penOptions.outlineWidth}`)).setDesc("If the stroke has an outline, this will mean the stroke color is the outline color, and the background color is the pen stroke's fill color. If the pen does not have an outline then the pen color is the stroke color. The Fill Style setting applies to the fill style of the enclosed shape, not of the line itself. The line can only have solid fill.").addSlider((e=>e.setLimits(0,8,.5).setValue(t.penOptions.outlineWidth).onChange((e=>{this.dirty=!0,t.penOptions.outlineWidth=e,t.penOptions.hasOutline=e>0,T.setName(fragWithHTML(0===t.penOptions.outlineWidth?"No outline":`Outline width ${t.penOptions.outlineWidth}`))})))),a.createEl("h2",{text:"Perfect Freehand settings"}),a.createEl("p").innerHTML='Read the Perfect Freehand documentation following this link.',S=new obsidian_module.Setting(a).setName(fragWithHTML(`Thinnning ${t.penOptions.options.thinning}`)).setDesc(fragWithHTML("The effect of pressure on the stroke's size.
To create a stroke with a steady line, set the thinning option to 0.
To create a stroke that gets thinner with pressure instead of thicker, use a negative number for the thinning option.")).addSlider((e=>e.setLimits(-1,1,.05).setValue(t.penOptions.options.thinning).onChange((e=>{this.dirty,S.setName(fragWithHTML(`Thinnning ${e}`)),t.penOptions.options.thinning=e})))),_=new obsidian_module.Setting(a).setName(fragWithHTML(`Smoothing ${t.penOptions.options.smoothing}`)).setDesc(fragWithHTML("How much to soften the stroke's edges.")).addSlider((e=>e.setLimits(0,1,.05).setValue(t.penOptions.options.smoothing).onChange((e=>{this.dirty,_.setName(fragWithHTML(`Smoothing ${e}`)),t.penOptions.options.smoothing=e})))),x=new obsidian_module.Setting(a).setName(fragWithHTML(`Streamline ${t.penOptions.options.streamline}`)).setDesc(fragWithHTML("\tHow much to streamline the stroke.")).addSlider((e=>e.setLimits(0,1,.05).setValue(t.penOptions.options.streamline).onChange((e=>{this.dirty,x.setName(fragWithHTML(`Streamline ${e}`)),t.penOptions.options.streamline=e})))),new obsidian_module.Setting(a).setName("Easing function").setDesc(fragWithHTML('An easing function for the tapering effect. For more info click here')).addDropdown((e=>e.addOptions(EASINGFUNCTIONS).setValue(t.penOptions.options.easing).onChange((e=>{this.dirty=!0,t.penOptions.options.easing=e})))),v=new obsidian_module.Setting(a).setName("Simulate Pressure").setDesc("Whether to simulate pressure based on velocity.").addDropdown((e=>e.addOption("true","Always").addOption("false","Never").addOption("","Yes for mouse, No for pen").setValue(!0===t.penOptions.options.simulatePressure?"true":!1===t.penOptions.options.simulatePressure?"false":"").onChange((e=>{switch(this.dirty=!0,e){case"true":t.penOptions.options.simulatePressure=!0;break;case"false":t.penOptions.options.simulatePressure=!1;break;default:delete t.penOptions.options.simulatePressure}})))),v.settingEl.style.display=t.penOptions.constantPressure?"none":"",a.createEl("h3",{text:"Start"}),a.createEl("p",{text:"Tapering options for the start of the line."}),new obsidian_module.Setting(a).setName("Cap Start").setDesc("Whether to draw a cap").addToggle((e=>e.setValue(t.penOptions.options.start.cap).onChange((e=>{this.dirty=!0,t.penOptions.options.start.cap=e})))),C=new obsidian_module.Setting(a).setName(fragWithHTML(`Taper: ${!0===t.penOptions.options.start.taper?"true":t.penOptions.options.start.taper}`)).setDesc("The distance to taper. If set to true, the taper will be the total length of the stroke.").addSlider((e=>e.setLimits(0,151,1).setValue("boolean"==typeof t.penOptions.options.start.taper?151:t.penOptions.options.start.taper).onChange((e=>{this.dirty,t.penOptions.options.start.taper=151===e||e,C.setName(fragWithHTML(`Taper: ${!0===t.penOptions.options.start.taper?"true":t.penOptions.options.start.taper}`))})))),new obsidian_module.Setting(a).setName("Easing function").setDesc(fragWithHTML('An easing function for the tapering effect. For more info click here')).addDropdown((e=>e.addOptions(EASINGFUNCTIONS).setValue(t.penOptions.options.start.easing).onChange((e=>{this.dirty=!0,t.penOptions.options.start.easing=e})))),a.createEl("h3",{text:"End"}),a.createEl("p",{text:"Tapering options for the end of the line."}),new obsidian_module.Setting(a).setName("Cap End").setDesc("Whether to draw a cap").addToggle((e=>e.setValue(t.penOptions.options.end.cap).onChange((e=>{this.dirty=!0,t.penOptions.options.end.cap=e})))),I=new obsidian_module.Setting(a).setName(fragWithHTML(`Taper: ${!0===t.penOptions.options.end.taper?"true":t.penOptions.options.end.taper}`)).setDesc("The distance to taper. If set to true, the taper will be the total length of the stroke.").addSlider((e=>e.setLimits(0,151,1).setValue("boolean"==typeof t.penOptions.options.end.taper?151:t.penOptions.options.end.taper).onChange((e=>{this.dirty,t.penOptions.options.end.taper=151===e||e,I.setName(fragWithHTML(`Taper: ${!0===t.penOptions.options.end.taper?"true":t.penOptions.options.end.taper}`))})))),new obsidian_module.Setting(a).setName("Easing function").setDesc(fragWithHTML('An easing function for the tapering effect. For more info click here')).addDropdown((e=>e.addOptions(EASINGFUNCTIONS).setValue(t.penOptions.options.end.easing).onChange((e=>{this.dirty=!0,t.penOptions.options.end.easing=e}))))}}var defaultAttributes={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};const toKebabCase=e=>e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),createLucideIcon=(e,t)=>{const a=React.forwardRef((({color:a="currentColor",size:i=24,strokeWidth:n=2,absoluteStrokeWidth:r,children:s,...o},l)=>React.createElement("svg",{ref:l,...defaultAttributes,width:i,height:i,stroke:a,strokeWidth:r?24*Number(n)/Number(i):n,className:`lucide lucide-${toKebabCase(e)}`,...o},[...t.map((([e,t])=>React.createElement(e,t))),...(Array.isArray(s)?s:[s])||[]])));return a.displayName=`${e}`,a};var createLucideIcon$1=createLucideIcon;const Copy=createLucideIcon$1("Copy",[["rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2",key:"17jyea"}],["path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2",key:"zix9uf"}]]),Crop=createLucideIcon$1("Crop",[["path",{d:"M6 2v14a2 2 0 0 0 2 2h14",key:"ron5a4"}],["path",{d:"M18 22V8a2 2 0 0 0-2-2H2",key:"7s9ehn"}]]),Globe=createLucideIcon$1("Globe",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"2",x2:"22",y1:"12",y2:"12",key:"1dnqot"}],["path",{d:"M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z",key:"nb9nel"}]]),RotateCcw=createLucideIcon$1("RotateCcw",[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"1357e3"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}]]),Scan=createLucideIcon$1("Scan",[["path",{d:"M3 7V5a2 2 0 0 1 2-2h2",key:"aa7l1z"}],["path",{d:"M17 3h2a2 2 0 0 1 2 2v2",key:"4qcy5o"}],["path",{d:"M21 17v2a2 2 0 0 1-2 2h-2",key:"6vwrx8"}],["path",{d:"M7 21H5a2 2 0 0 1-2-2v-2",key:"ioqczr"}]]),Settings=createLucideIcon$1("Settings",[["path",{d:"M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z",key:"1qme2f"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]),TextSelect=createLucideIcon$1("TextSelect",[["path",{d:"M5 3a2 2 0 0 0-2 2",key:"y57alp"}],["path",{d:"M19 3a2 2 0 0 1 2 2",key:"18rm91"}],["path",{d:"M21 19a2 2 0 0 1-2 2",key:"1j7049"}],["path",{d:"M5 21a2 2 0 0 1-2-2",key:"sbafld"}],["path",{d:"M9 3h1",key:"1yesri"}],["path",{d:"M9 21h1",key:"15o7lz"}],["path",{d:"M14 3h1",key:"1ec4yj"}],["path",{d:"M14 21h1",key:"v9vybs"}],["path",{d:"M3 9v1",key:"1r0deq"}],["path",{d:"M21 9v1",key:"mxsmne"}],["path",{d:"M3 14v1",key:"vnatye"}],["path",{d:"M21 14v1",key:"169vum"}],["line",{x1:"7",x2:"15",y1:"8",y2:"8",key:"1758g8"}],["line",{x1:"7",x2:"17",y1:"12",y2:"12",key:"197423"}],["line",{x1:"7",x2:"13",y1:"16",y2:"16",key:"37cgm6"}]]),ICONS={ExportImage:React__namespace.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"var(--icon-fill-color)",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},React__namespace.createElement("g",{strokeWidth:"1.25"},React__namespace.createElement("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),React__namespace.createElement("path",{d:"M15 8h.01"}),React__namespace.createElement("path",{d:"M12 20h-5a3 3 0 0 1 -3 -3v-10a3 3 0 0 1 3 -3h10a3 3 0 0 1 3 3v5"}),React__namespace.createElement("path",{d:"M4 15l4 -4c.928 -.893 2.072 -.893 3 0l4 4"}),React__namespace.createElement("path",{d:"M14 14l1 -1c.617 -.593 1.328 -.793 2.009 -.598"}),React__namespace.createElement("path",{d:"M19 16v6"}),React__namespace.createElement("path",{d:"M22 19l-3 3l-3 -3"}))),BackOfNote:React__namespace.createElement(TextSelect,null),Reload:React__namespace.createElement(RotateCcw,null),Copy:React__namespace.createElement(Copy,null),Globe:React__namespace.createElement(Globe,null),Crop:React__namespace.createElement(Crop,null),ZoomToSelectedElement:React__namespace.createElement(Scan,null),Properties:React__namespace.createElement(Settings,null),ZoomToSection:React__namespace.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"var(--icon-fill-color)",strokeWidth:"1",strokeLinecap:"round",strokeLinejoin:"round"},React__namespace.createElement("text",{x:"6",y:"18",fontSize:"22px"},"#")),ZoomToBlock:React__namespace.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"var(--icon-fill-color)",strokeWidth:"1",strokeLinecap:"round",strokeLinejoin:"round"},React__namespace.createElement("text",{x:"1",y:"18",fontSize:"22px"},"#^")),Learn:React__namespace.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"var(--icon-fill-color)",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},React__namespace.createElement("path",{d:"M21.42 10.922a1 1 0 0 0-.019-1.838L12.83 5.18a2 2 0 0 0-1.66 0L2.6 9.08a1 1 0 0 0 0 1.832l8.57 3.908a2 2 0 0 0 1.66 0z"}),React__namespace.createElement("path",{d:"M22 10v6"}),React__namespace.createElement("path",{d:"M6 12.5V16a6 3 0 0 0 12 0v-3.5"})),Discord:React__namespace.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"var(--icon-fill-color)",stroke:"none",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",viewBox:"0 0 640 512"},React__namespace.createElement("path",{d:"M524.531,69.836a1.5,1.5,0,0,0-.764-.7A485.065,485.065,0,0,0,404.081,32.03a1.816,1.816,0,0,0-1.923.91,337.461,337.461,0,0,0-14.9,30.6,447.848,447.848,0,0,0-134.426,0,309.541,309.541,0,0,0-15.135-30.6,1.89,1.89,0,0,0-1.924-.91A483.689,483.689,0,0,0,116.085,69.137a1.712,1.712,0,0,0-.788.676C39.068,183.651,18.186,294.69,28.43,404.354a2.016,2.016,0,0,0,.765,1.375A487.666,487.666,0,0,0,176.02,479.918a1.9,1.9,0,0,0,2.063-.676A348.2,348.2,0,0,0,208.12,430.4a1.86,1.86,0,0,0-1.019-2.588,321.173,321.173,0,0,1-45.868-21.853,1.885,1.885,0,0,1-.185-3.126c3.082-2.309,6.166-4.711,9.109-7.137a1.819,1.819,0,0,1,1.9-.256c96.229,43.917,200.41,43.917,295.5,0a1.812,1.812,0,0,1,1.924.233c2.944,2.426,6.027,4.851,9.132,7.16a1.884,1.884,0,0,1-.162,3.126,301.407,301.407,0,0,1-45.89,21.83,1.875,1.875,0,0,0-1,2.611,391.055,391.055,0,0,0,30.014,48.815,1.864,1.864,0,0,0,2.063.7A486.048,486.048,0,0,0,610.7,405.729a1.882,1.882,0,0,0,.765-1.352C623.729,277.594,590.933,167.465,524.531,69.836ZM222.491,337.58c-28.972,0-52.844-26.587-52.844-59.239S193.056,219.1,222.491,219.1c29.665,0,53.306,26.82,52.843,59.239C275.334,310.993,251.924,337.58,222.491,337.58Zm195.38,0c-28.971,0-52.843-26.587-52.843-59.239S388.437,219.1,417.871,219.1c29.667,0,53.307,26.82,52.844,59.239C470.715,310.993,447.538,337.58,417.871,337.58Z"})),Github:React__namespace.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"var(--icon-fill-color)",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},React__namespace.createElement("path",{d:"M15 22v-4a4.8 4.8 0 0 0-1-3.5c3 0 6-2 6-5.5.08-1.25-.27-2.48-1-3.5.28-1.15.28-2.35 0-3.5 0 0-1 0-3 1.5-2.64-.5-5.36-.5-8 0C6 2 5 2 5 2c-.3 1.15-.3 2.35 0 3.5A5.403 5.403 0 0 0 4 9c0 3.5 3 5.5 6 5.5-.39.49-.68 1.05-.85 1.65-.17.6-.22 1.23-.15 1.85v4"}),React__namespace.createElement("path",{d:"M9 18c-4.51 2-5-2-7-2"})),YouTube:React__namespace.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"var(--icon-fill-color)",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},React__namespace.createElement("path",{d:"M12 19c-2.3 0-6.4-.2-8.1-.6-.7-.2-1.2-.7-1.4-1.4-.3-1.1-.5-3.4-.5-5s.2-3.9.5-5c.2-.7.7-1.2 1.4-1.4C5.6 5.2 9.7 5 12 5s6.4.2 8.1.6c.7.2 1.2.7 1.4 1.4.3 1.1.5 3.4.5 5s-.2 3.9-.5 5c-.2.7-.7 1.2-1.4 1.4-1.7.4-5.8.6-8.1.6 0 0 0 0 0 0z"}),React__namespace.createElement("polygon",{points:"10 15 15 12 10 9"})),heart:React__namespace.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"var(--icon-fill-color)",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},React__namespace.createElement("path",{d:"M20.42 4.58a5.4 5.4 0 0 0-7.65 0l-.77.78-.77-.78a5.4 5.4 0 0 0-7.65 0C1.46 6.7 1.33 10.28 4 13l8 8 8-8c2.67-2.72 2.54-6.3.42-8.42z"})),twitter:React__namespace.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"var(--icon-fill-color)",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},React__namespace.createElement("path",{d:"M22 4s-.7 2.1-2 3.4c1.6 10-9.4 17.3-18 11.6 2.2.1 4.4-.6 6-2C3 15.5.5 9.6 3 5c2.2 2.6 5.6 4.1 9 4-.9-4.2 4-6.6 7-3.8 1.1 0 3-1.2 3-1.2z"})),exportLibrary:React__namespace.createElement("svg",{"aria-hidden":"true",focusable:"false",role:"img",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 200 190",fill:"var(--icon-fill-color)"},React__namespace.createElement("g",{fillRule:"evenodd"},React__namespace.createElement("path",{strokeWidth:"0",d:"M50 10h20v20H50"}),React__namespace.createElement("path",{fill:"none",stroke:"var(--icon-fill-color)",strokeWidth:"2",d:"M50 10h20m-20 0h20m0 0v20m0-20v20m0 0H50m20 0H50m0 0V10m0 20V10"})),React__namespace.createElement("g",{fillRule:"evenodd"},React__namespace.createElement("path",{strokeWidth:"0",d:"M90 10h20v20H90"}),React__namespace.createElement("path",{fill:"none",stroke:"var(--icon-fill-color)",strokeWidth:"2",d:"M90 10h20m-20 0h20m0 0v20m0-20v20m0 0H90m20 0H90m0 0V10m0 20V10"})),React__namespace.createElement("g",{fillRule:"evenodd"},React__namespace.createElement("path",{strokeWidth:"0",d:"M130 10h20v20h-20"}),React__namespace.createElement("path",{fill:"none",stroke:"var(--icon-fill-color)",strokeWidth:"2",d:"M130 10h20m-20 0h20m0 0v20m0-20v20m0 0h-20m20 0h-20m0 0V10m0 20V10"})),React__namespace.createElement("g",{fillRule:"evenodd"},React__namespace.createElement("path",{strokeWidth:"0",d:"M170 10h20v20h-20"}),React__namespace.createElement("path",{fill:"none",stroke:"var(--icon-fill-color)",strokeWidth:"2",d:"M170 10h20m-20 0h20m0 0v20m0-20v20m0 0h-20m20 0h-20m0 0V10m0 20V10"})),React__namespace.createElement("g",{fillRule:"evenodd"},React__namespace.createElement("path",{strokeWidth:"0",d:"M70 50h60v80h20l-50 50-50-50h20V50"}),React__namespace.createElement("path",{fill:"none",stroke:"var(--icon-fill-color)",strokeWidth:"2",d:"M70 50h60m-60 0h60m0 0v80m0-80v80m0 0h20m-20 0h20m0 0-50 50m50-50-50 50m0 0-50-50m50 50-50-50m0 0h20m-20 0h20m0 0V50m0 80V50m0 0s0 0 0 0m0 0s0 0 0 0m0 0s0 0 0 0m0 0s0 0 0 0"})),React__namespace.createElement("g",{fillRule:"evenodd"},React__namespace.createElement("path",{strokeWidth:"0",d:"M10 10h20v20H10"}),React__namespace.createElement("path",{fill:"none",stroke:"var(--icon-fill-color)",strokeWidth:"2",d:"M10 10h20m-20 0h20m0 0v20m0-20v20m0 0H10m20 0H10m0 0V10m0 20V10"}))),insertPDF:React__namespace.createElement("svg",{"aria-hidden":"true",focusable:"false",role:"img",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 512 512",fill:"var(--icon-fill-color)",stroke:"none"},React__namespace.createElement("path",{d:"M64 464H96v48H64c-35.3 0-64-28.7-64-64V64C0 28.7 28.7 0 64 0H229.5c17 0 33.3 6.7 45.3 18.7l90.5 90.5c12 12 18.7 28.3 18.7 45.3V288H336V160H256c-17.7 0-32-14.3-32-32V48H64c-8.8 0-16 7.2-16 16V448c0 8.8 7.2 16 16 16zM176 352h32c30.9 0 56 25.1 56 56s-25.1 56-56 56H192v32c0 8.8-7.2 16-16 16s-16-7.2-16-16V448 368c0-8.8 7.2-16 16-16zm32 80c13.3 0 24-10.7 24-24s-10.7-24-24-24H192v48h16zm96-80h32c26.5 0 48 21.5 48 48v64c0 26.5-21.5 48-48 48H304c-8.8 0-16-7.2-16-16V368c0-8.8 7.2-16 16-16zm32 128c8.8 0 16-7.2 16-16V400c0-8.8-7.2-16-16-16H320v96h16zm80-112c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16s-7.2 16-16 16H448v32h32c8.8 0 16 7.2 16 16s-7.2 16-16 16H448v48c0 8.8-7.2 16-16 16s-16-7.2-16-16V432 368z"})),insertImage:React__namespace.createElement("svg",{"aria-hidden":"true",focusable:"false",role:"img",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 512 512",fill:"var(--icon-fill-color)",stroke:"none"},React__namespace.createElement("path",{d:"M464 64H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V112c0-26.51-21.49-48-48-48zm-6 336H54a6 6 0 0 1-6-6V118a6 6 0 0 1 6-6h404a6 6 0 0 1 6 6v276a6 6 0 0 1-6 6zM128 152c-22.091 0-40 17.909-40 40s17.909 40 40 40 40-17.909 40-40-17.909-40-40-40zM96 352h320v-80l-87.515-87.515c-4.686-4.686-12.284-4.686-16.971 0L192 304l-39.515-39.515c-4.686-4.686-12.284-4.686-16.971 0L96 304v48z"})),insertMD:React__namespace.createElement("svg",{"aria-hidden":"true",focusable:"false",role:"img",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 384 512",fill:"var(--icon-fill-color)",stroke:"none"},React__namespace.createElement("path",{d:"M288 248v28c0 6.6-5.4 12-12 12H108c-6.6 0-12-5.4-12-12v-28c0-6.6 5.4-12 12-12h168c6.6 0 12 5.4 12 12zm-12 72H108c-6.6 0-12 5.4-12 12v28c0 6.6 5.4 12 12 12h168c6.6 0 12-5.4 12-12v-28c0-6.6-5.4-12-12-12zm108-188.1V464c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V48C0 21.5 21.5 0 48 0h204.1C264.8 0 277 5.1 286 14.1L369.9 98c9 8.9 14.1 21.2 14.1 33.9zm-128-80V128h76.1L256 51.9zM336 464V176H232c-13.3 0-24-10.7-24-24V48H48v416h288z"})),insertLaTeX:React__namespace.createElement("svg",{"aria-hidden":"true",focusable:"false",role:"img",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 576 512",stroke:"none",fill:"var(--icon-fill-color)",strokeWidth:"20"},React__namespace.createElement("path",{d:"M571.31 251.31l-22.62-22.62c-6.25-6.25-16.38-6.25-22.63 0L480 274.75l-46.06-46.06c-6.25-6.25-16.38-6.25-22.63 0l-22.62 22.62c-6.25 6.25-6.25 16.38 0 22.63L434.75 320l-46.06 46.06c-6.25 6.25-6.25 16.38 0 22.63l22.62 22.62c6.25 6.25 16.38 6.25 22.63 0L480 365.25l46.06 46.06c6.25 6.25 16.38 6.25 22.63 0l22.62-22.62c6.25-6.25 6.25-16.38 0-22.63L525.25 320l46.06-46.06c6.25-6.25 6.25-16.38 0-22.63zM552 0H307.65c-14.54 0-27.26 9.8-30.95 23.87l-84.79 322.8-58.41-106.1A32.008 32.008 0 0 0 105.47 224H24c-13.25 0-24 10.74-24 24v48c0 13.25 10.75 24 24 24h43.62l88.88 163.73C168.99 503.5 186.3 512 204.94 512c17.27 0 44.44-9 54.28-41.48L357.03 96H552c13.25 0 24-10.75 24-24V24c0-13.26-10.75-24-24-24z"})),insertLink:React__namespace.createElement("svg",{"aria-hidden":"true",focusable:"false",role:"img",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 512 512",stroke:"none",fill:"var(--icon-fill-color)",strokeWidth:"20"},React__namespace.createElement("path",{d:"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z"})),search:React__namespace.createElement("svg",{"aria-hidden":"true",focusable:"false",role:"img",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 512 512",stroke:"var(--icon-fill-color)",fill:"var(--icon-fill-color)",strokeWidth:"20"},React__namespace.createElement("path",{d:"M500.3 443.7l-119.7-119.7c27.22-40.41 40.65-90.9 33.46-144.7C401.8 87.79 326.8 13.32 235.2 1.723C99.01-15.51-15.51 99.01 1.724 235.2c11.6 91.64 86.08 166.7 177.6 178.9c53.8 7.189 104.3-6.236 144.7-33.46l119.7 119.7c15.62 15.62 40.95 15.62 56.57 0C515.9 484.7 515.9 459.3 500.3 443.7zM79.1 208c0-70.58 57.42-128 128-128s128 57.42 128 128c0 70.58-57.42 128-128 128S79.1 278.6 79.1 208z"})),ocr:React__namespace.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"var(--icon-fill-color)",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},React__namespace.createElement("path",{d:"m6 18 6-12 6 12"}),React__namespace.createElement("path",{d:"M8 14h8"}),React__namespace.createElement("path",{d:"M3 7V5a2 2 0 0 1 2-2h2"}),React__namespace.createElement("path",{d:"M17 3h2a2 2 0 0 1 2 2v2"}),React__namespace.createElement("path",{d:"M21 17v2a2 2 0 0 1-2 2h-2"}),React__namespace.createElement("path",{d:"M7 21H5a2 2 0 0 1-2-2v-2"})),scriptEngine:React__namespace.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 100 100",stroke:"var(--icon-fill-color)",fill:"var(--icon-fill-color)",strokeLinecap:"round",strokeWidth:"4"},React__namespace.createElement("g",{transform:"translate(-8,-8)"},React__namespace.createElement("path",{d:"M24.318 37.983c-1.234-1.232-8.433-3.903-7.401-7.387 1.057-3.484 9.893-12.443 13.669-13.517 3.776-1.074 6.142 6.523 9.012 7.073 2.87.55 6.797-1.572 8.207-3.694 1.384-2.148-3.147-7.413.15-9.168 3.298-1.755 16.389-2.646 19.611-1.284 3.247 1.363-1.611 7.335-.151 9.483 1.46 2.148 6.067 3.746 8.836 3.38 2.769-.368 4.154-6.733 7.728-5.633 3.575 1.1 12.36 8.828 13.67 12.233 1.308 3.406-5.186 5.423-5.79 8.2-.58 2.75-.026 6.705 2.265 8.355 2.266 1.65 9.642-1.78 11.404 1.598 1.762 3.38 1.007 15.35-.806 18.651-1.787 3.353-7.753-.367-9.969 1.31-2.215 1.65-3.901 5.92-3.373 8.67.504 2.777 7.754 4.48 6.445 7.885C96.49 87.543 87.15 95.454 83.5 96.685c-3.65 1.231-4.96-4.741-7.577-5.16-2.593-.393-6.57.707-8.03 2.75-1.436 2.017 2.668 7.806-.63 9.483-3.323 1.676-15.759 2.226-19.157.655-3.373-1.598.554-7.964-1.108-10.138-1.687-2.174-6.394-3.431-9.012-2.907-2.643.55-3.273 7.282-6.747 6.103-3.499-1.126-12.788-9.535-14.172-13.019-1.36-3.484 5.437-5.108 5.966-7.858.529-2.777-.68-7.073-2.744-8.697-2.064-1.624-7.93 2.41-9.642-1.126-1.737-3.537-2.441-16.765-.654-20.118 1.787-3.3 9.062 1.598 11.429.183 2.366-1.44 2.316-7.282 2.769-8.749m.126-.104c-1.234-1.232-8.433-3.903-7.401-7.387 1.057-3.484 9.893-12.443 13.669-13.517 3.776-1.074 6.142 6.523 9.012 7.073 2.87.55 6.797-1.572 8.207-3.694 1.384-2.148-3.147-7.413.15-9.168 3.298-1.755 16.389-2.646 19.611-1.284 3.247 1.363-1.611 7.335-.151 9.483 1.46 2.148 6.067 3.746 8.836 3.38 2.769-.368 4.154-6.733 7.728-5.633 3.575 1.1 12.36 8.828 13.67 12.233 1.308 3.406-5.186 5.423-5.79 8.2-.58 2.75-.026 6.705 2.265 8.355 2.266 1.65 9.642-1.78 11.404 1.598 1.762 3.38 1.007 15.35-.806 18.651-1.787 3.353-7.753-.367-9.969 1.31-2.215 1.65-3.901 5.92-3.373 8.67.504 2.777 7.754 4.48 6.445 7.885C96.49 87.543 87.15 95.454 83.5 96.685c-3.65 1.231-4.96-4.741-7.577-5.16-2.593-.393-6.57.707-8.03 2.75-1.436 2.017 2.668 7.806-.63 9.483-3.323 1.676-15.759 2.226-19.157.655-3.373-1.598.554-7.964-1.108-10.138-1.687-2.174-6.394-3.431-9.012-2.907-2.643.55-3.273 7.282-6.747 6.103-3.499-1.126-12.788-9.535-14.172-13.019-1.36-3.484 5.437-5.108 5.966-7.858.529-2.777-.68-7.073-2.744-8.697-2.064-1.624-7.93 2.41-9.642-1.126-1.737-3.537-2.441-16.765-.654-20.118 1.787-3.3 9.062 1.598 11.429.183 2.366-1.44 2.316-7.282 2.769-8.749",fill:"none",strokeWidth:"2"}),React__namespace.createElement("path",{d:"M81.235 56.502a23.3 23.3 0 0 1-1.46 8.068 20.785 20.785 0 0 1-1.762 3.72 24.068 24.068 0 0 1-5.337 6.26 22.575 22.575 0 0 1-3.449 2.358 23.726 23.726 0 0 1-7.803 2.803 24.719 24.719 0 0 1-8.333 0 24.102 24.102 0 0 1-4.028-1.074 23.71 23.71 0 0 1-3.776-1.729 23.259 23.259 0 0 1-6.369-5.265 23.775 23.775 0 0 1-2.416-3.353 24.935 24.935 0 0 1-1.762-3.72 23.765 23.765 0 0 1-1.083-3.981 23.454 23.454 0 0 1 0-8.173c.252-1.336.604-2.698 1.083-3.956a24.935 24.935 0 0 1 1.762-3.72 22.587 22.587 0 0 1 2.416-3.378c.881-1.048 1.888-2.017 2.946-2.908a24.38 24.38 0 0 1 3.423-2.357 23.71 23.71 0 0 1 3.776-1.73 21.74 21.74 0 0 1 4.028-1.047 23.437 23.437 0 0 1 8.333 0 24.282 24.282 0 0 1 7.803 2.777 26.198 26.198 0 0 1 3.45 2.357 24.62 24.62 0 0 1 5.336 6.287 20.785 20.785 0 0 1 1.762 3.72 21.32 21.32 0 0 1 1.083 3.955c.251 1.336.302 3.405.377 4.086.05.681.05-.68 0 0",fill:"none"}),React__namespace.createElement("path",{d:"M69.404 56.633c-6.596-3.3-13.216-6.6-19.51-9.744m19.51 9.744c-6.747-3.379-13.493-6.758-19.51-9.744m0 0v19.489m0-19.49v19.49m0 0c4.355-2.148 8.71-4.322 19.51-9.745m-19.51 9.745c3.978-1.965 7.93-3.956 19.51-9.745m0 0h0m0 0h0"}))),openLink:React__namespace.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"var(--icon-fill-color)",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},React__namespace.createElement("path",{d:"M4 22h14a2 2 0 0 0 2-2V7.5L14.5 2H6a2 2 0 0 0-2 2v7"}),React__namespace.createElement("polyline",{points:"14 2 14 8 20 8"}),React__namespace.createElement("path",{d:"m10 18 3-3-3-3"}),React__namespace.createElement("path",{d:"M4 18v-1a2 2 0 0 1 2-2h6"})),openLinkProperties:React__namespace.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"var(--icon-fill-color)",strokeWidth:"3",strokeLinecap:"round",strokeLinejoin:"round"},React__namespace.createElement("path",{d:"M10 12.5 8 15l2 2.5"}),React__namespace.createElement("path",{d:"m14 12.5 2 2.5-2 2.5"}),React__namespace.createElement("path",{d:"M14 2v4a2 2 0 0 0 2 2h4"}),React__namespace.createElement("path",{d:"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7z"})),switchToMarkdown:React__namespace.createElement("svg",{"aria-hidden":"true",focusable:"false",role:"img",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 640 512",stroke:"var(--icon-fill-color)",strokeWidth:"10",fill:"var(--icon-fill-color)"},React__namespace.createElement("path",{d:"M593.8 59.1H46.2C20.7 59.1 0 79.8 0 105.2v301.5c0 25.5 20.7 46.2 46.2 46.2h547.7c25.5 0 46.2-20.7 46.1-46.1V105.2c0-25.4-20.7-46.1-46.2-46.1zM338.5 360.6H277v-120l-61.5 76.9-61.5-76.9v120H92.3V151.4h61.5l61.5 76.9 61.5-76.9h61.5v209.2zm135.3 3.1L381.5 256H443V151.4h61.5V256H566z"})),gotoFullScreen:React__namespace.createElement("svg",{"aria-hidden":"true",focusable:"false",role:"img",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 448 512",stroke:"var(--icon-fill-color)",fill:"var(--icon-fill-color)",strokeWidth:"20"},React__namespace.createElement("path",{d:"M128 32H32C14.31 32 0 46.31 0 64v96c0 17.69 14.31 32 32 32s32-14.31 32-32V96h64c17.69 0 32-14.31 32-32S145.7 32 128 32zM416 32h-96c-17.69 0-32 14.31-32 32s14.31 32 32 32h64v64c0 17.69 14.31 32 32 32s32-14.31 32-32V64C448 46.31 433.7 32 416 32zM128 416H64v-64c0-17.69-14.31-32-32-32s-32 14.31-32 32v96c0 17.69 14.31 32 32 32h96c17.69 0 32-14.31 32-32S145.7 416 128 416zM416 320c-17.69 0-32 14.31-32 32v64h-64c-17.69 0-32 14.31-32 32s14.31 32 32 32h96c17.69 0 32-14.31 32-32v-96C448 334.3 433.7 320 416 320z"})),exitFullScreen:React__namespace.createElement("svg",{"aria-hidden":"true",focusable:"false",role:"img",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 448 512",stroke:"var(--icon-fill-color)",fill:"var(--icon-fill-color)",strokeWidth:"20"},React__namespace.createElement("path",{d:"M128 320H32c-17.69 0-32 14.31-32 32s14.31 32 32 32h64v64c0 17.69 14.31 32 32 32s32-14.31 32-32v-96C160 334.3 145.7 320 128 320zM416 320h-96c-17.69 0-32 14.31-32 32v96c0 17.69 14.31 32 32 32s32-14.31 32-32v-64h64c17.69 0 32-14.31 32-32S433.7 320 416 320zM320 192h96c17.69 0 32-14.31 32-32s-14.31-32-32-32h-64V64c0-17.69-14.31-32-32-32s-32 14.31-32 32v96C288 177.7 302.3 192 320 192zM128 32C110.3 32 96 46.31 96 64v64H32C14.31 128 0 142.3 0 160s14.31 32 32 32h96c17.69 0 32-14.31 32-32V64C160 46.31 145.7 32 128 32z"})),releaseNotes:React__namespace.createElement("svg",{"aria-hidden":"true",focusable:"false",role:"img",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 512 512",stroke:"var(--icon-fill-color)",fill:"var(--icon-fill-color)",strokeWidth:"20"},React__namespace.createElement("path",{d:"M0 219.2v212.5c0 14.25 11.62 26.25 26.5 27C75.32 461.2 180.2 471.3 240 511.9V245.2C181.4 205.5 79.99 194.8 29.84 192C13.59 191.1 0 203.6 0 219.2zM482.2 192c-50.09 2.848-151.3 13.47-209.1 53.09C272.1 245.2 272 245.3 272 245.5v266.5c60.04-40.39 164.7-50.76 213.5-53.28C500.4 457.9 512 445.9 512 431.7V219.2C512 203.6 498.4 191.1 482.2 192zM352 96c0-53-43-96-96-96S160 43 160 96s43 96 96 96S352 149 352 96z"})),rawMode:React__namespace.createElement("svg",{"aria-hidden":"true",focusable:"false",role:"img",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 100 60"},React__namespace.createElement("path",{stroke:"var(--icon-fill-color)",strokeWidth:"4",d:"M20 10H10m10 0H10m0 0v40m0-40v40m0 0h10m-10 0h10M40 10H30m10 0H30m0 0v40m0-40v40m0 0h10m-10 0h10M60 10h10m-10 0h10m0 0v40m0-40v40m0 0H60m10 0H60M80 10h10m-10 0h10m0 0v40m0-40v40m0 0H80m10 0H80"})),parsedMode:React__namespace.createElement("svg",{"aria-hidden":"true",focusable:"false",role:"img",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 576 512",stroke:"var(--icon-fill-color)",strokeWidth:"20"},React__namespace.createElement("path",{d:"M574.1 280.4l-45.38-181.8c-5.875-23.63-21.62-44-43-55.75c-21.5-11.75-46.1-14.13-70.25-6.375l-15.25 5.125c-8.375 2.75-12.87 11.88-10 20.25l5 15.13c2.75 8.375 11.88 12.88 20.25 10.13l13.12-4.375c10.88-3.625 23-3.625 33.25 1.75c10.25 5.375 17.5 14.5 20.38 25.75l38.38 153.9c-22.12-6.875-49.75-12.5-81.13-12.5c-34.88 0-73.1 7-114.9 26.75H251.4C210.5 258.6 171.4 251.6 136.5 251.6c-31.38 0-59 5.625-81.12 12.5l38.38-153.9c2.875-11.25 10.12-20.38 20.5-25.75C124.4 79.12 136.5 79.12 147.4 82.74l13.12 4.375c8.375 2.75 17.5-1.75 20.25-10.13l5-15.13C188.6 53.49 184.1 44.37 175.6 41.62l-15.25-5.125c-23.13-7.75-48.75-5.375-70.13 6.375c-21.37 11.75-37.12 32.13-43 55.75L1.875 280.4C.6251 285.4 .0001 290.6 .0001 295.9v70.25C.0001 428.1 51.63 480 115.3 480h37.13c60.25 0 110.4-46 114.9-105.4l2.875-38.63h35.75l2.875 38.63C313.3 433.1 363.4 480 423.6 480h37.13c63.62 0 115.2-51 115.2-113.9V295.9C576 290.6 575.4 285.5 574.1 280.4zM203.4 369.7c-2 26-24.38 46.25-51 46.25H115.2C87 415.1 64 393.6 64 366.1v-37.5c18.12-6.5 43.38-13 72.62-13c23.88 0 47.25 4.375 69.88 13L203.4 369.7zM512 366.1c0 27.5-23 49.88-51.25 49.88h-37.13c-26.62 0-49-20.25-51-46.25l-3.125-41.13c22.62-8.625 46.13-13 70-13c29 0 54.38 6.5 72.5 13V366.1z"})),convertFile:React__namespace.createElement("svg",{"aria-hidden":"true",focusable:"false",role:"img",viewBox:"0 110 700 340",xmlns:"http://www.w3.org/2000/svg",stroke:"var(--icon-fill-color)",strokeWidth:"20"},React__namespace.createElement("path",{d:"m593.95 239.4v-1.5742c-0.85547-1.8828-2.043-3.6016-3.5-5.0742l-52.5-52.5c-1.4688-1.457-3.1875-2.6445-5.0742-3.5h-1.5742c-1.4727-0.49219-3.0039-0.78516-4.5508-0.875h-124.25c-4.6406 0-9.0938 1.8438-12.375 5.125s-5.125 7.7344-5.125 12.375v87.5h-70v-105.88-1.0508c-0.089844-1.5469-0.38281-3.0781-0.875-4.5508v-1.5742c-0.85547-1.8828-2.043-3.6016-3.5-5.0742l-52.5-52.5c-1.4727-1.457-3.1914-2.6445-5.0742-3.5h-1.5742c-1.7031-0.875-3.5352-1.4688-5.4258-1.75h-123.55c-4.6406 0-9.0938 1.8438-12.375 5.125s-5.125 7.7344-5.125 12.375v245c0 4.6406 1.8438 9.0938 5.125 12.375s7.7344 5.125 12.375 5.125h175c4.6406 0 9.0938-1.8438 12.375-5.125s5.125-7.7344 5.125-12.375v-52.5h70v122.5c0 4.6406 1.8438 9.0938 5.125 12.375s7.7344 5.125 12.375 5.125h175c4.6406 0 9.0938-1.8438 12.375-5.125s5.125-7.7344 5.125-12.375v-192.5-1.0508c-0.14453-1.5547-0.5-3.0859-1.0508-4.5508zm-313.95 110.6h-140v-210h87.5v35c0 4.6406 1.8438 9.0938 5.125 12.375s7.7344 5.125 12.375 5.125h35v87.5h-52.5c-6.2539 0-12.031 3.3359-15.156 8.75s-3.125 12.086 0 17.5 8.9023 8.75 15.156 8.75h52.5zm140 70v-105h27.824l-5.0742 5.0742c-3.7031 3.1719-5.9141 7.7461-6.1055 12.617-0.1875 4.8711 1.668 9.6016 5.1133 13.051 3.4492 3.4453 8.1797 5.3008 13.051 5.1133 4.8711-0.19141 9.4453-2.4023 12.617-6.1055l35-35c3.2578-3.2773 5.0898-7.7148 5.0898-12.336 0-4.625-1.832-9.0586-5.0898-12.34l-35-35c-4.5078-3.8555-10.66-5.1719-16.348-3.4883-5.6875 1.6797-10.137 6.1289-11.816 11.816-1.6836 5.6914-0.37109 11.844 3.4883 16.348l5.0742 5.0742h-27.824v-69.824h87.5v35c0 4.6406 1.8438 9.0938 5.125 12.375s7.7344 5.125 12.375 5.125h35v157.5z"})),cog:React__namespace.createElement("svg",{"aria-hidden":"true",focusable:"false",role:"img",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 512 512",fill:"var(--icon-fill-color)",stroke:"none"},React__namespace.createElement("path",{d:"M495.9 166.6C499.2 175.2 496.4 184.9 489.6 191.2L446.3 230.6C447.4 238.9 448 247.4 448 256C448 264.6 447.4 273.1 446.3 281.4L489.6 320.8C496.4 327.1 499.2 336.8 495.9 345.4C491.5 357.3 486.2 368.8 480.2 379.7L475.5 387.8C468.9 398.8 461.5 409.2 453.4 419.1C447.4 426.2 437.7 428.7 428.9 425.9L373.2 408.1C359.8 418.4 344.1 427 329.2 433.6L316.7 490.7C314.7 499.7 307.7 506.1 298.5 508.5C284.7 510.8 270.5 512 255.1 512C241.5 512 227.3 510.8 213.5 508.5C204.3 506.1 197.3 499.7 195.3 490.7L182.8 433.6C167 427 152.2 418.4 138.8 408.1L83.14 425.9C74.3 428.7 64.55 426.2 58.63 419.1C50.52 409.2 43.12 398.8 36.52 387.8L31.84 379.7C25.77 368.8 20.49 357.3 16.06 345.4C12.82 336.8 15.55 327.1 22.41 320.8L65.67 281.4C64.57 273.1 64 264.6 64 256C64 247.4 64.57 238.9 65.67 230.6L22.41 191.2C15.55 184.9 12.82 175.3 16.06 166.6C20.49 154.7 25.78 143.2 31.84 132.3L36.51 124.2C43.12 113.2 50.52 102.8 58.63 92.95C64.55 85.8 74.3 83.32 83.14 86.14L138.8 103.9C152.2 93.56 167 84.96 182.8 78.43L195.3 21.33C197.3 12.25 204.3 5.04 213.5 3.51C227.3 1.201 241.5 0 256 0C270.5 0 284.7 1.201 298.5 3.51C307.7 5.04 314.7 12.25 316.7 21.33L329.2 78.43C344.1 84.96 359.8 93.56 373.2 103.9L428.9 86.14C437.7 83.32 447.4 85.8 453.4 92.95C461.5 102.8 468.9 113.2 475.5 124.2L480.2 132.3C486.2 143.2 491.5 154.7 495.9 166.6V166.6zM256 336C300.2 336 336 300.2 336 255.1C336 211.8 300.2 175.1 256 175.1C211.8 175.1 176 211.8 176 255.1C176 300.2 211.8 336 256 336z"})),trayMode:React__namespace.createElement("svg",{"aria-hidden":"true",focusable:"false",role:"img",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 640 512",stroke:"var(--icon-fill-color)",fill:"var(--icon-fill-color)",strokeWidth:"20"},React__namespace.createElement("path",{d:"M618.1 97.67c-13.02-4.375-27.45 .1562-35.72 11.16L464 266.7l-118.4-157.8c-8.266-11.03-22.64-15.56-35.72-11.16C296.8 102 288 114.2 288 128v256c0 17.69 14.33 32 32 32s32-14.31 32-32v-160l86.41 115.2c12.06 16.12 39.13 16.12 51.19 0L576 224v160c0 17.69 14.33 32 32 32s32-14.31 32-32v-256C640 114.2 631.2 102 618.1 97.67zM224 96.01H32c-17.67 0-32 14.31-32 32s14.33 32 32 32h64v223.1c0 17.69 14.33 31.99 32 31.99s32-14.3 32-31.99V160h64c17.67 0 32-14.31 32-32S241.7 96.01 224 96.01z"})),copyElementLink:React__namespace.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 260 260","aria-hidden":"true",focusable:"false",role:"img"},React__namespace.createElement("path",{stroke:"var(--icon-fill-color)",fill:"none",strokeLinecap:"round",strokeWidth:"8",d:"M10 10h40m-40 0h40m0 0v40m0-40v40m0 0H10m40 0H10m0 0V10m0 40V10M210 10h40m-40 0h40m0 0v40m0-40v40m0 0h-40m40 0h-40m0 0V10m0 40V10M210 210h40m-40 0h40m0 0v40m0-40v40m0 0h-40m40 0h-40m0 0v-40m0 40v-40M10 210h40m-40 0h40m0 0v40m0-40v40m0 0H10m40 0H10m0 0v-40m0 40v-40M30 210V50m0 160V50M50 30h160M50 30h160M230 50v160m0-160v160M50 230h160m-160 0h160"}),React__namespace.createElement("path",{stroke:"var(--icon-fill-color)",fill:"none",strokeLinecap:"round",strokeWidth:"16",d:"M110 90c-6.67 1.67-30 3.11-40 10-10 6.89-20 21.37-20 31.37S60 153.56 70 160c10 6.44 33.33 8.33 40 10m0-80c-6.67 1.67-30 3.11-40 10-10 6.89-20 21.37-20 31.37S60 153.56 70 160c10 6.44 33.33 8.33 40 10M150 90c6.67 1.67 30 3.11 40 10 10 6.89 20 21.37 20 31.37s-10 22.19-20 28.63c-10 6.44-33.33 8.33-40 10m0-80c6.67 1.67 30 3.11 40 10 10 6.89 20 21.37 20 31.37s-10 22.19-20 28.63c-10 6.44-33.33 8.33-40 10"}),React__namespace.createElement("path",{stroke:"var(--icon-fill-color)",fill:"none",strokeLinecap:"round",strokeWidth:"16",d:"M89.868 130.198c13.36-.03 66.78-.17 80.13-.2m-80.13.2c13.36-.03 66.78-.17 80.13-.2"})),importSVG:React__namespace.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 526 526"},React__namespace.createElement("g",{fillRule:"evenodd",strokeLinecap:"round"},React__namespace.createElement("path",{fill:"var(--input-bg-color)",strokeWidth:"0",d:"m133.462 71 .33-6.54.97-6.34 1.58-6.13 2.16-5.88 2.69-5.6 3.21-5.27 3.69-4.93 4.13-4.55 4.55-4.13 4.93-3.69 5.27-3.21 5.6-2.69 5.88-2.16 6.13-1.58 6.34-.97 6.54-.33h160v128l.16 3.28.49 3.18.79 3.07 1.07 2.94 1.35 2.8 1.6 2.63 1.84 2.47 2.06 2.27 2.27 2.06 2.47 1.84 2.63 1.6 2.8 1.35 2.94 1.07 3.07.79 3.18.49 3.28.16h128v288l-.33 6.54-.97 6.34-1.58 6.13-2.16 5.88-2.69 5.6-3.21 5.27-3.69 4.93-4.13 4.55-4.55 4.13-4.93 3.69-5.27 3.21-5.6 2.69-5.88 2.16-6.13 1.58-6.34.97-6.54.33h-256l-6.54-.33-6.34-.97-6.13-1.58-5.88-2.16-5.6-2.69-5.27-3.21-4.93-3.69-4.55-4.13-4.13-4.55-3.69-4.93-3.21-5.27-2.69-5.6-2.16-5.88-1.58-6.13-.97-6.34-.33-6.54V343h174.1l-39 39-1.65 1.83-1.43 1.94-1.22 2.05-.99 2.13-.77 2.2-.55 2.25-.33 2.29-.11 2.3.11 2.3.33 2.28.55 2.24.77 2.19.99 2.12 1.22 2.04 1.43 1.93 1.65 1.81 1.83 1.64 1.94 1.42 2.05 1.2 2.13.99 2.2.76 2.25.56 2.29.33 2.3.11 2.3-.1 2.28-.33 2.24-.54 2.19-.77 2.12-.98 2.04-1.21 1.93-1.43 1.81-1.65 80-80 1.65-1.83 1.43-1.94 1.22-2.05.99-2.13.77-2.2.55-2.25.33-2.29.11-2.3-.11-2.3-.33-2.28-.55-2.24-.77-2.19-.99-2.12-1.22-2.04-1.43-1.93-1.65-1.81-80-80-1.83-1.65-1.94-1.43-2.05-1.22-2.13-.99-2.2-.77-2.25-.55-2.29-.33-2.3-.11-2.3.11-2.28.33-2.24.55-2.19.77-2.12.99-2.04 1.22-1.93 1.43-1.81 1.65-1.64 1.83-1.42 1.94-1.2 2.05-.99 2.13-.76 2.2-.56 2.25-.33 2.29-.11 2.3.1 2.3.33 2.28.54 2.24.77 2.19.98 2.12 1.21 2.04 1.43 1.93 1.65 1.81 39 39h-174.1V71"}),React__namespace.createElement("path",{fill:"none",stroke:"var(--icon-fill-color)",strokeWidth:"18",d:"M133.462 71s0 0 0 0m0 0s0 0 0 0m0 0 .33-6.54m-.33 6.54c.13-2.57.26-5.13.33-6.54m0 0c.36-2.33.72-4.67.97-6.34m-.97 6.34c.35-2.26.69-4.53.97-6.34m0 0c.51-1.99 1.03-3.98 1.58-6.13m-1.58 6.13c.4-1.56.81-3.12 1.58-6.13m0 0c.81-2.22 1.62-4.43 2.16-5.88m-2.16 5.88c.45-1.22.9-2.44 2.16-5.88m0 0c.72-1.51 1.45-3.01 2.69-5.6m-2.69 5.6c.69-1.45 1.39-2.9 2.69-5.6m0 0c.93-1.52 1.86-3.05 3.21-5.27m-3.21 5.27c.97-1.59 1.94-3.18 3.21-5.27m0 0c.86-1.15 1.71-2.29 3.69-4.93m-3.69 4.93c.78-1.04 1.56-2.08 3.69-4.93m0 0c1.53-1.69 3.07-3.38 4.13-4.55m-4.13 4.55c1.54-1.69 3.07-3.38 4.13-4.55m0 0c1.03-.93 2.06-1.87 4.55-4.13m-4.55 4.13c.98-.89 1.97-1.78 4.55-4.13m0 0c1.64-1.23 3.28-2.46 4.93-3.69m-4.93 3.69c1.72-1.29 3.45-2.58 4.93-3.69m0 0c1.11-.68 2.23-1.35 5.27-3.21m-5.27 3.21c1.5-.91 3.01-1.83 5.27-3.21m0 0c1.87-.89 3.73-1.79 5.6-2.69m-5.6 2.69c2.09-1 4.17-2.01 5.6-2.69m0 0c1.72-.64 3.44-1.27 5.88-2.16m-5.88 2.16c1.94-.72 3.89-1.43 5.88-2.16m0 0c2.3-.59 4.6-1.19 6.13-1.58m-6.13 1.58c2.32-.6 4.65-1.2 6.13-1.58m0 0c2.06-.31 4.12-.63 6.34-.97m-6.34.97c2.34-.36 4.69-.72 6.34-.97m0 0c2.05-.1 4.09-.21 6.54-.33m-6.54.33c2.06-.1 4.12-.21 6.54-.33m0 0h160m-160 0h160m0 0v128m0-128v128m0 0s0 0 0 0m0 0s0 0 0 0m0 0 .16 3.28m-.16-3.28c.06 1.16.12 2.32.16 3.28m0 0c.13.82.26 1.64.49 3.18m-.49-3.18c.18 1.13.35 2.26.49 3.18m0 0c.24.95.49 1.91.79 3.07m-.79-3.07c.28 1.1.56 2.2.79 3.07m0 0c.39 1.06.78 2.13 1.07 2.94m-1.07-2.94c.42 1.15.84 2.3 1.07 2.94m0 0c.38.79.76 1.57 1.35 2.8m-1.35-2.8c.4.82.79 1.64 1.35 2.8m0 0c.45.75.91 1.5 1.6 2.63m-1.6-2.63c.4.65.8 1.31 1.6 2.63m0 0c.56.76 1.13 1.52 1.84 2.47m-1.84-2.47c.58.79 1.17 1.57 1.84 2.47m0 0c.75.82 1.5 1.65 2.06 2.27m-2.06-2.27c.75.82 1.5 1.65 2.06 2.27m0 0c.74.66 1.47 1.33 2.27 2.06m-2.27-2.06c.89.81 1.78 1.61 2.27 2.06m0 0c.69.51 1.37 1.02 2.47 1.84m-2.47-1.84c.68.5 1.35 1.01 2.47 1.84m0 0c.81.49 1.62.99 2.63 1.6m-2.63-1.6c.74.45 1.47.9 2.63 1.6m0 0c.72.35 1.43.69 2.8 1.35m-2.8-1.35c.61.3 1.22.59 2.8 1.35m0 0c.85.31 1.69.62 2.94 1.07m-2.94-1.07c1.03.38 2.07.75 2.94 1.07m0 0c.83.22 1.67.43 3.07.79m-3.07-.79 3.07.79m0 0c1.07.16 2.14.33 3.18.49m-3.18-.49c1.2.18 2.39.36 3.18.49m0 0 3.28.16m-3.28-.16c.97.04 1.93.09 3.28.16m0 0h128m-128 0h128m0 0v288m0-288v288m0 0s0 0 0 0m0 0s0 0 0 0m0 0c-.1 2.02-.2 4.04-.33 6.54m.33-6.54c-.13 2.52-.26 5.05-.33 6.54m0 0c-.33 2.14-.66 4.29-.97 6.34m.97-6.34c-.32 2.06-.63 4.12-.97 6.34m0 0c-.59 2.28-1.17 4.55-1.58 6.13m1.58-6.13c-.53 2.07-1.07 4.14-1.58 6.13m0 0c-.73 1.99-1.46 3.97-2.16 5.88m2.16-5.88c-.72 1.97-1.44 3.94-2.16 5.88m0 0c-.94 1.97-1.89 3.93-2.69 5.6m2.69-5.6c-.91 1.89-1.82 3.77-2.69 5.6m0 0c-.89 1.46-1.78 2.92-3.21 5.27m3.21-5.27c-.65 1.05-1.29 2.11-3.21 5.27m0 0c-1.13 1.51-2.25 3.01-3.69 4.93m3.69-4.93c-1.29 1.72-2.58 3.44-3.69 4.93m0 0c-1.29 1.42-2.58 2.84-4.13 4.55m4.13-4.55-4.13 4.55m0 0-4.55 4.13m4.55-4.13-4.55 4.13m0 0c-1.2.9-2.41 1.8-4.93 3.69m4.93-3.69-4.93 3.69m0 0c-1.56.95-3.13 1.9-5.27 3.21m5.27-3.21c-1.99 1.21-3.98 2.42-5.27 3.21m0 0c-1.8.86-3.6 1.73-5.6 2.69m5.6-2.69c-1.34.64-2.67 1.28-5.6 2.69m0 0c-2.24.82-4.48 1.65-5.88 2.16m5.88-2.16c-1.38.51-2.77 1.02-5.88 2.16m0 0c-1.46.38-2.93.76-6.13 1.58m6.13-1.58c-1.54.4-3.09.79-6.13 1.58m0 0c-2.12.32-4.24.65-6.34.97m6.34-.97c-2.47.38-4.94.75-6.34.97m0 0c-2.23.11-4.46.22-6.54.33m6.54-.33c-1.97.1-3.93.2-6.54.33m0 0h-256m256 0h-256m0 0s0 0 0 0m0 0s0 0 0 0m0 0c-2.33-.12-4.66-.24-6.54-.33m6.54.33c-1.33-.07-2.65-.13-6.54-.33m0 0c-1.88-.29-3.77-.58-6.34-.97m6.34.97c-2.07-.32-4.14-.63-6.34-.97m0 0c-1.52-.39-3.04-.79-6.13-1.58m6.13 1.58c-2.02-.52-4.04-1.04-6.13-1.58m0 0c-1.6-.59-3.19-1.17-5.88-2.16m5.88 2.16c-1.9-.7-3.8-1.39-5.88-2.16m0 0c-1.41-.68-2.82-1.36-5.6-2.69m5.6 2.69c-1.6-.77-3.2-1.54-5.6-2.69m0 0c-1.4-.86-2.81-1.71-5.27-3.21m5.27 3.21c-2.08-1.27-4.17-2.54-5.27-3.21m0 0c-1.72-1.29-3.43-2.57-4.93-3.69m4.93 3.69c-1.79-1.34-3.57-2.67-4.93-3.69m0 0c-1.18-1.07-2.36-2.15-4.55-4.13m4.55 4.13c-1.64-1.49-3.27-2.97-4.55-4.13m0 0c-1.07-1.19-2.15-2.37-4.13-4.55m4.13 4.55c-1.46-1.61-2.93-3.23-4.13-4.55m0 0-3.69-4.93m3.69 4.93c-.88-1.17-1.76-2.35-3.69-4.93m0 0c-.83-1.37-1.67-2.75-3.21-5.27m3.21 5.27c-1.15-1.89-2.3-3.79-3.21-5.27m0 0c-1.03-2.14-2.05-4.27-2.69-5.6m2.69 5.6c-.68-1.43-1.37-2.85-2.69-5.6m0 0c-.8-2.17-1.59-4.34-2.16-5.88m2.16 5.88c-.82-2.22-1.63-4.44-2.16-5.88m0 0c-.47-1.82-.94-3.64-1.58-6.13m1.58 6.13c-.37-1.44-.74-2.88-1.58-6.13m0 0-.97-6.34m.97 6.34c-.3-1.98-.61-3.97-.97-6.34m0 0c-.13-2.54-.26-5.07-.33-6.54m.33 6.54-.33-6.54m0 0V343m0 112V343m0 0h174.1m-174.1 0h174.1m0 0-39 39m39-39-39 39m0 0s0 0 0 0m0 0s0 0 0 0m0 0c-.65.72-1.3 1.44-1.65 1.83m1.65-1.83c-.34.38-.68.76-1.65 1.83m0 0c-.35.47-.7.95-1.43 1.94m1.43-1.94c-.38.5-.75 1.01-1.43 1.94m0 0c-.32.54-.64 1.08-1.22 2.05m1.22-2.05c-.38.64-.76 1.28-1.22 2.05m0 0c-.2.45-.41.89-.99 2.13m.99-2.13c-.38.82-.76 1.64-.99 2.13m0 0c-.18.53-.36 1.05-.77 2.2m.77-2.2c-.3.88-.61 1.75-.77 2.2m0 0c-.15.61-.3 1.22-.55 2.25m.55-2.25c-.16.68-.33 1.35-.55 2.25m0 0-.33 2.29m.33-2.29c-.13.9-.26 1.79-.33 2.29m0 0-.11 2.3m.11-2.3c-.03.59-.06 1.19-.11 2.3m0 0c.03.54.05 1.08.11 2.3m-.11-2.3c.03.72.07 1.44.11 2.3m0 0c.1.71.21 1.43.33 2.28m-.33-2.28c.1.71.21 1.42.33 2.28m0 0c.22.88.44 1.77.55 2.24m-.55-2.24c.16.66.33 1.32.55 2.24m0 0c.26.72.51 1.45.77 2.19m-.77-2.19c.25.69.49 1.39.77 2.19m0 0c.33.7.65 1.4.99 2.12m-.99-2.12c.37.79.74 1.57.99 2.12m0 0c.38.63.75 1.25 1.22 2.04m-1.22-2.04c.4.67.8 1.35 1.22 2.04m0 0c.38.52.77 1.05 1.43 1.93m-1.43-1.93c.38.52.77 1.05 1.43 1.93m0 0c.46.5.91 1 1.65 1.81m-1.65-1.81c.35.39.7.77 1.65 1.81m0 0c.37.33.75.67 1.83 1.64m-1.83-1.64c.43.39.87.78 1.83 1.64m0 0c.62.45 1.25.91 1.94 1.42m-1.94-1.42c.45.32.9.65 1.94 1.42m0 0c.53.3 1.05.61 2.05 1.2m-2.05-1.2c.43.25.86.5 2.05 1.2m0 0c.78.36 1.56.72 2.13.99m-2.13-.99c.54.25 1.08.5 2.13.99m0 0c.67.23 1.33.46 2.2.76m-2.2-.76c.51.17 1.03.35 2.2.76m0 0c.87.22 1.73.43 2.25.56m-2.25-.56c.79.2 1.57.39 2.25.56m0 0 2.29.33m-2.29-.33c.58.08 1.16.16 2.29.33m0 0c.91.04 1.82.09 2.3.11m-2.3-.11c.89.04 1.79.09 2.3.11m0 0c.48-.02.96-.04 2.3-.1m-2.3.1c.73-.03 1.47-.06 2.3-.1m0 0c.61-.09 1.22-.18 2.28-.33m-2.28.33c.58-.09 1.17-.17 2.28-.33m0 0c.79-.19 1.59-.38 2.24-.54m-2.24.54c.88-.21 1.75-.42 2.24-.54m0 0c.7-.25 1.4-.49 2.19-.77m-2.19.77c.5-.18 1.01-.35 2.19-.77m0 0c.56-.26 1.13-.52 2.12-.98m-2.12.98c.69-.31 1.37-.63 2.12-.98m0 0c.63-.37 1.25-.74 2.04-1.21m-2.04 1.21c.8-.48 1.6-.95 2.04-1.21m0 0c.67-.5 1.34-.99 1.93-1.43m-1.93 1.43c.52-.39 1.05-.78 1.93-1.43m0 0c.43-.39.87-.79 1.81-1.65m-1.81 1.65c.42-.38.83-.76 1.81-1.65m0 0 80-80m-80 80 80-80m0 0s0 0 0 0m0 0s0 0 0 0m0 0c.33-.37.67-.74 1.65-1.83m-1.65 1.83c.63-.7 1.27-1.4 1.65-1.83m0 0c.3-.4.59-.79 1.43-1.94m-1.43 1.94c.42-.57.84-1.13 1.43-1.94m0 0c.4-.68.8-1.35 1.22-2.05m-1.22 2.05c.47-.79.93-1.57 1.22-2.05m0 0c.28-.62.57-1.23.99-2.13m-.99 2.13c.3-.65.6-1.31.99-2.13m0 0c.26-.74.51-1.47.77-2.2m-.77 2.2.77-2.2m0 0 .55-2.25m-.55 2.25c.2-.84.41-1.68.55-2.25m0 0 .33-2.29m-.33 2.29c.11-.75.21-1.49.33-2.29m0 0c.03-.54.05-1.08.11-2.3m-.11 2.3c.04-.91.09-1.81.11-2.3m0 0c-.03-.7-.07-1.41-.11-2.3m.11 2.3c-.04-.75-.07-1.49-.11-2.3m0 0c-.08-.52-.15-1.04-.33-2.28m.33 2.28c-.09-.63-.18-1.26-.33-2.28m0 0-.55-2.24m.55 2.24c-.19-.79-.39-1.58-.55-2.24m0 0-.77-2.19m.77 2.19c-.25-.72-.51-1.44-.77-2.19m0 0c-.23-.5-.46-.99-.99-2.12m.99 2.12c-.39-.83-.78-1.66-.99-2.12m0 0c-.42-.7-.83-1.39-1.22-2.04m1.22 2.04c-.32-.53-.64-1.06-1.22-2.04m0 0c-.47-.64-.95-1.28-1.43-1.93m1.43 1.93c-.47-.63-.94-1.27-1.43-1.93m0 0c-.44-.49-.89-.98-1.65-1.81m1.65 1.81c-.64-.7-1.28-1.4-1.65-1.81m0 0-80-80m80 80-80-80m0 0s0 0 0 0m0 0s0 0 0 0m0 0c-.72-.65-1.44-1.3-1.83-1.65m1.83 1.65c-.68-.62-1.37-1.23-1.83-1.65m0 0c-.51-.38-1.02-.75-1.94-1.43m1.94 1.43c-.58-.43-1.17-.87-1.94-1.43m0 0c-.73-.43-1.45-.86-2.05-1.22m2.05 1.22c-.77-.45-1.53-.9-2.05-1.22m0 0c-.46-.21-.93-.43-2.13-.99m2.13.99-2.13-.99m0 0c-.83-.29-1.65-.57-2.2-.77m2.2.77c-.56-.19-1.12-.39-2.2-.77m0 0c-.65-.16-1.29-.31-2.25-.55m2.25.55c-.57-.14-1.13-.27-2.25-.55m0 0c-.74-.11-1.48-.21-2.29-.33m2.29.33c-.51-.07-1.02-.15-2.29-.33m0 0c-.77-.04-1.54-.07-2.3-.11m2.3.11c-.88-.04-1.76-.08-2.3-.11m0 0c-.49.02-.98.05-2.3.11m2.3-.11c-.88.04-1.77.09-2.3.11m0 0c-.62.09-1.23.18-2.28.33m2.28-.33c-.6.09-1.2.17-2.28.33m0 0c-.45.11-.91.22-2.24.55m2.24-.55c-.79.2-1.58.39-2.24.55m0 0c-.56.2-1.12.4-2.19.77m2.19-.77c-.51.18-1.01.36-2.19.77m0 0c-.85.4-1.7.8-2.12.99m2.12-.99c-.51.24-1.02.48-2.12.99m0 0c-.6.36-1.2.71-2.04 1.22m2.04-1.22c-.46.27-.91.55-2.04 1.22m0 0c-.49.36-.99.73-1.93 1.43m1.93-1.43-1.93 1.43m0 0c-.42.38-.85.77-1.81 1.65m1.81-1.65c-.69.63-1.39 1.27-1.81 1.65m0 0-1.64 1.83m1.64-1.83c-.54.6-1.08 1.21-1.64 1.83m0 0c-.53.73-1.07 1.47-1.42 1.94m1.42-1.94c-.36.5-.73 1-1.42 1.94m0 0c-.35.61-.7 1.21-1.2 2.05m1.2-2.05c-.33.58-.67 1.15-1.2 2.05m0 0c-.26.57-.53 1.15-.99 2.13m.99-2.13c-.39.85-.78 1.69-.99 2.13m0 0c-.24.7-.48 1.4-.76 2.2m.76-2.2c-.17.51-.35 1.01-.76 2.2m0 0c-.17.68-.33 1.35-.56 2.25m.56-2.25c-.2.79-.39 1.57-.56 2.25m0 0c-.09.65-.18 1.29-.33 2.29m.33-2.29c-.06.48-.13.95-.33 2.29m0 0c-.03.71-.07 1.43-.11 2.3m.11-2.3-.11 2.3m0 0c.04.86.08 1.73.1 2.3m-.1-2.3c.03.8.07 1.6.1 2.3m0 0c.13.88.25 1.76.33 2.28m-.33-2.28c.11.73.21 1.47.33 2.28m0 0c.18.74.36 1.49.54 2.24m-.54-2.24c.15.64.31 1.28.54 2.24m0 0c.2.57.4 1.15.77 2.19m-.77-2.19c.21.58.41 1.17.77 2.19m0 0c.23.5.46 1.01.98 2.12m-.98-2.12c.35.76.71 1.53.98 2.12m0 0c.38.64.76 1.29 1.21 2.04m-1.21-2.04 1.21 2.04m0 0c.45.6.89 1.21 1.43 1.93m-1.43-1.93c.3.4.6.81 1.43 1.93m0 0 1.65 1.81m-1.65-1.81c.47.52.94 1.03 1.65 1.81m0 0 39 39m-39-39 39 39m0 0h-174.1m174.1 0h-174.1m0 0V71m0 223.9V71m0 0s0 0 0 0m0 0s0 0 0 0m0 0s0 0 0 0m0 0s0 0 0 0"})),React__namespace.createElement("path",{fill:"none",stroke:"var(--icon-fill-color)",strokeLinecap:"round",strokeWidth:"18",d:"M135 343.068H31m104 0H31m0 0s0 0 0 0m0 0s0 0 0 0m0 0c-.74-.04-1.48-.07-2.46-.12m2.46.12c-.77-.04-1.54-.08-2.46-.12m0 0c-.87-.14-1.75-.27-2.39-.37m2.39.37c-.55-.09-1.1-.17-2.39-.37m0 0c-.87-.22-1.74-.44-2.3-.59m2.3.59c-.62-.15-1.24-.31-2.3-.59m0 0c-.82-.29-1.64-.59-2.21-.8m2.21.8c-.52-.18-1.03-.37-2.21-.8m0 0c-.55-.26-1.09-.52-2.1-1.01m2.1 1.01c-.64-.31-1.28-.61-2.1-1.01m0 0c-.74-.45-1.48-.89-1.98-1.2m1.98 1.2c-.42-.25-.84-.51-1.98-1.2m0 0c-.7-.52-1.41-1.05-1.84-1.38m1.84 1.38c-.37-.28-.75-.56-1.84-1.38m0 0c-.4-.36-.8-.71-1.71-1.54m1.71 1.54c-.35-.31-.7-.63-1.71-1.54m0 0c-.43-.47-.85-.95-1.54-1.71m1.54 1.71c-.61-.68-1.23-1.36-1.54-1.71m0 0c-.29-.38-.58-.76-1.38-1.84m1.38 1.84c-.54-.71-1.08-1.43-1.38-1.84m0 0c-.46-.76-.92-1.52-1.2-1.98m1.2 1.98c-.45-.74-.89-1.47-1.2-1.98m0 0c-.37-.77-.74-1.53-1.01-2.1m1.01 2.1c-.3-.62-.6-1.25-1.01-2.1m0 0c-.2-.54-.39-1.07-.8-2.21m.8 2.21c-.2-.54-.4-1.09-.8-2.21m0 0c-.22-.85-.44-1.71-.59-2.3m.59 2.3c-.12-.46-.24-.92-.59-2.3m0 0c-.11-.72-.22-1.43-.37-2.39m.37 2.39c-.08-.48-.15-.96-.37-2.39m0 0c-.03-.74-.07-1.48-.12-2.46m.12 2.46c-.04-.79-.08-1.59-.12-2.46m0 0c.04-.74.07-1.49.12-2.46m-.12 2.46.12-2.46m0 0c.08-.53.16-1.07.37-2.39m-.37 2.39c.09-.56.17-1.12.37-2.39m0 0c.17-.69.35-1.38.59-2.3m-.59 2.3c.15-.61.31-1.23.59-2.3m0 0c.17-.48.34-.96.8-2.21m-.8 2.21c.2-.55.4-1.1.8-2.21m0 0c.25-.52.49-1.03 1.01-2.1m-1.01 2.1c.36-.76.73-1.52 1.01-2.1m0 0c.43-.72.87-1.44 1.2-1.98m-1.2 1.98c.27-.45.55-.91 1.2-1.98m0 0c.54-.73 1.09-1.47 1.38-1.84m-1.38 1.84c.4-.54.81-1.09 1.38-1.84m0 0c.53-.59 1.07-1.18 1.54-1.71m-1.54 1.71c.59-.66 1.19-1.32 1.54-1.71m0 0c.54-.49 1.08-.97 1.71-1.54m-1.71 1.54c.48-.43.95-.86 1.71-1.54m0 0c.46-.35.92-.7 1.84-1.38m-1.84 1.38c.5-.38 1.01-.76 1.84-1.38m0 0c.52-.32 1.04-.63 1.98-1.2m-1.98 1.2c.72-.44 1.44-.88 1.98-1.2m0 0 2.1-1.01m-2.1 1.01c.84-.4 1.67-.81 2.1-1.01m0 0c.45-.17.91-.33 2.21-.8m-2.21.8c.56-.21 1.12-.41 2.21-.8m0 0c.89-.23 1.79-.46 2.3-.59m-2.3.59c.48-.13.95-.25 2.3-.59m0 0c.51-.08 1.02-.16 2.39-.37m-2.39.37 2.39-.37m0 0c.52-.02 1.03-.05 2.46-.12m-2.46.12c.74-.03 1.48-.07 2.46-.12m0 0 103.34-.27m-103.34.27c30.04-.08 60.08-.16 103.34-.27"}),React__namespace.createElement("g",{fillRule:"evenodd",strokeLinecap:"round"},React__namespace.createElement("path",{fill:"var(--input-bg-color)",strokeWidth:"0",d:"M517.462 135h-128V7l128 128"}),React__namespace.createElement("path",{fill:"none",stroke:"var(--icon-fill-color)",strokeWidth:"18",d:"M517.462 135h-128m128 0h-128m0 0V7m0 128V7m0 0 128 128m-128-128 128 128m0 0s0 0 0 0m0 0s0 0 0 0m0 0s0 0 0 0m0 0s0 0 0 0"}))),obsidian:React__namespace.createElement("svg",{focusable:"false",role:"img",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 512 512"},React__namespace.createElement("defs",null,React__namespace.createElement("radialGradient",{id:"b",cx:"0",cy:"0",r:"1",gradientUnits:"userSpaceOnUse",gradientTransform:"matrix(-48 -185 123 -32 179 429.7)"},React__namespace.createElement("stop",{stopColor:"#fff",stopOpacity:".4"}),React__namespace.createElement("stop",{offset:"1",stopOpacity:".1"})),React__namespace.createElement("radialGradient",{id:"c",cx:"0",cy:"0",r:"1",gradientUnits:"userSpaceOnUse",gradientTransform:"matrix(41 -310 229 30 341.6 351.3)"},React__namespace.createElement("stop",{stopColor:"#fff",stopOpacity:".6"}),React__namespace.createElement("stop",{offset:"1",stopColor:"#fff",stopOpacity:".1"})),React__namespace.createElement("radialGradient",{id:"d",cx:"0",cy:"0",r:"1",gradientUnits:"userSpaceOnUse",gradientTransform:"matrix(57 -261 178 39 190.5 296.3)"},React__namespace.createElement("stop",{stopColor:"#fff",stopOpacity:".8"}),React__namespace.createElement("stop",{offset:"1",stopColor:"#fff",stopOpacity:".4"})),React__namespace.createElement("radialGradient",{id:"e",cx:"0",cy:"0",r:"1",gradientUnits:"userSpaceOnUse",gradientTransform:"matrix(-79 -133 153 -90 321.4 464.2)"},React__namespace.createElement("stop",{stopColor:"#fff",stopOpacity:".3"}),React__namespace.createElement("stop",{offset:"1",stopOpacity:".3"})),React__namespace.createElement("radialGradient",{id:"f",cx:"0",cy:"0",r:"1",gradientUnits:"userSpaceOnUse",gradientTransform:"matrix(-29 136 -92 -20 300.7 149.9)"},React__namespace.createElement("stop",{stopColor:"#fff",stopOpacity:"0"}),React__namespace.createElement("stop",{offset:"1",stopColor:"#fff",stopOpacity:".2"})),React__namespace.createElement("radialGradient",{id:"g",cx:"0",cy:"0",r:"1",gradientUnits:"userSpaceOnUse",gradientTransform:"matrix(72 73 -155 153 137.8 225.2)"},React__namespace.createElement("stop",{stopColor:"#fff",stopOpacity:".2"}),React__namespace.createElement("stop",{offset:"1",stopColor:"#fff",stopOpacity:".4"})),React__namespace.createElement("radialGradient",{id:"h",cx:"0",cy:"0",r:"1",gradientUnits:"userSpaceOnUse",gradientTransform:"matrix(20 118 -251 43 215.1 273.7)"},React__namespace.createElement("stop",{stopColor:"#fff",stopOpacity:".1"}),React__namespace.createElement("stop",{offset:"1",stopColor:"#fff",stopOpacity:".3"})),React__namespace.createElement("radialGradient",{id:"i",cx:"0",cy:"0",r:"1",gradientUnits:"userSpaceOnUse",gradientTransform:"matrix(-162 -85 268 -510 374.4 371.7)"},React__namespace.createElement("stop",{stopColor:"#fff",stopOpacity:".2"}),React__namespace.createElement("stop",{offset:".5",stopColor:"#fff",stopOpacity:".2"}),React__namespace.createElement("stop",{offset:"1",stopColor:"#fff",stopOpacity:".3"})),React__namespace.createElement("filter",{id:"a",x:"80.1",y:"37",width:"351.1",height:"443.2",filterUnits:"userSpaceOnUse",colorInterpolationFilters:"sRGB"},React__namespace.createElement("feFlood",{floodOpacity:"0",result:"BackgroundImageFix"}),React__namespace.createElement("feBlend",{in:"SourceGraphic",in2:"BackgroundImageFix",result:"shape"}),React__namespace.createElement("feGaussianBlur",{stdDeviation:"6.5",result:"effect1_foregroundBlur_744_9191"}))),React__namespace.createElement("g",{filter:"url(#a)"},React__namespace.createElement("path",{d:"M359.2 437.5c-2.6 19-21.3 33.9-40 28.7-26.5-7.2-57.2-18.6-84.8-20.7l-42.4-3.2a28 28 0 0 1-18-8.3l-73-74.8a27.7 27.7 0 0 1-5.4-30.7s45-98.6 46.8-103.7c1.6-5.1 7.8-49.9 11.4-73.9a28 28 0 0 1 9-16.5L249 57.2a28 28 0 0 1 40.6 3.4l72.6 91.6a29.5 29.5 0 0 1 6.2 18.3c0 17.3 1.5 53 11.2 76a301.3 301.3 0 0 0 35.6 58.2 14 14 0 0 1 1 15.6c-6.3 10.7-18.9 31.3-36.6 57.6a142.2 142.2 0 0 0-20.5 59.6Z",fill:"#000",fillOpacity:".3"})),React__namespace.createElement("path",{id:"arrow",d:"M359.9 434.3c-2.6 19.1-21.3 34-40 28.9-26.4-7.3-57-18.7-84.7-20.8l-42.3-3.2a27.9 27.9 0 0 1-18-8.4l-73-75a27.9 27.9 0 0 1-5.4-31s45.1-99 46.8-104.2c1.7-5.1 7.8-50 11.4-74.2a28 28 0 0 1 9-16.6l86.2-77.5a28 28 0 0 1 40.6 3.5l72.5 92a29.7 29.7 0 0 1 6.2 18.3c0 17.4 1.5 53.2 11.1 76.3a303 303 0 0 0 35.6 58.5 14 14 0 0 1 1.1 15.7c-6.4 10.8-18.9 31.4-36.7 57.9a143.3 143.3 0 0 0-20.4 59.8Z",fill:"#6c31e3"}),React__namespace.createElement("path",{d:"M182.7 436.4c33.9-68.7 33-118 18.5-153-13.2-32.4-37.9-52.8-57.3-65.5-.4 1.9-1 3.7-1.8 5.4L96.5 324.8a27.9 27.9 0 0 0 5.5 31l72.9 75c2.3 2.3 5 4.2 7.8 5.6Z",fill:"url(#b)"}),React__namespace.createElement("path",{d:"M274.9 297c9.1.9 18 2.9 26.8 6.1 27.8 10.4 53.1 33.8 74 78.9 1.5-2.6 3-5.1 4.6-7.5a1222 1222 0 0 0 36.7-57.9 14 14 0 0 0-1-15.7 303 303 0 0 1-35.7-58.5c-9.6-23-11-58.9-11.1-76.3 0-6.6-2.1-13.1-6.2-18.3l-72.5-92-1.2-1.5c5.3 17.5 5 31.5 1.7 44.2-3 11.8-8.6 22.5-14.5 33.8-2 3.8-4 7.7-5.9 11.7a140 140 0 0 0-15.8 58c-1 24.2 3.9 54.5 20 95Z",fill:"url(#c)"}),React__namespace.createElement("path",{d:"M274.8 297c-16.1-40.5-21-70.8-20-95 1-24 8-42 15.8-58l6-11.7c5.8-11.3 11.3-22 14.4-33.8a78.5 78.5 0 0 0-1.7-44.2 28 28 0 0 0-39.4-2l-86.2 77.5a28 28 0 0 0-9 16.6L144.2 216c0 .7-.2 1.3-.3 2 19.4 12.6 44 33 57.3 65.3 2.6 6.4 4.8 13.1 6.4 20.4a200 200 0 0 1 67.2-6.8Z",fill:"url(#d)"}),React__namespace.createElement("path",{d:"M320 463.2c18.6 5.1 37.3-9.8 39.9-29a153 153 0 0 1 15.9-52.2c-21-45.1-46.3-68.5-74-78.9-29.5-11-61.6-7.3-94.2.6 7.3 33.1 3 76.4-24.8 132.7 3.1 1.6 6.6 2.5 10.1 2.8l43.9 3.3c23.8 1.7 59.3 14 83.2 20.7Z",fill:"url(#e)"}),React__namespace.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M255 200.5c-1.1 24 1.9 51.4 18 91.8l-5-.5c-14.5-42.1-17.7-63.7-16.6-88 1-24.3 8.9-43 16.7-59 2-4 6.6-11.5 8.6-15.3 5.8-11.3 9.7-17.2 13-27.5 4.8-14.4 3.8-21.2 3.2-28 3.7 24.5-10.4 45.8-21 67.5a145 145 0 0 0-17 59Z",fill:"url(#f)"}),React__namespace.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M206 285.1c2 4.4 3.7 8 4.9 13.5l-4.3 1c-1.7-6.4-3-11-5.5-16.5-14.6-34.3-38-52-57-65 23 12.4 46.7 31.9 61.9 67Z",fill:"url(#g)"}),React__namespace.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M211.1 303c8 37.5-1 85.2-27.5 131.6 22.2-46 33-90.1 24-131l3.5-.7Z",fill:"url(#h)"}),React__namespace.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M302.7 299.5c43.5 16.3 60.3 52 72.8 81.9-15.5-31.2-37-65.7-74.4-78.5-28.4-9.8-52.4-8.6-93.5.7l-.9-4c43.6-10 66.4-11.2 96 0Z",fill:"url(#i)"})),"add-file":React__namespace.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"var(--icon-fill-color)",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},React__namespace.createElement("path",{d:"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"}),React__namespace.createElement("polyline",{points:"14 2 14 8 20 8"}),React__namespace.createElement("line",{x1:"12",x2:"12",y1:"18",y2:"12"}),React__namespace.createElement("line",{x1:"9",x2:"15",y1:"15",y2:"15"}))},SwordColors={Bronze:{grip:"#cd7f32",decoration:"#96510d",blade:"#7A420B",bladeFillLight:"#E1B384",title:"Apprentice of Sketchnoting"},Silver:{grip:"#CECDCC",decoration:"#b2b0b0",blade:"#979595",bladeFillLight:"#F5F5F5",title:"Champion of Spatial Thinking"},Gold:{grip:"#F5D000",decoration:"#D6B600",blade:"#B89C00",bladeFillLight:"#FFEA70",title:"Hero of Visual Notetaking"},Platinum:{grip:"#646261",decoration:"#323131",blade:"#000",bladeFillLight:"#8B8988",title:"Legend of Visual Thinking"}},excalidrawSword=e=>{const{grip:t,decoration:a,blade:i,bladeFillLight:n}=SwordColors[e];return React__namespace.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 528 1140"},React__namespace.createElement("g",{fillRule:"evenodd",strokeLinecap:"round"},React__namespace.createElement("path",{fill:n,d:"m272 979 118-121-80-571-104 1-36 580 104 113-1-2"}),React__namespace.createElement("path",{fill:"none",stroke:"black",strokeWidth:"4",d:"M271 978c31-30 67-60 117-120M273 979c42-46 89-95 115-120m-1-1c-19-163-41-323-79-569m78 570c-20-165-42-329-78-570m-2 0c-23-2-56-2-102 0m106-1c-34 0-63-1-104 1m0 1c-12 192-21 384-34 574m33-576-31 576m3 2c30 40 71 85 98 112M173 863c38 47 75 87 100 117m1 1s0 0 0 0m0 0s0 0 0 0m0 0s0 0 0 0m0 0s0 0 0 0"})),React__namespace.createElement("g",{fill:"none",fillRule:"evenodd",strokeLinecap:"round"},React__namespace.createElement("path",{stroke:i,strokeWidth:".5",d:"M207 287s0 0 0 0m0 0s0 0 0 0m-2 6 7-5m-6 6 6-7m-6 17c0-8 3-14 10-15m-9 12c4-3 5-8 12-14m-11 20c4-7 6-8 11-20m-13 19c4-6 10-10 15-16m-14 27c4-12 7-14 21-28m-23 24c8-6 13-16 23-27m-23 35c14-11 17-26 31-37m-32 37c10-10 16-17 28-35m-29 39c12-6 18-13 31-37m-28 37c5-8 12-14 33-37m-33 47c7-12 20-27 36-44m-36 42c14-17 26-36 38-44m-36 53c8-11 22-26 37-53m-42 48c14-14 29-29 46-49m-45 60c18-29 42-49 52-62m-52 61c18-22 36-40 52-59m-56 63c15-17 34-27 57-65m-54 66 58-63m-62 71c15-18 35-38 64-74m-62 74c25-30 48-57 62-71m-62 78c22-25 42-52 72-75m-71 72c22-26 47-53 70-75m-69 84c25-30 50-67 70-88m-72 87 74-82m-72 85c30-27 58-58 75-89m-75 94c17-23 37-42 79-90m-82 97c24-21 45-47 86-95m-85 94 84-98m-84 105c22-23 40-48 92-105m-93 106c23-30 47-57 90-105m-90 106c29-25 51-56 95-105m-94 108c19-23 38-47 96-109m-93 118c36-44 72-86 93-114m-98 114c30-35 55-69 102-120M197 408c30-26 58-60 110-119M199 412l108-124M198 421c31-37 66-71 111-129M201 418c32-41 71-82 110-130M196 426c38-43 73-77 119-132M198 426l114-130M196 430c41-47 85-87 120-128M198 431c29-29 53-57 113-133M201 436c25-31 51-61 112-127M198 439c28-30 52-61 114-133M194 442c29-33 63-65 123-134M198 442c42-48 85-97 118-132M195 449c28-35 63-63 122-135M198 449c43-49 88-96 117-131M197 459c45-51 86-103 121-139M199 455c47-49 88-100 117-133M196 463c31-40 67-74 121-133M199 463c44-52 90-106 119-137M195 467c41-39 77-90 118-133M196 472c26-34 54-62 121-141M196 478c45-49 89-102 122-138M198 476c26-28 52-58 117-138M195 481c36-41 69-86 124-140M197 481c26-33 55-66 120-141M192 486c45-46 90-93 123-138M196 490c34-34 64-72 123-142M194 494c42-43 83-93 129-138M194 496c30-32 57-65 127-144M195 506c44-55 88-99 125-146M195 504l123-146M197 506c41-41 80-87 127-142M193 511c40-42 77-84 129-148M195 518c26-37 57-72 127-146M193 517c41-52 85-101 128-146M192 523c42-42 77-85 133-147M192 524c49-60 98-116 129-151M193 527c34-34 69-71 128-147M194 528c45-53 88-104 130-149M192 537c48-48 92-98 129-155M192 537c50-56 99-112 132-152M190 540c47-54 97-107 138-152M192 541c39-49 82-97 131-151M191 546c36-38 68-78 136-153M192 549c51-62 105-123 133-154M194 558c27-42 55-72 134-159M190 557c31-35 59-71 135-155M191 564c49-53 91-108 139-162M190 562l137-155M189 567l142-153M190 568c40-43 76-87 137-157M189 572c50-50 98-108 138-155M190 574l139-158M192 579c58-62 109-126 136-156M190 581c44-48 87-98 139-158M191 591c51-58 95-111 140-164M190 588c35-43 70-84 140-162M188 592c32-32 60-65 139-160M188 595l143-162M191 602c31-43 72-87 141-168M189 600c34-32 64-67 142-161M185 610c54-57 102-117 149-165M187 606c53-58 100-114 146-164M191 610c53-54 106-112 141-166M188 615c37-40 74-81 143-167M185 621c46-46 87-94 150-167M187 621c32-35 64-70 148-169M190 625c45-52 94-112 141-169M188 625c56-62 113-124 146-167M189 633l144-172M187 633c34-40 67-76 146-171M186 643c34-44 71-90 148-172M185 639c60-70 119-135 152-172M187 643c39-43 81-86 147-172M187 646c29-37 61-73 148-172M187 651c52-60 102-117 148-174M185 651l152-171M185 661c59-73 121-137 151-175M187 660c31-44 66-83 150-175M183 667c44-51 84-95 153-176M186 667c35-40 68-78 153-179M183 674c40-47 80-99 158-178M184 671c57-69 116-137 155-175M187 678c39-44 79-97 154-180M185 681c55-62 112-126 153-180M187 687c51-62 110-121 152-178M185 684c29-37 62-73 155-179M181 692c50-63 104-125 163-182M185 692l156-183M187 696c39-46 87-96 154-181M185 697c43-51 84-100 156-180M184 704c48-52 103-110 158-184M185 705c54-69 115-138 159-182M184 710c62-70 131-143 157-183M184 712c59-72 119-143 161-186M184 721c60-71 118-142 159-189M184 719c40-50 86-104 162-186M184 722c41-45 81-91 163-186M182 725c63-76 127-148 163-189M179 728c55-59 110-124 167-188M182 731c45-50 92-104 163-190M179 740c43-47 82-97 169-194M182 738l163-191M184 741c50-62 105-129 166-190M182 743c35-45 74-89 166-189M182 753c33-44 67-87 164-193M180 749c42-43 83-88 169-189M181 757c58-70 125-145 166-195M181 757l166-193M179 763c39-39 73-85 172-193M180 764l169-196M176 771c73-77 138-156 171-196M181 770c47-57 98-115 168-196M182 778c68-77 129-153 171-201M178 777c46-54 93-104 171-197M180 780c54-64 113-132 171-197M180 782c50-56 101-118 171-199M180 789c43-52 90-101 170-197M179 789c43-43 83-90 174-198M178 795c63-64 120-138 173-198M178 795c47-52 93-106 175-201M178 803c42-45 82-96 176-206M177 802c55-62 111-128 176-200M176 809c65-65 124-136 180-201M177 810l176-206M175 817c58-71 118-136 182-203M178 816c69-82 141-162 176-205M175 819c39-40 79-86 180-204M176 822c60-66 117-133 180-208M178 827c40-41 76-91 179-203M176 829c36-47 75-90 180-206M174 835c59-62 114-123 180-211M175 835c36-44 75-86 181-209M176 842c38-48 79-98 182-212M177 842c59-66 115-131 182-210M176 849c44-58 96-119 185-212M176 848c36-46 76-92 183-210M177 853c51-56 99-114 181-210M173 856c59-70 122-140 186-215M176 862c35-44 77-87 184-212M175 862c61-69 120-135 187-216M177 862c74-75 142-156 183-208M177 866c53-58 103-119 183-211M180 866c66-70 131-149 182-211M180 869c44-53 89-104 183-211M180 873c61-70 117-142 185-206M182 871c48-55 94-106 181-208M184 873c41-47 82-97 180-204M185 874c64-75 126-147 179-204M190 879c35-42 72-86 174-202M186 878c58-69 116-138 177-203M188 882c38-46 81-96 174-203M189 881c58-65 117-129 177-200M195 883c53-65 105-123 170-201M192 884c48-62 103-120 174-199M196 886c64-76 132-155 172-199M194 885c52-55 102-115 172-194M195 888c42-36 75-79 173-193M197 889c55-58 105-116 171-195M203 895c55-70 115-138 164-192M201 892c53-64 106-125 165-191M203 897c42-53 82-98 166-188M202 896c34-35 68-74 167-189M205 901c54-62 109-127 161-192M207 897c46-57 96-115 161-188M209 899c46-51 92-101 159-185M209 900c37-35 68-74 161-183M210 906c50-62 103-118 163-187M210 905c45-55 92-103 161-184M212 907c50-59 103-117 159-177M213 908c35-45 73-88 157-181M219 912c46-57 97-115 153-181M215 912c50-56 100-112 156-180M219 916c48-60 96-108 152-177M217 915c30-39 61-72 156-178M218 916c45-47 86-91 153-175M220 918c34-37 69-78 153-176M226 918l149-171M225 919c43-50 83-97 149-170M223 924c33-34 64-71 154-174M228 923c34-42 68-82 148-172M226 930c41-44 76-89 147-174M229 925c35-43 72-84 146-168M231 932l144-168M231 929c49-54 99-111 145-165M234 931c29-36 63-69 143-160M233 933l144-163M237 935c49-53 99-111 137-162M236 934c51-55 99-111 142-161M239 942c44-51 88-100 140-163M239 938l139-157M243 941c31-39 65-79 138-156M242 940l135-154M248 945c52-62 99-123 133-153M245 945l134-153M250 947c32-43 66-85 130-148M246 948c44-50 83-97 133-152M247 951c35-36 65-72 134-148M251 952c50-55 101-114 128-151M254 957c34-50 80-99 128-152M255 954c46-59 93-114 128-148M255 956c53-55 101-120 127-149M257 957c37-43 73-83 125-146M261 962c39-49 83-101 118-142M259 961l122-143M258 961c37-42 71-83 127-139M261 965c30-37 61-69 122-142M265 965c48-46 86-99 120-136M262 964c42-50 88-99 123-136M263 967c43-47 88-91 124-134M267 970c33-41 67-79 117-138M272 971c41-45 75-82 116-134M269 972c31-41 66-82 118-136M268 974c30-35 64-68 120-134M270 975l118-134M275 975c31-28 60-62 113-127M273 976c29-31 55-65 115-128M274 980c47-43 87-97 116-128M275 980c26-26 51-57 111-126"}),React__namespace.createElement("path",{stroke:"black",d:"M272 980c39-30 68-66 119-121M273 982c49-46 92-93 114-126m1 0c-26-177-53-358-78-568m78 570c-18-155-40-312-78-569m3-1c-31-1-59 0-106-3m101 3c-29-2-59 0-101-1m-1 1c-10 204-24 410-31 575m32-576c-10 116-16 231-32 576m-2-1c27 25 44 44 105 120M175 865l98 117m2-2s0 0 0 0m0 0s0 0 0 0m0 0s0 0 0 0m0 0s0 0 0 0"})),React__namespace.createElement("path",{fill:"none",stroke:i,strokeLinecap:"round",strokeWidth:"4",d:"M271 610c1 44 6 217 6 261m-10-263 9 258"}),React__namespace.createElement("g",{fillOpacity:".8",fillRule:"evenodd",strokeLinecap:"round",strokeOpacity:".8"},React__namespace.createElement("path",{fill:"#dbc9f3",d:"m320 484-4-4-5-3-4-3-4-2-5-2-4-1-5-1h-13l-4 1-5 2-4 2-5 3-4 3-5 4-133 117-5 4-2 2-2 2-2 2-2 2-1 3-1 3-19 127 10 7 10 8 10 7 9 8 8 8 8 8 7 8 7 9 6 9 6 9 5 9 4 9 5 10 3 9 4 10 2 10 15-3 8-2 7-1 7-1 6-1 7-1 6-1 6-1h6l6-1h16l4 1h5l-4-10-2-10-3-10-2-10-3-10-1-10-2-10-1-9-1-10v-10l-1-9v-19l1-10 1-9 1-9 1-10 1-9 2-9 2-9 2-9 3-10 3-9 2-9 4-9 3-9 3-9 4-9 4-9 4-9 9-19 2-3 2-4 1-4 1-5 2-4 1-5v-5l1-6v-23l-1-6-1-7-1-7-2-7"}),React__namespace.createElement("path",{fill:"none",stroke:"black",strokeWidth:"4",d:"M320 484s0 0 0 0m0 0s0 0 0 0m0 0-4-4m4 4-4-4m0 0-5-3m5 3-5-3m0 0-4-3m4 3-4-3m0 0-4-2m4 2-4-2m0 0-5-2m5 2-5-2m0 0-4-1m4 1-4-1m0 0-5-1m5 1-5-1m0 0h-4m4 0h-4m0 0h-5m5 0h-5m0 0h-4m4 0h-4m0 0-4 1m4-1-4 1m0 0-5 2m5-2-5 2m0 0-4 2m4-2-4 2m0 0-5 3m5-3-5 3m0 0-4 3m4-3-4 3m0 0-5 4m5-4-5 4m0 0L116 600m133-117L116 600m0 0s0 0 0 0m0 0s0 0 0 0m0 0-5 4m5-4-5 4m0 0-2 2m2-2-2 2m0 0-2 2m2-2-2 2m0 0-2 2m2-2-2 2m0 0-2 2m2-2-2 2m0 0-1 3m1-3-1 3m0 0-1 3m1-3-1 3m0 0L82 745m19-127L82 745m0 0s0 0 0 0m0 0s0 0 0 0m0 0 10 7m-10-7 10 7m0 0 10 8m-10-8 10 8m0 0 10 7m-10-7 10 7m0 0 9 8m-9-8 9 8m0 0 8 8m-8-8 8 8m0 0 8 8m-8-8 8 8m0 0 7 8m-7-8 7 8m0 0 7 9m-7-9 7 9m0 0 6 9m-6-9 6 9m0 0 6 9m-6-9 6 9m0 0 5 9m-5-9 5 9m0 0 4 9m-4-9 4 9m0 0 5 10m-5-10 5 10m0 0 3 9m-3-9 3 9m0 0 4 10m-4-10 4 10m0 0 2 10m-2-10 2 10m0 0 15-3m-15 3 15-3m0 0 8-2m-8 2 8-2m0 0 7-1m-7 1 7-1m0 0 7-1m-7 1 7-1m0 0 6-1m-6 1 6-1m0 0 7-1m-7 1 7-1m0 0 6-1m-6 1 6-1m0 0 6-1m-6 1 6-1m0 0h6m-6 0h6m0 0 6-1m-6 1 6-1m0 0h5m-5 0h5m0 0h6m-6 0h6m0 0h5m-5 0h5m0 0 4 1m-4-1 4 1m0 0h5m-5 0h5m0 0-4-10m4 10-4-10m0 0-2-10m2 10-2-10m0 0-3-10m3 10-3-10m0 0-2-10m2 10-2-10m0 0-3-10m3 10-3-10m0 0-1-10m1 10-1-10m0 0-2-10m2 10-2-10m0 0-1-9m1 9-1-9m0 0-1-10m1 10-1-10m0 0v-10m0 10v-10m0 0-1-9m1 9-1-9m0 0v-10m0 10v-10m0 0v-9m0 9v-9m0 0 1-10m-1 10 1-10m0 0 1-9m-1 9 1-9m0 0 1-9m-1 9 1-9m0 0 1-10m-1 10 1-10m0 0 1-9m-1 9 1-9m0 0 2-9m-2 9 2-9m0 0 2-9m-2 9 2-9m0 0 2-9m-2 9 2-9m0 0 3-10m-3 10 3-10m0 0 3-9m-3 9 3-9m0 0 2-9m-2 9 2-9m0 0 4-9m-4 9 4-9m0 0 3-9m-3 9 3-9m0 0 3-9m-3 9 3-9m0 0 4-9m-4 9 4-9m0 0 4-9m-4 9 4-9m0 0 4-9m-4 9 4-9m0 0 9-19m-9 19 9-19m0 0 2-3m-2 3 2-3m0 0 2-4m-2 4 2-4m0 0 1-4m-1 4 1-4m0 0 1-5m-1 5 1-5m0 0 2-4m-2 4 2-4m0 0 1-5m-1 5 1-5m0 0v-5m0 5v-5m0 0 1-6m-1 6 1-6m0 0v-5m0 5v-5m0 0v-6m0 6v-6m0 0v-6m0 6v-6m0 0v-6m0 6v-6m0 0-1-6m1 6-1-6m0 0-1-7m1 7-1-7m0 0-1-7m1 7-1-7m0 0-2-7m2 7-2-7m0 0s0 0 0 0m0 0s0 0 0 0m0 0s0 0 0 0m0 0s0 0 0 0"})),React__namespace.createElement("g",{fillOpacity:".8",fillRule:"evenodd",strokeLinecap:"round",strokeOpacity:".8"},React__namespace.createElement("path",{fill:"#a887e8",d:"m434 628 3 4 3 5 2 6 2 5 2 6 1 5 1 7v6l1 13 1 13 1 12 2 13 2 12 3 13 4 12 4 12 4 13 5 12 5 12 7 12 6 11 7 12 8 12 9 12 3 3 2 3 2 3 1 3 1 3 1 3 1 3v5l-1 3-1 2-1 3-1 3-1 2-4 5-61 100-4-9-4-8-4-8-4-8-4-7-5-7-4-7-5-7-4-6-5-6-5-6-5-6-5-5-5-5-5-4-6-5-5-4-6-4-6-4-5-3-6-3-6-3-6-3-6-2-7-2-6-2-7-2-6-1-7-2-7-1h-6l-7-1-4-10-3-10-2-10-3-9-2-10-2-10-1-10-2-9-1-10v-9l-1-10v-19l1-9v-9l1-10 1-9 2-9 1-9 2-10 2-9 3-9 2-9 3-9 3-9 4-9 3-9 4-10 4-9 5-9 4-9 5-9 2-5 2-5 2-5 2-5 1-5 1-5 1-6v-22l-1-6-1-5v-6l-3-12 114 144"}),React__namespace.createElement("path",{fill:"none",stroke:"black",strokeWidth:"4",d:"M434 628s0 0 0 0m0 0s0 0 0 0m0 0 3 4m-3-4 3 4m0 0 3 5m-3-5 3 5m0 0 2 6m-2-6 2 6m0 0 2 5m-2-5 2 5m0 0 2 6m-2-6 2 6m0 0 1 5m-1-5 1 5m0 0 1 7m-1-7 1 7m0 0v6m0-6v6m0 0 1 13m-1-13 1 13m0 0 1 13m-1-13 1 13m0 0 1 12m-1-12 1 12m0 0 2 13m-2-13 2 13m0 0 2 12m-2-12 2 12m0 0 3 13m-3-13 3 13m0 0 4 12m-4-12 4 12m0 0 4 12m-4-12 4 12m0 0 4 13m-4-13 4 13m0 0 5 12m-5-12 5 12m0 0 5 12m-5-12 5 12m0 0 7 12m-7-12 7 12m0 0 6 11m-6-11 6 11m0 0 7 12m-7-12 7 12m0 0 8 12m-8-12 8 12m0 0 9 12m-9-12 9 12m0 0 3 3m-3-3 3 3m0 0 2 3m-2-3 2 3m0 0 2 3m-2-3 2 3m0 0 1 3m-1-3 1 3m0 0 1 3m-1-3 1 3m0 0 1 3m-1-3 1 3m0 0 1 3m-1-3 1 3m0 0v3m0-3v3m0 0v2m0-2v2m0 0-1 3m1-3-1 3m0 0-1 2m1-2-1 2m0 0-1 3m1-3-1 3m0 0-1 3m1-3-1 3m0 0-1 2m1-2-1 2m0 0-4 5m4-5-4 5m0 0-61 100m61-100-61 100m0 0s0 0 0 0m0 0s0 0 0 0m0 0-4-9m4 9-4-9m0 0-4-8m4 8-4-8m0 0-4-8m4 8-4-8m0 0-4-8m4 8-4-8m0 0-4-7m4 7-4-7m0 0-5-7m5 7-5-7m0 0-4-7m4 7-4-7m0 0-5-7m5 7-5-7m0 0-4-6m4 6-4-6m0 0-5-6m5 6-5-6m0 0-5-6m5 6-5-6m0 0-5-6m5 6-5-6m0 0-5-5m5 5-5-5m0 0-5-5m5 5-5-5m0 0-5-4m5 4-5-4m0 0-6-5m6 5-6-5m0 0-5-4m5 4-5-4m0 0-6-4m6 4-6-4m0 0-6-4m6 4-6-4m0 0-5-3m5 3-5-3m0 0-6-3m6 3-6-3m0 0-6-3m6 3-6-3m0 0-6-3m6 3-6-3m0 0-6-2m6 2-6-2m0 0-7-2m7 2-7-2m0 0-6-2m6 2-6-2m0 0-7-2m7 2-7-2m0 0-6-1m6 1-6-1m0 0-7-2m7 2-7-2m0 0-7-1m7 1-7-1m0 0h-6m6 0h-6m0 0-7-1m7 1-7-1m0 0-4-10m4 10-4-10m0 0-3-10m3 10-3-10m0 0-2-10m2 10-2-10m0 0-3-9m3 9-3-9m0 0-2-10m2 10-2-10m0 0-2-10m2 10-2-10m0 0-1-10m1 10-1-10m0 0-2-9m2 9-2-9m0 0-1-10m1 10-1-10m0 0v-9m0 9v-9m0 0-1-10m1 10-1-10m0 0v-9m0 9v-9m0 0v-10m0 10v-10m0 0 1-9m-1 9 1-9m0 0v-9m0 9v-9m0 0 1-10m-1 10 1-10m0 0 1-9m-1 9 1-9m0 0 2-9m-2 9 2-9m0 0 1-9m-1 9 1-9m0 0 2-10m-2 10 2-10m0 0 2-9m-2 9 2-9m0 0 3-9m-3 9 3-9m0 0 2-9m-2 9 2-9m0 0 3-9m-3 9 3-9m0 0 3-9m-3 9 3-9m0 0 4-9m-4 9 4-9m0 0 3-9m-3 9 3-9m0 0 4-10m-4 10 4-10m0 0 4-9m-4 9 4-9m0 0 5-9m-5 9 5-9m0 0 4-9m-4 9 4-9m0 0 5-9m-5 9 5-9m0 0 2-5m-2 5 2-5m0 0 2-5m-2 5 2-5m0 0 2-5m-2 5 2-5m0 0 2-5m-2 5 2-5m0 0 1-5m-1 5 1-5m0 0 1-5m-1 5 1-5m0 0 1-6m-1 6 1-6m0 0v-5m0 5v-5m0 0v-6m0 6v-6m0 0v-5m0 5v-5m0 0v-6m0 6v-6m0 0-1-6m1 6-1-6m0 0-1-5m1 5-1-5m0 0v-6m0 6v-6m0 0-3-12m3 12-3-12m0 0 114 144M320 484l114 144m0 0s0 0 0 0m0 0s0 0 0 0m0 0s0 0 0 0m0 0s0 0 0 0"})),React__namespace.createElement("g",{fillOpacity:".8",fillRule:"evenodd",strokeLinecap:"round",strokeOpacity:".8"},React__namespace.createElement("path",{fill:"#6342a0",d:"m184 884 2 7 2 7 1 8 1 7 1 7 1 7v7l1 7v7l-1 7v7l-1 7v7l-1 7-3 13-3 13-4 14-5 12-5 13-6 13-6 12-6 13-8 12h14l14 1h14l14 1 13 1 14 2 13 2 14 1 13 3 13 2 13 3 13 3 13 4 12 4 13 4 12 5 7 2 6 2 6 1 6 1h5l5-1 6-1 4-2 5-3 5-3 4-4 4-4 2-3 1-2 2-3 2-3 2-4 1-3 2-4 1-4 25-85-5-11-4-11-6-10-5-10-6-9-6-9-6-8-6-8-7-8-7-7-7-6-7-6-8-6-8-5-8-5-8-4-9-4-9-3-9-3-9-2-10-2-10-2-10-1h-32l-11 1-12 2-11 1-12 3-12 3-13 3"}),React__namespace.createElement("path",{fill:"none",stroke:"black",strokeWidth:"4",d:"M184 884s0 0 0 0m0 0s0 0 0 0m0 0 2 7m-2-7 2 7m0 0 2 7m-2-7 2 7m0 0 1 8m-1-8 1 8m0 0 1 7m-1-7 1 7m0 0 1 7m-1-7 1 7m0 0 1 7m-1-7 1 7m0 0v7m0-7v7m0 0 1 7m-1-7 1 7m0 0v7m0-7v7m0 0-1 7m1-7-1 7m0 0v7m0-7v7m0 0-1 7m1-7-1 7m0 0v7m0-7v7m0 0-1 7m1-7-1 7m0 0-3 13m3-13-3 13m0 0-3 13m3-13-3 13m0 0-4 14m4-14-4 14m0 0-5 12m5-12-5 12m0 0-5 13m5-13-5 13m0 0-6 13m6-13-6 13m0 0-6 12m6-12-6 12m0 0-6 13m6-13-6 13m0 0-8 12m8-12-8 12m0 0h14m-14 0h14m0 0 14 1m-14-1 14 1m0 0h14m-14 0h14m0 0 14 1m-14-1 14 1m0 0 13 1m-13-1 13 1m0 0 14 2m-14-2 14 2m0 0 13 2m-13-2 13 2m0 0 14 1m-14-1 14 1m0 0 13 3m-13-3 13 3m0 0 13 2m-13-2 13 2m0 0 13 3m-13-3 13 3m0 0 13 3m-13-3 13 3m0 0 13 4m-13-4 13 4m0 0 12 4m-12-4 12 4m0 0 13 4m-13-4 13 4m0 0 12 5m-12-5 12 5m0 0 7 2m-7-2 7 2m0 0 6 2m-6-2 6 2m0 0 6 1m-6-1 6 1m0 0 6 1m-6-1 6 1m0 0h5m-5 0h5m0 0 5-1m-5 1 5-1m0 0 6-1m-6 1 6-1m0 0 4-2m-4 2 4-2m0 0 5-3m-5 3 5-3m0 0 5-3m-5 3 5-3m0 0 4-4m-4 4 4-4m0 0 4-4m-4 4 4-4m0 0 2-3m-2 3 2-3m0 0 1-2m-1 2 1-2m0 0 2-3m-2 3 2-3m0 0 2-3m-2 3 2-3m0 0 2-4m-2 4 2-4m0 0 1-3m-1 3 1-3m0 0 2-4m-2 4 2-4m0 0 1-4m-1 4 1-4m0 0 25-85m-25 85 25-85m0 0s0 0 0 0m0 0s0 0 0 0m0 0-5-11m5 11-5-11m0 0-4-11m4 11-4-11m0 0-6-10m6 10-6-10m0 0-5-10m5 10-5-10m0 0-6-9m6 9-6-9m0 0-6-9m6 9-6-9m0 0-6-8m6 8-6-8m0 0-6-8m6 8-6-8m0 0-7-8m7 8-7-8m0 0-7-7m7 7-7-7m0 0-7-6m7 6-7-6m0 0-7-6m7 6-7-6m0 0-8-6m8 6-8-6m0 0-8-5m8 5-8-5m0 0-8-5m8 5-8-5m0 0-8-4m8 4-8-4m0 0-9-4m9 4-9-4m0 0-9-3m9 3-9-3m0 0-9-3m9 3-9-3m0 0-9-2m9 2-9-2m0 0-10-2m10 2-10-2m0 0-10-2m10 2-10-2m0 0-10-1m10 1-10-1m0 0h-10m10 0h-10m0 0h-11m11 0h-11m0 0h-11m11 0h-11m0 0-11 1m11-1-11 1m0 0-12 2m12-2-12 2m0 0-11 1m11-1-11 1m0 0-12 3m12-3-12 3m0 0-12 3m12-3-12 3m0 0-13 3m13-3-13 3m0 0s0 0 0 0m0 0s0 0 0 0m0 0s0 0 0 0m0 0s0 0 0 0"})),React__namespace.createElement("g",{fillOpacity:".8",fillRule:"evenodd",strokeLinecap:"round",strokeOpacity:".8"},React__namespace.createElement("path",{fill:"#390f8c",d:"m82 745 13 9 6 5 6 4 6 5 5 5 6 5 5 5 5 6 5 5 5 6 5 6 4 6 4 6 4 6 4 6 3 6 4 7 3 6 2 7 3 7 2 7 2 7 2 7 1 6 2 7 1 7 2 6 1 7v7l1 6v33l-1 7-1 7-1 6-1 7-1 6-2 7-1 7-2 6-3 7-2 6-3 7-2 7-3 6-4 7-3 7-3 6-4 7-4 7-4 7-5 6L16 970l-3-4-4-3-2-4-3-4-1-4-2-5-1-4v-9l1-5v-5l2-5 2-5 2-6 3-5 3-6 69-151"}),React__namespace.createElement("path",{fill:"none",stroke:"black",strokeWidth:"4",d:"M82 745s0 0 0 0m0 0s0 0 0 0m0 0 13 9m-13-9 13 9m0 0 6 5m-6-5 6 5m0 0 6 4m-6-4 6 4m0 0 6 5m-6-5 6 5m0 0 5 5m-5-5 5 5m0 0 6 5m-6-5 6 5m0 0 5 5m-5-5 5 5m0 0 5 6m-5-6 5 6m0 0 5 5m-5-5 5 5m0 0 5 6m-5-6 5 6m0 0 5 6m-5-6 5 6m0 0 4 6m-4-6 4 6m0 0 4 6m-4-6 4 6m0 0 4 6m-4-6 4 6m0 0 4 6m-4-6 4 6m0 0 3 6m-3-6 3 6m0 0 4 7m-4-7 4 7m0 0 3 6m-3-6 3 6m0 0 2 7m-2-7 2 7m0 0 3 7m-3-7 3 7m0 0 2 7m-2-7 2 7m0 0 2 7m-2-7 2 7m0 0 2 7m-2-7 2 7m0 0 1 6m-1-6 1 6m0 0 2 7m-2-7 2 7m0 0 1 7m-1-7 1 7m0 0 2 6m-2-6 2 6m0 0 1 7m-1-7 1 7m0 0v7m0-7v7m0 0 1 6m-1-6 1 6m0 0v7m0-7v7m0 0v7m0-7v7m0 0v6m0-6v6m0 0v7m0-7v7m0 0v6m0-6v6m0 0-1 7m1-7-1 7m0 0-1 7m1-7-1 7m0 0-1 6m1-6-1 6m0 0-1 7m1-7-1 7m0 0-1 6m1-6-1 6m0 0-2 7m2-7-2 7m0 0-1 7m1-7-1 7m0 0-2 6m2-6-2 6m0 0-3 7m3-7-3 7m0 0-2 6m2-6-2 6m0 0-3 7m3-7-3 7m0 0-2 7m2-7-2 7m0 0-3 6m3-6-3 6m0 0-4 7m4-7-4 7m0 0-3 7m3-7-3 7m0 0-3 6m3-6-3 6m0 0-4 7m4-7-4 7m0 0-4 7m4-7-4 7m0 0-4 7m4-7-4 7m0 0-5 6m5-6-5 6m0 0L16 970m128 126L16 970m0 0s0 0 0 0m0 0s0 0 0 0m0 0-3-4m3 4-3-4m0 0-4-3m4 3-4-3m0 0-2-4m2 4-2-4m0 0-3-4m3 4-3-4m0 0-1-4m1 4-1-4m0 0-2-5m2 5-2-5m0 0-1-4m1 4-1-4m0 0v-4m0 4v-4m0 0v-5m0 5v-5m0 0 1-5m-1 5 1-5m0 0v-5m0 5v-5m0 0 2-5m-2 5 2-5m0 0 2-5m-2 5 2-5m0 0 2-6m-2 6 2-6m0 0 3-5m-3 5 3-5m0 0 3-6m-3 6 3-6m0 0 69-151M13 896l69-151m0 0s0 0 0 0m0 0s0 0 0 0m0 0s0 0 0 0m0 0s0 0 0 0"})),React__namespace.createElement("path",{fill:"none",stroke:"#CECDCC",strokeLinecap:"round",strokeWidth:"10",d:"M86 746s0 0 0 0m0 0s0 0 0 0m0 0 11 8m-11-8 11 8m0 0 10 8m-10-8 10 8m0 0 10 9m-10-9 10 9m0 0 8 8m-8-8 8 8m0 0 8 8m-8-8 8 8m0 0 8 8m-8-8 8 8m0 0 6 9m-6-9 6 9m0 0 7 8m-7-8 7 8m0 0 5 8m-5-8 5 8m0 0 6 9m-6-9 6 9m0 0 4 8m-4-8 4 8m0 0 4 9m-4-9 4 9m0 0 4 9m-4-9 4 9m0 0 3 9m-3-9 3 9m0 0 3 9m-3-9 3 9m0 0 3 9m-3-9 3 9m0 0 7-2m-7 2 7-2m0 0 8-1m-8 1 8-1m0 0 7-2m-7 2 7-2m0 0 7-1m-7 1 7-1m0 0 7-1m-7 1 7-1m0 0 7-1m-7 1 7-1m0 0 7-1m-7 1 7-1m0 0 6-1m-6 1 6-1m0 0h6m-6 0h6m0 0 6-1m-6 1 6-1m0 0h6m-6 0h6m0 0 5-1m-5 1 5-1m0 0h5m-5 0h5m0 0h5m-5 0h5m0 0h4m-4 0h4m0 0h4m-4 0h4m0 0-3-11m3 11-3-11m0 0-3-10m3 10-3-10m0 0-3-10m3 10-3-10m0 0-3-10m3 10-3-10m0 0-2-10m2 10-2-10m0 0-2-10m2 10-2-10m0 0-1-10m1 10-1-10m0 0-2-9m2 9-2-9m0 0-1-10m1 10-1-10m0 0v-10m0 10v-10m0 0-1-9m1 9-1-9m0 0v-10m0 10v-10m0 0v-9m0 9v-9m0 0 1-9m-1 9 1-9m0 0 1-10m-1 10 1-10m0 0 1-9m-1 9 1-9m0 0 1-9m-1 9 1-9m0 0 1-10m-1 10 1-10m0 0 2-9m-2 9 2-9m0 0 2-9m-2 9 2-9m0 0 3-9m-3 9 3-9m0 0 2-9m-2 9 2-9m0 0 3-9m-3 9 3-9m0 0 3-9m-3 9 3-9m0 0 3-9m-3 9 3-9m0 0 4-9m-4 9 4-9m0 0 3-9m-3 9 3-9m0 0c2-2 3-5 4-9m-4 9 4-9m0 0 5-9m-5 9 5-9m0 0 4-8m-4 8 4-8m0 0 5-9m-5 9 5-9m0 0 4-11m-4 11 4-11m0 0 4-11m-4 11 4-11m0 0 4-10m-4 10 4-10m0 0 2-11m-2 11 2-11"}),React__namespace.createElement("g",{fillRule:"evenodd",strokeLinecap:"round"},React__namespace.createElement("path",{fill:"#FFF6F0",d:"m153 288-19-25 21-20 199-5 23 21-24 28-201 3-4-4"}),React__namespace.createElement("path",{fill:"none",stroke:"black",strokeWidth:"4",d:"M153 290c-4-9-13-13-20-29m19 25c-8-8-15-18-22-23m4-5c2-6 16-15 20-20m-23 22c10-7 18-16 27-22m-5 2 205-1m-203-2c57-1 114-4 201-2m2 3 24 23m-24-24c3 7 11 10 20 21m0 0c-8 6-9 21-24 24m25-20c-3 2-10 8-22 21m-1 4c-70-1-146 1-207 1m208-5c-64 2-131 3-205 3m-1 1s0 0 0 0m0 0s0 0 0 0m0 0s0 0 0 0m0 0s0 0 0 0"})),React__namespace.createElement("path",{fill:"none",stroke:"#E6E6E5",strokeLinecap:"round",strokeWidth:"10",d:"M455 1003s0 0 0 0m0 0s0 0 0 0m0 0-5-10m5 10-5-10m0 0-5-10m5 10-5-10m0 0-5-10m5 10-5-10m0 0-6-9m6 9-6-9m0 0-5-9m5 9-5-9m0 0-6-8m6 8-6-8m0 0-7-8m7 8-7-8m0 0-6-8m6 8-6-8m0 0-6-7m6 7-6-7m0 0-7-6m7 6-7-6m0 0-7-6m7 6-7-6m0 0-7-6m7 6-7-6m0 0-8-5m8 5-8-5m0 0-8-5m8 5-8-5m0 0-8-5m8 5-8-5m0 0-8-4m8 4-8-4m0 0-8-3m8 3-8-3m0 0-9-3m9 3-9-3m0 0-9-3m9 3-9-3m0 0-9-2m9 2-9-2m0 0-9-2m9 2-9-2m0 0-10-1m10 1-10-1m0 0-10-1m10 1-10-1m0 0h-10m10 0h-10m0 0h-10m10 0h-10m0 0h-11m11 0h-11m0 0-11 1m11-1-11 1m0 0-11 1m11-1-11 1m0 0-12 2m12-2-12 2m0 0-12 2m12-2-12 2m0 0-12 2m12-2-12 2m0 0-12 3m12-3-12 3m0 0 2 8m-2-8 2 8m0 0 1 7m-1-7 1 7m0 0 2 7m-2-7 2 7m0 0 1 7m-1-7 1 7m0 0 1 7m-1-7 1 7m0 0 1 7m-1-7 1 7m0 0v7m0-7v7m0 0v6m0-6v6m0 0v7m0-7v7m0 0v7m0-7v7m0 0v6m0-6v6m0 0v7m0-7v7m0 0-2 12m2-12-2 12m0 0-2 13m2-13-2 13m0 0-3 12m3-12-3 12m0 0-4 12m4-12-4 12m0 0-4 12m4-12-4 12m0 0-5 12m5-12-5 12m0 0-5 12m5-12-5 12m0 0-6 13m6-13-6 13m0 0-6 12m6-12-6 12m0 0-7 12m7-12-7 12"}),React__namespace.createElement("path",{fill:"none",stroke:"#6d6d6d",strokeLinecap:"round",strokeWidth:"10",d:"M185 883s0 0 0 0m0 0s0 0 0 0m0 0 3 14m-3-14 3 14m0 0 3 13m-3-13 3 13m0 0 1 13m-1-13 1 13m0 0 1 13m-1-13 1 13m0 0 1 13m-1-13 1 13m0 0-1 13m1-13-1 13m0 0-1 13m1-13-1 13m0 0-2 12m2-12-2 12m0 0-3 13m3-13-3 13m0 0-3 13m3-13-3 13m0 0-4 12m4-12-4 12m0 0-5 13m5-13-5 13m0 0-6 13m6-13-6 13m0 0-6 12m6-12-6 12m0 0-7 13m7-13-7 13m0 0-8 13m8-13-8 13"}),React__namespace.createElement("g",{fillRule:"evenodd",strokeLinecap:"round"},React__namespace.createElement("path",{fill:a,d:"m148 291-18-30 23-17 206-3 17 19-22 22-204 9v-5"}),React__namespace.createElement("path",{fill:"none",stroke:"transparent",strokeWidth:".5",d:"M153 289c-5-11-10-12-24-27m21 29c-3-9-9-16-20-30m-1 1c13-6 16-13 26-21m-22 20c5-6 14-14 25-20m-1 2c67-5 137-8 198-6m-199 2c67 3 132 3 203-1m2 1c3 6 15 17 19 19m-23-22c9 12 17 19 21 24m-2 0c-3 9-8 12-15 29m18-29-20 27m-4-1-206 4m209-5c-64 0-131 3-207 2m0 2s0 0 0 0m0 0s0 0 0 0m0 0s0 0 0 0m0 0s0 0 0 0"})),React__namespace.createElement("path",{fill:"none",stroke:"black",strokeLinecap:"round",strokeWidth:"4",d:"M153 284c-6-2-17-14-22-25m21 29-21-27m4-1c2-7 8-10 21-24m-26 24c8-7 17-12 27-22m-1 1c75-6 140-6 202-3m-201 1c41 4 81 3 202-2m-3-1c10 7 11 8 25 27m-23-23c5 3 8 9 19 24m-1 0c-8 6-10 19-21 23m25-27c-5 6-9 13-24 25m1 2c-64 1-132 2-206-1m207 0c-56 0-112-2-208 2m1 1s0 0 0 0m0 0s0 0 0 0"}),React__namespace.createElement("g",{fillRule:"evenodd",strokeLinecap:"round"},React__namespace.createElement("path",{fill:n,d:"M298 233c-2-10-12-36-12-60 1-24 8-62 13-84s13-37 17-48 7-13 7-16c-1-3-2-2-9-2-7-1-23 1-31-1-9-2-14-9-18-12l-11-6c-3 0 0 0-5 3s-17 12-26 15-19 2-25 2c-7 0-10-4-12-1-1 3 4 13 5 18 2 5 2 2 5 12l11 47 8 62c2 16 4 23 4 32 0 10-4 18-5 25 0 7 0 13 2 17s4 4 12 4l36-3 35-4"}),React__namespace.createElement("path",{fill:"none",stroke:"black",strokeWidth:"4",d:"M297 236c-1-10-8-38-8-62s5-61 9-83 12-40 16-51c3-11 7-12 7-14-1-3-2-1-8-1-6-1-19-1-27-4-9-2-18-8-23-11s-6-7-8-8c-3 0-2 1-7 4s-14 12-23 15c-9 4-22 4-29 5-6 0-8-3-9-1s2 10 4 14l3 15c3 10 11 29 15 46l7 60c2 15 1 25 1 35l-1 26c0 7-3 14-1 17 2 2 6 0 14 0h34l35-2m1 0c-2-11-10-37-10-61-1-24 4-61 8-83 5-22 13-39 17-51 4-11 9-15 8-18 0-3-5 2-11 1l-24-3c-8-2-17-5-22-8-5-4-6-11-8-12-3-1-3 1-8 4-6 3-15 11-24 14-9 4-24 5-30 6s-7-4-8-1c-1 2 2 10 3 15l4 14 12 48c4 18 11 43 12 59 2 16-2 25-2 35l-1 26c0 8-1 16 1 18 2 3 4-2 12-2l36-1h34"})),React__namespace.createElement("g",{fillOpacity:".8",fillRule:"evenodd",strokeLinecap:"round",strokeOpacity:".8"},React__namespace.createElement("path",{fill:n,d:"M293 232c-1-10-6-38-5-61 1-24 7-58 11-80 4-21 12-38 15-50 4-12 9-17 8-19-1-3-9 6-16 5-6 0-13-6-21-8s-20-2-25-4c-5-3-3-12-6-13s-6 5-11 8c-5 2-10 5-18 7s-26 3-32 5c-7 2-5 4-6 7l3 9c0 4-1 2 1 14 2 11 6 35 11 53 4 17 14 37 16 52 2 14-4 26-5 36 0 10 3 16 3 24s-5 21-3 24 9-4 17-5c9-2 20-2 31-2l35-1"}),React__namespace.createElement("path",{fill:"none",stroke:"black",d:"M298 234c-1-11-11-36-12-60 0-24 5-62 9-84s11-36 15-47 11-14 11-17c1-3-2 1-9 0l-31-8c-9-3-15-3-20-6-4-3-6-12-9-12s-1 6-6 9-14 8-23 11l-29 4c-6 1-7-1-8 1-1 3-1 10 1 14 1 5 5 3 8 13s5 30 9 48c3 17 9 41 11 57 2 17 2 30 2 40l-2 23c-1 7-3 15-1 18 3 2 7-1 14-1 8 0 21 3 32 2 12 0 29-6 35-6m1 6c-1-10-12-37-12-62a493 493 0 0 1 26-139c4-10 9-8 9-10-1-2-5-2-11-3s-19-1-27-3l-22-11c-4-3-1-6-3-7-2 0-3 3-8 5-6 3-16 11-25 13-8 2-18 0-24 0-6 1-11-1-12 1-1 3 4 11 6 16 2 4 2 0 4 11l8 52 7 56c2 16 2 30 2 41l-2 21c0 6 2 11 4 13 3 3 3 0 11 1l34 3 33 1"})),React__namespace.createElement("g",{fillOpacity:".8",fillRule:"evenodd",strokeLinecap:"round",strokeOpacity:".8"},React__namespace.createElement("path",{fill:t,d:"M298 233c-1-10-10-35-10-59 0-23 6-60 10-83 5-23 13-41 16-52l4-13c0-3 0-3-6-3-5-1-21 1-29-1-9-2-15-8-20-11l-11-8c-3-1 1-1-4 2l-25 13-27 9c-6 1-8-4-9-3-1 2 0 9 1 14s0 7 4 18c3 10 12 25 16 43 4 17 6 43 7 59 2 16 2 25 2 36l-2 28c-1 7-1 12 1 14s4-1 12-1l33 1 37-3"}),React__namespace.createElement("path",{fill:"none",stroke:"black",strokeWidth:"4",d:"M297 235c-2-10-10-37-10-61-1-24 5-60 9-82 5-22 14-40 18-51s8-13 7-16c0-3-4-2-11-3-6 0-18 0-26-2s-17-7-22-10-6-7-8-7c-3-1-2 1-7 3-5 3-15 10-23 13-9 4-22 5-28 6-7 1-9-2-10 0s3 9 4 13l3 15c3 10 10 28 14 46s8 45 10 61v35l-2 25c0 7-3 14-1 17s6 1 13 1l33-2 37-1m-1-1c-3-10-11-35-11-59 1-24 9-62 14-85 4-23 12-40 15-51l6-17c-1-2-3 3-9 2a123 123 0 0 1-50-15c-5-3-3-7-5-7-3-1-3 1-8 4s-15 11-24 14-23 4-30 5c-6 1-8-3-8-1-1 2 3 9 4 14l3 14c3 10 11 30 15 48l8 61c1 16 0 25-1 35l-1 24c0 7-1 16 1 19s4-1 11-2l34 1 37-3"})),React__namespace.createElement("g",{strokeLinecap:"round"},React__namespace.createElement("path",{fill:a,d:"M256 36c3 0 6 2 8 5s4 9 4 13l-3 12c-2 4-5 7-8 8s-6 1-8-1c-3-2-6-6-7-10s-2-9-1-13 4-8 6-10c2-3 7-4 8-4 2-1 1 1 1 1m1-1c3 0 6 4 8 7l3 12c0 5-2 10-4 13-1 3-4 6-7 7-3 0-8-1-10-4-3-2-5-6-5-10V48c1-4 4-8 6-10 3-2 7-2 9-2v1"}),React__namespace.createElement("path",{fill:"none",stroke:"black",strokeWidth:"4",d:"M252 37c2-1 7-1 9 1l5 10c1 4 2 9 1 13s-4 8-6 11c-3 2-6 3-8 2-3 0-7-3-9-6s-3-8-3-12c-1-4 1-10 3-13s7-5 8-6v-1m0 0c2-1 6 0 9 2 2 2 5 6 6 10v14c-1 4-4 7-6 9-3 2-6 4-9 3-3 0-6-3-8-7-2-3-4-8-4-12s2-9 4-12l8-7v1"})),React__namespace.createElement("g",{fillRule:"evenodd",strokeLinecap:"round"},React__namespace.createElement("path",{fill:"hsla(30, 2%, 62%, 1)",d:"m275 624-12-21c-4-9-7-22-12-30s-12-12-19-18l-23-19c-6-4-10-2-12-5-2-4 0-5 0-16l4-53 8-154c2-28-1-14 2-16s8 3 16 3c7 0 25-6 30-3s-3-3-2 22l7 125 9 187"}),React__namespace.createElement("path",{fill:"none",stroke:"black",strokeWidth:"4",d:"m273 626-9-24c-4-9-6-18-11-26l-21-23-23-14c-5-4-9-4-11-7-2-4-2-2-2-14l3-57 9-154c1-28-1-11 2-13 3-3 11 0 18 0 8-1 25-5 29-2s-3-5-2 19l7 127 12 187m0 0-11-25c-4-9-6-18-11-26-5-7-13-14-21-20-7-6-18-11-23-15-6-3-7-1-9-5s-2-5-2-17c-1-12-1-21 1-56l11-152c3-28-1-14 2-16s10 2 17 2c8-1 24-6 28-4 4 3-2-5-1 19l6 127 14 188"})),React__namespace.createElement("g",{fill:"none",fillRule:"evenodd",strokeLinecap:"round"},React__namespace.createElement("path",{stroke:i,strokeWidth:".3",d:"M208 292s0 0 0 0m0 0s0 0 0 0m0 3 1-1m-1 1 1-1m-1 5 2-4m-3 4 3-4m-3 5c2 0 2-3 7-6m-6 7c0-2 3-3 5-6m-8 12c4-5 5-8 13-14m-11 12c3-5 6-8 9-10m-11 11c3 3 8-2 12-11m-10 13 11-15m-14 16c5-9 13-9 16-17m-11 19c1-5 6-8 13-15m-13 17c3-2 8-15 16-22m-19 22 18-17m-17 20 20-19m-18 22c4-10 12-18 19-26m-18 30c0-12 13-21 17-33m-19 29c6-6 9-13 20-24m-18 29c7-7 10-19 19-31m-23 30c8-8 18-19 25-29m-25 34c13-16 18-21 32-31m-31 31c6-12 16-20 27-35m-28 41c11-11 11-20 33-40m-34 36 35-36m-36 37c18-13 30-31 39-40m-37 42c9-9 21-21 33-40m-36 41c20-9 29-31 42-44m-40 48c11-11 21-21 38-43m-41 45c13-11 21-22 48-44m-44 43 41-45m-42 52c12-20 34-34 46-52m-47 49c13-13 27-25 46-49m-46 54c9-18 21-31 51-52m-48 51 46-55m-46 60c15-16 25-38 44-62m-48 59c14-15 30-30 50-56m-47 63c12-15 23-27 46-63m-47 61 50-59m-48 64c19-26 40-50 50-61m-53 58 54-62m-52 69c15-21 37-46 48-61m-49 58 54-63m-54 68c15-20 30-40 51-61m-50 59c16-23 35-44 50-59m-51 64c11-14 24-27 48-59m-48 57 51-62m-55 65c16-13 24-25 57-57m-55 57c12-11 22-27 53-60m-50 61c21-18 40-42 54-60m-56 61 54-59m-55 60c20-11 35-28 51-60m-49 63c16-18 30-39 50-62m-52 63c13-16 30-27 51-62m-51 65c14-19 29-33 53-61m-55 60c18-13 30-25 59-56m-57 60c12-13 28-30 53-62m-56 63c27-18 46-44 60-62m-59 64c17-14 33-31 58-61m-52 66c20-27 41-51 54-68m-56 65c8-14 24-26 52-60m-54 62c19-16 34-31 58-60m-59 62 56-63m-55 70c15-26 32-41 51-67m-52 63c21-22 42-47 57-60m-53 65c12-15 21-26 48-67m-50 65c11-15 22-28 54-60m-54 64c12-20 33-39 51-60m-53 61c17-20 36-44 57-65m-59 66c15-11 23-23 56-65m-52 68c11-18 25-32 54-65m-54 69c20-25 39-41 51-64m-51 63c17-20 35-41 55-67m-58 68c23-21 43-45 59-66m-58 66c15-19 30-37 57-65m-55 72c18-21 37-44 54-69m-56 68 55-65m-57 68c20-24 41-45 59-63m-57 60c19-21 36-39 56-65m-55 68c14-17 28-26 58-65m-61 66 57-65m-54 69c17-16 26-33 57-68m-59 66c18-22 40-43 58-64m-55 72c12-15 19-34 57-72m-61 71 60-68m-61 67c23-20 43-41 61-61m-60 62c18-19 34-37 58-67m-59 70c14-18 35-35 64-66m-64 68c24-27 43-48 58-67m-55 67c20-23 46-52 54-63m-54 67c19-26 37-45 58-68m-57 73c11-20 33-44 56-72m-58 68c14-17 31-32 59-67m-61 71c20-16 41-36 60-69m-57 71c21-27 41-50 59-68m-57 73c18-22 30-41 59-72m-61 69 60-70m-59 73c11-20 28-36 57-71m-61 73c21-23 40-44 62-72m-58 74c12-18 32-40 56-67m-58 66c15-19 32-37 57-70m-56 72 56-67m-59 70 61-70m-63 76c26-29 50-63 60-77m-56 74 61-72m-64 77c15-20 36-36 64-77m-62 73c22-26 49-52 62-71m-62 77c15-15 27-38 59-75m-60 73 62-71m-60 75c17-20 30-33 57-74m-60 73c15-15 33-33 64-71m-65 78c14-21 30-42 67-75m-64 71c16-15 29-33 60-70m-62 78c21-28 33-46 60-79m-61 74c23-23 42-49 63-71m-65 78c24-33 47-53 70-75m-66 71c26-27 53-57 61-73m-63 76c24-21 39-47 61-69m-60 69 64-72m-65 74c13-15 30-35 64-68m-63 70c19-19 35-37 65-71m-64 73c24-21 41-48 60-71m-63 71c25-29 50-56 65-71m-62 73c19-18 35-39 60-74m-62 76c15-19 33-39 64-71m-66 78c18-27 41-43 71-73m-69 71c26-29 53-58 64-74m-62 80c17-28 37-51 66-78m-68 76c15-17 25-32 66-78m-68 80c22-17 34-37 64-75m-63 73 67-71m-69 75c23-26 49-48 66-73m-64 74c12-15 26-32 66-77m-68 79c20-16 30-33 68-75m-64 76 65-77m-70 84c19-15 29-35 73-79m-71 77c26-32 51-57 70-79m-71 82c24-20 36-44 73-77m-71 76c21-28 47-54 69-77m-68 82c17-26 38-50 66-76m-67 75c16-23 35-40 67-78m-64 79c19-22 43-49 69-76m-73 76 69-76m-70 83c27-31 53-60 69-81m-67 80c19-22 34-43 67-78m-65 83c16-24 36-46 69-83m-72 79c20-24 41-51 70-76m-68 81c25-35 55-64 64-79m-65 75c27-29 54-56 67-75m-64 79c21-31 41-51 63-81m-65 80c17-17 33-31 69-74m-70 79c19-21 29-36 66-80m-64 79 65-76m-60 79c12-22 35-42 63-79m-64 74 65-73m-61 77c19-27 35-47 59-72m-63 73c23-28 43-52 65-76m-61 75c11-22 34-43 58-72m-62 71c20-18 36-39 64-68m-63 68 62-65m-60 68c11-16 26-33 59-70m-59 69c16-14 28-29 57-67m-53 70 57-68m-53 72c11-25 23-35 51-71m-56 67c15-19 33-37 56-66m-50 70c20-30 39-55 52-64m-55 62 55-65m-50 66c12-17 25-27 46-65m-50 64c20-24 36-46 54-60m-52 59c20-16 37-33 56-60m-58 60c18-18 32-35 52-57m-49 60 52-58m-50 57c14-15 26-32 47-57m-44 61c9-19 25-29 43-56m-46 52c19-19 34-35 49-55m-47 57c10-7 16-24 44-51m-44 51c16-15 29-34 46-52m-47 54c12-17 27-30 49-55m-46 54c10-13 23-26 45-51m-47 56c19-25 39-40 44-52m-40 50c18-22 34-40 43-53m-41 52c5-11 19-22 43-44m-45 44c11-10 20-22 42-47m-41 49c14-10 21-18 44-51m-42 50 43-48m-39 50 37-47m-38 48c8-14 18-22 40-46m-39 50c4-9 15-25 35-48m-35 43c10-13 23-26 38-41m-33 45c12-23 30-32 31-47m-35 44c14-14 28-31 36-41m-36 43c9-13 24-22 39-42m-37 41c11-14 26-25 33-39m-30 46c8-13 18-24 34-40m-36 37 33-39m-33 43c18-22 24-32 35-44m-35 40c9-8 19-16 35-36m-29 35c3-3 12-19 29-30m-34 31c13-9 22-20 36-33m-33 40c11-12 24-31 31-40m-31 39c8-12 18-20 29-38m-24 40c3-10 13-19 26-39m-28 35c3-5 13-14 29-31m-27 37c11-13 18-26 27-36m-30 33 28-33m-24 30c9-8 20-15 21-28m-23 33c7-8 14-14 28-31m-25 33c7-10 8-18 24-29m-26 27 25-30m-23 30c11-9 15-19 20-30m-18 32c4-8 11-13 22-28m-24 27c13-8 21-19 24-25m-24 26c10-6 18-17 25-26m-26 25c10-7 18-8 23-18m-20 23c9-9 17-20 23-27m-20 28c10-12 14-19 20-24m-21 23c6-4 8-10 21-24m-20 23c7 0 12-9 16-17m-17 19c8-6 16-16 20-20m-14 20c3 1 2-8 12-17m-14 20c5-7 8-12 18-21m-21 26c10-10 14-16 19-26m-15 21c4-6 12-12 15-17m-14 21c3-6 9-11 13-19m-13 18c3-6 11-14 15-19m-15 24c0-6 5-15 14-21m-16 17c7-6 13-14 17-19m-13 22c1-5 8-11 16-17m-19 18c4-4 8-7 15-16m-12 16c7-1 10-7 17-19m-16 19c5-7 10-10 14-15m-15 20c5-5 3-10 16-19m-15 17 14-17m-15 21c6-4 10-11 13-14m-12 14c4-4 7-7 12-16m-11 16c5-7 11-9 9-17m-10 17c6-5 9-9 16-12m-10 13c-4-2 4-4 8-10m-12 13 11-15m-11 13c2-4 9-3 13-10m-11 11 9-12m-9 14c0-1 5-1 13-14m-14 17c5-6 5-8 12-12m-13 11 15-9m-12 9 11-11m-10 17c2-9 6-13 8-16m-9 13 10-10m-9 13 10-12m-9 11 8-10m-9 11c3-3 8-4 8-9m-7 11 9-10m-6 13c-2-3 1-4 7-9m-10 7c4-2 6-3 9-8m-8 10c5-1 6-4 7-6m-6 6 6-7m-4 8c0 2 2-1 4-3m-6 5 6-5m-5 6c2 0 3-2 5-4m-4 4 4-4m-3 8 3-5m-3 4 4-4m-3 7 2-4m-3 4 3-5m-2 6 3-3m-3 3 3-3m-2 5 1-2m-1 2 2-2m-1 4 1-1m-1 1 1-1"}),React__namespace.createElement("path",{stroke:"transparent",strokeWidth:".5",d:"m275 627-11-23c-4-9-10-23-15-31s-10-11-17-17l-24-19c-6-3-8 2-10-1-2-4-3-7-3-19l3-56 10-153c2-27-4-11 0-14 3-2 15-1 22-1 8 0 19-3 23-1 5 3 1-6 2 18l8 131 11 184m-2 1-9-26c-3-8-3-18-8-25-6-7-16-10-23-16s-14-18-19-22c-6-4-10 1-12-2-3-4-3-9-4-21-1-13-4-20-2-54 1-35 7-127 9-155s0-10 4-12c5-2 16 2 24 2 8-1 22-8 25-4 4 3-2 0-1 25 0 25 2 74 6 125 3 52 12 152 13 183"})),React__namespace.createElement("path",{fill:"none",stroke:"black",strokeLinecap:"round",strokeWidth:"4",d:"m275 627-13-26c-4-9-5-17-10-25s-12-15-19-21l-23-15c-6-3-9-3-11-7-3-4-3-4-3-16l4-55 8-154c1-28-1-12 3-14 3-3 10 0 18 0 7 0 23-5 28-2 4 4-1-3 0 21l6 127 12 186m-1 0-10-24c-3-9-8-20-13-28s-11-13-18-19l-25-18c-5-3-6-2-8-5s-3-1-3-13c-1-12 0-22 2-57l10-155c2-28-4-12-1-14 4-2 13 1 20 2 8 0 22-3 27 0s1-7 2 18l5 126c3 52 12 155 13 186"}),React__namespace.createElement("g",{fillRule:"evenodd",strokeLinecap:"round"},React__namespace.createElement("path",{fill:n,d:"M273 611c1-4 5-21 9-31 5-10 12-22 18-29 6-8 11-12 18-18 7-5 20-9 24-15 3-5 0 13-5-17l-24-161c-4-31-4-17-5-23-1-7 1-12 1-17-1-4-2-9-4-10s-4 4-8 4l-17-2-15 1c-5 0-11 1-12 3s5 2 6 9c0 6-4-7-2 31 1 38 10 160 12 198l1 31 3 45"}),React__namespace.createElement("path",{fill:"none",stroke:"black",strokeWidth:"4",d:"M270 610c2-5 6-21 11-30 5-10 11-21 17-29l22-18c7-6 18-8 21-14 2-6 2 9-3-21l-25-158-4-25v-14c-1-3-2-7-4-9s-5-1-9-1l-16 2-13 1c-5 0-9-2-11 0-1 2 2 5 2 12 0 8-2-6 0 32l9 197 2 28 2 47m1 2c1-6 4-24 8-34s10-18 17-26 17-16 24-22c6-5 15-6 18-11s5 12 0-18l-25-163c-5-31-1-18-2-23l-5-12c-1-4 0-10-2-12-1-2-5 0-9 1l-17 1h-12c-4 0-10-2-11 1-2 2 2 4 3 11 0 8-2-7 0 31l10 199c2 38-1 16-1 28l1 47"})),React__namespace.createElement("g",{fill:"none",fillRule:"evenodd",strokeLinecap:"round"},React__namespace.createElement("path",{stroke:i,strokeWidth:".5",d:"m254 299 7-5m-7 5 7-5m-4 8 4-8m-4 8 4-8m-7 11c4-4 6-4 12-11m-12 11 12-11m-9 13c4-2 4-6 9-13m-9 13 9-13m-11 17c2-5 8-9 17-17m-17 17 17-17m-14 19 14-19m-14 19 14-19m-17 22 23-23m-23 23 23-23m-20 26 20-26m-20 26 20-26m-23 30c10-13 21-22 28-29m-28 29c8-11 17-19 28-29m-25 31c7-9 18-20 25-31m-25 31 25-31m-28 34 33-35m-33 35 33-35m-30 38c9-11 18-20 30-38m-30 38 30-38m-32 41 38-41m-38 41 38-41m-35 43c13-14 27-30 35-43m-35 43 35-43m-38 46c9-10 21-25 44-47m-44 47 44-47m-41 50c11-16 24-32 41-50m-41 50 41-50m-43 53c16-16 32-33 46-51m-46 51c12-16 28-30 46-51m-43 54 43-54m-43 54c9-13 19-24 43-54m-46 57c21-21 37-42 51-56m-51 56 51-56m-48 58c11-12 23-26 48-58m-48 58 48-58m-51 62 53-58m-53 58c14-14 25-29 53-58m-50 61c17-23 38-42 50-61m-50 61 50-61m-53 64 53-59m-53 59c20-21 39-41 53-59m-50 61c16-15 29-35 50-61m-50 61 50-61m-53 64 54-58m-54 58c13-12 24-26 54-58m-51 61 51-61m-51 61 51-61m-53 64c18-21 39-39 54-59m-54 59c20-21 39-41 54-59m-51 62c15-20 33-42 51-62m-51 62c18-23 35-45 51-62m-54 65 54-59m-54 59c17-21 35-41 54-59m-51 61c18-20 34-39 51-61m-51 61 51-61m-53 64c14-17 30-31 54-59m-54 59 54-59m-51 62 51-62m-51 62 51-62m-55 66c22-21 40-43 56-61m-56 61 56-61m-53 63c18-19 34-38 53-63m-53 63 53-63m-55 66 55-60m-55 60c20-24 42-48 55-60m-52 63c12-18 27-32 52-63m-52 63 52-63m-55 66 55-61m-55 61c15-17 33-35 55-61m-52 64c15-18 32-36 52-64m-52 64 52-64m-54 67c16-16 30-34 56-62m-56 62 56-62m-53 64c15-16 26-31 53-64m-53 64c12-14 23-30 53-64m-56 67c17-15 33-32 57-62m-57 62 57-62m-54 65c16-23 35-44 54-65m-54 65 54-65m-57 68c23-24 47-48 58-63m-58 63c18-18 35-38 58-63m-55 66c12-16 26-31 55-66m-55 66 55-66m-58 69c16-14 31-34 58-63m-58 63c15-18 31-34 58-63m-55 66 55-66m-55 66c12-13 24-27 55-66m-58 69c21-22 44-46 59-64m-59 64 59-64m-56 67c20-27 40-49 56-67m-56 67 56-67m-58 70 59-65m-59 65c14-16 28-33 59-65m-56 67c21-26 43-55 56-67m-56 67c15-20 33-40 56-67m-59 70 59-65m-59 65c23-23 44-49 59-65m-56 68 56-68m-56 68c13-14 25-29 56-68m-58 71c22-23 44-46 60-66m-60 66 60-66m-57 69c16-18 29-38 57-69m-57 69c17-23 36-44 57-69m-60 72c12-15 26-28 61-67m-61 67c12-15 26-28 61-67m-58 69 58-69m-58 69 58-69m-61 73c13-16 30-35 61-67m-61 67 61-67m-58 70c20-22 39-48 58-70m-58 70c20-24 38-48 58-70m-61 73c17-23 37-45 62-68m-62 68c18-18 34-37 62-68m-59 70 59-70m-59 70 59-70m-61 73c22-22 44-46 62-69m-62 69c16-17 33-35 62-69m-59 72 59-72m-59 72c13-18 27-34 59-72m-62 75c21-24 42-43 62-69m-62 69c23-26 46-53 62-69m-59 72 59-72m-59 72 59-72m-62 75c21-21 40-46 64-70m-64 70c14-14 27-28 64-70m-61 72c15-15 28-30 61-72m-61 72 61-72m-63 75c15-16 30-31 64-70m-64 70 64-70m-61 73 61-73m-61 73 61-73m-65 77 66-72m-66 72 66-72m-62 74c17-20 34-43 62-74m-62 74c20-22 39-46 62-74m-65 77 65-72m-65 72 65-72m-62 75 62-75m-62 75 62-75m-65 78c19-18 33-39 66-73m-66 73 66-73m-63 76c19-20 38-42 63-76m-63 76 63-76m-65 79c22-23 45-48 66-74m-66 74 66-74m-63 76c23-26 43-51 63-76m-63 76 63-76m-66 79c20-20 36-41 67-73m-67 73 67-73m-64 76c18-22 37-42 64-76m-64 76c18-19 33-40 64-76m-67 79 68-74m-68 74 68-74m-65 76c13-16 28-31 65-76m-65 76 65-76m-68 80 69-75m-69 75 69-75m-66 78c26-33 50-64 66-78m-66 78 66-78m-68 81c19-24 37-43 68-76m-68 76 68-76m-65 78c12-16 27-35 65-78m-65 78 65-78m-68 82c15-15 28-34 69-77m-69 77 69-77m-66 79 66-79m-66 79 66-79m-69 82c23-27 49-53 70-77m-70 77 70-77m-67 80c16-19 33-42 67-80m-67 80 67-80m-69 83 70-77m-70 77c23-26 47-50 70-77m-67 79c12-17 28-32 67-79m-67 79 67-79m-70 82 71-77m-71 77c17-15 32-32 71-77m-68 80c14-16 29-32 68-80m-68 80c16-17 30-36 68-80m-71 84c17-22 34-40 72-80m-72 80c20-24 42-48 72-80m-69 82c16-22 35-42 69-82m-69 82 69-82m-72 85 73-80m-73 80c20-19 37-40 73-80m-70 83c27-28 50-60 70-83m-70 83c16-18 30-38 70-83m-72 86c19-21 39-41 72-80m-72 80c15-19 34-38 72-80m-69 83c24-28 51-58 69-83m-69 83 69-83m-72 86c19-21 38-46 73-81m-73 81 73-81m-70 83 70-83m-70 83 70-83m-73 86c9-7 13-13 32-33m-32 33c14-13 25-26 32-33m-28 36c11-11 18-24 28-36m-28 36 28-36m-1-1 43-47m-43 47c12-15 25-29 43-47m-40 49c13-13 20-25 40-49m-40 49c7-10 15-20 40-49m-73 87c2-5 9-7 13-12m-13 12 13-12m-10 15c1-4 6-10 10-15m-10 15c4-6 6-11 10-15m39-48c7-5 12-13 22-22m-22 22 22-22m-19 24c9-6 12-17 19-24m-19 24c7-7 13-16 19-24m-74 88 10-8m-10 8 10-8m-7 11c2-3 3-7 7-11m-7 11 7-11m53-65 12-10m-12 10 12-10m-9 13c4-4 6-8 9-13m-9 13 9-13m-75 89 7-5m-7 5 7-5m-4 8 4-8m-4 8 4-8m-7 11 4-1m-4 1 4-1m-1 3 1-3m-1 3 1-3"}),React__namespace.createElement("path",{stroke:"transparent",d:"M271 612c2-5 5-23 10-32 4-10 11-18 17-26l22-22c7-6 17-7 20-13 3-5 3 11-1-19l-27-159c-5-31 0-19-1-26l-4-13c-1-3 1-8-1-10-2-1-5 1-10 2l-16-1-13 2c-4 0-9-3-11-1-1 3 1 7 1 14s-2-9 0 29l10 200 2 25 1 49m-1 1c2-5 6-21 11-31 4-10 11-21 17-29 7-8 16-13 23-19 8-5 19-8 22-13 4-6 3 9-2-21l-28-160c-5-31-1-18-2-24l-2-10c0-4 1-8-1-10s-6 0-10 0l-18-2-12 1c-4 0-9-2-11 0s1 7 2 14c0 7-2-9 0 30l8 200c2 38 1 12 2 24l4 49"})),React__namespace.createElement("path",{fill:"none",stroke:"black",strokeLinecap:"round",strokeWidth:"4",d:"m270 610 10-30a129 129 0 0 1 39-49c8-6 18-7 21-12s2 10-3-20l-24-160c-5-31-4-18-5-25l-1-13c0-4 1-7-1-8-2-2-6-1-10-1h-16l-14 1c-4 1-9-1-11 1s0 4 1 11l1 32 10 198 1 27 3 48m1 2c2-5 3-24 7-33 5-10 11-18 18-26 6-8 16-16 23-21 7-6 16-7 19-13 3-5 3 8-1-21l-24-157c-5-31-2-21-3-27-2-7-5-8-6-11 0-4 4-9 2-11-1-1-6 1-11 1l-17-1h-12c-4 1-11 0-13 3-2 2 1 5 2 13l2 31 8 196c2 37 3 14 4 27v48"}),React__namespace.createElement("g",{fillRule:"evenodd",strokeLinecap:"round"},React__namespace.createElement("path",{fill:t,d:"m273 624-10-21c-4-8-7-18-12-26s-11-17-19-23c-7-5-21-9-27-12-5-4-5-5-7-9-2-3-5-1-5-13 0-11 3-22 5-57l6-153c2-28 1-14 5-17s10-1 17 0c8 0 25 0 29 3 5 3-1-7 0 16l4 127c3 53 8 159 11 189"}),React__namespace.createElement("path",{fill:"none",stroke:"black",strokeWidth:"4",d:"m272 627-11-25c-4-8-6-19-11-26-5-8-12-14-19-20s-18-13-24-16c-6-4-7-3-9-7-3-3-4-4-4-15l3-56 10-153c2-27-2-12 2-14 3-3 11 0 19 0s23-4 27-1c5 3-1-4-1 20l6 125 12 187m-2 1-10-23c-4-9-6-19-11-27s-11-14-18-20c-6-6-16-13-22-17-6-3-11-1-13-4-3-4-2-4-2-16l2-59 9-153c3-28 1-12 5-14 3-2 11 2 19 2 7 0 21-6 25-3 5 3 0-4 1 20 0 25 1 77 4 129l13 184"})),React__namespace.createElement("g",{fill:"none",fillRule:"evenodd",strokeLinecap:"round"},React__namespace.createElement("path",{stroke:i,strokeWidth:".3",d:"M207 292s0 0 0 0m0 0s0 0 0 0m1 3v-1m0 1s0 0 0 0m0 4c0-1 0-2 2-3m-3 3 3-3m-4 5c1-1 6-2 7-6m-5 7c0-2 2-3 4-6m-4 8c1-4 5-6 7-11m-9 12c4-2 5-5 10-9m-11 16c2-6 7-13 10-14m-9 9c2-3 9-7 11-13m-9 17c2-3 9-12 17-13m-19 13c8-7 11-11 13-16m-16 19 24-17m-21 17c8-6 13-13 19-19m-16 23c1-6 7-13 15-24m-17 23c4-5 10-15 18-23m-23 32c7-13 13-22 30-31m-26 28c7-10 12-18 23-28m-25 28c14-8 20-23 30-27m-28 30c7-12 19-20 28-32m-27 31c7-9 22-24 25-33m-25 38c10-17 22-28 28-37m-29 35c10-4 17-11 31-30m-33 34c12-12 21-23 32-38m-33 40c17-9 26-28 35-37m-34 39c12-12 17-19 34-43m-30 46c10-11 23-28 37-48m-39 46 38-43m-42 44c12-10 22-16 46-42m-42 43c10-9 22-22 40-45m-44 51c14-11 31-26 48-54m-44 52c10-15 25-29 44-48m-44 54c12-15 24-27 43-55m-43 55 44-56m-47 58c21-18 42-45 49-60m-46 61c12-17 27-35 47-58m-46 59c14-17 28-37 50-55m-51 56c14-18 29-38 51-58m-53 62c15-19 29-37 52-60m-50 57c17-16 31-35 53-59m-53 63c20-19 37-40 48-58m-49 59c21-26 42-49 53-59m-53 60c8-13 19-28 54-61m-54 63 53-61m-53 66 47-64m-48 63 54-62m-54 66c23-25 38-48 52-59m-54 60c13-13 23-26 53-64m-54 66c12-16 30-30 56-62m-55 63c17-15 30-34 53-62m-52 65c16-23 27-39 51-64m-52 62c20-22 42-45 53-61m-52 63c10-16 31-35 55-63m-57 66c12-12 24-25 57-64m-55 63c21-13 36-40 53-57m-54 62c15-15 27-30 54-65m-55 67c24-18 41-38 58-60m-56 61 52-66m-54 63c20-18 45-44 59-58m-59 64c17-19 34-35 56-66m-56 67c20-19 42-46 54-61m-51 60c12-17 30-33 52-59m-55 64c19-17 31-33 60-66m-58 67c15-21 34-42 53-65m-56 69c21-31 47-52 61-65m-59 61 57-60m-56 63c24-24 40-45 53-65m-55 67c14-15 26-27 55-65m-53 68c15-21 36-42 55-62m-55 64c14-18 32-39 56-65m-54 67c14-15 24-32 49-62m-52 62 55-65m-58 66c17-22 36-38 57-61m-53 64c21-24 42-50 54-67m-54 70c13-15 25-35 56-63m-57 62 57-64m-60 70c15-22 38-41 55-70m-54 68c15-18 34-36 57-65m-59 64c13-13 29-28 59-63m-56 69c18-24 36-42 56-67m-60 64c21-18 45-42 61-65m-56 70c16-22 29-37 55-67m-54 68c14-17 30-32 54-64m-57 66c14-14 28-32 60-67m-62 68c16-18 32-34 57-66m-55 65c16-15 32-32 58-63m-58 71c13-21 34-44 60-66m-61 63c23-24 44-52 60-66m-57 69c8-19 29-31 58-68m-58 67c17-18 32-41 56-66m-61 68c15-12 33-27 60-65m-57 68c16-14 31-34 59-67m-55 71c9-19 24-31 59-69m-61 70c14-21 30-36 57-69m-58 74c17-24 34-41 56-73m-57 69c20-25 43-48 59-68m-57 73c16-20 34-37 56-71m-58 69c19-22 38-45 62-69m-63 72c18-19 36-44 60-68m-60 70c17-22 35-41 62-71m-60 74c12-17 31-39 62-67m-62 67c22-25 41-53 58-73m-57 76c21-25 42-46 58-73m-59 71c10-11 24-26 58-67m-62 69c14-9 29-26 60-70m-57 74c25-29 45-56 59-74m-60 79c16-25 34-43 61-77m-61 75c11-16 26-33 61-74m-62 74c15-8 25-25 64-71m-62 72c22-26 43-48 60-71m-63 79 65-76m-61 74c16-26 37-50 58-72m-63 73c18-19 28-35 64-68m-60 67c13-18 33-35 60-68m-63 73c16-12 25-32 60-72m-59 73c21-25 39-48 64-73m-66 77c24-30 48-52 63-76m-63 73c23-23 43-46 66-72m-66 77c14-16 31-27 68-72m-67 73c19-23 36-44 64-73m-67 73c21-24 47-50 68-72m-66 74 64-75m-66 77c23-23 43-51 70-74m-65 73c11-14 29-31 64-70m-65 73c16-14 32-33 65-72m-64 74c21-27 44-53 63-76m-62 83c22-34 45-56 59-80m-62 78 65-75m-67 77c26-28 51-53 70-75m-68 73c12-12 27-31 66-75m-66 78c24-27 45-55 63-77m-64 81 66-76m-65 74c27-27 49-51 63-77m-61 81 64-75m-64 79c19-28 52-55 61-79m-62 79c22-28 43-50 65-77m-65 75c19-19 41-46 64-73m-64 75c21-27 45-54 66-76m-65 81c20-26 52-63 64-77m-67 77c26-27 49-55 67-77m-69 76c26-19 39-41 69-71m-65 74 65-77m-64 83c16-26 34-48 68-82m-70 80c12-16 26-33 66-77m-69 77c26-28 47-50 73-71m-70 74c25-28 52-62 67-76m-69 79c24-24 52-57 71-76m-69 75c18-26 42-51 65-79m-65 82c18-17 40-37 71-81m-69 81c18-24 39-49 64-77m-63 81c17-29 43-54 67-80m-67 76c18-19 36-41 64-73m-66 76c22-24 41-44 66-74m-63 74c11-19 26-32 64-73m-60 78c21-34 46-57 56-77m-59 71c23-26 48-57 62-71m-64 74c20-20 34-31 68-74m-66 73c22-22 43-45 64-71m-58 69c19-21 37-46 55-66m-58 69c22-24 43-48 59-69m-54 75c17-24 37-47 54-72m-55 68c12-21 32-39 55-67m-54 65c14-13 29-36 54-59m-54 64c15-23 32-43 56-67m-55 67c13-18 34-35 52-66m-52 67c13-18 30-37 53-64m-51 63c12-21 25-33 56-60m-58 61c14-14 27-28 53-62m-54 64c20-24 41-46 58-65m-55 64 53-61m-52 64c14-18 24-37 52-61m-49 58c16-20 36-43 50-57m-53 61c13-17 30-29 50-63m-47 60c13-15 21-28 50-55m-49 58c13-16 20-28 50-57m-49 54 46-54m-47 55c19-16 36-39 50-48m-47 50c13-16 31-37 46-51m-44 56c11-20 32-41 41-57m-43 51c19-18 37-37 47-51m-46 53c11-10 16-24 46-51m-44 53c15-18 31-35 41-51m-42 53c15-13 25-29 40-52m-38 51 41-49m-37 50c11-20 33-34 39-50m-39 48c14-15 25-32 38-45m-40 46c17-14 32-33 43-39m-40 40c6-10 20-24 35-42m-38 45c15-12 25-31 40-44m-37 41c11-10 23-23 36-40m-37 42c13-10 31-31 39-41m-34 42 35-41m-34 39c5-6 15-17 34-33m-34 38c5-13 16-21 31-43m-31 41c12-5 23-20 35-38m-36 38c15-13 24-27 36-37m-37 43c12-10 21-20 38-37m-33 34c11-11 19-25 30-37m-27 36c4-8 18-21 26-35m-28 37c7-7 14-16 28-37m-30 36c14-4 19-16 35-27m-31 31c11-15 23-28 28-33m-27 30c12-10 20-21 27-27m-30 30c10-9 21-23 30-34m-25 37c6-7 15-17 27-35m-28 34c6-11 14-19 27-30m-26 27c9-8 16-18 21-23m-22 28 24-31m-22 32c6-9 19-20 23-26m-25 27c8-7 13-17 25-28m-26 30c13-8 16-15 24-28m-22 26 26-24m-21 25 19-22m-20 24c7-11 16-21 22-28m-21 30 19-25m-21 23c10-8 16-17 24-23m-23 25c9-3 9-12 25-26m-24 27c7-8 9-13 21-25m-17 29c0-9 6-13 18-26m-18 24c4-8 11-17 16-21m-19 19c8-4 17-15 23-22m-21 25c3-3 6-10 18-20m-18 20c7-3 10-15 19-20m-17 20c4-5 6-9 16-17m-19 20c6-6 9-13 17-17m-15 16c6-5 11-9 17-19m-15 21c5-2 10-11 19-16m-20 19c7-6 11-11 15-18m-15 19c2-4 12-7 18-21m-15 20c4-7 7-9 13-17m-13 16c5-1 5-5 12-13m-11 16 14-18m-11 22c2-5 7-12 11-16m-14 14c3-4 8-12 11-14m-10 16c4-7 10-5 16-16m-17 15 15-13m-10 19c-1-8 7-12 9-15m-13 10 13-11m-14 13c2-3 8-5 13-14m-11 15c3-2 7-3 10-12m-6 18c-1-9 5-10 10-18m-13 15 11-11m-12 12c5-1 10-5 10-8m-6 9c0-3 3-6 7-11m-9 11c7-1 7-4 10-9m-9 12c2-6 8-8 8-11m-8 10 9-6m-9 8 9-8m-7 12c4-5 6-6 6-13m-6 11c3-3 6-5 8-9m-9 13c2-2 6-4 8-8m-7 7 8-9m-8 10c3-2 5-4 6-8m-5 9 7-7m-6 8c1 0 2-4 7-7m-7 8 6-6m-6 7c3 1 2-2 6-6m-4 7 4-5m-3 6 3-5m-3 5 3-4m-2 6 2-3m-3 4 3-4m-2 6 2-3m-2 3 2-3m-1 5 2-2m-2 2 2-2m-1 4 1-1m-2 1 2-1"}),React__namespace.createElement("path",{stroke:"transparent",strokeWidth:".5",d:"m272 626-11-25c-3-8-4-17-10-24-5-8-14-15-21-21s-14-14-20-17c-5-4-12-2-15-6-2-4 0-6 0-17l4-52c3-34 7-127 9-155s-1-12 3-14c3-2 12-1 19-1 8 1 22-1 26 2s-3-10-2 15c1 24 3 78 7 130l11 182m-3 0c-3-3-8-12-11-19s-3-17-8-24c-5-8-13-15-20-21l-22-20c-5-5-9-6-10-9-2-3-1 1-1-10s-1-20 1-56c1-35 4-130 7-159 2-28 4-9 8-11 5-1 13 2 19 3 7 0 17-4 21-1 3 3 0-4 1 20s1 73 5 125l14 188"})),React__namespace.createElement("path",{fill:"none",stroke:"black",strokeLinecap:"round",strokeWidth:"4",d:"m271 626-10-23c-4-8-7-18-12-26s-10-15-17-21l-25-16c-6-4-8-3-10-7-2-3-2-2-2-14l3-56 9-154c2-28-2-12 2-14 3-2 11 1 18 1 8 0 22-6 27-3 4 3-1-3 0 21a9897 9897 0 0 0 17 312m2 2-13-24c-3-8-4-18-8-26-5-8-13-15-20-21-7-7-18-13-24-17-5-4-8-1-10-4-2-4-2-6-2-18s-1-20 1-55l8-155c2-28-2-11 1-13 4-3 14-1 22-1s23-1 28 2c4 3-3-7-2 17a4634 4634 0 0 0 17 312"}),React__namespace.createElement("path",{fill:"none",stroke:i,strokeLinecap:"round",strokeWidth:"8",d:"m255 296 12 320m-15-322 21 325"}))},saveIcon=e=>React__namespace.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:e?"var(--color-accent)":"var(--icon-fill-color)",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},React__namespace.createElement("path",{d:"M19 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11l5 5v11a2 2 0 0 1-2 2z"}),React__namespace.createElement("polyline",{points:"17 21 17 13 7 13 7 21"}),React__namespace.createElement("polyline",{points:"7 3 7 8 15 8"})),penIcon=e=>{switch(e.type){case"highlighter":return React__namespace.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"var(--icon-fill-color)",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},React__namespace.createElement("path",{fill:e.strokeColor??"var(--icon-fill-color)",strokeWidth:"2",d:"m9 11-6 6v3h9l3-3",style:e.strokeColor?{filter:"var(--theme-filter)"}:{}}),React__namespace.createElement("path",{fill:"none",strokeWidth:"2",d:"m22 12-4.6 4.6a2 2 0 0 1-2.8 0l-5.2-5.2a2 2 0 0 1 0-2.8L14 4"}));case"finetip":return React__namespace.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:e.strokeColor??"var(--icon-fill-color)",stroke:e.strokeColor??"var(--icon-fill-color)",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",style:e.strokeColor?{filter:"var(--theme-filter)"}:{}},React__namespace.createElement("path",{strokeWidth:"2",d:"M17 3a2.828 2.828 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5L17 3z"}));case"fountain":return React__namespace.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"var(--icon-fill-color)",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},React__namespace.createElement("path",{fill:e.strokeColor??"var(--icon-fill-color)",d:"m12 19 7-7 3 3-7 7-3-3z"}),React__namespace.createElement("path",{fill:"none",d:"m18 13-1.5-7.5L2 2l3.5 14.5L13 18l5-5z"}),React__namespace.createElement("path",{fill:"none",d:"m2 2 7.586 7.586"}),React__namespace.createElement("circle",{fill:"none",cx:"11",cy:"11",r:"2"}));case"marker":return React__namespace.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 576 512",fill:e.strokeColor??"var(--icon-fill-color)",stroke:e.strokeColor??"var(--icon-fill-color)",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",style:e.strokeColor?{filter:"var(--theme-filter)"}:{}},React__namespace.createElement("path",{d:"M331 315l158.4-215L460.1 70.6 245 229 331 315zm-187 5l0 0V248.3c0-15.3 7.2-29.6 19.5-38.6L436.6 8.4C444 2.9 453 0 462.2 0c11.4 0 22.4 4.5 30.5 12.6l54.8 54.8c8.1 8.1 12.6 19 12.6 30.5c0 9.2-2.9 18.2-8.4 25.6L350.4 396.5c-9 12.3-23.4 19.5-38.6 19.5H240l-25.4 25.4c-12.5 12.5-32.8 12.5-45.3 0l-50.7-50.7c-12.5-12.5-12.5-32.8 0-45.3L144 320zM23 466.3l63-63 70.6 70.6-31 31c-4.5 4.5-10.6 7-17 7H40c-13.3 0-24-10.7-24-24v-4.7c0-6.4 2.5-12.5 7-17z"}));case"thick-thin":return React__namespace.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 108 106",strokeWidth:"2",fill:e.strokeColor??"var(--icon-fill-color)",stroke:e.strokeColor??"var(--icon-fill-color)",style:e.strokeColor?{filter:"var(--theme-filter)"}:{}},React__namespace.createElement("path",{d:"m-.58 95.628.22-.89q.22-.89.49-2.44.26-1.54.77-3.35t1.31-3.43q.79-1.61.2-.26-.6 1.34-.03-.14.58-1.49 1.54-2.97.96-1.49 2.54-3.18 1.59-1.68 3.46-2.96 1.86-1.27.81-.54-1.04.73.6-.46 1.64-1.19 2.8-1.81 1.16-.63.16-.08-.99.54 1.21-.5 2.2-1.03 1.11-.58-1.1.45-.03-.07 1.06-.53 2.32-.82 1.26-.3 2.91-.52 1.64-.23 3.05-.18 1.4.05 2.5.12 1.09.07 2.25.24 1.16.17 2.3.49 1.15.32 2.11.78.96.47 2.21 1.01 1.25.55 2.37 1.04t2.34.89q1.22.4 2.5.65 1.29.25 2.44.33 1.16.08 2.35.17 1.18.08 2.26-.1 1.08-.19 2-1.1.92-.91 1.25-1.93.32-1.02.38-2.15t.57.21q.51 1.34-.03-.02-.55-1.37-.96-2.83-.41-1.45.5-.67.92.79-.03-.06-.95-.85-1.52-1.8-.57-.94-1.5-1.52-.93-.57-1.94-1.22-1.01-.65-1.97-1.88-.96-1.22-1.44-2.54-.49-1.32-.65-2.57-.17-1.24-.11-2.35.06-1.11.31-2.91.24-1.79.76-2.77.51-.97 1.29-1.8.77-.84 1.64-1.55.88-.72 1.9-1.33 1.03-.61 2.43-1.15 1.41-.55 2.69-.92 1.29-.37 2.81-.68 1.53-.31 2.83-.58 1.31-.27 2.78-.47 1.47-.2 2.58-.49 1.12-.28 2.19-.58 1.08-.31 2.13-.73 1.05-.42 2.44-1.32 1.39-.9 2.68-1.85 1.3-.95 2.25-1.87.95-.91 2.06-2 1.11-1.09 1.92-1.93.82-.84 1.54-1.82.71-.98 1.4-1.88.69-.9 1.38-1.96.69-1.07 1.25-2.04.55-.97 1.21-1.94.65-.96 1.35-1.79.69-.83 1.46-1.74.77-.9 1.66-1.73.89-.84 2.72-2.31 1.84-1.48 1.84-1.47v.01l-1.1 1.03q-1.1 1.02-1.77 1.92-.68.9-1.39 1.85-.71.96-1.41 1.91-.7.96-1.19 1.92-.48.95-.95 1.92-.46.96-.9 1.95-.43.99-1.02 2.16-.59 1.17-1.17 2.15-.58.97-1.23 2.13t-1.29 2.02q-.64.86-1.3 1.73-.66.88-1.42 1.78-.75.9-1.72 2.03-.97 1.14-1.81 1.89-.85.75-1.98 1.71-1.14.96-2.05 1.61-.91.64-2.42 1.38-1.51.73-2.71 1.21t-2.49.92q-1.3.44-2.35.69-1.06.24-2.1.59-1.03.34-2.06.74-1.03.4-2.29.94-1.26.54-2.27 1.11-1.01.58-1.57 1.57-.56.99-.81 2.06-.25 1.08.56 2.02.8.94-.21-.02-1.02-.96-.01-.48 1 .49 1.87 1.25.87.77 0 0-.88-.77.46-.01 1.34.75 2.6 1.68 1.26.94 2.08 2.03.81 1.09.01.27-.8-.82.3.26 1.11 1.08 1.71 2.1.61 1.02 1.21 2.25.6 1.24.92 2.36.32 1.12-.16.13-.49-.98.02.36.51 1.35.71 2.69.2 1.34.24 2.46.03 1.12-.09 2.42-.13 1.29-.72 3.21-.6 1.92-1.4 3.49-.81 1.58-1.77 2.83-.96 1.24-2.88 2.72-1.92 1.48-2.95 1.85-1.04.36-2.47.76-1.44.41-3.33.72-1.89.32-3.37.41-1.48.09-2.63.15-1.15.05-2.74-.06-1.59-.1-2.8-.29-1.2-.19-3.2-.63-1.99-.45-3.63-.92-1.63-.48-3.28-.79-1.65-.31-2.76-.2-1.11.1-2.21.42-1.11.32.39-.29 1.49-.6-.12.21-1.61.8-.39.19 1.21-.61.29.13-.92.74-1.83 1.34-.92.61.15-.19t.3-.05q-.77.75-1.58 1.57-.81.82.01-.18.82-1 .24.23t-.72 2.72q-.15 1.48-.08 2.4.07.91-.19 2.16-.26 1.26-.81 2.41-.55 1.16-1.36 2.15t-1.84 1.75q-1.03.77-2.21 1.27t-2.44.7q-1.27.2-2.53.1-1.28-.11-2.49-.52-1.22-.41-2.3-1.1-1.08-.68-1.96-1.61-.89-.92-1.52-2.04-.64-1.11-.99-2.34-.36-1.23-.41-2.51l-.04-1.27Z"}));case"thin-thick-thin":return React__namespace.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 114 113",strokeWidth:"2",fill:e.strokeColor??"var(--icon-fill-color)",stroke:e.strokeColor??"var(--icon-fill-color)",style:e.strokeColor?{filter:"var(--theme-filter)"}:{}},React__namespace.createElement("path",{d:"m10 103.405.13-1.22q.14-1.22 1.3-3.16 1.15-1.94 2.74-3.46 1.59-1.53 3.35-2.72 1.77-1.2 4-1.95 2.23-.76 4.45-1t4.86-.4q2.64-.15 5.14-.34 2.51-.19 4.85-.94 2.35-.75 4.55-1.71 2.21-.97 4.16-2.26 1.95-1.3 4.03-2.97 2.07-1.67 3.85-3.05 1.78-1.37 3.72-2.48 1.94-1.11 3.3-2.99 1.36-1.89 2.58-3.74 1.22-1.85-.63-3.42-1.85-1.57-3.82-2.86-1.97-1.3-4.11-2.08-2.15-.78-4.21-1.6-2.06-.81-4.02-1.96-1.96-1.14-3.71-2.48-1.74-1.33-3.37-2.77-1.63-1.43-3.23-3.62-1.6-2.18-2.23-4.64-.62-2.46-.36-4.96.27-2.49 1.19-4.46.91-1.97 2.42-3.7 1.5-1.73 3.5-3.15t4.11-2.28q2.1-.86 4.33-1.44 2.24-.58 4.92-.84 2.68-.26 4.83-.19t4.69.35q2.53.28 4.75.66 2.23.38 4.48.2 2.26-.19 4.43-1.3 2.17-1.12 4.2-2.36 2.04-1.24 3.93-2.43 1.9-1.19 3.84-2.14 1.95-.95 4.04-1.78 2.09-.83 4.56-2.28 2.46-1.46 2.46-1.45h.01q.01 0-1.38 1.3-1.38 1.29-3.08 2.59-1.7 1.3-3.5 2.5t-3.42 2.65q-1.62 1.45-3.18 3-1.57 1.56-3.37 3.13-1.8 1.57-3.6 2.91-1.81 1.33-3.92 2.12t-4.24.92q-2.13.14-4.31.26-2.18.12-4.5.39t-4.56.88q-2.25.61-4.24 1.6-1.99 1-3.83 2.29-1.83 1.29.18 2.44 2.01 1.15 4.2 1.92 2.2.78 4.34 1 2.15.22 4.4.69 2.25.46 4.34 1.16 2.08.71 4.33 1.91 2.25 1.21 4.11 2.73 1.87 1.52 3.68 4.03 1.82 2.5 2.74 5 .93 2.5 1.18 5.03.26 2.53-.04 4.81t-1.4 4.85q-1.09 2.58-2.4 4.26-1.3 1.68-3.1 3.44t-4.02 3.62q-2.23 1.85-4.32 3.07-2.08 1.23-4.34 1.99-2.25.76-4.46 1.96t-4.37 2.14q-2.15.93-4.22 1.81t-4.36 1.35q-2.3.46-4.52.82-2.22.35-4.76.38-2.54.04-4.87-.28t-4.67-.67q-2.34-.35-4.72-.54-2.39-.19-4.64.37-2.25.56-4.16 1.66-1.91 1.11-3.52 2.71-1.61 1.6-2.55 2.39l-.94.78Z"}));default:return React__namespace.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 512 512",fill:e.strokeColor??"var(--icon-fill-color)",stroke:e.strokeColor??"var(--icon-fill-color)",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",style:e.strokeColor?{filter:"var(--theme-filter)"}:{}},React__namespace.createElement("path",{d:"M453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-52.1 52.1 0 0-1-1 0 0-16-16-96-96-17-17 52.1-52.1c25-25 65.5-25 90.5 0zM241 114.9c-9.4-9.4-24.6-9.4-33.9 0L105 217c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9L173.1 81c28.1-28.1 73.7-28.1 101.8 0L288 94.1l17 17 96 96 16 16 1 1-17 17L229.5 412.5c-48 48-109.2 80.8-175.8 94.1l-25 5c-7.9 1.6-16-.9-21.7-6.6s-8.1-13.8-6.6-21.7l5-25c13.3-66.6 46.1-127.8 94.1-175.8L254.1 128 241 114.9z"}))}},stringToSVG=e=>(e.match('class="skip"')||(e=e.replace(/stroke\s*=\s*['"][^"']*['"]/g,"").replace(/[^-]width\s*=\s*['"][^"']*['"]/g,"").replace(/[^-]height\s*=\s*['"][^"']*['"]/g,"").replace("React__namespace.createElement("div",{className:"welcome-screen-center__logo virgil welcome-screen-decor"},e," ");var top="top",bottom="bottom",right="right",left="left",auto="auto",basePlacements=[top,bottom,right,left],start="start",end="end",clippingParents="clippingParents",viewport="viewport",popper="popper",reference="reference",variationPlacements=basePlacements.reduce((function(e,t){return e.concat([t+"-"+start,t+"-"+end])}),[]),placements=[].concat(basePlacements,[auto]).reduce((function(e,t){return e.concat([t,t+"-"+start,t+"-"+end])}),[]),beforeRead="beforeRead",read="read",afterRead="afterRead",beforeMain="beforeMain",main="main",afterMain="afterMain",beforeWrite="beforeWrite",write="write",afterWrite="afterWrite",modifierPhases=[beforeRead,read,afterRead,beforeMain,main,afterMain,beforeWrite,write,afterWrite];function getNodeName(e){return e?(e.nodeName||"").toLowerCase():null}function getWindow(e){if(null==e)return window;if("[object Window]"!==e.toString()){var t=e.ownerDocument;return t&&t.defaultView||window}return e}function isElement(e){return e instanceof getWindow(e).Element||e instanceof Element}function isHTMLElement$1(e){return e instanceof getWindow(e).HTMLElement||e instanceof HTMLElement}function isShadowRoot(e){return"undefined"!=typeof ShadowRoot&&(e instanceof getWindow(e).ShadowRoot||e instanceof ShadowRoot)}function applyStyles(e){var t=e.state;Object.keys(t.elements).forEach((function(e){var a=t.styles[e]||{},i=t.attributes[e]||{},n=t.elements[e];isHTMLElement$1(n)&&getNodeName(n)&&(Object.assign(n.style,a),Object.keys(i).forEach((function(e){var t=i[e];!1===t?n.removeAttribute(e):n.setAttribute(e,!0===t?"":t)})))}))}function effect$2(e){var t=e.state,a={popper:{position:t.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(t.elements.popper.style,a.popper),t.styles=a,t.elements.arrow&&Object.assign(t.elements.arrow.style,a.arrow),function(){Object.keys(t.elements).forEach((function(e){var i=t.elements[e],n=t.attributes[e]||{},r=Object.keys(t.styles.hasOwnProperty(e)?t.styles[e]:a[e]).reduce((function(e,t){return e[t]="",e}),{});isHTMLElement$1(i)&&getNodeName(i)&&(Object.assign(i.style,r),Object.keys(n).forEach((function(e){i.removeAttribute(e)})))}))}}var applyStyles$1={name:"applyStyles",enabled:!0,phase:"write",fn:applyStyles,effect:effect$2,requires:["computeStyles"]};function getBasePlacement(e){return e.split("-")[0]}var max=Math.max,min=Math.min,round=Math.round;function getUAString(){var e=navigator.userAgentData;return null!=e&&e.brands&&Array.isArray(e.brands)?e.brands.map((function(e){return e.brand+"/"+e.version})).join(" "):navigator.userAgent}function isLayoutViewport(){return!/^((?!chrome|android).)*safari/i.test(getUAString())}function getBoundingClientRect(e,t,a){void 0===t&&(t=!1),void 0===a&&(a=!1);var i=e.getBoundingClientRect(),n=1,r=1;t&&isHTMLElement$1(e)&&(n=e.offsetWidth>0&&round(i.width)/e.offsetWidth||1,r=e.offsetHeight>0&&round(i.height)/e.offsetHeight||1);var s=(isElement(e)?getWindow(e):window).visualViewport,o=!isLayoutViewport()&&a,l=(i.left+(o&&s?s.offsetLeft:0))/n,c=(i.top+(o&&s?s.offsetTop:0))/r,d=i.width/n,h=i.height/r;return{width:d,height:h,top:c,right:l+d,bottom:c+h,left:l,x:l,y:c}}function getLayoutRect(e){var t=getBoundingClientRect(e),a=e.offsetWidth,i=e.offsetHeight;return Math.abs(t.width-a)<=1&&(a=t.width),Math.abs(t.height-i)<=1&&(i=t.height),{x:e.offsetLeft,y:e.offsetTop,width:a,height:i}}function contains(e,t){var a=t.getRootNode&&t.getRootNode();if(e.contains(t))return!0;if(a&&isShadowRoot(a)){var i=t;do{if(i&&e.isSameNode(i))return!0;i=i.parentNode||i.host}while(i)}return!1}function getComputedStyle$1(e){return getWindow(e).getComputedStyle(e)}function isTableElement(e){return["table","td","th"].indexOf(getNodeName(e))>=0}function getDocumentElement(e){return((isElement(e)?e.ownerDocument:e.document)||window.document).documentElement}function getParentNode(e){return"html"===getNodeName(e)?e:e.assignedSlot||e.parentNode||(isShadowRoot(e)?e.host:null)||getDocumentElement(e)}function getTrueOffsetParent(e){return isHTMLElement$1(e)&&"fixed"!==getComputedStyle$1(e).position?e.offsetParent:null}function getContainingBlock(e){var t=/firefox/i.test(getUAString());if(/Trident/i.test(getUAString())&&isHTMLElement$1(e)&&"fixed"===getComputedStyle$1(e).position)return null;var a=getParentNode(e);for(isShadowRoot(a)&&(a=a.host);isHTMLElement$1(a)&&["html","body"].indexOf(getNodeName(a))<0;){var i=getComputedStyle$1(a);if("none"!==i.transform||"none"!==i.perspective||"paint"===i.contain||-1!==["transform","perspective"].indexOf(i.willChange)||t&&"filter"===i.willChange||t&&i.filter&&"none"!==i.filter)return a;a=a.parentNode}return null}function getOffsetParent(e){for(var t=getWindow(e),a=getTrueOffsetParent(e);a&&isTableElement(a)&&"static"===getComputedStyle$1(a).position;)a=getTrueOffsetParent(a);return a&&("html"===getNodeName(a)||"body"===getNodeName(a)&&"static"===getComputedStyle$1(a).position)?t:a||getContainingBlock(e)||t}function getMainAxisFromPlacement(e){return["top","bottom"].indexOf(e)>=0?"x":"y"}function within(e,t,a){return max(e,min(t,a))}function withinMaxClamp(e,t,a){var i=within(e,t,a);return i>a?a:i}function getFreshSideObject(){return{top:0,right:0,bottom:0,left:0}}function mergePaddingObject(e){return Object.assign({},getFreshSideObject(),e)}function expandToHashMap(e,t){return t.reduce((function(t,a){return t[a]=e,t}),{})}var toPaddingObject=function(e,t){return mergePaddingObject("number"!=typeof(e="function"==typeof e?e(Object.assign({},t.rects,{placement:t.placement})):e)?e:expandToHashMap(e,basePlacements))};function arrow(e){var t,a=e.state,i=e.name,n=e.options,r=a.elements.arrow,s=a.modifiersData.popperOffsets,o=getBasePlacement(a.placement),l=getMainAxisFromPlacement(o),c=[left,right].indexOf(o)>=0?"height":"width";if(r&&s){var d=toPaddingObject(n.padding,a),h=getLayoutRect(r),p="y"===l?top:left,u="y"===l?bottom:right,m=a.rects.reference[c]+a.rects.reference[l]-s[l]-a.rects.popper[c],f=s[l]-a.rects.reference[l],g=getOffsetParent(r),U=g?"y"===l?g.clientHeight||0:g.clientWidth||0:0,b=m/2-f/2,E=d[p],w=U-h[c]-d[u],y=U/2-h[c]/2+b,v=within(E,y,w),T=l;a.modifiersData[i]=((t={})[T]=v,t.centerOffset=v-y,t)}}function effect$1(e){var t=e.state,a=e.options.element,i=void 0===a?"[data-popper-arrow]":a;null!=i&&("string"!=typeof i||(i=t.elements.popper.querySelector(i)))&&contains(t.elements.popper,i)&&(t.elements.arrow=i)}var arrow$1={name:"arrow",enabled:!0,phase:"main",fn:arrow,effect:effect$1,requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function getVariation(e){return e.split("-")[1]}var unsetSides={top:"auto",right:"auto",bottom:"auto",left:"auto"};function roundOffsetsByDPR(e,t){var a=e.x,i=e.y,n=t.devicePixelRatio||1;return{x:round(a*n)/n||0,y:round(i*n)/n||0}}function mapToStyles(e){var t,a=e.popper,i=e.popperRect,n=e.placement,r=e.variation,s=e.offsets,o=e.position,l=e.gpuAcceleration,c=e.adaptive,d=e.roundOffsets,h=e.isFixed,p=s.x,u=void 0===p?0:p,m=s.y,f=void 0===m?0:m,g="function"==typeof d?d({x:u,y:f}):{x:u,y:f};u=g.x,f=g.y;var U=s.hasOwnProperty("x"),b=s.hasOwnProperty("y"),E=left,w=top,y=window;if(c){var v=getOffsetParent(a),T="clientHeight",S="clientWidth";v===getWindow(a)&&"static"!==getComputedStyle$1(v=getDocumentElement(a)).position&&"absolute"===o&&(T="scrollHeight",S="scrollWidth"),(n===top||(n===left||n===right)&&r===end)&&(w=bottom,f-=(h&&v===y&&y.visualViewport?y.visualViewport.height:v[T])-i.height,f*=l?1:-1),n!==left&&(n!==top&&n!==bottom||r!==end)||(E=right,u-=(h&&v===y&&y.visualViewport?y.visualViewport.width:v[S])-i.width,u*=l?1:-1)}var _,x=Object.assign({position:o},c&&unsetSides),C=!0===d?roundOffsetsByDPR({x:u,y:f},getWindow(a)):{x:u,y:f};return u=C.x,f=C.y,l?Object.assign({},x,((_={})[w]=b?"0":"",_[E]=U?"0":"",_.transform=(y.devicePixelRatio||1)<=1?"translate("+u+"px, "+f+"px)":"translate3d("+u+"px, "+f+"px, 0)",_)):Object.assign({},x,((t={})[w]=b?f+"px":"",t[E]=U?u+"px":"",t.transform="",t))}function computeStyles(e){var t=e.state,a=e.options,i=a.gpuAcceleration,n=void 0===i||i,r=a.adaptive,s=void 0===r||r,o=a.roundOffsets,l=void 0===o||o,c={placement:getBasePlacement(t.placement),variation:getVariation(t.placement),popper:t.elements.popper,popperRect:t.rects.popper,gpuAcceleration:n,isFixed:"fixed"===t.options.strategy};null!=t.modifiersData.popperOffsets&&(t.styles.popper=Object.assign({},t.styles.popper,mapToStyles(Object.assign({},c,{offsets:t.modifiersData.popperOffsets,position:t.options.strategy,adaptive:s,roundOffsets:l})))),null!=t.modifiersData.arrow&&(t.styles.arrow=Object.assign({},t.styles.arrow,mapToStyles(Object.assign({},c,{offsets:t.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:l})))),t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-placement":t.placement})}var computeStyles$1={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:computeStyles,data:{}},passive={passive:!0};function effect(e){var t=e.state,a=e.instance,i=e.options,n=i.scroll,r=void 0===n||n,s=i.resize,o=void 0===s||s,l=getWindow(t.elements.popper),c=[].concat(t.scrollParents.reference,t.scrollParents.popper);return r&&c.forEach((function(e){e.addEventListener("scroll",a.update,passive)})),o&&l.addEventListener("resize",a.update,passive),function(){r&&c.forEach((function(e){e.removeEventListener("scroll",a.update,passive)})),o&&l.removeEventListener("resize",a.update,passive)}}var eventListeners={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:effect,data:{}},hash$1={left:"right",right:"left",bottom:"top",top:"bottom"};function getOppositePlacement(e){return e.replace(/left|right|bottom|top/g,(function(e){return hash$1[e]}))}var hash={start:"end",end:"start"};function getOppositeVariationPlacement(e){return e.replace(/start|end/g,(function(e){return hash[e]}))}function getWindowScroll(e){var t=getWindow(e);return{scrollLeft:t.pageXOffset,scrollTop:t.pageYOffset}}function getWindowScrollBarX(e){return getBoundingClientRect(getDocumentElement(e)).left+getWindowScroll(e).scrollLeft}function getViewportRect(e,t){var a=getWindow(e),i=getDocumentElement(e),n=a.visualViewport,r=i.clientWidth,s=i.clientHeight,o=0,l=0;if(n){r=n.width,s=n.height;var c=isLayoutViewport();(c||!c&&"fixed"===t)&&(o=n.offsetLeft,l=n.offsetTop)}return{width:r,height:s,x:o+getWindowScrollBarX(e),y:l}}function getDocumentRect(e){var t,a=getDocumentElement(e),i=getWindowScroll(e),n=null==(t=e.ownerDocument)?void 0:t.body,r=max(a.scrollWidth,a.clientWidth,n?n.scrollWidth:0,n?n.clientWidth:0),s=max(a.scrollHeight,a.clientHeight,n?n.scrollHeight:0,n?n.clientHeight:0),o=-i.scrollLeft+getWindowScrollBarX(e),l=-i.scrollTop;return"rtl"===getComputedStyle$1(n||a).direction&&(o+=max(a.clientWidth,n?n.clientWidth:0)-r),{width:r,height:s,x:o,y:l}}function isScrollParent(e){var t=getComputedStyle$1(e),a=t.overflow,i=t.overflowX,n=t.overflowY;return/auto|scroll|overlay|hidden/.test(a+n+i)}function getScrollParent(e){return["html","body","#document"].indexOf(getNodeName(e))>=0?e.ownerDocument.body:isHTMLElement$1(e)&&isScrollParent(e)?e:getScrollParent(getParentNode(e))}function listScrollParents(e,t){var a;void 0===t&&(t=[]);var i=getScrollParent(e),n=i===(null==(a=e.ownerDocument)?void 0:a.body),r=getWindow(i),s=n?[r].concat(r.visualViewport||[],isScrollParent(i)?i:[]):i,o=t.concat(s);return n?o:o.concat(listScrollParents(getParentNode(s)))}function rectToClientRect(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}function getInnerBoundingClientRect(e,t){var a=getBoundingClientRect(e,!1,"fixed"===t);return a.top=a.top+e.clientTop,a.left=a.left+e.clientLeft,a.bottom=a.top+e.clientHeight,a.right=a.left+e.clientWidth,a.width=e.clientWidth,a.height=e.clientHeight,a.x=a.left,a.y=a.top,a}function getClientRectFromMixedType(e,t,a){return t===viewport?rectToClientRect(getViewportRect(e,a)):isElement(t)?getInnerBoundingClientRect(t,a):rectToClientRect(getDocumentRect(getDocumentElement(e)))}function getClippingParents(e){var t=listScrollParents(getParentNode(e)),a=["absolute","fixed"].indexOf(getComputedStyle$1(e).position)>=0&&isHTMLElement$1(e)?getOffsetParent(e):e;return isElement(a)?t.filter((function(e){return isElement(e)&&contains(e,a)&&"body"!==getNodeName(e)})):[]}function getClippingRect(e,t,a,i){var n="clippingParents"===t?getClippingParents(e):[].concat(t),r=[].concat(n,[a]),s=r[0],o=r.reduce((function(t,a){var n=getClientRectFromMixedType(e,a,i);return t.top=max(n.top,t.top),t.right=min(n.right,t.right),t.bottom=min(n.bottom,t.bottom),t.left=max(n.left,t.left),t}),getClientRectFromMixedType(e,s,i));return o.width=o.right-o.left,o.height=o.bottom-o.top,o.x=o.left,o.y=o.top,o}function computeOffsets(e){var t,a=e.reference,i=e.element,n=e.placement,r=n?getBasePlacement(n):null,s=n?getVariation(n):null,o=a.x+a.width/2-i.width/2,l=a.y+a.height/2-i.height/2;switch(r){case top:t={x:o,y:a.y-i.height};break;case bottom:t={x:o,y:a.y+a.height};break;case right:t={x:a.x+a.width,y:l};break;case left:t={x:a.x-i.width,y:l};break;default:t={x:a.x,y:a.y}}var c=r?getMainAxisFromPlacement(r):null;if(null!=c){var d="y"===c?"height":"width";switch(s){case start:t[c]=t[c]-(a[d]/2-i[d]/2);break;case end:t[c]=t[c]+(a[d]/2-i[d]/2)}}return t}function detectOverflow(e,t){void 0===t&&(t={});var a=t,i=a.placement,n=void 0===i?e.placement:i,r=a.strategy,s=void 0===r?e.strategy:r,o=a.boundary,l=void 0===o?clippingParents:o,c=a.rootBoundary,d=void 0===c?viewport:c,h=a.elementContext,p=void 0===h?popper:h,u=a.altBoundary,m=void 0!==u&&u,f=a.padding,g=void 0===f?0:f,U=mergePaddingObject("number"!=typeof g?g:expandToHashMap(g,basePlacements)),b=p===popper?reference:popper,E=e.rects.popper,w=e.elements[m?b:p],y=getClippingRect(isElement(w)?w:w.contextElement||getDocumentElement(e.elements.popper),l,d,s),v=getBoundingClientRect(e.elements.reference),T=computeOffsets({reference:v,element:E,strategy:"absolute",placement:n}),S=rectToClientRect(Object.assign({},E,T)),_=p===popper?S:v,x={top:y.top-_.top+U.top,bottom:_.bottom-y.bottom+U.bottom,left:y.left-_.left+U.left,right:_.right-y.right+U.right},C=e.modifiersData.offset;if(p===popper&&C){var I=C[n];Object.keys(x).forEach((function(e){var t=[right,bottom].indexOf(e)>=0?1:-1,a=[top,bottom].indexOf(e)>=0?"y":"x";x[e]+=I[a]*t}))}return x}function computeAutoPlacement(e,t){void 0===t&&(t={});var a=t,i=a.placement,n=a.boundary,r=a.rootBoundary,s=a.padding,o=a.flipVariations,l=a.allowedAutoPlacements,c=void 0===l?placements:l,d=getVariation(i),h=d?o?variationPlacements:variationPlacements.filter((function(e){return getVariation(e)===d})):basePlacements,p=h.filter((function(e){return c.indexOf(e)>=0}));0===p.length&&(p=h);var u=p.reduce((function(t,a){return t[a]=detectOverflow(e,{placement:a,boundary:n,rootBoundary:r,padding:s})[getBasePlacement(a)],t}),{});return Object.keys(u).sort((function(e,t){return u[e]-u[t]}))}function getExpandedFallbackPlacements(e){if(getBasePlacement(e)===auto)return[];var t=getOppositePlacement(e);return[getOppositeVariationPlacement(e),t,getOppositeVariationPlacement(t)]}function flip(e){var t=e.state,a=e.options,i=e.name;if(!t.modifiersData[i]._skip){for(var n=a.mainAxis,r=void 0===n||n,s=a.altAxis,o=void 0===s||s,l=a.fallbackPlacements,c=a.padding,d=a.boundary,h=a.rootBoundary,p=a.altBoundary,u=a.flipVariations,m=void 0===u||u,f=a.allowedAutoPlacements,g=t.options.placement,U=getBasePlacement(g),b=l||(U!==g&&m?getExpandedFallbackPlacements(g):[getOppositePlacement(g)]),E=[g].concat(b).reduce((function(e,a){return e.concat(getBasePlacement(a)===auto?computeAutoPlacement(t,{placement:a,boundary:d,rootBoundary:h,padding:c,flipVariations:m,allowedAutoPlacements:f}):a)}),[]),w=t.rects.reference,y=t.rects.popper,v=new Map,T=!0,S=E[0],_=0;_=0,k=A?"width":"height",O=detectOverflow(t,{placement:x,boundary:d,rootBoundary:h,altBoundary:p,padding:c}),R=A?I?right:left:I?bottom:top;w[k]>y[k]&&(R=getOppositePlacement(R));var M=getOppositePlacement(R),L=[];if(r&&L.push(O[C]<=0),o&&L.push(O[R]<=0,O[M]<=0),L.every((function(e){return e}))){S=x,T=!1;break}v.set(x,L)}if(T)for(var D=function(e){var t=E.find((function(t){var a=v.get(t);if(a)return a.slice(0,e).every((function(e){return e}))}));if(t)return S=t,"break"},P=m?3:1;P>0&&"break"!==D(P);P--);t.placement!==S&&(t.modifiersData[i]._skip=!0,t.placement=S,t.reset=!0)}}var flip$1={name:"flip",enabled:!0,phase:"main",fn:flip,requiresIfExists:["offset"],data:{_skip:!1}};function getSideOffsets(e,t,a){return void 0===a&&(a={x:0,y:0}),{top:e.top-t.height-a.y,right:e.right-t.width+a.x,bottom:e.bottom-t.height+a.y,left:e.left-t.width-a.x}}function isAnySideFullyClipped(e){return[top,right,bottom,left].some((function(t){return e[t]>=0}))}function hide(e){var t=e.state,a=e.name,i=t.rects.reference,n=t.rects.popper,r=t.modifiersData.preventOverflow,s=detectOverflow(t,{elementContext:"reference"}),o=detectOverflow(t,{altBoundary:!0}),l=getSideOffsets(s,i),c=getSideOffsets(o,n,r),d=isAnySideFullyClipped(l),h=isAnySideFullyClipped(c);t.modifiersData[a]={referenceClippingOffsets:l,popperEscapeOffsets:c,isReferenceHidden:d,hasPopperEscaped:h},t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-reference-hidden":d,"data-popper-escaped":h})}var hide$1={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:hide};function distanceAndSkiddingToXY(e,t,a){var i=getBasePlacement(e),n=[left,top].indexOf(i)>=0?-1:1,r="function"==typeof a?a(Object.assign({},t,{placement:e})):a,s=r[0],o=r[1];return s=s||0,o=(o||0)*n,[left,right].indexOf(i)>=0?{x:o,y:s}:{x:s,y:o}}function offset(e){var t=e.state,a=e.options,i=e.name,n=a.offset,r=void 0===n?[0,0]:n,s=placements.reduce((function(e,a){return e[a]=distanceAndSkiddingToXY(a,t.rects,r),e}),{}),o=s[t.placement],l=o.x,c=o.y;null!=t.modifiersData.popperOffsets&&(t.modifiersData.popperOffsets.x+=l,t.modifiersData.popperOffsets.y+=c),t.modifiersData[i]=s}var offset$1={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:offset};function popperOffsets(e){var t=e.state,a=e.name;t.modifiersData[a]=computeOffsets({reference:t.rects.reference,element:t.rects.popper,strategy:"absolute",placement:t.placement})}var popperOffsets$1={name:"popperOffsets",enabled:!0,phase:"read",fn:popperOffsets,data:{}};function getAltAxis(e){return"x"===e?"y":"x"}function preventOverflow(e){var t=e.state,a=e.options,i=e.name,n=a.mainAxis,r=void 0===n||n,s=a.altAxis,o=void 0!==s&&s,l=a.boundary,c=a.rootBoundary,d=a.altBoundary,h=a.padding,p=a.tether,u=void 0===p||p,m=a.tetherOffset,f=void 0===m?0:m,g=detectOverflow(t,{boundary:l,rootBoundary:c,padding:h,altBoundary:d}),U=getBasePlacement(t.placement),b=getVariation(t.placement),E=!b,w=getMainAxisFromPlacement(U),y=getAltAxis(w),v=t.modifiersData.popperOffsets,T=t.rects.reference,S=t.rects.popper,_="function"==typeof f?f(Object.assign({},t.rects,{placement:t.placement})):f,x="number"==typeof _?{mainAxis:_,altAxis:_}:Object.assign({mainAxis:0,altAxis:0},_),C=t.modifiersData.offset?t.modifiersData.offset[t.placement]:null,I={x:0,y:0};if(v){if(r){var A,k="y"===w?top:left,O="y"===w?bottom:right,R="y"===w?"height":"width",M=v[w],L=M+g[k],D=M-g[O],P=u?-S[R]/2:0,N=b===start?T[R]:S[R],F=b===start?-S[R]:-T[R],V=t.elements.arrow,G=u&&V?getLayoutRect(V):{width:0,height:0},B=t.modifiersData["arrow#persistent"]?t.modifiersData["arrow#persistent"].padding:getFreshSideObject(),$=B[k],W=B[O],H=within(0,T[R],G[R]),z=E?T[R]/2-P-H-$-x.mainAxis:N-H-$-x.mainAxis,X=E?-T[R]/2+P+H+W+x.mainAxis:F+H+W+x.mainAxis,Y=t.elements.arrow&&getOffsetParent(t.elements.arrow),K=Y?"y"===w?Y.clientTop||0:Y.clientLeft||0:0,j=null!=(A=null==C?void 0:C[w])?A:0,Z=M+X-j,q=within(u?min(L,M+z-j-K):L,M,u?max(D,Z):D);v[w]=q,I[w]=q-M}if(o){var J,Q="x"===w?top:left,ee="x"===w?bottom:right,te=v[y],ae="y"===y?"height":"width",ie=te+g[Q],ne=te-g[ee],re=-1!==[top,left].indexOf(U),se=null!=(J=null==C?void 0:C[y])?J:0,oe=re?ie:te-T[ae]-S[ae]-se+x.altAxis,le=re?te+T[ae]+S[ae]-se-x.altAxis:ne,ce=u&&re?withinMaxClamp(oe,te,le):within(u?oe:ie,te,u?le:ne);v[y]=ce,I[y]=ce-te}t.modifiersData[i]=I}}var preventOverflow$1={name:"preventOverflow",enabled:!0,phase:"main",fn:preventOverflow,requiresIfExists:["offset"]};function getHTMLElementScroll(e){return{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}}function getNodeScroll(e){return e!==getWindow(e)&&isHTMLElement$1(e)?getHTMLElementScroll(e):getWindowScroll(e)}function isElementScaled(e){var t=e.getBoundingClientRect(),a=round(t.width)/e.offsetWidth||1,i=round(t.height)/e.offsetHeight||1;return 1!==a||1!==i}function getCompositeRect(e,t,a){void 0===a&&(a=!1);var i=isHTMLElement$1(t),n=isHTMLElement$1(t)&&isElementScaled(t),r=getDocumentElement(t),s=getBoundingClientRect(e,n,a),o={scrollLeft:0,scrollTop:0},l={x:0,y:0};return(i||!i&&!a)&&(("body"!==getNodeName(t)||isScrollParent(r))&&(o=getNodeScroll(t)),isHTMLElement$1(t)?((l=getBoundingClientRect(t,!0)).x+=t.clientLeft,l.y+=t.clientTop):r&&(l.x=getWindowScrollBarX(r))),{x:s.left+o.scrollLeft-l.x,y:s.top+o.scrollTop-l.y,width:s.width,height:s.height}}function order(e){var t=new Map,a=new Set,i=[];function n(e){a.add(e.name),[].concat(e.requires||[],e.requiresIfExists||[]).forEach((function(e){if(!a.has(e)){var i=t.get(e);i&&n(i)}})),i.push(e)}return e.forEach((function(e){t.set(e.name,e)})),e.forEach((function(e){a.has(e.name)||n(e)})),i}function orderModifiers(e){var t=order(e);return modifierPhases.reduce((function(e,a){return e.concat(t.filter((function(e){return e.phase===a})))}),[])}function debounce(e){var t;return function(){return t||(t=new Promise((function(a){Promise.resolve().then((function(){t=void 0,a(e())}))}))),t}}function mergeByName(e){var t=e.reduce((function(e,t){var a=e[t.name];return e[t.name]=a?Object.assign({},a,t,{options:Object.assign({},a.options,t.options),data:Object.assign({},a.data,t.data)}):t,e}),{});return Object.keys(t).map((function(e){return t[e]}))}var DEFAULT_OPTIONS={placement:"bottom",modifiers:[],strategy:"absolute"};function areValidElements(){for(var e=arguments.length,t=new Array(e),a=0;a(this.setSelectedItem(this.selectedItem-1,!0),!1))),a.register([],"ArrowDown",(()=>(this.setSelectedItem(this.selectedItem+1,!0),!1))),a.register([],"Enter",(e=>(this.useSelectedItem(e),!1))),a.register([],"Tab",(e=>(this.chooseSuggestion(e),!1)))}chooseSuggestion(e){if(!this.items||!this.items.length)return;const t=this.items[this.selectedItem];t&&this.owner.onChooseSuggestion(t,e)}onSuggestionClick(e,t){if(e.preventDefault(),!this.suggestions||!this.suggestions.length)return;const a=this.suggestions.indexOf(t);this.setSelectedItem(a,!1),this.useSelectedItem(e)}onSuggestionMouseover(e,t){if(!this.suggestions||!this.suggestions.length)return;const a=this.suggestions.indexOf(t);this.setSelectedItem(a,!1)}empty(){this.containerEl.empty()}setSuggestions(e){this.containerEl.empty();const t=[];e.forEach((e=>{const a=this.containerEl.createDiv("suggestion-item");this.owner.renderSuggestion(e,a),t.push(a)})),this.items=e,this.suggestions=t,this.setSelectedItem(0,!1)}useSelectedItem(e){if(!this.items||!this.items.length)return;const t=this.items[this.selectedItem];t&&this.owner.selectSuggestion(t,e)}wrap(e,t){return(e%t+t)%t}setSelectedItem(e,t){const a=this.wrap(e,this.suggestions.length),i=this.suggestions[this.selectedItem],n=this.suggestions[a];i&&i.removeClass("is-selected"),n&&n.addClass("is-selected"),this.selectedItem=a,t&&n.scrollIntoView(!1)}}class SuggestionModal extends obsidian_module.FuzzySuggestModal{items=[];suggestions;popper;scope=new obsidian_module.Scope(this.app.scope);suggester;suggestEl;promptEl;emptyStateText="No match found";limit=100;shouldNotOpen;constructor(e,t,a){super(e),this.inputEl=t,this.items=a,this.suggestEl=createDiv("suggestion-container"),this.contentEl=this.suggestEl.createDiv("suggestion"),this.suggester=new Suggester(this,this.contentEl,this.scope),this.scope.register([],"Escape",this.onEscape.bind(this)),this.inputEl.addEventListener("input",this.onInputChanged.bind(this)),this.inputEl.addEventListener("focus",this.onFocus.bind(this)),this.inputEl.addEventListener("blur",this.close.bind(this)),this.suggestEl.on("mousedown",".suggestion-container",(e=>{e.preventDefault()}))}empty(){this.suggester.empty()}onInputChanged(){if(this.shouldNotOpen)return;const e=this.modifyInput(this.inputEl.value),t=this.getSuggestions(e);t.length>0?this.suggester.setSuggestions(t.slice(0,this.limit)):this.onNoSuggestion(),this.open()}onFocus(){this.shouldNotOpen=!1,this.onInputChanged()}modifyInput(e){return e}onNoSuggestion(){this.empty(),this.renderSuggestion(null,this.contentEl.createDiv("suggestion-item"))}open(){this.app.keymap.pushScope(this.scope),this.inputEl.ownerDocument.body.appendChild(this.suggestEl),this.popper=new WeakRef(createPopper(this.inputEl,this.suggestEl,{placement:"bottom-start",modifiers:[{name:"offset",options:{offset:[0,10]}},{name:"flip",options:{fallbackPlacements:["top"]}}]}))}onEscape(){this.close(),this.shouldNotOpen=!0}close(){this.app.keymap.popScope(this.scope),this.suggester.setSuggestions([]),this.popper?.deref()&&this.popper.deref().destroy(),this.inputEl.removeEventListener("input",this.onInputChanged.bind(this)),this.inputEl.removeEventListener("focus",this.onFocus.bind(this)),this.inputEl.removeEventListener("blur",this.close.bind(this)),this.suggestEl.detach()}createPrompt(e){this.promptEl||(this.promptEl=this.suggestEl.createDiv("prompt-instructions"));const t=this.promptEl.createDiv("prompt-instruction");for(const a of e)t.appendChild(a)}}class FileSuggestionModal extends SuggestionModal{plugin;text;cache;filesAndAliases;file;constructor(e,t,a,i){const n=[];for(const t of a){const a=t.path;n.push({file:t,path:a,alias:""});const i=e.metadataCache.getFileCache(t),r=i?.frontmatter?.aliases||[];for(const e of r)e&&n.push({file:t,path:a,alias:e})}super(e,t.inputEl,n),this.plugin=i,this.limit=20,this.filesAndAliases=n,this.text=t,this.suggestEl.style.maxWidth="100%",this.suggestEl.style.width=`${t.inputEl.clientWidth}px`,this.inputEl.addEventListener("input",(()=>this.getFile())),this.setPlaceholder(t$d("SELECT_FILE_TO_INSERT")),this.emptyStateText=t$d("NO_MATCH")}getFile(){const e=this.inputEl.value,t=this.app.vault.getAbstractFileByPath(e);t!==this.file&&t instanceof obsidian_module.TFile&&(this.file=t,this.onInputChanged())}getSelectedItem(){return this.file}getItemText(e){return`${e.file.path}${e.alias?`|${e.alias}`:""}`}onChooseItem(e){this.file=e.file,this.text.setValue(this.getItemText(e)),this.text.onChanged()}selectSuggestion({item:e}){this.file=e.file,this.text.setValue(this.getItemText(e)),this.onClose(),this.text.onChanged(),this.close()}renderSuggestion(e,t){const{item:a,match:i}=e||{};t.addClass("mod-complex");const n=t.createDiv("suggestion-content"),r=t.createDiv("suggestion-aux"),s=n.createDiv("suggestion-title"),o=n.createDiv("suggestion-note");if(!a)return s.setText(this.emptyStateText),void t.addClass("is-selected");const l=a.file?.path??a.path,c=l.length-a.file.name.length,d=i.matches.map((e=>createSpan("suggestion-highlight"))),h=this.getItemText(a);for(let e=c;et[0]===e));if(t){const a=d[i.matches.indexOf(t)];s.appendChild(a),a.appendText(h.substring(t[0],t[1])),e+=t[1]-t[0]-1}else s.appendText(h[e])}o.setText(l),this.plugin.isExcalidrawFile(a.file)?obsidian_module.setIcon(r,ICON_NAME):"md"===a.file.extension?obsidian_module.setIcon(r,"square-pen"):IMAGE_TYPES.includes(a.file.extension)?obsidian_module.setIcon(r,"image"):VIDEO_TYPES.includes(a.file.extension)?obsidian_module.setIcon(r,"monitor-play"):AUDIO_TYPES.includes(a.file.extension)?obsidian_module.setIcon(r,"file-audio"):CODE_TYPES.includes(a.file.extension)?obsidian_module.setIcon(r,"file-code"):"canvas"===a.file.extension?obsidian_module.setIcon(r,"layout-dashboard"):"pdf"===a.file.extension?obsidian_module.setIcon(r,"book-open-text"):r.setText(a.file.extension)}getItems(){return this.filesAndAliases}}class InsertPDFModal extends obsidian_module.Modal{plugin;view;borderBox=!0;frame=!1;gapSize=20;groupPages=!1;direction="right";numColumns=1;numRows=1;lockAfterImport=!0;pagesToImport=[];pageDimensions={width:0,height:0};importScale=.3;imageSizeMessage;pdfDoc;pdfFile;dirty=!1;constructor(e,t){super(e.app),this.plugin=e,this.view=t}open(e){e&&"pdf"===e.extension.toLowerCase()&&(this.pdfFile=e),super.open()}onOpen(){this.containerEl.classList.add("excalidraw-release"),this.titleEl.setText("Import PDF"),this.createForm()}async onClose(){this.dirty&&(this.plugin.settings.pdfImportScale=this.importScale,this.plugin.settings.pdfBorderBox=this.borderBox,this.plugin.settings.pdfFrame=this.frame,this.plugin.settings.pdfGapSize=this.gapSize,this.plugin.settings.pdfGroupPages=this.groupPages,this.plugin.settings.pdfNumColumns=this.numColumns,this.plugin.settings.pdfNumRows=this.numRows,this.plugin.settings.pdfDirection=this.direction,this.plugin.settings.pdfLockAfterImport=this.lockAfterImport,await this.plugin.saveSettings()),this.pdfDoc&&(this.pdfDoc.destroy(),this.pdfDoc=null),this.plugin=null,this.view=null,this.app=null,this.imageSizeMessage.remove(),this.setImageSizeMessage=null}async getPageDimensions(e){try{const t=this.plugin.settings.pdfScale,a=createEl("canvas"),i=(await e.getPage(1)).getViewport({scale:t});this.pageDimensions.height=i.height,this.pageDimensions.width=i.width,a.width=0,a.height=0,this.setImageSizeMessage()}catch(e){console.log(e)}}createPageListFromString(e){const t=e=>e.replace(/\D/g,"");return this.pagesToImport=[],e.split(",").forEach((e=>{const a=e.split("-");if(1===a.length){const e=parseInt(t(a[0]));!isNaN(e)&&this.pagesToImport.push(e)}else if(2===a.length){const e=parseInt(t(a[0])),i=parseInt(t(a[1]));if(isNaN(e)||isNaN(i))return;for(let t=e;t<=i;t++)this.pagesToImport.push(t)}})),this.pagesToImport}setImageSizeMessage=()=>this.imageSizeMessage.innerText=`${Math.round(this.pageDimensions.width*this.importScale)} x ${Math.round(this.pageDimensions.height*this.importScale)}`;async createForm(){await this.plugin.loadSettings(),this.borderBox=this.plugin.settings.pdfBorderBox,this.frame=this.plugin.settings.pdfFrame,this.gapSize=this.plugin.settings.pdfGapSize,this.groupPages=this.plugin.settings.pdfGroupPages,this.numColumns=this.plugin.settings.pdfNumColumns,this.numRows=this.plugin.settings.pdfNumRows,this.direction=this.plugin.settings.pdfDirection,this.lockAfterImport=this.plugin.settings.pdfLockAfterImport,this.importScale=this.plugin.settings.pdfImportScale;const e=this.contentEl;let t,a,i,n;const r=()=>this.pdfDoc?0===this.pagesToImport.length?(i.buttonEl.style.display="none",void(n.innerText=t$d("IPM_SELECT_PAGES_TO_IMPORT"))):Math.max(...this.pagesToImport)<=this.pdfDoc.numPages?(i.buttonEl.style.display="block",void(n.innerText="")):(i.buttonEl.style.display="none",void(n.innerText=`The selected document has ${this.pdfDoc.numPages} pages. Please select pages between 1 and ${this.pdfDoc.numPages}`)):(n.innerText=t$d("IPM_SELECT_PDF"),void(i.buttonEl.style.display="none")),s=()=>{0!==a?t.innerHTML=`There are ${a} pages in the selected document.`:t.innerText=t$d("IPM_SELECT_PDF")};let o,l;const c=e=>{const t=this.createPageListFromString(e);t.length>15?l.innerHTML=`You are importing ${t.length} pages. ⚠️ This may take a while. ⚠️`:l.innerHTML=`You are importing ${t.length} pages.`,r()},d=async e=>{this.pdfDoc&&await this.pdfDoc.destroy(),this.pdfDoc=null,e&&(this.pdfDoc=await getPDFDoc(e),this.pdfFile=e,this.pdfDoc?(a=this.pdfDoc.numPages,o.setValue(`1-${a}`),c(`1-${a}`),r(),s(),this.getPageDimensions(this.pdfDoc)):i.setDisabled(!0))},h=new obsidian_module.TextComponent(e);h.inputEl.style.width="100%";const p=new FileSuggestionModal(this.app,h,this.app.vault.getFiles().filter((e=>"pdf"===e.extension.toLowerCase())),this.plugin);let u,m,f,g,U;h.onChange((async()=>{const e=p.getSelectedItem();await d(e)})),t=e.createEl("p",{text:""}),s(),new obsidian_module.Setting(e).setName(t$d("IPM_PAGES_TO_IMPORT_NAME")).setDesc("e.g.: 1,3-5,7,9-10").addText((e=>{o=e,e.setValue("").onChange((e=>c(e))),e.inputEl.style.width="100%"})),l=e.createEl("p",{text:""}),this.frame=!this.borderBox&&this.frame,new obsidian_module.Setting(e).setName(t$d("IPM_ADD_BORDER_BOX_NAME")).addToggle((e=>{u=e,e.setValue(this.borderBox).onChange((e=>{this.borderBox=e,e&&(this.frame=!1,m.setValue(!1)),this.dirty=!0}))})),new obsidian_module.Setting(e).setName(t$d("IPM_ADD_FRAME_NAME")).setDesc(t$d("IPM_ADD_FRAME_DESC")).addToggle((e=>{m=e,e.setValue(this.frame).onChange((e=>{this.frame=e,e&&(this.borderBox=!1,u.setValue(!1),this.lockAfterImport||(this.lockAfterImport=!0,f.setValue(!0))),this.dirty=!0}))})),new obsidian_module.Setting(e).setName(t$d("IPM_GROUP_PAGES_NAME")).setDesc(t$d("IPM_GROUP_PAGES_DESC")).addToggle((e=>e.setValue(this.groupPages).onChange((e=>{this.groupPages=e,this.dirty=!0})))),new obsidian_module.Setting(e).setName("Lock pages on canvas after import").addToggle((e=>{f=e,e.setValue(this.lockAfterImport).onChange((e=>{this.lockAfterImport=e,this.dirty=!0}))}));const b=()=>{switch(this.direction){case"down":g.settingEl.style.display="none",U.settingEl.style.display="";break;case"right":g.settingEl.style.display="",U.settingEl.style.display="none"}};let E,w,y;new obsidian_module.Setting(e).setName("Import direction").addDropdown((e=>e.addOptions({down:"Top > Down",right:"Left > Right"}).setValue(this.direction).onChange((e=>{this.direction=e,b(),this.dirty=!0})))),g=new obsidian_module.Setting(e),g.setName("Number of columns").addSlider((e=>e.setLimits(1,100,1).setValue(this.numColumns).onChange((e=>{this.numColumns=e,E.innerText=` ${e.toString()}`,this.dirty=!0})))).settingEl.createDiv("",(e=>{E=e,e.style.minWidth="2.3em",e.style.textAlign="right",e.innerText=` ${this.numColumns.toString()}`})),U=new obsidian_module.Setting(e),U.setName("Number of rows").addSlider((e=>e.setLimits(1,100,1).setValue(this.numRows).onChange((e=>{this.numRows=e,w.innerText=` ${e.toString()}`,this.dirty=!0})))).settingEl.createDiv("",(e=>{w=e,e.style.minWidth="2.3em",e.style.textAlign="right",e.innerText=` ${this.numRows.toString()}`})),b(),new obsidian_module.Setting(e).setName("Size of gap between pages").addSlider((e=>e.setLimits(10,200,10).setValue(this.gapSize).onChange((e=>{this.gapSize=e,y.innerText=` ${e.toString()}`,this.dirty=!0})))).settingEl.createDiv("",(e=>{y=e,e.style.minWidth="2.3em",e.style.textAlign="right",e.innerText=` ${this.gapSize.toString()}`}));const v=new obsidian_module.Setting(e).setName("Imported page size").setDesc(`${this.pageDimensions.width*this.importScale} x ${this.pageDimensions.height*this.importScale}`).addSlider((e=>e.setLimits(.1,1.5,.1).setValue(this.importScale).onChange((e=>{this.importScale=e,this.dirty=!0,this.setImageSizeMessage()}))));this.imageSizeMessage=v.descEl;const T=new obsidian_module.Setting(e).setDesc("Select a document first").addButton((e=>{e.setButtonText("Import PDF").setCta().onClick((async()=>{const e=getEA(this.view);let t=0,a=0;const i=Math.round(this.pageDimensions.width*this.importScale),r=Math.round(this.pageDimensions.height*this.importScale);for(let s=0;s!this.frame||"frame"===e.type)).map((e=>e.id));e.addToGroup(t)}await e.addElementsToView(!0,!0,!1);const s=e.getExcalidrawAPI(),o=e.getElements().map((e=>e.id)),l=e.getViewElements().filter((e=>o.includes(e.id)));s.selectElements(l),s.zoomToFit(l),e.destroy(),this.close()})),i=e,i.buttonEl.style.display="none"}));n=T.descEl,n.addClass("mod-warning"),this.pdfFile?(h.setValue(this.pdfFile.path),await d(this.pdfFile),p.close(),o.inputEl.focus()):h.inputEl.focus(),r()}}class UniversalInsertFileModal extends obsidian_module.Modal{plugin;view;center={x:0,y:0};file;constructor(e,t){super(e.app),this.plugin=e,this.view=t;const a=t.excalidrawAPI.getAppState(),i=t.containerEl.getBoundingClientRect(),n=window.innerWidth||document.documentElement.clientWidth,r=window.innerHeight||document.documentElement.clientHeight,s=sceneCoordsToViewportCoords({sceneX:t.currentPosition.x,sceneY:t.currentPosition.y},a);if(s.x>=i.left+150&&s.y<=i.right-150&&s.y>=i.top+150&&s.y<=i.bottom-150){const e=t.currentPosition.x-MAX_IMAGE_SIZE/2,a=t.currentPosition.y-MAX_IMAGE_SIZE/2;this.center={x:e,y:a}}else{const e=i.left+i.width/2,t=i.top+i.height/2,s=Math.max(0,Math.min(n,e)),o=Math.max(0,Math.min(r,t));this.center=viewportCoordsToSceneCoords({clientX:s,clientY:o},a),this.center={x:this.center.x-MAX_IMAGE_SIZE/2,y:this.center.y-MAX_IMAGE_SIZE/2}}}onKeyDown;open(e,t){this.file=e,this.center=t??this.center,super.open()}onOpen(){this.containerEl.classList.add("excalidraw-release"),this.titleEl.setText("Insert File From Vault"),this.createForm()}async createForm(){const e=this.contentEl;let t,a,i,n,r,s,o=!1,l=this.file;const c=async()=>{const e=this.plugin.ea,o=l===this.view.file,c=l&&"md"===l.extension&&!e.isExcalidrawFile(l),d=l&&(IMAGE_TYPES.contains(l.extension)||e.isExcalidrawFile(l)),h=l&&ANIMATED_IMAGE_TYPES.contains(l.extension),p=l&&!d,u=l&&"pdf"===l.extension,m=l&&e.isExcalidrawFile(l),f=l&&"md"===l.extension?(await this.plugin.app.metadataCache.blockCache.getForFile({isCancelled:()=>!1},l)).blocks.filter((e=>e.display&&"heading"===e.node?.type)).filter((e=>!m||!MD_EX_SECTIONS.includes(e.display))):null;if(c||m&&f?.length>0){for(a.settingEl.style.display="",t.selectEl.style.display="block";t.selectEl.options.length>0;)t.selectEl.remove(0);m||t.addOption("",""),f.forEach((e=>{t.addOption(`#${cleanSectionHeading(e.display)}`,e.display)}))}else a.settingEl.style.display="none",t.selectEl.style.display="none";s.settingEl.style.display=m&&!o?"":"none",n.buttonEl.style.display=o||!d&&"md"!==l?.extension?"none":"block",i.buttonEl.style.display=p||h||m&&f?.length>0?"block":"none",r.buttonEl.style.display=u?"block":"none"},d=(await this.plugin.app.metadataCache.blockCache.getForFile({isCancelled:()=>!1},this.view.file)).blocks.filter((e=>e.display&&"heading"===e.node?.type)).filter((e=>!MD_EX_SECTIONS.includes(e.display))),h=new obsidian_module.TextComponent(e);h.inputEl.style.width="100%";const p=new FileSuggestionModal(this.app,h,this.app.vault.getFiles().filter((e=>d?.length>0||e!==this.view.file)),this.plugin);h.onChange((()=>{l=p.getSelectedItem(),c()})),a=new obsidian_module.Setting(e).setName("Select section heading").addDropdown((e=>{t=e,t.selectEl.style.width="100%"})),s=new obsidian_module.Setting(e).setName("Anchor to 100% of original size").setDesc("This is a pro feature, use it only if you understand how it works. If enabled even if you change the size of the imported image in Excalidraw, the next time you open the drawing this image will pop back to 100% size. This is useful when embedding an atomic Excalidraw idea into another note and preserving relative sizing of text and icons.").addToggle((e=>{e.setValue(o).onChange((e=>{o=e}))})),new obsidian_module.Setting(e).addButton((e=>{e.setButtonText("as Embeddable").onClick((async()=>{const e=this.app.metadataCache.fileToLinktext(l,this.view.file.path,"md"===l.extension),a=getEA(this.view);a.selectElementsInView([await insertEmbeddableToView(a,this.center,void 0,`[[${e}${t.selectEl.value}]]`)]),a.destroy(),this.close()})),i=e})).addButton((e=>{e.setButtonText("as Pdf").onClick((()=>{new InsertPDFModal(this.plugin,this.view).open(l),this.close()})),r=e})).addButton((e=>{e.setButtonText("as Image").onClick((async()=>{const e=getEA(this.view),a=l&&"md"===l.extension&&!e.isExcalidrawFile(l);e.selectElementsInView([await insertImageToView(e,this.center,a&&t.selectEl.value&&""!==t.selectEl.value?`${l.path}${t.selectEl.value}`:l,e.isExcalidrawFile(l)?!o:void 0)]),e.destroy(),this.close()})),n=e})),this.view.ownerWindow.addEventListener("keydown",this.onKeyDown=e=>{const t=e=>"none"!==e.buttonEl.style.display;switch(e.key){case"Escape":return void this.close();case"Enter":return!t(i)||t(n)||t(r)?!t(n)||t(i)||t(r)?!t(r)||t(i)||t(n)?void 0:void r.buttonEl.click():void n.buttonEl.click():void i.buttonEl.click();case"i":return void(t(n)&&n.buttonEl.click());case"p":return void(t(r)&&r.buttonEl.click());case"f":return void(t(i)&&i.buttonEl.click())}}),h.inputEl.focus(),l&&(h.setValue(l.path),p.close()),c()}onClose(){this.view.ownerWindow.removeEventListener("keydown",this.onKeyDown),this.view=null,this.file=null,this.plugin=null}}function setPen(e,t){const a=t.getAppState();t.updateScene({appState:{currentStrokeOptions:e.penOptions,...e.strokeWidth&&0!==e.strokeWidth?{currentItemStrokeWidth:e.strokeWidth}:null,...e.backgroundColor?{currentItemBackgroundColor:e.backgroundColor}:null,...e.strokeColor?{currentItemStrokeColor:e.strokeColor}:null,...""===e.fillStyle?null:{currentItemFillStyle:e.fillStyle},...e.roughness?null:{currentItemRoughness:e.roughness},...e.freedrawOnly&&!a.resetCustomPen?{resetCustomPen:{currentItemStrokeWidth:a.currentItemStrokeWidth,currentItemBackgroundColor:a.currentItemBackgroundColor,currentItemStrokeColor:a.currentItemStrokeColor,currentItemFillStyle:a.currentItemFillStyle,currentItemRoughness:a.currentItemRoughness}}:null},storeAction:"update"})}function resetStrokeOptions(e,t,a){t.updateScene({appState:{...e?{currentItemStrokeWidth:e.currentItemStrokeWidth,currentItemBackgroundColor:e.currentItemBackgroundColor,currentItemStrokeColor:e.currentItemStrokeColor,currentItemFillStyle:e.currentItemFillStyle,currentItemRoughness:e.currentItemRoughness}:null,resetCustomPen:null,...a?{currentStrokeOptions:null}:null},storeAction:"update"})}class ObsidianMenu{plugin;toolsRef;view;clickTimestamp;activePen;longpressTimeout={};prevClickTimestamp=0;constructor(e,t,a){this.plugin=e,this.toolsRef=t,this.view=a,this.clickTimestamp=Array.from({length:Object.keys(PENS).length},(()=>0))}actionCustomPenLabelClick(e,t){const a=Date.now();if(a-this.clickTimestamp[e]<500){const t=new PenSettingsModal(this.plugin,this.view,e);return void(async()=>{await this.plugin.loadSettings(),t.open()})()}this.clickTimestamp[e]=a;const i=this.view.excalidrawAPI,n=i.getAppState();n.currentStrokeOptions!==t.penOptions||"freedraw"!==n.activeTool.type?(this.activePen={...t},setPen(t,i),i.setActiveTool({type:"freedraw"})):resetStrokeOptions(n.resetCustomPen,i,!0)}actionScriptButtonPonterUp(e,t){this.longpressTimeout[e]&&(this.view.ownerWindow.clearTimeout(this.longpressTimeout[e]),this.longpressTimeout[e]=0,(async()=>{const e=this.view.app.vault.getAbstractFileByPath(t);e&&e instanceof obsidian_module.TFile&&this.plugin.scriptEngine.executeScript(this.view,await this.view.app.vault.read(e),this.plugin.scriptEngine.getScriptName(e),e)})())}actionScriptButtonPointerDown(e,t){const a=Date.now();this.longpressTimeout[e]>0&&(this.view.ownerWindow.clearTimeout(this.longpressTimeout[e]),this.longpressTimeout[e]=0),a-this.prevClickTimestamp>=500&&(this.longpressTimeout[e]=this.view.ownerWindow.setTimeout((()=>{this.longpressTimeout[e]=0,(async()=>{await this.plugin.loadSettings();const e=this.plugin.settings.pinnedScripts.indexOf(t);e>-1&&(this.plugin.settings.pinnedScripts.splice(e,1),this.view.excalidrawAPI?.setToast({message:`Pin removed: ${name}`,duration:3e3,closable:!0})),await this.plugin.saveSettings(),getExcalidrawViews(this.plugin.app).forEach((e=>e.updatePinnedScripts()))})()}),1500)),this.prevClickTimestamp=a}actionShowHideMenu(e,t){this.toolsRef.current.setTheme(t.theme),this.toolsRef.current.toggleVisibility(t.zenModeEnabled||e)}actionInsertAnyFile(){this.view.setCurrentPositionToCenter(),new UniversalInsertFileModal(this.plugin,this.view).open()}renderCustomPens(e,t){return t.customPens?.map(((a,i)=>{const n=this.plugin.settings.customPens[i];return t.resetCustomPen&&"freedraw"!==t.activeTool.type&&t.currentStrokeOptions===n.penOptions&&setTimeout((()=>resetStrokeOptions(t.resetCustomPen,this.view.excalidrawAPI,!1))),!t.resetCustomPen&&"freedraw"===t.activeTool.type&&t.currentStrokeOptions===n.penOptions&&n.freedrawOnly&&setTimeout((()=>setPen(this.activePen,this.view.excalidrawAPI))),this.activePen&&t.resetCustomPen&&"freedraw"===t.activeTool.type&&t.currentStrokeOptions===n.penOptions&&n.freedrawOnly&&(this.activePen.strokeWidth=t.currentItemStrokeWidth,this.activePen.backgroundColor=t.currentItemBackgroundColor,this.activePen.strokeColor=t.currentItemStrokeColor,this.activePen.fillStyle=t.currentItemFillStyle,this.activePen.roughness=t.currentItemRoughness),React__namespace.createElement("label",{key:i,className:clsx("ToolIcon","ToolIcon_size_medium",{"is-mobile":e}),onClick:this.actionCustomPenLabelClick.bind(this,i,n)},React__namespace.createElement("div",{className:"ToolIcon__icon","aria-label":DEVICE.isDesktop?n.type:void 0,style:{..."freedraw"===t.activeTool.type&&t.currentStrokeOptions===n.penOptions?{background:"var(--color-primary)"}:{}}},penIcon(n)))}))}renderPinnedScriptButtons(e,t){return t?.pinnedScripts?.map(((t,a)=>{const i=this.plugin.scriptEngine.scriptIconMap[t],n=i?.name??"",r=i?.svgString?stringToSVG(i.svgString):ICONS.cog;return this.longpressTimeout[a]||(this.longpressTimeout[a]=0),React__namespace.createElement("label",{key:a,className:clsx("ToolIcon","ToolIcon_size_medium",{"is-mobile":e}),onPointerUp:this.actionScriptButtonPonterUp.bind(this,a,t),onPointerDown:this.actionScriptButtonPointerDown.bind(this,a,t)},React__namespace.createElement("div",{className:"ToolIcon__icon","aria-label":DEVICE.isDesktop?n:void 0},r))}))}renderButton(e,t){return React__namespace.createElement(React__namespace.Fragment,null,React__namespace.createElement("label",{className:clsx("ToolIcon","ToolIcon_size_medium",{"is-mobile":e}),onClick:this.actionShowHideMenu.bind(this,e,t)},React__namespace.createElement("div",{className:"ToolIcon__icon","aria-label":t$d("OBSIDIAN_TOOLS_PANEL")},ICONS.obsidian)),React__namespace.createElement("label",{className:clsx("ToolIcon","ToolIcon_size_medium",{"is-mobile":e}),onClick:this.actionInsertAnyFile.bind(this)},React__namespace.createElement("div",{className:"ToolIcon__icon","aria-label":t$d("UNIVERSAL_ADD_FILE")},ICONS["add-file"])),this.renderCustomPens(e,t),this.renderPinnedScriptButtons(e,t))}destroy(){Object.values(this.longpressTimeout).forEach((e=>this.view.ownerWindow.clearTimeout(e))),this.longpressTimeout={},this.activePen=null,this.plugin=null,this.toolsRef=null,this.view=null,this.clickTimestamp=null,this.renderButton=null,this.renderCustomPens=null,this.renderPinnedScriptButtons=null}}class ActionButton extends React__namespace.Component{toastMessageTimeout=0;longpressTimeout=0;constructor(e){super(e),this.state={visible:!0}}componentWillUnmount(){this.render=()=>null}render(){return React__namespace.createElement("button",{style:{},className:"ToolIcon_type_button ToolIcon_size_small ToolIcon_type_button--show ToolIcon",title:this.props.title,onClick:e=>{this.toastMessageTimeout&&(window.clearTimeout(this.toastMessageTimeout),this.toastMessageTimeout=0,this.props.action(e)),this.longpressTimeout&&(window.clearTimeout(this.longpressTimeout),this.longpressTimeout=0)},onPointerDown:e=>{this.toastMessageTimeout=window.setTimeout((()=>{new obsidian_module.Notice(this.props.title,3e3),this.toastMessageTimeout=0}),400),this.longpressTimeout=window.setTimeout((()=>{this.props.longpress?this.props.longpress(e):new obsidian_module.Notice("Cannot pin this action",3e3),this.longpressTimeout=0}),1500)}},React__namespace.createElement("div",{className:"ToolIcon__icon","aria-hidden":"true"},this.props.icon))}}const FIRST_RUN='\nThe Excalidraw Obsidian plugin is much more than "just" a drawing tool. To help you get started here\'s a showcase of the key Excalidraw plugin features.\n\nIf you\'d like to learn more, please subscribe to my YouTube channel: [Visual PKM](https://www.youtube.com/channel/UCC0gns4a9fhVkGkngvSumAQ) where I regularly share videos about Obsidian-Excalidraw and about tools and techniques for Visual Personal Knowledge Management.\n\nThank you & Enjoy!\n\n
\n\n
\n',RELEASE_NOTES={Intro:'After each update you\'ll be prompted with the release notes. You can disable this in plugin settings.\n\nI develop this plugin as a hobby, spending my free time doing this. If you find it valuable, then please say THANK YOU or...\n\n
Buy Me a Coffee at ko-fi.com
\n',"2.8.3":"\n## Fixed\n- Chinese translation not available since 2.8.0. [#2247](https://github.com/zsviczian/obsidian-excalidraw-plugin/issues/2247)\n- Since the most recent Samsung Android update, adding images from the gallery returns an Unsupported Image Type error. [#2245](https://github.com/zsviczian/obsidian-excalidraw-plugin/issues/2245)\n- Duplicating/removing frame while children selected [#9079](https://github.com/excalidraw/excalidraw/pull/9079)\n","2.8.2":'\n## New\n- Moved "Create new drawing" option up in the context menu [#2243](https://github.com/zsviczian/obsidian-excalidraw-plugin/issues/2243)\n\n## Fixed\n- In rare cases drawing content gets overwritten with another drawing [#2152](https://github.com/zsviczian/obsidian-excalidraw-plugin/issues/2152)\n- "Wrap selection in frame" sets dark mode to light mode [#2240](https://github.com/zsviczian/obsidian-excalidraw-plugin/issues/2240)\n- Multiple bug fixes from Excalidraw.com\n - Elbow arrows within boxes [#9077](https://github.com/excalidraw/excalidraw/issues/9077)\n - Elbow arrow orthogonality [#9073](https://github.com/excalidraw/excalidraw/pull/9073)\n - Improve library sidebar performance [#9060](https://github.com/excalidraw/excalidraw/pull/9060)\n - Opacity slider now displays numerical value [#9009](https://github.com/excalidraw/excalidraw/pull/9009)\n - Resize a frame and its children together when box selecting the frame and its children together [#9031](https://github.com/excalidraw/excalidraw/pull/9031)\n - Excalidraw screen flickering in dark mode [#9057](https://github.com/excalidraw/excalidraw/pull/9057)\n',"2.8.1":"\n## Fixed\n- Unable to open Excalidraw files after the 2.8.0 update. [#2235](https://github.com/zsviczian/obsidian-excalidraw-plugin/issues/2235)\n","2.8.0":`\n
\n\n
\n\n## New\n- Updated "Export Image" dialog\n - 🚀 PDF Export option including tiling of images over multiple pages. Only available on desktop :(\n - SVG to clipboard\n - More granular setting for padding and scale\n - Slideshow script can now print slides to PDF (update script from script store)\n- Set local graph to show the links in the embeddable when it is activated/deactivated [#2200](https://github.com/zsviczian/obsidian-excalidraw-plugin/issues/2200)\n\n## Fixed\n- Fixed several LaTeX issues. 🙏 @Sintuz [#1631](https://github.com/zsviczian/obsidian-excalidraw-plugin/issues/1631), [#2195](https://github.com/zsviczian/obsidian-excalidraw-plugin/issues/2195), [#1842](https://github.com/zsviczian/obsidian-excalidraw-plugin/issues/1842)\n- Fixed support for *.jfif and *.avif images [#2212](https://github.com/zsviczian/obsidian-excalidraw-plugin/issues/2212)\n- PDF++ selection is not correctly showing after embedded into a drawing (for some specific files) [#2213](https://github.com/zsviczian/obsidian-excalidraw-plugin/issues/2213)\n- iOS 18 can't upload image and library [#2182](https://github.com/zsviczian/obsidian-excalidraw-plugin/issues/2182)\n- Image block references are broken in hover previews [#2218](https://github.com/zsviczian/obsidian-excalidraw-plugin/issues/2218)\n - ⚠️ Note there is a known issue in Obsidian 1.8.2 ⚠️ affecting preview windows in Excalidraw. I received confirmation that this will be fixed in 1.8.3. For now, if hover previews are important to you, you can downgrade to Obsidian 1.8.1 [#2228](https://github.com/zsviczian/obsidian-excalidraw-plugin/issues/2225) \n- Mobile elements panel and context menu are not scrollable [#2216](https://github.com/zsviczian/obsidian-excalidraw-plugin/issues/2216)\n- "Local Font" menu disappears when opening a drawing in an Obsidian popout-window [#2205](https://github.com/zsviczian/obsidian-excalidraw-plugin/issues/2205)\n\n## Updates from Excalidraw.com\n- Pressing delete on a frame will only delete the children [#9011](https://github.com/excalidraw/excalidraw/pull/9011)\n- New crowfoot arrowheads and a new arrowhead picker [#8942](https://github.com/excalidraw/excalidraw/pull/8942)\n- Fixed some of the arrow binding issues [#9010](https://github.com/excalidraw/excalidraw/pull/9010), [#2209](https://github.com/zsviczian/obsidian-excalidraw-plugin/issues/2209)\n- New context menu action: "Wrap selection in frame" [#9005](https://github.com/excalidraw/excalidraw/pull/9005)\n- Elbow arrow segment fixing and positioning [#8952](https://github.com/excalidraw/excalidraw/pull/8952)\n- When drag creating a new frame, do not add a partial group to it. When wrapping a selected partial group in a frame however, do add it to the wrapping frame. But such that it should be separated from the previous containing group. [#9014](https://github.com/excalidraw/excalidraw/pull/9014)\n\n## New in ExcalidrawAutomate\n- New hook: ${String.fromCharCode(96)}onImageFileNameHook${String.fromCharCode(96)}. When set, this callback is triggered when a image is being saved in Excalidraw.\n- PDF export functions, paving the way for slideshow to export slides to PDF\n${String.fromCharCode(96,96,96)}ts\n/**\n * Returns the dimensions of a standard page size in pixels.\n*/\nfunction getPagePDFDimensions(\n pageSize: PageSize,\n orientation: PageOrientation\n): PageDimensions;\n\n/**\n * Creates a PDF from the provided SVG elements with specified scaling and page properties.\n*/\nfunction createPDF(props: {\n SVG: SVGSVGElement[];\n scale?: PDFExportScale;\n pageProps?: PDFPageProperties;\n filename: string;\n}): Promise;\n\n/**\n * Creates an SVG representation of the current view.\n*/\nfunction createViewSVG(props : {\n withBackground?: boolean;\n theme?: "light" | "dark";\n frameRendering?: FrameRenderingOptions;\n padding?: number;\n selectedOnly?: boolean;\n skipInliningFonts?: boolean;\n embedScene?: boolean;\n}): Promise;\n\n/**\n * If set, this callback is triggered when a image is being saved in Excalidraw.\n * You can use this callback to customize the naming and path of pasted images to avoid\n * default names like "Pasted image 123147170.png" being saved in the attachments folder,\n * and instead use more meaningful names based on the Excalidraw file or other criteria,\n * plus save the image in a different folder.\n * \n * If the function returns null or undefined, the normal Excalidraw operation will continue\n * with the excalidraw generated name and default path.\n * If a filepath is returned, that will be used. Include the full Vault filepath and filename\n * with the file extension.\n * The currentImageName is the name of the image generated by excalidraw or provided during paste.\n */\nfunction onImageFilePathHook: (data: {\n currentImageName: string;\n drawingFilePath: string;\n}) => string = null; \n${String.fromCharCode(96,96,96)}\n`,"2.7.5":`\n## Fixed\n- PDF export scenario described in [#2184](https://github.com/zsviczian/obsidian-excalidraw-plugin/issues/2184)\n- Elbow arrows do not work within frames [#2187](https://github.com/zsviczian/obsidian-excalidraw-plugin/issues/2187)\n- Embedding images into Excalidraw with areaRef links did not work as expected due to conflicting SVG viewbox and width and height values\n- Can't exit full-screen mode in popout windows using the Command Palette toggle action [#2188](https://github.com/zsviczian/obsidian-excalidraw-plugin/issues/2188)\n- If the image mask extended beyond the image in "Mask and Crop" image mode, the mask got misaligned from the image.\n- PDF image embedding fixes that impacted some PDF files (not all):\n - When cropping the PDF page in the scene (by double-clicking the image to crop), the size and position of the PDF cutout drifted.\n - Using PDF++ there was a small offset in the position of the cutout in PDF++ and the image in Excalidraw.\n - Updated a number of scripts including Split Ellipse, Select Similar Elements, and Concatenate Lines\n\n## New in ExcalidrawAutomate\n${String.fromCharCode(96,96,96)}\n /**\n * Add, modify, or delete keys in element.customData and preserve existing keys.\n * Creates customData={} if it does not exist.\n * Takes the element id for an element in ea.elementsDict and the newData to add or modify.\n * To delete keys set key value in newData to undefined. So {keyToBeDeleted:undefined} will be deleted.\n * @param id\n * @param newData \n * @returns undefined if element does not exist in elementsDict, returns the modified element otherwise.\n */\n public addAppendUpdateCustomData(id:string, newData: Partial>);\n${String.fromCharCode(96,96,96)}\n`,"2.7.4":"\n## Fixed\n- Regression from 2.7.3 where image fileId got overwritten in some cases\n- White flash when opening a dark drawing [#2178](https://github.com/zsviczian/obsidian-excalidraw-plugin/issues/2178)\n","2.7.3":`\n
\n\n
\n\n## Fixed\n- Toggling image size anchoring on and off by modifying the image link did not update the image in the view until the user forced saved it or closed and opened the drawing again. This was a side-effect of the less frequent view save introduced in 2.7.1\n\n## New\n- **Shade Master Script**: A new script that allows you to modify the color lightness, hue, saturation, and transparency of selected Excalidraw elements, SVG images, and nested Excalidraw drawings. When a single image is selected, you can map colors individually. The original image remains unchanged, and a mapping table is added under ${String.fromCharCode(96)}## Embedded Files${String.fromCharCode(96)} for SVG and nested drawings. This helps maintain links between drawings while allowing different color themes.\n- New Command Palette Command: "Duplicate selected image with a different image ID". Creates a copy of the selected image with a new image ID. This allows you to add multiple color mappings to the same image. In the scene, the image will be treated as if a different image, but loaded from the same file in the Vault.\n\n## QoL Improvements\n- New setting under ${String.fromCharCode(96)}Embedding Excalidraw into your notes and Exporting${String.fromCharCode(96)} > ${String.fromCharCode(96)}Image Caching and rendering optimization${String.fromCharCode(96)}. You can now set the number of concurrent workers that render your embedded images. Increasing the number will increase the speed but temporarily reduce the responsiveness of your system in case of large drawings.\n- Moved pen-related settings under ${String.fromCharCode(96)}Excalidraw appearance and behavior${String.fromCharCode(96)} to their sub-heading called ${String.fromCharCode(96)}Pen${String.fromCharCode(96)}.\n- Minor error fixing and performance optimizations when loading and updating embedded images.\n- Color maps in ${String.fromCharCode(96)}## Embedded Files${String.fromCharCode(96)} may now include color keys "stroke" and "fill". If set, these will change the fill and stroke attributes of the SVG root element of the relevant file.\n\n## New in ExcalidrawAutomate\n${String.fromCharCode(96,96,96)}ts\n// Updates the color map of an SVG image element in the view. If a ColorMap is provided, it will be used directly.\n// If an SVGColorInfo is provided, it will be converted to a ColorMap.\n// The view will be marked as dirty and the image will be reset using the color map.\nupdateViewSVGImageColorMap(\n elements: ExcalidrawImageElement | ExcalidrawImageElement[],\n colors: ColorMap | SVGColorInfo | ColorMap[] | SVGColorInfo[]\n): Promise;\n\n// Retrieves the color map for an image element.\n// The color map contains information about the mapping of colors used in the image.\n// If the element already has a color map, it will be returned.\ngetColorMapForImageElement(el: ExcalidrawElement): ColorMap;\n\n// Retrieves the color map for an SVG image element.\n// The color map contains information about the fill and stroke colors used in the SVG.\n// If the element already has a color map, it will be merged with the colors extracted from the SVG.\ngetColorMapForImgElement(el: ExcalidrawElement): Promise;\n\n// Extracts the fill (background) and stroke colors from an Excalidraw file and returns them as an SVGColorInfo.\ngetColosFromExcalidrawFile(file:TFile, img: ExcalidrawImageElement): Promise;\n\n// Extracts the fill and stroke colors from an SVG string and returns them as an SVGColorInfo.\ngetColorsFromSVGString(svgString: string): SVGColorInfo;\n\n// upgraded the addImage function.\n// 1. It now accepts an object as the input parameter, making your scripts more readable\n// 2. AddImageOptions now includes colorMap as an optional parameter, this will only have an effect in case of SVGs and nested Excalidraws\n// 3. The API function is backwards compatible, but I recommend new implementations to use the object based input\naddImage(opts: AddImageOptions}): Promise;\n\ninterface AddImageOptions {\n topX: number;\n topY: number;\n imageFile: TFile | string;\n scale?: boolean; \n anchor?: boolean;\n colorMap?: ColorMap;\n}\n\ntype SVGColorInfo = Map;\n\ninterface ColorMap {\n [color: string]: string;\n};\n${String.fromCharCode(96,96,96)}\n`,"2.7.2":`\n## Fixed\n- The plugin did not load on **iOS 16 and older**. [#2170](https://github.com/zsviczian/obsidian-excalidraw-plugin/issues/2170)\n- Added empty line between ${String.fromCharCode(96)}# Excalidraw Data${String.fromCharCode(96)} and ${String.fromCharCode(96)}## Text Elements${String.fromCharCode(96)}. This will now follow **correct markdown linting**. [#2168](https://github.com/zsviczian/obsidian-excalidraw-plugin/issues/2168)\n- Adding an **embeddable** to view did not **honor the element background and element stroke colors**, even if it was configured in plugin settings. [#2172](https://github.com/zsviczian/obsidian-excalidraw-plugin/issues/2172)\n- **Deconstruct selected elements script** did not copy URLs and URIs for images embedded from outside Obsidian. Please update your script from the script library. \n- When **rearranging tabs in Obsidian**, e.g. having two tabs side by side, and moving one of them to another location, if the tab was an Excalidraw tab, it appeared as non-responsive after the move, until the tab was resized.\n\n## Source Code Refactoring\n- Updated filenames, file locations, and file name letter-casing across the project\n- Extracted onDrop, onDragover, etc. handlers to DropManger in ExcalidrawView\n`,"2.7.1":"\n## Fixed\n- Deleting excalidraw file from file system while it is open in fullscreen mode in Obsidian causes Obsidian to be stuck in full-screen view [#2161](https://github.com/zsviczian/obsidian-excalidraw-plugin/issues/2161)\n- Chinese fonts are not rendered in LaTeX statements [#2162](https://github.com/zsviczian/obsidian-excalidraw-plugin/issues/2162)\n- Since Electron 32 (newer Obsidian Desktop installers) drag and drop links from Finder or OS File Explorer did not work. [Electron breaking change](https://www.electronjs.org/docs/latest/breaking-changes#removed-filepath). This is now fixed\n- Addressed unnecessary image reloads when changing windows in Obsidian\n","2.7.0":`\n## Fixed\n- Various Markdown embeddable "fuzziness": \n - Fixed issues with appearance settings and edit mode toggling when single-click editing is enabled. \n - Ensured embeddable file editing no longer gets interrupted unexpectedly. \n- **Hover Preview**: Disabled hover preview for back-of-the-note cards to reduce distractions.\n- **Settings Save**: Fixed an issue where plugin settings unnecessarily saved on every startup.\n\n## New Features\n- **Image Cropping Snaps to Objects**: When snapping is enabled in the scene, image cropping now aligns to nearby objects. \n- **Session Persistence for Pen Mode**: Excalidraw remembers the last pen mode when switching between drawings within the same session.\n\n## Refactoring\n- **Mermaid Diagrams**: Excalidraw now uses its own Mermaid package, breaking future dependencies on Obsidian's Mermaid updates. This ensures stability and includes all fixes and improvements made to Excalidraw Mermaid since February 2024. The plugin file size has increased slightly, but this change significantly improves maintainability while remaining invisible to users. \n- **MathJax Optimization**: MathJax (LaTeX equation SVG image generation) now loads only on demand, with the package compressed to minimize the startup and file size impact caused by the inclusion of Mermaid. \n- **On-Demand Language Loading**: Non-English language files are now compressed and load only when needed, counterbalancing the increase in file size due to Mermaid and improving load speeds. \n- **Codebase Restructuring**: Improved type safety by removing many ${String.fromCharCode(96)}//@ts-ignore${String.fromCharCode(96)} commands and enhancing modularity. Introduced new management classes: **CommandManager**, **EventManager**, **PluginFileManager**, **ObserverManager**, and **PackageManager**. Further restructuring is planned for upcoming releases to improve maintainability and stability.\n`,"2.6.8":`\n## New\n- **QoL improvements**:\n - Obsidian-link search button in Element Link Editor.\n - Add Any File now searches file aliases as well.\n - Cosmetic changes to file search modals (display path, show file type icon).\n - Text Element cursor-color matches the text color.\n- New script in script store: [Image Occlusion](https://github.com/zsviczian/obsidian-excalidraw-plugin/blob/master/ea-scripts/Image%20Occlusion.md) by [@TrillStones](https://github.com/TrillStones) 🙏\n\n## Fixed\n- Excalidraw icon on the **ribbon menu kept reappearing** every time you reopen Obsidian [#2115](https://github.com/zsviczian/obsidian-excalidraw-plugin/issues/2115)\n- In pen mode, when **single-finger panning** is enabled, Excalidraw should still **allow actions with the mouse**.\n- When **editing a drawing in split mode** (drawing is on one side, markdown view is on the other), editing the markdown note sometimes causes the drawing to re-zoom and jump away from the selected area.\n- Hover-Editor compatibility resolved [2041](https://github.com/zsviczian/obsidian-excalidraw-plugin/issues/2041)\n- ${String.fromCharCode(96)}ExcalidrawAutomate.create() ${String.fromCharCode(96)} will now correctly include the markdown text in templates above Excalidraw Data and below YAML front matter. This also fixes the same issue with the **Deconstruct Selected Element script**.\n\n`};class ReleaseNotes extends obsidian_module.Modal{plugin;version;constructor(e,t,a){super(e),this.plugin=t,this.version=a}onOpen(){this.containerEl.classList.add("excalidraw-release"),this.titleEl.setText(`Welcome to Excalidraw ${this.version??""}`),this.createForm()}async onClose(){this.contentEl.empty(),await this.plugin.loadSettings(),this.plugin.settings.previousRelease=PLUGIN_VERSION,await this.plugin.saveSettings()}async createForm(){let e=this.plugin.settings.previousRelease;e=this.version===e?"0.0.0":e;const t=this.version?Object.keys(RELEASE_NOTES).filter((t=>"Intro"===t||isVersionNewerThanOther(t,e))).map((e=>`${"Intro"===e?"":`# ${e}\n`}${RELEASE_NOTES[e]}`)).slice(0,10).join("\n\n---\n"):FIRST_RUN;await obsidian_module.MarkdownRenderer.renderMarkdown(t,this.contentEl,"",this.plugin),this.contentEl.createEl("p",{text:""},(e=>{e.style.textAlign="right",e.createEl("button",{text:"Close"}).onclick=()=>this.close()}))}}const DPI=96,STANDARD_PAGE_SIZES={A0:{width:3179.52,height:4494.96},A1:{width:2245.76,height:3179.52},A2:{width:1587.76,height:2245.76},A3:{width:1122.56,height:1587.76},A4:{width:794.56,height:1122.56},A5:{width:559.37,height:794.56},A6:{width:397.28,height:559.37},Legal:{width:816,height:1344},Letter:{width:816,height:1056},Tabloid:{width:1056,height:1632},Ledger:{width:1632,height:1056}};function getMarginValue(e){switch(e){case"none":return{left:0,right:0,top:0,bottom:0};case"tiny":return{left:10,right:10,top:10,bottom:10};default:return{left:60,right:60,top:60,bottom:60}}}function getPageDimensions(e,t){const a=STANDARD_PAGE_SIZES[e];return"portrait"===t?{width:a.width,height:a.height}:{width:a.height,height:a.width}}function getPageSizePixels(e,t=!1){if("object"==typeof e)return e;const a=STANDARD_PAGE_SIZES[e];if(!a)throw new Error(`Unsupported page size: ${e}`);return t?{width:a.height,height:a.width}:{width:a.width,height:a.height}}function getPageSize(e){if("string"==typeof e)return e;if(!e||"object"!=typeof e||"number"!=typeof e.width||"number"!=typeof e.height)throw new Error("Invalid page dimensions");return{width:e.width/DPI,height:e.height/DPI}}async function getSavePath(e){return(await window.electron.remote.dialog.showSaveDialog({defaultPath:e,filters:[{name:"PDF Files",extensions:["pdf"]},{name:"All Files",extensions:["*"]}],properties:["showOverwriteConfirmation"]})).filePath}async function printPdf(e,t,a,i,n,r){const s=document.createElement("style");s.textContent=`\n @media print {\n .print {\n background-color: ${a} !important;\n display: flex !important;\n justify-content: center !important;\n align-items: center !important;\n -webkit-print-color-adjust: exact !important;\n print-color-adjust: exact !important;\n flex-direction: column !important;\n page-break-before: always;\n margin: 0px !important;\n padding: 0px !important;\n }\n }\n `,document.head.appendChild(s);const o=document.body.createDiv("print");o.style.top="0",o.style.left="0",o.style.display="flex",o.appendChild(e);const l={includeName:!1,pageSize:getPageSize(i),landscape:n,margins:r,scaleFactor:100,scale:1,open:!0,filepath:t};try{await new Promise((e=>{window.electron.ipcRenderer.once("print-to-pdf",e),window.electron.ipcRenderer.send("print-to-pdf",l)}))}finally{o.remove(),s.remove()}}function calculateDimensions(e,t,a,i,n,r,s){const o=e.getAttribute("viewBox")?.split(" ").map(Number)||[0,0,t,a],[l,c]=o,d=i.width-n.left-n.right,h=i.height-n.top-n.bottom;if(r.fitToPage>0){let e=0,i=100,n=1;const s=1e-6;for(;i-e>s;){const s=(e+i)/2,o=t*s,l=a*s;Math.ceil(o/d)*Math.ceil(l/h)>r.fitToPage?i=s:(n=s,e=s)}r.zoom=Math.round(.99999*n*1e6)/1e6}const p=t*(r.zoom||1),u=a*(r.zoom||1);if(p<=d&&u<=h){const e=calculatePosition(p,u,i.width,i.height,n,s);return{tiles:[{viewBox:`${l} ${c} ${t} ${a}`,width:p,height:u,x:e.x,y:e.y}],pages:1}}const m=Math.ceil(p/d),f=Math.ceil(u/h),g=calculatePosition(p,u,m*d,f*h,{left:0,right:0,top:0,bottom:0},s),U=[];for(let e=0;e=.99&&I<=1.01?n.left:"center"===s||"top-center"===s||"bottom-center"===s?0===t?n.left+(d-w):n.left:s.endsWith("right")?i.width-n.right-w:n.left;const A=y/h;C=A>=.99&&A<=1.01?n.top:"center"===s||"center-left"===s||"center-right"===s?0===e?n.top+(h-y):n.top:s.startsWith("bottom")?i.height-n.bottom-y:n.top,U.push({viewBox:`${v+l} ${T+c} ${S} ${_}`,width:w,height:y,x:x,y:C})}return{tiles:U,pages:U.length}}function calculatePosition(e,t,a,i,n,r){const s=a-n.left-n.right,o=i-n.top-n.bottom;let l=n.left,c=n.top;return"center"===r||"top-center"===r||"bottom-center"===r?l=n.left+(s-e)/2:r.endsWith("right")&&(l=n.left+s-e),"center"===r||"center-left"===r||"center-right"===r?c=n.top+(o-t)/2:r.startsWith("bottom")&&(c=n.top+o-t),{x:l,y:c}}async function exportToPDF({SVG:e,scale:t={fitToPage:1,zoom:1},pageProps:a,filename:i}){if(!DEVICE.isDesktop)return void new obsidian_module.Notice(t$d("PDF_EXPORT_DESKTOP_ONLY"));const n=await getSavePath(i);if(!n)return;const{width:r,height:s}=getPageSizePixels(a.dimensions,!1),o=createDiv();o.style.width="100%",o.style.height="fit-content";let l=0;for(const i of e){const e=parseFloat(i.getAttribute("width")||"0"),n=parseFloat(i.getAttribute("height")||"0"),{tiles:c}=calculateDimensions(i,e,n,a.dimensions,a.margin,t,a.alignment);let d=0;for(const e of c){const t=createDiv();t.style.width=`${r}px`,t.style.height=`${s}px`,t.style.display="flex",t.style.justifyContent="start",t.style.alignItems="left",t.style.padding=`${a.margin.top}px ${a.margin.right}px ${a.margin.bottom}px ${a.margin.left}px`;const n=i.cloneNode(!0);n.setAttribute("viewBox",e.viewBox),n.style.width=`${e.width}px`,n.style.height=`${e.height}px`,n.style.position="absolute",n.style.left=`${e.x}px`,n.style.top=`${e.y+(d+l)*s}px`,t.appendChild(n),o.appendChild(t),d++}l++}new obsidian_module.Notice(t$d("EXPORTDIALOG_PDF_PROGRESS_NOTICE"));try{await printPdf(o,n,a.backgroundColor||"#ffffff",a.dimensions,!1,{top:0,right:0,bottom:0,left:0})}catch(e){console.error("Failed to export to PDF: ",e),new obsidian_module.Notice(t$d("EXPORTDIALOG_PDF_PROGRESS_ERROR"))}new obsidian_module.Notice(t$d("EXPORTDIALOG_PDF_PROGRESS_DONE"))}async function exportSVGToClipboard(e){try{const t=e.outerHTML;await navigator.clipboard.writeText(t)}catch(e){console.error("Failed to copy SVG to clipboard: ",e)}}class PDFExportSettingsComponent{contentEl;settings;update;constructor(e,t,a){this.contentEl=e,this.settings=t,this.update=a,a||(this.update=()=>{})}render(){const e=Object.keys(STANDARD_PAGE_SIZES).reduce(((e,t)=>({...e,[t]:t})),{});new obsidian_module.Setting(this.contentEl).setName(t$d("EXPORTDIALOG_PAGE_SIZE")).addDropdown((t=>t.addOptions(e).setValue(this.settings.pageSize).onChange((e=>{this.settings.pageSize=e,this.update()})))),new obsidian_module.Setting(this.contentEl).setName(t$d("EXPORTDIALOG_PAGE_ORIENTATION")).addDropdown((e=>e.addOptions({portrait:t$d("EXPORTDIALOG_ORIENTATION_PORTRAIT"),landscape:t$d("EXPORTDIALOG_ORIENTATION_LANDSCAPE")}).setValue(this.settings.pageOrientation).onChange((e=>{this.settings.pageOrientation=e,this.update()})))),new obsidian_module.Setting(this.contentEl).setName(t$d("EXPORTDIALOG_PDF_FIT_TO_PAGE")).addDropdown((e=>e.addOptions({scale:t$d("EXPORTDIALOG_PDF_SCALE_OPTION"),fit:t$d("EXPORTDIALOG_PDF_FIT_OPTION"),"fit-2":t$d("EXPORTDIALOG_PDF_FIT_2_OPTION"),"fit-4":t$d("EXPORTDIALOG_PDF_FIT_4_OPTION"),"fit-6":t$d("EXPORTDIALOG_PDF_FIT_6_OPTION"),"fit-8":t$d("EXPORTDIALOG_PDF_FIT_8_OPTION"),"fit-12":t$d("EXPORTDIALOG_PDF_FIT_12_OPTION"),"fit-16":t$d("EXPORTDIALOG_PDF_FIT_16_OPTION")}).setValue(1===this.settings.fitToPage?"fit":"number"==typeof this.settings.fitToPage?`fit-${this.settings.fitToPage}`:"scale").onChange((e=>{this.settings.fitToPage="scale"===e?0:"fit"===e?1:parseInt(e.split("-")[1]),this.update()})))),new obsidian_module.Setting(this.contentEl).setName(t$d("EXPORTDIALOG_PDF_MARGIN")).addDropdown((e=>e.addOptions({none:t$d("EXPORTDIALOG_PDF_MARGIN_NONE"),tiny:t$d("EXPORTDIALOG_PDF_MARGIN_TINY"),normal:t$d("EXPORTDIALOG_PDF_MARGIN_NORMAL")}).setValue(this.settings.margin).onChange((e=>{this.settings.margin=e,this.update()}))));const t=new obsidian_module.Setting(this.contentEl).setName(t$d("EXPORTDIALOG_PDF_PAPER_COLOR")).addDropdown((e=>e.addOptions({white:t$d("EXPORTDIALOG_PDF_PAPER_WHITE"),scene:t$d("EXPORTDIALOG_PDF_PAPER_SCENE"),custom:t$d("EXPORTDIALOG_PDF_PAPER_CUSTOM")}).setValue(this.settings.paperColor).onChange((e=>{this.settings.paperColor=e,t.style.display="custom"===e?"block":"none",this.update()})))).controlEl.createEl("input",{type:"color",value:this.settings.customPaperColor});t.style.width="50px",t.style.marginLeft="10px",t.style.display="custom"===this.settings.paperColor?"block":"none",t.addEventListener("change",(e=>{this.settings.customPaperColor=e.target.value,this.update()})),new obsidian_module.Setting(this.contentEl).setName(t$d("EXPORTDIALOG_PDF_ALIGNMENT")).addDropdown((e=>e.addOptions({center:t$d("EXPORTDIALOG_PDF_ALIGN_CENTER"),"center-left":t$d("EXPORTDIALOG_PDF_ALIGN_CENTER_LEFT"),"center-right":t$d("EXPORTDIALOG_PDF_ALIGN_CENTER_RIGHT"),"top-left":t$d("EXPORTDIALOG_PDF_ALIGN_TOP_LEFT"),"top-center":t$d("EXPORTDIALOG_PDF_ALIGN_TOP_CENTER"),"top-right":t$d("EXPORTDIALOG_PDF_ALIGN_TOP_RIGHT"),"bottom-left":t$d("EXPORTDIALOG_PDF_ALIGN_BOTTOM_LEFT"),"bottom-center":t$d("EXPORTDIALOG_PDF_ALIGN_BOTTOM_CENTER"),"bottom-right":t$d("EXPORTDIALOG_PDF_ALIGN_BOTTOM_RIGHT")}).setValue(this.settings.alignment).onChange((e=>{this.settings.alignment=e,this.update()}))))}}class ExportDialog extends obsidian_module.Modal{plugin;view;file;ea;api;padding;scale;theme;transparent;saveSettings;dirty=!1;selectedOnlySetting;hasSelectedElements=!1;boundingBox;embedScene;exportSelectedOnly;saveToVault;pageSize="A4";pageOrientation="portrait";activeTab="image";contentContainer;buttonContainerRow1;buttonContainerRow2;fitToPage=1;paperColor="white";customPaperColor="#ffffff";alignment="center";margin="normal";constructor(e,t,a){super(e.app),this.plugin=e,this.view=t,this.file=a,this.ea=getEA(this.view),this.api=this.ea.getExcalidrawAPI(),this.padding=getExportPadding(this.plugin,this.file),this.scale=getPNGScale(this.plugin,this.file),this.theme=getExportTheme(this.plugin,this.file,this.api.getAppState().theme),this.boundingBox=this.ea.getBoundingBox(this.ea.getViewElements()),this.embedScene=shouldEmbedScene(this.plugin,this.file),this.exportSelectedOnly=!1,this.saveToVault=!0,this.transparent=!getWithBackground(this.plugin,this.file),this.pageSize=e.settings.pdfSettings.pageSize,this.pageOrientation=e.settings.pdfSettings.pageOrientation,this.fitToPage=e.settings.pdfSettings.fitToPage,this.paperColor=e.settings.pdfSettings.paperColor,this.customPaperColor=e.settings.pdfSettings.customPaperColor,this.alignment=e.settings.pdfSettings.alignment,this.margin=e.settings.pdfSettings.margin,this.saveSettings=!1,this.createForm()}destroy(){this.app=null,this.plugin=null,this.ea.destroy(),this.ea=null,this.view=null,this.file=null,this.api=null,this.theme=null,this.selectedOnlySetting=null,this.containerEl.remove()}onOpen(){this.containerEl.classList.add("excalidraw-release"),this.titleEl.setText(t$d("EXPORTDIALOG_TITLE")),this.hasSelectedElements=this.view.getViewSelectedElements().length>0,this.selectedOnlySetting.setVisibility(this.hasSelectedElements)}async onClose(){this.dirty=this.saveSettings}createForm(){if(DEVICE.isDesktop){const e=this.contentEl.createDiv("nav-buttons-container"),t=e.createEl("button",{text:t$d("EXPORTDIALOG_TAB_IMAGE"),cls:"nav-button "+("image"===this.activeTab?"is-active":"")}),a=e.createEl("button",{text:t$d("EXPORTDIALOG_TAB_PDF"),cls:"nav-button "+("pdf"===this.activeTab?"is-active":"")});t.onclick=()=>{this.activeTab="image",t.addClass("is-active"),a.removeClass("is-active"),this.renderContent()},a.onclick=()=>{this.activeTab="pdf",a.addClass("is-active"),t.removeClass("is-active"),this.renderContent()}}this.contentContainer=this.contentEl.createDiv(),this.buttonContainerRow1=this.contentEl.createDiv({cls:"excalidraw-export-buttons-div"}),this.buttonContainerRow2=this.contentEl.createDiv({cls:"excalidraw-export-buttons-div"}),this.buttonContainerRow2.style.marginTop="10px",this.renderContent()}createSaveSettingsDropdown(){new obsidian_module.Setting(this.contentContainer).setName(t$d("EXPORTDIALOG_SAVE_SETTINGS")).addDropdown((e=>e.addOption("save",t$d("EXPORTDIALOG_SAVE_SETTINGS_SAVE")).addOption("one-time",t$d("EXPORTDIALOG_SAVE_SETTINGS_ONETIME")).setValue(this.saveSettings?"save":"one-time").onChange((e=>{this.saveSettings="save"===e}))))}renderContent(){this.contentContainer.empty(),this.buttonContainerRow1.empty(),this.buttonContainerRow2.empty(),"image"===this.activeTab?(this.createImageSettings(),this.createExportSettings(),this.createImageButtons()):(this.createImageSettings(),this.createPDFSettings(),this.createPDFButton())}createImageSettings(){let e,t;this.contentContainer.createEl("h1",{text:t$d("EXPORTDIALOG_IMAGE_SETTINGS")}),this.contentContainer.createEl("p",{text:t$d("EXPORTDIALOG_IMAGE_DESC")}),this.createSaveSettingsDropdown();const a=()=>{const e=Math.round(this.scale*this.boundingBox.width+2*this.padding),t=Math.round(this.scale*this.boundingBox.height+2*this.padding);return fragWithHTML(`${t$d("EXPORTDIALOG_SIZE_DESC")}
${t$d("EXPORTDIALOG_SCALE_VALUE")} ${this.scale}
${t$d("EXPORTDIALOG_IMAGE_SIZE")} ${e}x${t}`)},i=()=>fragWithHTML(`${t$d("EXPORTDIALOG_CURRENT_PADDING")} ${this.padding}`);t=new obsidian_module.Setting(this.contentContainer).setName(t$d("EXPORTDIALOG_PADDING")).setDesc(i()).addSlider((n=>{n.setLimits(0,100,1).setValue(this.padding).onChange((n=>{this.padding=n,e.setDesc(a()),t.setDesc(i())}))})),e=new obsidian_module.Setting(this.contentContainer).setName(t$d("EXPORTDIALOG_SCALE")).setDesc(a()).addSlider((t=>t.setLimits(.2,7,.1).setValue(this.scale).onChange((t=>{this.scale=t,e.setDesc(a())})))),new obsidian_module.Setting(this.contentContainer).setName(t$d("EXPORTDIALOG_EXPORT_THEME")).addDropdown((e=>e.addOption("light",t$d("EXPORTDIALOG_THEME_LIGHT")).addOption("dark",t$d("EXPORTDIALOG_THEME_DARK")).setValue(this.theme).onChange((e=>{this.theme=e})))),new obsidian_module.Setting(this.contentContainer).setName(t$d("EXPORTDIALOG_BACKGROUND")).addDropdown((e=>e.addOption("transparent",t$d("EXPORTDIALOG_BACKGROUND_TRANSPARENT")).addOption("with-color",t$d("EXPORTDIALOG_BACKGROUND_USE_COLOR")).setValue(this.transparent?"transparent":"with-color").onChange((e=>{this.transparent="transparent"===e})))),this.selectedOnlySetting=new obsidian_module.Setting(this.contentContainer).setName(t$d("EXPORTDIALOG_SELECTED_ELEMENTS")).addDropdown((e=>e.addOption("all",t$d("EXPORTDIALOG_SELECTED_ALL")).addOption("selected",t$d("EXPORTDIALOG_SELECTED_SELECTED")).setValue(this.exportSelectedOnly?"selected":"all").onChange((e=>{this.exportSelectedOnly="selected"===e}))))}createExportSettings(){new obsidian_module.Setting(this.contentContainer).setName(t$d("EXPORTDIALOG_EMBED_SCENE")).addDropdown((e=>e.addOption("embed",t$d("EXPORTDIALOG_EMBED_YES")).addOption("no-embed",t$d("EXPORTDIALOG_EMBED_NO")).setValue(this.embedScene?"embed":"no-embed").onChange((e=>{this.embedScene="embed"===e}))))}createPDFSettings(){if(!DEVICE.isDesktop)return;this.contentContainer.createEl("h1",{text:t$d("EXPORTDIALOG_PDF_SETTINGS")});const e={pageSize:this.pageSize,pageOrientation:this.pageOrientation,fitToPage:this.fitToPage,paperColor:this.paperColor,customPaperColor:this.customPaperColor,alignment:this.alignment,margin:this.margin};new PDFExportSettingsComponent(this.contentContainer,e,(()=>{this.pageSize=e.pageSize,this.pageOrientation=e.pageOrientation,this.fitToPage=e.fitToPage,this.paperColor=e.paperColor,this.customPaperColor=e.customPaperColor,this.alignment=e.alignment,this.margin=e.margin})).render()}createImageButtons(){DEVICE.isDesktop&&(this.buttonContainerRow1.createEl("button",{text:t$d("EXPORTDIALOG_PNGTOFILE"),cls:"excalidraw-export-button"}).onclick=()=>{this.view.exportPNG(this.embedScene,this.hasSelectedElements&&this.exportSelectedOnly),this.close()}),this.buttonContainerRow1.createEl("button",{text:t$d("EXPORTDIALOG_PNGTOVAULT"),cls:"excalidraw-export-button"}).onclick=()=>{this.view.savePNG(this.view.getScene(this.hasSelectedElements&&this.exportSelectedOnly)),this.close()},this.buttonContainerRow1.createEl("button",{text:t$d("EXPORTDIALOG_PNGTOCLIPBOARD"),cls:"excalidraw-export-button"}).onclick=async()=>{this.view.exportPNGToClipboard(this.embedScene,this.hasSelectedElements&&this.exportSelectedOnly),this.close()},DEVICE.isDesktop&&(this.buttonContainerRow2.createEl("button",{text:t$d("EXPORTDIALOG_EXCALIDRAW"),cls:"excalidraw-export-button"}).onclick=()=>{this.view.exportExcalidraw(),this.close()},this.buttonContainerRow2.createEl("button",{text:t$d("EXPORTDIALOG_SVGTOFILE"),cls:"excalidraw-export-button"}).onclick=()=>{this.view.exportSVG(this.embedScene,this.hasSelectedElements&&this.exportSelectedOnly),this.close()}),this.buttonContainerRow2.createEl("button",{text:t$d("EXPORTDIALOG_SVGTOVAULT"),cls:"excalidraw-export-button"}).onclick=()=>{this.view.saveSVG(this.view.getScene(this.hasSelectedElements&&this.exportSelectedOnly)),this.close()},this.buttonContainerRow2.createEl("button",{text:t$d("EXPORTDIALOG_SVGTOCLIPBOARD"),cls:"excalidraw-export-button"}).onclick=async()=>{exportSVGToClipboard(await this.view.getSVG(this.embedScene,this.hasSelectedElements&&this.exportSelectedOnly)),this.close()}}createPDFButton(){this.buttonContainerRow1.createEl("button",{text:t$d("EXPORTDIALOG_SAVE_PDF_SETTINGS"),cls:"excalidraw-export-button"}).onclick=async()=>{await this.plugin.loadSettings(),this.plugin.settings.pdfSettings={pageSize:this.pageSize,pageOrientation:this.pageOrientation,fitToPage:this.fitToPage,paperColor:this.paperColor,customPaperColor:this.customPaperColor,alignment:this.alignment,margin:this.margin},await this.plugin.saveSettings(),new obsidian_module.Notice(t$d("EXPORTDIALOG_SAVE_CONFIRMATION"))},DEVICE.isDesktop&&(this.buttonContainerRow1.createEl("button",{text:t$d("EXPORTDIALOG_PDF"),cls:"excalidraw-export-button"}).onclick=()=>{this.view.exportPDF(this.hasSelectedElements&&this.exportSelectedOnly,this.pageSize,this.pageOrientation),this.close()})}getPaperColor(){switch(this.paperColor){case"white":return"light"===this.theme?"#ffffff":"#000000";case"scene":return this.api.getAppState().viewBackgroundColor;case"custom":return this.customPaperColor;default:return"#ffffff"}}}let REM_VALUE=16;const STYLE_VARIABLES=["--background-modifier-cover","--background-primary-alt","--background-secondary","--background-secondary-alt","--background-modifier-border","--text-normal","--text-muted","--text-accent","--text-accent-hover","--text-faint","--text-highlight-bg","--text-highlight-bg-active","--text-selection","--interactive-normal","--interactive-hover","--interactive-accent","--interactive-accent-hover","--scrollbar-bg","--scrollbar-thumb-bg","--scrollbar-active-thumb-bg","--tab-container-background","--titlebar-background-focused"],EXCALIDRAW_CONTAINER_CLASS="excalidraw__embeddable__outer";class StylesManager{stylesMap=new Map;styleLight;styleDark;plugin;constructor(e){this.plugin=e,e.app.workspace.onLayoutReady((async()=>{await e.awaitInit(),await this.harvestStyles(),getAllWindowDocuments(e.app).forEach((e=>this.copyPropertiesToTheme(e))),e.registerEvent(e.app.workspace.on("css-change",(()=>this.onCSSChange()))),e.registerEvent(e.app.workspace.on("window-open",(e=>this.onWindowOpen(e)))),e.registerEvent(e.app.workspace.on("window-close",(e=>this.onWindowClose(e))))}))}async onCSSChange(){await this.harvestStyles(),getAllWindowDocuments(this.plugin.app).forEach((e=>{this.copyPropertiesToTheme(e)}))}onWindowOpen(e){this.stylesMap.set(e.doc,{light:document.head.querySelector('style[id="excalidraw-embedded-light"]'),dark:document.head.querySelector('style[id="excalidraw-embedded-dark"]')})}onWindowClose(e){this.stylesMap.delete(e.doc)}async harvestStyles(){REM_VALUE=parseInt(window.getComputedStyle(document.body).getPropertyValue("--font-text-size").trim()),isNaN(REM_VALUE)&&(REM_VALUE=16);const e=document.body,t=document.createElement("iframe");t.style.display="none",e.appendChild(t);const a=new Promise((e=>{t.addEventListener("load",(()=>e()))})),i=t.contentWindow.document,n=t.contentWindow;i.open(),i.write(`${document.head.innerHTML}`),i.close(),await a;const r=t.contentWindow.document.body;r.setAttribute("style",e.getAttribute("style")),r.setAttribute("class",e.getAttribute("class"));const s=e=>{r.classList.remove("theme-light"),r.classList.remove("theme-dark"),r.classList.add(e)},o=()=>{const e=n.getComputedStyle(r),t={};for(const a of STYLE_VARIABLES)t[a]=e.getPropertyValue(a);const a=this.plugin.ea.getCM(e.getPropertyValue("--background-primary"));return a.alphaTo(.9),t["--background-primary"]=a.stringHEX(),Object.entries(t).map((([e,t])=>`${e}: ${t} !important;`)).join(" ")};s("theme-light"),this.styleLight=o(),s("theme-dark"),this.styleDark=o(),e.removeChild(t)}copyPropertiesToTheme(e){const t=this.stylesMap.get(e);if(t)t.light.innerHTML=`.${EXCALIDRAW_CONTAINER_CLASS} .theme-light {\n${this.styleLight}\n}`,t.dark.innerHTML=`.${EXCALIDRAW_CONTAINER_CLASS} .theme-dark {\n${this.styleDark}\n}`;else{const t=e.createElement("style");t.type="text/css",t.setAttribute("id","excalidraw-embedded-light"),t.innerHTML=`.${EXCALIDRAW_CONTAINER_CLASS} .theme-light {\n${this.styleLight}\n}`,e.head.appendChild(t);const a=e.createElement("style");a.type="text/css",a.setAttribute("id","excalidraw-embedded-dark"),a.innerHTML=`.${EXCALIDRAW_CONTAINER_CLASS} .theme-dark {\n${this.styleDark}\n}`,e.head.appendChild(a),this.stylesMap.set(e,{light:t,dark:a})}}destroy(){for(const[e,t]of this.stylesMap)e.head.removeChild(t.light),e.head.removeChild(t.dark);this.plugin=null}}const TOOLS_PANEL_WIDTH=()=>14.4*REM_VALUE;class ToolsPanel extends React__namespace.Component{pos1=0;pos2=0;pos3=0;pos4=0;penDownX=0;penDownY=0;previousWidth=0;previousHeight=0;onRightEdge=!1;onBottomEdge=!1;containerRef;view;componentWillUnmount(){this.containerRef.current&&this.props.observer.deref()?.unobserve(this.containerRef.current),this.setState({scriptIconMap:null}),this.containerRef=null,this.view=null}constructor(e){super(e),this.view=e.view.deref();const t=this.view.packages.react;this.containerRef=t.createRef(),this.state={visible:e.visible,top:50,left:200,theme:"dark",excalidrawViewMode:!1,minimized:!1,isDirty:!1,isFullscreen:!1,isPreviewMode:!0,scriptIconMap:{}}}updateScriptIconMap(e){this.setState((()=>({scriptIconMap:e})))}setPreviewMode(e){this.setState((()=>({isPreviewMode:e})))}setFullscreen(e){this.setState((()=>({isFullscreen:e})))}setDirty(e){this.setState((()=>({isDirty:e})))}setExcalidrawViewMode(e){this.setState((()=>({excalidrawViewMode:e})))}toggleVisibility(e){this.setTopCenter(e),this.setState((e=>({visible:!e.visible})))}setTheme(e){this.setState((t=>({theme:e})))}setTopCenter(e){this.setState((()=>({left:(this.containerRef.current.clientWidth-TOOLS_PANEL_WIDTH()-(e?0:TOOLS_PANEL_WIDTH()+4))/2+this.containerRef.current.parentElement.offsetLeft+(e?0:TOOLS_PANEL_WIDTH()+4),top:64+this.containerRef.current.parentElement.offsetTop})))}updatePosition(e=0,t=0){this.setState((()=>{const{offsetTop:a,offsetLeft:i,clientWidth:n,clientHeight:r}=this.containerRef.current.firstElementChild,s=a-e,o=i-t,{clientWidth:l,clientHeight:c,offsetTop:d,offsetLeft:h}=this.containerRef.current.parentElement;return this.previousHeight=c,this.previousWidth=l,this.onBottomEdge=s>=c-r+d,this.onRightEdge=o>=l-n+h,{top:sthis.view.addText(e,t,a)))}actionImportSVG(e){this.view.plugin.importSVGDialog.start(this.view)}actionCropImage(e){this.view.app.commands.executeCommandById("obsidian-excalidraw-plugin:crop-image")}async actionRunScript(e){const t=this.view,a=t.plugin,i=a.app.vault.getAbstractFileByPath(e);i&&i instanceof obsidian_module.TFile&&a.scriptEngine.executeScript(t,await a.app.vault.read(i),a.scriptEngine.getScriptName(i),i)}async actionPinScript(e,t){const a=this.view,i=a.excalidrawAPI,n=a.plugin;await n.loadSettings();const r=n.settings.pinnedScripts.indexOf(e);r>-1?(n.settings.pinnedScripts.splice(r,1),i?.setToast({message:`Pin removed: ${t}`,duration:3e3,closable:!0})):(n.settings.pinnedScripts.push(e),i?.setToast({message:`Pinned: ${t}`,duration:3e3,closable:!0})),await n.saveSettings(),getExcalidrawViews(n.app).forEach((e=>e.updatePinnedScripts()))}islandOnClick(e){e.preventDefault(),Math.abs(this.penDownX-this.pos3)>5||Math.abs(this.penDownY-this.pos4)>5||this.setState((e=>({minimized:!e.minimized})))}islandOnPointerDown(e){const t=e=>{e.preventDefault(),this.pos1=this.pos3-e.clientX,this.pos2=this.pos4-e.clientY,this.pos3=e.clientX,this.pos4=e.clientY,this.updatePosition(this.pos2,this.pos1)},a=()=>{this.view.ownerDocument?.removeEventListener("pointerup",a),this.view.ownerDocument?.removeEventListener("pointermove",t)};e.preventDefault(),this.penDownX=this.pos3=e.clientX,this.penDownY=this.pos4=e.clientY,this.view.ownerDocument.addEventListener("pointerup",a),this.view.ownerDocument.addEventListener("pointermove",t)}render(){return React__namespace.createElement("div",{ref:this.containerRef,className:clsx("excalidraw",{"theme--dark":"dark"===this.state.theme}),style:{width:"100%",height:"100%",position:"absolute",touchAction:"none"}},React__namespace.createElement("div",{className:"Island",style:{top:`${this.state.top}px`,left:`${this.state.left}px`,width:"14.4rem",display:this.state.visible&&!this.state.excalidrawViewMode?"block":"none",height:"fit-content",maxHeight:"400px",zIndex:5}},React__namespace.createElement("div",{style:{height:"26px",width:"100%",cursor:"move"},onClick:this.islandOnClick.bind(this),onPointerDown:this.islandOnPointerDown.bind(this)},React__namespace.createElement("svg",{"aria-hidden":"true",focusable:"false",role:"img",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 228 26"},React__namespace.createElement("path",{stroke:"var(--icon-fill-color)",strokeWidth:"2",d:"M40,7 h148 M40,13 h148 M40,19 h148"}))),React__namespace.createElement("div",{className:"Island App-menu__left scrollbar",style:{maxHeight:"350px",width:"initial","--padding":"0.125rem",display:this.state.minimized?"none":"block"}},React__namespace.createElement("div",{className:"panelColumn"},React__namespace.createElement("fieldset",null,React__namespace.createElement("legend",null,"Utility actions"),React__namespace.createElement("div",{className:"buttonList buttonListIcon"},React__namespace.createElement(ActionButton,{key:"scriptEngine",title:t$d("INSTALL_SCRIPT_BUTTON"),action:this.actionOpenScriptInstallDialog.bind(this),icon:ICONS.scriptEngine}),React__namespace.createElement(ActionButton,{key:"release-notes",title:t$d("READ_RELEASE_NOTES"),action:this.actionOpenReleaseNotes.bind(this),icon:ICONS.releaseNotes}),null===this.state.isPreviewMode?React__namespace.createElement(ActionButton,{key:"convert",title:t$d("CONVERT_FILE"),action:this.actionConvertExcalidrawToMD.bind(this),icon:ICONS.convertFile}):React__namespace.createElement(ActionButton,{key:"viewmode",title:this.state.isPreviewMode?t$d("PARSED"):t$d("RAW"),action:this.actionToggleViewMode.bind(this),icon:this.state.isPreviewMode?ICONS.rawMode:ICONS.parsedMode}),React__namespace.createElement(ActionButton,{key:"tray-mode",title:t$d("TRAY_MODE"),action:this.actionToggleTrayMode.bind(this),icon:ICONS.trayMode}),React__namespace.createElement(ActionButton,{key:"fullscreen",title:this.state.isFullscreen?t$d("EXIT_FULLSCREEN"):t$d("GOTO_FULLSCREEN"),action:this.actionToggleFullscreen.bind(this),icon:this.state.isFullscreen?ICONS.exitFullScreen:ICONS.gotoFullScreen}),React__namespace.createElement(ActionButton,{key:"search",title:t$d("SEARCH"),action:this.actionSearch.bind(this),icon:ICONS.search}),React__namespace.createElement(ActionButton,{key:"ocr",title:t$d("RUN_OCR"),action:this.actionOCR.bind(this),icon:ICONS.ocr}),React__namespace.createElement(ActionButton,{key:"openLink",title:t$d("OPEN_LINK_CLICK"),action:this.actionOpenLink.bind(this),icon:ICONS.openLink}),React__namespace.createElement(ActionButton,{key:"openLinkProperties",title:t$d("OPEN_LINK_PROPS"),action:this.actionOpenLinkProperties.bind(this),icon:ICONS.openLinkProperties}),React__namespace.createElement(ActionButton,{key:"save",title:t$d("FORCE_SAVE"),action:this.actionForceSave.bind(this),icon:saveIcon(this.state.isDirty)}))),React__namespace.createElement("fieldset",null,React__namespace.createElement("legend",null,"Export actions"),React__namespace.createElement("div",{className:"buttonList buttonListIcon"},React__namespace.createElement(ActionButton,{key:"lib",title:t$d("DOWNLOAD_LIBRARY"),action:this.actionExportLibrary.bind(this),icon:ICONS.exportLibrary}),React__namespace.createElement(ActionButton,{key:"exportIMG",title:t$d("EXPORT_IMAGE"),action:this.actionExportImage.bind(this),icon:ICONS.ExportImage}),React__namespace.createElement(ActionButton,{key:"md",title:t$d("OPEN_AS_MD"),action:this.actionOpenAsMarkdown.bind(this),icon:ICONS.switchToMarkdown}),React__namespace.createElement(ActionButton,{key:"link-to-element",title:t$d("INSERT_LINK_TO_ELEMENT"),action:this.actionLinkToElement.bind(this),icon:ICONS.copyElementLink}))),React__namespace.createElement("fieldset",null,React__namespace.createElement("legend",null,"Insert actions"),React__namespace.createElement("div",{className:"buttonList buttonListIcon"},React__namespace.createElement(ActionButton,{key:"anyfile",title:t$d("UNIVERSAL_ADD_FILE"),action:this.actionAddAnyFile.bind(this),icon:ICONS["add-file"]}),React__namespace.createElement(ActionButton,{key:"image",title:t$d("INSERT_IMAGE"),action:this.actionInsertImage.bind(this),icon:ICONS.insertImage}),React__namespace.createElement(ActionButton,{key:"pdf",title:t$d("INSERT_PDF"),action:this.actionInsertPDF.bind(this),icon:ICONS.insertPDF}),React__namespace.createElement(ActionButton,{key:"insertMD",title:t$d("INSERT_MD"),action:this.actionInsertMarkdown.bind(this),icon:ICONS.insertMD}),React__namespace.createElement(ActionButton,{key:"insertBackOfNote",title:t$d("INSERT_CARD"),action:this.actionInsertBackOfNote.bind(this),icon:ICONS.BackOfNote}),React__namespace.createElement(ActionButton,{key:"latex",title:t$d("INSERT_LATEX"),action:this.actionInsertLaTeX.bind(this),icon:ICONS.insertLaTeX}),React__namespace.createElement(ActionButton,{key:"link",title:t$d("INSERT_LINK"),action:this.actionInsertLink.bind(this),icon:ICONS.insertLink}),React__namespace.createElement(ActionButton,{key:"import-svg",title:t$d("IMPORT_SVG"),action:this.actionImportSVG.bind(this),icon:ICONS.importSVG}),React__namespace.createElement(ActionButton,{key:"crop-image",title:t$d("CROP_IMAGE"),action:this.actionCropImage.bind(this),icon:ICONS.Crop}))),this.renderScriptButtons(!1),this.renderScriptButtons(!0)))))}renderScriptButtons(e){if(0===Object.keys(this.state.scriptIconMap).length)return"";const t=`${this.view.plugin.settings.scriptFolderPath}/${SCRIPT_INSTALL_FOLDER}/`,a=a=>e?a.startsWith(t):!a.startsWith(t);if(0===Object.keys(this.state.scriptIconMap).filter((e=>a(e))).length)return"";const i=new Set;Object.keys(this.state.scriptIconMap).filter((e=>a(e))).forEach((e=>i.add(this.state.scriptIconMap[e].group)));const n=Array.from(i).sort(((e,t)=>e>t?1:-1));return n.push(n.shift()),React__namespace.createElement(React__namespace.Fragment,null,n.map(((t,a)=>React__namespace.createElement("fieldset",{key:`${t}-${a}`},React__namespace.createElement("legend",null,e?t:""===t?"User":"User/"+t),React__namespace.createElement("div",{className:"buttonList buttonListIcon"},Object.entries(this.state.scriptIconMap).filter((([e,a])=>a.group===t)).sort().map((([e,t])=>React__namespace.createElement(ActionButton,{key:e,title:t.name,action:this.actionRunScript.bind(this,e),longpress:this.actionPinScript.bind(this,e,t.name),icon:new WeakRef(t.svgString?stringToSVG(t.svgString):ICONS.cog).deref()}))))))))}}const getElementsAtPointer=(e,t,a)=>t.filter((t=>{if(a&&t.type!==a)return!1;if(t.locked)return!1;const[i,n,r,s]=rotatedDimensions(t);return i<=e.x&&i+r>=e.x&&n<=e.y&&n+s>=e.y})).reverse(),getTextElementAtPointer=(e,t)=>{const a=t.excalidrawAPI;if(!a)return{id:null,text:null};const i=getElementsAtPointer(e,a.getSceneElements(),"text");if(0==i.length)return{id:null,text:null};if(1===i.length)return{id:i[0].id,text:i[0].text};const n=i.filter((e=>{const a=t.textMode===TextMode.parsed?t.excalidrawData.getRawText(e.id):e.text;return!!a&&(!!a.match(REG_LINKINDEX_HYPERLINK)||!!REGEX_LINK.getRes(a).next().value)}));return 0==n.length?{id:i[0].id,text:i[0].text}:{id:n[0].id,text:n[0].text}},getImageElementAtPointer=(e,t)=>{const a=t.excalidrawAPI;if(!a)return;const i=getElementsAtPointer(e,a.getSceneElements(),"image");return 0===i.length?{id:null,fileId:null}:i.length>=1?{id:i[0].id,fileId:i[0].fileId}:void 0},getElementWithLinkAtPointer=(e,t)=>{const a=t.excalidrawAPI;if(!a)return;let i=getElementsAtPointer(e,a.getSceneElements()).filter((e=>e.link));if(0===i.length){const n=getElementsAtPointer(e,a.getSceneElements()).map((e=>getBoundTextElementId(e)));i=t.getViewElements().filter((e=>"text"===e.type&&e.link&&n.includes(e.id)))}return 0===i.length?{id:null,text:null}:i.length>=1?{id:i[0].id,text:i[0].link}:void 0};function getTheme(e,t){return"dark"===e.excalidrawData.embeddableTheme?"theme-dark":"light"===e.excalidrawData.embeddableTheme?"theme-light":"auto"===e.excalidrawData.embeddableTheme?"dark"===t?"theme-dark":"theme-light":isObsidianThemeDark()?"theme-dark":"theme-light"}function renderWebView(e,t,a,i){const n=e.startsWith("data:");return DEVICE.isDesktop&&!n?React__namespace.createElement("webview",{ref:e=>t.updateEmbeddableRef(a,e),className:"excalidraw__embeddable",title:"Excalidraw Embedded Content",allowFullScreen:!0,src:e,style:{overflow:"hidden",borderRadius:"var(--embeddable-radius)"}}):React__namespace.createElement("iframe",{ref:e=>t.updateEmbeddableRef(a,e),className:"excalidraw__embeddable",title:"Excalidraw Embedded Content",allowFullScreen:!0,allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",src:n?null:e,style:{overflow:"hidden",borderRadius:"var(--embeddable-radius)"},srcDoc:n?atob(e.split(",")[1]):null})}function RenderObsidianView({mdProps:e,element:t,linkText:a,view:i,containerRef:n,activeEmbeddable:r,theme:s,canvasColor:o}){const{subpath:l,file:c}=processLinkText(a,i);if(!c)return null;const d=i.packages.react,h=d.useRef(null),p=d.useRef(!1),u=d.useRef(!1),m=d.useRef(s),f=d.useRef(t);d.useEffect((()=>{m.current=s}),[s]),d.useEffect((()=>{f.current=t}),[t]);const g=d.useCallback((e=>{u.current&&e.stopPropagation()}),[u.current]);function U(e,t,a,r){if(!a)return;if(!h.current?.hasOwnProperty("node"))return;const s=n.current?.firstElementChild;if(a.useObsidianDefaults)return e?.style.removeProperty("--canvas-background"),s?.style.removeProperty("background-color"),e?.style.removeProperty("--canvas-border"),void s?.style.removeProperty("border-color");const o=i.plugin.ea;if(a.backgroundMatchElement){const i=(a?.backgroundOpacity??50)/100,n=t?.backgroundColor?"transparent"===t.backgroundColor.toLowerCase()?"transparent":o.getCM(t.backgroundColor).alphaTo(i).stringHEX({alpha:!0}):"transparent";"transparent"===n?e?.addClass("transparent"):e?.removeClass("transparent"),e?.style.setProperty("--canvas-background",n),e?.style.setProperty("--background-primary",n),s?.style.setProperty("background-color",n)}else if(!(a.backgroundMatchElement??1)){const t=(a.backgroundOpacity??100)/100,i=a.backgroundMatchCanvas?"transparent"===r.toLowerCase()?"transparent":o.getCM(r).alphaTo(t).stringHEX({alpha:!0}):o.getCM(a.backgroundColor).alphaTo((a.backgroundOpacity??100)/100).stringHEX({alpha:!0});"transparent"===i?e?.addClass("transparent"):e?.removeClass("transparent"),e?.style.setProperty("--canvas-background",i),e?.style.setProperty("--background-primary",i),s?.style.setProperty("background-color",i)}if(a.borderMatchElement){const i=(a?.borderOpacity??50)/100,n=t?.strokeColor?"transparent"===t.strokeColor.toLowerCase()?"transparent":o.getCM(t.strokeColor).alphaTo(i).stringHEX({alpha:!0}):"transparent";e?.style.setProperty("--canvas-border",n),e?.style.setProperty("--canvas-color",n)}else if(!(a?.borderMatchElement??1)){const t=o.getCM(a.borderColor).alphaTo((a.borderOpacity??100)/100).stringHEX({alpha:!0});e?.style.setProperty("--canvas-border",t),e?.style.setProperty("--canvas-color",t)}}d.useEffect((()=>{if(n?.current)return KEYBOARD_EVENT_TYPES.forEach((e=>n.current.addEventListener(e,g))),n.current.addEventListener("click",b),()=>{n?.current&&(KEYBOARD_EVENT_TYPES.forEach((e=>n.current.removeEventListener(e,g))),EXTENDED_EVENT_TYPES.forEach((e=>n.current.removeEventListener(e,g))),n.current.removeEventListener("click",b))}}),[]),d.useEffect((()=>{if(EXTENDED_EVENT_TYPES.forEach((e=>n.current.removeEventListener(e,g))),n?.current)return u.current&&EXTENDED_EVENT_TYPES.forEach((e=>n.current.addEventListener(e,g))),()=>{n?.current&&EXTENDED_EVENT_TYPES.forEach((e=>n.current.removeEventListener(e,g)))}}),[u.current,n.current]),d.useEffect((()=>{c!==i.file&&(u.current||setFileToLocalGraph(i.app,i.file))}),[u.current]),d.useEffect((()=>{if(!n?.current)return;for(;n.current.hasChildNodes();)n.current.removeChild(n.current.lastChild);n.current.parentElement.style.padding="";const a=i.ownerDocument,r=new obsidian_module.WorkspaceSplit(i.app.workspace,"vertical");r.getRoot=()=>i.app.workspace[a===document?"rootSplit":"floatingSplit"],r.getContainer=()=>getContainerForDocument(a),r.containerEl.style.width="100%",r.containerEl.style.height="100%",r.containerEl.style.borderRadius="var(--embeddable-radius)",h.current={leaf:i.app.workspace.createLeafInParent(r,0),node:null,editNode:null};const s=()=>{i.app.workspace.activeLeaf===i.leaf&&DEVICE.isDesktop&&(i.ownerWindow.electronWindow.isAlwaysOnTop()||(i.ownerWindow.electronWindow.setAlwaysOnTop(!0),setTimeout((()=>{i.ownerWindow.electronWindow.setAlwaysOnTop(!1)}),500)))};return l&&i.canvasNodeFactory.isInitialized()?(s(),h.current.node=i.canvasNodeFactory.createFileNote(c,l,n.current,t.id),i.updateEmbeddableLeafRef(t.id,h.current)):(async()=>{await h.current.leaf.openFile(c,{active:!1,state:{mode:"preview"},...l?{eState:{subpath:l}}:{}});const a=h.current.leaf.view?.getViewType();if("canvas"===a&&h.current.leaf.view.canvas?.setReadonly(!0),"markdown"===a&&i.canvasNodeFactory.isInitialized())s(),await h.current.leaf.setViewState({state:{file:null}}),h.current.node=i.canvasNodeFactory.createFileNote(c,l,n.current,t.id),U(n.current,t,e,o);else{const a=r.containerEl.querySelector("div.workspace-leaf");a&&(a.style.borderRadius="var(--embeddable-radius)"),r.containerEl.addClass("mod-visible"),n.current.appendChild(r.containerEl),U(n.current,t,e,o)}patchMobileView(i),i.updateEmbeddableLeafRef(t.id,h.current)})(),()=>{h.current&&(i.canvasNodeFactory.removeNode(h.current.node),h.current.leaf?.detach(),h.current=null)}}),[a,l,n]),d.useEffect((()=>{if(!n.current)return;const t=f.current,a=n.current;a.hasClass("canvas-node")&&U(a,t,e,o)}),[e?.useObsidianDefaults,e?.backgroundMatchCanvas,e?.backgroundMatchElement,e?.backgroundColor,e?.backgroundOpacity,e?.borderMatchElement,e?.borderColor,e?.borderOpacity,f.current,n.current,o]),d.useEffect((()=>{p.current&&(h.current?.node&&(n.current?.addClasses(["is-editing","is-focused"]),i.canvasNodeFactory.stopEditing(h.current.node)),p.current=!1)}),[p.current,h]);const b=d.useCallback((e=>{if(u.current&&e?.stopPropagation(),u.current&&!p.current&&h.current?.leaf)if("markdown"===h.current.leaf.view?.getViewType()){const e=i.excalidrawAPI.getSceneElements().filter((e=>e.id===t.id))[0];if(!e||0!==e.angle)return void new obsidian_module.Notice("Sorry, cannot edit rotated markdown documents");const a=h.current.leaf.view.modes;if(!a)return;h.current.leaf.view.setMode(a.source),p.current=!0,patchMobileView(i)}else if(h.current?.node){const e=getTheme(i,m.current);n.current?.addClasses(["is-editing","is-focused"]),i.canvasNodeFactory.startEditing(h.current.node,e)}}),[h.current?.leaf,t.id,i,m.current]);return h.current&&(h.current.editNode=b),d.useEffect((()=>{const e=e=>{"Enter"===e.key&&b(e)};return document.addEventListener("keydown",e),()=>{document.removeEventListener("keydown",e)}}),[b]),d.useEffect((()=>{if(!n?.current||!h?.current)return;const e=u.current;u.current=r?.element.id===t.id&&"active"===r?.state;const a=h.current?.node;if(e!==u.current)if(c!==i.file&&setFileToLocalGraph(i.app,c),"markdown"===h.current.leaf?.view?.getViewType()){const e=h.current.leaf.view.modes;if(!e)return;if(!u.current)return h.current.leaf.view.setMode(e.preview),void(p.current=!1)}else if(a)if(u.current&&i.plugin.settings.markdownNodeOneClickEditing&&!n.current?.hasClass("is-editing")){const e=getTheme(i,m.current);n.current?.addClasses(["is-editing","is-focused"]),i.canvasNodeFactory.startEditing(a,e)}else n.current?.removeClasses(["is-editing","is-focused"]),i.canvasNodeFactory.stopEditing(a)}),[n,h,u,r?.element,r?.state,t,i,p,i.canvasNodeFactory,m.current]),null}const CustomEmbeddable=({element:e,view:t,appState:a,linkText:i})=>{const n=t.packages.react,r=n.useRef(null),s=getTheme(t,a.theme),o=e.customData?.mdProps||null;return n.createElement("div",{ref:r,style:{width:"100%",height:"100%",borderRadius:"var(--embeddable-radius)",color:"var(--text-normal)"},className:`${s} canvas-node ${o?.filenameVisible&&!o.useObsidianDefaults?"":"excalidraw-mdEmbed-hideFilename"}`},n.createElement(RenderObsidianView,{mdProps:o,element:e,linkText:i,view:t,containerRef:r,activeEmbeddable:a.activeEmbeddable,theme:a.theme,canvasColor:a.viewBackgroundColor}))};class CanvasNodeFactory{view;leaf;canvas;nodes=new Map;initialized=!1;isInitialized=()=>this.initialized;observer;constructor(e){this.view=e}async initialize(){const e=app.internalPlugins.plugins.canvas;e._loaded||await e.load();const t=this.view.ownerDocument,a=new obsidian_module.WorkspaceSplit(this.view.app.workspace,"vertical");a.getRoot=()=>this.view.app.workspace[t===document?"rootSplit":"floatingSplit"],a.getContainer=()=>getContainerForDocument(t),this.leaf=this.view.app.workspace.createLeafInParent(a,0),this.canvas=e.views.canvas(this.leaf).canvas,this.initialized=!0}createFileNote(e,t,a,i){if(!this.initialized)return;t=t??"",this.nodes.has(i)&&(this.canvas.removeNode(this.nodes.get(i)),this.nodes.delete(i));const n=this.canvas.createFileNode({pos:{x:0,y:0},file:e,subpath:t,save:!1});return n.setFilePath(e.path,t),n.render(),n.containerEl.querySelector(".canvas-node-content-blocker")?.remove(),a.appendChild(n.containerEl),this.nodes.set(i,n),n}async waitForEditor(e){let t=0;for(;!e.child.editor?.containerEl?.parentElement?.parentElement&&t++<100;)await new Promise((e=>setTimeout(e,25)));return e.child.editor?.containerEl?.parentElement?.parentElement}setupThemeObserver(e,t,a){const i=e=>{for(const i of e)if("attributes"===i.type&&"class"===i.attributeName){const e=i.target;e.classList.contains(t)&&(e.classList.remove(t),e.classList.add(a))}};this.observer?.disconnect(),this.observer=DEBUGGING?new CustomMutationObserver(i,"CanvasNodeFactory"):new MutationObserver(i),this.observer.observe(e,{attributes:!0})}async startEditing(e,t){if(this.initialized&&e)try{await this.view.setEmbeddableNodeIsEditing(),e.startEditing(),e.isEditing=!0;const a=isObsidianThemeDark()?"theme-dark":"theme-light";if(a===t)return;const i=await this.waitForEditor(e);if(!i)return;i.classList.remove(a),i.classList.add(t),this.setupThemeObserver(i,a,t)}catch(t){console.error("Error starting edit:",t),e.isEditing=!1}}stopEditing(e){if(this.initialized&&e&&e.isEditing)try{this.view.clearEmbeddableNodeIsEditing(),e.child.showPreview(),e.isEditing=!1,this.observer?.disconnect()}catch(e){console.error("Error stopping edit:",e)}}removeNode(e){this.initialized&&e&&(this.nodes.delete(e.file.path),this.canvas.removeNode(e),e.detach())}purgeNodes(){this.initialized&&(this.nodes.forEach((e=>{this.canvas.removeNode(e),e.detach()})),this.nodes.clear())}destroy(){this.purgeNodes(),this.initialized=!1,this.observer?.disconnect(),this.view=null,this.canvas=null,this.leaf=null}}const REG_YOUTUBE=/^(?:http(?:s)?:\/\/)?(?:www\.)?youtu(?:be\.com|\.be)\/(embed\/|watch\?v=|shorts\/|playlist\?list=|embed\/videoseries\?list=)?([a-zA-Z0-9_-]+)(?:\?t=|.*&t=|\?start=|.*&start=)?([a-zA-Z0-9_-]+)?[^\s]*$/,isYouTube=e=>Boolean(e.match(REG_YOUTUBE)),getYouTubeStartAt=e=>{const t=e.match(REG_YOUTUBE);if(t?.[2]){const e=t[3]?parseInt(t[3]):0,a=Math.floor(e/3600),i=Math.floor((e-3600*a)/60),n=e-3600*a-60*i;return 0===a&&0===i&&0===n?"":0===a&&0===i?`${String(n).padStart(2,"0")}`:0===a?`${String(i).padStart(2,"0")}:${String(n).padStart(2,"0")}`:`${String(a).padStart(2,"0")}:${String(i).padStart(2,"0")}:${String(n).padStart(2,"0")}`}return""},isValidYouTubeStart=e=>!!/^[0-9]+$/.test(e)||!!/^[0-9]+:[0-9]+$/.test(e)||!!/^[0-9]+:[0-9]+:[0-9]+$/.test(e)||void 0,updateYouTubeStartTime=(e,t)=>{const a=e.match(REG_YOUTUBE);if(a?.[2]){const i=""===t?"":`t=${timeStringToSeconds(t)}`;let n=e;return a[3]?(n=e.replace(/([?&])t=[a-zA-Z0-9_-]+/,`$1${i}`),n=n.replace(/([?&])start=[a-zA-Z0-9_-]+/,`$1${i}`)):n+=(e.includes("?")?"&":"?")+i,n}return e},timeStringToSeconds=e=>{const t=e.split(":").map(Number),a=t.length;return 1===a?t[0]:2===a?60*t[0]+t[1]:3===a?3600*t[0]+60*t[1]+t[2]:0};class EmbeddalbeMDFileCustomDataSettingsComponent{contentEl;mdCustomData;update;isMDFile;constructor(e,t,a,i=!0){this.contentEl=e,this.mdCustomData=t,this.update=a,this.isMDFile=i,a||(this.update=()=>{})}render(){let e;new obsidian_module.Setting(this.contentEl).setName(t$d("ES_USE_OBSIDIAN_DEFAULTS")).addToggle((t=>t.setValue(this.mdCustomData.useObsidianDefaults).onChange((t=>{this.mdCustomData.useObsidianDefaults=t,e.style.display=t?"none":"block",this.update()})))),this.contentEl.createEl("hr",{cls:"excalidraw-setting-hr"}),e=this.contentEl.createDiv(),e.style.display=this.mdCustomData.useObsidianDefaults?"none":"block";const t=e;this.isMDFile&&new obsidian_module.Setting(t).setName(t$d("ES_FILENAME_VISIBLE")).addToggle((e=>e.setValue(this.mdCustomData.filenameVisible).onChange((e=>{this.mdCustomData.filenameVisible=e})))),t.createEl("h4",{text:t$d("ES_BACKGROUND_HEAD")});const a=t.createDiv({cls:"excalidraw-setting-desc"});let i,n,r;a.textContent=t$d("ES_BACKGROUND_DESC_INFO"),a.addEventListener("click",(()=>{a.textContent===t$d("ES_BACKGROUND_DESC_INFO")?a.textContent=t$d("ES_BACKGROUND_DESC_DETAIL"):a.textContent=t$d("ES_BACKGROUND_DESC_INFO")})),new obsidian_module.Setting(t).setName(t$d("ES_BACKGROUND_MATCH_ELEMENT")).addToggle((e=>{n=e,e.setValue(this.mdCustomData.backgroundMatchElement).onChange((e=>{this.mdCustomData.backgroundMatchElement=e,e?(i.settingEl.style.display="none",this.mdCustomData.backgroundMatchCanvas&&r.setValue(!1)):this.mdCustomData.backgroundMatchCanvas||(i.settingEl.style.display=""),this.update()}))})),new obsidian_module.Setting(t).setName(t$d("ES_BACKGROUND_MATCH_CANVAS")).addToggle((e=>{r=e,e.setValue(this.mdCustomData.backgroundMatchCanvas).onChange((e=>{this.mdCustomData.backgroundMatchCanvas=e,e?(i.settingEl.style.display="none",this.mdCustomData.backgroundMatchElement&&n.setValue(!1)):this.mdCustomData.backgroundMatchElement||(i.settingEl.style.display=""),this.update()}))})),this.mdCustomData.backgroundMatchElement&&this.mdCustomData.backgroundMatchCanvas&&r.setValue(!1),i=new obsidian_module.Setting(t).setName(t$d("ES_BACKGROUND_COLOR")).addColorPicker((e=>e.setValue(this.mdCustomData.backgroundColor).onChange((e=>{this.mdCustomData.backgroundColor=e,this.update()})))),i.settingEl.style.display=this.mdCustomData.backgroundMatchElement||this.mdCustomData.backgroundMatchCanvas?"none":"";const s=e=>fragWithHTML(`Current opacity is ${e}%`),o=new obsidian_module.Setting(t).setName(t$d("ES_BACKGROUND_OPACITY")).setDesc(s(this.mdCustomData.backgroundOpacity)).addSlider((e=>e.setLimits(0,100,5).setValue(this.mdCustomData.backgroundOpacity).onChange((e=>{this.mdCustomData.backgroundOpacity=e,o.setDesc(s(e)),this.update()}))));if(this.isMDFile){let e;t.createEl("h4",{text:t$d("ES_BORDER_HEAD")}),new obsidian_module.Setting(t).setName(t$d("ES_BORDER_MATCH_ELEMENT")).addToggle((t=>t.setValue(this.mdCustomData.borderMatchElement).onChange((t=>{this.mdCustomData.borderMatchElement=t,e.settingEl.style.display=t?"none":"",this.update()})))),e=new obsidian_module.Setting(t).setName(t$d("ES_BORDER_COLOR")).addColorPicker((e=>e.setValue(this.mdCustomData.borderColor).onChange((e=>{this.mdCustomData.borderColor=e,this.update()})))),e.settingEl.style.display=this.mdCustomData.borderMatchElement?"none":"";const a=new obsidian_module.Setting(t).setName(t$d("ES_BORDER_OPACITY")).setDesc(s(this.mdCustomData.borderOpacity)).addSlider((e=>e.setLimits(0,100,5).setValue(this.mdCustomData.borderOpacity).onChange((e=>{this.mdCustomData.borderOpacity=e,a.setDesc(s(e)),this.update()}))))}}}class EmbeddableSettings extends obsidian_module.Modal{plugin;view;file;element;ea;updatedFilepath=null;zoomValue;isYouTube;youtubeStart=null;isMDFile;notExcalidrawIsInternal;isLocalURI;mdCustomData;onKeyDown;constructor(e,t,a,i){if(super(e.app),this.plugin=e,this.view=t,this.file=a,this.element=i,this.ea=getEA(this.view),this.ea.copyViewElementsToEAforEditing([this.element]),this.zoomValue=i.scale[0],this.isYouTube=isYouTube(this.element.link),this.notExcalidrawIsInternal=this.file&&!this.view.plugin.isExcalidrawFile(this.file),this.isMDFile=this.file&&"md"===this.file.extension,this.isLocalURI=this.element.link.startsWith("file://"),isYouTube&&(this.youtubeStart=getYouTubeStartAt(this.element.link)),this.mdCustomData=i.customData?.mdProps??t.plugin.settings.embeddableMarkdownDefaults,!i.customData?.mdProps){const e=this.plugin.ea.getCM(i.backgroundColor);this.mdCustomData.backgroundColor=e.stringHEX({alpha:!1}),this.mdCustomData.backgroundOpacity=i.opacity;const t=this.plugin.ea.getCM(i.strokeColor);this.mdCustomData.borderColor=t.stringHEX({alpha:!1}),this.mdCustomData.borderOpacity=i.opacity}}onOpen(){this.containerEl.classList.add("excalidraw-release"),this.createForm()}onClose(){this.containerEl.removeEventListener("keydown",this.onKeyDown),this.plugin=null,this.view=null,this.file=null,this.element=null,this.ea.destroy(),this.ea=null,this.mdCustomData=null}async createForm(){this.contentEl.createEl("h1",{text:t$d("ES_TITLE")}),this.file&&new obsidian_module.Setting(this.contentEl).setName(t$d("ES_RENAME")).addText((e=>e.setValue(getPathWithoutExtension(this.file)).onChange((async e=>{this.updatedFilepath=e}))));const e=()=>fragWithHTML(`${t$d("ES_ZOOM_100_RELATIVE_DESC")}
Current zoom is ${Math.round(100*this.zoomValue)}%`),t=new obsidian_module.Setting(this.contentEl).setName(t$d("ES_ZOOM")).setDesc(e()).addButton((a=>a.setButtonText(t$d("ES_ZOOM_100")).onClick((()=>{const a=this.view.excalidrawAPI;this.zoomValue=1/a.getAppState().zoom.value,t.setDesc(e())})))).addSlider((a=>a.setLimits(10,400,5).setValue(100*this.zoomValue).onChange((a=>{this.zoomValue=a/100,t.setDesc(e())}))));this.isYouTube&&new obsidian_module.Setting(this.contentEl).setName(t$d("ES_YOUTUBE_START")).setDesc(t$d("ES_YOUTUBE_START_DESC")).addText((e=>e.setValue(this.youtubeStart).onChange((async e=>{this.youtubeStart=e})))),(this.isMDFile||this.notExcalidrawIsInternal)&&(this.contentEl.createEl("h3",{text:t$d("ES_EMBEDDABLE_SETTINGS")}),new EmbeddalbeMDFileCustomDataSettingsComponent(this.contentEl,this.mdCustomData,void 0,this.isMDFile).render()),new obsidian_module.Setting(this.contentEl).addButton((e=>e.setButtonText(t$d("PROMPT_BUTTON_CANCEL")).setTooltip("ESC").onClick(this.close.bind(this)))).addButton((e=>e.setButtonText(t$d("PROMPT_BUTTON_OK")).setTooltip("CTRL/Opt+Enter").setCta().onClick(this.applySettings.bind(this))));const a=e=>{isWinCTRLorMacCMD(e)&&"Enter"===e.key&&this.applySettings()};this.onKeyDown=a,this.containerEl.ownerDocument.addEventListener("keydown",a)}async applySettings(){let e=!1;const t=this.ea.getElement(this.element.id);if(this.updatedFilepath){const a=`${this.updatedFilepath}.${this.file.extension}`;if(a!==this.file.path){const i=splitFolderAndFilename(a),n=getNewUniqueFilepath(this.app.vault,i.filename,i.folderpath);if(this.app.vault.getAbstractFileByPath(n))new obsidian_module.Notice("File rename failed. A file with this name already exists.\n"+n,1e4);else try{await this.app.fileManager.renameFile(this.file,n),t.link=this.element.link.replace(/(\[\[)([^#\]]*)([^\]]*]])/,`$1${this.plugin.app.metadataCache.fileToLinktext(this.file,this.view.file.path,!0)}$3`),e=!0}catch(e){new obsidian_module.Notice("File rename failed. "+e,1e4)}}}this.isYouTube&&this.youtubeStart!==getYouTubeStartAt(this.element.link)&&(e=!0,""===this.youtubeStart||isValidYouTubeStart(this.youtubeStart)?t.link=updateYouTubeStartTime(t.link,this.youtubeStart):new obsidian_module.Notice(t$d("ES_YOUTUBE_START_INVALID"))),!this.isMDFile||this.mdCustomData.backgroundColor===this.element.customData?.backgroundColor&&this.mdCustomData.borderColor===this.element.customData?.borderColor&&this.mdCustomData.backgroundOpacity===this.element.customData?.backgroundOpacity&&this.mdCustomData.borderOpacity===this.element.customData?.borderOpacity&&this.mdCustomData.filenameVisible===this.element.customData?.filenameVisible||(addAppendUpdateCustomData(t,{mdProps:this.mdCustomData}),e=!0),this.zoomValue!==this.element.scale[0]&&(e=!0,t.scale=[this.zoomValue,this.zoomValue]),e?(async()=>{await this.ea.addElementsToView(),this.ea.viewUpdateScene({appState:{},storeAction:"update"}),this.close()})():this.close()}}class EmbeddableMenu{view;containerRef;menuFadeTimeout=0;menuElementId=null;constructor(e,t){this.view=e,this.containerRef=t}destroy(){this.menuFadeTimeout&&(clearTimeout(this.menuFadeTimeout),this.menuFadeTimeout=null),this.view=null,this.containerRef=null,this.updateElement=null,this.handleMouseEnter=null,this.handleMouseLeave=null,this.renderButtons=null}updateElement=(e,t,a)=>{if(!t)return;const i=this.view,n=i.app;if(t=i.excalidrawAPI.getSceneElements().find((e=>e.id===t.id)),!t)return;const r=`[[${n.metadataCache.fileToLinktext(a,i.file.path,"md"===a.extension)}${e}]]`,s=getEA(i);s.copyViewElementsToEAforEditing([t]),s.getElement(t.id).link=r,i.excalidrawData.elementLinks.set(t.id,r),s.addElementsToView(!1,!0,!0).then((()=>s.destroy()))};handleMouseEnter(){clearTimeout(this.menuFadeTimeout),this.containerRef.current?.style.setProperty("opacity","1")}handleMouseLeave(){this.menuFadeTimeout=window.setTimeout((()=>{this.containerRef.current?.style.setProperty("opacity","0.2")}),5e3)}async actionMarkdownSelection(e,t,a,i){this.view.updateScene({appState:{activeEmbeddable:null},storeAction:"update"});const n=(await this.view.app.metadataCache.blockCache.getForFile({isCancelled:()=>!1},e)).blocks.filter((e=>e.display&&"heading"===e.node?.type)).filter((e=>!t||!MD_EX_SECTIONS.includes(e.display)));let r,s;t?(r=n.map((e=>`#${cleanSectionHeading(e.display)}`)),s=n.map((e=>e.display))):(r=[""].concat(n.map((e=>`#${cleanSectionHeading(e.display)}`))),s=[t$d("SHOW_ENTIRE_FILE")].concat(n.map((e=>e.display))));const o=await ScriptEngine.suggester(this.view.app,s,r,"Select section from document");(o||""===o)&&o!==a&&this.updateElement(o,i,e)}async actionMarkdownBlock(e,t,a){if(!e)return;this.view.updateScene({appState:{activeEmbeddable:null},storeAction:"update"});const i=(await this.view.app.metadataCache.blockCache.getForFile({isCancelled:()=>!1},e)).blocks.filter((e=>e.display&&e.node&&("paragraph"===e.node.type||"blockquote"===e.node.type||"listItem"===e.node.type||"table"===e.node.type||"callout"===e.node.type))),n=["entire-file"].concat(i),r=[t$d("SHOW_ENTIRE_FILE")].concat(i.map((e=>`${e.node?.id?`#^${e.node.id}: `:""}${e.display.trim()}`))),s=await ScriptEngine.suggester(this.view.app,r,n,"Select section from document");if(!s)return;if("entire-file"===s){if(""===t)return;return void this.updateElement("",a,e)}let o=s.node.id;if(!o||`#^${o}`!==t){if(!o){const t=s.node?.position?.end?.offset;if(!t)return;o=nanoid();const a=await this.view.app.vault.cachedRead(e);if(!a)return;await this.view.app.vault.modify(e,a.slice(0,t)+` ^${o}`+a.slice(t)),await sleep(200)}this.updateElement(`#^${o}`,a,e)}}actionZoomToElement(e,t){e&&this.view.excalidrawAPI.zoomToFit([e],t??this.view.plugin.settings.zoomToFitMaxLevel,.1)}actionProperties(e,t){e&&new EmbeddableSettings(this.view.plugin,this.view,t,e).open()}actionCrop(e){e&&this.view.app.commands.executeCommandById("obsidian-excalidraw-plugin:crop-image")}actionReload(e,t){e.src=t}actionOpen(e,t){openExternalLink(e.src.startsWith("https://www.youtube.com")||e.src.startsWith("https://player.vimeo.com")?t.link:e.src,this.view.app)}actionCopyCode(e,t){e&&navigator.clipboard.writeText(atob(t.split(",")[1]))}renderButtons(e){const t=this.view,a=t?.excalidrawAPI;if(!a)return null;if(!t.file)return null;const i=e.viewModeEnabled&&!t.allowFrameButtonsInViewMode;if(!e.activeEmbeddable||"active"!==e.activeEmbeddable.state||i)return this.menuElementId=null,this.menuFadeTimeout&&(clearTimeout(this.menuFadeTimeout),this.menuFadeTimeout=0),null;const n=e.activeEmbeddable?.element;this.menuElementId!==n.id&&(this.menuElementId=n.id,this.handleMouseLeave());let r=n.link;if(!r)return null;const s=useDefaultExcalidrawFrame(n);let o=Boolean(n.link?.match(REG_LINKINDEX_HYPERLINK));if(!s&&!o){if(r.startsWith("data:text/html"))o=!0;else{const e=REGEX_LINK.getRes(n.link).next();if(!e||!e.value&&e.done)return null;r=REGEX_LINK.getLink(e),o=Boolean(r.match(REG_LINKINDEX_HYPERLINK))}if(!o){const{subpath:a,file:i}=processLinkText(r,t);if(!i)return;const s="md"===i.extension,o=t.plugin.isExcalidrawFile(i),l="pdf"===i.extension,{x:c,y:d}=sceneCoordsToViewportCoords({sceneX:n.x,sceneY:n.y},e),h=d-2.5*ROOTELEMENTSIZE-e.offsetTop+"px",p=c-e.offsetLeft+"px";return React__namespace.createElement("div",{ref:this.containerRef,className:"embeddable-menu",style:{top:h,left:p,opacity:1},onMouseEnter:()=>this.handleMouseEnter(),onPointerDown:()=>this.handleMouseEnter(),onMouseLeave:()=>this.handleMouseLeave()},React__namespace.createElement("div",{className:"Island",style:{position:"relative",display:"block"}},s&&React__namespace.createElement(ActionButton,{key:"MarkdownSection",title:t$d("NARROW_TO_HEADING"),action:async()=>this.actionMarkdownSelection(i,o,a,n),icon:ICONS.ZoomToSection}),s&&!o&&React__namespace.createElement(ActionButton,{key:"MarkdownBlock",title:t$d("NARROW_TO_BLOCK"),action:async()=>this.actionMarkdownBlock(i,a,n),icon:ICONS.ZoomToBlock}),React__namespace.createElement(ActionButton,{key:"ZoomToElement",title:t$d("ZOOM_TO_FIT"),action:()=>this.actionZoomToElement(n,30),icon:ICONS.ZoomToSelectedElement}),React__namespace.createElement(ActionButton,{key:"Properties",title:t$d("PROPERTIES"),action:()=>this.actionProperties(n,i),icon:ICONS.Properties}),l&&React__namespace.createElement(ActionButton,{key:"Crop",title:t$d("CROP_PAGE"),action:()=>this.actionCrop(n),icon:ICONS.Crop})))}}if(o||s){const i=s?a.getHTMLIFrameElement(n.id):t.getEmbeddableElementById(n.id);if(!i||!i.contentWindow)return null;const{x:o,y:l}=sceneCoordsToViewportCoords({sceneX:n.x,sceneY:n.y},e),c=l-2.5*ROOTELEMENTSIZE-e.offsetTop+"px",d=o-e.offsetLeft+"px";return React__namespace.createElement("div",{ref:this.containerRef,className:"embeddable-menu",style:{top:c,left:d,opacity:1},onMouseEnter:()=>this.handleMouseEnter(),onPointerDown:()=>this.handleMouseEnter(),onMouseLeave:()=>this.handleMouseLeave()},React__namespace.createElement("div",{className:"Island",style:{position:"relative",display:"block"}},i.src!==r&&!i.src.startsWith("https://www.youtube.com")&&!i.src.startsWith("https://player.vimeo.com")&&React__namespace.createElement(ActionButton,{key:"Reload",title:t$d("RELOAD"),action:()=>this.actionReload(i,r),icon:ICONS.Reload}),React__namespace.createElement(ActionButton,{key:"Open",title:t$d("OPEN_IN_BROWSER"),action:()=>this.actionOpen(i,n),icon:ICONS.Globe}),React__namespace.createElement(ActionButton,{key:"ZoomToElement",title:t$d("ZOOM_TO_FIT"),action:()=>this.actionZoomToElement(n),icon:ICONS.ZoomToSelectedElement}),React__namespace.createElement(ActionButton,{key:"Properties",title:t$d("PROPERTIES"),action:()=>this.actionProperties(n,null),icon:ICONS.Properties}),r?.startsWith("data:text/html")&&React__namespace.createElement(ActionButton,{key:"CopyCode",title:t$d("COPYCODE"),action:()=>this.actionCopyCode(n,r),icon:ICONS.Copy})))}}}const handleImageEditPrompt=async e=>{const t=window.ExcalidrawAutomate.plugin,{openAIAPIToken:a,openAIImageEditsURL:i}=t.settings,{image:n,text:r,imageGenerationProperties:s}=e,o=new FormData;if(o.append("model","dall-e-2"),""!==r.trim()&&o.append("prompt",r),n){const e=await fetch(n).then((e=>e.blob()));o.append("image",e,"image.png")}if(s.mask){const e=await fetch(s.mask).then((e=>e.blob()));o.append("mask",e,"masik.png")}s.size&&o.append("size",s.size),s.n&&o.append("n",String(s.n));try{const e=await fetch(i,{method:"post",body:o,headers:{Authorization:`Bearer ${a}`}});return e?{status:e.status,headers:e.headers,text:null,json:await e.json(),arrayBuffer:null}:null}catch(e){console.log(e)}return null},handleGenericPrompt=async e=>{const t=window.ExcalidrawAutomate.plugin,{openAIAPIToken:a,openAIDefaultTextModel:i,openAIDefaultVisionModel:n,openAIURL:r,openAIImageGenerationURL:s,openAIDefaultImageGenerationModel:o}=t.settings,{image:l,text:c,instruction:d,systemPrompt:h,imageGenerationProperties:p}=e,u=Boolean(p);let m;switch(u?"dall-e":l?"image":"text"){case"text":m={model:i,max_tokens:4096,messages:[...h&&""!==h.trim()?[{role:"system",content:h}]:[],{role:"user",content:c},...d&&""!==d.trim()?[{role:"user",content:d}]:[]]};break;case"image":m={model:n,max_tokens:4096,messages:[...h&&""!==h.trim()?[{role:"system",content:h}]:[],{role:"user",content:[{type:"image_url",image_url:l},...c?[c]:[],...d&&""!==d.trim()?[d]:[]]}]};break;case"dall-e":m={model:o,prompt:c,...p};break;default:return null}try{const e=await fetch(u?s:r,{method:"post",contentType:"application/json",body:JSON.stringify(m),headers:{"Content-Type":"application/json",Authorization:`Bearer ${a}`}});return e?{status:e.status,headers:e.headers,text:null,json:await e.json(),arrayBuffer:null}:null}catch(e){console.log(e)}return null},postOpenAI=async e=>{const t=window.ExcalidrawAutomate.plugin,{openAIAPIToken:a}=t.settings,{image:i,imageGenerationProperties:n}=e,r=Boolean(n)&&(Boolean(n.mask)||Boolean(i));return""===a?(new obsidian_module.Notice("OpenAI API Token is not set. Please set it in plugin settings."),null):r?await handleImageEditPrompt(e):await handleGenericPrompt(e)},extractCodeBlocks=e=>{if(!e)return[];e=e.replaceAll("\r\n","\n").replaceAll("\r","\n");const t=[],a=/```([a-zA-Z0-9]*)\n([\s\S]+?)```/g;let i;for(;null!==(i=a.exec(e));){const e=i[1]??"",a=i[2].trim();t.push({data:a,type:e})}return t},errorHTML=e=>`\n \n
\n
There was an error during generation
\n
\n
\n
${e}
\n
\n \n `;class SelectCard extends obsidian_module.FuzzySuggestModal{app;view;sections;constructor(e,t,a){super(e),this.app=e,this.view=t,this.sections=a,this.limit=20,this.setInstructions([{command:t$d("TYPE_SECTION"),purpose:""}]),this.inputEl.onkeyup=e=>{if("Enter"==e.key&&this.containerEl.innerText.includes(t$d("EMPTY_SECTION_MESSAGE"))){const e=this.inputEl.value;if(""===e||MD_EX_SECTIONS.includes(e))return new obsidian_module.Notice(t$d("INVALID_SECTION_NAME")),void this.close();addBackOfTheNoteCard(this.view,e),this.close()}}}getItems(){return this.sections}getItemText(e){return e}onChooseItem(e){const t=getEA(this.view),a=t.addEmbeddable(0,0,400,500,`[[${this.view.file.path}#${e}]]`);(async()=>{await t.addElementsToView(!0,!1,!0),t.selectElementsInView([a]),t.destroy()})()}start(){this.emptyStateText=t$d("EMPTY_SECTION_MESSAGE"),this.setPlaceholder(t$d("SELECT_SECTION_OR_TYPE_NEW")),this.open()}}const SYSTEM_PROMPT='You are a skilled front-end developer who builds interactive prototypes from wireframes, and is an expert at CSS Grid and Flex design.\nYour role is to transform low-fidelity wireframes into working front-end HTML code.\nYOU MUST FOLLOW FOLLOWING RULES:\n- Use HTML, CSS, JavaScript to build a responsive, accessible, polished prototype\n- Leverage Tailwind for styling and layout (import as script

T4$dTze^~_y8`ldn-RHX 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 F|Jkq2J}v+N literal 0 HcmV?d00001 From 876b6b73aa77bd654937006e20079a2811cee2a8 Mon Sep 17 00:00:00 2001 From: arc Date: Thu, 9 Jan 2025 14:12:03 -0700 Subject: [PATCH 0745/1027] vault backup: 2025-01-09 14:12:03 --- education/computer engineering/ECE2700/Binary Logic.md | 2 ++ education/computer engineering/ECE2700/Boolean Algebra.md | 1 - 2 files changed, 2 insertions(+), 1 deletion(-) delete mode 100644 education/computer engineering/ECE2700/Boolean Algebra.md diff --git a/education/computer engineering/ECE2700/Binary Logic.md b/education/computer engineering/ECE2700/Binary Logic.md index e69de29..4a74740 100644 --- a/education/computer engineering/ECE2700/Binary Logic.md +++ b/education/computer engineering/ECE2700/Binary Logic.md @@ -0,0 +1,2 @@ + +![](./assets/logic-gates.jpeg) \ No newline at end of file diff --git a/education/computer engineering/ECE2700/Boolean Algebra.md b/education/computer engineering/ECE2700/Boolean Algebra.md deleted file mode 100644 index 085a864..0000000 --- a/education/computer engineering/ECE2700/Boolean Algebra.md +++ /dev/null @@ -1 +0,0 @@ -![](./assets/logic-gate) \ No newline at end of file From 40e6e9b8b5ea42249c478ee529cc923e4361ba27 Mon Sep 17 00:00:00 2001 From: arc Date: Fri, 10 Jan 2025 09:17:02 -0700 Subject: [PATCH 0746/1027] vault backup: 2025-01-10 09:17:02 --- education/computer engineering/ECE2700/Binary Logic.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/education/computer engineering/ECE2700/Binary Logic.md b/education/computer engineering/ECE2700/Binary Logic.md index 4a74740..ac05999 100644 --- a/education/computer engineering/ECE2700/Binary Logic.md +++ b/education/computer engineering/ECE2700/Binary Logic.md @@ -1,2 +1,9 @@ -![](./assets/logic-gates.jpeg) \ No newline at end of file +![](./assets/logic-gates.jpeg) +# NOT Gate +A binary NOT gate has a single input, and inverts that input. + +## Truth Table +| $x$ | $y$ | +| --- | --- | +| | | \ No newline at end of file From 081bff2367222e4a3df2a96300b2d67f21c1d0e3 Mon Sep 17 00:00:00 2001 From: arc Date: Fri, 10 Jan 2025 09:22:02 -0700 Subject: [PATCH 0747/1027] vault backup: 2025-01-10 09:22:02 --- .../computer engineering/ECE2700/Binary Logic.md | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/education/computer engineering/ECE2700/Binary Logic.md b/education/computer engineering/ECE2700/Binary Logic.md index ac05999..8f7f7d1 100644 --- a/education/computer engineering/ECE2700/Binary Logic.md +++ b/education/computer engineering/ECE2700/Binary Logic.md @@ -6,4 +6,18 @@ A binary NOT gate has a single input, and inverts that input. ## Truth Table | $x$ | $y$ | | --- | --- | -| | | \ No newline at end of file +| 0 | 1 | +| 1 | 0 | +## Boolean Expression +A NOT operation is mathematically expressed using a bar: +$$ y = \bar{x} $$ +# AND Gate +An AND gate will only output a 1 if *both* inputs are a one. + +## Truth Table +| $x_1$ | $x_2$ | $y$ | +| ----- | ----- | --- | +| 0 | 0 | 0 | +| 0 | 1 | 0 | +| 1 | 0 | 0 | +| 1 | 1 | 1 | From c5cfc463c84f01401e98ae4d703fd262c44c4dc7 Mon Sep 17 00:00:00 2001 From: arc Date: Fri, 10 Jan 2025 09:27:02 -0700 Subject: [PATCH 0748/1027] vault backup: 2025-01-10 09:27:02 --- .../computer engineering/ECE2700/Binary Logic.md | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/education/computer engineering/ECE2700/Binary Logic.md b/education/computer engineering/ECE2700/Binary Logic.md index 8f7f7d1..8f2c669 100644 --- a/education/computer engineering/ECE2700/Binary Logic.md +++ b/education/computer engineering/ECE2700/Binary Logic.md @@ -8,7 +8,7 @@ A binary NOT gate has a single input, and inverts that input. | --- | --- | | 0 | 1 | | 1 | 0 | -## Boolean Expression +## Mathematical Expression A NOT operation is mathematically expressed using a bar: $$ y = \bar{x} $$ # AND Gate @@ -21,3 +21,12 @@ An AND gate will only output a 1 if *both* inputs are a one. | 0 | 1 | 0 | | 1 | 0 | 0 | | 1 | 1 | 1 | +## Mathematical Expression +An AND operation is mathematically expressed using a times symbol, or with no symbol at all +$$ y = x_1 \cdot x_2 = x_1x_2$$ + +# NAND Gate +A NAND gate outputs a 1 *unless* both inputs are enabled. + +## Truth Table +| \ No newline at end of file From c0fd3b66ab5b9a81f1862ab6dcb17f9ce2590d46 Mon Sep 17 00:00:00 2001 From: arc Date: Fri, 10 Jan 2025 09:32:02 -0700 Subject: [PATCH 0749/1027] vault backup: 2025-01-10 09:32:02 --- .../computer engineering/ECE2700/Binary Logic.md | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/education/computer engineering/ECE2700/Binary Logic.md b/education/computer engineering/ECE2700/Binary Logic.md index 8f2c669..0856cdb 100644 --- a/education/computer engineering/ECE2700/Binary Logic.md +++ b/education/computer engineering/ECE2700/Binary Logic.md @@ -22,11 +22,20 @@ An AND gate will only output a 1 if *both* inputs are a one. | 1 | 0 | 0 | | 1 | 1 | 1 | ## Mathematical Expression -An AND operation is mathematically expressed using a times symbol, or with no symbol at all +An AND operation is mathematically expressed using a times symbol, or with no symbol at all: $$ y = x_1 \cdot x_2 = x_1x_2$$ # NAND Gate A NAND gate outputs a 1 *unless* both inputs are enabled. ## Truth Table -| \ No newline at end of file +| $x_1$ | $x_2$ | $y$ | +| ----- | ----- | --- | +| 0 | 0 | 1 | +| 0 | 1 | 1 | +| 1 | 0 | 1 | +| 1 | 1 | 0 | +## Mathematical Expression +A NAND operation is mathematically expressed using a bar over an AND operation: +$$ y = \overline{x_1 \cdot x_2}$$ + From 905e49b4d7dab27a927482a26b693b0552dde9f3 Mon Sep 17 00:00:00 2001 From: arc Date: Fri, 10 Jan 2025 09:37:02 -0700 Subject: [PATCH 0750/1027] vault backup: 2025-01-10 09:37:02 --- .../computer engineering/ECE2700/Binary Logic.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/education/computer engineering/ECE2700/Binary Logic.md b/education/computer engineering/ECE2700/Binary Logic.md index 0856cdb..13a6297 100644 --- a/education/computer engineering/ECE2700/Binary Logic.md +++ b/education/computer engineering/ECE2700/Binary Logic.md @@ -39,3 +39,17 @@ A NAND gate outputs a 1 *unless* both inputs are enabled. A NAND operation is mathematically expressed using a bar over an AND operation: $$ y = \overline{x_1 \cdot x_2}$$ + +# OR Gate +An OR gate outputs a 1 if either or both inputs are enabled. +## Truth Table +| $x_1$ | $x_2$ | $y$ | +| ----- | ----- | --- | +| 0 | 0 | 0 | +| 0 | 1 | 1 | +| 1 | 0 | 1 | +| 1 | 1 | 1 | +## Mathematical Expression +A mathematical OR is notated with a $+$ symbol. + +$$ y = x_1 + x_2 $$ From 132af086cbc4bc9e188813c1bb94a0815873ad67 Mon Sep 17 00:00:00 2001 From: arc Date: Fri, 10 Jan 2025 09:42:03 -0700 Subject: [PATCH 0751/1027] vault backup: 2025-01-10 09:42:02 --- .../computer engineering/ECE2700/Binary Logic.md | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/education/computer engineering/ECE2700/Binary Logic.md b/education/computer engineering/ECE2700/Binary Logic.md index 13a6297..96c8375 100644 --- a/education/computer engineering/ECE2700/Binary Logic.md +++ b/education/computer engineering/ECE2700/Binary Logic.md @@ -1,7 +1,7 @@ ![](./assets/logic-gates.jpeg) # NOT Gate -A binary NOT gate has a single input, and inverts that input. +A binary NOT gate has a single input, and inverts that input (output is not the input). ## Truth Table | $x$ | $y$ | @@ -12,7 +12,7 @@ A binary NOT gate has a single input, and inverts that input. A NOT operation is mathematically expressed using a bar: $$ y = \bar{x} $$ # AND Gate -An AND gate will only output a 1 if *both* inputs are a one. +An AND gate will only output a 1 if *both* inputs are a one (input one *and* input two are enabled). ## Truth Table | $x_1$ | $x_2$ | $y$ | @@ -26,7 +26,7 @@ An AND operation is mathematically expressed using a times symbol, or with no sy $$ y = x_1 \cdot x_2 = x_1x_2$$ # NAND Gate -A NAND gate outputs a 1 *unless* both inputs are enabled. +A NAND gate outputs a 1 *unless* both inputs are enabled (input one *and* input two are *not* enabled). ## Truth Table | $x_1$ | $x_2$ | $y$ | @@ -41,7 +41,7 @@ $$ y = \overline{x_1 \cdot x_2}$$ # OR Gate -An OR gate outputs a 1 if either or both inputs are enabled. +An OR gate outputs a 1 if either or both inputs are enabled (if input one *or* input two is enabled). ## Truth Table | $x_1$ | $x_2$ | $y$ | | ----- | ----- | --- | @@ -53,3 +53,6 @@ An OR gate outputs a 1 if either or both inputs are enabled. A mathematical OR is notated with a $+$ symbol. $$ y = x_1 + x_2 $$ +# NOR Gate +A NOR gate outputs a one if neither gate is enabled. + From 61103fb0d4181983b4db4ba2f699b5dd8022de94 Mon Sep 17 00:00:00 2001 From: arc Date: Fri, 10 Jan 2025 09:52:03 -0700 Subject: [PATCH 0752/1027] vault backup: 2025-01-10 09:52:03 --- .obsidian/plugins/obsidian-git/data.json | 27 ------------------- .../ECE2700/Binary Logic.md | 9 +++++++ 2 files changed, 9 insertions(+), 27 deletions(-) diff --git a/.obsidian/plugins/obsidian-git/data.json b/.obsidian/plugins/obsidian-git/data.json index bef4c6e..e69de29 100644 --- a/.obsidian/plugins/obsidian-git/data.json +++ b/.obsidian/plugins/obsidian-git/data.json @@ -1,27 +0,0 @@ -{ - "commitMessage": "vault backup: {{date}}", - "autoCommitMessage": "vault backup: {{date}}", - "commitDateFormat": "YYYY-MM-DD HH:mm:ss", - "autoSaveInterval": 5, - "autoPushInterval": 0, - "autoPullInterval": 5, - "autoPullOnBoot": true, - "disablePush": false, - "pullBeforePush": true, - "disablePopups": false, - "listChangedFilesInMessageBody": false, - "showStatusBar": true, - "updateSubmodules": false, - "syncMethod": "merge", - "customMessageOnAutoBackup": false, - "autoBackupAfterFileChange": false, - "treeStructure": false, - "refreshSourceControl": true, - "basePath": "", - "differentIntervalCommitAndPush": false, - "changedFilesInStatusBar": false, - "showedMobileNotice": true, - "refreshSourceControlTimer": 7000, - "showBranchStatusBar": true, - "setLastSaveToLastCommit": false -} \ No newline at end of file diff --git a/education/computer engineering/ECE2700/Binary Logic.md b/education/computer engineering/ECE2700/Binary Logic.md index 96c8375..c31ddde 100644 --- a/education/computer engineering/ECE2700/Binary Logic.md +++ b/education/computer engineering/ECE2700/Binary Logic.md @@ -55,4 +55,13 @@ A mathematical OR is notated with a $+$ symbol. $$ y = x_1 + x_2 $$ # NOR Gate A NOR gate outputs a one if neither gate is enabled. +## Truth Table +| $x_1$ | $x_2$ | $y_1$ | +| ----- | ----- | ----- | +| 0 | 0 | 1 | +| 0 | 1 | 0 | +| 1 | 0 | 0 | +| 1 | 1 | 0 | +## Mathematical Expression +$$ y = \overline{x_1 + x_2} $$ \ No newline at end of file From f602401dc88edba025c1efbf342ab1924ac2ba2c Mon Sep 17 00:00:00 2001 From: arc Date: Fri, 10 Jan 2025 09:57:03 -0700 Subject: [PATCH 0753/1027] vault backup: 2025-01-10 09:57:03 --- .obsidian/plugins/obsidian-git/data.json | 27 +++++++++++++++++++ .../ECE2700/Binary Logic.md | 18 ++++++++++++- 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/.obsidian/plugins/obsidian-git/data.json b/.obsidian/plugins/obsidian-git/data.json index e69de29..bef4c6e 100644 --- a/.obsidian/plugins/obsidian-git/data.json +++ b/.obsidian/plugins/obsidian-git/data.json @@ -0,0 +1,27 @@ +{ + "commitMessage": "vault backup: {{date}}", + "autoCommitMessage": "vault backup: {{date}}", + "commitDateFormat": "YYYY-MM-DD HH:mm:ss", + "autoSaveInterval": 5, + "autoPushInterval": 0, + "autoPullInterval": 5, + "autoPullOnBoot": true, + "disablePush": false, + "pullBeforePush": true, + "disablePopups": false, + "listChangedFilesInMessageBody": false, + "showStatusBar": true, + "updateSubmodules": false, + "syncMethod": "merge", + "customMessageOnAutoBackup": false, + "autoBackupAfterFileChange": false, + "treeStructure": false, + "refreshSourceControl": true, + "basePath": "", + "differentIntervalCommitAndPush": false, + "changedFilesInStatusBar": false, + "showedMobileNotice": true, + "refreshSourceControlTimer": 7000, + "showBranchStatusBar": true, + "setLastSaveToLastCommit": false +} \ No newline at end of file diff --git a/education/computer engineering/ECE2700/Binary Logic.md b/education/computer engineering/ECE2700/Binary Logic.md index c31ddde..c1dd14f 100644 --- a/education/computer engineering/ECE2700/Binary Logic.md +++ b/education/computer engineering/ECE2700/Binary Logic.md @@ -63,5 +63,21 @@ A NOR gate outputs a one if neither gate is enabled. | 1 | 0 | 0 | | 1 | 1 | 0 | ## Mathematical Expression +A NOR operation is expressed using a bar over an OR operation. +$$ y = \overline{x_1 + x_2} $$ +# XOR Gate +An XOR gate is on if one input is enabled, but *not* both (exclusively one or the other). -$$ y = \overline{x_1 + x_2} $$ \ No newline at end of file +## Truth Table +| $x_1$ | $x_2$ | $y$ | +| ----- | ----- | --- | +| 0 | 0 | 0 | +| 0 | 1 | 1 | +| 1 | 0 | 1 | +| 1 | 1 | 0 | +## Mathematical Expression +An XOR operation is expressed using a circle around an addition symbol: +$$ y = x_1 \oplus x_2 $$ + +## XNOR Gate +An XNOR gate is on From dcc08d7492e9a8e5bb8bec403edddaf45f979327 Mon Sep 17 00:00:00 2001 From: arc Date: Fri, 10 Jan 2025 10:02:03 -0700 Subject: [PATCH 0754/1027] vault backup: 2025-01-10 10:02:03 --- .../computer engineering/ECE2700/Binary Logic.md | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/education/computer engineering/ECE2700/Binary Logic.md b/education/computer engineering/ECE2700/Binary Logic.md index c1dd14f..d663ecc 100644 --- a/education/computer engineering/ECE2700/Binary Logic.md +++ b/education/computer engineering/ECE2700/Binary Logic.md @@ -80,4 +80,16 @@ An XOR operation is expressed using a circle around an addition symbol: $$ y = x_1 \oplus x_2 $$ ## XNOR Gate -An XNOR gate is on +An XNOR gate is on if neither input is enabled, or both inputs are enabled. + +## Truth Table + +| $x_1$ | $x_2$ | $y$ | +| ----- | ----- | --- | +| 0 | 0 | 1 | +| 0 | 1 | 0 | +| 1 | 0 | 0 | +| 1 | 1 | 1 | +## Mathematical Expression +An XNOR operation is expressed using a bar over an XOR operation: +$$ y = \overline{x_1 \oplus x_2} $$ From 3807a75b5bebd07dab39015d410bfcdb1157973b Mon Sep 17 00:00:00 2001 From: arc Date: Fri, 10 Jan 2025 10:46:30 -0700 Subject: [PATCH 0755/1027] vault backup: 2025-01-10 10:46:30 --- .obsidian/plugins/obsidian-git/data.json | 27 ------------------------ 1 file changed, 27 deletions(-) diff --git a/.obsidian/plugins/obsidian-git/data.json b/.obsidian/plugins/obsidian-git/data.json index bef4c6e..e69de29 100644 --- a/.obsidian/plugins/obsidian-git/data.json +++ b/.obsidian/plugins/obsidian-git/data.json @@ -1,27 +0,0 @@ -{ - "commitMessage": "vault backup: {{date}}", - "autoCommitMessage": "vault backup: {{date}}", - "commitDateFormat": "YYYY-MM-DD HH:mm:ss", - "autoSaveInterval": 5, - "autoPushInterval": 0, - "autoPullInterval": 5, - "autoPullOnBoot": true, - "disablePush": false, - "pullBeforePush": true, - "disablePopups": false, - "listChangedFilesInMessageBody": false, - "showStatusBar": true, - "updateSubmodules": false, - "syncMethod": "merge", - "customMessageOnAutoBackup": false, - "autoBackupAfterFileChange": false, - "treeStructure": false, - "refreshSourceControl": true, - "basePath": "", - "differentIntervalCommitAndPush": false, - "changedFilesInStatusBar": false, - "showedMobileNotice": true, - "refreshSourceControlTimer": 7000, - "showBranchStatusBar": true, - "setLastSaveToLastCommit": false -} \ No newline at end of file From 03fefacc454e2d2fc238fffd33c431196a14f1d2 Mon Sep 17 00:00:00 2001 From: arc Date: Sun, 12 Jan 2025 17:30:22 -0700 Subject: [PATCH 0756/1027] vault backup: 2025-01-12 17:30:22 --- .obsidian/plugins/obsidian-git/data.json | 27 ++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/.obsidian/plugins/obsidian-git/data.json b/.obsidian/plugins/obsidian-git/data.json index e69de29..bef4c6e 100644 --- a/.obsidian/plugins/obsidian-git/data.json +++ b/.obsidian/plugins/obsidian-git/data.json @@ -0,0 +1,27 @@ +{ + "commitMessage": "vault backup: {{date}}", + "autoCommitMessage": "vault backup: {{date}}", + "commitDateFormat": "YYYY-MM-DD HH:mm:ss", + "autoSaveInterval": 5, + "autoPushInterval": 0, + "autoPullInterval": 5, + "autoPullOnBoot": true, + "disablePush": false, + "pullBeforePush": true, + "disablePopups": false, + "listChangedFilesInMessageBody": false, + "showStatusBar": true, + "updateSubmodules": false, + "syncMethod": "merge", + "customMessageOnAutoBackup": false, + "autoBackupAfterFileChange": false, + "treeStructure": false, + "refreshSourceControl": true, + "basePath": "", + "differentIntervalCommitAndPush": false, + "changedFilesInStatusBar": false, + "showedMobileNotice": true, + "refreshSourceControlTimer": 7000, + "showBranchStatusBar": true, + "setLastSaveToLastCommit": false +} \ No newline at end of file From 1e4b6518c8a41c2566370d38988bbf55f6f9240f Mon Sep 17 00:00:00 2001 From: arc Date: Sun, 12 Jan 2025 17:35:21 -0700 Subject: [PATCH 0757/1027] vault backup: 2025-01-12 17:35:21 --- education/computer engineering/ECE2700/Digital Hardware.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/education/computer engineering/ECE2700/Digital Hardware.md b/education/computer engineering/ECE2700/Digital Hardware.md index a30948f..51fc4b2 100644 --- a/education/computer engineering/ECE2700/Digital Hardware.md +++ b/education/computer engineering/ECE2700/Digital Hardware.md @@ -47,7 +47,7 @@ As an example, the below table shows how one might convert from $(857)_{10}$ to | $3 / 2 = 1$ | $1$ | | $1 / 2 = 0$ | $1$ | -The final answer is $1101011001$. +The final answer is $1101011001$. The least significant bit is the remainder of the first division operation, and the most significant bit is the remainder of the last operation. # Definitions - **Xtor** is an abbreviation for *transistor* - **Moore's Law** states that the number of transistors on a chip doubles every two years. From 1531a0727d6913a09c01a8a2307075473813dc9c Mon Sep 17 00:00:00 2001 From: arc Date: Sun, 12 Jan 2025 18:10:21 -0700 Subject: [PATCH 0758/1027] vault backup: 2025-01-12 18:10:21 --- .obsidian/plugins/obsidian-git/data.json | 27 ------------------------ 1 file changed, 27 deletions(-) diff --git a/.obsidian/plugins/obsidian-git/data.json b/.obsidian/plugins/obsidian-git/data.json index bef4c6e..e69de29 100644 --- a/.obsidian/plugins/obsidian-git/data.json +++ b/.obsidian/plugins/obsidian-git/data.json @@ -1,27 +0,0 @@ -{ - "commitMessage": "vault backup: {{date}}", - "autoCommitMessage": "vault backup: {{date}}", - "commitDateFormat": "YYYY-MM-DD HH:mm:ss", - "autoSaveInterval": 5, - "autoPushInterval": 0, - "autoPullInterval": 5, - "autoPullOnBoot": true, - "disablePush": false, - "pullBeforePush": true, - "disablePopups": false, - "listChangedFilesInMessageBody": false, - "showStatusBar": true, - "updateSubmodules": false, - "syncMethod": "merge", - "customMessageOnAutoBackup": false, - "autoBackupAfterFileChange": false, - "treeStructure": false, - "refreshSourceControl": true, - "basePath": "", - "differentIntervalCommitAndPush": false, - "changedFilesInStatusBar": false, - "showedMobileNotice": true, - "refreshSourceControlTimer": 7000, - "showBranchStatusBar": true, - "setLastSaveToLastCommit": false -} \ No newline at end of file From bd133a2216ae2dbddfd594d79c235420d43edc0e Mon Sep 17 00:00:00 2001 From: arc Date: Mon, 13 Jan 2025 09:32:25 -0700 Subject: [PATCH 0759/1027] vault backup: 2025-01-13 09:32:25 --- .obsidian/plugins/obsidian-git/data.json | 27 ++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/.obsidian/plugins/obsidian-git/data.json b/.obsidian/plugins/obsidian-git/data.json index e69de29..bef4c6e 100644 --- a/.obsidian/plugins/obsidian-git/data.json +++ b/.obsidian/plugins/obsidian-git/data.json @@ -0,0 +1,27 @@ +{ + "commitMessage": "vault backup: {{date}}", + "autoCommitMessage": "vault backup: {{date}}", + "commitDateFormat": "YYYY-MM-DD HH:mm:ss", + "autoSaveInterval": 5, + "autoPushInterval": 0, + "autoPullInterval": 5, + "autoPullOnBoot": true, + "disablePush": false, + "pullBeforePush": true, + "disablePopups": false, + "listChangedFilesInMessageBody": false, + "showStatusBar": true, + "updateSubmodules": false, + "syncMethod": "merge", + "customMessageOnAutoBackup": false, + "autoBackupAfterFileChange": false, + "treeStructure": false, + "refreshSourceControl": true, + "basePath": "", + "differentIntervalCommitAndPush": false, + "changedFilesInStatusBar": false, + "showedMobileNotice": true, + "refreshSourceControlTimer": 7000, + "showBranchStatusBar": true, + "setLastSaveToLastCommit": false +} \ No newline at end of file From 46e32cbea14f3a057d0db0971daf8d9136a25e8c Mon Sep 17 00:00:00 2001 From: arc Date: Mon, 13 Jan 2025 09:37:25 -0700 Subject: [PATCH 0760/1027] vault backup: 2025-01-13 09:37:25 --- education/computer engineering/ECE2700/Binary Logic.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/education/computer engineering/ECE2700/Binary Logic.md b/education/computer engineering/ECE2700/Binary Logic.md index d663ecc..9fc707b 100644 --- a/education/computer engineering/ECE2700/Binary Logic.md +++ b/education/computer engineering/ECE2700/Binary Logic.md @@ -1,3 +1,10 @@ +# Properties of Boolean Algebra +| $0 \cdot 0 = 0$ | $1 + 1 = 1$ | +| --------------------------- | ----------- | +| $1 \cdot 1 = 1$ | $0 + 0 = 0$ | +| $0 \cdot 1 = 1 \cdot 0 = 0$ | | + +# Logic Gates ![](./assets/logic-gates.jpeg) # NOT Gate From e65ad8f8177d186961f90c89c8fa39265fc5d537 Mon Sep 17 00:00:00 2001 From: arc Date: Mon, 13 Jan 2025 09:42:25 -0700 Subject: [PATCH 0761/1027] vault backup: 2025-01-13 09:42:25 --- .../ECE2700/Binary Logic.md | 23 +++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/education/computer engineering/ECE2700/Binary Logic.md b/education/computer engineering/ECE2700/Binary Logic.md index 9fc707b..3a45dec 100644 --- a/education/computer engineering/ECE2700/Binary Logic.md +++ b/education/computer engineering/ECE2700/Binary Logic.md @@ -1,8 +1,23 @@ # Properties of Boolean Algebra -| $0 \cdot 0 = 0$ | $1 + 1 = 1$ | -| --------------------------- | ----------- | -| $1 \cdot 1 = 1$ | $0 + 0 = 0$ | -| $0 \cdot 1 = 1 \cdot 0 = 0$ | | +| Number | Col. A | Col. A Description | Col. B | Col. B Description | +| ------ | --------------------------- | ------------------ | ----------- | ------------------ | +| 1. | $0 \cdot 0 = 0$ | | $1 + 1 = 1$ | | +| 2. | $1 \cdot 1 = 1$ | | $0 + 0 = 0$ | | +| 3. | $0 \cdot 1 = 1 \cdot 0 = 0$ | | | | +| 4. | | | | | +| 5. | | | | | +| 6. | | | | | +| 7. | | | | | +| 8. | | | | | +| 9. | | | | | +| 10. | | | | | +| 11. | | | | | +| 12. | | | | | +| 13. | | | | | +| 14. | | | | | +| 15. | | | | | +| 16. | | | | | +| 17. | | | | | # Logic Gates From ff39338ae379bdbdb81a80b53def5b400d7305cd Mon Sep 17 00:00:00 2001 From: arc Date: Mon, 13 Jan 2025 09:47:25 -0700 Subject: [PATCH 0762/1027] vault backup: 2025-01-13 09:47:25 --- .../ECE2700/Binary Logic.md | 38 +++++++++---------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/education/computer engineering/ECE2700/Binary Logic.md b/education/computer engineering/ECE2700/Binary Logic.md index 3a45dec..05de353 100644 --- a/education/computer engineering/ECE2700/Binary Logic.md +++ b/education/computer engineering/ECE2700/Binary Logic.md @@ -1,23 +1,23 @@ # Properties of Boolean Algebra -| Number | Col. A | Col. A Description | Col. B | Col. B Description | -| ------ | --------------------------- | ------------------ | ----------- | ------------------ | -| 1. | $0 \cdot 0 = 0$ | | $1 + 1 = 1$ | | -| 2. | $1 \cdot 1 = 1$ | | $0 + 0 = 0$ | | -| 3. | $0 \cdot 1 = 1 \cdot 0 = 0$ | | | | -| 4. | | | | | -| 5. | | | | | -| 6. | | | | | -| 7. | | | | | -| 8. | | | | | -| 9. | | | | | -| 10. | | | | | -| 11. | | | | | -| 12. | | | | | -| 13. | | | | | -| 14. | | | | | -| 15. | | | | | -| 16. | | | | | -| 17. | | | | | +| Number | Col. A | Col. A Description | Col. B | Col. B Description | +| ------ | ---------------------------------- | ------------------ | ---------------------------------- | ------------------ | +| 1. | $0 \cdot 0 = 0$ | | $1 + 1 = 1$ | | +| 2. | $1 \cdot 1 = 1$ | | $0 + 0 = 0$ | | +| 3. | $0 \cdot 1 = 1 \cdot 0 = 0$ | | $1 + 0 = 0 + 1 = 1$ | | +| 4. | if $x = 0$ then $\overline{x} = 1$ | | if $x = 1$ then $\overline{x} = 0$ | | +| 5. | | | | | +| 6. | | | | | +| 7. | | | | | +| 8. | | | | | +| 9. | | | | | +| 10. | | | | | +| 11. | | | | | +| 12. | | | | | +| 13. | | | | | +| 14. | | | | | +| 15. | | | | | +| 16. | | | | | +| 17. | | | | | # Logic Gates From f7e08f0cbe18a21cc50bcbef429081fe20083a96 Mon Sep 17 00:00:00 2001 From: arc Date: Mon, 13 Jan 2025 12:15:31 -0700 Subject: [PATCH 0763/1027] vault backup: 2025-01-13 12:15:31 --- education/computer engineering/ECE2700/Binary Logic.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/education/computer engineering/ECE2700/Binary Logic.md b/education/computer engineering/ECE2700/Binary Logic.md index 05de353..e0dc2a3 100644 --- a/education/computer engineering/ECE2700/Binary Logic.md +++ b/education/computer engineering/ECE2700/Binary Logic.md @@ -5,8 +5,8 @@ | 2. | $1 \cdot 1 = 1$ | | $0 + 0 = 0$ | | | 3. | $0 \cdot 1 = 1 \cdot 0 = 0$ | | $1 + 0 = 0 + 1 = 1$ | | | 4. | if $x = 0$ then $\overline{x} = 1$ | | if $x = 1$ then $\overline{x} = 0$ | | -| 5. | | | | | -| 6. | | | | | +| 5. | $x \cdot 0 = 0$ | | $x + 1 = 1$ | | +| 6. | $x \cdot 1 = x$ | | $x + 0 = x$ | | | 7. | | | | | | 8. | | | | | | 9. | | | | | From 1deb209d3aabc1b62c22ce63f1a9c01c7b0ef51d Mon Sep 17 00:00:00 2001 From: arc Date: Mon, 13 Jan 2025 12:20:31 -0700 Subject: [PATCH 0764/1027] vault backup: 2025-01-13 12:20:31 --- education/computer engineering/ECE2700/Binary Logic.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/education/computer engineering/ECE2700/Binary Logic.md b/education/computer engineering/ECE2700/Binary Logic.md index e0dc2a3..d3fd225 100644 --- a/education/computer engineering/ECE2700/Binary Logic.md +++ b/education/computer engineering/ECE2700/Binary Logic.md @@ -7,7 +7,7 @@ | 4. | if $x = 0$ then $\overline{x} = 1$ | | if $x = 1$ then $\overline{x} = 0$ | | | 5. | $x \cdot 0 = 0$ | | $x + 1 = 1$ | | | 6. | $x \cdot 1 = x$ | | $x + 0 = x$ | | -| 7. | | | | | +| 7. | $x \cdot | | | | | 8. | | | | | | 9. | | | | | | 10. | | | | | From 6b4861debf1fcff36f3d9880b9767f622a29c7d7 Mon Sep 17 00:00:00 2001 From: arc Date: Mon, 13 Jan 2025 12:25:49 -0700 Subject: [PATCH 0765/1027] vault backup: 2025-01-13 12:25:49 --- education/computer engineering/ECE2700/Binary Logic.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/education/computer engineering/ECE2700/Binary Logic.md b/education/computer engineering/ECE2700/Binary Logic.md index d3fd225..a5eb710 100644 --- a/education/computer engineering/ECE2700/Binary Logic.md +++ b/education/computer engineering/ECE2700/Binary Logic.md @@ -7,9 +7,9 @@ | 4. | if $x = 0$ then $\overline{x} = 1$ | | if $x = 1$ then $\overline{x} = 0$ | | | 5. | $x \cdot 0 = 0$ | | $x + 1 = 1$ | | | 6. | $x \cdot 1 = x$ | | $x + 0 = x$ | | -| 7. | $x \cdot | | | | -| 8. | | | | | -| 9. | | | | | +| 7. | $x \cdot x = x$ | | $x + x = x$ | | +| 8. | $x \cdot \overline{x} = 0$ | | $$x + \overline{x} = 1$ | | +| 9. | $\overline{\overline{x}} = | | | | | 10. | | | | | | 11. | | | | | | 12. | | | | | From e16bde1c2cb02f8ab6137850a895e36b257e81d5 Mon Sep 17 00:00:00 2001 From: arc Date: Mon, 13 Jan 2025 12:30:49 -0700 Subject: [PATCH 0766/1027] vault backup: 2025-01-13 12:30:49 --- .../ECE2700/Binary Logic.md | 38 +++++++++---------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/education/computer engineering/ECE2700/Binary Logic.md b/education/computer engineering/ECE2700/Binary Logic.md index a5eb710..dabc9ff 100644 --- a/education/computer engineering/ECE2700/Binary Logic.md +++ b/education/computer engineering/ECE2700/Binary Logic.md @@ -1,23 +1,23 @@ # Properties of Boolean Algebra -| Number | Col. A | Col. A Description | Col. B | Col. B Description | -| ------ | ---------------------------------- | ------------------ | ---------------------------------- | ------------------ | -| 1. | $0 \cdot 0 = 0$ | | $1 + 1 = 1$ | | -| 2. | $1 \cdot 1 = 1$ | | $0 + 0 = 0$ | | -| 3. | $0 \cdot 1 = 1 \cdot 0 = 0$ | | $1 + 0 = 0 + 1 = 1$ | | -| 4. | if $x = 0$ then $\overline{x} = 1$ | | if $x = 1$ then $\overline{x} = 0$ | | -| 5. | $x \cdot 0 = 0$ | | $x + 1 = 1$ | | -| 6. | $x \cdot 1 = x$ | | $x + 0 = x$ | | -| 7. | $x \cdot x = x$ | | $x + x = x$ | | -| 8. | $x \cdot \overline{x} = 0$ | | $$x + \overline{x} = 1$ | | -| 9. | $\overline{\overline{x}} = | | | | -| 10. | | | | | -| 11. | | | | | -| 12. | | | | | -| 13. | | | | | -| 14. | | | | | -| 15. | | | | | -| 16. | | | | | -| 17. | | | | | +| Number | Col. A | Col. A Description | Col. B | Col. B Description | +| ---------------------- | ------------------------------------------- | ------------------ | -------------------------------------- | ------------------ | +| 1. | $0 \cdot 0 = 0$ | | $1 + 1 = 1$ | | +| 2. | $1 \cdot 1 = 1$ | | $0 + 0 = 0$ | | +| 3. | $0 \cdot 1 = 1 \cdot 0 = 0$ | | $1 + 0 = 0 + 1 = 1$ | | +| 4. | if $x = 0$ then $\overline{x} = 1$ | | if $x = 1$ then $\overline{x} = 0$ | | +| 5. | $x \cdot 0 = 0$ | | $x + 1 = 1$ | | +| 6. | $x \cdot 1 = x$ | | $x + 0 = x$ | | +| 7. | $x \cdot x = x$ | | $x + x = x$ | | +| 8. | $x \cdot \overline{x} = 0$ | | $$x + \overline{x} = 1$ | | +| 9. | $\overline{\overline{x}} = x$ | | | | +| 10. Commutative | $x \cdot y = y \cdot x$ | | $x + y = y + x$ | | +| 11. Associative | $x \cdot (y \cdot z) = (x \cdot y) \cdot z$ | | $x + (y + z) = (x + y) +z$ | | +| 12. Distributive | $x \cdot (y +z) = x \cdot y + x \cdot z$ | | $x + y \cdot z = (x + y) \cdot (x + z$ | | +| 13. Absorption | $x + x \cdot y | | | | +| 14. Combining | | | | | +| 15. DeMorgan's Theorem | | | | | +| 16. | | | | | +| 17. Consensus | | | | | # Logic Gates From 8009812a1f98ffcd23822160ae62a6aee9d39ccb Mon Sep 17 00:00:00 2001 From: arc Date: Mon, 13 Jan 2025 12:35:49 -0700 Subject: [PATCH 0767/1027] vault backup: 2025-01-13 12:35:49 --- .../ECE2700/Binary Logic.md | 20 +------------------ 1 file changed, 1 insertion(+), 19 deletions(-) diff --git a/education/computer engineering/ECE2700/Binary Logic.md b/education/computer engineering/ECE2700/Binary Logic.md index dabc9ff..2596420 100644 --- a/education/computer engineering/ECE2700/Binary Logic.md +++ b/education/computer engineering/ECE2700/Binary Logic.md @@ -1,23 +1,5 @@ # Properties of Boolean Algebra -| Number | Col. A | Col. A Description | Col. B | Col. B Description | -| ---------------------- | ------------------------------------------- | ------------------ | -------------------------------------- | ------------------ | -| 1. | $0 \cdot 0 = 0$ | | $1 + 1 = 1$ | | -| 2. | $1 \cdot 1 = 1$ | | $0 + 0 = 0$ | | -| 3. | $0 \cdot 1 = 1 \cdot 0 = 0$ | | $1 + 0 = 0 + 1 = 1$ | | -| 4. | if $x = 0$ then $\overline{x} = 1$ | | if $x = 1$ then $\overline{x} = 0$ | | -| 5. | $x \cdot 0 = 0$ | | $x + 1 = 1$ | | -| 6. | $x \cdot 1 = x$ | | $x + 0 = x$ | | -| 7. | $x \cdot x = x$ | | $x + x = x$ | | -| 8. | $x \cdot \overline{x} = 0$ | | $$x + \overline{x} = 1$ | | -| 9. | $\overline{\overline{x}} = x$ | | | | -| 10. Commutative | $x \cdot y = y \cdot x$ | | $x + y = y + x$ | | -| 11. Associative | $x \cdot (y \cdot z) = (x \cdot y) \cdot z$ | | $x + (y + z) = (x + y) +z$ | | -| 12. Distributive | $x \cdot (y +z) = x \cdot y + x \cdot z$ | | $x + y \cdot z = (x + y) \cdot (x + z$ | | -| 13. Absorption | $x + x \cdot y | | | | -| 14. Combining | | | | | -| 15. DeMorgan's Theorem | | | | | -| 16. | | | | | -| 17. Consensus | | | | | +| 17. Consensus | | | | | # Logic Gates From c0ca143aa1d23fd922a6e7c96d53969512555d7c Mon Sep 17 00:00:00 2001 From: arc Date: Mon, 13 Jan 2025 12:40:49 -0700 Subject: [PATCH 0768/1027] vault backup: 2025-01-13 12:40:49 --- .../ECE2700/Binary Logic.md | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/education/computer engineering/ECE2700/Binary Logic.md b/education/computer engineering/ECE2700/Binary Logic.md index 2596420..32454eb 100644 --- a/education/computer engineering/ECE2700/Binary Logic.md +++ b/education/computer engineering/ECE2700/Binary Logic.md @@ -1,5 +1,23 @@ # Properties of Boolean Algebra -| 17. Consensus | | | | | +| Number | Col. A | Col. A Description | Col. B | Col. B Description | +| ---------------------- | --------------------------------------------------------------------------------- | ------------------ | ----------------------------------------------------------------------------------- | ------------------ | +| 1. | $0 \cdot 0 = 0$ | | $1 + 1 = 1$ | | +| 2. | $1 \cdot 1 = 1$ | | $0 + 0 = 0$ | | +| 3. | $0 \cdot 1 = 1 \cdot 0 = 0$ | | $1 + 0 = 0 + 1 = 1$ | | +| 4. | if $x = 0$ then $\overline{x} = 1$ | | if $x = 1$ then $\overline{x} = 0$ | | +| 5. | $x \cdot 0 = 0$ | | $x + 1 = 1$ | | +| 6. | $x \cdot 1 = x$ | | $x + 0 = x$ | | +| 7. | $x \cdot x = x$ | | $x + x = x$ | | +| 8. | $x \cdot \overline{x} = 0$ | | $$x + \overline{x} = 1$ | | +| 9. | $\overline{\overline{x}} = x$ | | | | +| 10. Commutative | $x \cdot y = y \cdot x$ | | $x + y = y + x$ | | +| 11. Associative | $x \cdot (y \cdot z) = (x \cdot y) \cdot z$ | | $x + (y + z) = (x + y) +z$ | | +| 12. Distributive | $x \cdot (y +z) = x \cdot y + x \cdot z$ | | $x + y \cdot z = (x + y) \cdot (x + z$ | | +| 13. Absorption | $x + x \cdot y = x$ | | $x \cdot (x + y) = x$ | | +| 14. Combining | $x \cdot y + x \cdot \overline{y} = x$ | | $(x + y) \cdot (x + \overline{y}) = x$ | | +| 15. DeMorgan's Theorem | $\overline{x \cdot y} = \overline{x} + \overline{y}$ | | $x + y = \overline{x} \cdot \overline{y}$ | | +| 16. | $x + \overline{x} \cdot y = x + y$ | | $x \cdot (\overline{x} + y) = x \cdot y$ | | +| 17. Consensus | $x \cdot y + y \cdot z + \overline{x} \cdot z = x \cdot y + \overline{x} \cdot z$ | | $(x + y) \cdot (y + z) \cdot (\overline{x} + z) = (x + y) \cdot (\overline{x} + z)$ | | # Logic Gates From b2e6171f7b9ce20b7b1db64064a799b8858268a9 Mon Sep 17 00:00:00 2001 From: arc Date: Mon, 13 Jan 2025 12:45:49 -0700 Subject: [PATCH 0769/1027] vault backup: 2025-01-13 12:45:49 --- education/computer engineering/ECE2700/Binary Logic.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/education/computer engineering/ECE2700/Binary Logic.md b/education/computer engineering/ECE2700/Binary Logic.md index 32454eb..c425ee5 100644 --- a/education/computer engineering/ECE2700/Binary Logic.md +++ b/education/computer engineering/ECE2700/Binary Logic.md @@ -1,3 +1,8 @@ +# History of Boolean Algebra +- In 1849, George Boole published a scheme for describing logical thought and reasoning +- In the 1930s, Claude Shannon applied Boolean algebra to describe circuits built with switches +- Boolean algebra provides the theoretical foundation for digital design + # Properties of Boolean Algebra | Number | Col. A | Col. A Description | Col. B | Col. B Description | | ---------------------- | --------------------------------------------------------------------------------- | ------------------ | ----------------------------------------------------------------------------------- | ------------------ | From 518bd4620f3d13361fe58231255d21c21f7827ee Mon Sep 17 00:00:00 2001 From: arc Date: Mon, 13 Jan 2025 13:09:26 -0700 Subject: [PATCH 0770/1027] vault backup: 2025-01-13 13:09:26 --- education/computer engineering/ECE2700/Binary Logic.md | 1 + 1 file changed, 1 insertion(+) diff --git a/education/computer engineering/ECE2700/Binary Logic.md b/education/computer engineering/ECE2700/Binary Logic.md index c425ee5..0023b49 100644 --- a/education/computer engineering/ECE2700/Binary Logic.md +++ b/education/computer engineering/ECE2700/Binary Logic.md @@ -23,6 +23,7 @@ | 15. DeMorgan's Theorem | $\overline{x \cdot y} = \overline{x} + \overline{y}$ | | $x + y = \overline{x} \cdot \overline{y}$ | | | 16. | $x + \overline{x} \cdot y = x + y$ | | $x \cdot (\overline{x} + y) = x \cdot y$ | | | 17. Consensus | $x \cdot y + y \cdot z + \overline{x} \cdot z = x \cdot y + \overline{x} \cdot z$ | | $(x + y) \cdot (y + z) \cdot (\overline{x} + z) = (x + y) \cdot (\overline{x} + z)$ | | +# Synthesis # Logic Gates From dd0a77e7260a9e8d201373c78238823e2c895dfd Mon Sep 17 00:00:00 2001 From: arc Date: Mon, 13 Jan 2025 13:14:26 -0700 Subject: [PATCH 0771/1027] vault backup: 2025-01-13 13:14:26 --- education/computer engineering/ECE2700/Binary Logic.md | 1 + 1 file changed, 1 insertion(+) diff --git a/education/computer engineering/ECE2700/Binary Logic.md b/education/computer engineering/ECE2700/Binary Logic.md index 0023b49..8972cea 100644 --- a/education/computer engineering/ECE2700/Binary Logic.md +++ b/education/computer engineering/ECE2700/Binary Logic.md @@ -25,6 +25,7 @@ | 17. Consensus | $x \cdot y + y \cdot z + \overline{x} \cdot z = x \cdot y + \overline{x} \cdot z$ | | $(x + y) \cdot (y + z) \cdot (\overline{x} + z) = (x + y) \cdot (\overline{x} + z)$ | | # Synthesis + # Logic Gates ![](./assets/logic-gates.jpeg) From b51fce6bacdfe72c3451705bb538b53b28ada9a1 Mon Sep 17 00:00:00 2001 From: arc Date: Mon, 13 Jan 2025 13:19:26 -0700 Subject: [PATCH 0772/1027] vault backup: 2025-01-13 13:19:26 --- .../computer engineering/ECE2700/Binary Logic.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/education/computer engineering/ECE2700/Binary Logic.md b/education/computer engineering/ECE2700/Binary Logic.md index 8972cea..1ae7770 100644 --- a/education/computer engineering/ECE2700/Binary Logic.md +++ b/education/computer engineering/ECE2700/Binary Logic.md @@ -24,7 +24,21 @@ | 16. | $x + \overline{x} \cdot y = x + y$ | | $x \cdot (\overline{x} + y) = x \cdot y$ | | | 17. Consensus | $x \cdot y + y \cdot z + \overline{x} \cdot z = x \cdot y + \overline{x} \cdot z$ | | $(x + y) \cdot (y + z) \cdot (\overline{x} + z) = (x + y) \cdot (\overline{x} + z)$ | | # Synthesis +In the context of binary logic, synthesis refers to the act of creating a boolean expression that evaluates to match a given truth table. +This is done by creating a product term for each entry in the table that has an output of $1$, that also evaluates to $1$, then ORing each product term together and then simplifying. + +Example: + +Given the below truth table, synthesize a boolean expression that corresponds. + +| $x_1$ | $x_2$ | $f(x_1, x_2)$ | +| ----- | ----- | ------------- | +| 0 | 0 | 1 | +| 0 | 1 | 1 | +| 1 | 0 | 0 | +| 1 | 1 | 1 | +- # Logic Gates From fcf0fcc1fbbd53a93fc27f03c926f9d88006d491 Mon Sep 17 00:00:00 2001 From: arc Date: Mon, 13 Jan 2025 13:24:26 -0700 Subject: [PATCH 0773/1027] vault backup: 2025-01-13 13:24:26 --- education/computer engineering/ECE2700/Binary Logic.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/education/computer engineering/ECE2700/Binary Logic.md b/education/computer engineering/ECE2700/Binary Logic.md index 1ae7770..6d69d44 100644 --- a/education/computer engineering/ECE2700/Binary Logic.md +++ b/education/computer engineering/ECE2700/Binary Logic.md @@ -38,7 +38,8 @@ Given the below truth table, synthesize a boolean expression that corresponds. | 0 | 1 | 1 | | 1 | 0 | 0 | | 1 | 1 | 1 | -- +- $f(0, 0)$ evaluates to true with the term $\overline{x}_1 \cdot \overline{x}_2$ +- $f(0, 1)$ evaluates to true with the term $\overline{x}_1\cdot x_2$ # Logic Gates From 3873085ccddef660978fb2c14ac9b5b7f2ac4e3f Mon Sep 17 00:00:00 2001 From: arc Date: Mon, 13 Jan 2025 13:29:26 -0700 Subject: [PATCH 0774/1027] vault backup: 2025-01-13 13:29:26 --- .obsidian/plugins/obsidian-git/data.json | 27 ------------------- .../ECE2700/Binary Logic.md | 14 +++++++--- 2 files changed, 11 insertions(+), 30 deletions(-) diff --git a/.obsidian/plugins/obsidian-git/data.json b/.obsidian/plugins/obsidian-git/data.json index bef4c6e..e69de29 100644 --- a/.obsidian/plugins/obsidian-git/data.json +++ b/.obsidian/plugins/obsidian-git/data.json @@ -1,27 +0,0 @@ -{ - "commitMessage": "vault backup: {{date}}", - "autoCommitMessage": "vault backup: {{date}}", - "commitDateFormat": "YYYY-MM-DD HH:mm:ss", - "autoSaveInterval": 5, - "autoPushInterval": 0, - "autoPullInterval": 5, - "autoPullOnBoot": true, - "disablePush": false, - "pullBeforePush": true, - "disablePopups": false, - "listChangedFilesInMessageBody": false, - "showStatusBar": true, - "updateSubmodules": false, - "syncMethod": "merge", - "customMessageOnAutoBackup": false, - "autoBackupAfterFileChange": false, - "treeStructure": false, - "refreshSourceControl": true, - "basePath": "", - "differentIntervalCommitAndPush": false, - "changedFilesInStatusBar": false, - "showedMobileNotice": true, - "refreshSourceControlTimer": 7000, - "showBranchStatusBar": true, - "setLastSaveToLastCommit": false -} \ No newline at end of file diff --git a/education/computer engineering/ECE2700/Binary Logic.md b/education/computer engineering/ECE2700/Binary Logic.md index 6d69d44..92ad516 100644 --- a/education/computer engineering/ECE2700/Binary Logic.md +++ b/education/computer engineering/ECE2700/Binary Logic.md @@ -38,9 +38,17 @@ Given the below truth table, synthesize a boolean expression that corresponds. | 0 | 1 | 1 | | 1 | 0 | 0 | | 1 | 1 | 1 | -- $f(0, 0)$ evaluates to true with the term $\overline{x}_1 \cdot \overline{x}_2$ -- $f(0, 1)$ evaluates to true with the term $\overline{x}_1\cdot x_2$ - +- $f(0, 0)$ evaluates to true with the expression $\overline{x}_1 \cdot \overline{x}_2$ +- $f(0, 1)$ evaluates to true with the expression $\overline{x}_1\cdot x_2$ +- $f(1, 0)$ should provide an output of zero, so that can be ignored +- $f(1, 1)$ evaluates to true with the expression $x_1 \cdot x_2$ +ORing all of the above expression together, we get: +$$ f(x_1, x_2) = \overline{x}_1\overline{x}_2 + \overline{x}_1 x_2 + x_1x_2 $$ +$$ +\begin{equation} += x_1 \\ +\end{equation} +$$ # Logic Gates ![](./assets/logic-gates.jpeg) From 47ba2bb11d527f41e29f4374a883c100c6a2d831 Mon Sep 17 00:00:00 2001 From: arc Date: Tue, 14 Jan 2025 18:32:16 -0700 Subject: [PATCH 0775/1027] vault backup: 2025-01-14 18:32:16 --- .obsidian/plugins/obsidian-git/data.json | 27 +++++++++++++++++++ .../ECE2700/Binary Logic.md | 7 ++--- 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/.obsidian/plugins/obsidian-git/data.json b/.obsidian/plugins/obsidian-git/data.json index e69de29..bef4c6e 100644 --- a/.obsidian/plugins/obsidian-git/data.json +++ b/.obsidian/plugins/obsidian-git/data.json @@ -0,0 +1,27 @@ +{ + "commitMessage": "vault backup: {{date}}", + "autoCommitMessage": "vault backup: {{date}}", + "commitDateFormat": "YYYY-MM-DD HH:mm:ss", + "autoSaveInterval": 5, + "autoPushInterval": 0, + "autoPullInterval": 5, + "autoPullOnBoot": true, + "disablePush": false, + "pullBeforePush": true, + "disablePopups": false, + "listChangedFilesInMessageBody": false, + "showStatusBar": true, + "updateSubmodules": false, + "syncMethod": "merge", + "customMessageOnAutoBackup": false, + "autoBackupAfterFileChange": false, + "treeStructure": false, + "refreshSourceControl": true, + "basePath": "", + "differentIntervalCommitAndPush": false, + "changedFilesInStatusBar": false, + "showedMobileNotice": true, + "refreshSourceControlTimer": 7000, + "showBranchStatusBar": true, + "setLastSaveToLastCommit": false +} \ No newline at end of file diff --git a/education/computer engineering/ECE2700/Binary Logic.md b/education/computer engineering/ECE2700/Binary Logic.md index 92ad516..1731b8a 100644 --- a/education/computer engineering/ECE2700/Binary Logic.md +++ b/education/computer engineering/ECE2700/Binary Logic.md @@ -45,9 +45,10 @@ Given the below truth table, synthesize a boolean expression that corresponds. ORing all of the above expression together, we get: $$ f(x_1, x_2) = \overline{x}_1\overline{x}_2 + \overline{x}_1 x_2 + x_1x_2 $$ $$ -\begin{equation} -= x_1 \\ -\end{equation} +\begin{multline} += x_1x_2 \\ += x +\end{multline} $$ # Logic Gates From b30345915fa4d33d2f3faacbde3000a740993a06 Mon Sep 17 00:00:00 2001 From: arc Date: Fri, 17 Jan 2025 14:58:02 -0700 Subject: [PATCH 0776/1027] vault backup: 2025-01-17 14:58:02 --- education/computer engineering/ECE2700/Verilog.md | 15 +++++++++++++++ education/math/MATH1050/Systems of Equations.md | 1 + 2 files changed, 16 insertions(+) create mode 100644 education/computer engineering/ECE2700/Verilog.md diff --git a/education/computer engineering/ECE2700/Verilog.md b/education/computer engineering/ECE2700/Verilog.md new file mode 100644 index 0000000..a84a83a --- /dev/null +++ b/education/computer engineering/ECE2700/Verilog.md @@ -0,0 +1,15 @@ +## Boolean Engineering +- Truth tables + - Only practical for small circuits +- Schematic capture + - Using CAD to place logic gates on a virtual canvas + - Facilitates *hierarchical design* + - Good for larger circuits + - Don't scale well for very large circuits +- Hardware Description Languages + - Enables hierarchical design + - Standardized by IEEE + - Design is more portable + - Usable in combination with schematic design + +# Verilog diff --git a/education/math/MATH1050/Systems of Equations.md b/education/math/MATH1050/Systems of Equations.md index f9643bd..93c5585 100644 --- a/education/math/MATH1050/Systems of Equations.md +++ b/education/math/MATH1050/Systems of Equations.md @@ -4,6 +4,7 @@ | Inconsistent | Parallel lines, no solution | | Independent | The lines only cross at one point. | | Dependant | The lines are identical, and there are infinitely many solutions. Both equations represent the same line when plotted. | + # Solving ## Graphing Graph the two equations, and look for points where they intersect From 64764837b3abf4c0c34ca0298fc477b0da99118f Mon Sep 17 00:00:00 2001 From: arc Date: Fri, 17 Jan 2025 15:03:02 -0700 Subject: [PATCH 0777/1027] vault backup: 2025-01-17 15:03:02 --- education/computer engineering/ECE2700/Verilog.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/education/computer engineering/ECE2700/Verilog.md b/education/computer engineering/ECE2700/Verilog.md index a84a83a..15fa03c 100644 --- a/education/computer engineering/ECE2700/Verilog.md +++ b/education/computer engineering/ECE2700/Verilog.md @@ -13,3 +13,13 @@ - Usable in combination with schematic design # Verilog +- Originally developed by Gateway Design Automation +- Put in public domain in 1990 +- Standardized in 1995 +- Originally intended for simulation of logic networks, later adapted to synthesis + +```verilog +module example1(x1, x2, s, f); + input x1, x2, s; + +``` \ No newline at end of file From 77ec466cd0681d78dbd2036dfe7b82ff3a1c556e Mon Sep 17 00:00:00 2001 From: arc Date: Fri, 17 Jan 2025 15:51:27 -0700 Subject: [PATCH 0778/1027] vault backup: 2025-01-17 15:51:27 --- education/computer engineering/ECE2700/Verilog.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/education/computer engineering/ECE2700/Verilog.md b/education/computer engineering/ECE2700/Verilog.md index 15fa03c..f356e82 100644 --- a/education/computer engineering/ECE2700/Verilog.md +++ b/education/computer engineering/ECE2700/Verilog.md @@ -21,5 +21,12 @@ ```verilog module example1(x1, x2, s, f); input x1, x2, s; + output f; + + not(k, s); + and(g, k, x1); + and(h, s, x2); + or(f, g, h); +endmodule ``` \ No newline at end of file From 589b03582b94415ce826bb64c170994c058cd8d0 Mon Sep 17 00:00:00 2001 From: arc Date: Fri, 17 Jan 2025 15:56:27 -0700 Subject: [PATCH 0779/1027] vault backup: 2025-01-17 15:56:27 --- education/computer engineering/ECE2700/Verilog.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/education/computer engineering/ECE2700/Verilog.md b/education/computer engineering/ECE2700/Verilog.md index f356e82..11089df 100644 --- a/education/computer engineering/ECE2700/Verilog.md +++ b/education/computer engineering/ECE2700/Verilog.md @@ -19,6 +19,7 @@ - Originally intended for simulation of logic networks, later adapted to synthesis ```verilog +// module example1(x1, x2, s, f); input x1, x2, s; output f; @@ -27,6 +28,6 @@ module example1(x1, x2, s, f); and(g, k, x1); and(h, s, x2); or(f, g, h); -endmodule - -``` \ No newline at end of file +endmodule +``` + From 0784d7df66e6a5990cea0995e87200574dc15121 Mon Sep 17 00:00:00 2001 From: arc Date: Fri, 17 Jan 2025 16:01:27 -0700 Subject: [PATCH 0780/1027] vault backup: 2025-01-17 16:01:27 --- education/computer engineering/ECE2700/Verilog.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/education/computer engineering/ECE2700/Verilog.md b/education/computer engineering/ECE2700/Verilog.md index 11089df..c69061f 100644 --- a/education/computer engineering/ECE2700/Verilog.md +++ b/education/computer engineering/ECE2700/Verilog.md @@ -19,11 +19,14 @@ - Originally intended for simulation of logic networks, later adapted to synthesis ```verilog -// +// V---V---v--v-----portlist (not ordered) module example1(x1, x2, s, f); + // Defining the types of the various ports input x1, x2, s; output f; - + // The first argument is the output value. + // In this example, `k`, `g`, `h`, `f` are implicitly declared. + // They could also be declared manually with the syntax `wire foo`, alongside the `input` and `output` declarations not(k, s); and(g, k, x1); and(h, s, x2); From 08dcd5104e240f1d3e3e3a6c1f9080e115c71c27 Mon Sep 17 00:00:00 2001 From: arc Date: Fri, 17 Jan 2025 16:06:27 -0700 Subject: [PATCH 0781/1027] vault backup: 2025-01-17 16:06:27 --- education/computer engineering/ECE2700/Verilog.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/education/computer engineering/ECE2700/Verilog.md b/education/computer engineering/ECE2700/Verilog.md index c69061f..3f221b5 100644 --- a/education/computer engineering/ECE2700/Verilog.md +++ b/education/computer engineering/ECE2700/Verilog.md @@ -27,10 +27,13 @@ module example1(x1, x2, s, f); // The first argument is the output value. // In this example, `k`, `g`, `h`, `f` are implicitly declared. // They could also be declared manually with the syntax `wire foo`, alongside the `input` and `output` declarations - not(k, s); + not(k, s); // You can also NOT a variable using a tilde, eg `~s` and(g, k, x1); and(h, s, x2); or(f, g, h); endmodule ``` +- Behavioral Verilog describes broader behavior, at a higher level +- Structural Verilog describes how things are laid out at a logic level + From b6bb60e548c7ff47878220115ea5acd353e1ea15 Mon Sep 17 00:00:00 2001 From: arc Date: Tue, 21 Jan 2025 12:04:38 -0700 Subject: [PATCH 0782/1027] vault backup: 2025-01-21 12:04:38 --- assets/boolean-lo.md | 0 education/math/MATH1210 (calc 1)/Limits.md | 8 ++++++++ 2 files changed, 8 insertions(+) delete mode 100644 assets/boolean-lo.md diff --git a/assets/boolean-lo.md b/assets/boolean-lo.md deleted file mode 100644 index e69de29..0000000 diff --git a/education/math/MATH1210 (calc 1)/Limits.md b/education/math/MATH1210 (calc 1)/Limits.md index b6e60c2..d1e1781 100644 --- a/education/math/MATH1210 (calc 1)/Limits.md +++ b/education/math/MATH1210 (calc 1)/Limits.md @@ -17,6 +17,14 @@ The standard notation for a limit is: $$ \lim_{x \to a} f(x) = L $$ - As $x$ approaches $a$, the output of $f(x)$ draws closer to $L$. In the above notation, $x$ and $a$ are not necessarily equal. - When plotted, the hole is located at $(a, L)$. + +# Continuity +A function is continuous if their graph can be traced with a pencil without lifting the pencil from the page. + +Formally, a function $f$ is continuous at a point $a$ if: +- $f(a)$ is defined +- $\lim{x\rarrow}$ + # Definitions | Term | Definition | From debaf2bace864ca7c4bdb42ad8698b1227947723 Mon Sep 17 00:00:00 2001 From: arc Date: Tue, 21 Jan 2025 12:09:38 -0700 Subject: [PATCH 0783/1027] vault backup: 2025-01-21 12:09:38 --- education/math/MATH1210 (calc 1)/Limits.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/education/math/MATH1210 (calc 1)/Limits.md b/education/math/MATH1210 (calc 1)/Limits.md index d1e1781..ed07dd7 100644 --- a/education/math/MATH1210 (calc 1)/Limits.md +++ b/education/math/MATH1210 (calc 1)/Limits.md @@ -23,7 +23,8 @@ A function is continuous if their graph can be traced with a pencil without lift Formally, a function $f$ is continuous at a point $a$ if: - $f(a)$ is defined -- $\lim{x\rarrow}$ +- $\lim_{x \to a} f(x)$ exists +- $\lim_{x \to a} = f(a)$ # Definitions From d8e7b06c2c40b1ae3e80b202ef9df14f924a4f85 Mon Sep 17 00:00:00 2001 From: arc Date: Tue, 21 Jan 2025 12:14:38 -0700 Subject: [PATCH 0784/1027] vault backup: 2025-01-21 12:14:38 --- education/math/MATH1210 (calc 1)/Limits.md | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/education/math/MATH1210 (calc 1)/Limits.md b/education/math/MATH1210 (calc 1)/Limits.md index ed07dd7..ad0cc5b 100644 --- a/education/math/MATH1210 (calc 1)/Limits.md +++ b/education/math/MATH1210 (calc 1)/Limits.md @@ -26,6 +26,26 @@ Formally, a function $f$ is continuous at a point $a$ if: - $\lim_{x \to a} f(x)$ exists - $\lim_{x \to a} = f(a)$ +- A function is continuous on the open interval $(a, b)$ if it is continuous at all points between $a$ and $b$ +- A function is continuous on the closed interval $[a, b]$ if it is continuous at all points between $a$ and $b$ + +# Elementary Functions +An elementary function is any function that is defined using: +- Polynomial functions +- Rational functions +- Root functions +- Trig functions +- Inverse trig functions +- Exponential functions +- Logarithmic functions +- Operations of: + - Addition + - Subtraction + - Multiplication + - Division + - Composition + +A piece-wise function is *not* considered an elementary function # Definitions | Term | Definition | From d963b081d93ade5c7f47e108b38bfcd88887fbf3 Mon Sep 17 00:00:00 2001 From: arc Date: Tue, 21 Jan 2025 12:19:38 -0700 Subject: [PATCH 0785/1027] vault backup: 2025-01-21 12:19:38 --- education/math/MATH1210 (calc 1)/Limits.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/education/math/MATH1210 (calc 1)/Limits.md b/education/math/MATH1210 (calc 1)/Limits.md index ad0cc5b..2f30a7c 100644 --- a/education/math/MATH1210 (calc 1)/Limits.md +++ b/education/math/MATH1210 (calc 1)/Limits.md @@ -46,6 +46,15 @@ An elementary function is any function that is defined using: - Composition A piece-wise function is *not* considered an elementary function + +- If $f$ and $g$ are continuous at a point $x = a$ and $c$ is a constant then the following functions are also continuous at $x = a$ +- If $g$ is continuous at $a$ and $f$ is continuous at $g(a)$, then $f(g(a))$ is continuous at $a$ +- If $f$ is an elementary function and if $a$ is in the domain of $f$, then $f$ is continuous at $a$ +Together, the above theorems tell us that if $a$ is in the domain of an elementary function, then $\lim_{x \to a} f(x) = f(a)$. + +# Intermediate Value Theorem +Let $f$ be a continuous function on the interval ${} + # Definitions | Term | Definition | From 4b7a25496e85ed95e65e551b2b4730b0636c1017 Mon Sep 17 00:00:00 2001 From: arc Date: Tue, 21 Jan 2025 12:24:38 -0700 Subject: [PATCH 0786/1027] vault backup: 2025-01-21 12:24:38 --- education/math/MATH1210 (calc 1)/Limits.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/education/math/MATH1210 (calc 1)/Limits.md b/education/math/MATH1210 (calc 1)/Limits.md index 2f30a7c..8573cad 100644 --- a/education/math/MATH1210 (calc 1)/Limits.md +++ b/education/math/MATH1210 (calc 1)/Limits.md @@ -17,7 +17,8 @@ The standard notation for a limit is: $$ \lim_{x \to a} f(x) = L $$ - As $x$ approaches $a$, the output of $f(x)$ draws closer to $L$. In the above notation, $x$ and $a$ are not necessarily equal. - When plotted, the hole is located at $(a, L)$. - +# Indeterminate Limits +If they have a limit of the form $lim_{x \to a} \frac{f(x)}{g(x)}$ where both $f(x) \to 0$ and $g(x) \to 0$ as $x \to a$ then this limit **may or may not** exist # Continuity A function is continuous if their graph can be traced with a pencil without lifting the pencil from the page. @@ -53,7 +54,7 @@ A piece-wise function is *not* considered an elementary function Together, the above theorems tell us that if $a$ is in the domain of an elementary function, then $\lim_{x \to a} f(x) = f(a)$. # Intermediate Value Theorem -Let $f$ be a continuous function on the interval ${} +Let $f$ be a continuous function on the interval $[a, b]$ and let $N$ be any number strictly between $f(a)$ and $f(b)$. Then there exists a number $c$ in $(a, b)$ such that $f(c) = N$. # Definitions From ddb268ef3903271c5315300bd87f4d6c3d5ec605 Mon Sep 17 00:00:00 2001 From: arc Date: Tue, 21 Jan 2025 12:29:38 -0700 Subject: [PATCH 0787/1027] vault backup: 2025-01-21 12:29:38 --- education/math/MATH1210 (calc 1)/Limits.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/education/math/MATH1210 (calc 1)/Limits.md b/education/math/MATH1210 (calc 1)/Limits.md index 8573cad..570d006 100644 --- a/education/math/MATH1210 (calc 1)/Limits.md +++ b/education/math/MATH1210 (calc 1)/Limits.md @@ -18,7 +18,14 @@ $$ \lim_{x \to a} f(x) = L $$ - As $x$ approaches $a$, the output of $f(x)$ draws closer to $L$. In the above notation, $x$ and $a$ are not necessarily equal. - When plotted, the hole is located at $(a, L)$. # Indeterminate Limits -If they have a limit of the form $lim_{x \to a} \frac{f(x)}{g(x)}$ where both $f(x) \to 0$ and $g(x) \to 0$ as $x \to a$ then this limit **may or may not** exist +If they have a limit of the form $lim_{x \to a} \frac{f(x)}{g(x)}$ where both $f(x) \to 0$ and $g(x) \to 0$ as $x \to a$ then this limit **may or may not** exist and is said to be an indeterminate form of type $\dfrac{0}{0}$. +To find this limit if it exists we must perform some mathematical manipulations on the quotient in order to change the form of the function. Some of the manipulations that can be tried are: +- Factor or Foil polynomials and try dividing out a common factor. +- Multiply numerator and denominator by the conjugate of a radical expression +- Combine fractions in the numerator or denominator of a complex fraction + +# Limits of the Form $\frac{k}{0}, k \ne 0$ + # Continuity A function is continuous if their graph can be traced with a pencil without lifting the pencil from the page. From d0f0166fb51a70d817973e3fe4550123046d6073 Mon Sep 17 00:00:00 2001 From: arc Date: Tue, 21 Jan 2025 12:34:38 -0700 Subject: [PATCH 0788/1027] vault backup: 2025-01-21 12:34:38 --- education/math/MATH1210 (calc 1)/Limits.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/education/math/MATH1210 (calc 1)/Limits.md b/education/math/MATH1210 (calc 1)/Limits.md index 570d006..a04f260 100644 --- a/education/math/MATH1210 (calc 1)/Limits.md +++ b/education/math/MATH1210 (calc 1)/Limits.md @@ -25,7 +25,7 @@ To find this limit if it exists we must perform some mathematical manipulations - Combine fractions in the numerator or denominator of a complex fraction # Limits of the Form $\frac{k}{0}, k \ne 0$ - +If we have a one sided limit of the form $lim # Continuity A function is continuous if their graph can be traced with a pencil without lifting the pencil from the page. From 8e3bb33d7c00d1c4f4ccef6d8893aaf156bd3f4d Mon Sep 17 00:00:00 2001 From: arc Date: Tue, 21 Jan 2025 12:39:38 -0700 Subject: [PATCH 0789/1027] vault backup: 2025-01-21 12:39:38 --- education/math/MATH1210 (calc 1)/Limits.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/education/math/MATH1210 (calc 1)/Limits.md b/education/math/MATH1210 (calc 1)/Limits.md index a04f260..54340c8 100644 --- a/education/math/MATH1210 (calc 1)/Limits.md +++ b/education/math/MATH1210 (calc 1)/Limits.md @@ -25,7 +25,7 @@ To find this limit if it exists we must perform some mathematical manipulations - Combine fractions in the numerator or denominator of a complex fraction # Limits of the Form $\frac{k}{0}, k \ne 0$ -If we have a one sided limit of the form $lim +If we have a one sided limit of the form $\lim_{x \to a^*} \frac{f(x)}{g(x)}$ # Continuity A function is continuous if their graph can be traced with a pencil without lifting the pencil from the page. From 37fb816baad651a9548515e205c2a0b351a91ce4 Mon Sep 17 00:00:00 2001 From: arc Date: Tue, 21 Jan 2025 12:44:38 -0700 Subject: [PATCH 0790/1027] vault backup: 2025-01-21 12:44:38 --- education/math/MATH1210 (calc 1)/Limits.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/education/math/MATH1210 (calc 1)/Limits.md b/education/math/MATH1210 (calc 1)/Limits.md index 54340c8..a45d17b 100644 --- a/education/math/MATH1210 (calc 1)/Limits.md +++ b/education/math/MATH1210 (calc 1)/Limits.md @@ -25,7 +25,8 @@ To find this limit if it exists we must perform some mathematical manipulations - Combine fractions in the numerator or denominator of a complex fraction # Limits of the Form $\frac{k}{0}, k \ne 0$ -If we have a one sided limit of the form $\lim_{x \to a^*} \frac{f(x)}{g(x)}$ +If we have a one sided limit of the form $\lim_{x \to a^*} \frac{f(x)}{g(x)}$ $f(x) \to k (k \ne 0)$ and $g(x) \to 0$ as $x \to a$ then: +$$ \lim_{x \to a^*} \frac{f(x)}{g(x)} = \infty \space or \space \lim_{x \to a^*} \frac{f(x)}{g(x)} = -\infty $$ # Continuity A function is continuous if their graph can be traced with a pencil without lifting the pencil from the page. From 51bfc78a36f6dd8a4281cacf8213dd6e470c2bea Mon Sep 17 00:00:00 2001 From: arc Date: Tue, 21 Jan 2025 12:49:38 -0700 Subject: [PATCH 0791/1027] vault backup: 2025-01-21 12:49:38 --- education/math/MATH1210 (calc 1)/Limits.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/education/math/MATH1210 (calc 1)/Limits.md b/education/math/MATH1210 (calc 1)/Limits.md index a45d17b..ab0171a 100644 --- a/education/math/MATH1210 (calc 1)/Limits.md +++ b/education/math/MATH1210 (calc 1)/Limits.md @@ -27,6 +27,8 @@ To find this limit if it exists we must perform some mathematical manipulations # Limits of the Form $\frac{k}{0}, k \ne 0$ If we have a one sided limit of the form $\lim_{x \to a^*} \frac{f(x)}{g(x)}$ $f(x) \to k (k \ne 0)$ and $g(x) \to 0$ as $x \to a$ then: $$ \lim_{x \to a^*} \frac{f(x)}{g(x)} = \infty \space or \space \lim_{x \to a^*} \frac{f(x)}{g(x)} = -\infty $$ +# Limits of the Form $\frac{\infty}{\infty}$ +If we have a limit of the form $\lim_{x \to a} \frac{f(x)}{g(x)}$ where both $f(x) \to \infty$ and $g(x) \to \infty$ as $x \to a$ then the limit may or may not exist and is said to be an indeterminate form of type $\frac{\infty}{\infty}$ # Continuity A function is continuous if their graph can be traced with a pencil without lifting the pencil from the page. From a5661f686d5c7ae051a4953e495f84d9ba9d7729 Mon Sep 17 00:00:00 2001 From: arc Date: Tue, 21 Jan 2025 12:55:49 -0700 Subject: [PATCH 0792/1027] vault backup: 2025-01-21 12:55:49 --- education/math/MATH1210 (calc 1)/Limits.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/education/math/MATH1210 (calc 1)/Limits.md b/education/math/MATH1210 (calc 1)/Limits.md index ab0171a..35ac4b1 100644 --- a/education/math/MATH1210 (calc 1)/Limits.md +++ b/education/math/MATH1210 (calc 1)/Limits.md @@ -28,7 +28,9 @@ To find this limit if it exists we must perform some mathematical manipulations If we have a one sided limit of the form $\lim_{x \to a^*} \frac{f(x)}{g(x)}$ $f(x) \to k (k \ne 0)$ and $g(x) \to 0$ as $x \to a$ then: $$ \lim_{x \to a^*} \frac{f(x)}{g(x)} = \infty \space or \space \lim_{x \to a^*} \frac{f(x)}{g(x)} = -\infty $$ # Limits of the Form $\frac{\infty}{\infty}$ -If we have a limit of the form $\lim_{x \to a} \frac{f(x)}{g(x)}$ where both $f(x) \to \infty$ and $g(x) \to \infty$ as $x \to a$ then the limit may or may not exist and is said to be an indeterminate form of type $\frac{\infty}{\infty}$ +If we have a limit of the form $\lim_{x \to a} \frac{f(x)}{g(x)}$ where both $f(x) \to \infty$ and $g(x) \to \infty$ as $x \to a$ then the limit may or may not exist and is said to be an indeterminate form of type $\frac{\infty}{\infty}$. + +To find the limit if it exists we must perform some algebraic manipulations on the quotient in # Continuity A function is continuous if their graph can be traced with a pencil without lifting the pencil from the page. From 20650f291617bd9bb39842b5c892bc4b96cd01e6 Mon Sep 17 00:00:00 2001 From: arc Date: Tue, 21 Jan 2025 13:00:48 -0700 Subject: [PATCH 0793/1027] vault backup: 2025-01-21 13:00:48 --- education/math/MATH1210 (calc 1)/Limits.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/education/math/MATH1210 (calc 1)/Limits.md b/education/math/MATH1210 (calc 1)/Limits.md index 35ac4b1..400f4c0 100644 --- a/education/math/MATH1210 (calc 1)/Limits.md +++ b/education/math/MATH1210 (calc 1)/Limits.md @@ -30,7 +30,9 @@ $$ \lim_{x \to a^*} \frac{f(x)}{g(x)} = \infty \space or \space \lim_{x \to a^*} # Limits of the Form $\frac{\infty}{\infty}$ If we have a limit of the form $\lim_{x \to a} \frac{f(x)}{g(x)}$ where both $f(x) \to \infty$ and $g(x) \to \infty$ as $x \to a$ then the limit may or may not exist and is said to be an indeterminate form of type $\frac{\infty}{\infty}$. -To find the limit if it exists we must perform some algebraic manipulations on the quotient in +To find the limit if it exists we must perform some algebraic manipulations on the quotient in order to change the form of the function. + +If $f(x)$ and $g(x)$ are polynomials, then we can multiply the numerator and denominator by $\dfrac{1}{x^n}$, where $n$ is the degree of the polynomial in the denominator. # Continuity A function is continuous if their graph can be traced with a pencil without lifting the pencil from the page. From f0f52ceacd28e2d3585baaabac670e46f1b39b6b Mon Sep 17 00:00:00 2001 From: arc Date: Sun, 26 Jan 2025 17:21:04 -0700 Subject: [PATCH 0794/1027] vault backup: 2025-01-26 17:21:04 --- education/math/MATH1210 (calc 1)/Derivatives.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 education/math/MATH1210 (calc 1)/Derivatives.md diff --git a/education/math/MATH1210 (calc 1)/Derivatives.md b/education/math/MATH1210 (calc 1)/Derivatives.md new file mode 100644 index 0000000..e69de29 From 032efeb055e8b64f2b352ad51cd8390ba29426c6 Mon Sep 17 00:00:00 2001 From: arc Date: Sun, 26 Jan 2025 17:32:19 -0700 Subject: [PATCH 0795/1027] vault backup: 2025-01-26 17:32:19 --- education/math/MATH1210 (calc 1)/Derivatives.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/education/math/MATH1210 (calc 1)/Derivatives.md b/education/math/MATH1210 (calc 1)/Derivatives.md index e69de29..0bd2185 100644 --- a/education/math/MATH1210 (calc 1)/Derivatives.md +++ b/education/math/MATH1210 (calc 1)/Derivatives.md @@ -0,0 +1,9 @@ +A derivative can be used to describe the rate of change for a single point. + +The formula used to calculate the average rate of change looks like this: +$$ \dfrac{f(b) - f(a)}{b - a} $$ +Interpreting it, this can be described as the change in $y$ over the change in $x$. + +- Speed is always positive +- Velocity is directional +- \ No newline at end of file From b2aacf61ff3a73bf3ec607a663e3ff02b875b52e Mon Sep 17 00:00:00 2001 From: arc Date: Sun, 26 Jan 2025 17:37:19 -0700 Subject: [PATCH 0796/1027] vault backup: 2025-01-26 17:37:19 --- education/math/MATH1210 (calc 1)/Derivatives.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/education/math/MATH1210 (calc 1)/Derivatives.md b/education/math/MATH1210 (calc 1)/Derivatives.md index 0bd2185..2660959 100644 --- a/education/math/MATH1210 (calc 1)/Derivatives.md +++ b/education/math/MATH1210 (calc 1)/Derivatives.md @@ -1,4 +1,4 @@ -A derivative can be used to describe the rate of change for a single point. +A derivative can be used to describe the rate of change at a single point, or the *instantaneous velocity*. The formula used to calculate the average rate of change looks like this: $$ \dfrac{f(b) - f(a)}{b - a} $$ @@ -6,4 +6,7 @@ Interpreting it, this can be described as the change in $y$ over the change in $ - Speed is always positive - Velocity is directional -- \ No newline at end of file + +# Line Types +## Secant Line +A **Secant Line** connects two points on a graph. \ No newline at end of file From e8b4376546d6f5a60f24321b36379d5994ba3d26 Mon Sep 17 00:00:00 2001 From: arc Date: Sun, 26 Jan 2025 17:42:19 -0700 Subject: [PATCH 0797/1027] vault backup: 2025-01-26 17:42:19 --- education/math/MATH1210 (calc 1)/Derivatives.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/education/math/MATH1210 (calc 1)/Derivatives.md b/education/math/MATH1210 (calc 1)/Derivatives.md index 2660959..c3ed692 100644 --- a/education/math/MATH1210 (calc 1)/Derivatives.md +++ b/education/math/MATH1210 (calc 1)/Derivatives.md @@ -7,6 +7,11 @@ Interpreting it, this can be described as the change in $y$ over the change in $ - Speed is always positive - Velocity is directional +As the distance between the two points + + # Line Types ## Secant Line -A **Secant Line** connects two points on a graph. \ No newline at end of file +A **Secant Line** connects two points on a graph. + +A **Tangent Line** represents the rate of change or slope at a single point on the graph. \ No newline at end of file From c5584123d2312ad26cd31e02002c5eba9bfe2643 Mon Sep 17 00:00:00 2001 From: arc Date: Sun, 26 Jan 2025 17:47:19 -0700 Subject: [PATCH 0798/1027] vault backup: 2025-01-26 17:47:19 --- education/math/MATH1210 (calc 1)/Derivatives.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/education/math/MATH1210 (calc 1)/Derivatives.md b/education/math/MATH1210 (calc 1)/Derivatives.md index c3ed692..8759472 100644 --- a/education/math/MATH1210 (calc 1)/Derivatives.md +++ b/education/math/MATH1210 (calc 1)/Derivatives.md @@ -7,9 +7,10 @@ Interpreting it, this can be described as the change in $y$ over the change in $ - Speed is always positive - Velocity is directional -As the distance between the two points - +As the distance between the two points $a$ and $b$ grow smaller, we get closer and closer to the instantaneous velocity of a point. Limits are suited to describing the behavior of a function as it approaches a point. +If we have the coordinate pair $(a, f(a))$, and the value $h$ is the distance between $a$ and another $x$ value, the coordinates of that point can be described as ($(a + h, f(a + h))$. With this info: +- The slope of the secant line can be described as $ # Line Types ## Secant Line A **Secant Line** connects two points on a graph. From 89a56a9d16282f044267bfc7985f8436dab18141 Mon Sep 17 00:00:00 2001 From: arc Date: Sun, 26 Jan 2025 17:52:19 -0700 Subject: [PATCH 0799/1027] vault backup: 2025-01-26 17:52:19 --- education/math/MATH1210 (calc 1)/Derivatives.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/education/math/MATH1210 (calc 1)/Derivatives.md b/education/math/MATH1210 (calc 1)/Derivatives.md index 8759472..6a6c09c 100644 --- a/education/math/MATH1210 (calc 1)/Derivatives.md +++ b/education/math/MATH1210 (calc 1)/Derivatives.md @@ -10,7 +10,8 @@ Interpreting it, this can be described as the change in $y$ over the change in $ As the distance between the two points $a$ and $b$ grow smaller, we get closer and closer to the instantaneous velocity of a point. Limits are suited to describing the behavior of a function as it approaches a point. If we have the coordinate pair $(a, f(a))$, and the value $h$ is the distance between $a$ and another $x$ value, the coordinates of that point can be described as ($(a + h, f(a + h))$. With this info: -- The slope of the secant line can be described as $ +- The slope of the secant line can be described as $\dfrac{f(a + h) - f(a)}{a + h - a}$, which simplifies to $\dfrac{f(a + h) - f(a)}{h}$. +- The slope of the *tangent line* or the *instantaneous velocity* can be found by taking the limit of the above function as the distance ($h$) approaches zero: $\lim_{h \to 0}\dfrac{f(a + h) - f(a)}{h}$ # Line Types ## Secant Line A **Secant Line** connects two points on a graph. From 232b5f2709704bc62d2ce6ee27da5425be190c29 Mon Sep 17 00:00:00 2001 From: arc Date: Sun, 26 Jan 2025 17:57:19 -0700 Subject: [PATCH 0800/1027] vault backup: 2025-01-26 17:57:19 --- education/math/MATH1210 (calc 1)/Derivatives.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/education/math/MATH1210 (calc 1)/Derivatives.md b/education/math/MATH1210 (calc 1)/Derivatives.md index 6a6c09c..2f9cc9a 100644 --- a/education/math/MATH1210 (calc 1)/Derivatives.md +++ b/education/math/MATH1210 (calc 1)/Derivatives.md @@ -11,7 +11,9 @@ As the distance between the two points $a$ and $b$ grow smaller, we get closer a If we have the coordinate pair $(a, f(a))$, and the value $h$ is the distance between $a$ and another $x$ value, the coordinates of that point can be described as ($(a + h, f(a + h))$. With this info: - The slope of the secant line can be described as $\dfrac{f(a + h) - f(a)}{a + h - a}$, which simplifies to $\dfrac{f(a + h) - f(a)}{h}$. -- The slope of the *tangent line* or the *instantaneous velocity* can be found by taking the limit of the above function as the distance ($h$) approaches zero: $\lim_{h \to 0}\dfrac{f(a + h) - f(a)}{h}$ +- The slope of the *tangent line* or the *instantaneous velocity* can be found by taking the limit of the above function as the distance ($h$) approaches zero: +$$\lim_{h \to 0}\dfrac{f(a + h) - f(a)}{h}$$ +The above formula can be used to find the *derivative*. This may also be referred to as the *instantaneous velocity*, or the *instantaneous rate of change*. # Line Types ## Secant Line A **Secant Line** connects two points on a graph. From 8c346a674bb6232ac4ee0e570c6dd3eb888eb3d0 Mon Sep 17 00:00:00 2001 From: arc Date: Sun, 26 Jan 2025 18:55:09 -0700 Subject: [PATCH 0801/1027] vault backup: 2025-01-26 18:55:09 --- .obsidian/plugins/obsidian-git/data.json | 27 ------------------------ 1 file changed, 27 deletions(-) diff --git a/.obsidian/plugins/obsidian-git/data.json b/.obsidian/plugins/obsidian-git/data.json index bef4c6e..e69de29 100644 --- a/.obsidian/plugins/obsidian-git/data.json +++ b/.obsidian/plugins/obsidian-git/data.json @@ -1,27 +0,0 @@ -{ - "commitMessage": "vault backup: {{date}}", - "autoCommitMessage": "vault backup: {{date}}", - "commitDateFormat": "YYYY-MM-DD HH:mm:ss", - "autoSaveInterval": 5, - "autoPushInterval": 0, - "autoPullInterval": 5, - "autoPullOnBoot": true, - "disablePush": false, - "pullBeforePush": true, - "disablePopups": false, - "listChangedFilesInMessageBody": false, - "showStatusBar": true, - "updateSubmodules": false, - "syncMethod": "merge", - "customMessageOnAutoBackup": false, - "autoBackupAfterFileChange": false, - "treeStructure": false, - "refreshSourceControl": true, - "basePath": "", - "differentIntervalCommitAndPush": false, - "changedFilesInStatusBar": false, - "showedMobileNotice": true, - "refreshSourceControlTimer": 7000, - "showBranchStatusBar": true, - "setLastSaveToLastCommit": false -} \ No newline at end of file From 24c0a5639dfa699a5f8fb827324cb820bc33d6d0 Mon Sep 17 00:00:00 2001 From: arc Date: Mon, 27 Jan 2025 10:27:06 -0700 Subject: [PATCH 0802/1027] vault backup: 2025-01-27 10:27:06 --- .obsidian/plugins/obsidian-git/data.json | 27 ++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/.obsidian/plugins/obsidian-git/data.json b/.obsidian/plugins/obsidian-git/data.json index e69de29..bef4c6e 100644 --- a/.obsidian/plugins/obsidian-git/data.json +++ b/.obsidian/plugins/obsidian-git/data.json @@ -0,0 +1,27 @@ +{ + "commitMessage": "vault backup: {{date}}", + "autoCommitMessage": "vault backup: {{date}}", + "commitDateFormat": "YYYY-MM-DD HH:mm:ss", + "autoSaveInterval": 5, + "autoPushInterval": 0, + "autoPullInterval": 5, + "autoPullOnBoot": true, + "disablePush": false, + "pullBeforePush": true, + "disablePopups": false, + "listChangedFilesInMessageBody": false, + "showStatusBar": true, + "updateSubmodules": false, + "syncMethod": "merge", + "customMessageOnAutoBackup": false, + "autoBackupAfterFileChange": false, + "treeStructure": false, + "refreshSourceControl": true, + "basePath": "", + "differentIntervalCommitAndPush": false, + "changedFilesInStatusBar": false, + "showedMobileNotice": true, + "refreshSourceControlTimer": 7000, + "showBranchStatusBar": true, + "setLastSaveToLastCommit": false +} \ No newline at end of file From defef3e3b13e30e28234adf6b3d11c1b746dafd9 Mon Sep 17 00:00:00 2001 From: arc Date: Mon, 27 Jan 2025 10:37:59 -0700 Subject: [PATCH 0803/1027] vault backup: 2025-01-27 10:37:59 --- .../computer engineering/ECE2700/Verilog.md | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/education/computer engineering/ECE2700/Verilog.md b/education/computer engineering/ECE2700/Verilog.md index 3f221b5..5eb115f 100644 --- a/education/computer engineering/ECE2700/Verilog.md +++ b/education/computer engineering/ECE2700/Verilog.md @@ -18,6 +18,7 @@ - Standardized in 1995 - Originally intended for simulation of logic networks, later adapted to synthesis +- Behavioral Verilog describes broader behavior, at a higher level ```verilog // V---V---v--v-----portlist (not ordered) module example1(x1, x2, s, f); @@ -34,6 +35,23 @@ module example1(x1, x2, s, f); endmodule ``` -- Behavioral Verilog describes broader behavior, at a higher level +```verilog +// V---V---v--v-----portlist (not ordered) +module example1(x1, x2, s, f); + // Defining the types of the various ports + input x1, x2, s; + output f; + // You can also do this + assign f = (~s & x1) | (s & x2); + // Or this + always @(a, b) + // always @(....) says "do this stuff whenever any of the values inside of @(...) change" + {s1, s0} = a + b; +endmodule +``` - Structural Verilog describes how things are laid out at a logic level +## Testbench Layout + + + From 0acfe2ddd345df81e0532c32428191ec71d2d186 Mon Sep 17 00:00:00 2001 From: arc Date: Mon, 27 Jan 2025 10:42:59 -0700 Subject: [PATCH 0804/1027] vault backup: 2025-01-27 10:42:59 --- education/computer engineering/ECE2700/Verilog.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/education/computer engineering/ECE2700/Verilog.md b/education/computer engineering/ECE2700/Verilog.md index 5eb115f..4320573 100644 --- a/education/computer engineering/ECE2700/Verilog.md +++ b/education/computer engineering/ECE2700/Verilog.md @@ -52,6 +52,11 @@ endmodule - Structural Verilog describes how things are laid out at a logic level ## Testbench Layout - +- Define UUT module +- Initialize Inputs +- Wait +- Test every possible combination of inputs and validate that the outputs are correct + +- $\$display("Hello, world)$ From 46f7a2c9b5d6ffae70970146a6c2dd8006f02736 Mon Sep 17 00:00:00 2001 From: arc Date: Mon, 27 Jan 2025 10:47:59 -0700 Subject: [PATCH 0805/1027] vault backup: 2025-01-27 10:47:59 --- education/computer engineering/ECE2700/Verilog.md | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/education/computer engineering/ECE2700/Verilog.md b/education/computer engineering/ECE2700/Verilog.md index 4320573..4aed32a 100644 --- a/education/computer engineering/ECE2700/Verilog.md +++ b/education/computer engineering/ECE2700/Verilog.md @@ -56,7 +56,4 @@ endmodule - Initialize Inputs - Wait - Test every possible combination of inputs and validate that the outputs are correct - -- $\$display("Hello, world)$ - - +- Debug output can be displayed with `$display("Hello world");` From 085f5bf4a716a7d77cd19c03459854375b008d39 Mon Sep 17 00:00:00 2001 From: arc Date: Mon, 27 Jan 2025 11:19:37 -0700 Subject: [PATCH 0806/1027] vault backup: 2025-01-27 11:19:37 --- education/computer engineering/ECE2700/Digital Hardware.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/education/computer engineering/ECE2700/Digital Hardware.md b/education/computer engineering/ECE2700/Digital Hardware.md index 51fc4b2..6b4b737 100644 --- a/education/computer engineering/ECE2700/Digital Hardware.md +++ b/education/computer engineering/ECE2700/Digital Hardware.md @@ -24,7 +24,8 @@ $$ V(D) = d_{n-1} * 10^{n-1} + d_{n - 2} * 10^{n-2} + \cdots + d_1 * 10^1 + d_0 In a binary or base 2 number system, each digit can be a zero or one, called a *bit*. $$ D = d_{n-1}d_{n-2} \cdots d_1 d_0 $$ To determine the integer value, a very similar formula can be used. -$$ V(B) = b_{n-1} * 2^{n-1} + b_{n-2} * 2^{n-2} \cdots b_{1} * 2^1 + b_0 * 2^0 $$ +$$ V(B) = b_{n-1} * 2^{n-1} + b_{n-2} * 2^{n-2} \cdots b_{1} * 2^1 + b_0 * 2^0 $$This formula can be generalized as: +*For radix * - The base of a number is often notated in the format of $(n)_b$, EG a base 10 number might be $(14)_{10}$, and a binary number might be $(10)_2$. - The *least significant bit* (LSB) is usually the right-most bit. The highest value bit, or the *most significant bit* (MSB). - A nibble is 4 bits, and a byte is 8 bits From 951d27ba8595c1771c791404bd20873ccfc6ac30 Mon Sep 17 00:00:00 2001 From: arc Date: Mon, 27 Jan 2025 11:24:37 -0700 Subject: [PATCH 0807/1027] vault backup: 2025-01-27 11:24:37 --- education/computer engineering/ECE2700/Digital Hardware.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/education/computer engineering/ECE2700/Digital Hardware.md b/education/computer engineering/ECE2700/Digital Hardware.md index 6b4b737..acd1d61 100644 --- a/education/computer engineering/ECE2700/Digital Hardware.md +++ b/education/computer engineering/ECE2700/Digital Hardware.md @@ -25,7 +25,8 @@ In a binary or base 2 number system, each digit can be a zero or one, called a * $$ D = d_{n-1}d_{n-2} \cdots d_1 d_0 $$ To determine the integer value, a very similar formula can be used. $$ V(B) = b_{n-1} * 2^{n-1} + b_{n-2} * 2^{n-2} \cdots b_{1} * 2^1 + b_0 * 2^0 $$This formula can be generalized as: -*For radix * +*For radix $r$*: +$$ k = k_{n-1} k_{n-2} \cdots k_1 k_0$$ - The base of a number is often notated in the format of $(n)_b$, EG a base 10 number might be $(14)_{10}$, and a binary number might be $(10)_2$. - The *least significant bit* (LSB) is usually the right-most bit. The highest value bit, or the *most significant bit* (MSB). - A nibble is 4 bits, and a byte is 8 bits From 5a86cf372a4d6073c26600138b2551a44db1ac7f Mon Sep 17 00:00:00 2001 From: arc Date: Mon, 27 Jan 2025 17:42:39 -0700 Subject: [PATCH 0808/1027] vault backup: 2025-01-27 17:42:39 --- .../ECE2700/Digital Hardware.md | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/education/computer engineering/ECE2700/Digital Hardware.md b/education/computer engineering/ECE2700/Digital Hardware.md index acd1d61..a30d5d9 100644 --- a/education/computer engineering/ECE2700/Digital Hardware.md +++ b/education/computer engineering/ECE2700/Digital Hardware.md @@ -36,18 +36,18 @@ Repeatedly divide by 2, and track the remainder. As an example, the below table shows how one might convert from $(857)_{10}$ to base 2. -| Equation | Remainder | -| --------------- | --------- | -| $857 / 2 = 428$ | $1$ | -| $428 / 2 = 214$ | $0$ | -| $214 / 2 = 107$ | $0$ | -| $107 / 2 = 53$ | $1$ | -| $53 / 2 = 26$ | $1$ | -| $26 / 2 = 13$ | $0$ | -| $13 / 2 = 6$ | $1$ | -| $6 / 2 = 3$ | $0$ | -| $3 / 2 = 1$ | $1$ | -| $1 / 2 = 0$ | $1$ | +| Equation | Remainder | | +| --------------- | --------- | --- | +| $857 / 2 = 428$ | $1$ | | +| $428 / 2 = 214$ | $0$ | | +| $214 / 2 = 107$ | $0$ | | +| $107 / 2 = 53$ | $1$ | | +| $53 / 2 = 26$ | $1$ | | +| $26 / 2 = 13$ | $0$ | | +| $13 / 2 = 6$ | $1$ | | +| $6 / 2 = 3$ | $0$ | | +| $3 / 2 = 1$ | $1$ | | +| $1 / 2 = 0$ | $1$ | | The final answer is $1101011001$. The least significant bit is the remainder of the first division operation, and the most significant bit is the remainder of the last operation. # Definitions From 5bff4105799be0c091034c8a4e99fb7b2c1abc85 Mon Sep 17 00:00:00 2001 From: arc Date: Mon, 27 Jan 2025 18:48:20 -0700 Subject: [PATCH 0809/1027] vault backup: 2025-01-27 18:48:20 --- .obsidian/plugins/obsidian-git/data.json | 27 ------------------------ 1 file changed, 27 deletions(-) diff --git a/.obsidian/plugins/obsidian-git/data.json b/.obsidian/plugins/obsidian-git/data.json index bef4c6e..e69de29 100644 --- a/.obsidian/plugins/obsidian-git/data.json +++ b/.obsidian/plugins/obsidian-git/data.json @@ -1,27 +0,0 @@ -{ - "commitMessage": "vault backup: {{date}}", - "autoCommitMessage": "vault backup: {{date}}", - "commitDateFormat": "YYYY-MM-DD HH:mm:ss", - "autoSaveInterval": 5, - "autoPushInterval": 0, - "autoPullInterval": 5, - "autoPullOnBoot": true, - "disablePush": false, - "pullBeforePush": true, - "disablePopups": false, - "listChangedFilesInMessageBody": false, - "showStatusBar": true, - "updateSubmodules": false, - "syncMethod": "merge", - "customMessageOnAutoBackup": false, - "autoBackupAfterFileChange": false, - "treeStructure": false, - "refreshSourceControl": true, - "basePath": "", - "differentIntervalCommitAndPush": false, - "changedFilesInStatusBar": false, - "showedMobileNotice": true, - "refreshSourceControlTimer": 7000, - "showBranchStatusBar": true, - "setLastSaveToLastCommit": false -} \ No newline at end of file From 2f31717a230b71d3baf12b9c0037ee7472002a0a Mon Sep 17 00:00:00 2001 From: arc Date: Tue, 28 Jan 2025 11:14:37 -0700 Subject: [PATCH 0810/1027] vault backup: 2025-01-28 11:14:37 --- .obsidian/plugins/obsidian-git/data.json | 27 ++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/.obsidian/plugins/obsidian-git/data.json b/.obsidian/plugins/obsidian-git/data.json index e69de29..bef4c6e 100644 --- a/.obsidian/plugins/obsidian-git/data.json +++ b/.obsidian/plugins/obsidian-git/data.json @@ -0,0 +1,27 @@ +{ + "commitMessage": "vault backup: {{date}}", + "autoCommitMessage": "vault backup: {{date}}", + "commitDateFormat": "YYYY-MM-DD HH:mm:ss", + "autoSaveInterval": 5, + "autoPushInterval": 0, + "autoPullInterval": 5, + "autoPullOnBoot": true, + "disablePush": false, + "pullBeforePush": true, + "disablePopups": false, + "listChangedFilesInMessageBody": false, + "showStatusBar": true, + "updateSubmodules": false, + "syncMethod": "merge", + "customMessageOnAutoBackup": false, + "autoBackupAfterFileChange": false, + "treeStructure": false, + "refreshSourceControl": true, + "basePath": "", + "differentIntervalCommitAndPush": false, + "changedFilesInStatusBar": false, + "showedMobileNotice": true, + "refreshSourceControlTimer": 7000, + "showBranchStatusBar": true, + "setLastSaveToLastCommit": false +} \ No newline at end of file From f5dfcf27ed7fbe27c1a5ef21d88548b1d954e36b Mon Sep 17 00:00:00 2001 From: arc Date: Tue, 28 Jan 2025 11:19:36 -0700 Subject: [PATCH 0811/1027] vault backup: 2025-01-28 11:19:36 --- education/math/MATH1210 (calc 1)/Derivatives.md | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/education/math/MATH1210 (calc 1)/Derivatives.md b/education/math/MATH1210 (calc 1)/Derivatives.md index 2f9cc9a..6e1b006 100644 --- a/education/math/MATH1210 (calc 1)/Derivatives.md +++ b/education/math/MATH1210 (calc 1)/Derivatives.md @@ -18,4 +18,19 @@ The above formula can be used to find the *derivative*. This may also be referre ## Secant Line A **Secant Line** connects two points on a graph. -A **Tangent Line** represents the rate of change or slope at a single point on the graph. \ No newline at end of file +A **Tangent Line** represents the rate of change or slope at a single point on the graph. + +# Notation +Given the equation $y = f(x)$, the following are all notations used to represent the derivative of $f$ at $x$: +- $f'(x)$ +- $\dfrac{d}{dx}f(x)$ +- $y'$ +- $\dfrac{dy}{dx}$ +- $\dfrac{df}{dx}$ +- "Derivative of $f$ with respect to $x$" + +# Functions that are not differentiable at a given point +- Where a function is not defined +- Where a sharp turn takes place +- If the slope of the tangent line is vertical + From 7eb094c9f9620120969ef236d94ec66f1382ffa6 Mon Sep 17 00:00:00 2001 From: arc Date: Tue, 28 Jan 2025 11:24:36 -0700 Subject: [PATCH 0812/1027] vault backup: 2025-01-28 11:24:36 --- education/math/MATH1210 (calc 1)/Derivatives.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/education/math/MATH1210 (calc 1)/Derivatives.md b/education/math/MATH1210 (calc 1)/Derivatives.md index 6e1b006..8825a7f 100644 --- a/education/math/MATH1210 (calc 1)/Derivatives.md +++ b/education/math/MATH1210 (calc 1)/Derivatives.md @@ -34,3 +34,5 @@ Given the equation $y = f(x)$, the following are all notations used to represent - Where a sharp turn takes place - If the slope of the tangent line is vertical +# Higher Order Differentials +- Take the differential of a differential \ No newline at end of file From ad505f4e043386a403fd8994a8d9ef2ece4ad863 Mon Sep 17 00:00:00 2001 From: arc Date: Wed, 29 Jan 2025 10:08:44 -0700 Subject: [PATCH 0813/1027] vault backup: 2025-01-29 10:08:44 --- education/computer engineering/ECE2700/Adders.md | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 education/computer engineering/ECE2700/Adders.md diff --git a/education/computer engineering/ECE2700/Adders.md b/education/computer engineering/ECE2700/Adders.md new file mode 100644 index 0000000..4db90c5 --- /dev/null +++ b/education/computer engineering/ECE2700/Adders.md @@ -0,0 +1,2 @@ +# Carry-Select Adder +A carry select adder is built using two ripple carry adders, and multiplexing them together based off of the value of $c_{in}$. This is done for performance reasons, because as addition propagates through the ripple carry \ No newline at end of file From 42dcc22972d7fc9a536b6dc923bcabf35b1bc362 Mon Sep 17 00:00:00 2001 From: arc Date: Wed, 29 Jan 2025 10:13:44 -0700 Subject: [PATCH 0814/1027] vault backup: 2025-01-29 10:13:44 --- education/computer engineering/ECE2700/Adders.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/education/computer engineering/ECE2700/Adders.md b/education/computer engineering/ECE2700/Adders.md index 4db90c5..33561ca 100644 --- a/education/computer engineering/ECE2700/Adders.md +++ b/education/computer engineering/ECE2700/Adders.md @@ -1,2 +1,2 @@ # Carry-Select Adder -A carry select adder is built using two ripple carry adders, and multiplexing them together based off of the value of $c_{in}$. This is done for performance reasons, because as addition propagates through the ripple carry \ No newline at end of file +A carry select adder is built using two ripple carry adders, and multiplexing them together based off of the value of $c_{in}$. This is done for performance reasons, because when adding two numbers $x$ and $y$, we know $x$ and $y$ *before* we know the value of $c_{in}$. This means we can compute what the output of $x + y$ \ No newline at end of file From 2b64aa4f4075a94205f2cfb5152d1e729689304a Mon Sep 17 00:00:00 2001 From: arc Date: Wed, 29 Jan 2025 10:18:44 -0700 Subject: [PATCH 0815/1027] vault backup: 2025-01-29 10:18:44 --- education/computer engineering/ECE2700/Adders.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/education/computer engineering/ECE2700/Adders.md b/education/computer engineering/ECE2700/Adders.md index 33561ca..7a1fc48 100644 --- a/education/computer engineering/ECE2700/Adders.md +++ b/education/computer engineering/ECE2700/Adders.md @@ -1,2 +1,7 @@ # Carry-Select Adder -A carry select adder is built using two ripple carry adders, and multiplexing them together based off of the value of $c_{in}$. This is done for performance reasons, because when adding two numbers $x$ and $y$, we know $x$ and $y$ *before* we know the value of $c_{in}$. This means we can compute what the output of $x + y$ \ No newline at end of file +A carry select adder is built using two ripple carry adders, and multiplexing them together based off of the value of $c_{in}$. This is done for performance reasons, because when adding two numbers $x$ and $y$, we know $x$ and $y$ *before* we know the value of $c_{in}$. This means we can compute what the output of $x + y + c_{in}$ would be for $c_{in} = 0$ and $c_{in} = 1$ at the same time, then just toggle between the two possible values given the *actual* value of $c_{in}$. + +The delay is calculated like so: +1. Given the delay of a full adder is $k$, and the delay of a 2 to 1 mux is $\frac{1}{m}k$, +2. then the delay of a 4 bit ripple carry adder is $4k$, because it's 4 full adders chained together, running sequentially. +3. This means that the delay of a 4 bit \ No newline at end of file From 5898de24cb5428c132c51a7e165252c318f10a68 Mon Sep 17 00:00:00 2001 From: arc Date: Wed, 29 Jan 2025 10:37:26 -0700 Subject: [PATCH 0816/1027] vault backup: 2025-01-29 10:37:25 --- education/computer engineering/ECE2700/Adders.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/education/computer engineering/ECE2700/Adders.md b/education/computer engineering/ECE2700/Adders.md index 7a1fc48..f221fbe 100644 --- a/education/computer engineering/ECE2700/Adders.md +++ b/education/computer engineering/ECE2700/Adders.md @@ -4,4 +4,4 @@ A carry select adder is built using two ripple carry adders, and multiplexing th The delay is calculated like so: 1. Given the delay of a full adder is $k$, and the delay of a 2 to 1 mux is $\frac{1}{m}k$, 2. then the delay of a 4 bit ripple carry adder is $4k$, because it's 4 full adders chained together, running sequentially. -3. This means that the delay of a 4 bit \ No newline at end of file +3. This means that the delay of a 4 bit carry select adder is $4k + \frac{k}{m}$ \ No newline at end of file From 7d7efe3d552bf1856a251203c139e5823b4f8cb0 Mon Sep 17 00:00:00 2001 From: arc Date: Thu, 30 Jan 2025 08:58:43 -0700 Subject: [PATCH 0817/1027] vault backup: 2025-01-30 08:58:43 --- education/math/MATH1210 (calc 1)/Derivatives.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/education/math/MATH1210 (calc 1)/Derivatives.md b/education/math/MATH1210 (calc 1)/Derivatives.md index 8825a7f..7158737 100644 --- a/education/math/MATH1210 (calc 1)/Derivatives.md +++ b/education/math/MATH1210 (calc 1)/Derivatives.md @@ -35,4 +35,8 @@ Given the equation $y = f(x)$, the following are all notations used to represent - If the slope of the tangent line is vertical # Higher Order Differentials -- Take the differential of a differential \ No newline at end of file +- Take the differential of a differential + +Using the definition of a derivative to determine the derivative of $f(x) = x^n$, where $n$ is any natural number. + +$$ f'(x) = \lim_{h \to 0} \dfrac{(x + h)^n - x^n}{h} $$ From cfd20d58513342f0fb3a8b376c2d848a961a11b4 Mon Sep 17 00:00:00 2001 From: arc Date: Thu, 30 Jan 2025 09:03:43 -0700 Subject: [PATCH 0818/1027] vault backup: 2025-01-30 09:03:43 --- education/math/MATH1210 (calc 1)/Derivatives.md | 1 + 1 file changed, 1 insertion(+) diff --git a/education/math/MATH1210 (calc 1)/Derivatives.md b/education/math/MATH1210 (calc 1)/Derivatives.md index 7158737..cf66ba1 100644 --- a/education/math/MATH1210 (calc 1)/Derivatives.md +++ b/education/math/MATH1210 (calc 1)/Derivatives.md @@ -40,3 +40,4 @@ Given the equation $y = f(x)$, the following are all notations used to represent Using the definition of a derivative to determine the derivative of $f(x) = x^n$, where $n$ is any natural number. $$ f'(x) = \lim_{h \to 0} \dfrac{(x + h)^n - x^n}{h} $$ +- Using pascal's triangle, we can approximate $(x + h)^n$ From f441527eb28a2af16637243660e91642242dadb0 Mon Sep 17 00:00:00 2001 From: arc Date: Thu, 30 Jan 2025 09:08:43 -0700 Subject: [PATCH 0819/1027] vault backup: 2025-01-30 09:08:43 --- education/math/MATH1210 (calc 1)/Derivatives.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/education/math/MATH1210 (calc 1)/Derivatives.md b/education/math/MATH1210 (calc 1)/Derivatives.md index cf66ba1..c15278c 100644 --- a/education/math/MATH1210 (calc 1)/Derivatives.md +++ b/education/math/MATH1210 (calc 1)/Derivatives.md @@ -41,3 +41,15 @@ Using the definition of a derivative to determine the derivative of $f(x) = x^n$ $$ f'(x) = \lim_{h \to 0} \dfrac{(x + h)^n - x^n}{h} $$ - Using pascal's triangle, we can approximate $(x + h)^n$ +``` + 1 + 1 1 + 1 2 1 + 1 3 3 1 +1 4 6 4 1 +``` + +- Where $n = 0$: $(x + h)^0 = 1$ +- Where $n = 1$: $(x +h)^1 = 1x + 1h$ +- Where $n = 2$: $(x +h)^2 = x^2 + 2xh + h^2$ +- Where $n = 3$: $(x + h)^3 = 1 From 492926f89ef861f7beffa52a544535bbad113487 Mon Sep 17 00:00:00 2001 From: arc Date: Thu, 30 Jan 2025 09:13:43 -0700 Subject: [PATCH 0820/1027] vault backup: 2025-01-30 09:13:43 --- .../math/MATH1210 (calc 1)/Derivatives.md | 55 ------------------- 1 file changed, 55 deletions(-) diff --git a/education/math/MATH1210 (calc 1)/Derivatives.md b/education/math/MATH1210 (calc 1)/Derivatives.md index c15278c..e69de29 100644 --- a/education/math/MATH1210 (calc 1)/Derivatives.md +++ b/education/math/MATH1210 (calc 1)/Derivatives.md @@ -1,55 +0,0 @@ -A derivative can be used to describe the rate of change at a single point, or the *instantaneous velocity*. - -The formula used to calculate the average rate of change looks like this: -$$ \dfrac{f(b) - f(a)}{b - a} $$ -Interpreting it, this can be described as the change in $y$ over the change in $x$. - -- Speed is always positive -- Velocity is directional - -As the distance between the two points $a$ and $b$ grow smaller, we get closer and closer to the instantaneous velocity of a point. Limits are suited to describing the behavior of a function as it approaches a point. - -If we have the coordinate pair $(a, f(a))$, and the value $h$ is the distance between $a$ and another $x$ value, the coordinates of that point can be described as ($(a + h, f(a + h))$. With this info: -- The slope of the secant line can be described as $\dfrac{f(a + h) - f(a)}{a + h - a}$, which simplifies to $\dfrac{f(a + h) - f(a)}{h}$. -- The slope of the *tangent line* or the *instantaneous velocity* can be found by taking the limit of the above function as the distance ($h$) approaches zero: -$$\lim_{h \to 0}\dfrac{f(a + h) - f(a)}{h}$$ -The above formula can be used to find the *derivative*. This may also be referred to as the *instantaneous velocity*, or the *instantaneous rate of change*. -# Line Types -## Secant Line -A **Secant Line** connects two points on a graph. - -A **Tangent Line** represents the rate of change or slope at a single point on the graph. - -# Notation -Given the equation $y = f(x)$, the following are all notations used to represent the derivative of $f$ at $x$: -- $f'(x)$ -- $\dfrac{d}{dx}f(x)$ -- $y'$ -- $\dfrac{dy}{dx}$ -- $\dfrac{df}{dx}$ -- "Derivative of $f$ with respect to $x$" - -# Functions that are not differentiable at a given point -- Where a function is not defined -- Where a sharp turn takes place -- If the slope of the tangent line is vertical - -# Higher Order Differentials -- Take the differential of a differential - -Using the definition of a derivative to determine the derivative of $f(x) = x^n$, where $n$ is any natural number. - -$$ f'(x) = \lim_{h \to 0} \dfrac{(x + h)^n - x^n}{h} $$ -- Using pascal's triangle, we can approximate $(x + h)^n$ -``` - 1 - 1 1 - 1 2 1 - 1 3 3 1 -1 4 6 4 1 -``` - -- Where $n = 0$: $(x + h)^0 = 1$ -- Where $n = 1$: $(x +h)^1 = 1x + 1h$ -- Where $n = 2$: $(x +h)^2 = x^2 + 2xh + h^2$ -- Where $n = 3$: $(x + h)^3 = 1 From 2711f7e1cd57386daa47af3907d9b5f124bdebcb Mon Sep 17 00:00:00 2001 From: arc Date: Thu, 30 Jan 2025 09:18:43 -0700 Subject: [PATCH 0821/1027] vault backup: 2025-01-30 09:18:43 --- .../math/MATH1210 (calc 1)/Derivatives.md | 57 +++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/education/math/MATH1210 (calc 1)/Derivatives.md b/education/math/MATH1210 (calc 1)/Derivatives.md index e69de29..6131883 100644 --- a/education/math/MATH1210 (calc 1)/Derivatives.md +++ b/education/math/MATH1210 (calc 1)/Derivatives.md @@ -0,0 +1,57 @@ +A derivative can be used to describe the rate of change at a single point, or the *instantaneous velocity*. + +The formula used to calculate the average rate of change looks like this: +$$ \dfrac{f(b) - f(a)}{b - a} $$ +Interpreting it, this can be described as the change in $y$ over the change in $x$. + +- Speed is always positive +- Velocity is directional + +As the distance between the two points $a$ and $b$ grow smaller, we get closer and closer to the instantaneous velocity of a point. Limits are suited to describing the behavior of a function as it approaches a point. + +If we have the coordinate pair $(a, f(a))$, and the value $h$ is the distance between $a$ and another $x$ value, the coordinates of that point can be described as ($(a + h, f(a + h))$. With this info: +- The slope of the secant line can be described as $\dfrac{f(a + h) - f(a)}{a + h - a}$, which simplifies to $\dfrac{f(a + h) - f(a)}{h}$. +- The slope of the *tangent line* or the *instantaneous velocity* can be found by taking the limit of the above function as the distance ($h$) approaches zero: +$$\lim_{h \to 0}\dfrac{f(a + h) - f(a)}{h}$$ +The above formula can be used to find the *derivative*. This may also be referred to as the *instantaneous velocity*, or the *instantaneous rate of change*. +# Line Types +## Secant Line +A **Secant Line** connects two points on a graph. + +A **Tangent Line** represents the rate of change or slope at a single point on the graph. + +# Notation +Given the equation $y = f(x)$, the following are all notations used to represent the derivative of $f$ at $x$: +- $f'(x)$ +- $\dfrac{d}{dx}f(x)$ +- $y'$ +- $\dfrac{dy}{dx}$ +- $\dfrac{df}{dx}$ +- "Derivative of $f$ with respect to $x$" + +# Functions that are not differentiable at a given point +- Where a function is not defined +- Where a sharp turn takes place +- If the slope of the tangent line is vertical + +# Higher Order Differentials +- Take the differential of a differential + +Using the definition of a derivative to determine the derivative of $f(x) = x^n$, where $n$ is any natural number. + +$$ f'(x) = \lim_{h \to 0} \dfrac{(x + h)^n - x^n}{h} $$ +- Using pascal's triangle, we can approximate $(x + h)^n$ +``` + 1 + 1 1 + 1 2 1 + 1 3 3 1 +1 4 6 4 1 +``` + +- Where $n = 0$: $(x + h)^0 = 1$ +- Where $n = 1$: $(x +h)^1 = 1x + 1h$ +- Where $n = 2$: $(x +h)^2 = x^2 + 2xh + h^2$ +- Where $n = 3$: $(x + h)^3 = 1x^3h^0 + 3x^2h^1 + 3x^1h^2 + 1x^0h^3 = 1x^3 + 3x^2h + 3xh^2 + 1h^3$ + +Note that the coefficient follows the associated level of Pascal's Triangle (`1 3 3 1`), and $x$'s power decrements, while $h$'s power increments. The coefficients of each pair will always add up to $n$. Eg, $3 + 0$, $2 + 1$, $1 + 2$, and so on. The **second** term in the polynomial created will have a coefficient of $n$. From e021897d1e5a61f6e0e1e690db97a82f3324778b Mon Sep 17 00:00:00 2001 From: arc Date: Thu, 30 Jan 2025 09:23:43 -0700 Subject: [PATCH 0822/1027] vault backup: 2025-01-30 09:23:43 --- .obsidian/plugins/obsidian-git/data.json | 27 ------------------- .../math/MATH1210 (calc 1)/Derivatives.md | 2 ++ 2 files changed, 2 insertions(+), 27 deletions(-) diff --git a/.obsidian/plugins/obsidian-git/data.json b/.obsidian/plugins/obsidian-git/data.json index bef4c6e..e69de29 100644 --- a/.obsidian/plugins/obsidian-git/data.json +++ b/.obsidian/plugins/obsidian-git/data.json @@ -1,27 +0,0 @@ -{ - "commitMessage": "vault backup: {{date}}", - "autoCommitMessage": "vault backup: {{date}}", - "commitDateFormat": "YYYY-MM-DD HH:mm:ss", - "autoSaveInterval": 5, - "autoPushInterval": 0, - "autoPullInterval": 5, - "autoPullOnBoot": true, - "disablePush": false, - "pullBeforePush": true, - "disablePopups": false, - "listChangedFilesInMessageBody": false, - "showStatusBar": true, - "updateSubmodules": false, - "syncMethod": "merge", - "customMessageOnAutoBackup": false, - "autoBackupAfterFileChange": false, - "treeStructure": false, - "refreshSourceControl": true, - "basePath": "", - "differentIntervalCommitAndPush": false, - "changedFilesInStatusBar": false, - "showedMobileNotice": true, - "refreshSourceControlTimer": 7000, - "showBranchStatusBar": true, - "setLastSaveToLastCommit": false -} \ No newline at end of file diff --git a/education/math/MATH1210 (calc 1)/Derivatives.md b/education/math/MATH1210 (calc 1)/Derivatives.md index 6131883..8c7f900 100644 --- a/education/math/MATH1210 (calc 1)/Derivatives.md +++ b/education/math/MATH1210 (calc 1)/Derivatives.md @@ -55,3 +55,5 @@ $$ f'(x) = \lim_{h \to 0} \dfrac{(x + h)^n - x^n}{h} $$ - Where $n = 3$: $(x + h)^3 = 1x^3h^0 + 3x^2h^1 + 3x^1h^2 + 1x^0h^3 = 1x^3 + 3x^2h + 3xh^2 + 1h^3$ Note that the coefficient follows the associated level of Pascal's Triangle (`1 3 3 1`), and $x$'s power decrements, while $h$'s power increments. The coefficients of each pair will always add up to $n$. Eg, $3 + 0$, $2 + 1$, $1 + 2$, and so on. The **second** term in the polynomial created will have a coefficient of $n$. + +$$ \dfrac{(x + h)^n - x^n}{h} = \lim_{h \to 0} \dfrac{x^n + nx^{n-1}h + p_{n3}x^{n-2}h^2 + \cdots h^n}{} $$ \ No newline at end of file From 31440675b820a4bc9674f29c06950606eb8746d9 Mon Sep 17 00:00:00 2001 From: arc Date: Thu, 30 Jan 2025 09:28:44 -0700 Subject: [PATCH 0823/1027] vault backup: 2025-01-30 09:28:44 --- education/math/MATH1210 (calc 1)/Derivatives.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/education/math/MATH1210 (calc 1)/Derivatives.md b/education/math/MATH1210 (calc 1)/Derivatives.md index 8c7f900..6818cb6 100644 --- a/education/math/MATH1210 (calc 1)/Derivatives.md +++ b/education/math/MATH1210 (calc 1)/Derivatives.md @@ -56,4 +56,9 @@ $$ f'(x) = \lim_{h \to 0} \dfrac{(x + h)^n - x^n}{h} $$ Note that the coefficient follows the associated level of Pascal's Triangle (`1 3 3 1`), and $x$'s power decrements, while $h$'s power increments. The coefficients of each pair will always add up to $n$. Eg, $3 + 0$, $2 + 1$, $1 + 2$, and so on. The **second** term in the polynomial created will have a coefficient of $n$. -$$ \dfrac{(x + h)^n - x^n}{h} = \lim_{h \to 0} \dfrac{x^n + nx^{n-1}h + p_{n3}x^{n-2}h^2 + \cdots h^n}{} $$ \ No newline at end of file +$$ \dfrac{(x + h)^n - x^n}{h} = \lim_{h \to 0} \dfrac{(x^n + nx^{n-1}h + P_{n3}x^{n-2}h^2 + \cdots + h^n)-x^n}{h} $$ $P$ denotes some coefficient found using Pascal's triangle. + +$x^n$ cancels out, and then $h$ can be factored out of the binomial series. + +This leaves us with: +$$ \lim_{h \to 0} nx^{n-1} + P_{n3} x^{} $$ \ No newline at end of file From 1bf9047fff21fcd00ce0af987ae04bf2dcd8f977 Mon Sep 17 00:00:00 2001 From: arc Date: Thu, 30 Jan 2025 09:33:44 -0700 Subject: [PATCH 0824/1027] vault backup: 2025-01-30 09:33:44 --- .obsidian/plugins/obsidian-git/data.json | 27 +++++++++++++++++++ .../math/MATH1210 (calc 1)/Derivatives.md | 11 +++++--- 2 files changed, 35 insertions(+), 3 deletions(-) diff --git a/.obsidian/plugins/obsidian-git/data.json b/.obsidian/plugins/obsidian-git/data.json index e69de29..bef4c6e 100644 --- a/.obsidian/plugins/obsidian-git/data.json +++ b/.obsidian/plugins/obsidian-git/data.json @@ -0,0 +1,27 @@ +{ + "commitMessage": "vault backup: {{date}}", + "autoCommitMessage": "vault backup: {{date}}", + "commitDateFormat": "YYYY-MM-DD HH:mm:ss", + "autoSaveInterval": 5, + "autoPushInterval": 0, + "autoPullInterval": 5, + "autoPullOnBoot": true, + "disablePush": false, + "pullBeforePush": true, + "disablePopups": false, + "listChangedFilesInMessageBody": false, + "showStatusBar": true, + "updateSubmodules": false, + "syncMethod": "merge", + "customMessageOnAutoBackup": false, + "autoBackupAfterFileChange": false, + "treeStructure": false, + "refreshSourceControl": true, + "basePath": "", + "differentIntervalCommitAndPush": false, + "changedFilesInStatusBar": false, + "showedMobileNotice": true, + "refreshSourceControlTimer": 7000, + "showBranchStatusBar": true, + "setLastSaveToLastCommit": false +} \ No newline at end of file diff --git a/education/math/MATH1210 (calc 1)/Derivatives.md b/education/math/MATH1210 (calc 1)/Derivatives.md index 6818cb6..3ac69bf 100644 --- a/education/math/MATH1210 (calc 1)/Derivatives.md +++ b/education/math/MATH1210 (calc 1)/Derivatives.md @@ -34,9 +34,10 @@ Given the equation $y = f(x)$, the following are all notations used to represent - Where a sharp turn takes place - If the slope of the tangent line is vertical -# Higher Order Differentials -- Take the differential of a differential +# Higher Order Derivatives +- Take the derivative of a derivative +# Exponential Derivative Formula Using the definition of a derivative to determine the derivative of $f(x) = x^n$, where $n$ is any natural number. $$ f'(x) = \lim_{h \to 0} \dfrac{(x + h)^n - x^n}{h} $$ @@ -61,4 +62,8 @@ $$ \dfrac{(x + h)^n - x^n}{h} = \lim_{h \to 0} \dfrac{(x^n + nx^{n-1}h + P_{n3}x $x^n$ cancels out, and then $h$ can be factored out of the binomial series. This leaves us with: -$$ \lim_{h \to 0} nx^{n-1} + P_{n3} x^{} $$ \ No newline at end of file +$$ \lim_{h \to 0} nx^{n-1} + P_{n3} x^{n-2}*0 \cdots v * 0 $$ + +The zeros leave us with: + +$$ f(x) = n, \space $f'(x) = nx^{n-1} $$ From cd2a396d3a02c0aa7bfa0f5a6dac2fca63802086 Mon Sep 17 00:00:00 2001 From: arc Date: Thu, 30 Jan 2025 09:38:44 -0700 Subject: [PATCH 0825/1027] vault backup: 2025-01-30 09:38:44 --- education/math/MATH1210 (calc 1)/Derivatives.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/education/math/MATH1210 (calc 1)/Derivatives.md b/education/math/MATH1210 (calc 1)/Derivatives.md index 3ac69bf..2036ffa 100644 --- a/education/math/MATH1210 (calc 1)/Derivatives.md +++ b/education/math/MATH1210 (calc 1)/Derivatives.md @@ -66,4 +66,9 @@ $$ \lim_{h \to 0} nx^{n-1} + P_{n3} x^{n-2}*0 \cdots v * 0 $$ The zeros leave us with: -$$ f(x) = n, \space $f'(x) = nx^{n-1} $$ +$$ f(x) = n, \space f'(x) = nx^{n-1} $$ +# Addition/Subtraction Derivative Rule +You can add and subtract derivatives to find what the derivative of the whole derivative would be. + +# Factor Derivative Rule +$$ \dfrac{d}{dx} (f(x) * g(x)) = \lim_{h \to 0} \dfrac{f(x +h) * g(x + h) - f(x)g(x)}{h} $$ From 0830d6e8e17777d319fb1430e767f460cb2cfb89 Mon Sep 17 00:00:00 2001 From: arc Date: Thu, 30 Jan 2025 09:43:44 -0700 Subject: [PATCH 0826/1027] vault backup: 2025-01-30 09:43:44 --- .obsidian/plugins/obsidian-git/data.json | 27 ------------------- .../math/MATH1210 (calc 1)/Derivatives.md | 8 ++++++ 2 files changed, 8 insertions(+), 27 deletions(-) diff --git a/.obsidian/plugins/obsidian-git/data.json b/.obsidian/plugins/obsidian-git/data.json index bef4c6e..e69de29 100644 --- a/.obsidian/plugins/obsidian-git/data.json +++ b/.obsidian/plugins/obsidian-git/data.json @@ -1,27 +0,0 @@ -{ - "commitMessage": "vault backup: {{date}}", - "autoCommitMessage": "vault backup: {{date}}", - "commitDateFormat": "YYYY-MM-DD HH:mm:ss", - "autoSaveInterval": 5, - "autoPushInterval": 0, - "autoPullInterval": 5, - "autoPullOnBoot": true, - "disablePush": false, - "pullBeforePush": true, - "disablePopups": false, - "listChangedFilesInMessageBody": false, - "showStatusBar": true, - "updateSubmodules": false, - "syncMethod": "merge", - "customMessageOnAutoBackup": false, - "autoBackupAfterFileChange": false, - "treeStructure": false, - "refreshSourceControl": true, - "basePath": "", - "differentIntervalCommitAndPush": false, - "changedFilesInStatusBar": false, - "showedMobileNotice": true, - "refreshSourceControlTimer": 7000, - "showBranchStatusBar": true, - "setLastSaveToLastCommit": false -} \ No newline at end of file diff --git a/education/math/MATH1210 (calc 1)/Derivatives.md b/education/math/MATH1210 (calc 1)/Derivatives.md index 2036ffa..2b12ed3 100644 --- a/education/math/MATH1210 (calc 1)/Derivatives.md +++ b/education/math/MATH1210 (calc 1)/Derivatives.md @@ -72,3 +72,11 @@ You can add and subtract derivatives to find what the derivative of the whole de # Factor Derivative Rule $$ \dfrac{d}{dx} (f(x) * g(x)) = \lim_{h \to 0} \dfrac{f(x +h) * g(x + h) - f(x)g(x)}{h} $$ +This is done by adding a value equivalent to zero to the numerator ($f(x + h)g(x) - f(x + h)g(x)$): +$$ \dfrac{d}{dx} (f(x) * g(x)) = \lim_{h \to 0} \dfrac{f(x +h) * g(x + h) + f(x + h)g(x) - f(x+h)g(x) - f(x)g(x)}{h} $$ + +From here you can factor out $f(x + h)$ from the first two terms, and a $g(x)$ from the next two terms. + +Then break into two different fractions + +$$\lim_{h \to 0} \dfrac{f(x + h)}{1} * * $$ \ No newline at end of file From 1544af34a468078b352c5c26cebe3af083fe85b3 Mon Sep 17 00:00:00 2001 From: arc Date: Thu, 30 Jan 2025 09:48:44 -0700 Subject: [PATCH 0827/1027] vault backup: 2025-01-30 09:48:44 --- .obsidian/plugins/obsidian-git/data.json | 27 +++++++++++++++++++ .../math/MATH1210 (calc 1)/Derivatives.md | 8 +++--- 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/.obsidian/plugins/obsidian-git/data.json b/.obsidian/plugins/obsidian-git/data.json index e69de29..bef4c6e 100644 --- a/.obsidian/plugins/obsidian-git/data.json +++ b/.obsidian/plugins/obsidian-git/data.json @@ -0,0 +1,27 @@ +{ + "commitMessage": "vault backup: {{date}}", + "autoCommitMessage": "vault backup: {{date}}", + "commitDateFormat": "YYYY-MM-DD HH:mm:ss", + "autoSaveInterval": 5, + "autoPushInterval": 0, + "autoPullInterval": 5, + "autoPullOnBoot": true, + "disablePush": false, + "pullBeforePush": true, + "disablePopups": false, + "listChangedFilesInMessageBody": false, + "showStatusBar": true, + "updateSubmodules": false, + "syncMethod": "merge", + "customMessageOnAutoBackup": false, + "autoBackupAfterFileChange": false, + "treeStructure": false, + "refreshSourceControl": true, + "basePath": "", + "differentIntervalCommitAndPush": false, + "changedFilesInStatusBar": false, + "showedMobileNotice": true, + "refreshSourceControlTimer": 7000, + "showBranchStatusBar": true, + "setLastSaveToLastCommit": false +} \ No newline at end of file diff --git a/education/math/MATH1210 (calc 1)/Derivatives.md b/education/math/MATH1210 (calc 1)/Derivatives.md index 2b12ed3..9301784 100644 --- a/education/math/MATH1210 (calc 1)/Derivatives.md +++ b/education/math/MATH1210 (calc 1)/Derivatives.md @@ -70,13 +70,15 @@ $$ f(x) = n, \space f'(x) = nx^{n-1} $$ # Addition/Subtraction Derivative Rule You can add and subtract derivatives to find what the derivative of the whole derivative would be. -# Factor Derivative Rule +# Product Rule $$ \dfrac{d}{dx} (f(x) * g(x)) = \lim_{h \to 0} \dfrac{f(x +h) * g(x + h) - f(x)g(x)}{h} $$ This is done by adding a value equivalent to zero to the numerator ($f(x + h)g(x) - f(x + h)g(x)$): $$ \dfrac{d}{dx} (f(x) * g(x)) = \lim_{h \to 0} \dfrac{f(x +h) * g(x + h) + f(x + h)g(x) - f(x+h)g(x) - f(x)g(x)}{h} $$ From here you can factor out $f(x + h)$ from the first two terms, and a $g(x)$ from the next two terms. -Then break into two different fractions +Then break into two different fractions: -$$\lim_{h \to 0} \dfrac{f(x + h)}{1} * * $$ \ No newline at end of file +$$\lim_{h \to 0} \dfrac{f(x + h)}{1} * \dfrac{(g(x + h) - g(x))}{h)} + \dfrac{g(x)}{1} *\dfrac{f(x + h) - f(x)}{h} $$ +From here, you can take the limit of each fraction, therefore showing that to find the derivative of two values multiplied together, you can use the formula: +$$ \dfrac{d}{dx}(f(x) * g(x)) = f(x) * g'(x) + f'(x)* \ No newline at end of file From 4dd7ed010bc1f89b0cec856a6f1c087878c65148 Mon Sep 17 00:00:00 2001 From: arc Date: Thu, 30 Jan 2025 09:53:44 -0700 Subject: [PATCH 0828/1027] vault backup: 2025-01-30 09:53:44 --- education/math/MATH1210 (calc 1)/Derivatives.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/education/math/MATH1210 (calc 1)/Derivatives.md b/education/math/MATH1210 (calc 1)/Derivatives.md index 9301784..c24f9bf 100644 --- a/education/math/MATH1210 (calc 1)/Derivatives.md +++ b/education/math/MATH1210 (calc 1)/Derivatives.md @@ -67,8 +67,8 @@ $$ \lim_{h \to 0} nx^{n-1} + P_{n3} x^{n-2}*0 \cdots v * 0 $$ The zeros leave us with: $$ f(x) = n, \space f'(x) = nx^{n-1} $$ -# Addition/Subtraction Derivative Rule -You can add and subtract derivatives to find what the derivative of the whole derivative would be. +# Sum and Difference Rules +$$ \dfrac{d}{dx}(f(x) \pm g(x)) = f'(x) \pm g'(x) $$ # Product Rule $$ \dfrac{d}{dx} (f(x) * g(x)) = \lim_{h \to 0} \dfrac{f(x +h) * g(x + h) - f(x)g(x)}{h} $$ @@ -81,4 +81,6 @@ Then break into two different fractions: $$\lim_{h \to 0} \dfrac{f(x + h)}{1} * \dfrac{(g(x + h) - g(x))}{h)} + \dfrac{g(x)}{1} *\dfrac{f(x + h) - f(x)}{h} $$ From here, you can take the limit of each fraction, therefore showing that to find the derivative of two values multiplied together, you can use the formula: -$$ \dfrac{d}{dx}(f(x) * g(x)) = f(x) * g'(x) + f'(x)* \ No newline at end of file +$$ \dfrac{d}{dx}(f(x) * g(x)) = f(x) * g'(x) + f'(x) $$ +# Natural Exponential Function +$$ \dfrac{d}{dx} e^x = e^x $$ \ No newline at end of file From 92c8f5f38a51675b18bdecfe295317abb14ddae2 Mon Sep 17 00:00:00 2001 From: arc Date: Thu, 30 Jan 2025 09:58:44 -0700 Subject: [PATCH 0829/1027] vault backup: 2025-01-30 09:58:44 --- education/math/MATH1210 (calc 1)/Derivatives.md | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/education/math/MATH1210 (calc 1)/Derivatives.md b/education/math/MATH1210 (calc 1)/Derivatives.md index c24f9bf..4a8d12d 100644 --- a/education/math/MATH1210 (calc 1)/Derivatives.md +++ b/education/math/MATH1210 (calc 1)/Derivatives.md @@ -81,6 +81,13 @@ Then break into two different fractions: $$\lim_{h \to 0} \dfrac{f(x + h)}{1} * \dfrac{(g(x + h) - g(x))}{h)} + \dfrac{g(x)}{1} *\dfrac{f(x + h) - f(x)}{h} $$ From here, you can take the limit of each fraction, therefore showing that to find the derivative of two values multiplied together, you can use the formula: -$$ \dfrac{d}{dx}(f(x) * g(x)) = f(x) * g'(x) + f'(x) $$ -# Natural Exponential Function -$$ \dfrac{d}{dx} e^x = e^x $$ \ No newline at end of file +$$ \dfrac{d}{dx}(f(x) * g(x)) = f(x) * g'(x) + f'(x)*g(x) $$ + +# Constant Multiple Rule +$$ \dfrac{d}{dx}[c*f(x)] = c * f'(x) $$ +# Quotient Rule +$$ \dfrac{d}{dx}(\dfrac{f(x)}{g(x)}) = \dfrac{f'(x)g(x) -f(x)g'(x)}{(g(x))^2} $$ + +# Exponential Rule +$$ \dfrac{d}{dx} e^x = e^x $$ +$$ \dfrac{d}{dx}a^x \ No newline at end of file From 8dae88fc8c6bbf012e4f54ba7fcab15e5df340ad Mon Sep 17 00:00:00 2001 From: arc Date: Thu, 30 Jan 2025 10:03:44 -0700 Subject: [PATCH 0830/1027] vault backup: 2025-01-30 10:03:44 --- education/math/MATH1210 (calc 1)/Derivatives.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/education/math/MATH1210 (calc 1)/Derivatives.md b/education/math/MATH1210 (calc 1)/Derivatives.md index 4a8d12d..580a6e0 100644 --- a/education/math/MATH1210 (calc 1)/Derivatives.md +++ b/education/math/MATH1210 (calc 1)/Derivatives.md @@ -90,4 +90,5 @@ $$ \dfrac{d}{dx}(\dfrac{f(x)}{g(x)}) = \dfrac{f'(x)g(x) -f(x)g'(x)}{(g(x))^2} $ # Exponential Rule $$ \dfrac{d}{dx} e^x = e^x $$ -$$ \dfrac{d}{dx}a^x \ No newline at end of file +$$ \dfrac{d}{dx}a^x = a^x*(\ln(a)) $$ +for all $a > 0$ \ No newline at end of file From d1713efdab0767b46225c7572d530f670cd0b18c Mon Sep 17 00:00:00 2001 From: arc Date: Fri, 31 Jan 2025 10:12:43 -0700 Subject: [PATCH 0831/1027] vault backup: 2025-01-31 10:12:43 --- .obsidian/core-plugins.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.obsidian/core-plugins.json b/.obsidian/core-plugins.json index 54ddc82..5899ef3 100644 --- a/.obsidian/core-plugins.json +++ b/.obsidian/core-plugins.json @@ -27,5 +27,6 @@ "sync": false, "canvas": true, "bookmarks": true, - "properties": true + "properties": true, + "webviewer": false } \ No newline at end of file From 3e31d38873cac96c0fd24222e15fb47bdb977c63 Mon Sep 17 00:00:00 2001 From: arc Date: Sun, 2 Feb 2025 16:09:27 -0700 Subject: [PATCH 0832/1027] vault backup: 2025-02-02 16:09:27 --- education/math/MATH1210 (calc 1)/Derivatives.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/education/math/MATH1210 (calc 1)/Derivatives.md b/education/math/MATH1210 (calc 1)/Derivatives.md index 580a6e0..680b0b4 100644 --- a/education/math/MATH1210 (calc 1)/Derivatives.md +++ b/education/math/MATH1210 (calc 1)/Derivatives.md @@ -37,6 +37,9 @@ Given the equation $y = f(x)$, the following are all notations used to represent # Higher Order Derivatives - Take the derivative of a derivative +# Constant Rule +The derivative of a constant is always zero. + # Exponential Derivative Formula Using the definition of a derivative to determine the derivative of $f(x) = x^n$, where $n$ is any natural number. @@ -91,4 +94,4 @@ $$ \dfrac{d}{dx}(\dfrac{f(x)}{g(x)}) = \dfrac{f'(x)g(x) -f(x)g'(x)}{(g(x))^2} $ # Exponential Rule $$ \dfrac{d}{dx} e^x = e^x $$ $$ \dfrac{d}{dx}a^x = a^x*(\ln(a)) $$ -for all $a > 0$ \ No newline at end of file +for all $a > 0$ From 26c966e0bde1e8fd2a66dc0a9a336561b2e78ab7 Mon Sep 17 00:00:00 2001 From: arc Date: Sun, 2 Feb 2025 16:14:27 -0700 Subject: [PATCH 0833/1027] vault backup: 2025-02-02 16:14:27 --- education/math/MATH1210 (calc 1)/Derivatives.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/education/math/MATH1210 (calc 1)/Derivatives.md b/education/math/MATH1210 (calc 1)/Derivatives.md index 680b0b4..47bf05e 100644 --- a/education/math/MATH1210 (calc 1)/Derivatives.md +++ b/education/math/MATH1210 (calc 1)/Derivatives.md @@ -39,6 +39,10 @@ Given the equation $y = f(x)$, the following are all notations used to represent # Constant Rule The derivative of a constant is always zero. +$$ \dfrac{d}{dx}[c] = 0$$ +For example, the derivative of the equation $f(x) = 3$ is $0$. +# Derivative of $x$ +The derivative of $x$ is one. # Exponential Derivative Formula Using the definition of a derivative to determine the derivative of $f(x) = x^n$, where $n$ is any natural number. From d66a6f21a890e7995fa23d96a3e9b3d7200189ad Mon Sep 17 00:00:00 2001 From: arc Date: Sun, 2 Feb 2025 16:19:27 -0700 Subject: [PATCH 0834/1027] vault backup: 2025-02-02 16:19:27 --- education/math/MATH1210 (calc 1)/Derivatives.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/education/math/MATH1210 (calc 1)/Derivatives.md b/education/math/MATH1210 (calc 1)/Derivatives.md index 47bf05e..0e437b7 100644 --- a/education/math/MATH1210 (calc 1)/Derivatives.md +++ b/education/math/MATH1210 (calc 1)/Derivatives.md @@ -44,6 +44,8 @@ For example, the derivative of the equation $f(x) = 3$ is $0$. # Derivative of $x$ The derivative of $x$ is one. +For example, the derivative of the equation $f(x) = x$ is $1$, and the derivative of the equation $f(x) = 3x$ is $3$. + # Exponential Derivative Formula Using the definition of a derivative to determine the derivative of $f(x) = x^n$, where $n$ is any natural number. From ec2dec1d5e45ee24d06ef28a59505ec0320d2f0d Mon Sep 17 00:00:00 2001 From: arc Date: Sun, 2 Feb 2025 17:50:30 -0700 Subject: [PATCH 0835/1027] vault backup: 2025-02-02 17:50:30 --- education/math/MATH1210 (calc 1)/Derivatives.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/education/math/MATH1210 (calc 1)/Derivatives.md b/education/math/MATH1210 (calc 1)/Derivatives.md index 0e437b7..439e1a5 100644 --- a/education/math/MATH1210 (calc 1)/Derivatives.md +++ b/education/math/MATH1210 (calc 1)/Derivatives.md @@ -14,6 +14,11 @@ If we have the coordinate pair $(a, f(a))$, and the value $h$ is the distance be - The slope of the *tangent line* or the *instantaneous velocity* can be found by taking the limit of the above function as the distance ($h$) approaches zero: $$\lim_{h \to 0}\dfrac{f(a + h) - f(a)}{h}$$ The above formula can be used to find the *derivative*. This may also be referred to as the *instantaneous velocity*, or the *instantaneous rate of change*. + +# Point Slope Formula (Review) +$$ y - y_1 = m(x-x_1) $$ +Given that $m = f'(a) + # Line Types ## Secant Line A **Secant Line** connects two points on a graph. From 4aec1d9883767f26972f88b2e3b1c483b4eaf956 Mon Sep 17 00:00:00 2001 From: arc Date: Sun, 2 Feb 2025 17:55:30 -0700 Subject: [PATCH 0836/1027] vault backup: 2025-02-02 17:55:30 --- education/math/MATH1210 (calc 1)/Derivatives.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/education/math/MATH1210 (calc 1)/Derivatives.md b/education/math/MATH1210 (calc 1)/Derivatives.md index 439e1a5..ad4e4be 100644 --- a/education/math/MATH1210 (calc 1)/Derivatives.md +++ b/education/math/MATH1210 (calc 1)/Derivatives.md @@ -17,7 +17,8 @@ The above formula can be used to find the *derivative*. This may also be referre # Point Slope Formula (Review) $$ y - y_1 = m(x-x_1) $$ -Given that $m = f'(a) +Given that $m = f'(a)$ and that $(x_1, y_1) = (a, f(a))$, you get the equation: +$$ y - f(a) = f'(a)(x - a) # Line Types ## Secant Line From ab2da117b9c163879222deeab704d633bc1a4f87 Mon Sep 17 00:00:00 2001 From: arc Date: Sun, 2 Feb 2025 18:15:30 -0700 Subject: [PATCH 0837/1027] vault backup: 2025-02-02 18:15:30 --- education/math/MATH1210 (calc 1)/Derivatives.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/education/math/MATH1210 (calc 1)/Derivatives.md b/education/math/MATH1210 (calc 1)/Derivatives.md index ad4e4be..206c18e 100644 --- a/education/math/MATH1210 (calc 1)/Derivatives.md +++ b/education/math/MATH1210 (calc 1)/Derivatives.md @@ -18,7 +18,7 @@ The above formula can be used to find the *derivative*. This may also be referre # Point Slope Formula (Review) $$ y - y_1 = m(x-x_1) $$ Given that $m = f'(a)$ and that $(x_1, y_1) = (a, f(a))$, you get the equation: -$$ y - f(a) = f'(a)(x - a) + $$ y - f(a) = f'(a)(x - a) $$ # Line Types ## Secant Line From d697cba7bad1c4591f843b4104af44a0a1a007e3 Mon Sep 17 00:00:00 2001 From: arc Date: Mon, 3 Feb 2025 09:54:19 -0700 Subject: [PATCH 0838/1027] vault backup: 2025-02-03 09:54:19 --- .../ECE2700/Verilog/Modules.md | 14 ++++++++++++++ .../ECE2700/{ => Verilog}/Verilog.md | 0 2 files changed, 14 insertions(+) create mode 100644 education/computer engineering/ECE2700/Verilog/Modules.md rename education/computer engineering/ECE2700/{ => Verilog}/Verilog.md (100%) diff --git a/education/computer engineering/ECE2700/Verilog/Modules.md b/education/computer engineering/ECE2700/Verilog/Modules.md new file mode 100644 index 0000000..76c233e --- /dev/null +++ b/education/computer engineering/ECE2700/Verilog/Modules.md @@ -0,0 +1,14 @@ +Modules are the building block through which Verilog is built. + +Each module can be thought of as a black box with a series of inputs, and a series of outputs. Changing the input changes the outputs. + +Module definitions are started with the `module` keyword, and closed with the `endmodule` keyword. + +The general syntax of a module is as follows: +```verilog +module ([port_list]); + // Contents of the module +endmodule + +// The por +``` \ No newline at end of file diff --git a/education/computer engineering/ECE2700/Verilog.md b/education/computer engineering/ECE2700/Verilog/Verilog.md similarity index 100% rename from education/computer engineering/ECE2700/Verilog.md rename to education/computer engineering/ECE2700/Verilog/Verilog.md From d54cecc80147a2b1f4d2edd8eaab88b9413b4389 Mon Sep 17 00:00:00 2001 From: arc Date: Mon, 3 Feb 2025 09:59:19 -0700 Subject: [PATCH 0839/1027] vault backup: 2025-02-03 09:59:19 --- .../ECE2700/Verilog/Modules.md | 31 +++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/education/computer engineering/ECE2700/Verilog/Modules.md b/education/computer engineering/ECE2700/Verilog/Modules.md index 76c233e..66d89d6 100644 --- a/education/computer engineering/ECE2700/Verilog/Modules.md +++ b/education/computer engineering/ECE2700/Verilog/Modules.md @@ -4,11 +4,38 @@ Each module can be thought of as a black box with a series of inputs, and a seri Module definitions are started with the `module` keyword, and closed with the `endmodule` keyword. +## Syntax The general syntax of a module is as follows: ```verilog module ([port_list]); // Contents of the module endmodule -// The por -``` \ No newline at end of file +// The port list is optional +module ; + // Contents +endmodule +``` + +Below is an example of the structure of a half adder module: +```verilog +module half_adder( + input a, + input b + output sum_bit, + output carry_bit + ); + // ------- snip ------------ +endmodule +``` + +## Ports +Ports are a set of signals that act as input and outputs for a particular module. + +There are 3 kinds of ports: +- `input`: Input ports can only receive values from the outside. `input` ports cannot be written to. +- `output`: Output ports can be written to, but not read from. +- `inout`: Inout ports can send *and* receive values. + +### Port types +If no \ No newline at end of file From 400c362f17fa233ab7edccf84a7f5401f5085fe9 Mon Sep 17 00:00:00 2001 From: arc Date: Mon, 3 Feb 2025 10:04:19 -0700 Subject: [PATCH 0840/1027] vault backup: 2025-02-03 10:04:19 --- education/computer engineering/ECE2700/Verilog/Modules.md | 4 +++- education/computer engineering/ECE2700/Verilog/Types.md | 2 ++ 2 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 education/computer engineering/ECE2700/Verilog/Types.md diff --git a/education/computer engineering/ECE2700/Verilog/Modules.md b/education/computer engineering/ECE2700/Verilog/Modules.md index 66d89d6..7bef14f 100644 --- a/education/computer engineering/ECE2700/Verilog/Modules.md +++ b/education/computer engineering/ECE2700/Verilog/Modules.md @@ -38,4 +38,6 @@ There are 3 kinds of ports: - `inout`: Inout ports can send *and* receive values. ### Port types -If no \ No newline at end of file +If no type is defined, ports are implicitly defined as *nets* of type `wire`. + +> In verilog, the term *net* refers to network, and it refers to a connection that joins two or more devices together. diff --git a/education/computer engineering/ECE2700/Verilog/Types.md b/education/computer engineering/ECE2700/Verilog/Types.md new file mode 100644 index 0000000..2244096 --- /dev/null +++ b/education/computer engineering/ECE2700/Verilog/Types.md @@ -0,0 +1,2 @@ +There are two main categories of data types in Verilog. These ty +# Nets From 02954021316615045f72c9601fd7d3b26b379ec0 Mon Sep 17 00:00:00 2001 From: arc Date: Mon, 3 Feb 2025 10:09:19 -0700 Subject: [PATCH 0841/1027] vault backup: 2025-02-03 10:09:19 --- .../computer engineering/ECE2700/Verilog/Types.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/education/computer engineering/ECE2700/Verilog/Types.md b/education/computer engineering/ECE2700/Verilog/Types.md index 2244096..92db35a 100644 --- a/education/computer engineering/ECE2700/Verilog/Types.md +++ b/education/computer engineering/ECE2700/Verilog/Types.md @@ -1,2 +1,10 @@ -There are two main categories of data types in Verilog. These ty +There are two main categories of data types in Verilog. These categories differ in the underlying hardware structure they represent, and they differ in the way they are assigned and retain values. # Nets +A *net* refers to a *network* of connections that join two or more devices together. + +Nets connect different hardware entities and *do not store values*. +## Wire +A `wire` is the most commonly used type of net. When a port is declared in Verilog, it is implicitly given a type of `wire`. + +It is illegal to re-declare a name already in use by a net +# Scalar and Vector From dd8478dd48705e0cf847704764a87986bd062e7e Mon Sep 17 00:00:00 2001 From: arc Date: Mon, 3 Feb 2025 10:14:24 -0700 Subject: [PATCH 0842/1027] vault backup: 2025-02-03 10:14:24 --- .../ECE2700/Verilog/Types.md | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/education/computer engineering/ECE2700/Verilog/Types.md b/education/computer engineering/ECE2700/Verilog/Types.md index 92db35a..e9820ce 100644 --- a/education/computer engineering/ECE2700/Verilog/Types.md +++ b/education/computer engineering/ECE2700/Verilog/Types.md @@ -6,5 +6,18 @@ Nets connect different hardware entities and *do not store values*. ## Wire A `wire` is the most commonly used type of net. When a port is declared in Verilog, it is implicitly given a type of `wire`. -It is illegal to re-declare a name already in use by a net -# Scalar and Vector +It is illegal to re-declare a name already in use by a net: +```verilog +module foo; + wire abc; + wire a; + wire b; + wire c; + + wire abc; // ILLEGAL: The wire `abc` is already defined + +``` + +# Variables +A variable is a data storage element. They retain the last impu +# Scalar and Vector Types From 8d046bb2a689c3bdb801623d04fa2209f5c61777 Mon Sep 17 00:00:00 2001 From: arc Date: Mon, 3 Feb 2025 10:19:24 -0700 Subject: [PATCH 0843/1027] vault backup: 2025-02-03 10:19:24 --- education/computer engineering/ECE2700/Adders.md | 6 ++++++ .../computer engineering/ECE2700/Verilog/Types.md | 13 ++++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/education/computer engineering/ECE2700/Adders.md b/education/computer engineering/ECE2700/Adders.md index f221fbe..26e330c 100644 --- a/education/computer engineering/ECE2700/Adders.md +++ b/education/computer engineering/ECE2700/Adders.md @@ -1,3 +1,9 @@ +# Half Adder + +# + +# Ripple Carry Adder + # Carry-Select Adder A carry select adder is built using two ripple carry adders, and multiplexing them together based off of the value of $c_{in}$. This is done for performance reasons, because when adding two numbers $x$ and $y$, we know $x$ and $y$ *before* we know the value of $c_{in}$. This means we can compute what the output of $x + y + c_{in}$ would be for $c_{in} = 0$ and $c_{in} = 1$ at the same time, then just toggle between the two possible values given the *actual* value of $c_{in}$. diff --git a/education/computer engineering/ECE2700/Verilog/Types.md b/education/computer engineering/ECE2700/Verilog/Types.md index e9820ce..d73ff0a 100644 --- a/education/computer engineering/ECE2700/Verilog/Types.md +++ b/education/computer engineering/ECE2700/Verilog/Types.md @@ -19,5 +19,16 @@ module foo; ``` # Variables -A variable is a data storage element. They retain the last impu +A variable is a data storage element. They retain the last input given. + +## Registers +A `reg` can be used to model hardware registers because it stores a value until the next assignment. + +### Integer +A Verilog `integer` type is a 32 bit wide storage value. It does not *need* to store integers, it can be used for other purposes. +```verilog + integer count; +``` +### Time +A `time` variable is unsigned, 64 bits wide, and can be used to store time duration for debugging purposes. `realtime` is similar, but time is stored as a floating bit value. # Scalar and Vector Types From ba1c7d92b65d818c6e94d03fadf897ee1685b123 Mon Sep 17 00:00:00 2001 From: arc Date: Mon, 3 Feb 2025 11:09:09 -0700 Subject: [PATCH 0844/1027] vault backup: 2025-02-03 11:09:09 --- .../computer engineering/ECE2700/Adders.md | 6 +++-- .../ECE2700/Verilog/Types.md | 26 +++++++++++++++++++ 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/education/computer engineering/ECE2700/Adders.md b/education/computer engineering/ECE2700/Adders.md index 26e330c..2f3019f 100644 --- a/education/computer engineering/ECE2700/Adders.md +++ b/education/computer engineering/ECE2700/Adders.md @@ -1,6 +1,6 @@ # Half Adder -# +# Full Adder # Ripple Carry Adder @@ -10,4 +10,6 @@ A carry select adder is built using two ripple carry adders, and multiplexing th The delay is calculated like so: 1. Given the delay of a full adder is $k$, and the delay of a 2 to 1 mux is $\frac{1}{m}k$, 2. then the delay of a 4 bit ripple carry adder is $4k$, because it's 4 full adders chained together, running sequentially. -3. This means that the delay of a 4 bit carry select adder is $4k + \frac{k}{m}$ \ No newline at end of file +3. This means that the delay of a 4 bit carry select adder is $4k + \frac{k}{m}$ + +# Carry-lookahead adder \ No newline at end of file diff --git a/education/computer engineering/ECE2700/Verilog/Types.md b/education/computer engineering/ECE2700/Verilog/Types.md index d73ff0a..05d65f3 100644 --- a/education/computer engineering/ECE2700/Verilog/Types.md +++ b/education/computer engineering/ECE2700/Verilog/Types.md @@ -20,7 +20,28 @@ module foo; # Variables A variable is a data storage element. They retain the last input given. +```verilog +```verilog +module testbench; + integer int_a; // Integer variable + real real_b; // Real variable + time time_c; // Time variable + initial begin + int_a = 32'hfacd_1b34; // Assign an integer value + real_b = 0.1234567; // Assign a floating point value + + #20; // Advance simulation time by 20 units + time_c = $time; // Assign current simulation time + + // Now print all variables using $display system task + $display ("int_a = 0x%0h", int_a); + $display ("real_b = %0.5f", real_b); + $display ("time_c = %0t", time_c); + end +endmodule +``` +``` ## Registers A `reg` can be used to model hardware registers because it stores a value until the next assignment. @@ -31,4 +52,9 @@ A Verilog `integer` type is a 32 bit wide storage value. It does not *need* to s ``` ### Time A `time` variable is unsigned, 64 bits wide, and can be used to store time duration for debugging purposes. `realtime` is similar, but time is stored as a floating bit value. + +## Real +The `real` type denotes a floating point value. + + # Scalar and Vector Types From 116ab612fcb4e3ef077542474c509d705c19942a Mon Sep 17 00:00:00 2001 From: arc Date: Mon, 3 Feb 2025 11:14:08 -0700 Subject: [PATCH 0845/1027] vault backup: 2025-02-03 11:14:08 --- .../ECE2700/Verilog/Types.md | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/education/computer engineering/ECE2700/Verilog/Types.md b/education/computer engineering/ECE2700/Verilog/Types.md index 05d65f3..2fb26fe 100644 --- a/education/computer engineering/ECE2700/Verilog/Types.md +++ b/education/computer engineering/ECE2700/Verilog/Types.md @@ -56,5 +56,25 @@ A `time` variable is unsigned, 64 bits wide, and can be used to store time durat ## Real The `real` type denotes a floating point value. +## Strings +Strings are stored in a vector of `reg`s. The width of the `reg` *must* be large enough to hold the string. +Each character in a string represents a one byte ASCII value. If the size of the variable is smaller than the string, the string is truncated. # Scalar and Vector Types +By default, declarations of a net or `reg` value is 1 bit wide, referred to as a *scalar* value (only a single value). + +```verilog +// Scalar declaration +wire foo; +// Vector declaration, with 8 bits. +wire [7:0] bar; +``` + +Individual bits in a vector can be accessed using array operators, eg `[i]`. + +```verilog +reg [7:0] foo; + +// Write to bit 0 +foo [0] = 1; +``` \ No newline at end of file From 32186127e2c1f76deeb817126ef4ef26380ff186 Mon Sep 17 00:00:00 2001 From: arc Date: Mon, 3 Feb 2025 11:19:08 -0700 Subject: [PATCH 0846/1027] vault backup: 2025-02-03 11:19:08 --- .../ECE2700/Verilog/Modules.md | 24 ++++++++++++++++++- .../ECE2700/Verilog/Types.md | 8 +++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/education/computer engineering/ECE2700/Verilog/Modules.md b/education/computer engineering/ECE2700/Verilog/Modules.md index 7bef14f..4c9c79d 100644 --- a/education/computer engineering/ECE2700/Verilog/Modules.md +++ b/education/computer engineering/ECE2700/Verilog/Modules.md @@ -21,7 +21,7 @@ Below is an example of the structure of a half adder module: ```verilog module half_adder( input a, - input b + input b, output sum_bit, output carry_bit ); @@ -37,7 +37,29 @@ There are 3 kinds of ports: - `output`: Output ports can be written to, but not read from. - `inout`: Inout ports can send *and* receive values. +Ports can be declared in the port list, or in the module body. Ports declared in the port list can optionally omit their type, to be specified within the body of the module: +```verilog +module half_adder( + a, + b, + sum_bit, + carry_bit + ); + input a; + input b; + output sum_bit; + output carry_bit; +endmodule +``` + ### Port types If no type is defined, ports are implicitly defined as *nets* of type `wire`. > In verilog, the term *net* refers to network, and it refers to a connection that joins two or more devices together. + +Ports can be a vector type: +```verilog +module test(a, b, c); + +endmodule +``` \ No newline at end of file diff --git a/education/computer engineering/ECE2700/Verilog/Types.md b/education/computer engineering/ECE2700/Verilog/Types.md index 2fb26fe..e77098f 100644 --- a/education/computer engineering/ECE2700/Verilog/Types.md +++ b/education/computer engineering/ECE2700/Verilog/Types.md @@ -77,4 +77,12 @@ reg [7:0] foo; // Write to bit 0 foo [0] = 1; +``` + +## Part selects +A range of contiguous bits from within another vector can be selected, referred to as a part select. This range can then be treated as a vector. +```verilog +reg [31:0] foo; +// Select bits 23 through 16 (inclusive), and assign the 8 bit hex value `0xff` to them. +foo [23:16] = 8'hff; ``` \ No newline at end of file From 70f2be9fcb33f79ff487515084a628883b18de34 Mon Sep 17 00:00:00 2001 From: arc Date: Mon, 3 Feb 2025 11:24:08 -0700 Subject: [PATCH 0847/1027] vault backup: 2025-02-03 11:24:08 --- .../ECE2700/Verilog/Modules.md | 25 +++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/education/computer engineering/ECE2700/Verilog/Modules.md b/education/computer engineering/ECE2700/Verilog/Modules.md index 4c9c79d..c02a620 100644 --- a/education/computer engineering/ECE2700/Verilog/Modules.md +++ b/education/computer engineering/ECE2700/Verilog/Modules.md @@ -37,7 +37,7 @@ There are 3 kinds of ports: - `output`: Output ports can be written to, but not read from. - `inout`: Inout ports can send *and* receive values. -Ports can be declared in the port list, or in the module body. Ports declared in the port list can optionally omit their type, to be specified within the body of the module: +Ports can be declared in the port list, or in the module body. Ports declared in the port list can optionally omit their type and only declare a name, to be specified within the body of the module: ```verilog module half_adder( a, @@ -49,6 +49,24 @@ module half_adder( input b; output sum_bit; output carry_bit; + // ----------- snip ----------- +endmodule +``` + +The full type of a port can also be defined within the portlist: +```verilog +```verilog +module half_adder( + input wire a, + input wire b, + output wire sum_bit, + output wire carry_bit + ); + input a; + input b; + output sum_bit; + output carry_bit; + // ----------- snip ----------- endmodule ``` @@ -60,6 +78,9 @@ If no type is defined, ports are implicitly defined as *nets* of type `wire`. Ports can be a vector type: ```verilog module test(a, b, c); - + input [7:0] a; + input [7:0] b; + output [7:0] c; + // -------- snip --------- endmodule ``` \ No newline at end of file From 1e688a361406488695a2defa00d08c2f15aa11db Mon Sep 17 00:00:00 2001 From: arc Date: Mon, 3 Feb 2025 11:29:24 -0700 Subject: [PATCH 0848/1027] vault backup: 2025-02-03 11:29:24 --- education/computer engineering/ECE2700/Verilog/Modules.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/education/computer engineering/ECE2700/Verilog/Modules.md b/education/computer engineering/ECE2700/Verilog/Modules.md index c02a620..ea7c1bf 100644 --- a/education/computer engineering/ECE2700/Verilog/Modules.md +++ b/education/computer engineering/ECE2700/Verilog/Modules.md @@ -83,4 +83,6 @@ module test(a, b, c); output [7:0] c; // -------- snip --------- endmodule -``` \ No newline at end of file +``` + +# Instantiation From 2456b82189717d64fa7af9709ec6c954c334d4db Mon Sep 17 00:00:00 2001 From: arc Date: Mon, 3 Feb 2025 11:34:23 -0700 Subject: [PATCH 0849/1027] vault backup: 2025-02-03 11:34:23 --- .../ECE2700/Verilog/Modules.md | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/education/computer engineering/ECE2700/Verilog/Modules.md b/education/computer engineering/ECE2700/Verilog/Modules.md index ea7c1bf..f64331f 100644 --- a/education/computer engineering/ECE2700/Verilog/Modules.md +++ b/education/computer engineering/ECE2700/Verilog/Modules.md @@ -86,3 +86,28 @@ endmodule ``` # Instantiation +Larger designs can be built by using multiple smaller modules. + +Modules can be *instantiated* within other modules and ports, and these *instances* can be connected with other signals. + +These port connections can be defined by an *ordered list*, or by *name*. + +### By Ordered List +```verilog +module submodule (input x, y, z, output o); + // ------- snip ------- +endmodule + +module parent; + wire a, b, c; + wire o; + // Similar to C, the type of the module is first, followed by + // the name of the module instance. + submodule foo (a, b, c, o); + +``` + +### By Name +Ports can also be joined by explicitly defining the name. + +Syntactically, this is done with a dot (`.`), followed by the port name defined by the design, followed by the signal name to connect, wrapped in paranethesis (`.) \ No newline at end of file From b4c30e79efa1575fab6a72e3e97e5f3c994bfad9 Mon Sep 17 00:00:00 2001 From: arc Date: Mon, 3 Feb 2025 11:39:23 -0700 Subject: [PATCH 0850/1027] vault backup: 2025-02-03 11:39:23 --- .../ECE2700/Verilog/Modules.md | 24 +++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/education/computer engineering/ECE2700/Verilog/Modules.md b/education/computer engineering/ECE2700/Verilog/Modules.md index f64331f..dfacc87 100644 --- a/education/computer engineering/ECE2700/Verilog/Modules.md +++ b/education/computer engineering/ECE2700/Verilog/Modules.md @@ -104,10 +104,30 @@ module parent; // Similar to C, the type of the module is first, followed by // the name of the module instance. submodule foo (a, b, c, o); - +endmodule ``` ### By Name Ports can also be joined by explicitly defining the name. -Syntactically, this is done with a dot (`.`), followed by the port name defined by the design, followed by the signal name to connect, wrapped in paranethesis (`.) \ No newline at end of file +Syntactically, this is done with a dot (`.`), followed by the port name defined by the design, followed by the signal name to connect, wrapped in parenthesis (`.x(a)`). +```verilog +module submodule (input x, y, z, output o); + // ------------snip----------------- +endmodule + +module parent; + wire a, b, c; + wire o; + submodule foo ( + .x(a), + .y(b), + .z(c), + .o(o) + ); +``` + +Because association is done by name, the order of definition does not matter. + +### Unconnected ports +Ports that are not connected to any wire by the parent module will have a value of high impedance \ No newline at end of file From 3b4bb73264e95fcb3ad64a8fe8fc5436a76bcac1 Mon Sep 17 00:00:00 2001 From: arc Date: Mon, 3 Feb 2025 11:44:23 -0700 Subject: [PATCH 0851/1027] vault backup: 2025-02-03 11:44:23 --- education/computer engineering/ECE2700/Verilog/Modules.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/education/computer engineering/ECE2700/Verilog/Modules.md b/education/computer engineering/ECE2700/Verilog/Modules.md index dfacc87..8444216 100644 --- a/education/computer engineering/ECE2700/Verilog/Modules.md +++ b/education/computer engineering/ECE2700/Verilog/Modules.md @@ -7,6 +7,7 @@ Module definitions are started with the `module` keyword, and closed with the `e ## Syntax The general syntax of a module is as follows: ```verilog +// This line is referred to as the *module header* module ([port_list]); // Contents of the module endmodule @@ -130,4 +131,5 @@ module parent; Because association is done by name, the order of definition does not matter. ### Unconnected ports -Ports that are not connected to any wire by the parent module will have a value of high impedance \ No newline at end of file +Ports that are not connected to any wire by the parent module will have a value of high impedance, and is considered unknown/undefined. + From e985b57ae462305e1ed6aafc5784523d5448ac1a Mon Sep 17 00:00:00 2001 From: arc Date: Mon, 3 Feb 2025 11:59:23 -0700 Subject: [PATCH 0852/1027] vault backup: 2025-02-03 11:59:23 --- .obsidian/plugins/obsidian-git/data.json | 27 ------------------------ 1 file changed, 27 deletions(-) diff --git a/.obsidian/plugins/obsidian-git/data.json b/.obsidian/plugins/obsidian-git/data.json index bef4c6e..e69de29 100644 --- a/.obsidian/plugins/obsidian-git/data.json +++ b/.obsidian/plugins/obsidian-git/data.json @@ -1,27 +0,0 @@ -{ - "commitMessage": "vault backup: {{date}}", - "autoCommitMessage": "vault backup: {{date}}", - "commitDateFormat": "YYYY-MM-DD HH:mm:ss", - "autoSaveInterval": 5, - "autoPushInterval": 0, - "autoPullInterval": 5, - "autoPullOnBoot": true, - "disablePush": false, - "pullBeforePush": true, - "disablePopups": false, - "listChangedFilesInMessageBody": false, - "showStatusBar": true, - "updateSubmodules": false, - "syncMethod": "merge", - "customMessageOnAutoBackup": false, - "autoBackupAfterFileChange": false, - "treeStructure": false, - "refreshSourceControl": true, - "basePath": "", - "differentIntervalCommitAndPush": false, - "changedFilesInStatusBar": false, - "showedMobileNotice": true, - "refreshSourceControlTimer": 7000, - "showBranchStatusBar": true, - "setLastSaveToLastCommit": false -} \ No newline at end of file From df32788c070c068ba8d3ecd685167978ff5c7833 Mon Sep 17 00:00:00 2001 From: arc Date: Mon, 3 Feb 2025 13:03:55 -0700 Subject: [PATCH 0853/1027] vault backup: 2025-02-03 13:03:55 --- .obsidian/plugins/obsidian-git/data.json | 27 ++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/.obsidian/plugins/obsidian-git/data.json b/.obsidian/plugins/obsidian-git/data.json index e69de29..bef4c6e 100644 --- a/.obsidian/plugins/obsidian-git/data.json +++ b/.obsidian/plugins/obsidian-git/data.json @@ -0,0 +1,27 @@ +{ + "commitMessage": "vault backup: {{date}}", + "autoCommitMessage": "vault backup: {{date}}", + "commitDateFormat": "YYYY-MM-DD HH:mm:ss", + "autoSaveInterval": 5, + "autoPushInterval": 0, + "autoPullInterval": 5, + "autoPullOnBoot": true, + "disablePush": false, + "pullBeforePush": true, + "disablePopups": false, + "listChangedFilesInMessageBody": false, + "showStatusBar": true, + "updateSubmodules": false, + "syncMethod": "merge", + "customMessageOnAutoBackup": false, + "autoBackupAfterFileChange": false, + "treeStructure": false, + "refreshSourceControl": true, + "basePath": "", + "differentIntervalCommitAndPush": false, + "changedFilesInStatusBar": false, + "showedMobileNotice": true, + "refreshSourceControlTimer": 7000, + "showBranchStatusBar": true, + "setLastSaveToLastCommit": false +} \ No newline at end of file From 01549990925f813ad27b1fbd640ce1719d72fede Mon Sep 17 00:00:00 2001 From: arc Date: Mon, 3 Feb 2025 13:08:54 -0700 Subject: [PATCH 0854/1027] vault backup: 2025-02-03 13:08:54 --- .../ECE2700/Homework/Homework 2.md | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 education/computer engineering/ECE2700/Homework/Homework 2.md diff --git a/education/computer engineering/ECE2700/Homework/Homework 2.md b/education/computer engineering/ECE2700/Homework/Homework 2.md new file mode 100644 index 0000000..ac94d46 --- /dev/null +++ b/education/computer engineering/ECE2700/Homework/Homework 2.md @@ -0,0 +1,11 @@ +# Feb 3, 2025 ECE2700; HW 2 Boehme, James +# 1. +## Problem Statement: +## Given +## Find + +--- +# Solution: + +--- +--- From b81328a44212bb318e196b5d4b02f861f101fee3 Mon Sep 17 00:00:00 2001 From: arc Date: Mon, 3 Feb 2025 13:13:54 -0700 Subject: [PATCH 0855/1027] vault backup: 2025-02-03 13:13:54 --- .../computer engineering/ECE2700/Homework/Homework 2.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/education/computer engineering/ECE2700/Homework/Homework 2.md b/education/computer engineering/ECE2700/Homework/Homework 2.md index ac94d46..49497dc 100644 --- a/education/computer engineering/ECE2700/Homework/Homework 2.md +++ b/education/computer engineering/ECE2700/Homework/Homework 2.md @@ -1,6 +1,10 @@ -# Feb 3, 2025 ECE2700; HW 2 Boehme, James +# Feb 3, 2025 | ECE2700; HW 2 | Boehme, James +--- # 1. -## Problem Statement: +## Problem Statement: +> Describe in Verilog, a full adder that accepts the following three one bit inputs: $x$, $y$, and the carry-in bit $c$; and it generates the following two one-bit outputs: the sum bit $sum$ and the carry-out bit $cout$. + +> Part a) For the first full-adder design, describe the $sum$ output using ## Given ## Find From 9c785ecdb98bb17e6f7c69d2454a9397de62ffc1 Mon Sep 17 00:00:00 2001 From: arc Date: Mon, 3 Feb 2025 13:18:54 -0700 Subject: [PATCH 0856/1027] vault backup: 2025-02-03 13:18:54 --- .../ECE2700/Homework/Homework 2.md | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/education/computer engineering/ECE2700/Homework/Homework 2.md b/education/computer engineering/ECE2700/Homework/Homework 2.md index 49497dc..bf0a7cd 100644 --- a/education/computer engineering/ECE2700/Homework/Homework 2.md +++ b/education/computer engineering/ECE2700/Homework/Homework 2.md @@ -4,12 +4,27 @@ ## Problem Statement: > Describe in Verilog, a full adder that accepts the following three one bit inputs: $x$, $y$, and the carry-in bit $c$; and it generates the following two one-bit outputs: the sum bit $sum$ and the carry-out bit $cout$. -> Part a) For the first full-adder design, describe the $sum$ output using +> **Part a)** For the first full-adder design, describe the $sum$ output using *structural* verilog, and the carry-out output $cout$ using behavioral verilog. + +> **Part B)** Describe the second full-adder design using *hierarchical* Verilog. Describe the half-adder module first using *behavioral Verilog*. Then instantiate two half adders in your full adder. + +> **Part C)** Create a Verilog testbench for the complete full-adder circuit. Make sure your testbench provides all input combinations for your full adder module. + ## Given +The logic expressions +$$ sum = \bar{x}y\bar{c}_i + x\bar{y}\bar{c}_i +\bar{x}\bar{y}\bar{c}_i + xyc_i $$ +$$ cout = xy + xc_i + yc_i $$ ## Find --- # Solution: +## A +--- +--- +# 2. +## Problem Statement +## Given +## Find --- --- From 08065a130beb412b18e7036594f310e2e3fb9669 Mon Sep 17 00:00:00 2001 From: arc Date: Mon, 3 Feb 2025 13:23:54 -0700 Subject: [PATCH 0857/1027] vault backup: 2025-02-03 13:23:54 --- .../ECE2700/Homework/Homework 2.md | 13 ++++++++++++- .../computer engineering/ECE2700/Verilog/Verilog.md | 8 ++++---- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/education/computer engineering/ECE2700/Homework/Homework 2.md b/education/computer engineering/ECE2700/Homework/Homework 2.md index bf0a7cd..69361f1 100644 --- a/education/computer engineering/ECE2700/Homework/Homework 2.md +++ b/education/computer engineering/ECE2700/Homework/Homework 2.md @@ -18,7 +18,16 @@ $$ cout = xy + xc_i + yc_i $$ --- # Solution: -## A +## a) + +--- + +## b) + +--- +## c) + + --- --- # 2. @@ -27,4 +36,6 @@ $$ cout = xy + xc_i + yc_i $$ ## Given ## Find --- +# Solution +--- --- diff --git a/education/computer engineering/ECE2700/Verilog/Verilog.md b/education/computer engineering/ECE2700/Verilog/Verilog.md index 4aed32a..a14ea62 100644 --- a/education/computer engineering/ECE2700/Verilog/Verilog.md +++ b/education/computer engineering/ECE2700/Verilog/Verilog.md @@ -32,24 +32,24 @@ module example1(x1, x2, s, f); and(g, k, x1); and(h, s, x2); or(f, g, h); + // You can also do this + assign f = (~s & x1) | (s & x2); endmodule ``` +- Structural Verilog describes how things are laid out at a logic level. +- ```verilog // V---V---v--v-----portlist (not ordered) module example1(x1, x2, s, f); // Defining the types of the various ports input x1, x2, s; output f; - // You can also do this - assign f = (~s & x1) | (s & x2); - // Or this always @(a, b) // always @(....) says "do this stuff whenever any of the values inside of @(...) change" {s1, s0} = a + b; endmodule ``` -- Structural Verilog describes how things are laid out at a logic level ## Testbench Layout - Define UUT module From ff4330471b19bc5d2c4126dd2db8d53dc2914106 Mon Sep 17 00:00:00 2001 From: arc Date: Mon, 3 Feb 2025 17:23:29 -0700 Subject: [PATCH 0858/1027] vault backup: 2025-02-03 17:23:28 --- .../computer engineering/ECE2700/Verilog/Verilog.md | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/education/computer engineering/ECE2700/Verilog/Verilog.md b/education/computer engineering/ECE2700/Verilog/Verilog.md index a14ea62..e95ca8c 100644 --- a/education/computer engineering/ECE2700/Verilog/Verilog.md +++ b/education/computer engineering/ECE2700/Verilog/Verilog.md @@ -17,8 +17,11 @@ - Put in public domain in 1990 - Standardized in 1995 - Originally intended for simulation of logic networks, later adapted to synthesis +- Structural Verilog describes how things are laid out at a logic level. -- Behavioral Verilog describes broader behavior, at a higher level +## Structural Verilog +Structural Verilog describes things at a logic level. +- The use of logic gates and continuous assignment are markers of structural Verilog. ```verilog // V---V---v--v-----portlist (not ordered) module example1(x1, x2, s, f); @@ -36,9 +39,9 @@ module example1(x1, x2, s, f); assign f = (~s & x1) | (s & x2); endmodule ``` - -- Structural Verilog describes how things are laid out at a logic level. -- +## Behavioral Verilog +Behavioral Verilog describes broader behavior, at a higher level +- The use of `reg`s, time delays, arithmetic expressions, procedural assignment, and other control flow constructs are markers of behavioral Verilog. ```verilog // V---V---v--v-----portlist (not ordered) module example1(x1, x2, s, f); From ee35a75bb0c9f3aeaf6b06f2e55d9ca5f338747b Mon Sep 17 00:00:00 2001 From: arc Date: Mon, 3 Feb 2025 17:38:27 -0700 Subject: [PATCH 0859/1027] vault backup: 2025-02-03 17:38:27 --- .../ECE2700/Homework/Homework 2.md | 41 -------------- .../music/Liszt's 6 etudes de Paganini.md | 55 ------------------- 2 files changed, 96 deletions(-) delete mode 100644 education/computer engineering/ECE2700/Homework/Homework 2.md delete mode 100644 education/music/Liszt's 6 etudes de Paganini.md diff --git a/education/computer engineering/ECE2700/Homework/Homework 2.md b/education/computer engineering/ECE2700/Homework/Homework 2.md deleted file mode 100644 index 69361f1..0000000 --- a/education/computer engineering/ECE2700/Homework/Homework 2.md +++ /dev/null @@ -1,41 +0,0 @@ -# Feb 3, 2025 | ECE2700; HW 2 | Boehme, James ---- -# 1. -## Problem Statement: -> Describe in Verilog, a full adder that accepts the following three one bit inputs: $x$, $y$, and the carry-in bit $c$; and it generates the following two one-bit outputs: the sum bit $sum$ and the carry-out bit $cout$. - -> **Part a)** For the first full-adder design, describe the $sum$ output using *structural* verilog, and the carry-out output $cout$ using behavioral verilog. - -> **Part B)** Describe the second full-adder design using *hierarchical* Verilog. Describe the half-adder module first using *behavioral Verilog*. Then instantiate two half adders in your full adder. - -> **Part C)** Create a Verilog testbench for the complete full-adder circuit. Make sure your testbench provides all input combinations for your full adder module. - -## Given -The logic expressions -$$ sum = \bar{x}y\bar{c}_i + x\bar{y}\bar{c}_i +\bar{x}\bar{y}\bar{c}_i + xyc_i $$ -$$ cout = xy + xc_i + yc_i $$ -## Find - ---- -# Solution: -## a) - ---- - -## b) - ---- -## c) - - ---- ---- -# 2. -## Problem Statement - -## Given -## Find ---- -# Solution ---- ---- diff --git a/education/music/Liszt's 6 etudes de Paganini.md b/education/music/Liszt's 6 etudes de Paganini.md deleted file mode 100644 index ff25bb8..0000000 --- a/education/music/Liszt's 6 etudes de Paganini.md +++ /dev/null @@ -1,55 +0,0 @@ -# Work -## Historical, Superficial -Franz Liszt was a huge fan of Paganini because of his incredible skill, and the technicality of his music. This led him to set out and compose a set of etudes[^1] inspired from Paganini's works. He originally released them in 1838 as the "Études d'exécution transcendante d'après Paganini", then revised them in 1851, dedicating the later revision to Clara Schumann[^2]. He made this revision because the first versions were so absurdly difficult that they were considered impossible to play by many. Even after the revision, many consider these some of the most technically demanding works in piano literature. - -[^1]: Literally translating to "study", an etude is a short song usually meant to help practice a particular technique -[^2]: Wife of Robert Schumann, Clara Schumann was an accomplished pianist and composer. -## Analysis - -### Questions -> What did the composer have in mind? - -> What is the general mood? -The music is generally pretty dramatic and intense, although there are some slower, gentler sections. - -> What might it mean? - -> What parts do you most like? -I really like -> What parts do you least like? - -> What style is it? - -> How do you know? - -> What medium is it - -> What texture - -# Composer -## History -Liszt fell very ill, to the extent that an obituary notice was printed in a Paris newspaper, and he underwent a long period of religious doubts and pessimism. -- guitar face for pianos -## Last Name -https://german.stackexchange.com/questions/67786/is-liszt-really-pronounced-like-the-english-word-list -TODO - -## Freakishly Large Hands -His hands weren't as large as Rachmaninoff, but they had effectively no connective tissues at the base of each finger - -# Notes during production -- was going to include a pic of a cast of his hands, but it's pretty manky -- can you imagine the crushing disappointment - -# Links -https://en.wikipedia.org/wiki/Franz_Liszt - -https://en.wikipedia.org/wiki/Grandes_%C3%A9tudes_de_Paganini - -https://imslp.org/wiki/Grandes_%C3%A9tudes_de_Paganini,_S.141_(Liszt,_Franz) - -https://researchrepository.wvu.edu/cgi/viewcontent.cgi?article=6402&context=etd - -https://lisztmuseum.hu/permanent_exhibition/dining-room-120755 - -https://www.pianostreet.com/smf/index.php?topic=65517.0 \ No newline at end of file From 7e27d75c5cd3ef7998997b05f27139a4f43e6411 Mon Sep 17 00:00:00 2001 From: arc Date: Mon, 3 Feb 2025 17:43:27 -0700 Subject: [PATCH 0860/1027] vault backup: 2025-02-03 17:43:27 --- education/nutrition.zip | Bin 31146 -> 0 bytes .../Donald Trump Campaign.md | 25 --------- .../Hazelwood v Kuhlmeier.md | 8 --- education/political science/Think Again.md | 34 ------------- personal/tech/Deploying my Macbook.md | 30 ----------- ...gerprint authentication on Zephyrus G15.md | 7 --- ...ergfxctl black screen on dedicated mode.md | 1 - personal/tech/Themes I like.md | 26 ---------- ...derstanding how to handle paths for Ash.md | 13 ----- .../WiFi not working after pacman -Syu.md | 48 ------------------ ...g a completely functional shell in Rust.md | 28 ---------- ...le to connect to wpa-enterprise via iwd.md | 4 -- ...ed after restart or wake from hibernate.md | 6 --- 13 files changed, 230 deletions(-) delete mode 100644 education/nutrition.zip delete mode 100644 education/political science/Donald Trump Campaign.md delete mode 100644 education/political science/Hazelwood v Kuhlmeier.md delete mode 100644 education/political science/Think Again.md delete mode 100644 personal/tech/Deploying my Macbook.md delete mode 100644 personal/tech/Enabling fingerprint authentication on Zephyrus G15.md delete mode 100644 personal/tech/Fixing supergfxctl black screen on dedicated mode.md delete mode 100644 personal/tech/Themes I like.md delete mode 100644 personal/tech/Understanding how to handle paths for Ash.md delete mode 100644 personal/tech/WiFi not working after pacman -Syu.md delete mode 100644 personal/tech/Writing a completely functional shell in Rust.md delete mode 100644 personal/tech/unable to connect to wpa-enterprise via iwd.md delete mode 100644 personal/tech/wlan0 disabled after restart or wake from hibernate.md diff --git a/education/nutrition.zip b/education/nutrition.zip deleted file mode 100644 index ed6255a8a16a2816f0f5a66784afbeb5baab6060..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31146 zcmZ6zQ;_E1);8R>ZQHhO+qN}rK5g5!ZQDI<+s3px-|YAQPxj71l7qXFs=HRLTv}0* z1qDL``p*$96Q%usH~;?$=HJ!9-Oa_?&Dzm{QR)BIfdD}PUHf@z-}fZE?Lz|rePaRv z;r!P+QDYYqM=LKg7h^YbR|b2tQZ4;>+;()oIDc^CVkr`DUirdh3Z#zq#ID49l%?R}DMu%9hC~aT3-mT)9aw zxF_RywGZ5tJuBMUcuKuLiV-xS%p75sF`SKC)$sl^y2Y!7JB)pufqL~Vvclx3zbI&C zyK`~nkz3*GLfZPRy<7Qr*S7=LPF9ivIZ3MF)%Mfme?ZFB)06T$xR$s zU(FwoNn&$+f+#oKfcx;~N~cE;8@up%@li_*Do>ga1;}>Tbn)$N)20s{TZtcziQx__ z721^joXW6s-{tX#7PvTaA$c z43dN;^N;eebIjE7WI(Km{c^%@gyM%=XdRi$yItMVR3yJlyKj`eP>VFJ3C9b^6a~WA zlTED5&dJ+F;VQPw{3u&PbdjC~_LCjAGp^^TnnT?CDl-mBnWam2dOG{WI}dbKM1{ER z;YHfflM_XY$&2d+BSD~ST4+}oH`gE{mht<_d`z1PwO=vTqSyC>KAxonCWN*3#HMV4 z+ubNzw{&_rL@<>gXPJMe^if)x(c}WggIC$=R9Ew~(0^SXsWe08qUH-dQUKD{eQSXq z87}kkns-yynWhbK!Uq?6377Hp%$eKi>C({TH>V}v{ZQ&QnOS}w)x>;RL2XY+fu+ds zCl!8=9zv_Stl%OcpVzfYOcWBGU~P(aFj{9!Q+R)~1Jji4I@Tr^3CqvV$99%CMvSFw zkBT3#-aDWQHKfiFYD|cTVC~aPWp{zw$n@OEf0Hh9EM%C3C~ewD*k*_5Rx0{v3OsH4 z_#Ym<5{De;Y|-{AaLN3AMWMV>X4&w*QHu*y6Xrr`*ZiH?O1ZPlS<;|w&Ro>B&m9~H zBW>!aGZ@i-Z&<|w!~t<=54!JlK1*ah_{*2ng&NvU;QW!OF0x)2H^kZZOpMDD+Z4ZLat-4{a}JR;9fr z@MM!{(O+|XVs836*#P=lW&7ti{bYNZ`&;Vq;_=VmqRn>3s+_4`hHNegtMv4T-g6z_ zyZCQu`H)LQn0zl=J;Q7J#V`-Yk_jrj&%6nQi3`C&sC=Ou2i$0JbF^{L6GJ+ZoUIcD zt|p%WrfViYY^qKM*vXk?u}fidQRmP4#@R@vZ&Ywmtne1}792s$Fc^kG2qh<~(4t4m z?X@>hAROe85M&^E8n7O_jaz5mN|239KxH5ToPX*jQn-4AcP5mU@+y*fASKK8Jy?Va zr*chEZY%FyU??`j!EhfXIA7kj;$z*(s!^y9f@&}5!;=!NWr|)>oxSrjuJW$!K8Wvt z^HXIQw#!Xn$syr3!bBcDC35QU*TvWis78jwP#`JMez>wv7q{0y|0M7X4yTM0bV|C! zmce>snU#s`CZPEWk$XRsDrjIpo1h-AtKs1-?sD_KWT?v1GW%aGX^MA}zFV;v;3gbt zua{f7>QpZX0G!=1R@6sr&$Qo_yiB(fWONNk?GUK8GY!I=Gu`2+RBI)Fy&B!u1aSGj z!trENA7~*rS1C#dTw&ez5<%Q|V9cdH(PLq*6eR=a@lC{`V7W?=r6Tlb{`LH52eqB? z01bA2YMlmo8e$PIdA@;K2LgUU4PQsvpNQhpRiCnNV%aTbQfbp8?V%4>` zpRu+fpc-egcn+4x!}+zi*8lmrRL&yFXZ`%+1NAZMR%|MZh--$a7NGg04!y)EnZ|#5 z;A_OS{$vl0H*3fADSdxHiF=}Ex&yV&+u;Q#xf!<5DCbT4SP<(9k0zw!qb?=UrZ2Ro~OFv3iuhI`Y3J zb05_K&yUrR1arDAF(U3jx_sSyY{g4)6s>~JT=fmROw7vulUkrvljT$KP~vgpSH&3#V~y;RI(3;;lqY5RI*9vT#tWwCEcG@>Pg-Vxi2OrZAP{Il1g@5%v40IBM?@(jp{Z~4pvf!vx6d; zt%o7Muqv2{$tmt+$z&gS?T=Kn$Bn_7)3AtGXO5sb7Tp?4_NC2t=_RuFEzP``KzaM> z>d)V%PFX>ArT{3V+(VTtEAr+B%5fz7%#rSXDpAe*UIrLVr~FiaIQn!>$AB(v2F#Pv ztlMD5tFiQ(HHY<|egxmt(EhIvA9f_E`!J)1$+GmzEdD9HvBM3B3FLfA1YF|wa+%_c z(c61iT(mtF{bVdUmYAIvr%2^3Yq)o+>(nmR z%mvW#sVibI)m2t(g+|0l#>WB^wUm>H2NTfLm&kLBTtQKsFX~KTI2~HDDPgV4Z#7&j z+iTftd-!WX^t}?X+l64lnK8Lt@*n4>&OsNn{C!8FtpSPIHODXK4}&`x#;exw=TQ0t zs=`^wWIC21!w8}Rf*yKQO)t_m&o3=M0Qcp_Ax!!>p50!2o+zAF54$t@XRf!0Z#aio zb9Mdt^wuNF6_vQ;_ImKzbjbCYZ>xTsOn}p~e4N^a8y@e1mH{>fP|ILI_QeL$l$iZv z0Pug~LKsP41X>UvAUZH0Ad3IOg<{s`ZpJQNL@MSM<}T(ArshP_4sOP_|A!IvRVN*` zn2>s}Xd$4Yc*0A1kCU>2aP0%ZsFuO_<0~7*Gf31CGQ|S+Bcq7==}T;w}W)@e%PP_bWHFsEqf z8&&kmX?xudE6_@fZ$3!F4UQy^Rt^l-%Rs$ej z=qbAkRCwhUM34+eF0`*JE9eUf$v5SjIIX^D_utv}Xms*2+4?)@?$6snwuDXj6M5JQ zfEL(|*5&9FSYk$yI;!r^pHg4Z|>p4}D(DT~C;)vW?XOxzNX~I%=>7(LK7MAp)^hGhigm$Ce0LcUbzunIQ~ZQ8aPE zCK$KhgT`+Jm0s9Jzds;-=?+0Ir;kj0A??MNu&4i4{1MlxRe71q1JgP%9&aocC~#Le ztBGW0DY3pm&BmHTZPRexJR8cvd0B6%%x{}@e@6W8a+5wEO>_CjQ?`hJfbjpP+$_yq z-K;&#iB!E@-OTO(F_9Z>UB~SXbpMwx7!a=rek{et?p~ma1&np@EMX)q6nD?J+&jHzCE5k<9T`q2OWc#tooE71S$*og zs}L0b`(B$+x69c}mFt|O_)>lxosRZ4w9O}tjCtN#xw}TO+a7oQdiwfILFHJ7*2MS3 z_E?5dWf6gt26L*0OZ#ms+7?Us`x2!*^rP9Wxt7OI{%Wwd{^DnDPZyovb{y@wr+`k!p{ zxeL0d;!p_Ok<>HJJ4Ozz8eKavi@>C&4X7(I^p6!AT z`nmfxKxQ~pg)Xh+1Q(PmuP$O~@_Jf)d%CB;gPr2Qiwtf+BhRM??QP*u&`UiI-J_YK zlxu^u6AdtSEa0;zZPZJh3;c5d`c-~@1hTIIL6YuR_;vX5x|>e$$PXZ}PTM!w1RH%M zin|a-BBq}DZf=!on7e@O2aPPZsk+W+xI$N>uIEN3ldmC&MjOH6Pq3o#0f3*^T7a(wwEi|DRnan5uT2Q$Glr&^ycL@aGoJp&M^<#D~tq1Jld`YLR0TP5m}1cuR!*A7IP6XP&E4)K^- zE1WJiq$5o+J%Fl0qY{>(QZ=^P&hPxZ6R+1rX zT)2`SipYyMPPA#q5}pOrp0nEqeoxAXeS`U3ES*>c^F}KXrL9b3?_cBesCb zIJ&E`MFyjb4Cy|KnB~q{;EJPX(ky*a*gBloWBVLmJMny`0Uk1&Wb9A^w@I4CRbUFs z#QN^Mj*xuFQPJ6q_(`ocF)!3!7~+%-AjqvGhmfqD4pXAqBZxky6uXQhq0B*YsqA~A z*Iv9tG%roY`S5+hxi{9}qHo(OsGLiRp;xhzf(>CM2H>l}6#lN@sgJEqDa2(pV58Pj zZt3FQAkW$(QZtC$?83+}>$<=IE740ZcC@d@1+#`|%t~g64B7iY=je1SY@B$PjeKku z?Cp=Zpj=nUoM&+iP{{}R3lHX2EYfX246^G|M__31?M3^8z+<#y*mgJtrkHutSKV4@ zbgQ|PkGJrtgBd?XH8qD$E!IZc61|J|?I}ZgT*geeLCQG7PXV4s`e6$ztW3hH3deYHib#e%;uQ5Tq|@^@=W{Kx5R+jX$ooS#zAP7^ zP`Yp#{+OJk%_P4FWzp8j`6S0>P`OYe_n_aeA3Rep0hQrKBGj-#NSUn1 z^vOk{`@Dp9C+N_-!l29>F#Q#4T-L7d@o;gh_fGU`BL)K*f6LfLi>7S~-l|i7rxs)< zi@?*Ir|Q!rw^&&X`5V?-t;A0Tay_ltib?7W9S%_9S>tR~*hwU($6E`eS$&0uXt3>| z>?X-~ihfsvUmUWpp}BwM9>sCRuKZWO$4FyJkFacFfjX28jVDd$ zgshiwTni#LS<8fuhM`e4#}gOJd`h=6Bi|9jcVDRjuD(l5&6MS4|3Vq3-`Z?im!J^- z5<`*`a`njypA($RA1vYfr3$}dNVeUHLQfYaBmEFTW|k1RIgg+hB|sLuKZ6I%s>@(6 zgrVU`w|5URKKtq!_o0vqM9!@yReBQgB1l9M0u!nTYmHgrL?bvt>8gsN%p~;yiOAG1 zJOCpJPaPpk26&AnD3>j7J*o}T6FDgNgWF276GX0`<`N!MGVkad^&yy z-e<`J2Z9zxV6Hitb;}#24jD#gi;6DrvJmTBWK~mmJI+A?THw5ha~D| z(C6%JL8E+TLjil()4)oEAn_M(nH6fBfho&Nfol0Vq##GfEUpamLM_ow9Tg^91iCZu z1Z7@wwU3otx@o(!M|f5;Hc3Q=(-ahFxH^iIx0|Inn8eojf;>=w%MEOsH#vUP0^pun zLe3Uf=(B6_7I;kKWhd;A_M2bg6%D3|l#29Mtc?6T!Nyfd4C6)d3Mv6RnL%R{n zFcbwct^*U^VpHdLao-wz@MFq;#%A}!tGj@QPmm7A{J)Wy`M%%Z;euhGX-D_2*JV1Z z9#K&N()!#Vb1MHnAm1OK>eqc`{zuv!^+-#|p9ywukyVVE7;09fA`A-2UMRz-%Cgm%5|#(C(>N?CXdZYl8e;P><+hp^lu$u7Wo;oY$%?zGgDm!s?03?*x@GWO-aG#S}q5Z#~}; zd8nR5yIB%iOMUGP^p@8Pvq@rwQ@-Pp3bSF1o)tL8*IY3w_?l7sfp*iYe{#OvS)H?9 zY75WTC7Mt22N3kqkJevYNqm{THLaVK6OhT6X2(*YXFHraEG=`ee{P57#QC(ty^fo` zTdI(=Yc9KLagH?PW@cEHMk@yU|GWoL&{$;X9B`c-oY=*zr=kjb@r;J8AIB%N5;e78 zXM!UJT%gvAqz@7vd!k+nCkkOOgtY-;xF5(x8oqDVzY%xXbaH$?bfiQJLF+&xUdiFt z7B1&sdnE*2)?TC^#OQ_B?&VT=y+q9=oqVdWA0=bR^WTn^kopzd{xmzVDlz)z#8WAk zML70(0QQLEZzn#2a5^Or-ttA{l3bOjiAxxFrWNkm;VAxs{5M!-Jxvab`p1nn{&A!K z2CL%6Zq^Q#L}J#ijxJ{AF8`6uQ`Nd%{!yaqXLL^K!m%{ncuN-Q!!c?SN`*@}Faqcp zA-vddtBFq`gndH!$eLRgQ+p^8IIU>7wV6N=x0jG58(yWd=O!@sN0{N`2lr0cP|C zt`rzpZjQo^Q13*Br8dq^b-Rr5 zdt+x;(|3Z7b1CKVr29f0Y*oZt{F(SLiOJd*FVKQyp3i9agi)fXRau6B|7Bdh`IaQN zkU&6vh(JJ$|HZh(9n4)Uy@*7N?Tr7!?kR{g&8;o1+=%3j9gHo_?adwB{*|@6rnMuk zB+9qlPZWe5>0)3Bxy)uwXE%h~D9LIQ*hb{*ut`u}CP{f=-mNrYibcqA`Qq z28m_gS<C-$HN|(U=^N3Ik9w z?xz8q<6ieZvCd4|DE&D-+Z0{+91w^AGBcTuQ3OV~_44B6UQP?Gmjm(?piWGjoYk2>sDf ze;YDfeG}Gr9jXJzcERT0_by7C8N6U&XL31;1f5@JUx!OjFWDb}=T>-bO|*x-n8v3QrGLV-^^@(L+=xKa&m15N&0_)!)?_hR%q_wCgp z5@)k2tAh;l5!^JK>V9`h4gS5fBaWv+;nnxhDKTjj*B7hI!({ig?`NP@cGQ>t5%jTsRT;VC?`d`OG2c|w$ zV}!&brJBi(^g)|IYK&vSjJ2prU^hvp>38Nhz~xL?-NUnZZWUjKUk3M5G!ey9a=M2| zfy3K3G!kLSX8yL>M1ciXGfs=8Ae$ES?=)s;s1p~5n{NX(X)o=<3&3(m!hM}CK zj5J1T6L*t=0FuGtgOh;25>Y2Amh4LNLH;WB2Zx}bhdgikgJX%oPIa5y;VuevLR9^Y z$dik@_=&@VYiZP|FXnN|yOOuz3zm)-%*x1L2?CEm&8Kxo<*mU2ICZxpSX)ITxlNxN zVa)42U%nBp53N9LiR@VgPUKe|+uySW4*{gc!0=-=f=lkhRm5ydO+Hb8w7l8(9XR{XyyADK{{ zNx0R!puXNnydIPP-1AB@`V6oAOl4n>H6Jw9*jK~VoxM}h?!VL6ufaT}&ztW^WTmX! zZghFD$g$?R!=+9bQ$;P+Ek($Z@($SE@wp$tC4CoZMeT$>9I9-?p8(n}hqTBhN)(HS z&}ci0$__6d$1j-rW?bhV%3IGhs1nnvhk>w9y?(#i=LvgiNrfDGP&&;U=~L_$dG6s> z8$Hq2VDU+DP}cd@eTQ?BUO87bl}`SMsg)13yz2SMmGFlV{EpF$wQG@_172z{XXf>u zZQiSt`EFg>A5v?DBHWB}ycwIUyATHA#BArpTAmEWL(#R ztg7I6G>{yV739hkU{tlRY6qCIyF1J5W#MHKHPIq$VR3ie?O+ouj9S%$YY=}>W7*{M z)ScRnGty=az_c{~QFF8s1=0hoYh_fWI(3}Yaeh#cpUc(Ol^7ky; z#Plk{QID*SM)Y*kLL>VKUFjsI@ZD9$uih>ZtE{aRCvhggYwWgB&ZAn3jZ-&ajBu(X zEL_pEh|v=`nYML0Qavrza1wOatw*e^I$o(0f zR>y9+(!WRku>Cx`B}${f!yGx`>gGAg%2f17lJVa^xT-NIR?@#QBY!vu8cM332y{wV zA@SX#j$=i-r1W!7hrt7Yny&BZ%vMH+|aE=-% zeK|4M?Dn_3ObSi1!`fyV-rGKxmYbZ?0ta+!{)@A9m9}~R#Tggqp+rH{#5Y! z({|`~N1moUsj!Ya!5ryMu$gAYDW3Df!6Z$U(H!eFN~LopLAI3j29dPbBD8a?8CEU| zC2!;p(c8r03#W4yi}ZHnO&})1!4Nt3hDzse1e(5H-ok|QTq$|m>W(}ox9-_Lmo5K(lYFf1F zv51F7uE(O48ZI7xX5L!a?Nz<7al-i~!ar^CVU7WqvNwF>#Jt&z!H?YBFgJg0+e(|s z>;I_#-e#v1E?erh=e*g`&%FZ$XCO?m4VCmgC<;O$yF|&XOj5#Qrd_d?@(tLi0`+W4 z3+cvEYS03qqe>X>;qrjF;Py{AE)6w=$nwD;Dt%|NF!lFsNyXPfUAy!90`HPHF#5!? zD_3P2`!k=x%N=}*(3wuX7X%%A2yXZ!tg$L(+$tPa+WK39bWTF{?4OFW{o!z;3QBhD z_)F&G;;J@jK$l1us6>q4VO&|*d;7&(kDu9M&^xsC27W9JWZ~7y!*UB84Ce~DUeCr5 zZZ*ai%^=ZjXEC58h@!WRu*OtC`lw6?O@n8p(VBjE_2Y0+Ww}g{WWAT`$5UlnOCZ0C-PUaP(6ZIJAM?@%v4<@OHdsbsw} zhfkIwvglH~*5A#$J32fX?vq+PfRzo0eWqI3zaD*l|KWA^<>QKKzN4QSrf@GdT2{%_ zcq+|y0=Vs6qLoz_h{902!Py>4y9-N)FdRzjdJv`5tCwMmckMgrJ(#%BneR=E+0_a? zd|5n|$mSMa%{qbRdX+GZDRSkJ{9YyBm~No5!XKP$hmx;~>rc1j}{ptO{gaTWLXUBX&7RVXjbytpX6bAW*5Z4=PBiKGd_}ftw?%U=BM~g06^Y<9Sk&u=ykxq{Pd;!E8`6UydPsqCjNY zb41g?l1>@Dg!pFtA!E~fIJu+aWv^mtVpfzD6q^XIsQ&ZA*c}v? z9Y6`Wu-<{jt3vI9Xjx-A7@UXe`AC@HF|-0&1(cHD(%~Rok{U$XJHe((R6@xIh;4#v zW!jpVAB%~2L&;L|j8cBz&TZQ0*^@wMGHI?4G0rwfT?=N|hNMyQ7rB&YZDU2j++!&y z%{1yPkN?o0o>yJ{yl4Fgh-d z@1HAH9$bYZH=Lz)rd#cnx)ra5i#4yu?6JUV92#H>t-~}yzeE&#xx{1G|}+e{(KfB z!B8$BiG>5Ky5r&z=UxwM6}-ajweA~ZHW56mQtF5$B%51dey&#rdB4u^jv>{zh6goN zF@G@{R{h$A?=IR$9GO&s)jAPTYa`5!_l}@(kPj7N(5OYY#9fI#5>Iyg#n{IaPEUAu zItI7R29_6S`gm|EcUM)YHN`%^JA*#|8F@Em0JkRQ8jZ^#X-sTNq9Rh z_`eqlXx@GJxdnjtzEf3?-VFQ0|%F%@2qde z@j^iEeV)CRPC>6TSF30)cvk;=3U|1~&#L@EVwBcimV;Qr^#Gc5W3GI7d?7ne8#N^D zFI&DSxz7}q)Q2X#hrU^YJ;&S;)7xwW(VpapR}Kk+mnk+M_3lJ<`TW z$l2zSaL(CfW_sGj0;bVPUFhpDPmX1l%0^Tq{lP> zk0u{LGKXX|#Au&QDzj@+cJf;F0L-@@sTn*=Ml8CV@_nQ1z|OD9CJS7ko>3tN0_5RU z7@VxVCKa$>vPlzl?qm=blM?(w-cnK9UF;%W7!Qb7ds_%&%1mJM78I;Z@HQwcT3;n- zJ1N0Vh}@}KVv~R;!VE&3LF&XTHyK3+@WXTcT9W#08Ce7M#$_caTSOnJHCWw7a*R#S zjajf&d*y&yun2)zu_8QVmC!z$!*<~gexzic#snu`w;Ex71g@06k2#9-L-4GOHrdVb z1MQ^(aV9Ip22jjfo8`J6<~XO$zr~lfH0F%@bOR}Hb%pA$qr5gK$QFJw*vT3b8;s=t z%wrp8iZykhmS&BJdNFdQ*fxi7JgCw^;kYl!$Cs<@@hodm*t6NXSoEMO4B8PFCzaoJDsnI^8>Nf<#*Of5v~@WQ!lB+Utm)_a^qt;7RI}wetahg)?JgUpYxX zX?dUfn^I92m2gylOAZ;GKk_d{Csg>^KtoA*&#}SV=J^Y6u240p8DPf)Kb-r{1XZcW zaG{*_X)2<~mT2d4B;lq&6a;4Vh;y(09(g#*y|p8U3`dm|Ce5Zo5L_UpddH4b>@*gw zMi^^WIh6jwe6GwjO?yijFomT^uD&6A*u22aL)1)#(3;Viu$6HwD6Up7m*g<$eg|_@ zjEK2q;-6X(yocoIav;!UMaoeeiMLY5Ve{U}h;=KbM#fY9c6-+l!W2jzC51v4C=OKw zp7(L{1@@(l>aXm3Z=PR52N)H3b$I4Gp|*Uq9Qd}QzGR?g^SaBwXf+xV%GFOs6Opf5 z05z!VAT^0I2jZlb4ZT-tT546Rz9i+&rw1nth_$7e+Ohh&ik}V43HwuK3KbAUET>2! zDOYkpCsuPmqp_HKIMxf#(_EU}4utqsnvx_GhrG0cOBL&@*Mia&jWd+stowvN9_Dxf zMNLl0u%K82237)94fXYV6?(On7#o&UfV``Wt3>EkN4H(A`OAqp%YzQbFNQ!?Sk&a1Zt0Re(b}QoTqJu_tz#Lu#&tRIZ(*X+dJzZKgKnPZR%H)l zAxMQ=fUtOUb#XI8dzX1sIIL&zjp`kK8r`bh6dJSWfHkczwD@HC182*GAYI}}+abb; zV)q2!v&g&T>D76)`|t*yorh-Hp)|EcxYEaIeNjsHHbBt@b+kh&-AUr1VAH6&Ut0PSe3u5Fe*9_j%B!=A~BnDrD6nCD}cxpXTtBJzFUARrzo`xB1t@&3iK) zs#D-$*?rZ%CB7fCoWSc@s8&eZSqwqL)3f=VC!s&$1MA6pB|BTa+1ytC1>l>7JdhZc z|5Tni050)9a-!U_!Ye&3OU{z5zlk!&6#p{S_O;GEK7PMHF~NJek+Y(bY$r=}&4uL| z`{ev6S|zW%rIq^z%R|Ge7$4y_ggsg~ddt~_AXmNn(GY06iNzf>@&%j)S!TNa`E-Z% zJe7^)s3z71s3*=<1MNFK1C`NyGR}fL;V_akBr4V`sYr2(`VtF?(aKSBJBM;E{4Emy zkUsdcrK|8Q6h3zBJl_1$-o9yJeW2F=R9jn4D$i+30FVSshn_q4$ z5Oot%RD-HVc~V+!Dw4Pn*Q}P&m7zuHoSq~AqRWI@Twd_SCIdNnE768|5FKc3YzCT{ zK1U{JFHck2b628q%z!kGB?;Dp4>3Z&4lHrso}1)?HJieF&_hYwMj3C08k ztWXK}X`o$YkC8d9n+ef}{e6>b>3WZoyaw2e;7Q@=S^US{!Uuy}3c|<7kogiGWS32) zWCmfVR*{oh^zF&hkEP1?loV_t2_HQ0($`U^1wA1_Lhkj`y;=IKiOge@dl}nhA=&1= zGen5DR8-%tFRj=*!N^=d_hsm*5CbuUwZ1vL#Con4?&gyg+lJLew{>s>iGIg(D} z%e@`-PIhSUH|5-KzZ)T8ef^(~Wr8#k*R;W7|MAWivl0nd2cMmIl`6tFgS>B8Gh!CR z+tzlxTzk-f_J%++#S;k$ZJik^bz-?A08X_yu7X!v(@JZA0~=U{^_4kvbCUk9?Gr%> zT6y+SNQ>WEaXd=?aPQZNqmh}o?&d(0Q2X&cAvOBGQ z8E5`H+6gCjM(cgu7#UAFnojCQ$%6TxFsS4U3i)4G0CnPY+-4?u2nipHc26}hqaqLj zx+5CM(m{=Ki`FdTTc&cwiG-}0F6C-}%KV@INx9yW*W zFOW!Rr26BZ=W|6!V1jofOCwr9O3E4&UTweWU3G8NBxqCtB zmfv8~U`hb%=FgyrvVc`Rh}&q3a+Qkuv%|tFPQILas;D&{gr$5iu+zR(^KET7XP^3; zNs&k7srXR~S3c;EIo7-tCK2Px<-cA7Y1vWlY-*e5n5T5~*TgDo-_Fb1^vPdEpKY_e z>5t6tffW+m6~WZvZ{^Rql4pRXW9+}K>KMKcM`o4rI3$#y%jW~l+bz8_#F$O#i7`vy zA6*O8b~_B!o`|fGJ7Pf;&Ve2c)DvN+s^1CV6TpP&}h&?Oo@hjh%1z!c!jU3-zPL7Q{r*=Yhej zren0gRZIptf_Y2UbP;6;oI-BIlA`{6u*$LAHnqorK+Uy5w97!Q!$NM9D^+34Y<<3p zL+39L`LeSmh?)`@|G(r59~wH*dW8-jMQg~VDAeQ!0d?NMdd&m4PMn&|E}F8@9d$8pQZSL7TD$ZElS9OYh36 z{9p6V;g%65ijaNF??4io3>N+xRCr5)7CJyxE?-5la%B)`Y^BZmeSFEj@YJT|ct&v- z@?%of>;2ElO>C7BC2bq-Ak*oLvxx<;wJ~8ym-FTeP=e)6n`v_D67LZPK=_#KkM9I} zTL$Ul6cZ)ic^Yya`3uH|B=hr-&GV_u4hRm9!ll1^GFSja0JKFbP`Oj z()qJU{+bf@uVB4G(@9~2xaJA8SIAP_ttk$_Lf7$qVBDfoo~=Lx(f*D^CyAQ@VPH37 z%d1TGHk7f>DuGvp!%x%5G1&~2^Y1d`7oU&s*WUxh6^~9Lw)6hmS7Eue4K#m%RDkpA z@vn!PxSgFLSuGeF(=-^?)A(9}ThfHZ=sn3Qth$k)M`NN22zi?=B{#7Jo_GWbwzm{@ z9oVNciV>#?fQ7A2aMEn~pT1aS&65(8EH&HpX`5)!V#6X>@y?`L?kK}I9aco~4Aj_72>3pT9R;Gua<@7$z|WXmmbK%q-)MJ@yLP7@ z^xX@HxIrG8YdW7FT0$)Yt*iu9L3gGRRs=X9uiUO-kA-z=)HHj)ZE@S;#MxQlif)v2(Xc3=<6PA2;00Bva(+&^t+sgQVF!Kl#iZrybH*Hoku zaf7J_nA)P}1!e0!<9td6(?SUo-Ro~fGZLhOBm1r}q_cEOK=cFy^}X;6ZY+WJ>d%kh z-c_M8J|O3>iBOQOx=PW4C5@UH8h2 zZwk*8`-W@k44R2XJHBmgbw;Wq@rQRW^~9qNF_T$%WU9{W5EZ+Q41kttE`@c$h5)h` zR*xw}alo^EC#`SnC;sl22@w(e0HFis@4`l-#HN(pL?$=vti<@B8{}406vlCJOIml9 z+SCx#l47!=gxLD{6s z+GFLKC|+SrSc4d9@4s|lv(R5>|I1%&?~m?co8DhR z-M7R1G=$UU{Pc>u*70{!uJOlhMHHJTZZnm_u?^CEk?VvPFg<@|K5@dg8^&kks*LN! z(LitkY@w;I+B?{%Z^Hi$X3CqBvt~d50a^burZN5tUn%_O_Xq!yYyZ(mZ?u#hw>Xge zU+amK;AG*(rGo57ql|^J%WfJtX#Zbh?-V3i+pg=DUDajVwr$(C-DTU=W!tuG+qP|^ zt9H*dW3KP}d#|-)XGTUw9z53=c`!2LeaDSveeYrl$$h~%N{KauSiGK_=y;k9fk+_l z)8*GZlhT7Y*O#pkE?s8|^eaVVM)NpJno5eMFdgZ6_5(^7HFU0`0&?#YCWjf)&Bnd9f26#lO0NWx+DSs5-H(GKUFN%Oo2pi{tjD=w;y~q5> zRWkQHV?Wg$5&{)Qs|1*1IZV8Sp+_4%ix&L6q>*oDJ&+lu=|ThH4@!%qv-E`{YZo1> zRWa5t;!X31g*0{~-wa}`1Hz~s%#y%H?ruK^+)jon3b#kv*Fx~Q7sfOC1K;2=u-P+^ zPrxP7^($7xqNE@lE}|r-elB#xj#^f$sqKXPMJ$C;-iRm(mNZ*LFIG>m(DL1u^V*C} ziXBSWcOf&N&Y)Ly3`!baCqy!W8JfY6%aq1?hMY2L*7^1D`XVt}RhF?0{+5bK#TdFMnPa zRg--;wyYiN4X_BbZu3}L<&Rm@Bnx8sP`cPZkWGAXyv zTX~+U0DtXmYgR)VW)}UzqX}q9Cu9z>;qZJE*R}<0RRM*N0j{q6HJ1o>B9iLj$3l|z zyM-9jm`^?fSjw;>Tgm4qT_Qy(6oMSPlwq%vi3Rdavk5U&AQA*8J%tPmb$t3)e-R{*1+`t4t zO`k7G3cPbKpI$#dwPBEm zn)t0#G1lZ+TWRKLr-B#K3Bi--*~6<%VAKRyi5m?_i_!$u1gw7M*)Zz_mH6&l@ky|p zTEJi0wl+sM8_^*x0F9#95|2;sX6#)HhV%^X;+KSeBG=S^GMsD*aZx|HS%qT0p2&XU z+uB<)>?LL?XRHMm77Kzal2DJHyuT4CwjO$2(G+H5i|e@W?Pb(<+?gLVQ9O!wVc@WY zEtB6FiZ|ZfFl5Ac`X6}GFyVuV8o6-glATx}i~?xKy8Gabo%26{jMwDx$~gQEj-x6K z|K&g|uWu`aTR`kiqb44|=6Fz5WA4ifJx_dXD!B;DE8m>hypY(ISbQXwoDIt zLyJpp-*_IB#c*eG#z$-kSb>r-pb@8n)eJpZm!AIZ_hBX3;i$oJt~+9h1URd0N#W!< zH3;S8%2!eOv}X=gLUN!oQ{HOTijV?bH^P9h!s93^9jQcyB#^Z%-d~}Vw_q={ixS#6 zUU$#Pz|{tjqr_dGlH5bEOL--_ITNqxNa~KU331Up@oK6Lb*cnRqd zIB3mFj#);|l8ozaD7kjr9nf(-jQ`t!Jy;h4bNWY{ElmFR?LK)2yFb59w*U24R;9V~ z=XPI{&-53HFkOTPc*DY~jqQz$KM)pIc;Naqp;ZapOEA$-=1a+ZNyU!jIKJ*3S8>Vo zJKI>)l^@#};oRIkGp=wa!yV?cVb$aZ{U*^aoZX7eVlD|l`?lc^GXG(r*k0o(XI zy&L=_foyX!Rs7BDtd5Wc71&pOZqBK7rs`gR)ZlKy^=IpXUze7Z6TS3x+lf7y%Eu2# z3$5TPWAKME^5{&rb2Tpl3^Vm$6Zdmz0q5#5x{6I8yv#GS4u>lNX=F?>PA*J_wTro! zR;2uZ6*=BBVgwY|7X)YhscVxhr; z>U$8Z0rE~;T2~kBwY1MG6Ze~?+|bcOy;{$dR1n)MS}OXll5~5hEE=4o!5V#K1Xn&> zxM4m1`3n-+-huNB5S?%^bu(U*=S&2yz;EEI#y~?48 z`e_fueCQ`H2Vv^)2>h2?Iyh=tdxwbdh~tuCDm-dO`$+YyiTSbJ}&@=>k_ zy()agG3Oe!qogPSWj%+E9Onm%ga;7776VD=XIg*(8s@?|WpZYQvF5)e)oI265F$-ZFegCiKH+X@67T55v<+Y zPakTm2UqXS!~A&QZyCE&utk6dMDRcrVW;7ajTDSm4cl^fFrn16r6tv zF`?vbU04kK1zYt|Nsoyl9Ta)ep~$X6?xNtiP#epQo%Yq|&=ikna?uB5YMu1PK067U z^5-@>ZMsLuAS{aRb!yF_Q5ni0MI+gfipR}x;wWCzmxakAsS zg1C}9S8UppX$JXPZBj!7=yXiQrvBL4eHmS-;9O~uACK0Z;CSbnQ#>8kZIzFgt4!?t z-px@two+e5B;O^n9&zr_RT*3*4crlc?G(DPN{N|io4Rg^@^-;HP@QajJT^T*pZPhAaC?)n z)>6OFt-7=o(fv}6%lQoq6+vxj7dcNGo>pV(8^tD|P7BcIj8m#6`5g?i;1D=ElJ4vn zB6{c?6L4Yyu|t8wJ+=E-pvaR{XI1CXzRM-&)tn2#LzU3Q#ex_9&oF8xaQSeQcG!0j z9+*G2ysHuEl0t_kG!4~gam_bQ5n14_l3#!%bh2qj*|J?s9@qG2$1o2Lzq56J;O@5x z-F|E%J1)nhJC^9uF!q$sRoMW_D=Px>`||_iwumLoK+C zZL}2m%e=~iny+UzP8;~cz}L^8HkSdFHckzROJ{S9?gY01gAZwGZ83Dq@8$|5;?R(U z!E#`O+a_F6uPN)^(5egSrRfHi#49;Xd^wbDvJ-XLF?BG@awGw=qNNy@m*d+ShsT-1 zp58ib7H?)5>azn~NhnxbCkCcfpv(8lMiFe7U&Z41J0LmmGkxK-+n#M2GXpBzI-~Gl zaFh~x*bM{$fet0K2@}&pH#bPLe`BvTiZx$q_t%LLN)&ZY;yiI@i5tbe{hD@nlw=($ zt}F@Ms)yuPy$#tL@RzhokE2B#HUMZT#1BN{W6S~CNnJ;b!FSw@yt#g?$? z&B&^Cw1a2$m{E{7C?gSW1-h0Uf&Y=^NGIVCYn$U(gW)YiE2q>5J zu`R%PIk1G;IF*T}eLj?&CtVdOjK!%Ez&9a0;Pt34gh;X;YvYtmzo^*19T3ynvt>=b zNPdDkal#qr_n${hHMG! zV=g?B!&yNNI1|}ZOKpy*$hRxO2%+tUTP6TxF4mzxo}LagvL0mjnpfKg-qPn+b==wv zKs-ALT(lBhih|sEL>~eZv7#nTs;JjQM)8U_%iRQ<7uFATt!+ZPIfcIJ6(LN~-fYHh z`Xr&a5#DgNO5nwMn~7ufZ0`XEoL2~J_3^;D0j=>5<+u5eWeUf7{fAQbN}&^?#hw-FrBW~m`ub0vpo3#~VF|r8q2mq{yDQxH%`p6l zCTU9O0C+q0!G_S>5wU)n7ke&~GbUOLCq=FeU^_!e%&~RgPEBm8hQ@?)-Z+D}d`{V{ z$TPqa*0ehqdl0=mX3ig?*D|(M@%)5h><*e^b61lUVX7N%9U$d7JyJ8nA>#WfXO3Bj zx##{g(_I!NVy13M&)cNJw;XCpKCmDx5`I4sGAtC0f_JoaCdZrS!k1|7&ZB&h(ka!9PmXb<{Aux;Z`0>GAbFKP#weD6j#0*E7+Kl+zd@ecMM_E55g8+YUs+Q zDVy(iYFENc6hb2=RCPrnG7k%zOr+L=$56~;`yLBzo~JG%&*xsfY14DRC0nx&8@a_{ zU1wdLen%8fBWc(I4W=qtL@JX;Fgs8XauAmNG!>G+Hv&F6} zT4ymb4k~P$zV+}dhU4d4VwellVb+BVd0c&g_R66$wQ2_AxeVY_T);j5rkzDGLs0;xzkrLQq=9O>Thh+Ccjo>71FW8An@h% zv@f;9(o?hJm-mD5k;~|Gpl1rcBB8gTDasfw=K7rW%ncAHj_9fc!|N*m3M4@$U8(c6 zfRm6GSsDUgfTf$N@)$ZMVU8y^(1xZxua2r%cEWtt*_cEWu{Z?N7tIgvG5C{f;q*JK6W%Srjn`u&{r56Dg|bPfu7g1u zXE1kx$Jdfwr27H0c*4&ujJA^x94%kcBQKg}b=!tEpO15~`uER?3O=tVtv+u$(9=8C zSPjUNOUJ=rLM1akQ=&wwRuw#f0yO(C=Fy_2(dKHC?$l}>CULp24^t6E`L00M!ohcp zSTAe=MbCE7fEQLY#J&qE`gZINe?T z^olo3vgxzKQv7J-Vb()pKD4wahqc2Py0D)VOK8Ktw_&pkJu1HQ) zuGGocTBGdE8f+2dv)?@`+*Sr7BCs)yteWpT{14d`zyhp2ZX|D9K#B{t3eJ^yYfk4I zyzTG+Akw|Q8R>f?3z~cfRQ^tW*$k01c_y`dkBFy#%C+cG@s61 zpgWVLHM8wV6GFZx%Od3X4qg-KJG7UfJ95VwDfv$EJ3!lhTMoqgd(KVgtoSrDR$qn~ zEPUdFE2F=l*geA3?F(EttjS?)pFU8n(_#-S4%NlP%a+!a0ZMMEdN5BBRSQ*c*?I*wlpVH~elW5qEmVa58O5bC`5>LI%wV?Ne^2zv7hW6LDQ2RwTCU;@C3V(^_c zRUq!xgdq0YP4&@6C607H+`3ut9I26ow=Fh`hk%`}V@uqeS0URz0))8-NA{4R4* z1-!=u=^qbmDXlZVo$Z9Vf897o+7xt1H(?gEN`U&o39K(6cl$0^Ccktq71|lG1(pG* z;nY=wGe-dxA-gprM>|D_Xwzsg`U|AqR^71!lf$=_XYaGflmG5mShV{ML01h!_91!} z37oy(cOeXW=jf)QZm9}zosmq5>TKuUjW)7a1AlO5)ytnGtNNRpt_tkgjC$zd*5Qk1 zu3Vy27Fw$hRI$4yGEeq?S?AqfhWtI_>ah?5cd5kd3*=%HK-ki83X-EQUfX*IVG?-# z_;GrUf@>+dKzJm_GdH^AqH6|Gv>j~0lS+a^#(mCj_#y8#_ImZ<2An-@25oW!JA{$! znxt{shs>#-1=c{TqT)?W`H`JjEKVY(51Iq>A~5J z8IQw4a*x)?Z94#?`Zz$2aeeO-WpJ~a5Av@@2!C?EgMHHw)n5k zca+ktb*P~NmNiLLuFr#UFz7>(k;By@$Bjb;PmTgELdiSTjm4qzIWr)wOlPa zum+@+iy`-aeizPJu}CA|J~n8c;$uqfq@oUtV`kU|tEBv<-&e#ULbdEn=3&qn4OaCR zL3L_IO>#(5AWUGM0sCkqY(%{;BM>R@wRMU{Q2xEsk?Oi#1GykInm5>R9Y`Xvlizr57A$nH4XBYYKN+O~*MrtrBbu62=~ z+-YupH)W=Txn}I!>wA$c4a8{Zr8_en^@+Jv}5ZJVi=+;vkvvp?bjdH9I6n zc81=b40HW${*C$7Nzygb6Ga@1I1W(@xjrcIqPA%P8dQa(f;`V%$4#R?T`G#>pyU-h z*{hUs4TQzdr18;b#tD}2UBYBF9El3F=opIVsD3%x=J?S2NHFl@w#!3~k_2Wht5&ih zImFuB?;0kIQq{R$eU-S6Rt?Z)>6!d&89Dd?4&t7WeSvz?yz7@5Nkfu-EYq(9kiG%I znO3ZdS>sY$8P2Xk0sP6HFr~{qXUxh4tV4m6nkj*g9NCCyz>KYrUbO2~hm@UT_~{3ajM4i*=H&XuROL zu+o9`F7V+C7qgQ6#^;=VxLEs3t@%`8=aK0niL(#?jnI0s;1_f#c(gUiR zrBDtqs&2(S)B>3eTo~MsifDQ*vi3$XLZ)ynf8-rS;NsX|9!i_;#!%{b0-_#>&`N0( z24~JO7QU)>I+K{2$4_Xfz}qoVdeMD>J2<5br^CD@%8f>+_ZJl-I}&m&0mv;6T&z=R zIhC?A3!k@x>y}2H$G*3hg}DW1#QEgmGx>orOpVqjven@x6C>gW3y`i!W?(b@k&Xfp zIqI)75;0Fb3@;jdq7=IT66R#06C)SP?BGwHtwl$UST@bEcXT@P~3Z0)ZLEr;* zAc<7-cQ{W11ZV|hH%v_qa*?bUn>K)~+HtiOlkl$8_9v4Ubp@NwR<`KV!~HBDfPw=F zx%N9|i@MV8C2(ocl{D@V6K6fjrJN|tf!QBvp{Mci9Vo0x2B3`>%?|9L73nJCu#5oEEm#lu0*S%> zfYGgkMtug{GZNa1t+}pmDI%p@yH}*NLcBX5O;6@zbXLkt6Nr41c+8>CB@s5-XFA%! znpzwwBbGq#C6W0JoA%6g9EJBbIf{}3_?SETskzVt;-ZR*f%_(5U!Jr}p&j^*Ju+wx zeLGF@t>m?q#*QZQn%F;x0-jONDAVZ-hpavL-UQ8J%%5mYyVhO)EXo$(-5Nmwh*uTsEbd} zTqk79^I>^r=+JA4Fy!|pey4iV#6%1&J5zPFCwfB(ss7H@!1WJigyroTby4E{Jx9`L zuCvTXkuY3LWL!uCRK*)w(v+u5%nJ20sPGn6;;$KPf~22}YRP(x1Eg)6esT;Fg@&Zd z^8or#Qc8z7TzXZ7G9vsdw5LLyys4uV+rruP#aed*ObQ8}M-q5^uT&|*1hSO6_6Ffm zZyqQyUT!be={!sL1P4In_4fM)pl5xTsKT?HN7ii*L#T**SPoE|)f6VU?gvGWQfFgj zzN>5DaTVvQNHQudNz<)@t%d1Rimt)Q-MdUN0(QP9bo19e3up42^j~Lj9NEW<)28rV-TDX_N zh6kM6)jgt}w3BA2vw8}!IXzj5(eJe{!5ROCGEn+Pw2DB^7+kzVQDlN>ttzS8J`U`b(bSyr>z@bPr95(01=3RMVmY^Y!6C<_)!Z0yaJYqJvF$H=GKHI0)Wld z9Iq{R6;dL@4eH+azQ+V#z$PyvjgU`L#A&*k?#79O01VJfhQRc*5jwmC)2cjXI7+6( z7$v_&9pXn!2V5b};a11^Uu7eCRfL$EIxR5Pb7S@)B|J>z=$noIwr z>!9mW5Scy~ZKpy?3$VgMm2nah1$@<%f|J8m0l!$YbnTx>9~8Dsa8OJ573!MW!mdm< zqG0XEI!eM2@iTCVZ|SF;t*2>{gA}iR5Qm(qdLvT%S5Ir8XrW_KvjCx2@<^s4!12ye z!E{cQgi3qu&afs*K}YIwMH4GByev?}C^toGJ9)%$p75`-u6guC8@pfi3;rOsnva#$}z{w?f)ssga5BSyG$VDcoXtR$*qzg8U#%thzH& zPsfkOMhziamql7h7_}XTZ7vful8!IA(6WlIB2#EL_mtOu3jdhAn(VV(9ur##i|Fh! z(J^=i>qFqZh}Vo6%}j22;uhSo=jW7nswTX=`L(()qkLHO35kBLcvodQf~P%of~>2J zJ=2rLcL2>7JJ}=MHs+GRTtL9}$kVznr`GtzpJ_FbcVbfdY3rgQ#11H^5# zCv(`wMu=cR?Rms@a>B&Rl6y&KQ`Uay-zrM_yT58ZbANoPF~@846cOy4bBMXXs2+Ql z3Bg@;Tp2hVr+lA5#iBQbTM-9dzjewl3Fi{;66cZ+*<_Ap>5av6R2h)}*tlz2RoT*S zVX^?!gkej}UQt9zF|l3-hj&Bp2TDB9=Ly3O!ku14*9pG5!&UMh^P7XP;*+rUvkFgJ ztuizHYSd0Em_ik76Xi!aLjUqtmIbBAI-cIGdq`%yAm?fP&5qvhmwY*A+mZgW38wAm zvro5WBEn6u@HO$JIOxIS4}i$uJC}4ssJJBLyZvz;pCQq~sVoZp`FG(V?AIyBT9C&H z)e+x^Mt*Ojms&;VPKf{pY|d_$^k$Sd<*H97>is-}VOq7dp1$hr2g+(*i*%V&G43gD zJUyT=ckGiq=O1v?UM;S-E%oTMnO>97)QOt+dld8|?R5^Mg5}X_xtUFNXRvQc^^o|M zu0gt^pl{eX4H7oMG+m)W=jjmH{E8Q|-o>1jI}U+6n!ib-L8w24xIMH{caH0e1mt9d zmR<;p6c%}4Hb>^2n=KbSu{w;1lVmK}C-a3BLnhVPdldItA)&qPQ%4ph?fPcv`{OeDZWg3lSbDFxOXk#Y!%Qr&WF#xFUSDTf*&GiSa z<3~AB62#7NKS$)<+b2j0$7uOStRkJPrIgacgz1v7Ivn+1js}KeSaBsjf6F>y zJIGuduf^EnLujSbNhh?yXK>7tt#Z_dP74qvGVM-rF7;muCg0Kj0UhpI>Q4sLv9d;GXNRxC@$a!M+v6yelyGe^^U z4a%&K1THi=Kb|V3x-6>|gaCm_mhqDE?9}+(Yt)=idJe&ygGmI3%Z96?;zG`6Dr{Doa<~T}rN)@*eiY1NAuVR-74tVS4n6`O z3#U>JKN+N3Fo;hSjFV}Hn9x2flPa%@0v0C>ZcKNqhCE)ov%sfIHvqNu6`%k9*Jpp< zz(%b-k=CYo4FyMjKYL5#$H8%fGM32~eBQ8Fq36t)t65+Q-e;KBu=#&VGt9#XdB2qTKMjls(xDeo}h zMJ+Mw)!LoB=+##UplS;(4(n(hTvu85`)aue<>VDXkv;ln(wyMn&|jd%F+9#kpwCxA zUp#^m(x+xG#}|1Z7gc``e>3exbJx zl8c#a4NEKm))u}Zd5Lv%{VYIq;PS5HdOmLT*r_u8d29b#1mR71U0te%ZkfP{lFyha zAFxKGEgzbli3yALPQ=6XgbPE@ndcUXmVup-306 zt+|2w-Cg=|C2LuvAu^GY%{D+A2W4CK$}Bt3p%?#{K{kOd3o!dckLiu-izKw5#Y<-p zINcU1@Ri1>LDZ}qj|eJD^N~P#mMd^BbM%;ytI%N&xS*mt@ybMXm-YH^m!o7B7`ZF& zoup_z?_TX=OAcS?2G75$|4aWzS}1ooy+Unbww7yo?&$1u8oG@qw%(cak7G@Fwa-03 z5dkkvMBcikMWvm+oX1&yCu;Igx^XP1lQJO@MvGp{FlAslLn9ef6gJ;w_Vz<(9kmXN(kW21q{3_c{Feksn{}NS@ncsc&rd+A|VR_%IGH ztWhufuS2{^0S9f>>MqVfVS{}(&dyd;>N(8lso zN3zV5oh^`U&6b3p;rry}GE1h5tR-NdJyDel+UfQbMpkIM(Al15>l80K{eoH1))|$Q zfU2Q=e8|}GW$t;YR)j6T!fF{U&)Bf5(fz6q%s_Tvu8VZmG(XOde^JZvt7Ss^-q7CM zFH~XDC3^FR&M!RDy*_u?vrnfKnQJc*!8{|Td55jm4H{;x0L3&OR1E)-dGRcL4UOpHz&MHO9Y*LQcW&rr|JqY4G(28?ii;ct>kF6UjZmoT2zW(A z=B|GsR`GP_PZUu$WRg{+Jnu4lem|-@=FOEzpHI^jUxu@{XxQ?UrXssLwWON8=fz$} zNCwpy)}vEq0OR-rDm7;UItqzQUySlHTT^c!0ovP`84d7xoni`amma32Ki#*SS*(Q{ zK?%fzpI^Mpgj8o%JO3bQ(SSbs8^E2M*q>MGiMV~tB4<2e(fwT5uG>yVZooc8V1AS# z|E+%716{fF-aBt%1FQjK1-P#wIPhJfFp4^lSG%)MifSk1p-W>|jkuba39us%nDjOf@UtFOmxV zkAs}#napssQJ9$yB6vzs1*n)Lf+xH2d<0kg`Ue*R?nJ)4ikXe=@q)7D^p9<0Wlkixf8l)u3LxlWREgEc+@nm#E1*qNyR zgh2gg4wRyai-n2np9>{QeZv8Z4bdB}C!eakO1xfJ>&~W%O>~ha&M?V%q$y?>h8-9h zSQ-F^F5kW zOJ2aQ0+774niONgGVv%K)$X}y7c@?43)I94O*iyV(cmtIEde~AeSNmUalufB`vpvF zzqy!cS_|KvhiNetl`5#qy)RyBu5^oXnOT*9U+E%vrtP>36d96LKVdDfSgd5JIibIB zvlqYm<~D;;hsFEhw$iFwFpH}V4vrT8=qz>YGJ=hga4fxH&K$XvdGFgA=#?R38o7Q1 zN|3OkDyWX7%q1_&(6|Cij*4YeM(fUYmKwpXj2D~bOd$DoDK4?;sgb@AHzUo|@i^FY z>DY=sU%n*ENq{0#MEkH8N`T|z`z;y87#DDMtdMWCr(aH_rRC|ucUbUT(&6~Q`}?E0 z1_tT{Ao=K5Lg4Gh`fBeR42px?$FpANFsOrI=%5$|TCohsI}f`nCY2e1QFbc5w)A}a zJN+{MQ9#ZAu;L&lcG$`FNo4@S`gEn4B*WIIMbtE0y zUHS5Yapq*=5p;hqT~uZIeY+(rbnYHMl&2`ZJIp?2pw7Ci%!yud7OT6UUDTKeA2};9 z4aejUw>>Yd@*EQt=g3zYnx4@n5lB!{fswT$qx;Ato#-_)E6GC$D z&k1%Jk{oB=ma02<9c-bQZixnqEf()JcByN+2!4dvL_ILCO2vu}J({H7<+TbP>#7BRAZZVM6eT2#zPI+UQPANY-^ zGWiWnZ@53TO$5}FY0KU!P=DC#RI>mh)1O7Ua_LPc)4ex!-6%Xk)pe$)fL@h`sB>eA z^m)*ar7J$Awy_1X9p|Hk?H%KR?!8-O3cu1BSa`S6g!VWN=G+O|PJu1h9lKE_M)FtP z{&)v6J)fj~MI4N|vrnEQl!=#v;Is;e*_pL8)dwQH5S(0&u6|ExRQYN32z|9;_76SH zDY$`@R*$HBF&N`%JoI1So<*s9ny|t%A-m}4G7M^o15X^JSoJ7P`xtIM9$ZPcb&3Eo zisdK+(Yi6=w#nLOGIra)m=e$CNn|cYuqHr59aqAYKdl{%vtWG&nKflWtnmDDAlM1J2tHnJQ9 zXksPQjb|N#byF5VtxpSwBM1Br)BnEdNTi!KEskjm#4bk|>QBA?;QsT(BSKoXT=GSN zp~miN;8Y1<*pGj8v&tcgeS*u5yO_=H#|{A`-5D0ekYPi&)`Utn0x~1MR zL2#qiu02@tAgtPAaNEmDG1gtiYU3Ws?FopZFt?wou#&AF@VY<{dpI>b9Bu?>9;Lah zLFLq%J%gHHeUz$?gmzk=<1dWe#;U28CU66{*zgv{2U=_+$}aCoV&AUXr__)YLy*Xl zUvzD4uF}brp3g>H?A-}T0KT8mTGXoG*<7W8s^JIguhhs8x4HSl_xLII0GgZ1M{bLq z`jz9_aJQ_j?CF9e975=*jTE-l(9xDcUj@#(aMj`JynD%O)jh9U8a(@~n8e<-}gYtjr(TfJl zm{XXb<=dtzCwI-Hz;J|bp#m>z?c5?CWgPs1h1#eD{3BO`5F7*N=2-rWwaPPmOd2Cw zZNo|n&b?te5I!Q4{SjEdn@}^v*aPe*S|qO7Oh%rN zV}8C@3cB=Q$9x5@(KXUPG`W)Ig?QyfvhB#x2YsE_d_q z0IS6glhnbd9H3WR<_SL(FOm>2OJ#%T=m!$D6cZgt##v$}l(e7tTo0|f^6=II3{(E# zRKC@(sat>+d&^TYfzf+~BHe`{c|xjqv83=6_d30ve#d13<8mV4XZie6vfL3Rc>WPj zk|yWtKsO1xW2GX9I&DW&N}|6!69?pSfIj6+$R!`hVHyX6g1j4mwp)SCo53u<0;jN( zPOdDKWpTUqmz_{hyCz+BK*D>Y#e#T_RDDHS2f4trU{KNUr?h5+U1#6$_(0m>xA$;P zF_Eya@__t~WL<_y>p%^ZRds18YNN2wm+R_5v+wkffb6);G&d@5tZS1KI6c^gm&err zPg4piW4`D8vN5_w#CFhx9Ig}HBQq3qe}j#~(|jMJ7n*8ZqVbzP`lDS3ODl46PYxFq zOm7Zj*%D2)FpP0cw#_xt=f_o09P<75H^;sgG_7r6dehy1U{mB4?!{kzWfzvupM zg|7cS1prX!|3^svuerbLUH|9!|HJva0PG(Q|DT?we~$nERR{Jr^Y50Yf0#8e|H=G+ zbw2%#`a6UFAC&f=Cfk2b@Bfg<|2OLIB=mn!1b-TF|AqShlZ*a0{O_#Pf8g4L|AznX zhJ?W+4{{E7eH{zm+*diV#isrGNgzcdhkBmQ34|AXMR_&4Hzmihml|358w j{+Tzn{`dU Think about yourself personally, which group would you be more likely to identify with: the group who hated being challenged, or the group who thought that the abusive challenges were fun? Explain your POV. - -I believe I do not fit into either group, and would react differently in many different ways, depending on the context at hand. For a long time, I would defend my beliefs aggressively, and was confident that my perspective was more correct. I made no attempt at attempting to understand the motivations behind the opposing viewpoint, and spent most of my time taking an axe to nuance, working to prove the opposing viewpoint wrong, rather than trying to understand it, and look for the flaws in my own viewpoint. I believe I am getting better at understanding opposing viewpoints, but would still find the experience unpleasant, and react poorly. - -### Relation to poli sci -The political system in the United States is composed primarily of a two party system. If a candidate wishes to have any chance of being elected, they must appeal to one of the two parties. If a candidate doesn't align closely enough to the beliefs of the party, then they have a significantly worse chance of winning. Anyone who attempts to question ideas, may be considered a 'fake' republican | democrat. Each party conforms to a stringent beliefs system, and many of the viewpoints are held, simply because they're the opposite of the other party. This whole system discourages reflection and improvement, holding on to ideas that stagnate and grow convoluted, holding bitterly onto one 'correct' viewpoint. - -### Quotes -"Values are your core principles in life - they might be excellence and generosity, freedom and fairness, or security and integrity. Basing your identity on these kinds of principles enables you to remain open minded about the best ways to advance them" (Grant 64). - -"When they define themselves by values rather than opinions, they buy themselves the flexibility to update their practices in light of new evidence" (Grant 64). - -"When I asked him about how he stays in that mode, he said he refuses to let his ideas become part of his identity" (Grant 62). - -"Attachment. That's what keeps us from recognizing when our opinions are off the mark and rethinking them. To unlock the joy of being wrong, we need to detach" (Grant 62). - -"When a core belief is questioned, though, we tend to shut down rather than open up" (Grant 59). - -"If you want to be a better forecaster today, it helps to let go of your commitment to the opinions you held yesterday" (Grant 69). - -### Reaction -I belief Grant phrased a key issue really elegantly, and believe that more people should try to apply his advice in their life - -### Was this info new? -The idea isn't new to me. diff --git a/personal/tech/Deploying my Macbook.md b/personal/tech/Deploying my Macbook.md deleted file mode 100644 index ba4288a..0000000 --- a/personal/tech/Deploying my Macbook.md +++ /dev/null @@ -1,30 +0,0 @@ -Installed discord - -Changed scrolling direction and speed  - -Installed spotify - -Turned off spring loading - -Unpinned stuff from taskbar - -Minimize using scale - -Autohide dock - -Installed brew - -Installed chrome - -Installed obsidian - -See https://www.youtube.com/watch?v=psPgSN1bPLY for below -set dock to go with maximum speed and power - -enabled type to siri - -disabled autocorrect - -switched back to natural scrolling - -installed rectangle \ No newline at end of file diff --git a/personal/tech/Enabling fingerprint authentication on Zephyrus G15.md b/personal/tech/Enabling fingerprint authentication on Zephyrus G15.md deleted file mode 100644 index 84beed4..0000000 --- a/personal/tech/Enabling fingerprint authentication on Zephyrus G15.md +++ /dev/null @@ -1,7 +0,0 @@ -****#linux -#laptop -[Documentation](https://github.com/knauth/goodix-521d-explanation) - -From the usbreset directory run `gcc usbreset.c -o usbreset.out` to compile the reset bin, then `sudo ./usbreset.out /dev/bus/usb//` to reset it, for this device it's ``sudo ./usbreset.out /dev/bus/usb/003/002`` - -from goodix-fp-dump run `sudo python run_521d.py` to reflash the firmware \ No newline at end of file diff --git a/personal/tech/Fixing supergfxctl black screen on dedicated mode.md b/personal/tech/Fixing supergfxctl black screen on dedicated mode.md deleted file mode 100644 index 1352d49..0000000 --- a/personal/tech/Fixing supergfxctl black screen on dedicated mode.md +++ /dev/null @@ -1 +0,0 @@ -https://asus-linux.org/faq/#why-did-nvidia-mode-give-me-black-screen-with-xorg \ No newline at end of file diff --git a/personal/tech/Themes I like.md b/personal/tech/Themes I like.md deleted file mode 100644 index 59ea8d2..0000000 --- a/personal/tech/Themes I like.md +++ /dev/null @@ -1,26 +0,0 @@ - -# We'll call this shell purple -Primary background: \#1E2030 -alternate background: \##191b29 -Text color: \#C0CAF5 -Cyan Highlights: \#0DB9D7 - -# Pipe's Nord -https://github.com/PipeItToDevNull/PLN -Primary background: \#3b4252 - -red: \#bf616a; -orange: \#d08770; -yellow-light: \#ebcb8b; -yellow-dark: \#e4b860; -green: \#a3be8c; -purple: \#b48ead; -sea-green: \#8fbcbb; -cyan: \#88c0d0; -frost: \#81a1c1; -blue: \#5e81ac; -salmon: \#FC6E68; - -# 47c Deep Purple -Dark background: \#180c34 -Lighter background: \#281c44 \ No newline at end of file diff --git a/personal/tech/Understanding how to handle paths for Ash.md b/personal/tech/Understanding how to handle paths for Ash.md deleted file mode 100644 index 68766e1..0000000 --- a/personal/tech/Understanding how to handle paths for Ash.md +++ /dev/null @@ -1,13 +0,0 @@ -#notes #programming #rust - - -Absolute paths function as intended -`cd .` takes you to the bianary location -#### Relative Paths -- Paths that are relative can be appended to the current dir -- `..` should strip the directory before it from the path -- `.` can be entirely removed from the absolute path and the endpoint will not be changed - - -### The Solution: -As it turns out, both Windows and Unix have prebuilt functions that handle cleaning up paths, that are implemented under `std::fs::canonicalize` https://doc.rust-lang.org/std/fs/fn.canonicalize.html \ No newline at end of file diff --git a/personal/tech/WiFi not working after pacman -Syu.md b/personal/tech/WiFi not working after pacman -Syu.md deleted file mode 100644 index 6b62eba..0000000 --- a/personal/tech/WiFi not working after pacman -Syu.md +++ /dev/null @@ -1,48 +0,0 @@ -#laptop -#documentation -#issue -#closed -#linux -02/02/2022 - - Because wifi was broken by a pacman update, I’m reverting to an older point in the repos(01/01/2022). - -When updating via pacman -Syyuu, `error: failed to prepare transaction (could not satisfy dependencies) - -:: installing expat (2.4.2-1) breaks dependency 'expat=2.4.4' required by lib32-expat - -:: installing libcap (2.62-1) breaks dependency 'libcap=2.63' required by lib32-libcap` is returned. - -`lib32-expat ` is an xml parser library [Arch WIki](https://archlinux.org/packages/multilib/x86_64/lib32-expat/), and lib32-libcap is some posix document `[arch wiki](https://archlinux.org/packages/multilib/x86_64/lib32-libcap/)`. - - - -New solution: downgrade lib32-libcap(2.63-1 to 2.62-1) and lib32-expat(2.4.4-1 to 2.4.2-1) - -Was going to use expat 2.4.3 but caused dependency issues with the 64 bit version. V2 successfully worked - - - -sudo pacman -U /var/cache/pacman/pkg/[PACKAGE].pkg.tar.zst - - - -After the above downgrade, `sudo pacman -Syyuu` with “y” on skip the lib32-expat and lib32-libcap worked, but returned - -error: failed to commit transaction (conflicting files) - -hwids: /usr/share/hwdata/pci.ids exists in filesystem (owned by hwdata) - -hwids: /usr/share/hwdata/pnp.ids exists in filesystem (owned by hwdata) - -hwids: /usr/share/hwdata/usb.ids exists in filesystem (owned by hwdata) - -[referenced documentation for below as on garuda forums](https://forum.garudalinux.org/t/help-cant-upgrade/16237/2) - -Couldn’t figure out how to fix above issue, attempting a different date(15). - - - - ISSUE CLOSED. - -Solution, using the rollback repos to rollback to 2022/01/15 diff --git a/personal/tech/Writing a completely functional shell in Rust.md b/personal/tech/Writing a completely functional shell in Rust.md deleted file mode 100644 index 8655ff5..0000000 --- a/personal/tech/Writing a completely functional shell in Rust.md +++ /dev/null @@ -1,28 +0,0 @@ -I set out on project Ash for a a variety of small reasons: -- I wanted to better learn how a shell interacts with an operating system, how it calls different commands -- I wanted to get better at writing scaleable code - -## The Beginnings -I happened upon [this](https://brennan.io/2015/01/16/write-a-shell-in-c/) article about writing a shell in C, and was fascinated by the way it was written. It was fascinated by the extremely approchable way the article was written, with function calls defined first, and the actual contents of the function filled out later. Then it could be explained what each function does and why it's there, without relying too heavily on language specific semantics. This made it a great stepping stone, even though it's intended for the C programming language. - -I started by writing a very basic framework to obtain user input as a string. As of right now, it's not an entire I/O lock, and so features like tab autocomplete or capturing Ctrl + C to stop the program from being exited are not currently functional. It functions as a loop that: -- Captures user input -- Seperates the user input into a list by spaces(this should probably changed later to account for features like `|, >, ;, &&`, which don't necessarily need a space) -- It then checks the first argument to see if it's a builtin shell command(`cd`, `help`, `exit`) - - I found it interesting that `cd` is not an operating system utility, it's a shell utility, and when `cd` is run, it tells the next commands run what directory they were run from. In Rust this is implemented as [current_dir()](https://doc.rust-lang.org/std/process/struct.Command.html) for the Command struct. Initially I actually had a lot of trouble with relative and absolute paths. You can create a functional path by simply appending the relative path to the current absolute path, seperated by `/` (or `\` for Windows). While this is technically functional, it's really not elegant at all. I was ending up with valid file paths like `//./home/../home/./../etc/.`, and felt there must be a better solution. I didn't bother checking to see if Rust had a valid method for it, because I didn't know how to put "cleaning up a file pathpath" into a clean, google-able statement, and I felt I could better understand the process behind parsing it if I implemented it myself. I sat down, absolutely stumped, Obsidian open, writing out various logical rules to clean paths up. I ended up with a few simple precepts that *seemed* mostly functional, but ended up missing edge cases, or having flat out unexplained behavior. The nonfunctional rules are below: - - Paths that are relative can be appended to the current dir, then -- `..` should strip the non-`..` directory before it from the path -- `.` can be entirely removed from the absolute path and the endpoint will not be changed - -This logic was flawed enough that exasperated and tired, I googled it, hoping that someone had made a crate that cleaned it up, or maybe there was some regex I could use. As it turns out, both Windows and Unix have prebuilt functions that handle cleaning up paths, that are implemented under `std::fs::canonicalize` ([docs](https://doc.rust-lang.org/std/fs/fn.canonicalize.html)). - -- If no builtin commands are found, it passes it over to system exec handler. In C, processes must be started by forking the current process to a new thread, creating an exact copy with the `fork()` system call. You then instruct the new thread to replace itself with another process with the `exec()` call. Rust however, has a method that spawns new programs with `std::process::Command`. The first argument in the string is passed as the process to start, and each of the new arguments is passed to the process as an array of arguments with `.args()`, eg: `ls /bin` would start a new `ls` process, and pass `/bin` as an argument. - -### The Future -I would like to improve on this project and make it good enough that it's daily driveable. Plans for new features include: -- Switching to a complete IO lock, this allows new features like: - - Tab autocomplete - - Capturing interrrupts -- A fully featured configuration file that allows changing prompts and behaviors -- Implementing the rest of the functionality that I use regularly, including redirects, pipes, and `;` or `&&` \ No newline at end of file diff --git a/personal/tech/unable to connect to wpa-enterprise via iwd.md b/personal/tech/unable to connect to wpa-enterprise via iwd.md deleted file mode 100644 index 4bf8cd7..0000000 --- a/personal/tech/unable to connect to wpa-enterprise via iwd.md +++ /dev/null @@ -1,4 +0,0 @@ -#laptop -#issue -#open -#linux diff --git a/personal/tech/wlan0 disabled after restart or wake from hibernate.md b/personal/tech/wlan0 disabled after restart or wake from hibernate.md deleted file mode 100644 index 88c3274..0000000 --- a/personal/tech/wlan0 disabled after restart or wake from hibernate.md +++ /dev/null @@ -1,6 +0,0 @@ -#laptop -#issue -#linux -#open -### Disabling the watchdog timer -currently disabled via grub config, trying to disable module loading, don't know module name. Used `lsmod` to list modules, was unable to spot it after a cursory glance. `cat /proc/sys/kernel/watchdog` will show if it's active, and it does return 0, but I want it fully disabled. [see for disabling watchdog timer](https://wiki.archlinux.org/title/improving_performance#Watchdogs), [see for blacklisting modules](https://wiki.archlinux.org/title/Kernel_module#Blacklisting) \ No newline at end of file From 3353f92aa4471b0a0c37256be5a0f891302e718a Mon Sep 17 00:00:00 2001 From: arc Date: Thu, 6 Feb 2025 12:58:51 -0700 Subject: [PATCH 0861/1027] vault backup: 2025-02-06 12:58:51 --- education/humanities/Introduction.md | 85 ------------------- education/humanities/Test 2.md | 37 -------- .../math/MATH1210 (calc 1)/Derivatives.md | 7 ++ .../Radio Communications Procedures (ch 6).md | 2 - education/unmanned aerial system/final.md | 43 ---------- 5 files changed, 7 insertions(+), 167 deletions(-) delete mode 100644 education/humanities/Introduction.md delete mode 100644 education/humanities/Test 2.md delete mode 100644 education/unmanned aerial system/Radio Communications Procedures (ch 6).md delete mode 100644 education/unmanned aerial system/final.md diff --git a/education/humanities/Introduction.md b/education/humanities/Introduction.md deleted file mode 100644 index bf5d0f8..0000000 --- a/education/humanities/Introduction.md +++ /dev/null @@ -1,85 +0,0 @@ -## What is art? -**Art**: the expression or application of human creative skill. -art must: -- be made with the intent to convey emotion -- should "satisfy the senses" -- be made with intent -- have attention to feeling and emotion -art may: -- be a relay of experience or emotion from one person to another - -## Medium -A particular material, along with an accompanying technique (plural: media). Example include: -- Acrylic, enamel, gesso, glaze, ink, oil - -## History -1. The branch of knowledge dealing with past events -## How do you look at art? -Purposes and functions of art include: -- Communicating information: - - In non-literate societies, art was used to teach. - - Today, film and television are used to disseminate information. -- Spirituality and Religion - - All of the world's major religions have used art to inspire and instruct the faithful -- Personal and cultural expression -- Social and political ends - - Artists have criticized or influenced values or public opinion - - Often it is clear and direct - - Other times, however, it is less obvious - - Monarchs who commissioned projects to symbolize their strength and power - -Generally, art can be broken down into two parts, *form*, and *content*. -- Form relates to the "formal" aspects of art, composition or medium. -- Content relates to the subject. What's being portrayed, how are they portraying it? -- The distinction should be made between fact and opinion/guessing. - -Parts of form: -1. Line and Shape - - Lines define space and may create an outline or contour, as style called "linear" - - They can be *visible* or *implied*, and may be a part of composition - - It may be 2 dimensional, 3 dimensional, suggested, or implied. - - *Wherever there is an edge -2. Color - - Hue: The name of the color (red, blue, yellow) - - Saturation: The quality or vibrancy of those values - - Value: The addition of white, black, or grey to the value - - Tint: pure hue + white - - Tone: pure hue + grey - - Shade: pure hue + black -3. Texture - - Texture is an element of art pertaining to the surface quality or "feel" of the work of art - - Texture can be described as smooth, rough, soft, etc. Some textures are real, and others are simulated - - Textures that can be *felt* are ones that fingers can actually touch. -4. Space and Mass - - Space references to what contains objects: may be 2D or 3D. - - Mass refers to the effect and degree of the bulk, density, and weight of matter in space. - - In architecture or sculpture, it is the area occupied by a form. - - Perspective: Foreshortening is a way of representing an object so that it conveys the illusion of depth; an object appears to be thrust forward or backward in space. -5. Composition - - How are items arranged or organized in art - - Symmetrical, asymmetrical - - Static or dynamic - - Picture space is comprised of foreground, middle ground, and background. -6. Scale - - As an art history term, scale refers to the size of an object or object represented - - Size of things, conveyed or literal - -Parts of style: -- Cultural style - - Societies develop their own beliefs and style of material forms - - Artists are a product of their culture -- Period style - - Style changes over time - - Art changes because of economic and political changes -- Regional style - - Geography leads to diverse styles -- Personal style - - Individual artists often have distinct styles - -Two basic forms of style: -- Representational: Seeks to create recognizable subject matter (this is a picture of a dog) -- Abstract: Seeks to capture the essence of a form, not the literal representation (this picture captures the feeling of a dog) - -| Phrase | Definition | -| ---- | ---- | -| | | diff --git a/education/humanities/Test 2.md b/education/humanities/Test 2.md deleted file mode 100644 index 8daa542..0000000 --- a/education/humanities/Test 2.md +++ /dev/null @@ -1,37 +0,0 @@ -| Piece | Place | Artist | Medium | Stuff | -| ------------------------------------------------ | ----------------------------- | ------------------------------------ | --------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Treasury Of Atreus | Ancient Greece: Helladic | Unknown | Limestone | Largest dome for over 1000 years
Largest monolithic lintel
Ashlar masonry and cyclopic masonry
Thought to be Atreus, he abdicated (possibly a tomb)
post and lintel and corbelled arch
| -| Snake Goddess | Ancient Greece: Minoan | Unknown | Faience | Hierarchy of Scale; Exposed breasts - power
victory pose
rosettes
sideways dress - otherworldly
We don't know much about this work | -| Bull-leaping, from the palace at Knossos | Ancient Greece: Minoan | Unknown | Fresco | Different people with different colors
Elongation of bull shows motion
Aquatic pattern on border
Connection to sea | -| Doryphoros (Spear Bearer) or *Canon* | Classical Greece: Classical | Polykleitos | Marble copy after bronze original | Called Canon because it's the standard of beauty for sculptures
Used golden ratio
Polykleitos was in the cult of pythagoreans
Contraposto - counter posture
Well preserved because of Pompeii
| -| Dying Gaul | Classical Greece: Hellenistic | Epigonos | Marble copy after bronze original | Representational hair
Objects on ground give sense of place
Shows blood and sweat
Doesn't portray a greek man (less jacked, less hot), shows a frenchman
Choker shows he's a gaul
Defeat: Broken sword, no attempt to call for help (horn), sitting on shield | -| Aphrodite (Venus de Milo) | Classical Greece: Hellenstic | Alexandros of Antioch-on-the-Meander | Marble | Individualized
Lot of detail compared to aphrodite of knidos
Dry drapery
Contrasting textures
Contraposto
Has musculature and feminine form
More intimate, sensual | -| Nike alighting on a warship (Nike of Samothrace) | Classical Greece: Hellenistic | Unknown | Marble | Rhodes probably had a successful naval victory
Where Nike got it's logo
Wet drapery, would have been in fountain
lot of contrasting texture
Dynamic
| -| Pont-du-Gard | Rome: Empire | Unknown | Shelly Limestone | Arches create space
Aquaduct helped city
columns aligned vertically
Ashlar Masonry
Used as major bridge
Use of Roman arch | -| Portrait of Augustus as General | Rome: Empire | Unknown | Marble Copy, Bronze Original | Three powers (ishtar gate):
- Curass - Military
- Toga - Wealth and political power
- Eros - Supernatural power
Harkening pose: asking for cooperation, contraposto
Idealized proportions
| -| The Pantheon | Roman: Empire | Patron: Hadrean | Concrete | First pantheon built out of wood, burned down
Rebuilt out of concrete
Originally built on a hill, now sunk by detrius of time
Monolithic columns from egypt in portico(front porch)
Had rosettes in ceiling squares
Biggest dome in the world
Squares and circles everywhere | -| Arch of Titus | Rome: Empire | Patron: Titus | Concrete faced with marble | Commemorates when Rome defeats Jerusalem
Triumphal Arch
Depicts jewish temple being raided, money used to fund colosseum
Original historian was jewish (Josephus) | -| Portrait of a Husband and Wife | Rome: Empire | Unknown | Fresco | His skin is darker
Preserved because of Pompeii
She's holding beeswax tablet and stylus
They're flexing literacy
Literacy was only for the rich
| -| | | | | | - -| Term | Definition | -| -------------------------- | ---------------------------------------------------------------------------------------------------- | -| Faience | Metal Glaze, Colder | -| Verism | Exaggerated age, wrinkles. Counterpart to hellenism but with emphasis on age instead of muscles | -| Chryselephantine | Ivory veneer with gold | -| Archaizing | Make something look older in content and style - Fonseca Bust | -| Harkening Pose | Asking for cooperatinon | -| Patron | Person that paid for it | -| Incrustacean | Cut rock in half and flip to show vein - Pantheon | -| Portico | Fancy front porch - Pantheon | -| Trumphal Arch | Winning army walks through on return home | -| Contraposto | The Italian word for counter posture, natural stance, more weight on one foot, body makes an S shape | -| Ungrounded | No historical record | -| Doric | Masculine, beefy, the simplest, oldest style | -| Ionic | Feminine, slender, medium old | -| Corinthian | Fancy top, planty shape around the base of the top, latest style | -| Corbelled Arch | Rocks that go in gradually, like two wedges | -| Post and Lintel | Two posts and a lintel across the top | -| Roman arch (with keystone) | Normal vault | -| Groin vault | 4 way intersection | -| | | diff --git a/education/math/MATH1210 (calc 1)/Derivatives.md b/education/math/MATH1210 (calc 1)/Derivatives.md index 206c18e..26b57ed 100644 --- a/education/math/MATH1210 (calc 1)/Derivatives.md +++ b/education/math/MATH1210 (calc 1)/Derivatives.md @@ -107,3 +107,10 @@ $$ \dfrac{d}{dx}(\dfrac{f(x)}{g(x)}) = \dfrac{f'(x)g(x) -f(x)g'(x)}{(g(x))^2} $ $$ \dfrac{d}{dx} e^x = e^x $$ $$ \dfrac{d}{dx}a^x = a^x*(\ln(a)) $$ for all $a > 0$ + + +# Examples + +> Differentiate $f(x) = 4\sqrt[3]{x} - \dfrac{1}{x^6}$ + +$f(x) \ No newline at end of file diff --git a/education/unmanned aerial system/Radio Communications Procedures (ch 6).md b/education/unmanned aerial system/Radio Communications Procedures (ch 6).md deleted file mode 100644 index a9743e2..0000000 --- a/education/unmanned aerial system/Radio Communications Procedures (ch 6).md +++ /dev/null @@ -1,2 +0,0 @@ -pay attention when flying around an airport - diff --git a/education/unmanned aerial system/final.md b/education/unmanned aerial system/final.md deleted file mode 100644 index ae028e8..0000000 --- a/education/unmanned aerial system/final.md +++ /dev/null @@ -1,43 +0,0 @@ -There is currently no way to get a waiver for beyond line of sight \[for package delivery]. - -To determine if an MOA is active, you can refer to the phone number listed under the legend for special use airspace. This information is not listed under the military operations directory - -An sUAS accident must be reported to the FAA within 10 days. - -Lightning is considered the most hazardous condition when flying in the vicinity of thunderstorms. - -The presence of ice pellets at the surface is evidence of a temperature inversion, with freezing rain at a higher altitude. - -Angle of attack is the angle between the wing chord line and the relative wind. - -An autonomous operation requires a Remote PIC, and nothing else. - -An increase in load factor will cause an unmanned aircraft to stall at a higher airspeed. - -Acute fatigue is short term fatigue gained from a specific event - -METARs report wind in true north. - -The angle of attack at which an airfoil stalls is not influenced by gross weight. - -Military training routes below 1,500 feet have a 4 digit number, routes above have 3 digits. - -Someone with a marijuana conviction can apply for a remote pilot certificate one year after the conviction. - -Use a spectral analyzer to avoid interference with the radio - -After landing at a tower controlled airport, a pilot should contact ground control when advised by the tower. - -Lines of longitude cross the equator at right angles. - -The pilot's handbook of aeronautical knowledge should be consulted for the impact of drugs and alcohol on flight. - -When flight efficiency is a priority, the drone should be operated - -Advection fog develops when an air mass moves inland from the coast in winter. - -Binoculars do not count as line of sight - -Consult the  Pilot's Operating Handbook or UAS Flight Manual for center of gravity limits. - -The amount of excess load that can be imposed upon the wing of an airplane depends on the speed of the airplane \ No newline at end of file From 3987acce9b615c589aa04e702a4b086d74873684 Mon Sep 17 00:00:00 2001 From: arc Date: Thu, 6 Feb 2025 13:03:51 -0700 Subject: [PATCH 0862/1027] vault backup: 2025-02-06 13:03:51 --- education/math/MATH1210 (calc 1)/Derivatives.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/education/math/MATH1210 (calc 1)/Derivatives.md b/education/math/MATH1210 (calc 1)/Derivatives.md index 26b57ed..30e881d 100644 --- a/education/math/MATH1210 (calc 1)/Derivatives.md +++ b/education/math/MATH1210 (calc 1)/Derivatives.md @@ -113,4 +113,6 @@ for all $a > 0$ > Differentiate $f(x) = 4\sqrt[3]{x} - \dfrac{1}{x^6}$ -$f(x) \ No newline at end of file +1. $f(x) = 4\sqrt[3]{x} = \dfrac{1}{x^6}$ +2. $= 4x^\frac{1}{3} - x^{-6}$ +3. $f'(x) $\dfrac{1}{3} * 4x^{\frac{} \ No newline at end of file From e5f05a16e373411a20f1e73eebbba22f239924a3 Mon Sep 17 00:00:00 2001 From: arc Date: Thu, 6 Feb 2025 13:08:47 -0700 Subject: [PATCH 0863/1027] vault backup: 2025-02-06 13:08:47 --- education/math/MATH1210 (calc 1)/Derivatives.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/education/math/MATH1210 (calc 1)/Derivatives.md b/education/math/MATH1210 (calc 1)/Derivatives.md index 30e881d..6a00410 100644 --- a/education/math/MATH1210 (calc 1)/Derivatives.md +++ b/education/math/MATH1210 (calc 1)/Derivatives.md @@ -115,4 +115,4 @@ for all $a > 0$ 1. $f(x) = 4\sqrt[3]{x} = \dfrac{1}{x^6}$ 2. $= 4x^\frac{1}{3} - x^{-6}$ -3. $f'(x) $\dfrac{1}{3} * 4x^{\frac{} \ No newline at end of file +3. $f'(x) $\dfrac{1}{3} * 4x^{-\frac{2}{3}} -4 * x^-10$ \ No newline at end of file From 1824b0fbaf2c65811fed06f192a077a8c5f29936 Mon Sep 17 00:00:00 2001 From: arc Date: Thu, 6 Feb 2025 13:13:47 -0700 Subject: [PATCH 0864/1027] vault backup: 2025-02-06 13:13:47 --- .obsidian/plugins/obsidian-git/data.json | 27 ------------------- .../math/MATH1210 (calc 1)/Derivatives.md | 6 +++-- 2 files changed, 4 insertions(+), 29 deletions(-) diff --git a/.obsidian/plugins/obsidian-git/data.json b/.obsidian/plugins/obsidian-git/data.json index bef4c6e..e69de29 100644 --- a/.obsidian/plugins/obsidian-git/data.json +++ b/.obsidian/plugins/obsidian-git/data.json @@ -1,27 +0,0 @@ -{ - "commitMessage": "vault backup: {{date}}", - "autoCommitMessage": "vault backup: {{date}}", - "commitDateFormat": "YYYY-MM-DD HH:mm:ss", - "autoSaveInterval": 5, - "autoPushInterval": 0, - "autoPullInterval": 5, - "autoPullOnBoot": true, - "disablePush": false, - "pullBeforePush": true, - "disablePopups": false, - "listChangedFilesInMessageBody": false, - "showStatusBar": true, - "updateSubmodules": false, - "syncMethod": "merge", - "customMessageOnAutoBackup": false, - "autoBackupAfterFileChange": false, - "treeStructure": false, - "refreshSourceControl": true, - "basePath": "", - "differentIntervalCommitAndPush": false, - "changedFilesInStatusBar": false, - "showedMobileNotice": true, - "refreshSourceControlTimer": 7000, - "showBranchStatusBar": true, - "setLastSaveToLastCommit": false -} \ No newline at end of file diff --git a/education/math/MATH1210 (calc 1)/Derivatives.md b/education/math/MATH1210 (calc 1)/Derivatives.md index 6a00410..4164486 100644 --- a/education/math/MATH1210 (calc 1)/Derivatives.md +++ b/education/math/MATH1210 (calc 1)/Derivatives.md @@ -114,5 +114,7 @@ for all $a > 0$ > Differentiate $f(x) = 4\sqrt[3]{x} - \dfrac{1}{x^6}$ 1. $f(x) = 4\sqrt[3]{x} = \dfrac{1}{x^6}$ -2. $= 4x^\frac{1}{3} - x^{-6}$ -3. $f'(x) $\dfrac{1}{3} * 4x^{-\frac{2}{3}} -4 * x^-10$ \ No newline at end of file +2. $= 4x^\frac{1}{3} - x^{-6}$ +3. $f'(x) = \dfrac{1}{3} * 4x^{-\frac{2}{3}} -(-6)(x^{-6-1})$ +4. $= 4x^{-2-\frac{2}{3}} + 6x^{-7}$ +5. $= \dfrac{4}{3\sqrt[3]{x^2}} + \dfrac{6}{x^7}$ \ No newline at end of file From ec0d878c9f77a67d6b1c0d664fa66d497a1cb167 Mon Sep 17 00:00:00 2001 From: arc Date: Fri, 7 Feb 2025 10:35:01 -0700 Subject: [PATCH 0865/1027] vault backup: 2025-02-07 10:35:01 --- .obsidian/plugins/obsidian-git/data.json | 27 ++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/.obsidian/plugins/obsidian-git/data.json b/.obsidian/plugins/obsidian-git/data.json index e69de29..bef4c6e 100644 --- a/.obsidian/plugins/obsidian-git/data.json +++ b/.obsidian/plugins/obsidian-git/data.json @@ -0,0 +1,27 @@ +{ + "commitMessage": "vault backup: {{date}}", + "autoCommitMessage": "vault backup: {{date}}", + "commitDateFormat": "YYYY-MM-DD HH:mm:ss", + "autoSaveInterval": 5, + "autoPushInterval": 0, + "autoPullInterval": 5, + "autoPullOnBoot": true, + "disablePush": false, + "pullBeforePush": true, + "disablePopups": false, + "listChangedFilesInMessageBody": false, + "showStatusBar": true, + "updateSubmodules": false, + "syncMethod": "merge", + "customMessageOnAutoBackup": false, + "autoBackupAfterFileChange": false, + "treeStructure": false, + "refreshSourceControl": true, + "basePath": "", + "differentIntervalCommitAndPush": false, + "changedFilesInStatusBar": false, + "showedMobileNotice": true, + "refreshSourceControlTimer": 7000, + "showBranchStatusBar": true, + "setLastSaveToLastCommit": false +} \ No newline at end of file From 6dbef2ee8cfa52481369a880a3beb50edc1936bd Mon Sep 17 00:00:00 2001 From: arc Date: Fri, 7 Feb 2025 11:05:01 -0700 Subject: [PATCH 0866/1027] vault backup: 2025-02-07 11:05:01 --- .obsidian/plugins/obsidian-git/data.json | 27 ------------------------ 1 file changed, 27 deletions(-) diff --git a/.obsidian/plugins/obsidian-git/data.json b/.obsidian/plugins/obsidian-git/data.json index bef4c6e..e69de29 100644 --- a/.obsidian/plugins/obsidian-git/data.json +++ b/.obsidian/plugins/obsidian-git/data.json @@ -1,27 +0,0 @@ -{ - "commitMessage": "vault backup: {{date}}", - "autoCommitMessage": "vault backup: {{date}}", - "commitDateFormat": "YYYY-MM-DD HH:mm:ss", - "autoSaveInterval": 5, - "autoPushInterval": 0, - "autoPullInterval": 5, - "autoPullOnBoot": true, - "disablePush": false, - "pullBeforePush": true, - "disablePopups": false, - "listChangedFilesInMessageBody": false, - "showStatusBar": true, - "updateSubmodules": false, - "syncMethod": "merge", - "customMessageOnAutoBackup": false, - "autoBackupAfterFileChange": false, - "treeStructure": false, - "refreshSourceControl": true, - "basePath": "", - "differentIntervalCommitAndPush": false, - "changedFilesInStatusBar": false, - "showedMobileNotice": true, - "refreshSourceControlTimer": 7000, - "showBranchStatusBar": true, - "setLastSaveToLastCommit": false -} \ No newline at end of file From 26dca6629d79e78c05309b956f48d97b934f5407 Mon Sep 17 00:00:00 2001 From: arc Date: Fri, 7 Feb 2025 11:40:01 -0700 Subject: [PATCH 0867/1027] vault backup: 2025-02-07 11:40:01 --- .obsidian/plugins/obsidian-git/data.json | 27 ++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/.obsidian/plugins/obsidian-git/data.json b/.obsidian/plugins/obsidian-git/data.json index e69de29..bef4c6e 100644 --- a/.obsidian/plugins/obsidian-git/data.json +++ b/.obsidian/plugins/obsidian-git/data.json @@ -0,0 +1,27 @@ +{ + "commitMessage": "vault backup: {{date}}", + "autoCommitMessage": "vault backup: {{date}}", + "commitDateFormat": "YYYY-MM-DD HH:mm:ss", + "autoSaveInterval": 5, + "autoPushInterval": 0, + "autoPullInterval": 5, + "autoPullOnBoot": true, + "disablePush": false, + "pullBeforePush": true, + "disablePopups": false, + "listChangedFilesInMessageBody": false, + "showStatusBar": true, + "updateSubmodules": false, + "syncMethod": "merge", + "customMessageOnAutoBackup": false, + "autoBackupAfterFileChange": false, + "treeStructure": false, + "refreshSourceControl": true, + "basePath": "", + "differentIntervalCommitAndPush": false, + "changedFilesInStatusBar": false, + "showedMobileNotice": true, + "refreshSourceControlTimer": 7000, + "showBranchStatusBar": true, + "setLastSaveToLastCommit": false +} \ No newline at end of file From 5039193ffdcd2df2cb6b38387e3829bdeda7e82e Mon Sep 17 00:00:00 2001 From: arc Date: Fri, 7 Feb 2025 16:49:27 -0700 Subject: [PATCH 0868/1027] vault backup: 2025-02-07 16:49:27 --- s.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 s.md diff --git a/s.md b/s.md new file mode 100644 index 0000000..e69de29 From 50e775cf43db4eece04502bf9bf822f0f455bb81 Mon Sep 17 00:00:00 2001 From: arc Date: Sun, 9 Feb 2025 16:30:33 -0700 Subject: [PATCH 0869/1027] vault backup: 2025-02-09 16:30:33 --- education/math/MATH1210 (calc 1)/Derivatives.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/education/math/MATH1210 (calc 1)/Derivatives.md b/education/math/MATH1210 (calc 1)/Derivatives.md index 4164486..e780f14 100644 --- a/education/math/MATH1210 (calc 1)/Derivatives.md +++ b/education/math/MATH1210 (calc 1)/Derivatives.md @@ -108,7 +108,13 @@ $$ \dfrac{d}{dx} e^x = e^x $$ $$ \dfrac{d}{dx}a^x = a^x*(\ln(a)) $$ for all $a > 0$ +# Trig Functions +## Sine +$$ f'(x) = \lim_{h \to 0} \dfrac{\sin(x + h) - sin(x)}{h} $$ +Using the sum trig identity, $\sin(x + h)$ can be rewritten as $\sin x \cos h + \cos x \sin h$. + +This allows us to simplify, ul # Examples > Differentiate $f(x) = 4\sqrt[3]{x} - \dfrac{1}{x^6}$ From ba5e4a326f0e41efe0b67e7929099039e7feecab Mon Sep 17 00:00:00 2001 From: arc Date: Sun, 9 Feb 2025 16:35:33 -0700 Subject: [PATCH 0870/1027] vault backup: 2025-02-09 16:35:33 --- education/math/MATH1210 (calc 1)/Derivatives.md | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/education/math/MATH1210 (calc 1)/Derivatives.md b/education/math/MATH1210 (calc 1)/Derivatives.md index e780f14..946f6fd 100644 --- a/education/math/MATH1210 (calc 1)/Derivatives.md +++ b/education/math/MATH1210 (calc 1)/Derivatives.md @@ -109,12 +109,20 @@ $$ \dfrac{d}{dx}a^x = a^x*(\ln(a)) $$ for all $a > 0$ # Trig Functions - +$$ \lim_{x \to 0} \dfrac{\sin x}{x} = 1 $$ +$$ \lim_{x \to 0} \dfrac{\cos x - 1}{x} = 0 $$ ## Sine $$ f'(x) = \lim_{h \to 0} \dfrac{\sin(x + h) - sin(x)}{h} $$ Using the sum trig identity, $\sin(x + h)$ can be rewritten as $\sin x \cos h + \cos x \sin h$. -This allows us to simplify, ul +This allows us to simplify, ultimately leading to: +$$ \dfrac{d}{dx} \sin x = \cos x$$ +## Cosine +$$ \dfrac{d}{dx} \cos x = -\sin x $$ + +## Tangent +$$ \dfrac{1}{\cos^2x}$$ + # Examples > Differentiate $f(x) = 4\sqrt[3]{x} - \dfrac{1}{x^6}$ From c246b0522199748014896619b6a2023c45f76479 Mon Sep 17 00:00:00 2001 From: arc Date: Sun, 9 Feb 2025 16:40:33 -0700 Subject: [PATCH 0871/1027] vault backup: 2025-02-09 16:40:33 --- education/math/MATH1210 (calc 1)/Derivatives.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/education/math/MATH1210 (calc 1)/Derivatives.md b/education/math/MATH1210 (calc 1)/Derivatives.md index 946f6fd..bce636f 100644 --- a/education/math/MATH1210 (calc 1)/Derivatives.md +++ b/education/math/MATH1210 (calc 1)/Derivatives.md @@ -121,7 +121,15 @@ $$ \dfrac{d}{dx} \sin x = \cos x$$ $$ \dfrac{d}{dx} \cos x = -\sin x $$ ## Tangent -$$ \dfrac{1}{\cos^2x}$$ +$$ \dfrac{d}{dx} \tan x = \sec^2x $$ +## Secant +$$ \dfrac{d}{dx} \sec x = \sec x * \tan x $$ + +## Cosecant +$$ \dfrac{d}{dx} \csc x = -\csc x \cot x $$ +## Cotangent +$$ \dfrac{d}{dx} \cot x = -\csc^2 x $$ + # Examples From 7b3485d87e8f8da7e8c626cd5eb48e09d826f771 Mon Sep 17 00:00:00 2001 From: arc Date: Sun, 9 Feb 2025 17:25:44 -0700 Subject: [PATCH 0872/1027] vault backup: 2025-02-09 17:25:44 --- .obsidian/plugins/obsidian-git/data.json | 27 ------------------------ 1 file changed, 27 deletions(-) diff --git a/.obsidian/plugins/obsidian-git/data.json b/.obsidian/plugins/obsidian-git/data.json index bef4c6e..e69de29 100644 --- a/.obsidian/plugins/obsidian-git/data.json +++ b/.obsidian/plugins/obsidian-git/data.json @@ -1,27 +0,0 @@ -{ - "commitMessage": "vault backup: {{date}}", - "autoCommitMessage": "vault backup: {{date}}", - "commitDateFormat": "YYYY-MM-DD HH:mm:ss", - "autoSaveInterval": 5, - "autoPushInterval": 0, - "autoPullInterval": 5, - "autoPullOnBoot": true, - "disablePush": false, - "pullBeforePush": true, - "disablePopups": false, - "listChangedFilesInMessageBody": false, - "showStatusBar": true, - "updateSubmodules": false, - "syncMethod": "merge", - "customMessageOnAutoBackup": false, - "autoBackupAfterFileChange": false, - "treeStructure": false, - "refreshSourceControl": true, - "basePath": "", - "differentIntervalCommitAndPush": false, - "changedFilesInStatusBar": false, - "showedMobileNotice": true, - "refreshSourceControlTimer": 7000, - "showBranchStatusBar": true, - "setLastSaveToLastCommit": false -} \ No newline at end of file From fc5fcc152412cceaa873987d575c7e5f82102c7a Mon Sep 17 00:00:00 2001 From: arc Date: Sun, 9 Feb 2025 18:11:32 -0700 Subject: [PATCH 0873/1027] vault backup: 2025-02-09 18:11:32 --- .obsidian/plugins/obsidian-git/data.json | 27 ++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/.obsidian/plugins/obsidian-git/data.json b/.obsidian/plugins/obsidian-git/data.json index e69de29..bef4c6e 100644 --- a/.obsidian/plugins/obsidian-git/data.json +++ b/.obsidian/plugins/obsidian-git/data.json @@ -0,0 +1,27 @@ +{ + "commitMessage": "vault backup: {{date}}", + "autoCommitMessage": "vault backup: {{date}}", + "commitDateFormat": "YYYY-MM-DD HH:mm:ss", + "autoSaveInterval": 5, + "autoPushInterval": 0, + "autoPullInterval": 5, + "autoPullOnBoot": true, + "disablePush": false, + "pullBeforePush": true, + "disablePopups": false, + "listChangedFilesInMessageBody": false, + "showStatusBar": true, + "updateSubmodules": false, + "syncMethod": "merge", + "customMessageOnAutoBackup": false, + "autoBackupAfterFileChange": false, + "treeStructure": false, + "refreshSourceControl": true, + "basePath": "", + "differentIntervalCommitAndPush": false, + "changedFilesInStatusBar": false, + "showedMobileNotice": true, + "refreshSourceControlTimer": 7000, + "showBranchStatusBar": true, + "setLastSaveToLastCommit": false +} \ No newline at end of file From cc823e3f16d85844b4a50198959c1407e985bde9 Mon Sep 17 00:00:00 2001 From: arc Date: Fri, 14 Feb 2025 10:57:23 -0700 Subject: [PATCH 0874/1027] vault backup: 2025-02-14 10:57:22 --- education/math/MATH1210 (calc 1)/Derivatives.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/education/math/MATH1210 (calc 1)/Derivatives.md b/education/math/MATH1210 (calc 1)/Derivatives.md index bce636f..337ef48 100644 --- a/education/math/MATH1210 (calc 1)/Derivatives.md +++ b/education/math/MATH1210 (calc 1)/Derivatives.md @@ -108,6 +108,9 @@ $$ \dfrac{d}{dx} e^x = e^x $$ $$ \dfrac{d}{dx}a^x = a^x*(\ln(a)) $$ for all $a > 0$ +# Chain Rule +$$ \dfrac{d}{dx} f(g(x)) = f'(g(x))*g'(x) $$ + # Trig Functions $$ \lim_{x \to 0} \dfrac{\sin x}{x} = 1 $$ $$ \lim_{x \to 0} \dfrac{\cos x - 1}{x} = 0 $$ From 83569114c291168cb6abcdc4b069856a2275a9f3 Mon Sep 17 00:00:00 2001 From: arc Date: Sun, 16 Feb 2025 18:27:21 -0700 Subject: [PATCH 0875/1027] vault backup: 2025-02-16 18:27:21 --- education/math/MATH1210 (calc 1)/Derivatives.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/education/math/MATH1210 (calc 1)/Derivatives.md b/education/math/MATH1210 (calc 1)/Derivatives.md index 337ef48..8dfa3bb 100644 --- a/education/math/MATH1210 (calc 1)/Derivatives.md +++ b/education/math/MATH1210 (calc 1)/Derivatives.md @@ -133,7 +133,10 @@ $$ \dfrac{d}{dx} \csc x = -\csc x \cot x $$ ## Cotangent $$ \dfrac{d}{dx} \cot x = -\csc^2 x $$ - +# Implicit Differentiation\ +- $\dfrac{d}{dx} * x^2 = \dfrac{d(x^2)}{dx}$, or, the derivative of $x^2$ with respect to x +- $\dfrac{dx}{dx} = 1$ : The derivative of $x$ with respect to $x$ is one +- # Examples > Differentiate $f(x) = 4\sqrt[3]{x} - \dfrac{1}{x^6}$ From 341c388d37b86ca4738a70e588a076c5e106d1f8 Mon Sep 17 00:00:00 2001 From: arc Date: Sun, 16 Feb 2025 18:32:21 -0700 Subject: [PATCH 0876/1027] vault backup: 2025-02-16 18:32:21 --- education/math/MATH1210 (calc 1)/Derivatives.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/education/math/MATH1210 (calc 1)/Derivatives.md b/education/math/MATH1210 (calc 1)/Derivatives.md index 8dfa3bb..89c54b0 100644 --- a/education/math/MATH1210 (calc 1)/Derivatives.md +++ b/education/math/MATH1210 (calc 1)/Derivatives.md @@ -133,10 +133,11 @@ $$ \dfrac{d}{dx} \csc x = -\csc x \cot x $$ ## Cotangent $$ \dfrac{d}{dx} \cot x = -\csc^2 x $$ -# Implicit Differentiation\ -- $\dfrac{d}{dx} * x^2 = \dfrac{d(x^2)}{dx}$, or, the derivative of $x^2$ with respect to x -- $\dfrac{dx}{dx} = 1$ : The derivative of $x$ with respect to $x$ is one -- +# Implicit Differentiation +- There's a reason differentials are written like a fraction +- $\dfrac{d}{dx} x^2 = \dfrac{d(x^2)}{dx}$, or, "the derivative of $x^2$ with respect to $x$" +- $\dfrac{d}{dx} x = \dfrac{dx}{dx} = 1$ : The derivative of $x$ with respect to $x$ is one +- $\dfrac{d}{dx} y = \dfrac{{dy}{dx} = y'$ # Examples > Differentiate $f(x) = 4\sqrt[3]{x} - \dfrac{1}{x^6}$ From 5b61041480ef3df81fad1aa585d33561fb04a2b7 Mon Sep 17 00:00:00 2001 From: arc Date: Sun, 16 Feb 2025 18:37:21 -0700 Subject: [PATCH 0877/1027] vault backup: 2025-02-16 18:37:21 --- education/math/MATH1210 (calc 1)/Derivatives.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/education/math/MATH1210 (calc 1)/Derivatives.md b/education/math/MATH1210 (calc 1)/Derivatives.md index 89c54b0..e22db1e 100644 --- a/education/math/MATH1210 (calc 1)/Derivatives.md +++ b/education/math/MATH1210 (calc 1)/Derivatives.md @@ -137,7 +137,8 @@ $$ \dfrac{d}{dx} \cot x = -\csc^2 x $$ - There's a reason differentials are written like a fraction - $\dfrac{d}{dx} x^2 = \dfrac{d(x^2)}{dx}$, or, "the derivative of $x^2$ with respect to $x$" - $\dfrac{d}{dx} x = \dfrac{dx}{dx} = 1$ : The derivative of $x$ with respect to $x$ is one -- $\dfrac{d}{dx} y = \dfrac{{dy}{dx} = y'$ +- $\dfrac{d}{dx} y = \dfrac{dy}{dx} = y'$ +- Given the equation $y = x^2$, $\dfrac{d}{dx} y = \dfrac{dy}{dx} = 2x$. # Examples > Differentiate $f(x) = 4\sqrt[3]{x} - \dfrac{1}{x^6}$ From acf45de1603a1507c8330e337200f2b27598ffd1 Mon Sep 17 00:00:00 2001 From: arc Date: Sun, 16 Feb 2025 18:42:21 -0700 Subject: [PATCH 0878/1027] vault backup: 2025-02-16 18:42:21 --- education/math/MATH1210 (calc 1)/Derivatives.md | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/education/math/MATH1210 (calc 1)/Derivatives.md b/education/math/MATH1210 (calc 1)/Derivatives.md index e22db1e..94f0627 100644 --- a/education/math/MATH1210 (calc 1)/Derivatives.md +++ b/education/math/MATH1210 (calc 1)/Derivatives.md @@ -110,7 +110,13 @@ for all $a > 0$ # Chain Rule $$ \dfrac{d}{dx} f(g(x)) = f'(g(x))*g'(x) $$ +## Examples +> Given the function $(x^2+3)^4$, find the derivative. +Using the chain rule, the above function might be described as $f(g(x))$, where $f(x) = x^4$, and $g(x) = x^2 + 3)$. +1. First find the derivative of the outside function function ($f(x) = x^4$): +$$ \dfrac{d}{dx} (x^2 +3)^4 = 4(g(x))^3 $$ +2. # Trig Functions $$ \lim_{x \to 0} \dfrac{\sin x}{x} = 1 $$ $$ \lim_{x \to 0} \dfrac{\cos x - 1}{x} = 0 $$ @@ -143,8 +149,8 @@ $$ \dfrac{d}{dx} \cot x = -\csc^2 x $$ > Differentiate $f(x) = 4\sqrt[3]{x} - \dfrac{1}{x^6}$ -1. $f(x) = 4\sqrt[3]{x} = \dfrac{1}{x^6}$ -2. $= 4x^\frac{1}{3} - x^{-6}$ -3. $f'(x) = \dfrac{1}{3} * 4x^{-\frac{2}{3}} -(-6)(x^{-6-1})$ -4. $= 4x^{-2-\frac{2}{3}} + 6x^{-7}$ -5. $= \dfrac{4}{3\sqrt[3]{x^2}} + \dfrac{6}{x^7}$ \ No newline at end of file +3. $f(x) = 4\sqrt[3]{x} = \dfrac{1}{x^6}$ +4. $= 4x^\frac{1}{3} - x^{-6}$ +5. $f'(x) = \dfrac{1}{3} * 4x^{-\frac{2}{3}} -(-6)(x^{-6-1})$ +6. $= 4x^{-2-\frac{2}{3}} + 6x^{-7}$ +7. $= \dfrac{4}{3\sqrt[3]{x^2}} + \dfrac{6}{x^7}$ \ No newline at end of file From c2d96ec2e5bb585e8908bbebdfb870e764138361 Mon Sep 17 00:00:00 2001 From: arc Date: Sun, 16 Feb 2025 18:47:21 -0700 Subject: [PATCH 0879/1027] vault backup: 2025-02-16 18:47:21 --- .obsidian/plugins/obsidian-git/data.json | 27 ------------------- .../math/MATH1210 (calc 1)/Derivatives.md | 19 ++++++++----- 2 files changed, 12 insertions(+), 34 deletions(-) diff --git a/.obsidian/plugins/obsidian-git/data.json b/.obsidian/plugins/obsidian-git/data.json index bef4c6e..e69de29 100644 --- a/.obsidian/plugins/obsidian-git/data.json +++ b/.obsidian/plugins/obsidian-git/data.json @@ -1,27 +0,0 @@ -{ - "commitMessage": "vault backup: {{date}}", - "autoCommitMessage": "vault backup: {{date}}", - "commitDateFormat": "YYYY-MM-DD HH:mm:ss", - "autoSaveInterval": 5, - "autoPushInterval": 0, - "autoPullInterval": 5, - "autoPullOnBoot": true, - "disablePush": false, - "pullBeforePush": true, - "disablePopups": false, - "listChangedFilesInMessageBody": false, - "showStatusBar": true, - "updateSubmodules": false, - "syncMethod": "merge", - "customMessageOnAutoBackup": false, - "autoBackupAfterFileChange": false, - "treeStructure": false, - "refreshSourceControl": true, - "basePath": "", - "differentIntervalCommitAndPush": false, - "changedFilesInStatusBar": false, - "showedMobileNotice": true, - "refreshSourceControlTimer": 7000, - "showBranchStatusBar": true, - "setLastSaveToLastCommit": false -} \ No newline at end of file diff --git a/education/math/MATH1210 (calc 1)/Derivatives.md b/education/math/MATH1210 (calc 1)/Derivatives.md index 94f0627..cd116f7 100644 --- a/education/math/MATH1210 (calc 1)/Derivatives.md +++ b/education/math/MATH1210 (calc 1)/Derivatives.md @@ -115,8 +115,13 @@ $$ \dfrac{d}{dx} f(g(x)) = f'(g(x))*g'(x) $$ Using the chain rule, the above function might be described as $f(g(x))$, where $f(x) = x^4$, and $g(x) = x^2 + 3)$. 1. First find the derivative of the outside function function ($f(x) = x^4$): -$$ \dfrac{d}{dx} (x^2 +3)^4 = 4(g(x))^3 $$ -2. +$$ \dfrac{d}{dx} (x^2 +3)^4 = 4(g(x))^3 ...$$ +2. Multiply that by the derivative of the inside function, $g(x)$, or $x^2 + 3$. +$$ \dfrac{d}{dx} (x^2 + 3)^4 = 4(x^2 + 3)^3 * (2x)$$ +> Apply the chain rule to $x^4$ + +If we treat the above as a function along the lines of $f(x) = (x)^4$, and $g(x) = x$, then the chain rule can be used like so: +$$ 4(x)^3 * x $$ # Trig Functions $$ \lim_{x \to 0} \dfrac{\sin x}{x} = 1 $$ $$ \lim_{x \to 0} \dfrac{\cos x - 1}{x} = 0 $$ @@ -149,8 +154,8 @@ $$ \dfrac{d}{dx} \cot x = -\csc^2 x $$ > Differentiate $f(x) = 4\sqrt[3]{x} - \dfrac{1}{x^6}$ -3. $f(x) = 4\sqrt[3]{x} = \dfrac{1}{x^6}$ -4. $= 4x^\frac{1}{3} - x^{-6}$ -5. $f'(x) = \dfrac{1}{3} * 4x^{-\frac{2}{3}} -(-6)(x^{-6-1})$ -6. $= 4x^{-2-\frac{2}{3}} + 6x^{-7}$ -7. $= \dfrac{4}{3\sqrt[3]{x^2}} + \dfrac{6}{x^7}$ \ No newline at end of file +2. $f(x) = 4\sqrt[3]{x} = \dfrac{1}{x^6}$ +3. $= 4x^\frac{1}{3} - x^{-6}$ +4. $f'(x) = \dfrac{1}{3} * 4x^{-\frac{2}{3}} -(-6)(x^{-6-1})$ +5. $= 4x^{-2-\frac{2}{3}} + 6x^{-7}$ +6. $= \dfrac{4}{3\sqrt[3]{x^2}} + \dfrac{6}{x^7}$ \ No newline at end of file From 763c9022ca375271ebffd8e26fe041cd2c639686 Mon Sep 17 00:00:00 2001 From: arc Date: Sun, 16 Feb 2025 18:52:21 -0700 Subject: [PATCH 0880/1027] vault backup: 2025-02-16 18:52:21 --- .obsidian/plugins/obsidian-git/data.json | 27 +++++++++++++++++++ .../math/MATH1210 (calc 1)/Derivatives.md | 20 +++++++++----- 2 files changed, 41 insertions(+), 6 deletions(-) diff --git a/.obsidian/plugins/obsidian-git/data.json b/.obsidian/plugins/obsidian-git/data.json index e69de29..bef4c6e 100644 --- a/.obsidian/plugins/obsidian-git/data.json +++ b/.obsidian/plugins/obsidian-git/data.json @@ -0,0 +1,27 @@ +{ + "commitMessage": "vault backup: {{date}}", + "autoCommitMessage": "vault backup: {{date}}", + "commitDateFormat": "YYYY-MM-DD HH:mm:ss", + "autoSaveInterval": 5, + "autoPushInterval": 0, + "autoPullInterval": 5, + "autoPullOnBoot": true, + "disablePush": false, + "pullBeforePush": true, + "disablePopups": false, + "listChangedFilesInMessageBody": false, + "showStatusBar": true, + "updateSubmodules": false, + "syncMethod": "merge", + "customMessageOnAutoBackup": false, + "autoBackupAfterFileChange": false, + "treeStructure": false, + "refreshSourceControl": true, + "basePath": "", + "differentIntervalCommitAndPush": false, + "changedFilesInStatusBar": false, + "showedMobileNotice": true, + "refreshSourceControlTimer": 7000, + "showBranchStatusBar": true, + "setLastSaveToLastCommit": false +} \ No newline at end of file diff --git a/education/math/MATH1210 (calc 1)/Derivatives.md b/education/math/MATH1210 (calc 1)/Derivatives.md index cd116f7..90fa3d5 100644 --- a/education/math/MATH1210 (calc 1)/Derivatives.md +++ b/education/math/MATH1210 (calc 1)/Derivatives.md @@ -121,7 +121,7 @@ $$ \dfrac{d}{dx} (x^2 + 3)^4 = 4(x^2 + 3)^3 * (2x)$$ > Apply the chain rule to $x^4$ If we treat the above as a function along the lines of $f(x) = (x)^4$, and $g(x) = x$, then the chain rule can be used like so: -$$ 4(x)^3 * x $$ +$$ 4(x)^3 * (1) $$ # Trig Functions $$ \lim_{x \to 0} \dfrac{\sin x}{x} = 1 $$ $$ \lim_{x \to 0} \dfrac{\cos x - 1}{x} = 0 $$ @@ -150,12 +150,20 @@ $$ \dfrac{d}{dx} \cot x = -\csc^2 x $$ - $\dfrac{d}{dx} x = \dfrac{dx}{dx} = 1$ : The derivative of $x$ with respect to $x$ is one - $\dfrac{d}{dx} y = \dfrac{dy}{dx} = y'$ - Given the equation $y = x^2$, $\dfrac{d}{dx} y = \dfrac{dy}{dx} = 2x$. + +Given these facts: +1. Let $y$ be some function of $x$ +2. $\dfrac{d}{dx} x = 1$ +3. $\dfrac{d}{dx} y = \dfrac{dy}{dx}$\ +What's the derivative of $y^2$? +$\dfrac{d}{dx} y^2 = 2(y)^1 *\dfrac{dy}{dx}$ + # Examples > Differentiate $f(x) = 4\sqrt[3]{x} - \dfrac{1}{x^6}$ -2. $f(x) = 4\sqrt[3]{x} = \dfrac{1}{x^6}$ -3. $= 4x^\frac{1}{3} - x^{-6}$ -4. $f'(x) = \dfrac{1}{3} * 4x^{-\frac{2}{3}} -(-6)(x^{-6-1})$ -5. $= 4x^{-2-\frac{2}{3}} + 6x^{-7}$ -6. $= \dfrac{4}{3\sqrt[3]{x^2}} + \dfrac{6}{x^7}$ \ No newline at end of file +4. $f(x) = 4\sqrt[3]{x} = \dfrac{1}{x^6}$ +5. $= 4x^\frac{1}{3} - x^{-6}$ +6. $f'(x) = \dfrac{1}{3} * 4x^{-\frac{2}{3}} -(-6)(x^{-6-1})$ +7. $= 4x^{-2-\frac{2}{3}} + 6x^{-7}$ +8. $= \dfrac{4}{3\sqrt[3]{x^2}} + \dfrac{6}{x^7}$ \ No newline at end of file From c21c741225b8573f9b3b63e802ceaf1d5dea51e3 Mon Sep 17 00:00:00 2001 From: arc Date: Sun, 16 Feb 2025 19:02:21 -0700 Subject: [PATCH 0881/1027] vault backup: 2025-02-16 19:02:21 --- .obsidian/plugins/obsidian-git/data.json | 27 ---------------- .../math/MATH1210 (calc 1)/Derivatives.md | 31 +++++++++---------- 2 files changed, 15 insertions(+), 43 deletions(-) diff --git a/.obsidian/plugins/obsidian-git/data.json b/.obsidian/plugins/obsidian-git/data.json index bef4c6e..e69de29 100644 --- a/.obsidian/plugins/obsidian-git/data.json +++ b/.obsidian/plugins/obsidian-git/data.json @@ -1,27 +0,0 @@ -{ - "commitMessage": "vault backup: {{date}}", - "autoCommitMessage": "vault backup: {{date}}", - "commitDateFormat": "YYYY-MM-DD HH:mm:ss", - "autoSaveInterval": 5, - "autoPushInterval": 0, - "autoPullInterval": 5, - "autoPullOnBoot": true, - "disablePush": false, - "pullBeforePush": true, - "disablePopups": false, - "listChangedFilesInMessageBody": false, - "showStatusBar": true, - "updateSubmodules": false, - "syncMethod": "merge", - "customMessageOnAutoBackup": false, - "autoBackupAfterFileChange": false, - "treeStructure": false, - "refreshSourceControl": true, - "basePath": "", - "differentIntervalCommitAndPush": false, - "changedFilesInStatusBar": false, - "showedMobileNotice": true, - "refreshSourceControlTimer": 7000, - "showBranchStatusBar": true, - "setLastSaveToLastCommit": false -} \ No newline at end of file diff --git a/education/math/MATH1210 (calc 1)/Derivatives.md b/education/math/MATH1210 (calc 1)/Derivatives.md index 90fa3d5..03f5542 100644 --- a/education/math/MATH1210 (calc 1)/Derivatives.md +++ b/education/math/MATH1210 (calc 1)/Derivatives.md @@ -15,6 +15,15 @@ If we have the coordinate pair $(a, f(a))$, and the value $h$ is the distance be $$\lim_{h \to 0}\dfrac{f(a + h) - f(a)}{h}$$ The above formula can be used to find the *derivative*. This may also be referred to as the *instantaneous velocity*, or the *instantaneous rate of change*. +## Examples + +> Differentiate $f(x) = 4\sqrt[3]{x} - \dfrac{1}{x^6}$ + +1. $f(x) = 4\sqrt[3]{x} = \dfrac{1}{x^6}$ +2. $= 4x^\frac{1}{3} - x^{-6}$ +3. $f'(x) = \dfrac{1}{3} * 4x^{-\frac{2}{3}} -(-6)(x^{-6-1})$ +4. $= 4x^{-2-\frac{2}{3}} + 6x^{-7}$ +5. $= \dfrac{4}{3\sqrt[3]{x^2}} + \dfrac{6}{x^7}$ # Point Slope Formula (Review) $$ y - y_1 = m(x-x_1) $$ Given that $m = f'(a)$ and that $(x_1, y_1) = (a, f(a))$, you get the equation: @@ -114,9 +123,9 @@ $$ \dfrac{d}{dx} f(g(x)) = f'(g(x))*g'(x) $$ > Given the function $(x^2+3)^4$, find the derivative. Using the chain rule, the above function might be described as $f(g(x))$, where $f(x) = x^4$, and $g(x) = x^2 + 3)$. -1. First find the derivative of the outside function function ($f(x) = x^4$): +6. First find the derivative of the outside function function ($f(x) = x^4$): $$ \dfrac{d}{dx} (x^2 +3)^4 = 4(g(x))^3 ...$$ -2. Multiply that by the derivative of the inside function, $g(x)$, or $x^2 + 3$. +7. Multiply that by the derivative of the inside function, $g(x)$, or $x^2 + 3$. $$ \dfrac{d}{dx} (x^2 + 3)^4 = 4(x^2 + 3)^3 * (2x)$$ > Apply the chain rule to $x^4$ @@ -152,18 +161,8 @@ $$ \dfrac{d}{dx} \cot x = -\csc^2 x $$ - Given the equation $y = x^2$, $\dfrac{d}{dx} y = \dfrac{dy}{dx} = 2x$. Given these facts: -1. Let $y$ be some function of $x$ -2. $\dfrac{d}{dx} x = 1$ -3. $\dfrac{d}{dx} y = \dfrac{dy}{dx}$\ -What's the derivative of $y^2$? -$\dfrac{d}{dx} y^2 = 2(y)^1 *\dfrac{dy}{dx}$ +8. Let $y$ be some function of $x$ +9. $\dfrac{d}{dx} x = 1$ +10. $\dfrac{d}{dx} y = \dfrac{dy}{dx}$\ -# Examples - -> Differentiate $f(x) = 4\sqrt[3]{x} - \dfrac{1}{x^6}$ - -4. $f(x) = 4\sqrt[3]{x} = \dfrac{1}{x^6}$ -5. $= 4x^\frac{1}{3} - x^{-6}$ -6. $f'(x) = \dfrac{1}{3} * 4x^{-\frac{2}{3}} -(-6)(x^{-6-1})$ -7. $= 4x^{-2-\frac{2}{3}} + 6x^{-7}$ -8. $= \dfrac{4}{3\sqrt[3]{x^2}} + \dfrac{6}{x^7}$ \ No newline at end of file +## Examples From d2ffd42b20150c56bee213b150021ef8e8d7b1cd Mon Sep 17 00:00:00 2001 From: arc Date: Sun, 16 Feb 2025 19:32:21 -0700 Subject: [PATCH 0882/1027] vault backup: 2025-02-16 19:32:21 --- .obsidian/plugins/obsidian-git/data.json | 27 +++++++++++++++++++ .../math/MATH1210 (calc 1)/Derivatives.md | 2 +- 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/.obsidian/plugins/obsidian-git/data.json b/.obsidian/plugins/obsidian-git/data.json index e69de29..bef4c6e 100644 --- a/.obsidian/plugins/obsidian-git/data.json +++ b/.obsidian/plugins/obsidian-git/data.json @@ -0,0 +1,27 @@ +{ + "commitMessage": "vault backup: {{date}}", + "autoCommitMessage": "vault backup: {{date}}", + "commitDateFormat": "YYYY-MM-DD HH:mm:ss", + "autoSaveInterval": 5, + "autoPushInterval": 0, + "autoPullInterval": 5, + "autoPullOnBoot": true, + "disablePush": false, + "pullBeforePush": true, + "disablePopups": false, + "listChangedFilesInMessageBody": false, + "showStatusBar": true, + "updateSubmodules": false, + "syncMethod": "merge", + "customMessageOnAutoBackup": false, + "autoBackupAfterFileChange": false, + "treeStructure": false, + "refreshSourceControl": true, + "basePath": "", + "differentIntervalCommitAndPush": false, + "changedFilesInStatusBar": false, + "showedMobileNotice": true, + "refreshSourceControlTimer": 7000, + "showBranchStatusBar": true, + "setLastSaveToLastCommit": false +} \ No newline at end of file diff --git a/education/math/MATH1210 (calc 1)/Derivatives.md b/education/math/MATH1210 (calc 1)/Derivatives.md index 03f5542..dc85cdf 100644 --- a/education/math/MATH1210 (calc 1)/Derivatives.md +++ b/education/math/MATH1210 (calc 1)/Derivatives.md @@ -28,7 +28,7 @@ The above formula can be used to find the *derivative*. This may also be referre $$ y - y_1 = m(x-x_1) $$ Given that $m = f'(a)$ and that $(x_1, y_1) = (a, f(a))$, you get the equation: $$ y - f(a) = f'(a)(x - a) $$ - +As a more practical example, given an equation with a slope of $6$, # Line Types ## Secant Line A **Secant Line** connects two points on a graph. From f5a2d9f90e895b9f97a290c96ebb3889d095846f Mon Sep 17 00:00:00 2001 From: arc Date: Sun, 16 Feb 2025 19:37:21 -0700 Subject: [PATCH 0883/1027] vault backup: 2025-02-16 19:37:21 --- .../math/MATH1210 (calc 1)/Derivatives.md | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/education/math/MATH1210 (calc 1)/Derivatives.md b/education/math/MATH1210 (calc 1)/Derivatives.md index dc85cdf..1d3fa69 100644 --- a/education/math/MATH1210 (calc 1)/Derivatives.md +++ b/education/math/MATH1210 (calc 1)/Derivatives.md @@ -28,7 +28,13 @@ The above formula can be used to find the *derivative*. This may also be referre $$ y - y_1 = m(x-x_1) $$ Given that $m = f'(a)$ and that $(x_1, y_1) = (a, f(a))$, you get the equation: $$ y - f(a) = f'(a)(x - a) $$ -As a more practical example, given an equation with a slope of $6$, +As a more practical example, given an equation with a slope of $6$ at the point $(-2, -4)$: +$$ y - (-4) = 6(x - -2)$$ +Solving for $y$ looks like this: +1. $y + 4 = 6(x + 2)$ +2. $y = 6(x + 2) - 4$ +3. $y = 6x + 12 - 4$ +4. $y = 6x + 8$ # Line Types ## Secant Line A **Secant Line** connects two points on a graph. @@ -123,9 +129,9 @@ $$ \dfrac{d}{dx} f(g(x)) = f'(g(x))*g'(x) $$ > Given the function $(x^2+3)^4$, find the derivative. Using the chain rule, the above function might be described as $f(g(x))$, where $f(x) = x^4$, and $g(x) = x^2 + 3)$. -6. First find the derivative of the outside function function ($f(x) = x^4$): +5. First find the derivative of the outside function function ($f(x) = x^4$): $$ \dfrac{d}{dx} (x^2 +3)^4 = 4(g(x))^3 ...$$ -7. Multiply that by the derivative of the inside function, $g(x)$, or $x^2 + 3$. +6. Multiply that by the derivative of the inside function, $g(x)$, or $x^2 + 3$. $$ \dfrac{d}{dx} (x^2 + 3)^4 = 4(x^2 + 3)^3 * (2x)$$ > Apply the chain rule to $x^4$ @@ -161,8 +167,8 @@ $$ \dfrac{d}{dx} \cot x = -\csc^2 x $$ - Given the equation $y = x^2$, $\dfrac{d}{dx} y = \dfrac{dy}{dx} = 2x$. Given these facts: -8. Let $y$ be some function of $x$ -9. $\dfrac{d}{dx} x = 1$ -10. $\dfrac{d}{dx} y = \dfrac{dy}{dx}$\ +7. Let $y$ be some function of $x$ +8. $\dfrac{d}{dx} x = 1$ +9. $\dfrac{d}{dx} y = \dfrac{dy}{dx}$\ ## Examples From 3a356d3f0a0c4cfa782846be702324cd77b79d57 Mon Sep 17 00:00:00 2001 From: arc Date: Sun, 16 Feb 2025 20:07:21 -0700 Subject: [PATCH 0884/1027] vault backup: 2025-02-16 20:07:21 --- .obsidian/community-plugins.json | 3 +- .../obsidian-excalidraw-plugin/data.json | 799 ++++++++++++++++++ .../obsidian-excalidraw-plugin/main.js | 10 + .../obsidian-excalidraw-plugin/manifest.json | 12 + .../obsidian-excalidraw-plugin/styles.css | 1 + .obsidian/types.json | 27 + .../math/MATH1210 (calc 1)/Derivatives.md | 2 + .../Drawing 2025-02-16 20.05.18.excalidraw.md | 168 ++++ 8 files changed, 1021 insertions(+), 1 deletion(-) create mode 100644 .obsidian/plugins/obsidian-excalidraw-plugin/data.json create mode 100644 .obsidian/plugins/obsidian-excalidraw-plugin/main.js create mode 100644 .obsidian/plugins/obsidian-excalidraw-plugin/manifest.json create mode 100644 .obsidian/plugins/obsidian-excalidraw-plugin/styles.css create mode 100644 .obsidian/types.json create mode 100644 education/math/MATH1210 (calc 1)/Drawing 2025-02-16 20.05.18.excalidraw.md diff --git a/.obsidian/community-plugins.json b/.obsidian/community-plugins.json index d52e505..75f91d9 100644 --- a/.obsidian/community-plugins.json +++ b/.obsidian/community-plugins.json @@ -2,5 +2,6 @@ "obsidian-git", "d2-obsidian", "execute-code", - "better-export-pdf" + "better-export-pdf", + "obsidian-excalidraw-plugin" ] \ No newline at end of file diff --git a/.obsidian/plugins/obsidian-excalidraw-plugin/data.json b/.obsidian/plugins/obsidian-excalidraw-plugin/data.json new file mode 100644 index 0000000..7443d53 --- /dev/null +++ b/.obsidian/plugins/obsidian-excalidraw-plugin/data.json @@ -0,0 +1,799 @@ +{ + "folder": "Excalidraw", + "cropFolder": "", + "annotateFolder": "", + "embedUseExcalidrawFolder": false, + "templateFilePath": "Excalidraw/Template.excalidraw", + "scriptFolderPath": "Excalidraw/Scripts", + "fontAssetsPath": "Excalidraw/CJK Fonts", + "loadChineseFonts": false, + "loadJapaneseFonts": false, + "loadKoreanFonts": false, + "compress": true, + "decompressForMDView": false, + "onceOffCompressFlagReset": true, + "onceOffGPTVersionReset": true, + "autosave": true, + "autosaveIntervalDesktop": 60000, + "autosaveIntervalMobile": 30000, + "drawingFilenamePrefix": "Drawing ", + "drawingEmbedPrefixWithFilename": true, + "drawingFilnameEmbedPostfix": " ", + "drawingFilenameDateTime": "YYYY-MM-DD HH.mm.ss", + "useExcalidrawExtension": true, + "cropPrefix": "cropped_", + "annotatePrefix": "annotated_", + "annotatePreserveSize": false, + "previewImageType": "SVGIMG", + "renderingConcurrency": 3, + "allowImageCache": true, + "allowImageCacheInScene": true, + "displayExportedImageIfAvailable": false, + "previewMatchObsidianTheme": false, + "width": "400", + "height": "", + "overrideObsidianFontSize": false, + "dynamicStyling": "colorful", + "isLeftHanded": false, + "iframeMatchExcalidrawTheme": true, + "matchTheme": false, + "matchThemeAlways": false, + "matchThemeTrigger": false, + "defaultMode": "normal", + "defaultPenMode": "never", + "penModeDoubleTapEraser": true, + "penModeSingleFingerPanning": true, + "penModeCrosshairVisible": true, + "renderImageInMarkdownReadingMode": false, + "renderImageInHoverPreviewForMDNotes": false, + "renderImageInMarkdownToPDF": false, + "allowPinchZoom": false, + "allowWheelZoom": false, + "zoomToFitOnOpen": true, + "zoomToFitOnResize": true, + "zoomToFitMaxLevel": 2, + "linkPrefix": "📍", + "urlPrefix": "🌐", + "parseTODO": false, + "todo": "☐", + "done": "🗹", + "hoverPreviewWithoutCTRL": false, + "linkOpacity": 1, + "openInAdjacentPane": true, + "showSecondOrderLinks": true, + "focusOnFileTab": true, + "openInMainWorkspace": true, + "showLinkBrackets": true, + "allowCtrlClick": true, + "forceWrap": false, + "pageTransclusionCharLimit": 200, + "wordWrappingDefault": 0, + "removeTransclusionQuoteSigns": true, + "iframelyAllowed": true, + "pngExportScale": 1, + "exportWithTheme": true, + "exportWithBackground": true, + "exportPaddingSVG": 10, + "exportEmbedScene": false, + "keepInSync": false, + "autoexportSVG": false, + "autoexportPNG": false, + "autoExportLightAndDark": false, + "autoexportExcalidraw": false, + "embedType": "excalidraw", + "embedMarkdownCommentLinks": true, + "embedWikiLink": true, + "syncExcalidraw": false, + "experimentalFileType": false, + "experimentalFileTag": "✏️", + "experimentalLivePreview": true, + "fadeOutExcalidrawMarkup": false, + "loadPropertySuggestions": true, + "experimentalEnableFourthFont": false, + "experimantalFourthFont": "Virgil", + "addDummyTextElement": false, + "zoteroCompatibility": false, + "fieldSuggester": true, + "compatibilityMode": false, + "drawingOpenCount": 0, + "library": "deprecated", + "library2": { + "type": "excalidrawlib", + "version": 2, + "source": "https://github.com/zsviczian/obsidian-excalidraw-plugin/releases/tag/2.8.3", + "libraryItems": [] + }, + "imageElementNotice": true, + "mdSVGwidth": 500, + "mdSVGmaxHeight": 800, + "mdFont": "Virgil", + "mdFontColor": "Black", + "mdBorderColor": "Black", + "mdCSS": "", + "scriptEngineSettings": {}, + "defaultTrayMode": true, + "previousRelease": "2.8.3", + "showReleaseNotes": true, + "showNewVersionNotification": true, + "latexBoilerplate": "\\color{blue}", + "latexPreambleLocation": "preamble.sty", + "taskboneEnabled": false, + "taskboneAPIkey": "", + "pinnedScripts": [], + "customPens": [ + { + "type": "default", + "freedrawOnly": false, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 0, + "roughness": 0, + "penOptions": { + "highlighter": false, + "constantPressure": false, + "hasOutline": false, + "outlineWidth": 1, + "options": { + "thinning": 0.6, + "smoothing": 0.5, + "streamline": 0.5, + "easing": "easeOutSine", + "start": { + "cap": true, + "taper": 0, + "easing": "linear" + }, + "end": { + "cap": true, + "taper": 0, + "easing": "linear" + } + } + } + }, + { + "type": "highlighter", + "freedrawOnly": true, + "strokeColor": "#FFC47C", + "backgroundColor": "#FFC47C", + "fillStyle": "solid", + "strokeWidth": 2, + "roughness": null, + "penOptions": { + "highlighter": true, + "constantPressure": true, + "hasOutline": true, + "outlineWidth": 4, + "options": { + "thinning": 1, + "smoothing": 0.5, + "streamline": 0.5, + "easing": "linear", + "start": { + "taper": 0, + "cap": true, + "easing": "linear" + }, + "end": { + "taper": 0, + "cap": true, + "easing": "linear" + } + } + } + }, + { + "type": "finetip", + "freedrawOnly": false, + "strokeColor": "#3E6F8D", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 0.5, + "roughness": 0, + "penOptions": { + "highlighter": false, + "hasOutline": false, + "outlineWidth": 1, + "constantPressure": true, + "options": { + "smoothing": 0.4, + "thinning": -0.5, + "streamline": 0.4, + "easing": "linear", + "start": { + "taper": 5, + "cap": false, + "easing": "linear" + }, + "end": { + "taper": 5, + "cap": false, + "easing": "linear" + } + } + } + }, + { + "type": "fountain", + "freedrawOnly": false, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 2, + "roughness": 0, + "penOptions": { + "highlighter": false, + "constantPressure": false, + "hasOutline": false, + "outlineWidth": 1, + "options": { + "smoothing": 0.2, + "thinning": 0.6, + "streamline": 0.2, + "easing": "easeInOutSine", + "start": { + "taper": 150, + "cap": true, + "easing": "linear" + }, + "end": { + "taper": 1, + "cap": true, + "easing": "linear" + } + } + } + }, + { + "type": "marker", + "freedrawOnly": true, + "strokeColor": "#B83E3E", + "backgroundColor": "#FF7C7C", + "fillStyle": "dashed", + "strokeWidth": 2, + "roughness": 3, + "penOptions": { + "highlighter": false, + "constantPressure": true, + "hasOutline": true, + "outlineWidth": 4, + "options": { + "thinning": 1, + "smoothing": 0.5, + "streamline": 0.5, + "easing": "linear", + "start": { + "taper": 0, + "cap": true, + "easing": "linear" + }, + "end": { + "taper": 0, + "cap": true, + "easing": "linear" + } + } + } + }, + { + "type": "thick-thin", + "freedrawOnly": true, + "strokeColor": "#CECDCC", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 0, + "roughness": null, + "penOptions": { + "highlighter": true, + "constantPressure": true, + "hasOutline": false, + "outlineWidth": 1, + "options": { + "thinning": 1, + "smoothing": 0.5, + "streamline": 0.5, + "easing": "linear", + "start": { + "taper": 0, + "cap": true, + "easing": "linear" + }, + "end": { + "cap": true, + "taper": true, + "easing": "linear" + } + } + } + }, + { + "type": "thin-thick-thin", + "freedrawOnly": true, + "strokeColor": "#CECDCC", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 0, + "roughness": null, + "penOptions": { + "highlighter": true, + "constantPressure": true, + "hasOutline": false, + "outlineWidth": 1, + "options": { + "thinning": 1, + "smoothing": 0.5, + "streamline": 0.5, + "easing": "linear", + "start": { + "cap": true, + "taper": true, + "easing": "linear" + }, + "end": { + "cap": true, + "taper": true, + "easing": "linear" + } + } + } + }, + { + "type": "default", + "freedrawOnly": false, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 0, + "roughness": 0, + "penOptions": { + "highlighter": false, + "constantPressure": false, + "hasOutline": false, + "outlineWidth": 1, + "options": { + "thinning": 0.6, + "smoothing": 0.5, + "streamline": 0.5, + "easing": "easeOutSine", + "start": { + "cap": true, + "taper": 0, + "easing": "linear" + }, + "end": { + "cap": true, + "taper": 0, + "easing": "linear" + } + } + } + }, + { + "type": "default", + "freedrawOnly": false, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 0, + "roughness": 0, + "penOptions": { + "highlighter": false, + "constantPressure": false, + "hasOutline": false, + "outlineWidth": 1, + "options": { + "thinning": 0.6, + "smoothing": 0.5, + "streamline": 0.5, + "easing": "easeOutSine", + "start": { + "cap": true, + "taper": 0, + "easing": "linear" + }, + "end": { + "cap": true, + "taper": 0, + "easing": "linear" + } + } + } + }, + { + "type": "default", + "freedrawOnly": false, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 0, + "roughness": 0, + "penOptions": { + "highlighter": false, + "constantPressure": false, + "hasOutline": false, + "outlineWidth": 1, + "options": { + "thinning": 0.6, + "smoothing": 0.5, + "streamline": 0.5, + "easing": "easeOutSine", + "start": { + "cap": true, + "taper": 0, + "easing": "linear" + }, + "end": { + "cap": true, + "taper": 0, + "easing": "linear" + } + } + } + } + ], + "numberOfCustomPens": 0, + "pdfScale": 4, + "pdfBorderBox": true, + "pdfFrame": false, + "pdfGapSize": 20, + "pdfGroupPages": false, + "pdfLockAfterImport": true, + "pdfNumColumns": 1, + "pdfNumRows": 1, + "pdfDirection": "right", + "pdfImportScale": 0.3, + "gridSettings": { + "DYNAMIC_COLOR": true, + "COLOR": "#000000", + "OPACITY": 50 + }, + "laserSettings": { + "DECAY_LENGTH": 50, + "DECAY_TIME": 1000, + "COLOR": "#ff0000" + }, + "embeddableMarkdownDefaults": { + "useObsidianDefaults": false, + "backgroundMatchCanvas": false, + "backgroundMatchElement": true, + "backgroundColor": "#fff", + "backgroundOpacity": 60, + "borderMatchElement": true, + "borderColor": "#fff", + "borderOpacity": 0, + "filenameVisible": false + }, + "markdownNodeOneClickEditing": false, + "canvasImmersiveEmbed": true, + "startupScriptPath": "", + "openAIAPIToken": "", + "openAIDefaultTextModel": "gpt-3.5-turbo-1106", + "openAIDefaultVisionModel": "gpt-4o", + "openAIDefaultImageGenerationModel": "dall-e-3", + "openAIURL": "https://api.openai.com/v1/chat/completions", + "openAIImageGenerationURL": "https://api.openai.com/v1/images/generations", + "openAIImageEditsURL": "https://api.openai.com/v1/images/edits", + "openAIImageVariationURL": "https://api.openai.com/v1/images/variations", + "modifierKeyConfig": { + "Mac": { + "LocalFileDragAction": { + "defaultAction": "image-import", + "rules": [ + { + "shift": false, + "ctrl_cmd": false, + "alt_opt": false, + "meta_ctrl": false, + "result": "image-import" + }, + { + "shift": true, + "ctrl_cmd": false, + "alt_opt": true, + "meta_ctrl": false, + "result": "link" + }, + { + "shift": true, + "ctrl_cmd": false, + "alt_opt": false, + "meta_ctrl": false, + "result": "image-url" + }, + { + "shift": false, + "ctrl_cmd": false, + "alt_opt": true, + "meta_ctrl": false, + "result": "embeddable" + } + ] + }, + "WebBrowserDragAction": { + "defaultAction": "image-url", + "rules": [ + { + "shift": false, + "ctrl_cmd": false, + "alt_opt": false, + "meta_ctrl": false, + "result": "image-url" + }, + { + "shift": true, + "ctrl_cmd": false, + "alt_opt": true, + "meta_ctrl": false, + "result": "link" + }, + { + "shift": false, + "ctrl_cmd": false, + "alt_opt": true, + "meta_ctrl": false, + "result": "embeddable" + }, + { + "shift": true, + "ctrl_cmd": false, + "alt_opt": false, + "meta_ctrl": false, + "result": "image-import" + } + ] + }, + "InternalDragAction": { + "defaultAction": "link", + "rules": [ + { + "shift": false, + "ctrl_cmd": false, + "alt_opt": false, + "meta_ctrl": false, + "result": "link" + }, + { + "shift": false, + "ctrl_cmd": false, + "alt_opt": false, + "meta_ctrl": true, + "result": "embeddable" + }, + { + "shift": true, + "ctrl_cmd": false, + "alt_opt": false, + "meta_ctrl": false, + "result": "image" + }, + { + "shift": true, + "ctrl_cmd": false, + "alt_opt": false, + "meta_ctrl": true, + "result": "image-fullsize" + } + ] + }, + "LinkClickAction": { + "defaultAction": "new-tab", + "rules": [ + { + "shift": false, + "ctrl_cmd": false, + "alt_opt": false, + "meta_ctrl": false, + "result": "active-pane" + }, + { + "shift": false, + "ctrl_cmd": true, + "alt_opt": false, + "meta_ctrl": false, + "result": "new-tab" + }, + { + "shift": false, + "ctrl_cmd": true, + "alt_opt": true, + "meta_ctrl": false, + "result": "new-pane" + }, + { + "shift": true, + "ctrl_cmd": true, + "alt_opt": true, + "meta_ctrl": false, + "result": "popout-window" + }, + { + "shift": false, + "ctrl_cmd": true, + "alt_opt": false, + "meta_ctrl": true, + "result": "md-properties" + } + ] + } + }, + "Win": { + "LocalFileDragAction": { + "defaultAction": "image-import", + "rules": [ + { + "shift": false, + "ctrl_cmd": false, + "alt_opt": false, + "meta_ctrl": false, + "result": "image-import" + }, + { + "shift": false, + "ctrl_cmd": true, + "alt_opt": false, + "meta_ctrl": false, + "result": "link" + }, + { + "shift": true, + "ctrl_cmd": false, + "alt_opt": false, + "meta_ctrl": false, + "result": "image-url" + }, + { + "shift": true, + "ctrl_cmd": true, + "alt_opt": false, + "meta_ctrl": false, + "result": "embeddable" + } + ] + }, + "WebBrowserDragAction": { + "defaultAction": "image-url", + "rules": [ + { + "shift": false, + "ctrl_cmd": false, + "alt_opt": false, + "meta_ctrl": false, + "result": "image-url" + }, + { + "shift": false, + "ctrl_cmd": true, + "alt_opt": false, + "meta_ctrl": false, + "result": "link" + }, + { + "shift": true, + "ctrl_cmd": true, + "alt_opt": false, + "meta_ctrl": false, + "result": "embeddable" + }, + { + "shift": true, + "ctrl_cmd": false, + "alt_opt": false, + "meta_ctrl": false, + "result": "image-import" + } + ] + }, + "InternalDragAction": { + "defaultAction": "link", + "rules": [ + { + "shift": false, + "ctrl_cmd": false, + "alt_opt": false, + "meta_ctrl": false, + "result": "link" + }, + { + "shift": true, + "ctrl_cmd": true, + "alt_opt": false, + "meta_ctrl": false, + "result": "embeddable" + }, + { + "shift": true, + "ctrl_cmd": false, + "alt_opt": false, + "meta_ctrl": false, + "result": "image" + }, + { + "shift": false, + "ctrl_cmd": true, + "alt_opt": true, + "meta_ctrl": false, + "result": "image-fullsize" + } + ] + }, + "LinkClickAction": { + "defaultAction": "new-tab", + "rules": [ + { + "shift": false, + "ctrl_cmd": false, + "alt_opt": false, + "meta_ctrl": false, + "result": "active-pane" + }, + { + "shift": false, + "ctrl_cmd": true, + "alt_opt": false, + "meta_ctrl": false, + "result": "new-tab" + }, + { + "shift": false, + "ctrl_cmd": true, + "alt_opt": true, + "meta_ctrl": false, + "result": "new-pane" + }, + { + "shift": true, + "ctrl_cmd": true, + "alt_opt": true, + "meta_ctrl": false, + "result": "popout-window" + }, + { + "shift": false, + "ctrl_cmd": true, + "alt_opt": false, + "meta_ctrl": true, + "result": "md-properties" + } + ] + } + } + }, + "slidingPanesSupport": false, + "areaZoomLimit": 1, + "longPressDesktop": 500, + "longPressMobile": 500, + "doubleClickLinkOpenViewMode": true, + "isDebugMode": false, + "rank": "Bronze", + "modifierKeyOverrides": [ + { + "modifiers": [ + "Mod" + ], + "key": "Enter" + }, + { + "modifiers": [ + "Mod" + ], + "key": "k" + }, + { + "modifiers": [ + "Mod" + ], + "key": "G" + } + ], + "showSplashscreen": true, + "pdfSettings": { + "pageSize": "A4", + "pageOrientation": "portrait", + "fitToPage": 1, + "paperColor": "white", + "customPaperColor": "#ffffff", + "alignment": "center", + "margin": "normal" + } +} \ No newline at end of file diff --git a/.obsidian/plugins/obsidian-excalidraw-plugin/main.js b/.obsidian/plugins/obsidian-excalidraw-plugin/main.js new file mode 100644 index 0000000..5674a51 --- /dev/null +++ b/.obsidian/plugins/obsidian-excalidraw-plugin/main.js @@ -0,0 +1,10 @@ +"use strict";var obsidian_module=require("obsidian"),state=require("@codemirror/state"),view=require("@codemirror/view");const INITIAL_TIMESTAMP=Date.now();var LZString=function(){var r=String.fromCharCode,o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-$",e={};function t(r,o){if(!e[r]){e[r]={};for(var n=0;n>>8,n[2*e+1]=s%256}return n},decompressFromUint8Array:function(o){if(null==o)return i.decompress(o);for(var n=new Array(o.length/2),e=0,t=n.length;e>=1}else{for(t=1,e=0;e>=1}0==--l&&(l=Math.pow(2,h),h++),delete u[c]}else for(t=s[c],e=0;e>=1;0==--l&&(l=Math.pow(2,h),h++),s[p]=f++,c=String(a)}if(""!==c){if(Object.prototype.hasOwnProperty.call(u,c)){if(c.charCodeAt(0)<256){for(e=0;e>=1}else{for(t=1,e=0;e>=1}0==--l&&(l=Math.pow(2,h),h++),delete u[c]}else for(t=s[c],e=0;e>=1;0==--l&&(l=Math.pow(2,h),h++)}for(t=2,e=0;e>=1;for(;;){if(m<<=1,v==o-1){d.push(n(m));break}v++}return d.join("")},decompress:function(r){return null==r?"":""==r?null:i._decompress(r.length,32768,function(o){return r.charCodeAt(o)})},_decompress:function(o,n,e){var t,i,s,u,a,p,c,l=[],f=4,h=4,d=3,m="",v=[],g={val:e(0),position:n,index:1};for(t=0;t<3;t+=1)l[t]=t;for(s=0,a=Math.pow(2,2),p=1;p!=a;)u=g.val&g.position,g.position>>=1,0==g.position&&(g.position=n,g.val=e(g.index++)),s|=(u>0?1:0)*p,p<<=1;switch(s){case 0:for(s=0,a=Math.pow(2,8),p=1;p!=a;)u=g.val&g.position,g.position>>=1,0==g.position&&(g.position=n,g.val=e(g.index++)),s|=(u>0?1:0)*p,p<<=1;c=r(s);break;case 1:for(s=0,a=Math.pow(2,16),p=1;p!=a;)u=g.val&g.position,g.position>>=1,0==g.position&&(g.position=n,g.val=e(g.index++)),s|=(u>0?1:0)*p,p<<=1;c=r(s);break;case 2:return""}for(l[3]=c,i=c,v.push(c);;){if(g.index>o)return"";for(s=0,a=Math.pow(2,d),p=1;p!=a;)u=g.val&g.position,g.position>>=1,0==g.position&&(g.position=n,g.val=e(g.index++)),s|=(u>0?1:0)*p,p<<=1;switch(c=s){case 0:for(s=0,a=Math.pow(2,8),p=1;p!=a;)u=g.val&g.position,g.position>>=1,0==g.position&&(g.position=n,g.val=e(g.index++)),s|=(u>0?1:0)*p,p<<=1;l[h++]=r(s),c=h-1,f--;break;case 1:for(s=0,a=Math.pow(2,16),p=1;p!=a;)u=g.val&g.position,g.position>>=1,0==g.position&&(g.position=n,g.val=e(g.index++)),s|=(u>0?1:0)*p,p<<=1;l[h++]=r(s),c=h-1,f--;break;case 2:return v.join("")}if(0==f&&(f=Math.pow(2,d),d++),l[c])m=l[c];else{if(c!==h)return null;m=i+i.charAt(0)}v.push(m),l[h++]=i+m.charAt(0),i=m,0==--f&&(f=Math.pow(2,d),d++)}}};return i}();"function"==typeof define&&define.amd?define(function(){return LZString}):"undefined"!=typeof module&&null!=module?module.exports=LZString:"undefined"!=typeof angular&&null!=angular&&angular.module("LZString",[]).factory("LZString",function(){return LZString}); +let REACT_PACKAGES = `!function(){var e,t;e=this,t=function(e){function M(e){return null!==e&&"object"==typeof e&&"function"==typeof(e=te&&e[te]||e["@@iterator"])?e:null}function t(e,t,n){this.props=e,this.context=t,this.refs=oe,this.updater=n||ne}function n(){}function r(e,t,n){this.props=e,this.context=t,this.refs=oe,this.updater=n||ne}function o(e,t,n){var r,o={},u=null,a=null;if(null!=t)for(r in void 0!==t.ref&&(a=t.ref),void 0!==t.key&&(u=""+t.key),t)ae.call(t,r)&&!ie.hasOwnProperty(r)&&(o[r]=t[r]);var i=arguments.length-2;if(1===i)o.children=n;else if(1>>1,o=e[r];if(!(0>>1;rt)||e&&!q());){var r,o=R.callback;"function"==typeof o?(R.callback=null,P=R.priorityLevel,r=o(R.expirationTime<=t),t=v(),"function"==typeof r?R.callback=r:R===i(C)&&l(C),y(t)):l(C),R=i(C)}var u,a=null!==R||(null!==(u=i(E))&&_(d,u.startTime-t),!1);return a}finally{R=null,P=n,$=!1}}function q(){return!(v()-de")?l.replace("",n.displayName):l}while(1<=u&&0<=i);break}}}finally{xo=!1,Error.prepareStackTrace=t}return(n=n?n.displayName||n.name:"")?Q(n):""}function $(e){switch(e.tag){case 5:return Q(e.type);case 16:return Q("Lazy");case 13:return Q("Suspense");case 19:return Q("SuspenseList");case 0:case 2:case 15:return e=j(e.type,!1);case 11:return e=j(e.type.render,!1);case 1:return e=j(e.type,!0);default:return""}}function q(e){if(null!=e){if("function"==typeof e)return e.displayName||e.name||null;if("string"==typeof e)return e;switch(e){case co:return"Fragment";case so:return"Portal";case po:return"Profiler";case fo:return"StrictMode";case yo:return"Suspense";case vo:return"SuspenseList"}if("object"==typeof e)switch(e.$$typeof){case ho:return(e.displayName||"Context")+".Consumer";case mo:return(e._context.displayName||"Context")+".Provider";case go:var n=e.render;return e=(e=e.displayName)?e:""!==(e=n.displayName||n.name||"")?"ForwardRef("+e+")":"ForwardRef";case bo:return null!==(n=e.displayName||null)?n:q(e.type)||"Memo";case ko:n=e._payload,e=e._init;try{return q(e(n))}catch(e){}}}return null}function K(e){var n=e.type;switch(e.tag){case 24:return"Cache";case 9:return(n.displayName||"Context")+".Consumer";case 10:return(n._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=(e=n.render).displayName||e.name||"",n.displayName||(""!==e?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return n;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return q(n);case 8:return n===fo?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if("function"==typeof n)return n.displayName||n.name||null;if("string"==typeof n)return n}return null}function Y(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":case"object":return e;default:return""}}function X(e){var n=e.type;return(e=e.nodeName)&&"input"===e.toLowerCase()&&("checkbox"===n||"radio"===n)}function G(e){var n,t,r=X(e)?"checked":"value",l=Object.getOwnPropertyDescriptor(e.constructor.prototype,r),a=""+e[r];if(!e.hasOwnProperty(r)&&void 0!==l&&"function"==typeof l.get&&"function"==typeof l.set)return n=l.get,t=l.set,Object.defineProperty(e,r,{configurable:!0,get:function(){return n.call(this)},set:function(e){a=""+e,t.call(this,e)}}),Object.defineProperty(e,r,{enumerable:l.enumerable}),{getValue:function(){return a},setValue:function(e){a=""+e},stopTracking:function(){e._valueTracker=null,delete e[r]}}}function Z(e){e._valueTracker||(e._valueTracker=G(e))}function J(e){var n,t,r;return!(!e||(n=e._valueTracker)&&(t=n.getValue(),r="",(e=r=e?X(e)?e.checked?"true":"false":e.value:r)===t||(n.setValue(e),0)))}function ee(n){if(void 0===(n=n||("undefined"!=typeof document?document:void 0)))return null;try{return n.activeElement||n.body}catch(e){return n.body}}function ne(e,n){var t=n.checked;return g({},n,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=t?t:e._wrapperState.initialChecked})}function te(e,n){var t=null==n.defaultValue?"":n.defaultValue,r=null!=n.checked?n.checked:n.defaultChecked,t=Y(null!=n.value?n.value:t);e._wrapperState={initialChecked:r,initialValue:t,controlled:"checkbox"===n.type||"radio"===n.type?null!=n.checked:null!=n.value}}function re(e,n){null!=(n=n.checked)&&B(e,"checked",n,!1)}function le(e,n){re(e,n);var t=Y(n.value),r=n.type;if(null!=t)"number"===r?(0===t&&""===e.value||e.value!=t)&&(e.value=""+t):e.value!==""+t&&(e.value=""+t);else if("submit"===r||"reset"===r)return void e.removeAttribute("value");n.hasOwnProperty("value")?oe(e,n.type,t):n.hasOwnProperty("defaultValue")&&oe(e,n.type,Y(n.defaultValue)),null==n.checked&&null!=n.defaultChecked&&(e.defaultChecked=!!n.defaultChecked)}function ae(e,n,t){if(n.hasOwnProperty("value")||n.hasOwnProperty("defaultValue")){var r=n.type;if(("submit"===r||"reset"===r)&&null==n.value)return;n=""+e._wrapperState.initialValue,t||n===e.value||(e.value=n),e.defaultValue=n}""!==(t=e.name)&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,""!==t&&(e.name=t)}function oe(e,n,t){"number"===n&&ee(e.ownerDocument)===e||(null==t?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+t&&(e.defaultValue=""+t))}function ue(e,n,t,r){if(e=e.options,n){n={};for(var l=0;l>>=0)?32:31-(iu(e)/su|0)|0}function Re(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return 4194240&e;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return 130023424&e;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function De(e,n){var t=e.pendingLanes;if(0===t)return 0;var r,l=0,a=e.suspendedLanes,o=e.pingedLanes,u=268435455&t;if(0!==u?0!==(r=u&~a)?l=Re(r):0!==(o&=u)&&(l=Re(o)):0!==(u=t&~a)?l=Re(u):0!==o&&(l=Re(o)),0===l)return 0;if(0!==n&&n!==l&&0==(n&a)&&((o=n&-n)<=(a=l&-l)||16===a&&0!=(4194240&o)))return n;if(0!=(4&l)&&(l|=16&t),0!==(n=e.entangledLanes))for(e=e.entanglements,n&=l;0>=r,a-=r,Xi=1<<32-uu(n)+a|t<u?(i=o,o=null):i=o.sibling;var s=y(n,o,t[u],r);if(null===s){null===o&&(o=i);break}f&&o&&null===s.alternate&&d(n,o),e=h(s,e,u),null===a?l=s:a.sibling=s,a=s,o=i}if(u===t.length)p(n,o);else if(null===o)for(;uu?(i=o,o=null):i=o.sibling;var c=y(n,o,s.value,r);if(null===c){null===o&&(o=i);break}f&&o&&null===c.alternate&&d(n,o),e=h(c,e,u),null===a?l=c:a.sibling=c,a=c,o=i}if(s.done)p(n,o);else if(null===o)for(;!s.done;u++,s=t.next())null!==(s=g(n,s.value,r))&&(e=h(s,e,u),null===a?l=s:a.sibling=s,a=s);else{for(o=m(n,o);!s.done;u++,s=t.next())null!==(s=v(o,n,u,s.value,r))&&(f&&null!==s.alternate&&o.delete(null===s.key?u:s.key),e=h(s,e,u),null===a?l=s:a.sibling=s,a=s);f&&o.forEach(function(e){return d(n,e)})}return E&&vt(n,u),l}function w(e,n,t,r){if("object"==typeof(t="object"==typeof t&&null!==t&&t.type===co&&null===t.key?t.props.children:t)&&null!==t){switch(t.$$typeof){case io:e:{for(var l=t.key,a=n;null!==a;){if(a.key===l){if((l=t.type)===co){if(7===a.tag){p(e,a.sibling),(n=o(a,t.props.children)).return=e,e=n;break e}}else if(a.elementType===l||"object"==typeof l&&null!==l&&l.$$typeof===ko&&Mt(l)===a.type){p(e,a.sibling),(n=o(a,t.props)).ref=Lt(e,a,t),n.return=e,e=n;break e}p(e,a);break}d(e,a),a=a.sibling}e=t.type===co?((n=za(t.props.children,e.mode,r,t.key)).return=e,n):((r=Na(t.type,t.key,t.props,null,e.mode,r)).ref=Lt(e,n,t),r.return=e,r)}return u(e);case so:e:{for(a=t.key;null!==n;){if(n.key===a){if(4===n.tag&&n.stateNode.containerInfo===t.containerInfo&&n.stateNode.implementation===t.implementation){p(e,n.sibling),(n=o(n,t.children||[])).return=e,e=n;break e}p(e,n);break}d(e,n),n=n.sibling}(n=La(t,e.mode,r)).return=e,e=n}return u(e);case ko:return w(e,n,(a=t._init)(t._payload),r)}if(Eo(t))return b(e,n,t,r);if(H(t))return k(e,n,t,r);Tt(e,t)}return"string"==typeof t&&""!==t||"number"==typeof t?(t=""+t,(n=null!==n&&6===n.tag?(p(e,n.sibling),o(n,t)):(p(e,n),_a(t,e.mode,r))).return=e,u(e=n)):p(e,n)}return w}function Rt(){os=as=ls=null}function Dt(e,n){n=rs.current,s(rs),e._currentValue=n}function Ot(e,n,t){for(;null!==e;){var r=e.alternate;if((e.childLanes&n)!==n?(e.childLanes|=n,null!==r&&(r.childLanes|=n)):null!==r&&(r.childLanes&n)!==n&&(r.childLanes|=n),e===t)break;e=e.return}}function It(e,n){(os=as=null)!==(e=(ls=e).dependencies)&&null!==e.firstContext&&(0!=(e.lanes&n)&&(_=!0),e.firstContext=null)}function Ut(e){var n=e._currentValue;if(os!==e)if(e={context:e,memoizedValue:n,next:null},null===as){if(null===ls)throw Error(S(308));as=e,ls.dependencies={lanes:0,firstContext:e}}else as=as.next=e;return n}function Vt(e){null===us?us=[e]:us.push(e)}function At(e,n,t,r){var l=n.interleaved;return null===l?(t.next=t,Vt(n)):(t.next=l.next,l.next=t),n.interleaved=t,Wt(e,r)}function Wt(e,n){e.lanes|=n;var t=e.alternate;for(null!==t&&(t.lanes|=n),e=(t=e).return;null!==e;)e.childLanes|=n,null!==(t=e.alternate)&&(t.childLanes|=n),e=(t=e).return;return 3===t.tag?t.stateNode:null}function Bt(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function Ht(e,n){e=e.updateQueue,n.updateQueue===e&&(n.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function Qt(e,n){return{eventTime:e,lane:n,tag:0,payload:null,callback:null,next:null}}function jt(e,n,t){var r,l=e.updateQueue;return null===l?null:(l=l.shared,(0!=(2&F)?(null===(r=l.pending)?n.next=n:(n.next=r.next,r.next=n),l.pending=n,is):(null===(r=l.interleaved)?(n.next=n,Vt(l)):(n.next=r.next,r.next=n),l.interleaved=n,Wt))(e,t))}function $t(e,n,t){var r;null!==(n=n.updateQueue)&&(n=n.shared,0!=(4194240&t))&&(r=n.lanes,r&=e.pendingLanes,He(e,n.lanes=t|=r))}function qt(e,n){var t=e.updateQueue,r=e.alternate;if(null!==r&&t===(r=r.updateQueue)){var l=null,a=null;if(null!==(t=t.firstBaseUpdate)){do{var o={eventTime:t.eventTime,lane:t.lane,tag:t.tag,payload:t.payload,callback:t.callback,next:null}}while(null===a?l=a=o:a=a.next=o,null!==(t=t.next));null===a?l=a=n:a=a.next=n}else l=a=n;t={baseState:r.baseState,firstBaseUpdate:l,lastBaseUpdate:a,shared:r.shared,effects:r.effects},e.updateQueue=t}else null===(e=t.lastBaseUpdate)?t.firstBaseUpdate=n:e.next=n,t.lastBaseUpdate=n}function Kt(e,n,t,r){var l,a,o=e.updateQueue,u=(ss=!1,o.firstBaseUpdate),i=o.lastBaseUpdate;if(null!==(f=o.shared.pending)&&(o.shared.pending=null,a=(l=f).next,(l.next=null)===i?u=a:i.next=a,i=l,null!==(c=e.alternate))&&(f=(c=c.updateQueue).lastBaseUpdate)!==i&&(null===f?c.firstBaseUpdate=a:f.next=a,c.lastBaseUpdate=l),null!==u){for(var s=o.baseState,i=0,c=a=l=null,f=u;;){var d=f.lane,p=f.eventTime;if((r&d)===d){null!==c&&(c=c.next={eventTime:p,lane:0,tag:f.tag,payload:f.payload,callback:f.callback,next:null});e:{var m=e,h=f,d=n,p=t;switch(h.tag){case 1:if("function"==typeof(m=h.payload)){s=m.call(p,s,d);break e}s=m;break e;case 3:m.flags=-65537&m.flags|128;case 0:if(null==(d="function"==typeof(m=h.payload)?m.call(p,s,d):m))break e;s=g({},s,d);break e;case 2:ss=!0}}null!==f.callback&&0!==f.lane&&(e.flags|=64,null===(d=o.effects)?o.effects=[f]:d.push(f))}else p={eventTime:p,lane:d,tag:f.tag,payload:f.payload,callback:f.callback,next:null},null===c?(a=c=p,l=s):c=c.next=p,i|=d;if(null===(f=f.next)){if(null===(f=o.shared.pending))break;f=(d=f).next,d.next=null,o.lastBaseUpdate=d,o.shared.pending=null}}if(null===c&&(l=s),o.baseState=l,o.firstBaseUpdate=a,o.lastBaseUpdate=c,null!==(n=o.shared.interleaved))for(o=n;i|=o.lane,(o=o.next)!==n;);else null===u&&(o.shared.lanes=0);Qs|=i,e.lanes=i,e.memoizedState=s}}function Yt(e,n,t){if(e=n.effects,(n.effects=null)!==e)for(n=0;n<\\/script>",e=e.removeChild(e.firstChild)):"string"==typeof r.is?e=o.createElement(t,{is:r.is}):(e=o.createElement(t),"select"===t&&(o=e,r.multiple?o.multiple=!0:r.size&&(o.size=r.size))):e=o.createElementNS(e,t),e[Li]=n,e[Ti]=r,Ls(e,n,!1,!1),n.stateNode=e;e:{switch(o=ye(t,r),t){case"dialog":c("cancel",e),c("close",e),a=r;break;case"iframe":case"object":case"embed":c("load",e),a=r;break;case"video":case"audio":for(a=0;aYs&&(n.flags|=128,wl(i,!(r=!0)),n.lanes=4194304)}else{if(!r)if(null!==(e=nr(o))){if(n.flags|=128,r=!0,null!==(t=e.updateQueue)&&(n.updateQueue=t,n.flags|=4),wl(i,!0),null===i.tail&&"hidden"===i.tailMode&&!o.alternate&&!E)return p(n),null}else 2*y()-i.renderingStartTime>Ys&&1073741824!==t&&(n.flags|=128,wl(i,!(r=!0)),n.lanes=4194304);i.isBackwards?(o.sibling=n.child,n.child=o):(null!==(t=i.last)?t.sibling=o:n.child=o,i.last=o)}if(null!==i.tail)return n=i.tail,i.rendering=n,i.tail=n.sibling,i.renderingStartTime=y(),n.sibling=null,t=C.current,f(C,r?1&t|2:1&t),n}return p(n),null;case 22:case 23:return O=Bs.current,s(Bs),r=null!==n.memoizedState,null!==e&&null!==e.memoizedState!==r&&(n.flags|=8192),r&&0!=(1&n.mode)?0!=(1073741824&O)&&(p(n),6&n.subtreeFlags)&&(n.flags|=8192):p(n),null;case 24:case 25:return null}throw Error(S(156,n.tag))}function xl(e,n,t){switch(wt(n),n.tag){case 1:return h(n.type)&&(s(b),s(v)),65536&(e=n.flags)?(n.flags=-65537&e|128,n):null;case 3:return Zt(),s(b),s(v),tr(),0!=(65536&(e=n.flags))&&0==(128&e)?(n.flags=-65537&e|128,n):null;case 5:return er(n),null;case 13:if(s(C),null!==(e=n.memoizedState)&&null!==e.dehydrated){if(null===n.alternate)throw Error(S(340));Pt()}return 65536&(e=n.flags)?(n.flags=-65537&e|128,n):null;case 19:return s(C),null;case 4:return Zt(),null;case 10:return Dt(n.type._context),null;case 22:case 23:return O=Bs.current,s(Bs),null;default:return null}}function El(n,t){var e=n.ref;if(null!==e)if("function"==typeof e)try{e(null)}catch(e){w(n,t,e)}else e.current=null}function Cl(n,t,e){try{e()}catch(e){w(n,t,e)}}function Nl(e,n){if(Ei=Su,Dn(e=Rn())){if("selectionStart"in e)var t={start:e.selectionStart,end:e.selectionEnd};else e:if((a=(t=(t=e.ownerDocument)&&t.defaultView||window).getSelection&&t.getSelection())&&0!==a.rangeCount){var t=a.anchorNode,r=a.anchorOffset,l=a.focusNode,a=a.focusOffset;try{t.nodeType,l.nodeType}catch(e){t=null;break e}var o,u=0,i=-1,s=-1,c=0,f=0,d=e,p=null;n:for(;;){for(;d!==t||0!==r&&3!==d.nodeType||(i=u+r),d!==l||0!==a&&3!==d.nodeType||(s=u+a),3===d.nodeType&&(u+=d.nodeValue.length),null!==(o=d.firstChild);)p=d,d=o;for(;;){if(d===e)break n;if(p===t&&++c===r&&(i=u),p===l&&++f===a&&(s=u),null!==(o=d.nextSibling))break;p=(d=p).parentNode}d=o}t=-1===i||-1===s?null:{start:i,end:s}}else t=null;t=t||{start:0,end:0}}else t=null;for(Su=!(Ci={focusedElem:e,selectionRange:t}),T=n;null!==T;)if(e=(n=T).child,0!=(1028&n.subtreeFlags)&&null!==e)e.return=n,T=e;else for(;null!==T;){n=T;try{var m,h,g,y,v=n.alternate;if(0!=(1024&n.flags))switch(n.tag){case 0:case 11:case 15:break;case 1:null!==v&&(m=v.memoizedProps,h=v.memoizedState,y=(g=n.stateNode).getSnapshotBeforeUpdate(n.elementType===n.type?m:Ar(n.type,m),h),g.__reactInternalSnapshotBeforeUpdate=y);break;case 3:var b=n.stateNode.containerInfo;1===b.nodeType?b.textContent="":9===b.nodeType&&b.documentElement&&b.removeChild(b.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(S(163))}}catch(e){w(n,n.return,e)}if(null!==(e=n.sibling)){e.return=n.return,T=e;break}T=n.return}return v=Os,Os=!1,v}function zl(e,n,t){var r=n.updateQueue;if(null!==(r=null!==r?r.lastEffect:null)){var l,a=r=r.next;do{}while((a.tag&e)===e&&(l=a.destroy,(a.destroy=void 0)!==l)&&Cl(n,t,l),(a=a.next)!==r)}}function Pl(e,n){if(null!==(n=null!==(n=n.updateQueue)?n.lastEffect:null)){var t,r=n=n.next;do{}while((r.tag&e)===e&&(t=r.create,r.destroy=t()),(r=r.next)!==n)}}function _l(e){var n,t=e.ref;null!==t&&(n=e.stateNode,e.tag,e=n,"function"==typeof t?t(e):t.current=e)}function Ll(e){var n=e.alternate;null!==n&&(e.alternate=null,Ll(n)),e.child=null,e.deletions=null,e.sibling=null,5===e.tag&&null!==(n=e.stateNode)&&(delete n[Li],delete n[Ti],delete n[Fi],delete n[Ri],delete n[Di]),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function Tl(e){return 5===e.tag||3===e.tag||4===e.tag}function Ml(e){e:for(;;){for(;null===e.sibling;){if(null===e.return||Tl(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;5!==e.tag&&6!==e.tag&&18!==e.tag;){if(2&e.flags)continue e;if(null===e.child||4===e.tag)continue e;e=(e.child.return=e).child}if(!(2&e.flags))return e.stateNode}}function Fl(e,n,t){var r=e.tag;if(5===r||6===r)e=e.stateNode,n?(8===t.nodeType?t.parentNode:t).insertBefore(e,n):(8===t.nodeType?(n=t.parentNode).insertBefore(e,t):(n=t).appendChild(e),null==(t=t._reactRootContainer)&&null===n.onclick&&(n.onclick=Jn));else if(4!==r&&null!==(e=e.child))for(Fl(e,n,t),e=e.sibling;null!==e;)Fl(e,n,t),e=e.sibling}function Rl(e,n,t){var r=e.tag;if(5===r||6===r)e=e.stateNode,n?t.insertBefore(e,n):t.appendChild(e);else if(4!==r&&null!==(e=e.child))for(Rl(e,n,t),e=e.sibling;null!==e;)Rl(e,n,t),e=e.sibling}function Dl(e,n,t){for(t=t.child;null!==t;)Ol(e,n,t),t=t.sibling}function Ol(e,n,t){if(ou&&"function"==typeof ou.onCommitFiberUnmount)try{ou.onCommitFiberUnmount(au,t)}catch(e){}switch(t.tag){case 5:L||El(t,n);case 6:var r=M,l=Is;M=null,Dl(e,n,t),Is=l,null!==(M=r)&&(Is?(e=M,t=t.stateNode,(8===e.nodeType?e.parentNode:e).removeChild(t)):M.removeChild(t.stateNode));break;case 18:null!==M&&(Is?(e=M,t=t.stateNode,8===e.nodeType?tt(e.parentNode,t):1===e.nodeType&&tt(e,t),Je(e)):tt(M,t.stateNode));break;case 4:r=M,l=Is,M=t.stateNode.containerInfo,Is=!0,Dl(e,n,t),M=r,Is=l;break;case 0:case 11:case 14:case 15:if(!L&&null!==(r=t.updateQueue)&&null!==(r=r.lastEffect)){l=r=r.next;do{var a=(o=l).destroy,o=o.tag}while(void 0===a||0==(2&o)&&0==(4&o)||Cl(t,n,a),(l=l.next)!==r)}Dl(e,n,t);break;case 1:if(!L&&(El(t,n),"function"==typeof(r=t.stateNode).componentWillUnmount))try{r.props=t.memoizedProps,r.state=t.memoizedState,r.componentWillUnmount()}catch(e){w(t,n,e)}Dl(e,n,t);break;case 21:Dl(e,n,t);break;case 22:1&t.mode?(L=(r=L)||null!==t.memoizedState,Dl(e,n,t),L=r):Dl(e,n,t);break;default:Dl(e,n,t)}}function Il(t){var r,e=t.updateQueue;null!==e&&((t.updateQueue=null)===(r=t.stateNode)&&(r=t.stateNode=new Ds),e.forEach(function(e){var n=ka.bind(null,t,e);r.has(e)||(r.add(e),e.then(n,n))}))}function Ul(e,n,t){if(null!==(t=n.deletions))for(var r=0;r
GitHub.",NEWVERSION_NOTIFICATION_NAME:"Plugin update notification",NEWVERSION_NOTIFICATION_DESC:"Toggle ON: Show a notification when a new version of the plugin is available.
Toggle OFF: Silent mode. You need to check for plugin updates in Community Plugins.",BASIC_HEAD:"Basic",BASIC_DESC:'In the "Basic" settings, you can configure options such as displaying release notes after updates, receiving plugin update notifications, setting the default location for new drawings, specifying the Excalidraw folder for embedding drawings into active documents, defining an Excalidraw template file, and designating an Excalidraw Automate script folder for managing automation scripts.',FOLDER_NAME:"Excalidraw folder (CAsE sEnsITive!)",FOLDER_DESC:"Default location for new drawings. If empty, drawings will be created in the Vault root.",CROP_PREFIX_NAME:"Crop file prefix",CROP_PREFIX_DESC:"The first part of the filename for new drawings created when cropping an image. If empty the default 'cropped_' will be used.",ANNOTATE_PREFIX_NAME:"Annotation file prefix",ANNOTATE_PREFIX_DESC:"The first part of the filename for new drawings created when annotating an image. If empty the default 'annotated_' will be used.",ANNOTATE_PRESERVE_SIZE_NAME:"Preserve image size when annotating",ANNOTATE_PRESERVE_SIZE_DESC:"When annotating an image in markdown the replacment image link will include the width of the original image.",CROP_FOLDER_NAME:"Crop file folder (CaSE senSItive!)",CROP_FOLDER_DESC:"Default location for new drawings created when cropping an image. If empty, drawings will be created following the Vault attachments settings.",ANNOTATE_FOLDER_NAME:"Image annotation file folder (CaSe SeNSitIVe!)",ANNOTATE_FOLDER_DESC:"Default location for new drawings created when annotating an image. If empty, drawings will be created following the Vault attachments settings.",FOLDER_EMBED_NAME:"Use Excalidraw folder when embedding a drawing into the active document",FOLDER_EMBED_DESC:"Define which folder to place the newly inserted drawing into when using the command palette action: 'Create a new drawing and embed into active document'.
Toggle ON: Use Excalidraw folder
Toggle OFF: Use the attachments folder defined in Obsidian settings.",TEMPLATE_NAME:"Excalidraw template file or folder (caSe SenSiTive!)",TEMPLATE_DESC:"Full filepath or folderpath to the Excalidraw template.
Template File:E.g.: If your template is in the default Excalidraw folder and its name is Template.md, the setting would be: Excalidraw/Template.md (or just Excalidraw/Template - you may omit the .md file extension). If you are using Excalidraw in compatibility mode, then your template must be a legacy Excalidraw file as well such as Excalidraw/Template.excalidraw.
Template Folder: You can also set a folder as your template. In this case you will be prompted which tempalte to use when creating a new drawing.
Pro Tip: If you are using the Obsidian Templater plugin, you can add Templater code to your different Excalidraw templates to automate configuration of your drawings.",SCRIPT_FOLDER_NAME:"Excalidraw Automate script folder (CASE SeNSitiVE!)",SCRIPT_FOLDER_DESC:"The files you place in this folder will be treated as Excalidraw Automate scripts. You can access your scripts from Excalidraw via the Obsidian Command Palette. Assign hotkeys to your favorite scripts just like to any other Obsidian command. The folder may not be the root folder of your Vault. ",AI_HEAD:"AI Settings - Experimental",AI_DESC:'In the "AI" settings, you can configure options for using OpenAI\'s GPT API. While the OpenAI API is in beta, its use is strictly limited — as such we require you use your own API key. You can create an OpenAI account, add a small credit (5 USD minimum), and generate your own API key. Once API key is set, you can use the AI tools in Excalidraw.',AI_OPENAI_TOKEN_NAME:"OpenAI API key",AI_OPENAI_TOKEN_DESC:"You can get your OpenAI API key from your OpenAI account.",AI_OPENAI_TOKEN_PLACEHOLDER:"Enter your OpenAI API key here",AI_OPENAI_DEFAULT_MODEL_NAME:"Default AI model",AI_OPENAI_DEFAULT_MODEL_DESC:"The default AI model to use when generating text. This is a freetext field, so you can enter any valid OpenAI model name. Find out more about the available models on the OpenAI website.",AI_OPENAI_DEFAULT_MODEL_PLACEHOLDER:"Enter your default AI model here. e.g.: gpt-3.5-turbo-1106",AI_OPENAI_DEFAULT_IMAGE_MODEL_NAME:"Default Image Generation AI model",AI_OPENAI_DEFAULT_IMAGE_MODEL_DESC:"The default AI model to use when generating images. Image editing and variations are only supported by dall-e-2 at this time by OpenAI, for this reason dall-e-2 will automatically be used in such cases regardless of this setting.
This is a freetext field, so you can enter any valid OpenAI model name. Find out more about the available models on the OpenAI website.",AI_OPENAI_DEFAULT_IMAGE_MODEL_PLACEHOLDER:"Enter your default Image Generation AI model here e.g.: dall-e-3",AI_OPENAI_DEFAULT_VISION_MODEL_NAME:"Default AI vision model",AI_OPENAI_DEFAULT_VISION_MODEL_DESC:"The default AI vision model to use when generating text from images. This is a freetext field, so you can enter any valid OpenAI model name. Find out more about the available models on the OpenAI website.",AI_OPENAI_DEFAULT_API_URL_NAME:"OpenAI API URL",AI_OPENAI_DEFAULT_API_URL_DESC:"The default OpenAI API URL. This is a freetext field, so you can enter any valid OpenAI API compatible URL. Excalidraw will use this URL when posting API requests to OpenAI. I am not doing any error handling on this field, so make sure you enter a valid URL and only change this if you know what you are doing. ",AI_OPENAI_DEFAULT_IMAGE_API_URL_NAME:"OpenAI Image Generation API URL",AI_OPENAI_DEFAULT_VISION_MODEL_PLACEHOLDER:"Enter your default AI vision model here. e.g.: gpt-4o",SAVING_HEAD:"Saving",SAVING_DESC:"In the 'Saving' section of Excalidraw Settings, you can configure how your drawings are saved. This includes options for compressing Excalidraw JSON in Markdown, setting autosave intervals for both desktop and mobile, defining filename formats, and choosing whether to use the .excalidraw.md or .md file extension. ",COMPRESS_NAME:"Compress Excalidraw JSON in Markdown",COMPRESS_DESC:"By enabling this feature Excalidraw will store the drawing JSON in a Base64 compressed format using the LZ-String algorithm. This will reduce the chance of Excalidraw JSON cluttering your search results in Obsidian. As a side effect, this will also reduce the filesize of Excalidraw drawings. When you switch an Excalidraw drawing to Markdown view, using the options menu in Excalidraw, the file will be saved without compression, so that you can read and edit the JSON string. The drawing will be compressed again once you switch back to Excalidraw view. The setting only has effect 'point forward', meaning, existing drawings will not be affected by the setting until you open them and save them.
Toggle ON: Compress drawing JSON
Toggle OFF: Leave drawing JSON uncompressed",DECOMPRESS_FOR_MD_NAME:"Decompress Excalidraw JSON in Markdown View",DECOMPRESS_FOR_MD_DESC:"By enabling this feature Excalidraw will automatically decompress the drawing JSON when you switch to Markdown view. This will allow you to easily read and edit the JSON string. The drawing will be compressed again once you switch back to Excalidraw view and save the drawing (CTRL+S).
I recommend switching this feature off as it will result in smaller file sizes and avoiding unnecessary results in Obsidian search. You can always use the 'Excalidraw: Decompress current Excalidraw file' command from the command palette to manually decompress the drawing JSON when you need to read or edit it.",AUTOSAVE_INTERVAL_DESKTOP_NAME:"Interval for autosave on Desktop",AUTOSAVE_INTERVAL_DESKTOP_DESC:"The time interval between saves. Autosave will skip if there are no changes in the drawing. Excalidraw will also save the file when closing a workspace tab or navigating within Obsidian, but away from the active Excalidraw tab (i.e. clicking on the Obsidian ribbon or checking backlinks, etc.). Excalidraw will not be able to save your work when terminating Obsidian directly either by killing the Obsidian process, or clicking to close Obsidian altogether.",AUTOSAVE_INTERVAL_MOBILE_NAME:"Interval for autosave on Mobile",AUTOSAVE_INTERVAL_MOBILE_DESC:"I recommend a more frequent interval for Mobiles. Excalidraw will also save the file when closing a workspace tab or navigating within Obsidian, but away from the active Excalidraw tab (i.e. tapping on the Obsidian ribbon or checking backlinks, etc.). Excalidraw will not be able to save your work when terminating Obsidian directly (i.e. swiping it away). Also note, that when you switch apps on a Mobile device, sometimes Android and iOS closes Obsidian in the background to save system resources. In such a case Excalidraw will not be able to save the latest changes.",FILENAME_HEAD:"Filename",FILENAME_DESC:"