diff --git a/docs/.build b/docs/.build new file mode 100644 index 0000000..ef1761b --- /dev/null +++ b/docs/.build @@ -0,0 +1,41 @@ +404.html +api-reference.html +changelog.html +code_of_conduct.html +contributing.html +dist/handlebars.runtime-NWIB6V2M.js +dist/handlebars.templates-EPF2X7PV.js +dist/html-J2ASZTQE.js +dist/html-erlang-BDSMJ657.css +dist/inconsolata-latin-400-normal-RGKDDNDD.woff2 +dist/inconsolata-latin-700-normal-DTS2D7TO.woff2 +dist/inconsolata-latin-ext-400-normal-K7HVGTP7.woff2 +dist/inconsolata-latin-ext-700-normal-4MPBLFZC.woff2 +dist/inconsolata-vietnamese-400-normal-IGQPHHJH.woff2 +dist/inconsolata-vietnamese-700-normal-LHEGSN35.woff2 +dist/lato-latin-300-normal-YUMVEFOL.woff2 +dist/lato-latin-400-normal-W7754I4D.woff2 +dist/lato-latin-700-normal-2XVSBPG4.woff2 +dist/lato-latin-ext-300-normal-VPGGJKJL.woff2 +dist/lato-latin-ext-400-normal-N27NCBWW.woff2 +dist/lato-latin-ext-700-normal-Q2L5DVMW.woff2 +dist/merriweather-cyrillic-300-italic-M6KMXZSZ.woff2 +dist/merriweather-cyrillic-300-normal-7PAAHU3N.woff2 +dist/merriweather-cyrillic-ext-300-italic-JP3ZEV2P.woff2 +dist/merriweather-cyrillic-ext-300-normal-5LF5LCEK.woff2 +dist/merriweather-latin-300-italic-353COS6Q.woff2 +dist/merriweather-latin-300-normal-RWDJH4FN.woff2 +dist/merriweather-latin-ext-300-italic-MWCA36KE.woff2 +dist/merriweather-latin-ext-300-normal-K6L27CZ5.woff2 +dist/merriweather-vietnamese-300-italic-EHHNZPUO.woff2 +dist/merriweather-vietnamese-300-normal-U376L4Z4.woff2 +dist/remixicon-NKANDIL5.woff2 +dist/search_data-2A7D3E4D.js +dist/sidebar_items-6B331F7B.js +index.html +license.html +packbeam.html +packbeam_api.html +readme.html +search.html +updating.html diff --git a/docs/404.html b/docs/404.html new file mode 100644 index 0000000..855a5c0 --- /dev/null +++ b/docs/404.html @@ -0,0 +1,159 @@ + + + + + + + + + + 404 — atomvm_packbeam v0.7.2 + + + + + + + + + + + + + + + + +
+ + + + + +
+ +
+
+ +

+ + + Page not found +

+ +

Sorry, but the page you were trying to get to, does not exist. You +may want to try searching this site using the sidebar + + or using our API Reference page + +to find what you were looking for.

+ +
+
+
+
+ + + + diff --git a/docs/api-reference.html b/docs/api-reference.html new file mode 100644 index 0000000..a918ef3 --- /dev/null +++ b/docs/api-reference.html @@ -0,0 +1,210 @@ + + + + + + + + + + API Reference — atomvm_packbeam v0.7.2 + + + + + + + + + + + + + + + + +
+ + + + + +
+ +
+
+ +

+ + + + + + View Source + + + + API Reference atomvm_packbeam v0.7.2 +

+ + +
+

+ + + + Modules +

+ +
+
+
+ packbeam + +
+ +
An escript and OTP library used to generate an AtomVM AVM file from a set of files (beam files, previously built AVM files, or even arbitrary data files).
+ +
+
+
+ packbeam_api + +
+ +
A library used to generate an AtomVM AVM file from a set of files (beam files, previously built AVM files, or even arbitrary data files).
+ +
+ +
+
+ + + + +
+
+
+
+ + + + diff --git a/docs/atomvm_packbeam.epub b/docs/atomvm_packbeam.epub new file mode 100644 index 0000000..dc0d5dd Binary files /dev/null and b/docs/atomvm_packbeam.epub differ diff --git a/docs/changelog.html b/docs/changelog.html new file mode 100644 index 0000000..a3105e4 --- /dev/null +++ b/docs/changelog.html @@ -0,0 +1,349 @@ + + + + + + + + + + Changelog — atomvm_packbeam v0.7.2 + + + + + + + + + + + + + + + + +
+ + + + + +
+ +
+
+ +

+ + + + + + View Source + + + + Changelog +

+ +

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, +and this project adheres to Semantic Versioning.

+ + + + [0.7.2] (2023.11.24) +

+
  • Make use of profiles to minimize downstream dependencies
  • Fix install.sh script on FreeBSD platform

+ + + + [0.7.1] (2023.10.22) +

+

+ + + + [0.7.0] (2022.10.17) +

+
  • Added version sub-command to print version to the console
  • Added -r, --remove option and removed the -i, --include option, which was ineffective due to a bug. See the Updating notes on the impact of these changes.

+ + + + [0.6.2] (2023.10.14) +

+
  • Added relx stanzas to create a standalone release of the packbeam utility
  • Added install scripts to simplify installation for users

+ + + + [0.6.1] (2023.07.16) +

+
  • Added extract sub-command

+ + + + [0.6.0] (2022.12.18) +

+

+ + + + Added +

+
  • Added ability to include <<"Line">> chunks in BEAM files in generated AVM files
  • Added CI build

+ + + + Changed +

+
  • Changed the packbeam_api:create function to take a single map for optional +parameters, instead of coding paramters into function arguments. Previous +versions of the packbeam_api:create function that take optional parameters +have been deprecated.

+ + + + [0.5.0] (2022.08.28) +

+

+ + + + Added +

+
  • Added ability to specify a module name for ordinary (non-BEAM) files (API-only).
  • Added support for tracking dependencies using application spec files as binaries +(API-only)
  • Added PropEr test
  • Added new format option to the list subcommand, supporting csv, bare, +and default options.

+ + + + Fixed +

+
  • Fixed a bug in parsing non-BEAM files in included AVM files, which would cause +non-BEAM file contents to be loaded incorrectly.

+ + + + Changed +

+
  • Changed the command line syntax to support long and short option names using +GNU-style conventions; deprecated single-hyphen short options.
  • Moved packbeam API functionality into packbeam_api module. +Previous packbeam API functions now call corresponding packbeam_api +functions and are deprecated.

+ + + + [0.4.1] (2022.06.19) +

+

+ + + + Added +

+
  • Added unit tests

+ + + + Fixed +

+
  • Fixed a bug that failed to track atoms that occur in BEAM LitT tables

+ + + + Changed +

+
  • Weakened the test for finding a start BEAM file such that it only requires that the ?BEAM_START_FLAG be set, for compatibility with ExAtomVM.

+ + + + [0.4.0] (2022.05.21) +

+

+ + + + Added +

+
  • Added erlfmt plugin and formatted code.

+ + + + Fixed +

+
  • Fixed a bug that prevented packbeam files that include priv files from being properly loaded.

+ + + + [0.3.0] (2022.01.15) +

+

+ + + + Fixed +

+
  • Fixed a bug in pulling in dependent BEAM files based on the atoms table

+ + + + [0.2.0] (2021.04.03) +

+

+ + + + Added +

+
  • Added support for deployment to hex

+ + + + Fixed +

+
  • Uncompressed literals table

+ + + + [0.1.0] (2020.05.17) +

+
  • Initial Release
+ + +
+
+
+
+ + + + diff --git a/docs/code_of_conduct.html b/docs/code_of_conduct.html new file mode 100644 index 0000000..74fc54d --- /dev/null +++ b/docs/code_of_conduct.html @@ -0,0 +1,295 @@ + + + + + + + + + + Contributor Covenant Code of Conduct — atomvm_packbeam v0.7.2 + + + + + + + + + + + + + + + + +
+ + + + + +
+ +
+
+ +

+ + + + + + View Source + + + + Contributor Covenant Code of Conduct +

+ +

+ + + + Our Pledge +

+

We as members, contributors, and leaders pledge to make participation in our +community a harassment-free experience for everyone, regardless of age, body +size, visible or invisible disability, ethnicity, sex characteristics, gender +identity and expression, level of experience, education, socio-economic status, +nationality, personal appearance, race, religion, or sexual identity +and orientation.

We pledge to act and interact in ways that contribute to an open, welcoming, +diverse, inclusive, and healthy community.

+ + + + Our Standards +

+

Examples of behavior that contributes to a positive environment for our +community include:

  • Demonstrating empathy and kindness toward other people
  • Being respectful of differing opinions, viewpoints, and experiences
  • Giving and gracefully accepting constructive feedback
  • Accepting responsibility and apologizing to those affected by our mistakes, +and learning from the experience
  • Focusing on what is best not just for us as individuals, but for the +overall community

Examples of unacceptable behavior include:

  • The use of sexualized language or imagery, and sexual attention or +advances of any kind
  • Trolling, insulting or derogatory comments, and personal or political attacks
  • Public or private harassment
  • Publishing others' private information, such as a physical or email +address, without their explicit permission
  • Other conduct which could reasonably be considered inappropriate in a +professional setting

+ + + + Enforcement Responsibilities +

+

Community leaders are responsible for clarifying and enforcing our standards of +acceptable behavior and will take appropriate and fair corrective action in +response to any behavior that they deem inappropriate, threatening, offensive, +or harmful.

Community leaders have the right and responsibility to remove, edit, or reject +comments, commits, code, wiki edits, issues, and other contributions that are +not aligned to this Code of Conduct, and will communicate reasons for moderation +decisions when appropriate.

+ + + + Scope +

+

This Code of Conduct applies within all community spaces, and also applies when +an individual is officially representing the community in public spaces. +Examples of representing our community include using an official e-mail address, +posting via an official social media account, or acting as an appointed +representative at an online or offline event.

+ + + + Enforcement +

+

Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported to the community leaders responsible for enforcement at +davide AT uninstall.it. +All complaints will be reviewed and investigated promptly and fairly.

All community leaders are obligated to respect the privacy and security of the +reporter of any incident.

+ + + + Enforcement Guidelines +

+

Community leaders will follow these Community Impact Guidelines in determining +the consequences for any action they deem in violation of this Code of Conduct:

+ + + + 1. Correction +

+

Community Impact: Use of inappropriate language or other behavior deemed +unprofessional or unwelcome in the community.

Consequence: A private, written warning from community leaders, providing +clarity around the nature of the violation and an explanation of why the +behavior was inappropriate. A public apology may be requested.

+ + + + 2. Warning +

+

Community Impact: A violation through a single incident or series +of actions.

Consequence: A warning with consequences for continued behavior. No +interaction with the people involved, including unsolicited interaction with +those enforcing the Code of Conduct, for a specified period of time. This +includes avoiding interactions in community spaces as well as external channels +like social media. Violating these terms may lead to a temporary or +permanent ban.

+ + + + 3. Temporary Ban +

+

Community Impact: A serious violation of community standards, including +sustained inappropriate behavior.

Consequence: A temporary ban from any sort of interaction or public +communication with the community for a specified period of time. No public or +private interaction with the people involved, including unsolicited interaction +with those enforcing the Code of Conduct, is allowed during this period. +Violating these terms may lead to a permanent ban.

+ + + + 4. Permanent Ban +

+

Community Impact: Demonstrating a pattern of violation of community +standards, including sustained inappropriate behavior, harassment of an +individual, or aggression toward or disparagement of classes of individuals.

Consequence: A permanent ban from any sort of public interaction within +the community.

+ + + + Attribution +

+

This Code of Conduct is adapted from the Contributor Covenant, +version 2.0, available at +https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.

Community Impact Guidelines were inspired by Mozilla's code of conduct +enforcement ladder.

For answers to common questions about this code of conduct, see the FAQ at +https://www.contributor-covenant.org/faq. Translations are available at +https://www.contributor-covenant.org/translations.

+ + +
+
+
+
+ + + + diff --git a/docs/contributing.html b/docs/contributing.html new file mode 100644 index 0000000..8211ce3 --- /dev/null +++ b/docs/contributing.html @@ -0,0 +1,229 @@ + + + + + + + + + + Contributing — atomvm_packbeam v0.7.2 + + + + + + + + + + + + + + + + +
+ + + + + +
+ +
+
+ +

+ + + + + + View Source + + + + Contributing +

+ +

Before contributing, please read carefully our Code of Conduct and +the following contribution guidelines.

Please, also make sure to understand the Apache 2.0 license and the +Developer Certificate of Origin.

Last but not least, do not use GitHub issues for vulnerability reports, read instead the +security policy for instructions.

+

+ + + + Coding Style +

+

+ + + + C Code +

+

Identation

Good:

void f(int reverse)
+{
+    if (reverse) {
+        puts("!dlroW olleH");
+    } else {
+        puts("Hello world");
+    }
+}

Bad:

void f(int reverse) {
+    if (reverse)
+        puts ("!dlroW olleH");
+    else
+        puts ("Hello world");
+}

Names

  • Struct names are PascalCase (e.g. Context)
  • Scalar types are lower case (e.g. term)
  • All other names (e.g. functions and variables) are snake_case (e.g. term_is_integer)
  • Always prefix function names (e.g. term_is_nil, term_is_integer, context_new, context_destroy)

Other Coding Conventions

  • Pointer should be with the variable name rather than with the type (e.g. `char name, notchar* name`)
  • Avoid long lines, use intermediate variables with meaningful names.

+ + + + Elixir Code +

+

Just use Elixir formatter enforced style.

