openc3-cosmos-tool-docs 6.8.1 → 6.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +5 -5
- data/Rakefile +1 -1
- data/tools/staticdocs/404.html +2 -2
- data/tools/staticdocs/assets/css/styles.946be27d.css +1 -0
- data/tools/staticdocs/assets/js/019369f3.64763f3d.js +1 -0
- data/tools/staticdocs/assets/js/058ffc22.4be515f5.js +1 -0
- data/tools/staticdocs/assets/js/0686a885.3d58085e.js +1 -0
- data/tools/staticdocs/assets/js/078dbab0.f2cbcc66.js +1 -0
- data/tools/staticdocs/assets/js/{0f5d161c.0727eb1b.js → 0f5d161c.978b9fee.js} +1 -1
- data/tools/staticdocs/assets/js/0ff569c9.27128023.js +1 -0
- data/tools/staticdocs/assets/js/10209fc9.669ef887.js +1 -0
- data/tools/staticdocs/assets/js/103cc3be.1a538098.js +1 -0
- data/tools/staticdocs/assets/js/{13196248.9e1ebaa5.js → 13196248.f932d5bd.js} +1 -1
- data/tools/staticdocs/assets/js/{13c1b4e4.6446ccbc.js → 13c1b4e4.9735bb59.js} +1 -1
- data/tools/staticdocs/assets/js/1c0a0c05.427f2699.js +1 -0
- data/tools/staticdocs/assets/js/{1e02e6a3.a89f2446.js → 1e02e6a3.da7b7250.js} +1 -1
- data/tools/staticdocs/assets/js/{2047b354.0955283c.js → 2047b354.c86efa5f.js} +1 -1
- data/tools/staticdocs/assets/js/22b3ac48.1932e5a5.js +1 -0
- data/tools/staticdocs/assets/js/26b8abb2.858cb22d.js +1 -0
- data/tools/staticdocs/assets/js/2bb7bf90.78594fbb.js +1 -0
- data/tools/staticdocs/assets/js/2c15ad40.1b2d4730.js +1 -0
- data/tools/staticdocs/assets/js/3326.2db66e1b.js +4 -0
- data/tools/staticdocs/assets/js/3402.80344ef5.js +1 -0
- data/tools/staticdocs/assets/js/35398c5c.8a74eece.js +1 -0
- data/tools/staticdocs/assets/js/{3dd7ef3b.f43cd057.js → 3dd7ef3b.ceb26a04.js} +1 -1
- data/tools/staticdocs/assets/js/40365d27.f6769d57.js +1 -0
- data/tools/staticdocs/assets/js/4071.821f3b2b.js +1 -0
- data/tools/staticdocs/assets/js/{411898ad.28293824.js → 411898ad.8ed3452c.js} +1 -1
- data/tools/staticdocs/assets/js/42170351.7ff72adc.js +1 -0
- data/tools/staticdocs/assets/js/43652efd.ec6bb7e9.js +1 -0
- data/tools/staticdocs/assets/js/5072.9a0a2752.js +1 -0
- data/tools/staticdocs/assets/js/{53ca7c5b.9468b8ed.js → 53ca7c5b.3ae5bb0f.js} +1 -1
- data/tools/staticdocs/assets/js/54d0d530.2f7aa091.js +1 -0
- data/tools/staticdocs/assets/js/5525.dd1645b0.js +101 -0
- data/tools/staticdocs/assets/js/59ed27a4.695b2435.js +1 -0
- data/tools/staticdocs/assets/js/5b233ba7.b0d1a8b1.js +1 -0
- data/tools/staticdocs/assets/js/5bc719f6.c731b998.js +1 -0
- data/tools/staticdocs/assets/js/5c6ce5ec.211ced47.js +1 -0
- data/tools/staticdocs/assets/js/5e3ed378.821e5ed4.js +1 -0
- data/tools/staticdocs/assets/js/5fe211ef.9d68057c.js +1 -0
- data/tools/staticdocs/assets/js/6246.60dfff30.js +1 -0
- data/tools/staticdocs/assets/js/6831b732.dc5bae56.js +1 -0
- data/tools/staticdocs/assets/js/696b4199.d197d085.js +1 -0
- data/tools/staticdocs/assets/js/6b210247.d400f853.js +1 -0
- data/tools/staticdocs/assets/js/6b65133b.3550bdf0.js +1 -0
- data/tools/staticdocs/assets/js/6f92e431.0bc45585.js +1 -0
- data/tools/staticdocs/assets/js/72c6d8a8.7e6fb4fd.js +1 -0
- data/tools/staticdocs/assets/js/75e64983.338d2338.js +1 -0
- data/tools/staticdocs/assets/js/867640d5.555ba5ca.js +1 -0
- data/tools/staticdocs/assets/js/89e76475.a301b5e3.js +1 -0
- data/tools/staticdocs/assets/js/8b939c74.0ebaed2a.js +1 -0
- data/tools/staticdocs/assets/js/8f7843ee.e33ef7db.js +1 -0
- data/tools/staticdocs/assets/js/9424f0b3.4b6f004e.js +1 -0
- data/tools/staticdocs/assets/js/{8434.a3e5442b.js → 9623.44668503.js} +1 -1
- data/tools/staticdocs/assets/js/{964eb012.4253acd5.js → 964eb012.c7f626c5.js} +1 -1
- data/tools/staticdocs/assets/js/97535711.a6342866.js +1 -0
- data/tools/staticdocs/assets/js/99581c43.2bd0766d.js +1 -0
- data/tools/staticdocs/assets/js/{9d6e81d0.b9f15524.js → 9d6e81d0.879c9e9e.js} +1 -1
- data/tools/staticdocs/assets/js/9fb6059a.ce4de002.js +1 -0
- data/tools/staticdocs/assets/js/a677c089.758701f0.js +1 -0
- data/tools/staticdocs/assets/js/a9987364.e29e8a93.js +1 -0
- data/tools/staticdocs/assets/js/a9b2dc27.b7e66efd.js +1 -0
- data/tools/staticdocs/assets/js/aa6b6c1b.6bcbf484.js +1 -0
- data/tools/staticdocs/assets/js/b062d239.2cebb42b.js +1 -0
- data/tools/staticdocs/assets/js/b38a6d74.bb58fcec.js +1 -0
- data/tools/staticdocs/assets/js/b4596165.9e7f0be7.js +1 -0
- data/tools/staticdocs/assets/js/b6d70f94.5e40680e.js +1 -0
- data/tools/staticdocs/assets/js/{b9f60ba6.2c4823f0.js → b9f60ba6.63638354.js} +1 -1
- data/tools/staticdocs/assets/js/bd0034eb.9f460215.js +1 -0
- data/tools/staticdocs/assets/js/c24eae19.2ef0c706.js +1 -0
- data/tools/staticdocs/assets/js/cb8c3f08.28d962a4.js +1 -0
- data/tools/staticdocs/assets/js/cd879be4.782edb7f.js +1 -0
- data/tools/staticdocs/assets/js/cf1c01b8.7d5b6d66.js +1 -0
- data/tools/staticdocs/assets/js/d1b923aa.c012712f.js +1 -0
- data/tools/staticdocs/assets/js/d1bfc316.13a64896.js +1 -0
- data/tools/staticdocs/assets/js/d24bf9b6.bb93853a.js +1 -0
- data/tools/staticdocs/assets/js/d57a4b5d.e9712631.js +1 -0
- data/tools/staticdocs/assets/js/d59d8a14.79f4b29e.js +1 -0
- data/tools/staticdocs/assets/js/d5d77c37.6b4ab31e.js +1 -0
- data/tools/staticdocs/assets/js/d66bf9c0.ca34a583.js +1 -0
- data/tools/staticdocs/assets/js/d8ca4191.599a241b.js +1 -0
- data/tools/staticdocs/assets/js/d9b92eba.44fde84d.js +1 -0
- data/tools/staticdocs/assets/js/db8fa1d0.39b9fdb6.js +1 -0
- data/tools/staticdocs/assets/js/dbe31111.4e811739.js +1 -0
- data/tools/staticdocs/assets/js/{dc5f7beb.15b70d4b.js → dc5f7beb.c703e464.js} +1 -1
- data/tools/staticdocs/assets/js/e501b0d1.c00adfa4.js +1 -0
- data/tools/staticdocs/assets/js/f15615f1.8591b830.js +1 -0
- data/tools/staticdocs/assets/js/f75a5f33.f16b6dd5.js +1 -0
- data/tools/staticdocs/assets/js/{fd886806.f7bfd80c.js → fd886806.fb8a587e.js} +1 -1
- data/tools/staticdocs/assets/js/main.331b7e10.js +38 -0
- data/tools/staticdocs/assets/js/runtime~main.53a0c91e.js +1 -0
- data/tools/staticdocs/docs/configuration/accessors.html +46 -46
- data/tools/staticdocs/docs/configuration/command.html +97 -97
- data/tools/staticdocs/docs/configuration/conversions.html +53 -53
- data/tools/staticdocs/docs/configuration/format.html +22 -22
- data/tools/staticdocs/docs/configuration/interfaces.html +55 -55
- data/tools/staticdocs/docs/configuration/limits-response.html +10 -10
- data/tools/staticdocs/docs/configuration/plugins.html +127 -127
- data/tools/staticdocs/docs/configuration/processors.html +17 -17
- data/tools/staticdocs/docs/configuration/protocols.html +66 -66
- data/tools/staticdocs/docs/configuration/ssl-tls.html +15 -15
- data/tools/staticdocs/docs/configuration/table.html +53 -53
- data/tools/staticdocs/docs/configuration/target.html +21 -21
- data/tools/staticdocs/docs/configuration/telemetry-screens.html +289 -289
- data/tools/staticdocs/docs/configuration/telemetry.html +86 -86
- data/tools/staticdocs/docs/configuration.html +2 -2
- data/tools/staticdocs/docs/development/curl.html +14 -14
- data/tools/staticdocs/docs/development/developing.html +27 -27
- data/tools/staticdocs/docs/development/json-api.html +15 -15
- data/tools/staticdocs/docs/development/log-structure.html +13 -13
- data/tools/staticdocs/docs/development/roadmap.html +4 -4
- data/tools/staticdocs/docs/development/streaming-api.html +24 -24
- data/tools/staticdocs/docs/development/testing.html +20 -20
- data/tools/staticdocs/docs/development.html +2 -2
- data/tools/staticdocs/docs/getting-started/cli.html +39 -39
- data/tools/staticdocs/docs/getting-started/generators.html +25 -25
- data/tools/staticdocs/docs/getting-started/gettingstarted.html +19 -19
- data/tools/staticdocs/docs/getting-started/installation.html +23 -21
- data/tools/staticdocs/docs/getting-started/key-concepts.html +20 -20
- data/tools/staticdocs/docs/getting-started/podman.html +23 -23
- data/tools/staticdocs/docs/getting-started/requirements.html +19 -19
- data/tools/staticdocs/docs/getting-started/upgrading.html +47 -47
- data/tools/staticdocs/docs/getting-started.html +2 -2
- data/tools/staticdocs/docs/guides/bridges.html +19 -12
- data/tools/staticdocs/docs/guides/cfs.html +32 -32
- data/tools/staticdocs/docs/guides/custom-widgets.html +36 -36
- data/tools/staticdocs/docs/guides/dynamic-packets.html +8 -8
- data/tools/staticdocs/docs/guides/exposing-microservices.html +11 -11
- data/tools/staticdocs/docs/guides/little-endian-bitfields.html +4 -4
- data/tools/staticdocs/docs/guides/local-mode.html +13 -13
- data/tools/staticdocs/docs/guides/logging.html +9 -9
- data/tools/staticdocs/docs/guides/monitoring.html +18 -18
- data/tools/staticdocs/docs/guides/performance.html +10 -10
- data/tools/staticdocs/docs/guides/raspberrypi.html +4 -4
- data/tools/staticdocs/docs/guides/reference-architectures.html +6 -6
- data/tools/staticdocs/docs/guides/script-writing.html +80 -80
- data/tools/staticdocs/docs/guides/scripting-api.html +707 -635
- data/tools/staticdocs/docs/guides/troubleshooting.html +8 -7
- data/tools/staticdocs/docs/guides.html +2 -2
- data/tools/staticdocs/docs/meta/contributing.html +12 -12
- data/tools/staticdocs/docs/meta/licenses.html +9 -9
- data/tools/staticdocs/docs/meta/philosophy.html +3 -3
- data/tools/staticdocs/docs/meta/xtce.html +12 -12
- data/tools/staticdocs/docs/meta.html +2 -2
- data/tools/staticdocs/docs/privacy.html +17 -17
- data/tools/staticdocs/docs/tools/admin.html +24 -24
- data/tools/staticdocs/docs/tools/autonomic.html +19 -19
- data/tools/staticdocs/docs/tools/bucket-explorer.html +9 -9
- data/tools/staticdocs/docs/tools/calendar.html +18 -18
- data/tools/staticdocs/docs/tools/cmd-sender.html +14 -14
- data/tools/staticdocs/docs/tools/cmd-tlm-server.html +20 -20
- data/tools/staticdocs/docs/tools/command-history.html +6 -6
- data/tools/staticdocs/docs/tools/command-queue.html +8 -8
- data/tools/staticdocs/docs/tools/data-extractor.html +25 -25
- data/tools/staticdocs/docs/tools/data-viewer.html +11 -11
- data/tools/staticdocs/docs/tools/handbooks.html +4 -4
- data/tools/staticdocs/docs/tools/limits-monitor.html +16 -16
- data/tools/staticdocs/docs/tools/log-explorer.html +9 -9
- data/tools/staticdocs/docs/tools/packet-viewer.html +12 -12
- data/tools/staticdocs/docs/tools/script-runner.html +43 -43
- data/tools/staticdocs/docs/tools/systemhealth.html +21 -21
- data/tools/staticdocs/docs/tools/table-manager.html +11 -11
- data/tools/staticdocs/docs/tools/tlm-grapher.html +22 -22
- data/tools/staticdocs/docs/tools/tlm-viewer.html +16 -16
- data/tools/staticdocs/docs/tools.html +2 -2
- data/tools/staticdocs/docs.html +11 -11
- data/tools/staticdocs/index.html +2 -2
- data/tools/staticdocs/lunr-index-1759527994448.json +1 -0
- data/tools/staticdocs/lunr-index.json +1 -1
- data/tools/staticdocs/markdown-page.html +3 -3
- data/tools/staticdocs/search-doc-1759527994448.json +1 -0
- data/tools/staticdocs/search-doc.json +1 -1
- metadata +92 -92
- data/tools/staticdocs/assets/css/styles.0edf3032.css +0 -1
- data/tools/staticdocs/assets/js/019369f3.5366d64b.js +0 -1
- data/tools/staticdocs/assets/js/058ffc22.31b5fa22.js +0 -1
- data/tools/staticdocs/assets/js/0686a885.eb311155.js +0 -1
- data/tools/staticdocs/assets/js/078dbab0.974abc47.js +0 -1
- data/tools/staticdocs/assets/js/0ff569c9.c8815d72.js +0 -1
- data/tools/staticdocs/assets/js/10209fc9.ae369363.js +0 -1
- data/tools/staticdocs/assets/js/103cc3be.32c30401.js +0 -1
- data/tools/staticdocs/assets/js/1085.d1eba438.js +0 -1
- data/tools/staticdocs/assets/js/1319.d9ec0592.js +0 -101
- data/tools/staticdocs/assets/js/1c0a0c05.a24e9a5c.js +0 -1
- data/tools/staticdocs/assets/js/22b3ac48.81906212.js +0 -1
- data/tools/staticdocs/assets/js/26b8abb2.9d3cbdeb.js +0 -1
- data/tools/staticdocs/assets/js/2bb7bf90.a04c2a3c.js +0 -1
- data/tools/staticdocs/assets/js/2c15ad40.38a25aed.js +0 -1
- data/tools/staticdocs/assets/js/35398c5c.d3ee7838.js +0 -1
- data/tools/staticdocs/assets/js/40365d27.db29df30.js +0 -1
- data/tools/staticdocs/assets/js/42170351.c5a07a3b.js +0 -1
- data/tools/staticdocs/assets/js/43652efd.35825078.js +0 -1
- data/tools/staticdocs/assets/js/5074.653f3924.js +0 -1
- data/tools/staticdocs/assets/js/5410.60ab1dba.js +0 -1
- data/tools/staticdocs/assets/js/54d0d530.dfcfecc5.js +0 -1
- data/tools/staticdocs/assets/js/59ed27a4.8eb3444b.js +0 -1
- data/tools/staticdocs/assets/js/5b233ba7.814a9779.js +0 -1
- data/tools/staticdocs/assets/js/5bc719f6.ea5fa091.js +0 -1
- data/tools/staticdocs/assets/js/5c6ce5ec.dde1bfbc.js +0 -1
- data/tools/staticdocs/assets/js/5e3ed378.6deb22ed.js +0 -1
- data/tools/staticdocs/assets/js/5fe211ef.622c8b76.js +0 -1
- data/tools/staticdocs/assets/js/6242.bdac32c1.js +0 -4
- data/tools/staticdocs/assets/js/6831b732.7cf97282.js +0 -1
- data/tools/staticdocs/assets/js/696b4199.b96d263c.js +0 -1
- data/tools/staticdocs/assets/js/6b210247.75ed74f4.js +0 -1
- data/tools/staticdocs/assets/js/6b65133b.8ceb772d.js +0 -1
- data/tools/staticdocs/assets/js/6f92e431.11fea7a0.js +0 -1
- data/tools/staticdocs/assets/js/72c6d8a8.241ba59b.js +0 -1
- data/tools/staticdocs/assets/js/75e64983.c8cb1f1a.js +0 -1
- data/tools/staticdocs/assets/js/867640d5.a02df5f7.js +0 -1
- data/tools/staticdocs/assets/js/8851.4837d29a.js +0 -1
- data/tools/staticdocs/assets/js/89e76475.cdd88da3.js +0 -1
- data/tools/staticdocs/assets/js/8b939c74.c9ac09c3.js +0 -1
- data/tools/staticdocs/assets/js/8f7843ee.676b5d36.js +0 -1
- data/tools/staticdocs/assets/js/9424f0b3.a3b9746a.js +0 -1
- data/tools/staticdocs/assets/js/97535711.2a29c3e7.js +0 -1
- data/tools/staticdocs/assets/js/99581c43.791cdc39.js +0 -1
- data/tools/staticdocs/assets/js/9fb6059a.5f39bd90.js +0 -1
- data/tools/staticdocs/assets/js/a677c089.2695e35a.js +0 -1
- data/tools/staticdocs/assets/js/a9987364.71b17b00.js +0 -1
- data/tools/staticdocs/assets/js/a9b2dc27.c8eb51b6.js +0 -1
- data/tools/staticdocs/assets/js/aa6b6c1b.2d0fadd1.js +0 -1
- data/tools/staticdocs/assets/js/b062d239.e240f32e.js +0 -1
- data/tools/staticdocs/assets/js/b38a6d74.7363be85.js +0 -1
- data/tools/staticdocs/assets/js/b4596165.2a473696.js +0 -1
- data/tools/staticdocs/assets/js/b6d70f94.dda7b69f.js +0 -1
- data/tools/staticdocs/assets/js/bd0034eb.7282117c.js +0 -1
- data/tools/staticdocs/assets/js/c24eae19.60c8e0c8.js +0 -1
- data/tools/staticdocs/assets/js/cb8c3f08.2466362b.js +0 -1
- data/tools/staticdocs/assets/js/cd879be4.6a299bce.js +0 -1
- data/tools/staticdocs/assets/js/cf1c01b8.1913e9f8.js +0 -1
- data/tools/staticdocs/assets/js/d1b923aa.482b8f7b.js +0 -1
- data/tools/staticdocs/assets/js/d1bfc316.ada87033.js +0 -1
- data/tools/staticdocs/assets/js/d24bf9b6.2b9e8d63.js +0 -1
- data/tools/staticdocs/assets/js/d57a4b5d.bf08c8f5.js +0 -1
- data/tools/staticdocs/assets/js/d59d8a14.479869f6.js +0 -1
- data/tools/staticdocs/assets/js/d5d77c37.199e159b.js +0 -1
- data/tools/staticdocs/assets/js/d66bf9c0.210077a2.js +0 -1
- data/tools/staticdocs/assets/js/d8ca4191.57f74139.js +0 -1
- data/tools/staticdocs/assets/js/d9b92eba.015f5324.js +0 -1
- data/tools/staticdocs/assets/js/db8fa1d0.1c778ff1.js +0 -1
- data/tools/staticdocs/assets/js/dbe31111.37d6f071.js +0 -1
- data/tools/staticdocs/assets/js/e501b0d1.c42aad75.js +0 -1
- data/tools/staticdocs/assets/js/f15615f1.a8a415cb.js +0 -1
- data/tools/staticdocs/assets/js/f75a5f33.4d2501bc.js +0 -1
- data/tools/staticdocs/assets/js/main.994f9f74.js +0 -38
- data/tools/staticdocs/assets/js/runtime~main.44311138.js +0 -1
- data/tools/staticdocs/lunr-index-1757781681330.json +0 -1
- data/tools/staticdocs/search-doc-1757781681330.json +0 -1
@@ -1 +0,0 @@
|
|
1
|
-
"use strict";(self.webpackChunkdocs_openc3_com=self.webpackChunkdocs_openc3_com||[]).push([["3320"],{8654:function(e,t,i){i.r(t),i.d(t,{frontMatter:()=>o,toc:()=>d,default:()=>g,metadata:()=>n,assets:()=>c,contentTitle:()=>s});var n=JSON.parse('{"id":"tools/autonomic","title":"Autonomic (Enterprise)","description":"Automated execution of commands and scripts","source":"@site/docs/tools/autonomic.md","sourceDirName":"tools","slug":"/tools/autonomic","permalink":"/tools/staticdocs/docs/tools/autonomic","draft":false,"unlisted":false,"editUrl":"https://github.com/OpenC3/cosmos/tree/main/docs.openc3.com/docs/tools/autonomic.md","tags":[],"version":"current","frontMatter":{"title":"Autonomic (Enterprise)","description":"Automated execution of commands and scripts","sidebar_custom_props":{"myEmoji":"\u{1F916}"}},"sidebar":"defaultSidebar","previous":{"title":"Admin","permalink":"/tools/staticdocs/docs/tools/admin"},"next":{"title":"Bucket Explorer","permalink":"/tools/staticdocs/docs/tools/bucket-explorer"}}'),r=i(1085),a=i(2600);let o={title:"Autonomic (Enterprise)",description:"Automated execution of commands and scripts",sidebar_custom_props:{myEmoji:"\u{1F916}"}},s,c={},d=[{value:"Introduction",id:"introduction",level:2},{value:"Overview",id:"overview",level:3},{value:"TriggerGroups",id:"triggergroups",level:3},{value:"Triggers",id:"triggers",level:3},{value:"Reactions",id:"reactions",level:3}];function l(e){let t={admonition:"admonition",h2:"h2",h3:"h3",img:"img",p:"p",...(0,a.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.h2,{id:"introduction",children:"Introduction"}),"\n",(0,r.jsx)(t.p,{children:"Autonomic allows for the automated execution of commands and scripts based on user-defined rules."}),"\n",(0,r.jsx)(t.h3,{id:"overview",children:"Overview"}),"\n",(0,r.jsx)(t.p,{children:"Autonomic operates with some basic building blocks: Trigger Groups, Triggers, and Reactions. Triggers are simply logical blocks which evaluate true or false. Reactions can be linked to one or many Triggers and specify an action to perform. Together they allow for an action to be taken based on anything going on in your system."}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"Autonomic",src:i(9477).A+"",width:"1266",height:"599"})}),"\n",(0,r.jsx)(t.h3,{id:"triggergroups",children:"TriggerGroups"}),"\n",(0,r.jsx)(t.p,{children:"Triggers are organized into groups, these groups are both for organization and to ensure that we can scale. It also allows triggers to be evaluated independently and simultaneously and can be useful for overlapping or high priority triggers. However, each trigger group spawns system resources so they should only be created as needed."}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"TriggerGroups",src:i(3081).A+"",width:"349",height:"99"})}),"\n",(0,r.jsx)(t.h3,{id:"triggers",children:"Triggers"}),"\n",(0,r.jsx)(t.p,{children:'Triggers are logical components that are evaluated to true or false. Creating a trigger is like specifying an equation to evaluate. The trigger creation dialog specifies the Trigger Group which owns the trigger and the "left operand". This can be a telemetry item or an existing trigger.'}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"CreateTrigger1",src:i(3853).A+"",width:"648",height:"779"})}),"\n",(0,r.jsx)(t.p,{children:'Once you\'ve chosen the "left operand" you need to choose the operator.'}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"CreateTrigger2",src:i(2481).A+"",width:"648",height:"653"})}),"\n",(0,r.jsx)(t.p,{children:'Finally you choose the "right operand" which in this case is a simple value.'}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"CreateTrigger3",src:i(4088).A+"",width:"648",height:"715"})}),"\n",(0,r.jsx)(t.p,{children:"After the trigger is created it is displayed in Autonomic and waits to be activated by the given logic. Active triggers are highlighted in the list."}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"CreateTrigger3",src:i(578).A+"",width:"1268",height:"607"})}),"\n",(0,r.jsx)(t.p,{children:"Triggers can also be manually disabled and enabled by clicking the plug icon."}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"CreateTrigger3",src:i(1337).A+"",width:"1268",height:"715"})}),"\n",(0,r.jsx)(t.p,{children:"Note in the above screenshot the Events which track everything about the trigger."}),"\n",(0,r.jsx)(t.h3,{id:"reactions",children:"Reactions"}),"\n",(0,r.jsx)(t.p,{children:"Reactions wait for triggers to be evaluated to true and perform actions such as sending a command or running a script. Reactions can not exist without a corresponding trigger. The reaction creation dialog specifies whether to treat the trigger as an Edge or Level. It then allows you to select which trigger(s) the reaction will react to. Selecting multiple triggers allows any of the triggers to trigger the reaction (Note: Creating a reaction which responds to Trigger A AND Trigger B is done by creating additional triggers)."}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"CreateReaction1",src:i(2021).A+"",width:"602",height:"574"})}),"\n",(0,r.jsx)(t.p,{children:"After the triggers are specified, the dialog prompts for the actions to take. You can either send a command, run a script, or simply push a notification. Commands and scripts can also optionally push a notification. In this example a script is specified with a notification at the WARN level."}),"\n",(0,r.jsx)(t.admonition,{title:"Spawning Scripts",type:"warning",children:(0,r.jsx)(t.p,{children:"Be aware of how and when you spawn scripts and whether they are running to completion. Spawning a faulty script can lead to many unfinished scripts consuming resources."})}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"CreateReaction2",src:i(222).A+"",width:"602",height:"634"})}),"\n",(0,r.jsx)(t.p,{children:"Finally the snooze setting is specified. Snooze is the number of seconds after the reaction runs before the reaction will be allowed to run again. This is especially important in Level triggers where if the trigger remains active the reaction can run continuously."}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"CreateReaction3",src:i(3239).A+"",width:"602",height:"391"})}),"\n",(0,r.jsx)(t.p,{children:"Once the reaction is created it is listed in the interface."}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"InitialReaction",src:i(2828).A+"",width:"1271",height:"617"})}),"\n",(0,r.jsx)(t.p,{children:'When the reaction runs the "State" changes to the snooze icon and the "Snooze Until" is updated to indicate the reaction is waiting before being allowed to run again.'}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"SnoozedReaction",src:i(5394).A+"",width:"1271",height:"742"})})]})}function g(e={}){let{wrapper:t}={...(0,a.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},9477:function(e,t,i){i.d(t,{A:()=>n});let n=i.p+"assets/images/autonomic-a2118149a079f587f8f373d61f65d4d6d5e4b3df41ec5446362a449a3b51a1b3.png"},2021:function(e,t,i){i.d(t,{A:()=>n});let n=i.p+"assets/images/create_reaction1-a07e04677c269cb3eb5edd13bc7504ed6ba4c94f6a60d2b14a33680470d376fe.png"},222:function(e,t,i){i.d(t,{A:()=>n});let n=i.p+"assets/images/create_reaction2-63e4e9ddf06a2e8bc9911395162b5a05772f0756e8b0998bcecae64cf86c398e.png"},3239:function(e,t,i){i.d(t,{A:()=>n});let n=i.p+"assets/images/create_reaction3-bae25e33640193d3dbbfbbfce6691479ccde16f73dbb3f0dc3023b7006259baa.png"},3853:function(e,t,i){i.d(t,{A:()=>n});let n=i.p+"assets/images/create_trigger1-5e2f7ecf9ec2b7590aaa65503f48cd73549fea64f52e6c103370a408528538f6.png"},2481:function(e,t,i){i.d(t,{A:()=>n});let n=i.p+"assets/images/create_trigger2-edf2c2e6aa78a2e317e07e1cdec560dfcbbd147934630459507695c71d539f3b.png"},4088:function(e,t,i){i.d(t,{A:()=>n});let n=i.p+"assets/images/create_trigger3-e63629173ae73bbfd78b53062061336db8ea92ba4542b9a93412d8ac6ed19e7a.png"},1337:function(e,t,i){i.d(t,{A:()=>n});let n=i.p+"assets/images/disable_trigger-f5bb46fbc488bd4afcb27b21888de16816485d3e4fdbd4106b874ff06042f85b.png"},578:function(e,t,i){i.d(t,{A:()=>n});let n=i.p+"assets/images/enabled_trigger-86ce16c7294d4b954ec8b68ff344694093ed5f451fc5974f855f438557148518.png"},2828:function(e,t,i){i.d(t,{A:()=>n});let n=i.p+"assets/images/initial_reaction-ce5d498a90cdd5a11e24471d277ed7fcb4eecc5dcaaf05220102a3178db0805e.png"},5394:function(e,t,i){i.d(t,{A:()=>n});let n=i.p+"assets/images/snoozed_reaction-75ef2acab11a71f5827fbc0a1be95cf0fd6bd5b24b76f9ae6ebaf43fb293ba81.png"},3081:function(e,t,i){i.d(t,{A:()=>n});let n=i.p+"assets/images/trigger_groups-6d9ccc6962029baa456f2d12de0fd3d03e1dbafdbf069cea65886296d2b2bde0.png"},2600:function(e,t,i){i.d(t,{R:()=>o,x:()=>s});var n=i(4041);let r={},a=n.createContext(r);function o(e){let t=n.useContext(a);return n.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),n.createElement(a.Provider,{value:t},e.children)}}}]);
|
@@ -1 +0,0 @@
|
|
1
|
-
"use strict";(self.webpackChunkdocs_openc3_com=self.webpackChunkdocs_openc3_com||[]).push([["1085"],{1804:function(c,e,o){o.r(e)}}]);
|
@@ -1,101 +0,0 @@
|
|
1
|
-
(self.webpackChunkdocs_openc3_com=self.webpackChunkdocs_openc3_com||[]).push([["1319"],{9227:function(e,t,n){"use strict";e.exports=n(5900)},9596:function(e,t,n){"use strict";var i=n(3615),r={wrapper:{position:"relative",display:"inline-block"},hint:{position:"absolute",top:"0",left:"0",borderColor:"transparent",boxShadow:"none",opacity:"1"},input:{position:"relative",verticalAlign:"top",backgroundColor:"transparent"},inputWithNoHint:{position:"relative",verticalAlign:"top"},dropdown:{position:"absolute",top:"100%",left:"0",zIndex:"100",display:"none"},suggestions:{display:"block"},suggestion:{whiteSpace:"nowrap",cursor:"pointer"},suggestionChild:{whiteSpace:"normal"},ltr:{left:"0",right:"auto"},rtl:{left:"auto",right:"0"},defaultClasses:{root:"algolia-autocomplete",prefix:"aa",noPrefix:!1,dropdownMenu:"dropdown-menu",input:"input",hint:"hint",suggestions:"suggestions",suggestion:"suggestion",cursor:"cursor",dataset:"dataset",empty:"empty"},appendTo:{wrapper:{position:"absolute",zIndex:"100",display:"none"},input:{},inputWithNoHint:{},dropdown:{display:"block"}}};i.isMsie()&&i.mixin(r.input,{backgroundImage:"url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)"}),i.isMsie()&&7>=i.isMsie()&&i.mixin(r.input,{marginTop:"-1px"}),e.exports=r},4111:function(e,t,n){"use strict";var i="aaDataset",r="aaValue",s="aaDatum",o=n(3615),a=n(990),u=n(2206),c=n(9596),l=n(1294);function h(e){(e=e||{}).templates=e.templates||{},e.source||o.error("missing source"),e.name&&(t=e.name,!/^[_a-zA-Z0-9-]+$/.test(t))&&o.error("invalid dataset name: "+e.name),this.query=null,this._isEmpty=!0,this.highlight=!!e.highlight,this.name=void 0===e.name||null===e.name?o.getUniqueId():e.name,this.source=e.source,this.displayFn=(n=(n=e.display||e.displayKey)||"value",o.isFunction(n)?n:function(e){return e[n]}),this.debounce=e.debounce,this.cache=!1!==e.cache,this.templates=(i=e.templates,r=this.displayFn,{empty:i.empty&&o.templatify(i.empty),header:i.header&&o.templatify(i.header),footer:i.footer&&o.templatify(i.footer),suggestion:i.suggestion||function(e){return"<p>"+r(e)+"</p>"}}),this.css=o.mixin({},c,e.appendTo?c.appendTo:{}),this.cssClasses=e.cssClasses=o.mixin({},c.defaultClasses,e.cssClasses||{}),this.cssClasses.prefix=e.cssClasses.formattedPrefix||o.formatPrefix(this.cssClasses.prefix,this.cssClasses.noPrefix);var t,n,i,r,s=o.className(this.cssClasses.prefix,this.cssClasses.dataset);this.$el=e.$menu&&e.$menu.find(s+"-"+this.name).length>0?a.element(e.$menu.find(s+"-"+this.name)[0]):a.element(u.dataset.replace("%CLASS%",this.name).replace("%PREFIX%",this.cssClasses.prefix).replace("%DATASET%",this.cssClasses.dataset)),this.$menu=e.$menu,this.clearCachedSuggestions()}h.extractDatasetName=function(e){return a.element(e).data(i)},h.extractValue=function(e){return a.element(e).data(r)},h.extractDatum=function(e){var t=a.element(e).data(s);return"string"==typeof t&&(t=JSON.parse(t)),t},o.mixin(h.prototype,l,{_render:function(e,t){if(this.$el){var n,c=this,l=[].slice.call(arguments,2);if(this.$el.empty(),n=t&&t.length,this._isEmpty=!n,!n&&this.templates.empty)this.$el.html((function(){var t=[].slice.call(arguments,0);return t=[{query:e,isEmpty:!0}].concat(t),c.templates.empty.apply(this,t)}).apply(this,l)).prepend(c.templates.header?h.apply(this,l):null).append(c.templates.footer?p.apply(this,l):null);else if(n)this.$el.html((function(){var e,n,l=[].slice.call(arguments,0),h=this,p=u.suggestions.replace("%PREFIX%",this.cssClasses.prefix).replace("%SUGGESTIONS%",this.cssClasses.suggestions);return e=a.element(p).css(this.css.suggestions),n=o.map(t,function(e){var t,n=u.suggestion.replace("%PREFIX%",h.cssClasses.prefix).replace("%SUGGESTION%",h.cssClasses.suggestion);return(t=a.element(n).attr({role:"option",id:["option",Math.floor(1e8*Math.random())].join("-")}).append(c.templates.suggestion.apply(this,[e].concat(l)))).data(i,c.name),t.data(r,c.displayFn(e)||void 0),t.data(s,JSON.stringify(e)),t.children().each(function(){a.element(this).css(h.css.suggestionChild)}),t}),e.append.apply(e,n),e}).apply(this,l)).prepend(c.templates.header?h.apply(this,l):null).append(c.templates.footer?p.apply(this,l):null);else if(t&&!Array.isArray(t))throw TypeError("suggestions must be an array");this.$menu&&this.$menu.addClass(this.cssClasses.prefix+(n?"with":"without")+"-"+this.name).removeClass(this.cssClasses.prefix+(n?"without":"with")+"-"+this.name),this.trigger("rendered",e)}function h(){var t=[].slice.call(arguments,0);return t=[{query:e,isEmpty:!n}].concat(t),c.templates.header.apply(this,t)}function p(){var t=[].slice.call(arguments,0);return t=[{query:e,isEmpty:!n}].concat(t),c.templates.footer.apply(this,t)}},getRoot:function(){return this.$el},update:function(e){function t(t){if(!this.canceled&&e===this.query){var n=[].slice.call(arguments,1);this.cacheSuggestions(e,t,n),this._render.apply(this,[e,t].concat(n))}}if(this.query=e,this.canceled=!1,this.shouldFetchFromCache(e))t.apply(this,[this.cachedSuggestions].concat(this.cachedRenderExtraArgs));else{var n=this,i=function(){n.canceled||n.source(e,t.bind(n))};this.debounce?(clearTimeout(this.debounceTimeout),this.debounceTimeout=setTimeout(function(){n.debounceTimeout=null,i()},this.debounce)):i()}},cacheSuggestions:function(e,t,n){this.cachedQuery=e,this.cachedSuggestions=t,this.cachedRenderExtraArgs=n},shouldFetchFromCache:function(e){return this.cache&&this.cachedQuery===e&&this.cachedSuggestions&&this.cachedSuggestions.length},clearCachedSuggestions:function(){delete this.cachedQuery,delete this.cachedSuggestions,delete this.cachedRenderExtraArgs},cancel:function(){this.canceled=!0},clear:function(){this.$el&&(this.cancel(),this.$el.empty(),this.trigger("rendered",""))},isEmpty:function(){return this._isEmpty},destroy:function(){this.clearCachedSuggestions(),this.$el=null}}),e.exports=h},6558:function(e,t,n){"use strict";var i=n(3615),r=n(990),s=n(1294),o=n(4111),a=n(9596);function u(e){var t,n,s,o=this;(e=e||{}).menu||i.error("menu is required"),i.isArray(e.datasets)||i.isObject(e.datasets)||i.error("1 or more datasets required"),e.datasets||i.error("datasets is required"),this.isOpen=!1,this.isEmpty=!0,this.minLength=e.minLength||0,this.templates={},this.appendTo=e.appendTo||!1,this.css=i.mixin({},a,e.appendTo?a.appendTo:{}),this.cssClasses=e.cssClasses=i.mixin({},a.defaultClasses,e.cssClasses||{}),this.cssClasses.prefix=e.cssClasses.formattedPrefix||i.formatPrefix(this.cssClasses.prefix,this.cssClasses.noPrefix),t=i.bind(this._onSuggestionClick,this),n=i.bind(this._onSuggestionMouseEnter,this),s=i.bind(this._onSuggestionMouseLeave,this);var c=i.className(this.cssClasses.prefix,this.cssClasses.suggestion);this.$menu=r.element(e.menu).on("mouseenter.aa",c,n).on("mouseleave.aa",c,s).on("click.aa",c,t),this.$container=e.appendTo?e.wrapper:this.$menu,e.templates&&e.templates.header&&(this.templates.header=i.templatify(e.templates.header),this.$menu.prepend(this.templates.header())),e.templates&&e.templates.empty&&(this.templates.empty=i.templatify(e.templates.empty),this.$empty=r.element('<div class="'+i.className(this.cssClasses.prefix,this.cssClasses.empty,!0)+'"></div>'),this.$menu.append(this.$empty),this.$empty.hide()),this.datasets=i.map(e.datasets,function(t){var n,r,s;return n=o.$menu,r=t,s=e.cssClasses,new u.Dataset(i.mixin({$menu:n,cssClasses:s},r))}),i.each(this.datasets,function(e){var t=e.getRoot();t&&0===t.parent().length&&o.$menu.append(t),e.onSync("rendered",o._onRendered,o)}),e.templates&&e.templates.footer&&(this.templates.footer=i.templatify(e.templates.footer),this.$menu.append(this.templates.footer()));var l=this;r.element(window).resize(function(){l._redraw()})}i.mixin(u.prototype,s,{_onSuggestionClick:function(e){this.trigger("suggestionClicked",r.element(e.currentTarget))},_onSuggestionMouseEnter:function(e){var t=r.element(e.currentTarget);if(!t.hasClass(i.className(this.cssClasses.prefix,this.cssClasses.cursor,!0))){this._removeCursor();var n=this;setTimeout(function(){n._setCursor(t,!1)},0)}},_onSuggestionMouseLeave:function(e){e.relatedTarget&&r.element(e.relatedTarget).closest("."+i.className(this.cssClasses.prefix,this.cssClasses.cursor,!0)).length>0||(this._removeCursor(),this.trigger("cursorRemoved"))},_onRendered:function(e,t){if(this.isEmpty=i.every(this.datasets,function(e){return e.isEmpty()}),this.isEmpty)if(t.length>=this.minLength&&this.trigger("empty"),this.$empty)if(t.length<this.minLength)this._hide();else{var n=this.templates.empty({query:this.datasets[0]&&this.datasets[0].query});this.$empty.html(n),this.$empty.show(),this._show()}else i.any(this.datasets,function(e){return e.templates&&e.templates.empty})?t.length<this.minLength?this._hide():this._show():this._hide();else this.isOpen&&(this.$empty&&(this.$empty.empty(),this.$empty.hide()),t.length>=this.minLength?this._show():this._hide());this.trigger("datasetRendered")},_hide:function(){this.$container.hide()},_show:function(){this.$container.css("display","block"),this._redraw(),this.trigger("shown")},_redraw:function(){this.isOpen&&this.appendTo&&this.trigger("redrawn")},_getSuggestions:function(){return this.$menu.find(i.className(this.cssClasses.prefix,this.cssClasses.suggestion))},_getCursor:function(){return this.$menu.find(i.className(this.cssClasses.prefix,this.cssClasses.cursor)).first()},_setCursor:function(e,t){e.first().addClass(i.className(this.cssClasses.prefix,this.cssClasses.cursor,!0)).attr("aria-selected","true"),this.trigger("cursorMoved",t)},_removeCursor:function(){this._getCursor().removeClass(i.className(this.cssClasses.prefix,this.cssClasses.cursor,!0)).removeAttr("aria-selected")},_moveCursor:function(e){var t,n,i,r;if(this.isOpen){if(n=this._getCursor(),t=this._getSuggestions(),this._removeCursor(),-1==(i=((i=t.index(n)+e)+1)%(t.length+1)-1))return void this.trigger("cursorRemoved");i<-1&&(i=t.length-1),this._setCursor(r=t.eq(i),!0),this._ensureVisible(r)}},_ensureVisible:function(e){var t,n,i,r;n=(t=e.position().top)+e.height()+parseInt(e.css("margin-top"),10)+parseInt(e.css("margin-bottom"),10),i=this.$menu.scrollTop(),r=this.$menu.height()+parseInt(this.$menu.css("padding-top"),10)+parseInt(this.$menu.css("padding-bottom"),10),t<0?this.$menu.scrollTop(i+t):r<n&&this.$menu.scrollTop(i+(n-r))},close:function(){this.isOpen&&(this.isOpen=!1,this._removeCursor(),this._hide(),this.trigger("closed"))},open:function(){this.isOpen||(this.isOpen=!0,this.isEmpty||this._show(),this.trigger("opened"))},setLanguageDirection:function(e){this.$menu.css("ltr"===e?this.css.ltr:this.css.rtl)},moveCursorUp:function(){this._moveCursor(-1)},moveCursorDown:function(){this._moveCursor(1)},getDatumForSuggestion:function(e){var t=null;return e.length&&(t={raw:o.extractDatum(e),value:o.extractValue(e),datasetName:o.extractDatasetName(e)}),t},getCurrentCursor:function(){return this._getCursor().first()},getDatumForCursor:function(){return this.getDatumForSuggestion(this._getCursor().first())},getDatumForTopSuggestion:function(){return this.getDatumForSuggestion(this._getSuggestions().first())},cursorTopSuggestion:function(){this._setCursor(this._getSuggestions().first(),!1)},update:function(e){i.each(this.datasets,function(t){t.update(e)})},empty:function(){i.each(this.datasets,function(e){e.clear()}),this.isEmpty=!0},isVisible:function(){return this.isOpen&&!this.isEmpty},destroy:function(){this.$menu.off(".aa"),this.$menu=null,i.each(this.datasets,function(e){e.destroy()})}}),u.Dataset=o,e.exports=u},2802:function(e,t,n){"use strict";var i=n(3615),r=n(990);function s(e){e&&e.el||i.error("EventBus initialized without el"),this.$el=r.element(e.el)}i.mixin(s.prototype,{trigger:function(e,t,n,r){var s=i.Event("autocomplete:"+e);return this.$el.trigger(s,[t,n,r]),s}}),e.exports=s},1294:function(e,t,n){"use strict";var i=n(9659),r=/\s+/;function s(e,t,n,i){var s,o,a;if(!n)return this;for(t=t.split(r),n=i?(o=n,a=i,o.bind?o.bind(a):function(){o.apply(a,[].slice.call(arguments,0))}):n,this._callbacks=this._callbacks||{};s=t.shift();)this._callbacks[s]=this._callbacks[s]||{sync:[],async:[]},this._callbacks[s][e].push(n);return this}function o(e,t,n){return function(){for(var i,r=0,s=e.length;!i&&r<s;r+=1)i=!1===e[r].apply(t,n);return!i}}e.exports={onSync:function(e,t,n){return s.call(this,"sync",e,t,n)},onAsync:function(e,t,n){return s.call(this,"async",e,t,n)},off:function(e){var t;if(!this._callbacks)return this;for(e=e.split(r);t=e.shift();)delete this._callbacks[t];return this},trigger:function(e){var t,n,s,a,u;if(!this._callbacks)return this;for(e=e.split(r),s=[].slice.call(arguments,1);(t=e.shift())&&(n=this._callbacks[t]);)a=o(n.sync,this,[t].concat(s)),u=o(n.async,this,[t].concat(s)),a()&&i(u);return this}}},2206:function(e){"use strict";e.exports={wrapper:'<span class="%ROOT%"></span>',dropdown:'<span class="%PREFIX%%DROPDOWN_MENU%"></span>',dataset:'<div class="%PREFIX%%DATASET%-%CLASS%"></div>',suggestions:'<span class="%PREFIX%%SUGGESTIONS%"></span>',suggestion:'<div class="%PREFIX%%SUGGESTION%"></div>'}},4619:function(e,t,n){"use strict";var i={9:"tab",27:"esc",37:"left",39:"right",13:"enter",38:"up",40:"down"},r=n(3615),s=n(990),o=n(1294);function a(e){var t,n,o,a,u,c=this;(e=e||{}).input||r.error("input is missing"),n=r.bind(this._onBlur,this),o=r.bind(this._onFocus,this),a=r.bind(this._onKeydown,this),u=r.bind(this._onInput,this),this.$hint=s.element(e.hint),this.$input=s.element(e.input).on("blur.aa",n).on("focus.aa",o).on("keydown.aa",a),0===this.$hint.length&&(this.setHint=this.getHint=this.clearHint=this.clearHintIfInvalid=r.noop),r.isMsie()?this.$input.on("keydown.aa keypress.aa cut.aa paste.aa",function(e){i[e.which||e.keyCode]||r.defer(r.bind(c._onInput,c,e))}):this.$input.on("input.aa",u),this.query=this.$input.val(),this.$overflowHelper=(t=this.$input,s.element('<pre aria-hidden="true"></pre>').css({position:"absolute",visibility:"hidden",whiteSpace:"pre",fontFamily:t.css("font-family"),fontSize:t.css("font-size"),fontStyle:t.css("font-style"),fontVariant:t.css("font-variant"),fontWeight:t.css("font-weight"),wordSpacing:t.css("word-spacing"),letterSpacing:t.css("letter-spacing"),textIndent:t.css("text-indent"),textRendering:t.css("text-rendering"),textTransform:t.css("text-transform")}).insertAfter(t))}function u(e){return e.altKey||e.ctrlKey||e.metaKey||e.shiftKey}a.normalizeQuery=function(e){return(e||"").replace(/^\s*/g,"").replace(/\s{2,}/g," ")},r.mixin(a.prototype,o,{_onBlur:function(){this.resetInputValue(),this.$input.removeAttr("aria-activedescendant"),this.trigger("blurred")},_onFocus:function(){this.trigger("focused")},_onKeydown:function(e){var t=i[e.which||e.keyCode];this._managePreventDefault(t,e),t&&this._shouldTrigger(t,e)&&this.trigger(t+"Keyed",e)},_onInput:function(){this._checkInputValue()},_managePreventDefault:function(e,t){var n,i,r;switch(e){case"tab":i=this.getHint(),r=this.getInputValue(),n=i&&i!==r&&!u(t);break;case"up":case"down":n=!u(t);break;default:n=!1}n&&t.preventDefault()},_shouldTrigger:function(e,t){return"tab"!==e||!u(t)},_checkInputValue:function(){var e,t,n,i,r;n=(i=e=this.getInputValue(),r=this.query,!!(t=a.normalizeQuery(i)===a.normalizeQuery(r))&&!!this.query&&this.query.length!==e.length),this.query=e,t?n&&this.trigger("whitespaceChanged",this.query):this.trigger("queryChanged",this.query)},focus:function(){this.$input.focus()},blur:function(){this.$input.blur()},getQuery:function(){return this.query},setQuery:function(e){this.query=e},getInputValue:function(){return this.$input.val()},setInputValue:function(e,t){void 0===e&&(e=this.query),this.$input.val(e),t?this.clearHint():this._checkInputValue()},expand:function(){this.$input.attr("aria-expanded","true")},collapse:function(){this.$input.attr("aria-expanded","false")},setActiveDescendant:function(e){this.$input.attr("aria-activedescendant",e)},removeActiveDescendant:function(){this.$input.removeAttr("aria-activedescendant")},resetInputValue:function(){this.setInputValue(this.query,!0)},getHint:function(){return this.$hint.val()},setHint:function(e){this.$hint.val(e)},clearHint:function(){this.setHint("")},clearHintIfInvalid:function(){var e,t,n;n=(e=this.getInputValue())!==(t=this.getHint())&&0===t.indexOf(e),""!==e&&n&&!this.hasOverflow()||this.clearHint()},getLanguageDirection:function(){return(this.$input.css("direction")||"ltr").toLowerCase()},hasOverflow:function(){var e=this.$input.width()-2;return this.$overflowHelper.text(this.getInputValue()),this.$overflowHelper.width()>=e},isCursorAtEnd:function(){var e,t,n;return(e=this.$input.val().length,t=this.$input[0].selectionStart,r.isNumber(t))?t===e:!document.selection||((n=document.selection.createRange()).moveStart("character",-e),e===n.text.length)},destroy:function(){this.$hint.off(".aa"),this.$input.off(".aa"),this.$hint=this.$input=this.$overflowHelper=null}}),e.exports=a},194:function(e,t,n){"use strict";var i="aaAttrs",r=n(3615),s=n(990),o=n(2802),a=n(4619),u=n(6558),c=n(2206),l=n(9596);function h(e){if((e=e||{}).input||r.error("missing input"),this.isActivated=!1,this.debug=!!e.debug,this.autoselect=!!e.autoselect,this.autoselectOnBlur=!!e.autoselectOnBlur,this.openOnFocus=!!e.openOnFocus,this.minLength=r.isNumber(e.minLength)?e.minLength:1,this.autoWidth=void 0===e.autoWidth||!!e.autoWidth,this.clearOnSelected=!!e.clearOnSelected,this.tabAutocomplete=void 0===e.tabAutocomplete||!!e.tabAutocomplete,e.hint=!!e.hint,e.hint&&e.appendTo)throw Error("[autocomplete.js] hint and appendTo options can't be used at the same time");this.css=e.css=r.mixin({},l,e.appendTo?l.appendTo:{}),this.cssClasses=e.cssClasses=r.mixin({},l.defaultClasses,e.cssClasses||{}),this.cssClasses.prefix=e.cssClasses.formattedPrefix=r.formatPrefix(this.cssClasses.prefix,this.cssClasses.noPrefix),this.listboxId=e.listboxId=[this.cssClasses.root,"listbox",r.getUniqueId()].join("-");var t,n,a=function(e){n=s.element(e.input),o=s.element(c.wrapper.replace("%ROOT%",e.cssClasses.root)).css(e.css.wrapper),e.appendTo||"block"!==n.css("display")||"table"!==n.parent().css("display")||o.css("display","table-cell");var t,n,o,a,u,l=c.dropdown.replace("%PREFIX%",e.cssClasses.prefix).replace("%DROPDOWN_MENU%",e.cssClasses.dropdownMenu);a=s.element(l).css(e.css.dropdown).attr({role:"listbox",id:e.listboxId}),e.templates&&e.templates.dropdownMenu&&a.html(r.templatify(e.templates.dropdownMenu)()),(u=n.clone().css(e.css.hint).css({backgroundAttachment:(t=n).css("background-attachment"),backgroundClip:t.css("background-clip"),backgroundColor:t.css("background-color"),backgroundImage:t.css("background-image"),backgroundOrigin:t.css("background-origin"),backgroundPosition:t.css("background-position"),backgroundRepeat:t.css("background-repeat"),backgroundSize:t.css("background-size")})).val("").addClass(r.className(e.cssClasses.prefix,e.cssClasses.hint,!0)).removeAttr("id name placeholder required").prop("readonly",!0).attr({"aria-hidden":"true",autocomplete:"off",spellcheck:"false",tabindex:-1}),u.removeData&&u.removeData(),n.data(i,{"aria-autocomplete":n.attr("aria-autocomplete"),"aria-expanded":n.attr("aria-expanded"),"aria-owns":n.attr("aria-owns"),autocomplete:n.attr("autocomplete"),dir:n.attr("dir"),role:n.attr("role"),spellcheck:n.attr("spellcheck"),style:n.attr("style"),type:n.attr("type")}),n.addClass(r.className(e.cssClasses.prefix,e.cssClasses.input,!0)).attr({autocomplete:"off",spellcheck:!1,role:"combobox","aria-autocomplete":e.datasets&&e.datasets[0]&&e.datasets[0].displayKey?"both":"list","aria-expanded":"false","aria-label":e.ariaLabel,"aria-owns":e.listboxId}).css(e.hint?e.css.input:e.css.inputWithNoHint);try{n.attr("dir")||n.attr("dir","auto")}catch(e){}return(o=e.appendTo?o.appendTo(s.element(e.appendTo).eq(0)).eq(0):n.wrap(o).parent()).prepend(e.hint?u:null).append(a),{wrapper:o,input:n,hint:u,menu:a}}(e);this.$node=a.wrapper;var u=this.$input=a.input;t=a.menu,n=a.hint,e.dropdownMenuContainer&&s.element(e.dropdownMenuContainer).css("position","relative").append(t.css("top","0")),u.on("blur.aa",function(e){var n=document.activeElement;r.isMsie()&&(t[0]===n||t[0].contains(n))&&(e.preventDefault(),e.stopImmediatePropagation(),r.defer(function(){u.focus()}))}),t.on("mousedown.aa",function(e){e.preventDefault()}),this.eventBus=e.eventBus||new o({el:u}),this.dropdown=new h.Dropdown({appendTo:e.appendTo,wrapper:this.$node,menu:t,datasets:e.datasets,templates:e.templates,cssClasses:e.cssClasses,minLength:this.minLength}).onSync("suggestionClicked",this._onSuggestionClicked,this).onSync("cursorMoved",this._onCursorMoved,this).onSync("cursorRemoved",this._onCursorRemoved,this).onSync("opened",this._onOpened,this).onSync("closed",this._onClosed,this).onSync("shown",this._onShown,this).onSync("empty",this._onEmpty,this).onSync("redrawn",this._onRedrawn,this).onAsync("datasetRendered",this._onDatasetRendered,this),this.input=new h.Input({input:u,hint:n}).onSync("focused",this._onFocused,this).onSync("blurred",this._onBlurred,this).onSync("enterKeyed",this._onEnterKeyed,this).onSync("tabKeyed",this._onTabKeyed,this).onSync("escKeyed",this._onEscKeyed,this).onSync("upKeyed",this._onUpKeyed,this).onSync("downKeyed",this._onDownKeyed,this).onSync("leftKeyed",this._onLeftKeyed,this).onSync("rightKeyed",this._onRightKeyed,this).onSync("queryChanged",this._onQueryChanged,this).onSync("whitespaceChanged",this._onWhitespaceChanged,this),this._bindKeyboardShortcuts(e),this._setLanguageDirection()}r.mixin(h.prototype,{_bindKeyboardShortcuts:function(e){if(e.keyboardShortcuts){var t=this.$input,n=[];r.each(e.keyboardShortcuts,function(e){"string"==typeof e&&(e=e.toUpperCase().charCodeAt(0)),n.push(e)}),s.element(document).keydown(function(e){var i=e.target||e.srcElement,r=i.tagName;if(!i.isContentEditable&&"INPUT"!==r&&"SELECT"!==r&&"TEXTAREA"!==r){var s=e.which||e.keyCode;-1!==n.indexOf(s)&&(t.focus(),e.stopPropagation(),e.preventDefault())}})}},_onSuggestionClicked:function(e,t){var n;(n=this.dropdown.getDatumForSuggestion(t))&&this._select(n,{selectionMethod:"click"})},_onCursorMoved:function(e,t){var n=this.dropdown.getDatumForCursor(),i=this.dropdown.getCurrentCursor().attr("id");this.input.setActiveDescendant(i),n&&(t&&this.input.setInputValue(n.value,!0),this.eventBus.trigger("cursorchanged",n.raw,n.datasetName))},_onCursorRemoved:function(){this.input.resetInputValue(),this._updateHint(),this.eventBus.trigger("cursorremoved")},_onDatasetRendered:function(){this._updateHint(),this.eventBus.trigger("updated")},_onOpened:function(){this._updateHint(),this.input.expand(),this.eventBus.trigger("opened")},_onEmpty:function(){this.eventBus.trigger("empty")},_onRedrawn:function(){this.$node.css("top","0px"),this.$node.css("left","0px");var e=this.$input[0].getBoundingClientRect();this.autoWidth&&this.$node.css("width",e.width+"px");var t=this.$node[0].getBoundingClientRect(),n=e.bottom-t.top;this.$node.css("top",n+"px");var i=e.left-t.left;this.$node.css("left",i+"px"),this.eventBus.trigger("redrawn")},_onShown:function(){this.eventBus.trigger("shown"),this.autoselect&&this.dropdown.cursorTopSuggestion()},_onClosed:function(){this.input.clearHint(),this.input.removeActiveDescendant(),this.input.collapse(),this.eventBus.trigger("closed")},_onFocused:function(){if(this.isActivated=!0,this.openOnFocus){var e=this.input.getQuery();e.length>=this.minLength?this.dropdown.update(e):this.dropdown.empty(),this.dropdown.open()}},_onBlurred:function(){var e=this.dropdown.getDatumForCursor(),t=this.dropdown.getDatumForTopSuggestion(),n={selectionMethod:"blur"};this.debug||(this.autoselectOnBlur&&e?this._select(e,n):this.autoselectOnBlur&&t?this._select(t,n):(this.isActivated=!1,this.dropdown.empty(),this.dropdown.close()))},_onEnterKeyed:function(e,t){var n=this.dropdown.getDatumForCursor(),i=this.dropdown.getDatumForTopSuggestion(),r={selectionMethod:"enterKey"};n?(this._select(n,r),t.preventDefault()):this.autoselect&&i&&(this._select(i,r),t.preventDefault())},_onTabKeyed:function(e,t){var n;this.tabAutocomplete?(n=this.dropdown.getDatumForCursor())?(this._select(n,{selectionMethod:"tabKey"}),t.preventDefault()):this._autocomplete(!0):this.dropdown.close()},_onEscKeyed:function(){this.dropdown.close(),this.input.resetInputValue()},_onUpKeyed:function(){var e=this.input.getQuery();this.dropdown.isEmpty&&e.length>=this.minLength?this.dropdown.update(e):this.dropdown.moveCursorUp(),this.dropdown.open()},_onDownKeyed:function(){var e=this.input.getQuery();this.dropdown.isEmpty&&e.length>=this.minLength?this.dropdown.update(e):this.dropdown.moveCursorDown(),this.dropdown.open()},_onLeftKeyed:function(){"rtl"===this.dir&&this._autocomplete()},_onRightKeyed:function(){"ltr"===this.dir&&this._autocomplete()},_onQueryChanged:function(e,t){this.input.clearHintIfInvalid(),t.length>=this.minLength?this.dropdown.update(t):this.dropdown.empty(),this.dropdown.open(),this._setLanguageDirection()},_onWhitespaceChanged:function(){this._updateHint(),this.dropdown.open()},_setLanguageDirection:function(){var e=this.input.getLanguageDirection();this.dir!==e&&(this.dir=e,this.$node.css("direction",e),this.dropdown.setLanguageDirection(e))},_updateHint:function(){var e,t,n,i;(e=this.dropdown.getDatumForTopSuggestion())&&this.dropdown.isVisible()&&!this.input.hasOverflow()?(t=this.input.getInputValue(),n=a.normalizeQuery(t),(i=RegExp("^(?:"+r.escapeRegExChars(n)+")(.+$)","i").exec(e.value))?this.input.setHint(t+i[1]):this.input.clearHint()):this.input.clearHint()},_autocomplete:function(e){var t,n,i,r;t=this.input.getHint(),n=this.input.getQuery(),i=e||this.input.isCursorAtEnd(),t&&n!==t&&i&&((r=this.dropdown.getDatumForTopSuggestion())&&this.input.setInputValue(r.value),this.eventBus.trigger("autocompleted",r.raw,r.datasetName))},_select:function(e,t){void 0!==e.value&&this.input.setQuery(e.value),this.clearOnSelected?this.setVal(""):this.input.setInputValue(e.value,!0),this._setLanguageDirection(),!1===this.eventBus.trigger("selected",e.raw,e.datasetName,t).isDefaultPrevented()&&(this.dropdown.close(),r.defer(r.bind(this.dropdown.empty,this.dropdown)))},open:function(){if(!this.isActivated){var e=this.input.getInputValue();e.length>=this.minLength?this.dropdown.update(e):this.dropdown.empty()}this.dropdown.open()},close:function(){this.dropdown.close()},setVal:function(e){e=r.toStr(e),this.isActivated?this.input.setInputValue(e):(this.input.setQuery(e),this.input.setInputValue(e,!0)),this._setLanguageDirection()},getVal:function(){return this.input.getQuery()},destroy:function(){var e,t,n;this.input.destroy(),this.dropdown.destroy(),e=this.$node,t=this.cssClasses,n=e.find(r.className(t.prefix,t.input)),r.each(n.data(i),function(e,t){void 0===e?n.removeAttr(t):n.attr(t,e)}),n.detach().removeClass(r.className(t.prefix,t.input,!0)).insertAfter(e),n.removeData&&n.removeData(i),e.remove(),this.$node=null},getWrapper:function(){return this.dropdown.$container[0]}}),h.Dropdown=u,h.Input=a,h.sources=n(8513),e.exports=h},990:function(e){"use strict";e.exports={element:null}},1149:function(e){"use strict";e.exports=function(e){var t=e.match(/Algolia for JavaScript \((\d+\.)(\d+\.)(\d+)\)/)||e.match(/Algolia for vanilla JavaScript (\d+\.)(\d+\.)(\d+)/);if(t)return[t[1],t[2],t[3]]}},3615:function(e,t,n){"use strict";var i,r=n(990);function s(e){return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}e.exports={isArray:null,isFunction:null,isObject:null,bind:null,each:null,map:null,mixin:null,isMsie:function(e){if(void 0===e&&(e=navigator.userAgent),/(msie|trident)/i.test(e)){var t=e.match(/(msie |rv:)(\d+(.\d+)?)/i);if(t)return t[2]}return!1},escapeRegExChars:function(e){return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")},isNumber:function(e){return"number"==typeof e},toStr:function(e){return null==e?"":e+""},cloneDeep:function(e){var t=this.mixin({},e),n=this;return this.each(t,function(e,i){e&&(n.isArray(e)?t[i]=[].concat(e):n.isObject(e)&&(t[i]=n.cloneDeep(e)))}),t},error:function(e){throw Error(e)},every:function(e,t){var n=!0;return e?(this.each(e,function(i,r){n&&(n=t.call(null,i,r,e)&&n)}),!!n):n},any:function(e,t){var n=!1;return e&&this.each(e,function(i,r){if(t.call(null,i,r,e))return n=!0,!1}),n},getUniqueId:(i=0,function(){return i++}),templatify:function(e){if(this.isFunction(e))return e;var t=r.element(e);return"SCRIPT"===t.prop("tagName")?function(){return t.text()}:function(){return String(e)}},defer:function(e){setTimeout(e,0)},noop:function(){},formatPrefix:function(e,t){return t?"":e+"-"},className:function(e,t,n){return(n?"":".")+e+t},escapeHighlightedString:function(e,t,n){t=t||"<em>";var i=document.createElement("div");i.appendChild(document.createTextNode(t)),n=n||"</em>";var r=document.createElement("div");r.appendChild(document.createTextNode(n));var o=document.createElement("div");return o.appendChild(document.createTextNode(e)),o.innerHTML.replace(RegExp(s(i.innerHTML),"g"),t).replace(RegExp(s(r.innerHTML),"g"),n)}}},1669:function(e,t,n){"use strict";var i=n(3615),r=n(2211),s=n(1149);e.exports=function(e,t){var n=s(e.as._ua);return n&&n[0]>=3&&n[1]>20&&((t=t||{}).additionalUA="autocomplete.js "+r),function(n,r){e.search(n,t,function(e,t){e?i.error(e.message):r(t.hits,t)})}}},8513:function(e,t,n){"use strict";e.exports={hits:n(1669),popularIn:n(7345)}},7345:function(e,t,n){"use strict";var i=n(3615),r=n(2211),s=n(1149);e.exports=function(e,t,n,o){var a=s(e.as._ua);if(a&&a[0]>=3&&a[1]>20&&((t=t||{}).additionalUA="autocomplete.js "+r),!n.source)return i.error("Missing 'source' key");var u=i.isFunction(n.source)?n.source:function(e){return e[n.source]};if(!n.index)return i.error("Missing 'index' key");var c=n.index;return o=o||{},function(a,l){e.search(a,t,function(e,a){if(e)return void i.error(e.message);if(a.hits.length>0){var h=a.hits[0],p=i.mixin({hitsPerPage:0},n);delete p.source,delete p.index;var d=s(c.as._ua);d&&d[0]>=3&&d[1]>20&&(t.additionalUA="autocomplete.js "+r),c.search(u(h),p,function(e,t){if(e)return void i.error(e.message);var n=[];if(o.includeAll){var r=o.allTitle||"All departments";n.push(i.mixin({facet:{value:r,count:t.nbHits}},i.cloneDeep(h)))}i.each(t.facets,function(e,t){i.each(e,function(e,r){n.push(i.mixin({facet:{facet:t,value:r,count:e}},i.cloneDeep(h)))})});for(var s=1;s<a.hits.length;++s)n.push(a.hits[s]);l(n,a)});return}l([])})}}},5900:function(e,t,n){"use strict";var i=n(3777);n(990).element=i;var r=n(3615);r.isArray=i.isArray,r.isFunction=i.isFunction,r.isObject=i.isPlainObject,r.bind=i.proxy,r.each=function(e,t){i.each(e,function(e,n){return t(n,e)})},r.map=i.map,r.mixin=i.extend,r.Event=i.Event;var s="aaAutocomplete",o=n(194),a=n(2802);function u(e,t,n,u){n=r.isArray(n)?n:[].slice.call(arguments,2);var c=i(e).each(function(e,r){var c=i(r),l=new a({el:c}),h=u||new o({input:c,eventBus:l,dropdownMenuContainer:t.dropdownMenuContainer,hint:void 0===t.hint||!!t.hint,minLength:t.minLength,autoselect:t.autoselect,autoselectOnBlur:t.autoselectOnBlur,tabAutocomplete:t.tabAutocomplete,openOnFocus:t.openOnFocus,templates:t.templates,debug:t.debug,clearOnSelected:t.clearOnSelected,cssClasses:t.cssClasses,datasets:n,keyboardShortcuts:t.keyboardShortcuts,appendTo:t.appendTo,autoWidth:t.autoWidth,ariaLabel:t.ariaLabel||r.getAttribute("aria-label")});c.data(s,h)});return c.autocomplete={},r.each(["open","close","getVal","setVal","destroy","getWrapper"],function(e){c.autocomplete[e]=function(){var t,n=arguments;return c.each(function(r,o){var a=i(o).data(s);t=a[e].apply(a,n)}),t}}),c}u.sources=o.sources,u.escapeHighlightedString=r.escapeHighlightedString;var c="autocomplete"in window,l=window.autocomplete;u.noConflict=function(){return c?window.autocomplete=l:delete window.autocomplete,u},e.exports=u},2211:function(e){e.exports="0.37.1"},3777:function(e){var t,n,i,r;t=window,function(e){var n,i=1,r=Array.prototype.slice,s=e.isFunction,o=function(e){return"string"==typeof e},a={},u={},c="onfocusin"in t,l={focus:"focusin",blur:"focusout"},h={mouseenter:"mouseover",mouseleave:"mouseout"};function p(e){return e._zid||(e._zid=i++)}function d(e,t,n,i){if((t=f(t)).ns)var r=RegExp("(?:^| )"+t.ns.replace(" "," .* ?")+"(?: |$)");return(a[p(e)]||[]).filter(function(e){return e&&(!t.e||e.e==t.e)&&(!t.ns||r.test(e.ns))&&(!n||p(e.fn)===p(n))&&(!i||e.sel==i)})}function f(e){var t=(""+e).split(".");return{e:t[0],ns:t.slice(1).sort().join(" ")}}function g(e,t){return e.del&&!c&&e.e in l||!!t}function m(e){return h[e]||c&&l[e]||e}function v(t,i,r,s,o,u,c){var l=p(t),d=a[l]||(a[l]=[]);i.split(/\s/).forEach(function(i){if("ready"==i)return e(document).ready(r);var a=f(i);a.fn=r,a.sel=o,a.e in h&&(r=function(t){var n=t.relatedTarget;if(!n||n!==this&&!e.contains(this,n))return a.fn.apply(this,arguments)}),a.del=u;var l=u||r;a.proxy=function(e){if(!(e=C(e)).isImmediatePropagationStopped()){try{var i=Object.getOwnPropertyDescriptor(e,"data");(!i||i.writable)&&(e.data=s)}catch(e){}var r=l.apply(t,e._args==n?[e]:[e].concat(e._args));return!1===r&&(e.preventDefault(),e.stopPropagation()),r}},a.i=d.length,d.push(a),"addEventListener"in t&&t.addEventListener(m(a.e),a.proxy,g(a,c))})}function y(e,t,n,i,r){var s=p(e);(t||"").split(/\s/).forEach(function(t){d(e,t,n,i).forEach(function(t){delete a[s][t.i],"removeEventListener"in e&&e.removeEventListener(m(t.e),t.proxy,g(t,r))})})}u.click=u.mousedown=u.mouseup=u.mousemove="MouseEvents",e.event={add:v,remove:y},e.proxy=function(t,n){var i=2 in arguments&&r.call(arguments,2);if(s(t)){var a=function(){return t.apply(n,i?i.concat(r.call(arguments)):arguments)};return a._zid=p(t),a}if(o(n))if(i)return i.unshift(t[n],t),e.proxy.apply(null,i);else return e.proxy(t[n],t);throw TypeError("expected function")},e.fn.bind=function(e,t,n){return this.on(e,t,n)},e.fn.unbind=function(e,t){return this.off(e,t)},e.fn.one=function(e,t,n,i){return this.on(e,t,n,i,1)};var x=function(){return!0},b=function(){return!1},w=/^([A-Z]|returnValue$|layer[XY]$|webkitMovement[XY]$)/,S={preventDefault:"isDefaultPrevented",stopImmediatePropagation:"isImmediatePropagationStopped",stopPropagation:"isPropagationStopped"};function C(t,i){if(i||!t.isDefaultPrevented){i||(i=t),e.each(S,function(e,n){var r=i[e];t[e]=function(){return this[n]=x,r&&r.apply(i,arguments)},t[n]=b});try{t.timeStamp||(t.timeStamp=Date.now())}catch(e){}(i.defaultPrevented!==n?i.defaultPrevented:"returnValue"in i?!1===i.returnValue:i.getPreventDefault&&i.getPreventDefault())&&(t.isDefaultPrevented=x)}return t}function E(e){var t,i={originalEvent:e};for(t in e)w.test(t)||e[t]===n||(i[t]=e[t]);return C(i,e)}e.fn.delegate=function(e,t,n){return this.on(t,e,n)},e.fn.undelegate=function(e,t,n){return this.off(t,e,n)},e.fn.live=function(t,n){return e(document.body).delegate(this.selector,t,n),this},e.fn.die=function(t,n){return e(document.body).undelegate(this.selector,t,n),this},e.fn.on=function(t,i,a,u,c){var l,h,p=this;return t&&!o(t)?(e.each(t,function(e,t){p.on(e,i,a,t,c)}),p):(o(i)||s(u)||!1===u||(u=a,a=i,i=n),(n===u||!1===a)&&(u=a,a=n),!1===u&&(u=b),p.each(function(n,s){c&&(l=function(e){return y(s,e.type,u),u.apply(this,arguments)}),i&&(h=function(t){var n,o=e(t.target).closest(i,s).get(0);if(o&&o!==s)return n=e.extend(E(t),{currentTarget:o,liveFired:s}),(l||u).apply(o,[n].concat(r.call(arguments,1)))}),v(s,t,u,a,i,h||l)}))},e.fn.off=function(t,i,r){var a=this;return t&&!o(t)?(e.each(t,function(e,t){a.off(e,i,t)}),a):(o(i)||s(r)||!1===r||(r=i,i=n),!1===r&&(r=b),a.each(function(){y(this,t,r,i)}))},e.fn.trigger=function(t,n){return(t=o(t)||e.isPlainObject(t)?e.Event(t):C(t))._args=n,this.each(function(){t.type in l&&"function"==typeof this[t.type]?this[t.type]():"dispatchEvent"in this?this.dispatchEvent(t):e(this).triggerHandler(t,n)})},e.fn.triggerHandler=function(t,n){var i,r;return this.each(function(s,a){(i=E(o(t)?e.Event(t):t))._args=n,i.target=a,e.each(d(a,t.type||t),function(e,t){if(r=t.proxy(i),i.isImmediatePropagationStopped())return!1})}),r},"focusin focusout focus blur load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select keydown keypress keyup error".split(" ").forEach(function(t){e.fn[t]=function(e){return 0 in arguments?this.bind(t,e):this.trigger(t)}}),e.Event=function(e,t){o(e)||(e=(t=e).type);var n=document.createEvent(u[e]||"Events"),i=!0;if(t)for(var r in t)"bubbles"==r?i=!!t[r]:n[r]=t[r];return n.initEvent(e,i,!0),C(n)}}(r=function(){var e,n,i,r,s,o,a=[],u=a.concat,c=a.filter,l=a.slice,h=t.document,p={},d={},f={"column-count":1,columns:1,"font-weight":1,"line-height":1,opacity:1,"z-index":1,zoom:1},g=/^\s*<(\w+|!)[^>]*>/,m=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,v=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,y=/^(?:body|html)$/i,x=/([A-Z])/g,b=["val","css","html","text","data","width","height","offset"],w=h.createElement("table"),S=h.createElement("tr"),C={tr:h.createElement("tbody"),tbody:w,thead:w,tfoot:w,td:S,th:S,"*":h.createElement("div")},E=/complete|loaded|interactive/,_=/^[\w-]*$/,k={},T=k.toString,O={},L=h.createElement("div"),A={tabindex:"tabIndex",readonly:"readOnly",for:"htmlFor",class:"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},$=Array.isArray||function(e){return e instanceof Array};function P(e){return null==e?String(e):k[T.call(e)]||"object"}function I(e){return"function"==P(e)}function Q(e){return null!=e&&e==e.window}function R(e){return null!=e&&e.nodeType==e.DOCUMENT_NODE}function N(e){return"object"==P(e)}function D(e){return N(e)&&!Q(e)&&Object.getPrototypeOf(e)==Object.prototype}function F(e){var t=!!e&&"length"in e&&e.length,n=i.type(e);return"function"!=n&&!Q(e)&&("array"==n||0===t||"number"==typeof t&&t>0&&t-1 in e)}function j(e){return e.replace(/::/g,"/").replace(/([A-Z]+)([A-Z][a-z])/g,"$1_$2").replace(/([a-z\d])([A-Z])/g,"$1_$2").replace(/_/g,"-").toLowerCase()}function H(e){return e in d?d[e]:d[e]=RegExp("(^|\\s)"+e+"(\\s|$)")}function V(e,t){return"number"!=typeof t||f[j(e)]?t:t+"px"}function B(e){return"children"in e?l.call(e.children):i.map(e.childNodes,function(e){if(1==e.nodeType)return e})}function M(e,t){var n,i=e?e.length:0;for(n=0;n<i;n++)this[n]=e[n];this.length=i,this.selector=t||""}function q(e,t){return null==t?i(e):i(e).filter(t)}function z(e,t,n,i){return I(t)?t.call(e,n,i):t}function K(e,t,n){null==n?e.removeAttribute(t):e.setAttribute(t,n)}function W(t,n){var i=t.className||"",r=i&&i.baseVal!==e;if(e===n)return r?i.baseVal:i;r?i.baseVal=n:t.className=n}function U(e){try{return e?"true"==e||"false"!=e&&("null"==e?null:+e+""==e?+e:/^[\[\{]/.test(e)?i.parseJSON(e):e):e}catch(t){return e}}return O.matches=function(e,t){if(!t||!e||1!==e.nodeType)return!1;var n=e.matches||e.webkitMatchesSelector||e.mozMatchesSelector||e.oMatchesSelector||e.matchesSelector;if(n)return n.call(e,t);var i,r=e.parentNode,s=!r;return s&&(r=L).appendChild(e),i=~O.qsa(r,t).indexOf(e),s&&L.removeChild(e),i},s=function(e){return e.replace(/-+(.)?/g,function(e,t){return t?t.toUpperCase():""})},o=function(e){return c.call(e,function(t,n){return e.indexOf(t)==n})},O.fragment=function(t,n,r){var s,o,a;return m.test(t)&&(s=i(h.createElement(RegExp.$1))),s||(t.replace&&(t=t.replace(v,"<$1></$2>")),e===n&&(n=g.test(t)&&RegExp.$1),n in C||(n="*"),(a=C[n]).innerHTML=""+t,s=i.each(l.call(a.childNodes),function(){a.removeChild(this)})),D(r)&&(o=i(s),i.each(r,function(e,t){b.indexOf(e)>-1?o[e](t):o.attr(e,t)})),s},O.Z=function(e,t){return new M(e,t)},O.isZ=function(e){return e instanceof O.Z},O.init=function(t,n){var r,s;if(!t)return O.Z();if("string"==typeof t)if("<"==(t=t.trim())[0]&&g.test(t))r=O.fragment(t,RegExp.$1,n),t=null;else{if(e!==n)return i(n).find(t);r=O.qsa(h,t)}else if(I(t))return i(h).ready(t);else if(O.isZ(t))return t;else if($(t))s=t,r=c.call(s,function(e){return null!=e});else if(N(t))r=[t],t=null;else if(g.test(t))r=O.fragment(t.trim(),RegExp.$1,n),t=null;else{if(e!==n)return i(n).find(t);r=O.qsa(h,t)}return O.Z(r,t)},(i=function(e,t){return O.init(e,t)}).extend=function(t){var i,r=l.call(arguments,1);return"boolean"==typeof t&&(i=t,t=r.shift()),r.forEach(function(r){!function t(i,r,s){for(n in r)s&&(D(r[n])||$(r[n]))?(D(r[n])&&!D(i[n])&&(i[n]={}),$(r[n])&&!$(i[n])&&(i[n]=[]),t(i[n],r[n],s)):r[n]!==e&&(i[n]=r[n])}(t,r,i)}),t},O.qsa=function(e,t){var n,i="#"==t[0],r=!i&&"."==t[0],s=i||r?t.slice(1):t,o=_.test(s);return e.getElementById&&o&&i?(n=e.getElementById(s))?[n]:[]:1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType?[]:l.call(o&&!i&&e.getElementsByClassName?r?e.getElementsByClassName(s):e.getElementsByTagName(t):e.querySelectorAll(t))},i.contains=h.documentElement.contains?function(e,t){return e!==t&&e.contains(t)}:function(e,t){for(;t&&(t=t.parentNode);)if(t===e)return!0;return!1},i.type=P,i.isFunction=I,i.isWindow=Q,i.isArray=$,i.isPlainObject=D,i.isEmptyObject=function(e){var t;for(t in e)return!1;return!0},i.isNumeric=function(e){var t=Number(e),n=typeof e;return null!=e&&"boolean"!=n&&("string"!=n||e.length)&&!isNaN(t)&&isFinite(t)||!1},i.inArray=function(e,t,n){return a.indexOf.call(t,e,n)},i.camelCase=s,i.trim=function(e){return null==e?"":String.prototype.trim.call(e)},i.uuid=0,i.support={},i.expr={},i.noop=function(){},i.map=function(e,t){var n,r,s,o=[];if(F(e))for(r=0;r<e.length;r++)null!=(n=t(e[r],r))&&o.push(n);else for(s in e)null!=(n=t(e[s],s))&&o.push(n);return o.length>0?i.fn.concat.apply([],o):o},i.each=function(e,t){var n,i;if(F(e))for(n=0;n<e.length&&!1!==t.call(e[n],n,e[n]);n++);else for(i in e)if(!1===t.call(e[i],i,e[i]))break;return e},i.grep=function(e,t){return c.call(e,t)},t.JSON&&(i.parseJSON=JSON.parse),i.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,t){k["[object "+t+"]"]=t.toLowerCase()}),i.fn={constructor:O.Z,length:0,forEach:a.forEach,reduce:a.reduce,push:a.push,sort:a.sort,splice:a.splice,indexOf:a.indexOf,concat:function(){var e,t,n=[];for(e=0;e<arguments.length;e++)t=arguments[e],n[e]=O.isZ(t)?t.toArray():t;return u.apply(O.isZ(this)?this.toArray():this,n)},map:function(e){return i(i.map(this,function(t,n){return e.call(t,n,t)}))},slice:function(){return i(l.apply(this,arguments))},ready:function(e){return E.test(h.readyState)&&h.body?e(i):h.addEventListener("DOMContentLoaded",function(){e(i)},!1),this},get:function(t){return e===t?l.call(this):this[t>=0?t:t+this.length]},toArray:function(){return this.get()},size:function(){return this.length},remove:function(){return this.each(function(){null!=this.parentNode&&this.parentNode.removeChild(this)})},each:function(e){return a.every.call(this,function(t,n){return!1!==e.call(t,n,t)}),this},filter:function(e){return I(e)?this.not(this.not(e)):i(c.call(this,function(t){return O.matches(t,e)}))},add:function(e,t){return i(o(this.concat(i(e,t))))},is:function(e){return this.length>0&&O.matches(this[0],e)},not:function(t){var n=[];if(I(t)&&t.call!==e)this.each(function(e){t.call(this,e)||n.push(this)});else{var r="string"==typeof t?this.filter(t):F(t)&&I(t.item)?l.call(t):i(t);this.forEach(function(e){0>r.indexOf(e)&&n.push(e)})}return i(n)},has:function(e){return this.filter(function(){return N(e)?i.contains(this,e):i(this).find(e).size()})},eq:function(e){return -1===e?this.slice(e):this.slice(e,+e+1)},first:function(){var e=this[0];return e&&!N(e)?e:i(e)},last:function(){var e=this[this.length-1];return e&&!N(e)?e:i(e)},find:function(e){var t=this;return e?"object"==typeof e?i(e).filter(function(){var e=this;return a.some.call(t,function(t){return i.contains(t,e)})}):1==this.length?i(O.qsa(this[0],e)):this.map(function(){return O.qsa(this,e)}):i()},closest:function(e,t){var n=[],r="object"==typeof e&&i(e);return this.each(function(i,s){for(;s&&!(r?r.indexOf(s)>=0:O.matches(s,e));)s=s!==t&&!R(s)&&s.parentNode;s&&0>n.indexOf(s)&&n.push(s)}),i(n)},parents:function(e){for(var t=[],n=this;n.length>0;)n=i.map(n,function(e){if((e=e.parentNode)&&!R(e)&&0>t.indexOf(e))return t.push(e),e});return q(t,e)},parent:function(e){return q(o(this.pluck("parentNode")),e)},children:function(e){return q(this.map(function(){return B(this)}),e)},contents:function(){return this.map(function(){return this.contentDocument||l.call(this.childNodes)})},siblings:function(e){return q(this.map(function(e,t){return c.call(B(t.parentNode),function(e){return e!==t})}),e)},empty:function(){return this.each(function(){this.innerHTML=""})},pluck:function(e){return i.map(this,function(t){return t[e]})},show:function(){return this.each(function(){var e,t,n;"none"==this.style.display&&(this.style.display=""),"none"==getComputedStyle(this,"").getPropertyValue("display")&&(this.style.display=(p[e=this.nodeName]||(t=h.createElement(e),h.body.appendChild(t),n=getComputedStyle(t,"").getPropertyValue("display"),t.parentNode.removeChild(t),"none"==n&&(n="block"),p[e]=n),p[e]))})},replaceWith:function(e){return this.before(e).remove()},wrap:function(e){var t=I(e);if(this[0]&&!t)var n=i(e).get(0),r=n.parentNode||this.length>1;return this.each(function(s){i(this).wrapAll(t?e.call(this,s):r?n.cloneNode(!0):n)})},wrapAll:function(e){if(this[0]){var t;for(i(this[0]).before(e=i(e));(t=e.children()).length;)e=t.first();i(e).append(this)}return this},wrapInner:function(e){var t=I(e);return this.each(function(n){var r=i(this),s=r.contents(),o=t?e.call(this,n):e;s.length?s.wrapAll(o):r.append(o)})},unwrap:function(){return this.parent().each(function(){i(this).replaceWith(i(this).children())}),this},clone:function(){return this.map(function(){return this.cloneNode(!0)})},hide:function(){return this.css("display","none")},toggle:function(t){return this.each(function(){var n=i(this);(e===t?"none"==n.css("display"):t)?n.show():n.hide()})},prev:function(e){return i(this.pluck("previousElementSibling")).filter(e||"*")},next:function(e){return i(this.pluck("nextElementSibling")).filter(e||"*")},html:function(e){return 0 in arguments?this.each(function(t){var n=this.innerHTML;i(this).empty().append(z(this,e,t,n))}):0 in this?this[0].innerHTML:null},text:function(e){return 0 in arguments?this.each(function(t){var n=z(this,e,t,this.textContent);this.textContent=null==n?"":""+n}):0 in this?this.pluck("textContent").join(""):null},attr:function(t,i){var r;return"string"!=typeof t||1 in arguments?this.each(function(e){if(1===this.nodeType)if(N(t))for(n in t)K(this,n,t[n]);else K(this,t,z(this,i,e,this.getAttribute(t)))}):0 in this&&1==this[0].nodeType&&null!=(r=this[0].getAttribute(t))?r:e},removeAttr:function(e){return this.each(function(){1===this.nodeType&&e.split(" ").forEach(function(e){K(this,e)},this)})},prop:function(e,t){return e=A[e]||e,1 in arguments?this.each(function(n){this[e]=z(this,t,n,this[e])}):this[0]&&this[0][e]},removeProp:function(e){return e=A[e]||e,this.each(function(){delete this[e]})},data:function(t,n){var i="data-"+t.replace(x,"-$1").toLowerCase(),r=1 in arguments?this.attr(i,n):this.attr(i);return null!==r?U(r):e},val:function(e){return 0 in arguments?(null==e&&(e=""),this.each(function(t){this.value=z(this,e,t,this.value)})):this[0]&&(this[0].multiple?i(this[0]).find("option").filter(function(){return this.selected}).pluck("value"):this[0].value)},offset:function(e){if(e)return this.each(function(t){var n=i(this),r=z(this,e,t,n.offset()),s=n.offsetParent().offset(),o={top:r.top-s.top,left:r.left-s.left};"static"==n.css("position")&&(o.position="relative"),n.css(o)});if(!this.length)return null;if(h.documentElement!==this[0]&&!i.contains(h.documentElement,this[0]))return{top:0,left:0};var n=this[0].getBoundingClientRect();return{left:n.left+t.pageXOffset,top:n.top+t.pageYOffset,width:Math.round(n.width),height:Math.round(n.height)}},css:function(e,t){if(arguments.length<2){var r=this[0];if("string"==typeof e){if(!r)return;return r.style[s(e)]||getComputedStyle(r,"").getPropertyValue(e)}if($(e)){if(!r)return;var o={},a=getComputedStyle(r,"");return i.each(e,function(e,t){o[t]=r.style[s(t)]||a.getPropertyValue(t)}),o}}var u="";if("string"==P(e))t||0===t?u=j(e)+":"+V(e,t):this.each(function(){this.style.removeProperty(j(e))});else for(n in e)e[n]||0===e[n]?u+=j(n)+":"+V(n,e[n])+";":this.each(function(){this.style.removeProperty(j(n))});return this.each(function(){this.style.cssText+=";"+u})},index:function(e){return e?this.indexOf(i(e)[0]):this.parent().children().indexOf(this[0])},hasClass:function(e){return!!e&&a.some.call(this,function(e){return this.test(W(e))},H(e))},addClass:function(e){return e?this.each(function(t){if("className"in this){r=[];var n=W(this);z(this,e,t,n).split(/\s+/g).forEach(function(e){i(this).hasClass(e)||r.push(e)},this),r.length&&W(this,n+(n?" ":"")+r.join(" "))}}):this},removeClass:function(t){return this.each(function(n){if("className"in this){if(e===t)return W(this,"");z(this,t,n,r=W(this)).split(/\s+/g).forEach(function(e){r=r.replace(H(e)," ")}),W(this,r.trim())}})},toggleClass:function(t,n){return t?this.each(function(r){var s=i(this);z(this,t,r,W(this)).split(/\s+/g).forEach(function(t){(e===n?!s.hasClass(t):n)?s.addClass(t):s.removeClass(t)})}):this},scrollTop:function(t){if(this.length){var n="scrollTop"in this[0];return e===t?n?this[0].scrollTop:this[0].pageYOffset:this.each(n?function(){this.scrollTop=t}:function(){this.scrollTo(this.scrollX,t)})}},scrollLeft:function(t){if(this.length){var n="scrollLeft"in this[0];return e===t?n?this[0].scrollLeft:this[0].pageXOffset:this.each(n?function(){this.scrollLeft=t}:function(){this.scrollTo(t,this.scrollY)})}},position:function(){if(this.length){var e=this[0],t=this.offsetParent(),n=this.offset(),r=y.test(t[0].nodeName)?{top:0,left:0}:t.offset();return n.top-=parseFloat(i(e).css("margin-top"))||0,n.left-=parseFloat(i(e).css("margin-left"))||0,r.top+=parseFloat(i(t[0]).css("border-top-width"))||0,r.left+=parseFloat(i(t[0]).css("border-left-width"))||0,{top:n.top-r.top,left:n.left-r.left}}},offsetParent:function(){return this.map(function(){for(var e=this.offsetParent||h.body;e&&!y.test(e.nodeName)&&"static"==i(e).css("position");)e=e.offsetParent;return e})}},i.fn.detach=i.fn.remove,["width","height"].forEach(function(t){var n=t.replace(/./,function(e){return e[0].toUpperCase()});i.fn[t]=function(r){var s,o=this[0];return e===r?Q(o)?o["inner"+n]:R(o)?o.documentElement["scroll"+n]:(s=this.offset())&&s[t]:this.each(function(e){(o=i(this)).css(t,z(this,r,e,o[t]()))})}}),["after","prepend","before","append"].forEach(function(n,r){var s=r%2;i.fn[n]=function(){var n,o,a=i.map(arguments,function(t){var r=[];return"array"==(n=P(t))?(t.forEach(function(t){return t.nodeType!==e?r.push(t):i.zepto.isZ(t)?r=r.concat(t.get()):void(r=r.concat(O.fragment(t)))}),r):"object"==n||null==t?t:O.fragment(t)}),u=this.length>1;return a.length<1?this:this.each(function(e,n){o=s?n:n.parentNode,n=0==r?n.nextSibling:1==r?n.firstChild:2==r?n:null;var c=i.contains(h.documentElement,o);a.forEach(function(e){if(u)e=e.cloneNode(!0);else if(!o)return i(e).remove();o.insertBefore(e,n),c&&function e(t,n){n(t);for(var i=0,r=t.childNodes.length;i<r;i++)e(t.childNodes[i],n)}(e,function(e){if(null!=e.nodeName&&"SCRIPT"===e.nodeName.toUpperCase()&&(!e.type||"text/javascript"===e.type)&&!e.src){var n=e.ownerDocument?e.ownerDocument.defaultView:t;n.eval.call(n,e.innerHTML)}})})})},i.fn[s?n+"To":"insert"+(r?"Before":"After")]=function(e){return i(e)[n](this),this}}),O.Z.prototype=M.prototype=i.fn,O.uniq=o,O.deserializeValue=U,i.zepto=O,i}()),i=[],r.fn.remove=function(){return this.each(function(){this.parentNode&&("IMG"===this.tagName&&(i.push(this),this.src="data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=",n&&clearTimeout(n),n=setTimeout(function(){i=[]},6e4)),this.parentNode.removeChild(this))})},function(e){var t={},n=e.fn.data,i=e.camelCase,r=e.expando="Zepto"+ +new Date,s=[];function o(n,o,a){var u,c,l=n[r]||(n[r]=++e.uuid),h=t[l]||(t[l]=(u=n,c={},e.each(u.attributes||s,function(t,n){0==n.name.indexOf("data-")&&(c[i(n.name.replace("data-",""))]=e.zepto.deserializeValue(n.value))}),c));return void 0!==o&&(h[i(o)]=a),h}e.fn.data=function(s,a){return void 0===a?e.isPlainObject(s)?this.each(function(t,n){e.each(s,function(e,t){o(n,e,t)})}):0 in this?function(s,a){var u=s[r],c=u&&t[u];if(void 0===a)return c||o(s);if(c){if(a in c)return c[a];var l=i(a);if(l in c)return c[l]}return n.call(e(s),a)}(this[0],s):void 0:this.each(function(){o(this,s,a)})},e.data=function(t,n,i){return e(t).data(n,i)},e.hasData=function(n){var i=n[r],s=i&&t[i];return!!s&&!e.isEmptyObject(s)},e.fn.removeData=function(n){return"string"==typeof n&&(n=n.split(/\s+/)),this.each(function(){var s=this[r],o=s&&t[s];o&&e.each(n||o,function(e){delete o[n?i(this):e]})})},["remove","empty"].forEach(function(t){var n=e.fn[t];e.fn[t]=function(){var e=this.find("*");return"remove"===t&&(e=e.add(this)),e.removeData(),n.call(this)}})}(r),e.exports=r},1815:function(e,t){!function(e){var t=/\S/,n=/\"/g,i=/\n/g,r=/\r/g,s=/\\/g,o=/\u2028/,a=/\u2029/;function u(e){return e.trim?e.trim():e.replace(/^\s*|\s*$/g,"")}function c(e,t,n){if(t.charAt(n)!=e.charAt(0))return!1;for(var i=1,r=e.length;i<r;i++)if(t.charAt(n+i)!=e.charAt(i))return!1;return!0}e.tags={"#":1,"^":2,"<":3,$:4,"/":5,"!":6,">":7,"=":8,_v:9,"{":10,"&":11,_t:12},e.scan=function(n,i){var r,s=n.length,o=0,a=null,l=null,h="",p=[],d=!1,f=0,g=0,m="{{",v="}}";function y(){h.length>0&&(p.push({tag:"_t",text:new String(h)}),h="")}function x(n,i){if(y(),n&&function(){for(var n=!0,i=g;i<p.length;i++)if(!(n=e.tags[p[i].tag]<e.tags._v||"_t"==p[i].tag&&null===p[i].text.match(t)))return!1;return n}())for(var r,s=g;s<p.length;s++)p[s].text&&((r=p[s+1])&&">"==r.tag&&(r.indent=p[s].text.toString()),p.splice(s,1));else i||p.push({tag:"\n"});d=!1,g=p.length}for(i&&(m=(i=i.split(" "))[0],v=i[1]),f=0;f<s;f++){0==o?c(m,n,f)?(--f,y(),o=1):"\n"==n.charAt(f)?x(d):h+=n.charAt(f):1==o?(f+=m.length-1,"="==(a=(l=e.tags[n.charAt(f+1)])?n.charAt(f+1):"_v")?(f=function(e,t){var n="="+v,i=e.indexOf(n,t),r=u(e.substring(e.indexOf("=",t)+1,i)).split(" ");return m=r[0],v=r[r.length-1],i+n.length-1}(n,f),o=0):(l&&f++,o=2),d=f):c(v,n,f)?(p.push({tag:a,n:u(h),otag:m,ctag:v,i:"/"==a?d-m.length:f+v.length}),h="",f+=v.length-1,o=0,"{"==a&&("}}"==v?f++:"}"===(r=p[p.length-1]).n.substr(r.n.length-1)&&(r.n=r.n.substring(0,r.n.length-1)))):h+=n.charAt(f)}return x(d,!0),p};var l={_t:!0,"\n":!0,$:!0,"/":!0};e.stringify=function(t,n,i){return"{code: function (c,p,i) { "+e.wrapMain(t.code)+" },"+function e(t){var n=[];for(var i in t.partials)n.push('"'+p(i)+'":{name:"'+p(t.partials[i].name)+'", '+e(t.partials[i])+"}");return"partials: {"+n.join(",")+"}, subs: "+function(e){var t=[];for(var n in e)t.push('"'+p(n)+'": function(c,p,t,i) {'+e[n]+"}");return"{ "+t.join(",")+" }"}(t.subs)}(t)+"}"};var h=0;function p(e){return e.replace(s,"\\\\").replace(n,'\\"').replace(i,"\\n").replace(r,"\\r").replace(o,"\\u2028").replace(a,"\\u2029")}function d(e){return~e.indexOf(".")?"d":"f"}function f(e,t){var n="<"+(t.prefix||"")+e.n+h++;return t.partials[n]={name:e.n,partials:{}},t.code+='t.b(t.rp("'+p(n)+'",c,p,"'+(e.indent||"")+'"));',n}function g(e,t){t.code+="t.b(t.t(t."+d(e.n)+'("'+p(e.n)+'",c,p,0)));'}function m(e){return"t.b("+e+");"}e.generate=function(t,n,i){h=0;var r={code:"",subs:{},partials:{}};return(e.walk(t,r),i.asString)?this.stringify(r,n,i):this.makeTemplate(r,n,i)},e.wrapMain=function(e){return'var t=this;t.b(i=i||"");'+e+"return t.fl();"},e.template=e.Template,e.makeTemplate=function(e,t,n){var i=this.makePartials(e);return i.code=Function("c","p","i",this.wrapMain(e.code)),new this.template(i,t,this,n)},e.makePartials=function(e){var t,n={subs:{},partials:e.partials,name:e.name};for(t in n.partials)n.partials[t]=this.makePartials(n.partials[t]);for(t in e.subs)n.subs[t]=Function("c","p","t","i",e.subs[t]);return n},e.codegen={"#":function(t,n){n.code+="if(t.s(t."+d(t.n)+'("'+p(t.n)+'",c,p,1),c,p,0,'+t.i+","+t.end+',"'+t.otag+" "+t.ctag+'")){t.rs(c,p,function(c,p,t){',e.walk(t.nodes,n),n.code+="});c.pop();}"},"^":function(t,n){n.code+="if(!t.s(t."+d(t.n)+'("'+p(t.n)+'",c,p,1),c,p,1,0,0,"")){',e.walk(t.nodes,n),n.code+="};"},">":f,"<":function(t,n){var i={partials:{},code:"",subs:{},inPartial:!0};e.walk(t.nodes,i);var r=n.partials[f(t,n)];r.subs=i.subs,r.partials=i.partials},$:function(t,n){var i={subs:{},code:"",partials:n.partials,prefix:t.n};e.walk(t.nodes,i),n.subs[t.n]=i.code,n.inPartial||(n.code+='t.sub("'+p(t.n)+'",c,p,i);')},"\n":function(e,t){t.code+=m('"\\n"'+(e.last?"":" + i"))},_v:function(e,t){t.code+="t.b(t.v(t."+d(e.n)+'("'+p(e.n)+'",c,p,0)));'},_t:function(e,t){t.code+=m('"'+p(e.text)+'"')},"{":g,"&":g},e.walk=function(t,n){for(var i,r=0,s=t.length;r<s;r++)(i=e.codegen[t[r].tag])&&i(t[r],n);return n},e.parse=function(t,n,i){return function t(n,i,r,s){var o=[],a=null,u=null,c=null;for(u=r[r.length-1];n.length>0;){if(c=n.shift(),u&&"<"==u.tag&&!(c.tag in l))throw Error("Illegal content in < super tag.");if(e.tags[c.tag]<=e.tags.$||function(e,t){for(var n=0,i=t.length;n<i;n++)if(t[n].o==e.n)return e.tag="#",!0}(c,s))r.push(c),c.nodes=t(n,c.tag,r,s);else if("/"==c.tag){if(0===r.length)throw Error("Closing tag without opener: /"+c.n);if(a=r.pop(),c.n!=a.n&&!function(e,t,n){for(var i=0,r=n.length;i<r;i++)if(n[i].c==e&&n[i].o==t)return!0}(c.n,a.n,s))throw Error("Nesting error: "+a.n+" vs. "+c.n);return a.end=c.i,o}else"\n"==c.tag&&(c.last=0==n.length||"\n"==n[0].tag);o.push(c)}if(r.length>0)throw Error("missing closing tag: "+r.pop().n);return o}(t,"",[],(i=i||{}).sectionTags||[])},e.cache={},e.cacheKey=function(e,t){return[e,!!t.asString,!!t.disableLambda,t.delimiters,!!t.modelGet].join("||")},e.compile=function(t,n){n=n||{};var i=e.cacheKey(t,n),r=this.cache[i];if(r){var s=r.partials;for(var o in s)delete s[o].instance;return r}return r=this.generate(this.parse(this.scan(t,n.delimiters),t,n),t,n),this.cache[i]=r}}(t)},2133:function(e,t,n){var i=n(1815);i.Template=n(2252).Template,i.template=i.Template,e.exports=i},2252:function(e,t){!function(e){function t(e,t,n){var i;return t&&"object"==typeof t&&(void 0!==t[e]?i=t[e]:n&&t.get&&"function"==typeof t.get&&(i=t.get(e))),i}e.Template=function(e,t,n,i){e=e||{},this.r=e.code||this.r,this.c=n,this.options=i||{},this.text=t||"",this.partials=e.partials||{},this.subs=e.subs||{},this.buf=""},e.Template.prototype={r:function(e,t,n){return""},v:function(e){return a.test(e=u(e))?e.replace(n,"&").replace(i,"<").replace(r,">").replace(s,"'").replace(o,"""):e},t:u,render:function(e,t,n){return this.ri([e],t||{},n)},ri:function(e,t,n){return this.r(e,t,n)},ep:function(e,t){var n=this.partials[e],i=t[n.name];if(n.instance&&n.base==i)return n.instance;if("string"==typeof i){if(!this.c)throw Error("No compiler available.");i=this.c.compile(i,this.options)}if(!i)return null;if(this.partials[e].base=i,n.subs){for(key in t.stackText||(t.stackText={}),n.subs)t.stackText[key]||(t.stackText[key]=void 0!==this.activeSub&&t.stackText[this.activeSub]?t.stackText[this.activeSub]:this.text);i=function(e,t,n,i,r,s){function o(){}function a(){}o.prototype=e,a.prototype=e.subs;var u,c=new o;for(u in c.subs=new a,c.subsText={},c.buf="",c.stackSubs=i=i||{},c.subsText=s,t)i[u]||(i[u]=t[u]);for(u in i)c.subs[u]=i[u];for(u in c.stackPartials=r=r||{},n)r[u]||(r[u]=n[u]);for(u in r)c.partials[u]=r[u];return c}(i,n.subs,n.partials,this.stackSubs,this.stackPartials,t.stackText)}return this.partials[e].instance=i,i},rp:function(e,t,n,i){var r=this.ep(e,n);return r?r.ri(t,n,i):""},rs:function(e,t,n){var i=e[e.length-1];if(!c(i))return void n(e,t,this);for(var r=0;r<i.length;r++)e.push(i[r]),n(e,t,this),e.pop()},s:function(e,t,n,i,r,s,o){var a;return(!c(e)||0!==e.length)&&("function"==typeof e&&(e=this.ms(e,t,n,i,r,s,o)),a=!!e,!i&&a&&t&&t.push("object"==typeof e?e:t[t.length-1]),a)},d:function(e,n,i,r){var s,o=e.split("."),a=this.f(o[0],n,i,r),u=this.options.modelGet,l=null;if("."===e&&c(n[n.length-2]))a=n[n.length-1];else for(var h=1;h<o.length;h++)void 0!==(s=t(o[h],a,u))?(l=a,a=s):a="";return(!r||!!a)&&(r||"function"!=typeof a||(n.push(l),a=this.mv(a,n,i),n.pop()),a)},f:function(e,n,i,r){for(var s=!1,o=null,a=!1,u=this.options.modelGet,c=n.length-1;c>=0;c--)if(void 0!==(s=t(e,n[c],u))){a=!0;break}return a?(r||"function"!=typeof s||(s=this.mv(s,n,i)),s):!r&&""},ls:function(e,t,n,i,r){var s=this.options.delimiters;return this.options.delimiters=r,this.b(this.ct(u(e.call(t,i)),t,n)),this.options.delimiters=s,!1},ct:function(e,t,n){if(this.options.disableLambda)throw Error("Lambda features disabled.");return this.c.compile(e,this.options).render(t,n)},b:function(e){this.buf+=e},fl:function(){var e=this.buf;return this.buf="",e},ms:function(e,t,n,i,r,s,o){var a,u=t[t.length-1],c=e.call(u);if("function"==typeof c)if(i)return!0;else return a=this.activeSub&&this.subsText&&this.subsText[this.activeSub]?this.subsText[this.activeSub]:this.text,this.ls(c,u,n,a.substring(r,s),o);return c},mv:function(e,t,n){var i=t[t.length-1],r=e.call(i);return"function"==typeof r?this.ct(u(r.call(i)),i,n):r},sub:function(e,t,n,i){var r=this.subs[e];r&&(this.activeSub=e,r(t,n,this,i),this.activeSub=!1)}};var n=/&/g,i=/</g,r=/>/g,s=/\'/g,o=/\"/g,a=/[&<>\"\']/;function u(e){return String(null==e?"":e)}var c=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)}}(t)},9659:function(e,t,n){"use strict";var i,r,s,o=[n(6020),n(7507),n(9788),n(6886),n(9470),n(6168)],a=-1,u=[],c=!1;function l(){i&&r&&(i=!1,r.length?u=r.concat(u):a=-1,u.length&&h())}function h(){if(!i){c=!1,i=!0;for(var e=u.length,t=setTimeout(l);e;){for(r=u,u=[];r&&++a<e;)r[a].run();a=-1,e=u.length}r=null,a=-1,i=!1,clearTimeout(t)}}for(var p=-1,d=o.length;++p<d;)if(o[p]&&o[p].test&&o[p].test()){s=o[p].install(h);break}function f(e,t){this.fun=e,this.array=t}f.prototype.run=function(){var e=this.fun,t=this.array;switch(t.length){case 0:return e();case 1:return e(t[0]);case 2:return e(t[0],t[1]);case 3:return e(t[0],t[1],t[2]);default:return e.apply(null,t)}},e.exports=function(e){var t=Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)t[n-1]=arguments[n];u.push(new f(e,t)),c||i||(c=!0,s())}},6886:function(e,t,n){"use strict";t.test=function(){return!n.g.setImmediate&&void 0!==n.g.MessageChannel},t.install=function(e){var t=new n.g.MessageChannel;return t.port1.onmessage=e,function(){t.port2.postMessage(0)}}},9788:function(e,t,n){"use strict";var i=n.g.MutationObserver||n.g.WebKitMutationObserver;t.test=function(){return i},t.install=function(e){var t=0,r=new i(e),s=n.g.document.createTextNode("");return r.observe(s,{characterData:!0}),function(){s.data=t=++t%2}}},7507:function(e,t,n){"use strict";t.test=function(){return"function"==typeof n.g.queueMicrotask},t.install=function(e){return function(){n.g.queueMicrotask(e)}}},9470:function(e,t,n){"use strict";t.test=function(){return"document"in n.g&&"onreadystatechange"in n.g.document.createElement("script")},t.install=function(e){return function(){var t=n.g.document.createElement("script");return t.onreadystatechange=function(){e(),t.onreadystatechange=null,t.parentNode.removeChild(t),t=null},n.g.document.documentElement.appendChild(t),e}}},6168:function(e,t){"use strict";t.test=function(){return!0},t.install=function(e){return function(){setTimeout(e,0)}}},1998:function(e){!function(){var t,n,i,r,s,o,a,u,c,l,h,p,d,f,g,m,v,y,x,b,w,S,C,E,_,k,T,O,L,A,$=function(e){var t=new $.Builder;return t.pipeline.add($.trimmer,$.stopWordFilter,$.stemmer),t.searchPipeline.add($.stemmer),e.call(t,t),t.build()};$.version="2.3.9",$.utils={},$.utils.warn=(t=this,function(e){t.console&&console.warn&&console.warn(e)}),$.utils.asString=function(e){return null==e?"":e.toString()},$.utils.clone=function(e){if(null==e)return e;for(var t=Object.create(null),n=Object.keys(e),i=0;i<n.length;i++){var r=n[i],s=e[r];if(Array.isArray(s)){t[r]=s.slice();continue}if("string"==typeof s||"number"==typeof s||"boolean"==typeof s){t[r]=s;continue}throw TypeError("clone is not deep and does not support nested objects")}return t},$.FieldRef=function(e,t,n){this.docRef=e,this.fieldName=t,this._stringValue=n},$.FieldRef.joiner="/",$.FieldRef.fromString=function(e){var t=e.indexOf($.FieldRef.joiner);if(-1===t)throw"malformed field ref string";var n=e.slice(0,t),i=e.slice(t+1);return new $.FieldRef(i,n,e)},$.FieldRef.prototype.toString=function(){return void 0==this._stringValue&&(this._stringValue=this.fieldName+$.FieldRef.joiner+this.docRef),this._stringValue},$.Set=function(e){if(this.elements=Object.create(null),e){this.length=e.length;for(var t=0;t<this.length;t++)this.elements[e[t]]=!0}else this.length=0},$.Set.complete={intersect:function(e){return e},union:function(){return this},contains:function(){return!0}},$.Set.empty={intersect:function(){return this},union:function(e){return e},contains:function(){return!1}},$.Set.prototype.contains=function(e){return!!this.elements[e]},$.Set.prototype.intersect=function(e){var t,n,i,r=[];if(e===$.Set.complete)return this;if(e===$.Set.empty)return e;this.length<e.length?(t=this,n=e):(t=e,n=this),i=Object.keys(t.elements);for(var s=0;s<i.length;s++){var o=i[s];o in n.elements&&r.push(o)}return new $.Set(r)},$.Set.prototype.union=function(e){return e===$.Set.complete?$.Set.complete:e===$.Set.empty?this:new $.Set(Object.keys(this.elements).concat(Object.keys(e.elements)))},$.idf=function(e,t){var n=0;for(var i in e)"_index"!=i&&(n+=Object.keys(e[i]).length);return Math.log(1+Math.abs((t-n+.5)/(n+.5)))},$.Token=function(e,t){this.str=e||"",this.metadata=t||{}},$.Token.prototype.toString=function(){return this.str},$.Token.prototype.update=function(e){return this.str=e(this.str,this.metadata),this},$.Token.prototype.clone=function(e){return e=e||function(e){return e},new $.Token(e(this.str,this.metadata),this.metadata)},$.tokenizer=function(e,t){if(null==e||void 0==e)return[];if(Array.isArray(e))return e.map(function(e){return new $.Token($.utils.asString(e).toLowerCase(),$.utils.clone(t))});for(var n=e.toString().toLowerCase(),i=n.length,r=[],s=0,o=0;s<=i;s++){var a=n.charAt(s),u=s-o;if(a.match($.tokenizer.separator)||s==i){if(u>0){var c=$.utils.clone(t)||{};c.position=[o,u],c.index=r.length,r.push(new $.Token(n.slice(o,s),c))}o=s+1}}return r},$.tokenizer.separator=/[\s\-]+/,$.Pipeline=function(){this._stack=[]},$.Pipeline.registeredFunctions=Object.create(null),$.Pipeline.registerFunction=function(e,t){t in this.registeredFunctions&&$.utils.warn("Overwriting existing registered function: "+t),e.label=t,$.Pipeline.registeredFunctions[e.label]=e},$.Pipeline.warnIfFunctionNotRegistered=function(e){e.label&&e.label in this.registeredFunctions||$.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},$.Pipeline.load=function(e){var t=new $.Pipeline;return e.forEach(function(e){var n=$.Pipeline.registeredFunctions[e];if(n)t.add(n);else throw Error("Cannot load unregistered function: "+e)}),t},$.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(e){$.Pipeline.warnIfFunctionNotRegistered(e),this._stack.push(e)},this)},$.Pipeline.prototype.after=function(e,t){$.Pipeline.warnIfFunctionNotRegistered(t);var n=this._stack.indexOf(e);if(-1==n)throw Error("Cannot find existingFn");n+=1,this._stack.splice(n,0,t)},$.Pipeline.prototype.before=function(e,t){$.Pipeline.warnIfFunctionNotRegistered(t);var n=this._stack.indexOf(e);if(-1==n)throw Error("Cannot find existingFn");this._stack.splice(n,0,t)},$.Pipeline.prototype.remove=function(e){var t=this._stack.indexOf(e);-1!=t&&this._stack.splice(t,1)},$.Pipeline.prototype.run=function(e){for(var t=this._stack.length,n=0;n<t;n++){for(var i=this._stack[n],r=[],s=0;s<e.length;s++){var o=i(e[s],s,e);if(null!=o&&""!==o)if(Array.isArray(o))for(var a=0;a<o.length;a++)r.push(o[a]);else r.push(o)}e=r}return e},$.Pipeline.prototype.runString=function(e,t){var n=new $.Token(e,t);return this.run([n]).map(function(e){return e.toString()})},$.Pipeline.prototype.reset=function(){this._stack=[]},$.Pipeline.prototype.toJSON=function(){return this._stack.map(function(e){return $.Pipeline.warnIfFunctionNotRegistered(e),e.label})},$.Vector=function(e){this._magnitude=0,this.elements=e||[]},$.Vector.prototype.positionForIndex=function(e){if(0==this.elements.length)return 0;for(var t=0,n=this.elements.length/2,i=n-t,r=Math.floor(i/2),s=this.elements[2*r];i>1&&(s<e&&(t=r),s>e&&(n=r),s!=e);)i=n-t,r=t+Math.floor(i/2),s=this.elements[2*r];return s==e||s>e?2*r:s<e?(r+1)*2:void 0},$.Vector.prototype.insert=function(e,t){this.upsert(e,t,function(){throw"duplicate index"})},$.Vector.prototype.upsert=function(e,t,n){this._magnitude=0;var i=this.positionForIndex(e);this.elements[i]==e?this.elements[i+1]=n(this.elements[i+1],t):this.elements.splice(i,0,e,t)},$.Vector.prototype.magnitude=function(){if(this._magnitude)return this._magnitude;for(var e=0,t=this.elements.length,n=1;n<t;n+=2){var i=this.elements[n];e+=i*i}return this._magnitude=Math.sqrt(e)},$.Vector.prototype.dot=function(e){for(var t=0,n=this.elements,i=e.elements,r=n.length,s=i.length,o=0,a=0,u=0,c=0;u<r&&c<s;)(o=n[u])<(a=i[c])?u+=2:o>a?c+=2:o==a&&(t+=n[u+1]*i[c+1],u+=2,c+=2);return t},$.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},$.Vector.prototype.toArray=function(){for(var e=Array(this.elements.length/2),t=1,n=0;t<this.elements.length;t+=2,n++)e[n]=this.elements[t];return e},$.Vector.prototype.toJSON=function(){return this.elements},n={ational:"ate",tional:"tion",enci:"ence",anci:"ance",izer:"ize",bli:"ble",alli:"al",entli:"ent",eli:"e",ousli:"ous",ization:"ize",ation:"ate",ator:"ate",alism:"al",iveness:"ive",fulness:"ful",ousness:"ous",aliti:"al",iviti:"ive",biliti:"ble",logi:"log"},i={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},a="^("+(s="[^aeiou][^aeiouy]*")+")?"+(o=(r="[aeiouy]")+"[aeiou]*")+s+"("+o+")?$",u="^("+s+")?"+o+s+o+s,c=RegExp("^("+s+")?"+o+s),l=new RegExp(u),h=new RegExp(a),p=RegExp("^("+s+")?"+r),d=/^(.+?)(ss|i)es$/,f=/^(.+?)([^s])s$/,g=/^(.+?)eed$/,m=/^(.+?)(ed|ing)$/,v=/.$/,y=/(at|bl|iz)$/,x=RegExp("([^aeiouylsz])\\1$"),b=RegExp("^"+s+r+"[^aeiouwxy]$"),w=/^(.+?[^aeiou])y$/,S=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,C=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,E=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,_=/^(.+?)(s|t)(ion)$/,k=/^(.+?)e$/,T=/ll$/,O=RegExp("^"+s+r+"[^aeiouwxy]$"),L=function(e){var t,r,s,o,a,u;if(e.length<3)return e;if("y"==(s=e.substr(0,1))&&(e=s.toUpperCase()+e.substr(1)),o=d,a=f,o.test(e)?e=e.replace(o,"$1$2"):a.test(e)&&(e=e.replace(a,"$1$2")),o=g,a=m,o.test(e)){var L=o.exec(e);(o=c).test(L[1])&&(o=v,e=e.replace(o,""))}else if(a.test(e)){var L=a.exec(e);t=L[1],(a=p).test(t)&&(e=t,a=y,u=x,a.test(e)?e+="e":u.test(e)?(o=v,e=e.replace(o,"")):b.test(e)&&(e+="e"))}if((o=w).test(e)){var L=o.exec(e);e=(t=L[1])+"i"}if((o=S).test(e)){var L=o.exec(e);t=L[1],r=L[2],(o=c).test(t)&&(e=t+n[r])}if((o=C).test(e)){var L=o.exec(e);t=L[1],r=L[2],(o=c).test(t)&&(e=t+i[r])}if(o=E,a=_,o.test(e)){var L=o.exec(e);t=L[1],(o=l).test(t)&&(e=t)}else if(a.test(e)){var L=a.exec(e);t=L[1]+L[2],(a=l).test(t)&&(e=t)}if((o=k).test(e)){var L=o.exec(e);t=L[1],o=l,a=h,u=O,(o.test(t)||a.test(t)&&!u.test(t))&&(e=t)}return o=T,a=l,o.test(e)&&a.test(e)&&(o=v,e=e.replace(o,"")),"y"==s&&(e=s.toLowerCase()+e.substr(1)),e},$.stemmer=function(e){return e.update(L)},$.Pipeline.registerFunction($.stemmer,"stemmer"),$.generateStopWordFilter=function(e){var t=e.reduce(function(e,t){return e[t]=t,e},{});return function(e){if(e&&t[e.toString()]!==e.toString())return e}},$.stopWordFilter=$.generateStopWordFilter(["a","able","about","across","after","all","almost","also","am","among","an","and","any","are","as","at","be","because","been","but","by","can","cannot","could","dear","did","do","does","either","else","ever","every","for","from","get","got","had","has","have","he","her","hers","him","his","how","however","i","if","in","into","is","it","its","just","least","let","like","likely","may","me","might","most","must","my","neither","no","nor","not","of","off","often","on","only","or","other","our","own","rather","said","say","says","she","should","since","so","some","than","that","the","their","them","then","there","these","they","this","tis","to","too","twas","us","wants","was","we","were","what","when","where","which","while","who","whom","why","will","with","would","yet","you","your"]),$.Pipeline.registerFunction($.stopWordFilter,"stopWordFilter"),$.trimmer=function(e){return e.update(function(e){return e.replace(/^\W+/,"").replace(/\W+$/,"")})},$.Pipeline.registerFunction($.trimmer,"trimmer"),$.TokenSet=function(){this.final=!1,this.edges={},this.id=$.TokenSet._nextId,$.TokenSet._nextId+=1},$.TokenSet._nextId=1,$.TokenSet.fromArray=function(e){for(var t=new $.TokenSet.Builder,n=0,i=e.length;n<i;n++)t.insert(e[n]);return t.finish(),t.root},$.TokenSet.fromClause=function(e){return"editDistance"in e?$.TokenSet.fromFuzzyString(e.term,e.editDistance):$.TokenSet.fromString(e.term)},$.TokenSet.fromFuzzyString=function(e,t){for(var n=new $.TokenSet,i=[{node:n,editsRemaining:t,str:e}];i.length;){var r=i.pop();if(r.str.length>0){var s,o=r.str.charAt(0);o in r.node.edges?s=r.node.edges[o]:(s=new $.TokenSet,r.node.edges[o]=s),1==r.str.length&&(s.final=!0),i.push({node:s,editsRemaining:r.editsRemaining,str:r.str.slice(1)})}if(0!=r.editsRemaining){if("*"in r.node.edges)var a=r.node.edges["*"];else{var a=new $.TokenSet;r.node.edges["*"]=a}if(0==r.str.length&&(a.final=!0),i.push({node:a,editsRemaining:r.editsRemaining-1,str:r.str}),r.str.length>1&&i.push({node:r.node,editsRemaining:r.editsRemaining-1,str:r.str.slice(1)}),1==r.str.length&&(r.node.final=!0),r.str.length>=1){if("*"in r.node.edges)var u=r.node.edges["*"];else{var u=new $.TokenSet;r.node.edges["*"]=u}1==r.str.length&&(u.final=!0),i.push({node:u,editsRemaining:r.editsRemaining-1,str:r.str.slice(1)})}if(r.str.length>1){var c,l=r.str.charAt(0),h=r.str.charAt(1);h in r.node.edges?c=r.node.edges[h]:(c=new $.TokenSet,r.node.edges[h]=c),1==r.str.length&&(c.final=!0),i.push({node:c,editsRemaining:r.editsRemaining-1,str:l+r.str.slice(2)})}}}return n},$.TokenSet.fromString=function(e){for(var t=new $.TokenSet,n=t,i=0,r=e.length;i<r;i++){var s=e[i],o=i==r-1;if("*"==s)t.edges[s]=t,t.final=o;else{var a=new $.TokenSet;a.final=o,t.edges[s]=a,t=a}}return n},$.TokenSet.prototype.toArray=function(){for(var e=[],t=[{prefix:"",node:this}];t.length;){var n=t.pop(),i=Object.keys(n.node.edges),r=i.length;n.node.final&&(n.prefix.charAt(0),e.push(n.prefix));for(var s=0;s<r;s++){var o=i[s];t.push({prefix:n.prefix.concat(o),node:n.node.edges[o]})}}return e},$.TokenSet.prototype.toString=function(){if(this._str)return this._str;for(var e=this.final?"1":"0",t=Object.keys(this.edges).sort(),n=t.length,i=0;i<n;i++){var r=t[i],s=this.edges[r];e=e+r+s.id}return e},$.TokenSet.prototype.intersect=function(e){for(var t=new $.TokenSet,n=void 0,i=[{qNode:e,output:t,node:this}];i.length;)for(var r=Object.keys((n=i.pop()).qNode.edges),s=r.length,o=Object.keys(n.node.edges),a=o.length,u=0;u<s;u++)for(var c=r[u],l=0;l<a;l++){var h=o[l];if(h==c||"*"==c){var p=n.node.edges[h],d=n.qNode.edges[c],f=p.final&&d.final,g=void 0;h in n.output.edges?(g=n.output.edges[h]).final=g.final||f:((g=new $.TokenSet).final=f,n.output.edges[h]=g),i.push({qNode:d,output:g,node:p})}}return t},$.TokenSet.Builder=function(){this.previousWord="",this.root=new $.TokenSet,this.uncheckedNodes=[],this.minimizedNodes={}},$.TokenSet.Builder.prototype.insert=function(e){var t,n=0;if(e<this.previousWord)throw Error("Out of order word insertion");for(var i=0;i<e.length&&i<this.previousWord.length&&e[i]==this.previousWord[i];i++)n++;this.minimize(n),t=0==this.uncheckedNodes.length?this.root:this.uncheckedNodes[this.uncheckedNodes.length-1].child;for(var i=n;i<e.length;i++){var r=new $.TokenSet,s=e[i];t.edges[s]=r,this.uncheckedNodes.push({parent:t,char:s,child:r}),t=r}t.final=!0,this.previousWord=e},$.TokenSet.Builder.prototype.finish=function(){this.minimize(0)},$.TokenSet.Builder.prototype.minimize=function(e){for(var t=this.uncheckedNodes.length-1;t>=e;t--){var n=this.uncheckedNodes[t],i=n.child.toString();i in this.minimizedNodes?n.parent.edges[n.char]=this.minimizedNodes[i]:(n.child._str=i,this.minimizedNodes[i]=n.child),this.uncheckedNodes.pop()}},$.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},$.Index.prototype.search=function(e){return this.query(function(t){new $.QueryParser(e,t).parse()})},$.Index.prototype.query=function(e){for(var t=new $.Query(this.fields),n=Object.create(null),i=Object.create(null),r=Object.create(null),s=Object.create(null),o=Object.create(null),a=0;a<this.fields.length;a++)i[this.fields[a]]=new $.Vector;e.call(t,t);for(var a=0;a<t.clauses.length;a++){var u=t.clauses[a],c=null,l=$.Set.empty;c=u.usePipeline?this.pipeline.runString(u.term,{fields:u.fields}):[u.term];for(var h=0;h<c.length;h++){u.term=c[h];var p=$.TokenSet.fromClause(u),d=this.tokenSet.intersect(p).toArray();if(0===d.length&&u.presence===$.Query.presence.REQUIRED){for(var f=0;f<u.fields.length;f++){var g=u.fields[f];s[g]=$.Set.empty}break}for(var m=0;m<d.length;m++)for(var v=d[m],y=this.invertedIndex[v],x=y._index,f=0;f<u.fields.length;f++){var g=u.fields[f],b=y[g],w=Object.keys(b),S=v+"/"+g,C=new $.Set(w);if(u.presence==$.Query.presence.REQUIRED&&(l=l.union(C),void 0===s[g]&&(s[g]=$.Set.complete)),u.presence==$.Query.presence.PROHIBITED){void 0===o[g]&&(o[g]=$.Set.empty),o[g]=o[g].union(C);continue}if(i[g].upsert(x,u.boost,function(e,t){return e+t}),!r[S]){for(var E=0;E<w.length;E++){var _,k=w[E],T=new $.FieldRef(k,g),O=b[k];void 0===(_=n[T])?n[T]=new $.MatchData(v,g,O):_.add(v,g,O)}r[S]=!0}}}if(u.presence===$.Query.presence.REQUIRED)for(var f=0;f<u.fields.length;f++){var g=u.fields[f];s[g]=s[g].intersect(l)}}for(var L=$.Set.complete,A=$.Set.empty,a=0;a<this.fields.length;a++){var g=this.fields[a];s[g]&&(L=L.intersect(s[g])),o[g]&&(A=A.union(o[g]))}var P=Object.keys(n),I=[],Q=Object.create(null);if(t.isNegated()){P=Object.keys(this.fieldVectors);for(var a=0;a<P.length;a++){var T=P[a],R=$.FieldRef.fromString(T);n[T]=new $.MatchData}}for(var a=0;a<P.length;a++){var R=$.FieldRef.fromString(P[a]),N=R.docRef;if(L.contains(N)&&!A.contains(N)){var D,F=this.fieldVectors[R],j=i[R.fieldName].similarity(F);if(void 0!==(D=Q[N]))D.score+=j,D.matchData.combine(n[R]);else{var H={ref:N,score:j,matchData:n[R]};Q[N]=H,I.push(H)}}}return I.sort(function(e,t){return t.score-e.score})},$.Index.prototype.toJSON=function(){var e=Object.keys(this.invertedIndex).sort().map(function(e){return[e,this.invertedIndex[e]]},this),t=Object.keys(this.fieldVectors).map(function(e){return[e,this.fieldVectors[e].toJSON()]},this);return{version:$.version,fields:this.fields,fieldVectors:t,invertedIndex:e,pipeline:this.pipeline.toJSON()}},$.Index.load=function(e){var t={},n={},i=e.fieldVectors,r=Object.create(null),s=e.invertedIndex,o=new $.TokenSet.Builder,a=$.Pipeline.load(e.pipeline);e.version!=$.version&&$.utils.warn("Version mismatch when loading serialised index. Current version of lunr '"+$.version+"' does not match serialized index '"+e.version+"'");for(var u=0;u<i.length;u++){var c=i[u],l=c[0],h=c[1];n[l]=new $.Vector(h)}for(var u=0;u<s.length;u++){var c=s[u],p=c[0],d=c[1];o.insert(p),r[p]=d}return o.finish(),t.fields=e.fields,t.fieldVectors=n,t.invertedIndex=r,t.tokenSet=o.root,t.pipeline=a,new $.Index(t)},$.Builder=function(){this._ref="id",this._fields=Object.create(null),this._documents=Object.create(null),this.invertedIndex=Object.create(null),this.fieldTermFrequencies={},this.fieldLengths={},this.tokenizer=$.tokenizer,this.pipeline=new $.Pipeline,this.searchPipeline=new $.Pipeline,this.documentCount=0,this._b=.75,this._k1=1.2,this.termIndex=0,this.metadataWhitelist=[]},$.Builder.prototype.ref=function(e){this._ref=e},$.Builder.prototype.field=function(e,t){if(/\//.test(e))throw RangeError("Field '"+e+"' contains illegal character '/'");this._fields[e]=t||{}},$.Builder.prototype.b=function(e){e<0?this._b=0:e>1?this._b=1:this._b=e},$.Builder.prototype.k1=function(e){this._k1=e},$.Builder.prototype.add=function(e,t){var n=e[this._ref],i=Object.keys(this._fields);this._documents[n]=t||{},this.documentCount+=1;for(var r=0;r<i.length;r++){var s=i[r],o=this._fields[s].extractor,a=o?o(e):e[s],u=this.tokenizer(a,{fields:[s]}),c=this.pipeline.run(u),l=new $.FieldRef(n,s),h=Object.create(null);this.fieldTermFrequencies[l]=h,this.fieldLengths[l]=0,this.fieldLengths[l]+=c.length;for(var p=0;p<c.length;p++){var d=c[p];if(void 0==h[d]&&(h[d]=0),h[d]+=1,void 0==this.invertedIndex[d]){var f=Object.create(null);f._index=this.termIndex,this.termIndex+=1;for(var g=0;g<i.length;g++)f[i[g]]=Object.create(null);this.invertedIndex[d]=f}void 0==this.invertedIndex[d][s][n]&&(this.invertedIndex[d][s][n]=Object.create(null));for(var m=0;m<this.metadataWhitelist.length;m++){var v=this.metadataWhitelist[m],y=d.metadata[v];void 0==this.invertedIndex[d][s][n][v]&&(this.invertedIndex[d][s][n][v]=[]),this.invertedIndex[d][s][n][v].push(y)}}}},$.Builder.prototype.calculateAverageFieldLengths=function(){for(var e=Object.keys(this.fieldLengths),t=e.length,n={},i={},r=0;r<t;r++){var s=$.FieldRef.fromString(e[r]),o=s.fieldName;i[o]||(i[o]=0),i[o]+=1,n[o]||(n[o]=0),n[o]+=this.fieldLengths[s]}for(var a=Object.keys(this._fields),r=0;r<a.length;r++){var u=a[r];n[u]=n[u]/i[u]}this.averageFieldLength=n},$.Builder.prototype.createFieldVectors=function(){for(var e={},t=Object.keys(this.fieldTermFrequencies),n=t.length,i=Object.create(null),r=0;r<n;r++){for(var s=$.FieldRef.fromString(t[r]),o=s.fieldName,a=this.fieldLengths[s],u=new $.Vector,c=this.fieldTermFrequencies[s],l=Object.keys(c),h=l.length,p=this._fields[o].boost||1,d=this._documents[s.docRef].boost||1,f=0;f<h;f++){var g,m,v=l[f],y=c[v],x=this.invertedIndex[v]._index;void 0===i[v]?(g=$.idf(this.invertedIndex[v],this.documentCount),i[v]=g):g=i[v],m=Math.round(1e3*(g*((this._k1+1)*y)/(this._k1*(1-this._b+this._b*(a/this.averageFieldLength[o]))+y)*p*d))/1e3,u.insert(x,m)}e[s]=u}this.fieldVectors=e},$.Builder.prototype.createTokenSet=function(){this.tokenSet=$.TokenSet.fromArray(Object.keys(this.invertedIndex).sort())},$.Builder.prototype.build=function(){return this.calculateAverageFieldLengths(),this.createFieldVectors(),this.createTokenSet(),new $.Index({invertedIndex:this.invertedIndex,fieldVectors:this.fieldVectors,tokenSet:this.tokenSet,fields:Object.keys(this._fields),pipeline:this.searchPipeline})},$.Builder.prototype.use=function(e){var t=Array.prototype.slice.call(arguments,1);t.unshift(this),e.apply(this,t)},$.MatchData=function(e,t,n){for(var i=Object.create(null),r=Object.keys(n||{}),s=0;s<r.length;s++){var o=r[s];i[o]=n[o].slice()}this.metadata=Object.create(null),void 0!==e&&(this.metadata[e]=Object.create(null),this.metadata[e][t]=i)},$.MatchData.prototype.combine=function(e){for(var t=Object.keys(e.metadata),n=0;n<t.length;n++){var i=t[n],r=Object.keys(e.metadata[i]);void 0==this.metadata[i]&&(this.metadata[i]=Object.create(null));for(var s=0;s<r.length;s++){var o=r[s],a=Object.keys(e.metadata[i][o]);void 0==this.metadata[i][o]&&(this.metadata[i][o]=Object.create(null));for(var u=0;u<a.length;u++){var c=a[u];void 0==this.metadata[i][o][c]?this.metadata[i][o][c]=e.metadata[i][o][c]:this.metadata[i][o][c]=this.metadata[i][o][c].concat(e.metadata[i][o][c])}}}},$.MatchData.prototype.add=function(e,t,n){if(!(e in this.metadata)){this.metadata[e]=Object.create(null),this.metadata[e][t]=n;return}if(!(t in this.metadata[e])){this.metadata[e][t]=n;return}for(var i=Object.keys(n),r=0;r<i.length;r++){var s=i[r];s in this.metadata[e][t]?this.metadata[e][t][s]=this.metadata[e][t][s].concat(n[s]):this.metadata[e][t][s]=n[s]}},$.Query=function(e){this.clauses=[],this.allFields=e},$.Query.wildcard=new String("*"),$.Query.wildcard.NONE=0,$.Query.wildcard.LEADING=1,$.Query.wildcard.TRAILING=2,$.Query.presence={OPTIONAL:1,REQUIRED:2,PROHIBITED:3},$.Query.prototype.clause=function(e){return"fields"in e||(e.fields=this.allFields),"boost"in e||(e.boost=1),"usePipeline"in e||(e.usePipeline=!0),"wildcard"in e||(e.wildcard=$.Query.wildcard.NONE),e.wildcard&$.Query.wildcard.LEADING&&e.term.charAt(0)!=$.Query.wildcard&&(e.term="*"+e.term),e.wildcard&$.Query.wildcard.TRAILING&&e.term.slice(-1)!=$.Query.wildcard&&(e.term=""+e.term+"*"),"presence"in e||(e.presence=$.Query.presence.OPTIONAL),this.clauses.push(e),this},$.Query.prototype.isNegated=function(){for(var e=0;e<this.clauses.length;e++)if(this.clauses[e].presence!=$.Query.presence.PROHIBITED)return!1;return!0},$.Query.prototype.term=function(e,t){if(Array.isArray(e))return e.forEach(function(e){this.term(e,$.utils.clone(t))},this),this;var n=t||{};return n.term=e.toString(),this.clause(n),this},$.QueryParseError=function(e,t,n){this.name="QueryParseError",this.message=e,this.start=t,this.end=n},$.QueryParseError.prototype=Error(),$.QueryLexer=function(e){this.lexemes=[],this.str=e,this.length=e.length,this.pos=0,this.start=0,this.escapeCharPositions=[]},$.QueryLexer.prototype.run=function(){for(var e=$.QueryLexer.lexText;e;)e=e(this)},$.QueryLexer.prototype.sliceString=function(){for(var e=[],t=this.start,n=this.pos,i=0;i<this.escapeCharPositions.length;i++)n=this.escapeCharPositions[i],e.push(this.str.slice(t,n)),t=n+1;return e.push(this.str.slice(t,this.pos)),this.escapeCharPositions.length=0,e.join("")},$.QueryLexer.prototype.emit=function(e){this.lexemes.push({type:e,str:this.sliceString(),start:this.start,end:this.pos}),this.start=this.pos},$.QueryLexer.prototype.escapeCharacter=function(){this.escapeCharPositions.push(this.pos-1),this.pos+=1},$.QueryLexer.prototype.next=function(){if(this.pos>=this.length)return $.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},$.QueryLexer.prototype.width=function(){return this.pos-this.start},$.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},$.QueryLexer.prototype.backup=function(){this.pos-=1},$.QueryLexer.prototype.acceptDigitRun=function(){var e,t;do t=(e=this.next()).charCodeAt(0);while(t>47&&t<58)e!=$.QueryLexer.EOS&&this.backup()},$.QueryLexer.prototype.more=function(){return this.pos<this.length},$.QueryLexer.EOS="EOS",$.QueryLexer.FIELD="FIELD",$.QueryLexer.TERM="TERM",$.QueryLexer.EDIT_DISTANCE="EDIT_DISTANCE",$.QueryLexer.BOOST="BOOST",$.QueryLexer.PRESENCE="PRESENCE",$.QueryLexer.lexField=function(e){return e.backup(),e.emit($.QueryLexer.FIELD),e.ignore(),$.QueryLexer.lexText},$.QueryLexer.lexTerm=function(e){if(e.width()>1&&(e.backup(),e.emit($.QueryLexer.TERM)),e.ignore(),e.more())return $.QueryLexer.lexText},$.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit($.QueryLexer.EDIT_DISTANCE),$.QueryLexer.lexText},$.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit($.QueryLexer.BOOST),$.QueryLexer.lexText},$.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit($.QueryLexer.TERM)},$.QueryLexer.termSeparator=$.tokenizer.separator,$.QueryLexer.lexText=function(e){for(;;){var t=e.next();if(t==$.QueryLexer.EOS)return $.QueryLexer.lexEOS;if(92==t.charCodeAt(0)){e.escapeCharacter();continue}if(":"==t)return $.QueryLexer.lexField;if("~"==t)return e.backup(),e.width()>0&&e.emit($.QueryLexer.TERM),$.QueryLexer.lexEditDistance;if("^"==t)return e.backup(),e.width()>0&&e.emit($.QueryLexer.TERM),$.QueryLexer.lexBoost;if("+"==t&&1===e.width()||"-"==t&&1===e.width())return e.emit($.QueryLexer.PRESENCE),$.QueryLexer.lexText;if(t.match($.QueryLexer.termSeparator))return $.QueryLexer.lexTerm}},$.QueryParser=function(e,t){this.lexer=new $.QueryLexer(e),this.query=t,this.currentClause={},this.lexemeIdx=0},$.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=$.QueryParser.parseClause;e;)e=e(this);return this.query},$.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},$.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},$.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},$.QueryParser.parseClause=function(e){var t=e.peekLexeme();if(void 0!=t)switch(t.type){case $.QueryLexer.PRESENCE:return $.QueryParser.parsePresence;case $.QueryLexer.FIELD:return $.QueryParser.parseField;case $.QueryLexer.TERM:return $.QueryParser.parseTerm;default:var n="expected either a field or a term, found "+t.type;throw t.str.length>=1&&(n+=" with value '"+t.str+"'"),new $.QueryParseError(n,t.start,t.end)}},$.QueryParser.parsePresence=function(e){var t=e.consumeLexeme();if(void 0!=t){switch(t.str){case"-":e.currentClause.presence=$.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=$.Query.presence.REQUIRED;break;default:var n="unrecognised presence operator'"+t.str+"'";throw new $.QueryParseError(n,t.start,t.end)}var i=e.peekLexeme();if(void 0==i){var n="expecting term or field, found nothing";throw new $.QueryParseError(n,t.start,t.end)}switch(i.type){case $.QueryLexer.FIELD:return $.QueryParser.parseField;case $.QueryLexer.TERM:return $.QueryParser.parseTerm;default:var n="expecting term or field, found '"+i.type+"'";throw new $.QueryParseError(n,i.start,i.end)}}},$.QueryParser.parseField=function(e){var t=e.consumeLexeme();if(void 0!=t){if(-1==e.query.allFields.indexOf(t.str)){var n=e.query.allFields.map(function(e){return"'"+e+"'"}).join(", "),i="unrecognised field '"+t.str+"', possible fields: "+n;throw new $.QueryParseError(i,t.start,t.end)}e.currentClause.fields=[t.str];var r=e.peekLexeme();if(void 0==r){var i="expecting term, found nothing";throw new $.QueryParseError(i,t.start,t.end)}if(r.type===$.QueryLexer.TERM)return $.QueryParser.parseTerm;var i="expecting term, found '"+r.type+"'";throw new $.QueryParseError(i,r.start,r.end)}},$.QueryParser.parseTerm=function(e){var t=e.consumeLexeme();if(void 0!=t){e.currentClause.term=t.str.toLowerCase(),-1!=t.str.indexOf("*")&&(e.currentClause.usePipeline=!1);var n=e.peekLexeme();if(void 0==n)return void e.nextClause();switch(n.type){case $.QueryLexer.TERM:return e.nextClause(),$.QueryParser.parseTerm;case $.QueryLexer.FIELD:return e.nextClause(),$.QueryParser.parseField;case $.QueryLexer.EDIT_DISTANCE:return $.QueryParser.parseEditDistance;case $.QueryLexer.BOOST:return $.QueryParser.parseBoost;case $.QueryLexer.PRESENCE:return e.nextClause(),$.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+n.type+"'";throw new $.QueryParseError(i,n.start,n.end)}}},$.QueryParser.parseEditDistance=function(e){var t=e.consumeLexeme();if(void 0!=t){var n=parseInt(t.str,10);if(isNaN(n)){var i="edit distance must be numeric";throw new $.QueryParseError(i,t.start,t.end)}e.currentClause.editDistance=n;var r=e.peekLexeme();if(void 0==r)return void e.nextClause();switch(r.type){case $.QueryLexer.TERM:return e.nextClause(),$.QueryParser.parseTerm;case $.QueryLexer.FIELD:return e.nextClause(),$.QueryParser.parseField;case $.QueryLexer.EDIT_DISTANCE:return $.QueryParser.parseEditDistance;case $.QueryLexer.BOOST:return $.QueryParser.parseBoost;case $.QueryLexer.PRESENCE:return e.nextClause(),$.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+r.type+"'";throw new $.QueryParseError(i,r.start,r.end)}}},$.QueryParser.parseBoost=function(e){var t=e.consumeLexeme();if(void 0!=t){var n=parseInt(t.str,10);if(isNaN(n)){var i="boost must be numeric";throw new $.QueryParseError(i,t.start,t.end)}e.currentClause.boost=n;var r=e.peekLexeme();if(void 0==r)return void e.nextClause();switch(r.type){case $.QueryLexer.TERM:return e.nextClause(),$.QueryParser.parseTerm;case $.QueryLexer.FIELD:return e.nextClause(),$.QueryParser.parseField;case $.QueryLexer.EDIT_DISTANCE:return $.QueryParser.parseEditDistance;case $.QueryLexer.BOOST:return $.QueryParser.parseBoost;case $.QueryLexer.PRESENCE:return e.nextClause(),$.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+r.type+"'";throw new $.QueryParseError(i,r.start,r.end)}}},A=function(){return $},"function"==typeof define&&define.amd?define(A):e.exports=A()}()},4015:function(e,t,n){"use strict";n.r(t),n.d(t,{default:()=>v});var i=n(2133),r=n.n(i),s=n(6718);s.A.tokenizer.separator=/[\s\-/]+/;let o=class{constructor(e,t,n="/",i){this.searchDocs=e,this.lunrIndex=s.A.Index.load(t),this.baseUrl=n,this.maxHits=i}getLunrResult(e){return this.lunrIndex.query(function(t){let n=s.A.tokenizer(e);t.term(n,{boost:10}),t.term(n,{wildcard:s.A.Query.wildcard.TRAILING})})}getHit(e,t,n){return{hierarchy:{lvl0:e.pageTitle||e.title,lvl1:0===e.type?null:e.title},url:e.url,version:e.version,_snippetResult:n?{content:{value:n,matchLevel:"full"}}:null,_highlightResult:{hierarchy:{lvl0:{value:0===e.type?t||e.title:e.pageTitle},lvl1:0===e.type?null:{value:t||e.title}}}}}getTitleHit(e,t,n){let i=t[0],r=t[0]+n,s=e.title.substring(0,i)+'<span class="algolia-docsearch-suggestion--highlight">'+e.title.substring(i,r)+"</span>"+e.title.substring(r,e.title.length);return this.getHit(e,s)}getKeywordHit(e,t,n){let i=t[0],r=t[0]+n,s=e.title+"<br /><i>Keywords: "+e.keywords.substring(0,i)+'<span class="algolia-docsearch-suggestion--highlight">'+e.keywords.substring(i,r)+"</span>"+e.keywords.substring(r,e.keywords.length)+"</i>";return this.getHit(e,s)}getContentHit(e,t){let n=t[0],i=t[0]+t[1],r=n,s=i,o=!0,a=!0;for(let t=0;t<3;t++){let t=e.content.lastIndexOf(" ",r-2),n=e.content.lastIndexOf(".",r-2);if(n>0&&n>t){r=n+1,o=!1;break}if(t<0){r=0,o=!1;break}r=t+1}for(let t=0;t<10;t++){let t=e.content.indexOf(" ",s+1),n=e.content.indexOf(".",s+1);if(n>0&&n<t){s=n,a=!1;break}if(t<0){s=e.content.length,a=!1;break}s=t}let u=e.content.substring(r,n);return o&&(u="... "+u),u+='<span class="algolia-docsearch-suggestion--highlight">'+e.content.substring(n,i)+"</span>",u+=e.content.substring(i,s),a&&(u+=" ..."),this.getHit(e,null,u)}search(e){return new Promise((t,n)=>{let i=this.getLunrResult(e),r=[];i.length>this.maxHits&&(i.length=this.maxHits),this.titleHitsRes=[],this.contentHitsRes=[],i.forEach(t=>{let n=this.searchDocs[t.ref],{metadata:i}=t.matchData;for(let s in i)if(i[s].title){if(!this.titleHitsRes.includes(t.ref)){let o=i[s].title.position[0];r.push(this.getTitleHit(n,o,e.length)),this.titleHitsRes.push(t.ref)}}else if(i[s].content){let e=i[s].content.position[0];r.push(this.getContentHit(n,e))}else if(i[s].keywords){let o=i[s].keywords.position[0];r.push(this.getKeywordHit(n,o,e.length)),this.titleHitsRes.push(t.ref)}}),r.length>this.maxHits&&(r.length=this.maxHits),t(r)})}};var a=n(9227),u=n.n(a);let c="algolia-docsearch",l=`${c}-suggestion`,h=`${c}-footer`,p={suggestion:`
|
2
|
-
<a class="${l}
|
3
|
-
{{#isCategoryHeader}}${l}__main{{/isCategoryHeader}}
|
4
|
-
{{#isSubCategoryHeader}}${l}__secondary{{/isSubCategoryHeader}}
|
5
|
-
"
|
6
|
-
aria-label="Link to the result"
|
7
|
-
href="{{{url}}}"
|
8
|
-
>
|
9
|
-
<div class="${l}--category-header">
|
10
|
-
<span class="${l}--category-header-lvl0">{{{category}}}</span>
|
11
|
-
</div>
|
12
|
-
<div class="${l}--wrapper">
|
13
|
-
<div class="${l}--subcategory-column">
|
14
|
-
<span class="${l}--subcategory-column-text">{{{subcategory}}}</span>
|
15
|
-
</div>
|
16
|
-
{{#isTextOrSubcategoryNonEmpty}}
|
17
|
-
<div class="${l}--content">
|
18
|
-
<div class="${l}--subcategory-inline">{{{subcategory}}}</div>
|
19
|
-
<div class="${l}--title">{{{title}}}</div>
|
20
|
-
{{#text}}<div class="${l}--text">{{{text}}}</div>{{/text}}
|
21
|
-
{{#version}}<div class="${l}--version">{{version}}</div>{{/version}}
|
22
|
-
</div>
|
23
|
-
{{/isTextOrSubcategoryNonEmpty}}
|
24
|
-
</div>
|
25
|
-
</a>
|
26
|
-
`,suggestionSimple:`
|
27
|
-
<div class="${l}
|
28
|
-
{{#isCategoryHeader}}${l}__main{{/isCategoryHeader}}
|
29
|
-
{{#isSubCategoryHeader}}${l}__secondary{{/isSubCategoryHeader}}
|
30
|
-
suggestion-layout-simple
|
31
|
-
">
|
32
|
-
<div class="${l}--category-header">
|
33
|
-
{{^isLvl0}}
|
34
|
-
<span class="${l}--category-header-lvl0 ${l}--category-header-item">{{{category}}}</span>
|
35
|
-
{{^isLvl1}}
|
36
|
-
{{^isLvl1EmptyOrDuplicate}}
|
37
|
-
<span class="${l}--category-header-lvl1 ${l}--category-header-item">
|
38
|
-
{{{subcategory}}}
|
39
|
-
</span>
|
40
|
-
{{/isLvl1EmptyOrDuplicate}}
|
41
|
-
{{/isLvl1}}
|
42
|
-
{{/isLvl0}}
|
43
|
-
<div class="${l}--title ${l}--category-header-item">
|
44
|
-
{{#isLvl2}}
|
45
|
-
{{{title}}}
|
46
|
-
{{/isLvl2}}
|
47
|
-
{{#isLvl1}}
|
48
|
-
{{{subcategory}}}
|
49
|
-
{{/isLvl1}}
|
50
|
-
{{#isLvl0}}
|
51
|
-
{{{category}}}
|
52
|
-
{{/isLvl0}}
|
53
|
-
</div>
|
54
|
-
</div>
|
55
|
-
<div class="${l}--wrapper">
|
56
|
-
{{#text}}
|
57
|
-
<div class="${l}--content">
|
58
|
-
<div class="${l}--text">{{{text}}}</div>
|
59
|
-
</div>
|
60
|
-
{{/text}}
|
61
|
-
</div>
|
62
|
-
</div>
|
63
|
-
`,footer:`
|
64
|
-
<div class="${h}">
|
65
|
-
</div>
|
66
|
-
`,empty:`
|
67
|
-
<div class="${l}">
|
68
|
-
<div class="${l}--wrapper">
|
69
|
-
<div class="${l}--content ${l}--no-results">
|
70
|
-
<div class="${l}--title">
|
71
|
-
<div class="${l}--text">
|
72
|
-
No results found for query <b>"{{query}}"</b>
|
73
|
-
</div>
|
74
|
-
</div>
|
75
|
-
</div>
|
76
|
-
</div>
|
77
|
-
</div>
|
78
|
-
`,searchBox:`
|
79
|
-
<form novalidate="novalidate" onsubmit="return false;" class="searchbox">
|
80
|
-
<div role="search" class="searchbox__wrapper">
|
81
|
-
<input id="docsearch" type="search" name="search" placeholder="Search the docs" autocomplete="off" required="required" class="searchbox__input"/>
|
82
|
-
<button type="submit" title="Submit your search query." class="searchbox__submit" >
|
83
|
-
<svg width=12 height=12 role="img" aria-label="Search">
|
84
|
-
<use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#sbx-icon-search-13"></use>
|
85
|
-
</svg>
|
86
|
-
</button>
|
87
|
-
<button type="reset" title="Clear the search query." class="searchbox__reset hide">
|
88
|
-
<svg width=12 height=12 role="img" aria-label="Reset">
|
89
|
-
<use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#sbx-icon-clear-3"></use>
|
90
|
-
</svg>
|
91
|
-
</button>
|
92
|
-
</div>
|
93
|
-
</form>
|
94
|
-
|
95
|
-
<div class="svg-icons" style="height: 0; width: 0; position: absolute; visibility: hidden">
|
96
|
-
<svg xmlns="http://www.w3.org/2000/svg">
|
97
|
-
<symbol id="sbx-icon-clear-3" viewBox="0 0 40 40"><path d="M16.228 20L1.886 5.657 0 3.772 3.772 0l1.885 1.886L20 16.228 34.343 1.886 36.228 0 40 3.772l-1.886 1.885L23.772 20l14.342 14.343L40 36.228 36.228 40l-1.885-1.886L20 23.772 5.657 38.114 3.772 40 0 36.228l1.886-1.885L16.228 20z" fill-rule="evenodd"></symbol>
|
98
|
-
<symbol id="sbx-icon-search-13" viewBox="0 0 40 40"><path d="M26.806 29.012a16.312 16.312 0 0 1-10.427 3.746C7.332 32.758 0 25.425 0 16.378 0 7.334 7.333 0 16.38 0c9.045 0 16.378 7.333 16.378 16.38 0 3.96-1.406 7.593-3.746 10.426L39.547 37.34c.607.608.61 1.59-.004 2.203a1.56 1.56 0 0 1-2.202.004L26.807 29.012zm-10.427.627c7.322 0 13.26-5.938 13.26-13.26 0-7.324-5.938-13.26-13.26-13.26-7.324 0-13.26 5.936-13.26 13.26 0 7.322 5.936 13.26 13.26 13.26z" fill-rule="evenodd"></symbol>
|
99
|
-
</svg>
|
100
|
-
</div>
|
101
|
-
`};var d=n(3777),f=n.n(d);let g={mergeKeyWithParent(e,t){if(void 0===e[t]||"object"!=typeof e[t])return e;let n=f().extend({},e,e[t]);return delete n[t],n},groupBy(e,t){let n={};return f().each(e,(e,i)=>{if(void 0===i[t])throw Error(`[groupBy]: Object has no key ${t}`);let r=i[t];"string"==typeof r&&(r=r.toLowerCase()),Object.prototype.hasOwnProperty.call(n,r)||(n[r]=[]),n[r].push(i)}),n},values:e=>Object.keys(e).map(t=>e[t]),flatten(e){let t=[];return e.forEach(e=>{Array.isArray(e)?e.forEach(e=>{t.push(e)}):t.push(e)}),t},flattenAndFlagFirst(e,t){let n=this.values(e).map(e=>e.map((e,n)=>(e[t]=0===n,e)));return this.flatten(n)},compact(e){let t=[];return e.forEach(e=>{e&&t.push(e)}),t},getHighlightedValue:(e,t)=>e._highlightResult&&e._highlightResult.hierarchy_camel&&e._highlightResult.hierarchy_camel[t]&&e._highlightResult.hierarchy_camel[t].matchLevel&&"none"!==e._highlightResult.hierarchy_camel[t].matchLevel&&e._highlightResult.hierarchy_camel[t].value?e._highlightResult.hierarchy_camel[t].value:e._highlightResult&&e._highlightResult&&e._highlightResult[t]&&e._highlightResult[t].value?e._highlightResult[t].value:e[t],getSnippetedValue(e,t){if(!e._snippetResult||!e._snippetResult[t]||!e._snippetResult[t].value)return e[t];let n=e._snippetResult[t].value;return n[0]!==n[0].toUpperCase()&&(n=`\u{2026}${n}`),-1===[".","!","?"].indexOf(n[n.length-1])&&(n=`${n}\u{2026}`),n},deepClone:e=>JSON.parse(JSON.stringify(e))};class m{constructor({searchDocs:e,searchIndex:t,inputSelector:n,debug:i=!1,baseUrl:r="/",queryDataCallback:s=null,autocompleteOptions:a={debug:!1,hint:!1,autoselect:!0},transformData:c=!1,queryHook:l=!1,handleSelected:h=!1,enhancedSearchInput:d=!1,layout:g="column",maxHits:v=5}){this.input=m.getInputFromSelector(n),this.queryDataCallback=s||null;let y=!!a&&!!a.debug&&a.debug;a.debug=i||y,this.autocompleteOptions=a,this.autocompleteOptions.cssClasses=this.autocompleteOptions.cssClasses||{},this.autocompleteOptions.cssClasses.prefix=this.autocompleteOptions.cssClasses.prefix||"ds";let x=this.input&&"function"==typeof this.input.attr&&this.input.attr("aria-label");this.autocompleteOptions.ariaLabel=this.autocompleteOptions.ariaLabel||x||"search input",this.isSimpleLayout="simple"===g,this.client=new o(e,t,r,v),d&&(this.input=m.injectSearchBox(this.input)),this.autocomplete=u()(this.input,a,[{source:this.getAutocompleteSource(c,l),templates:{suggestion:m.getSuggestionTemplate(this.isSimpleLayout),footer:p.footer,empty:m.getEmptyTemplate()}}]),this.handleSelected=h||this.handleSelected,h&&f()(".algolia-autocomplete").on("click",".ds-suggestions a",e=>{e.preventDefault()}),this.autocomplete.on("autocomplete:selected",this.handleSelected.bind(null,this.autocomplete.autocomplete)),this.autocomplete.on("autocomplete:shown",this.handleShown.bind(null,this.input)),d&&m.bindSearchBoxEvent(),document.addEventListener("keydown",e=>{(e.ctrlKey||e.metaKey)&&"k"==e.key&&(this.input.focus(),e.preventDefault())})}static injectSearchBox(e){e.before(p.searchBox);let t=e.prev().prev().find("input");return e.remove(),t}static bindSearchBoxEvent(){f()('.searchbox [type="reset"]').on("click",function(){f()("input#docsearch").focus(),f()(this).addClass("hide"),u().autocomplete.setVal("")}),f()("input#docsearch").on("keyup",()=>{let e=document.querySelector("input#docsearch"),t=document.querySelector('.searchbox [type="reset"]');t.className="searchbox__reset",0===e.value.length&&(t.className+=" hide")})}static getInputFromSelector(e){let t=f()(e).filter("input");return t.length?f()(t[0]):null}getAutocompleteSource(e,t){return(n,i)=>{t&&(n=t(n)||n),this.client.search(n).then(t=>{this.queryDataCallback&&"function"==typeof this.queryDataCallback&&this.queryDataCallback(t),e&&(t=e(t)||t),i(m.formatHits(t))})}}static formatHits(e){let t=g.deepClone(e).map(e=>(e._highlightResult&&(e._highlightResult=g.mergeKeyWithParent(e._highlightResult,"hierarchy")),g.mergeKeyWithParent(e,"hierarchy"))),n=g.groupBy(t,"lvl0");return f().each(n,(e,t)=>{let i=g.groupBy(t,"lvl1"),r=g.flattenAndFlagFirst(i,"isSubCategoryHeader");n[e]=r}),(n=g.flattenAndFlagFirst(n,"isCategoryHeader")).map(e=>{let t=m.formatURL(e),n=g.getHighlightedValue(e,"lvl0"),i=g.getHighlightedValue(e,"lvl1")||n,r=g.compact([g.getHighlightedValue(e,"lvl2")||i,g.getHighlightedValue(e,"lvl3"),g.getHighlightedValue(e,"lvl4"),g.getHighlightedValue(e,"lvl5"),g.getHighlightedValue(e,"lvl6")]).join('<span class="aa-suggestion-title-separator" aria-hidden="true"> \u203A </span>'),s=g.getSnippetedValue(e,"content"),o=i&&""!==i||r&&""!==r,a=!i||""===i||i===n,u=r&&""!==r&&r!==i,c=!u&&i&&""!==i&&i!==n,l=e.version;return{isLvl0:!c&&!u,isLvl1:c,isLvl2:u,isLvl1EmptyOrDuplicate:a,isCategoryHeader:e.isCategoryHeader,isSubCategoryHeader:e.isSubCategoryHeader,isTextOrSubcategoryNonEmpty:o,category:n,subcategory:i,title:r,text:s,url:t,version:l}})}static formatURL(e){let{url:t,anchor:n}=e;if(t){if(-1!==t.indexOf("#"));else if(n)return`${e.url}#${e.anchor}`;return t}return n?`#${e.anchor}`:(console.warn("no anchor nor url for : ",JSON.stringify(e)),null)}static getEmptyTemplate(){return e=>r().compile(p.empty).render(e)}static getSuggestionTemplate(e){let t=e?p.suggestionSimple:p.suggestion,n=r().compile(t);return e=>n.render(e)}handleSelected(e,t,n,i,r={}){"click"!==r.selectionMethod&&(e.setVal(""),window.location.assign(n.url))}handleShown(e){let t=e.offset().left+e.width()/2,n=f()(document).width()/2;isNaN(n)&&(n=900);let i=t-n>=0?"algolia-autocomplete-right":"algolia-autocomplete-left",r=t-n<0?"algolia-autocomplete-right":"algolia-autocomplete-left",s=f()(".algolia-autocomplete");s.hasClass(i)||s.addClass(i),s.hasClass(r)&&s.removeClass(r)}}let v=m}}]);
|
@@ -1 +0,0 @@
|
|
1
|
-
"use strict";(self.webpackChunkdocs_openc3_com=self.webpackChunkdocs_openc3_com||[]).push([["257"],{4603:function(e,t,o){o.r(t),o.d(t,{frontMatter:()=>s,toc:()=>c,default:()=>p,metadata:()=>i,assets:()=>a,contentTitle:()=>n});var i=JSON.parse('{"id":"tools/log-explorer","title":"Log Explorer (Enterprise)","description":"View, search, and export historical logs","source":"@site/docs/tools/log-explorer.md","sourceDirName":"tools","slug":"/tools/log-explorer","permalink":"/tools/staticdocs/docs/tools/log-explorer","draft":false,"unlisted":false,"editUrl":"https://github.com/OpenC3/cosmos/tree/main/docs.openc3.com/docs/tools/log-explorer.md","tags":[],"version":"current","frontMatter":{"title":"Log Explorer (Enterprise)","description":"View, search, and export historical logs","sidebar_custom_props":{"myEmoji":"\u{1F52D}"}},"sidebar":"defaultSidebar","previous":{"title":"Limits Monitor","permalink":"/tools/staticdocs/docs/tools/limits-monitor"},"next":{"title":"Packet Viewer","permalink":"/tools/staticdocs/docs/tools/packet-viewer"}}'),l=o(1085),r=o(2600);let s={title:"Log Explorer (Enterprise)",description:"View, search, and export historical logs",sidebar_custom_props:{myEmoji:"\u{1F52D}"}},n,a={},c=[{value:"Introduction",id:"introduction",level:2},{value:"Features",id:"features",level:2},{value:"Log Viewing",id:"log-viewing",level:3},{value:"Search and Filtering",id:"search-and-filtering",level:3},{value:"Export Capabilities",id:"export-capabilities",level:3},{value:"Notes",id:"notes",level:2}];function d(e){let t={h2:"h2",h3:"h3",img:"img",li:"li",p:"p",ul:"ul",...(0,r.R)(),...e.components};return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(t.h2,{id:"introduction",children:"Introduction"}),"\n",(0,l.jsx)(t.p,{children:"Log Explorer allows you to view, search, and export historical log data from your COSMOS system. You can filter logs by time range, search for specific content, and export the results to CSV or JSON formats for further analysis."}),"\n",(0,l.jsx)(t.p,{children:(0,l.jsx)(t.img,{alt:"Log Explorer",src:o(8595).A+"",width:"2972",height:"1658"})}),"\n",(0,l.jsx)(t.h2,{id:"features",children:"Features"}),"\n",(0,l.jsx)(t.h3,{id:"log-viewing",children:"Log Viewing"}),"\n",(0,l.jsxs)(t.ul,{children:["\n",(0,l.jsx)(t.li,{children:"View historical log entries in a scrollable table"}),"\n",(0,l.jsx)(t.li,{children:"Display log timestamps, log levels (INFO, WARN, ERROR), source of log, user, and messages"}),"\n",(0,l.jsx)(t.li,{children:"Real-time log updates when viewing recent data (if end time set to a future time)"}),"\n"]}),"\n",(0,l.jsx)(t.h3,{id:"search-and-filtering",children:"Search and Filtering"}),"\n",(0,l.jsxs)(t.ul,{children:["\n",(0,l.jsx)(t.li,{children:"Filter logs by date and time range"}),"\n",(0,l.jsx)(t.li,{children:"Search log content using text-based queries"}),"\n",(0,l.jsx)(t.li,{children:"Filter by log level (DEBUG, INFO, WARN, ERROR)"}),"\n",(0,l.jsx)(t.li,{children:"Modify scope to Current Scope for regular log messages or NOSCOPE for system-level logs"}),"\n",(0,l.jsx)(t.li,{children:"Apply multiple filters simultaneously"}),"\n"]}),"\n",(0,l.jsx)(t.h3,{id:"export-capabilities",children:"Export Capabilities"}),"\n",(0,l.jsxs)(t.ul,{children:["\n",(0,l.jsx)(t.li,{children:"Export filtered log results to CSV format"}),"\n",(0,l.jsx)(t.li,{children:"Export filtered log results to JSON format"}),"\n",(0,l.jsx)(t.li,{children:"Download exported files directly from the browser"}),"\n"]}),"\n",(0,l.jsx)(t.h2,{id:"notes",children:"Notes"}),"\n",(0,l.jsx)(t.p,{children:"For Enterprise level log searching / filtering, we recommend using an Enterprise-level logging solution like ElasticSearch, Grafana Loki, Splunk, etc. This tool provides a quick and simple interface to view historical logs, but is not suited for searching multi-day amount of logs."})]})}function p(e={}){let{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,l.jsx)(t,{...e,children:(0,l.jsx)(d,{...e})}):d(e)}},8595:function(e,t,o){o.d(t,{A:()=>i});let i=o.p+"assets/images/log_explorer-97cc7347dd918410b63fa107ce9fb7c908c1babc4026a96bdea6700137da5e37.png"},2600:function(e,t,o){o.d(t,{R:()=>s,x:()=>n});var i=o(4041);let l={},r=i.createContext(l);function s(e){let t=i.useContext(r);return i.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function n(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:s(e.components),i.createElement(r.Provider,{value:t},e.children)}}}]);
|
@@ -1 +0,0 @@
|
|
1
|
-
"use strict";(self.webpackChunkdocs_openc3_com=self.webpackChunkdocs_openc3_com||[]).push([["3051"],{1855:function(e,n,r){r.r(n),r.d(n,{frontMatter:()=>t,toc:()=>a,default:()=>p,metadata:()=>s,assets:()=>c,contentTitle:()=>l});var s=JSON.parse('{"id":"guides/raspberrypi","title":"Raspberry Pi","description":"Running COSMOS on a Raspberry Pi","source":"@site/docs/guides/raspberrypi.md","sourceDirName":"guides","slug":"/guides/raspberrypi","permalink":"/tools/staticdocs/docs/guides/raspberrypi","draft":false,"unlisted":false,"editUrl":"https://github.com/OpenC3/cosmos/tree/main/docs.openc3.com/docs/guides/raspberrypi.md","tags":[],"version":"current","frontMatter":{"title":"Raspberry Pi","description":"Running COSMOS on a Raspberry Pi","sidebar_custom_props":{"myEmoji":"\u{1F353}"}},"sidebar":"defaultSidebar","previous":{"title":"Performance","permalink":"/tools/staticdocs/docs/guides/performance"},"next":{"title":"Reference Architectures","permalink":"/tools/staticdocs/docs/guides/reference-architectures"}}'),i=r(1085),o=r(2600);let t={title:"Raspberry Pi",description:"Running COSMOS on a Raspberry Pi",sidebar_custom_props:{myEmoji:"\u{1F353}"}},l,c={},a=[{value:"COSMOS Running on Raspberry Pi 4",id:"cosmos-running-on-raspberry-pi-4",level:3}];function d(e){let n={a:"a",code:"code",h3:"h3",li:"li",ol:"ol",p:"p",pre:"pre",ul:"ul",...(0,o.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h3,{id:"cosmos-running-on-raspberry-pi-4",children:"COSMOS Running on Raspberry Pi 4"}),"\n",(0,i.jsx)(n.p,{children:"The Raspberry Pi 4 is a low-cost powerful ARM-based minicomputer that runs linux. And because it runs modern linux, it can also run COSMOS! These directions will get you up and running."}),"\n",(0,i.jsx)(n.p,{children:"What you'll need:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Raspberry Pi 4 board (tested with 8GB RAM)"}),"\n",(0,i.jsx)(n.li,{children:"A Pi Case but Optional"}),"\n",(0,i.jsx)(n.li,{children:"Raspbeerry Pi Power Supply"}),"\n",(0,i.jsx)(n.li,{children:"32GB or Larger SD Card - Also faster the better"}),"\n",(0,i.jsx)(n.li,{children:"A Laptop with a way to write SD Cards"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Let's get started!"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Setup 64-bit Raspian OS Lite on the SD Card"}),"\n",(0,i.jsxs)(n.p,{children:["Make sure you have the Raspberry Pi Imager app from: ",(0,i.jsx)(n.a,{href:"https://www.raspberrypi.com/software/",children:"https://www.raspberrypi.com/software/"})]}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsx)(n.li,{children:"Insert the SD Card into your computer (Note this process will erase all data on the SD card!)"}),"\n",(0,i.jsx)(n.li,{children:"Open the Raspberry Pi Imager App"}),"\n",(0,i.jsx)(n.li,{children:'Click the "Choose Device" Button'}),"\n",(0,i.jsx)(n.li,{children:"Pick Your Raspberry Pi Model"}),"\n",(0,i.jsx)(n.li,{children:'Click the "Choose OS" Button'}),"\n",(0,i.jsx)(n.li,{children:'Select "Raspberry Pi OS (other)"'}),"\n",(0,i.jsx)(n.li,{children:'Select "Raspberry Pi OS Lite (64-bit)"'}),"\n",(0,i.jsx)(n.li,{children:'Click the "Choose Storage" Button'}),"\n",(0,i.jsx)(n.li,{children:"Select Your SD Card"}),"\n",(0,i.jsx)(n.li,{children:"Click Edit Settings"}),"\n",(0,i.jsx)(n.li,{children:"If prompted if you would like to prefill the Wifi information, select OK"}),"\n",(0,i.jsx)(n.li,{children:"Set the hostname to: cosmos.local"}),"\n",(0,i.jsx)(n.li,{children:"Set the username and password. The default username is your username, you should also set a password to make the system secure"}),"\n",(0,i.jsx)(n.li,{children:"Fill in your Wifi info, and set the country appropriately (ie. US)"}),"\n",(0,i.jsx)(n.li,{children:"Set the correct time zone"}),"\n",(0,i.jsx)(n.li,{children:"Goto the Services Tab and Enable SSH"}),"\n",(0,i.jsx)(n.li,{children:"You can either use Password auth, or public-key only if your computer is already setup for passwordless SSH"}),"\n",(0,i.jsx)(n.li,{children:'Goto the Options tab and make sure "Enable Telemetry" is not checked'}),"\n",(0,i.jsx)(n.li,{children:'Click "Save" when everything is filled out'}),"\n",(0,i.jsx)(n.li,{children:'Click "Yes" to apply OS Customization Settings, Yes to Are You Sure, and Wait for it to complete'}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Make sure the Raspberry Pi is NOT powered on"}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Remove the SD Card from your computer and insert into the Raspberry Pi"}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Apply power to the Raspberry Pi and wait approximately 1 minute for it to boot"}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"SSH to your raspberry Pi"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Open a terminal window and use ssh to connect to your Pi"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["On Mac / Linux: ssh ",(0,i.jsx)(n.a,{href:"mailto:yourusername@cosmos.local",children:"yourusername@cosmos.local"})]}),"\n",(0,i.jsx)(n.li,{children:"On Windows, use Putty to connect. You will probably have to install Bonjour for Windows for .local addresses to work as well."}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"From SSH, Enter the following commands"}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:" sudo sysctl -w vm.max_map_count=262144\n sudo sysctl -w vm.overcommit_memory=1\n sudo apt update\n sudo apt upgrade\n sudo apt install git -y\n curl -fsSL https://get.docker.com -o get-docker.sh\n sudo sh get-docker.sh\n sudo usermod -aG docker $USER\n newgrp docker\n git clone https://github.com/OpenC3/cosmos-project.git cosmos\n cd cosmos\n # Edit compose.yaml and remove 127.0.0.1: from the ports section of the openc3-traefik service\n ./openc3.sh run\n"})}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["After about 2 minutes, open a web browser on your computer, and goto: ",(0,i.jsx)(n.a,{href:"http://cosmos.local:2900",children:"http://cosmos.local:2900"})]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Congratulations! You now have COSMOS running on a Raspberry Pi!"}),"\n"]}),"\n"]})]})}function p(e={}){let{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},2600:function(e,n,r){r.d(n,{R:()=>t,x:()=>l});var s=r(4041);let i={},o=s.createContext(i);function t(e){let n=s.useContext(o);return s.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:t(e.components),s.createElement(o.Provider,{value:n},e.children)}}}]);
|
@@ -1 +0,0 @@
|
|
1
|
-
"use strict";(self.webpackChunkdocs_openc3_com=self.webpackChunkdocs_openc3_com||[]).push([["2009"],{8533:function(e,c,s){s.r(c),s.d(c,{default:()=>d});var r=s(1085);s(4041);var n=s(4349),o=s(9200),u=s(6699),a=s(8150),t=s(2421);function d(e){return(0,r.jsx)(o.e3,{className:(0,n.A)(u.G.wrapper.docsPages),children:(0,r.jsx)(t.A,{children:(0,a.v)(e.route.routes)})})}}}]);
|
@@ -1 +0,0 @@
|
|
1
|
-
"use strict";(self.webpackChunkdocs_openc3_com=self.webpackChunkdocs_openc3_com||[]).push([["8830"],{8974:function(e,n,t){t.r(n),t.d(n,{frontMatter:()=>o,toc:()=>l,default:()=>h,metadata:()=>s,assets:()=>c,contentTitle:()=>a});var s=JSON.parse('{"id":"getting-started/generators","title":"Code Generators","description":"Using openc3.sh to generate code","source":"@site/docs/getting-started/generators.md","sourceDirName":"getting-started","slug":"/getting-started/generators","permalink":"/tools/staticdocs/docs/getting-started/generators","draft":false,"unlisted":false,"editUrl":"https://github.com/OpenC3/cosmos/tree/main/docs.openc3.com/docs/getting-started/generators.md","tags":[],"version":"current","sidebarPosition":6,"frontMatter":{"sidebar_position":6,"title":"Code Generators","description":"Using openc3.sh to generate code","sidebar_custom_props":{"myEmoji":"\u{1F3ED}"}},"sidebar":"defaultSidebar","previous":{"title":"Command Line Interface","permalink":"/tools/staticdocs/docs/getting-started/cli"},"next":{"title":"Podman","permalink":"/tools/staticdocs/docs/getting-started/podman"}}'),r=t(1085),i=t(2600);let o={sidebar_position:6,title:"Code Generators",description:"Using openc3.sh to generate code",sidebar_custom_props:{myEmoji:"\u{1F3ED}"}},a,c={},l=[{value:"Plugin Generator",id:"plugin-generator",level:2},{value:"Target Generator",id:"target-generator",level:2},{value:"Microservice Generator",id:"microservice-generator",level:2},{value:"Conversion Generator",id:"conversion-generator",level:2},{value:"Processor Generator",id:"processor-generator",level:2},{value:"Limits Response Generator",id:"limits-response-generator",level:2},{value:"Widget Generator",id:"widget-generator",level:2},{value:"Tool Generator",id:"tool-generator",level:2}];function d(e){let n={a:"a",admonition:"admonition",code:"code",h2:"h2",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,i.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)(n.p,{children:["The COSMOS Code Generators are built into the scripts ",(0,r.jsx)(n.code,{children:"openc3.sh"})," and ",(0,r.jsx)(n.code,{children:"openc3.bat"})," that are included in the COSMOS ",(0,r.jsx)(n.a,{href:"https://github.com/OpenC3/cosmos-project",children:"project"})," (more about ",(0,r.jsx)(n.a,{href:"key-concepts#projects",children:"projects"}),")."]}),"\n",(0,r.jsxs)(n.p,{children:["If you followed the ",(0,r.jsx)(n.a,{href:"/tools/staticdocs/docs/getting-started/installation",children:"Installation Guide"})," you should already be inside a cloned ",(0,r.jsx)(n.a,{href:"https://github.com/OpenC3/cosmos-project",children:"cosmos-project"})," which is in your PATH (necessary for openc3.bat / openc3.sh to be resolved). To see all the available code generators type the following:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"% openc3.sh cli generate\nUnknown generator ''. Valid generators: plugin, target, microservice, widget, conversion,\n processor, limits_response, tool, tool_vue, tool_angular, tool_react, tool_svelte\n"})}),"\n",(0,r.jsx)(n.admonition,{title:"Training Available",type:"note",children:(0,r.jsxs)(n.p,{children:["If any of this gets confusing, contact us at ",(0,r.jsx)("a",{href:"mailto:support@openc3.com",children:(0,r.jsx)(n.a,{href:"mailto:support@openc3.com",children:"support@openc3.com"})}),". We have training classes available!"]})}),"\n",(0,r.jsx)(n.h2,{id:"plugin-generator",children:"Plugin Generator"}),"\n",(0,r.jsxs)(n.p,{children:["The plugin generator creates the scaffolding for a new COSMOS Plugin. It requires a plugin name and will create a new directory called ",(0,r.jsx)(n.code,{children:"openc3-cosmos-<name>"}),". For example:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"% openc3.sh cli generate plugin\nUsage: cli generate plugin <NAME>\n\n% openc3.sh cli generate plugin GSE\nPlugin openc3-cosmos-gse successfully generated!\n"})}),"\n",(0,r.jsx)(n.p,{children:"This creates the following files:"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Name"}),(0,r.jsx)(n.th,{children:"Description"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:".gitignore"}),(0,r.jsx)(n.td,{children:"Tells git to ignore any node_modules directory (for tool development)"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"LICENSE.txt"}),(0,r.jsx)(n.td,{children:"License for the plugin. COSMOS Plugins should be licensed in a manner compatible with the AGPLv3, unless they are designed only for use with COSMOS Enterprise."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"openc3-cosmos-gse.gemspec"}),(0,r.jsxs)(n.td,{children:["Gemspec file which should be edited to add user specific information like description, authors, emails, homepage, etc. The name of this file is used in compiling the plugin contents into the final corresponding gem file: e.g. openc3-cosmos-gse-1.0.0.gem. COSMOS plugins should always begin with the openc3-cosmos prefix to make them easily identifiable in the Rubygems repository. The file is formatted as documented at: ",(0,r.jsx)(n.a,{href:"https://guides.rubygems.org/specification-reference/",children:"https://guides.rubygems.org/specification-reference/"})]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"plugin.txt"}),(0,r.jsxs)(n.td,{children:["COSMOS specific file for Plugin creation. Learn more ",(0,r.jsx)(n.a,{href:"../configuration/plugins",children:"here"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Rakefile"}),(0,r.jsx)(n.td,{children:'Ruby Rakefile configured to support building the plugin by running "openc3.sh cli rake build VERSION=X.X.X" where X.X.X is the plugin version number'})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"README.md"}),(0,r.jsx)(n.td,{children:"Markdown file used to document the plugin"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"requirements.txt"}),(0,r.jsx)(n.td,{children:"Python dependencies file (only for Python plugins)"})]})]})]}),"\n",(0,r.jsx)(n.p,{children:"While this structure is required, it is not very useful by itself. The plugin generator just creates the framework for other generators to use."}),"\n",(0,r.jsx)(n.h2,{id:"target-generator",children:"Target Generator"}),"\n",(0,r.jsx)(n.p,{children:"The target generator creates the scaffolding for a new COSMOS Target. It must operate inside an existing COSMOS plugin and requires a target name. For example:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"openc3-cosmos-gse % openc3.sh cli generate target\nUsage: cli generate target <NAME> (--ruby or --python)\n\nopenc3-cosmos-gse % openc3.sh cli generate target GSE --python\nTarget GSE successfully generated!\n"})}),"\n",(0,r.jsx)(n.p,{children:"This creates the following files and directories:"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Name"}),(0,r.jsx)(n.th,{children:"Description"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"targets/GSE"}),(0,r.jsx)(n.td,{children:"Contains the configuration for the GSE target. The target name is always defined in all caps. This is typically the default name of the target, but well-designed targets will allow themselves to be renamed at installation."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"targets/GSE/cmd_tlm"}),(0,r.jsx)(n.td,{children:"Contains the command and telemetry definition files for the GSE target. These files capture the format of the commands that can be sent to the target, and the telemetry packets that are expected to be received by COSMOS from the target. Note that the files in this folder are processed in alphabetical order by default. That can matter if you reference a packet in another file (it must already have been defined)."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"targets/GSE/cmd_tlm/cmd.txt"}),(0,r.jsxs)(n.td,{children:["Example ",(0,r.jsx)(n.a,{href:"../configuration/command",children:"command"})," configuration. Will need to be edited for the target specific commands."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"targets/GSE/cmd_tlm/tlm.txt"}),(0,r.jsxs)(n.td,{children:["Example ",(0,r.jsx)(n.a,{href:"../configuration/telemetry",children:"telemetry"})," configuration. Will need to be edited for the target specific telemetry."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"targets/GSE/lib"}),(0,r.jsxs)(n.td,{children:["Contains any custom code required by the target. Good examples of custom code are library files, custom ",(0,r.jsx)(n.a,{href:"../configuration/interfaces",children:"interface"})," classes and ",(0,r.jsx)(n.a,{href:"../configuration/protocols",children:"protocols"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"targets/GSE/lib/gse.[rb/py]"}),(0,r.jsx)(n.td,{children:"Example library file which can be expanded as the target is developed. COSMOS recommends building up library methods to avoid code duplication and ease reuse."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"targets/GSE/procedures"}),(0,r.jsxs)(n.td,{children:["This folder contains target specific procedures and helper methods which exercise functionality of the target. These procedures should be kept simple and only use the command and telemetry definitions associated with this target. See the ",(0,r.jsx)(n.a,{href:"../guides/script-writing#script-organization",children:"Scripting Guide"})," for more information."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"targets/GSE/procedures/procedure.[rb/py]"}),(0,r.jsx)(n.td,{children:"Procedure with an example of sending a command and checking telemetry"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"targets/GSE/public"}),(0,r.jsxs)(n.td,{children:["Put image files here for use in Telemetry Viewer Canvas Image widgets such as ",(0,r.jsx)(n.a,{href:"/tools/staticdocs/docs/configuration/telemetry-screens#canvasimage",children:"CANVASIMAGE"})," and ",(0,r.jsx)(n.a,{href:"/tools/staticdocs/docs/configuration/telemetry-screens#canvasimagevalue",children:"CANVASIMAGEVALUE"})]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"targets/GSE/screens"}),(0,r.jsxs)(n.td,{children:["Contains telemetry ",(0,r.jsx)(n.a,{href:"/tools/staticdocs/docs/configuration/telemetry-screens",children:"screens"})," for the target"]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"targets/GSE/screens/status.txt"}),(0,r.jsxs)(n.td,{children:["Example ",(0,r.jsx)(n.a,{href:"/tools/staticdocs/docs/configuration/telemetry-screens",children:"screen"})," to display telemetry values"]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"targets/GSE/target.txt"}),(0,r.jsxs)(n.td,{children:[(0,r.jsx)(n.a,{href:"../configuration/target",children:"Target"})," configuration such as ignoring command and telemetry items and how to process the cmd/tlm files"]})]})]})]}),"\n",(0,r.jsx)(n.p,{children:"It also updates the plugin.txt file to add the new target:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ruby",children:"VARIABLE gse_target_name GSE\n\nTARGET GSE <%= gse_target_name %>\nINTERFACE <%= gse_target_name %>_INT openc3/interfaces/tcpip_client_interface.py host.docker.internal 8080 8081 10.0 nil BURST\n# INTERFACE <%= gse_target_name %>_INT tcpip_client_interface.rb host.docker.internal 8080 8081 10.0 nil BURST\n MAP_TARGET <%= gse_target_name %>\n"})}),"\n",(0,r.jsx)(n.h2,{id:"microservice-generator",children:"Microservice Generator"}),"\n",(0,r.jsx)(n.p,{children:"The microservice generator creates the scaffolding for a new COSMOS Microservice. It must operate inside an existing COSMOS plugin and requires a target name. For example:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"openc3-cosmos-gse % openc3.sh cli generate microservice\nUsage: cli generate microservice <NAME> (--ruby or --python)\n\nopenc3-cosmos-gse % openc3.sh cli generate microservice background --python\nMicroservice BACKGROUND successfully generated!\n"})}),"\n",(0,r.jsx)(n.p,{children:"This creates the following files and directories:"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Name"}),(0,r.jsx)(n.th,{children:"Description"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"microservices/BACKGROUND"}),(0,r.jsx)(n.td,{children:"Contains the code and any necessary configuration for the BACKGROUND microservice. The name is always defined in all caps. This is typically the default name of the microservice, but well-designed microservices will allow themselves to be renamed at installation."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"microservices/BACKGROUND/background.py"}),(0,r.jsxs)(n.td,{children:["Fully functional microservice which will run every minute and log a message. Edit to implement any custom logic that you want to run in the background. Potential uses are safety microservices which can check and autonomously respond to complex events and take action (NOTE: Simple actions might just require a ",(0,r.jsx)(n.a,{href:"/docs/configuration/limits-response",children:"Limits Response"}),")."]})]})]})]}),"\n",(0,r.jsx)(n.p,{children:"It also updates the plugin.txt file to add the new microservice:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ruby",children:"MICROSERVICE BACKGROUND background-microservice\n CMD python background.py\n"})}),"\n",(0,r.jsx)(n.h2,{id:"conversion-generator",children:"Conversion Generator"}),"\n",(0,r.jsxs)(n.p,{children:["The conversion generator creates the scaffolding for a new COSMOS ",(0,r.jsx)(n.a,{href:"/docs/configuration/conversions",children:"Conversion"}),". It must operate inside an existing COSMOS plugin and requires both a target name and conversion name. For example:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"openc3-cosmos-gse % openc3.sh cli generate conversion\nUsage: cli generate conversion <TARGET> <NAME> (--ruby or --python)\n\nopenc3-cosmos-gse % openc3.sh cli generate conversion GSE double --python\nConversion targets/GSE/lib/double_conversion.py successfully generated!\nTo use the conversion add the following to a telemetry item:\n READ_CONVERSION double_conversion.py\n"})}),"\n",(0,r.jsxs)(n.p,{children:["For more information about creating custom conversions and how to apply them, see the ",(0,r.jsx)(n.a,{href:"/docs/configuration/conversions",children:"Conversion"})," documentation."]}),"\n",(0,r.jsx)(n.h2,{id:"processor-generator",children:"Processor Generator"}),"\n",(0,r.jsxs)(n.p,{children:["The processor generator creates the scaffolding for a new COSMOS ",(0,r.jsx)(n.a,{href:"/docs/configuration/processors",children:"Processor"}),". It must operate inside an existing COSMOS plugin and requires both a target name and processor name. For example:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"openc3-cosmos-gse % openc3.sh cli generate processor\nUsage: cli generate processor <TARGET> <NAME> (--ruby or --python)\n\nopenc3-cosmos-gse % openc3.sh cli generate processor GSE slope --python\nProcessor targets/GSE/lib/slope_processor.py successfully generated!\nTo use the processor add the following to a telemetry packet:\n PROCESSOR SLOPE slope_processor.py <PARAMS...>\n"})}),"\n",(0,r.jsxs)(n.p,{children:["For more information about creating custom processors and how to apply them, see the ",(0,r.jsx)(n.a,{href:"/docs/configuration/processors",children:"Processor"})," documentation."]}),"\n",(0,r.jsx)(n.h2,{id:"limits-response-generator",children:"Limits Response Generator"}),"\n",(0,r.jsxs)(n.p,{children:["The limits_response generator creates the scaffolding for a new COSMOS ",(0,r.jsx)(n.a,{href:"/docs/configuration/limits-response",children:"Limits Response"}),". It must operate inside an existing COSMOS plugin and requires both a target name and limits response name. For example:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"openc3-cosmos-gse % openc3.sh cli generate limits_response\nUsage: cli generate limits_response <TARGET> <NAME> (--ruby or --python)\n\nopenc3-cosmos-gse % openc3.sh cli generate limits_response GSE safe --python\nLimits response targets/GSE/lib/safe_limits_response.py successfully generated!\nTo use the limits response add the following to a telemetry item:\n LIMITS_RESPONSE safe_limits_response.py\n"})}),"\n",(0,r.jsxs)(n.p,{children:["For more information about creating limits responses and how to apply them, see the ",(0,r.jsx)(n.a,{href:"/docs/configuration/limits-response",children:"Limits Response"})," documentation."]}),"\n",(0,r.jsx)(n.h2,{id:"widget-generator",children:"Widget Generator"}),"\n",(0,r.jsxs)(n.p,{children:["The widget generator creates the scaffolding for a new COSMOS Widget for use in ",(0,r.jsx)(n.a,{href:"/docs/configuration/telemetry-screens",children:"Telemetry Viewer Screens"}),". For more information see the ",(0,r.jsx)(n.a,{href:"/docs/guides/custom-widgets",children:"Custom Widget"})," guide. It must operate inside an existing COSMOS plugin and requires a widget name. For example:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"openc3-cosmos-gse % openc3.sh cli generate widget\nUsage: cli generate widget <SuperdataWidget>\n\nopenc3-cosmos-gse % openc3.sh cli generate widget HelloworldWidget\nWidget HelloworldWidget successfully generated!\nPlease be sure HelloworldWidget does not overlap an existing widget: https://docs.openc3.com/docs/configuration/telemetry-screens\n"})}),"\n",(0,r.jsx)(n.p,{children:"This creates the following files and directories:"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Name"}),(0,r.jsx)(n.th,{children:"Description"})]})}),(0,r.jsx)(n.tbody,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"src/HelloworldWidget.vue"}),(0,r.jsx)(n.td,{children:"Fully functional widget which displays a simple value. This can be expanded using existing COSMOS Vue.js code to create any data visualization imaginable."})]})})]}),"\n",(0,r.jsx)(n.p,{children:"It also updates the plugin.txt file to add the new widget:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ruby",children:"WIDGET Helloworld\n"})}),"\n",(0,r.jsx)(n.h2,{id:"tool-generator",children:"Tool Generator"}),"\n",(0,r.jsxs)(n.p,{children:["The tool generator creates the scaffolding for a new COSMOS Tool. It's It must operate inside an existing COSMOS plugin and requires a tool name. Developing a custom tool requires intensive knowledge of a Javascript framework such as Vue.js, Angular, React, or Svelte. Since all the COSMOS tools are built in Vue.js, that is the recommended framework for new tool development. For additional help on frontend development, see ",(0,r.jsx)(n.a,{href:"../development/developing#running-a-frontend-application",children:"Running a Frontend Application"}),"."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"openc3-cosmos-gse % openc3.sh cli generate tool\nUsage: cli generate tool 'Tool Name'\n\nopenc3-cosmos-gse % openc3.sh cli generate tool DataVis\nTool datavis successfully generated!\nPlease be sure datavis does not conflict with any other tools\n"})}),"\n",(0,r.jsx)(n.p,{children:"This creates the following files and directories:"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Name"}),(0,r.jsx)(n.th,{children:"Description"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"src/App.vue"}),(0,r.jsx)(n.td,{children:"Basic Vue template to render the application."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"src/main.js"}),(0,r.jsx)(n.td,{children:"Entry point for the new tool which loads Vue, Vuetify, and other libraries."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"src/router.js"}),(0,r.jsx)(n.td,{children:"Vue component router."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"src/tools/datavis"}),(0,r.jsx)(n.td,{children:"Contains all the files necessary to serve a web-based tool named datavis. The name is always defined in all lowercase. Due to technical limitations, the toolname must be unique and cannot be renamed at installation."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"src/tools/datavis/datavis.vue"}),(0,r.jsx)(n.td,{children:"Fully functional tool which displays a simple button. This can be expanded using existing COSMOS Vue.js code to create any tool imaginable."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"package.json"}),(0,r.jsx)(n.td,{children:"Build and dependency definition file. Used by npm or yarn to build the tool."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"vue.config.js"}),(0,r.jsx)(n.td,{children:"Vue configuration file used to serve the application in development and build the application."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"<dotfiles>"}),(0,r.jsx)(n.td,{children:"Various dotfiles which help configure formatters and tools for Javascript frontend development"})]})]})]}),"\n",(0,r.jsxs)(n.p,{children:["It also updates the plugin.txt file to add the new tool. The icon can be changed to any of the material design icons found ",(0,r.jsx)(n.a,{href:"https://pictogrammers.com/library/mdi/",children:"here"}),"."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ruby",children:'TOOL datavis "DataVis"\n INLINE_URL main.js\n ICON mdi-file-cad-box\n'})})]})}function h(e={}){let{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},2600:function(e,n,t){t.d(n,{R:()=>o,x:()=>a});var s=t(4041);let r={},i=s.createContext(r);function o(e){let n=s.useContext(i);return s.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),s.createElement(i.Provider,{value:n},e.children)}}}]);
|
@@ -1 +0,0 @@
|
|
1
|
-
"use strict";(self.webpackChunkdocs_openc3_com=self.webpackChunkdocs_openc3_com||[]).push([["6556"],{9678:function(e,t,i){i.r(t),i.d(t,{frontMatter:()=>c,toc:()=>d,default:()=>h,metadata:()=>r,assets:()=>o,contentTitle:()=>l});var r=JSON.parse('{"id":"guides/reference-architectures","title":"Reference Architectures","description":"Typical COSMOS use-cases","source":"@site/docs/guides/reference-architectures.md","sourceDirName":"guides","slug":"/guides/reference-architectures","permalink":"/tools/staticdocs/docs/guides/reference-architectures","draft":false,"unlisted":false,"editUrl":"https://github.com/OpenC3/cosmos/tree/main/docs.openc3.com/docs/guides/reference-architectures.md","tags":[],"version":"current","frontMatter":{"title":"Reference Architectures","description":"Typical COSMOS use-cases","sidebar_custom_props":{"myEmoji":"\u{1F3D7}\uFE0F"}},"sidebar":"defaultSidebar","previous":{"title":"Raspberry Pi","permalink":"/tools/staticdocs/docs/guides/raspberrypi"},"next":{"title":"Script Writing Guide","permalink":"/tools/staticdocs/docs/guides/script-writing"}}'),s=i(1085),n=i(2600);let c={title:"Reference Architectures",description:"Typical COSMOS use-cases",sidebar_custom_props:{myEmoji:"\u{1F3D7}\uFE0F"}},l,o={},d=[{value:"Core Single Server Architecture",id:"core-single-server-architecture",level:2},{value:"Enterprise Single Server Architecture",id:"enterprise-single-server-architecture",level:3},{value:"Enterprise Cloud Architecture (High Reliability / High Availability)",id:"enterprise-cloud-architecture-high-reliability--high-availability",level:3}];function a(e){let t={a:"a",h2:"h2",h3:"h3",li:"li",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,n.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.p,{children:'COSMOS is the best way to command and control hardware with embedded software. The hardware it can control and the configuration of the software is limitless. However, there are several "Reference Architectures" that are commonly used which describe the vast majority of use-cases for COSMOS.'}),"\n",(0,s.jsx)(t.h2,{id:"core-single-server-architecture",children:"Core Single Server Architecture"}),"\n",(0,s.jsxs)(t.p,{children:["COSMOS Core (Open Source) deployed on a single server is most suitable for evaluation, test or development. COSMOS can be deployed on a individual computer with Windows or Mac OS via ",(0,s.jsx)(t.a,{href:"https://docs.docker.com/desktop/",children:"Docker Desktop"}),". It can deployed on Linux directly using Docker on Ubuntu or Podman on RedHat."]}),"\n",(0,s.jsx)(t.p,{children:"If you deploy COSMOS Core you have to configure COSMOS yourself and build all your hardware plugins from scratch. You must rely on the COSMOS documentation and github issues instead of having direct email support from the OpenC3 team. Core configures a single user with a shared password having admin privileges. The Core license is AGPLv3 which means your users must have access to the COSMOS source code and any extensions you build into COSMOS itself."}),"\n",(0,s.jsx)(t.p,{children:"Most Suitible for:"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:"Evaluation of COSMOS"}),"\n",(0,s.jsx)(t.li,{children:"University teams"}),"\n",(0,s.jsx)(t.li,{children:"Individual use"}),"\n",(0,s.jsx)(t.li,{children:"Localized lab development"}),"\n"]}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:"Advantages"}),(0,s.jsx)(t.th,{children:"Considerations"})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"\u2705\xa0\xa0Free (AGPLv3 license)"}),(0,s.jsx)(t.td,{children:"\u{1F914}\xa0\xa0No OpenC3 support"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"\u2705\xa0\xa0Easy to deploy"}),(0,s.jsx)(t.td,{children:"\u{1F914}\xa0\xa0No Users, RBAC or SSO"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"\u2705\xa0\xa0Easy to configure"}),(0,s.jsx)(t.td,{children:"\u{1F914}\xa0\xa0Limited scalability"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{}),(0,s.jsx)(t.td,{children:"\u{1F914}\xa0\xa0No Calendar or Autonomic"})]})]})]}),"\n",(0,s.jsx)(t.h3,{id:"enterprise-single-server-architecture",children:"Enterprise Single Server Architecture"}),"\n",(0,s.jsxs)(t.p,{children:["COSMOS Enterprise deployed on a single server is most suitable for formal test, production or operations. COSMOS Enterprise can be deployed on a individual computer with Windows or Mac OS via ",(0,s.jsx)(t.a,{href:"https://docs.docker.com/desktop/",children:"Docker Desktop"}),". It can deployed on Linux directly using Docker on Ubuntu or Podman on RedHat."]}),"\n",(0,s.jsx)(t.p,{children:"Enterprise comes with a number of plugins that help you jump start your development: CCSDS TC/TM/CFDP, SCPI, SNMP, Gems, Protocol Buffers, gRPC, etc. Enterprise comes with email support from the OpenC3 team. Enterprise includes users, RBAC (role based access control) and SSO (single sign-on) through Keycloak. The Enterprise license is Commercial which means you can build proprietary COSMOS extensions and not be required to give your users access to the source code."}),"\n",(0,s.jsx)(t.p,{children:"Most Suitible for:"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:"Quickly connecting to existing hardware via SCPI, SNMP, Gems, gRPC, etc"}),"\n",(0,s.jsx)(t.li,{children:"Controlling hardware utilizing CCSDS TC, TM, CFDP"}),"\n",(0,s.jsxs)(t.li,{children:["Operating cFS (",(0,s.jsx)(t.a,{href:"https://etd.gsfc.nasa.gov/capabilities/core-flight-system/",children:"Core Flight System"}),")"]}),"\n",(0,s.jsx)(t.li,{children:"Formal test with user attribution"}),"\n",(0,s.jsx)(t.li,{children:"Operations for 1 or more satellites"}),"\n"]}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:"Advantages"}),(0,s.jsx)(t.th,{children:"Considerations"})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"\u2705\xa0\xa0OpenC3 Supported"}),(0,s.jsx)(t.td,{children:"\u{1F914}\xa0\xa0Limited scalability"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"\u2705\xa0\xa0Commercial License"}),(0,s.jsx)(t.td,{})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"\u2705\xa0\xa0Library of existing plugins"}),(0,s.jsx)(t.td,{})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"\u2705\xa0\xa0Users with RBAC and SSO"}),(0,s.jsx)(t.td,{})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"\u2705\xa0\xa0Calendar and Autonomic"}),(0,s.jsx)(t.td,{})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"\u2705\xa0\xa0Easy to deploy"}),(0,s.jsx)(t.td,{})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"\u2705\xa0\xa0Easy to configure"}),(0,s.jsx)(t.td,{})]})]})]}),"\n",(0,s.jsx)(t.h3,{id:"enterprise-cloud-architecture-high-reliability--high-availability",children:"Enterprise Cloud Architecture (High Reliability / High Availability)"}),"\n",(0,s.jsx)(t.p,{children:"COSMOS Enterprise deployed in the cloud (public or private) is most suitable for operations of satellite constellations or as a satellite operations center. In addition to the benefits listed under the Enterprise Single Server Architecture, Enterprise comes with cloud scripts to help create a reference deployment (EKS, GKE, etc). Enterprise also comes with helm charts to deploy COSMOS in Kubernetes. Running COSMOS in Kubernetes is what achieves high reliability and high availability."}),"\n",(0,s.jsx)(t.p,{children:"Most Suitible for:"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:"Operating a satellite constellation (10-1000 satellites)"}),"\n",(0,s.jsx)(t.li,{children:"Running a satellite ops center which supports many different satellite buses / payloads"}),"\n"]}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:"Advantages"}),(0,s.jsx)(t.th,{children:"Considerations"})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"\u2705\xa0\xa0OpenC3 Supported"}),(0,s.jsx)(t.td,{children:"\u{1F914}\xa0\xa0Cloud configuration / complexity"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"\u2705\xa0\xa0Commercial License"}),(0,s.jsx)(t.td,{children:"\u{1F914}\xa0\xa0Kubernetes management"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"\u2705\xa0\xa0Library of existing plugins"}),(0,s.jsx)(t.td,{children:"\u{1F914}\xa0\xa0Public cloud costs"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"\u2705\xa0\xa0Users with RBAC and SSO"}),(0,s.jsx)(t.td,{})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"\u2705\xa0\xa0Calendar and Autonomic"}),(0,s.jsx)(t.td,{})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"\u2705\xa0\xa0Cloud configuration scripts"}),(0,s.jsx)(t.td,{})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"\u2705\xa0\xa0Helm charts"}),(0,s.jsx)(t.td,{})]})]})]})]})}function h(e={}){let{wrapper:t}={...(0,n.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(a,{...e})}):a(e)}},2600:function(e,t,i){i.d(t,{R:()=>c,x:()=>l});var r=i(4041);let s={},n=r.createContext(s);function c(e){let t=r.useContext(n);return r.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:c(e.components),r.createElement(n.Provider,{value:t},e.children)}}}]);
|
@@ -1 +0,0 @@
|
|
1
|
-
"use strict";(self.webpackChunkdocs_openc3_com=self.webpackChunkdocs_openc3_com||[]).push([["7397"],{1216:function(e,t,n){n.r(t),n.d(t,{frontMatter:()=>c,toc:()=>d,default:()=>p,metadata:()=>a,assets:()=>r,contentTitle:()=>o});var a=JSON.parse('{"id":"guides/dynamic-packets","title":"Dynamic Packets","description":"How COSMOS dynamically builds packets","source":"@site/docs/guides/dynamic-packets.md","sourceDirName":"guides","slug":"/guides/dynamic-packets","permalink":"/tools/staticdocs/docs/guides/dynamic-packets","draft":false,"unlisted":false,"editUrl":"https://github.com/OpenC3/cosmos/tree/main/docs.openc3.com/docs/guides/dynamic-packets.md","tags":[],"version":"current","frontMatter":{"title":"Dynamic Packets","description":"How COSMOS dynamically builds packets","sidebar_custom_props":{"myEmoji":"\u{1F9F1}"}},"sidebar":"defaultSidebar","previous":{"title":"Custom Widgets","permalink":"/tools/staticdocs/docs/guides/custom-widgets"},"next":{"title":"Exposing Microservices","permalink":"/tools/staticdocs/docs/guides/exposing-microservices"}}'),i=n(1085),s=n(2600);let c={title:"Dynamic Packets",description:"How COSMOS dynamically builds packets",sidebar_custom_props:{myEmoji:"\u{1F9F1}"}},o,r={},d=[{value:"Using Dynamic Update",id:"using-dynamic-update",level:2}];function l(e){let t={a:"a",code:"code",h2:"h2",li:"li",ol:"ol",p:"p",pre:"pre",...(0,s.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsxs)(t.p,{children:["COSMOS has the ability to dynamically build packets rather than have them statically defined by our ",(0,i.jsx)(t.a,{href:"/docs/configuration/command",children:"COMMAND"})," and ",(0,i.jsx)(t.a,{href:"/docs/configuration/telemetry",children:"TELEMETRY"})," configuration files. This is useful when your telemetry items are dynamic like when generating ",(0,i.jsx)(t.a,{href:"https://prometheus.io/",children:"prometheus"})," metrics."]}),"\n",(0,i.jsxs)(t.p,{children:["The best way to illustrate this capability is with an example. If you're an Enterprise customer, please see the ",(0,i.jsx)(t.a,{href:"https://github.com/OpenC3/cosmos-enterprise-plugins/tree/main/openc3-cosmos-prometheus-metrics",children:"prometheus-metrics"})," plugin."]}),"\n",(0,i.jsx)(t.h2,{id:"using-dynamic-update",children:"Using Dynamic Update"}),"\n",(0,i.jsxs)(t.p,{children:["To use the dynamic update capability in your own code you need to call the ",(0,i.jsx)(t.code,{children:"TargetModel"})," ",(0,i.jsx)(t.code,{children:"dynamic_update"})," method. This method takes an array / list of packets, whether the packets are commands or telemetry, and the filename to create in the config bucket."]}),"\n",(0,i.jsx)(t.p,{children:"Here is the method signature:"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-ruby",children:'def dynamic_update(packets, cmd_or_tlm = :TELEMETRY, filename = "dynamic_tlm.txt")\n'})}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-python",children:'def dynamic_update(self, packets, cmd_or_tlm="TELEMETRY", filename="dynamic_tlm.txt")\n'})}),"\n",(0,i.jsx)(t.p,{children:"Here is an example of using this method:"}),"\n",(0,i.jsx)(t.p,{children:"Ruby:"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-ruby",children:"# Create a new packet\npacket = Packet.new('INST', 'NEW_PACKET')\n# or get an existing packet\npacket = System.telemetry.packet('INST', 'METRICS')\n# Modify the packet by appending new items to it\npacket.append_item('NEW_ITEM', 32, :FLOAT)\n# Grab the TargetModel associated with the packet's target\ntarget_model = TargetModel.get_model(name: 'INST', scope: 'DEFAULT')\n# Update the target model with the new packet\ntarget_model.dynamic_update([packet])\n"})}),"\n",(0,i.jsx)(t.p,{children:"Python:"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-python",children:"# Create a new packet\npacket = Packet('INST', 'NEW_PACKET')\n# or get an existing packet\npacket = System.telemetry.packet('INST', 'METRICS')\n# Modify the packet by appending new items to it\npacket.append_item('NEW_ITEM', 32, 'FLOAT')\n# Grab the TargetModel associated with the packet's target\ntarget_model = TargetModel.get_model(name='INST', scope='DEFAULT')\n# Update the target model with the new packet\ntarget_model.dynamic_update([packet])\n"})}),"\n",(0,i.jsx)(t.p,{children:"When this method is called several things happen:"}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsx)(t.li,{children:"The COSMOS Redis database is updated with the new packets and the current value table is initialized"}),"\n",(0,i.jsxs)(t.li,{children:["A configuration file for the packets is created and stored at <SCOPE>/targets_modified/<TARGET>/cmd_tlm/dynamic_tlm.txt. Note that if you call ",(0,i.jsx)(t.code,{children:"dynamic_update"})," multiple times you should update the filename so it is not written over."]}),"\n",(0,i.jsx)(t.li,{children:"The COSMOS microservices are informed of the new streaming topics which will contain the raw and decommuted packet data. Part of this action is to restart the microservices so they pickup these changes. For COMMANDS the following are restarted: <SCOPE>__COMMANDLOG__<TARGET> and <SCOPE>__DECOMCMDLOG__<TARGET>. For TELEMETRY the following are restarted: <SCOPE>__PACKET_LOG__<TARGET>, <SCOPE>__DECOMLOG__<TARGET>, and <SCOPE>__DECOM__<TARGET>."}),"\n"]}),"\n",(0,i.jsxs)(t.p,{children:["Since ",(0,i.jsx)(t.code,{children:"dynamic_update"})," restarts the LOG microservices there is a potential for a loss of packets during the restart. Thus you should not call ",(0,i.jsx)(t.code,{children:"dynamic_update"})," during critical telemetry processing periods."]})]})}function p(e={}){let{wrapper:t}={...(0,s.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(l,{...e})}):l(e)}},2600:function(e,t,n){n.d(t,{R:()=>c,x:()=>o});var a=n(4041);let i={},s=a.createContext(i);function c(e){let t=a.useContext(s);return a.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:c(e.components),a.createElement(s.Provider,{value:t},e.children)}}}]);
|
@@ -1 +0,0 @@
|
|
1
|
-
"use strict";(self.webpackChunkdocs_openc3_com=self.webpackChunkdocs_openc3_com||[]).push([["8539"],{7791:function(e,t,i){i.r(t),i.d(t,{frontMatter:()=>r,toc:()=>h,default:()=>c,metadata:()=>n,assets:()=>o,contentTitle:()=>l});var n=JSON.parse('{"id":"tools/tlm-grapher","title":"Telemetry Grapher","description":"Graph real time or historical data","source":"@site/docs/tools/tlm-grapher.md","sourceDirName":"tools","slug":"/tools/tlm-grapher","permalink":"/tools/staticdocs/docs/tools/tlm-grapher","draft":false,"unlisted":false,"editUrl":"https://github.com/OpenC3/cosmos/tree/main/docs.openc3.com/docs/tools/tlm-grapher.md","tags":[],"version":"current","frontMatter":{"title":"Telemetry Grapher","description":"Graph real time or historical data","sidebar_custom_props":{"myEmoji":"\u{1F4C8}"}},"sidebar":"defaultSidebar","previous":{"title":"Table Manager","permalink":"/tools/staticdocs/docs/tools/table-manager"},"next":{"title":"Telemetry Viewer","permalink":"/tools/staticdocs/docs/tools/tlm-viewer"}}'),a=i(1085),s=i(2600);let r={title:"Telemetry Grapher",description:"Graph real time or historical data",sidebar_custom_props:{myEmoji:"\u{1F4C8}"}},l,o={},h=[{value:"Introductions",id:"introductions",level:2},{value:"Telemetry Grapher Menus",id:"telemetry-grapher-menus",level:2},{value:"File Menu Items",id:"file-menu-items",level:3},{value:"Open Configuration",id:"open-configuration",level:4},{value:"Save Configuration",id:"save-configuration",level:4},{value:"Graph Menu Items",id:"graph-menu-items",level:3},{value:"Selecting Items",id:"selecting-items",level:2},{value:"Graph Window Management",id:"graph-window-management",level:2}];function d(e){let t={h2:"h2",h3:"h3",h4:"h4",img:"img",li:"li",p:"p",ul:"ul",...(0,s.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.h2,{id:"introductions",children:"Introductions"}),"\n",(0,a.jsx)(t.p,{children:"Telemetry Grapher is a graphing application that allows for one or more telemetry points per graph. It supports multiple graphs per screen which can be resized and reordered. Multiple configurations can be saved and restored for different situations."}),"\n",(0,a.jsx)(t.p,{children:(0,a.jsx)(t.img,{alt:"Telemetry Grapher",src:i(3637).A+"",width:"1270",height:"927"})}),"\n",(0,a.jsx)(t.h2,{id:"telemetry-grapher-menus",children:"Telemetry Grapher Menus"}),"\n",(0,a.jsx)(t.h3,{id:"file-menu-items",children:"File Menu Items"}),"\n",(0,a.jsx)("img",{src:i(5114).A,alt:"File Menu",style:{float:"left","margin-right":"50px",height:"90px"}}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsx)(t.li,{children:"Open a saved configuration (graphs and items)"}),"\n",(0,a.jsx)(t.li,{children:"Save the current configuration"}),"\n",(0,a.jsx)(t.li,{children:"Reset the configuration (default settings)"}),"\n"]}),"\n",(0,a.jsx)(t.h4,{id:"open-configuration",children:"Open Configuration"}),"\n",(0,a.jsx)(t.p,{children:"The Open Configuration dialog displays a list of all saved configurations. You select a configuration and then click Ok to load it. You can delete existing configurations by clicking the Trash icon next to a configuration name."}),"\n",(0,a.jsx)(t.h4,{id:"save-configuration",children:"Save Configuration"}),"\n",(0,a.jsx)(t.p,{children:"The Save Configuration dialog also displays a list of all saved configurations. You click the Configuration Name text field, enter the name of your new configuration, and click Ok to save. You can delete existing configurations by clicking the Trash icon next to a configuration name."}),"\n",(0,a.jsx)(t.h3,{id:"graph-menu-items",children:"Graph Menu Items"}),"\n",(0,a.jsx)("img",{src:i(326).A,alt:"File Menu",style:{float:"left","margin-right":"50px",height:"150px"}}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsx)(t.li,{children:"Add a new graph"}),"\n",(0,a.jsx)(t.li,{children:"Start / Resume graphing"}),"\n",(0,a.jsx)(t.li,{children:"Pause graph"}),"\n",(0,a.jsx)(t.li,{children:"Stop graph"}),"\n",(0,a.jsx)(t.li,{children:"Edit grapher settings"}),"\n"]}),"\n",(0,a.jsx)(t.p,{children:"Editing the grapher settings brings up a dialog to change settings affecting every graph in the Telemetry Grapher tool. Changing the Seconds Graphed changes the visible windows displaying graph points. The smaller of Seconds Graphed and Points Graphed will be used when calculating the number of points to display. Changing the Points Saved will affect performance of the browser window if set too high. The default of 1,000,000 points can store over 11.5 days of 1Hz data points."}),"\n",(0,a.jsx)(t.p,{children:"Editing an individual graph by clicking the pencil icon in title bar of the graph brings up the edit graph dialog."}),"\n",(0,a.jsx)(t.p,{children:(0,a.jsx)(t.img,{alt:"Edit Graph",src:i(95).A+"",width:"592",height:"766"})}),"\n",(0,a.jsx)(t.p,{children:"Editing the Start Date and Start Time will re-query the data to begin at the specified time. This operation can take several seconds depending on how far back data is requested. Similarly, specifying the End Date and End Time will limit the data request to the specified time. Leaving the End Date / End Time fields blank will cause Telemetry Grapher to continue to graph items in real-time as they arrive."}),"\n",(0,a.jsx)(t.p,{children:"Changing the Min Y and Max Y values simply sets the graph scale. Deleting the Min Y and Max Y values allows the graph to scale automatically as values arrive. Compare the following graph with the minimum set to 0 and the maximum set to 100 with the first graph image (auto-scale)."}),"\n",(0,a.jsx)(t.p,{children:(0,a.jsx)(t.img,{alt:"Min Max",src:i(2666).A+"",width:"1247",height:"718"})}),"\n",(0,a.jsx)(t.h2,{id:"selecting-items",children:"Selecting Items"}),"\n",(0,a.jsx)(t.p,{children:"Selecting a target from the Select Target drop down automatically updates the available packets in the Select Packet drop down which updates the available items in the Select Item drop down. Clicking Add Item adds the item to the graph which immediately begins graphing."}),"\n",(0,a.jsx)(t.p,{children:(0,a.jsx)(t.img,{alt:"Temp 1",src:i(6186).A+"",width:"1247",height:"829"})}),"\n",(0,a.jsx)(t.p,{children:"As time passes, the main graph fills up and starts scrolling while the overview graph at the bottom shows the entire history."}),"\n",(0,a.jsx)(t.p,{children:(0,a.jsx)(t.img,{alt:"Temp 1 History",src:i(9964).A+"",width:"1247",height:"829"})}),"\n",(0,a.jsx)(t.p,{children:"Selecting a new item and adding it to the graph automatically fills the graph with history until the beginning of the first item. This allows you to add items to the graph incrementally and maintain full history."}),"\n",(0,a.jsx)(t.p,{children:(0,a.jsx)(t.img,{alt:"Temp1 Temp2",src:i(947).A+"",width:"1247",height:"829"})}),"\n",(0,a.jsx)(t.h2,{id:"graph-window-management",children:"Graph Window Management"}),"\n",(0,a.jsx)(t.p,{children:"All graphs can be moved around the browser window by clicking their title bar and moving them. Other graphs will move around intelligently to fill the space. This allows you order the graphs no matter which order they were created in."}),"\n",(0,a.jsx)(t.p,{children:"Each graph has a set of window buttons in the upper right corner. The first shrinks or grows the graph both horizontally and vertically to allow for 4 graphs in the same browser tab. Note that half height graphs no longer show the overview graph."}),"\n",(0,a.jsx)(t.p,{children:(0,a.jsx)(t.img,{alt:"Four Graphs",src:i(28).A+"",width:"1247",height:"710"})}),"\n",(0,a.jsx)(t.p,{children:"The second button shrinks or grows the graph horizontally so it will either be half or full width of the browser window. This allows for two full width graphs on top of each other."}),"\n",(0,a.jsx)(t.p,{children:(0,a.jsx)(t.img,{alt:"Two Full Width",src:i(8177).A+"",width:"1247",height:"833"})}),"\n",(0,a.jsx)(t.p,{children:"The second button shrinks or grows the graph vertically so it will either be half or full height of the browser window. This allows for two full height graphs side by side."}),"\n",(0,a.jsx)(t.p,{children:(0,a.jsx)(t.img,{alt:"Two Full Height",src:i(8080).A+"",width:"1247",height:"833"})}),"\n",(0,a.jsx)(t.p,{children:"The line button minimizes the graph to effectively hide it. This allows you to focus on a single graph without losing existing graphs."}),"\n",(0,a.jsx)(t.p,{children:(0,a.jsx)(t.img,{alt:"Minimized",src:i(2148).A+"",width:"1247",height:"833"})}),"\n",(0,a.jsx)(t.p,{children:"The final X button closes the graph."})]})}function c(e={}){let{wrapper:t}={...(0,s.R)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(d,{...e})}):d(e)}},5114:function(e,t,i){i.d(t,{A:()=>n});let n=i.p+"assets/images/file_menu-1c05cfc08f9d07b3f7122d2fe1ad98ed428dc563d2c5d2edddbed71f46779eb8.png"},326:function(e,t,i){i.d(t,{A:()=>n});let n=i.p+"assets/images/graph_menu-289cbbb168622f661c1c98a7bd2c1b43f888e9c3560ba4e1d435ab62d0aad6de.png"},95:function(e,t,i){i.d(t,{A:()=>n});let n=i.p+"assets/images/edit_graph-9618076f837e0d358ea0bfbf503d43b377805d818370405536f5a1c049209e99.png"},28:function(e,t,i){i.d(t,{A:()=>n});let n=i.p+"assets/images/four_graphs-1aa5a7cb9ce51cec815fc9d8740b40e113bd171c4977711d47ef1e6daf02719e.png"},2666:function(e,t,i){i.d(t,{A:()=>n});let n=i.p+"assets/images/graph_min_max-75be4a19a7e13a1b9b7a18a9b898b170c8ded7768b01ce6c6effd566ac8e071a.png"},6186:function(e,t,i){i.d(t,{A:()=>n});let n=i.p+"assets/images/graph_temp1-028d8660c779136ff017b0b8a9fadb294e9ff478a65d7bd73032c3c2ed4f03d0.png"},947:function(e,t,i){i.d(t,{A:()=>n});let n=i.p+"assets/images/graph_temp1_temp2-ad650da0ddf1fb5c6e9764b737bfab3027f5abcb935ad86d9716dfdf13032dca.png"},9964:function(e,t,i){i.d(t,{A:()=>n});let n=i.p+"assets/images/graph_temp1_time-53c18518755d1d1c816db7f0a67e26c5408aba32b644fda519b5ecf7a7ee9b27.png"},2148:function(e,t,i){i.d(t,{A:()=>n});let n=i.p+"assets/images/minimized-47ddb9b9b68b47aae3d0a12cb39ab767adf446acbe213c0b5565c1bfaf8a463f.png"},3637:function(e,t,i){i.d(t,{A:()=>n});let n=i.p+"assets/images/telemetry_grapher-3a37c074a25b7912a76d96fd46a1431d27202d71374f78c829f273e5cb342233.png"},8080:function(e,t,i){i.d(t,{A:()=>n});let n=i.p+"assets/images/two_full_height-ccba2940b80345f3569ea47b7ddd3390c08195de91559f5586f85e36e411afd6.png"},8177:function(e,t,i){i.d(t,{A:()=>n});let n=i.p+"assets/images/two_full_width-0116adbf994500a24d4717e002d32098f8d6197bcece510b84b90400f23feade.png"},2600:function(e,t,i){i.d(t,{R:()=>r,x:()=>l});var n=i(4041);let a={},s=n.createContext(a);function r(e){let t=n.useContext(s);return n.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:r(e.components),n.createElement(s.Provider,{value:t},e.children)}}}]);
|