+ + +
+
+
+
+ + + + diff --git a/docs/dist/handlebars.runtime-NWIB6V2M.js b/docs/dist/handlebars.runtime-NWIB6V2M.js new file mode 100644 index 0000000..117dc6c --- /dev/null +++ b/docs/dist/handlebars.runtime-NWIB6V2M.js @@ -0,0 +1,30 @@ +/**! + + @license + handlebars v4.7.7 + +Copyright (C) 2011-2019 by Yehuda Katz + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +*/(function(r,e){typeof exports=="object"&&typeof module=="object"?module.exports=e():typeof define=="function"&&define.amd?define([],e):typeof exports=="object"?exports.Handlebars=e():r.Handlebars=e()})(this,function(){return function(u){var r={};function e(n){if(r[n])return r[n].exports;var t=r[n]={exports:{},id:n,loaded:!1};return u[n].call(t.exports,t,t.exports,e),t.loaded=!0,t.exports}return e.m=u,e.c=r,e.p="",e(0)}([function(u,r,e){"use strict";var n=e(1).default,t=e(2).default;r.__esModule=!0;var f=e(3),a=n(f),i=e(36),l=t(i),h=e(5),v=t(h),P=e(4),H=n(P),C=e(37),E=n(C),I=e(43),o=t(I);function g(){var y=new a.HandlebarsEnvironment;return H.extend(y,a),y.SafeString=l.default,y.Exception=v.default,y.Utils=H,y.escapeExpression=H.escapeExpression,y.VM=E,y.template=function(p){return E.template(p,y)},y}var w=g();w.create=g,o.default(w),w.default=w,r.default=w,u.exports=r.default},function(u,r){"use strict";r.default=function(e){if(e&&e.__esModule)return e;var n={};if(e!=null)for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&(n[t]=e[t]);return n.default=e,n},r.__esModule=!0},function(u,r){"use strict";r.default=function(e){return e&&e.__esModule?e:{default:e}},r.__esModule=!0},function(u,r,e){"use strict";var n=e(2).default;r.__esModule=!0,r.HandlebarsEnvironment=g;var t=e(4),f=e(5),a=n(f),i=e(9),l=e(29),h=e(31),v=n(h),P=e(32),H="4.7.7";r.VERSION=H;var C=8;r.COMPILER_REVISION=C;var E=7;r.LAST_COMPATIBLE_COMPILER_REVISION=E;var I={1:"<= 1.0.rc.2",2:"== 1.0.0-rc.3",3:"== 1.0.0-rc.4",4:"== 1.x.x",5:"== 2.0.0-alpha.x",6:">= 2.0.0-beta.1",7:">= 4.0.0 <4.3.0",8:">= 4.3.0"};r.REVISION_CHANGES=I;var o="[object Object]";function g(y,p,R){this.helpers=y||{},this.partials=p||{},this.decorators=R||{},i.registerDefaultHelpers(this),l.registerDefaultDecorators(this)}g.prototype={constructor:g,logger:v.default,log:v.default.log,registerHelper:function(p,R){if(t.toString.call(p)===o){if(R)throw new a.default("Arg not supported with multiple helpers");t.extend(this.helpers,p)}else this.helpers[p]=R},unregisterHelper:function(p){delete this.helpers[p]},registerPartial:function(p,R){if(t.toString.call(p)===o)t.extend(this.partials,p);else{if(typeof R>"u")throw new a.default('Attempting to register a partial called "'+p+'" as undefined');this.partials[p]=R}},unregisterPartial:function(p){delete this.partials[p]},registerDecorator:function(p,R){if(t.toString.call(p)===o){if(R)throw new a.default("Arg not supported with multiple decorators");t.extend(this.decorators,p)}else this.decorators[p]=R},unregisterDecorator:function(p){delete this.decorators[p]},resetLoggedPropertyAccesses:function(){P.resetLoggedProperties()}};var w=v.default.log;r.log=w,r.createFrame=t.createFrame,r.logger=v.default},function(u,r){"use strict";r.__esModule=!0,r.extend=a,r.indexOf=v,r.escapeExpression=P,r.isEmpty=H,r.createFrame=C,r.blockParams=E,r.appendContextPath=I;var e={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`","=":"="},n=/[&<>"'`=]/g,t=/[&<>"'`=]/;function f(o){return e[o]}function a(o){for(var g=1;g0?(a.ids&&(a.ids=[a.name]),t.helpers.each(f,a)):i(this);if(a.data&&a.ids){var h=n.createFrame(a.data);h.contextPath=n.appendContextPath(a.data.contextPath,a.name),a={data:h}}return l(f,a)})},u.exports=r.default},function(u,r,e){(function(n){"use strict";var t=e(12).default,f=e(2).default;r.__esModule=!0;var a=e(4),i=e(5),l=f(i);r.default=function(h){h.registerHelper("each",function(v,P){if(!P)throw new l.default("Must pass iterator to #each");var H=P.fn,C=P.inverse,E=0,I="",o=void 0,g=void 0;P.data&&P.ids&&(g=a.appendContextPath(P.data.contextPath,P.ids[0])+"."),a.isFunction(v)&&(v=v.call(this)),P.data&&(o=a.createFrame(P.data));function w(b,F,c){o&&(o.key=b,o.index=F,o.first=F===0,o.last=!!c,g&&(o.contextPath=g+b)),I=I+H(v[b],{data:o,blockParams:a.blockParams([v[b],b],[g+b,null])})}if(v&&typeof v=="object")if(a.isArray(v))for(var y=v.length;E=0?a=i:a=parseInt(a,10)}return a},log:function(a){if(a=t.lookupLevel(a),typeof console<"u"&&t.lookupLevel(t.level)<=a){var i=t.methodMap[a];console[i]||(i="log");for(var l=arguments.length,h=Array(l>1?l-1:0),v=1;v=P.LAST_COMPATIBLE_COMPILER_REVISION&&O<=P.COMPILER_REVISION))if(O{(function(){var d=Handlebars.template,y=Handlebars.templates=Handlebars.templates||{};y["autocomplete-suggestions"]=d({1:function(o,l,a,f,r){var e,n,u=l??(o.nullContext||{}),s=o.hooks.helperMissing,i="function",c=o.escapeExpression,t=o.lookupProperty||function(p,m){if(Object.prototype.hasOwnProperty.call(p,m))return p[m]};return' +
+`+((e=t(a,"if").call(u,l!=null?t(l,"deprecated"):l,{name:"if",hash:{},fn:o.program(2,r,0),inverse:o.program(4,r,0),data:r,loc:{start:{line:9,column:8},end:{line:13,column:15}}}))!=null?e:"")+` +`+((e=t(a,"if").call(u,l!=null?t(l,"label"):l,{name:"if",hash:{},fn:o.program(6,r,0),inverse:o.noop,data:r,loc:{start:{line:15,column:8},end:{line:17,column:15}}}))!=null?e:"")+`
+ +`+((e=t(a,"if").call(u,l!=null?t(l,"description"):l,{name:"if",hash:{},fn:o.program(8,r,0),inverse:o.noop,data:r,loc:{start:{line:20,column:6},end:{line:24,column:13}}}))!=null?e:"")+`
+`},2:function(o,l,a,f,r){var e,n,u=o.lookupProperty||function(s,i){if(Object.prototype.hasOwnProperty.call(s,i))return s[i]};return' '+((e=(n=(n=u(a,"title")||(l!=null?u(l,"title"):l))!=null?n:o.hooks.helperMissing,typeof n=="function"?n.call(l??(o.nullContext||{}),{name:"title",hash:{},data:r,loc:{start:{line:10,column:34},end:{line:10,column:45}}}):n))!=null?e:"")+` +`},4:function(o,l,a,f,r){var e,n,u=o.lookupProperty||function(s,i){if(Object.prototype.hasOwnProperty.call(s,i))return s[i]};return' '+((e=(n=(n=u(a,"title")||(l!=null?u(l,"title"):l))!=null?n:o.hooks.helperMissing,typeof n=="function"?n.call(l??(o.nullContext||{}),{name:"title",hash:{},data:r,loc:{start:{line:12,column:31},end:{line:12,column:42}}}):n))!=null?e:"")+` +`},6:function(o,l,a,f,r){var e,n=o.lookupProperty||function(u,s){if(Object.prototype.hasOwnProperty.call(u,s))return u[s]};return' ('+o.escapeExpression((e=(e=n(a,"label")||(l!=null?n(l,"label"):l))!=null?e:o.hooks.helperMissing,typeof e=="function"?e.call(l??(o.nullContext||{}),{name:"label",hash:{},data:r,loc:{start:{line:16,column:31},end:{line:16,column:40}}}):e))+`) +`},8:function(o,l,a,f,r){var e,n,u=o.lookupProperty||function(s,i){if(Object.prototype.hasOwnProperty.call(s,i))return s[i]};return`
+ `+((e=(n=(n=u(a,"description")||(l!=null?u(l,"description"):l))!=null?n:o.hooks.helperMissing,typeof n=="function"?n.call(l??(o.nullContext||{}),{name:"description",hash:{},data:r,loc:{start:{line:22,column:10},end:{line:22,column:27}}}):n))!=null?e:"")+` +
+`},compiler:[8,">= 4.3.0"],main:function(o,l,a,f,r){var e,n,u=l??(o.nullContext||{}),s=o.hooks.helperMissing,i="function",c=o.escapeExpression,t=o.lookupProperty||function(p,m){if(Object.prototype.hasOwnProperty.call(p,m))return p[m]};return`
+ +
"`+c((n=(n=t(a,"term")||(l!=null?t(l,"term"):l))!=null?n:s,typeof n===i?n.call(u,{name:"term",hash:{},data:r,loc:{start:{line:3,column:28},end:{line:3,column:36}}}):n))+`"
+
Search the documentation
+
+`+((e=t(a,"each").call(u,l!=null?t(l,"suggestions"):l,{name:"each",hash:{},fn:o.program(1,r,0),inverse:o.noop,data:r,loc:{start:{line:6,column:2},end:{line:26,column:11}}}))!=null?e:"")+`
+`},useData:!0}),y["modal-layout"]=d({compiler:[8,">= 4.3.0"],main:function(o,l,a,f,r){return` +`},useData:!0}),y["quick-switch-modal-body"]=d({compiler:[8,">= 4.3.0"],main:function(o,l,a,f,r){return`
+ + +
+
+`},useData:!0}),y["quick-switch-results"]=d({1:function(o,l,a,f,r){var e,n=l??(o.nullContext||{}),u=o.hooks.helperMissing,s="function",i=o.escapeExpression,c=o.lookupProperty||function(t,p){if(Object.prototype.hasOwnProperty.call(t,p))return t[p]};return'
+ `+i((e=(e=c(a,"name")||(l!=null?c(l,"name"):l))!=null?e:u,typeof e===s?e.call(n,{name:"name",hash:{},data:r,loc:{start:{line:3,column:4},end:{line:3,column:12}}}):e))+` +
+`},compiler:[8,">= 4.3.0"],main:function(o,l,a,f,r){var e,n=o.lookupProperty||function(u,s){if(Object.prototype.hasOwnProperty.call(u,s))return u[s]};return(e=n(a,"each").call(l??(o.nullContext||{}),l!=null?n(l,"results"):l,{name:"each",hash:{},fn:o.program(1,r,0),inverse:o.noop,data:r,loc:{start:{line:1,column:0},end:{line:5,column:9}}}))!=null?e:""},useData:!0}),y["search-results"]=d({1:function(o,l,a,f,r){var e,n=o.lookupProperty||function(u,s){if(Object.prototype.hasOwnProperty.call(u,s))return u[s]};return" Search results for "+o.escapeExpression((e=(e=n(a,"value")||(l!=null?n(l,"value"):l))!=null?e:o.hooks.helperMissing,typeof e=="function"?e.call(l??(o.nullContext||{}),{name:"value",hash:{},data:r,loc:{start:{line:3,column:27},end:{line:3,column:36}}}):e))+` +`},3:function(o,l,a,f,r){return` Invalid search +`},5:function(o,l,a,f,r){var e,n=o.lookupProperty||function(u,s){if(Object.prototype.hasOwnProperty.call(u,s))return u[s]};return(e=n(a,"each").call(l??(o.nullContext||{}),l!=null?n(l,"results"):l,{name:"each",hash:{},fn:o.program(6,r,0),inverse:o.noop,data:r,loc:{start:{line:15,column:2},end:{line:26,column:11}}}))!=null?e:""},6:function(o,l,a,f,r){var e,n=o.lambda,u=o.escapeExpression,s=o.lookupProperty||function(i,c){if(Object.prototype.hasOwnProperty.call(i,c))return i[c]};return`
+

+ + `+u(n(l!=null?s(l,"title"):l,l))+" ("+u(n(l!=null?s(l,"type"):l,l))+`) + +

+`+((e=s(a,"each").call(l??(o.nullContext||{}),l!=null?s(l,"excerpts"):l,{name:"each",hash:{},fn:o.program(7,r,0),inverse:o.noop,data:r,loc:{start:{line:22,column:8},end:{line:24,column:17}}}))!=null?e:"")+`
+`},7:function(o,l,a,f,r){var e;return'

'+((e=o.lambda(l,l))!=null?e:"")+`

+`},9:function(o,l,a,f,r){var e,n=o.lookupProperty||function(u,s){if(Object.prototype.hasOwnProperty.call(u,s))return u[s]};return((e=(n(a,"isArray")||l&&n(l,"isArray")||o.hooks.helperMissing).call(l??(o.nullContext||{}),l!=null?n(l,"results"):l,{name:"isArray",hash:{},fn:o.program(10,r,0),inverse:o.program(12,r,0),data:r,loc:{start:{line:28,column:2},end:{line:34,column:14}}}))!=null?e:"")+` +

The search functionality is full-text based. Here are some tips:

+ +
    +
  • Multiple words (such as foo bar) are searched as OR
  • +
  • Use * anywhere (such as fo*) as wildcard
  • +
  • Use + before a word (such as +foo) to make its presence required
  • +
  • Use - before a word (such as -foo) to make its absence required
  • +
  • Use : to search on a particular field (such as field:word). The available fields are title, doc and type
  • +
  • Use WORD^NUMBER (such as foo^2) to boost the given word
  • +
  • Use WORD~NUMBER (such as foo~2) to do a search with edit distance on word
  • +
+ +

To quickly go to a module, type, or function, use the autocompletion feature in the sidebar search.

+`},10:function(o,l,a,f,r){var e,n=o.lookupProperty||function(u,s){if(Object.prototype.hasOwnProperty.call(u,s))return u[s]};return"

Sorry, we couldn't find anything for "+o.escapeExpression((e=(e=n(a,"value")||(l!=null?n(l,"value"):l))!=null?e:o.hooks.helperMissing,typeof e=="function"?e.call(l??(o.nullContext||{}),{name:"value",hash:{},data:r,loc:{start:{line:29,column:48},end:{line:29,column:57}}}):e))+`.

+`},12:function(o,l,a,f,r){var e,n=o.lookupProperty||function(u,s){if(Object.prototype.hasOwnProperty.call(u,s))return u[s]};return(e=n(a,"if").call(l??(o.nullContext||{}),l!=null?n(l,"value"):l,{name:"if",hash:{},fn:o.program(13,r,0),inverse:o.program(15,r,0),data:r,loc:{start:{line:30,column:2},end:{line:34,column:2}}}))!=null?e:""},13:function(o,l,a,f,r){var e,n=o.lookupProperty||function(u,s){if(Object.prototype.hasOwnProperty.call(u,s))return u[s]};return"

Invalid search: "+o.escapeExpression((e=(e=n(a,"errorMessage")||(l!=null?n(l,"errorMessage"):l))!=null?e:o.hooks.helperMissing,typeof e=="function"?e.call(l??(o.nullContext||{}),{name:"errorMessage",hash:{},data:r,loc:{start:{line:31,column:23},end:{line:31,column:39}}}):e))+`.

+`},15:function(o,l,a,f,r){return`

Please type something into the search bar to perform a search.

+ `},compiler:[8,">= 4.3.0"],main:function(o,l,a,f,r){var e,n=l??(o.nullContext||{}),u=o.lookupProperty||function(s,i){if(Object.prototype.hasOwnProperty.call(s,i))return s[i]};return`

+`+((e=u(a,"if").call(n,l!=null?u(l,"value"):l,{name:"if",hash:{},fn:o.program(1,r,0),inverse:o.program(3,r,0),data:r,loc:{start:{line:2,column:2},end:{line:6,column:9}}}))!=null?e:"")+` + +

+ +`+((e=(u(a,"isNonEmptyArray")||l&&u(l,"isNonEmptyArray")||o.hooks.helperMissing).call(n,l!=null?u(l,"results"):l,{name:"isNonEmptyArray",hash:{},fn:o.program(5,r,0),inverse:o.program(9,r,0),data:r,loc:{start:{line:14,column:0},end:{line:49,column:20}}}))!=null?e:"")},useData:!0}),y["settings-modal-body"]=d({1:function(o,l,a,f,r){var e,n=o.lookupProperty||function(u,s){if(Object.prototype.hasOwnProperty.call(u,s))return u[s]};return(e=n(a,"if").call(l??(o.nullContext||{}),l!=null?n(l,"description"):l,{name:"if",hash:{},fn:o.program(2,r,0),inverse:o.noop,data:r,loc:{start:{line:40,column:6},end:{line:53,column:13}}}))!=null?e:""},2:function(o,l,a,f,r){var e,n=o.lookupProperty||function(u,s){if(Object.prototype.hasOwnProperty.call(u,s))return u[s]};return`
+
+ `+o.escapeExpression(o.lambda(l!=null?n(l,"description"):l,l))+` +
+
+`+((e=n(a,"if").call(l??(o.nullContext||{}),l!=null?n(l,"displayAs"):l,{name:"if",hash:{},fn:o.program(3,r,0),inverse:o.program(5,r,0),data:r,loc:{start:{line:46,column:12},end:{line:50,column:19}}}))!=null?e:"")+`
+
+`},3:function(o,l,a,f,r){var e,n=o.lookupProperty||function(u,s){if(Object.prototype.hasOwnProperty.call(u,s))return u[s]};return" "+((e=o.lambda(l!=null?n(l,"displayAs"):l,l))!=null?e:"")+` +`},5:function(o,l,a,f,r){var e=o.lookupProperty||function(n,u){if(Object.prototype.hasOwnProperty.call(n,u))return n[u]};return" "+o.escapeExpression(o.lambda(l!=null?e(l,"key"):l,l))+` +`},compiler:[8,">= 4.3.0"],main:function(o,l,a,f,r){var e,n=o.lookupProperty||function(u,s){if(Object.prototype.hasOwnProperty.call(u,s))return u[s]};return`
+
+ + + + +
+ +
+`},useData:!0}),y["sidebar-items"]=d({1:function(o,l,a,f,r,e,n){var u,s=l??(o.nullContext||{}),i=o.hooks.helperMissing,c=o.lookupProperty||function(t,p){if(Object.prototype.hasOwnProperty.call(t,p))return t[p]};return((u=(c(a,"groupChanged")||l&&c(l,"groupChanged")||i).call(s,n[1],(u=e[0][0])!=null?c(u,"group"):u,{name:"groupChanged",hash:{},fn:o.program(2,r,0,e,n),inverse:o.noop,data:r,blockParams:e,loc:{start:{line:2,column:2},end:{line:6,column:19}}}))!=null?u:"")+` +`+((u=(c(a,"nestingChanged")||l&&c(l,"nestingChanged")||i).call(s,n[1],e[0][0],{name:"nestingChanged",hash:{},fn:o.program(7,r,0,e,n),inverse:o.noop,data:r,blockParams:e,loc:{start:{line:8,column:2},end:{line:10,column:21}}}))!=null?u:"")+` +
  • + +`+((u=c(a,"if").call(s,(u=e[0][0])!=null?c(u,"nested_title"):u,{name:"if",hash:{},fn:o.program(17,r,0,e,n),inverse:o.program(19,r,0,e,n),data:r,blockParams:e,loc:{start:{line:14,column:6},end:{line:18,column:13}}}))!=null?u:"")+` + +`+((u=(c(a,"isEmptyArray")||l&&c(l,"isEmptyArray")||i).call(s,(u=e[0][0])!=null?c(u,"headers"):u,{name:"isEmptyArray",hash:{},fn:o.program(3,r,0,e,n),inverse:o.program(21,r,0,e,n),data:r,blockParams:e,loc:{start:{line:21,column:4},end:{line:24,column:21}}}))!=null?u:"")+` +`+((u=(c(a,"isArray")||l&&c(l,"isArray")||i).call(s,(u=e[0][0])!=null?c(u,"headers"):u,{name:"isArray",hash:{},fn:o.program(24,r,0,e,n),inverse:o.program(28,r,0,e,n),data:r,blockParams:e,loc:{start:{line:26,column:4},end:{line:74,column:16}}}))!=null?u:"")+`
  • +`},2:function(o,l,a,f,r,e){var n,u=o.lookupProperty||function(s,i){if(Object.prototype.hasOwnProperty.call(s,i))return s[i]};return'
  • + `+o.escapeExpression(o.lambda((n=e[1][0])!=null?u(n,"group"):n,l))+` +
  • +`},3:function(o,l,a,f,r){return""},5:function(o,l,a,f,r){return'translate="no"'},7:function(o,l,a,f,r,e){var n,u=o.lookupProperty||function(s,i){if(Object.prototype.hasOwnProperty.call(s,i))return s[i]};return' +`},9:function(o,l,a,f,r){return"current-page open"},11:function(o,l,a,f,r){return"#content"},13:function(o,l,a,f,r){return"page"},15:function(o,l,a,f,r){return"false"},17:function(o,l,a,f,r,e){var n,u=o.lookupProperty||function(s,i){if(Object.prototype.hasOwnProperty.call(s,i))return s[i]};return" "+((n=o.lambda((n=e[1][0])!=null?u(n,"nested_title"):n,l))!=null?n:"")+` +`},19:function(o,l,a,f,r,e){var n,u=o.lookupProperty||function(s,i){if(Object.prototype.hasOwnProperty.call(s,i))return s[i]};return" "+((n=o.lambda((n=e[1][0])!=null?u(n,"title"):n,l))!=null?n:"")+` +`},21:function(o,l,a,f,r,e){var n,u=o.lookupProperty||function(s,i){if(Object.prototype.hasOwnProperty.call(s,i))return s[i]};return' +`},22:function(o,l,a,f,r){return"true"},24:function(o,l,a,f,r,e){var n,u=o.lookupProperty||function(s,i){if(Object.prototype.hasOwnProperty.call(s,i))return s[i]};return(n=(u(a,"isNonEmptyArray")||l&&u(l,"isNonEmptyArray")||o.hooks.helperMissing).call(l??(o.nullContext||{}),(n=e[1][0])!=null?u(n,"headers"):n,{name:"isNonEmptyArray",hash:{},fn:o.program(25,r,0,e),inverse:o.noop,data:r,blockParams:e,loc:{start:{line:27,column:6},end:{line:35,column:26}}}))!=null?n:""},25:function(o,l,a,f,r,e){var n,u=o.lookupProperty||function(s,i){if(Object.prototype.hasOwnProperty.call(s,i))return s[i]};return'
      +`+((n=u(a,"each").call(l??(o.nullContext||{}),(n=e[2][0])!=null?u(n,"headers"):n,{name:"each",hash:{},fn:o.program(26,r,0,e),inverse:o.noop,data:r,blockParams:e,loc:{start:{line:29,column:10},end:{line:33,column:19}}}))!=null?n:"")+`
    +`},26:function(o,l,a,f,r,e){var n,u,s=l??(o.nullContext||{}),i=o.hooks.helperMissing,c="function",t=o.lookupProperty||function(p,m){if(Object.prototype.hasOwnProperty.call(p,m))return p[m]};return`
  • + '+((n=(u=(u=t(a,"id")||(l!=null?t(l,"id"):l))!=null?u:i,typeof u===c?u.call(s,{name:"id",hash:{},data:r,blockParams:e,loc:{start:{line:31,column:54},end:{line:31,column:62}}}):u))!=null?n:"")+` +
  • +`},28:function(o,l,a,f,r,e){var n,u=l??(o.nullContext||{}),s=o.hooks.helperMissing,i=o.lookupProperty||function(c,t){if(Object.prototype.hasOwnProperty.call(c,t))return c[t]};return'
      +`+((n=(i(a,"showSections")||l&&i(l,"showSections")||s).call(u,e[1][0],{name:"showSections",hash:{},fn:o.program(29,r,0,e),inverse:o.noop,data:r,blockParams:e,loc:{start:{line:38,column:8},end:{line:52,column:25}}}))!=null?n:"")+((n=(i(a,"showSummary")||l&&i(l,"showSummary")||s).call(u,e[1][0],{name:"showSummary",hash:{},fn:o.program(34,r,0,e),inverse:o.noop,data:r,blockParams:e,loc:{start:{line:53,column:8},end:{line:57,column:24}}}))!=null?n:"")+((n=i(a,"each").call(u,(n=e[1][0])!=null?i(n,"nodeGroups"):n,{name:"each",hash:{},fn:o.program(36,r,1,e),inverse:o.noop,data:r,blockParams:e,loc:{start:{line:58,column:8},end:{line:72,column:17}}}))!=null?n:"")+`
    +`},29:function(o,l,a,f,r,e){var n,u=l??(o.nullContext||{}),s=o.hooks.helperMissing,i=o.lambda,c=o.escapeExpression,t=o.lookupProperty||function(p,m){if(Object.prototype.hasOwnProperty.call(p,m))return p[m]};return'
  • + + Sections + + +
      +`+((n=t(a,"each").call(u,l!=null?t(l,"sections"):l,{name:"each",hash:{},fn:o.program(32,r,0,e),inverse:o.noop,data:r,blockParams:e,loc:{start:{line:45,column:14},end:{line:49,column:23}}}))!=null?n:"")+`
    +
  • +`},30:function(o,l,a,f,r){return"open"},32:function(o,l,a,f,r,e){var n,u,s=o.escapeExpression,i=l??(o.nullContext||{}),c=o.hooks.helperMissing,t="function",p=o.lookupProperty||function(m,v){if(Object.prototype.hasOwnProperty.call(m,v))return m[v]};return`
  • + '+((n=(u=(u=p(a,"id")||(l!=null?p(l,"id"):l))!=null?u:c,typeof u===t?u.call(i,{name:"id",hash:{},data:r,blockParams:e,loc:{start:{line:47,column:56},end:{line:47,column:64}}}):u))!=null?n:"")+` +
  • +`},34:function(o,l,a,f,r,e){var n,u=o.lookupProperty||function(s,i){if(Object.prototype.hasOwnProperty.call(s,i))return s[i]};return`
  • + Summary +
  • +`},36:function(o,l,a,f,r,e){var n,u=o.lambda,s=o.escapeExpression,i=o.lookupProperty||function(c,t){if(Object.prototype.hasOwnProperty.call(c,t))return c[t]};return`
  • + + `+s(u((n=e[0][0])!=null?i(n,"name"):n,l))+` + + +
      +`+((n=i(a,"each").call(l??(o.nullContext||{}),(n=e[0][0])!=null?i(n,"nodes"):n,{name:"each",hash:{},fn:o.program(37,r,0,e),inverse:o.noop,data:r,blockParams:e,loc:{start:{line:65,column:14},end:{line:69,column:23}}}))!=null?n:"")+`
    +
  • +`},37:function(o,l,a,f,r,e){var n,u,s=o.escapeExpression,i=l??(o.nullContext||{}),c=o.hooks.helperMissing,t="function",p=o.lookupProperty||function(m,v){if(Object.prototype.hasOwnProperty.call(m,v))return m[v]};return`
  • + '+s((u=(u=p(a,"id")||(l!=null?p(l,"id"):l))!=null?u:c,typeof u===t?u.call(i,{name:"id",hash:{},data:r,blockParams:e,loc:{start:{line:67,column:89},end:{line:67,column:95}}}):u))+` +
  • +`},compiler:[8,">= 4.3.0"],main:function(o,l,a,f,r,e,n){var u,s=o.lookupProperty||function(i,c){if(Object.prototype.hasOwnProperty.call(i,c))return i[c]};return(u=s(a,"each").call(l??(o.nullContext||{}),l!=null?s(l,"nodes"):l,{name:"each",hash:{},fn:o.program(1,r,2,e,n),inverse:o.noop,data:r,blockParams:e,loc:{start:{line:1,column:0},end:{line:76,column:9}}}))!=null?u:""},useData:!0,useDepths:!0,useBlockParams:!0}),y.tabset=d({1:function(o,l,a,f,r){var e,n,u=l??(o.nullContext||{}),s=o.hooks.helperMissing,i="function",c=o.escapeExpression,t=o.lookupProperty||function(p,m){if(Object.prototype.hasOwnProperty.call(p,m))return p[m]};return' +`},2:function(o,l,a,f,r){return"-1"},4:function(o,l,a,f,r){return"0"},6:function(o,l,a,f,r){return"false"},8:function(o,l,a,f,r){return"true"},10:function(o,l,a,f,r){var e,n,u=l??(o.nullContext||{}),s=o.hooks.helperMissing,i="function",c=o.escapeExpression,t=o.lookupProperty||function(p,m){if(Object.prototype.hasOwnProperty.call(p,m))return p[m]};return'
    +`+((e=t(a,"each").call(u,l!=null?t(l,"content"):l,{name:"each",hash:{},fn:o.program(13,r,0),inverse:o.noop,data:r,loc:{start:{line:16,column:4},end:{line:18,column:13}}}))!=null?e:"")+`
    +`},11:function(o,l,a,f,r){return"hidden"},13:function(o,l,a,f,r){var e;return" "+((e=o.lambda(l,l))!=null?e:"")+` +`},compiler:[8,">= 4.3.0"],main:function(o,l,a,f,r){var e,n=l??(o.nullContext||{}),u=o.lookupProperty||function(s,i){if(Object.prototype.hasOwnProperty.call(s,i))return s[i]};return`
    +`+((e=u(a,"each").call(n,l!=null?u(l,"tabs"):l,{name:"each",hash:{},fn:o.program(1,r,0),inverse:o.noop,data:r,loc:{start:{line:2,column:2},end:{line:9,column:11}}}))!=null?e:"")+`
    + +`+((e=u(a,"each").call(n,l!=null?u(l,"tabs"):l,{name:"each",hash:{},fn:o.program(10,r,0),inverse:o.noop,data:r,loc:{start:{line:12,column:0},end:{line:20,column:9}}}))!=null?e:"")},useData:!0}),y["tooltip-body"]=d({1:function(o,l,a,f,r){var e,n=o.lookupProperty||function(u,s){if(Object.prototype.hasOwnProperty.call(u,s))return u[s]};return`
    + `+o.escapeExpression(o.lambda((e=l!=null?n(l,"hint"):l)!=null?n(e,"description"):e,l))+` +
    +`},3:function(o,l,a,f,r){var e,n=o.lambda,u=o.escapeExpression,s=o.lookupProperty||function(i,c){if(Object.prototype.hasOwnProperty.call(i,c))return i[c]};return`
    +

    + `+u(n((e=l!=null?s(l,"hint"):l)!=null?s(e,"title"):e,l))+` +
    `+u(n((e=l!=null?s(l,"hint"):l)!=null?s(e,"version"):e,l))+`
    +

    +
    +`+((e=s(a,"if").call(l??(o.nullContext||{}),(e=l!=null?s(l,"hint"):l)!=null?s(e,"description"):e,{name:"if",hash:{},fn:o.program(4,r,0),inverse:o.noop,data:r,loc:{start:{line:12,column:2},end:{line:16,column:9}}}))!=null?e:"")},4:function(o,l,a,f,r){var e,n=o.lookupProperty||function(u,s){if(Object.prototype.hasOwnProperty.call(u,s))return u[s]};return`
    + `+((e=o.lambda((e=l!=null?n(l,"hint"):l)!=null?n(e,"description"):e,l))!=null?e:"")+` +
    +`},compiler:[8,">= 4.3.0"],main:function(o,l,a,f,r){var e,n=o.lookupProperty||function(u,s){if(Object.prototype.hasOwnProperty.call(u,s))return u[s]};return(e=n(a,"if").call(l??(o.nullContext||{}),l!=null?n(l,"isPlain"):l,{name:"if",hash:{},fn:o.program(1,r,0),inverse:o.program(3,r,0),data:r,loc:{start:{line:1,column:0},end:{line:17,column:7}}}))!=null?e:""},useData:!0}),y["tooltip-layout"]=d({compiler:[8,">= 4.3.0"],main:function(o,l,a,f,r){return`
    +
    +
    +`},useData:!0}),y["versions-dropdown"]=d({1:function(o,l,a,f,r){var e,n,u=l??(o.nullContext||{}),s=o.hooks.helperMissing,i="function",c=o.escapeExpression,t=o.lookupProperty||function(p,m){if(Object.prototype.hasOwnProperty.call(p,m))return p[m]};return' +`},2:function(o,l,a,f,r){return" selected disabled"},compiler:[8,">= 4.3.0"],main:function(o,l,a,f,r){var e,n=o.lookupProperty||function(u,s){if(Object.prototype.hasOwnProperty.call(u,s))return u[s]};return`
    + +
    +`},useData:!0})})();})(); diff --git a/docs/dist/html-J2ASZTQE.js b/docs/dist/html-J2ASZTQE.js new file mode 100644 index 0000000..f103ced --- /dev/null +++ b/docs/dist/html-J2ASZTQE.js @@ -0,0 +1,56 @@ +(()=>{var Mn=Object.create;var st=Object.defineProperty;var Bn=Object.getOwnPropertyDescriptor;var qn=Object.getOwnPropertyNames;var zn=Object.getPrototypeOf,$n=Object.prototype.hasOwnProperty;var ot=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var Vn=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of qn(t))!$n.call(e,i)&&i!==n&&st(e,i,{get:()=>t[i],enumerable:!(r=Bn(t,i))||r.enumerable});return e};var at=(e,t,n)=>(n=e!=null?Mn(zn(e)):{},Vn(t||!e||!e.__esModule?st(n,"default",{value:e,enumerable:!0}):n,e));var xt=ot((Bs,St)=>{var bt="Expected a function",yt=NaN,er="[object Symbol]",tr=/^\s+|\s+$/g,nr=/^[-+]0x[0-9a-f]+$/i,rr=/^0b[01]+$/i,ir=/^0o[0-7]+$/i,sr=parseInt,or=typeof global=="object"&&global&&global.Object===Object&&global,ar=typeof self=="object"&&self&&self.Object===Object&&self,cr=or||ar||Function("return this")(),lr=Object.prototype,ur=lr.toString,dr=Math.max,fr=Math.min,Ae=function(){return cr.Date.now()};function hr(e,t,n){var r,i,s,o,a,l,u=0,f=!1,y=!1,g=!0;if(typeof e!="function")throw new TypeError(bt);t=vt(t)||0,ge(n)&&(f=!!n.leading,y="maxWait"in n,s=y?dr(vt(n.maxWait)||0,t):s,g="trailing"in n?!!n.trailing:g);function L(S){var C=r,D=i;return r=i=void 0,u=S,o=e.apply(D,C),o}function b(S){return u=S,a=setTimeout(p,t),f?L(S):o}function T(S){var C=S-l,D=S-u,V=t-C;return y?fr(V,s-D):V}function m(S){var C=S-l,D=S-u;return l===void 0||C>=t||C<0||y&&D>=s}function p(){var S=Ae();if(m(S))return _(S);a=setTimeout(p,T(S))}function _(S){return a=void 0,g&&r?L(S):(r=i=void 0,o)}function w(){a!==void 0&&clearTimeout(a),u=0,r=l=i=a=void 0}function N(){return a===void 0?o:_(Ae())}function H(){var S=Ae(),C=m(S);if(r=arguments,i=this,l=S,C){if(a===void 0)return b(l);if(y)return a=setTimeout(p,t),L(l)}return a===void 0&&(a=setTimeout(p,t)),o}return H.cancel=w,H.flush=N,H}function pr(e,t,n){var r=!0,i=!0;if(typeof e!="function")throw new TypeError(bt);return ge(n)&&(r="leading"in n?!!n.leading:r,i="trailing"in n?!!n.trailing:i),hr(e,t,{leading:r,maxWait:t,trailing:i})}function ge(e){var t=typeof e;return!!e&&(t=="object"||t=="function")}function mr(e){return!!e&&typeof e=="object"}function gr(e){return typeof e=="symbol"||mr(e)&&ur.call(e)==er}function vt(e){if(typeof e=="number")return e;if(gr(e))return yt;if(ge(e)){var t=typeof e.valueOf=="function"?e.valueOf():e;e=ge(t)?t+"":t}if(typeof e!="string")return e===0?e:+e;e=e.replace(tr,"");var n=rr.test(e);return n||ir.test(e)?sr(e.slice(2),n?2:8):nr.test(e)?yt:+e}St.exports=pr});var Ut=ot((Vt,jt)=>{(function(){var e=function(t){var n=new e.Builder;return n.pipeline.add(e.trimmer,e.stopWordFilter,e.stemmer),n.searchPipeline.add(e.stemmer),t.call(n,n),n.build()};e.version="2.3.9";e.utils={},e.utils.warn=function(t){return function(n){t.console&&console.warn&&console.warn(n)}}(this),e.utils.asString=function(t){return t==null?"":t.toString()},e.utils.clone=function(t){if(t==null)return t;for(var n=Object.create(null),r=Object.keys(t),i=0;i0){var f=e.utils.clone(n)||{};f.position=[a,u],f.index=s.length,s.push(new e.Token(r.slice(a,o),f))}a=o+1}}return s},e.tokenizer.separator=/[\s\-]+/;e.Pipeline=function(){this._stack=[]},e.Pipeline.registeredFunctions=Object.create(null),e.Pipeline.registerFunction=function(t,n){n in this.registeredFunctions&&e.utils.warn("Overwriting existing registered function: "+n),t.label=n,e.Pipeline.registeredFunctions[t.label]=t},e.Pipeline.warnIfFunctionNotRegistered=function(t){var n=t.label&&t.label in this.registeredFunctions;n||e.utils.warn(`Function is not registered with pipeline. This may cause problems when serialising the index. +`,t)},e.Pipeline.load=function(t){var n=new e.Pipeline;return t.forEach(function(r){var i=e.Pipeline.registeredFunctions[r];if(i)n.add(i);else throw new Error("Cannot load unregistered function: "+r)}),n},e.Pipeline.prototype.add=function(){var t=Array.prototype.slice.call(arguments);t.forEach(function(n){e.Pipeline.warnIfFunctionNotRegistered(n),this._stack.push(n)},this)},e.Pipeline.prototype.after=function(t,n){e.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(t);if(r==-1)throw new Error("Cannot find existingFn");r=r+1,this._stack.splice(r,0,n)},e.Pipeline.prototype.before=function(t,n){e.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(t);if(r==-1)throw new Error("Cannot find existingFn");this._stack.splice(r,0,n)},e.Pipeline.prototype.remove=function(t){var n=this._stack.indexOf(t);n!=-1&&this._stack.splice(n,1)},e.Pipeline.prototype.run=function(t){for(var n=this._stack.length,r=0;r1&&(ot&&(r=s),o!=t);)i=r-n,s=n+Math.floor(i/2),o=this.elements[s*2];if(o==t||o>t)return s*2;if(ol?f+=2:a==l&&(n+=r[u+1]*i[f+1],u+=2,f+=2);return n},e.Vector.prototype.similarity=function(t){return this.dot(t)/this.magnitude()||0},e.Vector.prototype.toArray=function(){for(var t=new Array(this.elements.length/2),n=1,r=0;n0){var o=s.str.charAt(0),a;o in s.node.edges?a=s.node.edges[o]:(a=new e.TokenSet,s.node.edges[o]=a),s.str.length==1&&(a.final=!0),i.push({node:a,editsRemaining:s.editsRemaining,str:s.str.slice(1)})}if(s.editsRemaining!=0){if("*"in s.node.edges)var l=s.node.edges["*"];else{var l=new e.TokenSet;s.node.edges["*"]=l}if(s.str.length==0&&(l.final=!0),i.push({node:l,editsRemaining:s.editsRemaining-1,str:s.str}),s.str.length>1&&i.push({node:s.node,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)}),s.str.length==1&&(s.node.final=!0),s.str.length>=1){if("*"in s.node.edges)var u=s.node.edges["*"];else{var u=new e.TokenSet;s.node.edges["*"]=u}s.str.length==1&&(u.final=!0),i.push({node:u,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)})}if(s.str.length>1){var f=s.str.charAt(0),y=s.str.charAt(1),g;y in s.node.edges?g=s.node.edges[y]:(g=new e.TokenSet,s.node.edges[y]=g),s.str.length==1&&(g.final=!0),i.push({node:g,editsRemaining:s.editsRemaining-1,str:f+s.str.slice(2)})}}}return r},e.TokenSet.fromString=function(t){for(var n=new e.TokenSet,r=n,i=0,s=t.length;i=t;n--){var r=this.uncheckedNodes[n],i=r.child.toString();i in this.minimizedNodes?r.parent.edges[r.char]=this.minimizedNodes[i]:(r.child._str=i,this.minimizedNodes[i]=r.child),this.uncheckedNodes.pop()}};e.Index=function(t){this.invertedIndex=t.invertedIndex,this.fieldVectors=t.fieldVectors,this.tokenSet=t.tokenSet,this.fields=t.fields,this.pipeline=t.pipeline},e.Index.prototype.search=function(t){return this.query(function(n){var r=new e.QueryParser(t,n);r.parse()})},e.Index.prototype.query=function(t){for(var n=new e.Query(this.fields),r=Object.create(null),i=Object.create(null),s=Object.create(null),o=Object.create(null),a=Object.create(null),l=0;l1?this._b=1:this._b=t},e.Builder.prototype.k1=function(t){this._k1=t},e.Builder.prototype.add=function(t,n){var r=t[this._ref],i=Object.keys(this._fields);this._documents[r]=n||{},this.documentCount+=1;for(var s=0;s=this.length)return e.QueryLexer.EOS;var t=this.str.charAt(this.pos);return this.pos+=1,t},e.QueryLexer.prototype.width=function(){return this.pos-this.start},e.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},e.QueryLexer.prototype.backup=function(){this.pos-=1},e.QueryLexer.prototype.acceptDigitRun=function(){var t,n;do t=this.next(),n=t.charCodeAt(0);while(n>47&&n<58);t!=e.QueryLexer.EOS&&this.backup()},e.QueryLexer.prototype.more=function(){return this.pos1&&(t.backup(),t.emit(e.QueryLexer.TERM)),t.ignore(),t.more())return e.QueryLexer.lexText},e.QueryLexer.lexEditDistance=function(t){return t.ignore(),t.acceptDigitRun(),t.emit(e.QueryLexer.EDIT_DISTANCE),e.QueryLexer.lexText},e.QueryLexer.lexBoost=function(t){return t.ignore(),t.acceptDigitRun(),t.emit(e.QueryLexer.BOOST),e.QueryLexer.lexText},e.QueryLexer.lexEOS=function(t){t.width()>0&&t.emit(e.QueryLexer.TERM)},e.QueryLexer.termSeparator=e.tokenizer.separator,e.QueryLexer.lexText=function(t){for(;;){var n=t.next();if(n==e.QueryLexer.EOS)return e.QueryLexer.lexEOS;if(n.charCodeAt(0)==92){t.escapeCharacter();continue}if(n==":")return e.QueryLexer.lexField;if(n=="~")return t.backup(),t.width()>0&&t.emit(e.QueryLexer.TERM),e.QueryLexer.lexEditDistance;if(n=="^")return t.backup(),t.width()>0&&t.emit(e.QueryLexer.TERM),e.QueryLexer.lexBoost;if(n=="+"&&t.width()===1||n=="-"&&t.width()===1)return t.emit(e.QueryLexer.PRESENCE),e.QueryLexer.lexText;if(n.match(e.QueryLexer.termSeparator))return e.QueryLexer.lexTerm}},e.QueryParser=function(t,n){this.lexer=new e.QueryLexer(t),this.query=n,this.currentClause={},this.lexemeIdx=0},e.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var t=e.QueryParser.parseClause;t;)t=t(this);return this.query},e.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},e.QueryParser.prototype.consumeLexeme=function(){var t=this.peekLexeme();return this.lexemeIdx+=1,t},e.QueryParser.prototype.nextClause=function(){var t=this.currentClause;this.query.clause(t),this.currentClause={}},e.QueryParser.parseClause=function(t){var n=t.peekLexeme();if(n!=null)switch(n.type){case e.QueryLexer.PRESENCE:return e.QueryParser.parsePresence;case e.QueryLexer.FIELD:return e.QueryParser.parseField;case e.QueryLexer.TERM:return e.QueryParser.parseTerm;default:var r="expected either a field or a term, found "+n.type;throw n.str.length>=1&&(r+=" with value '"+n.str+"'"),new e.QueryParseError(r,n.start,n.end)}},e.QueryParser.parsePresence=function(t){var n=t.consumeLexeme();if(n!=null){switch(n.str){case"-":t.currentClause.presence=e.Query.presence.PROHIBITED;break;case"+":t.currentClause.presence=e.Query.presence.REQUIRED;break;default:var r="unrecognised presence operator'"+n.str+"'";throw new e.QueryParseError(r,n.start,n.end)}var i=t.peekLexeme();if(i==null){var r="expecting term or field, found nothing";throw new e.QueryParseError(r,n.start,n.end)}switch(i.type){case e.QueryLexer.FIELD:return e.QueryParser.parseField;case e.QueryLexer.TERM:return e.QueryParser.parseTerm;default:var r="expecting term or field, found '"+i.type+"'";throw new e.QueryParseError(r,i.start,i.end)}}},e.QueryParser.parseField=function(t){var n=t.consumeLexeme();if(n!=null){if(t.query.allFields.indexOf(n.str)==-1){var r=t.query.allFields.map(function(o){return"'"+o+"'"}).join(", "),i="unrecognised field '"+n.str+"', possible fields: "+r;throw new e.QueryParseError(i,n.start,n.end)}t.currentClause.fields=[n.str];var s=t.peekLexeme();if(s==null){var i="expecting term, found nothing";throw new e.QueryParseError(i,n.start,n.end)}switch(s.type){case e.QueryLexer.TERM:return e.QueryParser.parseTerm;default:var i="expecting term, found '"+s.type+"'";throw new e.QueryParseError(i,s.start,s.end)}}},e.QueryParser.parseTerm=function(t){var n=t.consumeLexeme();if(n!=null){t.currentClause.term=n.str.toLowerCase(),n.str.indexOf("*")!=-1&&(t.currentClause.usePipeline=!1);var r=t.peekLexeme();if(r==null){t.nextClause();return}switch(r.type){case e.QueryLexer.TERM:return t.nextClause(),e.QueryParser.parseTerm;case e.QueryLexer.FIELD:return t.nextClause(),e.QueryParser.parseField;case e.QueryLexer.EDIT_DISTANCE:return e.QueryParser.parseEditDistance;case e.QueryLexer.BOOST:return e.QueryParser.parseBoost;case e.QueryLexer.PRESENCE:return t.nextClause(),e.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+r.type+"'";throw new e.QueryParseError(i,r.start,r.end)}}},e.QueryParser.parseEditDistance=function(t){var n=t.consumeLexeme();if(n!=null){var r=parseInt(n.str,10);if(isNaN(r)){var i="edit distance must be numeric";throw new e.QueryParseError(i,n.start,n.end)}t.currentClause.editDistance=r;var s=t.peekLexeme();if(s==null){t.nextClause();return}switch(s.type){case e.QueryLexer.TERM:return t.nextClause(),e.QueryParser.parseTerm;case e.QueryLexer.FIELD:return t.nextClause(),e.QueryParser.parseField;case e.QueryLexer.EDIT_DISTANCE:return e.QueryParser.parseEditDistance;case e.QueryLexer.BOOST:return e.QueryParser.parseBoost;case e.QueryLexer.PRESENCE:return t.nextClause(),e.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new e.QueryParseError(i,s.start,s.end)}}},e.QueryParser.parseBoost=function(t){var n=t.consumeLexeme();if(n!=null){var r=parseInt(n.str,10);if(isNaN(r)){var i="boost must be numeric";throw new e.QueryParseError(i,n.start,n.end)}t.currentClause.boost=r;var s=t.peekLexeme();if(s==null){t.nextClause();return}switch(s.type){case e.QueryLexer.TERM:return t.nextClause(),e.QueryParser.parseTerm;case e.QueryLexer.FIELD:return t.nextClause(),e.QueryParser.parseField;case e.QueryLexer.EDIT_DISTANCE:return e.QueryParser.parseEditDistance;case e.QueryLexer.BOOST:return e.QueryParser.parseBoost;case e.QueryLexer.PRESENCE:return t.nextClause(),e.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new e.QueryParseError(i,s.start,s.end)}}},function(t,n){typeof define=="function"&&define.amd?define(n):typeof Vt=="object"?jt.exports=n():t.lunr=n()}(this,function(){return e})})()});Handlebars.registerHelper("groupChanged",function(e,t,n){let r=t||"";if(e.group!==r)return delete e.nestedContext,e.group=r,n.fn(this)});Handlebars.registerHelper("nestingChanged",function(e,t,n){if(t.nested_context&&t.nested_context!==e.nestedContext){if(e.nestedContext=t.nested_context,e.lastModuleSeenInGroup!==t.nested_context)return n.fn(this)}else e.lastModuleSeenInGroup=t.title});Handlebars.registerHelper("showSections",function(e,t){if(e.sections.length>0)return t.fn(this)});Handlebars.registerHelper("showSummary",function(e,t){if(e.nodeGroups)return t.fn(this)});Handlebars.registerHelper("isArray",function(e,t){return Array.isArray(e)?t.fn(this):t.inverse(this)});Handlebars.registerHelper("isNonEmptyArray",function(e,t){return Array.isArray(e)&&e.length>0?t.fn(this):t.inverse(this)});Handlebars.registerHelper("isEmptyArray",function(e,t){return Array.isArray(e)&&e.length===0?t.fn(this):t.inverse(this)});Handlebars.registerHelper("isLocal",function(e,t){let n=window.location.pathname.split("/").pop();return e+".html"===n?t.fn(this):t.inverse(this)});var c=document.querySelector.bind(document),k=document.querySelectorAll.bind(document);function ct(e){return e.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")}function he(e){return String(e).replace(/&/g,"&").replace(//g,">").replace(/"/g,""")}function z(){return document.body.dataset.type}function lt(e,t){if(e){for(let n of e){let r=n.nodeGroups&&n.nodeGroups.find(i=>i.nodes.some(s=>s.anchor===t));if(r)return r.key}return null}}function pe(){return window.location.hash.replace(/^#/,"")}function ut(e){return new URLSearchParams(window.location.search).get(e)}function dt(e){return fetch(e).then(t=>t.ok).catch(()=>!1)}function ft(e){document.readyState!=="loading"?e():document.addEventListener("DOMContentLoaded",e)}function Z(e){return!e||e.trim()===""}function ht(e,t){let n;return function(...i){clearTimeout(n),n=setTimeout(()=>{n=null,e(...i)},t)}}function me(){return document.head.querySelector("meta[name=project][content]").content}var pt="ex_doc:settings",jn={tooltips:!0,theme:null,livebookUrl:null},Ce=class{constructor(){this._subscribers=[],this._settings=jn,this._loadSettings()}get(){return this._settings}update(t){let n=this._settings;this._settings={...this._settings,...t},this._subscribers.forEach(r=>r(this._settings,n)),this._storeSettings()}getAndSubscribe(t){this._subscribers.push(t),t(this._settings)}_loadSettings(){try{let t=localStorage.getItem(pt);if(t){let n=JSON.parse(t);this._settings={...this._settings,...n}}this._loadSettingsLegacy()}catch(t){console.error(`Failed to load settings: ${t}`)}}_storeSettings(){try{this._storeSettingsLegacy(),localStorage.setItem(pt,JSON.stringify(this._settings))}catch(t){console.error(`Failed to persist settings: ${t}`)}}_loadSettingsLegacy(){localStorage.getItem("tooltipsDisabled")!==null&&(this._settings={...this._settings,tooltips:!1}),localStorage.getItem("night-mode")==="true"&&(this._settings={...this._settings,nightMode:!0}),this._settings.nightMode===!0&&(this._settings={...this._settings,theme:"dark"})}_storeSettingsLegacy(){this._settings.tooltips?localStorage.removeItem("tooltipsDisabled"):localStorage.setItem("tooltipsDisabled","true"),this._settings.nightMode!==null?localStorage.setItem("night-mode",this._settings.nightMode===!0?"true":"false"):localStorage.removeItem("night-mode"),this._settings.theme!==null?(localStorage.setItem("night-mode",this._settings.theme==="dark"?"true":"false"),this._settings.nightMode=this._settings.theme==="dark"):(delete this._settings.nightMode,localStorage.removeItem("night-mode"))}},I=new Ce;var Un=".content",mt=".content-inner",Wn=".livebook-badge";function gt(){Gn(),Yn(),Jn(),Kn()}function Gn(){c(Un).querySelectorAll("a").forEach(e=>{e.querySelector("code, img")&&e.classList.add("no-underline")})}function Kn(){["warning","info","error","neutral","tip"].forEach(t=>{k(`blockquote h3.${t}, blockquote h4.${t}`).forEach(n=>{n.closest("blockquote").classList.add(t)})})}function Yn(){c(mt).setAttribute("tabindex",-1),c(mt).focus()}function Jn(){let t=window.location.pathname.replace(/(\.html)?$/,".livemd"),n=new URL(t,window.location.href).toString();I.getAndSubscribe(r=>{let i=r.livebookUrl?Zn(r.livebookUrl,n):Xn(n);for(let s of k(Wn))s.href=i})}function Xn(e){return`https://livebook.dev/run?url=${encodeURIComponent(e)}`}function Zn(e,t){return`${e}/import?url=${encodeURIComponent(t)}`}document.addEventListener("click",function(e){if(window.innerWidth<=768){let t=e.target.closest('a[href^="#"]');if(t){e.preventDefault();let n=t.getAttribute("href").substring(1),r=document.getElementById(n);if(r){let s=r.getBoundingClientRect().top+window.scrollY-45;window.scrollTo({top:s,behavior:"smooth"})}}}});var Et=at(xt());var yr=768,Lt=300,se=".sidebar-toggle",vr=".content",F={CLOSED:"closed",OPEN:"open",NO_PREF:"no_pref"},Q={opened:"sidebar-opened",openingStart:"sidebar-opening-start",opening:"sidebar-opening",closed:"sidebar-closed",closingStart:"sidebar-closing-start",closing:"sidebar-closing"},br=Object.values(Q),A={togglingTimeout:null,lastWindowWidth:window.innerWidth,sidebarPreference:F.NO_PREF};function Tt(){wt(),Sr()}function wt(){sessionStorage.getItem("sidebar_state")==="closed"||kt()?($(Q.closed),c(se).setAttribute("aria-expanded","false")):($(Q.opened),c(se).setAttribute("aria-expanded","true"))}function kt(){return window.matchMedia(`screen and (max-width: ${yr}px)`).matches}function $(...e){document.body.classList.remove(...br),document.body.classList.add(...e)}function Sr(){c(se).addEventListener("click",e=>{Pe(),Lr()}),c(vr).addEventListener("click",e=>{Er()}),window.addEventListener("resize",(0,Et.default)(e=>{xr()},100))}function Pe(){return Re()?_t():Ne()}function Re(){return document.body.classList.contains(Q.opened)||document.body.classList.contains(Q.opening)}function Ne(){It(),sessionStorage.setItem("sidebar_state","opened"),c(se).setAttribute("aria-expanded","true"),requestAnimationFrame(()=>{$(Q.openingStart),requestAnimationFrame(()=>($(Q.opening),new Promise((e,t)=>{A.togglingTimeout=setTimeout(()=>{$(Q.opened),e()},Lt)})))})}function _t(){It(),sessionStorage.setItem("sidebar_state","closed"),c(se).setAttribute("aria-expanded","false"),requestAnimationFrame(()=>{$(Q.closingStart),requestAnimationFrame(()=>($(Q.closing),new Promise((e,t)=>{A.togglingTimeout=setTimeout(()=>{$(Q.closed),e()},Lt)})))})}function It(){A.togglingTimeout&&(clearTimeout(A.togglingTimeout),A.togglingTimeout=null)}function xr(){A.lastWindowWidth!==window.innerWidth&&(A.lastWindowWidth=window.innerWidth,(A.sidebarPreference===F.OPEN||A.sidebarPreference===F.NO_PREF)&&wt())}function Er(){kt()&&Re()&&_t()}function Lr(){switch(A.sidebarPreference){case F.OPEN:A.sidebarPreference=F.CLOSED;break;case F.CLOSED:A.sidebarPreference=F.OPEN;break;case F.NO_PREF:Re()?A.sidebarPreference=F.OPEN:A.sidebarPreference=F.CLOSED}}function oe(){return window.sidebarNodes||{}}function Ot(){return window.versionNodes||[]}var Qe={search:"search",extras:"extras",modules:"modules",tasks:"tasks"},He=[Qe.extras,Qe.modules,Qe.tasks],ve=e=>`#${e}-full-list`;function Ct(){He.forEach(e=>{Tr(oe(),e)}),ye(z()),Pt(),At(),Ar()}function Tr(e,t){let n=e[t]||[],r=c(ve(t));if(!r)return;let i=Handlebars.templates["sidebar-items"]({nodes:n,group:""});r.innerHTML=i,r.querySelectorAll("ul").forEach(s=>{if(s.innerHTML.trim()===""){let o=s.previousElementSibling;o.classList.contains("expand")&&o.classList.remove("expand"),s.remove()}}),r.querySelectorAll("li a + button").forEach(s=>{s.addEventListener("click",o=>{let l=o.target.closest("li");kr(l)})}),r.querySelectorAll("li a").forEach(s=>{s.addEventListener("click",o=>{let l=o.target.closest("li"),u=r.querySelector(".current-section");u&&Ir(u),s.matches(".expand")&&s.pathname===window.location.pathname&&De(l)})})}function De(e){e.classList.add("open"),e.querySelector("button[aria-controls]").setAttribute("aria-expanded","true")}function wr(e){e.classList.remove("open"),e.querySelector("button[aria-controls]").setAttribute("aria-expanded","false")}function kr(e){e.classList.contains("open")?wr(e):De(e)}function _r(e){e.classList.add("current-section"),e.querySelector("a").setAttribute("aria-current","true")}function Ir(e){e.classList.remove("current-section"),e.querySelector("a").setAttribute("aria-current","false")}function Or(e){e.classList.add("current-hash"),e.querySelector("a").setAttribute("aria-current","true")}function Cr(e){e.classList.remove("current-hash"),e.querySelector("a").setAttribute("aria-current","false")}function ye(e){He.forEach(t=>{let n=c(`#${t}-list-tab-button`);if(n){let r=c(`#${n.getAttribute("aria-controls")}`);t===e?(n.parentElement.classList.add("selected"),n.setAttribute("aria-selected","true"),n.setAttribute("tabindex","0"),r.removeAttribute("hidden")):(n.parentElement.classList.remove("selected"),n.setAttribute("aria-selected","false"),n.setAttribute("tabindex","-1"),r.setAttribute("hidden","hidden"))}})}function At(){let e=c(ve(z()));if(!e)return;let t=e.querySelector("li.current-page");t&&(t.scrollIntoView(),e.scrollTop-=40)}function Pt(){let e=pe()||"content",n=oe()[z()]||[],r=lt(n,e),i=c(ve(z()));if(!i)return;let s=i.querySelector(`li.current-page a.expand[href$="#${r}"]`);s&&De(s.closest("li"));let o=i.querySelector(`li.current-page a[href$="#${e}"]`);if(o){let a=o.closest("ul");a.classList.contains("deflist")&&_r(a.closest("li")),Or(o.closest("li"))}}function Ar(){He.forEach(t=>{let n=c(`#${t}-list-tab-button`);n&&n.addEventListener("click",r=>{ye(t),At()})});let e=c("#sidebar-listNav");e.addEventListener("keydown",t=>{if(t.key!=="ArrowRight"&&t.key!=="ArrowLeft")return;let n=Array.from(e.querySelectorAll('[role="tab"]')).map(i=>i.dataset.type),r=e.querySelector('[role="tab"][aria-selected="true"]').dataset.type;if(t.key==="ArrowRight"){let i=n.indexOf(r)+1;i>=n.length&&(i=0);let s=n[i];ye(s),c(`#${s}-list-tab-button`).focus()}else if(t.key==="ArrowLeft"){let i=n.indexOf(r)-1;i<0&&(i=n.length-1);let s=n[i];ye(s),c(`#${s}-list-tab-button`).focus()}}),window.addEventListener("hashchange",t=>{let n=c(ve(z()));if(!n)return;let r=n.querySelector("li.current-page li.current-hash");r&&Cr(r),Pt()})}var M={module:"module",moduleChild:"module-child",mixTask:"mix-task",extra:"extra",section:"section"};function Nt(e,t=5){if(Z(e))return[];let n=oe(),r=[...Fe(n.modules,e,M.module),...Pr(n.modules,e,M.moduleChild),...Fe(n.tasks,e,M.mixTask),...Fe(n.extras,e,M.extra),...Me(n.modules,e,M.section),...Me(n.tasks,e,M.section),...Me(n.extras,e,M.section)].filter(i=>i!==null);return Mr(r).slice(0,t)}function Fe(e,t,n){return e.map(r=>Nr(r,t,n))}function Pr(e,t,n){return e.filter(r=>r.nodeGroups).flatMap(r=>r.nodeGroups.flatMap(({key:i,nodes:s})=>{let o=Fr(i);return s.map(a=>Qr(a,r.id,t,n,o)||Dr(a,r.id,t,n,o))}))}function Me(e,t,n){return e.flatMap(r=>Rr(r).map(i=>Hr(r,i,t,n)))}function Rr(e){return(e.sections||[]).concat(e.headers||[])}function Nr(e,t,n){return Be(e.title,t)?{link:`${e.id}.html`,title:Ee(e.title,t),label:null,description:null,matchQuality:Se(e.title,t),deprecated:e.deprecated,category:n}:null}function Qr(e,t,n,r,i){return Be(e.id,n)?{link:`${t}.html#${e.anchor}`,title:Ee(e.id,n),label:i,description:t,matchQuality:Se(e.id,n),deprecated:e.deprecated,category:r}:null}function Hr(e,t,n,r){return Qt(t.id,n)?{link:`${e.id}.html#${t.anchor}`,title:Ee(t.id,n),label:null,description:e.title,matchQuality:Se(t.id,n),category:r}:null}function Dr(e,t,n,r,i){let s=`${t}.${e.id}`;if(!Be(s,n))return null;let o=n.replace(/\./g," ");return Qt(e.id,o)?{link:`${t}.html#${e.anchor}`,title:Ee(e.id,o),label:i,description:t,matchQuality:Se(s,n),deprecated:e.deprecated,category:r}:null}function Fr(e){switch(e){case"callbacks":return"callback";case"types":return"type";default:return null}}function Mr(e){return e.slice().sort((t,n)=>t.matchQuality!==n.matchQuality?n.matchQuality-t.matchQuality:Rt(t.category)-Rt(n.category))}function Rt(e){switch(e){case M.module:return 1;case M.moduleChild:return 2;case M.mixTask:return 3;default:return 4}}function Qt(e,t){return xe(t).some(r=>Ht(e,r))}function Be(e,t){return xe(t).every(r=>Ht(e,r))}function Ht(e,t){return e.toLowerCase().includes(t.toLowerCase())}function Se(e,t){let n=xe(t),i=n.map(o=>o.length).reduce((o,a)=>o+a,0)/e.length,s=Br(e,n[0])?1:0;return i+s}function Br(e,t){return e.toLowerCase().startsWith(t.toLowerCase())}function xe(e){return e.trim().split(/\s+/)}function Ee(e,t){let n=xe(t).sort((r,i)=>i.length-r.length);return be(e,n)}function be(e,t){if(t.length===0)return e;let[n,...r]=t,i=e.match(new RegExp(`(.*)(${ct(n)})(.*)`,"i"));if(i){let[,s,o,a]=i;return be(s,t)+""+he(o)+""+be(a,t)}else return be(e,r)}var ee=".autocomplete",Le=".autocomplete-suggestion",B={autocompleteSuggestions:[],selectedIdx:-1};function qr(){c(ee).classList.add("shown")}function qe(){c(ee).classList.remove("shown")}function Dt(){return c(ee).classList.contains("shown")}function ze(e){B.autocompleteSuggestions=Nt(e),B.selectedIdx=-1,Z(e)?qe():(zr({term:e,suggestions:B.autocompleteSuggestions}),Te(0),qr())}function zr({term:e,suggestions:t}){let n=Handlebars.templates["autocomplete-suggestions"]({suggestions:t,term:e}),r=c(ee);r.innerHTML=n}function Ft(){return B.selectedIdx===-1?null:B.autocompleteSuggestions[B.selectedIdx]}function Te(e){B.selectedIdx=$r(e);let t=c(`${Le}.selected`),n=c(`${Le}[data-index="${B.selectedIdx}"]`);t&&t.classList.remove("selected"),n&&n.classList.add("selected")}function $r(e){let t=B.autocompleteSuggestions.length+1;return(B.selectedIdx+e+1+t)%t-1}var ae="form.sidebar-search input",Vr="form.sidebar-search .search-close-button";function Mt(){jr()}function Bt(e){let t=c(ae);t.value=e}function qt(){c(ae).focus()}function jr(){let e=c(ae);e.addEventListener("keydown",t=>{t.key==="Escape"?(we(),e.blur()):t.key==="Enter"?Ur(t):t.key==="ArrowUp"?(Te(-1),t.preventDefault()):t.key==="ArrowDown"&&(Te(1),t.preventDefault())}),e.addEventListener("input",t=>{ze(t.target.value)}),e.addEventListener("focus",t=>{document.body.classList.add("search-focused"),ze(t.target.value)}),e.addEventListener("blur",t=>{let n=t.relatedTarget;if(n){if(n.matches(Le))return setTimeout(()=>{Dt()&&e.focus()},1e3),null;n.matches(Vr)&&we()}$e()}),c(ee).addEventListener("click",t=>{t.shiftKey||t.ctrlKey?e.focus():(we(),$e())})}function Ur(e){let t=c(ae),n=e.shiftKey||e.ctrlKey,r=Ft();e.preventDefault();let i=n?"_blank":"_self",s=document.createElement("a");s.setAttribute("target",i),r?s.setAttribute("href",r.link):s.setAttribute("href",`search.html?q=${encodeURIComponent(t.value)}`),s.click(),n||(we(),$e())}function we(){let e=c(ae);e.value=""}function $e(){document.body.classList.remove("search-focused"),qe()}var zt=".sidebar-projectVersion",Wr=".sidebar-projectVersionsDropdown";function $t(){let e=Ot();if(e.length>0){let n=c(zt).textContent.trim(),r=Kr(e,n);Gr({nodes:r})}}function Gr({nodes:e}){let t=c(zt),n=Handlebars.templates["versions-dropdown"]({nodes:e});t.innerHTML=n,c(Wr).addEventListener("change",Jr)}function Kr(e,t){return Yr(e,t).map(r=>({...r,isCurrentVersion:r.version===t}))}function Yr(e,t){return e.some(r=>r.version===t)?e:[{version:t,url:"#"},...e]}function Jr(e){let t=e.target.value,n=window.location.pathname.split("/").pop()+window.location.hash,r=`${t}/${n}`;dt(r).then(i=>{i?window.location.href=r:window.location.href=t})}var O=at(Ut());var ke=80,Xr="#search";function Gt(){if(window.location.pathname.endsWith("/search.html")){let e=ut("q");Zr(e)}}async function Zr(e){if(Z(e))Ve({value:e});else{Bt(e);let t=await ei();try{let n=di(t.search(e));Ve({value:e,results:n})}catch(n){Ve({value:e,errorMessage:n.message})}}}function Ve({value:e,results:t,errorMessage:n}){let r=c(Xr),i=Handlebars.templates["search-results"]({value:e,results:t,errorMessage:n});r.innerHTML=i}async function ei(){O.default.QueryLexer.termSeparator=/\s+/,O.default.Pipeline.registerFunction(je,"elixirTokenSplitter"),O.default.Pipeline.registerFunction(Ue,"elixirTrimmer"),O.default.Pipeline.registerFunction(We,"hyphenSearch");let e=await ti();if(e)return e;let t=ai();return ni(t),t}async function ti(){try{let e=sessionStorage.getItem(Kt());if(e){let t=await ii(e);return O.default.Index.load(t)}else return null}catch(e){return console.error("Failed to load index: ",e),null}}async function ni(e){try{let t=await ri(e);sessionStorage.setItem(Kt(),t)}catch(t){console.error("Failed to save index: ",t)}}async function ri(e){let t=new Blob([JSON.stringify(e)],{type:"application/json"}).stream().pipeThrough(new window.CompressionStream("gzip")),r=await(await new Response(t).blob()).arrayBuffer();return si(r)}async function ii(e){let t=new Blob([oi(e)],{type:"application/json"}).stream().pipeThrough(new window.DecompressionStream("gzip")),n=await new Response(t).text();return JSON.parse(n)}function si(e){let t="",n=new Uint8Array(e),r=n.byteLength;for(let i=0;i{this.add(e)})})}function ci(e){e.pipeline.before(O.default.stemmer,je),e.searchPipeline.before(O.default.stemmer,je)}function je(e){let t=e.toString().split(/\.|\/|_/).map(n=>e.clone().update(()=>n));return t.length>1?[...t,e]:t}function li(e){e.pipeline.after(O.default.stemmer,Ue),e.searchPipeline.after(O.default.stemmer,Ue)}function Ue(e){return e.update(function(t){return t.replace(/^@?\W+/,"").replace(/\W+$/,"")})}function We(e){if(e.toString().indexOf("-")<0)return e;let n=[];return n.push(e.clone(function(r){return r.replace("-","")})),n.push(e),n}function ui(e){e.pipeline.before(O.default.stemmer,We),e.searchPipeline.before(O.default.stemmer,We)}function di(e){return e.filter(t=>Wt(t.ref)).map(t=>{let n=Wt(t.ref),r=t.matchData.metadata;return{...n,metadata:r,excerpts:fi(n,r)}})}function Wt(e){return searchData.items.find(t=>t.ref===e)||null}function fi(e,t){let{doc:n}=e,i=Object.keys(t).filter(s=>"doc"in t[s]).map(s=>t[s].doc.position.map(([o,a])=>hi(n,o,a))).reduce((s,o)=>s.concat(o),[]);return i.length===0?[n.slice(0,ke*2)+(ke*20?"...":"",e.slice(r,t),""+he(e.slice(t,t+n))+"",e.slice(t+n,i),i{clearTimeout(_e),e.target.classList.remove("show")})}function Ge(e){G&&(clearTimeout(_e),G.innerText=e,G.classList.add("show"),_e=setTimeout(()=>{G.classList.remove("show"),_e=setTimeout(function(){G.innerText=""},1e3)},5e3))}var Jt="dark",Ke=["system","dark","light"];function Xt(){I.getAndSubscribe(e=>{document.body.classList.toggle(Jt,en(e))}),mi()}function Zt(){let t=I.get().theme||"system",n=Ke[Ke.indexOf(t)+1]||Ke[0];I.update({theme:n}),Ge(`Set theme to "${n}"`)}function en(e){return e.theme==="dark"||pi()&&(e.theme==null||e.theme==="system")}function pi(){return window.matchMedia("(prefers-color-scheme: dark)").matches}function mi(){window.matchMedia("(prefers-color-scheme: dark)").addListener(e=>{let t=I.get(),n=en(t);(t.theme==null||t.theme==="system")&&(document.body.classList.toggle(Jt,n),Ge(`Browser changed theme to "${n?"dark":"light"}"`))})}var gi="hll";function nn(){yi()}function yi(){k("[data-group-id]").forEach(t=>{let n=t.getAttribute("data-group-id");t.addEventListener("mouseenter",r=>{tn(n,!0)}),t.addEventListener("mouseleave",r=>{tn(n,!1)})})}function tn(e,t){k(`[data-group-id="${e}"]`).forEach(r=>{r.classList.toggle(gi,t)})}var te="#modal",vi="#modal .modal-close",bi="#modal .modal-title",Si="#modal .modal-body",rn='button:not([disabled]), [href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])',q={prevFocus:null,lastFocus:null,ignoreFocusChanges:!1};function sn(){xi()}function xi(){let e=Handlebars.templates["modal-layout"]();document.body.insertAdjacentHTML("beforeend",e),c(te).addEventListener("keydown",t=>{t.key==="Escape"&&ce()}),c(vi).addEventListener("click",t=>{ce()})}function on(e){if(q.ignoreFocusChanges)return;let t=c(te);if(t.contains(e.target))q.lastFocus=e.target;else{q.ignoreFocusChanges=!0;let n=Ei(t);q.lastFocus===n?Li(t).focus():n.focus(),q.ignoreFocusChanges=!1,q.lastFocus=document.activeElement}}function Ei(e){return e.querySelector(rn)}function Li(e){let t=e.querySelectorAll(rn);return t[t.length-1]}function Ie({title:e,body:t}){q.prevFocus=document.activeElement,document.addEventListener("focus",on,!0),c(bi).innerHTML=e,c(Si).innerHTML=t,c(te).classList.add("shown"),c(te).focus()}function ce(){c(te).classList.remove("shown"),document.addEventListener("focus",on,!0),q.prevFocus&&q.prevFocus.focus(),q.prevFocus=null}function an(){return c(te).classList.contains("shown")}var Ti="https://hexdocs.pm/%%",wi="https://hex.pm/api/packages?search=name:%%*",ki=".display-quick-switch",Ye="#quick-switch-input",ln="#quick-switch-results",_i=".quick-switch-result",Ii=300,Oi=9,Ci=["elixir","eex","ex_unit","hex","iex","logger","mix"].map(e=>({name:e})),un=2,P={autocompleteResults:[],selectedIdx:null};function dn(){Ai()}function Ai(){k(ki).forEach(e=>{e.addEventListener("click",t=>{Xe()})})}function Pi(e){if(e.key==="Enter"){let t=e.target.value;Ni(t),e.preventDefault()}else e.key==="ArrowUp"?(cn(-1),e.preventDefault()):e.key==="ArrowDown"&&(cn(1),e.preventDefault())}function Ri(e){let t=e.target.value;if(t.lengthn.json()).then(n=>{Array.isArray(n)&&(P.autocompleteResults=Fi(e,n),P.selectedIdx=null,c(Ye).value.length>=un&&Di({results:P.autocompleteResults}))})}function Di({results:e}){let t=c(ln),n=Handlebars.templates["quick-switch-results"]({results:e});t.innerHTML=n,k(_i).forEach(r=>{r.addEventListener("click",i=>{let s=r.getAttribute("data-index"),o=P.autocompleteResults[s];Je(o.name)})})}function Fi(e,t){return Ci.concat(t).filter(n=>n.name.toLowerCase().includes(e.toLowerCase())).filter(n=>n.releases===void 0||n.releases[0].has_docs===!0).slice(0,Oi)}function cn(e){P.selectedIdx=Mi(e);let t=c(".quick-switch-result.selected"),n=c(`.quick-switch-result[data-index="${P.selectedIdx}"]`);t&&t.classList.remove("selected"),n&&n.classList.add("selected")}function Mi(e){let t=P.autocompleteResults.length;if(P.selectedIdx===null){if(e>=0)return 0;if(e<0)return t-1}return(P.selectedIdx+e+t)%t}var Bi=".display-settings",qi="#settings-modal-content",Ze="#modal-settings-tab",et="#modal-keyboard-shortcuts-tab",hn="#settings-content",pn="#keyboard-shortcuts-content",zi=[{title:"Settings",id:"modal-settings-tab"},{title:"Keyboard shortcuts",id:"modal-keyboard-shortcuts-tab"}];function mn(){$i()}function $i(){k(Bi).forEach(e=>{e.addEventListener("click",t=>{tt()})})}function fn(){c(et).classList.remove("active"),c(Ze).classList.add("active"),c(hn).classList.remove("hidden"),c(pn).classList.add("hidden")}function Vi(){c(et).classList.add("active"),c(Ze).classList.remove("active"),c(pn).classList.remove("hidden"),c(hn).classList.add("hidden")}function tt(){Ie({title:zi.map(({id:s,title:o})=>``).join(""),body:Handlebars.templates["settings-modal-body"]({shortcuts:nt})});let e=c(qi),t=e.querySelector('[name="theme"]'),n=e.querySelector('[name="tooltips"]'),r=e.querySelector('[name="direct_livebook_url"]'),i=e.querySelector('[name="livebook_url"]');I.getAndSubscribe(s=>{t.value=s.theme||"system",n.checked=s.tooltips,s.livebookUrl===null?(r.checked=!1,i.classList.add("hidden"),i.tabIndex=-1):(r.checked=!0,i.classList.remove("hidden"),i.tabIndex=0,i.value=s.livebookUrl)}),t.addEventListener("change",s=>{I.update({theme:s.target.value})}),n.addEventListener("change",s=>{I.update({tooltips:s.target.checked})}),r.addEventListener("change",s=>{let o=s.target.checked?i.value:null;I.update({livebookUrl:o})}),i.addEventListener("input",s=>{I.update({livebookUrl:s.target.value})}),c(Ze).addEventListener("click",s=>{fn()}),c(et).addEventListener("click",s=>{Vi()}),fn()}var ji="#settings-modal-content",nt=[{key:"c",description:"Toggle sidebar",action:Pe},{key:"n",description:"Cycle themes",action:Zt},{key:"s",description:"Focus search bar",displayAs:"/ or s",action:gn},{key:"/",action:gn},{key:"g",description:"Search HexDocs package",displayAs:"g",action:Xe},{key:"?",displayAs:"?",description:"Bring up this modal",action:Ki}],rt={shortcutBeingPressed:null};function yn(){Ui()}function Ui(){document.addEventListener("keydown",Wi),document.addEventListener("keyup",Gi)}function Wi(e){if(rt.shortcutBeingPressed||e.target.matches("input, textarea")||e.ctrlKey||e.metaKey||e.altKey)return;let t=nt.find(n=>n.key===e.key);t&&(rt.shortcutBeingPressed=t,e.preventDefault(),t.action(e))}function Gi(e){rt.shortcutBeingPressed=null}function gn(e){ce(),Ne(),qt()}function Ki(){Yi()?ce():tt()}function Yi(){return an()&&c(ji)}var K={plain:"plain",function:"function",module:"module"},Ji=[{href:"typespecs.html#basic-types",hint:{kind:K.plain,description:"Basic type"}},{href:"typespecs.html#literals",hint:{kind:K.plain,description:"Literal"}},{href:"typespecs.html#built-in-types",hint:{kind:K.plain,description:"Built-in type"}}],Oe={cancelHintFetching:null};function vn(e){if(Sn(e))return!0;let t=/#.*\//;return e.includes("#")&&!t.test(e)?!1:e.includes(".html")}function bn(e){let t=Sn(e);return t?Promise.resolve(t):Xi(e)}function Sn(e){let t=Ji.find(n=>e.includes(n.href));return t?t.hint:null}function Xi(e){let t=e.replace(".html",".html?hint=true");return new Promise((n,r)=>{let i=document.createElement("iframe");i.setAttribute("sandbox","allow-scripts allow-same-origin"),i.setAttribute("src",t),i.style.display="none";function s(a){let{href:l,hint:u}=a.data;t===l&&(o(),n(u))}Oe.cancelHintFetching=()=>{o(),r(new Error("cancelled"))};function o(){i.remove(),window.removeEventListener("message",s),Oe.cancelHintFetching=null}window.addEventListener("message",s),document.body.appendChild(i)})}function xn(){Oe.cancelHintFetching&&Oe.cancelHintFetching()}function En(e){let n=e.querySelector("h1").textContent,r=e.querySelector(".docstring > p"),i=r?r.innerHTML:"";return{kind:K.function,title:n.trim(),description:i.trim()}}function Ln(e){let n=e.querySelector("h1 > span").textContent,r=e.querySelector("#moduledoc p"),i=r?r.innerHTML:"";return{kind:K.module,title:n.trim(),description:i.trim()}}var Zi=".content a",it="#tooltip",es="#tooltip .tooltip-body",wn="body .content-inner",ts="#content",kn="tooltip-shown",le=10,ns=le*4,Tn={height:450,width:768},rs=100,ne={currentLinkElement:null,hoverDelayTimeout:null};function _n(){is(),ss()}function is(){let e=Handlebars.templates["tooltip-layout"]();c(wn).insertAdjacentHTML("beforeend",e)}function ss(){k(Zi).forEach(e=>{os(e)&&(e.addEventListener("mouseenter",t=>{cs(e)}),e.addEventListener("mouseleave",t=>{fs(e)}))})}function os(e){return!(e.classList.contains("detail-link")||as(e.href)||!vn(e.href))}function as(e){let t=e.replace(ts,"");return window.location.href.split("#")[0]===t}function cs(e){ls()&&(ne.currentLinkElement=e,ne.hoverDelayTimeout=setTimeout(()=>{bn(e.href).then(t=>{us(t),ds()}).catch(()=>{})},rs))}function ls(){let e=window.innerWidthe.firstElementChild&&e.firstElementChild.tagName==="CODE").forEach(e=>e.insertAdjacentHTML("beforeend",Es)),Array.from(k(".copy-button")).forEach(e=>{let t;e.addEventListener("click",()=>{let n=e.querySelector("[aria-live]");t&&clearTimeout(t);let r=Array.from(e.parentElement.querySelector("code").childNodes).filter(i=>!(i.tagName==="SPAN"&&i.classList.contains("unselectable"))).map(i=>i.textContent).join("");navigator.clipboard.writeText(r),e.classList.add("clicked"),n.innerHTML="Copied! ✓",t=setTimeout(()=>{e.classList.remove("clicked"),n.innerHTML=""},3e3)})})}function Pn(){let t=/(Macintosh|iPhone|iPad|iPod)/.test(window.navigator.userAgent)?"apple-os":"non-apple-os";document.documentElement.classList.add(t)}var Ts="content",ws="tabs-open",ks="tabs-close",_s="H3",Is="tabset";function Nn(){Os().map(Cs).forEach(n=>Rs(n))}function Os(){let e=document.createNodeIterator(document.getElementById(Ts),NodeFilter.SHOW_COMMENT,{acceptNode(r){return r.nodeValue.trim()===ws?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_REJECT}}),t=[],n;for(;n=e.nextNode();)t.push(n);return t}function Cs(e,t,n){let r=[],i=[],s={label:"",content:[]};for(;e=e.nextSibling;){if(As(e)){Rn(s,i,t);break}r.push(e),e.nodeName===_s?(Rn(s,i,t),s.label=e.innerText,s.content=[]):s.content.push(e.outerHTML)}let o=document.createElement("div");return o.className=Is,Ps(r,o),o.innerHTML=Handlebars.templates.tabset({tabs:i}),o}function As(e){return e.nodeName==="#comment"&&e.nodeValue.trim()===ks}function Rn(e,t,n){if(e.label===""&&!e.content.length)return!1;let r=e.label,i=e.content;t.push({label:r,content:i,setIndex:n})}function Ps(e,t){if(!e||!e.length)return!1;e[0].parentNode.insertBefore(t,e[0]),e.forEach(n=>t.appendChild(n))}function Rs(e){let t={tabs:e.querySelectorAll(':scope [role="tab"]'),panels:e.querySelectorAll(':scope [role="tabpanel"]'),activeIndex:0};t.tabs.forEach((n,r)=>{n.addEventListener("click",i=>{Y(r,t)}),n.addEventListener("keydown",i=>{let s=t.tabs.length-1;i.code==="ArrowLeft"?(i.preventDefault(),t.activeIndex===0?Y(s,t):Y(t.activeIndex-1,t)):i.code==="ArrowRight"?(i.preventDefault(),t.activeIndex===s?Y(0,t):Y(t.activeIndex+1,t)):i.code==="Home"?(i.preventDefault(),Y(0,t)):i.code==="End"&&(i.preventDefault(),Y(s,t))})})}function Y(e,t){t.tabs[t.activeIndex].setAttribute("aria-selected","false"),t.tabs[t.activeIndex].tabIndex=-1,t.tabs[e].setAttribute("aria-selected","true"),t.tabs[e].tabIndex=0,t.tabs[e].focus(),t.panels[t.activeIndex].setAttribute("hidden",""),t.panels[t.activeIndex].tabIndex=-1,t.panels[e].removeAttribute("hidden"),t.panels[e].tabIndex=0,t.activeIndex=e}ft(()=>{Xt(),Tt(),Ct(),Mt(),$t(),gt(),nn(),sn(),yn(),dn(),Yt(),_n(),Cn(),Gt(),An(),mn(),Pn(),Nn()});})(); +/*! Bundled license information: + +lunr/lunr.js: + (** + * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 2.3.9 + * Copyright (C) 2020 Oliver Nightingale + * @license MIT + *) + (*! + * lunr.utils + * Copyright (C) 2020 Oliver Nightingale + *) + (*! + * lunr.Set + * Copyright (C) 2020 Oliver Nightingale + *) + (*! + * lunr.tokenizer + * Copyright (C) 2020 Oliver Nightingale + *) + (*! + * lunr.Pipeline + * Copyright (C) 2020 Oliver Nightingale + *) + (*! + * lunr.Vector + * Copyright (C) 2020 Oliver Nightingale + *) + (*! + * lunr.stemmer + * Copyright (C) 2020 Oliver Nightingale + * Includes code from - http://tartarus.org/~martin/PorterStemmer/js.txt + *) + (*! + * lunr.stopWordFilter + * Copyright (C) 2020 Oliver Nightingale + *) + (*! + * lunr.trimmer + * Copyright (C) 2020 Oliver Nightingale + *) + (*! + * lunr.TokenSet + * Copyright (C) 2020 Oliver Nightingale + *) + (*! + * lunr.Index + * Copyright (C) 2020 Oliver Nightingale + *) + (*! + * lunr.Builder + * Copyright (C) 2020 Oliver Nightingale + *) +*/ diff --git a/docs/dist/html-erlang-BDSMJ657.css b/docs/dist/html-erlang-BDSMJ657.css new file mode 100644 index 0000000..72f3891 --- /dev/null +++ b/docs/dist/html-erlang-BDSMJ657.css @@ -0,0 +1,6 @@ +:root{--main: hsl(0, 100%, 64%);--main-darkened-10: hsl(0, 100%, 54%);--main-darkened-20: hsl(0, 100%, 44%);--main-lightened-05: hsl(0, 100%, 69%);--main-lightened-10: hsl(0, 100%, 74%)}@font-face{font-family:Lato;font-style:normal;font-display:swap;font-weight:300;src:url(./lato-latin-ext-300-normal-VPGGJKJL.woff2) format("woff2"),url(./lato-all-300-normal-GIV56FBX.woff) format("woff");unicode-range:U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Lato;font-style:normal;font-display:swap;font-weight:300;src:url(./lato-latin-300-normal-YUMVEFOL.woff2) format("woff2"),url(./lato-all-300-normal-GIV56FBX.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Lato;font-style:normal;font-display:swap;font-weight:400;src:url(./lato-latin-ext-400-normal-N27NCBWW.woff2) format("woff2"),url(./lato-all-400-normal-MNITWADU.woff) format("woff");unicode-range:U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Lato;font-style:normal;font-display:swap;font-weight:400;src:url(./lato-latin-400-normal-W7754I4D.woff2) format("woff2"),url(./lato-all-400-normal-MNITWADU.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Lato;font-style:normal;font-display:swap;font-weight:700;src:url(./lato-latin-ext-700-normal-Q2L5DVMW.woff2) format("woff2"),url(./lato-all-700-normal-XMT5XFBS.woff) format("woff");unicode-range:U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Lato;font-style:normal;font-display:swap;font-weight:700;src:url(./lato-latin-700-normal-2XVSBPG4.woff2) format("woff2"),url(./lato-all-700-normal-XMT5XFBS.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Merriweather;font-style:normal;font-display:swap;font-weight:300;src:url(./merriweather-cyrillic-ext-300-normal-5LF5LCEK.woff2) format("woff2"),url(./merriweather-all-300-normal-VL6BT3UN.woff) format("woff");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Merriweather;font-style:normal;font-display:swap;font-weight:300;src:url(./merriweather-cyrillic-300-normal-7PAAHU3N.woff2) format("woff2"),url(./merriweather-all-300-normal-VL6BT3UN.woff) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Merriweather;font-style:normal;font-display:swap;font-weight:300;src:url(./merriweather-vietnamese-300-normal-U376L4Z4.woff2) format("woff2"),url(./merriweather-all-300-normal-VL6BT3UN.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+1EA0-1EF9,U+20AB}@font-face{font-family:Merriweather;font-style:normal;font-display:swap;font-weight:300;src:url(./merriweather-latin-ext-300-normal-K6L27CZ5.woff2) format("woff2"),url(./merriweather-all-300-normal-VL6BT3UN.woff) format("woff");unicode-range:U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Merriweather;font-style:normal;font-display:swap;font-weight:300;src:url(./merriweather-latin-300-normal-RWDJH4FN.woff2) format("woff2"),url(./merriweather-all-300-normal-VL6BT3UN.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Merriweather;font-style:italic;font-display:swap;font-weight:300;src:url(./merriweather-cyrillic-ext-300-italic-JP3ZEV2P.woff2) format("woff2"),url(./merriweather-all-300-italic-CMQNB6FA.woff) format("woff");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Merriweather;font-style:italic;font-display:swap;font-weight:300;src:url(./merriweather-cyrillic-300-italic-M6KMXZSZ.woff2) format("woff2"),url(./merriweather-all-300-italic-CMQNB6FA.woff) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Merriweather;font-style:italic;font-display:swap;font-weight:300;src:url(./merriweather-vietnamese-300-italic-EHHNZPUO.woff2) format("woff2"),url(./merriweather-all-300-italic-CMQNB6FA.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+1EA0-1EF9,U+20AB}@font-face{font-family:Merriweather;font-style:italic;font-display:swap;font-weight:300;src:url(./merriweather-latin-ext-300-italic-MWCA36KE.woff2) format("woff2"),url(./merriweather-all-300-italic-CMQNB6FA.woff) format("woff");unicode-range:U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Merriweather;font-style:italic;font-display:swap;font-weight:300;src:url(./merriweather-latin-300-italic-353COS6Q.woff2) format("woff2"),url(./merriweather-all-300-italic-CMQNB6FA.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inconsolata;font-style:normal;font-display:swap;font-weight:400;src:url(./inconsolata-vietnamese-400-normal-IGQPHHJH.woff2) format("woff2"),url(./inconsolata-all-400-normal-HMVRHNDU.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inconsolata;font-style:normal;font-display:swap;font-weight:400;src:url(./inconsolata-latin-ext-400-normal-K7HVGTP7.woff2) format("woff2"),url(./inconsolata-all-400-normal-HMVRHNDU.woff) format("woff");unicode-range:U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inconsolata;font-style:normal;font-display:swap;font-weight:400;src:url(./inconsolata-latin-400-normal-RGKDDNDD.woff2) format("woff2"),url(./inconsolata-all-400-normal-HMVRHNDU.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inconsolata;font-style:normal;font-display:swap;font-weight:700;src:url(./inconsolata-vietnamese-700-normal-LHEGSN35.woff2) format("woff2"),url(./inconsolata-all-700-normal-WFUKXZPS.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inconsolata;font-style:normal;font-display:swap;font-weight:700;src:url(./inconsolata-latin-ext-700-normal-4MPBLFZC.woff2) format("woff2"),url(./inconsolata-all-700-normal-WFUKXZPS.woff) format("woff");unicode-range:U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inconsolata;font-style:normal;font-display:swap;font-weight:700;src:url(./inconsolata-latin-700-normal-DTS2D7TO.woff2) format("woff2"),url(./inconsolata-all-700-normal-WFUKXZPS.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--content-width: 949px;--content-gutter: 60px;--borderRadius: 4px;--serifFontFamily: "Merriweather", "Book Antiqua", Georgia, "Century Schoolbook", serif;--sansFontFamily: "Lato", sans-serif;--monoFontFamily: "Inconsolata", Menlo, Courier, monospace;--baseFontSize: 18px;--baseLineHeight: 1.5em;--gray25: hsl(207, 43%, 98% );--gray50: hsl(207, 43%, 96% );--gray100: hsl(212, 33%, 91% );--gray200: hsl(210, 29%, 88% );--gray300: hsl(210, 26%, 84% );--gray400: hsl(210, 21%, 64% );--gray450: hsl(210, 21%, 49% );--gray500: hsl(210, 21%, 34% );--gray600: hsl(210, 27%, 26% );--gray700: hsl(212, 35%, 17% );--gray750: hsl(214, 46%, 14% );--gray800: hsl(216, 52%, 11% );--gray800-opacity-0: hsla(216, 52%, 11%, 0%);--gray850: hsl(216, 63%, 8% );--gray900: hsl(218, 73%, 4% );--gray900-opacity-50: hsla(218, 73%, 4%, 50%);--gray900-opacity-0: hsla(218, 73%, 4%, 0%);--coldGrayFaint: hsl(240, 5%, 97% );--coldGrayLight: hsl(240, 5%, 88% );--coldGray-lightened-10: hsl(240, 5%, 56% );--coldGray: hsl(240, 5%, 46% );--coldGrayDark: hsl(240, 5%, 28% );--coldGrayDim: hsl(240, 5%, 18% );--yellowLight: hsl( 60, 100%, 81% );--yellowDark: hsl( 60, 100%, 43%, 62%);--yellow: hsl( 60, 100%, 43% );--green-lightened-10: hsl( 90, 100%, 45% );--green: hsl( 90, 100%, 35% );--white: hsl( 0, 0%, 100% );--white-opacity-50: hsla( 0, 0%, 100%, 50%);--white-opacity-10: hsla( 0, 0%, 100%, 10%);--white-opacity-0: hsla( 0, 0%, 100%, 0%);--black: hsl( 0, 0%, 0% );--black-opacity-10: hsla( 0, 0%, 0%, 10%);--black-opacity-50: hsla( 0, 0%, 0%, 50%)}@media screen and (max-width: 768px){:root{--content-width: 100%;--content-gutter: 20px}}:root{--background: var(--white);--contrast: var(--black);--textBody: var(--gray700);--textHeaders: var(--gray800);--textDetailBackground: var(--coldGrayFaint);--textFooter: var(--gray600);--links: var(--black);--linksVisited: var(--black);--linksNoUnderline: var(--main-darkened-10);--linksNoUnderlineVisited: var(--main-darkened-20);--linksDecoration: var(--gray450);--iconAction: var(--coldGray);--iconActionHover: var(--gray800);--blockquoteBackground: var(--coldGrayFaint);--blockquoteBorder: var(--coldGrayLight);--warningBackground: hsl( 33, 100%, 97%);--warningHeadingBackground: hsl( 33, 87%, 64%);--warningHeading: var(--black);--errorBackground: hsl( 7, 81%, 96%);--errorHeadingBackground: hsl( 6, 80%, 60%);--errorHeading: var(--white);--infoBackground: hsl(206, 91%, 96%);--infoHeadingBackground: hsl(213, 92%, 62%);--infoHeading: var(--white);--neutralBackground: hsl(212, 29%, 92%);--neutralHeadingBackground: hsl(220, 43%, 11%);--neutralHeading: var(--white);--tipBackground: hsl(142, 31%, 93%);--tipHeadingBackground: hsl(134, 39%, 36%);--tipHeading: var(--white);--fnSpecAttr: var(--coldGray);--fnDeprecated: var(--yellowLight);--blink: var(--yellowLight);--codeBackground: var(--gray25);--codeBorder: var(--gray100);--codeScrollThumb: var(--gray400);--codeScrollBackground: var(--codeBorder);--admCodeBackground: var(--gray25);--admCodeBorder: var(--gray100);--admInlineCode: var(--black);--admInlineCodeBackground: var(--gray25);--admInlineCodeBorder: var(--gray100);--tabBackground: var(--white);--tabBorder: var(--gray300);--tabBorderTop: var(--gray100);--tab: var(--gray600);--tabShadow: var(--gray25);--bottomActionsBtnBorder: var(--black-opacity-10);--bottomActionsBtnSubheader: var(--main-darkened-10);--modalBackground: var(--white);--settingsInput: var(--gray500);--settingsInputBackground: var(--white);--settingsInputBorder: var(--gray300);--settingsSectionBorder: var(--gray300);--quickSwitchInput: var(--gray500);--quickSwitchContour: var(--coldGray);--success: var(--green);--sidebarButtonBackground: linear-gradient(180deg, var(--white) 20%, var(--white-opacity-50) 70%, var(--white-opacity-0) 100%);--sidebarAccentMain: var(--gray50);--sidebarBackground: var(--gray800);--sidebarHeader: var(--gray700);--sidebarMuted: var(--gray300);--sidebarHover: var(--white);--sidebarScrollbarThumb: var(--coldGray);--sidebarScrollbarTrack: var(--sidebarBackground);--sidebarSearch: var(--gray700);--sidebarSubheadings: var(--gray400);--sidebarItem: var(--gray200);--sidebarInactiveItemMarker: var(--gray600);--sidebarLanguageAccentBar: var(--main);--sidebarActiveItem: var(--main-lightened-10)}body.dark{--background: var(--gray900);--contrast: var(--white);--textBody: var(--gray200);--textHeaders: var(--gray100);--textDetailBackground: var(--gray700);--textFooter: var(--gray300);--links: var(--gray100);--linksVisited: var(--gray100);--linksNoUnderline: var(--main-lightened-10);--linksNoUnderlineVisited: var(--main-lightened-05);--linksDecoration: var(--gray450);--iconAction: var(--coldGray-lightened-10);--iconActionHover: var(--white);--blockquoteBackground: var(--coldGrayDim);--blockquoteBorder: var(--coldGrayDark);--warningBackground: hsl( 40, 67%, 79%);--warningHeadingBackground: hsl( 27, 66%, 29%);--warningHeading: var(--white);--errorBackground: hsl(358, 52%, 78%);--errorHeadingBackground: hsl(349, 55%, 34%);--errorHeading: var(--white);--infoBackground: hsl(222, 57%, 77%);--infoHeadingBackground: hsl(243, 65%, 26%);--infoHeading: var(--white);--neutralBackground: hsl(220, 23%, 82%);--neutralHeadingBackground: hsl(224, 24%, 16%);--neutralHeading: var(--white);--tipBackground: hsl(139, 26%, 69%);--tipHeadingBackground: hsl(158, 35%, 17%);--tipHeading: var(--white);--fnSpecAttr: var(--gray500);--fnDeprecated: var(--yellowDark);--blink: var(--gray600);--codeBackground: var(--gray850);--codeBorder: var(--gray700);--codeScrollThumb: var(--gray500);--codeScrollBackground: var(--codeBorder);--admCodeBackground: var(--gray750);--admCodeBorder: var(--gray600);--admInlineCode: var(--black);--admInlineCodeBackground: var(--gray25);--admInlineCodeBorder: var(--gray100);--tabBackground: var(--gray900);--tabBorder: var(--gray700);--tabBorderTop: var(--gray700);--tab: var(--white);--tabShadow: var(--black);--bottomActionsBtnBorder: var(--white-opacity-10);--bottomActionsBtnSubheader: var(--main);--modalBackground: var(--gray800);--settingsInput: var(--white);--settingsInputBackground: var(--gray700);--settingsInputBorder: var(--gray700);--settingsSectionBorder: var(--gray700);--quickSwitchInput: var(--gray300);--quickSwitchContour: var(--gray500);--success: var(--green-lightened-10);--sidebarButtonBackground: linear-gradient(180deg, var(--gray900) 20%, var(--gray900-opacity-50) 70%, var(--gray900-opacity-0) 100%);--sidebarAccentMain: var(--gray50);--sidebarBackground: var(--gray800);--sidebarHeader: var(--gray700);--sidebarMuted: var(--gray300);--sidebarHover: var(--white);--sidebarScrollbarThumb: var(--coldGray);--sidebarScrollbarTrack: var(--sidebarBackground);--sidebarSearch: var(--gray700);--sidebarSubheadings: var(--gray400);--sidebarItem: var(--gray200);--sidebarInactiveItemMarker: var(--gray600);--sidebarLanguageAccentBar: var(--main);--sidebarActiveItem: var(--main-lightened-10)}html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}button::-moz-focus-inner,[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner{border-style:none;padding:0}button:-moz-focusring,[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none}@font-face{font-family:remixicon;src:url(./remixicon-NKANDIL5.woff2) format("woff2");font-display:swap}[class^=ri-],[class*=" ri-"],.remix-icon{font-family:remixicon;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}:root{--icon-arrow-up-s: "\ea78";--icon-arrow-down-s: "\ea4e";--icon-arrow-right-s: "\ea6e";--icon-add: "\ea13";--icon-subtract: "\f1af";--icon-error-warning: "\eca1";--icon-information: "\ee59";--icon-alert: "\ea21";--icon-double-quotes-l: "\ec51";--icon-link-m: "\eeaf";--icon-close-line: "\eb99";--icon-code-s-slash-line: "\ebad";--icon-menu-line: "\ef3e";--icon-search-2-line: "\f0cd";--icon-settings-3-line: "\f0e6";--icon-printer-line: "\f029"}.ri-lg{font-size:1.3333em;line-height:.75em;vertical-align:-.0667em}.ri-settings-3-line:before{content:var(--icon-settings-3-line)}.ri-add-line:before{content:var(--icon-add)}.ri-subtract-line:before{content:var(--icon-subtract)}.ri-arrow-up-s-line:before{content:var(--icon-arrow-up-s)}.ri-arrow-down-s-line:before{content:var(--icon-arrow-down-s)}.ri-arrow-right-s-line:before{content:var(--icon-arrow-right-s)}.ri-search-2-line:before{content:var(--icon-search-2-line)}.ri-menu-line:before{content:var(--icon-menu-line)}.ri-close-line:before{content:var(--icon-close-line)}.ri-link-m:before{content:var(--icon-link-m)}.ri-code-s-slash-line:before{content:var(--icon-code-s-slash-line)}.ri-error-warning-line:before{content:var(--icon-error-warning)}.ri-information-line:before{content:var(--icon-information)}.ri-alert-line:before{content:var(--icon-alert)}.ri-double-quotes-l:before{content:var(--icon-double-quotes-l)}.ri-printer-line:before{content:var(--icon-printer-line)}html,body{box-sizing:border-box;height:100%;width:100%}body{--sidebarWidth: 300px;--sidebarTransitionDuration: .3s;background-color:var(--background);color:var(--textBody);font-size:16px;font-family:var(--sansFontFamily);line-height:1.6875em}*,*:before,*:after{box-sizing:inherit}.main{display:flex;justify-content:flex-end;height:100%}.sidebar{display:flex;flex-direction:column;width:var(--sidebarWidth);height:100%;position:fixed;top:0;left:0;z-index:4}.sidebar-button{--sidebarButtonTopOpen: 6px;--sidebarButtonRightOpen: 7px;position:fixed;z-index:99;left:0;top:0;transition:all var(--sidebarTransitionDuration) ease-in-out;will-change:transform}.content{width:calc(100% - var(--sidebarWidth));left:var(--sidebarWidth);height:100%;position:absolute;z-index:3}body:is(.sidebar-opening,.sidebar-opened) .sidebar-button{transform:translate(calc(var(--sidebarWidth) - 100% - var(--sidebarButtonRightOpen)));top:var(--sidebarButtonTopOpen)}body.sidebar-opening-start .sidebar{left:calc(-1 * var(--sidebarWidth))}body.sidebar-opening-start .content{width:100%;left:0}body.sidebar-opening .sidebar{left:0;transition:left var(--sidebarTransitionDuration) ease-in-out}body.sidebar-opening .content{width:calc(100% - var(--sidebarWidth));left:var(--sidebarWidth);transition:all var(--sidebarTransitionDuration) ease-in-out}body.sidebar-closing .sidebar-button{transform:translate(0)}body.sidebar-closing .sidebar{left:calc(-1 * var(--sidebarWidth));transition:left var(--sidebarTransitionDuration) ease-in-out}body.sidebar-closing .content{width:100%;left:0;transition:all var(--sidebarTransitionDuration) ease-in-out}body.sidebar-closed .sidebar{left:calc(-1 * var(--sidebarWidth));display:none}body.sidebar-closed .content{width:100%;left:0}@media screen and (max-width: 768px){.sidebar-button:before{--sidebarButtonHeight: 60px;content:"";display:block;z-index:-1;pointer-events:none;position:fixed;left:-1px;top:0;height:var(--sidebarButtonHeight);width:calc(100vw + 2px);background:var(--sidebarButtonBackground);transition:top var(--sidebarTransitionDuration) ease-in-out}body:is(.sidebar-closed,.sidebar-closing) .sidebar-button:before{top:0}body:is(.sidebar-opening,.sidebar-opened) .sidebar-button:before{top:calc(-1 * var(--sidebarButtonHeight) - var(--sidebarButtonTopOpen))}body.sidebar-opened .sidebar-button:before{opacity:0}}body.search-focused .sidebar-button{transform:translate(250px) scaleY(0);transition:all .15s ease-out;opacity:0}body.search-focused .sidebar-search .search-close-button{transform:scaleY(1);transition:transform .15s ease-out .15s}.content-inner{max-width:var(--content-width);margin:0 auto;padding:3px var(--content-gutter)}.content-inner:focus{outline:none}.content-outer{min-height:100%}@media screen and (max-width: 768px){.content,body.sidebar-opening .content{left:0;width:100%}.content-inner{padding-top:10px;padding-bottom:27px;overflow-x:auto}}.sidebar{--sidebarFontSize: 16px;--sidebarLineHeight: 20px;font-family:var(--sansFontFamily);font-size:var(--sidebarFontSize);font-weight:300;line-height:var(--sidebarLineHeight);background-color:var(--sidebarBackground);color:var(--sidebarAccentMain);overflow:hidden;scrollbar-color:var(--sidebarScrollbarThumb) var(--sidebarScrollbarTrack)}.non-apple-os .sidebar{font-weight:400}.sidebar ul{list-style:none}.sidebar ul li{margin:0;padding:0 10px}.sidebar a{color:var(--sidebarAccentMain);text-decoration:none;transition:color .3s ease-in-out}.sidebar a:hover{color:var(--sidebarHover)}.sidebar .sidebar-header{margin:12px;border-radius:var(--borderRadius);background-color:var(--sidebarHeader);width:276px}.sidebar .sidebar-projectDetails{display:inline-block;text-align:left;vertical-align:top;margin:6px 0 0 10px}.sidebar .sidebar-projectImage{display:inline-block;max-width:48px;max-height:48px;margin:0 0 0 10px;vertical-align:bottom}.sidebar .sidebar-projectName{font-weight:700;font-size:20px;line-height:30px;color:var(--sidebarAccentMain);margin:0;padding:0;max-width:230px;word-wrap:break-word}.sidebar .sidebar-projectVersion{display:block;position:relative;margin:0;padding:0;font-size:var(--sidebarFontSize);line-height:var(--sidebarLineHeight);color:var(--sidebarMuted)}.sidebar .sidebar-projectVersionsDropdown{cursor:pointer;position:relative;margin:0;padding:0 0 0 12px;border:none;-webkit-appearance:none;appearance:none;background-color:transparent;color:var(--sidebarMuted);z-index:2}.sidebar .sidebar-projectVersionsDropdown option{color:initial}.sidebar .sidebar-projectVersionsDropdownCaret{position:absolute;left:0;top:2px;z-index:1;font-size:8px;color:var(--sidebarMuted)}.sidebar .sidebar-projectVersionsDropdown::-ms-expand{display:none}.sidebar .sidebar-listNav{padding:12px 0 0;margin:0}.sidebar .sidebar-listNav :is(li,li button){text-transform:uppercase;font-size:14px;color:var(--sidebarMuted)}.sidebar .sidebar-listNav li{display:inline-block;padding:0}.sidebar .sidebar-listNav li button{background:none;border:0;border-radius:0;-webkit-appearance:none;text-align:inherit;color:inherit;font-weight:inherit;cursor:pointer;display:inline-block;line-height:27px;border-bottom:3px solid transparent;padding:0 10px}.sidebar .sidebar-listNav li:is(:hover,.selected) button{border-color:var(--sidebarLanguageAccentBar)}.sidebar .sidebar-listNav li:is(:hover,.selected) button{color:var(--sidebarAccentMain)}.sidebar .sidebar-search{margin-top:12px}.sidebar .sidebar-search.selected .search-button,.sidebar .sidebar-search .search-button:hover,.sidebar .sidebar-search .search-button:focus{color:var(--sidebarLanguageAccentBar);opacity:1}.sidebar .sidebar-search .search-label{position:relative;width:100%}.sidebar .sidebar-search .search-button{font-size:14px;color:var(--sidebarAccentMain);background-color:transparent;border:none;cursor:pointer;left:22px;margin:0;opacity:.5;padding:3px 1px 3px 0;position:absolute;top:18px;z-index:2}.sidebar .sidebar-search .search-close-button{font-size:var(--sidebarFontSize);color:var(--sidebarAccentMain);background-color:transparent;border:none;cursor:pointer;right:18px;margin:0;opacity:.5;padding:5px 1px 5px 0;position:absolute;transform:scaleY(0);top:17px;transition:.15s transform ease-out;z-index:2}.sidebar .sidebar-search .search-close-button:hover{opacity:.7}.sidebar .sidebar-search .search-input{background-color:var(--sidebarSearch);border:none;border-radius:var(--borderRadius);color:var(--sidebarAccentMain);margin-left:12px;padding:8px 6px 8px 38px;width:276px}.sidebar .sidebar-search .search-input::placeholder{color:var(--sidebarAccentMain);opacity:.3}.sidebar .sidebar-search .ri-search-2-line{font-weight:700}.sidebar .sidebar-tabpanel{flex:1 1 .01%;overflow-y:auto;overscroll-behavior:contain;position:relative;-webkit-overflow-scrolling:touch}.sidebar .full-list{margin:0;padding:20px 0;position:relative}.sidebar .full-list :is(li,a){overflow:hidden;text-overflow:ellipsis}.sidebar .full-list li{padding:0;margin-right:30px;line-height:27px;white-space:nowrap}.sidebar .full-list li.docs{margin-right:0}.sidebar .full-list li.open>ul{display:block;margin-left:10px}.sidebar .full-list li a.expand+button.icon-expand{appearance:none;background-color:transparent;border:0;padding:0;cursor:pointer;color:inherit;margin-right:10px;font-size:calc(1.2 * var(--sidebarFontSize));line-height:var(--sidebarLineHeight);position:absolute;display:flex;right:0;transform:translateY(calc(-100% - 4px))}.sidebar .full-list li a+button.icon-expand:after{font-family:remixicon;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.sidebar .full-list li a.expand+button.icon-expand:after{content:var(--icon-arrow-down-s)}.sidebar .full-list li.open>a.expand+button.icon-expand:after{content:var(--icon-arrow-up-s)}.sidebar .full-list li.docs>a+button.icon-expand{margin-right:12px;font-size:var(--sidebarFontSize);line-height:var(--sidebarFontSize);transform:translateY(calc(-100% - 5px))}.sidebar .full-list li.docs>a+button.icon-expand:after{content:var(--icon-add)}.sidebar .full-list li.docs.open>a+button.icon-expand:after{content:var(--icon-subtract)}.sidebar .full-list li.nesting-context{font-weight:700;font-size:.9em;line-height:1.8em;color:var(--sidebarSubheadings);padding-left:15px}.sidebar .full-list li.group{text-transform:uppercase;font-weight:700;font-size:.8em;margin:1.5em 0 0;line-height:1.8em;color:var(--sidebarSubheadings);padding-left:15px}.sidebar .full-list li a{padding:3px 0 3px 15px;color:var(--sidebarItem)}.sidebar .full-list>li>a{display:block;width:100%;height:27px;line-height:var(--sidebarLineHeight)}.sidebar .full-list li .current-section>a{color:var(--sidebarActiveItem)}.sidebar .full-list li .current-section>a+button.icon-expand{color:var(--sidebarActiveItem)}.sidebar .full-list>li>a:hover{border-left:3px solid var(--sidebarLanguageAccentBar);padding-left:12px}.sidebar .full-list>li.current-page>a{color:var(--sidebarActiveItem);border-left:3px solid var(--sidebarLanguageAccentBar);padding-left:12px}.sidebar .full-list>li.current-page>a:after,.sidebar .full-list>li.current-page{color:var(--sidebarActiveItem)}.sidebar .full-list>li:last-child{margin-bottom:30px}.sidebar .full-list>li.group:first-child{margin-top:0}.sidebar .full-list ul{display:none;margin:10px 0 10px 15px;padding:0}.sidebar .full-list ul li{font-weight:300;line-height:var(--sidebarFontSize);padding:0 8px;margin-right:0;color:var(--sidebarAccentMain)}.non-apple-os .sidebar .full-list ul li{font-weight:400}.sidebar .full-list ul li.current-hash{color:var(--sidebarActiveItem)}.sidebar .full-list ul li.current-hash>a{color:var(--sidebarActiveItem)}.sidebar .full-list ul li.current-hash>a:before,.sidebar .full-list>li>ul>li>a:hover:before{content:"\2022";position:absolute;margin-left:-15px;color:var(--sidebarActiveItem)}.sidebar .full-list ul li a{padding-left:15px;display:block;width:100%;height:24px}.sidebar .full-list ul li ul{display:none;margin:9px 0 9px 20px}.sidebar .full-list ul li ul li{margin-right:0;height:20px;color:var(--sidebarAccentMain)}.sidebar .full-list ul li ul li a{border-left:1px solid var(--sidebarInactiveItemMarker);padding:0 10px;height:20px}.sidebar .full-list ul li ul li.current-hash>a:before{content:none}.sidebar .full-list ul li ul li>a:hover{border-color:var(--sidebarLanguageAccentBar)}.sidebar .full-list ul li ul li.current-hash>a{color:var(--sidebarActiveItem);border-color:var(--sidebarLanguageAccentBar)}.sidebar .full-list ul li ul li.current-hash>a{color:var(--sidebarActiveItem);margin-left:0}.sidebar ::-webkit-scrollbar{width:14px}::-webkit-scrollbar-track{background-color:var(--sidebarBackground)}.sidebar ::-webkit-scrollbar-thumb{background-color:var(--sidebarScrollbarThumb);border-radius:10px;border:3px solid var(--sidebarBackground)}.sidebar-button{cursor:pointer;background-color:transparent;border:none;padding:15px 11px;font-size:var(--sidebarFontSize)}.sidebar-button:hover{color:var(--sidebarHover)}.sidebar-button{color:var(--sidebarAccentMain)}.sidebar-closed .sidebar-button{color:var(--contrast)}@media screen and (max-height: 500px){.sidebar{overflow-y:auto}.sidebar .full-list{overflow:visible}}*:focus,button:focus,[type=button]:focus,[type=reset]:focus,[type=submit]:focus{outline:2px solid var(--main);outline-offset:-2px}*:focus:not(:focus-visible),button:focus:not(:focus-visible),[type=button]:focus:not(:focus-visible),[type=reset]:focus:not(:focus-visible),[type=submit]:focus:not(:focus-visible){outline:0}input[type=text],input[type=number],input[type=date],input[type=datetime],input[type=datetime-local],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=time],input[type=url],input[type=week],textarea{outline:0}.content-inner{font-family:var(--serifFontFamily);font-size:1em;line-height:1.6875em;position:relative;background-color:var(--background);color:var(--textBody)}.content-inner :is(h1,h2,h3,h4,h5,h6){font-family:var(--sansFontFamily);font-weight:700;line-height:1.5em;word-wrap:break-word;color:var(--textHeaders)}.content-inner h1{font-size:2em;margin:1em 0 .5em}.content-inner h1.signature{margin:0}.content-inner h1.section-heading{margin:1.5em 0 .5em}.content-inner h1 small{font-weight:300}.content-inner h1 .icon-action{font-size:1.2rem;font-weight:400}.content-inner h2{font-size:1.6em;margin:1em 0 .5em;font-weight:700}.content-inner h3{font-size:1.375em;margin:1em 0 .5em;font-weight:700}.content-inner :is(a,.a-main){color:var(--links);text-decoration:underline;text-decoration-color:var(--linksDecoration);text-decoration-skip-ink:auto}.content-inner :is(a:visited,.a-main:visited){color:var(--linksVisited)}.content-inner .icon-action{float:right;color:var(--iconAction);text-decoration:none;border:none;transition:color .3s ease-in-out;background-color:transparent;cursor:pointer}.content-inner button.icon-action{margin-top:12px}.content-inner .icon-action:hover{color:var(--iconActionHover)}.content-inner .icon-action:visited{color:var(--iconAction)}.content-inner .livebook-badge-container{display:flex}.content-inner a.livebook-badge{display:inline-flex}.content-inner .note{color:var(--iconAction);margin-right:5px;font-size:14px;font-weight:400}.content-inner blockquote{border-left:3px solid var(--blockquoteBorder);position:relative;margin:1.5625em 0;padding:0 1.2rem;overflow:auto;background-color:var(--blockquoteBackground);border-radius:var(--borderRadius)}.content-inner blockquote p:last-child{padding-bottom:1em;margin-bottom:0}.content-inner table{margin:2em 0}.content-inner th{text-align:left;font-family:var(--sansFontFamily);text-transform:uppercase;font-weight:700;padding-bottom:.5em}.content-inner tr{border-bottom:1px solid var(--gray50);vertical-align:bottom;height:2.5em}.content-inner :is(td,th){padding-left:1em;line-height:2em;vertical-align:top}.content-inner .section-heading{--icon-size: 16px;--icon-spacing: 5px;display:grid;grid-template:1fr / 1fr}.content-inner .section-heading>:is(.hover-link,.text){grid-row:1;grid-column:1}.content-inner .section-heading .hover-link{text-decoration:none}.content-inner .section-heading i{font-size:var(--icon-size);margin-top:.1em;margin-left:calc(-1 * (var(--icon-size) + var(--icon-spacing)));padding-right:var(--icon-spacing);opacity:0}@media screen and (max-width: 768px){.content-inner .section-heading i{margin-left:calc(-1 * (var(--icon-size)))}}.content-inner blockquote .section-heading i{display:none}.content-inner .section-heading .hover-link:is(:hover,:focus) i{opacity:1}.content-inner .section-heading .text{pointer-events:none}.content-inner .section-heading .text a{pointer-events:all}.content-inner .app-vsn{display:none!important;font-size:.6em;line-height:1.5em}@media screen and (max-width: 768px){.content-inner .app-vsn{display:block!important}}.content-inner img{max-width:100%}.content-inner code{font-family:var(--monoFontFamily);font-style:normal;line-height:24px;font-weight:400}@media screen and (max-width: 768px){.content-inner :is(ol,ul){padding-left:calc(1.5 * var(--content-gutter))}}.content-inner blockquote:is(.warning,.error,.info,.neutral,.tip){color:var(--black);border-radius:10px;border-left:0}.content-inner blockquote.warning{background-color:var(--warningBackground)}.content-inner blockquote.error{background-color:var(--errorBackground)}.content-inner blockquote.info{background-color:var(--infoBackground)}.content-inner blockquote.neutral{background-color:var(--neutralBackground)}.content-inner blockquote.tip{background-color:var(--tipBackground)}.content-inner blockquote :is(h3,h4):is(.warning,.error,.info,.neutral,.tip){color:var(--contrast);margin:0 -1.2rem;padding:.7rem 1.2rem .7rem 3.3rem;font-weight:700;font-style:normal}.content-inner blockquote :is(h3,h4):is(.warning,.error,.info,.neutral,.tip):before{color:var(--contrast);position:absolute;left:1rem;font-size:1.8rem;font-family:remixicon;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.content-inner blockquote :is(h3,h4).warning{background-color:var(--warningHeadingBackground);color:var(--warningHeading)}.content-inner blockquote :is(h3,h4).warning:before{content:var(--icon-error-warning);color:var(--warningHeading)}.content-inner blockquote :is(h3,h4).error{background-color:var(--errorHeadingBackground);color:var(--errorHeading)}.content-inner blockquote :is(h3,h4).error:before{content:var(--icon-error-warning);color:var(--errorHeading)}.content-inner blockquote :is(h3,h4).info{background-color:var(--infoHeadingBackground);color:var(--infoHeading)}.content-inner blockquote :is(h3,h4).info:before{content:var(--icon-information);color:var(--infoHeading)}.content-inner blockquote :is(h3,h4).neutral{background-color:var(--neutralHeadingBackground);color:var(--neutralHeading)}.content-inner blockquote :is(h3,h4).neutral:before{content:var(--icon-double-quotes-l);color:var(--neutralHeading)}.content-inner blockquote :is(h3,h4).tip{background-color:var(--tipHeadingBackground);color:var(--tipHeading)}.content-inner blockquote :is(h3,h4).tip:before{content:var(--icon-information);color:var(--tipHeading)}.content-inner blockquote :is(h3,h4):is(.warning,.error,.info,.neutral,.tip) code{margin:0 .5ch}.content-inner blockquote:is(.warning,.error,.info,.neutral,.tip) code{background-color:var(--admInlineCodeBackground);border:1px solid var(--admInlineCodeBorder);color:var(--admInlineCode)}.content-inner blockquote:is(.warning,.error,.info,.neutral,.tip) pre code{background-color:var(--admCodeBackground);border:1px solid var(--admCodeBorder)}.content-inner blockquote:is(.warning,.error,.info,.neutral,.tip) :is(a,a:visited){color:var(--black)}.content-inner blockquote :is(h3,h4):is(.warning,.error,.info,.neutral,.tip) :is(a,a:visited){color:inherit;text-decoration-color:currentColor}@media screen and (max-width: 768px){.content-inner blockquote:is(.warning,.error,.info,.neutral,.tip){margin-left:calc(-1 * var(--content-gutter));margin-right:calc(-1 * var(--content-gutter));padding-left:var(--content-gutter);padding-right:var(--content-gutter);border-radius:0}.content-inner blockquote :is(h3,h4):is(.warning,.error,.info,.neutral,.tip){margin:0 calc(-1 * var(--content-gutter))}}.content-inner .summary h2{font-weight:700}.content-inner .summary h2 a{text-decoration:none;border:none}.content-inner .summary span.deprecated{color:var(--darkDeprecated);font-weight:400;font-style:italic}.content-inner .summary .summary-row .summary-signature{font-family:var(--monoFontFamily);font-weight:700}.content-inner .summary .summary-row .summary-signature a{text-decoration:none;border:none}.content-inner .summary .summary-row .summary-synopsis{font-family:var(--serifFontFamily);font-style:italic;padding:0 1.2em;margin:0 0 .5em}.content-inner .summary .summary-row .summary-synopsis p{margin:0;padding:0}.content-inner :is(a.no-underline,pre a){color:var(--linksNoUnderline);text-shadow:none;text-decoration:none;background-image:none}.content-inner :is(a.no-underline,pre a):is(:visited,:active,:focus,:hover){color:var(--linksNoUnderlineVisited)}.content-inner code{background-color:var(--codeBackground);vertical-align:baseline;border-radius:2px;padding:.1em .2em;border:1px solid var(--codeBorder);text-transform:none}.content-inner pre{margin:var(--baseLineHeight) 0}.content-inner pre code{display:block;overflow-x:auto;white-space:inherit;padding:.5em 1em}.content-inner pre code::-webkit-scrollbar{width:.4rem;height:.4rem}.content-inner pre code::-webkit-scrollbar-thumb{border-radius:.25rem;background-color:var(--codeScrollThumb)}.content-inner pre code::-webkit-scrollbar-track{background-color:var(--codeScrollBackground)}.content-inner pre code::-webkit-scrollbar-corner{background-color:var(--codeScrollBackground)}.content-inner pre code.output{margin:0 12px;max-height:400px;overflow:auto}.content-inner pre code.output+.copy-button{margin-right:12px}.content-inner pre code.output:before{content:"Output";display:block;position:absolute;top:-16px;left:12px;padding:2px 4px;font-size:12px;font-family:var(--monoFontFamily);line-height:1;color:var(--textHeaders);background-color:var(--codeBackground);border:1px solid var(--codeBorder);border-bottom:0;border-radius:2px}@media screen and (max-width: 768px){.content-inner>pre,.content-inner section>pre{margin-left:calc(-1 * var(--content-gutter));margin-right:calc(-1 * var(--content-gutter))}.content-inner>pre code,.content-inner section>pre code{padding-left:var(--content-gutter);padding-right:var(--content-gutter);border-radius:0;border-left-width:0;border-right-width:0}}@keyframes blink-background{0%{background-color:var(--textDetailBackground)}to{background-color:var(--blink)}}.content-inner .detail:target .detail-header{animation-duration:.55s;animation-name:blink-background;animation-iteration-count:1;animation-timing-function:ease-in-out}.content-inner .detail-header{margin:2em 0 1em;padding:.5em 1em;background-color:var(--textDetailBackground);border-left:3px solid var(--main);font-size:1em;font-family:var(--monoFontFamily);position:relative}.content-inner .detail-header .note{float:right}.content-inner .detail-header .signature{display:inline-block;font-family:var(--monoFontFamily);font-size:1rem;font-weight:700}.content-inner .detail-header:hover a.detail-link,.content-inner .detail-header a.detail-link:focus{opacity:1;text-decoration:none}.content-inner .detail-header a.detail-link{transition:opacity .3s ease-in-out;position:absolute;top:0;left:0;display:block;opacity:0;padding:.6em;line-height:1.5em;margin-left:-2.5em;text-decoration:none;border:none}@media screen and (max-width: 768px){.content-inner .detail-header a.detail-link{margin-left:-30px}}.content-inner .specs pre{font-family:var(--monoFontFamily);font-size:.9em;font-style:normal;line-height:24px;white-space:pre-wrap;margin:0;padding:0}.content-inner .specs .attribute{color:var(--fnSpecAttr)}.content-inner .docstring{margin:1.2em 0 3em 1.2em}@media screen and (max-width: 768px){.content-inner .docstring{margin-left:0}}.content-inner .docstring:is(h2,h3,h4,h5){font-weight:700}.content-inner .docstring h2{font-size:1.1em}.content-inner .docstring h3{font-size:1em}.content-inner .docstring h4{font-size:.95em}.content-inner .docstring h5{font-size:.9em}.content-inner div.deprecated{display:block;padding:9px 15px;background-color:var(--fnDeprecated)}.content-inner .footer{margin:4em auto 1em;text-align:center;font-style:italic;font-size:14px}.content-inner .footer,.content-inner .footer :is(a,.footer-button){color:var(--textFooter)}.content-inner .footer .line{display:inline-block}.content-inner .footer .footer-button{background-color:transparent;border:0;cursor:pointer;font-style:italic;padding:0 4px}.content-inner .footer .footer-hex-package{margin-right:4px}.content-inner .bottom-actions{display:flex;justify-content:space-between;margin-top:4em}.content-inner .bottom-actions .bottom-actions-button{display:flex;text-decoration:none;flex-direction:column;border-radius:var(--borderRadius);border:1px solid var(--bottomActionsBtnBorder);padding:8px 16px;min-width:150px}.content-inner .bottom-actions .bottom-actions-button .subheader{font-size:.8em;color:var(--bottomActionsBtnSubheader);white-space:nowrap}.content-inner .bottom-actions .bottom-actions-button[rel=prev] .subheader{text-align:right}@media screen and (max-width: 768px){.content-inner .bottom-actions{flex-direction:column-reverse}.content-inner .bottom-actions .bottom-actions-item:not(:first-child){margin-bottom:16px}}.page-cheatmd .content-inner{--horizontal-space: 1.5em;--vertical-space: 1em}@media (max-width: 600px){.page-cheatmd .content-inner{--horizontal-space: 1em;--vertical-space: .75em}}.page-cheatmd .content-inner{max-width:1200px}.page-cheatmd .content-inner h1{margin-bottom:var(--vertical-space)}.page-cheatmd .content-inner h2{margin:var(--vertical-space) 0;column-span:all;color:var(--gray700);font-weight:500}.page-cheatmd.dark .content-inner h2{color:var(--gray200)}.page-cheatmd .content-inner h3{color:var(--main);text-decoration-color:var(--main);margin:0 0 1em;font-weight:400}.page-cheatmd .content-inner h3 :is(a,a:visited){color:var(--main);text-decoration-color:var(--main)}.page-cheatmd .content-inner section.h3{min-width:300px;margin:0;padding:0 0 calc(var(--vertical-space) * 2) 0;break-inside:avoid}.page-cheatmd .content-inner h3 .text{overflow:hidden}.page-cheatmd .content-inner h3 .text:after{content:"";margin-left:calc(var(--horizontal-space) / 2);vertical-align:baseline;display:inline-block;width:100%;height:1px;margin-right:-100%;margin-bottom:5px;background-color:var(--codeBorder)}.page-cheatmd .content-inner h4{display:block;margin:0;padding:.25em var(--horizontal-space);font-weight:400;background:var(--gray100);color:#567;border:solid 1px 1px 0 1px var(--gray100)}.page-cheatmd.dark .content-inner h4{background:#192f50;color:var(--textBody);border:1px solid #192f50;border-bottom:0}.page-cheatmd .content-inner .h2 p{margin:0;display:block;background:var(--gray50);padding:var(--vertical-space) var(--horizontal-space)}.page-cheatmd.dark .content-inner .h2 p{background:var(--gray700)}.page-cheatmd .content-inner .h2 p>code{color:#eb5757;border-radius:var(--borderRadius);padding:.2em .4em}.page-cheatmd .content-inner pre code{padding:var(--vertical-space) var(--horizontal-space)}.page-cheatmd .content-inner pre code::-webkit-scrollbar{width:.4rem;height:.6rem}.page-cheatmd .content-inner .h2 pre{margin:0}.page-cheatmd .content-inner .h2 pre+pre{margin-top:-1px}.page-cheatmd .content-inner pre.wrap{white-space:break-spaces}@media screen and (max-width: 768px){.page-cheatmd .content-inner pre code{border-left-width:1px!important;border-right-width:1px!important}}.page-cheatmd .content-inner .h2 table{display:table;box-sizing:border-box;width:100%;border-collapse:collapse;margin:0}.page-cheatmd .content-inner .h2 th{padding:var(--vertical-space) var(--horizontal-space);line-height:inherit;margin-bottom:-1px;vertical-align:middle;border-bottom:1px solid var(--codeBorder)}.page-cheatmd .content-inner .h2 td{padding:var(--vertical-space) var(--horizontal-space);border:0;border-bottom:1px solid var(--codeBorder)}.page-cheatmd .content-inner .h2 tr:first-child{border-top:1px solid var(--codeBorder)}.page-cheatmd .content-inner .h2 td code{color:#eb5757;border-radius:var(--borderRadius);padding:.2em .4em}.page-cheatmd .content-inner .h2 thead{background-color:var(--gray50)}.page-cheatmd.dark .content-inner .h2 thead{background-color:var(--gray700)}.page-cheatmd .content-inner .h2 tbody{background-color:var(--codeBackground)}.page-cheatmd .content-inner .h2 :is(ul,ol){margin:0;padding:0}.page-cheatmd .content-inner .h2 li{list-style-position:inside;padding:.5em var(--horizontal-space);line-height:2em;vertical-align:middle;background-color:var(--codeBackground);border-bottom:1px solid var(--codeBorder)}.page-cheatmd .content-inner .h2 :is(ul,ol)+pre code{border-top:0}.page-cheatmd .content-inner .h2 li>code{color:#eb5757;border-radius:var(--borderRadius);padding:.2em .4em}.page-cheatmd .content-inner section.width-50{display:block;width:50%;margin:0}.page-cheatmd .content-inner section.width-50>section>table{width:100%}.page-cheatmd .content-inner section:is(.col-2,.col-2-left,.col-3){column-gap:40px}.page-cheatmd .content-inner section.col-2{column-count:2;height:auto}.page-cheatmd .content-inner section.col-2-left{display:grid;grid-template-columns:calc(100% / 3) auto}.page-cheatmd .content-inner section.col-2-left>h2{grid-column-end:span 2}.page-cheatmd .content-inner section.col-3{column-count:3;height:auto}.page-cheatmd .content-inner section.list-4>ul{display:flex;flex-wrap:wrap}.page-cheatmd .content-inner section.list-4>ul>li{flex:0 0 25%}.page-cheatmd .content-inner section.list-6>ul{display:flex;flex-wrap:wrap}.page-cheatmd .content-inner section.list-6>ul>li{flex:0 0 calc(100% / 6)}@media screen and (max-width: 1400px){.page-cheatmd .content-inner section.col-3{column-count:2}.page-cheatmd .content-inner section.col-2-left{display:flex;flex-direction:column}}@media screen and (max-width: 1200px){.page-cheatmd .content-inner section:is(.col-2,.col-3){display:flex;flex-direction:column}.page-cheatmd .content-inner section.list-6>ul>li{flex:0 0 25%}}@media screen and (max-width: 1000px){.page-cheatmd .content-inner section:is(.list-4,.list-6)>ul>li{flex:0 0 calc(100% / 3)}}@media screen and (max-width: 600px){.page-cheatmd .content-inner section:is(.list-4,.list-6)>ul>li{flex:0 0 50%}.page-cheatmd .content-inner section.width-50{width:100%}}#search{min-height:200px;position:relative}#search .loading{height:64px;width:64px;position:absolute;top:50%;left:calc(50% - 32px)}#search .loading div{box-sizing:border-box;display:block;position:absolute;width:51px;height:51px;margin:6px;border:6px solid var(--coldGray);border-radius:50%;animation:loading 1.2s cubic-bezier(.5,0,.5,1) infinite;border-color:var(--coldGray) transparent transparent transparent}#search .loading div:nth-child(1){animation-delay:-.45s}#search .loading div:nth-child(2){animation-delay:-.3s}#search .loading div:nth-child(3){animation-delay:-.15s}@keyframes loading{0%{transform:rotate(0)}to{transform:rotate(360deg)}}#search .result{margin:2em 0 2.5em}#search .result p{margin:0}#search .result-id{font-size:1.4em;margin:0}#search .result-id a{text-decoration:none;transition:color .1s ease-in-out;color:var(--links)}#search .result-id a:is(:visited,:active,:focus){color:var(--linksVisited)}#search .result-id a:hover{color:var(--main)}#search :is(.result-id,.result-elem) em{font-style:normal;color:var(--main)}#search .result-id small{font-weight:400}@keyframes keyboard-shortcuts-show{0%{opacity:0}to{opacity:1}}.modal{animation-duration:.15s;animation-name:keyboard-shortcuts-show;animation-iteration-count:1;animation-timing-function:ease-in-out;display:none;background-color:#000000bf;position:fixed;inset:0;z-index:300}.modal.shown{display:block}.modal .modal-contents{margin:75px auto 0;max-width:500px;background-color:var(--modalBackground);border-radius:var(--borderRadius);box-shadow:2px 2px 8px #0003;padding:25px 35px 35px}@media screen and (max-width: 768px){.modal .modal-contents{padding:20px}}.modal .modal-header{display:flex;align-items:start}.modal .modal-title{display:inline-block;flex-grow:1;font-size:1.2rem;font-weight:700;margin-bottom:20px}.modal .modal-title button{border:none;background-color:transparent;color:var(--textHeaders);font-weight:700;margin-right:30px;padding-left:0;text-align:left;transition:color .15s}.modal .modal-title button:hover{color:var(--main);cursor:pointer}.modal .modal-title button.active{color:var(--main)}.modal .modal-close{cursor:pointer;display:block;font-size:1.5rem;margin:-8px -8px 0 0;padding:8px;opacity:.7;background-color:transparent;color:var(--textHeaders);border:none;transition:opacity .15s}.modal .modal-close:hover{opacity:1}#keyboard-shortcuts-content dl.shortcut-row{display:flex;align-items:center;justify-content:space-between;margin:0;padding:6px 0 8px;border-bottom:1px solid var(--settingsSectionBorder)}#keyboard-shortcuts-content dl.shortcut-row:last-of-type{border-bottom-style:none}#keyboard-shortcuts-content dl.shortcut-row:first-child{padding-top:0}#keyboard-shortcuts-content :is(.shortcut-keys,.shortcut-description){display:inline-block}#keyboard-shortcuts-content kbd>kbd{background-color:var(--settingsInputBorder);color:var(--contrast);border-radius:var(--borderRadius);font-family:inherit;font-weight:700;display:inline-block;line-height:1;padding:4px 7px 6px;min-width:26px;text-align:center}#keyboard-shortcuts-content :is(.shortcut-keys,.shortcut-description){margin:0}#quick-switch-modal-body{width:100%;position:relative}#quick-switch-modal-body .ri-search-2-line{position:absolute;left:0;top:0;padding:4px 10px;color:var(--quickSwitchContour);font-weight:700}#quick-switch-modal-body #quick-switch-input{width:100%;padding:8px 6px 8px 38px;border:none;color:var(--quickSwitchInput);background-color:transparent;border-bottom:1px solid var(--quickSwitchContour);box-sizing:border-box;transition:all .12s ease-out}#quick-switch-modal-body #quick-switch-results{margin:0}#quick-switch-modal-body .quick-switch-result{padding:2px 5px;border-bottom:1px dotted var(--quickSwitchContour);transition:all .12s ease-out}#quick-switch-modal-body .quick-switch-result:last-child{border-bottom:none}#quick-switch-modal-body .quick-switch-result:hover{cursor:pointer}#quick-switch-modal-body .quick-switch-result:is(:hover,.selected){border-left:4px solid var(--main);background-color:var(--codeBackground)}.autocomplete{display:none;height:0;margin:0 5px 0 12px;overflow:visible;position:relative;width:100%}.autocomplete.shown{display:block}.autocomplete-suggestions{box-shadow:2px 2px 10px #00000040;background-color:var(--gray700);border-top:1px solid var(--gray800);left:0;position:absolute;top:-2px;width:276px;z-index:200}.autocomplete-suggestion{color:inherit;display:block;padding:10px;text-decoration:none}.autocomplete-suggestion:hover,.autocomplete-suggestion.selected{background-color:var(--gray600);border-left:3px solid var(--main)}.autocomplete-suggestion em{font-style:normal;font-weight:700}.autocomplete-suggestion .description{opacity:.6;padding-top:3px}.autocomplete-suggestion .label{padding-left:2px;opacity:.75}.autocomplete-suggestion .title,.autocomplete-suggestion .description{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%}#tooltip{box-shadow:0 0 10px var(--black-opacity-10);max-height:300px;max-width:500px;padding:0;position:absolute;pointer-events:none;margin:0;z-index:99;top:0;left:0;visibility:hidden;transform:translateY(20px);opacity:0;transition:.2s visibility ease-out,.2s transform ease-out,.2s opacity ease-out}#tooltip.tooltip-shown{visibility:visible;transform:translateY(0);opacity:1}#tooltip .tooltip-body{border:1px solid var(--codeBorder)}#tooltip .tooltip-body .signature{min-width:320px;width:100%}#tooltip .tooltip-body .detail-header{border-left:0;margin-bottom:0;margin-top:0}#tooltip .tooltip-body .docstring{background-color:var(--background);padding:1.2em;margin:0;width:498px}#tooltip .tooltip-body .docstring-plain{max-width:498px;width:auto}#tooltip .tooltip-body .version-info{float:right;line-height:1.6rem;font-family:var(--monoFontFamily);font-size:.9rem;font-weight:400;margin-bottom:-6px;opacity:.3;padding-left:.3em}pre{position:relative}pre:hover .copy-button,pre .copy-button:focus{opacity:1}.copy-button{display:flex;opacity:0;position:absolute;top:5px;right:5px;padding:4px;background-color:var(--codeBackground);border:none;cursor:pointer;transition:all .15s;font-family:var(--serifFontFamily);font-size:14px;line-height:24px;color:currentColor}.copy-button svg{opacity:.5;transition:all .15s}pre .copy-button:hover svg,pre .copy-button:focus-visible svg{opacity:1}.copy-button svg{width:20px}.copy-button.clicked{opacity:1;color:var(--success)}.copy-button.clicked svg{display:none;color:currentColor}#settings-modal-content{margin-top:10px}#settings-modal-content .hidden{display:none}#settings-modal-content .input{box-sizing:border-box;width:80%;padding:8px;font-size:14px;background-color:var(--settingsInputBackground);color:var(--settingsInput);border:1px solid var(--settingsInputBorder);border-radius:8px;transition:border-color .15s}#settings-modal-content .input:focus{border-color:var(--main)}#settings-modal-content .input::placeholder{color:var(--gray400)}#settings-modal-content .switch-button-container{display:flex;align-items:center;justify-content:space-between;border-top:1px solid var(--settingsSectionBorder);padding:10px 0}#settings-modal-content .switch-button-container:first-of-type{border-top-style:none;padding-top:0}#settings-modal-content .switch-button-container>div>span{font-size:18px}#settings-modal-content .switch-button-container>div>p{font-size:14px;font-weight:300;line-height:1.4;margin:0;padding-bottom:6px;padding-right:10px}#settings-modal-content .switch-button{position:relative;display:inline-block;flex-shrink:0;width:40px;height:20px;user-select:none;transition:all .15s}#settings-modal-content .switch-button__checkbox{appearance:none;position:absolute;display:block;width:20px;height:20px;border-radius:1000px;background-color:#91a4b7;border:3px solid #e5edf5;cursor:pointer;transition:all .3s}#settings-modal-content .switch-button__bg{display:block;width:100%;height:100%;border-radius:1000px;background-color:#e5edf5;cursor:pointer;transition:all .3s}#settings-modal-content .switch-button__checkbox:checked{background-color:#fff;border-color:var(--main);transform:translate(100%)}#settings-modal-content .switch-button__checkbox:checked+.switch-button__bg{background-color:var(--main)}#settings-modal-content .switch-button__checkbox:focus{outline:0}#settings-modal-content .switch-button__checkbox:focus+.switch-button__bg{outline:2px solid var(--main);outline-offset:2px}#settings-modal-content .switch-button__checkbox:focus:not(:focus-visible)+.switch-button__bg{outline:0}#settings-modal-content .settings-select{cursor:pointer;position:relative;border:none;background-color:transparent;color:var(--textBody)}#settings-modal-content .settings-select option{color:initial}#toast{opacity:0;position:fixed;z-index:1;left:50%;bottom:1rem;min-width:3rem;margin:0 -1.2rem;padding:.7rem 1.2rem;text-align:center;font-weight:700;border-radius:10px;border:1px solid var(--codeBorder);background-color:var(--codeBackground);color:var(--textBody);transition:opacity .4s ease-in-out,transform .3s ease-out;cursor:default}#toast.show{opacity:1;transform:translateY(-.75rem)}@media (prefers-reduced-motion: reduce){#toast{transition:none}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0;user-select:none}@media print{.main{display:block}.sidebar,.sidebar-button{display:none}.content{padding-left:0;overflow:visible;left:0;width:100%}.summary-row{break-inside:avoid}#toast,.content-inner .section-heading a.hover-link,.content-inner button.icon-action,.content-inner a.icon-action,.content-inner .bottom-actions{display:none}.footer p:first-of-type{display:none}.content-inner blockquote:is(.warning,.error,.info,.neutral,.tip){border:2px solid var(--gray400)}.content-inner blockquote :is(h3,h4):is(.warning,.error,.info,.neutral,.tip){color:var(--textHeaders);border-bottom:2px solid var(--gray400)}.content-inner pre code.makeup{border-color:var(--gray400);white-space:break-spaces;break-inside:avoid}.content-inner blockquote code.inline,.content-inner code.inline{border-color:var(--gray400)}}@media print{.page-cheatmd .content-inner *{background-color:transparent!important;border-color:var(--gray400)!important}.page-cheatmd .content-inner{max-width:100%;width:100%;padding:0;font-size:.7em}.page-cheatmd .content-inner section:is(.col-2,.col-2-left,.col-3){column-gap:30px}.page-cheatmd .content-inner section.col-2{column-count:2}.page-cheatmd .content-inner section.col-2-left{display:grid}.page-cheatmd .content-inner section.col-3{column-count:3}.page-cheatmd .content-inner h1{margin-top:0;margin-bottom:.5em}.page-cheatmd .content-inner h2.section-heading{font-weight:700;margin-top:1em;column-span:all}.page-cheatmd .content-inner section.h2{break-inside:avoid}.page-cheatmd .content-inner h3{font-weight:700;color:var(--main-darkened-10)}.page-cheatmd .content-inner h3:after{height:2px;background-color:var(--gray400)}.page-cheatmd .content-inner section.h3{min-width:300px;break-inside:avoid}.page-cheatmd .content-inner h4{padding:.5em 0;border:none;font-weight:700;color:#000}.page-cheatmd .content-inner .h2 p{padding-left:0;padding-right:0;border:none!important}.page-cheatmd .content-inner code{line-height:1.5em}.page-cheatmd .content-inner .h2 table{font-variant-numeric:tabular-nums;break-inside:avoid}.page-cheatmd .content-inner .h2 :is(th,td){vertical-align:top;padding-left:0;padding-right:0}.page-cheatmd .content-inner .h2 thead{border-style:solid none;border-width:1px}.page-cheatmd .content-inner .h2 tr{border-bottom:none}.page-cheatmd .content-inner .h2 th{font-weight:700}.page-cheatmd .content-inner .h2 li{padding-left:0;padding-right:0;vertical-align:middle;border-bottom:none}.page-cheatmd .content-inner pre:hover button.copy-button,.page-cheatmd .content-inner div#tooltip{display:none}.page-cheatmd .content-inner footer p:not(.built-using){display:none}}code.makeup .unselectable{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.makeup .hll{background-color:#ffc}.makeup .bp{color:#3465a4}.makeup .c,.makeup .c1,.makeup .ch,.makeup .cm,.makeup .cp,.makeup .cpf,.makeup .cs{color:#4d4d4d}.makeup .dl{color:#408200}.makeup .err{color:#a40000;border:#ef2929}.makeup .fm,.makeup .g{color:#4d4d4c}.makeup .gd{color:#a40000}.makeup .ge{color:#4d4d4c;font-style:italic}.makeup .gh{color:navy;font-weight:700}.makeup .gi{color:#00a000}.makeup .go{color:#4d4d4c;font-style:italic}.makeup .gp{color:#4d4d4d}.makeup .gr{color:#ef2929}.makeup .gs{color:#4d4d4c;font-weight:700}.makeup .gt{color:#a40000;font-weight:700}.makeup .gu{color:purple;font-weight:700}.makeup .il{color:#0000cf;font-weight:700}.makeup .k,.makeup .kc,.makeup .kd,.makeup .kn,.makeup .kp,.makeup .kr,.makeup .kt{color:#204a87}.makeup .l{color:#4d4d4c}.makeup .ld{color:#c00}.makeup .m,.makeup .mb,.makeup .mf,.makeup .mh,.makeup .mi,.makeup .mo{color:#2937ab}.makeup .n{color:#4d4d4c}.makeup .na{color:#8a7000}.makeup .nb{color:#204a87}.makeup .nc{color:#0000cf}.makeup .nd{color:#5c35cc;font-weight:700}.makeup .ne{color:#c00;font-weight:700}.makeup .nf{color:#b65800}.makeup .ni{color:#bc5400}.makeup .nl{color:#b65800}.makeup .nn{color:#4d4d4c}.makeup .no{color:#a06600}.makeup .nt{color:#204a87;font-weight:700}.makeup .nv,.makeup .nx{color:#4d4d4c}.makeup .o{color:#bc5400}.makeup .ow{color:#204a87}.makeup .p,.makeup .py{color:#4d4d4c}.makeup .s,.makeup .s1,.makeup .s2,.makeup .sa,.makeup .sb,.makeup .sc{color:#408200}.makeup .sd{color:#8f5902;font-style:italic}.makeup .se{color:#204a87}.makeup .sh{color:#408200}.makeup .si{color:#204a87}.makeup .sr{color:#c00}.makeup .ss{color:#a06600}.makeup .sx{color:#408200}.makeup .vc,.makeup .vg,.makeup .vi,.makeup .vm,.makeup .x{color:#4d4d4c}.dark .makeup{color:#dce1e6}.dark .makeup .hll{background-color:#49483e}.dark .makeup .bp{color:#dce1e6}.dark .makeup .c,.dark .makeup .c1,.dark .makeup .ch,.dark .makeup .cm,.dark .makeup .cp,.dark .makeup .cpf,.dark .makeup .cs{color:#969386}.dark .makeup .dl{color:#e6db74}.dark .makeup .err{color:#960050;background-color:#1e0010}.dark .makeup .fm{color:#a6e22e}.dark .makeup .gd{color:#ff5385}.dark .makeup .ge{font-style:italic}.dark .makeup .gi{color:#a6e22e}.dark .makeup .gp{color:#969386}.dark .makeup .gs{font-weight:700}.dark .makeup .gu{color:#969386}.dark .makeup .gt{color:#ff5385;font-weight:700}.dark .makeup .il{color:#ae81ff}.dark .makeup .k,.dark .makeup .kc,.dark .makeup .kd{color:#66d9ef}.dark .makeup .kn{color:#ff5385}.dark .makeup .kp,.dark .makeup .kr,.dark .makeup .kt{color:#66d9ef}.dark .makeup .l,.dark .makeup .ld,.dark .makeup .m,.dark .makeup .mb,.dark .makeup .mf,.dark .makeup .mh,.dark .makeup .mi,.dark .makeup .mo{color:#ae81ff}.dark .makeup .n{color:#dce1e6}.dark .makeup .na{color:#a6e22e}.dark .makeup .nb{color:#dce1e6}.dark .makeup .nc,.dark .makeup .nd,.dark .makeup .ne,.dark .makeup .nf{color:#a6e22e}.dark .makeup .ni,.dark .makeup .nl,.dark .makeup .nn{color:#dce1e6}.dark .makeup .no{color:#66d9ef}.dark .makeup .nt{color:#ff5385}.dark .makeup .nv{color:#dce1e6}.dark .makeup .nx{color:#a6e22e}.dark .makeup .o,.dark .makeup .ow{color:#ff5385}.dark .makeup .p,.dark .makeup .py{color:#dce1e6}.dark .makeup .s,.dark .makeup .s1,.dark .makeup .s2,.dark .makeup .sa,.dark .makeup .sb,.dark .makeup .sc,.dark .makeup .sd{color:#e6db74}.dark .makeup .se{color:#ae81ff}.dark .makeup .sh,.dark .makeup .si,.dark .makeup .sr,.dark .makeup .ss,.dark .makeup .sx{color:#e6db74}.dark .makeup .vc,.dark .makeup .vg,.dark .makeup .vi,.dark .makeup .vm{color:#dce1e6}.tabset{--borderWidth: 1px;--tabsetPadding: var(--baseLineHeight);margin:var(--baseLineHeight) 0}.tabset-tablist{display:flex;overflow-x:auto}.tabset-tab{padding:.6rem var(--tabsetPadding);min-height:46px;font-family:var(--sansFontFamily);background-color:var(--tabBackground);color:var(--tab);border:var(--borderWidth) solid var(--tabBorder);margin-right:calc(-1 * var(--borderWidth));border-top-width:4px;border-top-color:var(--tabBorderTop);border-radius:0;border-top-left-radius:var(--borderRadius);border-top-right-radius:var(--borderRadius);box-shadow:0 -3px 4px var(--tabShadow) inset;cursor:pointer}.tabset-tab[aria-selected=true]{border-bottom-color:var(--tabBackground);border-top-color:var(--main-lightened-05);box-shadow:none}.tabset-tab[aria-selected=true]:focus-visible{background-color:var(--main-lightened-05);border-color:var(--main-lightened-05);border-top-color:var(--main);color:var(--white)}.tabset-panel{padding:0 var(--tabsetPadding);border:var(--borderWidth) solid var(--tabBorder);margin-top:calc(-1 * var(--borderWidth));border-bottom-left-radius:var(--borderRadius);border-bottom-right-radius:var(--borderRadius)}@media screen and (max-width: 768px){.tabset{--tabsetPadding: calc(var(--baseLineHeight) / 2)}.tabset-panel{padding-top:calc(var(--tabsetPadding) / 2);padding-bottom:calc(var(--tabsetPadding) / 2)}.tabset-panel pre{margin-left:calc(-1 * var(--tabsetPadding));margin-right:calc(-1 * var(--tabsetPadding))}.tabset-panel>pre code{border-left-width:0;border-right-width:0}}body:not(.dark) .content-inner img[src*="#gh-dark-mode-only"],body.dark .content-inner img[src*="#gh-light-mode-only"]{display:none} +/*! Bundled license information: + +normalize.css/normalize.css: + (*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css *) +*/ diff --git a/docs/dist/inconsolata-latin-400-normal-RGKDDNDD.woff2 b/docs/dist/inconsolata-latin-400-normal-RGKDDNDD.woff2 new file mode 100644 index 0000000..6119e59 Binary files /dev/null and b/docs/dist/inconsolata-latin-400-normal-RGKDDNDD.woff2 differ diff --git a/docs/dist/inconsolata-latin-700-normal-DTS2D7TO.woff2 b/docs/dist/inconsolata-latin-700-normal-DTS2D7TO.woff2 new file mode 100644 index 0000000..010da61 Binary files /dev/null and b/docs/dist/inconsolata-latin-700-normal-DTS2D7TO.woff2 differ diff --git a/docs/dist/inconsolata-latin-ext-400-normal-K7HVGTP7.woff2 b/docs/dist/inconsolata-latin-ext-400-normal-K7HVGTP7.woff2 new file mode 100644 index 0000000..50cb547 Binary files /dev/null and b/docs/dist/inconsolata-latin-ext-400-normal-K7HVGTP7.woff2 differ diff --git a/docs/dist/inconsolata-latin-ext-700-normal-4MPBLFZC.woff2 b/docs/dist/inconsolata-latin-ext-700-normal-4MPBLFZC.woff2 new file mode 100644 index 0000000..8a20d54 Binary files /dev/null and b/docs/dist/inconsolata-latin-ext-700-normal-4MPBLFZC.woff2 differ diff --git a/docs/dist/inconsolata-vietnamese-400-normal-IGQPHHJH.woff2 b/docs/dist/inconsolata-vietnamese-400-normal-IGQPHHJH.woff2 new file mode 100644 index 0000000..ab70f18 Binary files /dev/null and b/docs/dist/inconsolata-vietnamese-400-normal-IGQPHHJH.woff2 differ diff --git a/docs/dist/inconsolata-vietnamese-700-normal-LHEGSN35.woff2 b/docs/dist/inconsolata-vietnamese-700-normal-LHEGSN35.woff2 new file mode 100644 index 0000000..a814008 Binary files /dev/null and b/docs/dist/inconsolata-vietnamese-700-normal-LHEGSN35.woff2 differ diff --git a/docs/dist/lato-latin-300-normal-YUMVEFOL.woff2 b/docs/dist/lato-latin-300-normal-YUMVEFOL.woff2 new file mode 100644 index 0000000..aad98a3 Binary files /dev/null and b/docs/dist/lato-latin-300-normal-YUMVEFOL.woff2 differ diff --git a/docs/dist/lato-latin-400-normal-W7754I4D.woff2 b/docs/dist/lato-latin-400-normal-W7754I4D.woff2 new file mode 100644 index 0000000..ff60934 Binary files /dev/null and b/docs/dist/lato-latin-400-normal-W7754I4D.woff2 differ diff --git a/docs/dist/lato-latin-700-normal-2XVSBPG4.woff2 b/docs/dist/lato-latin-700-normal-2XVSBPG4.woff2 new file mode 100644 index 0000000..11de83f Binary files /dev/null and b/docs/dist/lato-latin-700-normal-2XVSBPG4.woff2 differ diff --git a/docs/dist/lato-latin-ext-300-normal-VPGGJKJL.woff2 b/docs/dist/lato-latin-ext-300-normal-VPGGJKJL.woff2 new file mode 100644 index 0000000..486d3ec Binary files /dev/null and b/docs/dist/lato-latin-ext-300-normal-VPGGJKJL.woff2 differ diff --git a/docs/dist/lato-latin-ext-400-normal-N27NCBWW.woff2 b/docs/dist/lato-latin-ext-400-normal-N27NCBWW.woff2 new file mode 100644 index 0000000..edb9fa6 Binary files /dev/null and b/docs/dist/lato-latin-ext-400-normal-N27NCBWW.woff2 differ diff --git a/docs/dist/lato-latin-ext-700-normal-Q2L5DVMW.woff2 b/docs/dist/lato-latin-ext-700-normal-Q2L5DVMW.woff2 new file mode 100644 index 0000000..2c8aaa8 Binary files /dev/null and b/docs/dist/lato-latin-ext-700-normal-Q2L5DVMW.woff2 differ diff --git a/docs/dist/merriweather-cyrillic-300-italic-M6KMXZSZ.woff2 b/docs/dist/merriweather-cyrillic-300-italic-M6KMXZSZ.woff2 new file mode 100644 index 0000000..71e8f7e Binary files /dev/null and b/docs/dist/merriweather-cyrillic-300-italic-M6KMXZSZ.woff2 differ diff --git a/docs/dist/merriweather-cyrillic-300-normal-7PAAHU3N.woff2 b/docs/dist/merriweather-cyrillic-300-normal-7PAAHU3N.woff2 new file mode 100644 index 0000000..11d8cdd Binary files /dev/null and b/docs/dist/merriweather-cyrillic-300-normal-7PAAHU3N.woff2 differ diff --git a/docs/dist/merriweather-cyrillic-ext-300-italic-JP3ZEV2P.woff2 b/docs/dist/merriweather-cyrillic-ext-300-italic-JP3ZEV2P.woff2 new file mode 100644 index 0000000..0bc4aac Binary files /dev/null and b/docs/dist/merriweather-cyrillic-ext-300-italic-JP3ZEV2P.woff2 differ diff --git a/docs/dist/merriweather-cyrillic-ext-300-normal-5LF5LCEK.woff2 b/docs/dist/merriweather-cyrillic-ext-300-normal-5LF5LCEK.woff2 new file mode 100644 index 0000000..8874d2c Binary files /dev/null and b/docs/dist/merriweather-cyrillic-ext-300-normal-5LF5LCEK.woff2 differ diff --git a/docs/dist/merriweather-latin-300-italic-353COS6Q.woff2 b/docs/dist/merriweather-latin-300-italic-353COS6Q.woff2 new file mode 100644 index 0000000..0c7b8ed Binary files /dev/null and b/docs/dist/merriweather-latin-300-italic-353COS6Q.woff2 differ diff --git a/docs/dist/merriweather-latin-300-normal-RWDJH4FN.woff2 b/docs/dist/merriweather-latin-300-normal-RWDJH4FN.woff2 new file mode 100644 index 0000000..a119883 Binary files /dev/null and b/docs/dist/merriweather-latin-300-normal-RWDJH4FN.woff2 differ diff --git a/docs/dist/merriweather-latin-ext-300-italic-MWCA36KE.woff2 b/docs/dist/merriweather-latin-ext-300-italic-MWCA36KE.woff2 new file mode 100644 index 0000000..8a6b26f Binary files /dev/null and b/docs/dist/merriweather-latin-ext-300-italic-MWCA36KE.woff2 differ diff --git a/docs/dist/merriweather-latin-ext-300-normal-K6L27CZ5.woff2 b/docs/dist/merriweather-latin-ext-300-normal-K6L27CZ5.woff2 new file mode 100644 index 0000000..ff2d483 Binary files /dev/null and b/docs/dist/merriweather-latin-ext-300-normal-K6L27CZ5.woff2 differ diff --git a/docs/dist/merriweather-vietnamese-300-italic-EHHNZPUO.woff2 b/docs/dist/merriweather-vietnamese-300-italic-EHHNZPUO.woff2 new file mode 100644 index 0000000..ff20a5b Binary files /dev/null and b/docs/dist/merriweather-vietnamese-300-italic-EHHNZPUO.woff2 differ diff --git a/docs/dist/merriweather-vietnamese-300-normal-U376L4Z4.woff2 b/docs/dist/merriweather-vietnamese-300-normal-U376L4Z4.woff2 new file mode 100644 index 0000000..b250a2d Binary files /dev/null and b/docs/dist/merriweather-vietnamese-300-normal-U376L4Z4.woff2 differ diff --git a/docs/dist/remixicon-NKANDIL5.woff2 b/docs/dist/remixicon-NKANDIL5.woff2 new file mode 100644 index 0000000..57e6c7c Binary files /dev/null and b/docs/dist/remixicon-NKANDIL5.woff2 differ diff --git a/docs/dist/search_data-2A7D3E4D.js b/docs/dist/search_data-2A7D3E4D.js new file mode 100644 index 0000000..bcb4c44 --- /dev/null +++ b/docs/dist/search_data-2A7D3E4D.js @@ -0,0 +1 @@ +searchData={"items":[{"type":"module","title":"packbeam","doc":"An escript and OTP library used to generate an AtomVM AVM file from a set of files (beam files, previously built AVM files, or even arbitrary data files).","ref":"packbeam.html"},{"type":"function","title":"packbeam.create/2","doc":"Deprecated. Use the packbeam_api module, instead.","ref":"packbeam.html#create/2"},{"type":"function","title":"packbeam.create/4","doc":"Deprecated. Use the packbeam_api module, instead.","ref":"packbeam.html#create/4"},{"type":"function","title":"packbeam.delete/3","doc":"Deprecated. Use the packbeam_api module, instead.","ref":"packbeam.html#delete/3"},{"type":"function","title":"packbeam.list/1","doc":"Deprecated. Use the packbeam_api module, instead.","ref":"packbeam.html#list/1"},{"type":"function","title":"packbeam.main/1","doc":null,"ref":"packbeam.html#main/1"},{"type":"module","title":"packbeam_api","doc":"A library used to generate an AtomVM AVM file from a set of files (beam files, previously built AVM files, or even arbitrary data files).","ref":"packbeam_api.html"},{"type":"function","title":"packbeam_api.create/2","doc":"Create an AVM file. Equivalent to create(OutputPath, InputPaths, DefaultOptions) where DefaultOptions is #{ prune => false, start_module => undefined, application_module => undefined, include_lines => false }","ref":"packbeam_api.html#create/2"},{"type":"function","title":"packbeam_api.create/3","doc":"Create an AVM file. This function will create an AVM file at the location specified in OutputPath, using the input files specified in InputPaths.","ref":"packbeam_api.html#create/3"},{"type":"function","title":"packbeam_api.create/4","doc":null,"ref":"packbeam_api.html#create/4"},{"type":"function","title":"packbeam_api.create/5","doc":null,"ref":"packbeam_api.html#create/5"},{"type":"function","title":"packbeam_api.delete/3","doc":"Delete selected elements of an AVM file. This function will delete elements of an AVM file at the location specified in InputPath, specified by the supplied list of names. The output AVM file is written to OutputPath, which may be the same as InputPath.","ref":"packbeam_api.html#delete/3"},{"type":"function","title":"packbeam_api.extract/3","doc":"Extract all or selected elements from an AVM file. This function will extract elements of an AVM file at the location specified in InputPath, specified by the supplied list of names. The elements from the input AVM file will be written into the specified output directory, creating any subdirectories if the AVM file elements contain path information.","ref":"packbeam_api.html#extract/3"},{"type":"function","title":"packbeam_api.get_element_data/1","doc":"Return AVM element data.","ref":"packbeam_api.html#get_element_data/1"},{"type":"function","title":"packbeam_api.get_element_module/1","doc":"Return AVM element module, if the element is a BEAM file.","ref":"packbeam_api.html#get_element_module/1"},{"type":"function","title":"packbeam_api.get_element_name/1","doc":"Return the name of the element.","ref":"packbeam_api.html#get_element_name/1"},{"type":"function","title":"packbeam_api.is_beam/1","doc":"Indicates whether the AVM file element is a BEAM file.","ref":"packbeam_api.html#is_beam/1"},{"type":"function","title":"packbeam_api.is_entrypoint/1","doc":"Indicates whether the AVM file element is an entrypoint.","ref":"packbeam_api.html#is_entrypoint/1"},{"type":"function","title":"packbeam_api.list/1","doc":"List the contents of an AVM file. This function will list the contents of an AVM file at the location specified in InputPath.","ref":"packbeam_api.html#list/1"},{"type":"opaque","title":"packbeam_api.avm_element/0","doc":null,"ref":"packbeam_api.html#t:avm_element/0"},{"type":"type","title":"packbeam_api.avm_element_name/0","doc":null,"ref":"packbeam_api.html#t:avm_element_name/0"},{"type":"type","title":"packbeam_api.options/0","doc":null,"ref":"packbeam_api.html#t:options/0"},{"type":"type","title":"packbeam_api.path/0","doc":null,"ref":"packbeam_api.html#t:path/0"},{"type":"extras","title":"atomvvm_packbeam","doc":"# `atomvvm_packbeam`\n\nAn Erlang Escript and library used to generate an [AtomVM](http://github.com/atomvm/AtomVM) AVM file from a set of files (beam files, previously built AVM files, or even arbitrary data files).\n\nThis tool roughly approximates the functionality of the AtomVM `PackBEAM` utility, except:\n\n* Support for multiple data types, include beam files, text files, etc\n* \"Pruned\" extraction of beams from AVM files, so that only the beams that are needed are packed\n* Support for embedded OTP applications in your PackBEAM files.\n\nThe `packbeam` tool may be used on its own as a stand-alone command-line utility. More typically, it is used internally as part of the [`atomvm_rebar3_plugin`](https://github.com/atomvm/atomvm_rebar3_plugin) [`rebar3`](https://rebar3.org) plugin.","ref":"readme.html"},{"type":"extras","title":"Prerequisites - atomvvm_packbeam","doc":"Building `packbeam` requires a version of Erlang/OTP compatible with [AtomVM](https://github.com/atomvm/AtomVM), as well as a local installation of [`rebar3`](https://rebar3.org). Optionally, any recent version of `make` may be used to simplify builds. Consult the [AtomVM Documentation](https://www.atomvm.net/doc/master/) for information about supported OTP versions.","ref":"readme.html#prerequisites"},{"type":"extras","title":"Build - atomvvm_packbeam","doc":"To build a release, run the following commands:\n\n shell$ rebar3 release\n shell$ rebar3 tar\n\nThese commands will create an Erlang tar archive containing a versioned release of the `atomvm_packbeam` tool, e.g.,\n\n ...\n ===> Tarball successfully created: _build/prod/rel/atomvm_packbeam/atomvm_packbeam-0.6.2.tar.gz\n\nin your local working directory.\n\n> IMPORTANT! The files in this tar archive do not contain the `atomvm_packbeam` prefix, so extracting these files without care will create a `bin` and `lib` directory in the location into which files from the archive is extracted. See the example below before proceeding!\n\nYou can use the `install.sh` script to install the `atomvm_packbeam` utility into a location on your local machine. You will need to specify the prefix location into which you want to install the utility, together with it's current version.\n\n shell$ ./install.sh /opt/atomvm_packbeam 0.6.2\n atomvm_packbeam version 0.6.2 installed in /opt/atomvm_packbeam.\n\n> Note. Some prefix locations may require `root` permissions to write files to.\n\nSet your `PATH` environment variable to include the `bin` directory of the installation prefix (if not already set), and you should then be able to run the `packbeam` command included therein.\n\nFor example:\n\n shell$ export PATH=/opt/atomvm_packbeam/bin:$PATH\n shell$ packbeam help\n Syntax:\n packbeam \n ...\n\n## `packbeam` command\n\nThe `packbeam` command is used to create an AVM file from a list of beam and other file types, to list the contents of an AVM file, or to delete elements from an AVM file.\n\nThe general syntax of the `packbeam` command takes the form:\n\n packbeam \n\nOn-line help is available via the `help` sub-command:\n\n shell$ packbeam help\n\n packbeam version 0.7.2\n\n Syntax:\n packbeam \n\n The following sub-commands are supported:\n\n create [ ]+\n where:\n is the output AVM file,\n [ ]+ is a list of one or more input files,\n and are among the following:\n [--prune|-p] Prune dependencies\n [--start|-s ] Start module\n [--remove_lines|-r] Remove line number information from AVM files\n\n list \n where:\n is an AVM file,\n and are among the following:\n [--format|-f csv|bare|default] Format output\n\n extract [ ]*\n where:\n is an AVM file,\n [ ]+ is a list of one or more elements to extract\n (if empty, then extract all elements)\n and are among the following:\n [--out|-o ] Output directory into which to write elements\n (if unspecified, use the current working directory)\n\n delete [ ]+\n where:\n is an AVM file,\n [ ]+ is a list of one or more elements to delete,\n and are among the following:\n [--out|-o ] Output AVM file\n\n version\n Print version and exit\n\n help\n Print this help\n\nThe `packbeam` command will return an exit status of 0 on successful completion of a command. An unspecified non-zero value is returned in the event of an error.\n\nThe `packbeam` sub-commands are described in more detail below.\n\n### `create` sub-command\n\nTo create an AVM file from a list of beam files, use the `create` sub-command to create an AVM file. The first argument is take to be the output AVM file, following by the files you would like to add, e.g.,\n\n shell$ packbeam create mylib.avm mylib/ebin/mylib.beam mylib/ebin/foo.beam mylib/ebin/bar.beam\n\nThis command will create an AtomVM AVM file suitable for use with AtomVM.\n\nThe input files specified in the create subcommand may be among the following types:\n\n* compiled BEAM files (typically ending in `.beam`)\n* Previously created AVM files\n* \"Normal\" files, e.g., text files, binary files, etc.\n\nNote that beam files specified are stripped of their path information, inside of the generated AVM file. Any files that have the same name will be added in the order they are listed on the command line. However, AtomVM will only resolve the first such file when loading modules at run-time.\n\n##","ref":"readme.html#build"},{"type":"extras","title":"Start Entrypoint - atomvvm_packbeam","doc":"If you are building an application that provides a start entrypoint (as opposed to a library, suitable for inclusion in another AVM file), then at least one beam module in an AVM file must contain a `start/0` entry-point, i.e., a function called `start` with arity 0. AtomVM will use this entry-point as the first function to execute, when starting.\n\n> Note. It is conventional, but not required, that the first beam file in an AVM file contains the `start/0` entry-point. AtomVM will use the first BEAM file that contains an exported `start/0` function as the entry-point for the application.\n\nIf your application has multiple modules with exported `start/0` functions, you may use the `--start ` (alternatively, `-s `) option to specify the module you would like placed first in your AVM file. The ` ` parameter should be the module name (without the `.beam` suffix, e.g., `main`).\n\nA previously created AVM file file may be supplied as input (including the same file specified as output, for example). The contents of any input AVM files will be included in the output AVM file. For example, if you are building a library of BEAM files (for example, none of which contain a `start/0` entry-point), you may want to archive these into an AVM file, which can be used for downstream applications.\n\nIn addition, you may specify a \"normal\" (i.e., non-beam or non-AVM) file. Normal files are labeled with the path specified on the command line.\n\n shell$ packbeam create mylib.avm mylib.avm mylib/priv/sample.txt\n\n> Note. It is conventional in AtomVM for normal files to have the path ` /priv/ `.\n\n##","ref":"readme.html#start-entrypoint"},{"type":"extras","title":"Pruning - atomvvm_packbeam","doc":"If you specify the `--prune` (alternatively, `-p`) flag, then `packbeam` will only include beam files that are transitively dependent on the entry-point beam. Transitive dependencies are determined by imports, as well as use of an atom in a module (e.g, as the result of a dynamic function call, based on a module name).\n\nIf there is no beam file with a `start/0` entry-point defined in the list of input modules and the `--prune` flag is used, the command will fail. You should _not_ use the `--prune` flag if you are trying to build libraries suitable for inclusion on other AtomVM applications.\n\n##","ref":"readme.html#pruning"},{"type":"extras","title":"Line number information - atomvvm_packbeam","doc":"By default, the `packbeam` tool will generate line number information for embedded BEAM files. Line number information is included in Erlang stacktraces, giving developers more clues into bugs in their programs. However, line number information does increase the size of AVM files, and in some cases can have an impact on memory in running applications.\n\nFor production applications that have no need for line number information, we recommend using the `-r` (or `--remove_lines`) flags, which will strip line number information from embedded BEAM files.\n\n### `list` sub-command\n\nThe `list` sub-command will print the contents of an AVM file to the standard output stream.\n\nTo list the elements of an AVM file, specify the location of the AVM file to input as the first argument:\n\n shell$ packbeam list mylib.avm\n mylib.beam * [284]\n foo.beam [276]\n bar.beam [252]\n mylib/priv/sample.txt [29]\n\nThe elements in the AVM file are printed to the standard output stream and are listed on each line. If a beam file contain an exported `start/0` function, it will be marked with an asterisk (`*`). The size in bytes of each module is also printed in square brackets (`[]`).\n\nYou may use the `--format` (alternatively, `-f`) option to specify an output format. The supported formats are:\n\n* `csv` Output elements in comma-separated value format. Fields include the module name, whether the element is a BEAM file, whether the element provides a `start/0` entrypoint, and the size (in bytes) of the element.\n* `bare` Output just the module name, with no annotations.\n* `default` Output the module name, size (in brackets), and whether the file provides a `start/0` entrypoint, indicated by an asterisk (`*`). The `default` output is used if the `--format` option is not specified.\n\n### `extract` sub-command\n\nThe `extract` sub-command can be used to extract elements from an AVM file.\n\nTo extract one or more elements from an AVM file, specify the location of the AVM file from which to extract elements, followed by the list of elements (as displayed via the `list` sub-command) to extract. If no elements are listed, then all elements from the AVM file will be extracted.\n\nNon-BEAM (\"normal\") files that contain paths in their names will be extracted into a directory tree that reflects the path used in the element name. For example, if the element name is `mylib/priv/sample.txt`, then the `sample.txt` file will be extracted into the `mylib/priv` directory (relative to the output directory, detailed below).\n\nYou may optionally specify an output directory using the `--out` option, which will contain the extracted contents of the input AVM file. This directory must exist beforehand, or a runtime error will occur. If no output directory is specified, elements will be extracted into the current working directory.\n\n\nFor example:\n\n shell$ mkdir mydir\n shell$ packbeam extract -out mydir mylib.avm foo.beam mylib/priv/sample.txt\n Writing to mydir ...\n x foo.beam\n x mylib/priv/sample.txt\n\n\n### `delete` sub-command\n\nThe `delete` sub-command can be used to remove elements from an AVM file.\n\nTo delete one or more elements from an AVM file, specify the location of the AVM file from which to remove elements, followed by the list of elements (as displayed via the `list` sub-command) to remove. You may optionally specify an output AVM file using the `--out` option, which will contain the contents of the input AVM file, minus the specified elements. If no output AVM is specified, the input AVM file will be overwritten.\n\nFor example:\n\n shell$ packbeam delete -out mylib2.avm mylib.avm foo.beam bar.beam\n shell$ packbeam list mylib2.avm\n mylib.beam * [284]\n mylib/priv/sample.txt [29]\n\n## `packbeam_api` API\n\nIn addition to being an `escript` command-line utility, this project provides an Erlang API and library for manipulating AVM files. Simply include `atomvm_packbeam` as a dependency in your `rebar.config`, and you will have access to this API.\n\n> For more detailed information about this API, see the [`packbeam_api` Reference](packbeam_api.html).\n\n#","ref":"readme.html#line-number-information"},{"type":"extras","title":"Creating PackBEAM files - atomvvm_packbeam","doc":"To create a PackBEAM file, use the `packbeam_api:create/2` function. Specify the output path of the AVM you would like to create, followed by a list of paths to the files that will go into the AVM file. Typically, these paths are a list of BEAM files, though you can also include plain data files, in addition to previously created AVM files. Previously-created AVM files will be copied into the output AVM file.\n\n> Note. Specify the file system paths to all files. BEAM file path information will be stripped from the AVM element path data. Any plain data files (non-BEAM files) will retain their path information. See the [AtomVM Documentation](https://www.atomvm.net/doc/master/) about how to create plain data files in AVM files that users can retrieved via the `atomvm:read_priv/2` function.\n\n %% erlang\n ok = packbeam_api:create(\n \"/path/to/output.avm\", [\n \"/path/to/foo.beam\",\n \"/path/to/bar.beam\",\n \"/path/to/myapp/priv/sample.txt\",\n \"/path/to/some_lib.avm\"\n ]\n ).\n\nAlternatively, you may specify a set of options with the `packbeam_api:create/3` function, which takes a map as the third parameter.\n\n| Key | Type | Deafult | Description |\n|-----|------|---------|-------------|\n| `prune` | `boolean()` | `false` | Specify whether to prune the output AVM file. Pruned AVM files can take considerably less space and hence may lead to faster development times. |\n| `start` | `module()` | n/a | Specify the start module, if it can't be determined automatically from the application. |\n| `application` | `module()` | n/a | Specify the application module. The ` .app` file will be encoded and included as an element in the AVM file with the path ` /priv/application.bin` |\n| `include_lines` | `boolean()` | `true` | Specify whether to include line number information in generated AVM files. |\n\n#","ref":"readme.html#creating-packbeam-files"},{"type":"extras","title":"Listing the contents of PackBEAM files - atomvvm_packbeam","doc":"You can list the contents of PackBEAM files using the `packbeam_api:list/1` function. Specify the file system path to the PackBEAM file you would like to list:\n\n %% erlang\n AVMElements = packbeam_api:list(\"/path/to/input.avm\").\n\nThe returned `AVMElements` is list of an opaque data structures and should not be interpreted by user applications. However, several functions are exposed to retrieve information about elements in this list.\n\nTo get the element name, use the `packbeam_api:get_element_name/1` function, passing in an AVM element. The return type is a `string()` and represents the path in the AVM file for the AVM element.\n\n %% erlang\n AVMElementName = packbeam_api:get_element_name(AVMElement).\n\nTo get the element data (as a binary) use the `packbeam_api:get_element_data/1` function, passing in an AVM element. The return type is a `binary()` containing the actual data in the AVM element.\n\n %% erlang\n AVMElementData = packbeam_api:get_element_data(AVMElement).\n\nTo get the element module (as an atom) use the `packbeam_api:get_element_module/1` function, passing in an AVM element. The return type is a `module()` and the module name of the AVM element.\n\nNote that if the AVM element is not a BEAM file, this function returns `undefined`.\n\n %% erlang\n AVMElementModule = packbeam_api:get_element_module(AVMElement).\n\nTo determine if the element is a BEAM file, use the `packbeam_api:is_beam/1` function, passing in an AVM element. The return value is a `boolean()`.\n\n %% erlang\n IsBEAM = packbeam_api:is_beam(AVMElement).\n\nTo determine if the element is an entrypoint BEAM (i.e., it exports a `start/0` function), use the `packbeam_api:is_entrypoint/1` function, passing in an AVM element. The return value is a `boolean()`.\n\n %% erlang\n IsEntrypoint = packbeam_api:is_entrypoint(AVMElement).\n\n#","ref":"readme.html#listing-the-contents-of-packbeam-files"},{"type":"extras","title":"Deleting entries from PackBEAM files - atomvvm_packbeam","doc":"You can delete entries from an AVM file using the `packbeam_api:delete/3` function. Specify the file system path to the PackBEAM file you would like to delete from, the output path you would like to write the new AVM file to, and a list of AVM elements you would like to delete:\n\n %% erlang\n ok = packbeam_api:delete(\n \"/path/to/input.avm\",\n \"/path/to/ouput.avm\",\n [\"foo.beam\", \"myapp/priv/sample.txt\"]\n ).\n\n> Note. You may specify the same values for the input and output paths. In this case, the input AVM file will be _over-written_ by the new AVM file.\n\n#","ref":"readme.html#deleting-entries-from-packbeam-files"},{"type":"extras","title":"Extracting entries from PackBEAM files - atomvvm_packbeam","doc":"You can extract elements from an AVM file using the `packbeam_api:extract/3` function. Specify the file system path to the PackBEAM file you would like to extract from, a list of AVM elements you would like to extract, and the output directory into which would like to extract the files:\n\n %% erlang\n ok = packbeam_api:extract(\n \"/path/to/input.avm\",\n [\"foo.beam\", \"myapp/priv/sample.txt\"],\n \"/tmp\"\n ).","ref":"readme.html#extracting-entries-from-packbeam-files"},{"type":"extras","title":"Changelog","doc":"# Changelog\nAll notable changes to this project will be documented in this file.\n\nThe format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),\nand this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).\n\n## [0.7.2] (2023.11.24)\n\n- Make use of profiles to minimize downstream dependencies\n- Fix install.sh script on FreeBSD platform\n\n## [0.7.1] (2023.10.22)\n\n- Enhanced `packbeam_api` to make it more maintainable.\n- Changed documentation to use [`rebar3_ex_doc`](https://hexdocs.pm/rebar3_ex_doc/readme.html)\n\n## [0.7.0] (2022.10.17)\n\n- Added `version` sub-command to print version to the console\n- Added `-r`, `--remove` option and removed the `-i`, `--include` option, which was ineffective due to a bug. See the [Updating](UPDATING.md) notes on the impact of these changes.\n\n## [0.6.2] (2023.10.14)\n\n- Added `relx` stanzas to create a standalone release of the `packbeam` utility\n- Added install scripts to simplify installation for users\n\n## [0.6.1] (2023.07.16)\n\n- Added `extract` sub-command\n\n## [0.6.0] (2022.12.18)\n\n#","ref":"changelog.html"},{"type":"extras","title":"Added - Changelog","doc":"- Added ability to include ` >` chunks in BEAM files in generated AVM files\n- Added CI build\n\n#","ref":"changelog.html#added"},{"type":"extras","title":"Changed - Changelog","doc":"- Changed the `packbeam_api:create` function to take a single map for optional\nparameters, instead of coding paramters into function arguments. Previous\nversions of the `packbeam_api:create` function that take optional parameters\nhave been deprecated.\n\n## [0.5.0] (2022.08.28)\n\n#","ref":"changelog.html#changed"},{"type":"extras","title":"Added - Changelog","doc":"- Added ability to specify a module name for ordinary (non-BEAM) files (API-only).\n- Added support for tracking dependencies using application spec files as binaries\n(API-only)\n- Added PropEr test\n- Added new `format` option to the `list` subcommand, supporting `csv`, `bare`,\nand `default` options.\n\n#","ref":"changelog.html#added"},{"type":"extras","title":"Fixed - Changelog","doc":"- Fixed a bug in parsing non-BEAM files in included AVM files, which would cause\n non-BEAM file contents to be loaded incorrectly.\n\n#","ref":"changelog.html#fixed"},{"type":"extras","title":"Changed - Changelog","doc":"- Changed the command line syntax to support long and short option names using\nGNU-style conventions; deprecated single-hyphen short options.\n- Moved `packbeam` API functionality into `packbeam_api` module.\nPrevious `packbeam` API functions now call corresponding `packbeam_api`\nfunctions and are deprecated.\n\n## [0.4.1] (2022.06.19)\n\n#","ref":"changelog.html#changed"},{"type":"extras","title":"Added - Changelog","doc":"- Added unit tests\n\n#","ref":"changelog.html#added"},{"type":"extras","title":"Fixed - Changelog","doc":"- Fixed a bug that failed to track atoms that occur in BEAM LitT tables\n\n#","ref":"changelog.html#fixed"},{"type":"extras","title":"Changed - Changelog","doc":"- Weakened the test for finding a start BEAM file such that it only requires that the `?BEAM_START_FLAG` be set, for compatibility with [ExAtomVM](https://github.com/atomvm/ExAtomVM).\n\n## [0.4.0] (2022.05.21)\n\n#","ref":"changelog.html#changed"},{"type":"extras","title":"Added - Changelog","doc":"- Added `erlfmt` plugin and formatted code.\n\n#","ref":"changelog.html#added"},{"type":"extras","title":"Fixed - Changelog","doc":"- Fixed a bug that prevented packbeam files that include priv files from being properly loaded.\n\n## [0.3.0] (2022.01.15)\n\n#","ref":"changelog.html#fixed"},{"type":"extras","title":"Fixed - Changelog","doc":"- Fixed a bug in pulling in dependent BEAM files based on the atoms table\n\n## [0.2.0] (2021.04.03)\n\n#","ref":"changelog.html#fixed"},{"type":"extras","title":"Added - Changelog","doc":"- Added support for deployment to hex\n\n#","ref":"changelog.html#added"},{"type":"extras","title":"Fixed - Changelog","doc":"- Uncompressed literals table\n\n## [0.1.0] (2020.05.17)\n- Initial Release","ref":"changelog.html#fixed"},{"type":"extras","title":"AtomVM Update Instructions","doc":"SPDX-License-Identifier: Apache-2.0 OR LGPL-2.1-or-later\n-->\n\n# AtomVM Update Instructions","ref":"updating.html"},{"type":"extras","title":"0.6.* -> 0.7.* - AtomVM Update Instructions","doc":"- The default behavior of not generating line number information in BEAM files has changed. By default, line number information will be generated in BEAM files. You can remove line number information using from BEAM files by using the `-r` (or `--remove_lines`) flags to the `create` subcommand. Note that in versions 0.6 of this tool, the `--include_lines` flag was ignored due to a bug in the code.","ref":"updating.html#0-6-0-7"},{"type":"extras","title":"LICENSE","doc":"Apache License\n Version 2.0, January 2004\n http://www.apache.org/licenses/\n\n TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n 1. Definitions.\n\n \"License\" shall mean the terms and conditions for use, reproduction,\n and distribution as defined by Sections 1 through 9 of this document.\n\n \"Licensor\" shall mean the copyright owner or entity authorized by\n the copyright owner that is granting the License.\n\n \"Legal Entity\" shall mean the union of the acting entity and all\n other entities that control, are controlled by, or are under common\n control with that entity. For the purposes of this definition,\n \"control\" means (i) the power, direct or indirect, to cause the\n direction or management of such entity, whether by contract or\n otherwise, or (ii) ownership of fifty percent (50%) or more of the\n outstanding shares, or (iii) beneficial ownership of such entity.\n\n \"You\" (or \"Your\") shall mean an individual or Legal Entity\n exercising permissions granted by this License.\n\n \"Source\" form shall mean the preferred form for making modifications,\n including but not limited to software source code, documentation\n source, and configuration files.\n\n \"Object\" form shall mean any form resulting from mechanical\n transformation or translation of a Source form, including but\n not limited to compiled object code, generated documentation,\n and conversions to other media types.\n\n \"Work\" shall mean the work of authorship, whether in Source or\n Object form, made available under the License, as indicated by a\n copyright notice that is included in or attached to the work\n (an example is provided in the Appendix below).\n\n \"Derivative Works\" shall mean any work, whether in Source or Object\n form, that is based on (or derived from) the Work and for which the\n editorial revisions, annotations, elaborations, or other modifications\n represent, as a whole, an original work of authorship. For the purposes\n of this License, Derivative Works shall not include works that remain\n separable from, or merely link (or bind by name) to the interfaces of,\n the Work and Derivative Works thereof.\n\n \"Contribution\" shall mean any work of authorship, including\n the original version of the Work and any modifications or additions\n to that Work or Derivative Works thereof, that is intentionally\n submitted to Licensor for inclusion in the Work by the copyright owner\n or by an individual or Legal Entity authorized to submit on behalf of\n the copyright owner. For the purposes of this definition, \"submitted\"\n means any form of electronic, verbal, or written communication sent\n to the Licensor or its representatives, including but not limited to\n communication on electronic mailing lists, source code control systems,\n and issue tracking systems that are managed by, or on behalf of, the\n Licensor for the purpose of discussing and improving the Work, but\n excluding communication that is conspicuously marked or otherwise\n designated in writing by the copyright owner as \"Not a Contribution.\"\n\n \"Contributor\" shall mean Licensor and any individual or Legal Entity\n on behalf of whom a Contribution has been received by Licensor and\n subsequently incorporated within the Work.\n\n 2. Grant of Copyright License. Subject to the terms and conditions of\n this License, each Contributor hereby grants to You a perpetual,\n worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n copyright license to reproduce, prepare Derivative Works of,\n publicly display, publicly perform, sublicense, and distribute the\n Work and such Derivative Works in Source or Object form.\n\n 3. Grant of Patent License. Subject to the terms and conditions of\n this License, each Contributor hereby grants to You a perpetual,\n worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n (except as stated in this section) patent license to make, have made,\n use, offer to sell, sell, import, and otherwise transfer the Work,\n where such license applies only to those patent claims licensable\n by such Contributor that are necessarily infringed by their\n Contribution(s) alone or by combination of their Contribution(s)\n with the Work to which such Contribution(s) was submitted. If You\n institute patent litigation against any entity (including a\n cross-claim or counterclaim in a lawsuit) alleging that the Work\n or a Contribution incorporated within the Work constitutes direct\n or contributory patent infringement, then any patent licenses\n granted to You under this License for that Work shall terminate\n as of the date such litigation is filed.\n\n 4. Redistribution. You may reproduce and distribute copies of the\n Work or Derivative Works thereof in any medium, with or without\n modifications, and in Source or Object form, provided that You\n meet the following conditions:\n\n (a) You must give any other recipients of the Work or\n Derivative Works a copy of this License; and\n\n (b) You must cause any modified files to carry prominent notices\n stating that You changed the files; and\n\n (c) You must retain, in the Source form of any Derivative Works\n that You distribute, all copyright, patent, trademark, and\n attribution notices from the Source form of the Work,\n excluding those notices that do not pertain to any part of\n the Derivative Works; and\n\n (d) If the Work includes a \"NOTICE\" text file as part of its\n distribution, then any Derivative Works that You distribute must\n include a readable copy of the attribution notices contained\n within such NOTICE file, excluding those notices that do not\n pertain to any part of the Derivative Works, in at least one\n of the following places: within a NOTICE text file distributed\n as part of the Derivative Works; within the Source form or\n documentation, if provided along with the Derivative Works; or,\n within a display generated by the Derivative Works, if and\n wherever such third-party notices normally appear. The contents\n of the NOTICE file are for informational purposes only and\n do not modify the License. You may add Your own attribution\n notices within Derivative Works that You distribute, alongside\n or as an addendum to the NOTICE text from the Work, provided\n that such additional attribution notices cannot be construed\n as modifying the License.\n\n You may add Your own copyright statement to Your modifications and\n may provide additional or different license terms and conditions\n for use, reproduction, or distribution of Your modifications, or\n for any such Derivative Works as a whole, provided Your use,\n reproduction, and distribution of the Work otherwise complies with\n the conditions stated in this License.\n\n 5. Submission of Contributions. Unless You explicitly state otherwise,\n any Contribution intentionally submitted for inclusion in the Work\n by You to the Licensor shall be under the terms and conditions of\n this License, without any additional terms or conditions.\n Notwithstanding the above, nothing herein shall supersede or modify\n the terms of any separate license agreement you may have executed\n with Licensor regarding such Contributions.\n\n 6. Trademarks. This License does not grant permission to use the trade\n names, trademarks, service marks, or product names of the Licensor,\n except as required for reasonable and customary use in describing the\n origin of the Work and reproducing the content of the NOTICE file.\n\n 7. Disclaimer of Warranty. Unless required by applicable law or\n agreed to in writing, Licensor provides the Work (and each\n Contributor provides its Contributions) on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n implied, including, without limitation, any warranties or conditions\n of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n PARTICULAR PURPOSE. You are solely responsible for determining the\n appropriateness of using or redistributing the Work and assume any\n risks associated with Your exercise of permissions under this License.\n\n 8. Limitation of Liability. In no event and under no legal theory,\n whether in tort (including negligence), contract, or otherwise,\n unless required by applicable law (such as deliberate and grossly\n negligent acts) or agreed to in writing, shall any Contributor be\n liable to You for damages, including any direct, indirect, special,\n incidental, or consequential damages of any character arising as a\n result of this License or out of the use or inability to use the\n Work (including but not limited to damages for loss of goodwill,\n work stoppage, computer failure or malfunction, or any and all\n other commercial damages or losses), even if such Contributor\n has been advised of the possibility of such damages.\n\n 9. Accepting Warranty or Additional Liability. While redistributing\n the Work or Derivative Works thereof, You may choose to offer,\n and charge a fee for, acceptance of support, warranty, indemnity,\n or other liability obligations and/or rights consistent with this\n License. However, in accepting such obligations, You may act only\n on Your own behalf and on Your sole responsibility, not on behalf\n of any other Contributor, and only if You agree to indemnify,\n defend, and hold each Contributor harmless for any liability\n incurred by, or claims asserted against, such Contributor by reason\n of your accepting any such warranty or additional liability.\n\n END OF TERMS AND CONDITIONS\n\n Copyright 2020, Fred Dushin .\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.","ref":"license.html"},{"type":"extras","title":"Contributing","doc":"SPDX-License-Identifier: Apache-2.0 OR LGPL-2.1-or-later\n-->\n\n# Contributing\n\nBefore contributing, please read carefully our [Code of Conduct](CODE_OF_CONDUCT.md) and\nthe following contribution guidelines.\n\nPlease, also make sure to understand the [Apache 2.0 license](LICENSE.md) and the\n[Developer Certificate of Origin](https://developercertificate.org/).\n\nLast but not least, **do not use GitHub issues for vulnerability reports**, read instead the\n[security policy](SECURITY.md) for instructions.","ref":"contributing.html"},{"type":"extras","title":"Git Recommended Practises - Contributing","doc":"* Commit messages should have a\n* [summary and a description](https://github.com/erlang/otp/wiki/writing-good-commit-messages)\n* Avoid trailing white spaces\n* Always `git pull --rebase`\n* [Clean up your branch history](https://git-scm.com/book/id/v2/Git-Tools-Rewriting-History) with\n`git rebase -i`\n* All your intermediate commits should build","ref":"contributing.html#git-recommended-practises"},{"type":"extras","title":"Coding Style - Contributing","doc":"#","ref":"contributing.html#coding-style"},{"type":"extras","title":"C Code - Contributing","doc":"##","ref":"contributing.html#c-code"},{"type":"extras","title":"Identation - Contributing","doc":"* [K&R identation and braces style](https://en.wikipedia.org/wiki/Indentation_style#K&R_style)\n* [Mandatory braces](https://en.wikipedia.org/wiki/Indentation_style#Variant:_mandatory_braces)\n* 4 spaces identation\n\nGood:\n```\nvoid f(int reverse)\n{\n if (reverse) {\n puts(\"!dlroW olleH\");\n } else {\n puts(\"Hello world\");\n }\n}\n```\n\nBad:\n```\nvoid f(int reverse) {\n if (reverse)\n puts (\"!dlroW olleH\");\n else\n puts (\"Hello world\");\n}\n```\n\n##","ref":"contributing.html#identation"},{"type":"extras","title":"Names - Contributing","doc":"* Struct names are PascalCase (e.g. Context)\n* Scalar types are lower case (e.g. term)\n* All other names (e.g. functions and variables) are snake_case (e.g. term_is_integer)\n* Always prefix function names (e.g. term_is_nil, term_is_integer, context_new, context_destroy)\n\n##","ref":"contributing.html#names"},{"type":"extras","title":"Other Coding Conventions - Contributing","doc":"* Pointer * should be with the variable name rather than with the type (e.g. `char *name`, not\n`char* name`)\n* Avoid long lines, use intermediate variables with meaningful names.\n\n#","ref":"contributing.html#other-coding-conventions"},{"type":"extras","title":"Elixir Code - Contributing","doc":"Just use Elixir formatter enforced style.","ref":"contributing.html#elixir-code"},{"type":"extras","title":"Contributor Covenant Code of Conduct","doc":"# Contributor Covenant Code of Conduct","ref":"code_of_conduct.html"},{"type":"extras","title":"Our Pledge - Contributor Covenant Code of Conduct","doc":"We as members, contributors, and leaders pledge to make participation in our\ncommunity a harassment-free experience for everyone, regardless of age, body\nsize, visible or invisible disability, ethnicity, sex characteristics, gender\nidentity and expression, level of experience, education, socio-economic status,\nnationality, personal appearance, race, religion, or sexual identity\nand orientation.\n\nWe pledge to act and interact in ways that contribute to an open, welcoming,\ndiverse, inclusive, and healthy community.","ref":"code_of_conduct.html#our-pledge"},{"type":"extras","title":"Our Standards - Contributor Covenant Code of Conduct","doc":"Examples of behavior that contributes to a positive environment for our\ncommunity include:\n\n* Demonstrating empathy and kindness toward other people\n* Being respectful of differing opinions, viewpoints, and experiences\n* Giving and gracefully accepting constructive feedback\n* Accepting responsibility and apologizing to those affected by our mistakes,\n and learning from the experience\n* Focusing on what is best not just for us as individuals, but for the\n overall community\n\nExamples of unacceptable behavior include:\n\n* The use of sexualized language or imagery, and sexual attention or\n advances of any kind\n* Trolling, insulting or derogatory comments, and personal or political attacks\n* Public or private harassment\n* Publishing others' private information, such as a physical or email\n address, without their explicit permission\n* Other conduct which could reasonably be considered inappropriate in a\n professional setting","ref":"code_of_conduct.html#our-standards"},{"type":"extras","title":"Enforcement Responsibilities - Contributor Covenant Code of Conduct","doc":"Community leaders are responsible for clarifying and enforcing our standards of\nacceptable behavior and will take appropriate and fair corrective action in\nresponse to any behavior that they deem inappropriate, threatening, offensive,\nor harmful.\n\nCommunity leaders have the right and responsibility to remove, edit, or reject\ncomments, commits, code, wiki edits, issues, and other contributions that are\nnot aligned to this Code of Conduct, and will communicate reasons for moderation\ndecisions when appropriate.","ref":"code_of_conduct.html#enforcement-responsibilities"},{"type":"extras","title":"Scope - Contributor Covenant Code of Conduct","doc":"This Code of Conduct applies within all community spaces, and also applies when\nan individual is officially representing the community in public spaces.\nExamples of representing our community include using an official e-mail address,\nposting via an official social media account, or acting as an appointed\nrepresentative at an online or offline event.","ref":"code_of_conduct.html#scope"},{"type":"extras","title":"Enforcement - Contributor Covenant Code of Conduct","doc":"Instances of abusive, harassing, or otherwise unacceptable behavior may be\nreported to the community leaders responsible for enforcement at\ndavide AT uninstall.it.\nAll complaints will be reviewed and investigated promptly and fairly.\n\nAll community leaders are obligated to respect the privacy and security of the\nreporter of any incident.","ref":"code_of_conduct.html#enforcement"},{"type":"extras","title":"Enforcement Guidelines - Contributor Covenant Code of Conduct","doc":"Community leaders will follow these Community Impact Guidelines in determining\nthe consequences for any action they deem in violation of this Code of Conduct:\n\n#","ref":"code_of_conduct.html#enforcement-guidelines"},{"type":"extras","title":"1. Correction - Contributor Covenant Code of Conduct","doc":"**Community Impact**: Use of inappropriate language or other behavior deemed\nunprofessional or unwelcome in the community.\n\n**Consequence**: A private, written warning from community leaders, providing\nclarity around the nature of the violation and an explanation of why the\nbehavior was inappropriate. A public apology may be requested.\n\n#","ref":"code_of_conduct.html#1-correction"},{"type":"extras","title":"2. Warning - Contributor Covenant Code of Conduct","doc":"**Community Impact**: A violation through a single incident or series\nof actions.\n\n**Consequence**: A warning with consequences for continued behavior. No\ninteraction with the people involved, including unsolicited interaction with\nthose enforcing the Code of Conduct, for a specified period of time. This\nincludes avoiding interactions in community spaces as well as external channels\nlike social media. Violating these terms may lead to a temporary or\npermanent ban.\n\n#","ref":"code_of_conduct.html#2-warning"},{"type":"extras","title":"3. Temporary Ban - Contributor Covenant Code of Conduct","doc":"**Community Impact**: A serious violation of community standards, including\nsustained inappropriate behavior.\n\n**Consequence**: A temporary ban from any sort of interaction or public\ncommunication with the community for a specified period of time. No public or\nprivate interaction with the people involved, including unsolicited interaction\nwith those enforcing the Code of Conduct, is allowed during this period.\nViolating these terms may lead to a permanent ban.\n\n#","ref":"code_of_conduct.html#3-temporary-ban"},{"type":"extras","title":"4. Permanent Ban - Contributor Covenant Code of Conduct","doc":"**Community Impact**: Demonstrating a pattern of violation of community\nstandards, including sustained inappropriate behavior, harassment of an\nindividual, or aggression toward or disparagement of classes of individuals.\n\n**Consequence**: A permanent ban from any sort of public interaction within\nthe community.","ref":"code_of_conduct.html#4-permanent-ban"},{"type":"extras","title":"Attribution - Contributor Covenant Code of Conduct","doc":"This Code of Conduct is adapted from the [Contributor Covenant][homepage],\nversion 2.0, available at\nhttps://www.contributor-covenant.org/version/2/0/code_of_conduct.html.\n\nCommunity Impact Guidelines were inspired by [Mozilla's code of conduct\nenforcement ladder](https://github.com/mozilla/diversity).\n\n[homepage]: https://www.contributor-covenant.org\n\nFor answers to common questions about this code of conduct, see the FAQ at\nhttps://www.contributor-covenant.org/faq. Translations are available at\nhttps://www.contributor-covenant.org/translations.","ref":"code_of_conduct.html#attribution"}],"content_type":"text/plain"} \ No newline at end of file diff --git a/docs/dist/sidebar_items-6B331F7B.js b/docs/dist/sidebar_items-6B331F7B.js new file mode 100644 index 0000000..7f6d286 --- /dev/null +++ b/docs/dist/sidebar_items-6B331F7B.js @@ -0,0 +1 @@ +sidebarNodes={"modules":[{"id":"packbeam","deprecated":false,"group":"","title":"packbeam","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"create/2","deprecated":false,"title":"create(OutputPath, InputPaths)","anchor":"create/2"},{"id":"create/4","deprecated":false,"title":"create(OutputPath, InputPaths, Prune, StartModule)","anchor":"create/4"},{"id":"delete/3","deprecated":false,"title":"delete(OutputPath, InputPath, Names)","anchor":"delete/3"},{"id":"list/1","deprecated":false,"title":"list(InputPath)","anchor":"list/1"},{"id":"main/1","deprecated":false,"title":"main(Argv)","anchor":"main/1"}],"key":"functions"}]},{"id":"packbeam_api","deprecated":false,"group":"","title":"packbeam_api","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"avm_element/0","deprecated":false,"title":"avm_element/0","anchor":"t:avm_element/0"},{"id":"avm_element_name/0","deprecated":false,"title":"avm_element_name/0","anchor":"t:avm_element_name/0"},{"id":"options/0","deprecated":false,"title":"options/0","anchor":"t:options/0"},{"id":"path/0","deprecated":false,"title":"path/0","anchor":"t:path/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"create/2","deprecated":false,"title":"create(OutputPath, InputPaths)","anchor":"create/2"},{"id":"create/3","deprecated":false,"title":"create(OutputPath, InputPaths, Options)","anchor":"create/3"},{"id":"create/4","deprecated":true,"title":"create(OutputPath, InputPaths, Prune, StartModule)","anchor":"create/4"},{"id":"create/5","deprecated":true,"title":"create(OutputPath, InputPaths, ApplicationModule, Prune, StartModule)","anchor":"create/5"},{"id":"delete/3","deprecated":false,"title":"delete(OutputPath, InputPath, AVMElementNames)","anchor":"delete/3"},{"id":"extract/3","deprecated":false,"title":"extract(InputPath, AVMElementNames, OutputDir)","anchor":"extract/3"},{"id":"get_element_data/1","deprecated":false,"title":"get_element_data(AVMElement)","anchor":"get_element_data/1"},{"id":"get_element_module/1","deprecated":false,"title":"get_element_module(AVMElement)","anchor":"get_element_module/1"},{"id":"get_element_name/1","deprecated":false,"title":"get_element_name(AVMElement)","anchor":"get_element_name/1"},{"id":"is_beam/1","deprecated":false,"title":"is_beam(AVMElement)","anchor":"is_beam/1"},{"id":"is_entrypoint/1","deprecated":false,"title":"is_entrypoint(AVMElement)","anchor":"is_entrypoint/1"},{"id":"list/1","deprecated":false,"title":"list(InputPath)","anchor":"list/1"}],"key":"functions"}]}],"extras":[{"id":"api-reference","group":"","title":"API Reference","headers":[{"id":"Modules","anchor":"modules"}]},{"id":"readme","group":"","title":"atomvvm_packbeam","headers":[{"id":"Prerequisites","anchor":"prerequisites"},{"id":"Build","anchor":"build"},{"id":"packbeam command","anchor":"packbeam-command"},{"id":"packbeam_api API","anchor":"packbeam_api-api"}]},{"id":"changelog","group":"","title":"Changelog","headers":[{"id":"[0.7.2] (2023.11.24)","anchor":"0-7-2-2023-11-24"},{"id":"[0.7.1] (2023.10.22)","anchor":"0-7-1-2023-10-22"},{"id":"[0.7.0] (2022.10.17)","anchor":"0-7-0-2022-10-17"},{"id":"[0.6.2] (2023.10.14)","anchor":"0-6-2-2023-10-14"},{"id":"[0.6.1] (2023.07.16)","anchor":"0-6-1-2023-07-16"},{"id":"[0.6.0] (2022.12.18)","anchor":"0-6-0-2022-12-18"},{"id":"[0.5.0] (2022.08.28)","anchor":"0-5-0-2022-08-28"},{"id":"[0.4.1] (2022.06.19)","anchor":"0-4-1-2022-06-19"},{"id":"[0.4.0] (2022.05.21)","anchor":"0-4-0-2022-05-21"},{"id":"[0.3.0] (2022.01.15)","anchor":"0-3-0-2022-01-15"},{"id":"[0.2.0] (2021.04.03)","anchor":"0-2-0-2021-04-03"},{"id":"[0.1.0] (2020.05.17)","anchor":"0-1-0-2020-05-17"}]},{"id":"updating","group":"","title":"AtomVM Update Instructions","headers":[{"id":"0.6. -> 0.7.","anchor":"0-6-0-7"}]},{"id":"license","group":"","title":"LICENSE","headers":[]},{"id":"contributing","group":"","title":"Contributing","headers":[{"id":"Git Recommended Practises","anchor":"git-recommended-practises"},{"id":"Coding Style","anchor":"coding-style"}]},{"id":"code_of_conduct","group":"","title":"Contributor Covenant Code of Conduct","headers":[{"id":"Our Pledge","anchor":"our-pledge"},{"id":"Our Standards","anchor":"our-standards"},{"id":"Enforcement Responsibilities","anchor":"enforcement-responsibilities"},{"id":"Scope","anchor":"scope"},{"id":"Enforcement","anchor":"enforcement"},{"id":"Enforcement Guidelines","anchor":"enforcement-guidelines"},{"id":"Attribution","anchor":"attribution"}]}],"tasks":[]} \ No newline at end of file diff --git a/docs/index.html b/docs/index.html new file mode 100644 index 0000000..c35e601 --- /dev/null +++ b/docs/index.html @@ -0,0 +1,10 @@ + + + + + atomvm_packbeam v0.7.2 — Documentation + + + + + diff --git a/docs/license.html b/docs/license.html new file mode 100644 index 0000000..87f9f28 --- /dev/null +++ b/docs/license.html @@ -0,0 +1,380 @@ + + + + + + + + + + LICENSE — atomvm_packbeam v0.7.2 + + + + + + + + + + + + + + + + +
    + + + + + +
    + +
    +
    + +

    + + + + + + View Source + + + + LICENSE +

    + +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   Copyright 2020, Fred Dushin <fred@dushin.net>.
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    +
    + + +
    +
    +
    +
    + + + + diff --git a/docs/packbeam.html b/docs/packbeam.html new file mode 100644 index 0000000..2831426 --- /dev/null +++ b/docs/packbeam.html @@ -0,0 +1,356 @@ + + + + + + + + + + packbeam — atomvm_packbeam v0.7.2 + + + + + + + + + + + + + + + + +
    + + + + + +
    + +
    +
    + +

    + + + + + + View Source + + + packbeam + (atomvm_packbeam v0.7.2) + +

    + + +
    +An escript and OTP library used to generate an AtomVM AVM file from a set of files (beam files, previously built AVM files, or even arbitrary data files). +
    + + +
    +

    + + + + Summary +

    +
    +

    + Functions +

    + +
    + + +
    Deprecated. Use the packbeam_api module, instead.
    + +
    + +
    + + +
    Deprecated. Use the packbeam_api module, instead.
    + +
    + +
    + + +
    Deprecated. Use the packbeam_api module, instead.
    + +
    + +
    + + +
    Deprecated. Use the packbeam_api module, instead.
    + +
    + +
    +
    + main(Argv) + +
    + +
    + +
    + +
    + + +
    +

    + + + + Functions +

    +
    +
    + +
    + + + Link to this function + +

    create(OutputPath, InputPaths)

    + + + + View Source + + + +
    + +
    + +Deprecated. Use the packbeam_api module, instead. +
    +
    +
    + +
    + + + Link to this function + +

    create(OutputPath, InputPaths, Prune, StartModule)

    + + + + View Source + + + +
    + +
    + +Deprecated. Use the packbeam_api module, instead. +
    +
    +
    + +
    + + + Link to this function + +

    delete(OutputPath, InputPath, Names)

    + + + + View Source + + + +
    + +
    + +Deprecated. Use the packbeam_api module, instead. +
    +
    +
    + + + +
    + +Deprecated. Use the packbeam_api module, instead. +
    +
    +
    + + + +
    + + +
    +
    + +
    +
    + + +
    +
    +
    +
    + + + + diff --git a/docs/packbeam_api.html b/docs/packbeam_api.html new file mode 100644 index 0000000..5853ca5 --- /dev/null +++ b/docs/packbeam_api.html @@ -0,0 +1,842 @@ + + + + + + + + + + packbeam_api — atomvm_packbeam v0.7.2 + + + + + + + + + + + + + + + + +
    + + + + + +
    + +
    +
    + +

    + + + + + + View Source + + + packbeam_api + (atomvm_packbeam v0.7.2) + +

    + + +
    +A library used to generate an AtomVM AVM file from a set of files (beam files, previously built AVM files, or even arbitrary data files). +
    + + +
    +

    + + + + Summary +

    +
    +

    + Types +

    + +
    + + +
    + +
    + + +
    + +
    +
    + options/0 + +
    + +
    + +
    +
    + path/0 + +
    + +
    + +
    +
    +

    + Functions +

    + +
    + + +

    Create an AVM file.

    + +
    + +
    + + +

    Create an AVM file.

    + +
    + + + + + +
    + + +

    Delete selected elements of an AVM file.

    + +
    + +
    + + +

    Extract all or selected elements from an AVM file.

    + +
    + +
    + + +
    Return AVM element data.
    + +
    + +
    + + +
    Return AVM element module, if the element is a BEAM file.
    + +
    + +
    + + +
    Return the name of the element.
    + +
    + +
    + + +
    Indicates whether the AVM file element is a BEAM file.
    + +
    + +
    + + +
    Indicates whether the AVM file element is an entrypoint.
    + +
    + +
    + + +

    List the contents of an AVM file.

    + +
    + +
    + +
    + + +
    +

    + + + + Types +

    +
    +
    + +
    + + + Link to this opaque + +

    avm_element/0

    + + + + View Source + + + + (opaque) + +
    + +
    + +
    + +
    -opaque avm_element()
    + +
    + + +
    +
    +
    + +
    + + + Link to this type + +

    avm_element_name/0

    + + + + View Source + + + +
    + +
    + +
    + +
    -type avm_element_name() :: string().
    + +
    + + +
    +
    +
    + + + +
    + +
    + +
    -type options() ::
    +    #{prune => boolean(),
    +      start_module => module() | undefined,
    +      application_module => module() | undefined,
    +      include_lines => boolean()}.
    + +
    + + +
    +
    +
    + + + +
    + +
    + +
    -type path() :: string().
    + +
    + + +
    +
    + +
    +
    + +
    +

    + + + + Functions +

    +
    +
    + +
    + + + Link to this function + +

    create(OutputPath, InputPaths)

    + + + + View Source + + + +
    + +
    + +
    + +
    -spec create(OutputPath :: path(), InputPaths :: [path()]) -> ok | {error, Reason :: term()}.
    + +
    + +

    Create an AVM file.

    Equivalent to create(OutputPath, InputPaths, DefaultOptions)

    where DefaultOptions is #{ prune => false, start_module => undefined, application_module => undefined, include_lines => false } +
    +
    +
    + +
    + + + Link to this function + +

    create(OutputPath, InputPaths, Options)

    + + + + View Source + + + +
    + +
    + +
    + +
    -spec create(OutputPath :: path(), InputPaths :: [path()], Options :: options()) ->
    +          ok | {error, Reason :: term()}.
    + +
    + +

    Create an AVM file.

    This function will create an AVM file at the location specified in OutputPath, using the input files specified in InputPaths. +
    +
    +
    + +
    + + + Link to this function + +

    create(OutputPath, InputPaths, Prune, StartModule)

    + + + + View Source + + + +
    + +
    + This function is deprecated. This function is deprecated. Use create/3 instead.. +
    + +
    + +
    + +
    -spec create(OutputPath :: path(),
    +       InputPaths :: [path()],
    +       Prune :: boolean(),
    +       StartModule :: module() | undefined) ->
    +          ok | {error, Reason :: term()}.
    + +
    + + +
    +
    +
    + +
    + + + Link to this function + +

    create(OutputPath, InputPaths, ApplicationModule, Prune, StartModule)

    + + + + View Source + + + +
    + +
    + This function is deprecated. This function is deprecated. Use create/3 instead.. +
    + +
    + +
    + +
    -spec create(OutputPath :: path(),
    +       InputPaths :: [path()],
    +       ApplicationModule :: module() | undefined,
    +       Prune :: boolean(),
    +       StartModule :: module() | undefined) ->
    +          ok | {error, Reason :: term()}.
    + +
    + + +
    +
    +
    + +
    + + + Link to this function + +

    delete(OutputPath, InputPath, AVMElementNames)

    + + + + View Source + + + +
    + +
    + +
    + +
    -spec delete(OutputPath :: path(), InputPath :: path(), AVMElementNames :: [avm_element_name()]) ->
    +          ok | {error, Reason :: term()}.
    + +
    + +

    Delete selected elements of an AVM file.

    This function will delete elements of an AVM file at the location specified in InputPath, specified by the supplied list of names. The output AVM file is written to OutputPath, which may be the same as InputPath. +
    +
    +
    + +
    + + + Link to this function + +

    extract(InputPath, AVMElementNames, OutputDir)

    + + + + View Source + + + +
    + +
    + +
    + +
    -spec extract(InputPath :: path(), AVMElementNames :: [avm_element_name()], OutputDir :: path()) ->
    +           ok | {error, Reason :: term()}.
    + +
    + +

    Extract all or selected elements from an AVM file.

    This function will extract elements of an AVM file at the location specified in InputPath, specified by the supplied list of names. The elements from the input AVM file will be written into the specified output directory, creating any subdirectories if the AVM file elements contain path information. +
    +
    +
    + +
    + + + Link to this function + +

    get_element_data(AVMElement)

    + + + + View Source + + + +
    + +
    + +
    + +
    -spec get_element_data(AVMElement :: avm_element()) -> binary().
    + +
    + +Return AVM element data. +
    +
    +
    + +
    + + + Link to this function + +

    get_element_module(AVMElement)

    + + + + View Source + + + +
    + +
    + +
    + +
    -spec get_element_module(AVMElement :: avm_element()) -> module() | undefined.
    + +
    + +Return AVM element module, if the element is a BEAM file. +
    +
    +
    + +
    + + + Link to this function + +

    get_element_name(AVMElement)

    + + + + View Source + + + +
    + +
    + +
    + +
    -spec get_element_name(AVMElement :: avm_element()) -> avm_element_name().
    + +
    + +Return the name of the element. +
    +
    +
    + +
    + + + Link to this function + +

    is_beam(AVMElement)

    + + + + View Source + + + +
    + +
    + +
    + +
    -spec is_beam(AVMElement :: avm_element()) -> boolean().
    + +
    + +Indicates whether the AVM file element is a BEAM file. +
    +
    +
    + +
    + + + Link to this function + +

    is_entrypoint(AVMElement)

    + + + + View Source + + + +
    + +
    + +
    + +
    -spec is_entrypoint(AVMElement :: avm_element()) -> boolean().
    + +
    + +Indicates whether the AVM file element is an entrypoint. +
    +
    +
    + + + +
    + +
    + +
    -spec list(InputPath :: path()) -> [avm_element()].
    + +
    + +

    List the contents of an AVM file.

    This function will list the contents of an AVM file at the location specified in InputPath. +
    +
    + +
    +
    + + +
    +
    +
    +
    + + + + diff --git a/docs/readme.html b/docs/readme.html new file mode 100644 index 0000000..4041cf1 --- /dev/null +++ b/docs/readme.html @@ -0,0 +1,347 @@ + + + + + + + + + + atomvvm_packbeam — atomvm_packbeam v0.7.2 + + + + + + + + + + + + + + + + +
    + + + + + +
    + +
    +
    + +

    + + + + + + View Source + + + + atomvvm_packbeam +

    + +

    An Erlang Escript and library used to generate an AtomVM AVM file from a set of files (beam files, previously built AVM files, or even arbitrary data files).

    This tool roughly approximates the functionality of the AtomVM PackBEAM utility, except:

    • Support for multiple data types, include beam files, text files, etc
    • "Pruned" extraction of beams from AVM files, so that only the beams that are needed are packed
    • Support for embedded OTP applications in your PackBEAM files.

    The packbeam tool may be used on its own as a stand-alone command-line utility. More typically, it is used internally as part of the atomvm_rebar3_plugin rebar3 plugin.

    + + + + Prerequisites +

    +

    Building packbeam requires a version of Erlang/OTP compatible with AtomVM, as well as a local installation of rebar3. Optionally, any recent version of make may be used to simplify builds. Consult the AtomVM Documentation for information about supported OTP versions.

    + + + + Build +

    +

    To build a release, run the following commands:

    shell$ rebar3 release
    +shell$ rebar3 tar

    These commands will create an Erlang tar archive containing a versioned release of the atomvm_packbeam tool, e.g.,

    ...
    +===> Tarball successfully created: _build/prod/rel/atomvm_packbeam/atomvm_packbeam-0.6.2.tar.gz

    in your local working directory.

    IMPORTANT! The files in this tar archive do not contain the atomvm_packbeam prefix, so extracting these files without care will create a bin and lib directory in the location into which files from the archive is extracted. See the example below before proceeding!

    You can use the install.sh script to install the atomvm_packbeam utility into a location on your local machine. You will need to specify the prefix location into which you want to install the utility, together with it's current version.

    shell$ ./install.sh /opt/atomvm_packbeam 0.6.2
    +atomvm_packbeam version 0.6.2 installed in /opt/atomvm_packbeam.

    Note. Some prefix locations may require root permissions to write files to.

    Set your PATH environment variable to include the bin directory of the installation prefix (if not already set), and you should then be able to run the packbeam command included therein.

    For example:

    shell$ export PATH=/opt/atomvm_packbeam/bin:$PATH
    +shell$ packbeam help
    +Syntax:
    +    packbeam <sub-command> <options> <args>
    +    ...

    + + + + packbeam command +

    +

    The packbeam command is used to create an AVM file from a list of beam and other file types, to list the contents of an AVM file, or to delete elements from an AVM file.

    The general syntax of the packbeam command takes the form:

    packbeam <sub-command> <args>

    On-line help is available via the help sub-command:

    shell$ packbeam help
    +
    +packbeam version 0.7.2
    +
    +Syntax:
    +    packbeam <sub-command> <options> <args>
    +
    +The following sub-commands are supported:
    +
    +    create <options> <output-avm-file> [<input-file>]+
    +        where:
    +        <output-avm-file> is the output AVM file,
    +        [<input-file>]+ is a list of one or more input files,
    +        and <options> are among the following:
    +            [--prune|-p]           Prune dependencies
    +            [--start|-s <module>]  Start module
    +            [--remove_lines|-r]    Remove line number information from AVM files
    +
    +    list <options> <avm-file>
    +        where:
    +        <avm-file> is an AVM file,
    +        and <options> are among the following:
    +            [--format|-f csv|bare|default]  Format output
    +
    +    extract <options> <avm-file> [<element>]*
    +        where:
    +        <avm-file> is an AVM file,
    +        [<element>]+ is a list of one or more elements to extract
    +            (if empty, then extract all elements)
    +        and <options> are among the following:
    +            [--out|-o <output-directory>]   Output directory into which to write elements
    +            (if unspecified, use the current working directory)
    +
    +    delete <options> <avm-file> [<element>]+
    +        where:
    +        <avm-file> is an AVM file,
    +        [<element>]+ is a list of one or more elements to delete,
    +        and <options> are among the following:
    +            [--out|-o <output-avm-file>]    Output AVM file
    +
    +    version
    +        Print version and exit
    +
    +    help
    +        Print this help

    The packbeam command will return an exit status of 0 on successful completion of a command. An unspecified non-zero value is returned in the event of an error.

    The packbeam sub-commands are described in more detail below.

    + + + + create sub-command +

    +

    To create an AVM file from a list of beam files, use the create sub-command to create an AVM file. The first argument is take to be the output AVM file, following by the files you would like to add, e.g.,

    shell$ packbeam create mylib.avm mylib/ebin/mylib.beam mylib/ebin/foo.beam mylib/ebin/bar.beam

    This command will create an AtomVM AVM file suitable for use with AtomVM.

    The input files specified in the create subcommand may be among the following types:

    • compiled BEAM files (typically ending in .beam)
    • Previously created AVM files
    • "Normal" files, e.g., text files, binary files, etc.

    Note that beam files specified are stripped of their path information, inside of the generated AVM file. Any files that have the same name will be added in the order they are listed on the command line. However, AtomVM will only resolve the first such file when loading modules at run-time.

    Start Entrypoint

    If you are building an application that provides a start entrypoint (as opposed to a library, suitable for inclusion in another AVM file), then at least one beam module in an AVM file must contain a start/0 entry-point, i.e., a function called start with arity 0. AtomVM will use this entry-point as the first function to execute, when starting.

    Note. It is conventional, but not required, that the first beam file in an AVM file contains the start/0 entry-point. AtomVM will use the first BEAM file that contains an exported start/0 function as the entry-point for the application.

    If your application has multiple modules with exported start/0 functions, you may use the --start <module> (alternatively, -s <module>) option to specify the module you would like placed first in your AVM file. The <module> parameter should be the module name (without the .beam suffix, e.g., main).

    A previously created AVM file file may be supplied as input (including the same file specified as output, for example). The contents of any input AVM files will be included in the output AVM file. For example, if you are building a library of BEAM files (for example, none of which contain a start/0 entry-point), you may want to archive these into an AVM file, which can be used for downstream applications.

    In addition, you may specify a "normal" (i.e., non-beam or non-AVM) file. Normal files are labeled with the path specified on the command line.

    shell$ packbeam create mylib.avm mylib.avm mylib/priv/sample.txt

    Note. It is conventional in AtomVM for normal files to have the path <module-name>/priv/<file-name>.

    Pruning

    If you specify the --prune (alternatively, -p) flag, then packbeam will only include beam files that are transitively dependent on the entry-point beam. Transitive dependencies are determined by imports, as well as use of an atom in a module (e.g, as the result of a dynamic function call, based on a module name).

    If there is no beam file with a start/0 entry-point defined in the list of input modules and the --prune flag is used, the command will fail. You should not use the --prune flag if you are trying to build libraries suitable for inclusion on other AtomVM applications.

    Line number information

    By default, the packbeam tool will generate line number information for embedded BEAM files. Line number information is included in Erlang stacktraces, giving developers more clues into bugs in their programs. However, line number information does increase the size of AVM files, and in some cases can have an impact on memory in running applications.

    For production applications that have no need for line number information, we recommend using the -r (or --remove_lines) flags, which will strip line number information from embedded BEAM files.

    + + + + list sub-command +

    +

    The list sub-command will print the contents of an AVM file to the standard output stream.

    To list the elements of an AVM file, specify the location of the AVM file to input as the first argument:

    shell$ packbeam list mylib.avm
    +mylib.beam * [284]
    +foo.beam [276]
    +bar.beam [252]
    +mylib/priv/sample.txt [29]

    The elements in the AVM file are printed to the standard output stream and are listed on each line. If a beam file contain an exported start/0 function, it will be marked with an asterisk (*). The size in bytes of each module is also printed in square brackets ([]).

    You may use the --format (alternatively, -f) option to specify an output format. The supported formats are:

    • csv Output elements in comma-separated value format. Fields include the module name, whether the element is a BEAM file, whether the element provides a start/0 entrypoint, and the size (in bytes) of the element.
    • bare Output just the module name, with no annotations.
    • default Output the module name, size (in brackets), and whether the file provides a start/0 entrypoint, indicated by an asterisk (*). The default output is used if the --format option is not specified.

    + + + + extract sub-command +

    +

    The extract sub-command can be used to extract elements from an AVM file.

    To extract one or more elements from an AVM file, specify the location of the AVM file from which to extract elements, followed by the list of elements (as displayed via the list sub-command) to extract. If no elements are listed, then all elements from the AVM file will be extracted.

    Non-BEAM ("normal") files that contain paths in their names will be extracted into a directory tree that reflects the path used in the element name. For example, if the element name is mylib/priv/sample.txt, then the sample.txt file will be extracted into the mylib/priv directory (relative to the output directory, detailed below).

    You may optionally specify an output directory using the --out option, which will contain the extracted contents of the input AVM file. This directory must exist beforehand, or a runtime error will occur. If no output directory is specified, elements will be extracted into the current working directory.

    For example:

    shell$ mkdir mydir
    +shell$ packbeam extract -out mydir mylib.avm foo.beam mylib/priv/sample.txt
    +Writing to mydir ...
    +x foo.beam
    +x mylib/priv/sample.txt

    + + + + delete sub-command +

    +

    The delete sub-command can be used to remove elements from an AVM file.

    To delete one or more elements from an AVM file, specify the location of the AVM file from which to remove elements, followed by the list of elements (as displayed via the list sub-command) to remove. You may optionally specify an output AVM file using the --out option, which will contain the contents of the input AVM file, minus the specified elements. If no output AVM is specified, the input AVM file will be overwritten.

    For example:

    shell$ packbeam delete -out mylib2.avm mylib.avm foo.beam bar.beam
    +shell$ packbeam list mylib2.avm
    +mylib.beam * [284]
    +mylib/priv/sample.txt [29]

    + + + + packbeam_api API +

    +

    In addition to being an escript command-line utility, this project provides an Erlang API and library for manipulating AVM files. Simply include atomvm_packbeam as a dependency in your rebar.config, and you will have access to this API.

    For more detailed information about this API, see the packbeam_api Reference.

    + + + + Creating PackBEAM files +

    +

    To create a PackBEAM file, use the packbeam_api:create/2 function. Specify the output path of the AVM you would like to create, followed by a list of paths to the files that will go into the AVM file. Typically, these paths are a list of BEAM files, though you can also include plain data files, in addition to previously created AVM files. Previously-created AVM files will be copied into the output AVM file.

    Note. Specify the file system paths to all files. BEAM file path information will be stripped from the AVM element path data. Any plain data files (non-BEAM files) will retain their path information. See the AtomVM Documentation about how to create plain data files in AVM files that users can retrieved via the atomvm:read_priv/2 function.

    %% erlang
    +ok = packbeam_api:create(
    +    "/path/to/output.avm", [
    +        "/path/to/foo.beam",
    +        "/path/to/bar.beam",
    +        "/path/to/myapp/priv/sample.txt",
    +        "/path/to/some_lib.avm"
    +    ]
    +).

    Alternatively, you may specify a set of options with the packbeam_api:create/3 function, which takes a map as the third parameter.

    KeyTypeDeafultDescription
    pruneboolean()falseSpecify whether to prune the output AVM file. Pruned AVM files can take considerably less space and hence may lead to faster development times.
    startmodule()n/aSpecify the start module, if it can't be determined automatically from the application.
    applicationmodule()n/aSpecify the application module. The <application>.app file will be encoded and included as an element in the AVM file with the path <module>/priv/application.bin
    include_linesboolean()trueSpecify whether to include line number information in generated AVM files.

    + + + + Listing the contents of PackBEAM files +

    +

    You can list the contents of PackBEAM files using the packbeam_api:list/1 function. Specify the file system path to the PackBEAM file you would like to list:

    %% erlang
    +AVMElements = packbeam_api:list("/path/to/input.avm").

    The returned AVMElements is list of an opaque data structures and should not be interpreted by user applications. However, several functions are exposed to retrieve information about elements in this list.

    To get the element name, use the packbeam_api:get_element_name/1 function, passing in an AVM element. The return type is a string() and represents the path in the AVM file for the AVM element.

    %% erlang
    +AVMElementName = packbeam_api:get_element_name(AVMElement).

    To get the element data (as a binary) use the packbeam_api:get_element_data/1 function, passing in an AVM element. The return type is a binary() containing the actual data in the AVM element.

    %% erlang
    +AVMElementData = packbeam_api:get_element_data(AVMElement).

    To get the element module (as an atom) use the packbeam_api:get_element_module/1 function, passing in an AVM element. The return type is a module() and the module name of the AVM element.

    Note that if the AVM element is not a BEAM file, this function returns undefined.

    %% erlang
    +AVMElementModule = packbeam_api:get_element_module(AVMElement).

    To determine if the element is a BEAM file, use the packbeam_api:is_beam/1 function, passing in an AVM element. The return value is a boolean().

    %% erlang
    +IsBEAM = packbeam_api:is_beam(AVMElement).

    To determine if the element is an entrypoint BEAM (i.e., it exports a start/0 function), use the packbeam_api:is_entrypoint/1 function, passing in an AVM element. The return value is a boolean().

    %% erlang
    +IsEntrypoint = packbeam_api:is_entrypoint(AVMElement).

    + + + + Deleting entries from PackBEAM files +

    +

    You can delete entries from an AVM file using the packbeam_api:delete/3 function. Specify the file system path to the PackBEAM file you would like to delete from, the output path you would like to write the new AVM file to, and a list of AVM elements you would like to delete:

    %% erlang
    +ok = packbeam_api:delete(
    +    "/path/to/input.avm",
    +    "/path/to/ouput.avm",
    +    ["foo.beam", "myapp/priv/sample.txt"]
    +).

    Note. You may specify the same values for the input and output paths. In this case, the input AVM file will be over-written by the new AVM file.

    + + + + Extracting entries from PackBEAM files +

    +

    You can extract elements from an AVM file using the packbeam_api:extract/3 function. Specify the file system path to the PackBEAM file you would like to extract from, a list of AVM elements you would like to extract, and the output directory into which would like to extract the files:

    %% erlang
    +ok = packbeam_api:extract(
    +    "/path/to/input.avm",
    +    ["foo.beam", "myapp/priv/sample.txt"],
    +    "/tmp"
    +).
    + + +
    +
    +
    +
    + + + + diff --git a/docs/search.html b/docs/search.html new file mode 100644 index 0000000..caf5f9f --- /dev/null +++ b/docs/search.html @@ -0,0 +1,157 @@ + + + + + + + + + + Search — atomvm_packbeam v0.7.2 + + + + + + + + + + + + + + + + +
    + + + + + +
    + +
    +
    + + + + +
    +
    +
    +
    + + + + diff --git a/docs/updating.html b/docs/updating.html new file mode 100644 index 0000000..ff0b417 --- /dev/null +++ b/docs/updating.html @@ -0,0 +1,195 @@ + + + + + + + + + + AtomVM Update Instructions — atomvm_packbeam v0.7.2 + + + + + + + + + + + + + + + + +
    + + + + + +
    + +
    +
    + +

    + + + + + + View Source + + + + AtomVM Update Instructions +

    + +

    + + + + 0.6. -> 0.7. +

    +
    • The default behavior of not generating line number information in BEAM files has changed. By default, line number information will be generated in BEAM files. You can remove line number information using from BEAM files by using the -r (or --remove_lines) flags to the create subcommand. Note that in versions 0.6 of this tool, the --include_lines flag was ignored due to a bug in the code.
    + + +
    +
    +
    +
    + + + +