diff options
52 files changed, 67950 insertions, 0 deletions
diff --git a/documentation/jsapi/LuCI.Class.html b/documentation/jsapi/LuCI.Class.html new file mode 100644 index 000000000..7b5c3a8f7 --- /dev/null +++ b/documentation/jsapi/LuCI.Class.html @@ -0,0 +1,1409 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="utf-8"> + <title>JSDoc: Class: Class</title> + + <script src="scripts/prettify/prettify.js"> </script> + <script src="scripts/prettify/lang-css.js"> </script> + <!--[if lt IE 9]> + <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script> + <![endif]--> + <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css"> + <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css"> +</head> + +<body> + +<div id="main"> + + <h1 class="page-title">Class: Class</h1> + + + + + + +<section> + +<header> + + <h2><span class="attribs"><span class="type-signature"></span></span> + <span class="ancestors"><a href="LuCI.html">LuCI</a>.</span>Class</h2> + + <div class="class-description"><p><code>LuCI.Class</code> is the abstract base class all LuCI classes inherit from.</p> +<p>It provides simple means to create subclasses of given classes and +implements prototypal inheritance.</p></div> + + +</header> + +<article> + <div class="container-overview"> + + + + + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line59">line 59</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + + + + + + + + </div> + + + + + + + + + + + + + + + + + <h3 class="subsection-title">Methods</h3> + + + + + + + + <h4 class="name" id=".extend"><span class="type-signature">(static) </span>extend<span class="signature">(properties)</span><span class="type-signature"> → {<a href="LuCI.Class.html">LuCI.Class</a>}</span></h4> + + + + + + +<div class="description"> + <p>Extends this base class with the properties described in +<code>properties</code> and returns a new subclassed Class instance</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>properties</code></td> + + + <td class="type"> + + +<span class="param-type">Object.<string, *></span> + + + + </td> + + + + + + <td class="description last"><p>An object describing the properties to add to the new +subclass.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line87">line 87</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns a new LuCI.Class sublassed from this class, extended +by the given properties and with its prototype set to this base +class to enable inheritance. The resulting value represents a +class constructor and can be instantiated with <code>new</code>.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type"><a href="LuCI.Class.html">LuCI.Class</a></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id=".instantiate"><span class="type-signature">(static) </span>instantiate<span class="signature">(params, …new_args<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {<a href="LuCI.Class.html">LuCI.Class</a>}</span></h4> + + + + + + +<div class="description"> + <p>Calls the class constructor using <code>new</code> with the given argument +array being passed as variadic parameters to the constructor.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + <th>Attributes</th> + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>params</code></td> + + + <td class="type"> + + +<span class="param-type">Array.<*></span> + + + + </td> + + + <td class="attributes"> + + + + + + </td> + + + + + <td class="description last"><p>An array of arbitrary values which will be passed as arguments +to the constructor function.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>new_args</code></td> + + + <td class="type"> + + +<span class="param-type">*</span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + + + <repeatable><br> + + </td> + + + + + <td class="description last"><p>Specifies arguments to be passed to the subclass constructor +as-is in order to instantiate the new subclass.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line169">line 169</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns a new LuCI.Class instance extended by the given +properties with its prototype set to this base class to +enable inheritance.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type"><a href="LuCI.Class.html">LuCI.Class</a></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id=".isSubclass"><span class="type-signature">(static) </span>isSubclass<span class="signature">(classValue)</span><span class="type-signature"> → {boolean}</span></h4> + + + + + + +<div class="description"> + <p>Checks whether the given class value is a subclass of this class.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>classValue</code></td> + + + <td class="type"> + + +<span class="param-type"><a href="LuCI.Class.html">LuCI.Class</a></span> + + + + </td> + + + + + + <td class="description last"><p>The class object to test.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line195">line 195</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns <code>true</code> when the given <code>classValue</code> is a subclass of this +class or <code>false</code> if the given value is not a valid class or not +a subclass of this class'.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">boolean</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id=".singleton"><span class="type-signature">(static) </span>singleton<span class="signature">(properties, …new_args<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {<a href="LuCI.Class.html">LuCI.Class</a>}</span></h4> + + + + + + +<div class="description"> + <p>Extends this base class with the properties described in +<code>properties</code>, instantiates the resulting subclass using +the additional optional arguments passed to this function +and returns the resulting subclassed Class instance.</p> +<p>This function serves as a convenience shortcut for +<a href="LuCI.Class.html#.extend"><code>Class.extend()</code></a> and subsequent +<code>new</code>.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + <th>Attributes</th> + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>properties</code></td> + + + <td class="type"> + + +<span class="param-type">Object.<string, *></span> + + + + </td> + + + <td class="attributes"> + + + + + + </td> + + + + + <td class="description last"><p>An object describing the properties to add to the new +subclass.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>new_args</code></td> + + + <td class="type"> + + +<span class="param-type">*</span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + + + <repeatable><br> + + </td> + + + + + <td class="description last"><p>Specifies arguments to be passed to the subclass constructor +as-is in order to instantiate the new subclass.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line145">line 145</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns a new LuCI.Class instance extended by the given +properties with its prototype set to this base class to +enable inheritance.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type"><a href="LuCI.Class.html">LuCI.Class</a></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="super"><span class="type-signature"></span>super<span class="signature">(key, callArgs<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {*|null}</span></h4> + + + + + + +<div class="description"> + <p>Walks up the parent class chain and looks for a class member +called <code>key</code> in any of the parent classes this class inherits +from. Returns the member value of the superclass or calls the +member as function and returns its return value when the +optional <code>callArgs</code> array is given.</p> +<p>This function has two signatures and is sensitive to the +amount of arguments passed to it:</p> +<ul> +<li><code>super('key')</code> - +Returns the value of <code>key</code> when found within one of the +parent classes.</li> +<li><code>super('key', ['arg1', 'arg2'])</code> - +Calls the <code>key()</code> method with parameters <code>arg1</code> and <code>arg2</code> +when found within one of the parent classes.</li> +</ul> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + <th>Attributes</th> + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>key</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + <td class="attributes"> + + + + + + </td> + + + + + <td class="description last"><p>The name of the superclass member to retrieve.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>callArgs</code></td> + + + <td class="type"> + + +<span class="param-type">Array.<*></span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + + + </td> + + + + + <td class="description last"><p>An optional array of function call parameters to use. When +this parameter is specified, the found member value is called +as function using the values of this array as arguments.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line267">line 267</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + +<h5>Throws:</h5> + + + +<dl> + <dt> + <div class="param-desc"> + <p>Throws a <code>ReferenceError</code> when <code>callArgs</code> are specified and +the found member named by <code>key</code> is not a function value.</p> + </div> + </dt> + <dd></dd> + <dt> + <dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">ReferenceError</span> + + + </dd> + </dl> + </dt> + <dd></dd> +</dl> + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns the value of the found member or the return value of +the call to the found method. Returns <code>null</code> when no member +was found in the parent class chain or when the call to the +superclass method returned <code>null</code>.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">*</span> +| + +<span class="param-type">null</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="varargs"><span class="type-signature"></span>varargs<span class="signature">(args, offset, …extra_args<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {Array.<*>}</span></h4> + + + + + + +<div class="description"> + <p>Extract all values from the given argument array beginning from +<code>offset</code> and prepend any further given optional parameters to +the beginning of the resulting array copy.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + <th>Attributes</th> + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>args</code></td> + + + <td class="type"> + + +<span class="param-type">Array.<*></span> + + + + </td> + + + <td class="attributes"> + + + + + + </td> + + + + + <td class="description last"><p>The array to extract the values from.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>offset</code></td> + + + <td class="type"> + + +<span class="param-type">number</span> + + + + </td> + + + <td class="attributes"> + + + + + + </td> + + + + + <td class="description last"><p>The offset from which to extract the values. An offset of <code>0</code> +would copy all values till the end.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>extra_args</code></td> + + + <td class="type"> + + +<span class="param-type">*</span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + + + <repeatable><br> + + </td> + + + + + <td class="description last"><p>Extra arguments to add to prepend to the resultung array.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line225">line 225</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns a new array consisting of the optional extra arguments +and the values extracted from the <code>args</code> array beginning with +<code>offset</code>.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">Array.<*></span> + + + </dd> +</dl> + + + + + + + + + + + + + +</article> + +</section> + + + + +</div> + +<nav> + <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="LuCI.html">LuCI</a></li><li><a href="LuCI.Class.html">Class</a></li><li><a href="LuCI.dom.html">dom</a></li><li><a href="LuCI.fs.html">fs</a></li><li><a href="LuCI.Headers.html">Headers</a></li><li><a href="LuCI.Network.html">Network</a></li><li><a href="LuCI.Network.Device.html">Device</a></li><li><a href="LuCI.Network.Hosts.html">Hosts</a></li><li><a href="LuCI.Network.Protocol.html">Protocol</a></li><li><a href="LuCI.Network.WifiDevice.html">WifiDevice</a></li><li><a href="LuCI.Network.WifiNetwork.html">WifiNetwork</a></li><li><a href="LuCI.Poll.html">Poll</a></li><li><a href="LuCI.Request.html">Request</a></li><li><a href="LuCI.Request.poll.html">poll</a></li><li><a href="LuCI.Response.html">Response</a></li><li><a href="LuCI.rpc.html">rpc</a></li><li><a href="LuCI.uci.html">uci</a></li><li><a href="LuCI.view.html">view</a></li><li><a href="LuCI.XHR.html">XHR</a></li></ul> +</nav> + +<br class="clear"> + +<footer> + Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a> on Tue Nov 05 2019 09:33:05 GMT+0100 (Central European Standard Time) +</footer> + +<script> prettyPrint(); </script> +<script src="scripts/linenumber.js"> </script> +</body> +</html>
\ No newline at end of file diff --git a/documentation/jsapi/LuCI.Headers.html b/documentation/jsapi/LuCI.Headers.html new file mode 100644 index 000000000..a63017bcf --- /dev/null +++ b/documentation/jsapi/LuCI.Headers.html @@ -0,0 +1,489 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="utf-8"> + <title>JSDoc: Class: Headers</title> + + <script src="scripts/prettify/prettify.js"> </script> + <script src="scripts/prettify/lang-css.js"> </script> + <!--[if lt IE 9]> + <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script> + <![endif]--> + <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css"> + <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css"> +</head> + +<body> + +<div id="main"> + + <h1 class="page-title">Class: Headers</h1> + + + + + + +<section> + +<header> + + <h2><span class="attribs"><span class="type-signature"></span></span> + <span class="ancestors"><a href="LuCI.html">LuCI</a>.</span>Headers</h2> + + <div class="class-description"><p>The <code>Headers</code> class is an internal utility class exposed in HTTP +response objects using the <code>response.headers</code> property.</p></div> + + +</header> + +<article> + <div class="container-overview"> + + + + + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line324">line 324</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + + + + + + + + </div> + + + + + + + + + + + + + + + + + <h3 class="subsection-title">Methods</h3> + + + + + + + + <h4 class="name" id="get"><span class="type-signature"></span>get<span class="signature">(name)</span><span class="type-signature"> → {string|null}</span></h4> + + + + + + +<div class="description"> + <p>Returns the value of the given header name. +Note: Header-Names are case-insensitive.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>name</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + + + + <td class="description last"><p>The header name to read</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line363">line 363</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>The value of the given header name or <code>null</code> if the header isn't present.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">string</span> +| + +<span class="param-type">null</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="has"><span class="type-signature"></span>has<span class="signature">(name)</span><span class="type-signature"> → {boolean}</span></h4> + + + + + + +<div class="description"> + <p>Checks whether the given header name is present. +Note: Header-Names are case-insensitive.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>name</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + + + + <td class="description last"><p>The header name to check</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line347">line 347</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns <code>true</code> if the header name is present, <code>false</code> otherwise</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">boolean</span> + + + </dd> +</dl> + + + + + + + + + + + + + +</article> + +</section> + + + + +</div> + +<nav> + <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="LuCI.html">LuCI</a></li><li><a href="LuCI.Class.html">Class</a></li><li><a href="LuCI.dom.html">dom</a></li><li><a href="LuCI.fs.html">fs</a></li><li><a href="LuCI.Headers.html">Headers</a></li><li><a href="LuCI.Network.html">Network</a></li><li><a href="LuCI.Network.Device.html">Device</a></li><li><a href="LuCI.Network.Hosts.html">Hosts</a></li><li><a href="LuCI.Network.Protocol.html">Protocol</a></li><li><a href="LuCI.Network.WifiDevice.html">WifiDevice</a></li><li><a href="LuCI.Network.WifiNetwork.html">WifiNetwork</a></li><li><a href="LuCI.Poll.html">Poll</a></li><li><a href="LuCI.Request.html">Request</a></li><li><a href="LuCI.Request.poll.html">poll</a></li><li><a href="LuCI.Response.html">Response</a></li><li><a href="LuCI.rpc.html">rpc</a></li><li><a href="LuCI.uci.html">uci</a></li><li><a href="LuCI.view.html">view</a></li><li><a href="LuCI.XHR.html">XHR</a></li></ul> +</nav> + +<br class="clear"> + +<footer> + Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a> on Tue Nov 05 2019 09:33:05 GMT+0100 (Central European Standard Time) +</footer> + +<script> prettyPrint(); </script> +<script src="scripts/linenumber.js"> </script> +</body> +</html>
\ No newline at end of file diff --git a/documentation/jsapi/LuCI.Network.Device.html b/documentation/jsapi/LuCI.Network.Device.html new file mode 100644 index 000000000..0236f8c50 --- /dev/null +++ b/documentation/jsapi/LuCI.Network.Device.html @@ -0,0 +1,2626 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="utf-8"> + <title>JSDoc: Class: Device</title> + + <script src="scripts/prettify/prettify.js"> </script> + <script src="scripts/prettify/lang-css.js"> </script> + <!--[if lt IE 9]> + <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script> + <![endif]--> + <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css"> + <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css"> +</head> + +<body> + +<div id="main"> + + <h1 class="page-title">Class: Device</h1> + + + + + + +<section> + +<header> + + <h2><span class="attribs"><span class="type-signature"></span></span> + <span class="ancestors"><a href="LuCI.html">LuCI</a><a href="LuCI.Network.html">.Network</a>.</span>Device</h2> + + <div class="class-description"><p>A <code>Network.Device</code> class instance represents an underlying Linux network +device and allows querying device details such as packet statistics or MTU.</p></div> + + +</header> + +<article> + <div class="container-overview"> + + + + + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line2593">line 2593</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + + + + + + + + </div> + + + + + + + + + + + + + + + + + <h3 class="subsection-title">Methods</h3> + + + + + + + + <h4 class="name" id="getBridgeID"><span class="type-signature"></span>getBridgeID<span class="signature">()</span><span class="type-signature"> → {null|string}</span></h4> + + + + + + +<div class="description"> + <p>Get the bridge ID</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line2800">line 2800</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns the ID of this network bridge or <code>null</code> if this network +device is not a Linux bridge.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">null</span> +| + +<span class="param-type">string</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getBridgeSTP"><span class="type-signature"></span>getBridgeSTP<span class="signature">()</span><span class="type-signature"> → {boolean}</span></h4> + + + + + + +<div class="description"> + <p>Get the bridge STP setting</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line2812">line 2812</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns <code>true</code> when this device is a Linux bridge and has <code>stp</code> +enabled, else <code>false</code>.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">boolean</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getI18n"><span class="type-signature"></span>getI18n<span class="signature">()</span><span class="type-signature"> → {string}</span></h4> + + + + + + +<div class="description"> + <p>Get a long description string for the device.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line2727">line 2727</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns a string containing the type description and device name +for non-wifi devices or operation mode and ssid for wifi ones.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">string</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getIP6Addrs"><span class="type-signature"></span>getIP6Addrs<span class="signature">()</span><span class="type-signature"> → {Array.<string>}</span></h4> + + + + + + +<div class="description"> + <p>Get the IPv6 addresses configured on the device.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line2671">line 2671</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns an array of IPv6 address strings.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">Array.<string></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getIPAddrs"><span class="type-signature"></span>getIPAddrs<span class="signature">()</span><span class="type-signature"> → {Array.<string>}</span></h4> + + + + + + +<div class="description"> + <p>Get the IPv4 addresses configured on the device.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line2660">line 2660</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns an array of IPv4 address strings.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">Array.<string></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getMAC"><span class="type-signature"></span>getMAC<span class="signature">()</span><span class="type-signature"> → {null|string}</span></h4> + + + + + + +<div class="description"> + <p>Get the MAC address of the device.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line2639">line 2639</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns the MAC address of the device or <code>null</code> if not applicable, +e.g. for non-ethernet tunnel devices.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">null</span> +| + +<span class="param-type">string</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getMTU"><span class="type-signature"></span>getMTU<span class="signature">()</span><span class="type-signature"> → {number}</span></h4> + + + + + + +<div class="description"> + <p>Get the MTU of the device.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line2650">line 2650</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns the MTU of the device.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">number</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getName"><span class="type-signature"></span>getName<span class="signature">()</span><span class="type-signature"> → {string}</span></h4> + + + + + + +<div class="description"> + <p>Get the name of the network device.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line2628">line 2628</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns the name of the device, e.g. <code>eth0</code> or <code>wlan0</code>.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">string</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getNetwork"><span class="type-signature"></span>getNetwork<span class="signature">()</span><span class="type-signature"> → {null|<a href="LuCI.Network.Protocol.html">LuCI.Network.Protocol</a>}</span></h4> + + + + + + +<div class="description"> + <p>Get the primary logical interface this device is assigned to.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line2907">line 2907</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns a <code>Network.Protocol</code> instance representing the logical +interface this device is attached to or <code>null</code> if it is not +assigned to any logical interface.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">null</span> +| + +<span class="param-type"><a href="LuCI.Network.Protocol.html">LuCI.Network.Protocol</a></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getNetworks"><span class="type-signature"></span>getNetworks<span class="signature">()</span><span class="type-signature"> → {Array.<<a href="LuCI.Network.Protocol.html">LuCI.Network.Protocol</a>>}</span></h4> + + + + + + +<div class="description"> + <p>Get the logical interfaces this device is assigned to.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line2918">line 2918</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns an array of <code>Network.Protocol</code> instances representing the +logical interfaces this device is assigned to.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">Array.<<a href="LuCI.Network.Protocol.html">LuCI.Network.Protocol</a>></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getPorts"><span class="type-signature"></span>getPorts<span class="signature">()</span><span class="type-signature"> → {null|Array.<<a href="LuCI.Network.Device.html">LuCI.Network.Device</a>>}</span></h4> + + + + + + +<div class="description"> + <p>Get the associated bridge ports of the device.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line2778">line 2778</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns an array of <code>Network.Device</code> instances representing the ports +(slave interfaces) of the bridge or <code>null</code> when this device isn't +a Linux bridge.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">null</span> +| + +<span class="param-type">Array.<<a href="LuCI.Network.Device.html">LuCI.Network.Device</a>></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getRXBytes"><span class="type-signature"></span>getRXBytes<span class="signature">()</span><span class="type-signature"> → {number}</span></h4> + + + + + + +<div class="description"> + <p>Get the amount of received bytes.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line2872">line 2872</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns the amount of bytes received by the network device.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">number</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getRXPackets"><span class="type-signature"></span>getRXPackets<span class="signature">()</span><span class="type-signature"> → {number}</span></h4> + + + + + + +<div class="description"> + <p>Get the amount of received packets.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line2894">line 2894</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns the amount of packets received by the network device.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">number</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getShortName"><span class="type-signature"></span>getShortName<span class="signature">()</span><span class="type-signature"> → {string}</span></h4> + + + + + + +<div class="description"> + <p>Get a short description string for the device.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line2713">line 2713</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns the device name for non-wifi devices or a string containing +the operation mode and SSID for wifi devices.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">string</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getTXBytes"><span class="type-signature"></span>getTXBytes<span class="signature">()</span><span class="type-signature"> → {number}</span></h4> + + + + + + +<div class="description"> + <p>Get the amount of transmitted bytes.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line2861">line 2861</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns the amount of bytes transmitted by the network device.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">number</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getTXPackets"><span class="type-signature"></span>getTXPackets<span class="signature">()</span><span class="type-signature"> → {number}</span></h4> + + + + + + +<div class="description"> + <p>Get the amount of transmitted packets.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line2883">line 2883</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns the amount of packets transmitted by the network device.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">number</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getType"><span class="type-signature"></span>getType<span class="signature">()</span><span class="type-signature"> → {string}</span></h4> + + + + + + +<div class="description"> + <p>Get the type of the device..</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line2689">line 2689</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns a string describing the type of the network device:</p> +<ul> +<li><code>alias</code> if it is an abstract alias device (<code>@</code> notation)</li> +<li><code>wifi</code> if it is a wireless interface (e.g. <code>wlan0</code>)</li> +<li><code>bridge</code> if it is a bridge device (e.g. <code>br-lan</code>)</li> +<li><code>tunnel</code> if it is a tun or tap device (e.g. <code>tun0</code>)</li> +<li><code>vlan</code> if it is a vlan device (e.g. <code>eth0.1</code>)</li> +<li><code>switch</code> if it is a switch device (e.g.<code>eth1</code> connected to switch0)</li> +<li><code>ethernet</code> for all other device types</li> +</ul> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">string</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getTypeI18n"><span class="type-signature"></span>getTypeI18n<span class="signature">()</span><span class="type-signature"> → {string}</span></h4> + + + + + + +<div class="description"> + <p>Get a string describing the device type.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line2745">line 2745</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns a string describing the type, e.g. "Wireless Adapter" or +"Bridge".</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">string</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getWifiNetwork"><span class="type-signature"></span>getWifiNetwork<span class="signature">()</span><span class="type-signature"> → {null|<a href="LuCI.Network.WifiNetwork.html">LuCI.Network.WifiNetwork</a>}</span></h4> + + + + + + +<div class="description"> + <p>Get the related wireless network this device is related to.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line2942">line 2942</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns a <code>Network.WifiNetwork</code> instance representing the wireless +network corresponding to this network device or <code>null</code> if this device +is not a wireless device.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">null</span> +| + +<span class="param-type"><a href="LuCI.Network.WifiNetwork.html">LuCI.Network.WifiNetwork</a></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="isBridge"><span class="type-signature"></span>isBridge<span class="signature">()</span><span class="type-signature"> → {boolean}</span></h4> + + + + + + +<div class="description"> + <p>Checks whether this device is a Linux bridge.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line2840">line 2840</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns <code>true</code> when the network device is present and a Linux bridge, +else <code>false</code>.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">boolean</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="isBridgePort"><span class="type-signature"></span>isBridgePort<span class="signature">()</span><span class="type-signature"> → {boolean}</span></h4> + + + + + + +<div class="description"> + <p>Checks whether this device is part of a Linux bridge.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line2851">line 2851</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns <code>true</code> when this network device is part of a bridge, +else <code>false</code>.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">boolean</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="isUp"><span class="type-signature"></span>isUp<span class="signature">()</span><span class="type-signature"> → {boolean}</span></h4> + + + + + + +<div class="description"> + <p>Checks whether this device is up.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line2824">line 2824</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns <code>true</code> when the associated device is running pr <code>false</code> +when it is down or absent.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">boolean</span> + + + </dd> +</dl> + + + + + + + + + + + + + +</article> + +</section> + + + + +</div> + +<nav> + <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="LuCI.html">LuCI</a></li><li><a href="LuCI.Class.html">Class</a></li><li><a href="LuCI.dom.html">dom</a></li><li><a href="LuCI.fs.html">fs</a></li><li><a href="LuCI.Headers.html">Headers</a></li><li><a href="LuCI.Network.html">Network</a></li><li><a href="LuCI.Network.Device.html">Device</a></li><li><a href="LuCI.Network.Hosts.html">Hosts</a></li><li><a href="LuCI.Network.Protocol.html">Protocol</a></li><li><a href="LuCI.Network.WifiDevice.html">WifiDevice</a></li><li><a href="LuCI.Network.WifiNetwork.html">WifiNetwork</a></li><li><a href="LuCI.Poll.html">Poll</a></li><li><a href="LuCI.Request.html">Request</a></li><li><a href="LuCI.Request.poll.html">poll</a></li><li><a href="LuCI.Response.html">Response</a></li><li><a href="LuCI.rpc.html">rpc</a></li><li><a href="LuCI.uci.html">uci</a></li><li><a href="LuCI.view.html">view</a></li><li><a href="LuCI.XHR.html">XHR</a></li></ul> +</nav> + +<br class="clear"> + +<footer> + Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a> on Tue Nov 05 2019 09:33:05 GMT+0100 (Central European Standard Time) +</footer> + +<script> prettyPrint(); </script> +<script src="scripts/linenumber.js"> </script> +</body> +</html>
\ No newline at end of file diff --git a/documentation/jsapi/LuCI.Network.Hosts.html b/documentation/jsapi/LuCI.Network.Hosts.html new file mode 100644 index 000000000..f98641bb7 --- /dev/null +++ b/documentation/jsapi/LuCI.Network.Hosts.html @@ -0,0 +1,1504 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="utf-8"> + <title>JSDoc: Class: Hosts</title> + + <script src="scripts/prettify/prettify.js"> </script> + <script src="scripts/prettify/lang-css.js"> </script> + <!--[if lt IE 9]> + <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script> + <![endif]--> + <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css"> + <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css"> +</head> + +<body> + +<div id="main"> + + <h1 class="page-title">Class: Hosts</h1> + + + + + + +<section> + +<header> + + <h2><span class="attribs"><span class="type-signature"></span></span> + <span class="ancestors"><a href="LuCI.html">LuCI</a><a href="LuCI.Network.html">.Network</a>.</span>Hosts</h2> + + <div class="class-description"><p>The <code>LuCI.Network.Hosts</code> class encapsulates host information aggregated +from multiple sources and provides convenience functions to access the +host information by different criteria.</p></div> + + +</header> + +<article> + <div class="container-overview"> + + + + + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line1628">line 1628</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + + + + + + + + </div> + + + + + + + + + + + + + + + + + <h3 class="subsection-title">Methods</h3> + + + + + + + + <h4 class="name" id="getHostnameByIP6Addr"><span class="type-signature"></span>getHostnameByIP6Addr<span class="signature">(ipaddr)</span><span class="type-signature"> → {null|string}</span></h4> + + + + + + +<div class="description"> + <p>Lookup the hostname associated with the given IPv6 address.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>ipaddr</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + + + + <td class="description last"><p>The IPv6 address to lookup.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line1725">line 1725</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns the hostname associated with the given IPv6 or <code>null</code> if +no matching host could be found or if no hostname is known for +the corresponding host.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">null</span> +| + +<span class="param-type">string</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getHostnameByIPAddr"><span class="type-signature"></span>getHostnameByIPAddr<span class="signature">(ipaddr)</span><span class="type-signature"> → {null|string}</span></h4> + + + + + + +<div class="description"> + <p>Lookup the hostname associated with the given IPv4 address.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>ipaddr</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + + + + <td class="description last"><p>The IPv4 address to lookup.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line1689">line 1689</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns the hostname associated with the given IPv4 or <code>null</code> if +no matching host could be found or if no hostname is known for +the corresponding host.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">null</span> +| + +<span class="param-type">string</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getHostnameByMACAddr"><span class="type-signature"></span>getHostnameByMACAddr<span class="signature">(mac)</span><span class="type-signature"> → {null|string}</span></h4> + + + + + + +<div class="description"> + <p>Lookup the hostname associated with the given MAC address.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>mac</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + + + + <td class="description last"><p>The MAC address to lookup.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line1644">line 1644</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns the hostname associated with the given MAC or <code>null</code> if +no matching host could be found or if no hostname is known for +the corresponding host.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">null</span> +| + +<span class="param-type">string</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getIP6AddrByMACAddr"><span class="type-signature"></span>getIP6AddrByMACAddr<span class="signature">(mac)</span><span class="type-signature"> → {null|string}</span></h4> + + + + + + +<div class="description"> + <p>Lookup the IPv6 address associated with the given MAC address.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>mac</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + + + + <td class="description last"><p>The MAC address to lookup.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line1674">line 1674</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns the IPv6 address associated with the given MAC or <code>null</code> if +no matching host could be found or if no IPv6 address is known for +the corresponding host.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">null</span> +| + +<span class="param-type">string</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getIPAddrByMACAddr"><span class="type-signature"></span>getIPAddrByMACAddr<span class="signature">(mac)</span><span class="type-signature"> → {null|string}</span></h4> + + + + + + +<div class="description"> + <p>Lookup the IPv4 address associated with the given MAC address.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>mac</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + + + + <td class="description last"><p>The MAC address to lookup.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line1659">line 1659</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns the IPv4 address associated with the given MAC or <code>null</code> if +no matching host could be found or if no IPv4 address is known for +the corresponding host.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">null</span> +| + +<span class="param-type">string</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getMACAddrByIP6Addr"><span class="type-signature"></span>getMACAddrByIP6Addr<span class="signature">(ipaddr)</span><span class="type-signature"> → {null|string}</span></h4> + + + + + + +<div class="description"> + <p>Lookup the MAC address associated with the given IPv6 address.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>ipaddr</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + + + + <td class="description last"><p>The IPv6 address to lookup.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line1743">line 1743</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns the MAC address associated with the given IPv6 or <code>null</code> if +no matching host could be found or if no MAC address is known for +the corresponding host.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">null</span> +| + +<span class="param-type">string</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getMACAddrByIPAddr"><span class="type-signature"></span>getMACAddrByIPAddr<span class="signature">(ipaddr)</span><span class="type-signature"> → {null|string}</span></h4> + + + + + + +<div class="description"> + <p>Lookup the MAC address associated with the given IPv4 address.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>ipaddr</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + + + + <td class="description last"><p>The IPv4 address to lookup.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line1707">line 1707</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns the MAC address associated with the given IPv4 or <code>null</code> if +no matching host could be found or if no MAC address is known for +the corresponding host.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">null</span> +| + +<span class="param-type">string</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getMACHints"><span class="type-signature"></span>getMACHints<span class="signature">(preferIp6<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {Array.<Array.<string>>}</span></h4> + + + + + + +<div class="description"> + <p>Return an array of (MAC address, name hint) tuples sorted by +MAC address.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + <th>Attributes</th> + + + + <th>Default</th> + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>preferIp6</code></td> + + + <td class="type"> + + +<span class="param-type">boolean</span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + + + </td> + + + + <td class="default"> + + false + + </td> + + + <td class="description last"><p>Whether to prefer IPv6 addresses (<code>true</code>) or IPv4 addresses (<code>false</code>) +as name hint when no hostname is known for a specific MAC address.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line1771">line 1771</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns an array of arrays containing a name hint for each found +MAC address on the system. The array is sorted ascending by MAC.</p> +<p>Each item of the resulting array is a two element array with the +MAC being the first element and the name hint being the second +element. The name hint is either the hostname, an IPv4 or an IPv6 +address related to the MAC address.</p> +<p>If no hostname but both IPv4 and IPv6 addresses are known, the +<code>preferIP6</code> flag specifies whether the IPv6 or the IPv4 address +is used as hint.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">Array.<Array.<string>></span> + + + </dd> +</dl> + + + + + + + + + + + + + +</article> + +</section> + + + + +</div> + +<nav> + <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="LuCI.html">LuCI</a></li><li><a href="LuCI.Class.html">Class</a></li><li><a href="LuCI.dom.html">dom</a></li><li><a href="LuCI.fs.html">fs</a></li><li><a href="LuCI.Headers.html">Headers</a></li><li><a href="LuCI.Network.html">Network</a></li><li><a href="LuCI.Network.Device.html">Device</a></li><li><a href="LuCI.Network.Hosts.html">Hosts</a></li><li><a href="LuCI.Network.Protocol.html">Protocol</a></li><li><a href="LuCI.Network.WifiDevice.html">WifiDevice</a></li><li><a href="LuCI.Network.WifiNetwork.html">WifiNetwork</a></li><li><a href="LuCI.Poll.html">Poll</a></li><li><a href="LuCI.Request.html">Request</a></li><li><a href="LuCI.Request.poll.html">poll</a></li><li><a href="LuCI.Response.html">Response</a></li><li><a href="LuCI.rpc.html">rpc</a></li><li><a href="LuCI.uci.html">uci</a></li><li><a href="LuCI.view.html">view</a></li><li><a href="LuCI.XHR.html">XHR</a></li></ul> +</nav> + +<br class="clear"> + +<footer> + Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a> on Tue Nov 05 2019 09:33:05 GMT+0100 (Central European Standard Time) +</footer> + +<script> prettyPrint(); </script> +<script src="scripts/linenumber.js"> </script> +</body> +</html>
\ No newline at end of file diff --git a/documentation/jsapi/LuCI.Network.Protocol.html b/documentation/jsapi/LuCI.Network.Protocol.html new file mode 100644 index 000000000..e23801a32 --- /dev/null +++ b/documentation/jsapi/LuCI.Network.Protocol.html @@ -0,0 +1,4767 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="utf-8"> + <title>JSDoc: Class: Protocol</title> + + <script src="scripts/prettify/prettify.js"> </script> + <script src="scripts/prettify/lang-css.js"> </script> + <!--[if lt IE 9]> + <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script> + <![endif]--> + <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css"> + <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css"> +</head> + +<body> + +<div id="main"> + + <h1 class="page-title">Class: Protocol</h1> + + + + + + +<section> + +<header> + + <h2><span class="attribs"><span class="type-signature"></span></span> + <span class="ancestors"><a href="LuCI.html">LuCI</a><a href="LuCI.Network.html">.Network</a>.</span>Protocol</h2> + + <div class="class-description"><p>The <code>Network.Protocol</code> class serves as base for protocol specific +subclasses which describe logical UCI networks defined by <code>config interface</code> sections in <code>/etc/config/network</code>.</p></div> + + +</header> + +<article> + <div class="container-overview"> + + + + + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line1794">line 1794</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + + + + + + + + </div> + + + + + + + + + + + + + + + + + <h3 class="subsection-title">Methods</h3> + + + + + + + + <h4 class="name" id="addDevice"><span class="type-signature"></span>addDevice<span class="signature">(device)</span><span class="type-signature"> → {boolean}</span></h4> + + + + + + +<div class="description"> + <p>Add the given network device to the logical interface.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>device</code></td> + + + <td class="type"> + + +<span class="param-type"><a href="LuCI.Network.Protocol.html">LuCI.Network.Protocol</a></span> +| + +<span class="param-type"><a href="LuCI.Network.Device.html">LuCI.Network.Device</a></span> +| + +<span class="param-type"><a href="LuCI.Network.WifiDevice.html">LuCI.Network.WifiDevice</a></span> +| + +<span class="param-type"><a href="LuCI.Network.WifiNetwork.html">LuCI.Network.WifiNetwork</a></span> +| + +<span class="param-type">string</span> + + + + </td> + + + + + + <td class="description last"><p>The object or device name to add to the logical interface. In case the +given argument is not a string, it is resolved though the +<a href="LuCI.Network.html#getIfnameOf"><code>Network.getIfnameOf()</code></a> function.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line2383">line 2383</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns <code>true</code> if the device name has been added or <code>false</code> if any +argument was invalid, if the device was already part of the logical +interface or if the logical interface is virtual.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">boolean</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="containsDevice"><span class="type-signature"></span>containsDevice<span class="signature">(device)</span><span class="type-signature"> → {boolean}</span></h4> + + + + + + +<div class="description"> + <p>Checks whether this logical interface contains the given device +object.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>device</code></td> + + + <td class="type"> + + +<span class="param-type"><a href="LuCI.Network.Protocol.html">LuCI.Network.Protocol</a></span> +| + +<span class="param-type"><a href="LuCI.Network.Device.html">LuCI.Network.Device</a></span> +| + +<span class="param-type"><a href="LuCI.Network.WifiDevice.html">LuCI.Network.WifiDevice</a></span> +| + +<span class="param-type"><a href="LuCI.Network.WifiNetwork.html">LuCI.Network.WifiNetwork</a></span> +| + +<span class="param-type">string</span> + + + + </td> + + + + + + <td class="description last"><p>The object or device name to check. In case the given argument is not +a string, it is resolved though the +<a href="LuCI.Network.html#getIfnameOf"><code>Network.getIfnameOf()</code></a> function.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line2552">line 2552</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns <code>true</code> when this logical interface contains the given network +device or <code>false</code> if not.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">boolean</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="deleteDevice"><span class="type-signature"></span>deleteDevice<span class="signature">(device)</span><span class="type-signature"> → {boolean}</span></h4> + + + + + + +<div class="description"> + <p>Remove the given network device from the logical interface.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>device</code></td> + + + <td class="type"> + + +<span class="param-type"><a href="LuCI.Network.Protocol.html">LuCI.Network.Protocol</a></span> +| + +<span class="param-type"><a href="LuCI.Network.Device.html">LuCI.Network.Device</a></span> +| + +<span class="param-type"><a href="LuCI.Network.WifiDevice.html">LuCI.Network.WifiDevice</a></span> +| + +<span class="param-type"><a href="LuCI.Network.WifiNetwork.html">LuCI.Network.WifiNetwork</a></span> +| + +<span class="param-type">string</span> + + + + </td> + + + + + + <td class="description last"><p>The object or device name to remove from the logical interface. In case +the given argument is not a string, it is resolved though the +<a href="LuCI.Network.html#getIfnameOf"><code>Network.getIfnameOf()</code></a> function.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line2410">line 2410</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns <code>true</code> if the device name has been added or <code>false</code> if any +argument was invalid, if the device was already part of the logical +interface or if the logical interface is virtual.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">boolean</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="get"><span class="type-signature"></span>get<span class="signature">(opt)</span><span class="type-signature"> → {null|string|Array.<string>}</span></h4> + + + + + + +<div class="description"> + <p>Read the given UCI option value of this network.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>opt</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + + + + <td class="description last"><p>The UCI option name to read.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line1827">line 1827</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns the UCI option value or <code>null</code> if the requested option is +not found.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">null</span> +| + +<span class="param-type">string</span> +| + +<span class="param-type">Array.<string></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getDevice"><span class="type-signature"></span>getDevice<span class="signature">()</span><span class="type-signature"> → {<a href="LuCI.Network.Device.html">LuCI.Network.Device</a>}</span></h4> + + + + + + +<div class="description"> + <p>Returns the Linux network device associated with this logical +interface.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line2437">line 2437</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns a <code>Network.Device</code> class instance representing the +expected Linux network device according to the configuration.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type"><a href="LuCI.Network.Device.html">LuCI.Network.Device</a></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getDevices"><span class="type-signature"></span>getDevices<span class="signature">()</span><span class="type-signature"> → {null|Array.<<a href="LuCI.Network.Device.html">LuCI.Network.Device</a>>}</span></h4> + + + + + + +<div class="description"> + <p>Returns a list of network sub-devices associated with this logical +interface.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line2498">line 2498</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns an array of of <code>Network.Device</code> class instances representing +the sub-devices attached to this logical interface or <code>null</code> if the +logical interface does not support sub-devices, e.g. because it is +virtual and not a bridge.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">null</span> +| + +<span class="param-type">Array.<<a href="LuCI.Network.Device.html">LuCI.Network.Device</a>></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getDNS6Addrs"><span class="type-signature"></span>getDNS6Addrs<span class="signature">()</span><span class="type-signature"> → {Array.<string>}</span></h4> + + + + + + +<div class="description"> + <p>Query the IPv6 DNS servers associated with the logical interface.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line2152">line 2152</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns an array of IPv6 DNS servers registered by the remote +protocol backend.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">Array.<string></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getDNSAddrs"><span class="type-signature"></span>getDNSAddrs<span class="signature">()</span><span class="type-signature"> → {Array.<string>}</span></h4> + + + + + + +<div class="description"> + <p>Query the IPv4 DNS servers associated with the logical interface.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line2064">line 2064</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns an array of IPv4 DNS servers registered by the remote +protocol backend.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">Array.<string></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getErrors"><span class="type-signature"></span>getErrors<span class="signature">()</span><span class="type-signature"> → {Array.<string>}</span></h4> + + + + + + +<div class="description"> + <p>Query interface error messages published in <code>ubus</code> runtime state.</p> +<p>Interface errors are emitted by remote protocol handlers if the setup +of the underlying logical interface failed, e.g. due to bad +configuration or network connectivity issues.</p> +<p>This function will translate the found error codes to human readable +messages using the descriptions registered by +<a href="LuCI.Network.html#registerErrorCode"><code>Network.registerErrorCode()</code></a> +and fall back to <code>"Unknown error (%s)"</code> where <code>%s</code> is replaced by the +error code in case no translation can be found.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line2196">line 2196</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns an array of translated interface error messages.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">Array.<string></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getExpiry"><span class="type-signature"></span>getExpiry<span class="signature">()</span><span class="type-signature"> → {number}</span></h4> + + + + + + +<div class="description"> + <p>Get the logical interface expiry time in seconds.</p> +<p>For protocols that have a concept of a lease, such as DHCP or +DHCPv6, this function returns the remaining time in seconds +until the lease expires.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line1947">line 1947</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns the amount of seconds until the lease expires or <code>-1</code> +if it isn't applicable to the associated protocol.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">number</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getGateway6Addr"><span class="type-signature"></span>getGateway6Addr<span class="signature">()</span><span class="type-signature"> → {string}</span></h4> + + + + + + +<div class="description"> + <p>Query the gateway (nexthop) of the IPv6 default route associated with +this logical interface.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line2132">line 2132</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns a string containing the IPv6 nexthop address of the associated +default route or <code>null</code> if no default route was found.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">string</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getGatewayAddr"><span class="type-signature"></span>getGatewayAddr<span class="signature">()</span><span class="type-signature"> → {string}</span></h4> + + + + + + +<div class="description"> + <p>Query the gateway (nexthop) of the default route associated with +this logical interface.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line2044">line 2044</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns a string containing the IPv4 nexthop address of the associated +default route or <code>null</code> if no default route was found.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">string</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getI18n"><span class="type-signature">(abstract) </span>getI18n<span class="signature">()</span><span class="type-signature"> → {string}</span></h4> + + + + + + +<div class="description"> + <p>Return a human readable description for the protcol, such as +<code>Static address</code> or <code>DHCP client</code>.</p> +<p>This function should be overwritten by subclasses.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line1892">line 1892</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns the description string.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">string</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getIfname"><span class="type-signature"></span>getIfname<span class="signature">()</span><span class="type-signature"> → {null|string}</span></h4> + + + + + + +<div class="description"> + <p>Get the associared Linux network device of this network.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line1852">line 1852</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns the name of the associated network device or <code>null</code> if +it could not be determined.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">null</span> +| + +<span class="param-type">string</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getIP6Addr"><span class="type-signature"></span>getIP6Addr<span class="signature">()</span><span class="type-signature"> → {null|string}</span></h4> + + + + + + +<div class="description"> + <p>Query the first (primary) IPv6 address of the logical interface.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line2083">line 2083</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns the primary IPv6 address registered by the protocol handler +in CIDR notation or <code>null</code> if no IPv6 addresses were set.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">null</span> +| + +<span class="param-type">string</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getIP6Addrs"><span class="type-signature"></span>getIP6Addrs<span class="signature">()</span><span class="type-signature"> → {Array.<string>}</span></h4> + + + + + + +<div class="description"> + <p>Query all IPv6 addresses of the logical interface.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line2105">line 2105</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns an array of IPv6 addresses in CIDR notation which have been +registered by the protocol handler. The order of the resulting array +follows the order of the addresses in <code>ubus</code> runtime information.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">Array.<string></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getIP6Prefix"><span class="type-signature"></span>getIP6Prefix<span class="signature">()</span><span class="type-signature"> → {null|string}</span></h4> + + + + + + +<div class="description"> + <p>Query the routed IPv6 prefix associated with the logical interface.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line2171">line 2171</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns the routed IPv6 prefix registered by the remote protocol +handler or <code>null</code> if no prefix is present.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">null</span> +| + +<span class="param-type">string</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getIPAddr"><span class="type-signature"></span>getIPAddr<span class="signature">()</span><span class="type-signature"> → {null|string}</span></h4> + + + + + + +<div class="description"> + <p>Query the first (primary) IPv4 address of the logical interface.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line1999">line 1999</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns the primary IPv4 address registered by the protocol handler +or <code>null</code> if no IPv4 addresses were set.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">null</span> +| + +<span class="param-type">string</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getIPAddrs"><span class="type-signature"></span>getIPAddrs<span class="signature">()</span><span class="type-signature"> → {Array.<string>}</span></h4> + + + + + + +<div class="description"> + <p>Query all IPv4 addresses of the logical interface.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line2012">line 2012</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns an array of IPv4 addresses in CIDR notation which have been +registered by the protocol handler. The order of the resulting array +follows the order of the addresses in <code>ubus</code> runtime information.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">Array.<string></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getL2Device"><span class="type-signature"></span>getL2Device<span class="signature">()</span><span class="type-signature"> → {<a href="LuCI.Network.Device.html">LuCI.Network.Device</a>}</span></h4> + + + + + + +<div class="description"> + <p>Returns the layer 2 linux network device currently associated +with this logical interface.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line2470">line 2470</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns a <code>Network.Device</code> class instance representing the Linux +network device currently associated with the logical interface.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type"><a href="LuCI.Network.Device.html">LuCI.Network.Device</a></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getL3Device"><span class="type-signature"></span>getL3Device<span class="signature">()</span><span class="type-signature"> → {<a href="LuCI.Network.Device.html">LuCI.Network.Device</a>}</span></h4> + + + + + + +<div class="description"> + <p>Returns the layer 3 linux network device currently associated +with this logical interface.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line2483">line 2483</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns a <code>Network.Device</code> class instance representing the Linux +network device currently associated with the logical interface.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type"><a href="LuCI.Network.Device.html">LuCI.Network.Device</a></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getMetric"><span class="type-signature"></span>getMetric<span class="signature">()</span><span class="type-signature"> → {number}</span></h4> + + + + + + +<div class="description"> + <p>Get the metric value of the logical interface.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line1967">line 1967</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns the current metric value used for device and network +routes spawned by the associated logical interface.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">number</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getName"><span class="type-signature"></span>getName<span class="signature">()</span><span class="type-signature"> → {string}</span></h4> + + + + + + +<div class="description"> + <p>Get the name of the associated logical interface.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line1922">line 1922</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns the logical interface name, such as <code>lan</code> or <code>wan</code>.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">string</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getNetmask"><span class="type-signature"></span>getNetmask<span class="signature">()</span><span class="type-signature"> → {null|string}</span></h4> + + + + + + +<div class="description"> + <p>Query the first (primary) IPv4 netmask of the logical interface.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line2030">line 2030</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns the netmask of the primary IPv4 address registered by the +protocol handler or <code>null</code> if no IPv4 addresses were set.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">null</span> +| + +<span class="param-type">string</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getOpkgPackage"><span class="type-signature">(abstract) </span>getOpkgPackage<span class="signature">()</span><span class="type-signature"> → {string}</span></h4> + + + + + + +<div class="description"> + <p>Get the name of the opkg package providing the protocol functionality.</p> +<p>This function should be overwritten by protocol specific subclasses.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line2236">line 2236</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns the name of the opkg package required for the protocol to +function, e.g. <code>odhcp6c</code> for the <code>dhcpv6</code> prototocol.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">string</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getProtocol"><span class="type-signature">(abstract) </span>getProtocol<span class="signature">()</span><span class="type-signature"> → {string}</span></h4> + + + + + + +<div class="description"> + <p>Get the name of this network protocol class.</p> +<p>This function will be overwritten by subclasses created by +<a href="LuCI.Network.html#registerProtocol"><code>Network.registerProtocol()</code></a>.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line1878">line 1878</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns the name of the network protocol implementation, e.g. +<code>static</code> or <code>dhcp</code>.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">string</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getType"><span class="type-signature"></span>getType<span class="signature">()</span><span class="type-signature"> → {null|string}</span></h4> + + + + + + +<div class="description"> + <p>Get the type of the underlying interface.</p> +<p>This function actually is a convenience wrapper around +<code>proto.get("type")</code> and is mainly used by other <code>LuCI.Network</code> code +to check whether the interface is declared as bridge in UCI.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line1912">line 1912</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns the value of the <code>type</code> option of the associated logical +interface or <code>null</code> if no <code>type</code> option is set.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">null</span> +| + +<span class="param-type">string</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getUptime"><span class="type-signature"></span>getUptime<span class="signature">()</span><span class="type-signature"> → {number}</span></h4> + + + + + + +<div class="description"> + <p>Get the uptime of the logical interface.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line1932">line 1932</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns the uptime of the associated interface in seconds.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">number</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getZoneName"><span class="type-signature"></span>getZoneName<span class="signature">()</span><span class="type-signature"> → {null|string}</span></h4> + + + + + + +<div class="description"> + <p>Get the requested firewall zone name of the logical interface.</p> +<p>Some protocol implementations request a specific firewall zone +to trigger inclusion of their resulting network devices into the +firewall rule set.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line1983">line 1983</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns the requested firewall zone name as published in the +<code>ubus</code> runtime information or <code>null</code> if the remote protocol +handler didn't request a zone.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">null</span> +| + +<span class="param-type">string</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="isAlias"><span class="type-signature"></span>isAlias<span class="signature">()</span><span class="type-signature"> → {null|string}</span></h4> + + + + + + +<div class="description"> + <p>Checks whether this interface is an alias interface.</p> +<p>Alias interfaces are interfaces layering on top of another interface +and are denoted by a special <code>@interfacename</code> notation in the +underlying <code>ifname</code> option.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line2324">line 2324</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns the name of the parent interface if this logical interface +is an alias or <code>null</code> if it is not an alias interface.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">null</span> +| + +<span class="param-type">string</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="isBridge"><span class="type-signature"></span>isBridge<span class="signature">()</span><span class="type-signature"> → {boolean}</span></h4> + + + + + + +<div class="description"> + <p>Checks whether the underlying logical interface is declared as bridge.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line2221">line 2221</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns <code>true</code> when the interface is declared with <code>option type bridge</code> +and when the associated protocol implementation is not marked virtual +or <code>false</code> when the logical interface is no bridge.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">boolean</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="isDynamic"><span class="type-signature"></span>isDynamic<span class="signature">()</span><span class="type-signature"> → {boolean}</span></h4> + + + + + + +<div class="description"> + <p>Checks whether this logical interface is dynamic.</p> +<p>A dynamic interface is an interface which has been created at runtime, +e.g. as sub-interface of another interface, but which is not backed by +any user configuration. Such dynamic interfaces cannot be edited but +only brought down or restarted.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line2309">line 2309</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns a boolean indicating whether this interface is dynamic (<code>true</code>) +or not (<code>false</code>).</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">boolean</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="isEmpty"><span class="type-signature"></span>isEmpty<span class="signature">()</span><span class="type-signature"> → {boolean}</span></h4> + + + + + + +<div class="description"> + <p>Checks whether this logical interface is "empty", meaning that ut +has no network devices attached.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line2344">line 2344</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns <code>true</code> if this logical interface is empty, else <code>false</code>.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">boolean</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="isFloating"><span class="type-signature"></span>isFloating<span class="signature">()</span><span class="type-signature"> → {boolean}</span></h4> + + + + + + +<div class="description"> + <p>Checks whether this protocol is "floating".</p> +<p>A "floating" protocol is a protocol which spawns its own interfaces +on demand, like a virtual one but which relies on an existinf lower +level interface to initiate the connection.</p> +<p>An example for such a protocol is "pppoe".</p> +<p>This function exists for backwards compatibility with older code +but should not be used anymore.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + <dt class="important tag-deprecated">Deprecated:</dt><dd class="yes-def tag-deprecated"><ul class="dummy"><li>Yes</li></ul></dd> + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line2293">line 2293</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns a boolean indicating whether this protocol is floating (<code>true</code>) +or not (<code>false</code>).</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">boolean</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="isInstalled"><span class="type-signature">(abstract) </span>isInstalled<span class="signature">()</span><span class="type-signature"> → {boolean}</span></h4> + + + + + + +<div class="description"> + <p>Checks whether the protocol functionality is installed.</p> +<p>This function exists for compatibility with old code, it always +returns <code>true</code>.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + <dt class="important tag-deprecated">Deprecated:</dt><dd class="yes-def tag-deprecated"><ul class="dummy"><li>Yes</li></ul></dd> + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line2252">line 2252</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns <code>true</code> if the protocol support is installed, else <code>false</code>.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">boolean</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="isUp"><span class="type-signature"></span>isUp<span class="signature">()</span><span class="type-signature"> → {boolean}</span></h4> + + + + + + +<div class="description"> + <p>Checks whether this logical interface is configured and running.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line2366">line 2366</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns <code>true</code> when the interface is active or <code>false</code> when it is not.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">boolean</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="isVirtual"><span class="type-signature"></span>isVirtual<span class="signature">()</span><span class="type-signature"> → {boolean}</span></h4> + + + + + + +<div class="description"> + <p>Checks whether this protocol is "virtual".</p> +<p>A "virtual" protocol is a protocol which spawns its own interfaces +on demand instead of using existing physical interfaces.</p> +<p>Examples for virtual protocols are <code>6in4</code> which <code>gre</code> spawn tunnel +network device on startup, examples for non-virtual protcols are +<code>dhcp</code> or <code>static</code> which apply IP configuration to existing interfaces.</p> +<p>This function should be overwritten by subclasses.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line2272">line 2272</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns a boolean indicating whether the underlying protocol spawns +dynamic interfaces (<code>true</code>) or not (<code>false</code>).</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">boolean</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="set"><span class="type-signature"></span>set<span class="signature">(opt, val)</span><span class="type-signature"></span></h4> + + + + + + +<div class="description"> + <p>Set the given UCI option of this network to the given value.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>opt</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + + + + <td class="description last"><p>The name of the UCI option to set.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>val</code></td> + + + <td class="type"> + + +<span class="param-type">null</span> +| + +<span class="param-type">string</span> +| + +<span class="param-type">Array.<string></span> + + + + </td> + + + + + + <td class="description last"><p>The value to set or <code>null</code> to remove the given option from the +configuration.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line1841">line 1841</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + + + + + + + + + + + + +</article> + +</section> + + + + +</div> + +<nav> + <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="LuCI.html">LuCI</a></li><li><a href="LuCI.Class.html">Class</a></li><li><a href="LuCI.dom.html">dom</a></li><li><a href="LuCI.fs.html">fs</a></li><li><a href="LuCI.Headers.html">Headers</a></li><li><a href="LuCI.Network.html">Network</a></li><li><a href="LuCI.Network.Device.html">Device</a></li><li><a href="LuCI.Network.Hosts.html">Hosts</a></li><li><a href="LuCI.Network.Protocol.html">Protocol</a></li><li><a href="LuCI.Network.WifiDevice.html">WifiDevice</a></li><li><a href="LuCI.Network.WifiNetwork.html">WifiNetwork</a></li><li><a href="LuCI.Poll.html">Poll</a></li><li><a href="LuCI.Request.html">Request</a></li><li><a href="LuCI.Request.poll.html">poll</a></li><li><a href="LuCI.Response.html">Response</a></li><li><a href="LuCI.rpc.html">rpc</a></li><li><a href="LuCI.uci.html">uci</a></li><li><a href="LuCI.view.html">view</a></li><li><a href="LuCI.XHR.html">XHR</a></li></ul> +</nav> + +<br class="clear"> + +<footer> + Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a> on Tue Nov 05 2019 09:33:05 GMT+0100 (Central European Standard Time) +</footer> + +<script> prettyPrint(); </script> +<script src="scripts/linenumber.js"> </script> +</body> +</html>
\ No newline at end of file diff --git a/documentation/jsapi/LuCI.Network.WifiDevice.html b/documentation/jsapi/LuCI.Network.WifiDevice.html new file mode 100644 index 000000000..b050c68bc --- /dev/null +++ b/documentation/jsapi/LuCI.Network.WifiDevice.html @@ -0,0 +1,1915 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="utf-8"> + <title>JSDoc: Class: WifiDevice</title> + + <script src="scripts/prettify/prettify.js"> </script> + <script src="scripts/prettify/lang-css.js"> </script> + <!--[if lt IE 9]> + <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script> + <![endif]--> + <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css"> + <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css"> +</head> + +<body> + +<div id="main"> + + <h1 class="page-title">Class: WifiDevice</h1> + + + + + + +<section> + +<header> + + <h2><span class="attribs"><span class="type-signature"></span></span> + <span class="ancestors"><a href="LuCI.html">LuCI</a><a href="LuCI.Network.html">.Network</a>.</span>WifiDevice</h2> + + <div class="class-description"><p>A <code>Network.WifiDevice</code> class instance represents a wireless radio device +present on the system and provides wireless capability information as +well as methods for enumerating related wireless networks.</p></div> + + +</header> + +<article> + <div class="container-overview"> + + + + + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line2957">line 2957</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + + + + + + + + </div> + + + + + + + + + + + + + + + + + <h3 class="subsection-title">Methods</h3> + + + + + + + + <h4 class="name" id="addWifiNetwork"><span class="type-signature"></span>addWifiNetwork<span class="signature">(options<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {Promise.<(null|<a href="LuCI.Network.WifiNetwork.html">LuCI.Network.WifiNetwork</a>)>}</span></h4> + + + + + + +<div class="description"> + <p>Adds a new wireless network associated with this radio device to the +configuration and sets its options to the provided values.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + <th>Attributes</th> + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>options</code></td> + + + <td class="type"> + + +<span class="param-type">Object.<string, (string|Array.<string>)></span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + + + </td> + + + + + <td class="description last"><p>The options to set for the newly added wireless network.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line3222">line 3222</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns a promise resolving to a <code>WifiNetwork</code> instance describing +the newly added wireless network or <code>null</code> if the given options +were invalid.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">Promise.<(null|<a href="LuCI.Network.WifiNetwork.html">LuCI.Network.WifiNetwork</a>)></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="deleteWifiNetwork"><span class="type-signature"></span>deleteWifiNetwork<span class="signature">(network)</span><span class="type-signature"> → {Promise.<boolean>}</span></h4> + + + + + + +<div class="description"> + <p>Deletes the wireless network with the given name associated with this +radio device.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>network</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + + + + <td class="description last"><p>The name of the wireless network to lookup. This may be either an uci +configuration section ID, a network ID in the form <code>radio#.network#</code> +or a Linux network device name like <code>wlan0</code> which is resolved to the +corresponding configuration section through <code>ubus</code> runtime information.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line3247">line 3247</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns a promise resolving to <code>true</code> when the wireless network was +successfully deleted from the configuration or <code>false</code> when the given +network could not be found or if the found network was not associated +with this wireless radio device.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">Promise.<boolean></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="get"><span class="type-signature"></span>get<span class="signature">(opt)</span><span class="type-signature"> → {null|string|Array.<string>}</span></h4> + + + + + + +<div class="description"> + <p>Read the given UCI option value of this wireless device.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>opt</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + + + + <td class="description last"><p>The UCI option name to read.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line2997">line 2997</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns the UCI option value or <code>null</code> if the requested option is +not found.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">null</span> +| + +<span class="param-type">string</span> +| + +<span class="param-type">Array.<string></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getHTModes"><span class="type-signature"></span>getHTModes<span class="signature">()</span><span class="type-signature"> → {Array.<string>}</span></h4> + + + + + + +<div class="description"> + <p>Gets a list of supported htmodes.</p> +<p>The htmode values describe the wide-frequency options supported by +the wireless phy.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line3075">line 3075</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns an array of valid htmode values for this radio. Currently +known mode values are:</p> +<ul> +<li><code>HT20</code> - applicable to IEEE 802.11n, 20 MHz wide channels</li> +<li><code>HT40</code> - applicable to IEEE 802.11n, 40 MHz wide channels</li> +<li><code>VHT20</code> - applicable to IEEE 802.11ac, 20 MHz wide channels</li> +<li><code>VHT40</code> - applicable to IEEE 802.11ac, 40 MHz wide channels</li> +<li><code>VHT80</code> - applicable to IEEE 802.11ac, 80 MHz wide channels</li> +<li><code>VHT160</code> - applicable to IEEE 802.11ac, 160 MHz wide channels</li> +</ul> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">Array.<string></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getHWModes"><span class="type-signature"></span>getHWModes<span class="signature">()</span><span class="type-signature"> → {Array.<string>}</span></h4> + + + + + + +<div class="description"> + <p>Gets a list of supported hwmodes.</p> +<p>The hwmode values describe the frequency band and wireless standard +versions supported by the wireless phy.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line3054">line 3054</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns an array of valid hwmode values for this radio. Currently +known mode values are:</p> +<ul> +<li><code>a</code> - Legacy 802.11a mode, 5 GHz, up to 54 Mbit/s</li> +<li><code>b</code> - Legacy 802.11b mode, 2.4 GHz, up to 11 Mbit/s</li> +<li><code>g</code> - Legacy 802.11g mode, 2.4 GHz, up to 54 Mbit/s</li> +<li><code>n</code> - IEEE 802.11n mode, 2.4 or 5 GHz, up to 600 Mbit/s</li> +<li><code>ac</code> - IEEE 802.11ac mode, 5 GHz, up to 6770 Mbit/s</li> +</ul> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">Array.<string></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getI18n"><span class="type-signature"></span>getI18n<span class="signature">()</span><span class="type-signature"> → {string}</span></h4> + + + + + + +<div class="description"> + <p>Get a string describing the wireless radio hardware.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line3086">line 3086</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns the description string.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">string</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getName"><span class="type-signature"></span>getName<span class="signature">()</span><span class="type-signature"> → {string}</span></h4> + + + + + + +<div class="description"> + <p>Get the configuration name of this wireless radio.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line3035">line 3035</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns the UCI section name (e.g. <code>radio0</code>) of the corresponding +radio configuration which also serves as unique logical identifier +for the wireless phy.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">string</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getScanList"><span class="type-signature"></span>getScanList<span class="signature">()</span><span class="type-signature"> → {Promise.<Array.<<a href="LuCI.Network.html#.WifiScanResult">LuCI.Network.WifiScanResult</a>>>}</span></h4> + + + + + + +<div class="description"> + <p>Trigger a wireless scan on this radio device and obtain a list of +nearby networks.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line3147">line 3147</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns a promise resolving to an array of scan result objects +describing the networks found in the vincinity.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">Promise.<Array.<<a href="LuCI.Network.html#.WifiScanResult">LuCI.Network.WifiScanResult</a>>></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getWifiNetwork"><span class="type-signature"></span>getWifiNetwork<span class="signature">(network)</span><span class="type-signature"> → {Promise.<<a href="LuCI.Network.WifiNetwork.html">LuCI.Network.WifiNetwork</a>>}</span></h4> + + + + + + +<div class="description"> + <p>Get the wifi network of the given name belonging to this radio device</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>network</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + + + + <td class="description last"><p>The name of the wireless network to lookup. This may be either an uci +configuration section ID, a network ID in the form <code>radio#.network#</code> +or a Linux network device name like <code>wlan0</code> which is resolved to the +corresponding configuration section through <code>ubus</code> runtime information.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line3180">line 3180</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns a promise resolving to a <code>Network.WifiNetwork</code> instance +representing the wireless network and rejecting with <code>null</code> if +the given network could not be found or is not associated with +this radio device.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">Promise.<<a href="LuCI.Network.WifiNetwork.html">LuCI.Network.WifiNetwork</a>></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getWifiNetworks"><span class="type-signature"></span>getWifiNetworks<span class="signature">()</span><span class="type-signature"> → {Promise.<Array.<<a href="LuCI.Network.WifiNetwork.html">LuCI.Network.WifiNetwork</a>>>}</span></h4> + + + + + + +<div class="description"> + <p>Get all wireless networks associated with this wireless radio device.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line3199">line 3199</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns a promise resolving to an array of <code>Network.WifiNetwork</code> +instances respresenting the wireless networks associated with this +radio device.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">Promise.<Array.<<a href="LuCI.Network.WifiNetwork.html">LuCI.Network.WifiNetwork</a>>></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="isDisabled"><span class="type-signature"></span>isDisabled<span class="signature">()</span><span class="type-signature"> → {boolean}</span></h4> + + + + + + +<div class="description"> + <p>Checks whether this wireless radio is disabled.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line3023">line 3023</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns <code>true</code> when the wireless radio is marked as disabled in <code>ubus</code> +runtime state or when the <code>disabled</code> option is set in the corresponding +UCI configuration.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">boolean</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="isUp"><span class="type-signature"></span>isUp<span class="signature">()</span><span class="type-signature"> → {boolean}</span></h4> + + + + + + +<div class="description"> + <p>Check whether the wireless radio is marked as up in the <code>ubus</code> +runtime state.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line3158">line 3158</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns <code>true</code> when the radio device is up, else <code>false</code>.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">boolean</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="set"><span class="type-signature"></span>set<span class="signature">(opt, val)</span><span class="type-signature"></span></h4> + + + + + + +<div class="description"> + <p>Set the given UCI option of this network to the given value.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>opt</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + + + + <td class="description last"><p>The name of the UCI option to set.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>val</code></td> + + + <td class="type"> + + +<span class="param-type">null</span> +| + +<span class="param-type">string</span> +| + +<span class="param-type">Array.<string></span> + + + + </td> + + + + + + <td class="description last"><p>The value to set or <code>null</code> to remove the given option from the +configuration.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line3011">line 3011</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + + + + + + + + + + + + +</article> + +</section> + + + + +</div> + +<nav> + <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="LuCI.html">LuCI</a></li><li><a href="LuCI.Class.html">Class</a></li><li><a href="LuCI.dom.html">dom</a></li><li><a href="LuCI.fs.html">fs</a></li><li><a href="LuCI.Headers.html">Headers</a></li><li><a href="LuCI.Network.html">Network</a></li><li><a href="LuCI.Network.Device.html">Device</a></li><li><a href="LuCI.Network.Hosts.html">Hosts</a></li><li><a href="LuCI.Network.Protocol.html">Protocol</a></li><li><a href="LuCI.Network.WifiDevice.html">WifiDevice</a></li><li><a href="LuCI.Network.WifiNetwork.html">WifiNetwork</a></li><li><a href="LuCI.Poll.html">Poll</a></li><li><a href="LuCI.Request.html">Request</a></li><li><a href="LuCI.Request.poll.html">poll</a></li><li><a href="LuCI.Response.html">Response</a></li><li><a href="LuCI.rpc.html">rpc</a></li><li><a href="LuCI.uci.html">uci</a></li><li><a href="LuCI.view.html">view</a></li><li><a href="LuCI.XHR.html">XHR</a></li></ul> +</nav> + +<br class="clear"> + +<footer> + Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a> on Tue Nov 05 2019 09:33:05 GMT+0100 (Central European Standard Time) +</footer> + +<script> prettyPrint(); </script> +<script src="scripts/linenumber.js"> </script> +</body> +</html>
\ No newline at end of file diff --git a/documentation/jsapi/LuCI.Network.WifiNetwork.html b/documentation/jsapi/LuCI.Network.WifiNetwork.html new file mode 100644 index 000000000..62e43aa5e --- /dev/null +++ b/documentation/jsapi/LuCI.Network.WifiNetwork.html @@ -0,0 +1,4239 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="utf-8"> + <title>JSDoc: Class: WifiNetwork</title> + + <script src="scripts/prettify/prettify.js"> </script> + <script src="scripts/prettify/lang-css.js"> </script> + <!--[if lt IE 9]> + <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script> + <![endif]--> + <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css"> + <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css"> +</head> + +<body> + +<div id="main"> + + <h1 class="page-title">Class: WifiNetwork</h1> + + + + + + +<section> + +<header> + + <h2><span class="attribs"><span class="type-signature"></span></span> + <span class="ancestors"><a href="LuCI.html">LuCI</a><a href="LuCI.Network.html">.Network</a>.</span>WifiNetwork</h2> + + <div class="class-description"><p>A <code>Network.WifiNetwork</code> instance represents a wireless network (vif) +configured on top of a radio device and provides functions for querying +the runtime state of the network. Most radio devices support multiple +such networks in parallel.</p></div> + + +</header> + +<article> + <div class="container-overview"> + + + + + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line3280">line 3280</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + + + + + + + + </div> + + + + + + + + + + + + + + + + + <h3 class="subsection-title">Methods</h3> + + + + + + + + <h4 class="name" id="get"><span class="type-signature"></span>get<span class="signature">(opt)</span><span class="type-signature"> → {null|string|Array.<string>}</span></h4> + + + + + + +<div class="description"> + <p>Read the given UCI option value of this wireless network.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>opt</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + + + + <td class="description last"><p>The UCI option name to read.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line3313">line 3313</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns the UCI option value or <code>null</code> if the requested option is +not found.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">null</span> +| + +<span class="param-type">string</span> +| + +<span class="param-type">Array.<string></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getActiveBSSID"><span class="type-signature"></span>getActiveBSSID<span class="signature">()</span><span class="type-signature"> → {string}</span></h4> + + + + + + +<div class="description"> + <p>Query the current BSSID from runtime information.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line3566">line 3566</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns the current BSSID or Mesh ID as reported by <code>ubus</code> runtime +information.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">string</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getActiveEncryption"><span class="type-signature"></span>getActiveEncryption<span class="signature">()</span><span class="type-signature"> → {string}</span></h4> + + + + + + +<div class="description"> + <p>Query the current encryption settings from runtime information.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line3577">line 3577</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns a string describing the current encryption or <code>-</code> if the the +encryption state could not be found in <code>ubus</code> runtime information.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">string</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getActiveMode"><span class="type-signature"></span>getActiveMode<span class="signature">()</span><span class="type-signature"> → {string}</span></h4> + + + + + + +<div class="description"> + <p>Query the current operation mode from runtime information.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line3514">line 3514</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns the human readable mode name as reported by <code>ubus</code> runtime +state. Possible returned values are:</p> +<ul> +<li><code>Master</code></li> +<li><code>Ad-Hoc</code></li> +<li><code>Client</code></li> +<li><code>Monitor</code></li> +<li><code>Master (VLAN)</code></li> +<li><code>WDS</code></li> +<li><code>Mesh Point</code></li> +<li><code>P2P Client</code></li> +<li><code>P2P Go</code></li> +<li><code>Unknown</code></li> +</ul> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">string</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getActiveModeI18n"><span class="type-signature"></span>getActiveModeI18n<span class="signature">()</span><span class="type-signature"> → {string}</span></h4> + + + + + + +<div class="description"> + <p>Query the current operation mode from runtime information as +translated string.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line3535">line 3535</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns the translated, human readable mode name as reported by +<code>ubus</code> runtime state.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">string</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getActiveSSID"><span class="type-signature"></span>getActiveSSID<span class="signature">()</span><span class="type-signature"> → {string}</span></h4> + + + + + + +<div class="description"> + <p>Query the current SSID from runtime information.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line3555">line 3555</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns the current SSID or Mesh ID as reported by <code>ubus</code> runtime +information.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">string</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getAssocList"><span class="type-signature"></span>getAssocList<span class="signature">()</span><span class="type-signature"> → {Promise.<Array.<<a href="LuCI.Network.html#.WifiPeerEntry">LuCI.Network.WifiPeerEntry</a>>>}</span></h4> + + + + + + +<div class="description"> + <p>Fetch the list of associated peers.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line3757">line 3757</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns a promise resolving to an array of wireless peers associated +with this network.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">Promise.<Array.<<a href="LuCI.Network.html#.WifiPeerEntry">LuCI.Network.WifiPeerEntry</a>>></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getBitRate"><span class="type-signature"></span>getBitRate<span class="signature">()</span><span class="type-signature"> → {null|number}</span></h4> + + + + + + +<div class="description"> + <p>Query the current average bitrate of all peers associated to this +wireless network.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line3787">line 3787</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns the average bit rate among all peers associated to the network +as reported by <code>ubus</code> runtime information or <code>null</code> if the information +is not available.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">null</span> +| + +<span class="param-type">number</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getBSSID"><span class="type-signature"></span>getBSSID<span class="signature">()</span><span class="type-signature"> → {null|string}</span></h4> + + + + + + +<div class="description"> + <p>Get the configured BSSID of the wireless network.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line3392">line 3392</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns the BSSID value or <code>null</code> if none has been specified.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">null</span> +| + +<span class="param-type">string</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getChannel"><span class="type-signature"></span>getChannel<span class="signature">()</span><span class="type-signature"> → {null|number}</span></h4> + + + + + + +<div class="description"> + <p>Query the current wireless channel.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line3803">line 3803</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns the wireless channel as reported by <code>ubus</code> runtime information +or <code>null</code> if it cannot be determined.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">null</span> +| + +<span class="param-type">number</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getCountryCode"><span class="type-signature"></span>getCountryCode<span class="signature">()</span><span class="type-signature"> → {string}</span></h4> + + + + + + +<div class="description"> + <p>Query the current country code.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line3836">line 3836</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns the wireless country code as reported by <code>ubus</code> runtime +information or <code>00</code> if it cannot be determined.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">string</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getDevice"><span class="type-signature"></span>getDevice<span class="signature">()</span><span class="type-signature"> → {<a href="LuCI.Network.Device.html">LuCI.Network.Device</a>}</span></h4> + + + + + + +<div class="description"> + <p>Get the associated Linux network device.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line3982">line 3982</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns a <code>Network.Device</code> instance representing the Linux network +device associted with this wireless network.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type"><a href="LuCI.Network.Device.html">LuCI.Network.Device</a></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getFrequency"><span class="type-signature"></span>getFrequency<span class="signature">()</span><span class="type-signature"> → {null|string}</span></h4> + + + + + + +<div class="description"> + <p>Query the current operating frequency of the wireless network.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line3769">line 3769</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns the current operating frequency of the network from <code>ubus</code> +runtime information in GHz or <code>null</code> if the information is not +available.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">null</span> +| + +<span class="param-type">string</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getI18n"><span class="type-signature"></span>getI18n<span class="signature">()</span><span class="type-signature"> → {string}</span></h4> + + + + + + +<div class="description"> + <p>Get a description string for this wireless network.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line3930">line 3930</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns a string describing this network, consisting of the +term <code>Wireless Network</code>, followed by the active operation mode, +the SSID, BSSID or internal network ID and the Linux network device +name, depending on which information is available.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">string</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getID"><span class="type-signature"></span>getID<span class="signature">()</span><span class="type-signature"> → {string}</span></h4> + + + + + + +<div class="description"> + <p>Get the internal network ID of this wireless network.</p> +<p>The network ID is a LuCI specific identifer in the form +<code>radio#.network#</code> to identify wireless networks by their corresponding +radio and network index numbers.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line3417">line 3417</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns the LuCI specific network ID.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">string</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getIfname"><span class="type-signature"></span>getIfname<span class="signature">()</span><span class="type-signature"> → {null|string}</span></h4> + + + + + + +<div class="description"> + <p>Get the Linux network device name.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line3439">line 3439</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns the current Linux network device name as resolved from +<code>ubus</code> runtime information or <code>null</code> if this network has no +associated network device, e.g. when not configured or up.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">null</span> +| + +<span class="param-type">string</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getMeshID"><span class="type-signature"></span>getMeshID<span class="signature">()</span><span class="type-signature"> → {null|string}</span></h4> + + + + + + +<div class="description"> + <p>Get the configured Mesh ID of the wireless network.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line3379">line 3379</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns the configured mesh ID value or <code>null</code> when this network +is not in mesh mode.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">null</span> +| + +<span class="param-type">string</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getMode"><span class="type-signature"></span>getMode<span class="signature">()</span><span class="type-signature"> → {string}</span></h4> + + + + + + +<div class="description"> + <p>Get the configured operation mode of the wireless network.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line3354">line 3354</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns the configured operation mode. Possible values are:</p> +<ul> +<li><code>ap</code> - Master (Access Point) mode</li> +<li><code>sta</code> - Station (client) mode</li> +<li><code>adhoc</code> - Ad-Hoc (IBSS) mode</li> +<li><code>mesh</code> - Mesh (IEEE 802.11s) mode</li> +<li><code>monitor</code> - Monitor mode</li> +</ul> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">string</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getName"><span class="type-signature"></span>getName<span class="signature">()</span><span class="type-signature"> → {string}</span></h4> + + + + + + +<div class="description"> + <p>Get the configuration ID of this wireless network.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line3427">line 3427</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns the corresponding UCI section ID of the network.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">string</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getNetwork"><span class="type-signature"></span>getNetwork<span class="signature">()</span><span class="type-signature"> → {null|<a href="LuCI.Network.Protocol.html">LuCI.Network.Protocol</a>}</span></h4> + + + + + + +<div class="description"> + <p>Get the primary logical interface this wireless network is attached to.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line3946">line 3946</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns a <code>Network.Protocol</code> instance representing the logical +interface or <code>null</code> if this network is not attached to any logical +interface.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">null</span> +| + +<span class="param-type"><a href="LuCI.Network.Protocol.html">LuCI.Network.Protocol</a></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getNetworkNames"><span class="type-signature"></span>getNetworkNames<span class="signature">()</span><span class="type-signature"> → {Array.<string>}</span></h4> + + + + + + +<div class="description"> + <p>Get the names of the logical interfaces this wireless network is +attached to.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line3403">line 3403</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns an array of logical interface names.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">Array.<string></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getNetworks"><span class="type-signature"></span>getNetworks<span class="signature">()</span><span class="type-signature"> → {Array.<<a href="LuCI.Network.Protocol.html">LuCI.Network.Protocol</a>>}</span></h4> + + + + + + +<div class="description"> + <p>Get the logical interfaces this wireless network is attached to.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line3957">line 3957</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns an array of <code>Network.Protocol</code> instances representing the +logical interfaces this wireless network is attached to.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">Array.<<a href="LuCI.Network.Protocol.html">LuCI.Network.Protocol</a>></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getNoise"><span class="type-signature"></span>getNoise<span class="signature">()</span><span class="type-signature"> → {number}</span></h4> + + + + + + +<div class="description"> + <p>Query the current radio noise floor.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line3825">line 3825</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns the radio noise floor in dBm as reported by <code>ubus</code> runtime +information or <code>0</code> if it cannot be determined.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">number</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getShortName"><span class="type-signature"></span>getShortName<span class="signature">()</span><span class="type-signature"> → {string}</span></h4> + + + + + + +<div class="description"> + <p>Get a short description string for this wireless network.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line3915">line 3915</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns a string describing this network, consisting of the +active operation mode, followed by either the SSID, BSSID or +internal network ID, depending on which information is available.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">string</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getSignal"><span class="type-signature"></span>getSignal<span class="signature">()</span><span class="type-signature"> → {null|number}</span></h4> + + + + + + +<div class="description"> + <p>Query the current wireless signal.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line3814">line 3814</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns the wireless signal in dBm as reported by <code>ubus</code> runtime +information or <code>null</code> if it cannot be determined.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">null</span> +| + +<span class="param-type">number</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getSignalLevel"><span class="type-signature"></span>getSignalLevel<span class="signature">()</span><span class="type-signature"> → {number}</span></h4> + + + + + + +<div class="description"> + <p>Calculate the current signal.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + <dt class="important tag-deprecated">Deprecated:</dt><dd class="yes-def tag-deprecated"><ul class="dummy"><li>Yes</li></ul></dd> + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line3874">line 3874</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns the calculated signal level, which is the difference between +noise and signal (SNR), divided by 5.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">number</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getSignalPercent"><span class="type-signature"></span>getSignalPercent<span class="signature">()</span><span class="type-signature"> → {number}</span></h4> + + + + + + +<div class="description"> + <p>Calculate the current signal quality percentage.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line3897">line 3897</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns the calculated signal quality in percent. The value is +calculated from the <code>quality</code> and <code>quality_max</code> indicators reported +by <code>ubus</code> runtime state.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">number</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getSSID"><span class="type-signature"></span>getSSID<span class="signature">()</span><span class="type-signature"> → {null|string}</span></h4> + + + + + + +<div class="description"> + <p>Get the configured SSID of the wireless network.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line3365">line 3365</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns the configured SSID value or <code>null</code> when this network is +in mesh mode.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">null</span> +| + +<span class="param-type">string</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getTXPower"><span class="type-signature"></span>getTXPower<span class="signature">()</span><span class="type-signature"> → {null|number}</span></h4> + + + + + + +<div class="description"> + <p>Query the current radio TX power.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line3847">line 3847</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns the wireless network transmit power in dBm as reported by +<code>ubus</code> runtime information or <code>null</code> if it cannot be determined.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">null</span> +| + +<span class="param-type">number</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getTXPowerOffset"><span class="type-signature"></span>getTXPowerOffset<span class="signature">()</span><span class="type-signature"> → {number}</span></h4> + + + + + + +<div class="description"> + <p>Query the radio TX power offset.</p> +<p>Some wireless radios have a fixed power offset, e.g. due to the +use of external amplifiers.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line3862">line 3862</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns the wireless network transmit power offset in dBm as reported +by <code>ubus</code> runtime information or <code>0</code> if there is no offset, or if it +cannot be determined.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">number</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getWifiDevice"><span class="type-signature"></span>getWifiDevice<span class="signature">()</span><span class="type-signature"> → {null|<a href="LuCI.Network.WifiDevice.html">LuCI.Network.WifiDevice</a>}</span></h4> + + + + + + +<div class="description"> + <p>Get the corresponding wifi radio device.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line3467">line 3467</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns a <code>Network.WifiDevice</code> instance representing the corresponding +wifi radio device or <code>null</code> if the related radio device could not be +found.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">null</span> +| + +<span class="param-type"><a href="LuCI.Network.WifiDevice.html">LuCI.Network.WifiDevice</a></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getWifiDeviceName"><span class="type-signature"></span>getWifiDeviceName<span class="signature">()</span><span class="type-signature"> → {null|string}</span></h4> + + + + + + +<div class="description"> + <p>Get the name of the corresponding wifi radio device.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line3455">line 3455</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns the name of the radio device this network is configured on +or <code>null</code> if it cannot be determined.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">null</span> +| + +<span class="param-type">string</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="isDisabled"><span class="type-signature"></span>isDisabled<span class="signature">()</span><span class="type-signature"> → {boolean}</span></h4> + + + + + + +<div class="description"> + <p>Checks whether this wireless network is disabled.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line3339">line 3339</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns <code>true</code> when the wireless radio is marked as disabled in <code>ubus</code> +runtime state or when the <code>disabled</code> option is set in the corresponding +UCI configuration.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">boolean</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="isUp"><span class="type-signature"></span>isUp<span class="signature">()</span><span class="type-signature"> → {boolean}</span></h4> + + + + + + +<div class="description"> + <p>Check whether the radio network is up.</p> +<p>This function actually queries the up state of the related radio +device and assumes this network to be up as well when the parent +radio is up. This is due to the fact that OpenWrt does not control +virtual interfaces individually but within one common hostapd +instance.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line3488">line 3488</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns <code>true</code> when the network is up, else <code>false</code>.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">boolean</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="set"><span class="type-signature"></span>set<span class="signature">(opt, val)</span><span class="type-signature"></span></h4> + + + + + + +<div class="description"> + <p>Set the given UCI option of this network to the given value.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>opt</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + + + + <td class="description last"><p>The name of the UCI option to set.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>val</code></td> + + + <td class="type"> + + +<span class="param-type">null</span> +| + +<span class="param-type">string</span> +| + +<span class="param-type">Array.<string></span> + + + + </td> + + + + + + <td class="description last"><p>The value to set or <code>null</code> to remove the given option from the +configuration.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line3327">line 3327</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + + + + + + + + + + + + +</article> + +</section> + + + + +</div> + +<nav> + <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="LuCI.html">LuCI</a></li><li><a href="LuCI.Class.html">Class</a></li><li><a href="LuCI.dom.html">dom</a></li><li><a href="LuCI.fs.html">fs</a></li><li><a href="LuCI.Headers.html">Headers</a></li><li><a href="LuCI.Network.html">Network</a></li><li><a href="LuCI.Network.Device.html">Device</a></li><li><a href="LuCI.Network.Hosts.html">Hosts</a></li><li><a href="LuCI.Network.Protocol.html">Protocol</a></li><li><a href="LuCI.Network.WifiDevice.html">WifiDevice</a></li><li><a href="LuCI.Network.WifiNetwork.html">WifiNetwork</a></li><li><a href="LuCI.Poll.html">Poll</a></li><li><a href="LuCI.Request.html">Request</a></li><li><a href="LuCI.Request.poll.html">poll</a></li><li><a href="LuCI.Response.html">Response</a></li><li><a href="LuCI.rpc.html">rpc</a></li><li><a href="LuCI.uci.html">uci</a></li><li><a href="LuCI.view.html">view</a></li><li><a href="LuCI.XHR.html">XHR</a></li></ul> +</nav> + +<br class="clear"> + +<footer> + Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a> on Tue Nov 05 2019 09:33:05 GMT+0100 (Central European Standard Time) +</footer> + +<script> prettyPrint(); </script> +<script src="scripts/linenumber.js"> </script> +</body> +</html>
\ No newline at end of file diff --git a/documentation/jsapi/LuCI.Network.html b/documentation/jsapi/LuCI.Network.html new file mode 100644 index 000000000..d0ab9f2c9 --- /dev/null +++ b/documentation/jsapi/LuCI.Network.html @@ -0,0 +1,6529 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="utf-8"> + <title>JSDoc: Class: Network</title> + + <script src="scripts/prettify/prettify.js"> </script> + <script src="scripts/prettify/lang-css.js"> </script> + <!--[if lt IE 9]> + <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script> + <![endif]--> + <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css"> + <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css"> +</head> + +<body> + +<div id="main"> + + <h1 class="page-title">Class: Network</h1> + + + + + + +<section> + +<header> + + <h2><span class="attribs"><span class="type-signature"></span></span> + <span class="ancestors"><a href="LuCI.html">LuCI</a>.</span>Network</h2> + + <div class="class-description"><p>The <code>LuCI.Network</code> class combines data from multiple <code>ubus</code> apis to +provide an abstraction of the current network configuration state.</p> +<p>It provides methods to enumerate interfaces and devices, to query +current configuration details and to manipulate settings.</p></div> + + +</header> + +<article> + <div class="container-overview"> + + + + + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line628">line 628</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + + + + + + + + </div> + + + + + + + <h3 class="subsection-title">Classes</h3> + + <dl> + <dt><a href="LuCI.Network.Device.html">Device</a></dt> + <dd></dd> + + <dt><a href="LuCI.Network.Hosts.html">Hosts</a></dt> + <dd></dd> + + <dt><a href="LuCI.Network.Protocol.html">Protocol</a></dt> + <dd></dd> + + <dt><a href="LuCI.Network.WifiDevice.html">WifiDevice</a></dt> + <dd></dd> + + <dt><a href="LuCI.Network.WifiNetwork.html">WifiNetwork</a></dt> + <dd></dd> + </dl> + + + + + + + + + + + + <h3 class="subsection-title">Methods</h3> + + + + + + + + <h4 class="name" id="addNetwork"><span class="type-signature"></span>addNetwork<span class="signature">(name, options<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {Promise.<(null|<a href="LuCI.Network.Protocol.html">LuCI.Network.Protocol</a>)>}</span></h4> + + + + + + +<div class="description"> + <p>Adds a new network of the given name and update it with the given +uci option values.</p> +<p>If a network with the given name already exist but is empty, then +this function will update its option, otherwise it will do nothing.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + <th>Attributes</th> + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>name</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + <td class="attributes"> + + + + + + </td> + + + + + <td class="description last"><p>The name of the network to add. Must be in the format <code>[a-zA-Z0-9_]+</code>.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>options</code></td> + + + <td class="type"> + + +<span class="param-type">Object.<string, (string|Array.<string>)></span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + + + </td> + + + + + <td class="description last"><p>An object of uci option values to set on the new network or to +update in an existing, empty network.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line884">line 884</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns a promise resolving to the <code>Protocol</code> subclass instance +describing the added network or resolving to <code>null</code> if the name +was invalid or if a non-empty network of the given name already +existed.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">Promise.<(null|<a href="LuCI.Network.Protocol.html">LuCI.Network.Protocol</a>)></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="addWifiNetwork"><span class="type-signature"></span>addWifiNetwork<span class="signature">(options)</span><span class="type-signature"> → {Promise.<(null|<a href="LuCI.Network.WifiNetwork.html">LuCI.Network.WifiNetwork</a>)>}</span></h4> + + + + + + +<div class="description"> + <p>Adds a new wireless network to the configuration and sets its options +to the provided values.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>options</code></td> + + + <td class="type"> + + +<span class="param-type">Object.<string, (string|Array.<string>)></span> + + + + </td> + + + + + + <td class="description last"><p>The options to set for the newly added wireless network. This object +must at least contain a <code>device</code> property which is set to the radio +name the new network belongs to.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line1352">line 1352</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns a promise resolving to a <code>WifiNetwork</code> instance describing +the newly added wireless network or <code>null</code> if the given options +were invalid or if the associated radio device could not be found.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">Promise.<(null|<a href="LuCI.Network.WifiNetwork.html">LuCI.Network.WifiNetwork</a>)></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="deleteNetwork"><span class="type-signature"></span>deleteNetwork<span class="signature">(name)</span><span class="type-signature"> → {Promise.<boolean>}</span></h4> + + + + + + +<div class="description"> + <p>Deletes the given network and its references from the network and +firewall configuration.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>name</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + + + + <td class="description last"><p>The name of the network to delete.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line962">line 962</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns a promise resolving to either <code>true</code> if the network and +references to it were successfully deleted from the configuration or +<code>false</code> if the given network could not be found.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">Promise.<boolean></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="deleteWifiNetwork"><span class="type-signature"></span>deleteWifiNetwork<span class="signature">(netname)</span><span class="type-signature"> → {Promise.<boolean>}</span></h4> + + + + + + +<div class="description"> + <p>Deletes the given wireless network from the configuration.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>netname</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + + + + <td class="description last"><p>The name of the network to remove. This may be either a +network ID in the form <code>radio#.network#</code> or a Linux network device +name like <code>wlan0</code> which is resolved to the corresponding configuration +section through <code>ubus</code> runtime information.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line1390">line 1390</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns a promise resolving to <code>true</code> if the wireless network has been +successfully deleted from the configuration or <code>false</code> if it could not +be found.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">Promise.<boolean></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="flushCache"><span class="type-signature"></span>flushCache<span class="signature">()</span><span class="type-signature"> → {Promise.<Object>}</span></h4> + + + + + + +<div class="description"> + <p>Flushes the local network state cache and fetches updated information +from the remote <code>ubus</code> apis.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line728">line 728</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns a promise resolving to the internal network state object.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">Promise.<Object></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="formatWifiEncryption"><span class="type-signature"></span>formatWifiEncryption<span class="signature">(encryption)</span><span class="type-signature"> → {null|string}</span></h4> + + + + + + +<div class="description"> + <p>Converts a given <a href="LuCI.Network.html#.WifiEncryption"><code>encryption entry</code></a> +into a human readable string such as <code>mixed WPA/WPA2 PSK (TKIP, CCMP)</code> +or <code>WPA3 SAE (CCMP)</code>.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>encryption</code></td> + + + <td class="type"> + + +<span class="param-type"><a href="LuCI.Network.html#.WifiEncryption">LuCI.Network.WifiEncryption</a></span> + + + + </td> + + + + + + <td class="description last"><p>The wireless encryption entry to convert.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line719">line 719</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns the description string for the given encryption entry or +<code>null</code> if the given entry was invalid.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">null</span> +| + +<span class="param-type">string</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getDevice"><span class="type-signature"></span>getDevice<span class="signature">(name)</span><span class="type-signature"> → {Promise.<(null|<a href="LuCI.Network.Device.html">LuCI.Network.Device</a>)>}</span></h4> + + + + + + +<div class="description"> + <p>Get a <a href="LuCI.Network.Device.html"><code>Device</code></a> instance describing the +given network device.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>name</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + + + + <td class="description last"><p>The name of the network device to get, e.g. <code>eth0</code> or <code>br-lan</code>.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line1087">line 1087</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns a promise resolving to the <code>Device</code> instance describing +the network device or <code>null</code> if the given device name could not +be found.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">Promise.<(null|<a href="LuCI.Network.Device.html">LuCI.Network.Device</a>)></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getDevices"><span class="type-signature"></span>getDevices<span class="signature">()</span><span class="type-signature"> → {Promise.<Array.<<a href="LuCI.Network.Device.html">LuCI.Network.Device</a>>>}</span></h4> + + + + + + +<div class="description"> + <p>Get a sorted list of all found network devices.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line1110">line 1110</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns a promise resolving to a sorted array of <code>Device</code> class +instances describing the network devices found on the system.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">Promise.<Array.<<a href="LuCI.Network.Device.html">LuCI.Network.Device</a>>></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getDSLModemType"><span class="type-signature"></span>getDSLModemType<span class="signature">()</span><span class="type-signature"> → {Promise.<(null|string)>}</span></h4> + + + + + + +<div class="description"> + <p>Queries the internal DSL modem type from board information.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line1594">line 1594</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns a promise resolving to the type of the internal modem +(e.g. <code>vdsl</code>) or to <code>null</code> if no internal modem is present.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">Promise.<(null|string)></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getHostHints"><span class="type-signature"></span>getHostHints<span class="signature">()</span><span class="type-signature"> → {Promise.<<a href="LuCI.Network.Hosts.html">LuCI.Network.Hosts</a>>}</span></h4> + + + + + + +<div class="description"> + <p>Queries aggregated information about known hosts.</p> +<p>This function aggregates information from various sources such as +DHCP lease databases, ARP and IPv6 neighbour entries, wireless +association list etc. and returns a <a href="LuCI.Network.Hosts.html"><code>Hosts</code></a> +class instance describing the found hosts.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line1611">line 1611</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns a <code>Hosts</code> instance describing host known on the system.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">Promise.<<a href="LuCI.Network.Hosts.html">LuCI.Network.Hosts</a>></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getIfnameOf"><span class="type-signature"></span>getIfnameOf<span class="signature">(obj)</span><span class="type-signature"> → {null|string}</span></h4> + + + + + + +<div class="description"> + <p>Obtains the the network device name of the given object.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>obj</code></td> + + + <td class="type"> + + +<span class="param-type"><a href="LuCI.Network.Protocol.html">LuCI.Network.Protocol</a></span> +| + +<span class="param-type"><a href="LuCI.Network.Device.html">LuCI.Network.Device</a></span> +| + +<span class="param-type"><a href="LuCI.Network.WifiDevice.html">LuCI.Network.WifiDevice</a></span> +| + +<span class="param-type"><a href="LuCI.Network.WifiNetwork.html">LuCI.Network.WifiNetwork</a></span> +| + +<span class="param-type">string</span> + + + + </td> + + + + + + <td class="description last"><p>The object to get the device name from.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line1583">line 1583</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns a string containing the device name or <code>null</code> if the given +object could not be converted to a name.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">null</span> +| + +<span class="param-type">string</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getNetwork"><span class="type-signature"></span>getNetwork<span class="signature">(name)</span><span class="type-signature"> → {Promise.<(null|<a href="LuCI.Network.Protocol.html">LuCI.Network.Protocol</a>)>}</span></h4> + + + + + + +<div class="description"> + <p>Get a <a href="LuCI.Network.Protocol.html"><code>Protocol</code></a> instance describing +the network with the given name.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>name</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + + + + <td class="description last"><p>The logical interface name of the network get, e.g. <code>lan</code> or <code>wan</code>.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line921">line 921</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns a promise resolving to a +<a href="LuCI.Network.Protocol.html"><code>Protocol</code></a> subclass instance describing +the network or <code>null</code> if the network did not exist.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">Promise.<(null|<a href="LuCI.Network.Protocol.html">LuCI.Network.Protocol</a>)></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getNetworks"><span class="type-signature"></span>getNetworks<span class="signature">()</span><span class="type-signature"> → {Promise.<Array.<<a href="LuCI.Network.Protocol.html">LuCI.Network.Protocol</a>>>}</span></h4> + + + + + + +<div class="description"> + <p>Gets an array containing all known networks.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line946">line 946</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns a promise resolving to a name-sorted array of +<a href="LuCI.Network.Protocol.html"><code>Protocol</code></a> subclass instances +describing all known networks.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">Promise.<Array.<<a href="LuCI.Network.Protocol.html">LuCI.Network.Protocol</a>>></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getProtocol"><span class="type-signature"></span>getProtocol<span class="signature">(protoname, netname<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {null|<a href="LuCI.Network.Protocol.html">LuCI.Network.Protocol</a>}</span></h4> + + + + + + +<div class="description"> + <p>Instantiates the given <a href="LuCI.Network.Protocol.html"><code>Protocol</code></a> backend, +optionally using the given network name.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + <th>Attributes</th> + + + + <th>Default</th> + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>protoname</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + <td class="attributes"> + + + + + + </td> + + + + <td class="default"> + + </td> + + + <td class="description last"><p>The protocol backend to use, e.g. <code>static</code> or <code>dhcp</code>.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>netname</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + + + </td> + + + + <td class="default"> + + __dummy__ + + </td> + + + <td class="description last"><p>The network name to use for the instantiated protocol. This should be +usually set to one of the interfaces described in /etc/config/network +but it is allowed to omit it, e.g. to query protocol capabilities +without the need for an existing interface.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line750">line 750</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns the instantiated protocol backend class or <code>null</code> if the given +protocol isn't known.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">null</span> +| + +<span class="param-type"><a href="LuCI.Network.Protocol.html">LuCI.Network.Protocol</a></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getProtocols"><span class="type-signature"></span>getProtocols<span class="signature">()</span><span class="type-signature"> → {Array.<<a href="LuCI.Network.Protocol.html">LuCI.Network.Protocol</a>>}</span></h4> + + + + + + +<div class="description"> + <p>Obtains instances of all known <a href="LuCI.Network.Protocol.html"><code>Protocol</code></a> +backend classes.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line765">line 765</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns an array of protocol class instances.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">Array.<<a href="LuCI.Network.Protocol.html">LuCI.Network.Protocol</a>></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getSwitchTopologies"><span class="type-signature"></span>getSwitchTopologies<span class="signature">()</span><span class="type-signature"> → {Promise.<Object.<string, <a href="LuCI.Network.html#.SwitchTopology">LuCI.Network.SwitchTopology</a>>>}</span></h4> + + + + + + +<div class="description"> + <p>Returns the topologies of all swconfig switches found on the system.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line1538">line 1538</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns a promise resolving to an object containing the topologies +of each switch. The object keys correspond to the name of the switches +such as <code>switch0</code>, the values are +<a href="LuCI.Network.html#.SwitchTopology"><code>SwitchTopology</code></a> objects describing +the layout.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">Promise.<Object.<string, <a href="LuCI.Network.html#.SwitchTopology">LuCI.Network.SwitchTopology</a>>></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getWAN6Networks"><span class="type-signature"></span>getWAN6Networks<span class="signature">()</span><span class="type-signature"> → {Promise.<Array.<<a href="LuCI.Network.Protocol.html">LuCI.Network.Protocol</a>>>}</span></h4> + + + + + + +<div class="description"> + <p>Get IPv6 wan networks.</p> +<p>This function looks up all networks having a default <code>::/0</code> route +and returns them as array.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line1493">line 1493</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns a promise resolving to an array of <code>Protocol</code> subclass +instances describing the found IPv6 default route interfaces.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">Promise.<Array.<<a href="LuCI.Network.Protocol.html">LuCI.Network.Protocol</a>>></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getWANNetworks"><span class="type-signature"></span>getWANNetworks<span class="signature">()</span><span class="type-signature"> → {Promise.<Array.<<a href="LuCI.Network.Protocol.html">LuCI.Network.Protocol</a>>>}</span></h4> + + + + + + +<div class="description"> + <p>Get IPv4 wan networks.</p> +<p>This function looks up all networks having a default <code>0.0.0.0/0</code> route +and returns them as array.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line1472">line 1472</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns a promise resolving to an array of <code>Protocol</code> subclass +instances describing the found default route interfaces.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">Promise.<Array.<<a href="LuCI.Network.Protocol.html">LuCI.Network.Protocol</a>>></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getWifiDevice"><span class="type-signature"></span>getWifiDevice<span class="signature">(devname)</span><span class="type-signature"> → {Promise.<(null|<a href="LuCI.Network.WifiDevice.html">LuCI.Network.WifiDevice</a>)>}</span></h4> + + + + + + +<div class="description"> + <p>Get a <a href="LuCI.Network.WifiDevice.html"><code>WifiDevice</code></a> instance describing +the given wireless radio.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>devname</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + + + + <td class="description last"><p>The configuration name of the wireless radio to lookup, e.g. <code>radio0</code> +for the first mac80211 phy on the system.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line1240">line 1240</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns a promise resolving to the <code>WifiDevice</code> instance describing +the underlying radio device or <code>null</code> if the wireless radio could not +be found.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">Promise.<(null|<a href="LuCI.Network.WifiDevice.html">LuCI.Network.WifiDevice</a>)></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getWifiDevices"><span class="type-signature"></span>getWifiDevices<span class="signature">()</span><span class="type-signature"> → {Promise.<Array.<<a href="LuCI.Network.WifiDevice.html">LuCI.Network.WifiDevice</a>>>}</span></h4> + + + + + + +<div class="description"> + <p>Obtain a list of all configured radio devices.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line1260">line 1260</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns a promise resolving to an array of <code>WifiDevice</code> instances +describing the wireless radios configured in the system. +The order of the array corresponds to the order of the radios in +the configuration.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">Promise.<Array.<<a href="LuCI.Network.WifiDevice.html">LuCI.Network.WifiDevice</a>>></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getWifiNetwork"><span class="type-signature"></span>getWifiNetwork<span class="signature">(netname)</span><span class="type-signature"> → {Promise.<(null|<a href="LuCI.Network.WifiNetwork.html">LuCI.Network.WifiNetwork</a>)>}</span></h4> + + + + + + +<div class="description"> + <p>Get a <a href="LuCI.Network.WifiNetwork.html"><code>WifiNetwork</code></a> instance describing +the given wireless network.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>netname</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + + + + <td class="description last"><p>The name of the wireless network to lookup. This may be either an uci +configuration section ID, a network ID in the form <code>radio#.network#</code> +or a Linux network device name like <code>wlan0</code> which is resolved to the +corresponding configuration section through <code>ubus</code> runtime information.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line1289">line 1289</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns a promise resolving to the <code>WifiNetwork</code> instance describing +the wireless network or <code>null</code> if the corresponding network could not +be found.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">Promise.<(null|<a href="LuCI.Network.WifiNetwork.html">LuCI.Network.WifiNetwork</a>)></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="isIgnoredDevice"><span class="type-signature"></span>isIgnoredDevice<span class="signature">(name)</span><span class="type-signature"> → {boolean}</span></h4> + + + + + + +<div class="description"> + <p>Test if a given network device name is in the list of patterns for +device names to ignore.</p> +<p>Ignored device names are usually Linux network devices which are +spawned implicitly by kernel modules such as <code>tunl0</code> or <code>hwsim0</code> +and which are unsuitable for use in network configuration.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>name</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + + + + <td class="description last"><p>The device name to test.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line1223">line 1223</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns <code>true</code> if the given name is in the ignore pattern list, +else returns <code>false</code>.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">boolean</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="maskToPrefix"><span class="type-signature"></span>maskToPrefix<span class="signature">(netmask, v6<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {null|number}</span></h4> + + + + + + +<div class="description"> + <p>Converts the given netmask to a prefix size in bits.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + <th>Attributes</th> + + + + <th>Default</th> + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>netmask</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + <td class="attributes"> + + + + + + </td> + + + + <td class="default"> + + </td> + + + <td class="description last"><p>The netmask to convert into a bit count.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>v6</code></td> + + + <td class="type"> + + +<span class="param-type">boolean</span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + + + </td> + + + + <td class="default"> + + false + + </td> + + + <td class="description last"><p>Whether to parse the given netmask as IPv4 (<code>false</code>) or IPv6 (<code>true</code>) +address.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line664">line 664</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns the number of prefix bits contained in the netmask or <code>null</code> +if the given netmask value was invalid.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">null</span> +| + +<span class="param-type">number</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="prefixToMask"><span class="type-signature"></span>prefixToMask<span class="signature">(bits, v6<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {null|string}</span></h4> + + + + + + +<div class="description"> + <p>Converts the given prefix size in bits to a netmask.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + <th>Attributes</th> + + + + <th>Default</th> + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>bits</code></td> + + + <td class="type"> + + +<span class="param-type">number</span> + + + + </td> + + + <td class="attributes"> + + + + + + </td> + + + + <td class="default"> + + </td> + + + <td class="description last"><p>The prefix size in bits.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>v6</code></td> + + + <td class="type"> + + +<span class="param-type">boolean</span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + + + </td> + + + + <td class="default"> + + false + + </td> + + + <td class="description last"><p>Whether to convert the bits value into an IPv4 netmask (<code>false</code>) or +an IPv6 netmask (<code>true</code>).</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line646">line 646</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns a string containing the netmask corresponding to the bit count +or <code>null</code> when the given amount of bits exceeds the maximum possible +value of <code>32</code> for IPv4 or <code>128</code> for IPv6.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">null</span> +| + +<span class="param-type">string</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="registerErrorCode"><span class="type-signature"></span>registerErrorCode<span class="signature">(code, message)</span><span class="type-signature"> → {boolean}</span></h4> + + + + + + +<div class="description"> + <p>Registers a new human readable translation string for a <code>Protocol</code> +error code.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>code</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + + + + <td class="description last"><p>The <code>ubus</code> protocol error code to register a translation for, e.g. +<code>NO_DEVICE</code>.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>message</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + + + + <td class="description last"><p>The message to use as translation for the given protocol error code.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line853">line 853</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns <code>true</code> if the error code description has been added or <code>false</code> +if either the arguments were invalid or if there already was a +description for the given code.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">boolean</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="registerPatternVirtual"><span class="type-signature"></span>registerPatternVirtual<span class="signature">(pat)</span><span class="type-signature"></span></h4> + + + + + + +<div class="description"> + <p>Registers a new regular expression pattern to recognize +virtual interfaces.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>pat</code></td> + + + <td class="type"> + + +<span class="param-type">RegExp</span> + + + + </td> + + + + + + <td class="description last"><p>A <code>RegExp</code> instance to match a virtual interface name +such as <code>6in4-wan</code> or <code>tun0</code>.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line833">line 833</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + + + + + + + + + + + + + <h4 class="name" id="registerProtocol"><span class="type-signature"></span>registerProtocol<span class="signature">(protoname, methods)</span><span class="type-signature"> → {<a href="LuCI.Network.Protocol.html">LuCI.Network.Protocol</a>}</span></h4> + + + + + + +<div class="description"> + <p>Registers a new <a href="LuCI.Network.Protocol.html"><code>Protocol</code></a> subclass +with the given methods and returns the resulting subclass value.</p> +<p>This functions internally calls +<a href="LuCI.Class.html#.extend"><code>Class.extend()</code></a> on the <code>Network.Protocol</code> +base class.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>protoname</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + + + + <td class="description last"><p>The name of the new protocol to register.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>methods</code></td> + + + <td class="type"> + + +<span class="param-type">Object.<string, *></span> + + + + </td> + + + + + + <td class="description last"><p>The member methods and values of the new <code>Protocol</code> subclass to +be passed to <a href="LuCI.Class.html#.extend"><code>Class.extend()</code></a>.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line792">line 792</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns the new <code>Protocol</code> subclass.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type"><a href="LuCI.Network.Protocol.html">LuCI.Network.Protocol</a></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="renameNetwork"><span class="type-signature"></span>renameNetwork<span class="signature">(oldName, newName)</span><span class="type-signature"> → {Promise.<boolean>}</span></h4> + + + + + + +<div class="description"> + <p>Rename the given network and its references to a new name.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>oldName</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + + + + <td class="description last"><p>The current name of the network.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>newName</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + + + + <td class="description last"><p>The name to rename the network to, must be in the format +<code>[a-z-A-Z0-9_]+</code>.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line1026">line 1026</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns a promise resolving to either <code>true</code> if the network was +successfully renamed or <code>false</code> if the new name was invalid, if +a network with the new name already exists or if the network to +rename could not be found.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">Promise.<boolean></span> + + + </dd> +</dl> + + + + + + + + + + + + <h3 class="subsection-title">Type Definitions</h3> + + + +<h4 class="name" id=".SwitchTopology">SwitchTopology</h4> + + + + +<div class="description"> + <p>Describes an swconfig switch topology by specifying the CPU +connections and external port labels of a switch.</p> +</div> + + + + <h5>Type:</h5> + <ul> + <li> + +<span class="param-type">Object.<string, (Object|Array)></span> + + + </li> + </ul> + + + + + + <h5 class="subsection-title">Properties:</h5> + + + +<table class="props"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>netdevs</code></td> + + + <td class="type"> + + +<span class="param-type">Object.<number, string></span> + + + + </td> + + + + + + <td class="description last"><p>The <code>netdevs</code> property points to an object describing the CPU port +connections of the switch. The numeric key of the enclosed object is +the port number, the value contains the Linux network device name the +port is hardwired to.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>ports</code></td> + + + <td class="type"> + + +<span class="param-type">Array.<Object.<string, (boolean|number|string)>></span> + + + + </td> + + + + + + <td class="description last"><p>The <code>ports</code> property points to an array describing the populated +ports of the switch in the external label order. Each array item is +an object containg the following keys:</p> +<ul> +<li><code>num</code> - the internal switch port number</li> +<li><code>label</code> - the label of the port, e.g. <code>LAN 1</code> or <code>CPU (eth0)</code></li> +<li><code>device</code> - the connected Linux network device name (CPU ports only)</li> +<li><code>tagged</code> - a boolean indicating whether the port must be tagged to +function (CPU ports only)</li> +</ul></td> + </tr> + + + </tbody> +</table> + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line1504">line 1504</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + +<h4 class="name" id=".WifiEncryption">WifiEncryption</h4> + + + + +<div class="description"> + <p>An encryption entry describes active wireless encryption settings +such as the used key management protocols, active ciphers and +protocol versions.</p> +</div> + + + + <h5>Type:</h5> + <ul> + <li> + +<span class="param-type">Object.<string, (boolean|Array.<(number|string)>)></span> + + + </li> + </ul> + + + + + + <h5 class="subsection-title">Properties:</h5> + + + +<table class="props"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + <th>Attributes</th> + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>enabled</code></td> + + + <td class="type"> + + +<span class="param-type">boolean</span> + + + + </td> + + + <td class="attributes"> + + + + </td> + + + + + <td class="description last"><p>Specifies whether any kind of encryption, such as <code>WEP</code> or <code>WPA</code> is +enabled. If set to <code>false</code>, then no encryption is active and the +corresponding network is open.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>wep</code></td> + + + <td class="type"> + + +<span class="param-type">Array.<string></span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + </td> + + + + + <td class="description last"><p>When the <code>wep</code> property exists, the network uses WEP encryption. +In this case, the property is set to an array of active WEP modes +which might be either <code>open</code>, <code>shared</code> or both.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>wpa</code></td> + + + <td class="type"> + + +<span class="param-type">Array.<number></span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + </td> + + + + + <td class="description last"><p>When the <code>wpa</code> property exists, the network uses WPA security. +In this case, the property is set to an array containing the WPA +protocol versions used, e.g. <code>[ 1, 2 ]</code> for WPA/WPA2 mixed mode or +<code>[ 3 ]</code> for WPA3-SAE.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>authentication</code></td> + + + <td class="type"> + + +<span class="param-type">Array.<string></span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + </td> + + + + + <td class="description last"><p>The <code>authentication</code> property only applies to WPA encryption and +is defined when the <code>wpa</code> property is set as well. It points to +an array of active authentication suites used by the network, e.g. +<code>[ "psk" ]</code> for a WPA(2)-PSK network or <code>[ "psk", "sae" ]</code> for +mixed WPA2-PSK/WPA3-SAE encryption.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>ciphers</code></td> + + + <td class="type"> + + +<span class="param-type">Array.<string></span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + </td> + + + + + <td class="description last"><p>If either WEP or WPA encryption is active, then the <code>ciphers</code> +property will be set to an array describing the active encryption +ciphers used by the network, e.g. <code>[ "tkip", "ccmp" ]</code> for a +WPA/WPA2-PSK mixed network or <code>[ "wep-40", "wep-104" ]</code> for an +WEP network.</p></td> + </tr> + + + </tbody> +</table> + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line666">line 666</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + +<h4 class="name" id=".WifiPeerEntry">WifiPeerEntry</h4> + + + + +<div class="description"> + <p>A wireless peer entry describes the properties of a remote wireless +peer associated with a local network.</p> +</div> + + + + <h5>Type:</h5> + <ul> + <li> + +<span class="param-type">Object.<string, (boolean|number|string|<a href="LuCI.Network.html#.WifiRateEntry">LuCI.Network.WifiRateEntry</a>)></span> + + + </li> + </ul> + + + + + + <h5 class="subsection-title">Properties:</h5> + + + +<table class="props"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + <th>Attributes</th> + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>mac</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + <td class="attributes"> + + + + </td> + + + + + <td class="description last"><p>The MAC address (BSSID).</p></td> + </tr> + + + + <tr> + + <td class="name"><code>signal</code></td> + + + <td class="type"> + + +<span class="param-type">number</span> + + + + </td> + + + <td class="attributes"> + + + + </td> + + + + + <td class="description last"><p>The received signal strength.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>signal_avg</code></td> + + + <td class="type"> + + +<span class="param-type">number</span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + </td> + + + + + <td class="description last"><p>The average signal strength if supported by the driver.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>noise</code></td> + + + <td class="type"> + + +<span class="param-type">number</span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + </td> + + + + + <td class="description last"><p>The current noise floor of the radio. May be <code>0</code> or absent if not +supported by the driver.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>inactive</code></td> + + + <td class="type"> + + +<span class="param-type">number</span> + + + + </td> + + + <td class="attributes"> + + + + </td> + + + + + <td class="description last"><p>The amount of milliseconds the peer has been inactive, e.g. due +to powersave.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>connected_time</code></td> + + + <td class="type"> + + +<span class="param-type">number</span> + + + + </td> + + + <td class="attributes"> + + + + </td> + + + + + <td class="description last"><p>The amount of milliseconds the peer is associated to this network.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>thr</code></td> + + + <td class="type"> + + +<span class="param-type">number</span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + </td> + + + + + <td class="description last"><p>The estimated throughput of the peer, May be <code>0</code> or absent if not +supported by the driver.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>authorized</code></td> + + + <td class="type"> + + +<span class="param-type">boolean</span> + + + + </td> + + + <td class="attributes"> + + + + </td> + + + + + <td class="description last"><p>Specifies whether the peer is authorized to associate to this network.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>authenticated</code></td> + + + <td class="type"> + + +<span class="param-type">boolean</span> + + + + </td> + + + <td class="attributes"> + + + + </td> + + + + + <td class="description last"><p>Specifies whether the peer completed authentication to this network.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>preamble</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + <td class="attributes"> + + + + </td> + + + + + <td class="description last"><p>The preamble mode used by the peer. May be <code>long</code> or <code>short</code>.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>wme</code></td> + + + <td class="type"> + + +<span class="param-type">boolean</span> + + + + </td> + + + <td class="attributes"> + + + + </td> + + + + + <td class="description last"><p>Specifies whether the peer supports WME/WMM capabilities.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>mfp</code></td> + + + <td class="type"> + + +<span class="param-type">boolean</span> + + + + </td> + + + <td class="attributes"> + + + + </td> + + + + + <td class="description last"><p>Specifies whether management frame protection is active.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>tdls</code></td> + + + <td class="type"> + + +<span class="param-type">boolean</span> + + + + </td> + + + <td class="attributes"> + + + + </td> + + + + + <td class="description last"><p>Specifies whether TDLS is active.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>mesh llid</code></td> + + + <td class="type"> + + +<span class="param-type">number</span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + </td> + + + + + <td class="description last"><p>The mesh LLID, may be <code>0</code> or absent if not applicable or supported +by the driver.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>mesh plid</code></td> + + + <td class="type"> + + +<span class="param-type">number</span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + </td> + + + + + <td class="description last"><p>The mesh PLID, may be <code>0</code> or absent if not applicable or supported +by the driver.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>mesh plink</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + </td> + + + + + <td class="description last"><p>The mesh peer link state description, may be an empty string (<code>''</code>) +or absent if not applicable or supported by the driver.</p> +<p>The following states are known:</p> +<ul> +<li><code>LISTEN</code></li> +<li><code>OPN_SNT</code></li> +<li><code>OPN_RCVD</code></li> +<li><code>CNF_RCVD</code></li> +<li><code>ESTAB</code></li> +<li><code>HOLDING</code></li> +<li><code>BLOCKED</code></li> +<li><code>UNKNOWN</code></li> +</ul></td> + </tr> + + + + <tr> + + <td class="name"><code>mesh local PS</code></td> + + + <td class="type"> + + +<span class="param-type">number</span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + </td> + + + + + <td class="description last"><p>The local powersafe mode for the peer link, may be an empty +string (<code>''</code>) or absent if not applicable or supported by +the driver.</p> +<p>The following modes are known:</p> +<ul> +<li><code>ACTIVE</code> (no power save)</li> +<li><code>LIGHT SLEEP</code></li> +<li><code>DEEP SLEEP</code></li> +<li><code>UNKNOWN</code></li> +</ul></td> + </tr> + + + + <tr> + + <td class="name"><code>mesh peer PS</code></td> + + + <td class="type"> + + +<span class="param-type">number</span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + </td> + + + + + <td class="description last"><p>The remote powersafe mode for the peer link, may be an empty +string (<code>''</code>) or absent if not applicable or supported by +the driver.</p> +<p>The following modes are known:</p> +<ul> +<li><code>ACTIVE</code> (no power save)</li> +<li><code>LIGHT SLEEP</code></li> +<li><code>DEEP SLEEP</code></li> +<li><code>UNKNOWN</code></li> +</ul></td> + </tr> + + + + <tr> + + <td class="name"><code>mesh non-peer PS</code></td> + + + <td class="type"> + + +<span class="param-type">number</span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + </td> + + + + + <td class="description last"><p>The powersafe mode for all non-peer neigbours, may be an empty +string (<code>''</code>) or absent if not applicable or supported by the driver.</p> +<p>The following modes are known:</p> +<ul> +<li><code>ACTIVE</code> (no power save)</li> +<li><code>LIGHT SLEEP</code></li> +<li><code>DEEP SLEEP</code></li> +<li><code>UNKNOWN</code></li> +</ul></td> + </tr> + + + + <tr> + + <td class="name"><code>rx</code></td> + + + <td class="type"> + + +<span class="param-type"><a href="LuCI.Network.html#.WifiRateEntry">LuCI.Network.WifiRateEntry</a></span> + + + + </td> + + + <td class="attributes"> + + + + </td> + + + + + <td class="description last"><p>Describes the receiving wireless rate from the peer.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>tx</code></td> + + + <td class="type"> + + +<span class="param-type"><a href="LuCI.Network.html#.WifiRateEntry">LuCI.Network.WifiRateEntry</a></span> + + + + </td> + + + <td class="attributes"> + + + + </td> + + + + + <td class="description last"><p>Describes the transmitting wireless rate to the peer.</p></td> + </tr> + + + </tbody> +</table> + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line3581">line 3581</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + +<h4 class="name" id=".WifiRateEntry">WifiRateEntry</h4> + + + + +<div class="description"> + <p>A wireless rate entry describes the properties of a wireless +transmission rate to or from a peer.</p> +</div> + + + + <h5>Type:</h5> + <ul> + <li> + +<span class="param-type">Object.<string, (boolean|number)></span> + + + </li> + </ul> + + + + + + <h5 class="subsection-title">Properties:</h5> + + + +<table class="props"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + <th>Attributes</th> + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>drop_misc</code></td> + + + <td class="type"> + + +<span class="param-type">number</span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + </td> + + + + + <td class="description last"><p>The amount of received misc. packages that have been dropped, e.g. +due to corruption or missing authentication. Only applicable to +receiving rates.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>packets</code></td> + + + <td class="type"> + + +<span class="param-type">number</span> + + + + </td> + + + <td class="attributes"> + + + + </td> + + + + + <td class="description last"><p>The amount of packets that have been received or sent.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>bytes</code></td> + + + <td class="type"> + + +<span class="param-type">number</span> + + + + </td> + + + <td class="attributes"> + + + + </td> + + + + + <td class="description last"><p>The amount of bytes that have been received or sent.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>failed</code></td> + + + <td class="type"> + + +<span class="param-type">number</span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + </td> + + + + + <td class="description last"><p>The amount of failed tranmission attempts. Only applicable to +transmit rates.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>retries</code></td> + + + <td class="type"> + + +<span class="param-type">number</span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + </td> + + + + + <td class="description last"><p>The amount of retried transmissions. Only applicable to transmit +rates.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>is_ht</code></td> + + + <td class="type"> + + +<span class="param-type">boolean</span> + + + + </td> + + + <td class="attributes"> + + + + </td> + + + + + <td class="description last"><p>Specifies whether this rate is an HT (IEEE 802.11n) rate.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>is_vht</code></td> + + + <td class="type"> + + +<span class="param-type">boolean</span> + + + + </td> + + + <td class="attributes"> + + + + </td> + + + + + <td class="description last"><p>Specifies whether this rate is an VHT (IEEE 802.11ac) rate.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>mhz</code></td> + + + <td class="type"> + + +<span class="param-type">number</span> + + + + </td> + + + <td class="attributes"> + + + + </td> + + + + + <td class="description last"><p>The channel width in MHz used for the transmission.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>rate</code></td> + + + <td class="type"> + + +<span class="param-type">number</span> + + + + </td> + + + <td class="attributes"> + + + + </td> + + + + + <td class="description last"><p>The bitrate in bit/s of the transmission.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>mcs</code></td> + + + <td class="type"> + + +<span class="param-type">number</span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + </td> + + + + + <td class="description last"><p>The MCS index of the used transmission rate. Only applicable to +HT or VHT rates.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>40mhz</code></td> + + + <td class="type"> + + +<span class="param-type">number</span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + </td> + + + + + <td class="description last"><p>Specifies whether the tranmission rate used 40MHz wide channel. +Only applicable to HT or VHT rates.</p> +<p>Note: this option exists for backwards compatibility only and its +use is discouraged. The <code>mhz</code> field should be used instead to +determine the channel width.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>short_gi</code></td> + + + <td class="type"> + + +<span class="param-type">boolean</span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + </td> + + + + + <td class="description last"><p>Specifies whether a short guard interval is used for the transmission. +Only applicable to HT or VHT rates.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>nss</code></td> + + + <td class="type"> + + +<span class="param-type">number</span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + </td> + + + + + <td class="description last"><p>Specifies the number of spatial streams used by the transmission. +Only applicable to VHT rates.</p></td> + </tr> + + + </tbody> +</table> + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line3691">line 3691</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + +<h4 class="name" id=".WifiScanResult">WifiScanResult</h4> + + + + +<div class="description"> + <p>A wireless scan result object describes a neighbouring wireless +network found in the vincinity.</p> +</div> + + + + <h5>Type:</h5> + <ul> + <li> + +<span class="param-type">Object.<string, (number|string|<a href="LuCI.Network.html#.WifiEncryption">LuCI.Network.WifiEncryption</a>)></span> + + + </li> + </ul> + + + + + + <h5 class="subsection-title">Properties:</h5> + + + +<table class="props"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>ssid</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + + + + <td class="description last"><p>The SSID / Mesh ID of the network.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>bssid</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + + + + <td class="description last"><p>The BSSID if the network.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>mode</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + + + + <td class="description last"><p>The operation mode of the network (<code>Master</code>, <code>Ad-Hoc</code>, <code>Mesh Point</code>).</p></td> + </tr> + + + + <tr> + + <td class="name"><code>channel</code></td> + + + <td class="type"> + + +<span class="param-type">number</span> + + + + </td> + + + + + + <td class="description last"><p>The wireless channel of the network.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>signal</code></td> + + + <td class="type"> + + +<span class="param-type">number</span> + + + + </td> + + + + + + <td class="description last"><p>The received signal strength of the network in dBm.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>quality</code></td> + + + <td class="type"> + + +<span class="param-type">number</span> + + + + </td> + + + + + + <td class="description last"><p>The numeric quality level of the signal, can be used in conjunction +with <code>quality_max</code> to calculate a quality percentage.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>quality_max</code></td> + + + <td class="type"> + + +<span class="param-type">number</span> + + + + </td> + + + + + + <td class="description last"><p>The maximum possible quality level of the signal, can be used in +conjunction with <code>quality</code> to calculate a quality percentage.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>encryption</code></td> + + + <td class="type"> + + +<span class="param-type"><a href="LuCI.Network.html#.WifiEncryption">LuCI.Network.WifiEncryption</a></span> + + + + </td> + + + + + + <td class="description last"><p>The encryption used by the wireless network.</p></td> + </tr> + + + </tbody> +</table> + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="network.js.html">network.js</a>, <a href="network.js.html#line3105">line 3105</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + +</article> + +</section> + + + + +</div> + +<nav> + <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="LuCI.html">LuCI</a></li><li><a href="LuCI.Class.html">Class</a></li><li><a href="LuCI.dom.html">dom</a></li><li><a href="LuCI.fs.html">fs</a></li><li><a href="LuCI.Headers.html">Headers</a></li><li><a href="LuCI.Network.html">Network</a></li><li><a href="LuCI.Network.Device.html">Device</a></li><li><a href="LuCI.Network.Hosts.html">Hosts</a></li><li><a href="LuCI.Network.Protocol.html">Protocol</a></li><li><a href="LuCI.Network.WifiDevice.html">WifiDevice</a></li><li><a href="LuCI.Network.WifiNetwork.html">WifiNetwork</a></li><li><a href="LuCI.Poll.html">Poll</a></li><li><a href="LuCI.Request.html">Request</a></li><li><a href="LuCI.Request.poll.html">poll</a></li><li><a href="LuCI.Response.html">Response</a></li><li><a href="LuCI.rpc.html">rpc</a></li><li><a href="LuCI.uci.html">uci</a></li><li><a href="LuCI.view.html">view</a></li><li><a href="LuCI.XHR.html">XHR</a></li></ul> +</nav> + +<br class="clear"> + +<footer> + Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a> on Tue Nov 05 2019 09:33:05 GMT+0100 (Central European Standard Time) +</footer> + +<script> prettyPrint(); </script> +<script src="scripts/linenumber.js"> </script> +</body> +</html>
\ No newline at end of file diff --git a/documentation/jsapi/LuCI.Poll.html b/documentation/jsapi/LuCI.Poll.html new file mode 100644 index 000000000..195fdc991 --- /dev/null +++ b/documentation/jsapi/LuCI.Poll.html @@ -0,0 +1,906 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="utf-8"> + <title>JSDoc: Class: Poll</title> + + <script src="scripts/prettify/prettify.js"> </script> + <script src="scripts/prettify/lang-css.js"> </script> + <!--[if lt IE 9]> + <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script> + <![endif]--> + <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css"> + <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css"> +</head> + +<body> + +<div id="main"> + + <h1 class="page-title">Class: Poll</h1> + + + + + + +<section> + +<header> + + <h2><span class="attribs"><span class="type-signature"></span></span> + <span class="ancestors"><a href="LuCI.html">LuCI</a>.</span>Poll</h2> + + <div class="class-description"><p>The <code>Poll</code> class allows registering and unregistering poll actions, +as well as starting, stopping and querying the state of the polling +loop.</p></div> + + +</header> + +<article> + <div class="container-overview"> + + + + + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line999">line 999</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + + + + + + + + </div> + + + + + + + + + + + + + + + + + <h3 class="subsection-title">Methods</h3> + + + + + + + + <h4 class="name" id="active"><span class="type-signature"></span>active<span class="signature">()</span><span class="type-signature"> → {boolean}</span></h4> + + + + + + +<div class="description"> + <p>Test whether the polling loop is running.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line1150">line 1150</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <ul> +<li>Returns <code>true</code> if polling is active, else <code>false</code>.</li> +</ul> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">boolean</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="add"><span class="type-signature"></span>add<span class="signature">(fn, interval)</span><span class="type-signature"> → {boolean}</span></h4> + + + + + + +<div class="description"> + <p>Add a new operation to the polling loop. If the polling loop is not +already started at this point, it will be implicitely started.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>fn</code></td> + + + <td class="type"> + + +<span class="param-type">function</span> + + + + </td> + + + + + + <td class="description last"><p>The function to invoke on each poll interval.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>interval</code></td> + + + <td class="type"> + + +<span class="param-type">number</span> + + + + </td> + + + + + + <td class="description last"><p>The poll interval in seconds.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line1023">line 1023</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + +<h5>Throws:</h5> + + + +<dl> + <dt> + <div class="param-desc"> + <p>Throws <code>TypeError</code> when an invalid interval was passed.</p> + </div> + </dt> + <dd></dd> + <dt> + <dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">TypeError</span> + + + </dd> + </dl> + </dt> + <dd></dd> +</dl> + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns <code>true</code> if the function has been added or <code>false</code> if it +already is registered.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">boolean</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="remove"><span class="type-signature"></span>remove<span class="signature">(fn)</span><span class="type-signature"> → {boolean}</span></h4> + + + + + + +<div class="description"> + <p>Remove an operation from the polling loop. If no further operatons +are registered, the polling loop is implicitely stopped.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>fn</code></td> + + + <td class="type"> + + +<span class="param-type">function</span> + + + + </td> + + + + + + <td class="description last"><p>The function to remove.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line1064">line 1064</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + +<h5>Throws:</h5> + + + +<dl> + <dt> + <div class="param-desc"> + <p>Throws <code>TypeError</code> when the given argument isn't a function.</p> + </div> + </dt> + <dd></dd> + <dt> + <dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">TypeError</span> + + + </dd> + </dl> + </dt> + <dd></dd> +</dl> + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns <code>true</code> if the function has been removed or <code>false</code> if it +wasn't found.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">boolean</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="start"><span class="type-signature"></span>start<span class="signature">()</span><span class="type-signature"> → {boolean}</span></h4> + + + + + + +<div class="description"> + <p>(Re)start the polling loop. Dispatches a custom <code>poll-start</code> event +to the <code>document</code> object upon successful start.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line1090">line 1090</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns <code>true</code> if polling has been started (or if no functions +where registered) or <code>false</code> when the polling loop already runs.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">boolean</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="stop"><span class="type-signature"></span>stop<span class="signature">()</span><span class="type-signature"> → {boolean}</span></h4> + + + + + + +<div class="description"> + <p>Stop the polling loop. Dispatches a custom <code>poll-stop</code> event +to the <code>document</code> object upon successful stop.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line1115">line 1115</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns <code>true</code> if polling has been stopped or <code>false</code> if it din't +run to begin with.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">boolean</span> + + + </dd> +</dl> + + + + + + + + + + + + + +</article> + +</section> + + + + +</div> + +<nav> + <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="LuCI.html">LuCI</a></li><li><a href="LuCI.Class.html">Class</a></li><li><a href="LuCI.dom.html">dom</a></li><li><a href="LuCI.fs.html">fs</a></li><li><a href="LuCI.Headers.html">Headers</a></li><li><a href="LuCI.Network.html">Network</a></li><li><a href="LuCI.Network.Device.html">Device</a></li><li><a href="LuCI.Network.Hosts.html">Hosts</a></li><li><a href="LuCI.Network.Protocol.html">Protocol</a></li><li><a href="LuCI.Network.WifiDevice.html">WifiDevice</a></li><li><a href="LuCI.Network.WifiNetwork.html">WifiNetwork</a></li><li><a href="LuCI.Poll.html">Poll</a></li><li><a href="LuCI.Request.html">Request</a></li><li><a href="LuCI.Request.poll.html">poll</a></li><li><a href="LuCI.Response.html">Response</a></li><li><a href="LuCI.rpc.html">rpc</a></li><li><a href="LuCI.uci.html">uci</a></li><li><a href="LuCI.view.html">view</a></li><li><a href="LuCI.XHR.html">XHR</a></li></ul> +</nav> + +<br class="clear"> + +<footer> + Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a> on Tue Nov 05 2019 09:33:05 GMT+0100 (Central European Standard Time) +</footer> + +<script> prettyPrint(); </script> +<script src="scripts/linenumber.js"> </script> +</body> +</html>
\ No newline at end of file diff --git a/documentation/jsapi/LuCI.Request.html b/documentation/jsapi/LuCI.Request.html new file mode 100644 index 000000000..2028b406f --- /dev/null +++ b/documentation/jsapi/LuCI.Request.html @@ -0,0 +1,1900 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="utf-8"> + <title>JSDoc: Class: Request</title> + + <script src="scripts/prettify/prettify.js"> </script> + <script src="scripts/prettify/lang-css.js"> </script> + <!--[if lt IE 9]> + <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script> + <![endif]--> + <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css"> + <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css"> +</head> + +<body> + +<div id="main"> + + <h1 class="page-title">Class: Request</h1> + + + + + + +<section> + +<header> + + <h2><span class="attribs"><span class="type-signature"></span></span> + <span class="ancestors"><a href="LuCI.html">LuCI</a>.</span>Request</h2> + + <div class="class-description"><p>The <code>Request</code> class allows initiating HTTP requests and provides utilities +for dealing with responses.</p></div> + + +</header> + +<article> + <div class="container-overview"> + + + + + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line569">line 569</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + + + + + + + + </div> + + + + + + + <h3 class="subsection-title">Classes</h3> + + <dl> + <dt><a href="LuCI.Request.poll.html">poll</a></dt> + <dd></dd> + </dl> + + + + + + + + + + + + <h3 class="subsection-title">Methods</h3> + + + + + + + + <h4 class="name" id="addInterceptor"><span class="type-signature"></span>addInterceptor<span class="signature">(interceptorFn)</span><span class="type-signature"> → {<a href="LuCI.Request.html#.interceptorFn">LuCI.Request.interceptorFn</a>}</span></h4> + + + + + + +<div class="description"> + <p>Register an HTTP response interceptor function. Interceptor +functions are useful to perform default actions on incoming HTTP +responses, such as checking for expired authentication or for +implementing request retries before returning a failure.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>interceptorFn</code></td> + + + <td class="type"> + + +<span class="param-type"><a href="LuCI.Request.html#.interceptorFn">LuCI.Request.interceptorFn</a></span> + + + + </td> + + + + + + <td class="description last"><p>The interceptor function to register.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line844">line 844</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>The registered function.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type"><a href="LuCI.Request.html#.interceptorFn">LuCI.Request.interceptorFn</a></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="expandURL"><span class="type-signature"></span>expandURL<span class="signature">(url)</span><span class="type-signature"> → {string}</span></h4> + + + + + + +<div class="description"> + <p>Turn the given relative URL into an absolute URL if necessary.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>url</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + + + + <td class="description last"><p>The URL to convert.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line586">line 586</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>The absolute URL derived from the given one, or the original URL +if it already was absolute.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">string</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="get"><span class="type-signature"></span>get<span class="signature">(target, options<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {Promise.<<a href="LuCI.Response.html">LuCI.Response</a>>}</span></h4> + + + + + + +<div class="description"> + <p>Initiate an HTTP GET request to the given target.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + <th>Attributes</th> + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>target</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + <td class="attributes"> + + + + + + </td> + + + + + <td class="description last"><p>The URL to request.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>options</code></td> + + + <td class="type"> + + +<span class="param-type"><a href="LuCI.Request.html#.RequestOptions">LuCI.Request.RequestOptions</a></span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + + + </td> + + + + + <td class="description last"><p>Additional options to configure the request.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line797">line 797</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>The resulting HTTP response.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">Promise.<<a href="LuCI.Response.html">LuCI.Response</a>></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="post"><span class="type-signature"></span>post<span class="signature">(target, data<span class="signature-attributes">opt</span>, options<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {Promise.<<a href="LuCI.Response.html">LuCI.Response</a>>}</span></h4> + + + + + + +<div class="description"> + <p>Initiate an HTTP POST request to the given target.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + <th>Attributes</th> + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>target</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + <td class="attributes"> + + + + + + </td> + + + + + <td class="description last"><p>The URL to request.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>data</code></td> + + + <td class="type"> + + +<span class="param-type">*</span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + + + </td> + + + + + <td class="description last"><p>The request data to send, see <a href="LuCI.Request.html#.RequestOptions"><code>LuCI.Request.RequestOptions</code></a> for details.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>options</code></td> + + + <td class="type"> + + +<span class="param-type"><a href="LuCI.Request.html#.RequestOptions">LuCI.Request.RequestOptions</a></span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + + + </td> + + + + + <td class="description last"><p>Additional options to configure the request.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line818">line 818</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>The resulting HTTP response.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">Promise.<<a href="LuCI.Response.html">LuCI.Response</a>></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="removeInterceptor"><span class="type-signature"></span>removeInterceptor<span class="signature">(interceptorFn)</span><span class="type-signature"> → {boolean}</span></h4> + + + + + + +<div class="description"> + <p>Remove an HTTP response interceptor function. The passed function +value must be the very same value that was used to register the +function.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>interceptorFn</code></td> + + + <td class="type"> + + +<span class="param-type"><a href="LuCI.Request.html#.interceptorFn">LuCI.Request.interceptorFn</a></span> + + + + </td> + + + + + + <td class="description last"><p>The interceptor function to remove.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line863">line 863</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns <code>true</code> if any function has been removed, else <code>false</code>.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">boolean</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="request"><span class="type-signature"></span>request<span class="signature">(target, options<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {Promise.<<a href="LuCI.Response.html">LuCI.Response</a>>}</span></h4> + + + + + + +<div class="description"> + <p>Initiate an HTTP request to the given target.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + <th>Attributes</th> + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>target</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + <td class="attributes"> + + + + + + </td> + + + + + <td class="description last"><p>The URL to request.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>options</code></td> + + + <td class="type"> + + +<span class="param-type"><a href="LuCI.Request.html#.RequestOptions">LuCI.Request.RequestOptions</a></span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + + + </td> + + + + + <td class="description last"><p>Additional options to configure the request.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line648">line 648</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>The resulting HTTP response.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">Promise.<<a href="LuCI.Response.html">LuCI.Response</a>></span> + + + </dd> +</dl> + + + + + + + + + + + + <h3 class="subsection-title">Type Definitions</h3> + + + + + + + + <h4 class="name" id=".interceptorFn"><span class="type-signature"></span>interceptorFn<span class="signature">(res)</span><span class="type-signature"></span></h4> + + + + + + +<div class="description"> + <p>Interceptor functions are invoked whenever an HTTP reply is received, in the order +these functions have been registered.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>res</code></td> + + + <td class="type"> + + +<span class="param-type"><a href="LuCI.Response.html">LuCI.Response</a></span> + + + + </td> + + + + + + <td class="description last"><p>The HTTP response object</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line822">line 822</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + + + + + + + + +<h4 class="name" id=".RequestOptions">RequestOptions</h4> + + + + + + + <h5>Type:</h5> + <ul> + <li> + +<span class="param-type">Object</span> + + + </li> + </ul> + + + + + + <h5 class="subsection-title">Properties:</h5> + + + +<table class="props"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + <th>Attributes</th> + + + + <th>Default</th> + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>method</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + </td> + + + + <td class="default"> + + GET + + </td> + + + <td class="description last"><p>The HTTP method to use, e.g. <code>GET</code> or <code>POST</code>.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>query</code></td> + + + <td class="type"> + + +<span class="param-type">Object.<string, (Object|string)></span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + </td> + + + + <td class="default"> + + </td> + + + <td class="description last"><p>Query string data to append to the URL. Non-string values of the +given object will be converted to JSON.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>cache</code></td> + + + <td class="type"> + + +<span class="param-type">boolean</span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + </td> + + + + <td class="default"> + + false + + </td> + + + <td class="description last"><p>Specifies whether the HTTP response may be retrieved from cache.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>username</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + </td> + + + + <td class="default"> + + </td> + + + <td class="description last"><p>Provides a username for HTTP basic authentication.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>password</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + </td> + + + + <td class="default"> + + </td> + + + <td class="description last"><p>Provides a password for HTTP basic authentication.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>timeout</code></td> + + + <td class="type"> + + +<span class="param-type">number</span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + </td> + + + + <td class="default"> + + </td> + + + <td class="description last"><p>Specifies the request timeout in seconds.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>credentials</code></td> + + + <td class="type"> + + +<span class="param-type">boolean</span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + </td> + + + + <td class="default"> + + false + + </td> + + + <td class="description last"><p>Whether to include credentials such as cookies in the request.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>content</code></td> + + + <td class="type"> + + +<span class="param-type">*</span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + </td> + + + + <td class="default"> + + </td> + + + <td class="description last"><p>Specifies the HTTP message body to send along with the request. +If the value is a function, it is invoked and the return value +used as content, if it is a FormData instance, it is used as-is, +if it is an object, it will be converted to JSON, in all other +cases it is converted to a string.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>header</code></td> + + + <td class="type"> + + +<span class="param-type">Object.<string, string></span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + </td> + + + + <td class="default"> + + </td> + + + <td class="description last"><p>Specifies HTTP headers to set for the request.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>progress</code></td> + + + <td class="type"> + + +<span class="param-type">function</span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + </td> + + + + <td class="default"> + + </td> + + + <td class="description last"><p>An optional request callback function which receives ProgressEvent +instances as sole argument during the HTTP request transfer.</p></td> + </tr> + + + </tbody> +</table> + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line593">line 593</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + +</article> + +</section> + + + + +</div> + +<nav> + <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="LuCI.html">LuCI</a></li><li><a href="LuCI.Class.html">Class</a></li><li><a href="LuCI.dom.html">dom</a></li><li><a href="LuCI.fs.html">fs</a></li><li><a href="LuCI.Headers.html">Headers</a></li><li><a href="LuCI.Network.html">Network</a></li><li><a href="LuCI.Network.Device.html">Device</a></li><li><a href="LuCI.Network.Hosts.html">Hosts</a></li><li><a href="LuCI.Network.Protocol.html">Protocol</a></li><li><a href="LuCI.Network.WifiDevice.html">WifiDevice</a></li><li><a href="LuCI.Network.WifiNetwork.html">WifiNetwork</a></li><li><a href="LuCI.Poll.html">Poll</a></li><li><a href="LuCI.Request.html">Request</a></li><li><a href="LuCI.Request.poll.html">poll</a></li><li><a href="LuCI.Response.html">Response</a></li><li><a href="LuCI.rpc.html">rpc</a></li><li><a href="LuCI.uci.html">uci</a></li><li><a href="LuCI.view.html">view</a></li><li><a href="LuCI.XHR.html">XHR</a></li></ul> +</nav> + +<br class="clear"> + +<footer> + Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a> on Tue Nov 05 2019 09:33:05 GMT+0100 (Central European Standard Time) +</footer> + +<script> prettyPrint(); </script> +<script src="scripts/linenumber.js"> </script> +</body> +</html>
\ No newline at end of file diff --git a/documentation/jsapi/LuCI.Request.poll.html b/documentation/jsapi/LuCI.Request.poll.html new file mode 100644 index 000000000..06c700dc4 --- /dev/null +++ b/documentation/jsapi/LuCI.Request.poll.html @@ -0,0 +1,1079 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="utf-8"> + <title>JSDoc: Class: poll</title> + + <script src="scripts/prettify/prettify.js"> </script> + <script src="scripts/prettify/lang-css.js"> </script> + <!--[if lt IE 9]> + <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script> + <![endif]--> + <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css"> + <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css"> +</head> + +<body> + +<div id="main"> + + <h1 class="page-title">Class: poll</h1> + + + + + + +<section> + +<header> + + <h2><span class="attribs"><span class="type-signature"></span></span> + <span class="ancestors"><a href="LuCI.html">LuCI</a><a href="LuCI.Request.html">.Request</a>.</span>poll</h2> + + <div class="class-description"><p>The <code>Request.poll</code> class provides some convience wrappers around +<a href="LuCI.Poll.html"><code>LuCI.Poll</code></a> mainly to simplify registering repeating HTTP +request calls as polling functions.</p></div> + + +</header> + +<article> + <div class="container-overview"> + + + + + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line881">line 881</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + + + + + + + + </div> + + + + + + + + + + + + + + + + + <h3 class="subsection-title">Methods</h3> + + + + + + + + <h4 class="name" id="active"><span class="type-signature"></span>active<span class="signature">()</span><span class="type-signature"></span></h4> + + + + + + +<div class="description"> + <p>Alias for <code>LuCI.Poll.active()</code>.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line985">line 985</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + + + + + + + + + + + + + <h4 class="name" id="add"><span class="type-signature"></span>add<span class="signature">(interval, url, options<span class="signature-attributes">opt</span>, callback<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {function}</span></h4> + + + + + + +<div class="description"> + <p>Register a repeating HTTP request with an optional callback +to invoke whenever a response for the request is received.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + <th>Attributes</th> + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>interval</code></td> + + + <td class="type"> + + +<span class="param-type">number</span> + + + + </td> + + + <td class="attributes"> + + + + + + </td> + + + + + <td class="description last"><p>The poll interval in seconds.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>url</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + <td class="attributes"> + + + + + + </td> + + + + + <td class="description last"><p>The URL to request on each poll.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>options</code></td> + + + <td class="type"> + + +<span class="param-type"><a href="LuCI.Request.html#.RequestOptions">LuCI.Request.RequestOptions</a></span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + + + </td> + + + + + <td class="description last"><p>Additional options to configure the request.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>callback</code></td> + + + <td class="type"> + + +<span class="param-type"><a href="LuCI.Request.poll.html#~callbackFn">LuCI.Request.poll~callbackFn</a></span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + + + </td> + + + + + <td class="description last"><p><a href="LuCI.Request.poll.html#~callbackFn"><code>Callback</code></a> function to +invoke for each HTTP reply.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line924">line 924</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + +<h5>Throws:</h5> + + + +<dl> + <dt> + <div class="param-desc"> + <p>Throws <code>TypeError</code> when an invalid interval was passed.</p> + </div> + </dt> + <dd></dd> + <dt> + <dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">TypeError</span> + + + </dd> + </dl> + </dt> + <dd></dd> +</dl> + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns the internally created poll function.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">function</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="remove"><span class="type-signature"></span>remove<span class="signature">(entry)</span><span class="type-signature"> → {boolean}</span></h4> + + + + + + +<div class="description"> + <p>Remove a polling request that has been previously added using <code>add()</code>. +This function is essentially a wrapper around +<code>LuCI.Poll.remove()</code>.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>entry</code></td> + + + <td class="type"> + + +<span class="param-type">function</span> + + + + </td> + + + + + + <td class="description last"><p>The poll function returned by <a href="LuCI.Request.poll.html#add"><code>add()</code></a>.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line961">line 961</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns <code>true</code> if any function has been removed, else <code>false</code>.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">boolean</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="start"><span class="type-signature"></span>start<span class="signature">()</span><span class="type-signature"></span></h4> + + + + + + +<div class="description"> + <p>Alias for <code>LuCI.Poll.start()</code>.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line969">line 969</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + + + + + + + + + + + + + <h4 class="name" id="stop"><span class="type-signature"></span>stop<span class="signature">()</span><span class="type-signature"></span></h4> + + + + + + +<div class="description"> + <p>Alias for <code>LuCI.Poll.stop()</code>.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line977">line 977</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + + + + + + + + + + + <h3 class="subsection-title">Type Definitions</h3> + + + + + + + + <h4 class="name" id="~callbackFn"><span class="type-signature"></span>callbackFn<span class="signature">(res, data, duration)</span><span class="type-signature"></span></h4> + + + + + + +<div class="description"> + <p>The callback function is invoked whenever an HTTP reply to a +polled request is received or when the polled request timed +out.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>res</code></td> + + + <td class="type"> + + +<span class="param-type"><a href="LuCI.Response.html">LuCI.Response</a></span> + + + + </td> + + + + + + <td class="description last"><p>The HTTP response object.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>data</code></td> + + + <td class="type"> + + +<span class="param-type">*</span> + + + + </td> + + + + + + <td class="description last"><p>The response JSON if the response could be parsed as such, +else <code>null</code>.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>duration</code></td> + + + <td class="type"> + + +<span class="param-type">number</span> + + + + </td> + + + + + + <td class="description last"><p>The total duration of the request in milliseconds.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line882">line 882</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + + + + + + + + + + +</article> + +</section> + + + + +</div> + +<nav> + <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="LuCI.html">LuCI</a></li><li><a href="LuCI.Class.html">Class</a></li><li><a href="LuCI.dom.html">dom</a></li><li><a href="LuCI.fs.html">fs</a></li><li><a href="LuCI.Headers.html">Headers</a></li><li><a href="LuCI.Network.html">Network</a></li><li><a href="LuCI.Network.Device.html">Device</a></li><li><a href="LuCI.Network.Hosts.html">Hosts</a></li><li><a href="LuCI.Network.Protocol.html">Protocol</a></li><li><a href="LuCI.Network.WifiDevice.html">WifiDevice</a></li><li><a href="LuCI.Network.WifiNetwork.html">WifiNetwork</a></li><li><a href="LuCI.Poll.html">Poll</a></li><li><a href="LuCI.Request.html">Request</a></li><li><a href="LuCI.Request.poll.html">poll</a></li><li><a href="LuCI.Response.html">Response</a></li><li><a href="LuCI.rpc.html">rpc</a></li><li><a href="LuCI.uci.html">uci</a></li><li><a href="LuCI.view.html">view</a></li><li><a href="LuCI.XHR.html">XHR</a></li></ul> +</nav> + +<br class="clear"> + +<footer> + Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a> on Tue Nov 05 2019 09:33:05 GMT+0100 (Central European Standard Time) +</footer> + +<script> prettyPrint(); </script> +<script src="scripts/linenumber.js"> </script> +</body> +</html>
\ No newline at end of file diff --git a/documentation/jsapi/LuCI.Response.html b/documentation/jsapi/LuCI.Response.html new file mode 100644 index 000000000..fea8f79d9 --- /dev/null +++ b/documentation/jsapi/LuCI.Response.html @@ -0,0 +1,1024 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="utf-8"> + <title>JSDoc: Class: Response</title> + + <script src="scripts/prettify/prettify.js"> </script> + <script src="scripts/prettify/lang-css.js"> </script> + <!--[if lt IE 9]> + <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script> + <![endif]--> + <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css"> + <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css"> +</head> + +<body> + +<div id="main"> + + <h1 class="page-title">Class: Response</h1> + + + + + + +<section> + +<header> + + <h2><span class="attribs"><span class="type-signature"></span></span> + <span class="ancestors"><a href="LuCI.html">LuCI</a>.</span>Response</h2> + + <div class="class-description"><p>The <code>Response</code> class is an internal utility class representing HTTP responses.</p></div> + + +</header> + +<article> + <div class="container-overview"> + + + + + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line377">line 377</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + + + + + + + + </div> + + + + + + + + + + + + + + + <h3 class="subsection-title">Members</h3> + + + +<h4 class="name" id="duration"><span class="type-signature"></span>duration<span class="type-signature"> :number</span></h4> + + + + +<div class="description"> + <p>The total duration of the HTTP request in milliseconds</p> +</div> + + + + <h5>Type:</h5> + <ul> + <li> + +<span class="param-type">number</span> + + + </li> + </ul> + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line416">line 416</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + +<h4 class="name" id="headers"><span class="type-signature"></span>headers<span class="type-signature"> :<a href="LuCI.Headers.html">LuCI.Headers</a></span></h4> + + + + +<div class="description"> + <p>The HTTP headers of the response</p> +</div> + + + + <h5>Type:</h5> + <ul> + <li> + +<span class="param-type"><a href="LuCI.Headers.html">LuCI.Headers</a></span> + + + </li> + </ul> + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line407">line 407</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + +<h4 class="name" id="ok"><span class="type-signature"></span>ok<span class="type-signature"> :boolean</span></h4> + + + + +<div class="description"> + <p>Describes whether the response is successful (status codes <code>200..299</code>) or not</p> +</div> + + + + <h5>Type:</h5> + <ul> + <li> + +<span class="param-type">boolean</span> + + + </li> + </ul> + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line380">line 380</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + +<h4 class="name" id="status"><span class="type-signature"></span>status<span class="type-signature"> :number</span></h4> + + + + +<div class="description"> + <p>The numeric HTTP status code of the response</p> +</div> + + + + <h5>Type:</h5> + <ul> + <li> + +<span class="param-type">number</span> + + + </li> + </ul> + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line389">line 389</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + +<h4 class="name" id="statusText"><span class="type-signature"></span>statusText<span class="type-signature"> :string</span></h4> + + + + +<div class="description"> + <p>The HTTP status description message of the response</p> +</div> + + + + <h5>Type:</h5> + <ul> + <li> + +<span class="param-type">string</span> + + + </li> + </ul> + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line398">line 398</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + +<h4 class="name" id="url"><span class="type-signature"></span>url<span class="type-signature"> :string</span></h4> + + + + +<div class="description"> + <p>The final URL of the request, i.e. after following redirects.</p> +</div> + + + + <h5>Type:</h5> + <ul> + <li> + +<span class="param-type">string</span> + + + </li> + </ul> + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line425">line 425</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + <h3 class="subsection-title">Methods</h3> + + + + + + + + <h4 class="name" id="clone"><span class="type-signature"></span>clone<span class="signature">(content<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {<a href="LuCI.Response.html">LuCI.Response</a>}</span></h4> + + + + + + +<div class="description"> + <p>Clones the given response object, optionally overriding the content +of the cloned instance.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + <th>Attributes</th> + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>content</code></td> + + + <td class="type"> + + +<span class="param-type">*</span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + + + </td> + + + + + <td class="description last"><p>Override the content of the cloned response. Object values will be +treated as JSON response data, all other types will be converted +using <code>String()</code> and treated as response text.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line465">line 465</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>The cloned <code>Response</code> instance.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type"><a href="LuCI.Response.html">LuCI.Response</a></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="json"><span class="type-signature"></span>json<span class="signature">()</span><span class="type-signature"> → {*}</span></h4> + + + + + + +<div class="description"> + <p>Access the response content as JSON data.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line486">line 486</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + +<h5>Throws:</h5> + + + +<dl> + <dt> + <div class="param-desc"> + <p>Throws <code>SyntaxError</code> if the content isn't valid JSON.</p> + </div> + </dt> + <dd></dd> + <dt> + <dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">SyntaxError</span> + + + </dd> + </dl> + </dt> + <dd></dd> +</dl> + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>The parsed JSON data.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">*</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="text"><span class="type-signature"></span>text<span class="signature">()</span><span class="type-signature"> → {string}</span></h4> + + + + + + +<div class="description"> + <p>Access the response content as string.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line501">line 501</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>The response content.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">string</span> + + + </dd> +</dl> + + + + + + + + + + + + + +</article> + +</section> + + + + +</div> + +<nav> + <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="LuCI.html">LuCI</a></li><li><a href="LuCI.Class.html">Class</a></li><li><a href="LuCI.dom.html">dom</a></li><li><a href="LuCI.fs.html">fs</a></li><li><a href="LuCI.Headers.html">Headers</a></li><li><a href="LuCI.Network.html">Network</a></li><li><a href="LuCI.Network.Device.html">Device</a></li><li><a href="LuCI.Network.Hosts.html">Hosts</a></li><li><a href="LuCI.Network.Protocol.html">Protocol</a></li><li><a href="LuCI.Network.WifiDevice.html">WifiDevice</a></li><li><a href="LuCI.Network.WifiNetwork.html">WifiNetwork</a></li><li><a href="LuCI.Poll.html">Poll</a></li><li><a href="LuCI.Request.html">Request</a></li><li><a href="LuCI.Request.poll.html">poll</a></li><li><a href="LuCI.Response.html">Response</a></li><li><a href="LuCI.rpc.html">rpc</a></li><li><a href="LuCI.uci.html">uci</a></li><li><a href="LuCI.view.html">view</a></li><li><a href="LuCI.XHR.html">XHR</a></li></ul> +</nav> + +<br class="clear"> + +<footer> + Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a> on Tue Nov 05 2019 09:33:05 GMT+0100 (Central European Standard Time) +</footer> + +<script> prettyPrint(); </script> +<script src="scripts/linenumber.js"> </script> +</body> +</html>
\ No newline at end of file diff --git a/documentation/jsapi/LuCI.XHR.html b/documentation/jsapi/LuCI.XHR.html new file mode 100644 index 000000000..b82f2a0fb --- /dev/null +++ b/documentation/jsapi/LuCI.XHR.html @@ -0,0 +1,1134 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="utf-8"> + <title>JSDoc: Class: XHR</title> + + <script src="scripts/prettify/prettify.js"> </script> + <script src="scripts/prettify/lang-css.js"> </script> + <!--[if lt IE 9]> + <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script> + <![endif]--> + <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css"> + <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css"> +</head> + +<body> + +<div id="main"> + + <h1 class="page-title">Class: XHR</h1> + + + + + + +<section> + +<header> + + <h2><span class="attribs"><span class="type-signature"></span></span> + <span class="ancestors"><a href="LuCI.html">LuCI</a>.</span>XHR<span class="signature">()</span><span class="type-signature"></span></h2> + + <div class="class-description"><p>The <code>LuCI.XHR</code> class is a legacy compatibility shim for the +functionality formerly provided by <code>xhr.js</code>. It is registered as global +<code>window.XHR</code> symbol for compatibility with legacy code.</p> +<p>New code should use <a href="LuCI.Request.html"><code>LuCI.Request</code></a> instead to implement HTTP +request handling.</p></div> + + +</header> + +<article> + <div class="container-overview"> + + + + + <h2>Constructor</h2> + + + + <h4 class="name" id="XHR"><span class="type-signature"></span>new XHR<span class="signature">()</span><span class="type-signature"></span></h4> + + + + + + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + <dt class="important tag-deprecated">Deprecated:</dt><dd class="yes-def tag-deprecated"><ul class="dummy"><li>Yes</li></ul></dd> + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line2943">line 2943</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + + + + + + + + </div> + + + + + + + + + + + + + + + + + <h3 class="subsection-title">Methods</h3> + + + + + + + + <h4 class="name" id="abort"><span class="type-signature"></span>abort<span class="signature">()</span><span class="type-signature"></span></h4> + + + + + + +<div class="description"> + <p>Ignored for backwards compatibility.</p> +<p>This function does nothing.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + <dt class="important tag-deprecated">Deprecated:</dt><dd class="yes-def tag-deprecated"><ul class="dummy"><li>Yes</li></ul></dd> + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line3046">line 3046</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + + + + + + + + + + + + + <h4 class="name" id="busy"><span class="type-signature"></span>busy<span class="signature">()</span><span class="type-signature"> → {boolean}</span></h4> + + + + + + +<div class="description"> + <p>Checks the running state of the request.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + <dt class="important tag-deprecated">Deprecated:</dt><dd class="yes-def tag-deprecated"><ul class="dummy"><li>Yes</li></ul></dd> + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line3035">line 3035</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns <code>true</code> if the request is still running or <code>false</code> if it +already completed.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">boolean</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="cancel"><span class="type-signature"></span>cancel<span class="signature">()</span><span class="type-signature"></span></h4> + + + + + + +<div class="description"> + <p>Cancels a running request.</p> +<p>This function does not actually cancel the underlying +<code>XMLHTTPRequest</code> request but it sets a flag which prevents the +invocation of the callback function when the request eventually +finishes or timed out.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + <dt class="important tag-deprecated">Deprecated:</dt><dd class="yes-def tag-deprecated"><ul class="dummy"><li>Yes</li></ul></dd> + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line3022">line 3022</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + + + + + + + + + + + + + <h4 class="name" id="get"><span class="type-signature"></span>get<span class="signature">(url, data<span class="signature-attributes">opt</span>, callback<span class="signature-attributes">opt</span>, timeout<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {Promise.<null>}</span></h4> + + + + + + +<div class="description"> + <p>This function is a legacy wrapper around +<a href="LuCI.html#get"><code>LuCI.get()</code></a>.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + <th>Attributes</th> + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>url</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + <td class="attributes"> + + + + + + </td> + + + + + <td class="description last"><p>The URL to request</p></td> + </tr> + + + + <tr> + + <td class="name"><code>data</code></td> + + + <td class="type"> + + +<span class="param-type">Object</span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + + + </td> + + + + + <td class="description last"><p>Additional query string data</p></td> + </tr> + + + + <tr> + + <td class="name"><code>callback</code></td> + + + <td class="type"> + + +<span class="param-type"><a href="LuCI.html#.requestCallbackFn">LuCI.requestCallbackFn</a></span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + + + </td> + + + + + <td class="description last"><p>Callback function to invoke on completion</p></td> + </tr> + + + + <tr> + + <td class="name"><code>timeout</code></td> + + + <td class="type"> + + +<span class="param-type">number</span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + + + </td> + + + + + <td class="description last"><p>Request timeout to use</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + <dt class="important tag-deprecated">Deprecated:</dt><dd class="yes-def tag-deprecated"><ul class="dummy"><li>Yes</li></ul></dd> + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line2978">line 2978</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">Promise.<null></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="post"><span class="type-signature"></span>post<span class="signature">(url, data<span class="signature-attributes">opt</span>, callback<span class="signature-attributes">opt</span>, timeout<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {Promise.<null>}</span></h4> + + + + + + +<div class="description"> + <p>This function is a legacy wrapper around +<a href="LuCI.html#post"><code>LuCI.post()</code></a>.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + <th>Attributes</th> + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>url</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + <td class="attributes"> + + + + + + </td> + + + + + <td class="description last"><p>The URL to request</p></td> + </tr> + + + + <tr> + + <td class="name"><code>data</code></td> + + + <td class="type"> + + +<span class="param-type">Object</span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + + + </td> + + + + + <td class="description last"><p>Additional data to append to the request body.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>callback</code></td> + + + <td class="type"> + + +<span class="param-type"><a href="LuCI.html#.requestCallbackFn">LuCI.requestCallbackFn</a></span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + + + </td> + + + + + <td class="description last"><p>Callback function to invoke on completion</p></td> + </tr> + + + + <tr> + + <td class="name"><code>timeout</code></td> + + + <td class="type"> + + +<span class="param-type">number</span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + + + </td> + + + + + <td class="description last"><p>Request timeout to use</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + <dt class="important tag-deprecated">Deprecated:</dt><dd class="yes-def tag-deprecated"><ul class="dummy"><li>Yes</li></ul></dd> + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line3005">line 3005</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">Promise.<null></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="send_form"><span class="type-signature"></span>send_form<span class="signature">()</span><span class="type-signature"></span></h4> + + + + + + +<div class="description"> + <p>Existing for backwards compatibility.</p> +<p>This function simply throws an <code>InternalError</code> when invoked.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + <dt class="important tag-deprecated">Deprecated:</dt><dd class="yes-def tag-deprecated"><ul class="dummy"><li>Yes</li></ul></dd> + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line3061">line 3061</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + +<h5>Throws:</h5> + + + +<dl> + <dt> + <div class="param-desc"> + <p>Throws an <code>InternalError</code> with the message <code>Not implemented</code> +when invoked.</p> + </div> + </dt> + <dd></dd> + <dt> + <dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">InternalError</span> + + + </dd> + </dl> + </dt> + <dd></dd> +</dl> + + + + + + + + + + + + + + + + +</article> + +</section> + + + + +</div> + +<nav> + <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="LuCI.html">LuCI</a></li><li><a href="LuCI.Class.html">Class</a></li><li><a href="LuCI.dom.html">dom</a></li><li><a href="LuCI.fs.html">fs</a></li><li><a href="LuCI.Headers.html">Headers</a></li><li><a href="LuCI.Network.html">Network</a></li><li><a href="LuCI.Network.Device.html">Device</a></li><li><a href="LuCI.Network.Hosts.html">Hosts</a></li><li><a href="LuCI.Network.Protocol.html">Protocol</a></li><li><a href="LuCI.Network.WifiDevice.html">WifiDevice</a></li><li><a href="LuCI.Network.WifiNetwork.html">WifiNetwork</a></li><li><a href="LuCI.Poll.html">Poll</a></li><li><a href="LuCI.Request.html">Request</a></li><li><a href="LuCI.Request.poll.html">poll</a></li><li><a href="LuCI.Response.html">Response</a></li><li><a href="LuCI.rpc.html">rpc</a></li><li><a href="LuCI.uci.html">uci</a></li><li><a href="LuCI.view.html">view</a></li><li><a href="LuCI.XHR.html">XHR</a></li></ul> +</nav> + +<br class="clear"> + +<footer> + Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a> on Tue Nov 05 2019 09:33:05 GMT+0100 (Central European Standard Time) +</footer> + +<script> prettyPrint(); </script> +<script src="scripts/linenumber.js"> </script> +</body> +</html>
\ No newline at end of file diff --git a/documentation/jsapi/LuCI.dom.html b/documentation/jsapi/LuCI.dom.html new file mode 100644 index 000000000..b98c8f0a6 --- /dev/null +++ b/documentation/jsapi/LuCI.dom.html @@ -0,0 +1,3135 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="utf-8"> + <title>JSDoc: Class: dom</title> + + <script src="scripts/prettify/prettify.js"> </script> + <script src="scripts/prettify/lang-css.js"> </script> + <!--[if lt IE 9]> + <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script> + <![endif]--> + <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css"> + <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css"> +</head> + +<body> + +<div id="main"> + + <h1 class="page-title">Class: dom</h1> + + + + + + +<section> + +<header> + + <h2><span class="attribs"><span class="type-signature"></span></span> + <span class="ancestors"><a href="LuCI.html">LuCI</a>.</span>dom</h2> + + <div class="class-description"><p>The <code>dom</code> class provides convenience method for creating and +manipulating DOM elements.</p></div> + + +</header> + +<article> + <div class="container-overview"> + + + + + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line2065">line 2065</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + + + + + + + + </div> + + + + + + + + + + + + + + + + + <h3 class="subsection-title">Methods</h3> + + + + + + + + <h4 class="name" id="append"><span class="type-signature"></span>append<span class="signature">(node, children<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {Node|null}</span></h4> + + + + + + +<div class="description"> + <p>Appends the given children data to the given node.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + <th>Attributes</th> + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>node</code></td> + + + <td class="type"> + + +<span class="param-type">*</span> + + + + </td> + + + <td class="attributes"> + + + + + + </td> + + + + + <td class="description last"><p>The <code>Node</code> argument to append the children to.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>children</code></td> + + + <td class="type"> + + +<span class="param-type">*</span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + + + </td> + + + + + <td class="description last"><p>The childrens to append to the given node.</p> +<p>When <code>children</code> is an array, then each item of the array +will be either appended as child element or text node, +depending on whether the item is a DOM <code>Node</code> instance or +some other non-<code>null</code> value. Non-<code>Node</code>, non-<code>null</code> values +will be converted to strings first before being passed as +argument to <code>createTextNode()</code>.</p> +<p>When <code>children</code> is a function, it will be invoked with +the passed <code>node</code> argument as sole parameter and the <code>append</code> +function will be invoked again, with the given <code>node</code> argument +as first and the return value of the <code>children</code> function as +second parameter.</p> +<p>When <code>children</code> is is a DOM <code>Node</code> instance, it will be +appended to the given <code>node</code>.</p> +<p>When <code>children</code> is any other non-<code>null</code> value, it will be +converted to a string and appened to the <code>innerHTML</code> property +of the given <code>node</code>.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line2216">line 2216</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns the last children <code>Node</code> appended to the node or <code>null</code> +if either the <code>node</code> argument was no valid DOM <code>node</code> or if the +<code>children</code> was <code>null</code> or didn't result in further DOM nodes.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">Node</span> +| + +<span class="param-type">null</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="attr"><span class="type-signature"></span>attr<span class="signature">(node, key, val<span class="signature-attributes">opt</span>)</span><span class="type-signature"></span></h4> + + + + + + +<div class="description"> + <p>Sets attributes or registers event listeners on element nodes.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + <th>Attributes</th> + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>node</code></td> + + + <td class="type"> + + +<span class="param-type">*</span> + + + + </td> + + + <td class="attributes"> + + + + + + </td> + + + + + <td class="description last"><p>The <code>Node</code> argument to set the attributes or add the event +listeners for. When the given <code>node</code> value is not a valid +DOM <code>Node</code>, the function returns and does nothing.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>key</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> +| + +<span class="param-type">Object.<string, *></span> + + + + </td> + + + <td class="attributes"> + + + + + + </td> + + + + + <td class="description last"><p>Specifies either the attribute or event handler name to use, +or an object containing multiple key, value pairs which are +each added to the node as either attribute or event handler, +depending on the respective value.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>val</code></td> + + + <td class="type"> + + +<span class="param-type">*</span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + + + </td> + + + + + <td class="description last"><p>Specifies the attribute value or event handler function to add. +If the <code>key</code> parameter is an <code>Object</code>, this parameter will be +ignored.</p> +<p>When <code>val</code> is of type function, it will be registered as event +handler on the given <code>node</code> with the <code>key</code> parameter being the +event name.</p> +<p>When <code>val</code> is of type object, it will be serialized as JSON and +added as attribute to the given <code>node</code>, using the given <code>key</code> +as attribute name.</p> +<p>When <code>val</code> is of any other type, it will be added as attribute +to the given <code>node</code> as-is, with the underlying <code>setAttribute()</code> +call implicitely turning it into a string.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line2331">line 2331</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + + + + + + + + + + + + + <h4 class="name" id="bindClassInstance"><span class="type-signature"></span>bindClassInstance<span class="signature">(node, inst)</span><span class="type-signature"> → {Class}</span></h4> + + + + + + +<div class="description"> + <p>Binds the given class instance ot the specified DOM <code>Node</code>.</p> +<p>This function uses the <code>dom.data()</code> facility to attach the +passed instance of a Class to a node. This is needed for +complex widget elements or similar where the corresponding +class instance responsible for the element must be retrieved +from DOM nodes obtained by <code>querySelector()</code> or similar means.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>node</code></td> + + + <td class="type"> + + +<span class="param-type">Node</span> + + + + </td> + + + + + + <td class="description last"><p>The DOM <code>Node</code> instance to bind the class to.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>inst</code></td> + + + <td class="type"> + + +<span class="param-type">Class</span> + + + + </td> + + + + + + <td class="description last"><p>The Class instance to bind to the node.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line2565">line 2565</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + +<h5>Throws:</h5> + + + +<dl> + <dt> + <div class="param-desc"> + <p>Throws a <code>TypeError</code> when the given instance argument isn't +a valid Class instance.</p> + </div> + </dt> + <dd></dd> + <dt> + <dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">TypeError</span> + + + </dd> + </dl> + </dt> + <dd></dd> +</dl> + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns the bound class instance.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">Class</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="callClassMethod"><span class="type-signature"></span>callClassMethod<span class="signature">(node, method, …params)</span><span class="type-signature"> → {*|null}</span></h4> + + + + + + +<div class="description"> + <p>Finds a bound class instance on the given node itself or the +first bound instance on its closest parent node and invokes +the specified method name on the found class instance.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + <th>Attributes</th> + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>node</code></td> + + + <td class="type"> + + +<span class="param-type">Node</span> + + + + </td> + + + <td class="attributes"> + + + + + + </td> + + + + + <td class="description last"><p>The DOM <code>Node</code> instance to start from.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>method</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + <td class="attributes"> + + + + + + </td> + + + + + <td class="description last"><p>The name of the method to invoke on the found class instance.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>params</code></td> + + + <td class="type"> + + +<span class="param-type">*</span> + + + + </td> + + + <td class="attributes"> + + + + + + <repeatable><br> + + </td> + + + + + <td class="description last"><p>Additional arguments to pass to the invoked method as-is.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line2619">line 2619</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns the return value of the invoked method if a class +instance and method has been found. Returns <code>null</code> if either +no bound class instance could be found, or if the found +instance didn't have the requested <code>method</code>.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">*</span> +| + +<span class="param-type">null</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="content"><span class="type-signature"></span>content<span class="signature">(node, children<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {Node|null}</span></h4> + + + + + + +<div class="description"> + <p>Replaces the content of the given node with the given children.</p> +<p>This function first removes any children of the given DOM +<code>Node</code> and then adds the given given children following the +rules outlined below.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + <th>Attributes</th> + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>node</code></td> + + + <td class="type"> + + +<span class="param-type">*</span> + + + + </td> + + + <td class="attributes"> + + + + + + </td> + + + + + <td class="description last"><p>The <code>Node</code> argument to replace the children of.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>children</code></td> + + + <td class="type"> + + +<span class="param-type">*</span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + + + </td> + + + + + <td class="description last"><p>The childrens to replace into the given node.</p> +<p>When <code>children</code> is an array, then each item of the array +will be either appended as child element or text node, +depending on whether the item is a DOM <code>Node</code> instance or +some other non-<code>null</code> value. Non-<code>Node</code>, non-<code>null</code> values +will be converted to strings first before being passed as +argument to <code>createTextNode()</code>.</p> +<p>When <code>children</code> is a function, it will be invoked with +the passed <code>node</code> argument as sole parameter and the <code>append</code> +function will be invoked again, with the given <code>node</code> argument +as first and the return value of the <code>children</code> function as +second parameter.</p> +<p>When <code>children</code> is is a DOM <code>Node</code> instance, it will be +appended to the given <code>node</code>.</p> +<p>When <code>children</code> is any other non-<code>null</code> value, it will be +converted to a string and appened to the <code>innerHTML</code> property +of the given <code>node</code>.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line2283">line 2283</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns the last children <code>Node</code> appended to the node or <code>null</code> +if either the <code>node</code> argument was no valid DOM <code>node</code> or if the +<code>children</code> was <code>null</code> or didn't result in further DOM nodes.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">Node</span> +| + +<span class="param-type">null</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="create"><span class="type-signature"></span>create<span class="signature">(html, attr<span class="signature-attributes">opt</span>, data<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {Node}</span></h4> + + + + + + +<div class="description"> + <p>Creates a new DOM <code>Node</code> from the given <code>html</code>, <code>attr</code> and +<code>data</code> parameters.</p> +<p>This function has multiple signatures, it can be either invoked +in the form <code>create(html[, attr[, data]])</code> or in the form +<code>create(html[, data])</code>. The used variant is determined from the +type of the second argument.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + <th>Attributes</th> + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>html</code></td> + + + <td class="type"> + + +<span class="param-type">*</span> + + + + </td> + + + <td class="attributes"> + + + + + + </td> + + + + + <td class="description last"><p>Describes the node to create.</p> +<p>When the value of <code>html</code> is of type array, a <code>DocumentFragment</code> +node is created and each item of the array is first converted +to a DOM <code>Node</code> by passing it through <code>create()</code> and then added +as child to the fragment.</p> +<p>When the value of <code>html</code> is a DOM <code>Node</code> instance, no new +element will be created but the node will be used as-is.</p> +<p>When the value of <code>html</code> is a string starting with <code><</code>, it will +be passed to <code>dom.parse()</code> and the resulting value is used.</p> +<p>When the value of <code>html</code> is any other string, it will be passed +to <code>document.createElement()</code> for creating a new DOM <code>Node</code> of +the given name.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>attr</code></td> + + + <td class="type"> + + +<span class="param-type">Object.<string, *></span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + + + </td> + + + + + <td class="description last"><p>Specifies an Object of key, value pairs to set as attributes +or event handlers on the created node. Refer to +<a href="LuCI.dom.html#attr"><code>dom.attr()</code></a> for details.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>data</code></td> + + + <td class="type"> + + +<span class="param-type">*</span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + + + </td> + + + + + <td class="description last"><p>Specifies children to append to the newly created element. +Refer to <a href="LuCI.dom.html#append"><code>dom.append()</code></a> for details.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line2409">line 2409</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + +<h5>Throws:</h5> + + + +<dl> + <dt> + <div class="param-desc"> + <p>Throws an <code>InvalidCharacterError</code> when the given <code>html</code> +argument contained malformed markup (such as not escaped +<code>&</code> characters in XHTML mode) or when the given node name +in <code>html</code> contains characters which are not legal in DOM +element names, such as spaces.</p> + </div> + </dt> + <dd></dd> + <dt> + <dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">InvalidCharacterError</span> + + + </dd> + </dl> + </dt> + <dd></dd> +</dl> + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns the newly created <code>Node</code>.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">Node</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="data"><span class="type-signature"></span>data<span class="signature">(node, key<span class="signature-attributes">opt</span>, val<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {*}</span></h4> + + + + + + +<div class="description"> + <p>Attaches or detaches arbitrary data to and from a DOM <code>Node</code>.</p> +<p>This function is useful to attach non-string values or runtime +data that is not serializable to DOM nodes. To decouple data +from the DOM, values are not added directly to nodes, but +inserted into a registry instead which is then referenced by a +string key stored as <code>data-idref</code> attribute in the node.</p> +<p>This function has multiple signatures and is sensitive to the +number of arguments passed to it.</p> +<ul> +<li><code>dom.data(node)</code> - +Fetches all data associated with the given node.</li> +<li><code>dom.data(node, key)</code> - +Fetches a specific key associated with the given node.</li> +<li><code>dom.data(node, key, val)</code> - +Sets a specific key to the given value associated with the +given node.</li> +<li><code>dom.data(node, null)</code> - +Clears any data associated with the node.</li> +<li><code>dom.data(node, key, null)</code> - +Clears the given key associated with the node.</li> +</ul> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + <th>Attributes</th> + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>node</code></td> + + + <td class="type"> + + +<span class="param-type">Node</span> + + + + </td> + + + <td class="attributes"> + + + + + + </td> + + + + + <td class="description last"><p>The DOM <code>Node</code> instance to set or retrieve the data for.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>key</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> +| + +<span class="param-type">null</span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + + + </td> + + + + + <td class="description last"><p>This is either a string specifying the key to retrieve, or +<code>null</code> to unset the entire node data.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>val</code></td> + + + <td class="type"> + + +<span class="param-type">*</span> +| + +<span class="param-type">null</span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + + + </td> + + + + + <td class="description last"><p>This is either a non-<code>null</code> value to set for a given key or +<code>null</code> to remove the given <code>key</code> from the specified node.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line2485">line 2485</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns the get or set value, or <code>null</code> when no value could +be found.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">*</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="elem"><span class="type-signature"></span>elem<span class="signature">(e)</span><span class="type-signature"> → {boolean}</span></h4> + + + + + + +<div class="description"> + <p>Tests whether the given argument is a valid DOM <code>Node</code>.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>e</code></td> + + + <td class="type"> + + +<span class="param-type">*</span> + + + + </td> + + + + + + <td class="description last"><p>The value to test.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line2079">line 2079</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns <code>true</code> if the value is a DOM <code>Node</code>, else <code>false</code>.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">boolean</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="findClassInstance"><span class="type-signature"></span>findClassInstance<span class="signature">(node)</span><span class="type-signature"> → {Class|null}</span></h4> + + + + + + +<div class="description"> + <p>Finds a bound class instance on the given node itself or the +first bound instance on its closest parent node.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>node</code></td> + + + <td class="type"> + + +<span class="param-type">Node</span> + + + + </td> + + + + + + <td class="description last"><p>The DOM <code>Node</code> instance to start from.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line2585">line 2585</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns the founds class instance if any or <code>null</code> if no bound +class could be found on the node itself or any of its parents.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">Class</span> +| + +<span class="param-type">null</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="isEmpty"><span class="type-signature"></span>isEmpty<span class="signature">(node, ignoreFn<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {boolean}</span></h4> + + + + + + +<div class="description"> + <p>Tests whether a given DOM <code>Node</code> instance is empty or appears +empty.</p> +<p>Any element child nodes which have the CSS class <code>hidden</code> set +or for which the optionally passed <code>ignoreFn</code> callback function +returns <code>false</code> are ignored.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + <th>Attributes</th> + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>node</code></td> + + + <td class="type"> + + +<span class="param-type">Node</span> + + + + </td> + + + <td class="attributes"> + + + + + + </td> + + + + + <td class="description last"><p>The DOM <code>Node</code> instance to test.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>ignoreFn</code></td> + + + <td class="type"> + + +<span class="param-type"><a href="LuCI.dom.html#~ignoreCallbackFn">LuCI.dom~ignoreCallbackFn</a></span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + + + </td> + + + + + <td class="description last"><p>Specifies an optional function which is invoked for each child +node to decide whether the child node should be ignored or not.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line2665">line 2665</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns <code>true</code> if the node does not have any children or if +any children node either has a <code>hidden</code> CSS class or a <code>false</code> +result when testing it using the given <code>ignoreFn</code>.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">boolean</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="matches"><span class="type-signature"></span>matches<span class="signature">(node, selector<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {boolean}</span></h4> + + + + + + +<div class="description"> + <p>Tests whether a given <code>Node</code> matches the given query selector.</p> +<p>This function is a convenience wrapper around the standard +<code>Node.matches("selector")</code> function with the added benefit that +the <code>node</code> argument may be a non-<code>Node</code> value, in which case +this function simply returns <code>false</code>.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + <th>Attributes</th> + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>node</code></td> + + + <td class="type"> + + +<span class="param-type">*</span> + + + + </td> + + + <td class="attributes"> + + + + + + </td> + + + + + <td class="description last"><p>The <code>Node</code> argument to test the selector against.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>selector</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + + + </td> + + + + + <td class="description last"><p>The query selector expression to test against the given node.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line2140">line 2140</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns <code>true</code> if the given node matches the specified selector +or <code>false</code> when the node argument is no valid DOM <code>Node</code> or the +selector didn't match.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">boolean</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="parent"><span class="type-signature"></span>parent<span class="signature">(node, selector<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {Node|null}</span></h4> + + + + + + +<div class="description"> + <p>Returns the closest parent node that matches the given query +selector expression.</p> +<p>This function is a convenience wrapper around the standard +<code>Node.closest("selector")</code> function with the added benefit that +the <code>node</code> argument may be a non-<code>Node</code> value, in which case +this function simply returns <code>null</code>.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + <th>Attributes</th> + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>node</code></td> + + + <td class="type"> + + +<span class="param-type">*</span> + + + + </td> + + + <td class="attributes"> + + + + + + </td> + + + + + <td class="description last"><p>The <code>Node</code> argument to find the closest parent for.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>selector</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + + + </td> + + + + + <td class="description last"><p>The query selector expression to test against each parent.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line2167">line 2167</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns the closest parent node matching the selector or +<code>null</code> when the node argument is no valid DOM <code>Node</code> or the +selector didn't match any parent.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">Node</span> +| + +<span class="param-type">null</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="parse"><span class="type-signature"></span>parse<span class="signature">(s)</span><span class="type-signature"> → {Node}</span></h4> + + + + + + +<div class="description"> + <p>Parses a given string as HTML and returns the first child node.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>s</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + + + + <td class="description last"><p>A string containing an HTML fragment to parse. Note that only +the first result of the resulting structure is returned, so an +input value of <code><div>foo</div> <div>bar</div></code> will only return +the first <code>div</code> element node.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line2098">line 2098</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns the first DOM <code>Node</code> extracted from the HTML fragment or +<code>null</code> on parsing failures or if no element could be found.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">Node</span> + + + </dd> +</dl> + + + + + + + + + + + + <h3 class="subsection-title">Type Definitions</h3> + + + + + + + + <h4 class="name" id="~ignoreCallbackFn"><span class="type-signature"></span>ignoreCallbackFn<span class="signature">(node)</span><span class="type-signature"> → {boolean}</span></h4> + + + + + + +<div class="description"> + <p>The ignore callback function is invoked by <code>isEmpty()</code> for each +child node to decide whether to ignore a child node or not.</p> +<p>When this function returns <code>false</code>, the node passed to it is +ignored, else not.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>node</code></td> + + + <td class="type"> + + +<span class="param-type">Node</span> + + + + </td> + + + + + + <td class="description last"><p>The child node to test.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line2628">line 2628</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Boolean indicating whether to ignore the node or not.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">boolean</span> + + + </dd> +</dl> + + + + + + + + + + + +</article> + +</section> + + + + +</div> + +<nav> + <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="LuCI.html">LuCI</a></li><li><a href="LuCI.Class.html">Class</a></li><li><a href="LuCI.dom.html">dom</a></li><li><a href="LuCI.fs.html">fs</a></li><li><a href="LuCI.Headers.html">Headers</a></li><li><a href="LuCI.Network.html">Network</a></li><li><a href="LuCI.Network.Device.html">Device</a></li><li><a href="LuCI.Network.Hosts.html">Hosts</a></li><li><a href="LuCI.Network.Protocol.html">Protocol</a></li><li><a href="LuCI.Network.WifiDevice.html">WifiDevice</a></li><li><a href="LuCI.Network.WifiNetwork.html">WifiNetwork</a></li><li><a href="LuCI.Poll.html">Poll</a></li><li><a href="LuCI.Request.html">Request</a></li><li><a href="LuCI.Request.poll.html">poll</a></li><li><a href="LuCI.Response.html">Response</a></li><li><a href="LuCI.rpc.html">rpc</a></li><li><a href="LuCI.uci.html">uci</a></li><li><a href="LuCI.view.html">view</a></li><li><a href="LuCI.XHR.html">XHR</a></li></ul> +</nav> + +<br class="clear"> + +<footer> + Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a> on Tue Nov 05 2019 09:33:05 GMT+0100 (Central European Standard Time) +</footer> + +<script> prettyPrint(); </script> +<script src="scripts/linenumber.js"> </script> +</body> +</html>
\ No newline at end of file diff --git a/documentation/jsapi/LuCI.fs.html b/documentation/jsapi/LuCI.fs.html new file mode 100644 index 000000000..abae649cb --- /dev/null +++ b/documentation/jsapi/LuCI.fs.html @@ -0,0 +1,2143 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="utf-8"> + <title>JSDoc: Class: fs</title> + + <script src="scripts/prettify/prettify.js"> </script> + <script src="scripts/prettify/lang-css.js"> </script> + <!--[if lt IE 9]> + <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script> + <![endif]--> + <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css"> + <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css"> +</head> + +<body> + +<div id="main"> + + <h1 class="page-title">Class: fs</h1> + + + + + + +<section> + +<header> + + <h2><span class="attribs"><span class="type-signature"></span></span> + <span class="ancestors"><a href="LuCI.html">LuCI</a>.</span>fs</h2> + + <div class="class-description"><p>Provides high level utilities to wrap file system related RPC calls. +To import the class in views, use <code>'require fs'</code>, to import it in +external JavaScript, use <code>L.require("fs").then(...)</code>.</p></div> + + +</header> + +<article> + <div class="container-overview"> + + + + + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="fs.js.html">fs.js</a>, <a href="fs.js.html#line111">line 111</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + + + + + + + + </div> + + + + + + + + + + + + + + + + + <h3 class="subsection-title">Methods</h3> + + + + + + + + <h4 class="name" id="exec"><span class="type-signature"></span>exec<span class="signature">(command, params<span class="signature-attributes">opt</span>, env<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {Promise.<<a href="LuCI.fs.html#.FileExecResult">LuCI.fs.FileExecResult</a>>}</span></h4> + + + + + + +<div class="description"> + <p>Execute the specified command, optionally passing params and +environment variables.</p> +<p>Note: The <code>command</code> must be either the path to an executable, +or a basename without arguments in which case it will be searched +in $PATH. If specified, the values given in <code>params</code> will be passed +as arguments to the command.</p> +<p>The key/value pairs in the optional <code>env</code> table are translated to +<code>setenv()</code> calls prior to running the command.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + <th>Attributes</th> + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>command</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + <td class="attributes"> + + + + + + </td> + + + + + <td class="description last"><p>The command to invoke.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>params</code></td> + + + <td class="type"> + + +<span class="param-type">Array.<string></span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + + + </td> + + + + + <td class="description last"><p>The arguments to pass to the command.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>env</code></td> + + + <td class="type"> + + +<span class="param-type">Object.<string, string></span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + + + </td> + + + + + <td class="description last"><p>Environment variables to set.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="fs.js.html">fs.js</a>, <a href="fs.js.html#line232">line 232</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns a promise resolving to an object describing the execution +results or rejecting with an error stating the failure reason.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">Promise.<<a href="LuCI.fs.html#.FileExecResult">LuCI.fs.FileExecResult</a>></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="lines"><span class="type-signature"></span>lines<span class="signature">(path)</span><span class="type-signature"> → {Promise.<Array.<string>>}</span></h4> + + + + + + +<div class="description"> + <p>Read the contents of the given file, split it into lines, trim +leading and trailing white space of each line and return the +resulting array.</p> +<p>This function is guaranteed to not reject its promises, on failure, +an empty array will be returned.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>path</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + + + + <td class="description last"><p>The file path to read.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="fs.js.html">fs.js</a>, <a href="fs.js.html#line281">line 281</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns a promise resolving to an array containing the stripped lines +of the given file or <code>[]</code> on failure.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">Promise.<Array.<string>></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="list"><span class="type-signature"></span>list<span class="signature">(path)</span><span class="type-signature"> → {Promise.<Array.<<a href="LuCI.fs.html#.FileStatEntry">LuCI.fs.FileStatEntry</a>>>}</span></h4> + + + + + + +<div class="description"> + <p>Obtains a listing of the specified directory.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>path</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + + + + <td class="description last"><p>The directory path to list.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="fs.js.html">fs.js</a>, <a href="fs.js.html#line132">line 132</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns a promise resolving to an array of stat detail objects or +rejecting with an error stating the failure reason.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">Promise.<Array.<<a href="LuCI.fs.html#.FileStatEntry">LuCI.fs.FileStatEntry</a>>></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="read"><span class="type-signature"></span>read<span class="signature">(path)</span><span class="type-signature"> → {Promise.<string>}</span></h4> + + + + + + +<div class="description"> + <p>Read the contents of the given file and return them. +Note: this function is unsuitable for obtaining binary data.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>path</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + + + + <td class="description last"><p>The file path to read.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="fs.js.html">fs.js</a>, <a href="fs.js.html#line161">line 161</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns a promise resolving to a string containing the file contents or +rejecting with an error stating the failure reason.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">Promise.<string></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="remove"><span class="type-signature"></span>remove<span class="signature">(The)</span><span class="type-signature"> → {Promise.<number>}</span></h4> + + + + + + +<div class="description"> + <p>Unlink the given file.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>The</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + + + + <td class="description last"><p>file path to remove.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="fs.js.html">fs.js</a>, <a href="fs.js.html#line203">line 203</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns a promise resolving to <code>0</code> or rejecting with an error stating +the failure reason.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">Promise.<number></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="stat"><span class="type-signature"></span>stat<span class="signature">(path)</span><span class="type-signature"> → {Promise.<<a href="LuCI.fs.html#.FileStatEntry">LuCI.fs.FileStatEntry</a>>}</span></h4> + + + + + + +<div class="description"> + <p>Return file stat information on the specified path.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>path</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + + + + <td class="description last"><p>The filesystem path to stat.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="fs.js.html">fs.js</a>, <a href="fs.js.html#line146">line 146</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns a promise resolving to a stat detail object or +rejecting with an error stating the failure reason.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">Promise.<<a href="LuCI.fs.html#.FileStatEntry">LuCI.fs.FileStatEntry</a>></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="trimmed"><span class="type-signature"></span>trimmed<span class="signature">(path)</span><span class="type-signature"> → {Promise.<string>}</span></h4> + + + + + + +<div class="description"> + <p>Read the contents of the given file, trim leading and trailing white +space and return the trimmed result. In case of errors, return an empty +string instead.</p> +<p>Note: this function is useful to read single-value files in <code>/sys</code> +or <code>/proc</code>.</p> +<p>This function is guaranteed to not reject its promises, on failure, +an empty string will be returned.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>path</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + + + + <td class="description last"><p>The file path to read.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="fs.js.html">fs.js</a>, <a href="fs.js.html#line260">line 260</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns a promise resolving to the file contents or the empty string +on failure.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">Promise.<string></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="write"><span class="type-signature"></span>write<span class="signature">(path, data<span class="signature-attributes">opt</span>, mode<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {Promise.<number>}</span></h4> + + + + + + +<div class="description"> + <p>Write the given data to the specified file path. +If the specified file path does not exist, it will be created, given +sufficient permissions.</p> +<p>Note: <code>data</code> will be converted to a string using <code>String(data)</code> or to +<code>''</code> when it is <code>null</code>.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + <th>Attributes</th> + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>path</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + <td class="attributes"> + + + + + + </td> + + + + + <td class="description last"><p>The file path to write to.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>data</code></td> + + + <td class="type"> + + +<span class="param-type">*</span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + + + </td> + + + + + <td class="description last"><p>The file data to write. If it is null, it will be set to an empty +string.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>mode</code></td> + + + <td class="type"> + + +<span class="param-type">number</span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + + + </td> + + + + + <td class="description last"><p>The permissions to use on file creation. Default is 420 (0644).</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="fs.js.html">fs.js</a>, <a href="fs.js.html#line187">line 187</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns a promise resolving to <code>0</code> or rejecting with an error stating +the failure reason.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">Promise.<number></span> + + + </dd> +</dl> + + + + + + + + + + + + <h3 class="subsection-title">Type Definitions</h3> + + + +<h4 class="name" id=".FileExecResult">FileExecResult</h4> + + + + + + + <h5>Type:</h5> + <ul> + <li> + +<span class="param-type">Object</span> + + + </li> + </ul> + + + + + + <h5 class="subsection-title">Properties:</h5> + + + +<table class="props"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + <th>Attributes</th> + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>code</code></td> + + + <td class="type"> + + +<span class="param-type">number</span> + + + + </td> + + + <td class="attributes"> + + + + </td> + + + + + <td class="description last"><p>The exit code of the invoked command</p></td> + </tr> + + + + <tr> + + <td class="name"><code>stdout</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + </td> + + + + + <td class="description last"><p>The stdout produced by the command, if any</p></td> + </tr> + + + + <tr> + + <td class="name"><code>stderr</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + </td> + + + + + <td class="description last"><p>The stderr produced by the command, if any</p></td> + </tr> + + + </tbody> +</table> + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="fs.js.html">fs.js</a>, <a href="fs.js.html#line20">line 20</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + +<h4 class="name" id=".FileStatEntry">FileStatEntry</h4> + + + + + + + <h5>Type:</h5> + <ul> + <li> + +<span class="param-type">Object</span> + + + </li> + </ul> + + + + + + <h5 class="subsection-title">Properties:</h5> + + + +<table class="props"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>name</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + + + + <td class="description last"><p>Name of the directory entry</p></td> + </tr> + + + + <tr> + + <td class="name"><code>type</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + + + + <td class="description last"><p>Type of the entry, one of <code>block</code>, <code>char</code>, <code>directory</code>, <code>fifo</code>, <code>symlink</code>, <code>file</code>, <code>socket</code> or <code>unknown</code></p></td> + </tr> + + + + <tr> + + <td class="name"><code>size</code></td> + + + <td class="type"> + + +<span class="param-type">number</span> + + + + </td> + + + + + + <td class="description last"><p>Size in bytes</p></td> + </tr> + + + + <tr> + + <td class="name"><code>mode</code></td> + + + <td class="type"> + + +<span class="param-type">number</span> + + + + </td> + + + + + + <td class="description last"><p>Access permissions</p></td> + </tr> + + + + <tr> + + <td class="name"><code>atime</code></td> + + + <td class="type"> + + +<span class="param-type">number</span> + + + + </td> + + + + + + <td class="description last"><p>Last access time in seconds since epoch</p></td> + </tr> + + + + <tr> + + <td class="name"><code>mtime</code></td> + + + <td class="type"> + + +<span class="param-type">number</span> + + + + </td> + + + + + + <td class="description last"><p>Last modification time in seconds since epoch</p></td> + </tr> + + + + <tr> + + <td class="name"><code>ctime</code></td> + + + <td class="type"> + + +<span class="param-type">number</span> + + + + </td> + + + + + + <td class="description last"><p>Last change time in seconds since epoch</p></td> + </tr> + + + + <tr> + + <td class="name"><code>inode</code></td> + + + <td class="type"> + + +<span class="param-type">number</span> + + + + </td> + + + + + + <td class="description last"><p>Inode number</p></td> + </tr> + + + + <tr> + + <td class="name"><code>uid</code></td> + + + <td class="type"> + + +<span class="param-type">number</span> + + + + </td> + + + + + + <td class="description last"><p>Numeric owner id</p></td> + </tr> + + + + <tr> + + <td class="name"><code>gid</code></td> + + + <td class="type"> + + +<span class="param-type">number</span> + + + + </td> + + + + + + <td class="description last"><p>Numeric group id</p></td> + </tr> + + + </tbody> +</table> + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="fs.js.html">fs.js</a>, <a href="fs.js.html#line4">line 4</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + +</article> + +</section> + + + + +</div> + +<nav> + <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="LuCI.html">LuCI</a></li><li><a href="LuCI.Class.html">Class</a></li><li><a href="LuCI.dom.html">dom</a></li><li><a href="LuCI.fs.html">fs</a></li><li><a href="LuCI.Headers.html">Headers</a></li><li><a href="LuCI.Network.html">Network</a></li><li><a href="LuCI.Network.Device.html">Device</a></li><li><a href="LuCI.Network.Hosts.html">Hosts</a></li><li><a href="LuCI.Network.Protocol.html">Protocol</a></li><li><a href="LuCI.Network.WifiDevice.html">WifiDevice</a></li><li><a href="LuCI.Network.WifiNetwork.html">WifiNetwork</a></li><li><a href="LuCI.Poll.html">Poll</a></li><li><a href="LuCI.Request.html">Request</a></li><li><a href="LuCI.Request.poll.html">poll</a></li><li><a href="LuCI.Response.html">Response</a></li><li><a href="LuCI.rpc.html">rpc</a></li><li><a href="LuCI.uci.html">uci</a></li><li><a href="LuCI.view.html">view</a></li><li><a href="LuCI.XHR.html">XHR</a></li></ul> +</nav> + +<br class="clear"> + +<footer> + Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a> on Tue Nov 05 2019 09:33:05 GMT+0100 (Central European Standard Time) +</footer> + +<script> prettyPrint(); </script> +<script src="scripts/linenumber.js"> </script> +</body> +</html>
\ No newline at end of file diff --git a/documentation/jsapi/LuCI.html b/documentation/jsapi/LuCI.html new file mode 100644 index 000000000..44f899b35 --- /dev/null +++ b/documentation/jsapi/LuCI.html @@ -0,0 +1,4436 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="utf-8"> + <title>JSDoc: Class: LuCI</title> + + <script src="scripts/prettify/prettify.js"> </script> + <script src="scripts/prettify/lang-css.js"> </script> + <!--[if lt IE 9]> + <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script> + <![endif]--> + <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css"> + <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css"> +</head> + +<body> + +<div id="main"> + + <h1 class="page-title">Class: LuCI</h1> + + + + + + +<section> + +<header> + + <h2><span class="attribs"><span class="type-signature"></span></span>LuCI<span class="signature">(env)</span><span class="type-signature"></span></h2> + + <div class="class-description"><p>This is the LuCI base class. It is automatically instantiated and +accessible using the global <code>L</code> variable.</p></div> + + +</header> + +<article> + <div class="container-overview"> + + + + + <h2>Constructor</h2> + + + + <h4 class="name" id="LuCI"><span class="type-signature"></span>new LuCI<span class="signature">(env)</span><span class="type-signature"></span></h4> + + + + + + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>env</code></td> + + + <td class="type"> + + +<span class="param-type">Object</span> + + + + </td> + + + + + + <td class="description last"><p>The environment settings to use for the LuCI runtime.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line1">line 1</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + + + + + + + + </div> + + + + + + + <h3 class="subsection-title">Classes</h3> + + <dl> + <dt><a href="LuCI.Class.html">Class</a></dt> + <dd></dd> + + <dt><a href="LuCI.dom.html">dom</a></dt> + <dd></dd> + + <dt><a href="LuCI.fs.html">fs</a></dt> + <dd></dd> + + <dt><a href="LuCI.Headers.html">Headers</a></dt> + <dd></dd> + + <dt><a href="LuCI.Network.html">Network</a></dt> + <dd></dd> + + <dt><a href="LuCI.Poll.html">Poll</a></dt> + <dd></dd> + + <dt><a href="LuCI.Request.html">Request</a></dt> + <dd></dd> + + <dt><a href="LuCI.Response.html">Response</a></dt> + <dd></dd> + + <dt><a href="LuCI.rpc.html">rpc</a></dt> + <dd></dd> + + <dt><a href="LuCI.uci.html">uci</a></dt> + <dd></dd> + + <dt><a href="LuCI.view.html">view</a></dt> + <dd></dd> + + <dt><a href="LuCI.XHR.html">XHR</a></dt> + <dd></dd> + </dl> + + + + + + + + + + <h3 class="subsection-title">Members</h3> + + + +<h4 class="name" id="env"><span class="type-signature"></span>env<span class="type-signature"></span></h4> + + + + +<div class="description"> + <p>The <code>env</code> object holds environment settings used by LuCI, such +as request timeouts, base URLs etc.</p> +</div> + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line1657">line 1657</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + <h3 class="subsection-title">Methods</h3> + + + + + + + + <h4 class="name" id="bind"><span class="type-signature"></span>bind<span class="signature">(fn, self, …args<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {function}</span></h4> + + + + + + +<div class="description"> + <p>Return a bound function using the given <code>self</code> as <code>this</code> context +and any further arguments as parameters to the bound function.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + <th>Attributes</th> + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>fn</code></td> + + + <td class="type"> + + +<span class="param-type">function</span> + + + + </td> + + + <td class="attributes"> + + + + + + </td> + + + + + <td class="description last"><p>The function to bind.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>self</code></td> + + + <td class="type"> + + +<span class="param-type">*</span> + + + + </td> + + + <td class="attributes"> + + + + + + </td> + + + + + <td class="description last"><p>The value to bind as <code>this</code> context to the specified function.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>args</code></td> + + + <td class="type"> + + +<span class="param-type">*</span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + + + <repeatable><br> + + </td> + + + + + <td class="description last"><p>Zero or more variable arguments which are bound to the function +as parameters.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line1340">line 1340</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns the bound function.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">function</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="error"><span class="type-signature"></span>error<span class="signature">(type<span class="signature-attributes">opt</span>, fmt<span class="signature-attributes">opt</span>, …args<span class="signature-attributes">opt</span>)</span><span class="type-signature"></span></h4> + + + + + + +<div class="description"> + <p>A wrapper around <a href="LuCI.html#raise"><code>raise()</code></a> which also renders +the error either as modal overlay when <code>ui.js</code> is already loaed +or directly into the view body.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + <th>Attributes</th> + + + + <th>Default</th> + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>type</code></td> + + + <td class="type"> + + +<span class="param-type">Error</span> +| + +<span class="param-type">string</span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + + + </td> + + + + <td class="default"> + + Error + + </td> + + + <td class="description last"><p>Either a string specifying the type of the error to throw or an +existing <code>Error</code> instance to copy.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>fmt</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + + + </td> + + + + <td class="default"> + + Unspecified error + + </td> + + + <td class="description last"><p>A format string which is used to form the error message, together +with all subsequent optional arguments.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>args</code></td> + + + <td class="type"> + + +<span class="param-type">*</span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + + + <repeatable><br> + + </td> + + + + <td class="default"> + + </td> + + + <td class="description last"><p>Zero or more variable arguments to the supplied format string.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line1300">line 1300</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + +<h5>Throws:</h5> + + + +<dl> + <dt> + <div class="param-desc"> + <p>Throws the created error object with the captured stack trace +appended to the message and the type set to the given type +argument or copied from the given error instance.</p> + </div> + </dt> + <dd></dd> + <dt> + <dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">Error</span> + + + </dd> + </dl> + </dt> + <dd></dd> +</dl> + + + + + + + + + + + + + + + + + <h4 class="name" id="get"><span class="type-signature"></span>get<span class="signature">(url, args<span class="signature-attributes">opt</span>, cb)</span><span class="type-signature"> → {Promise.<null>}</span></h4> + + + + + + +<div class="description"> + <p>Issues a GET request to the given url and invokes the specified +callback function. The function is a wrapper around +<a href="LuCI.Request.html#request"><code>Request.request()</code></a>.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + <th>Attributes</th> + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>url</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + <td class="attributes"> + + + + + + </td> + + + + + <td class="description last"><p>The URL to request.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>args</code></td> + + + <td class="type"> + + +<span class="param-type">Object.<string, string></span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + + + </td> + + + + + <td class="description last"><p>Additional query string arguments to append to the URL.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>cb</code></td> + + + <td class="type"> + + +<span class="param-type"><a href="LuCI.html#.requestCallbackFn">LuCI.requestCallbackFn</a></span> + + + + </td> + + + <td class="attributes"> + + + + + + </td> + + + + + <td class="description last"><p>The callback function to invoke when the request finishes.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + <dt class="important tag-deprecated">Deprecated:</dt><dd class="yes-def tag-deprecated"><ul class="dummy"><li>Yes</li></ul></dd> + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line1918">line 1918</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns a promise resolving to <code>null</code> when concluded.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">Promise.<null></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="halt"><span class="type-signature"></span>halt<span class="signature">()</span><span class="type-signature"> → {boolean}</span></h4> + + + + + + +<div class="description"> + <p>Deprecated wrapper around <code>Poll.stop()</code>.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + <dt class="important tag-deprecated">Deprecated:</dt><dd class="yes-def tag-deprecated"><ul class="dummy"><li>Yes</li></ul></dd> + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line2040">line 2040</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns <code>true</code> when the polling loop has been stopped or <code>false</code> +when it didn't run to begin with.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">boolean</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="hasSystemFeature"><span class="type-signature"></span>hasSystemFeature<span class="signature">(feature, subfeature<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {boolean|null}</span></h4> + + + + + + +<div class="description"> + <p>Test whether a particular system feature is available, such as +hostapd SAE support or an installed firewall. The features are +queried once at the beginning of the LuCI session and cached in +<code>SessionStorage</code> throughout the lifetime of the associated tab or +browser window.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + <th>Attributes</th> + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>feature</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + <td class="attributes"> + + + + + + </td> + + + + + <td class="description last"><p>The feature to test. For detailed list of known feature flags, +see <code>/modules/luci-base/root/usr/libexec/rpcd/luci</code>.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>subfeature</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + + + </td> + + + + + <td class="description last"><p>Some feature classes like <code>hostapd</code> provide sub-feature flags, +such as <code>sae</code> or <code>11w</code> support. The <code>subfeature</code> argument can +be used to query these.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line1574">line 1574</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Return <code>true</code> if the queried feature (and sub-feature) is available +or <code>false</code> if the requested feature isn't present or known. +Return <code>null</code> when a sub-feature was queried for a feature which +has no sub-features.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">boolean</span> +| + +<span class="param-type">null</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="isObject"><span class="type-signature"></span>isObject<span class="signature">(val<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {boolean}</span></h4> + + + + + + +<div class="description"> + <p>Tests whether the passed argument is a JavaScript object. +This function is meant to be an object counterpart to the +standard <code>Array.isArray()</code> function.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + <th>Attributes</th> + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>val</code></td> + + + <td class="type"> + + +<span class="param-type">*</span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + + + </td> + + + + + <td class="description last"><p>The value to test</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line1765">line 1765</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns <code>true</code> if the given value is of type object and +not <code>null</code>, else returns <code>false</code>.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">boolean</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="location"><span class="type-signature"></span>location<span class="signature">()</span><span class="type-signature"> → {string}</span></h4> + + + + + + +<div class="description"> + <p>Return the complete URL path to the current view.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line1745">line 1745</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns the URL path to the current view.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">string</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="path"><span class="type-signature"></span>path<span class="signature">(prefix<span class="signature-attributes">opt</span>, parts<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {string}</span></h4> + + + + + + +<div class="description"> + <p>Construct a relative URL path from the given prefix and parts. +The resulting URL is guaranteed to only contain the characters +<code>a-z</code>, <code>A-Z</code>, <code>0-9</code>, <code>_</code>, <code>.</code>, <code>%</code>, <code>,</code>, <code>;</code>, and <code>-</code> as well +as <code>/</code> for the path separator.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + <th>Attributes</th> + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>prefix</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + + + </td> + + + + + <td class="description last"><p>The prefix to join the given parts with. If the <code>prefix</code> is +omitted, it defaults to an empty string.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>parts</code></td> + + + <td class="type"> + + +<span class="param-type">Array.<string></span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + + + </td> + + + + + <td class="description last"><p>An array of parts to join into an URL path. Parts may contain +slashes and any of the other characters mentioned above.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line1679">line 1679</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Return the joined URL path.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">string</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="poll"><span class="type-signature"></span>poll<span class="signature">(interval, url, args<span class="signature-attributes">opt</span>, cb, post<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {function}</span></h4> + + + + + + +<div class="description"> + <p>Register a polling HTTP request that invokes the specified +callback function. The function is a wrapper around +<a href="LuCI.Request.poll.html#add"><code>Request.poll.add()</code></a>.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + <th>Attributes</th> + + + + <th>Default</th> + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>interval</code></td> + + + <td class="type"> + + +<span class="param-type">number</span> + + + + </td> + + + <td class="attributes"> + + + + + + </td> + + + + <td class="default"> + + </td> + + + <td class="description last"><p>The poll interval to use. If set to a value less than or equal +to <code>0</code>, it will default to the global poll interval configured +in <code>LuCI.env.pollinterval</code>.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>url</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + <td class="attributes"> + + + + + + </td> + + + + <td class="default"> + + </td> + + + <td class="description last"><p>The URL to request.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>args</code></td> + + + <td class="type"> + + +<span class="param-type">Object.<string, string></span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + + + </td> + + + + <td class="default"> + + </td> + + + <td class="description last"><p>Specifies additional arguments for the request. For GET requests, +the arguments are appended to the URL as query string, for POST +requests, they'll be added to the request body.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>cb</code></td> + + + <td class="type"> + + +<span class="param-type"><a href="LuCI.html#.requestCallbackFn">LuCI.requestCallbackFn</a></span> + + + + </td> + + + <td class="attributes"> + + + + + + </td> + + + + <td class="default"> + + </td> + + + <td class="description last"><p>The callback function to invoke whenever a request finishes.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>post</code></td> + + + <td class="type"> + + +<span class="param-type">boolean</span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + + + </td> + + + + <td class="default"> + + false + + </td> + + + <td class="description last"><p>When set to <code>false</code> or not specified, poll requests will be made +using the GET method. When set to <code>true</code>, POST requests will be +issued. In case of POST requests, the request body will contain +an argument <code>token</code> with the current value of <code>LuCI.env.token</code> by +default, regardless of the parameters specified with <code>args</code>.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + <dt class="important tag-deprecated">Deprecated:</dt><dd class="yes-def tag-deprecated"><ul class="dummy"><li>Yes</li></ul></dd> + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line1988">line 1988</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns the internally created function that has been passed to +<a href="LuCI.Request.poll.html#add"><code>Request.poll.add()</code></a>. This value can +be passed to <code>Poll.remove()</code> to remove the +polling request.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">function</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="post"><span class="type-signature"></span>post<span class="signature">(url, args<span class="signature-attributes">opt</span>, cb)</span><span class="type-signature"> → {Promise.<null>}</span></h4> + + + + + + +<div class="description"> + <p>Issues a POST request to the given url and invokes the specified +callback function. The function is a wrapper around +<a href="LuCI.Request.html#request"><code>Request.request()</code></a>. The request is +sent using <code>application/x-www-form-urlencoded</code> encoding and will +contain a field <code>token</code> with the current value of <code>LuCI.env.token</code> +by default.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + <th>Attributes</th> + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>url</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + <td class="attributes"> + + + + + + </td> + + + + + <td class="description last"><p>The URL to request.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>args</code></td> + + + <td class="type"> + + +<span class="param-type">Object.<string, string></span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + + + </td> + + + + + <td class="description last"><p>Additional post arguments to append to the request body.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>cb</code></td> + + + <td class="type"> + + +<span class="param-type"><a href="LuCI.html#.requestCallbackFn">LuCI.requestCallbackFn</a></span> + + + + </td> + + + <td class="attributes"> + + + + + + </td> + + + + + <td class="description last"><p>The callback function to invoke when the request finishes.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + <dt class="important tag-deprecated">Deprecated:</dt><dd class="yes-def tag-deprecated"><ul class="dummy"><li>Yes</li></ul></dd> + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line1946">line 1946</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns a promise resolving to <code>null</code> when concluded.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">Promise.<null></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="raise"><span class="type-signature"></span>raise<span class="signature">(type<span class="signature-attributes">opt</span>, fmt<span class="signature-attributes">opt</span>, …args<span class="signature-attributes">opt</span>)</span><span class="type-signature"></span></h4> + + + + + + +<div class="description"> + <p>Captures the current stack trace and throws an error of the +specified type as a new exception. Also logs the exception as +error to the debug console if it is available.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + <th>Attributes</th> + + + + <th>Default</th> + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>type</code></td> + + + <td class="type"> + + +<span class="param-type">Error</span> +| + +<span class="param-type">string</span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + + + </td> + + + + <td class="default"> + + Error + + </td> + + + <td class="description last"><p>Either a string specifying the type of the error to throw or an +existing <code>Error</code> instance to copy.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>fmt</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + + + </td> + + + + <td class="default"> + + Unspecified error + + </td> + + + <td class="description last"><p>A format string which is used to form the error message, together +with all subsequent optional arguments.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>args</code></td> + + + <td class="type"> + + +<span class="param-type">*</span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + + + <repeatable><br> + + </td> + + + + <td class="default"> + + </td> + + + <td class="description last"><p>Zero or more variable arguments to the supplied format string.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line1234">line 1234</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + +<h5>Throws:</h5> + + + +<dl> + <dt> + <div class="param-desc"> + <p>Throws the created error object with the captured stack trace +appended to the message and the type set to the given type +argument or copied from the given error instance.</p> + </div> + </dt> + <dd></dd> + <dt> + <dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">Error</span> + + + </dd> + </dl> + </dt> + <dd></dd> +</dl> + + + + + + + + + + + + + + + + + <h4 class="name" id="require"><span class="type-signature"></span>require<span class="signature">(name)</span><span class="type-signature"> → {Promise.<LuCI#Class>}</span></h4> + + + + + + +<div class="description"> + <p>Load an additional LuCI JavaScript class and its dependencies, +instantiate it and return the resulting class instance. Each +class is only loaded once. Subsequent attempts to load the same +class will return the already instantiated class.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>name</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + + + + <td class="description last"><p>The name of the class to load in dotted notation. Dots will +be replaced by spaces and joined with the runtime-determined +base URL of LuCI.js to form an absolute URL to load the class +file from.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line1379">line 1379</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + +<h5>Throws:</h5> +<ul> + <li> + +<dl> + <dt> + <div class="param-desc"> + <p>Throws a <code>DependencyError</code> when the class to load includes +circular dependencies.</p> + </div> + </dt> + <dd></dd> + <dt> + <dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">DependencyError</span> + + + </dd> + </dl> + </dt> + <dd></dd> +</dl> + +</li> + + <li> + +<dl> + <dt> + <div class="param-desc"> + <p>Throws <code>NetworkError</code> when the underlying <a href="LuCI.Request.html"><code>LuCI.Request</code></a> +call failed.</p> + </div> + </dt> + <dd></dd> + <dt> + <dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">NetworkError</span> + + + </dd> + </dl> + </dt> + <dd></dd> +</dl> + +</li> + + <li> + +<dl> + <dt> + <div class="param-desc"> + <p>Throws <code>SyntaxError</code> when the loaded class file code cannot +be interpreted by <code>eval</code>.</p> + </div> + </dt> + <dd></dd> + <dt> + <dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">SyntaxError</span> + + + </dd> + </dl> + </dt> + <dd></dd> +</dl> + +</li> + + <li> + +<dl> + <dt> + <div class="param-desc"> + <p>Throws <code>TypeError</code> when the class file could be loaded and +interpreted, but when invoking its code did not yield a valid +class instance.</p> + </div> + </dt> + <dd></dd> + <dt> + <dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">TypeError</span> + + + </dd> + </dl> + </dt> + <dd></dd> +</dl> + +</li> + </ul> + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns the instantiated class.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">Promise.<LuCI#Class></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="resolveDefault"><span class="type-signature"></span>resolveDefault<span class="signature">(value, defvalue)</span><span class="type-signature"> → {Promise.<*>}</span></h4> + + + + + + +<div class="description"> + <p>Returns a promise resolving with either the given value or or with +the given default in case the input value is a rejecting promise.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>value</code></td> + + + <td class="type"> + + +<span class="param-type">*</span> + + + + </td> + + + + + + <td class="description last"><p>The value to resolve the promise with.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>defvalue</code></td> + + + <td class="type"> + + +<span class="param-type">*</span> + + + + </td> + + + + + + <td class="description last"><p>The default value to resolve the promise with in case the given +input value is a rejecting promise.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line1873">line 1873</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns a new promise resolving either to the given input value or +to the given default value on error.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">Promise.<*></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="resource"><span class="type-signature"></span>resource<span class="signature">(parts<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {string}</span></h4> + + + + + + +<div class="description"> + <p>Construct an URL path relative to the global static resource path +of the LuCI ui (usually <code>/luci-static/resources</code>).</p> +<p>The resulting URL is guaranteed to only contain the characters +<code>a-z</code>, <code>A-Z</code>, <code>0-9</code>, <code>_</code>, <code>.</code>, <code>%</code>, <code>,</code>, <code>;</code>, and <code>-</code> as well +as <code>/</code> for the path separator.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + <th>Attributes</th> + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>parts</code></td> + + + <td class="type"> + + +<span class="param-type">Array.<string></span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + + + </td> + + + + + <td class="description last"><p>An array of parts to join into an URL path. Parts may contain +slashes and any of the other characters mentioned above.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line1732">line 1732</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns the resulting URL path.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">string</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="run"><span class="type-signature"></span>run<span class="signature">()</span><span class="type-signature"> → {boolean}</span></h4> + + + + + + +<div class="description"> + <p>Deprecated wrapper around <code>Poll.start()</code>.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + <dt class="important tag-deprecated">Deprecated:</dt><dd class="yes-def tag-deprecated"><ul class="dummy"><li>Yes</li></ul></dd> + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line2053">line 2053</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns <code>true</code> when the polling loop has been started or <code>false</code> +when it was already running.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">boolean</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="sortedKeys"><span class="type-signature"></span>sortedKeys<span class="signature">(obj, key<span class="signature-attributes">opt</span>, sortmode<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {Array.<string>}</span></h4> + + + + + + +<div class="description"> + <p>Return an array of sorted object keys, optionally sorted by +a different key or a different sorting mode.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + <th>Attributes</th> + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>obj</code></td> + + + <td class="type"> + + +<span class="param-type">object</span> + + + + </td> + + + <td class="attributes"> + + + + + + </td> + + + + + <td class="description last"><p>The object to extract the keys from. If the given value is +not an object, the function will return an empty array.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>key</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + + + </td> + + + + + <td class="description last"><p>Specifies the key to order by. This is mainly useful for +nested objects of objects or objects of arrays when sorting +shall not be performed by the primary object keys but by +some other key pointing to a value within the nested values.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>sortmode</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + + + </td> + + + + + <td class="description last"><p>May be either <code>addr</code> or <code>num</code> to override the natural +lexicographic sorting with a sorting suitable for IP/MAC style +addresses or numeric values respectively.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line1794">line 1794</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns an array containing the sorted keys of the given object.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">Array.<string></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="stop"><span class="type-signature"></span>stop<span class="signature">(entry)</span><span class="type-signature"> → {boolean}</span></h4> + + + + + + +<div class="description"> + <p>Deprecated wrapper around <code>Poll.remove()</code>.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>entry</code></td> + + + <td class="type"> + + +<span class="param-type">function</span> + + + + </td> + + + + + + <td class="description last"><p>The polling function to remove.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + <dt class="important tag-deprecated">Deprecated:</dt><dd class="yes-def tag-deprecated"><ul class="dummy"><li>Yes</li></ul></dd> + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line2027">line 2027</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns <code>true</code> when the function has been removed or <code>false</code> if +it could not be found.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">boolean</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="toArray"><span class="type-signature"></span>toArray<span class="signature">(val)</span><span class="type-signature"> → {Array.<*>}</span></h4> + + + + + + +<div class="description"> + <p>Converts the given value to an array. If the given value is of +type array, it is returned as-is, values of type object are +returned as one-element array containing the object, empty +strings and <code>null</code> values are returned as empty array, all other +values are converted using <code>String()</code>, trimmed, split on white +space and returned as array.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>val</code></td> + + + <td class="type"> + + +<span class="param-type">*</span> + + + + </td> + + + + + + <td class="description last"><p>The value to convert into an array.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line1839">line 1839</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns the resulting array.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">Array.<*></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="url"><span class="type-signature"></span>url<span class="signature">(parts<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {string}</span></h4> + + + + + + +<div class="description"> + <p>Construct an URL pathrelative to the script path of the server +side LuCI application (usually <code>/cgi-bin/luci</code>).</p> +<p>The resulting URL is guaranteed to only contain the characters +<code>a-z</code>, <code>A-Z</code>, <code>0-9</code>, <code>_</code>, <code>.</code>, <code>%</code>, <code>,</code>, <code>;</code>, and <code>-</code> as well +as <code>/</code> for the path separator.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + <th>Attributes</th> + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>parts</code></td> + + + <td class="type"> + + +<span class="param-type">Array.<string></span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + + + </td> + + + + + <td class="description last"><p>An array of parts to join into an URL path. Parts may contain +slashes and any of the other characters mentioned above.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line1710">line 1710</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns the resulting URL path.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">string</span> + + + </dd> +</dl> + + + + + + + + + + + + <h3 class="subsection-title">Type Definitions</h3> + + + + + + + + <h4 class="name" id=".requestCallbackFn"><span class="type-signature"></span>requestCallbackFn<span class="signature">(xhr, data, duration)</span><span class="type-signature"></span></h4> + + + + + + +<div class="description"> + <p>The request callback function is invoked whenever an HTTP +reply to a request made using the <code>L.get()</code>, <code>L.post()</code> or +<code>L.poll()</code> function is timed out or received successfully.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>xhr</code></td> + + + <td class="type"> + + +<span class="param-type">XMLHTTPRequest</span> + + + + </td> + + + + + + <td class="description last"><p>The XMLHTTPRequest instance used to make the request.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>data</code></td> + + + <td class="type"> + + +<span class="param-type">*</span> + + + + </td> + + + + + + <td class="description last"><p>The response JSON if the response could be parsed as such, +else <code>null</code>.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>duration</code></td> + + + <td class="type"> + + +<span class="param-type">number</span> + + + + </td> + + + + + + <td class="description last"><p>The total duration of the request in milliseconds.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line1877">line 1877</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + + + + + + + + + + +</article> + +</section> + + + + +</div> + +<nav> + <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="LuCI.html">LuCI</a></li><li><a href="LuCI.Class.html">Class</a></li><li><a href="LuCI.dom.html">dom</a></li><li><a href="LuCI.fs.html">fs</a></li><li><a href="LuCI.Headers.html">Headers</a></li><li><a href="LuCI.Network.html">Network</a></li><li><a href="LuCI.Network.Device.html">Device</a></li><li><a href="LuCI.Network.Hosts.html">Hosts</a></li><li><a href="LuCI.Network.Protocol.html">Protocol</a></li><li><a href="LuCI.Network.WifiDevice.html">WifiDevice</a></li><li><a href="LuCI.Network.WifiNetwork.html">WifiNetwork</a></li><li><a href="LuCI.Poll.html">Poll</a></li><li><a href="LuCI.Request.html">Request</a></li><li><a href="LuCI.Request.poll.html">poll</a></li><li><a href="LuCI.Response.html">Response</a></li><li><a href="LuCI.rpc.html">rpc</a></li><li><a href="LuCI.uci.html">uci</a></li><li><a href="LuCI.view.html">view</a></li><li><a href="LuCI.XHR.html">XHR</a></li></ul> +</nav> + +<br class="clear"> + +<footer> + Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a> on Tue Nov 05 2019 09:33:05 GMT+0100 (Central European Standard Time) +</footer> + +<script> prettyPrint(); </script> +<script src="scripts/linenumber.js"> </script> +</body> +</html>
\ No newline at end of file diff --git a/documentation/jsapi/LuCI.rpc.html b/documentation/jsapi/LuCI.rpc.html new file mode 100644 index 000000000..9d548f3ad --- /dev/null +++ b/documentation/jsapi/LuCI.rpc.html @@ -0,0 +1,2414 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="utf-8"> + <title>JSDoc: Class: rpc</title> + + <script src="scripts/prettify/prettify.js"> </script> + <script src="scripts/prettify/lang-css.js"> </script> + <!--[if lt IE 9]> + <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script> + <![endif]--> + <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css"> + <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css"> +</head> + +<body> + +<div id="main"> + + <h1 class="page-title">Class: rpc</h1> + + + + + + +<section> + +<header> + + <h2><span class="attribs"><span class="type-signature"></span></span> + <span class="ancestors"><a href="LuCI.html">LuCI</a>.</span>rpc</h2> + + <div class="class-description"><p>The <code>LuCI.rpc</code> class provides high level ubus JSON-RPC abstractions +and means for listing and invoking remove RPC methods.</p></div> + + +</header> + +<article> + <div class="container-overview"> + + + + + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="rpc.js.html">rpc.js</a>, <a href="rpc.js.html#line8">line 8</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + + + + + + + + </div> + + + + + + + + + + + + + + + + + <h3 class="subsection-title">Methods</h3> + + + + + + + + <h4 class="name" id="addInterceptor"><span class="type-signature"></span>addInterceptor<span class="signature">(interceptorFn)</span><span class="type-signature"> → {<a href="LuCI.rpc.html#~interceptorFn">LuCI.rpc~interceptorFn</a>}</span></h4> + + + + + + +<div class="description"> + <p>Registers a new interceptor function.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>interceptorFn</code></td> + + + <td class="type"> + + +<span class="param-type"><a href="LuCI.rpc.html#~interceptorFn">LuCI.rpc~interceptorFn</a></span> + + + + </td> + + + + + + <td class="description last"><p>The inteceptor function to register.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="rpc.js.html">rpc.js</a>, <a href="rpc.js.html#line454">line 454</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns the given function value.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type"><a href="LuCI.rpc.html#~interceptorFn">LuCI.rpc~interceptorFn</a></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="declare"><span class="type-signature"></span>declare<span class="signature">(options)</span><span class="type-signature"> → {<a href="LuCI.rpc.html#~invokeFn">LuCI.rpc~invokeFn</a>}</span></h4> + + + + + + +<div class="description"> + <p>Describes a remote RPC call procedure and returns a function +implementing it.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>options</code></td> + + + <td class="type"> + + +<span class="param-type"><a href="LuCI.rpc.html#.DeclareOptions">LuCI.rpc.DeclareOptions</a></span> + + + + </td> + + + + + + <td class="description last"><p>If any object names are given, this function will return the method +signatures of each given object.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="rpc.js.html">rpc.js</a>, <a href="rpc.js.html#line292">line 292</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns a new function implementing the method call described in +<code>options</code>.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type"><a href="LuCI.rpc.html#~invokeFn">LuCI.rpc~invokeFn</a></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getBaseURL"><span class="type-signature"></span>getBaseURL<span class="signature">()</span><span class="type-signature"> → {string}</span></h4> + + + + + + +<div class="description"> + <p>Returns the current RPC base URL.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="rpc.js.html">rpc.js</a>, <a href="rpc.js.html#line367">line 367</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns the RPC URL endpoint to issue requests against.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">string</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getSessionID"><span class="type-signature"></span>getSessionID<span class="signature">()</span><span class="type-signature"> → {string}</span></h4> + + + + + + +<div class="description"> + <p>Returns the current RPC session id.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="rpc.js.html">rpc.js</a>, <a href="rpc.js.html#line346">line 346</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns the 32 byte session ID string used for authenticating remote +requests.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">string</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="getStatusText"><span class="type-signature"></span>getStatusText<span class="signature">(statusCode)</span><span class="type-signature"> → {string}</span></h4> + + + + + + +<div class="description"> + <p>Translates a numeric <code>ubus</code> error code into a human readable +description.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>statusCode</code></td> + + + <td class="type"> + + +<span class="param-type">number</span> + + + + </td> + + + + + + <td class="description last"><p>The numeric status code.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="rpc.js.html">rpc.js</a>, <a href="rpc.js.html#line391">line 391</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns the textual description of the code.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">string</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="list"><span class="type-signature"></span>list<span class="signature">(…objectNames<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {Promise.<(Array.<string>|Object.<string, Object.<string, Object.<string, string>>>)>}</span></h4> + + + + + + +<div class="description"> + <p>Lists available remote ubus objects or the method signatures of +specific objects.</p> +<p>This function has two signatures and is sensitive to the number of +arguments passed to it:</p> +<ul> +<li><code>list()</code> - +Returns an array containing the names of all remote <code>ubus</code> objects</li> +<li><code>list("objname", ...)</code> +Returns method signatures for each given <code>ubus</code> object name.</li> +</ul> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + <th>Attributes</th> + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>objectNames</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + + + <repeatable><br> + + </td> + + + + + <td class="description last"><p>If any object names are given, this function will return the method +signatures of each given object.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="rpc.js.html">rpc.js</a>, <a href="rpc.js.html#line140">line 140</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>When invoked without arguments, this function will return a promise +resolving to an array of <code>ubus</code> object names. When invoked with one or +more arguments, a promise resolving to an object describing the method +signatures of each requested <code>ubus</code> object name will be returned.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">Promise.<(Array.<string>|Object.<string, Object.<string, Object.<string, string>>>)></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="removeInterceptor"><span class="type-signature"></span>removeInterceptor<span class="signature">(interceptorFn)</span><span class="type-signature"> → {boolean}</span></h4> + + + + + + +<div class="description"> + <p>Removes a registered interceptor function.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>interceptorFn</code></td> + + + <td class="type"> + + +<span class="param-type"><a href="LuCI.rpc.html#~interceptorFn">LuCI.rpc~interceptorFn</a></span> + + + + </td> + + + + + + <td class="description last"><p>The inteceptor function to remove.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="rpc.js.html">rpc.js</a>, <a href="rpc.js.html#line470">line 470</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns <code>true</code> if the given function has been removed or <code>false</code> +if it has not been found.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">boolean</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="setBaseURL"><span class="type-signature"></span>setBaseURL<span class="signature">(sid)</span><span class="type-signature"></span></h4> + + + + + + +<div class="description"> + <p>Set the RPC base URL to use.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>sid</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + + + + <td class="description last"><p>Sets the RPC URL endpoint to issue requests against.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="rpc.js.html">rpc.js</a>, <a href="rpc.js.html#line377">line 377</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + + + + + + + + + + + + + <h4 class="name" id="setSessionID"><span class="type-signature"></span>setSessionID<span class="signature">(sid)</span><span class="type-signature"></span></h4> + + + + + + +<div class="description"> + <p>Set the RPC session id to use.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>sid</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + + + + <td class="description last"><p>Sets the 32 byte session ID string used for authenticating remote +requests.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="rpc.js.html">rpc.js</a>, <a href="rpc.js.html#line357">line 357</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + + + + + + + + + + + <h3 class="subsection-title">Type Definitions</h3> + + + +<h4 class="name" id=".DeclareOptions">DeclareOptions</h4> + + + + + + + <h5>Type:</h5> + <ul> + <li> + +<span class="param-type">Object</span> + + + </li> + </ul> + + + + + + <h5 class="subsection-title">Properties:</h5> + + + +<table class="props"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + <th>Attributes</th> + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>object</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + <td class="attributes"> + + + + </td> + + + + + <td class="description last"><p>The name of the remote <code>ubus</code> object to invoke.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>method</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + <td class="attributes"> + + + + </td> + + + + + <td class="description last"><p>The name of the remote <code>ubus</code> method to invoke.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>params</code></td> + + + <td class="type"> + + +<span class="param-type">Array.<string></span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + </td> + + + + + <td class="description last"><p>Lists the named parameters expected by the remote <code>ubus</code> RPC method. +The arguments passed to the resulting generated method call function +will be mapped to named parameters in the order they appear in this +array.</p> +<p>Extraneous parameters passed to the generated function will not be +sent to the remote procedure but are passed to the +<a href="LuCI.rpc.html#~filterFn"><code>filter function</code></a> if one is specified.</p> +<p>Examples:</p> +<ul> +<li><code>params: [ "foo", "bar" ]</code> - +When the resulting call function is invoked with <code>fn(true, false)</code>, +the corresponding args object sent to the remote procedure will be +<code>{ foo: true, bar: false }</code>.</li> +<li><code>params: [ "test" ], filter: function(reply, args, extra) { ... }</code> - +When the resultung generated function is invoked with +<code>fn("foo", "bar", "baz")</code> then <code>{ "test": "foo" }</code> will be sent as +argument to the remote procedure and the filter function will be +invoked with <code>filterFn(reply, [ "foo" ], "bar", "baz")</code></li> +</ul></td> + </tr> + + + + <tr> + + <td class="name"><code>expect</code></td> + + + <td class="type"> + + +<span class="param-type">Object.<string, *></span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + </td> + + + + + <td class="description last"><p>Describes the expected return data structure. The given object is +supposed to contain a single key selecting the value to use from +the returned <code>ubus</code> reply object. The value of the sole key within +the <code>expect</code> object is used to infer the expected type of the received +<code>ubus</code> reply data.</p> +<p>If the received data does not contain <code>expect</code>'s key, or if the +type of the data differs from the type of the value in the expect +object, the expect object's value is returned as default instead.</p> +<p>The key in the <code>expect</code> object may be an empty string (<code>''</code>) in which +case the entire reply object is selected instead of one of its subkeys.</p> +<p>If the <code>expect</code> option is omitted, the received reply will be returned +as-is, regardless of its format or type.</p> +<p>Examples:</p> +<ul> +<li><code>expect: { '': { error: 'Invalid response' } }</code> - +This requires the entire <code>ubus</code> reply to be a plain JavaScript +object. If the reply isn't an object but e.g. an array or a numeric +error code instead, it will get replaced with +<code>{ error: 'Invalid response' }</code> instead.</li> +<li><code>expect: { results: [] }</code> - +This requires the received <code>ubus</code> reply to be an object containing +a key <code>results</code> with an array as value. If the received reply does +not contain such a key, or if <code>reply.results</code> points to a non-array +value, the empty array (<code>[]</code>) will be used instead.</li> +<li><code>expect: { success: false }</code> - +This requires the received <code>ubus</code> reply to be an object containing +a key <code>success</code> with a boolean value. If the reply does not contain +<code>success</code> or if <code>reply.success</code> is not a boolean value, <code>false</code> will +be returned as default instead.</li> +</ul></td> + </tr> + + + + <tr> + + <td class="name"><code>filter</code></td> + + + <td class="type"> + + +<span class="param-type"><a href="LuCI.rpc.html#~filterFn">LuCI.rpc~filterFn</a></span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + </td> + + + + + <td class="description last"><p>Specfies an optional filter function which is invoked to transform the +received reply data before it is returned to the caller.</p></td> + </tr> + + + </tbody> +</table> + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="rpc.js.html">rpc.js</a>, <a href="rpc.js.html#line160">line 160</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + <h4 class="name" id="~filterFn"><span class="type-signature"></span>filterFn<span class="signature">(data, args, …extraArgs)</span><span class="type-signature"> → {*}</span></h4> + + + + + + +<div class="description"> + <p>The filter function is invoked to transform a received <code>ubus</code> RPC call +reply before returning it to the caller.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + <th>Attributes</th> + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>data</code></td> + + + <td class="type"> + + +<span class="param-type">*</span> + + + + </td> + + + <td class="attributes"> + + + + + + </td> + + + + + <td class="description last"><p>The received <code>ubus</code> reply data or a subset of it as described in the +<code>expect</code> option of the RPC call declaration. In case of remote call +errors, <code>data</code> is numeric <code>ubus</code> error code instead.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>args</code></td> + + + <td class="type"> + + +<span class="param-type">Array.<*></span> + + + + </td> + + + <td class="attributes"> + + + + + + </td> + + + + + <td class="description last"><p>The arguments the RPC method has been invoked with.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>extraArgs</code></td> + + + <td class="type"> + + +<span class="param-type">*</span> + + + + </td> + + + <td class="attributes"> + + + + + + <repeatable><br> + + </td> + + + + + <td class="description last"><p>All extraneous arguments passed to the RPC method exceeding the number +of arguments describes in the RPC call declaration.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="rpc.js.html">rpc.js</a>, <a href="rpc.js.html#line231">line 231</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>The return value of the filter function will be returned to the caller +of the RPC method as-is.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">*</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="~interceptorFn"><span class="type-signature"></span>interceptorFn<span class="signature">(msg, req)</span><span class="type-signature"> → {Promise.<*>|*}</span></h4> + + + + + + +<div class="description"> + <p>Registered interceptor functions are invoked before the standard reply +parsing and handling logic.</p> +<p>By returning rejected promises, interceptor functions can cause the +invocation function to fail, regardless of the received reply.</p> +<p>Interceptors may also modify their message argument in-place to +rewrite received replies before they're processed by the standard +response handling code.</p> +<p>A common use case for such functions is to detect failing RPC replies +due to expired authentication in order to trigger a new login.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>msg</code></td> + + + <td class="type"> + + +<span class="param-type">*</span> + + + + </td> + + + + + + <td class="description last"><p>The unprocessed, JSON decoded remote RPC method call reply.</p> +<p>Since interceptors run before the standard parsing logic, the reply +data is not verified for correctness or filtered according to +<code>expect</code> and <code>filter</code> specifications in the declarations.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>req</code></td> + + + <td class="type"> + + +<span class="param-type">Object</span> + + + + </td> + + + + + + <td class="description last"><p>The related request object which is an extended variant of the +declaration object, allowing access to internals of the invocation +function such as <code>filter</code>, <code>expect</code> or <code>params</code> values.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="rpc.js.html">rpc.js</a>, <a href="rpc.js.html#line408">line 408</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Interceptor functions may return a promise to defer response +processing until some delayed work completed. Any values the returned +promise resolves to are ignored.</p> +<p>When the returned promise rejects with an error, the invocation +function will fail too, forwarding the error to the caller.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">Promise.<*></span> +| + +<span class="param-type">*</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="~invokeFn"><span class="type-signature"></span>invokeFn<span class="signature">(…params)</span><span class="type-signature"> → {Promise.<*>}</span></h4> + + + + + + +<div class="description"> + <p>The generated invocation function is returned by +<a href="LuCI.rpc.html#declare"><code>rpc.declare()</code></a> and encapsulates a single +RPC method call.</p> +<p>Calling this function will execute a remote <code>ubus</code> HTTP call request +using the arguments passed to it as arguments and return a promise +resolving to the received reply values.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + <th>Attributes</th> + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>params</code></td> + + + <td class="type"> + + +<span class="param-type">*</span> + + + + </td> + + + <td class="attributes"> + + + + + + <repeatable><br> + + </td> + + + + + <td class="description last"><p>The parameters to pass to the remote procedure call. The given +positional arguments will be named to named RPC parameters according +to the names specified in the <code>params</code> array of the method declaration.</p> +<p>Any additional parameters exceeding the amount of arguments in the +<code>params</code> declaration are passed as private extra arguments to the +declared filter function.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="rpc.js.html">rpc.js</a>, <a href="rpc.js.html#line254">line 254</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns a promise resolving to the result data of the remote <code>ubus</code> +RPC method invocation, optionally substituted and filtered according +to the <code>expect</code> and <code>filter</code> declarations.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">Promise.<*></span> + + + </dd> +</dl> + + + + + + + + + + + +</article> + +</section> + + + + +</div> + +<nav> + <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="LuCI.html">LuCI</a></li><li><a href="LuCI.Class.html">Class</a></li><li><a href="LuCI.dom.html">dom</a></li><li><a href="LuCI.fs.html">fs</a></li><li><a href="LuCI.Headers.html">Headers</a></li><li><a href="LuCI.Network.html">Network</a></li><li><a href="LuCI.Network.Device.html">Device</a></li><li><a href="LuCI.Network.Hosts.html">Hosts</a></li><li><a href="LuCI.Network.Protocol.html">Protocol</a></li><li><a href="LuCI.Network.WifiDevice.html">WifiDevice</a></li><li><a href="LuCI.Network.WifiNetwork.html">WifiNetwork</a></li><li><a href="LuCI.Poll.html">Poll</a></li><li><a href="LuCI.Request.html">Request</a></li><li><a href="LuCI.Request.poll.html">poll</a></li><li><a href="LuCI.Response.html">Response</a></li><li><a href="LuCI.rpc.html">rpc</a></li><li><a href="LuCI.uci.html">uci</a></li><li><a href="LuCI.view.html">view</a></li><li><a href="LuCI.XHR.html">XHR</a></li></ul> +</nav> + +<br class="clear"> + +<footer> + Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a> on Tue Nov 05 2019 09:33:05 GMT+0100 (Central European Standard Time) +</footer> + +<script> prettyPrint(); </script> +<script src="scripts/linenumber.js"> </script> +</body> +</html>
\ No newline at end of file diff --git a/documentation/jsapi/LuCI.uci.html b/documentation/jsapi/LuCI.uci.html new file mode 100644 index 000000000..8a0e3e98f --- /dev/null +++ b/documentation/jsapi/LuCI.uci.html @@ -0,0 +1,4176 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="utf-8"> + <title>JSDoc: Class: uci</title> + + <script src="scripts/prettify/prettify.js"> </script> + <script src="scripts/prettify/lang-css.js"> </script> + <!--[if lt IE 9]> + <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script> + <![endif]--> + <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css"> + <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css"> +</head> + +<body> + +<div id="main"> + + <h1 class="page-title">Class: uci</h1> + + + + + + +<section> + +<header> + + <h2><span class="attribs"><span class="type-signature"></span></span> + <span class="ancestors"><a href="LuCI.html">LuCI</a>.</span>uci</h2> + + <div class="class-description"><p>The <code>LuCI.uci</code> class utilizes <a href="LuCI.rpc.html"><code>LuCI.rpc</code></a> to declare low level +remote UCI <code>ubus</code> procedures and implements a local caching and data +manipulation layer on top to allow for synchroneous operations on +UCI configuration data.</p></div> + + +</header> + +<article> + <div class="container-overview"> + + + + + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="uci.js.html">uci.js</a>, <a href="uci.js.html#line4">line 4</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + + + + + + + + </div> + + + + + + + + + + + + + + + + + <h3 class="subsection-title">Methods</h3> + + + + + + + + <h4 class="name" id="add"><span class="type-signature"></span>add<span class="signature">(config, type, name<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {string}</span></h4> + + + + + + +<div class="description"> + <p>Adds a new section of the given type to the given configuration, +optionally named according to the given name.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + <th>Attributes</th> + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>config</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + <td class="attributes"> + + + + + + </td> + + + + + <td class="description last"><p>The name of the configuration to add the section to.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>type</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + <td class="attributes"> + + + + + + </td> + + + + + <td class="description last"><p>The type of the section to add.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>name</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + + + </td> + + + + + <td class="description last"><p>The name of the section to add. If the name is omitted, an anonymous +section will be added instead.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="uci.js.html">uci.js</a>, <a href="uci.js.html#line269">line 269</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns the section ID of the newly added section which is equivalent +to the given name for non-anonymous sections.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">string</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="apply"><span class="type-signature"></span>apply<span class="signature">(timeout<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {Promise.<number>}</span></h4> + + + + + + +<div class="description"> + <p>Instructs the remote <code>ubus</code> UCI api to commit all saved changes with +rollback protection and attempts to confirm the pending commit +operation to cancel the rollback timer.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + <th>Attributes</th> + + + + <th>Default</th> + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>timeout</code></td> + + + <td class="type"> + + +<span class="param-type">number</span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + + + </td> + + + + <td class="default"> + + 10 + + </td> + + + <td class="description last"><p>Override the confirmation timeout after which a rollback is triggered.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="uci.js.html">uci.js</a>, <a href="uci.js.html#line858">line 858</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns a promise resolving/rejecting with the <code>ubus</code> RPC status code.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">Promise.<number></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="changes"><span class="type-signature"></span>changes<span class="signature">()</span><span class="type-signature"> → {Promise.<Object.<string, Array.<<a href="LuCI.uci.html#.ChangeRecord">LuCI.uci.ChangeRecord</a>>>>}</span></h4> + + + + + + +<div class="description"> + <p>Fetches uncommitted UCI changes from the remote <code>ubus</code> RPC api.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="uci.js.html">uci.js</a>, <a href="uci.js.html#line938">line 938</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns a promise resolving to an object containing the configuration +names as keys and arrays of related change records as values.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">Promise.<Object.<string, Array.<<a href="LuCI.uci.html#.ChangeRecord">LuCI.uci.ChangeRecord</a>>>></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="createSID"><span class="type-signature"></span>createSID<span class="signature">(config)</span><span class="type-signature"> → {string}</span></h4> + + + + + + +<div class="description"> + <p>Generates a new, unique section ID for the given configuration.</p> +<p>Note that the generated ID is temporary, it will get replaced by an +identifier in the form <code>cfgXXXXXX</code> once the configuration is saved +by the remote <code>ubus</code> UCI api.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>config</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + + + + <td class="description last"><p>The configuration to generate the new section ID for.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="uci.js.html">uci.js</a>, <a href="uci.js.html#line88">line 88</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>A newly generated, unique section ID in the form <code>newXXXXXX</code> +where <code>X</code> denotes a hexadecimal digit.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">string</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="get"><span class="type-signature"></span>get<span class="signature">(config, sid, option<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {null|string|Array.<string>|<a href="LuCI.uci.html#.SectionObject">LuCI.uci.SectionObject</a>}</span></h4> + + + + + + +<div class="description"> + <p>Gets the value of the given option within the specified section +of the given configuration or the entire section object if the +option name is omitted.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + <th>Attributes</th> + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>config</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + <td class="attributes"> + + + + + + </td> + + + + + <td class="description last"><p>The name of the configuration to read the value from.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>sid</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + <td class="attributes"> + + + + + + </td> + + + + + <td class="description last"><p>The name or ID of the section to read.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>option</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + + + </td> + + + + + <td class="description last"><p>The option name to read the value from. If the option name is +omitted or <code>null</code>, the entire section is returned instead.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="uci.js.html">uci.js</a>, <a href="uci.js.html#line443">line 443</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <ul> +<li>Returns a string containing the option value in case of a +plain UCI option.</li> +<li>Returns an array of strings containing the option values in +case of <code>option</code> pointing to an UCI list.</li> +<li>Returns a <a href="LuCI.uci.html#.SectionObject"><code>section object</code></a> if +the <code>option</code> argument has been omitted or is <code>null</code>.</li> +<li>Returns <code>null</code> if the config, section or option has not been +found or if the corresponding configuration is not loaded.</li> +</ul> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">null</span> +| + +<span class="param-type">string</span> +| + +<span class="param-type">Array.<string></span> +| + +<span class="param-type"><a href="LuCI.uci.html#.SectionObject">LuCI.uci.SectionObject</a></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="get_first"><span class="type-signature"></span>get_first<span class="signature">(config, type<span class="signature-attributes">opt</span>, option<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {null|string|Array.<string>|<a href="LuCI.uci.html#.SectionObject">LuCI.uci.SectionObject</a>}</span></h4> + + + + + + +<div class="description"> + <p>Gets the value of the given option or the entire section object of +the first found section of the specified type or the first found +section of the entire configuration if no type is specfied.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + <th>Attributes</th> + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>config</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + <td class="attributes"> + + + + + + </td> + + + + + <td class="description last"><p>The name of the configuration to read the value from.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>type</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + + + </td> + + + + + <td class="description last"><p>The type of the first section to find. If it is <code>null</code>, the first +section of the entire config is read, otherwise the first section +matching the given type.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>option</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + + + </td> + + + + + <td class="description last"><p>The option name to read the value from. If the option name is +omitted or <code>null</code>, the entire section is returned instead.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="uci.js.html">uci.js</a>, <a href="uci.js.html#line618">line 618</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <ul> +<li>Returns a string containing the option value in case of a +plain UCI option.</li> +<li>Returns an array of strings containing the option values in +case of <code>option</code> pointing to an UCI list.</li> +<li>Returns a <a href="LuCI.uci.html#.SectionObject"><code>section object</code></a> if +the <code>option</code> argument has been omitted or is <code>null</code>.</li> +<li>Returns <code>null</code> if the config, section or option has not been +found or if the corresponding configuration is not loaded.</li> +</ul> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">null</span> +| + +<span class="param-type">string</span> +| + +<span class="param-type">Array.<string></span> +| + +<span class="param-type"><a href="LuCI.uci.html#.SectionObject">LuCI.uci.SectionObject</a></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="load"><span class="type-signature"></span>load<span class="signature">(config)</span><span class="type-signature"> → {Promise.<Array.<string>>}</span></h4> + + + + + + +<div class="description"> + <p>Loads the given UCI configurations from the remote <code>ubus</code> api.</p> +<p>Loaded configurations are cached and only loaded once. Subsequent +load operations of the same configurations will return the cached +data.</p> +<p>To force reloading a configuration, it has to be unloaded with +<a href="LuCI.uci.html#unload"><code>uci.unload()</code></a> first.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>config</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> +| + +<span class="param-type">Array.<string></span> + + + + </td> + + + + + + <td class="description last"><p>The name of the configuration or an array of configuration +names to load.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="uci.js.html">uci.js</a>, <a href="uci.js.html#line205">line 205</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns a promise resolving to the names of the configurations +that have been successfully loaded.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">Promise.<Array.<string>></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="move"><span class="type-signature"></span>move<span class="signature">(config, sid1, sid2<span class="signature-attributes">opt</span>, after<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {boolean}</span></h4> + + + + + + +<div class="description"> + <p>Move the first specified section within the given configuration +before or after the second specified section.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + <th>Attributes</th> + + + + <th>Default</th> + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>config</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + <td class="attributes"> + + + + + + </td> + + + + <td class="default"> + + </td> + + + <td class="description last"><p>The configuration to move the section within.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>sid1</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + <td class="attributes"> + + + + + + </td> + + + + <td class="default"> + + </td> + + + <td class="description last"><p>The ID of the section to move within the configuration.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>sid2</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + + + </td> + + + + <td class="default"> + + </td> + + + <td class="description last"><p>The ID of the target section for the move operation. If the +<code>after</code> argument is <code>false</code> or not specified, the section named by +<code>sid1</code> will be moved before this target section, if the <code>after</code> +argument is <code>true</code>, the <code>sid1</code> section will be moved after this +section.</p> +<p>When the <code>sid2</code> argument is <code>null</code>, the section specified by <code>sid1</code> +is moved to the end of the configuration.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>after</code></td> + + + <td class="type"> + + +<span class="param-type">boolean</span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + + + </td> + + + + <td class="default"> + + false + + </td> + + + <td class="description last"><p>When <code>true</code>, the section <code>sid1</code> is moved after the section <code>sid2</code>, +when <code>false</code>, the section <code>sid1</code> is moved before <code>sid2</code>.</p> +<p>If <code>sid2</code> is null, then this parameter has no effect and the section +<code>sid1</code> is moved to the end of the configuration instead.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="uci.js.html">uci.js</a>, <a href="uci.js.html#line718">line 718</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns <code>true</code> when the section was successfully moved, or <code>false</code> +when either the section specified by <code>sid1</code> or by <code>sid2</code> is not found.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">boolean</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="remove"><span class="type-signature"></span>remove<span class="signature">(config, sid)</span><span class="type-signature"></span></h4> + + + + + + +<div class="description"> + <p>Removes the section with the given ID from the given configuration.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>config</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + + + + <td class="description last"><p>The name of the configuration to remove the section from.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>sid</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + + + + <td class="description last"><p>The ID of the section to remove.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="uci.js.html">uci.js</a>, <a href="uci.js.html#line296">line 296</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + + + + + + + + + + + + + <h4 class="name" id="resolveSID"><span class="type-signature"></span>resolveSID<span class="signature">(config, sid)</span><span class="type-signature"> → {string|null}</span></h4> + + + + + + +<div class="description"> + <p>Resolves a given section ID in extended notation to the internal +section ID value.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>config</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + + + + <td class="description last"><p>The configuration to resolve the section ID for.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>sid</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + + + + <td class="description last"><p>The section ID to resolve. If the ID is in the form <code>@typename[#]</code>, +it will get resolved to an internal anonymous ID in the forms +<code>cfgXXXXXX</code>/<code>newXXXXXX</code> or to the name of a section in case it points +to a named section. When the given ID is not in extended notation, +it will be returned as-is.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="uci.js.html">uci.js</a>, <a href="uci.js.html#line119">line 119</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns the resolved section ID or the original given ID if it was +not in extended notation. Returns <code>null</code> when an extended ID could +not be resolved to existing section ID.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">string</span> +| + +<span class="param-type">null</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="save"><span class="type-signature"></span>save<span class="signature">()</span><span class="type-signature"> → {Array.<string>}</span></h4> + + + + + + +<div class="description"> + <p>Submits all local configuration changes to the remove <code>ubus</code> api, +adds, removes and reorders remote sections as needed and reloads +all loaded configurations to resynchronize the local state with +the remote configuration values.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="uci.js.html">uci.js</a>, <a href="uci.js.html#line772">line 772</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns a promise resolving to an array of configuration names which +have been reloaded by the save operation.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">Array.<string></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="sections"><span class="type-signature"></span>sections<span class="signature">(config, type<span class="signature-attributes">opt</span>, cb<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {Array.<<a href="LuCI.uci.html#.SectionObject">LuCI.uci.SectionObject</a>>}</span></h4> + + + + + + +<div class="description"> + <p>Enumerates the sections of the given configuration, optionally +filtered by type.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + <th>Attributes</th> + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>config</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + <td class="attributes"> + + + + + + </td> + + + + + <td class="description last"><p>The name of the configuration to enumerate the sections for.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>type</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + + + </td> + + + + + <td class="description last"><p>Enumerate only sections of the given type. If omitted, enumerate +all sections.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>cb</code></td> + + + <td class="type"> + + +<span class="param-type"><a href="LuCI.uci.html#~sectionsFn">LuCI.uci~sectionsFn</a></span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + + + </td> + + + + + <td class="description last"><p>An optional callback to invoke for each enumerated section.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="uci.js.html">uci.js</a>, <a href="uci.js.html#line384">line 384</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns a sorted array of the section objects within the given +configuration, filtered by type of a type has been specified.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">Array.<<a href="LuCI.uci.html#.SectionObject">LuCI.uci.SectionObject</a>></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="set"><span class="type-signature"></span>set<span class="signature">(config, sid, option, value)</span><span class="type-signature"></span></h4> + + + + + + +<div class="description"> + <p>Sets the value of the given option within the specified section +of the given configuration.</p> +<p>If either config, section or option is null, or if <code>option</code> begins +with a dot, the function will do nothing.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>config</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + + + + <td class="description last"><p>The name of the configuration to set the option value in.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>sid</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + + + + <td class="description last"><p>The name or ID of the section to set the option value in.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>option</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + + + + <td class="description last"><p>The option name to set the value for.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>value</code></td> + + + <td class="type"> + + +<span class="param-type">null</span> +| + +<span class="param-type">string</span> +| + +<span class="param-type">Array.<string></span> + + + + </td> + + + + + + <td class="description last"><p>The option value to set. If the value is <code>null</code> or an empty string, +the option will be removed, otherwise it will be set or overwritten +with the given value.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="uci.js.html">uci.js</a>, <a href="uci.js.html#line516">line 516</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + + + + + + + + + + + + + <h4 class="name" id="set_first"><span class="type-signature"></span>set_first<span class="signature">(config, type<span class="signature-attributes">opt</span>, option, value)</span><span class="type-signature"></span></h4> + + + + + + +<div class="description"> + <p>Sets the value of the given option within the first found section +of the given configuration matching the specified type or within +the first section of the entire config when no type has is specified.</p> +<p>If either config, type or option is null, or if <code>option</code> begins +with a dot, the function will do nothing.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + <th>Attributes</th> + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>config</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + <td class="attributes"> + + + + + + </td> + + + + + <td class="description last"><p>The name of the configuration to set the option value in.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>type</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + + + </td> + + + + + <td class="description last"><p>The type of the first section to find. If it is <code>null</code>, the first +section of the entire config is written to, otherwise the first +section matching the given type is used.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>option</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + <td class="attributes"> + + + + + + </td> + + + + + <td class="description last"><p>The option name to set the value for.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>value</code></td> + + + <td class="type"> + + +<span class="param-type">null</span> +| + +<span class="param-type">string</span> +| + +<span class="param-type">Array.<string></span> + + + + </td> + + + <td class="attributes"> + + + + + + </td> + + + + + <td class="description last"><p>The option value to set. If the value is <code>null</code> or an empty string, +the option will be removed, otherwise it will be set or overwritten +with the given value.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="uci.js.html">uci.js</a>, <a href="uci.js.html#line653">line 653</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + + + + + + + + + + + + + <h4 class="name" id="unload"><span class="type-signature"></span>unload<span class="signature">(config)</span><span class="type-signature"></span></h4> + + + + + + +<div class="description"> + <p>Unloads the given UCI configurations from the local cache.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>config</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> +| + +<span class="param-type">Array.<string></span> + + + + </td> + + + + + + <td class="description last"><p>The name of the configuration or an array of configuration +names to unload.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="uci.js.html">uci.js</a>, <a href="uci.js.html#line237">line 237</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + + + + + + + + + + + + + <h4 class="name" id="unset"><span class="type-signature"></span>unset<span class="signature">(config, sid, option)</span><span class="type-signature"></span></h4> + + + + + + +<div class="description"> + <p>Remove the given option within the specified section of the given +configuration.</p> +<p>This function is a convenience wrapper around +<code>uci.set(config, section, option, null)</code>.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>config</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + + + + <td class="description last"><p>The name of the configuration to remove the option from.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>sid</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + + + + <td class="description last"><p>The name or ID of the section to remove the option from.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>option</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + + + + <td class="description last"><p>The name of the option to remove.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="uci.js.html">uci.js</a>, <a href="uci.js.html#line587">line 587</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + + + + + + + + + + + + + <h4 class="name" id="unset_first"><span class="type-signature"></span>unset_first<span class="signature">(config, type<span class="signature-attributes">opt</span>, option)</span><span class="type-signature"></span></h4> + + + + + + +<div class="description"> + <p>Removes the given option within the first found section of the given +configuration matching the specified type or within the first section +of the entire config when no type has is specified.</p> +<p>This function is a convenience wrapper around +<code>uci.set_first(config, type, option, null)</code>.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + <th>Attributes</th> + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>config</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + <td class="attributes"> + + + + + + </td> + + + + + <td class="description last"><p>The name of the configuration to set the option value in.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>type</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + <td class="attributes"> + + <optional><br> + + + + + + </td> + + + + + <td class="description last"><p>The type of the first section to find. If it is <code>null</code>, the first +section of the entire config is written to, otherwise the first +section matching the given type is used.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>option</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + <td class="attributes"> + + + + + + </td> + + + + + <td class="description last"><p>The option name to set the value for.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="uci.js.html">uci.js</a>, <a href="uci.js.html#line683">line 683</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + + + + + + + + + + + <h3 class="subsection-title">Type Definitions</h3> + + + +<h4 class="name" id=".ChangeRecord">ChangeRecord</h4> + + + + +<div class="description"> + <p>An UCI change record is a plain array containing the change operation +name as first element, the affected section ID as second argument +and an optional third and fourth argument whose meanings depend on +the operation.</p> +</div> + + + + <h5>Type:</h5> + <ul> + <li> + +<span class="param-type">Array.<string></span> + + + </li> + </ul> + + + + + + <h5 class="subsection-title">Properties:</h5> + + + +<table class="props"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>0</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + + + + <td class="description last"><p>The operation name - may be one of <code>add</code>, <code>set</code>, <code>remove</code>, <code>order</code>, +<code>list-add</code>, <code>list-del</code> or <code>rename</code>.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>1</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + + + + <td class="description last"><p>The section ID targeted by the operation.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>2</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + + + + <td class="description last"><p>The meaning of the third element depends on the operation.</p> +<ul> +<li>For <code>add</code> it is type of the section that has been added</li> +<li>For <code>set</code> it either is the option name if a fourth element exists, +or the type of a named section which has been added when the change +entry only contains three elements.</li> +<li>For <code>remove</code> it contains the name of the option that has been +removed.</li> +<li>For <code>order</code> it specifies the new sort index of the section.</li> +<li>For <code>list-add</code> it contains the name of the list option a new value +has been added to.</li> +<li>For <code>list-del</code> it contains the name of the list option a value has +been removed from.</li> +<li>For <code>rename</code> it contains the name of the option that has been +renamed if a fourth element exists, else it contains the new name +a section has been renamed to if the change entry only contains +three elements.</li> +</ul></td> + </tr> + + + + <tr> + + <td class="name"><code>4</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + + + + <td class="description last"><p>The meaning of the fourth element depends on the operation.</p> +<ul> +<li>For <code>set</code> it is the value an option has been set to.</li> +<li>For <code>list-add</code> it is the new value that has been added to a +list option.</li> +<li>For <code>rename</code> it is the new name of an option that has been +renamed.</li> +</ul></td> + </tr> + + + </tbody> +</table> + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="uci.js.html">uci.js</a>, <a href="uci.js.html#line887">line 887</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + +<h4 class="name" id=".SectionObject">SectionObject</h4> + + + + +<div class="description"> + <p>A section object represents the options and their corresponding values +enclosed within a configuration section, as well as some additional +meta data such as sort indexes and internal ID.</p> +<p>Any internal metadata fields are prefixed with a dot which is isn't +an allowed character for normal option names.</p> +</div> + + + + <h5>Type:</h5> + <ul> + <li> + +<span class="param-type">Object.<string, (boolean|number|string|Array.<string>)></span> + + + </li> + </ul> + + + + + + <h5 class="subsection-title">Properties:</h5> + + + +<table class="props"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>.anonymous</code></td> + + + <td class="type"> + + +<span class="param-type">boolean</span> + + + + </td> + + + + + + <td class="description last"><p>The <code>.anonymous</code> property specifies whether the configuration is +anonymous (<code>true</code>) or named (<code>false</code>).</p></td> + </tr> + + + + <tr> + + <td class="name"><code>.index</code></td> + + + <td class="type"> + + +<span class="param-type">number</span> + + + + </td> + + + + + + <td class="description last"><p>The <code>.index</code> property specifes the sort order of the section.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>.name</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + + + + <td class="description last"><p>The <code>.name</code> property holds the name of the section object. It may be +either an anonymous ID in the form <code>cfgXXXXXX</code> or <code>newXXXXXX</code> with <code>X</code> +being a hexadecimal digit or a string holding the name of the section.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>.type</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + + + + <td class="description last"><p>The <code>.type</code> property contains the type of the corresponding uci +section.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>*</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> +| + +<span class="param-type">Array.<string></span> + + + + </td> + + + + + + <td class="description last"><p>A section object may contain an arbitrary number of further properties +representing the uci option enclosed in the section.</p> +<p>All option property names will be in the form <code>[A-Za-z0-9_]+</code> and +either contain a string value or an array of strings, in case the +underlying option is an UCI list.</p></td> + </tr> + + + </tbody> +</table> + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="uci.js.html">uci.js</a>, <a href="uci.js.html#line316">line 316</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + <h4 class="name" id="~sectionsFn"><span class="type-signature"></span>sectionsFn<span class="signature">(section, sid)</span><span class="type-signature"></span></h4> + + + + + + +<div class="description"> + <p>The sections callback is invoked for each section found within +the given configuration and receives the section object and its +associated name as arguments.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>section</code></td> + + + <td class="type"> + + +<span class="param-type"><a href="LuCI.uci.html#.SectionObject">LuCI.uci.SectionObject</a></span> + + + + </td> + + + + + + <td class="description last"><p>The section object.</p></td> + </tr> + + + + <tr> + + <td class="name"><code>sid</code></td> + + + <td class="type"> + + +<span class="param-type">string</span> + + + + </td> + + + + + + <td class="description last"><p>The name or ID of the section.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="uci.js.html">uci.js</a>, <a href="uci.js.html#line352">line 352</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + + + + + + + + + + +</article> + +</section> + + + + +</div> + +<nav> + <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="LuCI.html">LuCI</a></li><li><a href="LuCI.Class.html">Class</a></li><li><a href="LuCI.dom.html">dom</a></li><li><a href="LuCI.fs.html">fs</a></li><li><a href="LuCI.Headers.html">Headers</a></li><li><a href="LuCI.Network.html">Network</a></li><li><a href="LuCI.Network.Device.html">Device</a></li><li><a href="LuCI.Network.Hosts.html">Hosts</a></li><li><a href="LuCI.Network.Protocol.html">Protocol</a></li><li><a href="LuCI.Network.WifiDevice.html">WifiDevice</a></li><li><a href="LuCI.Network.WifiNetwork.html">WifiNetwork</a></li><li><a href="LuCI.Poll.html">Poll</a></li><li><a href="LuCI.Request.html">Request</a></li><li><a href="LuCI.Request.poll.html">poll</a></li><li><a href="LuCI.Response.html">Response</a></li><li><a href="LuCI.rpc.html">rpc</a></li><li><a href="LuCI.uci.html">uci</a></li><li><a href="LuCI.view.html">view</a></li><li><a href="LuCI.XHR.html">XHR</a></li></ul> +</nav> + +<br class="clear"> + +<footer> + Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a> on Tue Nov 05 2019 09:33:05 GMT+0100 (Central European Standard Time) +</footer> + +<script> prettyPrint(); </script> +<script src="scripts/linenumber.js"> </script> +</body> +</html>
\ No newline at end of file diff --git a/documentation/jsapi/LuCI.view.html b/documentation/jsapi/LuCI.view.html new file mode 100644 index 000000000..4a7209ceb --- /dev/null +++ b/documentation/jsapi/LuCI.view.html @@ -0,0 +1,1125 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="utf-8"> + <title>JSDoc: Class: view</title> + + <script src="scripts/prettify/prettify.js"> </script> + <script src="scripts/prettify/lang-css.js"> </script> + <!--[if lt IE 9]> + <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script> + <![endif]--> + <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css"> + <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css"> +</head> + +<body> + +<div id="main"> + + <h1 class="page-title">Class: view</h1> + + + + + + +<section> + +<header> + + <h2><span class="attribs"><span class="type-signature"></span></span> + <span class="ancestors"><a href="LuCI.html">LuCI</a>.</span>view</h2> + + <div class="class-description"><p>The <code>view</code> class forms the basis of views and provides a standard +set of methods to inherit from.</p></div> + + +</header> + +<article> + <div class="container-overview"> + + + + + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line2687">line 2687</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + + + + + + + + </div> + + + + + + + + + + + + + + + + + <h3 class="subsection-title">Methods</h3> + + + + + + + + <h4 class="name" id="addFooter"><span class="type-signature"></span>addFooter<span class="signature">()</span><span class="type-signature"> → {DocumentFragment}</span></h4> + + + + + + +<div class="description"> + <p>Renders a standard page action footer if any of the +<code>handleSave()</code>, <code>handleSaveApply()</code> or <code>handleReset()</code> +functions are defined.</p> +<p>The default implementation should be sufficient for most +views - it will render a standard page footer with action +buttons labeled <code>Save</code>, <code>Save & Apply</code> and <code>Reset</code> +triggering the <code>handleSave()</code>, <code>handleSaveApply()</code> and +<code>handleReset()</code> functions respectively.</p> +<p>When any of these <code>handle*()</code> functions is overwritten +with <code>null</code> by a view extending this class, the +corresponding button will not be rendered.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line2905">line 2905</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Returns a <code>DocumentFragment</code> containing the footer bar +with buttons for each corresponding <code>handle*()</code> action +or an empty <code>DocumentFragment</code> if all three <code>handle*()</code> +methods are overwritten with <code>null</code>.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">DocumentFragment</span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="handleReset"><span class="type-signature"></span>handleReset<span class="signature">(ev)</span><span class="type-signature"> → {*|Promise.<*>}</span></h4> + + + + + + +<div class="description"> + <p>The handleReset function is invoked when the user clicks +the <code>Reset</code> button in the page action footer.</p> +<p>The default implementation should be sufficient for most +views using <code>form.Map()</code> based forms - it +will iterate all forms present in the view and invoke +the <code>Map.reset()</code> method on each form.</p> +<p>Views not using <code>Map</code> instances or requiring other special +logic should overwrite <code>handleReset()</code> with a custom +implementation.</p> +<p>To disable the <code>Reset</code> page footer button, views extending +this base class should overwrite the <code>handleReset</code> function +with <code>null</code>.</p> +<p>The invocation of this function is wrapped by +<code>Promise.resolve()</code> so it may return Promises if needed.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>ev</code></td> + + + <td class="type"> + + +<span class="param-type">Event</span> + + + + </td> + + + + + + <td class="description last"><p>The DOM event that triggered the function.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line2871">line 2871</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Any return values of this function are discarded, but +passed through <code>Promise.resolve()</code> to ensure that any +returned promise runs to completion before the button +is reenabled.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">*</span> +| + +<span class="param-type">Promise.<*></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="handleSave"><span class="type-signature"></span>handleSave<span class="signature">(ev)</span><span class="type-signature"> → {*|Promise.<*>}</span></h4> + + + + + + +<div class="description"> + <p>The handleSave function is invoked when the user clicks +the <code>Save</code> button in the page action footer.</p> +<p>The default implementation should be sufficient for most +views using <code>form.Map()</code> based forms - it +will iterate all forms present in the view and invoke +the <code>Map.save()</code> method on each form.</p> +<p>Views not using <code>Map</code> instances or requiring other special +logic should overwrite <code>handleSave()</code> with a custom +implementation.</p> +<p>To disable the <code>Save</code> page footer button, views extending +this base class should overwrite the <code>handleSave</code> function +with <code>null</code>.</p> +<p>The invocation of this function is wrapped by +<code>Promise.resolve()</code> so it may return Promises if needed.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>ev</code></td> + + + <td class="type"> + + +<span class="param-type">Event</span> + + + + </td> + + + + + + <td class="description last"><p>The DOM event that triggered the function.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line2790">line 2790</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Any return values of this function are discarded, but +passed through <code>Promise.resolve()</code> to ensure that any +returned promise runs to completion before the button +is reenabled.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">*</span> +| + +<span class="param-type">Promise.<*></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="handleSaveApply"><span class="type-signature"></span>handleSaveApply<span class="signature">(ev)</span><span class="type-signature"> → {*|Promise.<*>}</span></h4> + + + + + + +<div class="description"> + <p>The handleSaveApply function is invoked when the user clicks +the <code>Save & Apply</code> button in the page action footer.</p> +<p>The default implementation should be sufficient for most +views using <code>form.Map()</code> based forms - it +will first invoke +<code>view.handleSave()</code> and then +call <code>ui.changes.apply()</code> to start the +modal config apply and page reload flow.</p> +<p>Views not using <code>Map</code> instances or requiring other special +logic should overwrite <code>handleSaveApply()</code> with a custom +implementation.</p> +<p>To disable the <code>Save & Apply</code> page footer button, views +extending this base class should overwrite the +<code>handleSaveApply</code> function with <code>null</code>.</p> +<p>The invocation of this function is wrapped by +<code>Promise.resolve()</code> so it may return Promises if needed.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>ev</code></td> + + + <td class="type"> + + +<span class="param-type">Event</span> + + + + </td> + + + + + + <td class="description last"><p>The DOM event that triggered the function.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line2834">line 2834</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Any return values of this function are discarded, but +passed through <code>Promise.resolve()</code> to ensure that any +returned promise runs to completion before the button +is reenabled.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">*</span> +| + +<span class="param-type">Promise.<*></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="load"><span class="type-signature">(abstract) </span>load<span class="signature">()</span><span class="type-signature"> → {*|Promise.<*>}</span></h4> + + + + + + +<div class="description"> + <p>The load function is invoked before the view is rendered.</p> +<p>The invocation of this function is wrapped by +<code>Promise.resolve()</code> so it may return Promises if needed.</p> +<p>The return value of the function (or the resolved values +of the promise returned by it) will be passed as first +argument to <code>render()</code>.</p> +<p>This function is supposed to be overwritten by subclasses, +the default implementation does nothing.</p> +</div> + + + + + + + + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line2725">line 2725</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>May return any value or a Promise resolving to any value.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">*</span> +| + +<span class="param-type">Promise.<*></span> + + + </dd> +</dl> + + + + + + + + + + + + + + <h4 class="name" id="render"><span class="type-signature">(abstract) </span>render<span class="signature">(load_results)</span><span class="type-signature"> → {Node|Promise.<Node>}</span></h4> + + + + + + +<div class="description"> + <p>The render function is invoked after the +<a href="LuCI.view.html#load"><code>load()</code></a> function and responsible +for setting up the view contents. It must return a DOM +<code>Node</code> or <code>DocumentFragment</code> holding the contents to +insert into the view area.</p> +<p>The invocation of this function is wrapped by +<code>Promise.resolve()</code> so it may return Promises if needed.</p> +<p>The return value of the function (or the resolved values +of the promise returned by it) will be inserted into the +main content area using +<a href="LuCI.dom.html#append"><code>dom.append()</code></a>.</p> +<p>This function is supposed to be overwritten by subclasses, +the default implementation does nothing.</p> +</div> + + + + + + + + + + <h5>Parameters:</h5> + + +<table class="params"> + <thead> + <tr> + + <th>Name</th> + + + <th>Type</th> + + + + + + <th class="last">Description</th> + </tr> + </thead> + + <tbody> + + + <tr> + + <td class="name"><code>load_results</code></td> + + + <td class="type"> + + +<span class="param-type">*</span> +| + +<span class="param-type">null</span> + + + + </td> + + + + + + <td class="description last"><p>This function will receive the return value of the +<a href="LuCI.view.html#load"><code>view.load()</code></a> function as first +argument.</p></td> + </tr> + + + </tbody> +</table> + + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line2757">line 2757</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + + + + + + + + + + + +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Should return a DOM <code>Node</code> value or a <code>Promise</code> resolving +to a <code>Node</code> value.</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">Node</span> +| + +<span class="param-type">Promise.<Node></span> + + + </dd> +</dl> + + + + + + + + + + + + + +</article> + +</section> + + + + +</div> + +<nav> + <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="LuCI.html">LuCI</a></li><li><a href="LuCI.Class.html">Class</a></li><li><a href="LuCI.dom.html">dom</a></li><li><a href="LuCI.fs.html">fs</a></li><li><a href="LuCI.Headers.html">Headers</a></li><li><a href="LuCI.Network.html">Network</a></li><li><a href="LuCI.Network.Device.html">Device</a></li><li><a href="LuCI.Network.Hosts.html">Hosts</a></li><li><a href="LuCI.Network.Protocol.html">Protocol</a></li><li><a href="LuCI.Network.WifiDevice.html">WifiDevice</a></li><li><a href="LuCI.Network.WifiNetwork.html">WifiNetwork</a></li><li><a href="LuCI.Poll.html">Poll</a></li><li><a href="LuCI.Request.html">Request</a></li><li><a href="LuCI.Request.poll.html">poll</a></li><li><a href="LuCI.Response.html">Response</a></li><li><a href="LuCI.rpc.html">rpc</a></li><li><a href="LuCI.uci.html">uci</a></li><li><a href="LuCI.view.html">view</a></li><li><a href="LuCI.XHR.html">XHR</a></li></ul> +</nav> + +<br class="clear"> + +<footer> + Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a> on Tue Nov 05 2019 09:33:05 GMT+0100 (Central European Standard Time) +</footer> + +<script> prettyPrint(); </script> +<script src="scripts/linenumber.js"> </script> +</body> +</html>
\ No newline at end of file diff --git a/documentation/jsapi/fonts/OpenSans-Bold-webfont.eot b/documentation/jsapi/fonts/OpenSans-Bold-webfont.eot Binary files differnew file mode 100644 index 000000000..5d20d9163 --- /dev/null +++ b/documentation/jsapi/fonts/OpenSans-Bold-webfont.eot diff --git a/documentation/jsapi/fonts/OpenSans-Bold-webfont.svg b/documentation/jsapi/fonts/OpenSans-Bold-webfont.svg new file mode 100644 index 000000000..3ed7be4bc --- /dev/null +++ b/documentation/jsapi/fonts/OpenSans-Bold-webfont.svg @@ -0,0 +1,1830 @@ +<?xml version="1.0" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" > +<svg xmlns="http://www.w3.org/2000/svg"> +<metadata></metadata> +<defs> +<font id="open_sansbold" horiz-adv-x="1169" > +<font-face units-per-em="2048" ascent="1638" descent="-410" /> +<missing-glyph horiz-adv-x="532" /> +<glyph unicode="fi" horiz-adv-x="1417" d="M41 0zM778 889h-264v-889h-305v889h-168v147l168 82v82q0 191 94 279t301 88q158 0 281 -47l-78 -224q-92 29 -170 29q-65 0 -94 -38.5t-29 -98.5v-70h264v-229zM940 1407q0 149 166 149t166 -149q0 -71 -41.5 -110.5t-124.5 -39.5q-166 0 -166 150zM1258 0h-305v1118 h305v-1118z" /> +<glyph unicode="fl" horiz-adv-x="1417" d="M41 0zM778 889h-264v-889h-305v889h-168v147l168 82v82q0 191 94 279t301 88q158 0 281 -47l-78 -224q-92 29 -170 29q-65 0 -94 -38.5t-29 -98.5v-70h264v-229zM1258 0h-305v1556h305v-1556z" /> +<glyph unicode="ffi" horiz-adv-x="2208" d="M41 0zM778 889h-264v-889h-305v889h-168v147l168 82v82q0 191 94 279t301 88q158 0 281 -47l-78 -224q-92 29 -170 29q-65 0 -94 -38.5t-29 -98.5v-70h264v-229zM1571 889h-264v-889h-305v889h-168v147l168 82v82q0 191 94 279t301 88q158 0 281 -47l-78 -224 q-92 29 -170 29q-65 0 -94 -38.5t-29 -98.5v-70h264v-229zM1730 1407q0 149 166 149t166 -149q0 -71 -41.5 -110.5t-124.5 -39.5q-166 0 -166 150zM2048 0h-305v1118h305v-1118z" /> +<glyph unicode="ffl" horiz-adv-x="2208" d="M41 0zM778 889h-264v-889h-305v889h-168v147l168 82v82q0 191 94 279t301 88q158 0 281 -47l-78 -224q-92 29 -170 29q-65 0 -94 -38.5t-29 -98.5v-70h264v-229zM1571 889h-264v-889h-305v889h-168v147l168 82v82q0 191 94 279t301 88q158 0 281 -47l-78 -224 q-92 29 -170 29q-65 0 -94 -38.5t-29 -98.5v-70h264v-229zM2048 0h-305v1556h305v-1556z" /> +<glyph horiz-adv-x="2048" /> +<glyph horiz-adv-x="2048" /> +<glyph unicode="
" horiz-adv-x="1044" /> +<glyph unicode=" " horiz-adv-x="532" /> +<glyph unicode="	" horiz-adv-x="532" /> +<glyph unicode=" " horiz-adv-x="532" /> +<glyph unicode="!" horiz-adv-x="586" d="M416 485h-244l-51 977h346zM117 143q0 84 45 127t131 43q83 0 128.5 -44t45.5 -126q0 -79 -46 -124.5t-128 -45.5q-84 0 -130 44.5t-46 125.5z" /> +<glyph unicode=""" horiz-adv-x="967" d="M412 1462l-41 -528h-197l-41 528h279zM834 1462l-41 -528h-197l-41 528h279z" /> +<glyph unicode="#" horiz-adv-x="1323" d="M999 844l-47 -232h258v-206h-297l-77 -406h-220l78 406h-194l-76 -406h-215l74 406h-238v206h277l47 232h-252v209h289l77 407h219l-77 -407h198l78 407h215l-78 -407h240v-209h-279zM539 612h196l47 232h-196z" /> +<glyph unicode="$" d="M1092 457q0 -159 -115 -255.5t-322 -115.5v-205h-137v201q-244 5 -428 86v264q87 -43 209.5 -76t218.5 -39v310l-67 26q-198 78 -280.5 169.5t-82.5 226.5q0 145 113.5 238.5t316.5 113.5v153h137v-149q229 -10 414 -92l-94 -234q-156 64 -320 78v-295 q195 -75 277.5 -130t121 -121t38.5 -154zM791 442q0 42 -34 71t-102 60v-249q136 23 136 118zM389 1049q0 -44 30.5 -72.5t98.5 -58.5v235q-129 -19 -129 -104z" /> +<glyph unicode="%" horiz-adv-x="1845" d="M315 1024q0 -127 22.5 -189.5t72.5 -62.5q96 0 96 252q0 250 -96 250q-50 0 -72.5 -61.5t-22.5 -188.5zM758 1026q0 -230 -89 -345.5t-261 -115.5q-165 0 -255 118.5t-90 342.5q0 457 345 457q169 0 259.5 -118.5t90.5 -338.5zM1446 1462l-811 -1462h-240l811 1462h240z M1339 440q0 -127 22.5 -189.5t72.5 -62.5q96 0 96 252q0 250 -96 250q-50 0 -72.5 -61.5t-22.5 -188.5zM1782 442q0 -229 -89 -344.5t-261 -115.5q-165 0 -255 118.5t-90 341.5q0 457 345 457q169 0 259.5 -118.5t90.5 -338.5z" /> +<glyph unicode="&" horiz-adv-x="1536" d="M1536 0h-377l-115 113q-191 -133 -432 -133q-244 0 -387 112t-143 303q0 137 60.5 233.5t207.5 180.5q-75 86 -109 164.5t-34 171.5q0 152 116.5 245t311.5 93q186 0 297.5 -86.5t111.5 -231.5q0 -119 -69 -217.5t-223 -187.5l284 -277q71 117 123 301h318 q-36 -135 -99 -263.5t-143 -227.5zM403 424q0 -86 64.5 -137t165.5 -51q126 0 227 61l-332 330q-58 -44 -91.5 -92t-33.5 -111zM762 1133q0 53 -36 83.5t-93 30.5q-67 0 -105.5 -32t-38.5 -91q0 -88 95 -194q86 48 132 94.5t46 108.5z" /> +<glyph unicode="'" horiz-adv-x="545" d="M412 1462l-41 -528h-197l-41 528h279z" /> +<glyph unicode="(" horiz-adv-x="694" d="M82 561q0 265 77.5 496t223.5 405h250q-141 -193 -213 -424t-72 -475q0 -245 73.5 -473.5t209.5 -413.5h-248q-147 170 -224 397t-77 488z" /> +<glyph unicode=")" horiz-adv-x="694" d="M612 561q0 -263 -77.5 -490t-223.5 -395h-248q135 184 209 412.5t74 474.5q0 244 -72 475t-213 424h250q147 -175 224 -406.5t77 -494.5z" /> +<glyph unicode="*" horiz-adv-x="1116" d="M688 1556l-41 -368l373 104l33 -252l-340 -24l223 -297l-227 -121l-156 313l-137 -311l-236 119l221 297l-338 26l39 250l365 -104l-41 368h262z" /> +<glyph unicode="+" d="M475 612h-387v219h387v390h219v-390h387v-219h-387v-385h-219v385z" /> +<glyph unicode="," horiz-adv-x="594" d="M459 215q-52 -202 -176 -479h-220q65 266 101 502h280z" /> +<glyph unicode="-" horiz-adv-x="659" d="M61 424v250h537v-250h-537z" /> +<glyph unicode="." horiz-adv-x="584" d="M117 143q0 84 45 127t131 43q83 0 128.5 -44t45.5 -126q0 -79 -46 -124.5t-128 -45.5q-84 0 -130 44.5t-46 125.5z" /> +<glyph unicode="/" horiz-adv-x="846" d="M836 1462l-545 -1462h-277l545 1462h277z" /> +<glyph unicode="0" d="M1096 731q0 -383 -125.5 -567t-386.5 -184q-253 0 -381.5 190t-128.5 561q0 387 125 570.5t385 183.5q253 0 382.5 -192t129.5 -562zM381 731q0 -269 46.5 -385.5t156.5 -116.5q108 0 156 118t48 384q0 269 -48.5 386.5t-155.5 117.5q-109 0 -156 -117.5t-47 -386.5z" /> +<glyph unicode="1" d="M846 0h-309v846l3 139l5 152q-77 -77 -107 -101l-168 -135l-149 186l471 375h254v-1462z" /> +<glyph unicode="2" d="M1104 0h-1022v215l367 371q163 167 213 231.5t72 119.5t22 114q0 88 -48.5 131t-129.5 43q-85 0 -165 -39t-167 -111l-168 199q108 92 179 130t155 58.5t188 20.5q137 0 242 -50t163 -140t58 -206q0 -101 -35.5 -189.5t-110 -181.5t-262.5 -265l-188 -177v-14h637v-260z " /> +<glyph unicode="3" d="M1047 1135q0 -137 -83 -233t-233 -132v-6q177 -22 268 -107.5t91 -230.5q0 -211 -153 -328.5t-437 -117.5q-238 0 -422 79v263q85 -43 187 -70t202 -27q153 0 226 52t73 167q0 103 -84 146t-268 43h-111v237h113q170 0 248.5 44.5t78.5 152.5q0 166 -208 166 q-72 0 -146.5 -24t-165.5 -83l-143 213q200 144 477 144q227 0 358.5 -92t131.5 -256z" /> +<glyph unicode="4" d="M1137 303h-176v-303h-302v303h-624v215l641 944h285v-919h176v-240zM659 543v248q0 62 5 180t8 137h-8q-37 -82 -89 -160l-268 -405h352z" /> +<glyph unicode="5" d="M614 934q212 0 337.5 -119t125.5 -326q0 -245 -151 -377t-432 -132q-244 0 -394 79v267q79 -42 184 -68.5t199 -26.5q283 0 283 232q0 221 -293 221q-53 0 -117 -10.5t-104 -22.5l-123 66l55 745h793v-262h-522l-27 -287l35 7q61 14 151 14z" /> +<glyph unicode="6" d="M72 621q0 434 183.5 646t549.5 212q125 0 196 -15v-247q-89 20 -176 20q-159 0 -259.5 -48t-150.5 -142t-59 -267h13q99 170 317 170q196 0 307 -123t111 -340q0 -234 -132 -370.5t-366 -136.5q-162 0 -282.5 75t-186 219t-65.5 347zM600 227q99 0 152 66.5t53 189.5 q0 107 -49.5 168.5t-149.5 61.5q-94 0 -160.5 -61t-66.5 -142q0 -119 62.5 -201t158.5 -82z" /> +<glyph unicode="7" d="M227 0l549 1200h-721v260h1049v-194l-553 -1266h-324z" /> +<glyph unicode="8" d="M586 1481q210 0 338.5 -95.5t128.5 -257.5q0 -112 -62 -199.5t-200 -156.5q164 -88 235.5 -183.5t71.5 -209.5q0 -180 -141 -289.5t-371 -109.5q-240 0 -377 102t-137 289q0 125 66.5 222t213.5 171q-125 79 -180 169t-55 197q0 157 130 254t339 97zM358 389 q0 -86 60 -134t164 -48q115 0 172 49.5t57 130.5q0 67 -56.5 125.5t-183.5 124.5q-213 -98 -213 -248zM584 1255q-79 0 -127.5 -40.5t-48.5 -108.5q0 -60 38.5 -107.5t139.5 -97.5q98 46 137 94t39 111q0 69 -50 109t-128 40z" /> +<glyph unicode="9" d="M1098 838q0 -432 -182 -645t-551 -213q-130 0 -197 14v248q84 -21 176 -21q155 0 255 45.5t153 143t61 268.5h-12q-58 -94 -134 -132t-190 -38q-191 0 -301 122.5t-110 340.5q0 235 133.5 371.5t363.5 136.5q162 0 283.5 -76t186.5 -220.5t65 -344.5zM569 1231 q-96 0 -150 -66t-54 -190q0 -106 49 -168t149 -62q94 0 161 61.5t67 141.5q0 119 -62.5 201t-159.5 82z" /> +<glyph unicode=":" horiz-adv-x="584" d="M117 143q0 84 45 127t131 43q83 0 128.5 -44t45.5 -126q0 -79 -46 -124.5t-128 -45.5q-84 0 -130 44.5t-46 125.5zM117 969q0 84 45 127t131 43q83 0 128.5 -44t45.5 -126q0 -81 -46.5 -125.5t-127.5 -44.5q-84 0 -130 44t-46 126z" /> +<glyph unicode=";" horiz-adv-x="594" d="M444 238l15 -23q-52 -202 -176 -479h-220q65 266 101 502h280zM117 969q0 84 45 127t131 43q83 0 128.5 -44t45.5 -126q0 -81 -46.5 -125.5t-127.5 -44.5q-84 0 -130 44t-46 126z" /> +<glyph unicode="<" d="M1081 203l-993 438v143l993 496v-240l-684 -317l684 -281v-239z" /> +<glyph unicode="=" d="M88 805v219h993v-219h-993zM88 418v219h993v-219h-993z" /> +<glyph unicode=">" d="M88 442l684 281l-684 317v240l993 -496v-143l-993 -438v239z" /> +<glyph unicode="?" horiz-adv-x="977" d="M276 485v74q0 96 41 167t150 151q105 75 138.5 122t33.5 105q0 65 -48 99t-134 34q-150 0 -342 -98l-109 219q223 125 473 125q206 0 327.5 -99t121.5 -264q0 -110 -50 -190t-190 -180q-96 -71 -121.5 -108t-25.5 -97v-60h-265zM244 143q0 84 45 127t131 43 q83 0 128.5 -44t45.5 -126q0 -79 -46 -124.5t-128 -45.5q-84 0 -130 44.5t-46 125.5z" /> +<glyph unicode="@" horiz-adv-x="1837" d="M1735 752q0 -144 -46 -263.5t-130 -187.5t-195 -68q-74 0 -131 35.5t-82 93.5h-16q-108 -129 -275 -129q-177 0 -279 106.5t-102 291.5q0 211 134 340t350 129q86 0 189.5 -16.5t170.5 -39.5l-23 -489q0 -139 76 -139q64 0 102 93.5t38 244.5q0 161 -67 284.5 t-188.5 188.5t-277.5 65q-202 0 -351 -83t-228.5 -239.5t-79.5 -361.5q0 -276 147.5 -423.5t427.5 -147.5q106 0 233 23.5t250 68.5v-192q-214 -91 -475 -91q-380 0 -592.5 200t-212.5 556q0 247 108.5 448.5t309 316t461.5 114.5q220 0 393 -90t267 -256t94 -383zM711 627 q0 -211 172 -211q90 0 137 63.5t57 206.5l13 221q-51 11 -115 11q-125 0 -194.5 -78t-69.5 -213z" /> +<glyph unicode="A" horiz-adv-x="1413" d="M1079 0l-106 348h-533l-106 -348h-334l516 1468h379l518 -1468h-334zM899 608q-147 473 -165.5 535t-26.5 98q-33 -128 -189 -633h381z" /> +<glyph unicode="B" horiz-adv-x="1376" d="M184 1462h455q311 0 451.5 -88.5t140.5 -281.5q0 -131 -61.5 -215t-163.5 -101v-10q139 -31 200.5 -116t61.5 -226q0 -200 -144.5 -312t-392.5 -112h-547v1462zM494 883h180q126 0 182.5 39t56.5 129q0 84 -61.5 120.5t-194.5 36.5h-163v-325zM494 637v-381h202 q128 0 189 49t61 150q0 182 -260 182h-192z" /> +<glyph unicode="C" horiz-adv-x="1305" d="M805 1225q-175 0 -271 -131.5t-96 -366.5q0 -489 367 -489q154 0 373 77v-260q-180 -75 -402 -75q-319 0 -488 193.5t-169 555.5q0 228 83 399.5t238.5 263t364.5 91.5q213 0 428 -103l-100 -252q-82 39 -165 68t-163 29z" /> +<glyph unicode="D" horiz-adv-x="1516" d="M1397 745q0 -361 -205.5 -553t-593.5 -192h-414v1462h459q358 0 556 -189t198 -528zM1075 737q0 471 -416 471h-165v-952h133q448 0 448 481z" /> +<glyph unicode="E" horiz-adv-x="1147" d="M1026 0h-842v1462h842v-254h-532v-321h495v-254h-495v-377h532v-256z" /> +<glyph unicode="F" horiz-adv-x="1124" d="M489 0h-305v1462h838v-254h-533v-377h496v-253h-496v-578z" /> +<glyph unicode="G" horiz-adv-x="1483" d="M739 821h580v-758q-141 -46 -265.5 -64.5t-254.5 -18.5q-331 0 -505.5 194.5t-174.5 558.5q0 354 202.5 552t561.5 198q225 0 434 -90l-103 -248q-160 80 -333 80q-201 0 -322 -135t-121 -363q0 -238 97.5 -363.5t283.5 -125.5q97 0 197 20v305h-277v258z" /> +<glyph unicode="H" horiz-adv-x="1567" d="M1382 0h-309v631h-579v-631h-310v1462h310v-573h579v573h309v-1462z" /> +<glyph unicode="I" horiz-adv-x="678" d="M184 0v1462h310v-1462h-310z" /> +<glyph unicode="J" horiz-adv-x="678" d="M31 -430q-105 0 -183 22v258q80 -20 146 -20q102 0 146 63.5t44 198.5v1370h310v-1368q0 -256 -117 -390t-346 -134z" /> +<glyph unicode="K" horiz-adv-x="1360" d="M1360 0h-352l-383 616l-131 -94v-522h-310v1462h310v-669l122 172l396 497h344l-510 -647z" /> +<glyph unicode="L" horiz-adv-x="1157" d="M184 0v1462h310v-1206h593v-256h-903z" /> +<glyph unicode="M" horiz-adv-x="1931" d="M803 0l-352 1147h-9q19 -350 19 -467v-680h-277v1462h422l346 -1118h6l367 1118h422v-1462h-289v692q0 49 1.5 113t13.5 340h-9l-377 -1145h-284z" /> +<glyph unicode="N" horiz-adv-x="1665" d="M1481 0h-394l-636 1106h-9q19 -293 19 -418v-688h-277v1462h391l635 -1095h7q-15 285 -15 403v692h279v-1462z" /> +<glyph unicode="O" horiz-adv-x="1630" d="M1511 733q0 -363 -180 -558t-516 -195t-516 195t-180 560t180.5 557.5t517.5 192.5t515.5 -194t178.5 -558zM444 733q0 -245 93 -369t278 -124q371 0 371 493q0 494 -369 494q-185 0 -279 -124.5t-94 -369.5z" /> +<glyph unicode="P" horiz-adv-x="1286" d="M494 774h102q143 0 214 56.5t71 164.5q0 109 -59.5 161t-186.5 52h-141v-434zM1194 1006q0 -236 -147.5 -361t-419.5 -125h-133v-520h-310v1462h467q266 0 404.5 -114.5t138.5 -341.5z" /> +<glyph unicode="Q" horiz-adv-x="1630" d="M1511 733q0 -258 -91.5 -432.5t-268.5 -255.5l352 -393h-397l-268 328h-23q-336 0 -516 195t-180 560t180.5 557.5t517.5 192.5t515.5 -194t178.5 -558zM444 733q0 -245 93 -369t278 -124q371 0 371 493q0 494 -369 494q-185 0 -279 -124.5t-94 -369.5z" /> +<glyph unicode="R" horiz-adv-x="1352" d="M494 813h100q147 0 217 49t70 154q0 104 -71.5 148t-221.5 44h-94v-395zM494 561v-561h-310v1462h426q298 0 441 -108.5t143 -329.5q0 -129 -71 -229.5t-201 -157.5q330 -493 430 -637h-344l-349 561h-165z" /> +<glyph unicode="S" horiz-adv-x="1128" d="M1047 406q0 -198 -142.5 -312t-396.5 -114q-234 0 -414 88v288q148 -66 250.5 -93t187.5 -27q102 0 156.5 39t54.5 116q0 43 -24 76.5t-70.5 64.5t-189.5 99q-134 63 -201 121t-107 135t-40 180q0 194 131.5 305t363.5 111q114 0 217.5 -27t216.5 -76l-100 -241 q-117 48 -193.5 67t-150.5 19q-88 0 -135 -41t-47 -107q0 -41 19 -71.5t60.5 -59t196.5 -102.5q205 -98 281 -196.5t76 -241.5z" /> +<glyph unicode="T" horiz-adv-x="1186" d="M748 0h-310v1204h-397v258h1104v-258h-397v-1204z" /> +<glyph unicode="U" horiz-adv-x="1548" d="M1374 1462v-946q0 -162 -72.5 -284t-209.5 -187t-324 -65q-282 0 -438 144.5t-156 395.5v942h309v-895q0 -169 68 -248t225 -79q152 0 220.5 79.5t68.5 249.5v893h309z" /> +<glyph unicode="V" horiz-adv-x="1331" d="M1018 1462h313l-497 -1462h-338l-496 1462h313l275 -870q23 -77 47.5 -179.5t30.5 -142.5q11 92 75 322z" /> +<glyph unicode="W" horiz-adv-x="1980" d="M1608 0h-353l-198 768q-11 41 -37.5 169.5t-30.5 172.5q-6 -54 -30 -173.5t-37 -170.5l-197 -766h-352l-373 1462h305l187 -798q49 -221 71 -383q6 57 27.5 176.5t40.5 185.5l213 819h293l213 -819q14 -55 35 -168t32 -194q10 78 32 194.5t40 188.5l186 798h305z" /> +<glyph unicode="X" horiz-adv-x="1366" d="M1366 0h-354l-340 553l-340 -553h-332l485 754l-454 708h342l315 -526l309 526h334l-459 -725z" /> +<glyph unicode="Y" horiz-adv-x="1278" d="M639 860l305 602h334l-485 -893v-569h-308v559l-485 903h336z" /> +<glyph unicode="Z" horiz-adv-x="1186" d="M1137 0h-1088v201l701 1005h-682v256h1050v-200l-700 -1006h719v-256z" /> +<glyph unicode="[" horiz-adv-x="678" d="M627 -324h-484v1786h484v-211h-224v-1364h224v-211z" /> +<glyph unicode="\" horiz-adv-x="846" d="M289 1462l545 -1462h-277l-545 1462h277z" /> +<glyph unicode="]" horiz-adv-x="678" d="M51 -113h223v1364h-223v211h484v-1786h-484v211z" /> +<glyph unicode="^" horiz-adv-x="1090" d="M8 520l438 950h144l495 -950h-239l-322 643l-280 -643h-236z" /> +<glyph unicode="_" horiz-adv-x="842" d="M846 -324h-850v140h850v-140z" /> +<glyph unicode="`" horiz-adv-x="1243" d="M707 1241q-63 44 -185 142.5t-190 164.5v21h342q63 -101 235 -301v-27h-202z" /> +<glyph unicode="a" horiz-adv-x="1237" d="M870 0l-59 152h-8q-77 -97 -158.5 -134.5t-212.5 -37.5q-161 0 -253.5 92t-92.5 262q0 178 124.5 262.5t375.5 93.5l194 6v49q0 170 -174 170q-134 0 -315 -81l-101 206q193 101 428 101q225 0 345 -98t120 -298v-745h-213zM780 518l-118 -4q-133 -4 -198 -48t-65 -134 q0 -129 148 -129q106 0 169.5 61t63.5 162v92z" /> +<glyph unicode="b" horiz-adv-x="1296" d="M782 1139q198 0 310 -154.5t112 -423.5q0 -277 -115.5 -429t-314.5 -152q-197 0 -309 143h-21l-51 -123h-233v1556h305v-362q0 -69 -12 -221h12q107 166 317 166zM684 895q-113 0 -165 -69.5t-54 -229.5v-33q0 -180 53.5 -258t169.5 -78q94 0 149.5 86.5t55.5 251.5 t-56 247.5t-153 82.5z" /> +<glyph unicode="c" horiz-adv-x="1053" d="M614 -20q-522 0 -522 573q0 285 142 435.5t407 150.5q194 0 348 -76l-90 -236q-72 29 -134 47.5t-124 18.5q-238 0 -238 -338q0 -328 238 -328q88 0 163 23.5t150 73.5v-261q-74 -47 -149.5 -65t-190.5 -18z" /> +<glyph unicode="d" horiz-adv-x="1296" d="M514 -20q-197 0 -309.5 153t-112.5 424q0 275 114.5 428.5t315.5 153.5q211 0 322 -164h10q-23 125 -23 223v358h306v-1556h-234l-59 145h-13q-104 -165 -317 -165zM621 223q117 0 171.5 68t59.5 231v33q0 180 -55.5 258t-180.5 78q-102 0 -158.5 -86.5t-56.5 -251.5 t57 -247.5t163 -82.5z" /> +<glyph unicode="e" horiz-adv-x="1210" d="M623 922q-97 0 -152 -61.5t-63 -174.5h428q-2 113 -59 174.5t-154 61.5zM666 -20q-270 0 -422 149t-152 422q0 281 140.5 434.5t388.5 153.5q237 0 369 -135t132 -373v-148h-721q5 -130 77 -203t202 -73q101 0 191 21t188 67v-236q-80 -40 -171 -59.5t-222 -19.5z" /> +<glyph unicode="f" horiz-adv-x="793" d="M778 889h-264v-889h-305v889h-168v147l168 82v82q0 191 94 279t301 88q158 0 281 -47l-78 -224q-92 29 -170 29q-65 0 -94 -38.5t-29 -98.5v-70h264v-229z" /> +<glyph unicode="g" horiz-adv-x="1157" d="M1133 1118v-155l-175 -45q48 -75 48 -168q0 -180 -125.5 -280.5t-348.5 -100.5l-55 3l-45 5q-47 -36 -47 -80q0 -66 168 -66h190q184 0 280.5 -79t96.5 -232q0 -196 -163.5 -304t-469.5 -108q-234 0 -357.5 81.5t-123.5 228.5q0 101 63 169t185 97q-47 20 -82 65.5 t-35 96.5q0 64 37 106.5t107 83.5q-88 38 -139.5 122t-51.5 198q0 183 119 283t340 100q47 0 111.5 -8.5t82.5 -12.5h390zM270 -158q0 -63 60.5 -99t169.5 -36q164 0 257 45t93 123q0 63 -55 87t-170 24h-158q-84 0 -140.5 -39.5t-56.5 -104.5zM381 752q0 -91 41.5 -144 t126.5 -53q86 0 126 53t40 144q0 202 -166 202q-168 0 -168 -202z" /> +<glyph unicode="h" horiz-adv-x="1346" d="M1192 0h-305v653q0 242 -180 242q-128 0 -185 -87t-57 -282v-526h-305v1556h305v-317q0 -37 -7 -174l-7 -90h16q102 164 324 164q197 0 299 -106t102 -304v-729z" /> +<glyph unicode="i" horiz-adv-x="625" d="M147 1407q0 149 166 149t166 -149q0 -71 -41.5 -110.5t-124.5 -39.5q-166 0 -166 150zM465 0h-305v1118h305v-1118z" /> +<glyph unicode="j" horiz-adv-x="625" d="M70 -492q-117 0 -201 25v240q70 -19 143 -19q77 0 112.5 43t35.5 127v1194h305v-1239q0 -178 -103 -274.5t-292 -96.5zM147 1407q0 149 166 149t166 -149q0 -71 -41.5 -110.5t-124.5 -39.5q-166 0 -166 150z" /> +<glyph unicode="k" horiz-adv-x="1270" d="M453 608l133 170l313 340h344l-444 -485l471 -633h-352l-322 453l-131 -105v-348h-305v1556h305v-694l-16 -254h4z" /> +<glyph unicode="l" horiz-adv-x="625" d="M465 0h-305v1556h305v-1556z" /> +<glyph unicode="m" horiz-adv-x="2011" d="M1161 0h-305v653q0 121 -40.5 181.5t-127.5 60.5q-117 0 -170 -86t-53 -283v-526h-305v1118h233l41 -143h17q45 77 130 120.5t195 43.5q251 0 340 -164h27q45 78 132.5 121t197.5 43q190 0 287.5 -97.5t97.5 -312.5v-729h-306v653q0 121 -40.5 181.5t-127.5 60.5 q-112 0 -167.5 -80t-55.5 -254v-561z" /> +<glyph unicode="n" horiz-adv-x="1346" d="M1192 0h-305v653q0 121 -43 181.5t-137 60.5q-128 0 -185 -85.5t-57 -283.5v-526h-305v1118h233l41 -143h17q51 81 140.5 122.5t203.5 41.5q195 0 296 -105.5t101 -304.5v-729z" /> +<glyph unicode="o" horiz-adv-x="1268" d="M403 561q0 -166 54.5 -251t177.5 -85q122 0 175.5 84.5t53.5 251.5q0 166 -54 249t-177 83q-122 0 -176 -82.5t-54 -249.5zM1176 561q0 -273 -144 -427t-401 -154q-161 0 -284 70.5t-189 202.5t-66 308q0 274 143 426t402 152q161 0 284 -70t189 -201t66 -307z" /> +<glyph unicode="p" horiz-adv-x="1296" d="M774 -20q-197 0 -309 143h-16q16 -140 16 -162v-453h-305v1610h248l43 -145h14q107 166 317 166q198 0 310 -153t112 -425q0 -179 -52.5 -311t-149.5 -201t-228 -69zM684 895q-113 0 -165 -69.5t-54 -229.5v-33q0 -180 53.5 -258t169.5 -78q205 0 205 338 q0 165 -50.5 247.5t-158.5 82.5z" /> +<glyph unicode="q" horiz-adv-x="1296" d="M623 219q116 0 170 66.5t59 232.5v37q0 180 -55.5 258t-178.5 78q-215 0 -215 -338q0 -168 53.5 -251t166.5 -83zM514 -20q-198 0 -310 152.5t-112 424.5q0 274 114.5 428t313.5 154q106 0 185 -40t139 -124h8l27 143h258v-1610h-306v469q0 61 13 168h-13 q-49 -81 -130 -123t-187 -42z" /> +<glyph unicode="r" horiz-adv-x="930" d="M784 1139q62 0 103 -9l-23 -286q-37 10 -90 10q-146 0 -227.5 -75t-81.5 -210v-569h-305v1118h231l45 -188h15q52 94 140.5 151.5t192.5 57.5z" /> +<glyph unicode="s" horiz-adv-x="1018" d="M940 332q0 -172 -119.5 -262t-357.5 -90q-122 0 -208 16.5t-161 48.5v252q85 -40 191.5 -67t187.5 -27q166 0 166 96q0 36 -22 58.5t-76 51t-144 66.5q-129 54 -189.5 100t-88 105.5t-27.5 146.5q0 149 115.5 230.5t327.5 81.5q202 0 393 -88l-92 -220q-84 36 -157 59 t-149 23q-135 0 -135 -73q0 -41 43.5 -71t190.5 -89q131 -53 192 -99t90 -106t29 -143z" /> +<glyph unicode="t" horiz-adv-x="889" d="M631 223q80 0 192 35v-227q-114 -51 -280 -51q-183 0 -266.5 92.5t-83.5 277.5v539h-146v129l168 102l88 236h195v-238h313v-229h-313v-539q0 -65 36.5 -96t96.5 -31z" /> +<glyph unicode="u" horiz-adv-x="1346" d="M952 0l-41 143h-16q-49 -78 -139 -120.5t-205 -42.5q-197 0 -297 105.5t-100 303.5v729h305v-653q0 -121 43 -181.5t137 -60.5q128 0 185 85.5t57 283.5v526h305v-1118h-234z" /> +<glyph unicode="v" horiz-adv-x="1165" d="M426 0l-426 1118h319l216 -637q36 -121 45 -229h6q5 96 45 229l215 637h319l-426 -1118h-313z" /> +<glyph unicode="w" horiz-adv-x="1753" d="M1079 0l-86 391l-116 494h-7l-204 -885h-328l-318 1118h304l129 -495q31 -133 63 -367h6q4 76 35 241l16 85l138 536h336l131 -536q4 -22 12.5 -65t16.5 -91.5t14.5 -95t7.5 -74.5h6q9 72 32 197.5t33 169.5l134 495h299l-322 -1118h-332z" /> +<glyph unicode="x" horiz-adv-x="1184" d="M389 571l-360 547h346l217 -356l219 356h346l-364 -547l381 -571h-347l-235 383l-236 -383h-346z" /> +<glyph unicode="y" horiz-adv-x="1165" d="M0 1118h334l211 -629q27 -82 37 -194h6q11 103 43 194l207 629h327l-473 -1261q-65 -175 -185.5 -262t-281.5 -87q-79 0 -155 17v242q55 -13 120 -13q81 0 141.5 49.5t94.5 149.5l18 55z" /> +<glyph unicode="z" horiz-adv-x="999" d="M938 0h-883v180l518 705h-487v233h834v-198l-504 -687h522v-233z" /> +<glyph unicode="{" horiz-adv-x="807" d="M287 270q0 87 -65.5 133t-190.5 46v239q126 0 191 44t65 126v8v318q0 153 97 215.5t341 62.5v-225q-99 -3 -136.5 -38t-37.5 -103v-299q-6 -188 -234 -222v-12q234 -35 234 -212v-9v-299q0 -68 37 -103t137 -38v-226q-244 0 -341 62.5t-97 216.5v315z" /> +<glyph unicode="|" horiz-adv-x="1128" d="M455 1550h219v-2015h-219v2015z" /> +<glyph unicode="}" horiz-adv-x="807" d="M520 -45q0 -112 -41 -169t-135.5 -83.5t-261.5 -26.5v226q99 2 136.5 36t37.5 105v299v11q0 86 59 139.5t174 70.5v12q-227 34 -233 222v299q0 70 -37 104t-137 37v225q167 0 262 -26.5t135.5 -84t40.5 -167.5v-318v-10q0 -84 61.5 -126t194.5 -42v-239 q-125 0 -190.5 -41t-65.5 -138v-315z" /> +<glyph unicode="~" d="M322 672q-55 0 -117.5 -33.5t-116.5 -87.5v231q103 109 256 109q73 0 137.5 -16t139.5 -48q129 -55 227 -55q53 0 116 32t117 89v-231q-101 -109 -256 -109q-66 0 -126 13t-150 50q-131 56 -227 56z" /> +<glyph unicode="¡" horiz-adv-x="586" d="M168 606h244l51 -975h-346zM467 948q0 -84 -45 -127t-131 -43q-83 0 -128.5 44t-45.5 126q0 81 46.5 125.5t127.5 44.5q84 0 130 -44t46 -126z" /> +<glyph unicode="¢" d="M563 176q-420 59 -420 565q0 261 104.5 403t315.5 173v166h178v-158q166 -9 299 -74l-90 -235q-72 29 -134 47t-124 18q-121 0 -179 -83.5t-58 -254.5q0 -327 237 -327q82 0 148 15.5t166 60.5v-254q-127 -61 -265 -70v-188h-178v196z" /> +<glyph unicode="£" d="M700 1483q195 0 390 -82l-93 -230q-157 64 -272 64q-78 0 -120 -44.5t-42 -127.5v-193h375v-219h-375v-143q0 -170 -151 -248h718v-260h-1048v248q103 44 141.5 101t38.5 157v145h-178v219h178v195q0 201 114.5 309.5t323.5 108.5z" /> +<glyph unicode="¤" d="M188 723q0 102 54 197l-129 127l147 147l127 -127q91 53 197 53q105 0 196 -55l127 129l150 -143l-129 -129q53 -89 53 -199q0 -107 -53 -199l125 -125l-146 -145l-127 125q-95 -51 -196 -51q-115 0 -199 51l-125 -123l-145 145l127 125q-54 93 -54 197zM395 723 q0 -77 54.5 -132.5t134.5 -55.5q81 0 136.5 55t55.5 133q0 80 -56.5 135t-135.5 55q-78 0 -133.5 -56t-55.5 -134z" /> +<glyph unicode="¥" d="M584 860l264 602h313l-383 -747h195v-178h-246v-138h246v-178h-246v-221h-287v221h-247v178h247v138h-247v178h190l-377 747h316z" /> +<glyph unicode="¦" horiz-adv-x="1128" d="M455 1550h219v-815h-219v815zM455 350h219v-815h-219v815z" /> +<glyph unicode="§" horiz-adv-x="995" d="M121 805q0 79 36 144.5t97 105.5q-133 84 -133 233q0 131 111.5 210t293.5 79q170 0 363 -84l-82 -190q-68 32 -138.5 57.5t-148.5 25.5q-81 0 -118 -23t-37 -71q0 -49 49.5 -86t163.5 -82q163 -64 240 -148.5t77 -193.5q0 -177 -125 -260q62 -40 93.5 -92.5t31.5 -126.5 q0 -148 -119.5 -235.5t-320.5 -87.5q-203 0 -349 79v207q81 -41 180 -69.5t169 -28.5q194 0 194 117q0 39 -18.5 63t-63.5 49.5t-125 59.5q-183 74 -252 152.5t-69 195.5zM344 827q0 -67 65 -119t181 -98q78 57 78 146q0 68 -50.5 115t-183.5 96q-37 -14 -63.5 -53.5 t-26.5 -86.5z" /> +<glyph unicode="¨" horiz-adv-x="1243" d="M279 1405q0 65 37.5 100t101.5 35q66 0 103.5 -37t37.5 -98q0 -60 -38 -96.5t-103 -36.5q-64 0 -101.5 35t-37.5 98zM682 1405q0 70 40.5 102.5t100.5 32.5q65 0 103.5 -36t38.5 -99q0 -61 -39 -97t-103 -36q-60 0 -100.5 32.5t-40.5 100.5z" /> +<glyph unicode="©" horiz-adv-x="1704" d="M895 1010q-97 0 -150 -74t-53 -205q0 -280 203 -280q57 0 123 15t123 44v-191q-120 -57 -252 -57q-204 0 -316 125t-112 346q0 220 110.5 342.5t309.5 122.5q149 0 305 -78l-74 -168q-113 58 -217 58zM100 731q0 200 100 375t275 276t377 101q200 0 375 -100t276 -275 t101 -377q0 -197 -97 -370t-272 -277t-383 -104q-207 0 -382 103.5t-272.5 276.5t-97.5 371zM242 731q0 -164 82 -305.5t224 -223t304 -81.5q164 0 305.5 82t223 224t81.5 304q0 164 -82 305.5t-224 223t-304 81.5q-164 0 -305.5 -82t-223 -224t-81.5 -304z" /> +<glyph unicode="ª" horiz-adv-x="784" d="M561 764l-31 110q-43 -58 -105 -90t-136 -32q-117 0 -179.5 58.5t-62.5 164.5q0 109 82.5 163.5t267.5 63.5l99 4q0 117 -127 117q-81 0 -217 -61l-66 135q66 32 145.5 57t178.5 25q137 0 211.5 -71t74.5 -202v-442h-135zM252 977q0 -38 23 -56t55 -18q77 0 121.5 41.5 t44.5 106.5v36l-99 -6q-145 -10 -145 -104z" /> +<glyph unicode="«" horiz-adv-x="1260" d="M82 573l371 455l219 -119l-279 -348l279 -348l-219 -119l-371 453v26zM588 573l370 455l220 -119l-279 -348l279 -348l-220 -119l-370 453v26z" /> +<glyph unicode="¬" d="M1081 248h-219v364h-774v219h993v-583z" /> +<glyph unicode="­" horiz-adv-x="659" d="M61 424zM61 424v250h537v-250h-537z" /> +<glyph unicode="®" horiz-adv-x="1704" d="M1157 905q0 -170 -143 -233l237 -400h-254l-178 338h-47v-338h-229v916h264q181 0 265.5 -70t84.5 -213zM772 778h31q66 0 94.5 28.5t28.5 94.5q0 65 -28 92t-97 27h-29v-242zM100 731q0 200 100 375t275 276t377 101q200 0 375 -100t276 -275t101 -377q0 -197 -97 -370 t-272 -277t-383 -104q-207 0 -382 103.5t-272.5 276.5t-97.5 371zM242 731q0 -164 82 -305.5t224 -223t304 -81.5q164 0 305.5 82t223 224t81.5 304q0 164 -82 305.5t-224 223t-304 81.5q-164 0 -305.5 -82t-223 -224t-81.5 -304z" /> +<glyph unicode="¯" horiz-adv-x="1024" d="M1030 1556h-1036v201h1036v-201z" /> +<glyph unicode="°" horiz-adv-x="877" d="M92 1137q0 92 46 172t126 127t174 47q92 0 172.5 -46t127 -127t46.5 -173q0 -93 -46.5 -173.5t-126.5 -125.5t-173 -45q-145 0 -245.5 99.5t-100.5 244.5zM283 1137q0 -64 44.5 -109t110.5 -45t111 46t45 108q0 63 -45.5 110t-110.5 47q-64 0 -109.5 -46t-45.5 -111z" /> +<glyph unicode="±" d="M475 674h-387v219h387v389h219v-389h387v-219h-387v-385h-219v385zM88 0v219h993v-219h-993z" /> +<glyph unicode="²" horiz-adv-x="776" d="M702 586h-647v168l224 219q102 100 130.5 144.5t28.5 94.5q0 38 -24 58t-64 20q-81 0 -180 -88l-123 152q147 129 336 129q137 0 216 -66.5t79 -183.5q0 -85 -47 -160t-176 -192l-105 -95h352v-200z" /> +<glyph unicode="³" horiz-adv-x="776" d="M666 1249q0 -143 -170 -198v-13q94 -20 146 -75t52 -134q0 -121 -88 -190.5t-274 -69.5q-143 0 -273 70v190q148 -90 271 -90q143 0 143 107q0 53 -44 79.5t-122 26.5h-112v160h92q83 0 123.5 26t40.5 83q0 38 -25 63t-76 25q-47 0 -89 -19t-99 -59l-101 141 q62 47 137.5 78t178.5 31q127 0 208 -64t81 -168z" /> +<glyph unicode="´" horiz-adv-x="1243" d="M332 1241v27q172 200 235 301h342v-21q-52 -52 -177.5 -154.5t-196.5 -152.5h-203z" /> +<glyph unicode="µ" horiz-adv-x="1352" d="M465 465q0 -121 44 -181.5t138 -60.5q126 0 183 86.5t57 282.5v526h305v-1118h-231l-43 150h-15q-42 -85 -102 -127.5t-148 -42.5q-62 0 -114 23t-84 67l5 -85l5 -157v-320h-305v1610h305v-653z" /> +<glyph unicode="¶" horiz-adv-x="1341" d="M1167 -260h-161v1616h-166v-1616h-162v819q-62 -18 -146 -18q-216 0 -317.5 125t-101.5 376q0 260 109 387t341 127h604v-1816z" /> +<glyph unicode="·" horiz-adv-x="584" d="M117 723q0 84 45 127t131 43q83 0 128.5 -44t45.5 -126q0 -81 -46.5 -125.5t-127.5 -44.5q-84 0 -130 44t-46 126z" /> +<glyph unicode="¸" horiz-adv-x="420" d="M418 -250q0 -128 -75.5 -185t-233.5 -57q-78 0 -146 21v168q27 -7 72.5 -14t70.5 -7q72 0 72 62q0 83 -166 108l78 154h193l-27 -61q74 -24 118 -74.5t44 -114.5z" /> +<glyph unicode="¹" horiz-adv-x="776" d="M584 586h-238v446l3 112l5 95q-27 -36 -75 -78l-78 -61l-109 127l301 235h191v-876z" /> +<glyph unicode="º" horiz-adv-x="795" d="M737 1116q0 -171 -91.5 -267.5t-250.5 -96.5q-153 0 -245.5 98.5t-92.5 265.5q0 169 89.5 266t252.5 97q152 0 245 -98.5t93 -264.5zM260 1116q0 -100 32.5 -150.5t104.5 -50.5t103.5 50.5t31.5 150.5t-31.5 149.5t-103.5 49.5t-104.5 -49.5t-32.5 -149.5z" /> +<glyph unicode="»" horiz-adv-x="1260" d="M1178 547l-371 -453l-219 119l278 348l-278 348l219 119l371 -455v-26zM672 547l-371 -453l-219 119l278 348l-278 348l219 119l371 -455v-26z" /> +<glyph unicode="¼" horiz-adv-x="1804" d="M46 0zM538 586h-238v446l3 112l5 95q-27 -36 -75 -78l-78 -61l-109 127l301 235h191v-876zM1370 1462l-811 -1462h-239l811 1462h239zM1682 152h-125v-151h-238v151h-383v154l385 577h236v-563h125v-168zM1319 320v164q0 86 6 184q-9 -26 -35.5 -80t-41.5 -77l-127 -191 h198z" /> +<glyph unicode="½" horiz-adv-x="1804" d="M46 0zM538 586h-238v446l3 112l5 95q-27 -36 -75 -78l-78 -61l-109 127l301 235h191v-876zM1370 1462l-811 -1462h-239l811 1462h239zM1716 1h-647v168l224 219q102 100 130.5 144.5t28.5 94.5q0 38 -24 58t-64 20q-81 0 -180 -88l-123 152q147 129 336 129 q137 0 216 -66.5t79 -183.5q0 -85 -47 -160t-176 -192l-105 -95h352v-200z" /> +<glyph unicode="¾" horiz-adv-x="1804" d="M90 0zM697 1249q0 -143 -170 -198v-13q94 -20 146 -75t52 -134q0 -121 -88 -190.5t-274 -69.5q-143 0 -273 70v190q148 -90 271 -90q143 0 143 107q0 53 -44 79.5t-122 26.5h-112v160h92q83 0 123.5 26t40.5 83q0 38 -25 63t-76 25q-47 0 -89 -19t-99 -59l-101 141 q62 47 137.5 78t178.5 31q127 0 208 -64t81 -168zM1441 1462l-811 -1462h-239l811 1462h239zM1712 152h-125v-151h-238v151h-383v154l385 577h236v-563h125v-168zM1349 320v164q0 86 6 184q-9 -26 -35.5 -80t-41.5 -77l-127 -191h198z" /> +<glyph unicode="¿" horiz-adv-x="977" d="M713 606v-74q0 -98 -44.5 -169t-152.5 -148q-109 -78 -137.5 -122t-28.5 -107q0 -57 43.5 -94t132.5 -37q79 0 169 29t186 71l102 -221q-98 -56 -221.5 -90.5t-229.5 -34.5q-220 0 -345.5 96.5t-125.5 265.5q0 108 48.5 187t191.5 184q95 70 121.5 107t26.5 98v59h264z M745 948q0 -84 -45 -127t-131 -43q-83 0 -128.5 44t-45.5 126q0 81 46.5 125.5t127.5 44.5q84 0 130 -44t46 -126z" /> +<glyph unicode="À" horiz-adv-x="1413" d="M0 0zM1079 0l-106 348h-533l-106 -348h-334l516 1468h379l518 -1468h-334zM899 608q-147 473 -165.5 535t-26.5 98q-33 -128 -189 -633h381zM713 1579q-63 44 -185 142.5t-190 164.5v21h342q63 -101 235 -301v-27h-202z" /> +<glyph unicode="Á" horiz-adv-x="1413" d="M0 0zM1079 0l-106 348h-533l-106 -348h-334l516 1468h379l518 -1468h-334zM899 608q-147 473 -165.5 535t-26.5 98q-33 -128 -189 -633h381zM541 1579v27q172 200 235 301h342v-21q-52 -52 -177.5 -154.5t-196.5 -152.5h-203z" /> +<glyph unicode="Â" horiz-adv-x="1413" d="M0 0zM1079 0l-106 348h-533l-106 -348h-334l516 1468h379l518 -1468h-334zM899 608q-147 473 -165.5 535t-26.5 98q-33 -128 -189 -633h381zM938 1579q-157 93 -234 176q-78 -81 -229 -176h-203v27q189 189 256 301h357q31 -52 107.5 -141.5t148.5 -159.5v-27h-203z" /> +<glyph unicode="Ã" horiz-adv-x="1413" d="M0 0zM1079 0l-106 348h-533l-106 -348h-334l516 1468h379l518 -1468h-334zM899 608q-147 473 -165.5 535t-26.5 98q-33 -128 -189 -633h381zM543 1684q-31 0 -59.5 -26.5t-41.5 -80.5h-149q11 145 82.5 227t189.5 82q41 0 80.5 -16.5t78 -36t75.5 -35.5t73 -16 q31 0 59.5 26t41.5 80h149q-11 -145 -83.5 -227t-188.5 -82q-41 0 -80.5 16.5t-78 36t-75.5 36t-73 16.5z" /> +<glyph unicode="Ä" horiz-adv-x="1413" d="M0 0zM1079 0l-106 348h-533l-106 -348h-334l516 1468h379l518 -1468h-334zM899 608q-147 473 -165.5 535t-26.5 98q-33 -128 -189 -633h381zM365 1743q0 65 37.5 100t101.5 35q66 0 103.5 -37t37.5 -98q0 -60 -38 -96.5t-103 -36.5q-64 0 -101.5 35t-37.5 98zM768 1743 q0 70 40.5 102.5t100.5 32.5q65 0 103.5 -36t38.5 -99q0 -61 -39 -97t-103 -36q-60 0 -100.5 32.5t-40.5 100.5z" /> +<glyph unicode="Å" horiz-adv-x="1413" d="M0 0zM1079 0l-106 348h-533l-106 -348h-334l516 1468h379l518 -1468h-334zM899 608q-147 473 -165.5 535t-26.5 98q-33 -128 -189 -633h381zM959 1567q0 -108 -71 -174t-183 -66t-180 64t-68 174q0 108 67.5 172.5t180.5 64.5q110 0 182 -66t72 -169zM801 1565 q0 45 -27 70.5t-69 25.5t-69 -25.5t-27 -70.5t24 -71t72 -26q42 0 69 26t27 71z" /> +<glyph unicode="Æ" horiz-adv-x="1950" d="M1829 0h-873v348h-491l-150 -348h-315l655 1462h1174v-254h-563v-321h526v-254h-526v-377h563v-256zM578 608h378v590h-127z" /> +<glyph unicode="Ç" horiz-adv-x="1305" d="M119 0zM805 1225q-175 0 -271 -131.5t-96 -366.5q0 -489 367 -489q154 0 373 77v-260q-180 -75 -402 -75q-319 0 -488 193.5t-169 555.5q0 228 83 399.5t238.5 263t364.5 91.5q213 0 428 -103l-100 -252q-82 39 -165 68t-163 29zM959 -250q0 -128 -75.5 -185t-233.5 -57 q-78 0 -146 21v168q27 -7 72.5 -14t70.5 -7q72 0 72 62q0 83 -166 108l78 154h193l-27 -61q74 -24 118 -74.5t44 -114.5z" /> +<glyph unicode="È" horiz-adv-x="1147" d="M184 0zM1026 0h-842v1462h842v-254h-532v-321h495v-254h-495v-377h532v-256zM634 1579q-63 44 -185 142.5t-190 164.5v21h342q63 -101 235 -301v-27h-202z" /> +<glyph unicode="É" horiz-adv-x="1147" d="M184 0zM1026 0h-842v1462h842v-254h-532v-321h495v-254h-495v-377h532v-256zM424 1579v27q172 200 235 301h342v-21q-52 -52 -177.5 -154.5t-196.5 -152.5h-203z" /> +<glyph unicode="Ê" horiz-adv-x="1147" d="M175 0zM1026 0h-842v1462h842v-254h-532v-321h495v-254h-495v-377h532v-256zM841 1579q-157 93 -234 176q-78 -81 -229 -176h-203v27q189 189 256 301h357q31 -52 107.5 -141.5t148.5 -159.5v-27h-203z" /> +<glyph unicode="Ë" horiz-adv-x="1147" d="M184 0zM1026 0h-842v1462h842v-254h-532v-321h495v-254h-495v-377h532v-256zM272 1743q0 65 37.5 100t101.5 35q66 0 103.5 -37t37.5 -98q0 -60 -38 -96.5t-103 -36.5q-64 0 -101.5 35t-37.5 98zM675 1743q0 70 40.5 102.5t100.5 32.5q65 0 103.5 -36t38.5 -99 q0 -61 -39 -97t-103 -36q-60 0 -100.5 32.5t-40.5 100.5z" /> +<glyph unicode="Ì" horiz-adv-x="678" d="M0 0zM184 0v1462h310v-1462h-310zM317 1579q-63 44 -185 142.5t-190 164.5v21h342q63 -101 235 -301v-27h-202z" /> +<glyph unicode="Í" horiz-adv-x="678" d="M167 0zM184 0v1462h310v-1462h-310zM167 1579v27q172 200 235 301h342v-21q-52 -52 -177.5 -154.5t-196.5 -152.5h-203z" /> +<glyph unicode="Î" horiz-adv-x="678" d="M0 0zM184 0v1462h310v-1462h-310zM570 1579q-157 93 -234 176q-78 -81 -229 -176h-203v27q189 189 256 301h357q31 -52 107.5 -141.5t148.5 -159.5v-27h-203z" /> +<glyph unicode="Ï" horiz-adv-x="678" d="M0 0zM184 0v1462h310v-1462h-310zM-3 1743q0 65 37.5 100t101.5 35q66 0 103.5 -37t37.5 -98q0 -60 -38 -96.5t-103 -36.5q-64 0 -101.5 35t-37.5 98zM400 1743q0 70 40.5 102.5t100.5 32.5q65 0 103.5 -36t38.5 -99q0 -61 -39 -97t-103 -36q-60 0 -100.5 32.5 t-40.5 100.5z" /> +<glyph unicode="Ð" horiz-adv-x="1516" d="M47 850h137v612h459q358 0 556 -189t198 -528q0 -361 -205.5 -553t-593.5 -192h-414v596h-137v254zM1075 737q0 232 -104 351.5t-314 119.5h-163v-358h237v-254h-237v-340h131q450 0 450 481z" /> +<glyph unicode="Ñ" horiz-adv-x="1665" d="M184 0zM1481 0h-394l-636 1106h-9q19 -293 19 -418v-688h-277v1462h391l635 -1095h7q-15 285 -15 403v692h279v-1462zM668 1684q-31 0 -59.5 -26.5t-41.5 -80.5h-149q11 145 82.5 227t189.5 82q41 0 80.5 -16.5t78 -36t75.5 -35.5t73 -16q31 0 59.5 26t41.5 80h149 q-11 -145 -83.5 -227t-188.5 -82q-41 0 -80.5 16.5t-78 36t-75.5 36t-73 16.5z" /> +<glyph unicode="Ò" horiz-adv-x="1630" d="M119 0zM1511 733q0 -363 -180 -558t-516 -195t-516 195t-180 560t180.5 557.5t517.5 192.5t515.5 -194t178.5 -558zM444 733q0 -245 93 -369t278 -124q371 0 371 493q0 494 -369 494q-185 0 -279 -124.5t-94 -369.5zM824 1579q-63 44 -185 142.5t-190 164.5v21h342 q63 -101 235 -301v-27h-202z" /> +<glyph unicode="Ó" horiz-adv-x="1630" d="M119 0zM1511 733q0 -363 -180 -558t-516 -195t-516 195t-180 560t180.5 557.5t517.5 192.5t515.5 -194t178.5 -558zM444 733q0 -245 93 -369t278 -124q371 0 371 493q0 494 -369 494q-185 0 -279 -124.5t-94 -369.5zM658 1579v27q172 200 235 301h342v-21 q-52 -52 -177.5 -154.5t-196.5 -152.5h-203z" /> +<glyph unicode="Ô" horiz-adv-x="1630" d="M119 0zM1511 733q0 -363 -180 -558t-516 -195t-516 195t-180 560t180.5 557.5t517.5 192.5t515.5 -194t178.5 -558zM444 733q0 -245 93 -369t278 -124q371 0 371 493q0 494 -369 494q-185 0 -279 -124.5t-94 -369.5zM1047 1579q-157 93 -234 176q-78 -81 -229 -176h-203 v27q189 189 256 301h357q31 -52 107.5 -141.5t148.5 -159.5v-27h-203z" /> +<glyph unicode="Õ" horiz-adv-x="1630" d="M119 0zM1511 733q0 -363 -180 -558t-516 -195t-516 195t-180 560t180.5 557.5t517.5 192.5t515.5 -194t178.5 -558zM444 733q0 -245 93 -369t278 -124q371 0 371 493q0 494 -369 494q-185 0 -279 -124.5t-94 -369.5zM652 1684q-31 0 -59.5 -26.5t-41.5 -80.5h-149 q11 145 82.5 227t189.5 82q41 0 80.5 -16.5t78 -36t75.5 -35.5t73 -16q31 0 59.5 26t41.5 80h149q-11 -145 -83.5 -227t-188.5 -82q-41 0 -80.5 16.5t-78 36t-75.5 36t-73 16.5z" /> +<glyph unicode="Ö" horiz-adv-x="1630" d="M119 0zM1511 733q0 -363 -180 -558t-516 -195t-516 195t-180 560t180.5 557.5t517.5 192.5t515.5 -194t178.5 -558zM444 733q0 -245 93 -369t278 -124q371 0 371 493q0 494 -369 494q-185 0 -279 -124.5t-94 -369.5zM474 1743q0 65 37.5 100t101.5 35q66 0 103.5 -37 t37.5 -98q0 -60 -38 -96.5t-103 -36.5q-64 0 -101.5 35t-37.5 98zM877 1743q0 70 40.5 102.5t100.5 32.5q65 0 103.5 -36t38.5 -99q0 -61 -39 -97t-103 -36q-60 0 -100.5 32.5t-40.5 100.5z" /> +<glyph unicode="×" d="M428 723l-299 301l152 154l301 -299l305 299l153 -150l-305 -305l301 -303l-149 -152l-305 301l-301 -299l-150 152z" /> +<glyph unicode="Ø" horiz-adv-x="1630" d="M1511 733q0 -363 -180 -558t-516 -195q-197 0 -336 65l-90 -135l-162 108l90 136q-198 194 -198 581q0 365 180.5 557.5t517.5 192.5q198 0 344 -70l84 125l160 -104l-88 -131q194 -194 194 -572zM444 733q0 -191 56 -307l506 756q-84 45 -189 45q-185 0 -279 -124.5 t-94 -369.5zM1186 733q0 180 -51 297l-500 -751q76 -39 180 -39q371 0 371 493z" /> +<glyph unicode="Ù" horiz-adv-x="1548" d="M174 0zM1374 1462v-946q0 -162 -72.5 -284t-209.5 -187t-324 -65q-282 0 -438 144.5t-156 395.5v942h309v-895q0 -169 68 -248t225 -79q152 0 220.5 79.5t68.5 249.5v893h309zM750 1579q-63 44 -185 142.5t-190 164.5v21h342q63 -101 235 -301v-27h-202z" /> +<glyph unicode="Ú" horiz-adv-x="1548" d="M174 0zM1374 1462v-946q0 -162 -72.5 -284t-209.5 -187t-324 -65q-282 0 -438 144.5t-156 395.5v942h309v-895q0 -169 68 -248t225 -79q152 0 220.5 79.5t68.5 249.5v893h309zM602 1579v27q172 200 235 301h342v-21q-52 -52 -177.5 -154.5t-196.5 -152.5h-203z" /> +<glyph unicode="Û" horiz-adv-x="1548" d="M174 0zM1374 1462v-946q0 -162 -72.5 -284t-209.5 -187t-324 -65q-282 0 -438 144.5t-156 395.5v942h309v-895q0 -169 68 -248t225 -79q152 0 220.5 79.5t68.5 249.5v893h309zM1006 1579q-157 93 -234 176q-78 -81 -229 -176h-203v27q189 189 256 301h357 q31 -52 107.5 -141.5t148.5 -159.5v-27h-203z" /> +<glyph unicode="Ü" horiz-adv-x="1548" d="M174 0zM1374 1462v-946q0 -162 -72.5 -284t-209.5 -187t-324 -65q-282 0 -438 144.5t-156 395.5v942h309v-895q0 -169 68 -248t225 -79q152 0 220.5 79.5t68.5 249.5v893h309zM433 1743q0 65 37.5 100t101.5 35q66 0 103.5 -37t37.5 -98q0 -60 -38 -96.5t-103 -36.5 q-64 0 -101.5 35t-37.5 98zM836 1743q0 70 40.5 102.5t100.5 32.5q65 0 103.5 -36t38.5 -99q0 -61 -39 -97t-103 -36q-60 0 -100.5 32.5t-40.5 100.5z" /> +<glyph unicode="Ý" horiz-adv-x="1278" d="M0 0zM639 860l305 602h334l-485 -893v-569h-308v559l-485 903h336zM461 1579v27q172 200 235 301h342v-21q-52 -52 -177.5 -154.5t-196.5 -152.5h-203z" /> +<glyph unicode="Þ" horiz-adv-x="1286" d="M1194 770q0 -229 -142.5 -353t-404.5 -124h-153v-293h-310v1462h310v-229h178q254 0 388 -119t134 -344zM494 543h100q145 0 216 52.5t71 174.5q0 107 -63.5 159t-199.5 52h-124v-438z" /> +<glyph unicode="ß" horiz-adv-x="1456" d="M1249 1241q0 -64 -21 -112.5t-53 -86.5t-69 -67t-69 -53t-53 -45t-21 -43q0 -27 26.5 -53t92.5 -66q146 -91 198.5 -140t78 -110t25.5 -139q0 -172 -116.5 -259t-343.5 -87q-99 0 -171 14.5t-132 48.5v242q53 -36 135.5 -61t146.5 -25q168 0 168 123q0 41 -16 66.5 t-57 55.5t-115 72q-126 72 -175 131.5t-49 140.5q0 64 35 117t105 102q77 55 108 95t31 86q0 60 -63.5 100.5t-163.5 40.5q-116 0 -181 -52.5t-65 -148.5v-1128h-305v1139q0 201 146.5 314.5t404.5 113.5q244 0 391 -88.5t147 -237.5z" /> +<glyph unicode="à" horiz-adv-x="1237" d="M86 0zM870 0l-59 152h-8q-77 -97 -158.5 -134.5t-212.5 -37.5q-161 0 -253.5 92t-92.5 262q0 178 124.5 262.5t375.5 93.5l194 6v49q0 170 -174 170q-134 0 -315 -81l-101 206q193 101 428 101q225 0 345 -98t120 -298v-745h-213zM780 518l-118 -4q-133 -4 -198 -48 t-65 -134q0 -129 148 -129q106 0 169.5 61t63.5 162v92zM614 1241q-63 44 -185 142.5t-190 164.5v21h342q63 -101 235 -301v-27h-202z" /> +<glyph unicode="á" horiz-adv-x="1237" d="M86 0zM870 0l-59 152h-8q-77 -97 -158.5 -134.5t-212.5 -37.5q-161 0 -253.5 92t-92.5 262q0 178 124.5 262.5t375.5 93.5l194 6v49q0 170 -174 170q-134 0 -315 -81l-101 206q193 101 428 101q225 0 345 -98t120 -298v-745h-213zM780 518l-118 -4q-133 -4 -198 -48 t-65 -134q0 -129 148 -129q106 0 169.5 61t63.5 162v92zM441 1241v27q172 200 235 301h342v-21q-52 -52 -177.5 -154.5t-196.5 -152.5h-203z" /> +<glyph unicode="â" horiz-adv-x="1237" d="M86 0zM870 0l-59 152h-8q-77 -97 -158.5 -134.5t-212.5 -37.5q-161 0 -253.5 92t-92.5 262q0 178 124.5 262.5t375.5 93.5l194 6v49q0 170 -174 170q-134 0 -315 -81l-101 206q193 101 428 101q225 0 345 -98t120 -298v-745h-213zM780 518l-118 -4q-133 -4 -198 -48 t-65 -134q0 -129 148 -129q106 0 169.5 61t63.5 162v92zM843 1240q-157 93 -234 176q-78 -81 -229 -176h-203v27q189 189 256 301h357q31 -52 107.5 -141.5t148.5 -159.5v-27h-203z" /> +<glyph unicode="ã" horiz-adv-x="1237" d="M86 0zM870 0l-59 152h-8q-77 -97 -158.5 -134.5t-212.5 -37.5q-161 0 -253.5 92t-92.5 262q0 178 124.5 262.5t375.5 93.5l194 6v49q0 170 -174 170q-134 0 -315 -81l-101 206q193 101 428 101q225 0 345 -98t120 -298v-745h-213zM780 518l-118 -4q-133 -4 -198 -48 t-65 -134q0 -129 148 -129q106 0 169.5 61t63.5 162v92zM467 1346q-31 0 -59.5 -26.5t-41.5 -80.5h-149q11 145 82.5 227t189.5 82q41 0 80.5 -16.5t78 -36t75.5 -35.5t73 -16q31 0 59.5 26t41.5 80h149q-11 -145 -83.5 -227t-188.5 -82q-41 0 -80.5 16.5t-78 36t-75.5 36 t-73 16.5z" /> +<glyph unicode="ä" horiz-adv-x="1237" d="M86 0zM870 0l-59 152h-8q-77 -97 -158.5 -134.5t-212.5 -37.5q-161 0 -253.5 92t-92.5 262q0 178 124.5 262.5t375.5 93.5l194 6v49q0 170 -174 170q-134 0 -315 -81l-101 206q193 101 428 101q225 0 345 -98t120 -298v-745h-213zM780 518l-118 -4q-133 -4 -198 -48 t-65 -134q0 -129 148 -129q106 0 169.5 61t63.5 162v92zM285 1405q0 65 37.5 100t101.5 35q66 0 103.5 -37t37.5 -98q0 -60 -38 -96.5t-103 -36.5q-64 0 -101.5 35t-37.5 98zM688 1405q0 70 40.5 102.5t100.5 32.5q65 0 103.5 -36t38.5 -99q0 -61 -39 -97t-103 -36 q-60 0 -100.5 32.5t-40.5 100.5z" /> +<glyph unicode="å" horiz-adv-x="1237" d="M86 0zM870 0l-59 152h-8q-77 -97 -158.5 -134.5t-212.5 -37.5q-161 0 -253.5 92t-92.5 262q0 178 124.5 262.5t375.5 93.5l194 6v49q0 170 -174 170q-134 0 -315 -81l-101 206q193 101 428 101q225 0 345 -98t120 -298v-745h-213zM780 518l-118 -4q-133 -4 -198 -48 t-65 -134q0 -129 148 -129q106 0 169.5 61t63.5 162v92zM883 1479q0 -108 -71 -174t-183 -66t-180 64t-68 174q0 108 67.5 172.5t180.5 64.5q110 0 182 -66t72 -169zM725 1477q0 45 -27 70.5t-69 25.5t-69 -25.5t-27 -70.5t24 -71t72 -26q42 0 69 26t27 71z" /> +<glyph unicode="æ" horiz-adv-x="1878" d="M1329 -20q-137 0 -249.5 50.5t-184.5 155.5q-98 -117 -196.5 -161.5t-256.5 -44.5q-161 0 -258.5 94.5t-97.5 259.5q0 178 121 262.5t362 93.5l191 6v84q0 69 -44.5 102t-121.5 33q-140 0 -305 -77l-99 202q189 101 422 101q227 0 342 -131q66 64 152.5 96.5t206.5 32.5 q221 0 349 -137.5t128 -370.5v-148h-723q5 -130 77 -203t202 -73q196 0 380 88v-236q-79 -39 -171 -59t-226 -20zM760 518l-113 -4q-124 -4 -186 -47.5t-62 -134.5q0 -129 140 -129q101 0 161 61t60 162v92zM1307 922q-217 0 -234 -236h430q-2 112 -55 174t-141 62z" /> +<glyph unicode="ç" horiz-adv-x="1053" d="M92 0zM614 -20q-522 0 -522 573q0 285 142 435.5t407 150.5q194 0 348 -76l-90 -236q-72 29 -134 47.5t-124 18.5q-238 0 -238 -338q0 -328 238 -328q88 0 163 23.5t150 73.5v-261q-74 -47 -149.5 -65t-190.5 -18zM805 -250q0 -128 -75.5 -185t-233.5 -57q-78 0 -146 21 v168q27 -7 72.5 -14t70.5 -7q72 0 72 62q0 83 -166 108l78 154h193l-27 -61q74 -24 118 -74.5t44 -114.5z" /> +<glyph unicode="è" horiz-adv-x="1210" d="M92 0zM623 922q-97 0 -152 -61.5t-63 -174.5h428q-2 113 -59 174.5t-154 61.5zM666 -20q-270 0 -422 149t-152 422q0 281 140.5 434.5t388.5 153.5q237 0 369 -135t132 -373v-148h-721q5 -130 77 -203t202 -73q101 0 191 21t188 67v-236q-80 -40 -171 -59.5t-222 -19.5z M620 1241q-63 44 -185 142.5t-190 164.5v21h342q63 -101 235 -301v-27h-202z" /> +<glyph unicode="é" horiz-adv-x="1210" d="M92 0zM623 922q-97 0 -152 -61.5t-63 -174.5h428q-2 113 -59 174.5t-154 61.5zM666 -20q-270 0 -422 149t-152 422q0 281 140.5 434.5t388.5 153.5q237 0 369 -135t132 -373v-148h-721q5 -130 77 -203t202 -73q101 0 191 21t188 67v-236q-80 -40 -171 -59.5t-222 -19.5z M447 1241v27q172 200 235 301h342v-21q-52 -52 -177.5 -154.5t-196.5 -152.5h-203z" /> +<glyph unicode="ê" horiz-adv-x="1210" d="M92 0zM623 922q-97 0 -152 -61.5t-63 -174.5h428q-2 113 -59 174.5t-154 61.5zM666 -20q-270 0 -422 149t-152 422q0 281 140.5 434.5t388.5 153.5q237 0 369 -135t132 -373v-148h-721q5 -130 77 -203t202 -73q101 0 191 21t188 67v-236q-80 -40 -171 -59.5t-222 -19.5z M860 1241q-157 93 -234 176q-78 -81 -229 -176h-203v27q189 189 256 301h357q31 -52 107.5 -141.5t148.5 -159.5v-27h-203z" /> +<glyph unicode="ë" horiz-adv-x="1210" d="M92 0zM623 922q-97 0 -152 -61.5t-63 -174.5h428q-2 113 -59 174.5t-154 61.5zM666 -20q-270 0 -422 149t-152 422q0 281 140.5 434.5t388.5 153.5q237 0 369 -135t132 -373v-148h-721q5 -130 77 -203t202 -73q101 0 191 21t188 67v-236q-80 -40 -171 -59.5t-222 -19.5z M297 1405q0 65 37.5 100t101.5 35q66 0 103.5 -37t37.5 -98q0 -60 -38 -96.5t-103 -36.5q-64 0 -101.5 35t-37.5 98zM700 1405q0 70 40.5 102.5t100.5 32.5q65 0 103.5 -36t38.5 -99q0 -61 -39 -97t-103 -36q-60 0 -100.5 32.5t-40.5 100.5z" /> +<glyph unicode="ì" horiz-adv-x="625" d="M0 0zM465 0h-305v1118h305v-1118zM274 1241q-63 44 -185 142.5t-190 164.5v21h342q63 -101 235 -301v-27h-202z" /> +<glyph unicode="í" horiz-adv-x="625" d="M145 0zM465 0h-305v1118h305v-1118zM145 1241v27q172 200 235 301h342v-21q-52 -52 -177.5 -154.5t-196.5 -152.5h-203z" /> +<glyph unicode="î" horiz-adv-x="625" d="M0 0zM465 0h-305v1118h305v-1118zM544 1241q-157 93 -234 176q-78 -81 -229 -176h-203v27q189 189 256 301h357q31 -52 107.5 -141.5t148.5 -159.5v-27h-203z" /> +<glyph unicode="ï" horiz-adv-x="625" d="M0 0zM465 0h-305v1118h305v-1118zM-29 1405q0 65 37.5 100t101.5 35q66 0 103.5 -37t37.5 -98q0 -60 -38 -96.5t-103 -36.5q-64 0 -101.5 35t-37.5 98zM374 1405q0 70 40.5 102.5t100.5 32.5q65 0 103.5 -36t38.5 -99q0 -61 -39 -97t-103 -36q-60 0 -100.5 32.5 t-40.5 100.5z" /> +<glyph unicode="ð" horiz-adv-x="1268" d="M510 1303q-80 53 -152 92l101 176q144 -65 258 -141l225 139l100 -154l-170 -104q156 -143 230 -324.5t74 -413.5q0 -280 -145 -436.5t-400 -156.5q-245 0 -392 137t-147 372q0 233 130 369.5t351 136.5q205 0 275 -98l8 4q-67 162 -192 281l-230 -142l-100 156zM864 532 q0 108 -61 173t-168 65q-121 0 -176.5 -68.5t-55.5 -214.5q0 -140 60 -211t172 -71q123 0 176 82t53 245z" /> +<glyph unicode="ñ" horiz-adv-x="1346" d="M160 0zM1192 0h-305v653q0 121 -43 181.5t-137 60.5q-128 0 -185 -85.5t-57 -283.5v-526h-305v1118h233l41 -143h17q51 81 140.5 122.5t203.5 41.5q195 0 296 -105.5t101 -304.5v-729zM508 1346q-31 0 -59.5 -26.5t-41.5 -80.5h-149q11 145 82.5 227t189.5 82 q41 0 80.5 -16.5t78 -36t75.5 -35.5t73 -16q31 0 59.5 26t41.5 80h149q-11 -145 -83.5 -227t-188.5 -82q-41 0 -80.5 16.5t-78 36t-75.5 36t-73 16.5z" /> +<glyph unicode="ò" horiz-adv-x="1268" d="M92 0zM403 561q0 -166 54.5 -251t177.5 -85q122 0 175.5 84.5t53.5 251.5q0 166 -54 249t-177 83q-122 0 -176 -82.5t-54 -249.5zM1176 561q0 -273 -144 -427t-401 -154q-161 0 -284 70.5t-189 202.5t-66 308q0 274 143 426t402 152q161 0 284 -70t189 -201t66 -307z M612 1241q-63 44 -185 142.5t-190 164.5v21h342q63 -101 235 -301v-27h-202z" /> +<glyph unicode="ó" horiz-adv-x="1268" d="M92 0zM403 561q0 -166 54.5 -251t177.5 -85q122 0 175.5 84.5t53.5 251.5q0 166 -54 249t-177 83q-122 0 -176 -82.5t-54 -249.5zM1176 561q0 -273 -144 -427t-401 -154q-161 0 -284 70.5t-189 202.5t-66 308q0 274 143 426t402 152q161 0 284 -70t189 -201t66 -307z M467 1241v27q172 200 235 301h342v-21q-52 -52 -177.5 -154.5t-196.5 -152.5h-203z" /> +<glyph unicode="ô" horiz-adv-x="1268" d="M92 0zM403 561q0 -166 54.5 -251t177.5 -85q122 0 175.5 84.5t53.5 251.5q0 166 -54 249t-177 83q-122 0 -176 -82.5t-54 -249.5zM1176 561q0 -273 -144 -427t-401 -154q-161 0 -284 70.5t-189 202.5t-66 308q0 274 143 426t402 152q161 0 284 -70t189 -201t66 -307z M864 1241q-157 93 -234 176q-78 -81 -229 -176h-203v27q189 189 256 301h357q31 -52 107.5 -141.5t148.5 -159.5v-27h-203z" /> +<glyph unicode="õ" horiz-adv-x="1268" d="M92 0zM403 561q0 -166 54.5 -251t177.5 -85q122 0 175.5 84.5t53.5 251.5q0 166 -54 249t-177 83q-122 0 -176 -82.5t-54 -249.5zM1176 561q0 -273 -144 -427t-401 -154q-161 0 -284 70.5t-189 202.5t-66 308q0 274 143 426t402 152q161 0 284 -70t189 -201t66 -307z M469 1346q-31 0 -59.5 -26.5t-41.5 -80.5h-149q11 145 82.5 227t189.5 82q41 0 80.5 -16.5t78 -36t75.5 -35.5t73 -16q31 0 59.5 26t41.5 80h149q-11 -145 -83.5 -227t-188.5 -82q-41 0 -80.5 16.5t-78 36t-75.5 36t-73 16.5z" /> +<glyph unicode="ö" horiz-adv-x="1268" d="M92 0zM403 561q0 -166 54.5 -251t177.5 -85q122 0 175.5 84.5t53.5 251.5q0 166 -54 249t-177 83q-122 0 -176 -82.5t-54 -249.5zM1176 561q0 -273 -144 -427t-401 -154q-161 0 -284 70.5t-189 202.5t-66 308q0 274 143 426t402 152q161 0 284 -70t189 -201t66 -307z M291 1405q0 65 37.5 100t101.5 35q66 0 103.5 -37t37.5 -98q0 -60 -38 -96.5t-103 -36.5q-64 0 -101.5 35t-37.5 98zM694 1405q0 70 40.5 102.5t100.5 32.5q65 0 103.5 -36t38.5 -99q0 -61 -39 -97t-103 -36q-60 0 -100.5 32.5t-40.5 100.5z" /> +<glyph unicode="÷" d="M88 612v219h993v-219h-993zM444 373q0 76 37 113.5t103 37.5t102.5 -39t36.5 -112q0 -70 -37 -111t-102 -41t-102.5 39t-37.5 113zM444 1071q0 75 37 113.5t103 38.5q67 0 103 -40.5t36 -111.5q0 -70 -37 -110.5t-102 -40.5t-102.5 39t-37.5 112z" /> +<glyph unicode="ø" horiz-adv-x="1268" d="M1176 561q0 -273 -144 -427t-401 -154q-126 0 -234 45l-67 -101l-154 105l68 100q-152 156 -152 432q0 274 143 426t402 152q132 0 248 -52l55 82l152 -108l-58 -84q142 -155 142 -416zM403 561q0 -94 19 -166l317 475q-43 23 -106 23q-122 0 -176 -82.5t-54 -249.5z M864 561q0 81 -12 141l-309 -462q38 -15 92 -15q122 0 175.5 84.5t53.5 251.5z" /> +<glyph unicode="ù" horiz-adv-x="1346" d="M154 0zM952 0l-41 143h-16q-49 -78 -139 -120.5t-205 -42.5q-197 0 -297 105.5t-100 303.5v729h305v-653q0 -121 43 -181.5t137 -60.5q128 0 185 85.5t57 283.5v526h305v-1118h-234zM620 1241q-63 44 -185 142.5t-190 164.5v21h342q63 -101 235 -301v-27h-202z" /> +<glyph unicode="ú" horiz-adv-x="1346" d="M154 0zM952 0l-41 143h-16q-49 -78 -139 -120.5t-205 -42.5q-197 0 -297 105.5t-100 303.5v729h305v-653q0 -121 43 -181.5t137 -60.5q128 0 185 85.5t57 283.5v526h305v-1118h-234zM498 1241v27q172 200 235 301h342v-21q-52 -52 -177.5 -154.5t-196.5 -152.5h-203z" /> +<glyph unicode="û" horiz-adv-x="1346" d="M154 0zM952 0l-41 143h-16q-49 -78 -139 -120.5t-205 -42.5q-197 0 -297 105.5t-100 303.5v729h305v-653q0 -121 43 -181.5t137 -60.5q128 0 185 85.5t57 283.5v526h305v-1118h-234zM901 1241q-157 93 -234 176q-78 -81 -229 -176h-203v27q189 189 256 301h357 q31 -52 107.5 -141.5t148.5 -159.5v-27h-203z" /> +<glyph unicode="ü" horiz-adv-x="1346" d="M154 0zM952 0l-41 143h-16q-49 -78 -139 -120.5t-205 -42.5q-197 0 -297 105.5t-100 303.5v729h305v-653q0 -121 43 -181.5t137 -60.5q128 0 185 85.5t57 283.5v526h305v-1118h-234zM326 1405q0 65 37.5 100t101.5 35q66 0 103.5 -37t37.5 -98q0 -60 -38 -96.5 t-103 -36.5q-64 0 -101.5 35t-37.5 98zM729 1405q0 70 40.5 102.5t100.5 32.5q65 0 103.5 -36t38.5 -99q0 -61 -39 -97t-103 -36q-60 0 -100.5 32.5t-40.5 100.5z" /> +<glyph unicode="ý" horiz-adv-x="1165" d="M0 0zM0 1118h334l211 -629q27 -82 37 -194h6q11 103 43 194l207 629h327l-473 -1261q-65 -175 -185.5 -262t-281.5 -87q-79 0 -155 17v242q55 -13 120 -13q81 0 141.5 49.5t94.5 149.5l18 55zM393 1241v27q172 200 235 301h342v-21q-52 -52 -177.5 -154.5t-196.5 -152.5 h-203z" /> +<glyph unicode="þ" horiz-adv-x="1296" d="M465 973q50 81 131 123.5t186 42.5q198 0 310 -154.5t112 -423.5q0 -273 -111.5 -427t-310.5 -154q-213 0 -317 137h-14l7 -62l7 -94v-453h-305v2048h305v-391l-7 -120l-7 -72h14zM684 895q-113 0 -165 -69.5t-54 -229.5v-33q0 -180 53.5 -258t169.5 -78q205 0 205 338 q0 165 -50.5 247.5t-158.5 82.5z" /> +<glyph unicode="ÿ" horiz-adv-x="1165" d="M0 0zM0 1118h334l211 -629q27 -82 37 -194h6q11 103 43 194l207 629h327l-473 -1261q-65 -175 -185.5 -262t-281.5 -87q-79 0 -155 17v242q55 -13 120 -13q81 0 141.5 49.5t94.5 149.5l18 55zM243 1405q0 65 37.5 100t101.5 35q66 0 103.5 -37t37.5 -98q0 -60 -38 -96.5 t-103 -36.5q-64 0 -101.5 35t-37.5 98zM646 1405q0 70 40.5 102.5t100.5 32.5q65 0 103.5 -36t38.5 -99q0 -61 -39 -97t-103 -36q-60 0 -100.5 32.5t-40.5 100.5z" /> +<glyph unicode="ı" horiz-adv-x="625" d="M465 0h-305v1118h305v-1118z" /> +<glyph unicode="Œ" horiz-adv-x="1993" d="M1872 0h-873q-38 -9 -109 -14.5t-116 -5.5q-319 0 -487 197t-168 558q0 363 169.5 556.5t487.5 193.5q61 0 127 -7t101 -16h868v-254h-563v-321h526v-254h-526v-377h563v-256zM776 1227q-166 0 -252 -125.5t-86 -368.5q0 -244 86 -368.5t250 -124.5q65 0 126 10.5 t99 28.5v907q-35 19 -101.5 30t-121.5 11z" /> +<glyph unicode="œ" horiz-adv-x="2003" d="M1446 -20q-271 0 -420 155q-141 -155 -391 -155q-162 0 -286 70t-190.5 202t-66.5 309q0 277 141.5 427.5t399.5 150.5q112 0 212 -39.5t171 -116.5q144 156 383 156q244 0 380 -135t136 -373v-148h-746v-8q7 -127 81.5 -197.5t207.5 -70.5q107 0 200 21t193 67v-236 q-81 -39 -175.5 -59t-229.5 -20zM403 561q0 -166 54.5 -251t177.5 -85q122 0 175.5 84.5t53.5 251.5q0 166 -54 249t-177 83q-122 0 -176 -82.5t-54 -249.5zM1405 922q-94 0 -156 -57.5t-71 -178.5h450q-2 111 -60.5 173.5t-162.5 62.5z" /> +<glyph unicode="Ÿ" horiz-adv-x="1278" d="M0 0zM639 860l305 602h334l-485 -893v-569h-308v559l-485 903h336zM297 1743q0 65 37.5 100t101.5 35q66 0 103.5 -37t37.5 -98q0 -60 -38 -96.5t-103 -36.5q-64 0 -101.5 35t-37.5 98zM700 1743q0 70 40.5 102.5t100.5 32.5q65 0 103.5 -36t38.5 -99q0 -61 -39 -97 t-103 -36q-60 0 -100.5 32.5t-40.5 100.5z" /> +<glyph unicode="ˆ" horiz-adv-x="1243" d="M852 1241q-157 93 -234 176q-78 -81 -229 -176h-203v27q189 189 256 301h357q31 -52 107.5 -141.5t148.5 -159.5v-27h-203z" /> +<glyph unicode="˚" horiz-adv-x="1182" d="M842 1479q0 -108 -71 -174t-183 -66t-180 64t-68 174q0 108 67.5 172.5t180.5 64.5q110 0 182 -66t72 -169zM684 1477q0 45 -27 70.5t-69 25.5t-69 -25.5t-27 -70.5t24 -71t72 -26q42 0 69 26t27 71z" /> +<glyph unicode="˜" horiz-adv-x="1243" d="M457 1346q-31 0 -59.5 -26.5t-41.5 -80.5h-149q11 145 82.5 227t189.5 82q41 0 80.5 -16.5t78 -36t75.5 -35.5t73 -16q31 0 59.5 26t41.5 80h149q-11 -145 -83.5 -227t-188.5 -82q-41 0 -80.5 16.5t-78 36t-75.5 36t-73 16.5z" /> +<glyph unicode=" " horiz-adv-x="953" /> +<glyph unicode=" " horiz-adv-x="1907" /> +<glyph unicode=" " horiz-adv-x="953" /> +<glyph unicode=" " horiz-adv-x="1907" /> +<glyph unicode=" " horiz-adv-x="635" /> +<glyph unicode=" " horiz-adv-x="476" /> +<glyph unicode=" " horiz-adv-x="317" /> +<glyph unicode=" " horiz-adv-x="317" /> +<glyph unicode=" " horiz-adv-x="238" /> +<glyph unicode=" " horiz-adv-x="381" /> +<glyph unicode=" " horiz-adv-x="105" /> +<glyph unicode="‐" horiz-adv-x="659" d="M61 424v250h537v-250h-537z" /> +<glyph unicode="‑" horiz-adv-x="659" d="M61 424v250h537v-250h-537z" /> +<glyph unicode="‒" horiz-adv-x="659" d="M61 424v250h537v-250h-537z" /> +<glyph unicode="–" horiz-adv-x="1024" d="M82 436v230h860v-230h-860z" /> +<glyph unicode="—" horiz-adv-x="2048" d="M82 436v230h1884v-230h-1884z" /> +<glyph unicode="‘" horiz-adv-x="444" d="M39 961l-14 22q22 91 72.5 228.5t103.5 250.5h219q-66 -267 -101 -501h-280z" /> +<glyph unicode="’" horiz-adv-x="444" d="M406 1462l14 -22q-50 -197 -176 -479h-219q69 296 100 501h281z" /> +<glyph unicode="‚" horiz-adv-x="596" d="M459 215q-52 -202 -176 -479h-220q65 266 101 502h280z" /> +<glyph unicode="“" horiz-adv-x="911" d="M492 983q22 91 72.5 228.5t103.5 250.5h219q-66 -267 -101 -501h-280zM25 983q22 91 72.5 228.5t103.5 250.5h219q-66 -267 -101 -501h-280z" /> +<glyph unicode="”" horiz-adv-x="911" d="M420 1440q-50 -197 -176 -479h-219q69 296 100 501h281zM887 1440q-50 -197 -176 -479h-219q69 296 100 501h280z" /> +<glyph unicode="„" horiz-adv-x="1061" d="M459 215q-52 -202 -176 -479h-220q65 266 101 502h280zM926 215q-52 -202 -176 -479h-220q65 266 101 502h280z" /> +<glyph unicode="•" horiz-adv-x="770" d="M98 748q0 154 74 235.5t213 81.5q137 0 212 -82t75 -235q0 -152 -75.5 -235t-211.5 -83q-138 0 -212.5 83t-74.5 235z" /> +<glyph unicode="…" horiz-adv-x="1751" d="M117 143q0 84 45 127t131 43q83 0 128.5 -44t45.5 -126q0 -79 -46 -124.5t-128 -45.5q-84 0 -130 44.5t-46 125.5zM700 143q0 84 45 127t132 43q83 0 128.5 -44t45.5 -126q0 -79 -46 -124.5t-128 -45.5q-85 0 -131 44.5t-46 125.5zM1284 143q0 84 45 127t131 43 q83 0 128.5 -44t45.5 -126q0 -79 -46 -124.5t-128 -45.5q-84 0 -130 44.5t-46 125.5z" /> +<glyph unicode=" " horiz-adv-x="381" /> +<glyph unicode="‹" horiz-adv-x="754" d="M82 573l371 455l219 -119l-279 -348l279 -348l-219 -119l-371 453v26z" /> +<glyph unicode="›" horiz-adv-x="754" d="M672 547l-371 -453l-219 119l278 348l-278 348l219 119l371 -455v-26z" /> +<glyph unicode="⁄" horiz-adv-x="266" d="M657 1462l-811 -1462h-239l811 1462h239z" /> +<glyph unicode=" " horiz-adv-x="476" /> +<glyph unicode="⁴" horiz-adv-x="776" d="M758 737h-125v-151h-238v151h-383v154l385 577h236v-563h125v-168zM395 905v164q0 86 6 184q-9 -26 -35.5 -80t-41.5 -77l-127 -191h198z" /> +<glyph unicode="€" d="M803 1225q-122 0 -201 -70.5t-102 -204.5h403v-176h-418l-2 -35v-47l2 -33h355v-178h-338q51 -243 321 -243q143 0 275 57v-256q-116 -59 -293 -59q-245 0 -403 133t-199 368h-137v178h118q-4 23 -4 62l2 53h-116v176h133q37 242 199 382.5t405 140.5q188 0 352 -82 l-98 -232q-69 31 -129 48.5t-125 17.5z" /> +<glyph unicode="™" horiz-adv-x="1534" d="M381 741h-168v572h-197v149h564v-149h-199v-572zM956 741l-165 529h-7l4 -111v-418h-163v721h247l160 -510l170 510h240v-721h-168v408l4 121h-6l-174 -529h-142z" /> +<glyph unicode="" horiz-adv-x="1120" d="M0 1120h1120v-1120h-1120v1120z" /> +<glyph horiz-adv-x="1296" d="M0 0z" /> +<hkern u1=""" u2="Ÿ" k="-20" /> +<hkern u1=""" u2="œ" k="123" /> +<hkern u1=""" u2="ü" k="61" /> +<hkern u1=""" u2="û" k="61" /> +<hkern u1=""" u2="ú" k="61" /> +<hkern u1=""" u2="ù" k="61" /> +<hkern u1=""" u2="ø" k="123" /> +<hkern u1=""" u2="ö" k="123" /> +<hkern u1=""" u2="õ" k="123" /> +<hkern u1=""" u2="ô" k="123" /> +<hkern u1=""" u2="ó" k="123" /> +<hkern u1=""" u2="ò" k="123" /> +<hkern u1=""" u2="ë" k="123" /> +<hkern u1=""" u2="ê" k="123" /> +<hkern u1=""" u2="é" k="123" /> +<hkern u1=""" u2="è" k="123" /> +<hkern u1=""" u2="ç" k="123" /> +<hkern u1=""" u2="æ" k="82" /> +<hkern u1=""" u2="å" k="82" /> +<hkern u1=""" u2="ä" k="82" /> +<hkern u1=""" u2="ã" k="82" /> +<hkern u1=""" u2="â" k="82" /> +<hkern u1=""" u2="á" k="82" /> +<hkern u1=""" u2="à" k="123" /> +<hkern u1=""" u2="Ý" k="-20" /> +<hkern u1=""" u2="Å" k="143" /> +<hkern u1=""" u2="Ä" k="143" /> +<hkern u1=""" u2="Ã" k="143" /> +<hkern u1=""" u2="Â" k="143" /> +<hkern u1=""" u2="Á" k="143" /> +<hkern u1=""" u2="À" k="143" /> +<hkern u1=""" u2="u" k="61" /> +<hkern u1=""" u2="s" k="61" /> +<hkern u1=""" u2="r" k="61" /> +<hkern u1=""" u2="q" k="123" /> +<hkern u1=""" u2="p" k="61" /> +<hkern u1=""" u2="o" k="123" /> +<hkern u1=""" u2="n" k="61" /> +<hkern u1=""" u2="m" k="61" /> +<hkern u1=""" u2="g" k="61" /> +<hkern u1=""" u2="e" k="123" /> +<hkern u1=""" u2="d" k="123" /> +<hkern u1=""" u2="c" k="123" /> +<hkern u1=""" u2="a" k="82" /> +<hkern u1=""" u2="Y" k="-20" /> +<hkern u1=""" u2="W" k="-41" /> +<hkern u1=""" u2="V" k="-41" /> +<hkern u1=""" u2="T" k="-41" /> +<hkern u1=""" u2="A" k="143" /> +<hkern u1="'" u2="Ÿ" k="-20" /> +<hkern u1="'" u2="œ" k="123" /> +<hkern u1="'" u2="ü" k="61" /> +<hkern u1="'" u2="û" k="61" /> +<hkern u1="'" u2="ú" k="61" /> +<hkern u1="'" u2="ù" k="61" /> +<hkern u1="'" u2="ø" k="123" /> +<hkern u1="'" u2="ö" k="123" /> +<hkern u1="'" u2="õ" k="123" /> +<hkern u1="'" u2="ô" k="123" /> +<hkern u1="'" u2="ó" k="123" /> +<hkern u1="'" u2="ò" k="123" /> +<hkern u1="'" u2="ë" k="123" /> +<hkern u1="'" u2="ê" k="123" /> +<hkern u1="'" u2="é" k="123" /> +<hkern u1="'" u2="è" k="123" /> +<hkern u1="'" u2="ç" k="123" /> +<hkern u1="'" u2="æ" k="82" /> +<hkern u1="'" u2="å" k="82" /> +<hkern u1="'" u2="ä" k="82" /> +<hkern u1="'" u2="ã" k="82" /> +<hkern u1="'" u2="â" k="82" /> +<hkern u1="'" u2="á" k="82" /> +<hkern u1="'" u2="à" k="123" /> +<hkern u1="'" u2="Ý" k="-20" /> +<hkern u1="'" u2="Å" k="143" /> +<hkern u1="'" u2="Ä" k="143" /> +<hkern u1="'" u2="Ã" k="143" /> +<hkern u1="'" u2="Â" k="143" /> +<hkern u1="'" u2="Á" k="143" /> +<hkern u1="'" u2="À" k="143" /> +<hkern u1="'" u2="u" k="61" /> +<hkern u1="'" u2="s" k="61" /> +<hkern u1="'" u2="r" k="61" /> +<hkern u1="'" u2="q" k="123" /> +<hkern u1="'" u2="p" k="61" /> +<hkern u1="'" u2="o" k="123" /> +<hkern u1="'" u2="n" k="61" /> +<hkern u1="'" u2="m" k="61" /> +<hkern u1="'" u2="g" k="61" /> +<hkern u1="'" u2="e" k="123" /> +<hkern u1="'" u2="d" k="123" /> +<hkern u1="'" u2="c" k="123" /> +<hkern u1="'" u2="a" k="82" /> +<hkern u1="'" u2="Y" k="-20" /> +<hkern u1="'" u2="W" k="-41" /> +<hkern u1="'" u2="V" k="-41" /> +<hkern u1="'" u2="T" k="-41" /> +<hkern u1="'" u2="A" k="143" /> +<hkern u1="(" u2="J" k="-184" /> +<hkern u1="," u2="Ÿ" k="123" /> +<hkern u1="," u2="Œ" k="102" /> +<hkern u1="," u2="Ý" k="123" /> +<hkern u1="," u2="Ü" k="41" /> +<hkern u1="," u2="Û" k="41" /> +<hkern u1="," u2="Ú" k="41" /> +<hkern u1="," u2="Ù" k="41" /> +<hkern u1="," u2="Ø" k="102" /> +<hkern u1="," u2="Ö" k="102" /> +<hkern u1="," u2="Õ" k="102" /> +<hkern u1="," u2="Ô" k="102" /> +<hkern u1="," u2="Ó" k="102" /> +<hkern u1="," u2="Ò" k="102" /> +<hkern u1="," u2="Ç" k="102" /> +<hkern u1="," u2="Y" k="123" /> +<hkern u1="," u2="W" k="123" /> +<hkern u1="," u2="V" k="123" /> +<hkern u1="," u2="U" k="41" /> +<hkern u1="," u2="T" k="143" /> +<hkern u1="," u2="Q" k="102" /> +<hkern u1="," u2="O" k="102" /> +<hkern u1="," u2="G" k="102" /> +<hkern u1="," u2="C" k="102" /> +<hkern u1="-" u2="T" k="82" /> +<hkern u1="." u2="Ÿ" k="123" /> +<hkern u1="." u2="Œ" k="102" /> +<hkern u1="." u2="Ý" k="123" /> +<hkern u1="." u2="Ü" k="41" /> +<hkern u1="." u2="Û" k="41" /> +<hkern u1="." u2="Ú" k="41" /> +<hkern u1="." u2="Ù" k="41" /> +<hkern u1="." u2="Ø" k="102" /> +<hkern u1="." u2="Ö" k="102" /> +<hkern u1="." u2="Õ" k="102" /> +<hkern u1="." u2="Ô" k="102" /> +<hkern u1="." u2="Ó" k="102" /> +<hkern u1="." u2="Ò" k="102" /> +<hkern u1="." u2="Ç" k="102" /> +<hkern u1="." u2="Y" k="123" /> +<hkern u1="." u2="W" k="123" /> +<hkern u1="." u2="V" k="123" /> +<hkern u1="." u2="U" k="41" /> +<hkern u1="." u2="T" k="143" /> +<hkern u1="." u2="Q" k="102" /> +<hkern u1="." u2="O" k="102" /> +<hkern u1="." u2="G" k="102" /> +<hkern u1="." u2="C" k="102" /> +<hkern u1="A" u2="”" k="143" /> +<hkern u1="A" u2="’" k="143" /> +<hkern u1="A" u2="Ÿ" k="123" /> +<hkern u1="A" u2="Œ" k="41" /> +<hkern u1="A" u2="Ý" k="123" /> +<hkern u1="A" u2="Ø" k="41" /> +<hkern u1="A" u2="Ö" k="41" /> +<hkern u1="A" u2="Õ" k="41" /> +<hkern u1="A" u2="Ô" k="41" /> +<hkern u1="A" u2="Ó" k="41" /> +<hkern u1="A" u2="Ò" k="41" /> +<hkern u1="A" u2="Ç" k="41" /> +<hkern u1="A" u2="Y" k="123" /> +<hkern u1="A" u2="W" k="82" /> +<hkern u1="A" u2="V" k="82" /> +<hkern u1="A" u2="T" k="143" /> +<hkern u1="A" u2="Q" k="41" /> +<hkern u1="A" u2="O" k="41" /> +<hkern u1="A" u2="J" k="-266" /> +<hkern u1="A" u2="G" k="41" /> +<hkern u1="A" u2="C" k="41" /> +<hkern u1="A" u2="'" k="143" /> +<hkern u1="A" u2=""" k="143" /> +<hkern u1="B" u2="„" k="82" /> +<hkern u1="B" u2="‚" k="82" /> +<hkern u1="B" u2="Ÿ" k="20" /> +<hkern u1="B" u2="Ý" k="20" /> +<hkern u1="B" u2="Å" k="41" /> +<hkern u1="B" u2="Ä" k="41" /> +<hkern u1="B" u2="Ã" k="41" /> +<hkern u1="B" u2="Â" k="41" /> +<hkern u1="B" u2="Á" k="41" /> +<hkern u1="B" u2="À" k="41" /> +<hkern u1="B" u2="Z" k="20" /> +<hkern u1="B" u2="Y" k="20" /> +<hkern u1="B" u2="X" k="41" /> +<hkern u1="B" u2="W" k="20" /> +<hkern u1="B" u2="V" k="20" /> +<hkern u1="B" u2="T" k="61" /> +<hkern u1="B" u2="A" k="41" /> +<hkern u1="B" u2="." k="82" /> +<hkern u1="B" u2="," k="82" /> +<hkern u1="C" u2="Œ" k="41" /> +<hkern u1="C" u2="Ø" k="41" /> +<hkern u1="C" u2="Ö" k="41" /> +<hkern u1="C" u2="Õ" k="41" /> +<hkern u1="C" u2="Ô" k="41" /> +<hkern u1="C" u2="Ó" k="41" /> +<hkern u1="C" u2="Ò" k="41" /> +<hkern u1="C" u2="Ç" k="41" /> +<hkern u1="C" u2="Q" k="41" /> +<hkern u1="C" u2="O" k="41" /> +<hkern u1="C" u2="G" k="41" /> +<hkern u1="C" u2="C" k="41" /> +<hkern u1="D" u2="„" k="82" /> +<hkern u1="D" u2="‚" k="82" /> +<hkern u1="D" u2="Ÿ" k="20" /> +<hkern u1="D" u2="Ý" k="20" /> +<hkern u1="D" u2="Å" k="41" /> +<hkern u1="D" u2="Ä" k="41" /> +<hkern u1="D" u2="Ã" k="41" /> +<hkern u1="D" u2="Â" k="41" /> +<hkern u1="D" u2="Á" k="41" /> +<hkern u1="D" u2="À" k="41" /> +<hkern u1="D" u2="Z" k="20" /> +<hkern u1="D" u2="Y" k="20" /> +<hkern u1="D" u2="X" k="41" /> +<hkern u1="D" u2="W" k="20" /> +<hkern u1="D" u2="V" k="20" /> +<hkern u1="D" u2="T" k="61" /> +<hkern u1="D" u2="A" k="41" /> +<hkern u1="D" u2="." k="82" /> +<hkern u1="D" u2="," k="82" /> +<hkern u1="E" u2="J" k="-123" /> +<hkern u1="F" u2="„" k="123" /> +<hkern u1="F" u2="‚" k="123" /> +<hkern u1="F" u2="Å" k="41" /> +<hkern u1="F" u2="Ä" k="41" /> +<hkern u1="F" u2="Ã" k="41" /> +<hkern u1="F" u2="Â" k="41" /> +<hkern u1="F" u2="Á" k="41" /> +<hkern u1="F" u2="À" k="41" /> +<hkern u1="F" u2="A" k="41" /> +<hkern u1="F" u2="?" k="-41" /> +<hkern u1="F" u2="." k="123" /> +<hkern u1="F" u2="," k="123" /> +<hkern u1="K" u2="Œ" k="41" /> +<hkern u1="K" u2="Ø" k="41" /> +<hkern u1="K" u2="Ö" k="41" /> +<hkern u1="K" u2="Õ" k="41" /> +<hkern u1="K" u2="Ô" k="41" /> +<hkern u1="K" u2="Ó" k="41" /> +<hkern u1="K" u2="Ò" k="41" /> +<hkern u1="K" u2="Ç" k="41" /> +<hkern u1="K" u2="Q" k="41" /> +<hkern u1="K" u2="O" k="41" /> +<hkern u1="K" u2="G" k="41" /> +<hkern u1="K" u2="C" k="41" /> +<hkern u1="L" u2="”" k="164" /> +<hkern u1="L" u2="’" k="164" /> +<hkern u1="L" u2="Ÿ" k="61" /> +<hkern u1="L" u2="Œ" k="41" /> +<hkern u1="L" u2="Ý" k="61" /> +<hkern u1="L" u2="Ü" k="20" /> +<hkern u1="L" u2="Û" k="20" /> +<hkern u1="L" u2="Ú" k="20" /> +<hkern u1="L" u2="Ù" k="20" /> +<hkern u1="L" u2="Ø" k="41" /> +<hkern u1="L" u2="Ö" k="41" /> +<hkern u1="L" u2="Õ" k="41" /> +<hkern u1="L" u2="Ô" k="41" /> +<hkern u1="L" u2="Ó" k="41" /> +<hkern u1="L" u2="Ò" k="41" /> +<hkern u1="L" u2="Ç" k="41" /> +<hkern u1="L" u2="Y" k="61" /> +<hkern u1="L" u2="W" k="41" /> +<hkern u1="L" u2="V" k="41" /> +<hkern u1="L" u2="U" k="20" /> +<hkern u1="L" u2="T" k="41" /> +<hkern u1="L" u2="Q" k="41" /> +<hkern u1="L" u2="O" k="41" /> +<hkern u1="L" u2="G" k="41" /> +<hkern u1="L" u2="C" k="41" /> +<hkern u1="L" u2="'" k="164" /> +<hkern u1="L" u2=""" k="164" /> +<hkern u1="O" u2="„" k="82" /> +<hkern u1="O" u2="‚" k="82" /> +<hkern u1="O" u2="Ÿ" k="20" /> +<hkern u1="O" u2="Ý" k="20" /> +<hkern u1="O" u2="Å" k="41" /> +<hkern u1="O" u2="Ä" k="41" /> +<hkern u1="O" u2="Ã" k="41" /> +<hkern u1="O" u2="Â" k="41" /> +<hkern u1="O" u2="Á" k="41" /> +<hkern u1="O" u2="À" k="41" /> +<hkern u1="O" u2="Z" k="20" /> +<hkern u1="O" u2="Y" k="20" /> +<hkern u1="O" u2="X" k="41" /> +<hkern u1="O" u2="W" k="20" /> +<hkern u1="O" u2="V" k="20" /> +<hkern u1="O" u2="T" k="61" /> +<hkern u1="O" u2="A" k="41" /> +<hkern u1="O" u2="." k="82" /> +<hkern u1="O" u2="," k="82" /> +<hkern u1="P" u2="„" k="266" /> +<hkern u1="P" u2="‚" k="266" /> +<hkern u1="P" u2="Å" k="102" /> +<hkern u1="P" u2="Ä" k="102" /> +<hkern u1="P" u2="Ã" k="102" /> +<hkern u1="P" u2="Â" k="102" /> +<hkern u1="P" u2="Á" k="102" /> +<hkern u1="P" u2="À" k="102" /> +<hkern u1="P" u2="Z" k="20" /> +<hkern u1="P" u2="X" k="41" /> +<hkern u1="P" u2="A" k="102" /> +<hkern u1="P" u2="." k="266" /> +<hkern u1="P" u2="," k="266" /> +<hkern u1="Q" u2="„" k="82" /> +<hkern u1="Q" u2="‚" k="82" /> +<hkern u1="Q" u2="Ÿ" k="20" /> +<hkern u1="Q" u2="Ý" k="20" /> +<hkern u1="Q" u2="Å" k="41" /> +<hkern u1="Q" u2="Ä" k="41" /> +<hkern u1="Q" u2="Ã" k="41" /> +<hkern u1="Q" u2="Â" k="41" /> +<hkern u1="Q" u2="Á" k="41" /> +<hkern u1="Q" u2="À" k="41" /> +<hkern u1="Q" u2="Z" k="20" /> +<hkern u1="Q" u2="Y" k="20" /> +<hkern u1="Q" u2="X" k="41" /> +<hkern u1="Q" u2="W" k="20" /> +<hkern u1="Q" u2="V" k="20" /> +<hkern u1="Q" u2="T" k="61" /> +<hkern u1="Q" u2="A" k="41" /> +<hkern u1="Q" u2="." k="82" /> +<hkern u1="Q" u2="," k="82" /> +<hkern u1="T" u2="„" k="123" /> +<hkern u1="T" u2="‚" k="123" /> +<hkern u1="T" u2="—" k="82" /> +<hkern u1="T" u2="–" k="82" /> +<hkern u1="T" u2="œ" k="143" /> +<hkern u1="T" u2="Œ" k="41" /> +<hkern u1="T" u2="ý" k="41" /> +<hkern u1="T" u2="ü" k="102" /> +<hkern u1="T" u2="û" k="102" /> +<hkern u1="T" u2="ú" k="102" /> +<hkern u1="T" u2="ù" k="102" /> +<hkern u1="T" u2="ø" k="143" /> +<hkern u1="T" u2="ö" k="143" /> +<hkern u1="T" u2="õ" k="143" /> +<hkern u1="T" u2="ô" k="143" /> +<hkern u1="T" u2="ó" k="143" /> +<hkern u1="T" u2="ò" k="143" /> +<hkern u1="T" u2="ë" k="143" /> +<hkern u1="T" u2="ê" k="143" /> +<hkern u1="T" u2="é" k="143" /> +<hkern u1="T" u2="è" k="143" /> +<hkern u1="T" u2="ç" k="143" /> +<hkern u1="T" u2="æ" k="164" /> +<hkern u1="T" u2="å" k="164" /> +<hkern u1="T" u2="ä" k="164" /> +<hkern u1="T" u2="ã" k="164" /> +<hkern u1="T" u2="â" k="164" /> +<hkern u1="T" u2="á" k="164" /> +<hkern u1="T" u2="à" k="143" /> +<hkern u1="T" u2="Ø" k="41" /> +<hkern u1="T" u2="Ö" k="41" /> +<hkern u1="T" u2="Õ" k="41" /> +<hkern u1="T" u2="Ô" k="41" /> +<hkern u1="T" u2="Ó" k="41" /> +<hkern u1="T" u2="Ò" k="41" /> +<hkern u1="T" u2="Ç" k="41" /> +<hkern u1="T" u2="Å" k="143" /> +<hkern u1="T" u2="Ä" k="143" /> +<hkern u1="T" u2="Ã" k="143" /> +<hkern u1="T" u2="Â" k="143" /> +<hkern u1="T" u2="Á" k="143" /> +<hkern u1="T" u2="À" k="143" /> +<hkern u1="T" u2="z" k="82" /> +<hkern u1="T" u2="y" k="41" /> +<hkern u1="T" u2="x" k="41" /> +<hkern u1="T" u2="w" k="41" /> +<hkern u1="T" u2="v" k="41" /> +<hkern u1="T" u2="u" k="102" /> +<hkern u1="T" u2="s" k="123" /> +<hkern u1="T" u2="r" k="102" /> +<hkern u1="T" u2="q" k="143" /> +<hkern u1="T" u2="p" k="102" /> +<hkern u1="T" u2="o" k="143" /> +<hkern u1="T" u2="n" k="102" /> +<hkern u1="T" u2="m" k="102" /> +<hkern u1="T" u2="g" k="143" /> +<hkern u1="T" u2="e" k="143" /> +<hkern u1="T" u2="d" k="143" /> +<hkern u1="T" u2="c" k="143" /> +<hkern u1="T" u2="a" k="164" /> +<hkern u1="T" u2="T" k="-41" /> +<hkern u1="T" u2="Q" k="41" /> +<hkern u1="T" u2="O" k="41" /> +<hkern u1="T" u2="G" k="41" /> +<hkern u1="T" u2="C" k="41" /> +<hkern u1="T" u2="A" k="143" /> +<hkern u1="T" u2="?" k="-41" /> +<hkern u1="T" u2="." k="123" /> +<hkern u1="T" u2="-" k="82" /> +<hkern u1="T" u2="," k="123" /> +<hkern u1="U" u2="„" k="41" /> +<hkern u1="U" u2="‚" k="41" /> +<hkern u1="U" u2="Å" k="20" /> +<hkern u1="U" u2="Ä" k="20" /> +<hkern u1="U" u2="Ã" k="20" /> +<hkern u1="U" u2="Â" k="20" /> +<hkern u1="U" u2="Á" k="20" /> +<hkern u1="U" u2="À" k="20" /> +<hkern u1="U" u2="A" k="20" /> +<hkern u1="U" u2="." k="41" /> +<hkern u1="U" u2="," k="41" /> +<hkern u1="V" u2="„" k="102" /> +<hkern u1="V" u2="‚" k="102" /> +<hkern u1="V" u2="œ" k="41" /> +<hkern u1="V" u2="Œ" k="20" /> +<hkern u1="V" u2="ü" k="20" /> +<hkern u1="V" u2="û" k="20" /> +<hkern u1="V" u2="ú" k="20" /> +<hkern u1="V" u2="ù" k="20" /> +<hkern u1="V" u2="ø" k="41" /> +<hkern u1="V" u2="ö" k="41" /> +<hkern u1="V" u2="õ" k="41" /> +<hkern u1="V" u2="ô" k="41" /> +<hkern u1="V" u2="ó" k="41" /> +<hkern u1="V" u2="ò" k="41" /> +<hkern u1="V" u2="ë" k="41" /> +<hkern u1="V" u2="ê" k="41" /> +<hkern u1="V" u2="é" k="41" /> +<hkern u1="V" u2="è" k="41" /> +<hkern u1="V" u2="ç" k="41" /> +<hkern u1="V" u2="æ" k="41" /> +<hkern u1="V" u2="å" k="41" /> +<hkern u1="V" u2="ä" k="41" /> +<hkern u1="V" u2="ã" k="41" /> +<hkern u1="V" u2="â" k="41" /> +<hkern u1="V" u2="á" k="41" /> +<hkern u1="V" u2="à" k="41" /> +<hkern u1="V" u2="Ø" k="20" /> +<hkern u1="V" u2="Ö" k="20" /> +<hkern u1="V" u2="Õ" k="20" /> +<hkern u1="V" u2="Ô" k="20" /> +<hkern u1="V" u2="Ó" k="20" /> +<hkern u1="V" u2="Ò" k="20" /> +<hkern u1="V" u2="Ç" k="20" /> +<hkern u1="V" u2="Å" k="82" /> +<hkern u1="V" u2="Ä" k="82" /> +<hkern u1="V" u2="Ã" k="82" /> +<hkern u1="V" u2="Â" k="82" /> +<hkern u1="V" u2="Á" k="82" /> +<hkern u1="V" u2="À" k="82" /> +<hkern u1="V" u2="u" k="20" /> +<hkern u1="V" u2="s" k="20" /> +<hkern u1="V" u2="r" k="20" /> +<hkern u1="V" u2="q" k="41" /> +<hkern u1="V" u2="p" k="20" /> +<hkern u1="V" u2="o" k="41" /> +<hkern u1="V" u2="n" k="20" /> +<hkern u1="V" u2="m" k="20" /> +<hkern u1="V" u2="g" k="20" /> +<hkern u1="V" u2="e" k="41" /> +<hkern u1="V" u2="d" k="41" /> +<hkern u1="V" u2="c" k="41" /> +<hkern u1="V" u2="a" k="41" /> +<hkern u1="V" u2="Q" k="20" /> +<hkern u1="V" u2="O" k="20" /> +<hkern u1="V" u2="G" k="20" /> +<hkern u1="V" u2="C" k="20" /> +<hkern u1="V" u2="A" k="82" /> +<hkern u1="V" u2="?" k="-41" /> +<hkern u1="V" u2="." k="102" /> +<hkern u1="V" u2="," k="102" /> +<hkern u1="W" u2="„" k="102" /> +<hkern u1="W" u2="‚" k="102" /> +<hkern u1="W" u2="œ" k="41" /> +<hkern u1="W" u2="Œ" k="20" /> +<hkern u1="W" u2="ü" k="20" /> +<hkern u1="W" u2="û" k="20" /> +<hkern u1="W" u2="ú" k="20" /> +<hkern u1="W" u2="ù" k="20" /> +<hkern u1="W" u2="ø" k="41" /> +<hkern u1="W" u2="ö" k="41" /> +<hkern u1="W" u2="õ" k="41" /> +<hkern u1="W" u2="ô" k="41" /> +<hkern u1="W" u2="ó" k="41" /> +<hkern u1="W" u2="ò" k="41" /> +<hkern u1="W" u2="ë" k="41" /> +<hkern u1="W" u2="ê" k="41" /> +<hkern u1="W" u2="é" k="41" /> +<hkern u1="W" u2="è" k="41" /> +<hkern u1="W" u2="ç" k="41" /> +<hkern u1="W" u2="æ" k="41" /> +<hkern u1="W" u2="å" k="41" /> +<hkern u1="W" u2="ä" k="41" /> +<hkern u1="W" u2="ã" k="41" /> +<hkern u1="W" u2="â" k="41" /> +<hkern u1="W" u2="á" k="41" /> +<hkern u1="W" u2="à" k="41" /> +<hkern u1="W" u2="Ø" k="20" /> +<hkern u1="W" u2="Ö" k="20" /> +<hkern u1="W" u2="Õ" k="20" /> +<hkern u1="W" u2="Ô" k="20" /> +<hkern u1="W" u2="Ó" k="20" /> +<hkern u1="W" u2="Ò" k="20" /> +<hkern u1="W" u2="Ç" k="20" /> +<hkern u1="W" u2="Å" k="82" /> +<hkern u1="W" u2="Ä" k="82" /> +<hkern u1="W" u2="Ã" k="82" /> +<hkern u1="W" u2="Â" k="82" /> +<hkern u1="W" u2="Á" k="82" /> +<hkern u1="W" u2="À" k="82" /> +<hkern u1="W" u2="u" k="20" /> +<hkern u1="W" u2="s" k="20" /> +<hkern u1="W" u2="r" k="20" /> +<hkern u1="W" u2="q" k="41" /> +<hkern u1="W" u2="p" k="20" /> +<hkern u1="W" u2="o" k="41" /> +<hkern u1="W" u2="n" k="20" /> +<hkern u1="W" u2="m" k="20" /> +<hkern u1="W" u2="g" k="20" /> +<hkern u1="W" u2="e" k="41" /> +<hkern u1="W" u2="d" k="41" /> +<hkern u1="W" u2="c" k="41" /> +<hkern u1="W" u2="a" k="41" /> +<hkern u1="W" u2="Q" k="20" /> +<hkern u1="W" u2="O" k="20" /> +<hkern u1="W" u2="G" k="20" /> +<hkern u1="W" u2="C" k="20" /> +<hkern u1="W" u2="A" k="82" /> +<hkern u1="W" u2="?" k="-41" /> +<hkern u1="W" u2="." k="102" /> +<hkern u1="W" u2="," k="102" /> +<hkern u1="X" u2="Œ" k="41" /> +<hkern u1="X" u2="Ø" k="41" /> +<hkern u1="X" u2="Ö" k="41" /> +<hkern u1="X" u2="Õ" k="41" /> +<hkern u1="X" u2="Ô" k="41" /> +<hkern u1="X" u2="Ó" k="41" /> +<hkern u1="X" u2="Ò" k="41" /> +<hkern u1="X" u2="Ç" k="41" /> +<hkern u1="X" u2="Q" k="41" /> +<hkern u1="X" u2="O" k="41" /> +<hkern u1="X" u2="G" k="41" /> +<hkern u1="X" u2="C" k="41" /> +<hkern u1="Y" u2="„" k="123" /> +<hkern u1="Y" u2="‚" k="123" /> +<hkern u1="Y" u2="œ" k="102" /> +<hkern u1="Y" u2="Œ" k="41" /> +<hkern u1="Y" u2="ü" k="61" /> +<hkern u1="Y" u2="û" k="61" /> +<hkern u1="Y" u2="ú" k="61" /> +<hkern u1="Y" u2="ù" k="61" /> +<hkern u1="Y" u2="ø" k="102" /> +<hkern u1="Y" u2="ö" k="102" /> +<hkern u1="Y" u2="õ" k="102" /> +<hkern u1="Y" u2="ô" k="102" /> +<hkern u1="Y" u2="ó" k="102" /> +<hkern u1="Y" u2="ò" k="102" /> +<hkern u1="Y" u2="ë" k="102" /> +<hkern u1="Y" u2="ê" k="102" /> +<hkern u1="Y" u2="é" k="102" /> +<hkern u1="Y" u2="è" k="102" /> +<hkern u1="Y" u2="ç" k="102" /> +<hkern u1="Y" u2="æ" k="102" /> +<hkern u1="Y" u2="å" k="102" /> +<hkern u1="Y" u2="ä" k="102" /> +<hkern u1="Y" u2="ã" k="102" /> +<hkern u1="Y" u2="â" k="102" /> +<hkern u1="Y" u2="á" k="102" /> +<hkern u1="Y" u2="à" k="102" /> +<hkern u1="Y" u2="Ø" k="41" /> +<hkern u1="Y" u2="Ö" k="41" /> +<hkern u1="Y" u2="Õ" k="41" /> +<hkern u1="Y" u2="Ô" k="41" /> +<hkern u1="Y" u2="Ó" k="41" /> +<hkern u1="Y" u2="Ò" k="41" /> +<hkern u1="Y" u2="Ç" k="41" /> +<hkern u1="Y" u2="Å" k="123" /> +<hkern u1="Y" u2="Ä" k="123" /> +<hkern u1="Y" u2="Ã" k="123" /> +<hkern u1="Y" u2="Â" k="123" /> +<hkern u1="Y" u2="Á" k="123" /> +<hkern u1="Y" u2="À" k="123" /> +<hkern u1="Y" u2="z" k="41" /> +<hkern u1="Y" u2="u" k="61" /> +<hkern u1="Y" u2="s" k="82" /> +<hkern u1="Y" u2="r" k="61" /> +<hkern u1="Y" u2="q" k="102" /> +<hkern u1="Y" u2="p" k="61" /> +<hkern u1="Y" u2="o" k="102" /> +<hkern u1="Y" u2="n" k="61" /> +<hkern u1="Y" u2="m" k="61" /> +<hkern u1="Y" u2="g" k="41" /> +<hkern u1="Y" u2="e" k="102" /> +<hkern u1="Y" u2="d" k="102" /> +<hkern u1="Y" u2="c" k="102" /> +<hkern u1="Y" u2="a" k="102" /> +<hkern u1="Y" u2="Q" k="41" /> +<hkern u1="Y" u2="O" k="41" /> +<hkern u1="Y" u2="G" k="41" /> +<hkern u1="Y" u2="C" k="41" /> +<hkern u1="Y" u2="A" k="123" /> +<hkern u1="Y" u2="?" k="-41" /> +<hkern u1="Y" u2="." k="123" /> +<hkern u1="Y" u2="," k="123" /> +<hkern u1="Z" u2="Œ" k="20" /> +<hkern u1="Z" u2="Ø" k="20" /> +<hkern u1="Z" u2="Ö" k="20" /> +<hkern u1="Z" u2="Õ" k="20" /> +<hkern u1="Z" u2="Ô" k="20" /> +<hkern u1="Z" u2="Ó" k="20" /> +<hkern u1="Z" u2="Ò" k="20" /> +<hkern u1="Z" u2="Ç" k="20" /> +<hkern u1="Z" u2="Q" k="20" /> +<hkern u1="Z" u2="O" k="20" /> +<hkern u1="Z" u2="G" k="20" /> +<hkern u1="Z" u2="C" k="20" /> +<hkern u1="[" u2="J" k="-184" /> +<hkern u1="a" u2="”" k="20" /> +<hkern u1="a" u2="’" k="20" /> +<hkern u1="a" u2="'" k="20" /> +<hkern u1="a" u2=""" k="20" /> +<hkern u1="b" u2="”" k="20" /> +<hkern u1="b" u2="’" k="20" /> +<hkern u1="b" u2="ý" k="41" /> +<hkern u1="b" u2="z" k="20" /> +<hkern u1="b" u2="y" k="41" /> +<hkern u1="b" u2="x" k="41" /> +<hkern u1="b" u2="w" k="41" /> +<hkern u1="b" u2="v" k="41" /> +<hkern u1="b" u2="'" k="20" /> +<hkern u1="b" u2=""" k="20" /> +<hkern u1="c" u2="”" k="-41" /> +<hkern u1="c" u2="’" k="-41" /> +<hkern u1="c" u2="'" k="-41" /> +<hkern u1="c" u2=""" k="-41" /> +<hkern u1="e" u2="”" k="20" /> +<hkern u1="e" u2="’" k="20" /> +<hkern u1="e" u2="ý" k="41" /> +<hkern u1="e" u2="z" k="20" /> +<hkern u1="e" u2="y" k="41" /> +<hkern u1="e" u2="x" k="41" /> +<hkern u1="e" u2="w" k="41" /> +<hkern u1="e" u2="v" k="41" /> +<hkern u1="e" u2="'" k="20" /> +<hkern u1="e" u2=""" k="20" /> +<hkern u1="f" u2="”" k="-123" /> +<hkern u1="f" u2="’" k="-123" /> +<hkern u1="f" u2="'" k="-123" /> +<hkern u1="f" u2=""" k="-123" /> +<hkern u1="h" u2="”" k="20" /> +<hkern u1="h" u2="’" k="20" /> +<hkern u1="h" u2="'" k="20" /> +<hkern u1="h" u2=""" k="20" /> +<hkern u1="k" u2="œ" k="41" /> +<hkern u1="k" u2="ø" k="41" /> +<hkern u1="k" u2="ö" k="41" /> +<hkern u1="k" u2="õ" k="41" /> +<hkern u1="k" u2="ô" k="41" /> +<hkern u1="k" u2="ó" k="41" /> +<hkern u1="k" u2="ò" k="41" /> +<hkern u1="k" u2="ë" k="41" /> +<hkern u1="k" u2="ê" k="41" /> +<hkern u1="k" u2="é" k="41" /> +<hkern u1="k" u2="è" k="41" /> +<hkern u1="k" u2="ç" k="41" /> +<hkern u1="k" u2="à" k="41" /> +<hkern u1="k" u2="q" k="41" /> +<hkern u1="k" u2="o" k="41" /> +<hkern u1="k" u2="e" k="41" /> +<hkern u1="k" u2="d" k="41" /> +<hkern u1="k" u2="c" k="41" /> +<hkern u1="m" u2="”" k="20" /> +<hkern u1="m" u2="’" k="20" /> +<hkern u1="m" u2="'" k="20" /> +<hkern u1="m" u2=""" k="20" /> +<hkern u1="n" u2="”" k="20" /> +<hkern u1="n" u2="’" k="20" /> +<hkern u1="n" u2="'" k="20" /> +<hkern u1="n" u2=""" k="20" /> +<hkern u1="o" u2="”" k="20" /> +<hkern u1="o" u2="’" k="20" /> +<hkern u1="o" u2="ý" k="41" /> +<hkern u1="o" u2="z" k="20" /> +<hkern u1="o" u2="y" k="41" /> +<hkern u1="o" u2="x" k="41" /> +<hkern u1="o" u2="w" k="41" /> +<hkern u1="o" u2="v" k="41" /> +<hkern u1="o" u2="'" k="20" /> +<hkern u1="o" u2=""" k="20" /> +<hkern u1="p" u2="”" k="20" /> +<hkern u1="p" u2="’" k="20" /> +<hkern u1="p" u2="ý" k="41" /> +<hkern u1="p" u2="z" k="20" /> +<hkern u1="p" u2="y" k="41" /> +<hkern u1="p" u2="x" k="41" /> +<hkern u1="p" u2="w" k="41" /> +<hkern u1="p" u2="v" k="41" /> +<hkern u1="p" u2="'" k="20" /> +<hkern u1="p" u2=""" k="20" /> +<hkern u1="r" u2="”" k="-82" /> +<hkern u1="r" u2="’" k="-82" /> +<hkern u1="r" u2="œ" k="41" /> +<hkern u1="r" u2="ø" k="41" /> +<hkern u1="r" u2="ö" k="41" /> +<hkern u1="r" u2="õ" k="41" /> +<hkern u1="r" u2="ô" k="41" /> +<hkern u1="r" u2="ó" k="41" /> +<hkern u1="r" u2="ò" k="41" /> +<hkern u1="r" u2="ë" k="41" /> +<hkern u1="r" u2="ê" k="41" /> +<hkern u1="r" u2="é" k="41" /> +<hkern u1="r" u2="è" k="41" /> +<hkern u1="r" u2="ç" k="41" /> +<hkern u1="r" u2="æ" k="41" /> +<hkern u1="r" u2="å" k="41" /> +<hkern u1="r" u2="ä" k="41" /> +<hkern u1="r" u2="ã" k="41" /> +<hkern u1="r" u2="â" k="41" /> +<hkern u1="r" u2="á" k="41" /> +<hkern u1="r" u2="à" k="41" /> +<hkern u1="r" u2="q" k="41" /> +<hkern u1="r" u2="o" k="41" /> +<hkern u1="r" u2="g" k="20" /> +<hkern u1="r" u2="e" k="41" /> +<hkern u1="r" u2="d" k="41" /> +<hkern u1="r" u2="c" k="41" /> +<hkern u1="r" u2="a" k="41" /> +<hkern u1="r" u2="'" k="-82" /> +<hkern u1="r" u2=""" k="-82" /> +<hkern u1="t" u2="”" k="-41" /> +<hkern u1="t" u2="’" k="-41" /> +<hkern u1="t" u2="'" k="-41" /> +<hkern u1="t" u2=""" k="-41" /> +<hkern u1="v" u2="„" k="82" /> +<hkern u1="v" u2="”" k="-82" /> +<hkern u1="v" u2="‚" k="82" /> +<hkern u1="v" u2="’" k="-82" /> +<hkern u1="v" u2="?" k="-41" /> +<hkern u1="v" u2="." k="82" /> +<hkern u1="v" u2="," k="82" /> +<hkern u1="v" u2="'" k="-82" /> +<hkern u1="v" u2=""" k="-82" /> +<hkern u1="w" u2="„" k="82" /> +<hkern u1="w" u2="”" k="-82" /> +<hkern u1="w" u2="‚" k="82" /> +<hkern u1="w" u2="’" k="-82" /> +<hkern u1="w" u2="?" k="-41" /> +<hkern u1="w" u2="." k="82" /> +<hkern u1="w" u2="," k="82" /> +<hkern u1="w" u2="'" k="-82" /> +<hkern u1="w" u2=""" k="-82" /> +<hkern u1="x" u2="œ" k="41" /> +<hkern u1="x" u2="ø" k="41" /> +<hkern u1="x" u2="ö" k="41" /> +<hkern u1="x" u2="õ" k="41" /> +<hkern u1="x" u2="ô" k="41" /> +<hkern u1="x" u2="ó" k="41" /> +<hkern u1="x" u2="ò" k="41" /> +<hkern u1="x" u2="ë" k="41" /> +<hkern u1="x" u2="ê" k="41" /> +<hkern u1="x" u2="é" k="41" /> +<hkern u1="x" u2="è" k="41" /> +<hkern u1="x" u2="ç" k="41" /> +<hkern u1="x" u2="à" k="41" /> +<hkern u1="x" u2="q" k="41" /> +<hkern u1="x" u2="o" k="41" /> +<hkern u1="x" u2="e" k="41" /> +<hkern u1="x" u2="d" k="41" /> +<hkern u1="x" u2="c" k="41" /> +<hkern u1="y" u2="„" k="82" /> +<hkern u1="y" u2="”" k="-82" /> +<hkern u1="y" u2="‚" k="82" /> +<hkern u1="y" u2="’" k="-82" /> +<hkern u1="y" u2="?" k="-41" /> +<hkern u1="y" u2="." k="82" /> +<hkern u1="y" u2="," k="82" /> +<hkern u1="y" u2="'" k="-82" /> +<hkern u1="y" u2=""" k="-82" /> +<hkern u1="{" u2="J" k="-184" /> +<hkern u1="À" u2="”" k="143" /> +<hkern u1="À" u2="’" k="143" /> +<hkern u1="À" u2="Ÿ" k="123" /> +<hkern u1="À" u2="Œ" k="41" /> +<hkern u1="À" u2="Ý" k="123" /> +<hkern u1="À" u2="Ø" k="41" /> +<hkern u1="À" u2="Ö" k="41" /> +<hkern u1="À" u2="Õ" k="41" /> +<hkern u1="À" u2="Ô" k="41" /> +<hkern u1="À" u2="Ó" k="41" /> +<hkern u1="À" u2="Ò" k="41" /> +<hkern u1="À" u2="Ç" k="41" /> +<hkern u1="À" u2="Y" k="123" /> +<hkern u1="À" u2="W" k="82" /> +<hkern u1="À" u2="V" k="82" /> +<hkern u1="À" u2="T" k="143" /> +<hkern u1="À" u2="Q" k="41" /> +<hkern u1="À" u2="O" k="41" /> +<hkern u1="À" u2="J" k="-266" /> +<hkern u1="À" u2="G" k="41" /> +<hkern u1="À" u2="C" k="41" /> +<hkern u1="À" u2="'" k="143" /> +<hkern u1="À" u2=""" k="143" /> +<hkern u1="Á" u2="”" k="143" /> +<hkern u1="Á" u2="’" k="143" /> +<hkern u1="Á" u2="Ÿ" k="123" /> +<hkern u1="Á" u2="Œ" k="41" /> +<hkern u1="Á" u2="Ý" k="123" /> +<hkern u1="Á" u2="Ø" k="41" /> +<hkern u1="Á" u2="Ö" k="41" /> +<hkern u1="Á" u2="Õ" k="41" /> +<hkern u1="Á" u2="Ô" k="41" /> +<hkern u1="Á" u2="Ó" k="41" /> +<hkern u1="Á" u2="Ò" k="41" /> +<hkern u1="Á" u2="Ç" k="41" /> +<hkern u1="Á" u2="Y" k="123" /> +<hkern u1="Á" u2="W" k="82" /> +<hkern u1="Á" u2="V" k="82" /> +<hkern u1="Á" u2="T" k="143" /> +<hkern u1="Á" u2="Q" k="41" /> +<hkern u1="Á" u2="O" k="41" /> +<hkern u1="Á" u2="J" k="-266" /> +<hkern u1="Á" u2="G" k="41" /> +<hkern u1="Á" u2="C" k="41" /> +<hkern u1="Á" u2="'" k="143" /> +<hkern u1="Á" u2=""" k="143" /> +<hkern u1="Â" u2="”" k="143" /> +<hkern u1="Â" u2="’" k="143" /> +<hkern u1="Â" u2="Ÿ" k="123" /> +<hkern u1="Â" u2="Œ" k="41" /> +<hkern u1="Â" u2="Ý" k="123" /> +<hkern u1="Â" u2="Ø" k="41" /> +<hkern u1="Â" u2="Ö" k="41" /> +<hkern u1="Â" u2="Õ" k="41" /> +<hkern u1="Â" u2="Ô" k="41" /> +<hkern u1="Â" u2="Ó" k="41" /> +<hkern u1="Â" u2="Ò" k="41" /> +<hkern u1="Â" u2="Ç" k="41" /> +<hkern u1="Â" u2="Y" k="123" /> +<hkern u1="Â" u2="W" k="82" /> +<hkern u1="Â" u2="V" k="82" /> +<hkern u1="Â" u2="T" k="143" /> +<hkern u1="Â" u2="Q" k="41" /> +<hkern u1="Â" u2="O" k="41" /> +<hkern u1="Â" u2="J" k="-266" /> +<hkern u1="Â" u2="G" k="41" /> +<hkern u1="Â" u2="C" k="41" /> +<hkern u1="Â" u2="'" k="143" /> +<hkern u1="Â" u2=""" k="143" /> +<hkern u1="Ã" u2="”" k="143" /> +<hkern u1="Ã" u2="’" k="143" /> +<hkern u1="Ã" u2="Ÿ" k="123" /> +<hkern u1="Ã" u2="Œ" k="41" /> +<hkern u1="Ã" u2="Ý" k="123" /> +<hkern u1="Ã" u2="Ø" k="41" /> +<hkern u1="Ã" u2="Ö" k="41" /> +<hkern u1="Ã" u2="Õ" k="41" /> +<hkern u1="Ã" u2="Ô" k="41" /> +<hkern u1="Ã" u2="Ó" k="41" /> +<hkern u1="Ã" u2="Ò" k="41" /> +<hkern u1="Ã" u2="Ç" k="41" /> +<hkern u1="Ã" u2="Y" k="123" /> +<hkern u1="Ã" u2="W" k="82" /> +<hkern u1="Ã" u2="V" k="82" /> +<hkern u1="Ã" u2="T" k="143" /> +<hkern u1="Ã" u2="Q" k="41" /> +<hkern u1="Ã" u2="O" k="41" /> +<hkern u1="Ã" u2="J" k="-266" /> +<hkern u1="Ã" u2="G" k="41" /> +<hkern u1="Ã" u2="C" k="41" /> +<hkern u1="Ã" u2="'" k="143" /> +<hkern u1="Ã" u2=""" k="143" /> +<hkern u1="Ä" u2="”" k="143" /> +<hkern u1="Ä" u2="’" k="143" /> +<hkern u1="Ä" u2="Ÿ" k="123" /> +<hkern u1="Ä" u2="Œ" k="41" /> +<hkern u1="Ä" u2="Ý" k="123" /> +<hkern u1="Ä" u2="Ø" k="41" /> +<hkern u1="Ä" u2="Ö" k="41" /> +<hkern u1="Ä" u2="Õ" k="41" /> +<hkern u1="Ä" u2="Ô" k="41" /> +<hkern u1="Ä" u2="Ó" k="41" /> +<hkern u1="Ä" u2="Ò" k="41" /> +<hkern u1="Ä" u2="Ç" k="41" /> +<hkern u1="Ä" u2="Y" k="123" /> +<hkern u1="Ä" u2="W" k="82" /> +<hkern u1="Ä" u2="V" k="82" /> +<hkern u1="Ä" u2="T" k="143" /> +<hkern u1="Ä" u2="Q" k="41" /> +<hkern u1="Ä" u2="O" k="41" /> +<hkern u1="Ä" u2="J" k="-266" /> +<hkern u1="Ä" u2="G" k="41" /> +<hkern u1="Ä" u2="C" k="41" /> +<hkern u1="Ä" u2="'" k="143" /> +<hkern u1="Ä" u2=""" k="143" /> +<hkern u1="Å" u2="”" k="143" /> +<hkern u1="Å" u2="’" k="143" /> +<hkern u1="Å" u2="Ÿ" k="123" /> +<hkern u1="Å" u2="Œ" k="41" /> +<hkern u1="Å" u2="Ý" k="123" /> +<hkern u1="Å" u2="Ø" k="41" /> +<hkern u1="Å" u2="Ö" k="41" /> +<hkern u1="Å" u2="Õ" k="41" /> +<hkern u1="Å" u2="Ô" k="41" /> +<hkern u1="Å" u2="Ó" k="41" /> +<hkern u1="Å" u2="Ò" k="41" /> +<hkern u1="Å" u2="Ç" k="41" /> +<hkern u1="Å" u2="Y" k="123" /> +<hkern u1="Å" u2="W" k="82" /> +<hkern u1="Å" u2="V" k="82" /> +<hkern u1="Å" u2="T" k="143" /> +<hkern u1="Å" u2="Q" k="41" /> +<hkern u1="Å" u2="O" k="41" /> +<hkern u1="Å" u2="J" k="-266" /> +<hkern u1="Å" u2="G" k="41" /> +<hkern u1="Å" u2="C" k="41" /> +<hkern u1="Å" u2="'" k="143" /> +<hkern u1="Å" u2=""" k="143" /> +<hkern u1="Æ" u2="J" k="-123" /> +<hkern u1="Ç" u2="Œ" k="41" /> +<hkern u1="Ç" u2="Ø" k="41" /> +<hkern u1="Ç" u2="Ö" k="41" /> +<hkern u1="Ç" u2="Õ" k="41" /> +<hkern u1="Ç" u2="Ô" k="41" /> +<hkern u1="Ç" u2="Ó" k="41" /> +<hkern u1="Ç" u2="Ò" k="41" /> +<hkern u1="Ç" u2="Ç" k="41" /> +<hkern u1="Ç" u2="Q" k="41" /> +<hkern u1="Ç" u2="O" k="41" /> +<hkern u1="Ç" u2="G" k="41" /> +<hkern u1="Ç" u2="C" k="41" /> +<hkern u1="È" u2="J" k="-123" /> +<hkern u1="É" u2="J" k="-123" /> +<hkern u1="Ê" u2="J" k="-123" /> +<hkern u1="Ë" u2="J" k="-123" /> +<hkern u1="Ð" u2="„" k="82" /> +<hkern u1="Ð" u2="‚" k="82" /> +<hkern u1="Ð" u2="Ÿ" k="20" /> +<hkern u1="Ð" u2="Ý" k="20" /> +<hkern u1="Ð" u2="Å" k="41" /> +<hkern u1="Ð" u2="Ä" k="41" /> +<hkern u1="Ð" u2="Ã" k="41" /> +<hkern u1="Ð" u2="Â" k="41" /> +<hkern u1="Ð" u2="Á" k="41" /> +<hkern u1="Ð" u2="À" k="41" /> +<hkern u1="Ð" u2="Z" k="20" /> +<hkern u1="Ð" u2="Y" k="20" /> +<hkern u1="Ð" u2="X" k="41" /> +<hkern u1="Ð" u2="W" k="20" /> +<hkern u1="Ð" u2="V" k="20" /> +<hkern u1="Ð" u2="T" k="61" /> +<hkern u1="Ð" u2="A" k="41" /> +<hkern u1="Ð" u2="." k="82" /> +<hkern u1="Ð" u2="," k="82" /> +<hkern u1="Ò" u2="„" k="82" /> +<hkern u1="Ò" u2="‚" k="82" /> +<hkern u1="Ò" u2="Ÿ" k="20" /> +<hkern u1="Ò" u2="Ý" k="20" /> +<hkern u1="Ò" u2="Å" k="41" /> +<hkern u1="Ò" u2="Ä" k="41" /> +<hkern u1="Ò" u2="Ã" k="41" /> +<hkern u1="Ò" u2="Â" k="41" /> +<hkern u1="Ò" u2="Á" k="41" /> +<hkern u1="Ò" u2="À" k="41" /> +<hkern u1="Ò" u2="Z" k="20" /> +<hkern u1="Ò" u2="Y" k="20" /> +<hkern u1="Ò" u2="X" k="41" /> +<hkern u1="Ò" u2="W" k="20" /> +<hkern u1="Ò" u2="V" k="20" /> +<hkern u1="Ò" u2="T" k="61" /> +<hkern u1="Ò" u2="A" k="41" /> +<hkern u1="Ò" u2="." k="82" /> +<hkern u1="Ò" u2="," k="82" /> +<hkern u1="Ó" u2="„" k="82" /> +<hkern u1="Ó" u2="‚" k="82" /> +<hkern u1="Ó" u2="Ÿ" k="20" /> +<hkern u1="Ó" u2="Ý" k="20" /> +<hkern u1="Ó" u2="Å" k="41" /> +<hkern u1="Ó" u2="Ä" k="41" /> +<hkern u1="Ó" u2="Ã" k="41" /> +<hkern u1="Ó" u2="Â" k="41" /> +<hkern u1="Ó" u2="Á" k="41" /> +<hkern u1="Ó" u2="À" k="41" /> +<hkern u1="Ó" u2="Z" k="20" /> +<hkern u1="Ó" u2="Y" k="20" /> +<hkern u1="Ó" u2="X" k="41" /> +<hkern u1="Ó" u2="W" k="20" /> +<hkern u1="Ó" u2="V" k="20" /> +<hkern u1="Ó" u2="T" k="61" /> +<hkern u1="Ó" u2="A" k="41" /> +<hkern u1="Ó" u2="." k="82" /> +<hkern u1="Ó" u2="," k="82" /> +<hkern u1="Ô" u2="„" k="82" /> +<hkern u1="Ô" u2="‚" k="82" /> +<hkern u1="Ô" u2="Ÿ" k="20" /> +<hkern u1="Ô" u2="Ý" k="20" /> +<hkern u1="Ô" u2="Å" k="41" /> +<hkern u1="Ô" u2="Ä" k="41" /> +<hkern u1="Ô" u2="Ã" k="41" /> +<hkern u1="Ô" u2="Â" k="41" /> +<hkern u1="Ô" u2="Á" k="41" /> +<hkern u1="Ô" u2="À" k="41" /> +<hkern u1="Ô" u2="Z" k="20" /> +<hkern u1="Ô" u2="Y" k="20" /> +<hkern u1="Ô" u2="X" k="41" /> +<hkern u1="Ô" u2="W" k="20" /> +<hkern u1="Ô" u2="V" k="20" /> +<hkern u1="Ô" u2="T" k="61" /> +<hkern u1="Ô" u2="A" k="41" /> +<hkern u1="Ô" u2="." k="82" /> +<hkern u1="Ô" u2="," k="82" /> +<hkern u1="Õ" u2="„" k="82" /> +<hkern u1="Õ" u2="‚" k="82" /> +<hkern u1="Õ" u2="Ÿ" k="20" /> +<hkern u1="Õ" u2="Ý" k="20" /> +<hkern u1="Õ" u2="Å" k="41" /> +<hkern u1="Õ" u2="Ä" k="41" /> +<hkern u1="Õ" u2="Ã" k="41" /> +<hkern u1="Õ" u2="Â" k="41" /> +<hkern u1="Õ" u2="Á" k="41" /> +<hkern u1="Õ" u2="À" k="41" /> +<hkern u1="Õ" u2="Z" k="20" /> +<hkern u1="Õ" u2="Y" k="20" /> +<hkern u1="Õ" u2="X" k="41" /> +<hkern u1="Õ" u2="W" k="20" /> +<hkern u1="Õ" u2="V" k="20" /> +<hkern u1="Õ" u2="T" k="61" /> +<hkern u1="Õ" u2="A" k="41" /> +<hkern u1="Õ" u2="." k="82" /> +<hkern u1="Õ" u2="," k="82" /> +<hkern u1="Ö" u2="„" k="82" /> +<hkern u1="Ö" u2="‚" k="82" /> +<hkern u1="Ö" u2="Ÿ" k="20" /> +<hkern u1="Ö" u2="Ý" k="20" /> +<hkern u1="Ö" u2="Å" k="41" /> +<hkern u1="Ö" u2="Ä" k="41" /> +<hkern u1="Ö" u2="Ã" k="41" /> +<hkern u1="Ö" u2="Â" k="41" /> +<hkern u1="Ö" u2="Á" k="41" /> +<hkern u1="Ö" u2="À" k="41" /> +<hkern u1="Ö" u2="Z" k="20" /> +<hkern u1="Ö" u2="Y" k="20" /> +<hkern u1="Ö" u2="X" k="41" /> +<hkern u1="Ö" u2="W" k="20" /> +<hkern u1="Ö" u2="V" k="20" /> +<hkern u1="Ö" u2="T" k="61" /> +<hkern u1="Ö" u2="A" k="41" /> +<hkern u1="Ö" u2="." k="82" /> +<hkern u1="Ö" u2="," k="82" /> +<hkern u1="Ø" u2="„" k="82" /> +<hkern u1="Ø" u2="‚" k="82" /> +<hkern u1="Ø" u2="Ÿ" k="20" /> +<hkern u1="Ø" u2="Ý" k="20" /> +<hkern u1="Ø" u2="Å" k="41" /> +<hkern u1="Ø" u2="Ä" k="41" /> +<hkern u1="Ø" u2="Ã" k="41" /> +<hkern u1="Ø" u2="Â" k="41" /> +<hkern u1="Ø" u2="Á" k="41" /> +<hkern u1="Ø" u2="À" k="41" /> +<hkern u1="Ø" u2="Z" k="20" /> +<hkern u1="Ø" u2="Y" k="20" /> +<hkern u1="Ø" u2="X" k="41" /> +<hkern u1="Ø" u2="W" k="20" /> +<hkern u1="Ø" u2="V" k="20" /> +<hkern u1="Ø" u2="T" k="61" /> +<hkern u1="Ø" u2="A" k="41" /> +<hkern u1="Ø" u2="." k="82" /> +<hkern u1="Ø" u2="," k="82" /> +<hkern u1="Ù" u2="„" k="41" /> +<hkern u1="Ù" u2="‚" k="41" /> +<hkern u1="Ù" u2="Å" k="20" /> +<hkern u1="Ù" u2="Ä" k="20" /> +<hkern u1="Ù" u2="Ã" k="20" /> +<hkern u1="Ù" u2="Â" k="20" /> +<hkern u1="Ù" u2="Á" k="20" /> +<hkern u1="Ù" u2="À" k="20" /> +<hkern u1="Ù" u2="A" k="20" /> +<hkern u1="Ù" u2="." k="41" /> +<hkern u1="Ù" u2="," k="41" /> +<hkern u1="Ú" u2="„" k="41" /> +<hkern u1="Ú" u2="‚" k="41" /> +<hkern u1="Ú" u2="Å" k="20" /> +<hkern u1="Ú" u2="Ä" k="20" /> +<hkern u1="Ú" u2="Ã" k="20" /> +<hkern u1="Ú" u2="Â" k="20" /> +<hkern u1="Ú" u2="Á" k="20" /> +<hkern u1="Ú" u2="À" k="20" /> +<hkern u1="Ú" u2="A" k="20" /> +<hkern u1="Ú" u2="." k="41" /> +<hkern u1="Ú" u2="," k="41" /> +<hkern u1="Û" u2="„" k="41" /> +<hkern u1="Û" u2="‚" k="41" /> +<hkern u1="Û" u2="Å" k="20" /> +<hkern u1="Û" u2="Ä" k="20" /> +<hkern u1="Û" u2="Ã" k="20" /> +<hkern u1="Û" u2="Â" k="20" /> +<hkern u1="Û" u2="Á" k="20" /> +<hkern u1="Û" u2="À" k="20" /> +<hkern u1="Û" u2="A" k="20" /> +<hkern u1="Û" u2="." k="41" /> +<hkern u1="Û" u2="," k="41" /> +<hkern u1="Ü" u2="„" k="41" /> +<hkern u1="Ü" u2="‚" k="41" /> +<hkern u1="Ü" u2="Å" k="20" /> +<hkern u1="Ü" u2="Ä" k="20" /> +<hkern u1="Ü" u2="Ã" k="20" /> +<hkern u1="Ü" u2="Â" k="20" /> +<hkern u1="Ü" u2="Á" k="20" /> +<hkern u1="Ü" u2="À" k="20" /> +<hkern u1="Ü" u2="A" k="20" /> +<hkern u1="Ü" u2="." k="41" /> +<hkern u1="Ü" u2="," k="41" /> +<hkern u1="Ý" u2="„" k="123" /> +<hkern u1="Ý" u2="‚" k="123" /> +<hkern u1="Ý" u2="œ" k="102" /> +<hkern u1="Ý" u2="Œ" k="41" /> +<hkern u1="Ý" u2="ü" k="61" /> +<hkern u1="Ý" u2="û" k="61" /> +<hkern u1="Ý" u2="ú" k="61" /> +<hkern u1="Ý" u2="ù" k="61" /> +<hkern u1="Ý" u2="ø" k="102" /> +<hkern u1="Ý" u2="ö" k="102" /> +<hkern u1="Ý" u2="õ" k="102" /> +<hkern u1="Ý" u2="ô" k="102" /> +<hkern u1="Ý" u2="ó" k="102" /> +<hkern u1="Ý" u2="ò" k="102" /> +<hkern u1="Ý" u2="ë" k="102" /> +<hkern u1="Ý" u2="ê" k="102" /> +<hkern u1="Ý" u2="é" k="102" /> +<hkern u1="Ý" u2="è" k="102" /> +<hkern u1="Ý" u2="ç" k="102" /> +<hkern u1="Ý" u2="æ" k="102" /> +<hkern u1="Ý" u2="å" k="102" /> +<hkern u1="Ý" u2="ä" k="102" /> +<hkern u1="Ý" u2="ã" k="102" /> +<hkern u1="Ý" u2="â" k="102" /> +<hkern u1="Ý" u2="á" k="102" /> +<hkern u1="Ý" u2="à" k="102" /> +<hkern u1="Ý" u2="Ø" k="41" /> +<hkern u1="Ý" u2="Ö" k="41" /> +<hkern u1="Ý" u2="Õ" k="41" /> +<hkern u1="Ý" u2="Ô" k="41" /> +<hkern u1="Ý" u2="Ó" k="41" /> +<hkern u1="Ý" u2="Ò" k="41" /> +<hkern u1="Ý" u2="Ç" k="41" /> +<hkern u1="Ý" u2="Å" k="123" /> +<hkern u1="Ý" u2="Ä" k="123" /> +<hkern u1="Ý" u2="Ã" k="123" /> +<hkern u1="Ý" u2="Â" k="123" /> +<hkern u1="Ý" u2="Á" k="123" /> +<hkern u1="Ý" u2="À" k="123" /> +<hkern u1="Ý" u2="z" k="41" /> +<hkern u1="Ý" u2="u" k="61" /> +<hkern u1="Ý" u2="s" k="82" /> +<hkern u1="Ý" u2="r" k="61" /> +<hkern u1="Ý" u2="q" k="102" /> +<hkern u1="Ý" u2="p" k="61" /> +<hkern u1="Ý" u2="o" k="102" /> +<hkern u1="Ý" u2="n" k="61" /> +<hkern u1="Ý" u2="m" k="61" /> +<hkern u1="Ý" u2="g" k="41" /> +<hkern u1="Ý" u2="e" k="102" /> +<hkern u1="Ý" u2="d" k="102" /> +<hkern u1="Ý" u2="c" k="102" /> +<hkern u1="Ý" u2="a" k="102" /> +<hkern u1="Ý" u2="Q" k="41" /> +<hkern u1="Ý" u2="O" k="41" /> +<hkern u1="Ý" u2="G" k="41" /> +<hkern u1="Ý" u2="C" k="41" /> +<hkern u1="Ý" u2="A" k="123" /> +<hkern u1="Ý" u2="?" k="-41" /> +<hkern u1="Ý" u2="." k="123" /> +<hkern u1="Ý" u2="," k="123" /> +<hkern u1="Þ" u2="„" k="266" /> +<hkern u1="Þ" u2="‚" k="266" /> +<hkern u1="Þ" u2="Å" k="102" /> +<hkern u1="Þ" u2="Ä" k="102" /> +<hkern u1="Þ" u2="Ã" k="102" /> +<hkern u1="Þ" u2="Â" k="102" /> +<hkern u1="Þ" u2="Á" k="102" /> +<hkern u1="Þ" u2="À" k="102" /> +<hkern u1="Þ" u2="Z" k="20" /> +<hkern u1="Þ" u2="X" k="41" /> +<hkern u1="Þ" u2="A" k="102" /> +<hkern u1="Þ" u2="." k="266" /> +<hkern u1="Þ" u2="," k="266" /> +<hkern u1="à" u2="”" k="20" /> +<hkern u1="à" u2="’" k="20" /> +<hkern u1="à" u2="'" k="20" /> +<hkern u1="à" u2=""" k="20" /> +<hkern u1="á" u2="”" k="20" /> +<hkern u1="á" u2="’" k="20" /> +<hkern u1="á" u2="'" k="20" /> +<hkern u1="á" u2=""" k="20" /> +<hkern u1="â" u2="”" k="20" /> +<hkern u1="â" u2="’" k="20" /> +<hkern u1="â" u2="'" k="20" /> +<hkern u1="â" u2=""" k="20" /> +<hkern u1="ã" u2="”" k="20" /> +<hkern u1="ã" u2="’" k="20" /> +<hkern u1="ã" u2="'" k="20" /> +<hkern u1="ã" u2=""" k="20" /> +<hkern u1="ä" u2="”" k="20" /> +<hkern u1="ä" u2="’" k="20" /> +<hkern u1="ä" u2="'" k="20" /> +<hkern u1="ä" u2=""" k="20" /> +<hkern u1="å" u2="”" k="20" /> +<hkern u1="å" u2="’" k="20" /> +<hkern u1="å" u2="'" k="20" /> +<hkern u1="å" u2=""" k="20" /> +<hkern u1="è" u2="”" k="20" /> +<hkern u1="è" u2="’" k="20" /> +<hkern u1="è" u2="ý" k="41" /> +<hkern u1="è" u2="z" k="20" /> +<hkern u1="è" u2="y" k="41" /> +<hkern u1="è" u2="x" k="41" /> +<hkern u1="è" u2="w" k="41" /> +<hkern u1="è" u2="v" k="41" /> +<hkern u1="è" u2="'" k="20" /> +<hkern u1="è" u2=""" k="20" /> +<hkern u1="é" u2="”" k="20" /> +<hkern u1="é" u2="’" k="20" /> +<hkern u1="é" u2="ý" k="41" /> +<hkern u1="é" u2="z" k="20" /> +<hkern u1="é" u2="y" k="41" /> +<hkern u1="é" u2="x" k="41" /> +<hkern u1="é" u2="w" k="41" /> +<hkern u1="é" u2="v" k="41" /> +<hkern u1="é" u2="'" k="20" /> +<hkern u1="é" u2=""" k="20" /> +<hkern u1="ê" u2="”" k="20" /> +<hkern u1="ê" u2="’" k="20" /> +<hkern u1="ê" u2="ý" k="41" /> +<hkern u1="ê" u2="z" k="20" /> +<hkern u1="ê" u2="y" k="41" /> +<hkern u1="ê" u2="x" k="41" /> +<hkern u1="ê" u2="w" k="41" /> +<hkern u1="ê" u2="v" k="41" /> +<hkern u1="ê" u2="'" k="20" /> +<hkern u1="ê" u2=""" k="20" /> +<hkern u1="ë" u2="”" k="20" /> +<hkern u1="ë" u2="’" k="20" /> +<hkern u1="ë" u2="ý" k="41" /> +<hkern u1="ë" u2="z" k="20" /> +<hkern u1="ë" u2="y" k="41" /> +<hkern u1="ë" u2="x" k="41" /> +<hkern u1="ë" u2="w" k="41" /> +<hkern u1="ë" u2="v" k="41" /> +<hkern u1="ë" u2="'" k="20" /> +<hkern u1="ë" u2=""" k="20" /> +<hkern u1="ð" u2="”" k="20" /> +<hkern u1="ð" u2="’" k="20" /> +<hkern u1="ð" u2="ý" k="41" /> +<hkern u1="ð" u2="z" k="20" /> +<hkern u1="ð" u2="y" k="41" /> +<hkern u1="ð" u2="x" k="41" /> +<hkern u1="ð" u2="w" k="41" /> +<hkern u1="ð" u2="v" k="41" /> +<hkern u1="ð" u2="'" k="20" /> +<hkern u1="ð" u2=""" k="20" /> +<hkern u1="ò" u2="”" k="20" /> +<hkern u1="ò" u2="’" k="20" /> +<hkern u1="ò" u2="ý" k="41" /> +<hkern u1="ò" u2="z" k="20" /> +<hkern u1="ò" u2="y" k="41" /> +<hkern u1="ò" u2="x" k="41" /> +<hkern u1="ò" u2="w" k="41" /> +<hkern u1="ò" u2="v" k="41" /> +<hkern u1="ò" u2="'" k="20" /> +<hkern u1="ò" u2=""" k="20" /> +<hkern u1="ó" u2="”" k="20" /> +<hkern u1="ó" u2="’" k="20" /> +<hkern u1="ó" u2="ý" k="41" /> +<hkern u1="ó" u2="z" k="20" /> +<hkern u1="ó" u2="y" k="41" /> +<hkern u1="ó" u2="x" k="41" /> +<hkern u1="ó" u2="w" k="41" /> +<hkern u1="ó" u2="v" k="41" /> +<hkern u1="ó" u2="'" k="20" /> +<hkern u1="ó" u2=""" k="20" /> +<hkern u1="ô" u2="”" k="20" /> +<hkern u1="ô" u2="’" k="20" /> +<hkern u1="ô" u2="ý" k="41" /> +<hkern u1="ô" u2="z" k="20" /> +<hkern u1="ô" u2="y" k="41" /> +<hkern u1="ô" u2="x" k="41" /> +<hkern u1="ô" u2="w" k="41" /> +<hkern u1="ô" u2="v" k="41" /> +<hkern u1="ô" u2="'" k="20" /> +<hkern u1="ô" u2=""" k="20" /> +<hkern u1="ö" u2="”" k="41" /> +<hkern u1="ö" u2="’" k="41" /> +<hkern u1="ö" u2="'" k="41" /> +<hkern u1="ö" u2=""" k="41" /> +<hkern u1="ø" u2="”" k="20" /> +<hkern u1="ø" u2="’" k="20" /> +<hkern u1="ø" u2="ý" k="41" /> +<hkern u1="ø" u2="z" k="20" /> +<hkern u1="ø" u2="y" k="41" /> +<hkern u1="ø" u2="x" k="41" /> +<hkern u1="ø" u2="w" k="41" /> +<hkern u1="ø" u2="v" k="41" /> +<hkern u1="ø" u2="'" k="20" /> +<hkern u1="ø" u2=""" k="20" /> +<hkern u1="ý" u2="„" k="82" /> +<hkern u1="ý" u2="”" k="-82" /> +<hkern u1="ý" u2="‚" k="82" /> +<hkern u1="ý" u2="’" k="-82" /> +<hkern u1="ý" u2="?" k="-41" /> +<hkern u1="ý" u2="." k="82" /> +<hkern u1="ý" u2="," k="82" /> +<hkern u1="ý" u2="'" k="-82" /> +<hkern u1="ý" u2=""" k="-82" /> +<hkern u1="þ" u2="”" k="20" /> +<hkern u1="þ" u2="’" k="20" /> +<hkern u1="þ" u2="ý" k="41" /> +<hkern u1="þ" u2="z" k="20" /> +<hkern u1="þ" u2="y" k="41" /> +<hkern u1="þ" u2="x" k="41" /> +<hkern u1="þ" u2="w" k="41" /> +<hkern u1="þ" u2="v" k="41" /> +<hkern u1="þ" u2="'" k="20" /> +<hkern u1="þ" u2=""" k="20" /> +<hkern u1="ÿ" u2="„" k="82" /> +<hkern u1="ÿ" u2="”" k="-82" /> +<hkern u1="ÿ" u2="‚" k="82" /> +<hkern u1="ÿ" u2="’" k="-82" /> +<hkern u1="ÿ" u2="?" k="-41" /> +<hkern u1="ÿ" u2="." k="82" /> +<hkern u1="ÿ" u2="," k="82" /> +<hkern u1="ÿ" u2="'" k="-82" /> +<hkern u1="ÿ" u2=""" k="-82" /> +<hkern u1="Œ" u2="J" k="-123" /> +<hkern u1="Ÿ" u2="„" k="123" /> +<hkern u1="Ÿ" u2="‚" k="123" /> +<hkern u1="Ÿ" u2="œ" k="102" /> +<hkern u1="Ÿ" u2="Œ" k="41" /> +<hkern u1="Ÿ" u2="ü" k="61" /> +<hkern u1="Ÿ" u2="û" k="61" /> +<hkern u1="Ÿ" u2="ú" k="61" /> +<hkern u1="Ÿ" u2="ù" k="61" /> +<hkern u1="Ÿ" u2="ø" k="102" /> +<hkern u1="Ÿ" u2="ö" k="102" /> +<hkern u1="Ÿ" u2="õ" k="102" /> +<hkern u1="Ÿ" u2="ô" k="102" /> +<hkern u1="Ÿ" u2="ó" k="102" /> +<hkern u1="Ÿ" u2="ò" k="102" /> +<hkern u1="Ÿ" u2="ë" k="102" /> +<hkern u1="Ÿ" u2="ê" k="102" /> +<hkern u1="Ÿ" u2="é" k="102" /> +<hkern u1="Ÿ" u2="è" k="102" /> +<hkern u1="Ÿ" u2="ç" k="102" /> +<hkern u1="Ÿ" u2="æ" k="102" /> +<hkern u1="Ÿ" u2="å" k="102" /> +<hkern u1="Ÿ" u2="ä" k="102" /> +<hkern u1="Ÿ" u2="ã" k="102" /> +<hkern u1="Ÿ" u2="â" k="102" /> +<hkern u1="Ÿ" u2="á" k="102" /> +<hkern u1="Ÿ" u2="à" k="102" /> +<hkern u1="Ÿ" u2="Ø" k="41" /> +<hkern u1="Ÿ" u2="Ö" k="41" /> +<hkern u1="Ÿ" u2="Õ" k="41" /> +<hkern u1="Ÿ" u2="Ô" k="41" /> +<hkern u1="Ÿ" u2="Ó" k="41" /> +<hkern u1="Ÿ" u2="Ò" k="41" /> +<hkern u1="Ÿ" u2="Ç" k="41" /> +<hkern u1="Ÿ" u2="Å" k="123" /> +<hkern u1="Ÿ" u2="Ä" k="123" /> +<hkern u1="Ÿ" u2="Ã" k="123" /> +<hkern u1="Ÿ" u2="Â" k="123" /> +<hkern u1="Ÿ" u2="Á" k="123" /> +<hkern u1="Ÿ" u2="À" k="123" /> +<hkern u1="Ÿ" u2="z" k="41" /> +<hkern u1="Ÿ" u2="u" k="61" /> +<hkern u1="Ÿ" u2="s" k="82" /> +<hkern u1="Ÿ" u2="r" k="61" /> +<hkern u1="Ÿ" u2="q" k="102" /> +<hkern u1="Ÿ" u2="p" k="61" /> +<hkern u1="Ÿ" u2="o" k="102" /> +<hkern u1="Ÿ" u2="n" k="61" /> +<hkern u1="Ÿ" u2="m" k="61" /> +<hkern u1="Ÿ" u2="g" k="41" /> +<hkern u1="Ÿ" u2="e" k="102" /> +<hkern u1="Ÿ" u2="d" k="102" /> +<hkern u1="Ÿ" u2="c" k="102" /> +<hkern u1="Ÿ" u2="a" k="102" /> +<hkern u1="Ÿ" u2="Q" k="41" /> +<hkern u1="Ÿ" u2="O" k="41" /> +<hkern u1="Ÿ" u2="G" k="41" /> +<hkern u1="Ÿ" u2="C" k="41" /> +<hkern u1="Ÿ" u2="A" k="123" /> +<hkern u1="Ÿ" u2="?" k="-41" /> +<hkern u1="Ÿ" u2="." k="123" /> +<hkern u1="Ÿ" u2="," k="123" /> +<hkern u1="–" u2="T" k="82" /> +<hkern u1="—" u2="T" k="82" /> +<hkern u1="‘" u2="Ÿ" k="-20" /> +<hkern u1="‘" u2="œ" k="123" /> +<hkern u1="‘" u2="ü" k="61" /> +<hkern u1="‘" u2="û" k="61" /> +<hkern u1="‘" u2="ú" k="61" /> +<hkern u1="‘" u2="ù" k="61" /> +<hkern u1="‘" u2="ø" k="123" /> +<hkern u1="‘" u2="ö" k="123" /> +<hkern u1="‘" u2="õ" k="123" /> +<hkern u1="‘" u2="ô" k="123" /> +<hkern u1="‘" u2="ó" k="123" /> +<hkern u1="‘" u2="ò" k="123" /> +<hkern u1="‘" u2="ë" k="123" /> +<hkern u1="‘" u2="ê" k="123" /> +<hkern u1="‘" u2="é" k="123" /> +<hkern u1="‘" u2="è" k="123" /> +<hkern u1="‘" u2="ç" k="123" /> +<hkern u1="‘" u2="æ" k="82" /> +<hkern u1="‘" u2="å" k="82" /> +<hkern u1="‘" u2="ä" k="82" /> +<hkern u1="‘" u2="ã" k="82" /> +<hkern u1="‘" u2="â" k="82" /> +<hkern u1="‘" u2="á" k="82" /> +<hkern u1="‘" u2="à" k="123" /> +<hkern u1="‘" u2="Ý" k="-20" /> +<hkern u1="‘" u2="Å" k="143" /> +<hkern u1="‘" u2="Ä" k="143" /> +<hkern u1="‘" u2="Ã" k="143" /> +<hkern u1="‘" u2="Â" k="143" /> +<hkern u1="‘" u2="Á" k="143" /> +<hkern u1="‘" u2="À" k="143" /> +<hkern u1="‘" u2="u" k="61" /> +<hkern u1="‘" u2="s" k="61" /> +<hkern u1="‘" u2="r" k="61" /> +<hkern u1="‘" u2="q" k="123" /> +<hkern u1="‘" u2="p" k="61" /> +<hkern u1="‘" u2="o" k="123" /> +<hkern u1="‘" u2="n" k="61" /> +<hkern u1="‘" u2="m" k="61" /> +<hkern u1="‘" u2="g" k="61" /> +<hkern u1="‘" u2="e" k="123" /> +<hkern u1="‘" u2="d" k="123" /> +<hkern u1="‘" u2="c" k="123" /> +<hkern u1="‘" u2="a" k="82" /> +<hkern u1="‘" u2="Y" k="-20" /> +<hkern u1="‘" u2="W" k="-41" /> +<hkern u1="‘" u2="V" k="-41" /> +<hkern u1="‘" u2="T" k="-41" /> +<hkern u1="‘" u2="A" k="143" /> +<hkern u1="’" u2="Ÿ" k="-20" /> +<hkern u1="’" u2="œ" k="123" /> +<hkern u1="’" u2="ü" k="61" /> +<hkern u1="’" u2="û" k="61" /> +<hkern u1="’" u2="ú" k="61" /> +<hkern u1="’" u2="ù" k="61" /> +<hkern u1="’" u2="ø" k="123" /> +<hkern u1="’" u2="ö" k="123" /> +<hkern u1="’" u2="õ" k="123" /> +<hkern u1="’" u2="ô" k="123" /> +<hkern u1="’" u2="ó" k="123" /> +<hkern u1="’" u2="ò" k="123" /> +<hkern u1="’" u2="ë" k="123" /> +<hkern u1="’" u2="ê" k="123" /> +<hkern u1="’" u2="é" k="123" /> +<hkern u1="’" u2="è" k="123" /> +<hkern u1="’" u2="ç" k="123" /> +<hkern u1="’" u2="æ" k="82" /> +<hkern u1="’" u2="å" k="82" /> +<hkern u1="’" u2="ä" k="82" /> +<hkern u1="’" u2="ã" k="82" /> +<hkern u1="’" u2="â" k="82" /> +<hkern u1="’" u2="á" k="82" /> +<hkern u1="’" u2="à" k="123" /> +<hkern u1="’" u2="Ý" k="-20" /> +<hkern u1="’" u2="Å" k="143" /> +<hkern u1="’" u2="Ä" k="143" /> +<hkern u1="’" u2="Ã" k="143" /> +<hkern u1="’" u2="Â" k="143" /> +<hkern u1="’" u2="Á" k="143" /> +<hkern u1="’" u2="À" k="143" /> +<hkern u1="’" u2="u" k="61" /> +<hkern u1="’" u2="s" k="61" /> +<hkern u1="’" u2="r" k="61" /> +<hkern u1="’" u2="q" k="123" /> +<hkern u1="’" u2="p" k="61" /> +<hkern u1="’" u2="o" k="123" /> +<hkern u1="’" u2="n" k="61" /> +<hkern u1="’" u2="m" k="61" /> +<hkern u1="’" u2="g" k="61" /> +<hkern u1="’" u2="e" k="123" /> +<hkern u1="’" u2="d" k="123" /> +<hkern u1="’" u2="c" k="123" /> +<hkern u1="’" u2="a" k="82" /> +<hkern u1="’" u2="Y" k="-20" /> +<hkern u1="’" u2="W" k="-41" /> +<hkern u1="’" u2="V" k="-41" /> +<hkern u1="’" u2="T" k="-41" /> +<hkern u1="’" u2="A" k="143" /> +<hkern u1="‚" u2="Ÿ" k="123" /> +<hkern u1="‚" u2="Œ" k="102" /> +<hkern u1="‚" u2="Ý" k="123" /> +<hkern u1="‚" u2="Ü" k="41" /> +<hkern u1="‚" u2="Û" k="41" /> +<hkern u1="‚" u2="Ú" k="41" /> +<hkern u1="‚" u2="Ù" k="41" /> +<hkern u1="‚" u2="Ø" k="102" /> +<hkern u1="‚" u2="Ö" k="102" /> +<hkern u1="‚" u2="Õ" k="102" /> +<hkern u1="‚" u2="Ô" k="102" /> +<hkern u1="‚" u2="Ó" k="102" /> +<hkern u1="‚" u2="Ò" k="102" /> +<hkern u1="‚" u2="Ç" k="102" /> +<hkern u1="‚" u2="Y" k="123" /> +<hkern u1="‚" u2="W" k="123" /> +<hkern u1="‚" u2="V" k="123" /> +<hkern u1="‚" u2="U" k="41" /> +<hkern u1="‚" u2="T" k="143" /> +<hkern u1="‚" u2="Q" k="102" /> +<hkern u1="‚" u2="O" k="102" /> +<hkern u1="‚" u2="G" k="102" /> +<hkern u1="‚" u2="C" k="102" /> +<hkern u1="“" u2="Ÿ" k="-20" /> +<hkern u1="“" u2="œ" k="123" /> +<hkern u1="“" u2="ü" k="61" /> +<hkern u1="“" u2="û" k="61" /> +<hkern u1="“" u2="ú" k="61" /> +<hkern u1="“" u2="ù" k="61" /> +<hkern u1="“" u2="ø" k="123" /> +<hkern u1="“" u2="ö" k="123" /> +<hkern u1="“" u2="õ" k="123" /> +<hkern u1="“" u2="ô" k="123" /> +<hkern u1="“" u2="ó" k="123" /> +<hkern u1="“" u2="ò" k="123" /> +<hkern u1="“" u2="ë" k="123" /> +<hkern u1="“" u2="ê" k="123" /> +<hkern u1="“" u2="é" k="123" /> +<hkern u1="“" u2="è" k="123" /> +<hkern u1="“" u2="ç" k="123" /> +<hkern u1="“" u2="æ" k="82" /> +<hkern u1="“" u2="å" k="82" /> +<hkern u1="“" u2="ä" k="82" /> +<hkern u1="“" u2="ã" k="82" /> +<hkern u1="“" u2="â" k="82" /> +<hkern u1="“" u2="á" k="82" /> +<hkern u1="“" u2="à" k="123" /> +<hkern u1="“" u2="Ý" k="-20" /> +<hkern u1="“" u2="Å" k="143" /> +<hkern u1="“" u2="Ä" k="143" /> +<hkern u1="“" u2="Ã" k="143" /> +<hkern u1="“" u2="Â" k="143" /> +<hkern u1="“" u2="Á" k="143" /> +<hkern u1="“" u2="À" k="143" /> +<hkern u1="“" u2="u" k="61" /> +<hkern u1="“" u2="s" k="61" /> +<hkern u1="“" u2="r" k="61" /> +<hkern u1="“" u2="q" k="123" /> +<hkern u1="“" u2="p" k="61" /> +<hkern u1="“" u2="o" k="123" /> +<hkern u1="“" u2="n" k="61" /> +<hkern u1="“" u2="m" k="61" /> +<hkern u1="“" u2="g" k="61" /> +<hkern u1="“" u2="e" k="123" /> +<hkern u1="“" u2="d" k="123" /> +<hkern u1="“" u2="c" k="123" /> +<hkern u1="“" u2="a" k="82" /> +<hkern u1="“" u2="Y" k="-20" /> +<hkern u1="“" u2="W" k="-41" /> +<hkern u1="“" u2="V" k="-41" /> +<hkern u1="“" u2="T" k="-41" /> +<hkern u1="“" u2="A" k="143" /> +<hkern u1="„" u2="Ÿ" k="123" /> +<hkern u1="„" u2="Œ" k="102" /> +<hkern u1="„" u2="Ý" k="123" /> +<hkern u1="„" u2="Ü" k="41" /> +<hkern u1="„" u2="Û" k="41" /> +<hkern u1="„" u2="Ú" k="41" /> +<hkern u1="„" u2="Ù" k="41" /> +<hkern u1="„" u2="Ø" k="102" /> +<hkern u1="„" u2="Ö" k="102" /> +<hkern u1="„" u2="Õ" k="102" /> +<hkern u1="„" u2="Ô" k="102" /> +<hkern u1="„" u2="Ó" k="102" /> +<hkern u1="„" u2="Ò" k="102" /> +<hkern u1="„" u2="Ç" k="102" /> +<hkern u1="„" u2="Y" k="123" /> +<hkern u1="„" u2="W" k="123" /> +<hkern u1="„" u2="V" k="123" /> +<hkern u1="„" u2="U" k="41" /> +<hkern u1="„" u2="T" k="143" /> +<hkern u1="„" u2="Q" k="102" /> +<hkern u1="„" u2="O" k="102" /> +<hkern u1="„" u2="G" k="102" /> +<hkern u1="„" u2="C" k="102" /> +</font> +</defs></svg>
\ No newline at end of file diff --git a/documentation/jsapi/fonts/OpenSans-Bold-webfont.woff b/documentation/jsapi/fonts/OpenSans-Bold-webfont.woff Binary files differnew file mode 100644 index 000000000..1205787b0 --- /dev/null +++ b/documentation/jsapi/fonts/OpenSans-Bold-webfont.woff diff --git a/documentation/jsapi/fonts/OpenSans-BoldItalic-webfont.eot b/documentation/jsapi/fonts/OpenSans-BoldItalic-webfont.eot Binary files differnew file mode 100644 index 000000000..1f639a15f --- /dev/null +++ b/documentation/jsapi/fonts/OpenSans-BoldItalic-webfont.eot diff --git a/documentation/jsapi/fonts/OpenSans-BoldItalic-webfont.svg b/documentation/jsapi/fonts/OpenSans-BoldItalic-webfont.svg new file mode 100644 index 000000000..6a2607b9d --- /dev/null +++ b/documentation/jsapi/fonts/OpenSans-BoldItalic-webfont.svg @@ -0,0 +1,1830 @@ +<?xml version="1.0" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" > +<svg xmlns="http://www.w3.org/2000/svg"> +<metadata></metadata> +<defs> +<font id="open_sansbold_italic" horiz-adv-x="1128" > +<font-face units-per-em="2048" ascent="1638" descent="-410" /> +<missing-glyph horiz-adv-x="532" /> +<glyph unicode="fi" horiz-adv-x="1352" d="M0 0zM-45 -492q-104 0 -174 25v242q61 -21 115 -21q61 0 107 40t65 130l204 965h-163l30 145l183 84l18 84q41 190 138.5 277.5t273.5 87.5q131 0 235 -49l-80 -224q-69 31 -133 31q-57 0 -92 -40t-47 -105l-12 -62h219l-49 -229h-220l-215 -1010q-77 -371 -403 -371z M1065 1380q0 87 47.5 131.5t134.5 44.5q73 0 111 -31t38 -89q0 -80 -44 -129.5t-136 -49.5q-151 0 -151 123zM1081 0h-301l237 1118h301z" /> +<glyph unicode="fl" horiz-adv-x="1352" d="M0 0zM-45 -492q-104 0 -174 25v242q61 -21 115 -21q61 0 107 40t65 130l204 965h-163l30 145l183 84l18 84q41 190 138.5 277.5t273.5 87.5q131 0 235 -49l-80 -224q-69 31 -133 31q-57 0 -92 -40t-47 -105l-12 -62h219l-49 -229h-220l-215 -1010q-77 -371 -403 -371z M1081 0h-301l330 1556h301z" /> +<glyph unicode="ffi" horiz-adv-x="2048" d="M-45 -492q-104 0 -174 25v242q61 -21 115 -21q61 0 107 40t65 130l204 965h-163l30 145l183 84l18 84q41 190 138.5 277.5t273.5 87.5q131 0 235 -49l-80 -224q-69 31 -133 31q-57 0 -92 -40t-47 -105l-12 -62h395l18 84q41 190 138.5 277.5t273.5 87.5q131 0 235 -49 l-79 -224q-69 31 -134 31q-57 0 -91.5 -40t-47.5 -105l-12 -62h219l-49 -229h-219l-215 -1010q-77 -371 -404 -371q-104 0 -174 25v242q61 -21 115 -21q136 0 172 170l205 965h-396l-215 -1010q-77 -371 -403 -371zM1778 0h-301l237 1118h301zM1761 1380q0 87 48 131.5 t135 44.5q73 0 111 -31t38 -89q0 -80 -44 -129.5t-136 -49.5q-152 0 -152 123z" /> +<glyph unicode="ffl" horiz-adv-x="2048" d="M-45 -492q-104 0 -174 25v242q61 -21 115 -21q61 0 107 40t65 130l204 965h-163l30 145l183 84l18 84q41 190 138.5 277.5t273.5 87.5q131 0 235 -49l-80 -224q-69 31 -133 31q-57 0 -92 -40t-47 -105l-12 -62h395l18 84q41 190 138.5 277.5t273.5 87.5q131 0 235 -49 l-79 -224q-69 31 -134 31q-57 0 -91.5 -40t-47.5 -105l-12 -62h219l-49 -229h-219l-215 -1010q-77 -371 -404 -371q-104 0 -174 25v242q61 -21 115 -21q136 0 172 170l205 965h-396l-215 -1010q-77 -371 -403 -371zM1778 0h-301l329 1556h301z" /> +<glyph horiz-adv-x="2048" /> +<glyph horiz-adv-x="2048" /> +<glyph unicode="
" horiz-adv-x="1044" /> +<glyph unicode=" " horiz-adv-x="532" /> +<glyph unicode="	" horiz-adv-x="532" /> +<glyph unicode=" " horiz-adv-x="532" /> +<glyph unicode="!" horiz-adv-x="586" d="M391 485h-241l157 977h340zM25 115q0 90 53.5 144t150.5 54q68 0 109 -38t41 -107q0 -87 -55 -141t-144 -54q-73 0 -114 37.5t-41 104.5z" /> +<glyph unicode=""" horiz-adv-x="928" d="M549 1462l-152 -528h-196l71 528h277zM954 1462l-151 -528h-199l74 528h276z" /> +<glyph unicode="#" horiz-adv-x="1323" d="M1036 846l-69 -232h258l-19 -206h-297l-116 -408h-220l117 408h-194l-115 -408h-215l113 408h-238l18 206h277l70 232h-252l18 209h289l119 407h217l-117 -407h199l116 407h215l-116 -407h239l-18 -209h-279zM553 614h197l69 232h-196z" /> +<glyph unicode="$" d="M1034 496q0 -184 -125.5 -291.5t-367.5 -124.5l-39 -199h-140l44 201q-209 12 -355 86v266q198 -107 404 -117l71 322q-163 61 -241 151t-78 214q0 173 127 279.5t350 121.5l35 151h139l-33 -151q166 -22 295 -90l-106 -232q-132 65 -242 74l-63 -299q131 -51 195 -99.5 t97 -113t33 -149.5zM594 322q63 9 102 45t39 98q0 46 -24.5 75.5t-59.5 43.5zM633 1157q-62 -7 -96.5 -41t-34.5 -94q0 -79 80 -111z" /> +<glyph unicode="%" horiz-adv-x="1753" d="M518 1274q-63 0 -110.5 -128.5t-47.5 -277.5q0 -96 56 -96q65 0 112 131t47 275q0 96 -57 96zM821 1165q0 -166 -56 -310t-151 -217t-217 -73q-139 0 -210.5 83.5t-71.5 236.5q0 169 55.5 311.5t148.5 214.5t216 72q137 0 211.5 -80t74.5 -238zM1554 1462l-1083 -1462 h-240l1088 1462h235zM1376 690q-39 0 -75 -56t-59 -154t-23 -195t55 -97q41 0 77 55t59.5 154.5t23.5 196.5q0 96 -58 96zM1679 590q0 -167 -54 -313.5t-148 -220.5t-215 -74q-144 0 -216.5 78.5t-72.5 222.5q0 177 53 322.5t148 219.5t219 74q137 0 211.5 -78.5 t74.5 -230.5z" /> +<glyph unicode="&" horiz-adv-x="1450" d="M1325 0h-350l-72 98q-175 -118 -403 -118q-209 0 -320.5 97.5t-111.5 280.5q0 145 78.5 248.5t273.5 200.5q-76 130 -76 258q0 195 117.5 307.5t316.5 112.5q169 0 266 -82.5t97 -224.5q0 -280 -365 -426l195 -263q44 57 80.5 121.5t78.5 173.5h300q-133 -313 -310 -497z M541 623q-88 -51 -123 -104.5t-35 -131.5q0 -65 45.5 -108t116.5 -43q115 0 221 59zM662 920q113 59 155.5 111t42.5 112q0 57 -30 82.5t-70 25.5q-66 0 -102.5 -46.5t-36.5 -119.5q0 -46 12 -92t29 -73z" /> +<glyph unicode="'" horiz-adv-x="522" d="M549 1462l-152 -528h-196l71 528h277z" /> +<glyph unicode="(" horiz-adv-x="694" d="M74 281q0 339 122.5 626.5t381.5 554.5h262q-255 -278 -377.5 -573.5t-122.5 -618.5q0 -308 117 -594h-234q-149 266 -149 605z" /> +<glyph unicode=")" horiz-adv-x="694" d="M618 858q0 -342 -124 -630.5t-379 -551.5h-262q499 545 499 1192q0 307 -116 594h233q149 -264 149 -604z" /> +<glyph unicode="*" horiz-adv-x="1116" d="M885 1522l-113 -353l387 29l-18 -254l-338 43l160 -336l-246 -73l-90 337l-197 -278l-207 164l275 248l-326 92l86 237l338 -174l33 369z" /> +<glyph unicode="+" d="M475 612h-366v219h366v369h219v-369h367v-219h-367v-364h-219v364z" /> +<glyph unicode="," horiz-adv-x="569" d="M377 238l8 -23q-118 -255 -262 -479h-225q74 167 194 502h285z" /> +<glyph unicode="-" horiz-adv-x="659" d="M41 424l53 250h524l-53 -250h-524z" /> +<glyph unicode="." horiz-adv-x="584" d="M25 115q0 90 53.5 144t150.5 54q68 0 109 -38t41 -107q0 -87 -55 -141t-144 -54q-73 0 -114 37.5t-41 104.5z" /> +<glyph unicode="/" horiz-adv-x="862" d="M1014 1462l-809 -1462h-295l809 1462h295z" /> +<glyph unicode="0" d="M1110 1012q0 -470 -168.5 -751t-472.5 -281q-198 0 -300.5 122t-102.5 365q0 297 84 537t228 360.5t333 120.5q399 0 399 -473zM684 1235q-80 0 -149.5 -104t-117.5 -302t-48 -368q0 -115 27.5 -173.5t97.5 -58.5q81 0 150.5 106t116 301t46.5 386q0 111 -30.5 162 t-92.5 51z" /> +<glyph unicode="1" d="M688 0h-305l180 829q35 152 76 287q-9 -8 -61.5 -47t-262.5 -170l-133 215l566 348h249z" /> +<glyph unicode="2" d="M913 0h-962l43 213l477 424q180 159 248.5 254.5t68.5 179.5q0 75 -41 114.5t-110 39.5q-66 0 -135.5 -33.5t-171.5 -118.5l-146 203q132 112 252 159.5t250 47.5q190 0 301 -98t111 -259q0 -107 -41 -201t-122.5 -188t-266.5 -245l-269 -222v-10h568z" /> +<glyph unicode="3" d="M1104 1149q0 -156 -94.5 -262t-261.5 -135v-4q131 -26 198.5 -106.5t67.5 -201.5q0 -133 -74 -238t-212 -163.5t-327 -58.5q-239 0 -387 79v267q84 -50 182 -75.5t191 -25.5q158 0 243 63.5t85 176.5q0 172 -258 172h-138l46 221h73q167 0 263 62t96 172q0 67 -43 104 t-121 37q-134 0 -287 -100l-127 204q124 81 232.5 113.5t246.5 32.5q190 0 298 -90.5t108 -243.5z" /> +<glyph unicode="4" d="M1028 303h-170l-63 -303h-293l63 303h-590l48 234l770 925h311l-195 -919h170zM616 543l58 248q12 58 40 164t42 141h-6q-35 -63 -132 -181l-313 -372h311z" /> +<glyph unicode="5" d="M623 922q183 0 289 -103t106 -287q0 -167 -71.5 -292t-208.5 -192.5t-330 -67.5q-117 0 -218.5 23t-162.5 58v269q174 -99 352 -99q154 0 241 71t87 194q0 94 -57.5 141t-166.5 47q-102 0 -213 -33l-104 78l207 733h755l-55 -262h-489l-88 -293q72 15 127 15z" /> +<glyph unicode="6" d="M88 469q0 202 61 395.5t167.5 335t256.5 213.5t357 72q125 0 223 -27l-51 -246q-84 25 -191 25q-194 0 -313.5 -108t-185.5 -345h4q115 166 311 166q157 0 242.5 -97t85.5 -273q0 -169 -71 -313.5t-190.5 -215.5t-277.5 -71q-212 0 -320 127t-108 362zM530 227 q99 0 161.5 94t62.5 236q0 71 -33.5 113.5t-102.5 42.5q-60 0 -114.5 -35.5t-87.5 -95.5t-33 -160q0 -91 40 -143t107 -52z" /> +<glyph unicode="7" d="M78 0l737 1202h-629l56 260h975l-41 -194l-752 -1268h-346z" /> +<glyph unicode="8" d="M721 1485q123 0 215.5 -42t141 -118t48.5 -174q0 -134 -80.5 -233.5t-230.5 -151.5q217 -141 217 -365q0 -122 -63.5 -218.5t-181 -149.5t-273.5 -53q-214 0 -336.5 100t-122.5 270q0 298 348 426q-165 132 -165 299q0 119 58 212.5t168 145.5t257 52zM582 643 q-116 -45 -173 -107t-57 -153q0 -81 50 -128.5t135 -47.5q93 0 147.5 53.5t54.5 138.5q0 73 -36.5 131.5t-120.5 112.5zM694 1260q-76 0 -121 -46.5t-45 -119.5q0 -132 123 -201q185 72 185 221q0 68 -39.5 107t-102.5 39z" /> +<glyph unicode="9" d="M1092 1001q0 -280 -99 -533t-264 -370.5t-403 -117.5q-128 0 -240 32v256q111 -41 227 -41q121 0 207.5 49t144 138.5t99.5 257.5h-4q-111 -158 -295 -158q-163 0 -252.5 103.5t-89.5 285.5q0 166 73 305.5t196 208t286 68.5q203 0 308.5 -123t105.5 -361zM645 1237 q-65 0 -115.5 -42t-78 -114t-27.5 -153q0 -87 37.5 -131.5t105.5 -44.5q60 0 111.5 36.5t82 100t30.5 158.5q0 84 -35.5 137t-110.5 53z" /> +<glyph unicode=":" horiz-adv-x="584" d="M207 940q0 92 55.5 145.5t149.5 53.5q68 0 108.5 -38.5t40.5 -107.5q0 -86 -54.5 -140t-144.5 -54q-72 0 -113.5 36.5t-41.5 104.5zM25 115q0 90 53.5 144t150.5 54q68 0 109 -38t41 -107q0 -87 -55 -141t-144 -54q-73 0 -114 37.5t-41 104.5z" /> +<glyph unicode=";" horiz-adv-x="584" d="M385 215q-118 -255 -262 -479h-225q74 167 194 502h285zM207 940q0 92 55.5 145.5t149.5 53.5q68 0 108.5 -38.5t40.5 -107.5q0 -86 -54.5 -140t-144.5 -54q-72 0 -113.5 36.5t-41.5 104.5z" /> +<glyph unicode="<" d="M1061 203l-952 438v143l952 496v-240l-643 -317l643 -281v-239z" /> +<glyph unicode="=" d="M109 807v217h952v-217h-952zM109 418v219h952v-219h-952z" /> +<glyph unicode=">" d="M109 442l643 281l-643 317v240l952 -496v-143l-952 -438v239z" /> +<glyph unicode="?" horiz-adv-x="940" d="M260 485l14 78q19 103 73.5 177t172.5 155q124 84 157.5 127t33.5 96q0 119 -133 119q-50 0 -106.5 -16t-201.5 -84l-92 221q230 125 445 125q177 0 280 -87.5t103 -244.5q0 -83 -28.5 -149.5t-82.5 -123t-190 -147.5q-64 -43 -96.5 -73t-52.5 -64.5t-38 -108.5h-258z M166 115q0 91 55 144.5t150 53.5q68 0 108.5 -38t40.5 -107q0 -87 -55 -141t-143 -54q-74 0 -115 38t-41 104z" /> +<glyph unicode="@" horiz-adv-x="1753" d="M1733 840q0 -173 -64 -321t-177.5 -231t-254.5 -83q-88 0 -144.5 38.5t-72.5 108.5h-6q-50 -77 -113 -112t-147 -35q-127 0 -198 79.5t-71 229.5q0 147 67.5 276.5t187.5 205t268 75.5q185 0 327 -55l-106 -420q-11 -44 -19 -76.5t-8 -64.5q0 -68 58 -68q66 0 124 64 t92.5 171t34.5 214q0 213 -123.5 325.5t-359.5 112.5q-203 0 -366.5 -94t-255 -266t-91.5 -392q0 -243 134 -380.5t376 -137.5q117 0 219.5 20t221.5 66v-186q-230 -90 -465 -90q-217 0 -378 85.5t-246 241.5t-85 359q0 279 120.5 497t343 341.5t497.5 123.5 q318 0 499 -163.5t181 -458.5zM995 889q-82 0 -145.5 -51.5t-100 -137t-36.5 -174.5q0 -65 24.5 -102t69.5 -37q141 0 213 270l57 222q-36 10 -82 10z" /> +<glyph unicode="A" horiz-adv-x="1286" d="M842 348h-473l-172 -348h-320l766 1468h373l147 -1468h-297zM827 608l-26 350q-10 131 -10 253v36q-44 -120 -109 -254l-188 -385h333z" /> +<glyph unicode="B" horiz-adv-x="1270" d="M788 1462q229 0 346 -81.5t117 -243.5q0 -150 -83 -247.5t-236 -129.5v-6q100 -26 159.5 -96.5t59.5 -180.5q0 -229 -153 -353t-423 -124h-522l309 1462h426zM545 883h149q121 0 181.5 48.5t60.5 139.5q0 137 -170 137h-152zM412 256h180q117 0 183.5 58t66.5 161 q0 162 -183 162h-165z" /> +<glyph unicode="C" horiz-adv-x="1253" d="M905 1227q-132 0 -237.5 -81t-169.5 -238.5t-64 -338.5q0 -167 68.5 -248t218.5 -81q146 0 338 77v-260q-199 -77 -400 -77q-254 0 -395 149.5t-141 423.5q0 262 104 482.5t278 335t400 114.5q125 0 222 -22.5t208 -82.5l-118 -250q-106 59 -175 78t-137 19z" /> +<glyph unicode="D" horiz-adv-x="1386" d="M1323 909q0 -280 -98 -486.5t-283.5 -314.5t-437.5 -108h-451l309 1462h396q270 0 417.5 -143t147.5 -410zM518 256q148 0 258 76t172 223.5t62 337.5q0 154 -72.5 234.5t-208.5 80.5h-115l-202 -952h106z" /> +<glyph unicode="E" horiz-adv-x="1110" d="M870 0h-817l309 1462h818l-54 -254h-512l-67 -321h477l-55 -254h-477l-80 -377h512z" /> +<glyph unicode="F" horiz-adv-x="1087" d="M358 0h-305l309 1462h814l-54 -254h-508l-79 -377h473l-56 -253h-473z" /> +<glyph unicode="G" horiz-adv-x="1413" d="M754 821h563l-162 -762q-134 -46 -248.5 -62.5t-242.5 -16.5q-259 0 -400 147t-141 422q0 268 107 484.5t301 334t448 117.5q218 0 410 -99l-115 -251q-74 40 -148 64t-161 24q-153 0 -273.5 -83t-189 -236.5t-68.5 -330.5q0 -172 72.5 -252.5t222.5 -80.5q76 0 170 24 l66 299h-267z" /> +<glyph unicode="H" horiz-adv-x="1434" d="M1135 0h-306l134 631h-471l-134 -631h-305l309 1462h306l-121 -573h471l121 573h305z" /> +<glyph unicode="I" horiz-adv-x="659" d="M53 0l312 1462h305l-312 -1462h-305z" /> +<glyph unicode="J" horiz-adv-x="678" d="M-135 -430q-94 0 -187 27v253q88 -20 164 -20q99 0 160.5 60.5t89.5 191.5l293 1380h305l-303 -1423q-52 -245 -175.5 -357t-346.5 -112z" /> +<glyph unicode="K" horiz-adv-x="1255" d="M1141 0h-338l-211 592l-125 -70l-109 -522h-305l309 1462h306l-152 -702l158 205l409 497h361l-594 -700z" /> +<glyph unicode="L" horiz-adv-x="1061" d="M53 0l309 1462h306l-256 -1206h512l-54 -256h-817z" /> +<glyph unicode="M" horiz-adv-x="1802" d="M838 369l551 1093h423l-309 -1462h-280l145 692q53 247 105 441h-5l-569 -1133h-281l-61 1133h-4q-11 -88 -38 -231t-187 -902h-275l309 1462h404l68 -1093h4z" /> +<glyph unicode="N" horiz-adv-x="1546" d="M1247 0h-342l-356 1106h-6l-4 -32q-32 -216 -66 -386l-145 -688h-275l309 1462h357l340 -1077h4q12 76 39 217t180 860h274z" /> +<glyph unicode="O" horiz-adv-x="1495" d="M1432 938q0 -283 -99 -506.5t-271 -337.5t-396 -114q-256 0 -399.5 147.5t-143.5 409.5q0 265 99 487.5t273 341.5t402 119q255 0 395 -144t140 -403zM872 1227q-121 0 -222 -91.5t-158.5 -251.5t-57.5 -347q0 -147 66.5 -222t187.5 -75t220.5 87t155.5 246t56 357 q0 142 -65 219.5t-183 77.5z" /> +<glyph unicode="P" horiz-adv-x="1188" d="M522 774h56q142 0 223.5 69t81.5 185q0 180 -195 180h-74zM1190 1036q0 -241 -169.5 -378.5t-467.5 -137.5h-86l-109 -520h-305l309 1462h338q242 0 366 -106.5t124 -319.5z" /> +<glyph unicode="Q" horiz-adv-x="1495" d="M1432 938q0 -316 -122.5 -555.5t-334.5 -337.5l254 -393h-359l-178 328h-26q-256 0 -399.5 147.5t-143.5 409.5q0 265 99 487.5t273 341.5t402 119q255 0 395 -144t140 -403zM872 1227q-121 0 -222 -91.5t-158.5 -251.5t-57.5 -347q0 -147 66.5 -222t187.5 -75t220.5 87 t155.5 246t56 357q0 142 -65 219.5t-183 77.5z" /> +<glyph unicode="R" horiz-adv-x="1247" d="M530 813h78q131 0 204 57t73 174q0 82 -47.5 123t-149.5 41h-74zM477 561l-119 -561h-305l309 1462h359q237 0 356 -102t119 -299q0 -158 -83 -271.5t-239 -168.5l261 -621h-332l-207 561h-119z" /> +<glyph unicode="S" horiz-adv-x="1085" d="M946 432q0 -209 -148 -330.5t-401 -121.5q-221 0 -356 90v274q193 -108 358 -108q112 0 175 42.5t63 116.5q0 43 -13.5 75.5t-38.5 60.5t-124 102q-138 99 -194 196t-56 209q0 129 62 230.5t176.5 158t263.5 56.5q217 0 397 -99l-109 -233q-156 74 -288 74 q-83 0 -136 -45t-53 -119q0 -61 33 -106.5t148 -120.5q121 -80 181 -176.5t60 -225.5z" /> +<glyph unicode="T" horiz-adv-x="1087" d="M571 0h-305l254 1204h-352l55 258h1010l-55 -258h-353z" /> +<glyph unicode="U" horiz-adv-x="1415" d="M1434 1462l-201 -946q-57 -266 -218 -401t-419 -135q-212 0 -333.5 113.5t-121.5 307.5q0 72 15 138l196 923h305l-194 -919q-17 -74 -17 -125q0 -178 189 -178q123 0 195 76.5t104 228.5l194 917h306z" /> +<glyph unicode="V" horiz-adv-x="1208" d="M535 299q78 221 110 283l432 880h316l-748 -1462h-334l-127 1462h295l51 -880q4 -45 4 -133q-2 -103 -6 -150h7z" /> +<glyph unicode="W" horiz-adv-x="1831" d="M1006 1018q-46 -146 -115 -299l-324 -719h-338l-45 1462h287l6 -798q0 -52 -4 -173t-10 -174h6q22 64 67 180.5t60 145.5l369 819h270l21 -873q0 -146 -9 -272h6q43 129 131 349l330 796h309l-647 -1462h-346l-22 721l-2 139q0 88 4 158h-4z" /> +<glyph unicode="X" horiz-adv-x="1241" d="M1124 0h-331l-172 543l-396 -543h-342l576 764l-238 698h320l153 -518l363 518h344l-545 -725z" /> +<glyph unicode="Y" horiz-adv-x="1155" d="M627 870l374 592h342l-618 -903l-119 -559h-303l119 559l-236 903h312z" /> +<glyph unicode="Z" horiz-adv-x="1098" d="M920 0h-981l38 201l777 1005h-543l53 256h936l-41 -202l-782 -1004h596z" /> +<glyph unicode="[" horiz-adv-x="678" d="M436 -324h-473l381 1786h473l-45 -211h-215l-291 -1364h215z" /> +<glyph unicode="\" horiz-adv-x="862" d="M481 1462l224 -1462h-267l-217 1462h260z" /> +<glyph unicode="]" horiz-adv-x="678" d="M-92 -113h213l291 1364h-215l45 211h473l-381 -1786h-471z" /> +<glyph unicode="^" horiz-adv-x="1081" d="M20 520l619 950h147l277 -950h-223l-174 633l-402 -633h-244z" /> +<glyph unicode="_" horiz-adv-x="819" d="M635 -324h-821l30 140h822z" /> +<glyph unicode="`" horiz-adv-x="1135" d="M934 1241h-184q-71 69 -138.5 153.5t-103.5 153.5v21h311q36 -148 115 -303v-25z" /> +<glyph unicode="a" horiz-adv-x="1217" d="M406 -20q-147 0 -231.5 106.5t-84.5 298.5q0 198 72 377.5t189 278t257 98.5q97 0 167.5 -42t109.5 -122h8l57 143h232l-238 -1118h-229l14 145h-4q-134 -165 -319 -165zM524 223q69 0 133 67t103 181.5t39 259.5q0 71 -38.5 117.5t-101.5 46.5q-68 0 -129.5 -72 t-98 -190t-36.5 -234q0 -88 33.5 -132t95.5 -44z" /> +<glyph unicode="b" horiz-adv-x="1219" d="M813 1139q146 0 230.5 -108t84.5 -298t-68 -367.5t-187 -281.5t-263 -104q-194 0 -276 163h-8l-58 -143h-231l330 1556h301l-62 -288q-41 -182 -84 -299h8q78 98 142.5 134t140.5 36zM692 895q-68 0 -130 -65t-102 -180.5t-40 -250.5q0 -80 37 -128t102 -48q67 0 128 69 t98.5 189.5t37.5 237.5q0 176 -131 176z" /> +<glyph unicode="c" horiz-adv-x="989" d="M506 -20q-201 0 -308.5 107.5t-107.5 303.5q0 212 74.5 385.5t209.5 268t308 94.5q182 0 328 -72l-92 -229q-54 23 -106 40t-118 17q-85 0 -153.5 -64t-107 -175.5t-38.5 -239.5q0 -96 45.5 -144.5t126.5 -48.5q76 0 141 23.5t134 58.5v-246q-152 -79 -336 -79z" /> +<glyph unicode="d" horiz-adv-x="1217" d="M406 -20q-147 0 -231.5 107t-84.5 300q0 196 71.5 374.5t188.5 278t258 99.5q82 0 141.5 -37t112.5 -127h8l2 28q6 110 25 195l76 358h301l-330 -1556h-229l14 145h-4q-71 -87 -148.5 -126t-170.5 -39zM532 223q66 0 128.5 68.5t100.5 182.5t38 245q0 80 -37.5 128 t-102.5 48q-68 0 -129.5 -72t-98 -190t-36.5 -234q0 -176 137 -176z" /> +<glyph unicode="e" horiz-adv-x="1141" d="M696 922q-88 0 -166 -80t-102 -195h45q155 0 241.5 48.5t86.5 131.5q0 95 -105 95zM532 -20q-210 0 -326 113t-116 319q0 207 82.5 377.5t223.5 260t319 89.5q177 0 276 -81.5t99 -223.5q0 -187 -167 -288.5t-477 -101.5h-51l-2 -21v-20q0 -91 51.5 -143.5t147.5 -52.5 q87 0 158 19t172 67v-227q-172 -86 -390 -86z" /> +<glyph unicode="f" horiz-adv-x="764" d="M-45 -492q-104 0 -174 25v242q61 -21 115 -21q61 0 107 40t65 130l204 965h-163l30 145l183 84l18 84q41 190 138.5 277.5t273.5 87.5q131 0 235 -49l-80 -224q-69 31 -133 31q-57 0 -92 -40t-47 -105l-12 -62h219l-49 -229h-220l-215 -1010q-77 -371 -403 -371z" /> +<glyph unicode="g" horiz-adv-x="1108" d="M1186 1116l-35 -166l-174 -41q16 -52 16 -118q0 -195 -121 -308.5t-329 -113.5q-59 0 -99 10q-84 -27 -84 -78q0 -34 30 -49t89 -23l137 -18q163 -21 237.5 -84.5t74.5 -183.5q0 -211 -156 -323t-446 -112q-208 0 -324.5 75.5t-116.5 207.5q0 102 68.5 175.5t214.5 121.5 q-74 47 -74 133q0 71 44.5 122.5t146.5 98.5q-65 49 -96 112t-31 153q0 199 125.5 315.5t341.5 116.5q83 0 166 -23h395zM365 -6q-106 -14 -160.5 -57t-54.5 -109q0 -115 194 -115q151 0 228 45t77 127q0 39 -32.5 60t-137.5 35zM614 948q-77 0 -124.5 -76.5t-47.5 -191.5 q0 -119 103 -119q75 0 121.5 76.5t46.5 193.5t-99 117z" /> +<glyph unicode="h" horiz-adv-x="1237" d="M977 0h-301l137 653q16 68 16 119q0 123 -108 123q-92 0 -167 -114t-118 -318l-98 -463h-301l330 1556h301q-39 -181 -60 -278t-86 -309h8q62 77 138 123.5t176 46.5q138 0 213.5 -83.5t75.5 -238.5q0 -73 -23 -180z" /> +<glyph unicode="i" horiz-adv-x="608" d="M322 1380q0 87 47.5 131.5t134.5 44.5q73 0 111 -31t38 -89q0 -80 -44 -129.5t-136 -49.5q-151 0 -151 123zM338 0h-301l237 1118h301z" /> +<glyph unicode="j" horiz-adv-x="608" d="M-90 -492q-104 0 -174 25v242q61 -21 114 -21q137 0 173 170l253 1194h302l-265 -1239q-77 -371 -403 -371zM324 1380q0 87 47.5 131.5t134.5 44.5q73 0 111 -31t38 -89q0 -80 -44 -129.5t-136 -49.5q-151 0 -151 123z" /> +<glyph unicode="k" horiz-adv-x="1163" d="M920 1118h344l-498 -504l285 -614h-336l-183 420l-120 -72l-74 -348h-301l330 1556h301l-148 -694q-8 -41 -29 -117l-28 -102h4z" /> +<glyph unicode="l" horiz-adv-x="608" d="M338 0h-301l330 1556h301z" /> +<glyph unicode="m" horiz-adv-x="1853" d="M844 1139q219 0 262 -228h6q68 110 160.5 169t197.5 59q136 0 207.5 -85t71.5 -237q0 -76 -23 -180l-133 -637h-301l138 653q16 68 16 119q0 123 -98 123q-92 0 -166.5 -112t-118.5 -318l-96 -465h-301l137 653q16 68 16 119q0 123 -98 123q-92 0 -167 -114t-118 -318 l-98 -463h-301l237 1118h230l-21 -207h6q146 228 355 228z" /> +<glyph unicode="n" horiz-adv-x="1237" d="M977 0h-301l137 653q16 68 16 119q0 123 -108 123q-92 0 -167 -114t-118 -318l-98 -463h-301l237 1118h230l-21 -207h6q146 228 355 228q138 0 213.5 -83.5t75.5 -238.5q0 -73 -23 -180z" /> +<glyph unicode="o" horiz-adv-x="1198" d="M805 696q0 197 -143 197q-75 0 -134.5 -61t-97 -179t-37.5 -243q0 -185 150 -185q75 0 135 61.5t93.5 171t33.5 238.5zM1108 696q0 -211 -70.5 -374t-203.5 -252.5t-316 -89.5q-195 0 -311.5 117.5t-116.5 312.5q0 213 71.5 379.5t206.5 258t316 91.5q196 0 310 -118 t114 -325z" /> +<glyph unicode="p" horiz-adv-x="1219" d="M813 1139q146 0 230.5 -107.5t84.5 -300.5q0 -191 -68.5 -367.5t-187.5 -280t-262 -103.5q-83 0 -143 37t-111 126h-8q-12 -159 -43 -295l-72 -340h-301l342 1610h230l-17 -170h9q138 191 317 191zM692 895q-68 0 -131.5 -67.5t-102 -180t-38.5 -248.5q0 -80 37 -128 t102 -48q67 0 128 69t98.5 189.5t37.5 237.5q0 176 -131 176z" /> +<glyph unicode="q" horiz-adv-x="1217" d="M391 -20q-88 0 -156 47.5t-106.5 138.5t-38.5 219q0 198 72 377.5t189 278t257 98.5q86 0 152.5 -37.5t124.5 -126.5h8l57 143h232l-342 -1610h-301q47 218 73 337.5t84 304.5h-8q-72 -94 -143 -132t-154 -38zM535 223q64 0 127.5 70t100 181t36.5 245q0 80 -37.5 128 t-102.5 48q-68 0 -129.5 -72t-98 -190t-36.5 -234q0 -88 36.5 -132t103.5 -44z" /> +<glyph unicode="r" horiz-adv-x="862" d="M842 1139q59 0 96 -11l-66 -290q-45 16 -100 16q-116 0 -203.5 -91.5t-124.5 -262.5l-106 -500h-301l237 1118h230l-21 -207h6q147 228 353 228z" /> +<glyph unicode="s" horiz-adv-x="969" d="M829 369q0 -188 -124.5 -288.5t-346.5 -100.5q-107 0 -186.5 15t-148.5 50v248q157 -90 319 -90q80 0 131 32.5t51 88.5q0 43 -37 77t-131 86q-121 68 -169 135.5t-48 159.5q0 170 110.5 263.5t315.5 93.5q201 0 363 -95l-99 -215q-140 84 -258 84q-57 0 -92 -25.5 t-35 -68.5q0 -39 32 -68.5t120 -74.5q123 -63 178 -137t55 -170z" /> +<glyph unicode="t" horiz-adv-x="840" d="M514 223q65 0 162 35v-225q-111 -53 -266 -53q-150 0 -220.5 63t-70.5 195q0 50 12 112l115 539h-152l29 147l196 84l132 236h194l-49 -238h283l-50 -229h-282l-115 -539q-6 -30 -6 -53q0 -74 88 -74z" /> +<glyph unicode="u" horiz-adv-x="1237" d="M262 1118h301l-137 -653q-16 -68 -16 -119q0 -123 108 -123q92 0 167 114t118 318l98 463h301l-237 -1118h-230l21 207h-6q-145 -227 -355 -227q-138 0 -211 82.5t-73 238.5q0 93 24 213z" /> +<glyph unicode="v" horiz-adv-x="1049" d="M455 301q55 153 92 223l297 594h323l-604 -1118h-323l-138 1118h295l45 -586q7 -133 7 -231h6z" /> +<glyph unicode="w" horiz-adv-x="1614" d="M856 860q-62 -178 -123 -319l-233 -541h-324l-51 1118h281l4 -495l-4 -167l-7 -171h4q6 20 14 41.5t51 136.5t46 119l231 536h328v-536q0 -142 -10 -297h6l28 80q73 208 95 258l219 495h307l-530 -1118h-330l-6 520q0 155 10 340h-6z" /> +<glyph unicode="x" horiz-adv-x="1087" d="M379 573l-225 545h321l115 -334l244 334h354l-467 -561l244 -557h-326l-125 342l-264 -342h-350z" /> +<glyph unicode="y" horiz-adv-x="1063" d="M102 1118h295l56 -518q14 -122 14 -293h6q20 51 44 119.5t65 153.5l260 538h327l-680 -1278q-177 -332 -483 -332q-90 0 -147 19v240q68 -13 116 -13q84 0 147.5 48t117.5 149l26 49z" /> +<glyph unicode="z" horiz-adv-x="932" d="M748 0h-795l35 180l575 705h-397l51 233h750l-43 -200l-566 -685h439z" /> +<glyph unicode="{" horiz-adv-x="727" d="M201 319q0 140 -209 140l45 229q122 0 192.5 41.5t92.5 138.5l61 285q38 170 131 239.5t270 69.5h84l-49 -225q-90 -2 -130.5 -34.5t-55.5 -106.5l-66 -297q-45 -207 -276 -236v-8q85 -26 126.5 -82.5t41.5 -134.5q0 -44 -15 -113l-36 -178q-7 -28 -7 -51q0 -54 33.5 -74 t91.5 -20v-226h-53q-167 0 -253.5 63.5t-86.5 184.5q0 57 14 125l39 184q15 69 15 86z" /> +<glyph unicode="|" d="M455 1550h219v-2015h-219v2015z" /> +<glyph unicode="}" horiz-adv-x="727" d="M256 1462q340 0 340 -248q0 -56 -14 -124l-39 -185q-15 -69 -15 -86q0 -139 209 -139l-45 -229q-122 0 -192.5 -42t-91.5 -139l-62 -284q-37 -170 -130.5 -240t-270.5 -70h-45v226q93 3 137 35.5t59 105.5l66 297q25 111 95 166t181 69v9q-168 51 -168 217q0 43 15 112 l37 179q6 30 6 51q0 54 -36.5 74t-109.5 20l41 225h33z" /> +<glyph unicode="~" d="M342 672q-54 0 -116.5 -33t-116.5 -88v231q101 109 256 109q64 0 117 -14t139 -50q64 -27 111 -41t95 -14q51 0 112 30.5t122 90.5v-231q-103 -109 -256 -109q-59 0 -109 11.5t-147 51.5q-89 38 -127 47t-80 9z" /> +<glyph unicode="¡" horiz-adv-x="586" d="M182 606h242l-158 -977h-340zM549 977q0 -92 -55.5 -145.5t-149.5 -53.5q-68 0 -108.5 38t-40.5 108q0 85 54 139.5t144 54.5q73 0 114.5 -37t41.5 -104z" /> +<glyph unicode="¢" d="M575 -20h-188l49 210q-134 36 -203 136t-69 258q0 193 62.5 355t178 262.5t267.5 123.5l33 158h188l-35 -158q118 -14 225 -65l-92 -230q-53 23 -105 40t-118 17q-133 0 -216 -143t-83 -336q0 -96 45 -144t127 -48q75 0 140 23.5t134 58.5v-246q-136 -71 -299 -80z" /> +<glyph unicode="£" d="M872 1485q195 0 369 -86l-113 -232q-141 68 -237 68q-75 0 -123 -39.5t-68 -132.5l-47 -229h299l-45 -220h-299l-18 -84q-42 -195 -209 -270h655l-55 -260h-993l49 246q196 48 244 264l22 104h-192l45 220h192l49 247q41 197 162 300.5t313 103.5z" /> +<glyph unicode="¤" d="M190 723q0 102 54 197l-129 127l147 147l127 -127q91 53 197 53q105 0 196 -55l127 129l150 -143l-129 -129q53 -89 53 -199q0 -107 -53 -199l125 -125l-146 -145l-127 125q-95 -51 -196 -51q-115 0 -199 51l-125 -123l-145 145l127 125q-54 93 -54 197zM397 723 q0 -77 54.5 -132.5t134.5 -55.5q81 0 136.5 55t55.5 133q0 80 -56.5 135t-135.5 55q-78 0 -133.5 -56t-55.5 -134z" /> +<glyph unicode="¥" d="M608 872l371 590h311l-506 -747h203l-39 -178h-252l-28 -138h252l-37 -178h-252l-47 -221h-291l47 221h-252l37 178h252l29 138h-252l39 178h196l-192 747h297z" /> +<glyph unicode="¦" d="M455 1550h219v-815h-219v815zM455 350h219v-815h-219v815z" /> +<glyph unicode="§" horiz-adv-x="995" d="M150 760q0 89 47.5 163t154.5 142q-42 34 -70 84.5t-28 107.5q0 149 117 234.5t313 85.5q172 0 344 -88l-82 -193q-147 84 -282 84q-144 0 -144 -106q0 -43 40.5 -76t127.5 -72q242 -106 242 -303q0 -188 -193 -303q38 -35 64 -85.5t26 -108.5q0 -161 -126 -253.5 t-345 -92.5q-204 0 -336 75v224q172 -105 345 -105q99 0 144.5 35t45.5 92q0 39 -33 72.5t-127 79.5q-117 57 -181 131t-64 176zM506 967q-51 -25 -82 -70.5t-31 -99.5t43.5 -96.5t143.5 -88.5q49 31 75.5 78.5t26.5 95.5q0 109 -176 181z" /> +<glyph unicode="¨" horiz-adv-x="1135" d="M397 1382q0 78 42.5 118t119.5 40q133 0 133 -108q0 -73 -39 -116.5t-121 -43.5q-135 0 -135 110zM799 1382q0 78 42 118t120 40q65 0 99 -28t34 -80q0 -73 -39.5 -116.5t-120.5 -43.5q-135 0 -135 110z" /> +<glyph unicode="©" horiz-adv-x="1704" d="M932 1010q-111 0 -163 -73t-52 -214q0 -134 55.5 -203t159.5 -69q43 0 108.5 15.5t124.5 43.5v-191q-131 -57 -262 -57q-196 0 -307 122.5t-111 336.5q0 225 117.5 351t325.5 126q142 0 284 -72l-75 -174q-114 58 -205 58zM125 731q0 200 100 375t275 276t377 101 q199 0 373.5 -99t276 -275.5t101.5 -377.5q0 -199 -98.5 -373t-272.5 -276t-380 -102q-207 0 -382 103.5t-272.5 276.5t-97.5 371zM266 731q0 -164 81.5 -305t224 -223t305.5 -82q167 0 308 83t221.5 223.5t80.5 303.5t-80.5 303.5t-222 223.5t-307.5 83 q-164 0 -306.5 -82.5t-223.5 -223.5t-81 -304z" /> +<glyph unicode="ª" horiz-adv-x="772" d="M369 752q-103 0 -160 70t-57 198q0 117 46 228t123 171t177 60q120 0 180 -103h6l39 90h154l-158 -702h-154l8 92h-2q-80 -104 -202 -104zM442 903q45 0 84 41.5t65.5 120t26.5 154.5q0 106 -88 106q-73 0 -123.5 -96t-50.5 -215q0 -111 86 -111z" /> +<glyph unicode="«" horiz-adv-x="1151" d="M72 569l401 463l191 -155l-279 -334l135 -350l-246 -103l-202 461v18zM559 569l402 463l190 -155l-279 -334l136 -350l-246 -103l-203 461v18z" /> +<glyph unicode="¬" d="M1061 248h-219v364h-733v219h952v-583z" /> +<glyph unicode="­" horiz-adv-x="659" d="M41 424zM41 424l53 250h524l-53 -250h-524z" /> +<glyph unicode="®" horiz-adv-x="1704" d="M1237 899q0 -86 -44 -149.5t-130 -96.5l197 -360h-254l-138 297h-67v-297h-230v874h308q173 0 265.5 -67.5t92.5 -200.5zM801 758h51q72 0 113 31t41 92q0 59 -35.5 88.5t-116.5 29.5h-53v-241zM125 731q0 200 100 375t275 276t377 101q199 0 373.5 -99t276 -275.5 t101.5 -377.5q0 -199 -98.5 -373t-272.5 -276t-380 -102q-207 0 -382 103.5t-272.5 276.5t-97.5 371zM266 731q0 -164 81.5 -305t224 -223t305.5 -82q167 0 308 83t221.5 223.5t80.5 303.5t-80.5 303.5t-222 223.5t-307.5 83q-164 0 -306.5 -82.5t-223.5 -223.5t-81 -304z " /> +<glyph unicode="¯" horiz-adv-x="1024" d="M1030 1556h-1036l45 201h1036z" /> +<glyph unicode="°" horiz-adv-x="877" d="M164 1137q0 93 46.5 173.5t127.5 126.5t172 46q93 0 173.5 -47t126.5 -127t46 -172q0 -93 -46 -173t-126 -125.5t-174 -45.5q-93 0 -173 45t-126.5 125t-46.5 174zM354 1137q0 -63 45.5 -108.5t110.5 -45.5q66 0 111 46t45 108q0 63 -45.5 110t-110.5 47t-110.5 -47.5 t-45.5 -109.5z" /> +<glyph unicode="±" d="M475 674h-366v219h366v369h219v-369h367v-219h-367v-365h-219v365zM109 0v219h952v-219h-952z" /> +<glyph unicode="²" horiz-adv-x="776" d="M707 586h-648l35 166l273 219q111 91 141 122t44.5 59t14.5 56q0 42 -25.5 62t-60.5 20q-86 0 -188 -82l-100 158q74 57 156 87t192 30q123 0 196.5 -63t73.5 -160q0 -70 -22 -123t-70 -103.5t-189 -152.5l-129 -95h347z" /> +<glyph unicode="³" horiz-adv-x="776" d="M813 1270q0 -87 -51 -145.5t-166 -88.5v-4q154 -33 154 -176q0 -131 -107 -209t-285 -78q-75 0 -145.5 15.5t-120.5 40.5v192q125 -72 254 -72q76 0 125 30.5t49 88.5q0 37 -26 62.5t-88 25.5h-127l34 160h90q84 0 132.5 28t48.5 85q0 40 -26 60t-71 20q-86 0 -188 -66 l-82 150q142 92 313 92q130 0 206.5 -55.5t76.5 -155.5z" /> +<glyph unicode="´" horiz-adv-x="1135" d="M483 1266q79 88 222 303h335v-17q-46 -56 -154 -152.5t-194 -158.5h-209v25z" /> +<glyph unicode="µ" horiz-adv-x="1249" d="M424 348q0 -60 31.5 -92.5t79.5 -32.5q90 0 162.5 106.5t117.5 319.5l98 469h301l-237 -1118h-229l18 176h-6q-117 -196 -266 -196q-51 0 -89.5 19.5t-58.5 47.5h-6q-8 -66 -21.5 -139t-82.5 -400h-304l342 1610h301l-135 -645q-16 -70 -16 -125z" /> +<glyph unicode="¶" horiz-adv-x="1341" d="M1202 -260h-162v1616h-166v-1616h-161v819q-62 -18 -146 -18q-216 0 -318 125t-102 376q0 256 107.5 385t343.5 129h604v-1816z" /> +<glyph unicode="·" horiz-adv-x="584" d="M131 553zM131 695q0 90 53.5 144t150.5 54q68 0 109 -38t41 -107q0 -87 -55 -141t-144 -54q-73 0 -114 37.5t-41 104.5z" /> +<glyph unicode="¸" horiz-adv-x="420" d="M262 -250q0 -116 -83 -179t-234 -63q-86 0 -152 23v168q63 -23 125 -23q102 0 102 82q0 34 -31 56.5t-110 31.5l96 154h185l-39 -72q141 -49 141 -178z" /> +<glyph unicode="¹" horiz-adv-x="776" d="M528 1462h207l-186 -876h-246l84 397q24 109 55 207q-16 -15 -80 -60l-131 -81l-102 165z" /> +<glyph unicode="º" horiz-adv-x="754" d="M809 1194q0 -128 -48.5 -232.5t-132.5 -157t-196 -52.5q-134 0 -202 75t-68 211q0 197 104 319t277 122q129 0 197.5 -73.5t68.5 -211.5zM522 1315q-64 0 -107.5 -89.5t-43.5 -199.5q0 -111 80 -111q63 0 105 85.5t42 207.5q0 107 -76 107z" /> +<glyph unicode="»" horiz-adv-x="1151" d="M1079 535l-401 -463l-191 155l279 334l-135 350l246 103l202 -461v-18zM592 535l-402 -463l-190 155l279 334l-136 350l246 103l203 -461v-18z" /> +<glyph unicode="¼" horiz-adv-x="1804" d="M97 0zM1500 1462l-1084 -1462h-239l1087 1462h236zM496 1462h207l-186 -876h-246l84 397q24 109 55 207q-16 -15 -80 -60l-131 -81l-102 165zM1573 152h-119l-32 -151h-238l33 151h-373l31 174l475 557h260l-121 -563h119zM1252 320l58 231l22 74q-13 -20 -43 -58 t-211 -247h174z" /> +<glyph unicode="½" horiz-adv-x="1804" d="M97 0zM1588 1h-648l35 166l273 219q111 91 141 122t44.5 59t14.5 56q0 42 -25.5 62t-60.5 20q-86 0 -188 -82l-100 158q74 57 156 87t192 30q123 0 196.5 -63t73.5 -160q0 -70 -22 -123t-70 -103.5t-189 -152.5l-129 -95h347zM496 1462h207l-186 -876h-246l84 397 q24 109 55 207q-16 -15 -80 -60l-131 -81l-102 165zM1500 1462l-1084 -1462h-239l1087 1462h236z" /> +<glyph unicode="¾" horiz-adv-x="1804" d="M133 0zM1633 1462l-1084 -1462h-239l1087 1462h236zM1634 152h-119l-32 -151h-238l33 151h-373l31 174l475 557h260l-121 -563h119zM1313 320l58 231l22 74q-13 -20 -43 -58t-211 -247h174zM854 1270q0 -87 -51 -145.5t-166 -88.5v-4q154 -33 154 -176q0 -131 -107 -209 t-285 -78q-75 0 -145.5 15.5t-120.5 40.5v192q125 -72 254 -72q76 0 125 30.5t49 88.5q0 37 -26 62.5t-88 25.5h-127l34 160h90q84 0 132.5 28t48.5 85q0 40 -26 60t-71 20q-86 0 -188 -66l-82 150q142 92 313 92q130 0 206.5 -55.5t76.5 -155.5z" /> +<glyph unicode="¿" horiz-adv-x="940" d="M678 606l-14 -78q-19 -105 -76.5 -180t-169.5 -151q-122 -83 -156.5 -126t-34.5 -98q0 -118 133 -118q50 0 106.5 16t201.5 84l92 -221q-221 -125 -445 -125q-177 0 -280 87.5t-103 244.5q0 82 28.5 148.5t83.5 124t189 146.5q93 62 128 106.5t51 106.5l8 33h258z M772 977q0 -92 -55.5 -145.5t-149.5 -53.5q-68 0 -108.5 38t-40.5 108q0 86 54.5 140t143.5 54q73 0 114.5 -37t41.5 -104z" /> +<glyph unicode="À" horiz-adv-x="1286" d="M0 0zM842 348h-473l-172 -348h-320l766 1468h373l147 -1468h-297zM827 608l-26 350q-10 131 -10 253v36q-44 -120 -109 -254l-188 -385h333zM965 1579h-184q-71 69 -138.5 153.5t-103.5 153.5v21h311q36 -148 115 -303v-25z" /> +<glyph unicode="Á" horiz-adv-x="1286" d="M0 0zM842 348h-473l-172 -348h-320l766 1468h373l147 -1468h-297zM827 608l-26 350q-10 131 -10 253v36q-44 -120 -109 -254l-188 -385h333zM735 1604q79 88 222 303h335v-17q-46 -56 -154 -152.5t-194 -158.5h-209v25z" /> +<glyph unicode="Â" horiz-adv-x="1286" d="M0 0zM842 348h-473l-172 -348h-320l766 1468h373l147 -1468h-297zM827 608l-26 350q-10 131 -10 253v36q-44 -120 -109 -254l-188 -385h333zM1235 1579h-198q-63 53 -162 168q-105 -88 -232 -168h-217v25q63 57 153 147t142 156h338q22 -54 74 -142.5t102 -160.5v-25z " /> +<glyph unicode="Ã" horiz-adv-x="1286" d="M0 0zM842 348h-473l-172 -348h-320l766 1468h373l147 -1468h-297zM827 608l-26 350q-10 131 -10 253v36q-44 -120 -109 -254l-188 -385h333zM999 1579q-49 0 -86.5 16.5t-69.5 36t-61.5 36t-62.5 16.5q-31 0 -55.5 -28t-38.5 -79h-177q59 309 281 309q49 0 87.5 -16.5 t71.5 -36t62 -35.5t60 -16q34 0 58 25.5t46 80.5h172q-66 -309 -287 -309z" /> +<glyph unicode="Ä" horiz-adv-x="1286" d="M0 0zM842 348h-473l-172 -348h-320l766 1468h373l147 -1468h-297zM827 608l-26 350q-10 131 -10 253v36q-44 -120 -109 -254l-188 -385h333zM516 1720q0 78 42.5 118t119.5 40q133 0 133 -108q0 -73 -39 -116.5t-121 -43.5q-135 0 -135 110zM918 1720q0 78 42 118t120 40 q65 0 99 -28t34 -80q0 -73 -39.5 -116.5t-120.5 -43.5q-135 0 -135 110z" /> +<glyph unicode="Å" horiz-adv-x="1286" d="M0 0zM842 348h-473l-172 -348h-320l766 1468h373l147 -1468h-297zM827 608l-26 350q-10 131 -10 253v36q-44 -120 -109 -254l-188 -385h333zM1087 1567q0 -107 -70 -173.5t-184 -66.5q-110 0 -179 63.5t-69 174.5q0 109 68.5 173t179.5 64q110 0 182 -65t72 -170z M930 1565q0 45 -27.5 70.5t-69.5 25.5t-69 -25.5t-27 -70.5t24 -71t72 -26q42 0 69.5 26t27.5 71z" /> +<glyph unicode="Æ" horiz-adv-x="1833" d="M1593 0h-817l74 348h-426l-219 -348h-328l922 1462h1104l-54 -254h-512l-67 -321h477l-55 -254h-478l-79 -377h512zM905 608l127 600h-80l-364 -600h317z" /> +<glyph unicode="Ç" horiz-adv-x="1253" d="M123 0zM905 1227q-132 0 -237.5 -81t-169.5 -238.5t-64 -338.5q0 -167 68.5 -248t218.5 -81q146 0 338 77v-260q-199 -77 -400 -77q-254 0 -395 149.5t-141 423.5q0 262 104 482.5t278 335t400 114.5q125 0 222 -22.5t208 -82.5l-118 -250q-106 59 -175 78t-137 19z M825 -250q0 -116 -83 -179t-234 -63q-86 0 -152 23v168q63 -23 125 -23q102 0 102 82q0 34 -31 56.5t-110 31.5l96 154h185l-39 -72q141 -49 141 -178z" /> +<glyph unicode="È" horiz-adv-x="1110" d="M53 0zM870 0h-817l309 1462h818l-54 -254h-512l-67 -321h477l-55 -254h-477l-80 -377h512zM906 1579h-184q-71 69 -138.5 153.5t-103.5 153.5v21h311q36 -148 115 -303v-25z" /> +<glyph unicode="É" horiz-adv-x="1110" d="M53 0zM870 0h-817l309 1462h818l-54 -254h-512l-67 -321h477l-55 -254h-477l-80 -377h512zM608 1604q79 88 222 303h335v-17q-46 -56 -154 -152.5t-194 -158.5h-209v25z" /> +<glyph unicode="Ê" horiz-adv-x="1110" d="M53 0zM870 0h-817l309 1462h818l-54 -254h-512l-67 -321h477l-55 -254h-477l-80 -377h512zM1177 1579h-198q-63 53 -162 168q-105 -88 -232 -168h-217v25q63 57 153 147t142 156h338q22 -54 74 -142.5t102 -160.5v-25z" /> +<glyph unicode="Ë" horiz-adv-x="1110" d="M53 0zM870 0h-817l309 1462h818l-54 -254h-512l-67 -321h477l-55 -254h-477l-80 -377h512zM438 1720q0 78 42.5 118t119.5 40q133 0 133 -108q0 -73 -39 -116.5t-121 -43.5q-135 0 -135 110zM840 1720q0 78 42 118t120 40q65 0 99 -28t34 -80q0 -73 -39.5 -116.5 t-120.5 -43.5q-135 0 -135 110z" /> +<glyph unicode="Ì" horiz-adv-x="659" d="M53 0zM53 0l312 1462h305l-312 -1462h-305zM667 1579h-184q-71 69 -138.5 153.5t-103.5 153.5v21h311q36 -148 115 -303v-25z" /> +<glyph unicode="Í" horiz-adv-x="659" d="M53 0zM53 0l312 1462h305l-312 -1462h-305zM414 1604q79 88 222 303h335v-17q-46 -56 -154 -152.5t-194 -158.5h-209v25z" /> +<glyph unicode="Î" horiz-adv-x="659" d="M53 0zM53 0l312 1462h305l-312 -1462h-305zM937 1579h-198q-63 53 -162 168q-105 -88 -232 -168h-217v25q63 57 153 147t142 156h338q22 -54 74 -142.5t102 -160.5v-25z" /> +<glyph unicode="Ï" horiz-adv-x="659" d="M53 0zM53 0l312 1462h305l-312 -1462h-305zM222 1720q0 78 42.5 118t119.5 40q133 0 133 -108q0 -73 -39 -116.5t-121 -43.5q-135 0 -135 110zM624 1720q0 78 42 118t120 40q65 0 99 -28t34 -80q0 -73 -39.5 -116.5t-120.5 -43.5q-135 0 -135 110z" /> +<glyph unicode="Ð" horiz-adv-x="1386" d="M1323 909q0 -280 -98 -486.5t-283.5 -314.5t-437.5 -108h-451l125 596h-141l55 254h139l131 612h396q270 0 417.5 -143t147.5 -410zM518 256q148 0 258 76t172 223.5t62 337.5q0 154 -72.5 234.5t-208.5 80.5h-115l-75 -358h237l-55 -254h-238l-71 -340h106z" /> +<glyph unicode="Ñ" horiz-adv-x="1546" d="M53 0zM1247 0h-342l-356 1106h-6l-4 -32q-32 -216 -66 -386l-145 -688h-275l309 1462h357l340 -1077h4q12 76 39 217t180 860h274zM1114 1579q-49 0 -86.5 16.5t-69.5 36t-61.5 36t-62.5 16.5q-31 0 -55.5 -28t-38.5 -79h-177q59 309 281 309q49 0 87.5 -16.5t71.5 -36 t62 -35.5t60 -16q34 0 58 25.5t46 80.5h172q-66 -309 -287 -309z" /> +<glyph unicode="Ò" horiz-adv-x="1495" d="M123 0zM1432 938q0 -283 -99 -506.5t-271 -337.5t-396 -114q-256 0 -399.5 147.5t-143.5 409.5q0 265 99 487.5t273 341.5t402 119q255 0 395 -144t140 -403zM872 1227q-121 0 -222 -91.5t-158.5 -251.5t-57.5 -347q0 -147 66.5 -222t187.5 -75t220.5 87t155.5 246 t56 357q0 142 -65 219.5t-183 77.5zM1053 1579h-184q-71 69 -138.5 153.5t-103.5 153.5v21h311q36 -148 115 -303v-25z" /> +<glyph unicode="Ó" horiz-adv-x="1495" d="M123 0zM1432 938q0 -283 -99 -506.5t-271 -337.5t-396 -114q-256 0 -399.5 147.5t-143.5 409.5q0 265 99 487.5t273 341.5t402 119q255 0 395 -144t140 -403zM872 1227q-121 0 -222 -91.5t-158.5 -251.5t-57.5 -347q0 -147 66.5 -222t187.5 -75t220.5 87t155.5 246 t56 357q0 142 -65 219.5t-183 77.5zM753 1604q79 88 222 303h335v-17q-46 -56 -154 -152.5t-194 -158.5h-209v25z" /> +<glyph unicode="Ô" horiz-adv-x="1495" d="M123 0zM1432 938q0 -283 -99 -506.5t-271 -337.5t-396 -114q-256 0 -399.5 147.5t-143.5 409.5q0 265 99 487.5t273 341.5t402 119q255 0 395 -144t140 -403zM872 1227q-121 0 -222 -91.5t-158.5 -251.5t-57.5 -347q0 -147 66.5 -222t187.5 -75t220.5 87t155.5 246 t56 357q0 142 -65 219.5t-183 77.5zM1308 1579h-198q-63 53 -162 168q-105 -88 -232 -168h-217v25q63 57 153 147t142 156h338q22 -54 74 -142.5t102 -160.5v-25z" /> +<glyph unicode="Õ" horiz-adv-x="1495" d="M123 0zM1432 938q0 -283 -99 -506.5t-271 -337.5t-396 -114q-256 0 -399.5 147.5t-143.5 409.5q0 265 99 487.5t273 341.5t402 119q255 0 395 -144t140 -403zM872 1227q-121 0 -222 -91.5t-158.5 -251.5t-57.5 -347q0 -147 66.5 -222t187.5 -75t220.5 87t155.5 246 t56 357q0 142 -65 219.5t-183 77.5zM1071 1579q-49 0 -86.5 16.5t-69.5 36t-61.5 36t-62.5 16.5q-31 0 -55.5 -28t-38.5 -79h-177q59 309 281 309q49 0 87.5 -16.5t71.5 -36t62 -35.5t60 -16q34 0 58 25.5t46 80.5h172q-66 -309 -287 -309z" /> +<glyph unicode="Ö" horiz-adv-x="1495" d="M123 0zM1432 938q0 -283 -99 -506.5t-271 -337.5t-396 -114q-256 0 -399.5 147.5t-143.5 409.5q0 265 99 487.5t273 341.5t402 119q255 0 395 -144t140 -403zM872 1227q-121 0 -222 -91.5t-158.5 -251.5t-57.5 -347q0 -147 66.5 -222t187.5 -75t220.5 87t155.5 246 t56 357q0 142 -65 219.5t-183 77.5zM585 1720q0 78 42.5 118t119.5 40q133 0 133 -108q0 -73 -39 -116.5t-121 -43.5q-135 0 -135 110zM987 1720q0 78 42 118t120 40q65 0 99 -28t34 -80q0 -73 -39.5 -116.5t-120.5 -43.5q-135 0 -135 110z" /> +<glyph unicode="×" d="M428 723l-299 301l152 154l301 -299l305 299l153 -150l-305 -305l301 -303l-149 -152l-305 301l-301 -299l-150 152z" /> +<glyph unicode="Ø" horiz-adv-x="1495" d="M1432 938q0 -283 -99 -506.5t-271 -337.5t-396 -114q-180 0 -304 71l-108 -137l-154 115l121 151q-98 138 -98 357q0 265 99 487.5t273 341.5t402 119q182 0 305 -76l105 131l151 -117l-117 -145q91 -134 91 -340zM870 1233q-126 0 -229 -91.5t-160 -252.5t-57 -352 q0 -32 8 -101l596 754q-69 43 -158 43zM1133 930l-5 80l-589 -740q59 -37 153 -37q124 0 226 89t158.5 247.5t56.5 360.5z" /> +<glyph unicode="Ù" horiz-adv-x="1415" d="M141 0zM1434 1462l-201 -946q-57 -266 -218 -401t-419 -135q-212 0 -333.5 113.5t-121.5 307.5q0 72 15 138l196 923h305l-194 -919q-17 -74 -17 -125q0 -178 189 -178q123 0 195 76.5t104 228.5l194 917h306zM1002 1579h-184q-71 69 -138.5 153.5t-103.5 153.5v21h311 q36 -148 115 -303v-25z" /> +<glyph unicode="Ú" horiz-adv-x="1415" d="M141 0zM1434 1462l-201 -946q-57 -266 -218 -401t-419 -135q-212 0 -333.5 113.5t-121.5 307.5q0 72 15 138l196 923h305l-194 -919q-17 -74 -17 -125q0 -178 189 -178q123 0 195 76.5t104 228.5l194 917h306zM757 1604q79 88 222 303h335v-17q-46 -56 -154 -152.5 t-194 -158.5h-209v25z" /> +<glyph unicode="Û" horiz-adv-x="1415" d="M141 0zM1434 1462l-201 -946q-57 -266 -218 -401t-419 -135q-212 0 -333.5 113.5t-121.5 307.5q0 72 15 138l196 923h305l-194 -919q-17 -74 -17 -125q0 -178 189 -178q123 0 195 76.5t104 228.5l194 917h306zM1284 1579h-198q-63 53 -162 168q-105 -88 -232 -168h-217 v25q63 57 153 147t142 156h338q22 -54 74 -142.5t102 -160.5v-25z" /> +<glyph unicode="Ü" horiz-adv-x="1415" d="M141 0zM1434 1462l-201 -946q-57 -266 -218 -401t-419 -135q-212 0 -333.5 113.5t-121.5 307.5q0 72 15 138l196 923h305l-194 -919q-17 -74 -17 -125q0 -178 189 -178q123 0 195 76.5t104 228.5l194 917h306zM565 1720q0 78 42.5 118t119.5 40q133 0 133 -108 q0 -73 -39 -116.5t-121 -43.5q-135 0 -135 110zM967 1720q0 78 42 118t120 40q65 0 99 -28t34 -80q0 -73 -39.5 -116.5t-120.5 -43.5q-135 0 -135 110z" /> +<glyph unicode="Ý" horiz-adv-x="1155" d="M186 0zM627 870l374 592h342l-618 -903l-119 -559h-303l119 559l-236 903h312zM606 1604q79 88 222 303h335v-17q-46 -56 -154 -152.5t-194 -158.5h-209v25z" /> +<glyph unicode="Þ" horiz-adv-x="1188" d="M1143 807q0 -243 -170.5 -378.5t-466.5 -135.5h-86l-62 -293h-305l309 1462h306l-50 -229h35q242 0 366 -106.5t124 -319.5zM475 547h55q139 0 222.5 66.5t83.5 185.5q0 180 -195 180h-74z" /> +<glyph unicode="ß" horiz-adv-x="1350" d="M846 1567q208 0 331 -90t123 -240q0 -114 -49 -192t-178 -152q-73 -42 -96 -68.5t-23 -54.5q0 -23 22 -49.5t79 -69.5q107 -83 144.5 -150.5t37.5 -150.5q0 -170 -123.5 -270t-337.5 -100q-187 0 -297 61v240q128 -78 258 -78q101 0 148 33t47 86q0 40 -26.5 75 t-108.5 97q-94 72 -129 130t-35 126q0 84 45 145t162 127q66 37 104.5 76t38.5 96q0 62 -39.5 98.5t-124.5 36.5q-96 0 -156 -51.5t-85 -171.5l-254 -1219q-43 -198 -147 -288.5t-277 -90.5q-90 0 -160 25v242q61 -21 115 -21q133 0 170 178l254 1207q47 224 182 326 t385 102z" /> +<glyph unicode="à" horiz-adv-x="1217" d="M90 0zM406 -20q-147 0 -231.5 106.5t-84.5 298.5q0 198 72 377.5t189 278t257 98.5q97 0 167.5 -42t109.5 -122h8l57 143h232l-238 -1118h-229l14 145h-4q-134 -165 -319 -165zM524 223q69 0 133 67t103 181.5t39 259.5q0 71 -38.5 117.5t-101.5 46.5q-68 0 -129.5 -72 t-98 -190t-36.5 -234q0 -88 33.5 -132t95.5 -44zM869 1241h-184q-71 69 -138.5 153.5t-103.5 153.5v21h311q36 -148 115 -303v-25z" /> +<glyph unicode="á" horiz-adv-x="1217" d="M90 0zM406 -20q-147 0 -231.5 106.5t-84.5 298.5q0 198 72 377.5t189 278t257 98.5q97 0 167.5 -42t109.5 -122h8l57 143h232l-238 -1118h-229l14 145h-4q-134 -165 -319 -165zM524 223q69 0 133 67t103 181.5t39 259.5q0 71 -38.5 117.5t-101.5 46.5q-68 0 -129.5 -72 t-98 -190t-36.5 -234q0 -88 33.5 -132t95.5 -44zM598 1266q79 88 222 303h335v-17q-46 -56 -154 -152.5t-194 -158.5h-209v25z" /> +<glyph unicode="â" horiz-adv-x="1217" d="M90 0zM406 -20q-147 0 -231.5 106.5t-84.5 298.5q0 198 72 377.5t189 278t257 98.5q97 0 167.5 -42t109.5 -122h8l57 143h232l-238 -1118h-229l14 145h-4q-134 -165 -319 -165zM524 223q69 0 133 67t103 181.5t39 259.5q0 71 -38.5 117.5t-101.5 46.5q-68 0 -129.5 -72 t-98 -190t-36.5 -234q0 -88 33.5 -132t95.5 -44zM1120 1240h-198q-63 53 -162 168q-105 -88 -232 -168h-217v25q63 57 153 147t142 156h338q22 -54 74 -142.5t102 -160.5v-25z" /> +<glyph unicode="ã" horiz-adv-x="1217" d="M90 0zM406 -20q-147 0 -231.5 106.5t-84.5 298.5q0 198 72 377.5t189 278t257 98.5q97 0 167.5 -42t109.5 -122h8l57 143h232l-238 -1118h-229l14 145h-4q-134 -165 -319 -165zM524 223q69 0 133 67t103 181.5t39 259.5q0 71 -38.5 117.5t-101.5 46.5q-68 0 -129.5 -72 t-98 -190t-36.5 -234q0 -88 33.5 -132t95.5 -44zM884 1241q-49 0 -86.5 16.5t-69.5 36t-61.5 36t-62.5 16.5q-31 0 -55.5 -28t-38.5 -79h-177q59 309 281 309q49 0 87.5 -16.5t71.5 -36t62 -35.5t60 -16q34 0 58 25.5t46 80.5h172q-66 -309 -287 -309z" /> +<glyph unicode="ä" horiz-adv-x="1217" d="M90 0zM406 -20q-147 0 -231.5 106.5t-84.5 298.5q0 198 72 377.5t189 278t257 98.5q97 0 167.5 -42t109.5 -122h8l57 143h232l-238 -1118h-229l14 145h-4q-134 -165 -319 -165zM524 223q69 0 133 67t103 181.5t39 259.5q0 71 -38.5 117.5t-101.5 46.5q-68 0 -129.5 -72 t-98 -190t-36.5 -234q0 -88 33.5 -132t95.5 -44zM397 1382q0 78 42.5 118t119.5 40q133 0 133 -108q0 -73 -39 -116.5t-121 -43.5q-135 0 -135 110zM799 1382q0 78 42 118t120 40q65 0 99 -28t34 -80q0 -73 -39.5 -116.5t-120.5 -43.5q-135 0 -135 110z" /> +<glyph unicode="å" horiz-adv-x="1217" d="M90 0zM406 -20q-147 0 -231.5 106.5t-84.5 298.5q0 198 72 377.5t189 278t257 98.5q97 0 167.5 -42t109.5 -122h8l57 143h232l-238 -1118h-229l14 145h-4q-134 -165 -319 -165zM524 223q69 0 133 67t103 181.5t39 259.5q0 71 -38.5 117.5t-101.5 46.5q-68 0 -129.5 -72 t-98 -190t-36.5 -234q0 -88 33.5 -132t95.5 -44zM1023 1479q0 -107 -70 -173.5t-184 -66.5q-110 0 -179 63.5t-69 174.5q0 109 68.5 173t179.5 64q110 0 182 -65t72 -170zM866 1477q0 45 -27.5 70.5t-69.5 25.5t-69 -25.5t-27 -70.5t24 -71t72 -26q42 0 69.5 26t27.5 71z " /> +<glyph unicode="æ" horiz-adv-x="1786" d="M1206 -20q-109 0 -179.5 27t-117.5 87l-16 -94h-188l14 145h-6q-71 -88 -146.5 -126.5t-167.5 -38.5q-146 0 -227.5 109t-81.5 296q0 200 68.5 375.5t185 277t258.5 101.5q96 0 160.5 -38.5t114.5 -125.5h6l57 143h188l-18 -90q44 49 120.5 80t168.5 31 q157 0 246.5 -83.5t89.5 -221.5q0 -187 -167 -288.5t-476 -101.5h-52l-2 -19v-19q0 -96 55.5 -147.5t159.5 -51.5q66 0 152 23t162 63v-227q-179 -86 -361 -86zM518 223q72 0 134 68t99 184.5t37 243.5q0 80 -33 128t-102 48q-68 0 -128 -69t-95 -185.5t-35 -241.5 q0 -84 32.5 -130t90.5 -46zM1341 922q-88 0 -166 -80t-102 -195h45q155 0 241.5 48.5t86.5 131.5q0 95 -105 95z" /> +<glyph unicode="ç" horiz-adv-x="989" d="M90 0zM506 -20q-201 0 -308.5 107.5t-107.5 303.5q0 212 74.5 385.5t209.5 268t308 94.5q182 0 328 -72l-92 -229q-54 23 -106 40t-118 17q-85 0 -153.5 -64t-107 -175.5t-38.5 -239.5q0 -96 45.5 -144.5t126.5 -48.5q76 0 141 23.5t134 58.5v-246q-152 -79 -336 -79z M653 -250q0 -116 -83 -179t-234 -63q-86 0 -152 23v168q63 -23 125 -23q102 0 102 82q0 34 -31 56.5t-110 31.5l96 154h185l-39 -72q141 -49 141 -178z" /> +<glyph unicode="è" horiz-adv-x="1141" d="M90 0zM696 922q-88 0 -166 -80t-102 -195h45q155 0 241.5 48.5t86.5 131.5q0 95 -105 95zM532 -20q-210 0 -326 113t-116 319q0 207 82.5 377.5t223.5 260t319 89.5q177 0 276 -81.5t99 -223.5q0 -187 -167 -288.5t-477 -101.5h-51l-2 -21v-20q0 -91 51.5 -143.5 t147.5 -52.5q87 0 158 19t172 67v-227q-172 -86 -390 -86zM849 1241h-184q-71 69 -138.5 153.5t-103.5 153.5v21h311q36 -148 115 -303v-25z" /> +<glyph unicode="é" horiz-adv-x="1141" d="M90 0zM696 922q-88 0 -166 -80t-102 -195h45q155 0 241.5 48.5t86.5 131.5q0 95 -105 95zM532 -20q-210 0 -326 113t-116 319q0 207 82.5 377.5t223.5 260t319 89.5q177 0 276 -81.5t99 -223.5q0 -187 -167 -288.5t-477 -101.5h-51l-2 -21v-20q0 -91 51.5 -143.5 t147.5 -52.5q87 0 158 19t172 67v-227q-172 -86 -390 -86zM528 1266q79 88 222 303h335v-17q-46 -56 -154 -152.5t-194 -158.5h-209v25z" /> +<glyph unicode="ê" horiz-adv-x="1141" d="M90 0zM696 922q-88 0 -166 -80t-102 -195h45q155 0 241.5 48.5t86.5 131.5q0 95 -105 95zM532 -20q-210 0 -326 113t-116 319q0 207 82.5 377.5t223.5 260t319 89.5q177 0 276 -81.5t99 -223.5q0 -187 -167 -288.5t-477 -101.5h-51l-2 -21v-20q0 -91 51.5 -143.5 t147.5 -52.5q87 0 158 19t172 67v-227q-172 -86 -390 -86zM1101 1241h-198q-63 53 -162 168q-105 -88 -232 -168h-217v25q63 57 153 147t142 156h338q22 -54 74 -142.5t102 -160.5v-25z" /> +<glyph unicode="ë" horiz-adv-x="1141" d="M90 0zM696 922q-88 0 -166 -80t-102 -195h45q155 0 241.5 48.5t86.5 131.5q0 95 -105 95zM532 -20q-210 0 -326 113t-116 319q0 207 82.5 377.5t223.5 260t319 89.5q177 0 276 -81.5t99 -223.5q0 -187 -167 -288.5t-477 -101.5h-51l-2 -21v-20q0 -91 51.5 -143.5 t147.5 -52.5q87 0 158 19t172 67v-227q-172 -86 -390 -86zM365 1382q0 78 42.5 118t119.5 40q133 0 133 -108q0 -73 -39 -116.5t-121 -43.5q-135 0 -135 110zM767 1382q0 78 42 118t120 40q65 0 99 -28t34 -80q0 -73 -39.5 -116.5t-120.5 -43.5q-135 0 -135 110z" /> +<glyph unicode="ì" horiz-adv-x="608" d="M37 0zM338 0h-301l237 1118h301zM579 1241h-184q-71 69 -138.5 153.5t-103.5 153.5v21h311q36 -148 115 -303v-25z" /> +<glyph unicode="í" horiz-adv-x="608" d="M37 0zM338 0h-301l237 1118h301zM291 1266q79 88 222 303h335v-17q-46 -56 -154 -152.5t-194 -158.5h-209v25z" /> +<glyph unicode="î" horiz-adv-x="608" d="M36 0zM338 0h-301l237 1118h301zM845 1241h-198q-63 53 -162 168q-105 -88 -232 -168h-217v25q63 57 153 147t142 156h338q22 -54 74 -142.5t102 -160.5v-25z" /> +<glyph unicode="ï" horiz-adv-x="608" d="M37 0zM338 0h-301l237 1118h301zM126 1382q0 78 42.5 118t119.5 40q133 0 133 -108q0 -73 -39 -116.5t-121 -43.5q-135 0 -135 110zM528 1382q0 78 42 118t120 40q65 0 99 -28t34 -80q0 -73 -39.5 -116.5t-120.5 -43.5q-135 0 -135 110z" /> +<glyph unicode="ð" horiz-adv-x="1182" d="M618 1309q-34 34 -124 80l118 186q134 -61 232 -139l237 131l76 -152l-192 -106q81 -107 113 -235t32 -279q0 -249 -69.5 -432.5t-203.5 -283t-323 -99.5q-216 0 -329 110t-113 316q0 165 64.5 301t180.5 212t265 76q83 0 151.5 -31t114.5 -94h6q-20 213 -117 310 l-231 -131l-88 147zM528 205q66 0 122.5 55.5t89 148.5t32.5 193q0 77 -38.5 122.5t-108.5 45.5q-73 0 -130 -53t-88.5 -143t-31.5 -197q0 -81 39 -126.5t114 -45.5z" /> +<glyph unicode="ñ" horiz-adv-x="1237" d="M37 0zM977 0h-301l137 653q16 68 16 119q0 123 -108 123q-92 0 -167 -114t-118 -318l-98 -463h-301l237 1118h230l-21 -207h6q146 228 355 228q138 0 213.5 -83.5t75.5 -238.5q0 -73 -23 -180zM909 1241q-49 0 -86.5 16.5t-69.5 36t-61.5 36t-62.5 16.5q-31 0 -55.5 -28 t-38.5 -79h-177q59 309 281 309q49 0 87.5 -16.5t71.5 -36t62 -35.5t60 -16q34 0 58 25.5t46 80.5h172q-66 -309 -287 -309z" /> +<glyph unicode="ò" horiz-adv-x="1198" d="M90 0zM805 696q0 197 -143 197q-75 0 -134.5 -61t-97 -179t-37.5 -243q0 -185 150 -185q75 0 135 61.5t93.5 171t33.5 238.5zM1108 696q0 -211 -70.5 -374t-203.5 -252.5t-316 -89.5q-195 0 -311.5 117.5t-116.5 312.5q0 213 71.5 379.5t206.5 258t316 91.5 q196 0 310 -118t114 -325zM845 1241h-184q-71 69 -138.5 153.5t-103.5 153.5v21h311q36 -148 115 -303v-25z" /> +<glyph unicode="ó" horiz-adv-x="1198" d="M90 0zM805 696q0 197 -143 197q-75 0 -134.5 -61t-97 -179t-37.5 -243q0 -185 150 -185q75 0 135 61.5t93.5 171t33.5 238.5zM1108 696q0 -211 -70.5 -374t-203.5 -252.5t-316 -89.5q-195 0 -311.5 117.5t-116.5 312.5q0 213 71.5 379.5t206.5 258t316 91.5 q196 0 310 -118t114 -325zM571 1266q79 88 222 303h335v-17q-46 -56 -154 -152.5t-194 -158.5h-209v25z" /> +<glyph unicode="ô" horiz-adv-x="1198" d="M90 0zM805 696q0 197 -143 197q-75 0 -134.5 -61t-97 -179t-37.5 -243q0 -185 150 -185q75 0 135 61.5t93.5 171t33.5 238.5zM1108 696q0 -211 -70.5 -374t-203.5 -252.5t-316 -89.5q-195 0 -311.5 117.5t-116.5 312.5q0 213 71.5 379.5t206.5 258t316 91.5 q196 0 310 -118t114 -325zM1109 1241h-198q-63 53 -162 168q-105 -88 -232 -168h-217v25q63 57 153 147t142 156h338q22 -54 74 -142.5t102 -160.5v-25z" /> +<glyph unicode="õ" horiz-adv-x="1198" d="M90 0zM805 696q0 197 -143 197q-75 0 -134.5 -61t-97 -179t-37.5 -243q0 -185 150 -185q75 0 135 61.5t93.5 171t33.5 238.5zM1108 696q0 -211 -70.5 -374t-203.5 -252.5t-316 -89.5q-195 0 -311.5 117.5t-116.5 312.5q0 213 71.5 379.5t206.5 258t316 91.5 q196 0 310 -118t114 -325zM865 1241q-49 0 -86.5 16.5t-69.5 36t-61.5 36t-62.5 16.5q-31 0 -55.5 -28t-38.5 -79h-177q59 309 281 309q49 0 87.5 -16.5t71.5 -36t62 -35.5t60 -16q34 0 58 25.5t46 80.5h172q-66 -309 -287 -309z" /> +<glyph unicode="ö" horiz-adv-x="1198" d="M90 0zM805 696q0 197 -143 197q-75 0 -134.5 -61t-97 -179t-37.5 -243q0 -185 150 -185q75 0 135 61.5t93.5 171t33.5 238.5zM1108 696q0 -211 -70.5 -374t-203.5 -252.5t-316 -89.5q-195 0 -311.5 117.5t-116.5 312.5q0 213 71.5 379.5t206.5 258t316 91.5 q196 0 310 -118t114 -325zM386 1382q0 78 42.5 118t119.5 40q133 0 133 -108q0 -73 -39 -116.5t-121 -43.5q-135 0 -135 110zM788 1382q0 78 42 118t120 40q65 0 99 -28t34 -80q0 -73 -39.5 -116.5t-120.5 -43.5q-135 0 -135 110z" /> +<glyph unicode="÷" d="M109 612v219h952v-219h-952zM444 373q0 76 37 113.5t103 37.5t102.5 -39t36.5 -112q0 -70 -37 -111t-102 -41t-102.5 39t-37.5 113zM444 1071q0 75 37 113.5t103 38.5q67 0 103 -40.5t36 -111.5q0 -70 -37 -110.5t-102 -40.5t-102.5 39t-37.5 112z" /> +<glyph unicode="ø" horiz-adv-x="1198" d="M1108 696q0 -211 -70.5 -374t-203.5 -252.5t-316 -89.5q-123 0 -225 53l-109 -135l-141 108l119 148q-72 107 -72 256q0 213 71.5 379.5t206.5 258t316 91.5q131 0 227 -56l70 88l145 -110l-84 -105q66 -107 66 -260zM662 903q-81 0 -144.5 -62.5t-98 -169.5t-34.5 -233 v-12l365 453q-35 24 -88 24zM543 215q114 0 193 133t79 318v16l-358 -444q11 -8 35.5 -15.5t50.5 -7.5z" /> +<glyph unicode="ù" horiz-adv-x="1237" d="M111 0zM262 1118h301l-137 -653q-16 -68 -16 -119q0 -123 108 -123q92 0 167 114t118 318l98 463h301l-237 -1118h-230l21 207h-6q-145 -227 -355 -227q-138 0 -211 82.5t-73 238.5q0 93 24 213zM845 1241h-184q-71 69 -138.5 153.5t-103.5 153.5v21h311 q36 -148 115 -303v-25z" /> +<glyph unicode="ú" horiz-adv-x="1237" d="M111 0zM262 1118h301l-137 -653q-16 -68 -16 -119q0 -123 108 -123q92 0 167 114t118 318l98 463h301l-237 -1118h-230l21 207h-6q-145 -227 -355 -227q-138 0 -211 82.5t-73 238.5q0 93 24 213zM610 1266q79 88 222 303h335v-17q-46 -56 -154 -152.5t-194 -158.5h-209 v25z" /> +<glyph unicode="û" horiz-adv-x="1237" d="M111 0zM262 1118h301l-137 -653q-16 -68 -16 -119q0 -123 108 -123q92 0 167 114t118 318l98 463h301l-237 -1118h-230l21 207h-6q-145 -227 -355 -227q-138 0 -211 82.5t-73 238.5q0 93 24 213zM1143 1241h-198q-63 53 -162 168q-105 -88 -232 -168h-217v25 q63 57 153 147t142 156h338q22 -54 74 -142.5t102 -160.5v-25z" /> +<glyph unicode="ü" horiz-adv-x="1237" d="M111 0zM262 1118h301l-137 -653q-16 -68 -16 -119q0 -123 108 -123q92 0 167 114t118 318l98 463h301l-237 -1118h-230l21 207h-6q-145 -227 -355 -227q-138 0 -211 82.5t-73 238.5q0 93 24 213zM411 1382q0 78 42.5 118t119.5 40q133 0 133 -108q0 -73 -39 -116.5 t-121 -43.5q-135 0 -135 110zM813 1382q0 78 42 118t120 40q65 0 99 -28t34 -80q0 -73 -39.5 -116.5t-120.5 -43.5q-135 0 -135 110z" /> +<glyph unicode="ý" horiz-adv-x="1063" d="M0 0zM102 1118h295l56 -518q14 -122 14 -293h6q20 51 44 119.5t65 153.5l260 538h327l-680 -1278q-177 -332 -483 -332q-90 0 -147 19v240q68 -13 116 -13q84 0 147.5 48t117.5 149l26 49zM497 1266q79 88 222 303h335v-17q-46 -56 -154 -152.5t-194 -158.5h-209v25z" /> +<glyph unicode="þ" horiz-adv-x="1219" d="M813 1139q150 0 232.5 -106.5t82.5 -301.5q0 -199 -69 -381t-182 -276t-250 -94q-178 0 -271 163h-8q-12 -159 -43 -295l-72 -340h-301l435 2048h301l-66 -307q-29 -131 -80 -280h8q131 170 283 170zM682 895q-71 0 -130 -65t-95.5 -184.5t-36.5 -246.5q0 -80 33.5 -128 t105.5 -48q69 0 129 65t97.5 183.5t37.5 247.5q0 88 -37.5 132t-103.5 44z" /> +<glyph unicode="ÿ" horiz-adv-x="1063" d="M0 0zM102 1118h295l56 -518q14 -122 14 -293h6q20 51 44 119.5t65 153.5l260 538h327l-680 -1278q-177 -332 -483 -332q-90 0 -147 19v240q68 -13 116 -13q84 0 147.5 48t117.5 149l26 49zM310 1382q0 78 42.5 118t119.5 40q133 0 133 -108q0 -73 -39 -116.5t-121 -43.5 q-135 0 -135 110zM712 1382q0 78 42 118t120 40q65 0 99 -28t34 -80q0 -73 -39.5 -116.5t-120.5 -43.5q-135 0 -135 110z" /> +<glyph unicode="ı" horiz-adv-x="608" d="M338 0h-301l237 1118h301z" /> +<glyph unicode="Œ" horiz-adv-x="1845" d="M1606 0h-760q-93 -20 -180 -20q-256 0 -399.5 147.5t-143.5 409.5q0 265 99 487.5t273 341.5t402 119q140 0 209 -23h809l-53 -254h-512l-68 -321h477l-55 -254h-477l-80 -377h512zM688 240q88 0 158 32l194 916q-62 39 -168 39q-121 0 -222 -91.5t-158.5 -251.5 t-57.5 -347q0 -147 66.5 -222t187.5 -75z" /> +<glyph unicode="œ" horiz-adv-x="1806" d="M1198 -20q-116 0 -208 38.5t-138 106.5q-63 -68 -147 -106.5t-207 -38.5q-187 0 -297.5 117t-110.5 317q0 216 69 380.5t200 254.5t309 90q209 0 313 -160q154 160 399 160q177 0 276 -81.5t99 -223.5q0 -187 -167 -288.5t-476 -101.5h-51l-2 -21v-20q0 -91 51 -143.5 t147 -52.5q87 0 158 19t172 67v-227q-93 -46 -185.5 -66t-203.5 -20zM645 893q-71 0 -127 -60.5t-90.5 -176.5t-34.5 -242q0 -91 36.5 -140t109.5 -49q109 0 179 134.5t70 336.5q0 96 -37 146.5t-106 50.5zM1362 922q-88 0 -165.5 -78.5t-102.5 -196.5h45q155 0 241 48.5 t86 131.5q0 95 -104 95z" /> +<glyph unicode="Ÿ" horiz-adv-x="1155" d="M186 0zM627 870l374 592h342l-618 -903l-119 -559h-303l119 559l-236 903h312zM432 1720q0 78 42.5 118t119.5 40q133 0 133 -108q0 -73 -39 -116.5t-121 -43.5q-135 0 -135 110zM834 1720q0 78 42 118t120 40q65 0 99 -28t34 -80q0 -73 -39.5 -116.5t-120.5 -43.5 q-135 0 -135 110z" /> +<glyph unicode="ˆ" horiz-adv-x="1135" d="M1120 1241h-198q-63 53 -162 168q-105 -88 -232 -168h-217v25q63 57 153 147t142 156h338q22 -54 74 -142.5t102 -160.5v-25z" /> +<glyph unicode="˚" horiz-adv-x="1182" d="M1034 1479q0 -107 -70 -173.5t-184 -66.5q-110 0 -179 63.5t-69 174.5q0 109 68.5 173t179.5 64q110 0 182 -65t72 -170zM877 1477q0 45 -27.5 70.5t-69.5 25.5t-69 -25.5t-27 -70.5t24 -71t72 -26q42 0 69.5 26t27.5 71z" /> +<glyph unicode="˜" horiz-adv-x="1135" d="M866 1241q-49 0 -86.5 16.5t-69.5 36t-61.5 36t-62.5 16.5q-31 0 -55.5 -28t-38.5 -79h-177q59 309 281 309q49 0 87.5 -16.5t71.5 -36t62 -35.5t60 -16q34 0 58 25.5t46 80.5h172q-66 -309 -287 -309z" /> +<glyph unicode=" " horiz-adv-x="953" /> +<glyph unicode=" " horiz-adv-x="1907" /> +<glyph unicode=" " horiz-adv-x="953" /> +<glyph unicode=" " horiz-adv-x="1907" /> +<glyph unicode=" " horiz-adv-x="635" /> +<glyph unicode=" " horiz-adv-x="476" /> +<glyph unicode=" " horiz-adv-x="317" /> +<glyph unicode=" " horiz-adv-x="317" /> +<glyph unicode=" " horiz-adv-x="238" /> +<glyph unicode=" " horiz-adv-x="381" /> +<glyph unicode=" " horiz-adv-x="105" /> +<glyph unicode="‐" horiz-adv-x="659" d="M41 424l53 250h524l-53 -250h-524z" /> +<glyph unicode="‑" horiz-adv-x="659" d="M41 424l53 250h524l-53 -250h-524z" /> +<glyph unicode="‒" horiz-adv-x="659" d="M41 424l53 250h524l-53 -250h-524z" /> +<glyph unicode="–" horiz-adv-x="983" d="M41 436l49 230h852l-49 -230h-852z" /> +<glyph unicode="—" horiz-adv-x="1966" d="M41 436l49 230h1835l-49 -230h-1835z" /> +<glyph unicode="‘" horiz-adv-x="440" d="M123 961l-8 22q103 227 262 479h225q-91 -213 -194 -501h-285z" /> +<glyph unicode="’" horiz-adv-x="440" d="M586 1462l8 -22q-103 -227 -262 -479h-226q89 206 195 501h285z" /> +<glyph unicode="‚" horiz-adv-x="569" d="M377 238l8 -23q-103 -227 -262 -479h-225q88 207 194 502h285z" /> +<glyph unicode="“" horiz-adv-x="887" d="M569 961l-8 22q103 227 262 479h226q-97 -227 -195 -501h-285zM123 961l-8 22q103 227 262 479h225q-91 -213 -194 -501h-285z" /> +<glyph unicode="”" horiz-adv-x="887" d="M586 1462l8 -22q-103 -227 -262 -479h-226q89 206 195 501h285zM1032 1462l8 -22q-103 -227 -262 -479h-225q23 53 46.5 111t148.5 390h284z" /> +<glyph unicode="„" horiz-adv-x="1018" d="M377 238l8 -23q-103 -227 -262 -479h-225q88 207 194 502h285zM825 238l9 -23q-100 -221 -263 -479h-225q24 57 49 118.5t146 383.5h284z" /> +<glyph unicode="•" horiz-adv-x="739" d="M104 686q0 106 42.5 194t120 136.5t182.5 48.5q120 0 182.5 -67t62.5 -191q0 -177 -91.5 -277t-248.5 -100q-117 0 -183.5 67t-66.5 189z" /> +<glyph unicode="…" horiz-adv-x="1706" d="M25 0zM25 115q0 90 53.5 144t150.5 54q68 0 109 -38t41 -107q0 -87 -55 -141t-144 -54q-73 0 -114 37.5t-41 104.5zM586 115q0 90 53.5 144t150.5 54q68 0 109 -38t41 -107q0 -87 -55 -141t-144 -54q-73 0 -114 37.5t-41 104.5zM1147 115q0 90 53.5 144t150.5 54 q68 0 109 -38t41 -107q0 -87 -55 -141t-144 -54q-73 0 -114 37.5t-41 104.5z" /> +<glyph unicode=" " horiz-adv-x="381" /> +<glyph unicode="‹" horiz-adv-x="664" d="M72 569l401 463l191 -155l-279 -334l135 -350l-246 -103l-202 461v18z" /> +<glyph unicode="›" horiz-adv-x="664" d="M592 535l-402 -463l-190 155l279 334l-136 350l246 103l203 -461v-18z" /> +<glyph unicode="⁄" horiz-adv-x="256" d="M791 1462l-1084 -1462h-239l1087 1462h236z" /> +<glyph unicode=" " horiz-adv-x="476" /> +<glyph unicode="⁴" horiz-adv-x="776" d="M776 737h-119l-32 -151h-238l33 151h-373l31 174l475 557h260l-121 -563h119zM455 905l58 231l22 74q-13 -20 -43 -58t-211 -247h174z" /> +<glyph unicode="€" d="M899 1237q-97 0 -176 -74.5t-135 -212.5h348l-39 -176h-360q-11 -34 -25 -115h299l-37 -178h-280q0 -120 44.5 -181.5t147.5 -61.5q133 0 283 63v-258q-126 -63 -330 -63q-446 0 -446 501h-152l37 178h127q9 67 22 115h-125l39 176h135q87 252 250.5 393.5t374.5 141.5 q100 0 179 -23t165 -80l-125 -223q-87 49 -131 63.5t-90 14.5z" /> +<glyph unicode="™" horiz-adv-x="1534" d="M471 741h-168v572h-197v149h564v-149h-199v-572zM1047 741l-166 529h-7l5 -111v-418h-164v721h248l159 -510l170 510h240v-721h-168v408l4 121h-6l-174 -529h-141z" /> +<glyph unicode="" horiz-adv-x="1120" d="M0 1120h1120v-1120h-1120v1120z" /> +<glyph horiz-adv-x="1217" d="M0 0z" /> +<hkern u1=""" u2="Ÿ" k="-20" /> +<hkern u1=""" u2="œ" k="123" /> +<hkern u1=""" u2="ü" k="61" /> +<hkern u1=""" u2="û" k="61" /> +<hkern u1=""" u2="ú" k="61" /> +<hkern u1=""" u2="ù" k="61" /> +<hkern u1=""" u2="ø" k="123" /> +<hkern u1=""" u2="ö" k="123" /> +<hkern u1=""" u2="õ" k="123" /> +<hkern u1=""" u2="ô" k="123" /> +<hkern u1=""" u2="ó" k="123" /> +<hkern u1=""" u2="ò" k="123" /> +<hkern u1=""" u2="ë" k="123" /> +<hkern u1=""" u2="ê" k="123" /> +<hkern u1=""" u2="é" k="123" /> +<hkern u1=""" u2="è" k="123" /> +<hkern u1=""" u2="ç" k="123" /> +<hkern u1=""" u2="æ" k="82" /> +<hkern u1=""" u2="å" k="82" /> +<hkern u1=""" u2="ä" k="82" /> +<hkern u1=""" u2="ã" k="82" /> +<hkern u1=""" u2="â" k="82" /> +<hkern u1=""" u2="á" k="82" /> +<hkern u1=""" u2="à" k="123" /> +<hkern u1=""" u2="Ý" k="-20" /> +<hkern u1=""" u2="Å" k="143" /> +<hkern u1=""" u2="Ä" k="143" /> +<hkern u1=""" u2="Ã" k="143" /> +<hkern u1=""" u2="Â" k="143" /> +<hkern u1=""" u2="Á" k="143" /> +<hkern u1=""" u2="À" k="143" /> +<hkern u1=""" u2="u" k="61" /> +<hkern u1=""" u2="s" k="61" /> +<hkern u1=""" u2="r" k="61" /> +<hkern u1=""" u2="q" k="123" /> +<hkern u1=""" u2="p" k="61" /> +<hkern u1=""" u2="o" k="123" /> +<hkern u1=""" u2="n" k="61" /> +<hkern u1=""" u2="m" k="61" /> +<hkern u1=""" u2="g" k="61" /> +<hkern u1=""" u2="e" k="123" /> +<hkern u1=""" u2="d" k="123" /> +<hkern u1=""" u2="c" k="123" /> +<hkern u1=""" u2="a" k="82" /> +<hkern u1=""" u2="Y" k="-20" /> +<hkern u1=""" u2="W" k="-41" /> +<hkern u1=""" u2="V" k="-41" /> +<hkern u1=""" u2="T" k="-41" /> +<hkern u1=""" u2="A" k="143" /> +<hkern u1="'" u2="Ÿ" k="-20" /> +<hkern u1="'" u2="œ" k="123" /> +<hkern u1="'" u2="ü" k="61" /> +<hkern u1="'" u2="û" k="61" /> +<hkern u1="'" u2="ú" k="61" /> +<hkern u1="'" u2="ù" k="61" /> +<hkern u1="'" u2="ø" k="123" /> +<hkern u1="'" u2="ö" k="123" /> +<hkern u1="'" u2="õ" k="123" /> +<hkern u1="'" u2="ô" k="123" /> +<hkern u1="'" u2="ó" k="123" /> +<hkern u1="'" u2="ò" k="123" /> +<hkern u1="'" u2="ë" k="123" /> +<hkern u1="'" u2="ê" k="123" /> +<hkern u1="'" u2="é" k="123" /> +<hkern u1="'" u2="è" k="123" /> +<hkern u1="'" u2="ç" k="123" /> +<hkern u1="'" u2="æ" k="82" /> +<hkern u1="'" u2="å" k="82" /> +<hkern u1="'" u2="ä" k="82" /> +<hkern u1="'" u2="ã" k="82" /> +<hkern u1="'" u2="â" k="82" /> +<hkern u1="'" u2="á" k="82" /> +<hkern u1="'" u2="à" k="123" /> +<hkern u1="'" u2="Ý" k="-20" /> +<hkern u1="'" u2="Å" k="143" /> +<hkern u1="'" u2="Ä" k="143" /> +<hkern u1="'" u2="Ã" k="143" /> +<hkern u1="'" u2="Â" k="143" /> +<hkern u1="'" u2="Á" k="143" /> +<hkern u1="'" u2="À" k="143" /> +<hkern u1="'" u2="u" k="61" /> +<hkern u1="'" u2="s" k="61" /> +<hkern u1="'" u2="r" k="61" /> +<hkern u1="'" u2="q" k="123" /> +<hkern u1="'" u2="p" k="61" /> +<hkern u1="'" u2="o" k="123" /> +<hkern u1="'" u2="n" k="61" /> +<hkern u1="'" u2="m" k="61" /> +<hkern u1="'" u2="g" k="61" /> +<hkern u1="'" u2="e" k="123" /> +<hkern u1="'" u2="d" k="123" /> +<hkern u1="'" u2="c" k="123" /> +<hkern u1="'" u2="a" k="82" /> +<hkern u1="'" u2="Y" k="-20" /> +<hkern u1="'" u2="W" k="-41" /> +<hkern u1="'" u2="V" k="-41" /> +<hkern u1="'" u2="T" k="-41" /> +<hkern u1="'" u2="A" k="143" /> +<hkern u1="(" u2="J" k="-184" /> +<hkern u1="," u2="Ÿ" k="123" /> +<hkern u1="," u2="Œ" k="102" /> +<hkern u1="," u2="Ý" k="123" /> +<hkern u1="," u2="Ü" k="41" /> +<hkern u1="," u2="Û" k="41" /> +<hkern u1="," u2="Ú" k="41" /> +<hkern u1="," u2="Ù" k="41" /> +<hkern u1="," u2="Ø" k="102" /> +<hkern u1="," u2="Ö" k="102" /> +<hkern u1="," u2="Õ" k="102" /> +<hkern u1="," u2="Ô" k="102" /> +<hkern u1="," u2="Ó" k="102" /> +<hkern u1="," u2="Ò" k="102" /> +<hkern u1="," u2="Ç" k="102" /> +<hkern u1="," u2="Y" k="123" /> +<hkern u1="," u2="W" k="123" /> +<hkern u1="," u2="V" k="123" /> +<hkern u1="," u2="U" k="41" /> +<hkern u1="," u2="T" k="143" /> +<hkern u1="," u2="Q" k="102" /> +<hkern u1="," u2="O" k="102" /> +<hkern u1="," u2="G" k="102" /> +<hkern u1="," u2="C" k="102" /> +<hkern u1="-" u2="T" k="82" /> +<hkern u1="." u2="Ÿ" k="123" /> +<hkern u1="." u2="Œ" k="102" /> +<hkern u1="." u2="Ý" k="123" /> +<hkern u1="." u2="Ü" k="41" /> +<hkern u1="." u2="Û" k="41" /> +<hkern u1="." u2="Ú" k="41" /> +<hkern u1="." u2="Ù" k="41" /> +<hkern u1="." u2="Ø" k="102" /> +<hkern u1="." u2="Ö" k="102" /> +<hkern u1="." u2="Õ" k="102" /> +<hkern u1="." u2="Ô" k="102" /> +<hkern u1="." u2="Ó" k="102" /> +<hkern u1="." u2="Ò" k="102" /> +<hkern u1="." u2="Ç" k="102" /> +<hkern u1="." u2="Y" k="123" /> +<hkern u1="." u2="W" k="123" /> +<hkern u1="." u2="V" k="123" /> +<hkern u1="." u2="U" k="41" /> +<hkern u1="." u2="T" k="143" /> +<hkern u1="." u2="Q" k="102" /> +<hkern u1="." u2="O" k="102" /> +<hkern u1="." u2="G" k="102" /> +<hkern u1="." u2="C" k="102" /> +<hkern u1="A" u2="”" k="143" /> +<hkern u1="A" u2="’" k="143" /> +<hkern u1="A" u2="Ÿ" k="123" /> +<hkern u1="A" u2="Œ" k="41" /> +<hkern u1="A" u2="Ý" k="123" /> +<hkern u1="A" u2="Ø" k="41" /> +<hkern u1="A" u2="Ö" k="41" /> +<hkern u1="A" u2="Õ" k="41" /> +<hkern u1="A" u2="Ô" k="41" /> +<hkern u1="A" u2="Ó" k="41" /> +<hkern u1="A" u2="Ò" k="41" /> +<hkern u1="A" u2="Ç" k="41" /> +<hkern u1="A" u2="Y" k="123" /> +<hkern u1="A" u2="W" k="82" /> +<hkern u1="A" u2="V" k="82" /> +<hkern u1="A" u2="T" k="143" /> +<hkern u1="A" u2="Q" k="41" /> +<hkern u1="A" u2="O" k="41" /> +<hkern u1="A" u2="J" k="-266" /> +<hkern u1="A" u2="G" k="41" /> +<hkern u1="A" u2="C" k="41" /> +<hkern u1="A" u2="'" k="143" /> +<hkern u1="A" u2=""" k="143" /> +<hkern u1="B" u2="„" k="82" /> +<hkern u1="B" u2="‚" k="82" /> +<hkern u1="B" u2="Ÿ" k="20" /> +<hkern u1="B" u2="Ý" k="20" /> +<hkern u1="B" u2="Å" k="41" /> +<hkern u1="B" u2="Ä" k="41" /> +<hkern u1="B" u2="Ã" k="41" /> +<hkern u1="B" u2="Â" k="41" /> +<hkern u1="B" u2="Á" k="41" /> +<hkern u1="B" u2="À" k="41" /> +<hkern u1="B" u2="Z" k="20" /> +<hkern u1="B" u2="Y" k="20" /> +<hkern u1="B" u2="X" k="41" /> +<hkern u1="B" u2="W" k="20" /> +<hkern u1="B" u2="V" k="20" /> +<hkern u1="B" u2="T" k="61" /> +<hkern u1="B" u2="A" k="41" /> +<hkern u1="B" u2="." k="82" /> +<hkern u1="B" u2="," k="82" /> +<hkern u1="C" u2="Œ" k="41" /> +<hkern u1="C" u2="Ø" k="41" /> +<hkern u1="C" u2="Ö" k="41" /> +<hkern u1="C" u2="Õ" k="41" /> +<hkern u1="C" u2="Ô" k="41" /> +<hkern u1="C" u2="Ó" k="41" /> +<hkern u1="C" u2="Ò" k="41" /> +<hkern u1="C" u2="Ç" k="41" /> +<hkern u1="C" u2="Q" k="41" /> +<hkern u1="C" u2="O" k="41" /> +<hkern u1="C" u2="G" k="41" /> +<hkern u1="C" u2="C" k="41" /> +<hkern u1="D" u2="„" k="82" /> +<hkern u1="D" u2="‚" k="82" /> +<hkern u1="D" u2="Ÿ" k="20" /> +<hkern u1="D" u2="Ý" k="20" /> +<hkern u1="D" u2="Å" k="41" /> +<hkern u1="D" u2="Ä" k="41" /> +<hkern u1="D" u2="Ã" k="41" /> +<hkern u1="D" u2="Â" k="41" /> +<hkern u1="D" u2="Á" k="41" /> +<hkern u1="D" u2="À" k="41" /> +<hkern u1="D" u2="Z" k="20" /> +<hkern u1="D" u2="Y" k="20" /> +<hkern u1="D" u2="X" k="41" /> +<hkern u1="D" u2="W" k="20" /> +<hkern u1="D" u2="V" k="20" /> +<hkern u1="D" u2="T" k="61" /> +<hkern u1="D" u2="A" k="41" /> +<hkern u1="D" u2="." k="82" /> +<hkern u1="D" u2="," k="82" /> +<hkern u1="E" u2="J" k="-123" /> +<hkern u1="F" u2="„" k="123" /> +<hkern u1="F" u2="‚" k="123" /> +<hkern u1="F" u2="Å" k="41" /> +<hkern u1="F" u2="Ä" k="41" /> +<hkern u1="F" u2="Ã" k="41" /> +<hkern u1="F" u2="Â" k="41" /> +<hkern u1="F" u2="Á" k="41" /> +<hkern u1="F" u2="À" k="41" /> +<hkern u1="F" u2="A" k="41" /> +<hkern u1="F" u2="?" k="-41" /> +<hkern u1="F" u2="." k="123" /> +<hkern u1="F" u2="," k="123" /> +<hkern u1="K" u2="Œ" k="41" /> +<hkern u1="K" u2="Ø" k="41" /> +<hkern u1="K" u2="Ö" k="41" /> +<hkern u1="K" u2="Õ" k="41" /> +<hkern u1="K" u2="Ô" k="41" /> +<hkern u1="K" u2="Ó" k="41" /> +<hkern u1="K" u2="Ò" k="41" /> +<hkern u1="K" u2="Ç" k="41" /> +<hkern u1="K" u2="Q" k="41" /> +<hkern u1="K" u2="O" k="41" /> +<hkern u1="K" u2="G" k="41" /> +<hkern u1="K" u2="C" k="41" /> +<hkern u1="L" u2="”" k="164" /> +<hkern u1="L" u2="’" k="164" /> +<hkern u1="L" u2="Ÿ" k="61" /> +<hkern u1="L" u2="Œ" k="41" /> +<hkern u1="L" u2="Ý" k="61" /> +<hkern u1="L" u2="Ü" k="20" /> +<hkern u1="L" u2="Û" k="20" /> +<hkern u1="L" u2="Ú" k="20" /> +<hkern u1="L" u2="Ù" k="20" /> +<hkern u1="L" u2="Ø" k="41" /> +<hkern u1="L" u2="Ö" k="41" /> +<hkern u1="L" u2="Õ" k="41" /> +<hkern u1="L" u2="Ô" k="41" /> +<hkern u1="L" u2="Ó" k="41" /> +<hkern u1="L" u2="Ò" k="41" /> +<hkern u1="L" u2="Ç" k="41" /> +<hkern u1="L" u2="Y" k="61" /> +<hkern u1="L" u2="W" k="41" /> +<hkern u1="L" u2="V" k="41" /> +<hkern u1="L" u2="U" k="20" /> +<hkern u1="L" u2="T" k="41" /> +<hkern u1="L" u2="Q" k="41" /> +<hkern u1="L" u2="O" k="41" /> +<hkern u1="L" u2="G" k="41" /> +<hkern u1="L" u2="C" k="41" /> +<hkern u1="L" u2="'" k="164" /> +<hkern u1="L" u2=""" k="164" /> +<hkern u1="O" u2="„" k="82" /> +<hkern u1="O" u2="‚" k="82" /> +<hkern u1="O" u2="Ÿ" k="20" /> +<hkern u1="O" u2="Ý" k="20" /> +<hkern u1="O" u2="Å" k="41" /> +<hkern u1="O" u2="Ä" k="41" /> +<hkern u1="O" u2="Ã" k="41" /> +<hkern u1="O" u2="Â" k="41" /> +<hkern u1="O" u2="Á" k="41" /> +<hkern u1="O" u2="À" k="41" /> +<hkern u1="O" u2="Z" k="20" /> +<hkern u1="O" u2="Y" k="20" /> +<hkern u1="O" u2="X" k="41" /> +<hkern u1="O" u2="W" k="20" /> +<hkern u1="O" u2="V" k="20" /> +<hkern u1="O" u2="T" k="61" /> +<hkern u1="O" u2="A" k="41" /> +<hkern u1="O" u2="." k="82" /> +<hkern u1="O" u2="," k="82" /> +<hkern u1="P" u2="„" k="266" /> +<hkern u1="P" u2="‚" k="266" /> +<hkern u1="P" u2="Å" k="102" /> +<hkern u1="P" u2="Ä" k="102" /> +<hkern u1="P" u2="Ã" k="102" /> +<hkern u1="P" u2="Â" k="102" /> +<hkern u1="P" u2="Á" k="102" /> +<hkern u1="P" u2="À" k="102" /> +<hkern u1="P" u2="Z" k="20" /> +<hkern u1="P" u2="X" k="41" /> +<hkern u1="P" u2="A" k="102" /> +<hkern u1="P" u2="." k="266" /> +<hkern u1="P" u2="," k="266" /> +<hkern u1="Q" u2="„" k="82" /> +<hkern u1="Q" u2="‚" k="82" /> +<hkern u1="Q" u2="Ÿ" k="20" /> +<hkern u1="Q" u2="Ý" k="20" /> +<hkern u1="Q" u2="Å" k="41" /> +<hkern u1="Q" u2="Ä" k="41" /> +<hkern u1="Q" u2="Ã" k="41" /> +<hkern u1="Q" u2="Â" k="41" /> +<hkern u1="Q" u2="Á" k="41" /> +<hkern u1="Q" u2="À" k="41" /> +<hkern u1="Q" u2="Z" k="20" /> +<hkern u1="Q" u2="Y" k="20" /> +<hkern u1="Q" u2="X" k="41" /> +<hkern u1="Q" u2="W" k="20" /> +<hkern u1="Q" u2="V" k="20" /> +<hkern u1="Q" u2="T" k="61" /> +<hkern u1="Q" u2="A" k="41" /> +<hkern u1="Q" u2="." k="82" /> +<hkern u1="Q" u2="," k="82" /> +<hkern u1="T" u2="„" k="123" /> +<hkern u1="T" u2="‚" k="123" /> +<hkern u1="T" u2="—" k="82" /> +<hkern u1="T" u2="–" k="82" /> +<hkern u1="T" u2="œ" k="143" /> +<hkern u1="T" u2="Œ" k="41" /> +<hkern u1="T" u2="ý" k="41" /> +<hkern u1="T" u2="ü" k="102" /> +<hkern u1="T" u2="û" k="102" /> +<hkern u1="T" u2="ú" k="102" /> +<hkern u1="T" u2="ù" k="102" /> +<hkern u1="T" u2="ø" k="143" /> +<hkern u1="T" u2="ö" k="143" /> +<hkern u1="T" u2="õ" k="143" /> +<hkern u1="T" u2="ô" k="143" /> +<hkern u1="T" u2="ó" k="143" /> +<hkern u1="T" u2="ò" k="143" /> +<hkern u1="T" u2="ë" k="143" /> +<hkern u1="T" u2="ê" k="143" /> +<hkern u1="T" u2="é" k="143" /> +<hkern u1="T" u2="è" k="143" /> +<hkern u1="T" u2="ç" k="143" /> +<hkern u1="T" u2="æ" k="164" /> +<hkern u1="T" u2="å" k="164" /> +<hkern u1="T" u2="ä" k="164" /> +<hkern u1="T" u2="ã" k="164" /> +<hkern u1="T" u2="â" k="164" /> +<hkern u1="T" u2="á" k="164" /> +<hkern u1="T" u2="à" k="143" /> +<hkern u1="T" u2="Ø" k="41" /> +<hkern u1="T" u2="Ö" k="41" /> +<hkern u1="T" u2="Õ" k="41" /> +<hkern u1="T" u2="Ô" k="41" /> +<hkern u1="T" u2="Ó" k="41" /> +<hkern u1="T" u2="Ò" k="41" /> +<hkern u1="T" u2="Ç" k="41" /> +<hkern u1="T" u2="Å" k="143" /> +<hkern u1="T" u2="Ä" k="143" /> +<hkern u1="T" u2="Ã" k="143" /> +<hkern u1="T" u2="Â" k="143" /> +<hkern u1="T" u2="Á" k="143" /> +<hkern u1="T" u2="À" k="143" /> +<hkern u1="T" u2="z" k="82" /> +<hkern u1="T" u2="y" k="41" /> +<hkern u1="T" u2="x" k="41" /> +<hkern u1="T" u2="w" k="41" /> +<hkern u1="T" u2="v" k="41" /> +<hkern u1="T" u2="u" k="102" /> +<hkern u1="T" u2="s" k="123" /> +<hkern u1="T" u2="r" k="102" /> +<hkern u1="T" u2="q" k="143" /> +<hkern u1="T" u2="p" k="102" /> +<hkern u1="T" u2="o" k="143" /> +<hkern u1="T" u2="n" k="102" /> +<hkern u1="T" u2="m" k="102" /> +<hkern u1="T" u2="g" k="143" /> +<hkern u1="T" u2="e" k="143" /> +<hkern u1="T" u2="d" k="143" /> +<hkern u1="T" u2="c" k="143" /> +<hkern u1="T" u2="a" k="164" /> +<hkern u1="T" u2="T" k="-41" /> +<hkern u1="T" u2="Q" k="41" /> +<hkern u1="T" u2="O" k="41" /> +<hkern u1="T" u2="G" k="41" /> +<hkern u1="T" u2="C" k="41" /> +<hkern u1="T" u2="A" k="143" /> +<hkern u1="T" u2="?" k="-41" /> +<hkern u1="T" u2="." k="123" /> +<hkern u1="T" u2="-" k="82" /> +<hkern u1="T" u2="," k="123" /> +<hkern u1="U" u2="„" k="41" /> +<hkern u1="U" u2="‚" k="41" /> +<hkern u1="U" u2="Å" k="20" /> +<hkern u1="U" u2="Ä" k="20" /> +<hkern u1="U" u2="Ã" k="20" /> +<hkern u1="U" u2="Â" k="20" /> +<hkern u1="U" u2="Á" k="20" /> +<hkern u1="U" u2="À" k="20" /> +<hkern u1="U" u2="A" k="20" /> +<hkern u1="U" u2="." k="41" /> +<hkern u1="U" u2="," k="41" /> +<hkern u1="V" u2="„" k="102" /> +<hkern u1="V" u2="‚" k="102" /> +<hkern u1="V" u2="œ" k="41" /> +<hkern u1="V" u2="Œ" k="20" /> +<hkern u1="V" u2="ü" k="20" /> +<hkern u1="V" u2="û" k="20" /> +<hkern u1="V" u2="ú" k="20" /> +<hkern u1="V" u2="ù" k="20" /> +<hkern u1="V" u2="ø" k="41" /> +<hkern u1="V" u2="ö" k="41" /> +<hkern u1="V" u2="õ" k="41" /> +<hkern u1="V" u2="ô" k="41" /> +<hkern u1="V" u2="ó" k="41" /> +<hkern u1="V" u2="ò" k="41" /> +<hkern u1="V" u2="ë" k="41" /> +<hkern u1="V" u2="ê" k="41" /> +<hkern u1="V" u2="é" k="41" /> +<hkern u1="V" u2="è" k="41" /> +<hkern u1="V" u2="ç" k="41" /> +<hkern u1="V" u2="æ" k="41" /> +<hkern u1="V" u2="å" k="41" /> +<hkern u1="V" u2="ä" k="41" /> +<hkern u1="V" u2="ã" k="41" /> +<hkern u1="V" u2="â" k="41" /> +<hkern u1="V" u2="á" k="41" /> +<hkern u1="V" u2="à" k="41" /> +<hkern u1="V" u2="Ø" k="20" /> +<hkern u1="V" u2="Ö" k="20" /> +<hkern u1="V" u2="Õ" k="20" /> +<hkern u1="V" u2="Ô" k="20" /> +<hkern u1="V" u2="Ó" k="20" /> +<hkern u1="V" u2="Ò" k="20" /> +<hkern u1="V" u2="Ç" k="20" /> +<hkern u1="V" u2="Å" k="82" /> +<hkern u1="V" u2="Ä" k="82" /> +<hkern u1="V" u2="Ã" k="82" /> +<hkern u1="V" u2="Â" k="82" /> +<hkern u1="V" u2="Á" k="82" /> +<hkern u1="V" u2="À" k="82" /> +<hkern u1="V" u2="u" k="20" /> +<hkern u1="V" u2="s" k="20" /> +<hkern u1="V" u2="r" k="20" /> +<hkern u1="V" u2="q" k="41" /> +<hkern u1="V" u2="p" k="20" /> +<hkern u1="V" u2="o" k="41" /> +<hkern u1="V" u2="n" k="20" /> +<hkern u1="V" u2="m" k="20" /> +<hkern u1="V" u2="g" k="20" /> +<hkern u1="V" u2="e" k="41" /> +<hkern u1="V" u2="d" k="41" /> +<hkern u1="V" u2="c" k="41" /> +<hkern u1="V" u2="a" k="41" /> +<hkern u1="V" u2="Q" k="20" /> +<hkern u1="V" u2="O" k="20" /> +<hkern u1="V" u2="G" k="20" /> +<hkern u1="V" u2="C" k="20" /> +<hkern u1="V" u2="A" k="82" /> +<hkern u1="V" u2="?" k="-41" /> +<hkern u1="V" u2="." k="102" /> +<hkern u1="V" u2="," k="102" /> +<hkern u1="W" u2="„" k="102" /> +<hkern u1="W" u2="‚" k="102" /> +<hkern u1="W" u2="œ" k="41" /> +<hkern u1="W" u2="Œ" k="20" /> +<hkern u1="W" u2="ü" k="20" /> +<hkern u1="W" u2="û" k="20" /> +<hkern u1="W" u2="ú" k="20" /> +<hkern u1="W" u2="ù" k="20" /> +<hkern u1="W" u2="ø" k="41" /> +<hkern u1="W" u2="ö" k="41" /> +<hkern u1="W" u2="õ" k="41" /> +<hkern u1="W" u2="ô" k="41" /> +<hkern u1="W" u2="ó" k="41" /> +<hkern u1="W" u2="ò" k="41" /> +<hkern u1="W" u2="ë" k="41" /> +<hkern u1="W" u2="ê" k="41" /> +<hkern u1="W" u2="é" k="41" /> +<hkern u1="W" u2="è" k="41" /> +<hkern u1="W" u2="ç" k="41" /> +<hkern u1="W" u2="æ" k="41" /> +<hkern u1="W" u2="å" k="41" /> +<hkern u1="W" u2="ä" k="41" /> +<hkern u1="W" u2="ã" k="41" /> +<hkern u1="W" u2="â" k="41" /> +<hkern u1="W" u2="á" k="41" /> +<hkern u1="W" u2="à" k="41" /> +<hkern u1="W" u2="Ø" k="20" /> +<hkern u1="W" u2="Ö" k="20" /> +<hkern u1="W" u2="Õ" k="20" /> +<hkern u1="W" u2="Ô" k="20" /> +<hkern u1="W" u2="Ó" k="20" /> +<hkern u1="W" u2="Ò" k="20" /> +<hkern u1="W" u2="Ç" k="20" /> +<hkern u1="W" u2="Å" k="82" /> +<hkern u1="W" u2="Ä" k="82" /> +<hkern u1="W" u2="Ã" k="82" /> +<hkern u1="W" u2="Â" k="82" /> +<hkern u1="W" u2="Á" k="82" /> +<hkern u1="W" u2="À" k="82" /> +<hkern u1="W" u2="u" k="20" /> +<hkern u1="W" u2="s" k="20" /> +<hkern u1="W" u2="r" k="20" /> +<hkern u1="W" u2="q" k="41" /> +<hkern u1="W" u2="p" k="20" /> +<hkern u1="W" u2="o" k="41" /> +<hkern u1="W" u2="n" k="20" /> +<hkern u1="W" u2="m" k="20" /> +<hkern u1="W" u2="g" k="20" /> +<hkern u1="W" u2="e" k="41" /> +<hkern u1="W" u2="d" k="41" /> +<hkern u1="W" u2="c" k="41" /> +<hkern u1="W" u2="a" k="41" /> +<hkern u1="W" u2="Q" k="20" /> +<hkern u1="W" u2="O" k="20" /> +<hkern u1="W" u2="G" k="20" /> +<hkern u1="W" u2="C" k="20" /> +<hkern u1="W" u2="A" k="82" /> +<hkern u1="W" u2="?" k="-41" /> +<hkern u1="W" u2="." k="102" /> +<hkern u1="W" u2="," k="102" /> +<hkern u1="X" u2="Œ" k="41" /> +<hkern u1="X" u2="Ø" k="41" /> +<hkern u1="X" u2="Ö" k="41" /> +<hkern u1="X" u2="Õ" k="41" /> +<hkern u1="X" u2="Ô" k="41" /> +<hkern u1="X" u2="Ó" k="41" /> +<hkern u1="X" u2="Ò" k="41" /> +<hkern u1="X" u2="Ç" k="41" /> +<hkern u1="X" u2="Q" k="41" /> +<hkern u1="X" u2="O" k="41" /> +<hkern u1="X" u2="G" k="41" /> +<hkern u1="X" u2="C" k="41" /> +<hkern u1="Y" u2="„" k="123" /> +<hkern u1="Y" u2="‚" k="123" /> +<hkern u1="Y" u2="œ" k="102" /> +<hkern u1="Y" u2="Œ" k="41" /> +<hkern u1="Y" u2="ü" k="61" /> +<hkern u1="Y" u2="û" k="61" /> +<hkern u1="Y" u2="ú" k="61" /> +<hkern u1="Y" u2="ù" k="61" /> +<hkern u1="Y" u2="ø" k="102" /> +<hkern u1="Y" u2="ö" k="102" /> +<hkern u1="Y" u2="õ" k="102" /> +<hkern u1="Y" u2="ô" k="102" /> +<hkern u1="Y" u2="ó" k="102" /> +<hkern u1="Y" u2="ò" k="102" /> +<hkern u1="Y" u2="ë" k="102" /> +<hkern u1="Y" u2="ê" k="102" /> +<hkern u1="Y" u2="é" k="102" /> +<hkern u1="Y" u2="è" k="102" /> +<hkern u1="Y" u2="ç" k="102" /> +<hkern u1="Y" u2="æ" k="102" /> +<hkern u1="Y" u2="å" k="102" /> +<hkern u1="Y" u2="ä" k="102" /> +<hkern u1="Y" u2="ã" k="102" /> +<hkern u1="Y" u2="â" k="102" /> +<hkern u1="Y" u2="á" k="102" /> +<hkern u1="Y" u2="à" k="102" /> +<hkern u1="Y" u2="Ø" k="41" /> +<hkern u1="Y" u2="Ö" k="41" /> +<hkern u1="Y" u2="Õ" k="41" /> +<hkern u1="Y" u2="Ô" k="41" /> +<hkern u1="Y" u2="Ó" k="41" /> +<hkern u1="Y" u2="Ò" k="41" /> +<hkern u1="Y" u2="Ç" k="41" /> +<hkern u1="Y" u2="Å" k="123" /> +<hkern u1="Y" u2="Ä" k="123" /> +<hkern u1="Y" u2="Ã" k="123" /> +<hkern u1="Y" u2="Â" k="123" /> +<hkern u1="Y" u2="Á" k="123" /> +<hkern u1="Y" u2="À" k="123" /> +<hkern u1="Y" u2="z" k="41" /> +<hkern u1="Y" u2="u" k="61" /> +<hkern u1="Y" u2="s" k="82" /> +<hkern u1="Y" u2="r" k="61" /> +<hkern u1="Y" u2="q" k="102" /> +<hkern u1="Y" u2="p" k="61" /> +<hkern u1="Y" u2="o" k="102" /> +<hkern u1="Y" u2="n" k="61" /> +<hkern u1="Y" u2="m" k="61" /> +<hkern u1="Y" u2="g" k="41" /> +<hkern u1="Y" u2="e" k="102" /> +<hkern u1="Y" u2="d" k="102" /> +<hkern u1="Y" u2="c" k="102" /> +<hkern u1="Y" u2="a" k="102" /> +<hkern u1="Y" u2="Q" k="41" /> +<hkern u1="Y" u2="O" k="41" /> +<hkern u1="Y" u2="G" k="41" /> +<hkern u1="Y" u2="C" k="41" /> +<hkern u1="Y" u2="A" k="123" /> +<hkern u1="Y" u2="?" k="-41" /> +<hkern u1="Y" u2="." k="123" /> +<hkern u1="Y" u2="," k="123" /> +<hkern u1="Z" u2="Œ" k="20" /> +<hkern u1="Z" u2="Ø" k="20" /> +<hkern u1="Z" u2="Ö" k="20" /> +<hkern u1="Z" u2="Õ" k="20" /> +<hkern u1="Z" u2="Ô" k="20" /> +<hkern u1="Z" u2="Ó" k="20" /> +<hkern u1="Z" u2="Ò" k="20" /> +<hkern u1="Z" u2="Ç" k="20" /> +<hkern u1="Z" u2="Q" k="20" /> +<hkern u1="Z" u2="O" k="20" /> +<hkern u1="Z" u2="G" k="20" /> +<hkern u1="Z" u2="C" k="20" /> +<hkern u1="[" u2="J" k="-184" /> +<hkern u1="a" u2="”" k="20" /> +<hkern u1="a" u2="’" k="20" /> +<hkern u1="a" u2="'" k="20" /> +<hkern u1="a" u2=""" k="20" /> +<hkern u1="b" u2="”" k="20" /> +<hkern u1="b" u2="’" k="20" /> +<hkern u1="b" u2="ý" k="41" /> +<hkern u1="b" u2="z" k="20" /> +<hkern u1="b" u2="y" k="41" /> +<hkern u1="b" u2="x" k="41" /> +<hkern u1="b" u2="w" k="41" /> +<hkern u1="b" u2="v" k="41" /> +<hkern u1="b" u2="'" k="20" /> +<hkern u1="b" u2=""" k="20" /> +<hkern u1="c" u2="”" k="-41" /> +<hkern u1="c" u2="’" k="-41" /> +<hkern u1="c" u2="'" k="-41" /> +<hkern u1="c" u2=""" k="-41" /> +<hkern u1="e" u2="”" k="20" /> +<hkern u1="e" u2="’" k="20" /> +<hkern u1="e" u2="ý" k="41" /> +<hkern u1="e" u2="z" k="20" /> +<hkern u1="e" u2="y" k="41" /> +<hkern u1="e" u2="x" k="41" /> +<hkern u1="e" u2="w" k="41" /> +<hkern u1="e" u2="v" k="41" /> +<hkern u1="e" u2="'" k="20" /> +<hkern u1="e" u2=""" k="20" /> +<hkern u1="f" u2="”" k="-123" /> +<hkern u1="f" u2="’" k="-123" /> +<hkern u1="f" u2="'" k="-123" /> +<hkern u1="f" u2=""" k="-123" /> +<hkern u1="h" u2="”" k="20" /> +<hkern u1="h" u2="’" k="20" /> +<hkern u1="h" u2="'" k="20" /> +<hkern u1="h" u2=""" k="20" /> +<hkern u1="k" u2="œ" k="41" /> +<hkern u1="k" u2="ø" k="41" /> +<hkern u1="k" u2="ö" k="41" /> +<hkern u1="k" u2="õ" k="41" /> +<hkern u1="k" u2="ô" k="41" /> +<hkern u1="k" u2="ó" k="41" /> +<hkern u1="k" u2="ò" k="41" /> +<hkern u1="k" u2="ë" k="41" /> +<hkern u1="k" u2="ê" k="41" /> +<hkern u1="k" u2="é" k="41" /> +<hkern u1="k" u2="è" k="41" /> +<hkern u1="k" u2="ç" k="41" /> +<hkern u1="k" u2="à" k="41" /> +<hkern u1="k" u2="q" k="41" /> +<hkern u1="k" u2="o" k="41" /> +<hkern u1="k" u2="e" k="41" /> +<hkern u1="k" u2="d" k="41" /> +<hkern u1="k" u2="c" k="41" /> +<hkern u1="m" u2="”" k="20" /> +<hkern u1="m" u2="’" k="20" /> +<hkern u1="m" u2="'" k="20" /> +<hkern u1="m" u2=""" k="20" /> +<hkern u1="n" u2="”" k="20" /> +<hkern u1="n" u2="’" k="20" /> +<hkern u1="n" u2="'" k="20" /> +<hkern u1="n" u2=""" k="20" /> +<hkern u1="o" u2="”" k="20" /> +<hkern u1="o" u2="’" k="20" /> +<hkern u1="o" u2="ý" k="41" /> +<hkern u1="o" u2="z" k="20" /> +<hkern u1="o" u2="y" k="41" /> +<hkern u1="o" u2="x" k="41" /> +<hkern u1="o" u2="w" k="41" /> +<hkern u1="o" u2="v" k="41" /> +<hkern u1="o" u2="'" k="20" /> +<hkern u1="o" u2=""" k="20" /> +<hkern u1="p" u2="”" k="20" /> +<hkern u1="p" u2="’" k="20" /> +<hkern u1="p" u2="ý" k="41" /> +<hkern u1="p" u2="z" k="20" /> +<hkern u1="p" u2="y" k="41" /> +<hkern u1="p" u2="x" k="41" /> +<hkern u1="p" u2="w" k="41" /> +<hkern u1="p" u2="v" k="41" /> +<hkern u1="p" u2="'" k="20" /> +<hkern u1="p" u2=""" k="20" /> +<hkern u1="r" u2="”" k="-82" /> +<hkern u1="r" u2="’" k="-82" /> +<hkern u1="r" u2="œ" k="41" /> +<hkern u1="r" u2="ø" k="41" /> +<hkern u1="r" u2="ö" k="41" /> +<hkern u1="r" u2="õ" k="41" /> +<hkern u1="r" u2="ô" k="41" /> +<hkern u1="r" u2="ó" k="41" /> +<hkern u1="r" u2="ò" k="41" /> +<hkern u1="r" u2="ë" k="41" /> +<hkern u1="r" u2="ê" k="41" /> +<hkern u1="r" u2="é" k="41" /> +<hkern u1="r" u2="è" k="41" /> +<hkern u1="r" u2="ç" k="41" /> +<hkern u1="r" u2="æ" k="41" /> +<hkern u1="r" u2="å" k="41" /> +<hkern u1="r" u2="ä" k="41" /> +<hkern u1="r" u2="ã" k="41" /> +<hkern u1="r" u2="â" k="41" /> +<hkern u1="r" u2="á" k="41" /> +<hkern u1="r" u2="à" k="41" /> +<hkern u1="r" u2="q" k="41" /> +<hkern u1="r" u2="o" k="41" /> +<hkern u1="r" u2="g" k="20" /> +<hkern u1="r" u2="e" k="41" /> +<hkern u1="r" u2="d" k="41" /> +<hkern u1="r" u2="c" k="41" /> +<hkern u1="r" u2="a" k="41" /> +<hkern u1="r" u2="'" k="-82" /> +<hkern u1="r" u2=""" k="-82" /> +<hkern u1="t" u2="”" k="-41" /> +<hkern u1="t" u2="’" k="-41" /> +<hkern u1="t" u2="'" k="-41" /> +<hkern u1="t" u2=""" k="-41" /> +<hkern u1="v" u2="„" k="82" /> +<hkern u1="v" u2="”" k="-82" /> +<hkern u1="v" u2="‚" k="82" /> +<hkern u1="v" u2="’" k="-82" /> +<hkern u1="v" u2="?" k="-41" /> +<hkern u1="v" u2="." k="82" /> +<hkern u1="v" u2="," k="82" /> +<hkern u1="v" u2="'" k="-82" /> +<hkern u1="v" u2=""" k="-82" /> +<hkern u1="w" u2="„" k="82" /> +<hkern u1="w" u2="”" k="-82" /> +<hkern u1="w" u2="‚" k="82" /> +<hkern u1="w" u2="’" k="-82" /> +<hkern u1="w" u2="?" k="-41" /> +<hkern u1="w" u2="." k="82" /> +<hkern u1="w" u2="," k="82" /> +<hkern u1="w" u2="'" k="-82" /> +<hkern u1="w" u2=""" k="-82" /> +<hkern u1="x" u2="œ" k="41" /> +<hkern u1="x" u2="ø" k="41" /> +<hkern u1="x" u2="ö" k="41" /> +<hkern u1="x" u2="õ" k="41" /> +<hkern u1="x" u2="ô" k="41" /> +<hkern u1="x" u2="ó" k="41" /> +<hkern u1="x" u2="ò" k="41" /> +<hkern u1="x" u2="ë" k="41" /> +<hkern u1="x" u2="ê" k="41" /> +<hkern u1="x" u2="é" k="41" /> +<hkern u1="x" u2="è" k="41" /> +<hkern u1="x" u2="ç" k="41" /> +<hkern u1="x" u2="à" k="41" /> +<hkern u1="x" u2="q" k="41" /> +<hkern u1="x" u2="o" k="41" /> +<hkern u1="x" u2="e" k="41" /> +<hkern u1="x" u2="d" k="41" /> +<hkern u1="x" u2="c" k="41" /> +<hkern u1="y" u2="„" k="82" /> +<hkern u1="y" u2="”" k="-82" /> +<hkern u1="y" u2="‚" k="82" /> +<hkern u1="y" u2="’" k="-82" /> +<hkern u1="y" u2="?" k="-41" /> +<hkern u1="y" u2="." k="82" /> +<hkern u1="y" u2="," k="82" /> +<hkern u1="y" u2="'" k="-82" /> +<hkern u1="y" u2=""" k="-82" /> +<hkern u1="{" u2="J" k="-184" /> +<hkern u1="À" u2="”" k="143" /> +<hkern u1="À" u2="’" k="143" /> +<hkern u1="À" u2="Ÿ" k="123" /> +<hkern u1="À" u2="Œ" k="41" /> +<hkern u1="À" u2="Ý" k="123" /> +<hkern u1="À" u2="Ø" k="41" /> +<hkern u1="À" u2="Ö" k="41" /> +<hkern u1="À" u2="Õ" k="41" /> +<hkern u1="À" u2="Ô" k="41" /> +<hkern u1="À" u2="Ó" k="41" /> +<hkern u1="À" u2="Ò" k="41" /> +<hkern u1="À" u2="Ç" k="41" /> +<hkern u1="À" u2="Y" k="123" /> +<hkern u1="À" u2="W" k="82" /> +<hkern u1="À" u2="V" k="82" /> +<hkern u1="À" u2="T" k="143" /> +<hkern u1="À" u2="Q" k="41" /> +<hkern u1="À" u2="O" k="41" /> +<hkern u1="À" u2="J" k="-266" /> +<hkern u1="À" u2="G" k="41" /> +<hkern u1="À" u2="C" k="41" /> +<hkern u1="À" u2="'" k="143" /> +<hkern u1="À" u2=""" k="143" /> +<hkern u1="Á" u2="”" k="143" /> +<hkern u1="Á" u2="’" k="143" /> +<hkern u1="Á" u2="Ÿ" k="123" /> +<hkern u1="Á" u2="Œ" k="41" /> +<hkern u1="Á" u2="Ý" k="123" /> +<hkern u1="Á" u2="Ø" k="41" /> +<hkern u1="Á" u2="Ö" k="41" /> +<hkern u1="Á" u2="Õ" k="41" /> +<hkern u1="Á" u2="Ô" k="41" /> +<hkern u1="Á" u2="Ó" k="41" /> +<hkern u1="Á" u2="Ò" k="41" /> +<hkern u1="Á" u2="Ç" k="41" /> +<hkern u1="Á" u2="Y" k="123" /> +<hkern u1="Á" u2="W" k="82" /> +<hkern u1="Á" u2="V" k="82" /> +<hkern u1="Á" u2="T" k="143" /> +<hkern u1="Á" u2="Q" k="41" /> +<hkern u1="Á" u2="O" k="41" /> +<hkern u1="Á" u2="J" k="-266" /> +<hkern u1="Á" u2="G" k="41" /> +<hkern u1="Á" u2="C" k="41" /> +<hkern u1="Á" u2="'" k="143" /> +<hkern u1="Á" u2=""" k="143" /> +<hkern u1="Â" u2="”" k="143" /> +<hkern u1="Â" u2="’" k="143" /> +<hkern u1="Â" u2="Ÿ" k="123" /> +<hkern u1="Â" u2="Œ" k="41" /> +<hkern u1="Â" u2="Ý" k="123" /> +<hkern u1="Â" u2="Ø" k="41" /> +<hkern u1="Â" u2="Ö" k="41" /> +<hkern u1="Â" u2="Õ" k="41" /> +<hkern u1="Â" u2="Ô" k="41" /> +<hkern u1="Â" u2="Ó" k="41" /> +<hkern u1="Â" u2="Ò" k="41" /> +<hkern u1="Â" u2="Ç" k="41" /> +<hkern u1="Â" u2="Y" k="123" /> +<hkern u1="Â" u2="W" k="82" /> +<hkern u1="Â" u2="V" k="82" /> +<hkern u1="Â" u2="T" k="143" /> +<hkern u1="Â" u2="Q" k="41" /> +<hkern u1="Â" u2="O" k="41" /> +<hkern u1="Â" u2="J" k="-266" /> +<hkern u1="Â" u2="G" k="41" /> +<hkern u1="Â" u2="C" k="41" /> +<hkern u1="Â" u2="'" k="143" /> +<hkern u1="Â" u2=""" k="143" /> +<hkern u1="Ã" u2="”" k="143" /> +<hkern u1="Ã" u2="’" k="143" /> +<hkern u1="Ã" u2="Ÿ" k="123" /> +<hkern u1="Ã" u2="Œ" k="41" /> +<hkern u1="Ã" u2="Ý" k="123" /> +<hkern u1="Ã" u2="Ø" k="41" /> +<hkern u1="Ã" u2="Ö" k="41" /> +<hkern u1="Ã" u2="Õ" k="41" /> +<hkern u1="Ã" u2="Ô" k="41" /> +<hkern u1="Ã" u2="Ó" k="41" /> +<hkern u1="Ã" u2="Ò" k="41" /> +<hkern u1="Ã" u2="Ç" k="41" /> +<hkern u1="Ã" u2="Y" k="123" /> +<hkern u1="Ã" u2="W" k="82" /> +<hkern u1="Ã" u2="V" k="82" /> +<hkern u1="Ã" u2="T" k="143" /> +<hkern u1="Ã" u2="Q" k="41" /> +<hkern u1="Ã" u2="O" k="41" /> +<hkern u1="Ã" u2="J" k="-266" /> +<hkern u1="Ã" u2="G" k="41" /> +<hkern u1="Ã" u2="C" k="41" /> +<hkern u1="Ã" u2="'" k="143" /> +<hkern u1="Ã" u2=""" k="143" /> +<hkern u1="Ä" u2="”" k="143" /> +<hkern u1="Ä" u2="’" k="143" /> +<hkern u1="Ä" u2="Ÿ" k="123" /> +<hkern u1="Ä" u2="Œ" k="41" /> +<hkern u1="Ä" u2="Ý" k="123" /> +<hkern u1="Ä" u2="Ø" k="41" /> +<hkern u1="Ä" u2="Ö" k="41" /> +<hkern u1="Ä" u2="Õ" k="41" /> +<hkern u1="Ä" u2="Ô" k="41" /> +<hkern u1="Ä" u2="Ó" k="41" /> +<hkern u1="Ä" u2="Ò" k="41" /> +<hkern u1="Ä" u2="Ç" k="41" /> +<hkern u1="Ä" u2="Y" k="123" /> +<hkern u1="Ä" u2="W" k="82" /> +<hkern u1="Ä" u2="V" k="82" /> +<hkern u1="Ä" u2="T" k="143" /> +<hkern u1="Ä" u2="Q" k="41" /> +<hkern u1="Ä" u2="O" k="41" /> +<hkern u1="Ä" u2="J" k="-266" /> +<hkern u1="Ä" u2="G" k="41" /> +<hkern u1="Ä" u2="C" k="41" /> +<hkern u1="Ä" u2="'" k="143" /> +<hkern u1="Ä" u2=""" k="143" /> +<hkern u1="Å" u2="”" k="143" /> +<hkern u1="Å" u2="’" k="143" /> +<hkern u1="Å" u2="Ÿ" k="123" /> +<hkern u1="Å" u2="Œ" k="41" /> +<hkern u1="Å" u2="Ý" k="123" /> +<hkern u1="Å" u2="Ø" k="41" /> +<hkern u1="Å" u2="Ö" k="41" /> +<hkern u1="Å" u2="Õ" k="41" /> +<hkern u1="Å" u2="Ô" k="41" /> +<hkern u1="Å" u2="Ó" k="41" /> +<hkern u1="Å" u2="Ò" k="41" /> +<hkern u1="Å" u2="Ç" k="41" /> +<hkern u1="Å" u2="Y" k="123" /> +<hkern u1="Å" u2="W" k="82" /> +<hkern u1="Å" u2="V" k="82" /> +<hkern u1="Å" u2="T" k="143" /> +<hkern u1="Å" u2="Q" k="41" /> +<hkern u1="Å" u2="O" k="41" /> +<hkern u1="Å" u2="J" k="-266" /> +<hkern u1="Å" u2="G" k="41" /> +<hkern u1="Å" u2="C" k="41" /> +<hkern u1="Å" u2="'" k="143" /> +<hkern u1="Å" u2=""" k="143" /> +<hkern u1="Æ" u2="J" k="-123" /> +<hkern u1="Ç" u2="Œ" k="41" /> +<hkern u1="Ç" u2="Ø" k="41" /> +<hkern u1="Ç" u2="Ö" k="41" /> +<hkern u1="Ç" u2="Õ" k="41" /> +<hkern u1="Ç" u2="Ô" k="41" /> +<hkern u1="Ç" u2="Ó" k="41" /> +<hkern u1="Ç" u2="Ò" k="41" /> +<hkern u1="Ç" u2="Ç" k="41" /> +<hkern u1="Ç" u2="Q" k="41" /> +<hkern u1="Ç" u2="O" k="41" /> +<hkern u1="Ç" u2="G" k="41" /> +<hkern u1="Ç" u2="C" k="41" /> +<hkern u1="È" u2="J" k="-123" /> +<hkern u1="É" u2="J" k="-123" /> +<hkern u1="Ê" u2="J" k="-123" /> +<hkern u1="Ë" u2="J" k="-123" /> +<hkern u1="Ð" u2="„" k="82" /> +<hkern u1="Ð" u2="‚" k="82" /> +<hkern u1="Ð" u2="Ÿ" k="20" /> +<hkern u1="Ð" u2="Ý" k="20" /> +<hkern u1="Ð" u2="Å" k="41" /> +<hkern u1="Ð" u2="Ä" k="41" /> +<hkern u1="Ð" u2="Ã" k="41" /> +<hkern u1="Ð" u2="Â" k="41" /> +<hkern u1="Ð" u2="Á" k="41" /> +<hkern u1="Ð" u2="À" k="41" /> +<hkern u1="Ð" u2="Z" k="20" /> +<hkern u1="Ð" u2="Y" k="20" /> +<hkern u1="Ð" u2="X" k="41" /> +<hkern u1="Ð" u2="W" k="20" /> +<hkern u1="Ð" u2="V" k="20" /> +<hkern u1="Ð" u2="T" k="61" /> +<hkern u1="Ð" u2="A" k="41" /> +<hkern u1="Ð" u2="." k="82" /> +<hkern u1="Ð" u2="," k="82" /> +<hkern u1="Ò" u2="„" k="82" /> +<hkern u1="Ò" u2="‚" k="82" /> +<hkern u1="Ò" u2="Ÿ" k="20" /> +<hkern u1="Ò" u2="Ý" k="20" /> +<hkern u1="Ò" u2="Å" k="41" /> +<hkern u1="Ò" u2="Ä" k="41" /> +<hkern u1="Ò" u2="Ã" k="41" /> +<hkern u1="Ò" u2="Â" k="41" /> +<hkern u1="Ò" u2="Á" k="41" /> +<hkern u1="Ò" u2="À" k="41" /> +<hkern u1="Ò" u2="Z" k="20" /> +<hkern u1="Ò" u2="Y" k="20" /> +<hkern u1="Ò" u2="X" k="41" /> +<hkern u1="Ò" u2="W" k="20" /> +<hkern u1="Ò" u2="V" k="20" /> +<hkern u1="Ò" u2="T" k="61" /> +<hkern u1="Ò" u2="A" k="41" /> +<hkern u1="Ò" u2="." k="82" /> +<hkern u1="Ò" u2="," k="82" /> +<hkern u1="Ó" u2="„" k="82" /> +<hkern u1="Ó" u2="‚" k="82" /> +<hkern u1="Ó" u2="Ÿ" k="20" /> +<hkern u1="Ó" u2="Ý" k="20" /> +<hkern u1="Ó" u2="Å" k="41" /> +<hkern u1="Ó" u2="Ä" k="41" /> +<hkern u1="Ó" u2="Ã" k="41" /> +<hkern u1="Ó" u2="Â" k="41" /> +<hkern u1="Ó" u2="Á" k="41" /> +<hkern u1="Ó" u2="À" k="41" /> +<hkern u1="Ó" u2="Z" k="20" /> +<hkern u1="Ó" u2="Y" k="20" /> +<hkern u1="Ó" u2="X" k="41" /> +<hkern u1="Ó" u2="W" k="20" /> +<hkern u1="Ó" u2="V" k="20" /> +<hkern u1="Ó" u2="T" k="61" /> +<hkern u1="Ó" u2="A" k="41" /> +<hkern u1="Ó" u2="." k="82" /> +<hkern u1="Ó" u2="," k="82" /> +<hkern u1="Ô" u2="„" k="82" /> +<hkern u1="Ô" u2="‚" k="82" /> +<hkern u1="Ô" u2="Ÿ" k="20" /> +<hkern u1="Ô" u2="Ý" k="20" /> +<hkern u1="Ô" u2="Å" k="41" /> +<hkern u1="Ô" u2="Ä" k="41" /> +<hkern u1="Ô" u2="Ã" k="41" /> +<hkern u1="Ô" u2="Â" k="41" /> +<hkern u1="Ô" u2="Á" k="41" /> +<hkern u1="Ô" u2="À" k="41" /> +<hkern u1="Ô" u2="Z" k="20" /> +<hkern u1="Ô" u2="Y" k="20" /> +<hkern u1="Ô" u2="X" k="41" /> +<hkern u1="Ô" u2="W" k="20" /> +<hkern u1="Ô" u2="V" k="20" /> +<hkern u1="Ô" u2="T" k="61" /> +<hkern u1="Ô" u2="A" k="41" /> +<hkern u1="Ô" u2="." k="82" /> +<hkern u1="Ô" u2="," k="82" /> +<hkern u1="Õ" u2="„" k="82" /> +<hkern u1="Õ" u2="‚" k="82" /> +<hkern u1="Õ" u2="Ÿ" k="20" /> +<hkern u1="Õ" u2="Ý" k="20" /> +<hkern u1="Õ" u2="Å" k="41" /> +<hkern u1="Õ" u2="Ä" k="41" /> +<hkern u1="Õ" u2="Ã" k="41" /> +<hkern u1="Õ" u2="Â" k="41" /> +<hkern u1="Õ" u2="Á" k="41" /> +<hkern u1="Õ" u2="À" k="41" /> +<hkern u1="Õ" u2="Z" k="20" /> +<hkern u1="Õ" u2="Y" k="20" /> +<hkern u1="Õ" u2="X" k="41" /> +<hkern u1="Õ" u2="W" k="20" /> +<hkern u1="Õ" u2="V" k="20" /> +<hkern u1="Õ" u2="T" k="61" /> +<hkern u1="Õ" u2="A" k="41" /> +<hkern u1="Õ" u2="." k="82" /> +<hkern u1="Õ" u2="," k="82" /> +<hkern u1="Ö" u2="„" k="82" /> +<hkern u1="Ö" u2="‚" k="82" /> +<hkern u1="Ö" u2="Ÿ" k="20" /> +<hkern u1="Ö" u2="Ý" k="20" /> +<hkern u1="Ö" u2="Å" k="41" /> +<hkern u1="Ö" u2="Ä" k="41" /> +<hkern u1="Ö" u2="Ã" k="41" /> +<hkern u1="Ö" u2="Â" k="41" /> +<hkern u1="Ö" u2="Á" k="41" /> +<hkern u1="Ö" u2="À" k="41" /> +<hkern u1="Ö" u2="Z" k="20" /> +<hkern u1="Ö" u2="Y" k="20" /> +<hkern u1="Ö" u2="X" k="41" /> +<hkern u1="Ö" u2="W" k="20" /> +<hkern u1="Ö" u2="V" k="20" /> +<hkern u1="Ö" u2="T" k="61" /> +<hkern u1="Ö" u2="A" k="41" /> +<hkern u1="Ö" u2="." k="82" /> +<hkern u1="Ö" u2="," k="82" /> +<hkern u1="Ø" u2="„" k="82" /> +<hkern u1="Ø" u2="‚" k="82" /> +<hkern u1="Ø" u2="Ÿ" k="20" /> +<hkern u1="Ø" u2="Ý" k="20" /> +<hkern u1="Ø" u2="Å" k="41" /> +<hkern u1="Ø" u2="Ä" k="41" /> +<hkern u1="Ø" u2="Ã" k="41" /> +<hkern u1="Ø" u2="Â" k="41" /> +<hkern u1="Ø" u2="Á" k="41" /> +<hkern u1="Ø" u2="À" k="41" /> +<hkern u1="Ø" u2="Z" k="20" /> +<hkern u1="Ø" u2="Y" k="20" /> +<hkern u1="Ø" u2="X" k="41" /> +<hkern u1="Ø" u2="W" k="20" /> +<hkern u1="Ø" u2="V" k="20" /> +<hkern u1="Ø" u2="T" k="61" /> +<hkern u1="Ø" u2="A" k="41" /> +<hkern u1="Ø" u2="." k="82" /> +<hkern u1="Ø" u2="," k="82" /> +<hkern u1="Ù" u2="„" k="41" /> +<hkern u1="Ù" u2="‚" k="41" /> +<hkern u1="Ù" u2="Å" k="20" /> +<hkern u1="Ù" u2="Ä" k="20" /> +<hkern u1="Ù" u2="Ã" k="20" /> +<hkern u1="Ù" u2="Â" k="20" /> +<hkern u1="Ù" u2="Á" k="20" /> +<hkern u1="Ù" u2="À" k="20" /> +<hkern u1="Ù" u2="A" k="20" /> +<hkern u1="Ù" u2="." k="41" /> +<hkern u1="Ù" u2="," k="41" /> +<hkern u1="Ú" u2="„" k="41" /> +<hkern u1="Ú" u2="‚" k="41" /> +<hkern u1="Ú" u2="Å" k="20" /> +<hkern u1="Ú" u2="Ä" k="20" /> +<hkern u1="Ú" u2="Ã" k="20" /> +<hkern u1="Ú" u2="Â" k="20" /> +<hkern u1="Ú" u2="Á" k="20" /> +<hkern u1="Ú" u2="À" k="20" /> +<hkern u1="Ú" u2="A" k="20" /> +<hkern u1="Ú" u2="." k="41" /> +<hkern u1="Ú" u2="," k="41" /> +<hkern u1="Û" u2="„" k="41" /> +<hkern u1="Û" u2="‚" k="41" /> +<hkern u1="Û" u2="Å" k="20" /> +<hkern u1="Û" u2="Ä" k="20" /> +<hkern u1="Û" u2="Ã" k="20" /> +<hkern u1="Û" u2="Â" k="20" /> +<hkern u1="Û" u2="Á" k="20" /> +<hkern u1="Û" u2="À" k="20" /> +<hkern u1="Û" u2="A" k="20" /> +<hkern u1="Û" u2="." k="41" /> +<hkern u1="Û" u2="," k="41" /> +<hkern u1="Ü" u2="„" k="41" /> +<hkern u1="Ü" u2="‚" k="41" /> +<hkern u1="Ü" u2="Å" k="20" /> +<hkern u1="Ü" u2="Ä" k="20" /> +<hkern u1="Ü" u2="Ã" k="20" /> +<hkern u1="Ü" u2="Â" k="20" /> +<hkern u1="Ü" u2="Á" k="20" /> +<hkern u1="Ü" u2="À" k="20" /> +<hkern u1="Ü" u2="A" k="20" /> +<hkern u1="Ü" u2="." k="41" /> +<hkern u1="Ü" u2="," k="41" /> +<hkern u1="Ý" u2="„" k="123" /> +<hkern u1="Ý" u2="‚" k="123" /> +<hkern u1="Ý" u2="œ" k="102" /> +<hkern u1="Ý" u2="Œ" k="41" /> +<hkern u1="Ý" u2="ü" k="61" /> +<hkern u1="Ý" u2="û" k="61" /> +<hkern u1="Ý" u2="ú" k="61" /> +<hkern u1="Ý" u2="ù" k="61" /> +<hkern u1="Ý" u2="ø" k="102" /> +<hkern u1="Ý" u2="ö" k="102" /> +<hkern u1="Ý" u2="õ" k="102" /> +<hkern u1="Ý" u2="ô" k="102" /> +<hkern u1="Ý" u2="ó" k="102" /> +<hkern u1="Ý" u2="ò" k="102" /> +<hkern u1="Ý" u2="ë" k="102" /> +<hkern u1="Ý" u2="ê" k="102" /> +<hkern u1="Ý" u2="é" k="102" /> +<hkern u1="Ý" u2="è" k="102" /> +<hkern u1="Ý" u2="ç" k="102" /> +<hkern u1="Ý" u2="æ" k="102" /> +<hkern u1="Ý" u2="å" k="102" /> +<hkern u1="Ý" u2="ä" k="102" /> +<hkern u1="Ý" u2="ã" k="102" /> +<hkern u1="Ý" u2="â" k="102" /> +<hkern u1="Ý" u2="á" k="102" /> +<hkern u1="Ý" u2="à" k="102" /> +<hkern u1="Ý" u2="Ø" k="41" /> +<hkern u1="Ý" u2="Ö" k="41" /> +<hkern u1="Ý" u2="Õ" k="41" /> +<hkern u1="Ý" u2="Ô" k="41" /> +<hkern u1="Ý" u2="Ó" k="41" /> +<hkern u1="Ý" u2="Ò" k="41" /> +<hkern u1="Ý" u2="Ç" k="41" /> +<hkern u1="Ý" u2="Å" k="123" /> +<hkern u1="Ý" u2="Ä" k="123" /> +<hkern u1="Ý" u2="Ã" k="123" /> +<hkern u1="Ý" u2="Â" k="123" /> +<hkern u1="Ý" u2="Á" k="123" /> +<hkern u1="Ý" u2="À" k="123" /> +<hkern u1="Ý" u2="z" k="41" /> +<hkern u1="Ý" u2="u" k="61" /> +<hkern u1="Ý" u2="s" k="82" /> +<hkern u1="Ý" u2="r" k="61" /> +<hkern u1="Ý" u2="q" k="102" /> +<hkern u1="Ý" u2="p" k="61" /> +<hkern u1="Ý" u2="o" k="102" /> +<hkern u1="Ý" u2="n" k="61" /> +<hkern u1="Ý" u2="m" k="61" /> +<hkern u1="Ý" u2="g" k="41" /> +<hkern u1="Ý" u2="e" k="102" /> +<hkern u1="Ý" u2="d" k="102" /> +<hkern u1="Ý" u2="c" k="102" /> +<hkern u1="Ý" u2="a" k="102" /> +<hkern u1="Ý" u2="Q" k="41" /> +<hkern u1="Ý" u2="O" k="41" /> +<hkern u1="Ý" u2="G" k="41" /> +<hkern u1="Ý" u2="C" k="41" /> +<hkern u1="Ý" u2="A" k="123" /> +<hkern u1="Ý" u2="?" k="-41" /> +<hkern u1="Ý" u2="." k="123" /> +<hkern u1="Ý" u2="," k="123" /> +<hkern u1="Þ" u2="„" k="266" /> +<hkern u1="Þ" u2="‚" k="266" /> +<hkern u1="Þ" u2="Å" k="102" /> +<hkern u1="Þ" u2="Ä" k="102" /> +<hkern u1="Þ" u2="Ã" k="102" /> +<hkern u1="Þ" u2="Â" k="102" /> +<hkern u1="Þ" u2="Á" k="102" /> +<hkern u1="Þ" u2="À" k="102" /> +<hkern u1="Þ" u2="Z" k="20" /> +<hkern u1="Þ" u2="X" k="41" /> +<hkern u1="Þ" u2="A" k="102" /> +<hkern u1="Þ" u2="." k="266" /> +<hkern u1="Þ" u2="," k="266" /> +<hkern u1="à" u2="”" k="20" /> +<hkern u1="à" u2="’" k="20" /> +<hkern u1="à" u2="'" k="20" /> +<hkern u1="à" u2=""" k="20" /> +<hkern u1="á" u2="”" k="20" /> +<hkern u1="á" u2="’" k="20" /> +<hkern u1="á" u2="'" k="20" /> +<hkern u1="á" u2=""" k="20" /> +<hkern u1="â" u2="”" k="20" /> +<hkern u1="â" u2="’" k="20" /> +<hkern u1="â" u2="'" k="20" /> +<hkern u1="â" u2=""" k="20" /> +<hkern u1="ã" u2="”" k="20" /> +<hkern u1="ã" u2="’" k="20" /> +<hkern u1="ã" u2="'" k="20" /> +<hkern u1="ã" u2=""" k="20" /> +<hkern u1="ä" u2="”" k="20" /> +<hkern u1="ä" u2="’" k="20" /> +<hkern u1="ä" u2="'" k="20" /> +<hkern u1="ä" u2=""" k="20" /> +<hkern u1="å" u2="”" k="20" /> +<hkern u1="å" u2="’" k="20" /> +<hkern u1="å" u2="'" k="20" /> +<hkern u1="å" u2=""" k="20" /> +<hkern u1="è" u2="”" k="20" /> +<hkern u1="è" u2="’" k="20" /> +<hkern u1="è" u2="ý" k="41" /> +<hkern u1="è" u2="z" k="20" /> +<hkern u1="è" u2="y" k="41" /> +<hkern u1="è" u2="x" k="41" /> +<hkern u1="è" u2="w" k="41" /> +<hkern u1="è" u2="v" k="41" /> +<hkern u1="è" u2="'" k="20" /> +<hkern u1="è" u2=""" k="20" /> +<hkern u1="é" u2="”" k="20" /> +<hkern u1="é" u2="’" k="20" /> +<hkern u1="é" u2="ý" k="41" /> +<hkern u1="é" u2="z" k="20" /> +<hkern u1="é" u2="y" k="41" /> +<hkern u1="é" u2="x" k="41" /> +<hkern u1="é" u2="w" k="41" /> +<hkern u1="é" u2="v" k="41" /> +<hkern u1="é" u2="'" k="20" /> +<hkern u1="é" u2=""" k="20" /> +<hkern u1="ê" u2="”" k="20" /> +<hkern u1="ê" u2="’" k="20" /> +<hkern u1="ê" u2="ý" k="41" /> +<hkern u1="ê" u2="z" k="20" /> +<hkern u1="ê" u2="y" k="41" /> +<hkern u1="ê" u2="x" k="41" /> +<hkern u1="ê" u2="w" k="41" /> +<hkern u1="ê" u2="v" k="41" /> +<hkern u1="ê" u2="'" k="20" /> +<hkern u1="ê" u2=""" k="20" /> +<hkern u1="ë" u2="”" k="20" /> +<hkern u1="ë" u2="’" k="20" /> +<hkern u1="ë" u2="ý" k="41" /> +<hkern u1="ë" u2="z" k="20" /> +<hkern u1="ë" u2="y" k="41" /> +<hkern u1="ë" u2="x" k="41" /> +<hkern u1="ë" u2="w" k="41" /> +<hkern u1="ë" u2="v" k="41" /> +<hkern u1="ë" u2="'" k="20" /> +<hkern u1="ë" u2=""" k="20" /> +<hkern u1="ð" u2="”" k="20" /> +<hkern u1="ð" u2="’" k="20" /> +<hkern u1="ð" u2="ý" k="41" /> +<hkern u1="ð" u2="z" k="20" /> +<hkern u1="ð" u2="y" k="41" /> +<hkern u1="ð" u2="x" k="41" /> +<hkern u1="ð" u2="w" k="41" /> +<hkern u1="ð" u2="v" k="41" /> +<hkern u1="ð" u2="'" k="20" /> +<hkern u1="ð" u2=""" k="20" /> +<hkern u1="ò" u2="”" k="20" /> +<hkern u1="ò" u2="’" k="20" /> +<hkern u1="ò" u2="ý" k="41" /> +<hkern u1="ò" u2="z" k="20" /> +<hkern u1="ò" u2="y" k="41" /> +<hkern u1="ò" u2="x" k="41" /> +<hkern u1="ò" u2="w" k="41" /> +<hkern u1="ò" u2="v" k="41" /> +<hkern u1="ò" u2="'" k="20" /> +<hkern u1="ò" u2=""" k="20" /> +<hkern u1="ó" u2="”" k="20" /> +<hkern u1="ó" u2="’" k="20" /> +<hkern u1="ó" u2="ý" k="41" /> +<hkern u1="ó" u2="z" k="20" /> +<hkern u1="ó" u2="y" k="41" /> +<hkern u1="ó" u2="x" k="41" /> +<hkern u1="ó" u2="w" k="41" /> +<hkern u1="ó" u2="v" k="41" /> +<hkern u1="ó" u2="'" k="20" /> +<hkern u1="ó" u2=""" k="20" /> +<hkern u1="ô" u2="”" k="20" /> +<hkern u1="ô" u2="’" k="20" /> +<hkern u1="ô" u2="ý" k="41" /> +<hkern u1="ô" u2="z" k="20" /> +<hkern u1="ô" u2="y" k="41" /> +<hkern u1="ô" u2="x" k="41" /> +<hkern u1="ô" u2="w" k="41" /> +<hkern u1="ô" u2="v" k="41" /> +<hkern u1="ô" u2="'" k="20" /> +<hkern u1="ô" u2=""" k="20" /> +<hkern u1="ö" u2="”" k="41" /> +<hkern u1="ö" u2="’" k="41" /> +<hkern u1="ö" u2="'" k="41" /> +<hkern u1="ö" u2=""" k="41" /> +<hkern u1="ø" u2="”" k="20" /> +<hkern u1="ø" u2="’" k="20" /> +<hkern u1="ø" u2="ý" k="41" /> +<hkern u1="ø" u2="z" k="20" /> +<hkern u1="ø" u2="y" k="41" /> +<hkern u1="ø" u2="x" k="41" /> +<hkern u1="ø" u2="w" k="41" /> +<hkern u1="ø" u2="v" k="41" /> +<hkern u1="ø" u2="'" k="20" /> +<hkern u1="ø" u2=""" k="20" /> +<hkern u1="ý" u2="„" k="82" /> +<hkern u1="ý" u2="”" k="-82" /> +<hkern u1="ý" u2="‚" k="82" /> +<hkern u1="ý" u2="’" k="-82" /> +<hkern u1="ý" u2="?" k="-41" /> +<hkern u1="ý" u2="." k="82" /> +<hkern u1="ý" u2="," k="82" /> +<hkern u1="ý" u2="'" k="-82" /> +<hkern u1="ý" u2=""" k="-82" /> +<hkern u1="þ" u2="”" k="20" /> +<hkern u1="þ" u2="’" k="20" /> +<hkern u1="þ" u2="ý" k="41" /> +<hkern u1="þ" u2="z" k="20" /> +<hkern u1="þ" u2="y" k="41" /> +<hkern u1="þ" u2="x" k="41" /> +<hkern u1="þ" u2="w" k="41" /> +<hkern u1="þ" u2="v" k="41" /> +<hkern u1="þ" u2="'" k="20" /> +<hkern u1="þ" u2=""" k="20" /> +<hkern u1="ÿ" u2="„" k="82" /> +<hkern u1="ÿ" u2="”" k="-82" /> +<hkern u1="ÿ" u2="‚" k="82" /> +<hkern u1="ÿ" u2="’" k="-82" /> +<hkern u1="ÿ" u2="?" k="-41" /> +<hkern u1="ÿ" u2="." k="82" /> +<hkern u1="ÿ" u2="," k="82" /> +<hkern u1="ÿ" u2="'" k="-82" /> +<hkern u1="ÿ" u2=""" k="-82" /> +<hkern u1="Œ" u2="J" k="-123" /> +<hkern u1="Ÿ" u2="„" k="123" /> +<hkern u1="Ÿ" u2="‚" k="123" /> +<hkern u1="Ÿ" u2="œ" k="102" /> +<hkern u1="Ÿ" u2="Œ" k="41" /> +<hkern u1="Ÿ" u2="ü" k="61" /> +<hkern u1="Ÿ" u2="û" k="61" /> +<hkern u1="Ÿ" u2="ú" k="61" /> +<hkern u1="Ÿ" u2="ù" k="61" /> +<hkern u1="Ÿ" u2="ø" k="102" /> +<hkern u1="Ÿ" u2="ö" k="102" /> +<hkern u1="Ÿ" u2="õ" k="102" /> +<hkern u1="Ÿ" u2="ô" k="102" /> +<hkern u1="Ÿ" u2="ó" k="102" /> +<hkern u1="Ÿ" u2="ò" k="102" /> +<hkern u1="Ÿ" u2="ë" k="102" /> +<hkern u1="Ÿ" u2="ê" k="102" /> +<hkern u1="Ÿ" u2="é" k="102" /> +<hkern u1="Ÿ" u2="è" k="102" /> +<hkern u1="Ÿ" u2="ç" k="102" /> +<hkern u1="Ÿ" u2="æ" k="102" /> +<hkern u1="Ÿ" u2="å" k="102" /> +<hkern u1="Ÿ" u2="ä" k="102" /> +<hkern u1="Ÿ" u2="ã" k="102" /> +<hkern u1="Ÿ" u2="â" k="102" /> +<hkern u1="Ÿ" u2="á" k="102" /> +<hkern u1="Ÿ" u2="à" k="102" /> +<hkern u1="Ÿ" u2="Ø" k="41" /> +<hkern u1="Ÿ" u2="Ö" k="41" /> +<hkern u1="Ÿ" u2="Õ" k="41" /> +<hkern u1="Ÿ" u2="Ô" k="41" /> +<hkern u1="Ÿ" u2="Ó" k="41" /> +<hkern u1="Ÿ" u2="Ò" k="41" /> +<hkern u1="Ÿ" u2="Ç" k="41" /> +<hkern u1="Ÿ" u2="Å" k="123" /> +<hkern u1="Ÿ" u2="Ä" k="123" /> +<hkern u1="Ÿ" u2="Ã" k="123" /> +<hkern u1="Ÿ" u2="Â" k="123" /> +<hkern u1="Ÿ" u2="Á" k="123" /> +<hkern u1="Ÿ" u2="À" k="123" /> +<hkern u1="Ÿ" u2="z" k="41" /> +<hkern u1="Ÿ" u2="u" k="61" /> +<hkern u1="Ÿ" u2="s" k="82" /> +<hkern u1="Ÿ" u2="r" k="61" /> +<hkern u1="Ÿ" u2="q" k="102" /> +<hkern u1="Ÿ" u2="p" k="61" /> +<hkern u1="Ÿ" u2="o" k="102" /> +<hkern u1="Ÿ" u2="n" k="61" /> +<hkern u1="Ÿ" u2="m" k="61" /> +<hkern u1="Ÿ" u2="g" k="41" /> +<hkern u1="Ÿ" u2="e" k="102" /> +<hkern u1="Ÿ" u2="d" k="102" /> +<hkern u1="Ÿ" u2="c" k="102" /> +<hkern u1="Ÿ" u2="a" k="102" /> +<hkern u1="Ÿ" u2="Q" k="41" /> +<hkern u1="Ÿ" u2="O" k="41" /> +<hkern u1="Ÿ" u2="G" k="41" /> +<hkern u1="Ÿ" u2="C" k="41" /> +<hkern u1="Ÿ" u2="A" k="123" /> +<hkern u1="Ÿ" u2="?" k="-41" /> +<hkern u1="Ÿ" u2="." k="123" /> +<hkern u1="Ÿ" u2="," k="123" /> +<hkern u1="–" u2="T" k="82" /> +<hkern u1="—" u2="T" k="82" /> +<hkern u1="‘" u2="Ÿ" k="-20" /> +<hkern u1="‘" u2="œ" k="123" /> +<hkern u1="‘" u2="ü" k="61" /> +<hkern u1="‘" u2="û" k="61" /> +<hkern u1="‘" u2="ú" k="61" /> +<hkern u1="‘" u2="ù" k="61" /> +<hkern u1="‘" u2="ø" k="123" /> +<hkern u1="‘" u2="ö" k="123" /> +<hkern u1="‘" u2="õ" k="123" /> +<hkern u1="‘" u2="ô" k="123" /> +<hkern u1="‘" u2="ó" k="123" /> +<hkern u1="‘" u2="ò" k="123" /> +<hkern u1="‘" u2="ë" k="123" /> +<hkern u1="‘" u2="ê" k="123" /> +<hkern u1="‘" u2="é" k="123" /> +<hkern u1="‘" u2="è" k="123" /> +<hkern u1="‘" u2="ç" k="123" /> +<hkern u1="‘" u2="æ" k="82" /> +<hkern u1="‘" u2="å" k="82" /> +<hkern u1="‘" u2="ä" k="82" /> +<hkern u1="‘" u2="ã" k="82" /> +<hkern u1="‘" u2="â" k="82" /> +<hkern u1="‘" u2="á" k="82" /> +<hkern u1="‘" u2="à" k="123" /> +<hkern u1="‘" u2="Ý" k="-20" /> +<hkern u1="‘" u2="Å" k="143" /> +<hkern u1="‘" u2="Ä" k="143" /> +<hkern u1="‘" u2="Ã" k="143" /> +<hkern u1="‘" u2="Â" k="143" /> +<hkern u1="‘" u2="Á" k="143" /> +<hkern u1="‘" u2="À" k="143" /> +<hkern u1="‘" u2="u" k="61" /> +<hkern u1="‘" u2="s" k="61" /> +<hkern u1="‘" u2="r" k="61" /> +<hkern u1="‘" u2="q" k="123" /> +<hkern u1="‘" u2="p" k="61" /> +<hkern u1="‘" u2="o" k="123" /> +<hkern u1="‘" u2="n" k="61" /> +<hkern u1="‘" u2="m" k="61" /> +<hkern u1="‘" u2="g" k="61" /> +<hkern u1="‘" u2="e" k="123" /> +<hkern u1="‘" u2="d" k="123" /> +<hkern u1="‘" u2="c" k="123" /> +<hkern u1="‘" u2="a" k="82" /> +<hkern u1="‘" u2="Y" k="-20" /> +<hkern u1="‘" u2="W" k="-41" /> +<hkern u1="‘" u2="V" k="-41" /> +<hkern u1="‘" u2="T" k="-41" /> +<hkern u1="‘" u2="A" k="143" /> +<hkern u1="’" u2="Ÿ" k="-20" /> +<hkern u1="’" u2="œ" k="123" /> +<hkern u1="’" u2="ü" k="61" /> +<hkern u1="’" u2="û" k="61" /> +<hkern u1="’" u2="ú" k="61" /> +<hkern u1="’" u2="ù" k="61" /> +<hkern u1="’" u2="ø" k="123" /> +<hkern u1="’" u2="ö" k="123" /> +<hkern u1="’" u2="õ" k="123" /> +<hkern u1="’" u2="ô" k="123" /> +<hkern u1="’" u2="ó" k="123" /> +<hkern u1="’" u2="ò" k="123" /> +<hkern u1="’" u2="ë" k="123" /> +<hkern u1="’" u2="ê" k="123" /> +<hkern u1="’" u2="é" k="123" /> +<hkern u1="’" u2="è" k="123" /> +<hkern u1="’" u2="ç" k="123" /> +<hkern u1="’" u2="æ" k="82" /> +<hkern u1="’" u2="å" k="82" /> +<hkern u1="’" u2="ä" k="82" /> +<hkern u1="’" u2="ã" k="82" /> +<hkern u1="’" u2="â" k="82" /> +<hkern u1="’" u2="á" k="82" /> +<hkern u1="’" u2="à" k="123" /> +<hkern u1="’" u2="Ý" k="-20" /> +<hkern u1="’" u2="Å" k="143" /> +<hkern u1="’" u2="Ä" k="143" /> +<hkern u1="’" u2="Ã" k="143" /> +<hkern u1="’" u2="Â" k="143" /> +<hkern u1="’" u2="Á" k="143" /> +<hkern u1="’" u2="À" k="143" /> +<hkern u1="’" u2="u" k="61" /> +<hkern u1="’" u2="s" k="61" /> +<hkern u1="’" u2="r" k="61" /> +<hkern u1="’" u2="q" k="123" /> +<hkern u1="’" u2="p" k="61" /> +<hkern u1="’" u2="o" k="123" /> +<hkern u1="’" u2="n" k="61" /> +<hkern u1="’" u2="m" k="61" /> +<hkern u1="’" u2="g" k="61" /> +<hkern u1="’" u2="e" k="123" /> +<hkern u1="’" u2="d" k="123" /> +<hkern u1="’" u2="c" k="123" /> +<hkern u1="’" u2="a" k="82" /> +<hkern u1="’" u2="Y" k="-20" /> +<hkern u1="’" u2="W" k="-41" /> +<hkern u1="’" u2="V" k="-41" /> +<hkern u1="’" u2="T" k="-41" /> +<hkern u1="’" u2="A" k="143" /> +<hkern u1="‚" u2="Ÿ" k="123" /> +<hkern u1="‚" u2="Œ" k="102" /> +<hkern u1="‚" u2="Ý" k="123" /> +<hkern u1="‚" u2="Ü" k="41" /> +<hkern u1="‚" u2="Û" k="41" /> +<hkern u1="‚" u2="Ú" k="41" /> +<hkern u1="‚" u2="Ù" k="41" /> +<hkern u1="‚" u2="Ø" k="102" /> +<hkern u1="‚" u2="Ö" k="102" /> +<hkern u1="‚" u2="Õ" k="102" /> +<hkern u1="‚" u2="Ô" k="102" /> +<hkern u1="‚" u2="Ó" k="102" /> +<hkern u1="‚" u2="Ò" k="102" /> +<hkern u1="‚" u2="Ç" k="102" /> +<hkern u1="‚" u2="Y" k="123" /> +<hkern u1="‚" u2="W" k="123" /> +<hkern u1="‚" u2="V" k="123" /> +<hkern u1="‚" u2="U" k="41" /> +<hkern u1="‚" u2="T" k="143" /> +<hkern u1="‚" u2="Q" k="102" /> +<hkern u1="‚" u2="O" k="102" /> +<hkern u1="‚" u2="G" k="102" /> +<hkern u1="‚" u2="C" k="102" /> +<hkern u1="“" u2="Ÿ" k="-20" /> +<hkern u1="“" u2="œ" k="123" /> +<hkern u1="“" u2="ü" k="61" /> +<hkern u1="“" u2="û" k="61" /> +<hkern u1="“" u2="ú" k="61" /> +<hkern u1="“" u2="ù" k="61" /> +<hkern u1="“" u2="ø" k="123" /> +<hkern u1="“" u2="ö" k="123" /> +<hkern u1="“" u2="õ" k="123" /> +<hkern u1="“" u2="ô" k="123" /> +<hkern u1="“" u2="ó" k="123" /> +<hkern u1="“" u2="ò" k="123" /> +<hkern u1="“" u2="ë" k="123" /> +<hkern u1="“" u2="ê" k="123" /> +<hkern u1="“" u2="é" k="123" /> +<hkern u1="“" u2="è" k="123" /> +<hkern u1="“" u2="ç" k="123" /> +<hkern u1="“" u2="æ" k="82" /> +<hkern u1="“" u2="å" k="82" /> +<hkern u1="“" u2="ä" k="82" /> +<hkern u1="“" u2="ã" k="82" /> +<hkern u1="“" u2="â" k="82" /> +<hkern u1="“" u2="á" k="82" /> +<hkern u1="“" u2="à" k="123" /> +<hkern u1="“" u2="Ý" k="-20" /> +<hkern u1="“" u2="Å" k="143" /> +<hkern u1="“" u2="Ä" k="143" /> +<hkern u1="“" u2="Ã" k="143" /> +<hkern u1="“" u2="Â" k="143" /> +<hkern u1="“" u2="Á" k="143" /> +<hkern u1="“" u2="À" k="143" /> +<hkern u1="“" u2="u" k="61" /> +<hkern u1="“" u2="s" k="61" /> +<hkern u1="“" u2="r" k="61" /> +<hkern u1="“" u2="q" k="123" /> +<hkern u1="“" u2="p" k="61" /> +<hkern u1="“" u2="o" k="123" /> +<hkern u1="“" u2="n" k="61" /> +<hkern u1="“" u2="m" k="61" /> +<hkern u1="“" u2="g" k="61" /> +<hkern u1="“" u2="e" k="123" /> +<hkern u1="“" u2="d" k="123" /> +<hkern u1="“" u2="c" k="123" /> +<hkern u1="“" u2="a" k="82" /> +<hkern u1="“" u2="Y" k="-20" /> +<hkern u1="“" u2="W" k="-41" /> +<hkern u1="“" u2="V" k="-41" /> +<hkern u1="“" u2="T" k="-41" /> +<hkern u1="“" u2="A" k="143" /> +<hkern u1="„" u2="Ÿ" k="123" /> +<hkern u1="„" u2="Œ" k="102" /> +<hkern u1="„" u2="Ý" k="123" /> +<hkern u1="„" u2="Ü" k="41" /> +<hkern u1="„" u2="Û" k="41" /> +<hkern u1="„" u2="Ú" k="41" /> +<hkern u1="„" u2="Ù" k="41" /> +<hkern u1="„" u2="Ø" k="102" /> +<hkern u1="„" u2="Ö" k="102" /> +<hkern u1="„" u2="Õ" k="102" /> +<hkern u1="„" u2="Ô" k="102" /> +<hkern u1="„" u2="Ó" k="102" /> +<hkern u1="„" u2="Ò" k="102" /> +<hkern u1="„" u2="Ç" k="102" /> +<hkern u1="„" u2="Y" k="123" /> +<hkern u1="„" u2="W" k="123" /> +<hkern u1="„" u2="V" k="123" /> +<hkern u1="„" u2="U" k="41" /> +<hkern u1="„" u2="T" k="143" /> +<hkern u1="„" u2="Q" k="102" /> +<hkern u1="„" u2="O" k="102" /> +<hkern u1="„" u2="G" k="102" /> +<hkern u1="„" u2="C" k="102" /> +</font> +</defs></svg>
\ No newline at end of file diff --git a/documentation/jsapi/fonts/OpenSans-BoldItalic-webfont.woff b/documentation/jsapi/fonts/OpenSans-BoldItalic-webfont.woff Binary files differnew file mode 100644 index 000000000..ed760c062 --- /dev/null +++ b/documentation/jsapi/fonts/OpenSans-BoldItalic-webfont.woff diff --git a/documentation/jsapi/fonts/OpenSans-Italic-webfont.eot b/documentation/jsapi/fonts/OpenSans-Italic-webfont.eot Binary files differnew file mode 100644 index 000000000..0c8a0ae06 --- /dev/null +++ b/documentation/jsapi/fonts/OpenSans-Italic-webfont.eot diff --git a/documentation/jsapi/fonts/OpenSans-Italic-webfont.svg b/documentation/jsapi/fonts/OpenSans-Italic-webfont.svg new file mode 100644 index 000000000..e1075dcc2 --- /dev/null +++ b/documentation/jsapi/fonts/OpenSans-Italic-webfont.svg @@ -0,0 +1,1830 @@ +<?xml version="1.0" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" > +<svg xmlns="http://www.w3.org/2000/svg"> +<metadata></metadata> +<defs> +<font id="open_sansitalic" horiz-adv-x="1128" > +<font-face units-per-em="2048" ascent="1638" descent="-410" /> +<missing-glyph horiz-adv-x="532" /> +<glyph unicode="fi" horiz-adv-x="1165" d="M0 0zM-104 -492q-69 0 -125 21v141q64 -22 112 -22q76 0 117 62t66 177l227 1082h-193l13 67l206 66l23 100q46 200 127.5 282.5t241.5 82.5q40 0 98 -11.5t90 -25.5l-43 -129q-76 29 -137 29q-87 0 -133.5 -48.5t-75.5 -177.5l-25 -108h238l-25 -127h-237l-232 -1098 q-39 -189 -120 -276t-213 -87zM870 0h-168l234 1096h168zM983 1376q0 56 32 91.5t83 35.5q88 0 88 -90q0 -55 -33.5 -93t-77.5 -38q-40 0 -66 24.5t-26 69.5z" /> +<glyph unicode="fl" horiz-adv-x="1165" d="M0 0zM-104 -492q-69 0 -125 21v141q64 -22 112 -22q76 0 117 62t66 177l227 1082h-193l13 67l206 66l23 100q46 200 127.5 282.5t241.5 82.5q40 0 98 -11.5t90 -25.5l-43 -129q-76 29 -137 29q-87 0 -133.5 -48.5t-75.5 -177.5l-25 -108h238l-25 -127h-237l-232 -1098 q-39 -189 -120 -276t-213 -87zM868 0h-168l332 1556h168z" /> +<glyph unicode="ffi" horiz-adv-x="1815" d="M545 -492q-71 0 -125 21v141q61 -22 115 -22q68 0 111 57.5t69 181.5l227 1082h-481l-232 -1098q-39 -189 -120 -276t-213 -87q-69 0 -125 21v141q64 -22 112 -22q70 0 114 58t69 181l227 1082h-193l13 67l206 66l23 100q46 200 127.5 282.5t241.5 82.5q40 0 98 -11.5 t90 -25.5l-43 -129q-76 29 -137 29q-87 0 -133.5 -48.5t-75.5 -177.5l-25 -108h482l24 108q45 197 126 280t243 83q41 0 97.5 -11t92.5 -26l-45 -129q-76 29 -137 29q-89 0 -135 -51t-74 -175l-24 -108h239l-26 -127h-238l-231 -1098q-43 -195 -123.5 -279t-210.5 -84z M1522 0h-168l233 1096h168zM1634 1376q0 54 32 90.5t83 36.5q88 0 88 -90q0 -55 -33.5 -93t-77.5 -38q-38 0 -65 24.5t-27 69.5z" /> +<glyph unicode="ffl" horiz-adv-x="1815" d="M1520 0h-168l331 1556h168zM545 -492q-71 0 -125 21v141q61 -22 115 -22q68 0 111 57.5t69 181.5l227 1082h-481l-232 -1098q-39 -189 -120 -276t-213 -87q-69 0 -125 21v141q64 -22 112 -22q70 0 114 58t69 181l227 1082h-193l13 67l206 66l23 100q46 200 127.5 282.5 t241.5 82.5q40 0 98 -11.5t90 -25.5l-43 -129q-76 29 -137 29q-87 0 -133.5 -48.5t-75.5 -177.5l-25 -108h482l24 108q45 197 126 280t243 83q41 0 97.5 -11t92.5 -26l-45 -129q-76 29 -137 29q-89 0 -135 -51t-74 -175l-24 -108h239l-26 -127h-238l-231 -1098 q-43 -195 -123.5 -279t-210.5 -84z" /> +<glyph horiz-adv-x="2048" /> +<glyph horiz-adv-x="2048" /> +<glyph unicode="
" horiz-adv-x="1044" /> +<glyph unicode=" " horiz-adv-x="532" /> +<glyph unicode="	" horiz-adv-x="532" /> +<glyph unicode=" " horiz-adv-x="532" /> +<glyph unicode="!" horiz-adv-x="530" d="M555 1462l-274 -1059h-109q49 307 176 1059h207zM43 78q0 76 39.5 120t107.5 44q45 0 73 -27.5t28 -81.5q0 -68 -39 -115t-105 -47q-49 0 -76.5 28t-27.5 79z" /> +<glyph unicode=""" horiz-adv-x="791" d="M485 1462l-153 -528h-107l72 528h188zM834 1462l-154 -528h-107l72 528h189z" /> +<glyph unicode="#" horiz-adv-x="1323" d="M1036 899l-98 -340h285l-13 -129h-309l-125 -430h-139l129 430h-303l-127 -430h-133l121 430h-261l13 129h284l101 340h-277l13 127h301l123 436h139l-125 -436h305l127 436h133l-125 -436h264l-12 -127h-291zM500 559h303l96 340h-303z" /> +<glyph unicode="$" d="M942 492q0 -162 -112.5 -263t-309.5 -123l-49 -225h-133l49 223q-195 14 -315 72v154q82 -41 175.5 -63.5t166.5 -22.5l98 452q-139 49 -201.5 123.5t-62.5 188.5q0 159 108 255t299 113l39 176h133l-39 -178q159 -12 283 -76l-63 -135q-121 63 -248 72l-94 -440 q149 -55 212.5 -125t63.5 -178zM549 250q107 13 170 75t63 154q0 54 -33 96t-114 74zM627 1235q-108 -11 -167 -69t-59 -156q0 -53 34.5 -97.5t107.5 -70.5z" /> +<glyph unicode="%" horiz-adv-x="1624" d="M1468 1462l-1085 -1462h-152l1086 1462h151zM1284 772q-67 0 -119.5 -64.5t-84 -188.5t-31.5 -240q0 -173 106 -173q65 0 117 65t86.5 198.5t34.5 236.5q0 166 -109 166zM1532 621q0 -107 -31.5 -236t-82 -217.5t-121 -138t-156.5 -49.5q-110 0 -171 74.5t-61 219.5 q0 166 50.5 318.5t136.5 228.5t200 76q116 0 176 -71.5t60 -204.5zM543 1358q-66 0 -119 -63t-85 -187.5t-32 -243.5q0 -172 107 -172q52 0 94 39.5t73.5 114t50.5 175t19 171.5q0 166 -108 166zM791 1206q0 -108 -32 -237.5t-82.5 -217.5t-120.5 -137t-157 -49 q-109 0 -170 75t-61 220q0 166 50.5 318.5t136.5 228.5t200 76q116 0 176 -72t60 -205z" /> +<glyph unicode="&" horiz-adv-x="1372" d="M737 1348q-105 0 -163 -60t-58 -170q0 -120 82 -235q139 71 191 110t83 85t31 104q0 77 -42.5 121.5t-123.5 44.5zM471 119q87 0 168 33t195 124l-306 433q-128 -67 -184 -116t-85.5 -107.5t-29.5 -131.5q0 -106 66.5 -170.5t175.5 -64.5zM66 342q0 148 90 257.5 t303 211.5q-103 165 -103 309q0 164 106 264.5t281 100.5q149 0 236.5 -79t87.5 -212q0 -78 -32.5 -137t-87.5 -108t-127.5 -90t-153.5 -83l278 -389q127 110 199 295h168q-101 -236 -283 -412l203 -270h-201l-117 166q-120 -100 -230 -143t-247 -43q-168 0 -269 96 t-101 266z" /> +<glyph unicode="'" horiz-adv-x="444" d="M485 1462l-153 -528h-107l72 528h188z" /> +<glyph unicode="(" horiz-adv-x="584" d="M82 272q0 339 120 627t384 563h157q-246 -270 -371.5 -570t-125.5 -618q0 -339 114 -598h-131q-147 266 -147 596z" /> +<glyph unicode=")" horiz-adv-x="584" d="M500 864q0 -341 -121.5 -629.5t-382.5 -558.5h-156q496 551 496 1188q0 341 -113 598h131q146 -269 146 -598z" /> +<glyph unicode="*" horiz-adv-x="1130" d="M854 1528l-123 -383l422 18l-8 -157l-393 47l180 -383l-166 -52l-113 406l-258 -344l-116 121l309 284l-373 109l55 154l371 -185l41 400z" /> +<glyph unicode="+" d="M516 651h-389v142h389v391h141v-391h390v-142h-390v-387h-141v387z" /> +<glyph unicode="," horiz-adv-x="492" d="M291 238l8 -23q-113 -235 -270 -479h-129q126 286 204 502h187z" /> +<glyph unicode="-" horiz-adv-x="639" d="M55 469l35 158h479l-34 -158h-480z" /> +<glyph unicode="." horiz-adv-x="518" d="M43 74q0 77 40.5 122.5t111.5 45.5q43 0 69.5 -26t26.5 -79q0 -71 -40 -118.5t-108 -47.5q-46 0 -73 26t-27 77z" /> +<glyph unicode="/" horiz-adv-x="717" d="M893 1462l-813 -1462h-174l813 1462h174z" /> +<glyph unicode="0" d="M1092 1014q0 -295 -78.5 -539t-214 -369.5t-314.5 -125.5q-176 0 -270 127.5t-94 369.5q0 270 82 514.5t216.5 369t307.5 124.5q365 0 365 -471zM717 1341q-113 0 -209 -115.5t-155.5 -323t-59.5 -423.5q0 -172 50 -264t161 -92q115 0 209 114t150.5 328t56.5 453 q0 323 -203 323z" /> +<glyph unicode="1" d="M588 0h-172l196 913q59 261 88 359q-50 -53 -139 -111l-178 -110l-80 127l449 284h149z" /> +<glyph unicode="2" d="M911 0h-899l31 147l465 420q102 93 176.5 163.5t123 133t72 124t23.5 136.5q0 99 -60 157t-163 58q-77 0 -150.5 -28.5t-162.5 -96.5l-82 115q191 154 413 154q176 0 278.5 -88.5t102.5 -243.5q0 -111 -39.5 -204t-131 -197t-294.5 -281l-352 -307v-8h678z" /> +<glyph unicode="3" d="M1073 1159q0 -156 -101 -264.5t-280 -140.5v-9q124 -23 195 -106.5t71 -208.5q0 -133 -62 -234.5t-181 -158.5t-283 -57q-210 0 -385 79v164q94 -49 199 -75.5t190 -26.5q162 0 252 79.5t90 217.5q0 131 -79 198.5t-220 67.5h-131l31 143h139q165 0 274 87t109 227 q0 92 -58 146t-157 54q-80 0 -157 -27t-175 -93l-80 118q195 144 424 144q179 0 277 -87t98 -237z" /> +<glyph unicode="4" d="M1067 334h-233l-72 -334h-164l74 334h-656l29 158l834 978h196l-207 -983h232zM705 487q46 220 78 373t116 445h-8q-17 -29 -66.5 -96.5t-72.5 -96.5l-533 -625h486z" /> +<glyph unicode="5" d="M598 893q182 0 289.5 -104.5t107.5 -282.5q0 -161 -73 -283t-204 -182.5t-308 -60.5q-193 0 -330 79v164q164 -102 334 -102q191 0 298 96t107 268q0 126 -73.5 199.5t-204.5 73.5q-48 0 -97 -6.5t-139 -30.5l-74 57l197 684h668l-33 -153h-522l-127 -439q87 23 184 23z " /> +<glyph unicode="6" d="M133 424q0 209 60.5 415t163.5 351.5t246 219t327 73.5q111 0 184 -23l-35 -145q-68 22 -170 22q-212 0 -356.5 -149t-212.5 -443h8q59 79 146.5 126t193.5 47q154 0 244 -98.5t90 -270.5q0 -161 -66.5 -294.5t-180.5 -204t-261 -70.5q-182 0 -281.5 115t-99.5 329z M532 121q94 0 167.5 54t114 149t40.5 208q0 248 -221 248q-66 0 -128 -28.5t-110 -76t-72 -104.5t-24 -155q0 -137 60.5 -216t172.5 -79z" /> +<glyph unicode="7" d="M174 0l768 1313h-719l31 149h891l-27 -139l-764 -1323h-180z" /> +<glyph unicode="8" d="M741 1485q174 0 271.5 -86.5t97.5 -235.5q0 -129 -78 -225t-266 -176q127 -78 180 -165t53 -202q0 -122 -60 -217.5t-172.5 -146.5t-264.5 -51q-190 0 -298 98.5t-108 267.5q0 148 95 256t296 184q-95 69 -135.5 144.5t-40.5 171.5q0 111 54.5 198.5t153.5 136t222 48.5z M608 700q-185 -60 -261.5 -143.5t-76.5 -202.5q0 -107 69 -170t181 -63q139 0 222 74t83 196q0 99 -52 174t-165 135zM729 1341q-114 0 -182 -65.5t-68 -175.5q0 -82 39 -144t127 -116q161 60 228 131.5t67 173.5q0 90 -57.5 143t-153.5 53z" /> +<glyph unicode="9" d="M1067 1034q0 -194 -56 -406.5t-147.5 -360t-221.5 -217.5t-302 -70q-136 0 -242 34v158q134 -47 246 -47q202 0 327 141t189 441h-10q-51 -75 -132.5 -118.5t-180.5 -43.5q-169 0 -261 98.5t-92 288.5q0 153 64.5 280.5t180 199t259.5 71.5q180 0 279.5 -114.5 t99.5 -334.5zM682 1341q-150 0 -241 -113t-91 -290q0 -124 54.5 -190t162.5 -66q76 0 140 28.5t108.5 81.5t65 114t20.5 151q0 131 -59 207.5t-160 76.5z" /> +<glyph unicode=":" horiz-adv-x="518" d="M43 74q0 77 40.5 122.5t111.5 45.5q43 0 69.5 -26t26.5 -79q0 -71 -40 -118.5t-108 -47.5q-46 0 -73 26t-27 77zM203 956q0 77 40 122.5t111 45.5q97 0 97 -104q0 -73 -41.5 -119.5t-106.5 -46.5q-46 0 -73 26.5t-27 75.5z" /> +<glyph unicode=";" horiz-adv-x="518" d="M291 238l8 -23q-113 -235 -270 -479h-129q126 286 204 502h187zM203 956q0 77 40 122.5t111 45.5q97 0 97 -104q0 -73 -41.5 -119.5t-106.5 -46.5q-46 0 -73 26.5t-27 75.5z" /> +<glyph unicode="<" d="M1040 242l-919 422v98l919 479v-149l-747 -371l747 -328v-151z" /> +<glyph unicode="=" d="M127 858v139h920v-139h-920zM127 444v142h920v-142h-920z" /> +<glyph unicode=">" d="M121 393l745 328l-745 371v149l919 -479v-98l-919 -422v151z" /> +<glyph unicode="?" horiz-adv-x="874" d="M260 403q22 130 72.5 213.5t165.5 174.5q128 100 168 144t63 94t23 112q0 93 -51.5 143.5t-147.5 50.5q-81 0 -155 -25.5t-140 -56.5l-61 129q92 51 192 76t182 25q167 0 259 -84t92 -238q0 -123 -65.5 -226.5t-225.5 -223.5q-125 -91 -169 -147.5t-67 -160.5h-135z M158 74q0 77 40 122.5t111 45.5q44 0 70.5 -26t26.5 -79q0 -73 -41.5 -119.5t-106.5 -46.5q-46 0 -73 26t-27 77z" /> +<glyph unicode="@" horiz-adv-x="1735" d="M1679 852q0 -179 -55 -324t-155 -227t-222 -82q-197 0 -213 184h-8q-111 -184 -291 -184q-115 0 -180.5 75.5t-65.5 209.5q0 157 68 284t188.5 199t260.5 72q65 0 127.5 -12t150.5 -48q-64 -242 -98 -368t-31 -172q0 -117 102 -117q78 0 141.5 67t100.5 183.5t37 243.5 q0 239 -128 367t-370 128q-228 0 -406.5 -107t-277 -295.5t-98.5 -416.5q0 -270 143.5 -418.5t409.5 -148.5q197 0 420 86v-127q-219 -90 -443 -90q-314 0 -494.5 184.5t-180.5 505.5q0 261 126.5 485.5t343.5 347.5t486 123q191 0 329 -75.5t210.5 -213.5t72.5 -319z M985 938q-94 0 -174 -55t-126 -153t-46 -212q0 -93 33 -134.5t98 -41.5q187 0 272 315l70 258q-63 23 -127 23z" /> +<glyph unicode="A" horiz-adv-x="1137" d="M813 465h-496l-245 -465h-189l799 1462h174l184 -1462h-170zM795 621l-35 299q-24 179 -29 350q-37 -88 -80.5 -175t-249.5 -474h394z" /> +<glyph unicode="B" horiz-adv-x="1225" d="M770 1462q432 0 432 -336q0 -141 -87 -238t-245 -126v-10q115 -32 176.5 -110.5t61.5 -188.5q0 -212 -152 -332.5t-407 -120.5h-463l309 1462h375zM434 836h248q156 0 249 73t93 199q0 104 -66.5 155.5t-209.5 51.5h-211zM287 145h266q181 0 278 80.5t97 227.5 q0 116 -74.5 177.5t-214.5 61.5h-236z" /> +<glyph unicode="C" horiz-adv-x="1198" d="M942 1331q-174 0 -311.5 -97t-218 -284.5t-80.5 -408.5q0 -187 97.5 -298.5t268.5 -111.5q139 0 322 57v-149q-86 -31 -164 -45t-188 -14q-242 0 -380 149.5t-138 407.5q0 261 105.5 485.5t283.5 342.5t403 118q197 0 348 -80l-69 -141q-138 69 -279 69z" /> +<glyph unicode="D" horiz-adv-x="1364" d="M1300 877q0 -261 -105 -461t-300 -308t-457 -108h-352l309 1462h342q276 0 419.5 -149.5t143.5 -435.5zM449 147q202 0 355 91.5t234.5 258.5t81.5 382t-103 325.5t-302 110.5h-178l-250 -1168h162z" /> +<glyph unicode="E" horiz-adv-x="1047" d="M821 0h-735l309 1462h735l-32 -153h-566l-98 -469h527l-29 -152h-529l-114 -536h565z" /> +<glyph unicode="F" horiz-adv-x="967" d="M258 0h-172l309 1462h735l-30 -153h-568l-110 -533h528l-32 -153h-529z" /> +<glyph unicode="G" horiz-adv-x="1386" d="M821 766h459l-154 -711q-216 -75 -419 -75q-264 0 -410.5 144.5t-146.5 403.5q0 269 101.5 489.5t281.5 343t399 122.5q117 0 219.5 -20t206.5 -64l-66 -152q-77 34 -165.5 59t-194.5 25q-169 0 -307.5 -101.5t-215.5 -283.5t-77 -407q0 -190 102.5 -299t286.5 -109 q154 0 260 39l96 444h-289z" /> +<glyph unicode="H" horiz-adv-x="1389" d="M1085 0h-167l143 688h-660l-145 -688h-170l309 1462h170l-131 -622h660l133 622h168z" /> +<glyph unicode="I" horiz-adv-x="559" d="M86 0l311 1462h168l-311 -1462h-168z" /> +<glyph unicode="J" horiz-adv-x="547" d="M-166 -385q-105 0 -153 25l6 147q69 -20 145 -20q100 0 165.5 62.5t90.5 182.5l307 1450h170l-309 -1468q-79 -379 -422 -379z" /> +<glyph unicode="K" horiz-adv-x="1141" d="M1034 0h-186q-72 181 -146.5 359.5t-146.5 361.5l-174 -131l-125 -590h-170l309 1462h170l-151 -710l700 710h209l-639 -637z" /> +<glyph unicode="L" horiz-adv-x="971" d="M86 0l309 1462h170l-276 -1308h565l-33 -154h-735z" /> +<glyph unicode="M" horiz-adv-x="1714" d="M676 0l-166 1296h-8q-7 -72 -28.5 -197.5t-37.5 -199.5l-190 -899h-162l309 1462h244l149 -1204h9l659 1204h266l-303 -1462h-174q126 590 193 905.5t94 392.5h-6l-717 -1298h-131z" /> +<glyph unicode="N" horiz-adv-x="1438" d="M1139 0h-181l-460 1223h-6q-32 -221 -74 -418l-172 -805h-162l309 1462h180l459 -1220h6q30 224 72 405l174 815h164z" /> +<glyph unicode="O" horiz-adv-x="1475" d="M1411 907q0 -269 -88 -481.5t-252 -329t-379 -116.5q-256 0 -399 149.5t-143 419.5q0 264 96 482t263.5 336t377.5 118q244 0 384 -154t140 -424zM874 1333q-157 0 -281 -101t-192.5 -281t-68.5 -398q0 -199 98 -310.5t266 -111.5q152 0 272.5 97.5t190.5 279.5t70 403 q0 199 -94 310.5t-261 111.5z" /> +<glyph unicode="P" horiz-adv-x="1159" d="M1159 1085q0 -248 -164 -379t-481 -131h-135l-123 -575h-170l309 1462h330q214 0 324 -94.5t110 -282.5zM410 721h133q216 0 328 91t112 267q0 125 -69.5 180.5t-213.5 55.5h-163z" /> +<glyph unicode="Q" horiz-adv-x="1475" d="M874 1333q-157 0 -281 -101t-192.5 -281t-68.5 -398q0 -199 98 -310.5t266 -111.5q158 0 279 100t187.5 280.5t66.5 399.5q0 199 -94 310.5t-261 111.5zM725 -18l-17 -2h-16q-256 0 -399 149.5t-143 419.5q0 264 96 482t263.5 336t377.5 118q244 0 384 -154t140 -424 q0 -333 -139 -576t-375 -321l274 -358h-219z" /> +<glyph unicode="R" horiz-adv-x="1165" d="M385 608l-129 -608h-170l309 1462h320q446 0 446 -366q0 -348 -368 -449l239 -647h-186l-209 608h-252zM532 1313q-102 -494 -116 -559h168q193 0 297 85t104 244q0 121 -67.5 175.5t-219.5 54.5h-166z" /> +<glyph unicode="S" horiz-adv-x="1028" d="M913 424q0 -211 -140.5 -327.5t-395.5 -116.5q-106 0 -186.5 14.5t-151.5 48.5v170q162 -84 340 -84q162 0 257 75.5t95 207.5q0 78 -52.5 137.5t-195.5 140.5q-151 85 -209.5 170t-58.5 201q0 187 132 304.5t347 117.5q99 0 184.5 -19t180.5 -65l-66 -150 q-66 38 -148 60t-151 22q-134 0 -215.5 -69.5t-81.5 -188.5q0 -54 17 -92.5t54 -72.5t142 -95q147 -88 198.5 -138t78 -110.5t26.5 -140.5z" /> +<glyph unicode="T" horiz-adv-x="1020" d="M487 0h-172l277 1311h-406l33 151h985l-30 -151h-408z" /> +<glyph unicode="U" horiz-adv-x="1384" d="M1407 1462l-205 -966q-55 -263 -197.5 -389.5t-388.5 -126.5q-230 0 -341 104t-111 299q0 81 24 201l189 878h170l-191 -891q-22 -106 -22 -188q0 -117 73 -184.5t218 -67.5q172 0 267.5 87.5t139.5 289.5l205 954h170z" /> +<glyph unicode="V" horiz-adv-x="1122" d="M479 197q61 144 162 338l479 927h191l-781 -1462h-180l-162 1462h170l97 -930q20 -196 20 -335h4z" /> +<glyph unicode="W" horiz-adv-x="1745" d="M1257 0h-170l-49 965q-8 136 -8 282h-6q-25 -72 -61 -154.5t-504 -1092.5h-174l-62 1462h170l31 -901l2 -88q0 -98 -10 -258h6q89 243 156 383l405 864h178l43 -860q9 -153 9 -304l-1 -83h9q75 224 131 354l387 893h182z" /> +<glyph unicode="X" horiz-adv-x="1063" d="M956 0h-180l-213 641l-481 -641h-186l596 776l-263 686h172l203 -563l443 563h186l-555 -694z" /> +<glyph unicode="Y" horiz-adv-x="1030" d="M537 715l489 747h193l-627 -921l-113 -541h-172l119 549l-238 913h170z" /> +<glyph unicode="Z" horiz-adv-x="1087" d="M885 0h-901l28 137l924 1170h-655l32 155h858l-26 -139l-924 -1169h697z" /> +<glyph unicode="[" horiz-adv-x="586" d="M371 -324h-387l381 1786h387l-31 -141h-227l-318 -1503h227z" /> +<glyph unicode="\" horiz-adv-x="717" d="M375 1462l217 -1462h-154l-217 1462h154z" /> +<glyph unicode="]" horiz-adv-x="586" d="M-119 -182h225l320 1503h-227l30 141h389l-380 -1786h-388z" /> +<glyph unicode="^" horiz-adv-x="1059" d="M53 553l598 920h109l266 -920h-145l-201 747l-467 -747h-160z" /> +<glyph unicode="_" horiz-adv-x="807" d="M623 -324h-811l30 140h811z" /> +<glyph unicode="`" horiz-adv-x="1135" d="M903 1241h-104q-61 61 -128.5 154t-95.5 153v21h181q43 -136 147 -303v-25z" /> +<glyph unicode="a" horiz-adv-x="1157" d="M639 1116q92 0 164 -49.5t112 -142.5h11l67 172h127l-233 -1096h-133l26 209h-8q-179 -229 -377 -229q-139 0 -218 99t-79 271q0 208 71 386t196 279t274 101zM449 119q97 0 193 92.5t156 241t60 297.5q0 103 -56 164t-147 61q-104 0 -193.5 -86t-140.5 -233t-51 -310 q0 -114 47 -170.5t132 -56.5z" /> +<glyph unicode="b" horiz-adv-x="1182" d="M545 -20q-97 0 -170.5 51t-110.5 139h-10l-70 -170h-125l330 1556h168q-51 -242 -78.5 -370.5t-75.5 -300.5h9q93 118 183.5 173.5t186.5 55.5q141 0 220 -99t79 -272q0 -209 -68.5 -386.5t-191 -277t-276.5 -99.5zM731 975q-96 0 -195.5 -95t-158 -239t-58.5 -295 q0 -110 55.5 -168.5t160.5 -58.5q99 0 184.5 81t137.5 230.5t52 317.5q0 227 -178 227z" /> +<glyph unicode="c" horiz-adv-x="922" d="M506 -20q-194 0 -301 107t-107 302q0 200 74 369t204.5 263.5t293.5 94.5q137 0 268 -51l-47 -141q-120 51 -219 51q-112 0 -204.5 -76.5t-145 -213t-52.5 -296.5q0 -128 66.5 -199t183.5 -71q72 0 136 20t126 47v-143q-124 -63 -276 -63z" /> +<glyph unicode="d" horiz-adv-x="1182" d="M639 1114q194 0 281 -190h10q17 155 45 274l78 358h166l-330 -1556h-139l22 209h-8q-101 -125 -189 -177t-182 -52q-139 0 -217 98t-78 272q0 214 72 392t194.5 275t274.5 97zM449 119q94 0 194 93.5t158.5 239t58.5 296.5q0 111 -54 169t-157 58q-101 0 -187.5 -82.5 t-139 -232t-52.5 -314.5q0 -227 179 -227z" /> +<glyph unicode="e" horiz-adv-x="1010" d="M492 -20q-184 0 -289 109t-105 302q0 188 74.5 360.5t197.5 268.5t271 96q153 0 230 -66.5t77 -185.5q0 -180 -166 -282.5t-475 -102.5h-33l-4 -80q0 -131 61.5 -204.5t190.5 -73.5q63 0 129.5 18t165.5 66v-146q-94 -44 -166 -61.5t-159 -17.5zM631 973 q-103 0 -193.5 -94t-138.5 -261h12q228 0 349.5 59.5t121.5 172.5q0 53 -36.5 88t-114.5 35z" /> +<glyph unicode="f" horiz-adv-x="641" d="M-104 -492q-69 0 -125 21v141q64 -22 112 -22q76 0 117 62t66 177l227 1082h-193l13 67l206 66l23 100q46 200 127.5 282.5t241.5 82.5q40 0 98 -11.5t90 -25.5l-43 -129q-76 29 -137 29q-87 0 -133.5 -48.5t-75.5 -177.5l-25 -108h238l-25 -127h-237l-232 -1098 q-39 -189 -120 -276t-213 -87z" /> +<glyph unicode="g" horiz-adv-x="1026" d="M1100 1096l-25 -107l-211 -24q41 -62 41 -158q0 -191 -116.5 -304.5t-311.5 -113.5q-55 0 -84 8q-139 -53 -139 -131q0 -41 33 -54.5t96 -21.5l117 -14q181 -22 262.5 -88t81.5 -194q0 -184 -146 -285t-411 -101q-194 0 -304 73.5t-110 207.5q0 105 72 182t233 131 q-78 41 -78 121q0 69 51 118.5t142 92.5q-63 32 -103 94.5t-40 145.5q0 194 119.5 318t305.5 124q78 0 154 -20h371zM35 -195q0 -77 65 -122t193 -45q182 0 284.5 63.5t102.5 179.5q0 62 -54 98t-184 50l-159 16q-120 -25 -184 -88t-64 -152zM313 680q0 -85 45 -129.5 t125 -44.5q79 0 138 42t90.5 115.5t31.5 159.5q0 82 -44 125t-126 43q-78 0 -136.5 -40.5t-91 -113t-32.5 -157.5z" /> +<glyph unicode="h" horiz-adv-x="1182" d="M729 0l148 692q18 94 18 135q0 148 -147 148q-89 0 -173.5 -59t-149 -171.5t-97.5 -271.5l-101 -473h-168l330 1556h168q-18 -82 -34.5 -159t-34 -156.5t-38 -166.5t-47.5 -189h11q94 123 185.5 176t191.5 53q131 0 202.5 -72t71.5 -204q0 -62 -23 -166 q-39 -193 -145 -672h-168z" /> +<glyph unicode="i" horiz-adv-x="520" d="M227 0h-168l234 1096h168zM340 1376q0 56 32 91.5t83 35.5q88 0 88 -90q0 -55 -33.5 -93t-77.5 -38q-40 0 -66 24.5t-26 69.5z" /> +<glyph unicode="j" horiz-adv-x="520" d="M-135 -492q-69 0 -123 21v141q61 -22 119 -22q125 0 168 205l264 1243h166l-266 -1258q-36 -171 -114.5 -250.5t-213.5 -79.5zM340 1376q0 56 32 91.5t83 35.5q86 0 86 -90q0 -55 -33.5 -93t-77.5 -38q-38 0 -64 24.5t-26 69.5z" /> +<glyph unicode="k" horiz-adv-x="999" d="M330 559l526 537h201l-469 -467l295 -629h-187l-235 524l-152 -123l-82 -401h-170l330 1556h170l-129 -602t-102 -395h4z" /> +<glyph unicode="l" horiz-adv-x="520" d="M225 0h-168l332 1556h168z" /> +<glyph unicode="m" horiz-adv-x="1786" d="M696 0l148 692q18 94 18 135q0 70 -31 109t-106 39q-84 0 -163.5 -60t-140 -171.5t-93.5 -268.5l-101 -475h-168l234 1096h139l-22 -203h10q87 119 173.5 171t178.5 52q113 0 174 -65t72 -181h8q86 125 183 185.5t196 60.5q127 0 196.5 -68t69.5 -198q0 -68 -22 -178 l-144 -672h-170l148 692q20 104 20 146q0 62 -34.5 99.5t-108.5 37.5q-81 0 -160 -58t-138.5 -164.5t-90.5 -252.5l-107 -500h-168z" /> +<glyph unicode="n" horiz-adv-x="1182" d="M729 0l148 692q20 104 20 144q0 63 -35.5 101t-113.5 38q-89 0 -173.5 -60t-149 -171t-97.5 -269l-101 -475h-168l234 1096h139l-22 -203h10q96 122 185.5 172.5t185.5 50.5q127 0 200.5 -69.5t73.5 -194.5q0 -79 -23 -180l-143 -672h-170z" /> +<glyph unicode="o" horiz-adv-x="1149" d="M643 1110q190 0 300 -112.5t110 -309.5q0 -188 -72 -355t-195 -258t-278 -91q-192 0 -301 113t-109 309q0 190 73 357.5t197 257t275 89.5zM879 711q0 115 -62.5 186.5t-169.5 71.5q-109 0 -195.5 -74t-134 -205.5t-47.5 -292.5q0 -131 63.5 -202.5t182.5 -71.5 q104 0 187 73t129.5 207.5t46.5 307.5z" /> +<glyph unicode="p" horiz-adv-x="1182" d="M545 -20q-97 0 -170 50t-113 140h-10l-4 -38q-3 -25 -10.5 -70t-114.5 -554h-166l336 1588h139l-26 -209h8q179 227 372 227q137 0 216 -97.5t79 -273.5q0 -212 -69 -389t-191 -275.5t-276 -98.5zM731 975q-96 0 -195.5 -95t-158 -239t-58.5 -295q0 -110 55.5 -168.5 t160.5 -58.5q99 0 184.5 81t137.5 230.5t52 317.5q0 227 -178 227z" /> +<glyph unicode="q" horiz-adv-x="1182" d="M641 1116q94 0 165.5 -50.5t108.5 -141.5h13l67 172h125l-336 -1588h-166l101 480q9 45 57 221h-8q-95 -121 -185 -175t-186 -54q-140 0 -219.5 97.5t-79.5 272.5q0 212 72.5 392t196 277t274.5 97zM449 119q92 0 190 92t158.5 237t60.5 300q0 105 -54.5 166t-152.5 61 q-101 0 -189 -84.5t-140 -233t-52 -311.5q0 -227 179 -227z" /> +<glyph unicode="r" horiz-adv-x="811" d="M752 1116q69 0 120 -14l-36 -150q-53 13 -105 13q-91 0 -170.5 -60t-139 -166.5t-87.5 -236.5l-107 -502h-168l234 1096h139l-22 -203h10q72 95 119 136.5t98.5 64t114.5 22.5z" /> +<glyph unicode="s" horiz-adv-x="877" d="M735 311q0 -156 -110.5 -243.5t-311.5 -87.5q-169 0 -305 69v158q70 -42 151 -65t150 -23q126 0 190 50t64 128q0 57 -35 96t-151 107q-130 73 -184 143t-54 166q0 138 101 222.5t266 84.5q171 0 330 -74l-54 -137l-56 25q-101 43 -220 43q-93 0 -146 -43.5t-53 -112.5 q0 -56 35.5 -96t146.5 -103q107 -60 153.5 -103t69.5 -92.5t23 -111.5z" /> +<glyph unicode="t" horiz-adv-x="664" d="M395 117q55 0 144 26v-129q-34 -14 -84 -24t-80 -10q-125 0 -191.5 59.5t-66.5 177.5q0 66 18 150l127 602h-172l14 73l185 78l125 228h98l-55 -252h274l-26 -127h-273l-129 -604q-18 -87 -18 -132q0 -56 29 -86t81 -30z" /> +<glyph unicode="u" horiz-adv-x="1182" d="M451 1096l-150 -695q-18 -89 -18 -139q0 -143 147 -143q88 0 173 60t150 172t99 270l100 475h166l-231 -1096h-139l22 203h-12q-98 -125 -187 -174t-184 -49q-128 0 -201 69.5t-73 198.5q0 62 22 172l146 676h170z" /> +<glyph unicode="v" horiz-adv-x="946" d="M223 0l-125 1096h168l64 -613q24 -258 24 -362h6q127 275 179 371l325 604h178l-591 -1096h-228z" /> +<glyph unicode="w" horiz-adv-x="1468" d="M831 0l-32 602q-4 94 -4 172v156h-9l-50 -118l-83 -189l-291 -623h-202l-43 1096h164l18 -594v-88q0 -147 -8 -269h6q47 124 137 322l295 629h182l37 -594q6 -168 6 -262v-53l-2 -42h6q28 86 83 218.5t323 732.5h178l-506 -1096h-205z" /> +<glyph unicode="x" horiz-adv-x="979" d="M467 434l-346 -434h-195l475 565l-239 531h170l174 -412l330 412h194l-455 -539l252 -557h-168z" /> +<glyph unicode="y" horiz-adv-x="946" d="M98 1096h168l74 -545q10 -69 19.5 -203.5t9.5 -216.5h6q35 87 87 200t77 156l325 609h178l-696 -1282q-93 -172 -184 -239t-219 -67q-72 0 -140 21v135q63 -18 131 -18q82 0 140.5 50.5t113.5 149.5l76 136z" /> +<glyph unicode="z" horiz-adv-x="909" d="M690 0h-719l23 117l694 854h-479l27 125h657l-29 -140l-680 -831h531z" /> +<glyph unicode="{" horiz-adv-x="715" d="M442 -324q-141 0 -216.5 52.5t-75.5 171.5q0 52 20 141q33 146 51.5 227.5t14.5 102.5q0 143 -209 143l32 143q118 0 189.5 43.5t93.5 147.5l68 326q34 160 117.5 224t254.5 64h33l-31 -141q-105 0 -151 -36.5t-66 -123.5l-71 -321q-28 -123 -91 -184t-167 -78v-5 q151 -41 151 -213q0 -59 -18 -131l-47 -211q-15 -58 -15 -98q0 -53 36.5 -77.5t119.5 -24.5v-142h-23z" /> +<glyph unicode="|" d="M541 1556h139v-2052h-139v2052z" /> +<glyph unicode="}" horiz-adv-x="715" d="M285 1462q144 0 220.5 -52.5t76.5 -170.5q0 -48 -21 -141l-49 -219q-16 -68 -16 -111q0 -143 209 -143l-33 -144q-119 0 -190 -43t-93 -147l-67 -326q-36 -164 -119 -226.5t-264 -62.5h-13v142q115 0 167 36t71 123l72 322q25 117 88 179.5t170 80.5v6q-150 42 -150 211 q0 59 18 131l50 213q14 65 14 99q0 53 -40.5 77.5t-139.5 24.5l28 141h11z" /> +<glyph unicode="~" d="M348 713q-54 0 -118.5 -34.5t-114.5 -86.5v151q98 109 243 109q69 0 127 -14.5t144 -51.5q64 -27 112.5 -41t98.5 -14q55 0 119.5 33t115.5 88v-150q-100 -110 -244 -110q-72 0 -135 16.5t-135 48.5q-75 32 -120 44t-93 12z" /> +<glyph unicode="¡" horiz-adv-x="530" d="M260 684h109l-176 -1057h-207zM250 950q0 76 40.5 122t110.5 46q44 0 70.5 -26t26.5 -80q0 -71 -40.5 -117.5t-105.5 -46.5q-48 0 -75 25.5t-27 76.5z" /> +<glyph unicode="¢" d="M582 -20h-125l43 215q-132 34 -203.5 137.5t-71.5 257.5q0 185 63.5 344t178.5 258.5t260 120.5l35 170h123l-37 -168q119 -9 217 -49l-47 -142q-109 52 -219 52q-112 0 -204.5 -76.5t-145 -213t-52.5 -296.5q0 -125 66 -198t184 -73q72 0 136 20t126 48v-143 q-123 -62 -286 -66z" /> +<glyph unicode="£" d="M842 1481q184 0 336 -86l-66 -133q-146 79 -278 79q-213 0 -263 -237l-69 -326h370l-26 -127h-371l-47 -219q-22 -98 -66 -166.5t-124 -111.5h725l-33 -154h-953l27 141q205 46 258 289l47 221h-200l26 127h201l76 350q75 353 430 353z" /> +<glyph unicode="¤" d="M229 723q0 117 68 215l-129 129l92 92l127 -129q103 70 217 70t215 -70l129 129l92 -90l-129 -129q70 -104 70 -217q0 -119 -70 -217l127 -127l-90 -90l-129 127q-98 -68 -215 -68q-119 0 -217 70l-127 -127l-90 90l127 127q-68 96 -68 215zM358 723q0 -103 71.5 -174.5 t174.5 -71.5q104 0 177 71.5t73 174.5q0 104 -73 177t-177 73q-102 0 -174 -72.5t-72 -177.5z" /> +<glyph unicode="¥" d="M582 715l491 747h187l-533 -770h231l-28 -133h-297l-33 -160h297l-29 -133h-295l-57 -266h-154l56 266h-291l29 133h290l33 160h-291l29 133h225l-202 770h163z" /> +<glyph unicode="¦" d="M541 1556h139v-776h-139v776zM541 281h139v-777h-139v777z" /> +<glyph unicode="§" horiz-adv-x="995" d="M174 770q0 201 238 307q-119 70 -119 203q0 127 103.5 206t279.5 79q189 0 321 -68l-53 -123q-148 60 -266 60q-102 0 -162.5 -40.5t-60.5 -109.5q0 -49 38 -83.5t162 -90.5q100 -44 149 -83.5t75 -89.5t26 -114q0 -97 -61 -180t-172 -139q114 -71 114 -189 q0 -152 -114 -237.5t-318 -85.5q-176 0 -295 61v148q56 -34 136.5 -56t156.5 -22q133 0 204 44.5t71 129.5q0 48 -50.5 89t-152.5 87q-138 61 -194 130.5t-56 166.5zM514 1010q-82 -26 -135 -87.5t-53 -131.5t50.5 -117t198.5 -111q80 44 127.5 107t47.5 131 q0 60 -49.5 105.5t-186.5 103.5z" /> +<glyph unicode="¨" horiz-adv-x="1135" d="M457 1378q0 46 28 79.5t74 33.5q78 0 78 -80q0 -49 -29.5 -83t-68.5 -34q-35 0 -58.5 22t-23.5 62zM821 1378q0 46 28 79.5t75 33.5q77 0 77 -80q0 -49 -29.5 -83t-68.5 -34q-35 0 -58.5 22t-23.5 62z" /> +<glyph unicode="©" horiz-adv-x="1704" d="M928 1059q-125 0 -191.5 -87t-66.5 -241q0 -169 65 -249.5t193 -80.5q82 0 211 43v-122q-66 -28 -113 -38t-104 -10q-192 0 -297 119.5t-105 339.5q0 208 110 330.5t300 122.5q130 0 248 -60l-60 -120q-106 53 -190 53zM139 731q0 200 100 375t275 276t377 101 q197 0 370 -97t277 -272t104 -383q0 -204 -100.5 -376.5t-273 -273.5t-377.5 -101q-207 0 -382 103.5t-272.5 276.5t-97.5 371zM244 731q0 -173 87 -323.5t237.5 -237t322.5 -86.5q174 0 323 87t236.5 235.5t87.5 324.5q0 174 -87 323t-235.5 236.5t-324.5 87.5 q-174 0 -323 -87t-236.5 -235.5t-87.5 -324.5z" /> +<glyph unicode="ª" horiz-adv-x="686" d="M498 1479q114 0 153 -103h6l37 90h86l-139 -665h-92l14 117h-4q-40 -56 -90 -93t-123 -37q-77 0 -126.5 60t-49.5 166q0 127 41.5 234.5t116.5 169t170 61.5zM381 891q61 0 112.5 49t86 137.5t34.5 167.5q0 62 -28.5 96.5t-85.5 34.5q-92 0 -154.5 -103t-62.5 -243 q0 -139 98 -139z" /> +<glyph unicode="«" horiz-adv-x="958" d="M88 584l391 374l78 -81l-297 -328l172 -387l-113 -49l-231 442v29zM483 541l367 405l86 -69l-283 -365l158 -350l-113 -49l-215 397v31z" /> +<glyph unicode="¬" d="M1047 793v-529h-140v387h-780v142h920z" /> +<glyph unicode="­" horiz-adv-x="639" d="M55 469zM55 469l35 158h479l-34 -158h-480z" /> +<glyph unicode="®" horiz-adv-x="1704" d="M139 731q0 200 100 375t275 276t377 101q197 0 370 -97t277 -272t104 -383q0 -204 -100.5 -376.5t-273 -273.5t-377.5 -101q-207 0 -382 103.5t-272.5 276.5t-97.5 371zM244 731q0 -173 87 -323.5t237.5 -237t322.5 -86.5q174 0 323 87t236.5 235.5t87.5 324.5 q0 174 -87 323t-235.5 236.5t-324.5 87.5q-174 0 -323 -87t-236.5 -235.5t-87.5 -324.5zM1194 915q0 -78 -47.5 -141t-132.5 -98l227 -385h-149l-207 352h-113v-352h-127v880h229q163 0 241.5 -63t78.5 -193zM772 762h92q195 0 195 149q0 76 -47.5 107t-149.5 31h-90v-287z " /> +<glyph unicode="¯" horiz-adv-x="782" d="M1012 1556h-785l33 132h787z" /> +<glyph unicode="°" horiz-adv-x="877" d="M215 1171q0 128 90.5 220t220.5 92q83 0 155.5 -41.5t114.5 -114t42 -156.5q0 -128 -90.5 -218.5t-221.5 -90.5t-221 90.5t-90 218.5zM328 1171q0 -80 58 -138t140 -58q83 0 140 58.5t57 137.5q0 82 -57.5 140.5t-139.5 58.5q-80 0 -139 -58.5t-59 -140.5z" /> +<glyph unicode="±" d="M516 643h-389v141h389v392h141v-392h390v-141h-390v-387h-141v387zM127 0v141h920v-141h-920z" /> +<glyph unicode="²" horiz-adv-x="717" d="M657 586h-561l23 106l264 228q115 100 158.5 149.5t63.5 93t20 90.5q0 53 -31 85t-90 32q-90 0 -195 -80l-59 90q125 101 274 101q109 0 171.5 -56.5t62.5 -150.5q0 -99 -52.5 -179.5t-197.5 -205.5l-221 -187h395z" /> +<glyph unicode="³" horiz-adv-x="717" d="M549 1036q69 -17 108 -68t39 -120q0 -132 -91 -205.5t-253 -73.5q-125 0 -233 56v127q125 -72 239 -72q205 0 205 170q0 137 -178 137h-90l22 107h95q97 0 155 41t58 112q0 60 -34.5 90.5t-93.5 30.5q-102 0 -196 -68l-55 93q109 88 268 88q114 0 178 -56t64 -151 q0 -180 -207 -234v-4z" /> +<glyph unicode="´" horiz-adv-x="1135" d="M532 1268q56 60 125.5 151.5t106.5 149.5h190v-21q-38 -49 -140 -151t-177 -156h-105v27z" /> +<glyph unicode="µ" horiz-adv-x="1194" d="M295 266q0 -147 147 -147q89 0 172 59t148.5 171t99.5 269l105 478h163l-233 -1096h-139l24 205h-12q-93 -121 -183 -173t-188 -52q-112 0 -163 96h-9q-11 -78 -22.5 -148t-83.5 -420h-164l336 1588h168l-148 -695q-18 -92 -18 -135z" /> +<glyph unicode="¶" horiz-adv-x="1341" d="M1206 -260h-114v1661h-213v-1661h-115v819q-62 -18 -146 -18q-216 0 -317.5 125t-101.5 376q0 260 109 387t341 127h557v-1816z" /> +<glyph unicode="·" horiz-adv-x="518" d="M170 587zM170 690q0 77 40.5 122.5t111.5 45.5q43 0 69.5 -26t26.5 -79q0 -71 -40 -118.5t-108 -47.5q-46 0 -73 26t-27 77z" /> +<glyph unicode="¸" horiz-adv-x="420" d="M211 -276q0 -98 -81 -157t-214 -59q-41 0 -86 9v100q38 -6 68 -6q174 0 174 110q0 46 -39 67.5t-99 29.5l101 182h106l-61 -121q131 -38 131 -155z" /> +<glyph unicode="¹" horiz-adv-x="717" d="M537 1462h118l-186 -876h-135l112 526q25 103 58 225q-25 -25 -50 -46.5t-145 -100.5l-51 90z" /> +<glyph unicode="º" horiz-adv-x="688" d="M745 1219q0 -191 -88.5 -311t-240.5 -120q-113 0 -180.5 71t-67.5 196q0 117 42 215.5t117.5 153.5t174.5 55q117 0 180 -67t63 -193zM500 1376q-102 0 -160.5 -87.5t-58.5 -229.5q0 -85 38 -127.5t107 -42.5q94 0 152.5 88.5t58.5 232.5q0 166 -137 166z" /> +<glyph unicode="»" horiz-adv-x="958" d="M872 485l-393 -370l-78 82l297 323l-172 391l113 50l233 -447v-29zM477 528l-368 -401l-86 70l282 360l-158 354l113 50l217 -402v-31z" /> +<glyph unicode="¼" horiz-adv-x="1518" d="M123 0zM1362 1462l-1086 -1462h-153l1085 1462h154zM483 1462h118l-186 -876h-135l112 526q25 103 58 225q-25 -25 -50 -46.5t-145 -100.5l-51 90zM1327 203h-129l-43 -202h-127l43 202h-365l23 101l481 579h133l-121 -563h127zM1095 320q69 322 90 395 q-20 -36 -110 -149l-205 -246h225z" /> +<glyph unicode="½" horiz-adv-x="1518" d="M66 0zM427 1462h118l-186 -876h-135l112 526q25 103 58 225q-25 -25 -50 -46.5t-145 -100.5l-51 90zM1305 1462l-1086 -1462h-153l1085 1462h154zM1343 1h-561l23 106l264 228q115 100 158.5 149.5t63.5 93t20 90.5q0 53 -31 85t-90 32q-90 0 -195 -80l-59 90 q125 101 274 101q109 0 171.5 -56.5t62.5 -150.5q0 -99 -52.5 -179.5t-197.5 -205.5l-221 -187h395z" /> +<glyph unicode="¾" horiz-adv-x="1565" d="M87 0zM517 1036q69 -17 108 -68t39 -120q0 -132 -91 -205.5t-253 -73.5q-125 0 -233 56v127q125 -72 239 -72q205 0 205 170q0 137 -178 137h-90l22 107h95q97 0 155 41t58 112q0 60 -34.5 90.5t-93.5 30.5q-102 0 -196 -68l-55 93q109 88 268 88q114 0 178 -56t64 -151 q0 -180 -207 -234v-4zM1512 1462l-1086 -1462h-153l1085 1462h154zM1477 203h-129l-43 -202h-127l43 202h-365l23 101l481 579h133l-121 -563h127zM1245 320q69 322 90 395q-20 -36 -110 -149l-205 -246h225z" /> +<glyph unicode="¿" horiz-adv-x="874" d="M657 680q-22 -130 -72 -212t-165 -175l-95 -75q-159 -127 -159 -275q0 -93 51.5 -144t147.5 -51q80 0 154 25.5t140 56.5l62 -129q-90 -48 -189 -74t-186 -26q-168 0 -259 83.5t-91 237.5q0 124 66 228t225 223q132 98 172.5 152.5t62.5 154.5h135zM760 1010 q0 -77 -40.5 -122.5t-111.5 -45.5q-43 0 -69.5 26t-26.5 78q0 71 40 118.5t107 47.5q47 0 74 -25.5t27 -76.5z" /> +<glyph unicode="À" horiz-adv-x="1137" d="M0 0zM813 465h-496l-245 -465h-189l799 1462h174l184 -1462h-170zM795 621l-35 299q-24 179 -29 350q-37 -88 -80.5 -175t-249.5 -474h394zM863 1579h-104q-61 61 -128.5 154t-95.5 153v21h181q43 -136 147 -303v-25z" /> +<glyph unicode="Á" horiz-adv-x="1137" d="M0 0zM813 465h-496l-245 -465h-189l799 1462h174l184 -1462h-170zM795 621l-35 299q-24 179 -29 350q-37 -88 -80.5 -175t-249.5 -474h394zM679 1606q56 60 125.5 151.5t106.5 149.5h190v-21q-38 -49 -140 -151t-177 -156h-105v27z" /> +<glyph unicode="Â" horiz-adv-x="1137" d="M0 0zM813 465h-496l-245 -465h-189l799 1462h174l184 -1462h-170zM795 621l-35 299q-24 179 -29 350q-37 -88 -80.5 -175t-249.5 -474h394zM1080 1579h-103q-57 48 -161 189q-134 -119 -242 -189h-109v27q145 133 204.5 197.5t82.5 103.5h158q37 -99 128 -235l42 -66v-27 z" /> +<glyph unicode="Ã" horiz-adv-x="1137" d="M0 0zM813 465h-496l-245 -465h-189l799 1462h174l184 -1462h-170zM795 621l-35 299q-24 179 -29 350q-37 -88 -80.5 -175t-249.5 -474h394zM934 1581q-40 0 -77.5 17.5t-73 39t-69 39t-65.5 17.5q-44 0 -69.5 -28.5t-47.5 -86.5h-100q58 258 231 258q44 0 83.5 -18 t75 -39.5t66.5 -39.5t58 -18q44 0 69.5 27t51.5 90h100q-66 -258 -233 -258z" /> +<glyph unicode="Ä" horiz-adv-x="1137" d="M0 0zM813 465h-496l-245 -465h-189l799 1462h174l184 -1462h-170zM795 621l-35 299q-24 179 -29 350q-37 -88 -80.5 -175t-249.5 -474h394zM523 1716q0 46 28 79.5t74 33.5q78 0 78 -80q0 -49 -29.5 -83t-68.5 -34q-35 0 -58.5 22t-23.5 62zM887 1716q0 46 28 79.5 t75 33.5q77 0 77 -80q0 -49 -29.5 -83t-68.5 -34q-35 0 -58.5 22t-23.5 62z" /> +<glyph unicode="Å" horiz-adv-x="1137" d="M0 0zM813 465h-496l-245 -465h-189l799 1462h174l184 -1462h-170zM795 621l-35 299q-24 179 -29 350q-37 -88 -80.5 -175t-249.5 -474h394zM991 1585q0 -99 -60 -157t-159 -58q-101 0 -160 57.5t-59 155.5q0 94 62 152.5t157 58.5q101 0 160 -57t59 -152zM887 1583 q0 53 -32 84t-83 31q-49 0 -82 -31t-33 -84q0 -54 29.5 -84.5t85.5 -30.5q51 0 83 30.5t32 84.5z" /> +<glyph unicode="Æ" horiz-adv-x="1673" d="M1448 0h-737l98 465h-438l-293 -465h-197l938 1462h938l-33 -153h-565l-100 -469h528l-28 -150h-529l-115 -538h566zM840 621l147 688h-84l-434 -688h371z" /> +<glyph unicode="Ç" horiz-adv-x="1198" d="M150 0zM942 1331q-174 0 -311.5 -97t-218 -284.5t-80.5 -408.5q0 -187 97.5 -298.5t268.5 -111.5q139 0 322 57v-149q-86 -31 -164 -45t-188 -14q-242 0 -380 149.5t-138 407.5q0 261 105.5 485.5t283.5 342.5t403 118q197 0 348 -80l-69 -141q-138 69 -279 69zM758 -276 q0 -98 -81 -157t-214 -59q-41 0 -86 9v100q38 -6 68 -6q174 0 174 110q0 46 -39 67.5t-99 29.5l101 182h106l-61 -121q131 -38 131 -155z" /> +<glyph unicode="È" horiz-adv-x="1047" d="M86 0zM821 0h-735l309 1462h735l-32 -153h-566l-98 -469h527l-29 -152h-529l-114 -536h565zM898 1579h-104q-61 61 -128.5 154t-95.5 153v21h181q43 -136 147 -303v-25z" /> +<glyph unicode="É" horiz-adv-x="1047" d="M86 0zM821 0h-735l309 1462h735l-32 -153h-566l-98 -469h527l-29 -152h-529l-114 -536h565zM657 1606q56 60 125.5 151.5t106.5 149.5h190v-21q-38 -49 -140 -151t-177 -156h-105v27z" /> +<glyph unicode="Ê" horiz-adv-x="1047" d="M86 0zM821 0h-735l309 1462h735l-32 -153h-566l-98 -469h527l-29 -152h-529l-114 -536h565zM1084 1579h-103q-57 48 -161 189q-134 -119 -242 -189h-109v27q145 133 204.5 197.5t82.5 103.5h158q37 -99 128 -235l42 -66v-27z" /> +<glyph unicode="Ë" horiz-adv-x="1047" d="M86 0zM821 0h-735l309 1462h735l-32 -153h-566l-98 -469h527l-29 -152h-529l-114 -536h565zM523 1716q0 46 28 79.5t74 33.5q78 0 78 -80q0 -49 -29.5 -83t-68.5 -34q-35 0 -58.5 22t-23.5 62zM887 1716q0 46 28 79.5t75 33.5q77 0 77 -80q0 -49 -29.5 -83t-68.5 -34 q-35 0 -58.5 22t-23.5 62z" /> +<glyph unicode="Ì" horiz-adv-x="559" d="M86 0zM86 0l311 1462h168l-311 -1462h-168zM593 1579h-104q-61 61 -128.5 154t-95.5 153v21h181q43 -136 147 -303v-25z" /> +<glyph unicode="Í" horiz-adv-x="559" d="M86 0zM86 0l311 1462h168l-311 -1462h-168zM412 1606q56 60 125.5 151.5t106.5 149.5h190v-21q-38 -49 -140 -151t-177 -156h-105v27z" /> +<glyph unicode="Î" horiz-adv-x="559" d="M86 0zM86 0l311 1462h168l-311 -1462h-168zM808 1579h-103q-57 48 -161 189q-134 -119 -242 -189h-109v27q145 133 204.5 197.5t82.5 103.5h158q37 -99 128 -235l42 -66v-27z" /> +<glyph unicode="Ï" horiz-adv-x="559" d="M86 0zM86 0l311 1462h168l-311 -1462h-168zM265 1716q0 46 28 79.5t74 33.5q78 0 78 -80q0 -49 -29.5 -83t-68.5 -34q-35 0 -58.5 22t-23.5 62zM629 1716q0 46 28 79.5t75 33.5q77 0 77 -80q0 -49 -29.5 -83t-68.5 -34q-35 0 -58.5 22t-23.5 62z" /> +<glyph unicode="Ð" horiz-adv-x="1364" d="M1300 877q0 -261 -105 -461t-300 -308t-457 -108h-352l135 649h-149l32 150h150l141 663h342q276 0 419.5 -149.5t143.5 -435.5zM449 147q202 0 355 91.5t234.5 258.5t81.5 382t-103 325.5t-302 110.5h-178l-111 -516h330l-33 -150h-330l-106 -502h162z" /> +<glyph unicode="Ñ" horiz-adv-x="1438" d="M84 0zM1139 0h-181l-460 1223h-6q-32 -221 -74 -418l-172 -805h-162l309 1462h180l459 -1220h6q30 224 72 405l174 815h164zM1102 1581q-40 0 -77.5 17.5t-73 39t-69 39t-65.5 17.5q-44 0 -69.5 -28.5t-47.5 -86.5h-100q58 258 231 258q44 0 83.5 -18t75 -39.5 t66.5 -39.5t58 -18q44 0 69.5 27t51.5 90h100q-66 -258 -233 -258z" /> +<glyph unicode="Ò" horiz-adv-x="1475" d="M150 0zM1411 907q0 -269 -88 -481.5t-252 -329t-379 -116.5q-256 0 -399 149.5t-143 419.5q0 264 96 482t263.5 336t377.5 118q244 0 384 -154t140 -424zM874 1333q-157 0 -281 -101t-192.5 -281t-68.5 -398q0 -199 98 -310.5t266 -111.5q152 0 272.5 97.5t190.5 279.5 t70 403q0 199 -94 310.5t-261 111.5zM1007 1579h-104q-61 61 -128.5 154t-95.5 153v21h181q43 -136 147 -303v-25z" /> +<glyph unicode="Ó" horiz-adv-x="1475" d="M150 0zM1411 907q0 -269 -88 -481.5t-252 -329t-379 -116.5q-256 0 -399 149.5t-143 419.5q0 264 96 482t263.5 336t377.5 118q244 0 384 -154t140 -424zM874 1333q-157 0 -281 -101t-192.5 -281t-68.5 -398q0 -199 98 -310.5t266 -111.5q152 0 272.5 97.5t190.5 279.5 t70 403q0 199 -94 310.5t-261 111.5zM821 1606q56 60 125.5 151.5t106.5 149.5h190v-21q-38 -49 -140 -151t-177 -156h-105v27z" /> +<glyph unicode="Ô" horiz-adv-x="1475" d="M150 0zM1411 907q0 -269 -88 -481.5t-252 -329t-379 -116.5q-256 0 -399 149.5t-143 419.5q0 264 96 482t263.5 336t377.5 118q244 0 384 -154t140 -424zM874 1333q-157 0 -281 -101t-192.5 -281t-68.5 -398q0 -199 98 -310.5t266 -111.5q152 0 272.5 97.5t190.5 279.5 t70 403q0 199 -94 310.5t-261 111.5zM1227 1579h-103q-57 48 -161 189q-134 -119 -242 -189h-109v27q145 133 204.5 197.5t82.5 103.5h158q37 -99 128 -235l42 -66v-27z" /> +<glyph unicode="Õ" horiz-adv-x="1475" d="M150 0zM1411 907q0 -269 -88 -481.5t-252 -329t-379 -116.5q-256 0 -399 149.5t-143 419.5q0 264 96 482t263.5 336t377.5 118q244 0 384 -154t140 -424zM874 1333q-157 0 -281 -101t-192.5 -281t-68.5 -398q0 -199 98 -310.5t266 -111.5q152 0 272.5 97.5t190.5 279.5 t70 403q0 199 -94 310.5t-261 111.5zM1067 1581q-40 0 -77.5 17.5t-73 39t-69 39t-65.5 17.5q-44 0 -69.5 -28.5t-47.5 -86.5h-100q58 258 231 258q44 0 83.5 -18t75 -39.5t66.5 -39.5t58 -18q44 0 69.5 27t51.5 90h100q-66 -258 -233 -258z" /> +<glyph unicode="Ö" horiz-adv-x="1475" d="M150 0zM1411 907q0 -269 -88 -481.5t-252 -329t-379 -116.5q-256 0 -399 149.5t-143 419.5q0 264 96 482t263.5 336t377.5 118q244 0 384 -154t140 -424zM874 1333q-157 0 -281 -101t-192.5 -281t-68.5 -398q0 -199 98 -310.5t266 -111.5q152 0 272.5 97.5t190.5 279.5 t70 403q0 199 -94 310.5t-261 111.5zM664 1716q0 46 28 79.5t74 33.5q78 0 78 -80q0 -49 -29.5 -83t-68.5 -34q-35 0 -58.5 22t-23.5 62zM1028 1716q0 46 28 79.5t75 33.5q77 0 77 -80q0 -49 -29.5 -83t-68.5 -34q-35 0 -58.5 22t-23.5 62z" /> +<glyph unicode="×" d="M487 723l-319 321l98 99l320 -320l323 320l99 -96l-324 -324l322 -322l-97 -96l-323 320l-320 -318l-96 96z" /> +<glyph unicode="Ø" horiz-adv-x="1475" d="M1411 907q0 -269 -88 -481.5t-252 -329t-379 -116.5q-200 0 -332 96l-129 -160l-112 92l137 170q-106 136 -106 371q0 264 96 482t263.5 336t377.5 118q99 0 178.5 -27t151.5 -84l131 166l114 -92l-149 -184q48 -62 73 -156t25 -201zM874 1333q-157 0 -281 -101 t-192.5 -281t-68.5 -398q0 -135 41 -227l737 919q-90 88 -236 88zM1229 911q0 118 -33 205l-733 -911q91 -74 233 -74q152 0 272.5 97.5t190.5 279.5t70 403z" /> +<glyph unicode="Ù" horiz-adv-x="1384" d="M164 0zM1407 1462l-205 -966q-55 -263 -197.5 -389.5t-388.5 -126.5q-230 0 -341 104t-111 299q0 81 24 201l189 878h170l-191 -891q-22 -106 -22 -188q0 -117 73 -184.5t218 -67.5q172 0 267.5 87.5t139.5 289.5l205 954h170zM991 1579h-104q-61 61 -128.5 154 t-95.5 153v21h181q43 -136 147 -303v-25z" /> +<glyph unicode="Ú" horiz-adv-x="1384" d="M164 0zM1407 1462l-205 -966q-55 -263 -197.5 -389.5t-388.5 -126.5q-230 0 -341 104t-111 299q0 81 24 201l189 878h170l-191 -891q-22 -106 -22 -188q0 -117 73 -184.5t218 -67.5q172 0 267.5 87.5t139.5 289.5l205 954h170zM823 1606q56 60 125.5 151.5t106.5 149.5 h190v-21q-38 -49 -140 -151t-177 -156h-105v27z" /> +<glyph unicode="Û" horiz-adv-x="1384" d="M164 0zM1407 1462l-205 -966q-55 -263 -197.5 -389.5t-388.5 -126.5q-230 0 -341 104t-111 299q0 81 24 201l189 878h170l-191 -891q-22 -106 -22 -188q0 -117 73 -184.5t218 -67.5q172 0 267.5 87.5t139.5 289.5l205 954h170zM1217 1579h-103q-57 48 -161 189 q-134 -119 -242 -189h-109v27q145 133 204.5 197.5t82.5 103.5h158q37 -99 128 -235l42 -66v-27z" /> +<glyph unicode="Ü" horiz-adv-x="1384" d="M164 0zM1407 1462l-205 -966q-55 -263 -197.5 -389.5t-388.5 -126.5q-230 0 -341 104t-111 299q0 81 24 201l189 878h170l-191 -891q-22 -106 -22 -188q0 -117 73 -184.5t218 -67.5q172 0 267.5 87.5t139.5 289.5l205 954h170zM643 1716q0 46 28 79.5t74 33.5 q78 0 78 -80q0 -49 -29.5 -83t-68.5 -34q-35 0 -58.5 22t-23.5 62zM1007 1716q0 46 28 79.5t75 33.5q77 0 77 -80q0 -49 -29.5 -83t-68.5 -34q-35 0 -58.5 22t-23.5 62z" /> +<glyph unicode="Ý" horiz-adv-x="1030" d="M188 0zM537 715l489 747h193l-627 -921l-113 -541h-172l119 549l-238 913h170zM616 1606q56 60 125.5 151.5t106.5 149.5h190v-21q-38 -49 -140 -151t-177 -156h-105v27z" /> +<glyph unicode="Þ" horiz-adv-x="1159" d="M1106 829q0 -248 -164 -379t-483 -131h-133l-70 -319h-170l309 1462h170l-53 -256h160q213 0 323.5 -95t110.5 -282zM354 465h135q215 0 328 91t113 267q0 126 -70 181t-215 55h-166z" /> +<glyph unicode="ß" horiz-adv-x="1182" d="M-133 -492q-69 0 -123 21v143q61 -22 111 -22q65 0 107 47.5t65 157.5l280 1314q43 200 156 299t307 99q162 0 252 -71t90 -196q0 -57 -21 -106.5t-61.5 -95t-178.5 -150.5q-110 -83 -110 -151q0 -56 95 -122q47 -34 101 -87.5t79.5 -110t25.5 -123.5 q0 -175 -108.5 -274.5t-292.5 -99.5q-175 0 -268 71v160q51 -41 118.5 -66.5t129.5 -25.5q113 0 181 58t68 159q0 40 -10.5 71t-33.5 59t-89 83q-88 69 -122.5 124t-34.5 115q0 53 18.5 96t49.5 78.5t124 104.5q80 56 111 87.5t48 65t17 70.5q0 64 -52.5 100.5t-141.5 36.5 q-119 0 -186 -62.5t-95 -190.5l-274 -1303q-40 -189 -121 -276t-211 -87z" /> +<glyph unicode="à" horiz-adv-x="1157" d="M98 0zM639 1116q92 0 164 -49.5t112 -142.5h11l67 172h127l-233 -1096h-133l26 209h-8q-179 -229 -377 -229q-139 0 -218 99t-79 271q0 208 71 386t196 279t274 101zM449 119q97 0 193 92.5t156 241t60 297.5q0 103 -56 164t-147 61q-104 0 -193.5 -86t-140.5 -233 t-51 -310q0 -114 47 -170.5t132 -56.5zM824 1241h-104q-61 61 -128.5 154t-95.5 153v21h181q43 -136 147 -303v-25z" /> +<glyph unicode="á" horiz-adv-x="1157" d="M98 0zM639 1116q92 0 164 -49.5t112 -142.5h11l67 172h127l-233 -1096h-133l26 209h-8q-179 -229 -377 -229q-139 0 -218 99t-79 271q0 208 71 386t196 279t274 101zM449 119q97 0 193 92.5t156 241t60 297.5q0 103 -56 164t-147 61q-104 0 -193.5 -86t-140.5 -233 t-51 -310q0 -114 47 -170.5t132 -56.5zM600 1268q56 60 125.5 151.5t106.5 149.5h190v-21q-38 -49 -140 -151t-177 -156h-105v27z" /> +<glyph unicode="â" horiz-adv-x="1157" d="M98 0zM639 1116q92 0 164 -49.5t112 -142.5h11l67 172h127l-233 -1096h-133l26 209h-8q-179 -229 -377 -229q-139 0 -218 99t-79 271q0 208 71 386t196 279t274 101zM449 119q97 0 193 92.5t156 241t60 297.5q0 103 -56 164t-147 61q-104 0 -193.5 -86t-140.5 -233 t-51 -310q0 -114 47 -170.5t132 -56.5zM1005 1241h-103q-57 48 -161 189q-134 -119 -242 -189h-109v27q145 133 204.5 197.5t82.5 103.5h158q37 -99 128 -235l42 -66v-27z" /> +<glyph unicode="ã" horiz-adv-x="1157" d="M98 0zM639 1116q92 0 164 -49.5t112 -142.5h11l67 172h127l-233 -1096h-133l26 209h-8q-179 -229 -377 -229q-139 0 -218 99t-79 271q0 208 71 386t196 279t274 101zM449 119q97 0 193 92.5t156 241t60 297.5q0 103 -56 164t-147 61q-104 0 -193.5 -86t-140.5 -233 t-51 -310q0 -114 47 -170.5t132 -56.5zM856 1243q-40 0 -77.5 17.5t-73 39t-69 39t-65.5 17.5q-44 0 -69.5 -28.5t-47.5 -86.5h-100q58 258 231 258q44 0 83.5 -18t75 -39.5t66.5 -39.5t58 -18q44 0 69.5 27t51.5 90h100q-66 -258 -233 -258z" /> +<glyph unicode="ä" horiz-adv-x="1157" d="M98 0zM639 1116q92 0 164 -49.5t112 -142.5h11l67 172h127l-233 -1096h-133l26 209h-8q-179 -229 -377 -229q-139 0 -218 99t-79 271q0 208 71 386t196 279t274 101zM449 119q97 0 193 92.5t156 241t60 297.5q0 103 -56 164t-147 61q-104 0 -193.5 -86t-140.5 -233 t-51 -310q0 -114 47 -170.5t132 -56.5zM454 1378q0 46 28 79.5t74 33.5q78 0 78 -80q0 -49 -29.5 -83t-68.5 -34q-35 0 -58.5 22t-23.5 62zM818 1378q0 46 28 79.5t75 33.5q77 0 77 -80q0 -49 -29.5 -83t-68.5 -34q-35 0 -58.5 22t-23.5 62z" /> +<glyph unicode="å" horiz-adv-x="1157" d="M98 0zM639 1116q92 0 164 -49.5t112 -142.5h11l67 172h127l-233 -1096h-133l26 209h-8q-179 -229 -377 -229q-139 0 -218 99t-79 271q0 208 71 386t196 279t274 101zM449 119q97 0 193 92.5t156 241t60 297.5q0 103 -56 164t-147 61q-104 0 -193.5 -86t-140.5 -233 t-51 -310q0 -114 47 -170.5t132 -56.5zM951 1456q0 -99 -60 -157t-159 -58q-101 0 -160 57.5t-59 155.5q0 94 62 152.5t157 58.5q101 0 160 -57t59 -152zM847 1454q0 53 -32 84t-83 31q-49 0 -82 -31t-33 -84q0 -54 29.5 -84.5t85.5 -30.5q51 0 83 30.5t32 84.5z" /> +<glyph unicode="æ" horiz-adv-x="1669" d="M1165 -20q-108 0 -189.5 39.5t-121.5 119.5l-31 -139h-114l26 209h-8q-109 -132 -191.5 -180.5t-177.5 -48.5q-122 0 -191 99t-69 269q0 206 70.5 385t191.5 281t263 102q82 0 145 -48.5t102 -143.5h11l67 172h109l-31 -146q123 166 332 166q119 0 192.5 -68t73.5 -184 q0 -182 -166.5 -283.5t-472.5 -101.5h-39l-4 -80q0 -131 62.5 -204.5t193.5 -73.5q55 0 116.5 16.5t178.5 67.5v-150q-164 -75 -328 -75zM412 119q95 0 188.5 91.5t153 240.5t59.5 299q0 103 -45.5 164t-122.5 61q-99 0 -187 -86.5t-138 -231.5t-50 -309q0 -114 37 -171.5 t105 -57.5zM1325 973q-117 0 -211 -94.5t-141 -260.5h14q226 0 348.5 58.5t122.5 169.5q0 61 -35 94t-98 33z" /> +<glyph unicode="ç" horiz-adv-x="922" d="M98 0zM506 -20q-194 0 -301 107t-107 302q0 200 74 369t204.5 263.5t293.5 94.5q137 0 268 -51l-47 -141q-120 51 -219 51q-112 0 -204.5 -76.5t-145 -213t-52.5 -296.5q0 -128 66.5 -199t183.5 -71q72 0 136 20t126 47v-143q-124 -63 -276 -63zM592 -276q0 -98 -81 -157 t-214 -59q-41 0 -86 9v100q38 -6 68 -6q174 0 174 110q0 46 -39 67.5t-99 29.5l101 182h106l-61 -121q131 -38 131 -155z" /> +<glyph unicode="è" horiz-adv-x="1010" d="M98 0zM492 -20q-184 0 -289 109t-105 302q0 188 74.5 360.5t197.5 268.5t271 96q153 0 230 -66.5t77 -185.5q0 -180 -166 -282.5t-475 -102.5h-33l-4 -80q0 -131 61.5 -204.5t190.5 -73.5q63 0 129.5 18t165.5 66v-146q-94 -44 -166 -61.5t-159 -17.5zM631 973 q-103 0 -193.5 -94t-138.5 -261h12q228 0 349.5 59.5t121.5 172.5q0 53 -36.5 88t-114.5 35zM777 1241h-104q-61 61 -128.5 154t-95.5 153v21h181q43 -136 147 -303v-25z" /> +<glyph unicode="é" horiz-adv-x="1010" d="M98 0zM492 -20q-184 0 -289 109t-105 302q0 188 74.5 360.5t197.5 268.5t271 96q153 0 230 -66.5t77 -185.5q0 -180 -166 -282.5t-475 -102.5h-33l-4 -80q0 -131 61.5 -204.5t190.5 -73.5q63 0 129.5 18t165.5 66v-146q-94 -44 -166 -61.5t-159 -17.5zM631 973 q-103 0 -193.5 -94t-138.5 -261h12q228 0 349.5 59.5t121.5 172.5q0 53 -36.5 88t-114.5 35zM585 1268q56 60 125.5 151.5t106.5 149.5h190v-21q-38 -49 -140 -151t-177 -156h-105v27z" /> +<glyph unicode="ê" horiz-adv-x="1010" d="M98 0zM492 -20q-184 0 -289 109t-105 302q0 188 74.5 360.5t197.5 268.5t271 96q153 0 230 -66.5t77 -185.5q0 -180 -166 -282.5t-475 -102.5h-33l-4 -80q0 -131 61.5 -204.5t190.5 -73.5q63 0 129.5 18t165.5 66v-146q-94 -44 -166 -61.5t-159 -17.5zM631 973 q-103 0 -193.5 -94t-138.5 -261h12q228 0 349.5 59.5t121.5 172.5q0 53 -36.5 88t-114.5 35zM966 1241h-103q-57 48 -161 189q-134 -119 -242 -189h-109v27q145 133 204.5 197.5t82.5 103.5h158q37 -99 128 -235l42 -66v-27z" /> +<glyph unicode="ë" horiz-adv-x="1010" d="M98 0zM492 -20q-184 0 -289 109t-105 302q0 188 74.5 360.5t197.5 268.5t271 96q153 0 230 -66.5t77 -185.5q0 -180 -166 -282.5t-475 -102.5h-33l-4 -80q0 -131 61.5 -204.5t190.5 -73.5q63 0 129.5 18t165.5 66v-146q-94 -44 -166 -61.5t-159 -17.5zM631 973 q-103 0 -193.5 -94t-138.5 -261h12q228 0 349.5 59.5t121.5 172.5q0 53 -36.5 88t-114.5 35zM413 1378q0 46 28 79.5t74 33.5q78 0 78 -80q0 -49 -29.5 -83t-68.5 -34q-35 0 -58.5 22t-23.5 62zM777 1378q0 46 28 79.5t75 33.5q77 0 77 -80q0 -49 -29.5 -83t-68.5 -34 q-35 0 -58.5 22t-23.5 62z" /> +<glyph unicode="ì" horiz-adv-x="520" d="M59 0zM227 0h-168l234 1096h168zM492 1241h-104q-61 61 -128.5 154t-95.5 153v21h181q43 -136 147 -303v-25z" /> +<glyph unicode="í" horiz-adv-x="520" d="M59 0zM227 0h-168l234 1096h168zM324 1268q56 60 125.5 151.5t106.5 149.5h190v-21q-38 -49 -140 -151t-177 -156h-105v27z" /> +<glyph unicode="î" horiz-adv-x="520" d="M59 0zM227 0h-168l234 1096h168zM708 1241h-103q-57 48 -161 189q-134 -119 -242 -189h-109v27q145 133 204.5 197.5t82.5 103.5h158q37 -99 128 -235l42 -66v-27z" /> +<glyph unicode="ï" horiz-adv-x="520" d="M59 0zM227 0h-168l234 1096h168zM161 1378q0 46 28 79.5t74 33.5q78 0 78 -80q0 -49 -29.5 -83t-68.5 -34q-35 0 -58.5 22t-23.5 62zM525 1378q0 46 28 79.5t75 33.5q77 0 77 -80q0 -49 -29.5 -83t-68.5 -34q-35 0 -58.5 22t-23.5 62z" /> +<glyph unicode="ð" horiz-adv-x="1165" d="M676 1343q-66 58 -146 113l95 117q118 -84 188 -154l260 146l64 -105l-240 -133q87 -115 126.5 -240.5t39.5 -269.5q0 -253 -71.5 -447t-203 -292t-311.5 -98q-182 0 -284.5 104t-102.5 289q0 160 67.5 298t187 217t267.5 79q105 0 181.5 -45.5t111.5 -124.5l6 2v17 q0 136 -36.5 240t-110.5 197l-270 -149l-56 108zM487 121q107 0 190 56t134 168t51 226q0 118 -65.5 187t-178.5 69q-109 0 -189 -57.5t-123.5 -161t-43.5 -231.5q0 -126 57.5 -191t167.5 -65z" /> +<glyph unicode="ñ" horiz-adv-x="1182" d="M59 0zM729 0l148 692q20 104 20 144q0 63 -35.5 101t-113.5 38q-89 0 -173.5 -60t-149 -171t-97.5 -269l-101 -475h-168l234 1096h139l-22 -203h10q96 122 185.5 172.5t185.5 50.5q127 0 200.5 -69.5t73.5 -194.5q0 -79 -23 -180l-143 -672h-170zM871 1243 q-40 0 -77.5 17.5t-73 39t-69 39t-65.5 17.5q-44 0 -69.5 -28.5t-47.5 -86.5h-100q58 258 231 258q44 0 83.5 -18t75 -39.5t66.5 -39.5t58 -18q44 0 69.5 27t51.5 90h100q-66 -258 -233 -258z" /> +<glyph unicode="ò" horiz-adv-x="1149" d="M98 0zM643 1110q190 0 300 -112.5t110 -309.5q0 -188 -72 -355t-195 -258t-278 -91q-192 0 -301 113t-109 309q0 190 73 357.5t197 257t275 89.5zM879 711q0 115 -62.5 186.5t-169.5 71.5q-109 0 -195.5 -74t-134 -205.5t-47.5 -292.5q0 -131 63.5 -202.5t182.5 -71.5 q104 0 187 73t129.5 207.5t46.5 307.5zM798 1241h-104q-61 61 -128.5 154t-95.5 153v21h181q43 -136 147 -303v-25z" /> +<glyph unicode="ó" horiz-adv-x="1149" d="M98 0zM643 1110q190 0 300 -112.5t110 -309.5q0 -188 -72 -355t-195 -258t-278 -91q-192 0 -301 113t-109 309q0 190 73 357.5t197 257t275 89.5zM879 711q0 115 -62.5 186.5t-169.5 71.5q-109 0 -195.5 -74t-134 -205.5t-47.5 -292.5q0 -131 63.5 -202.5t182.5 -71.5 q104 0 187 73t129.5 207.5t46.5 307.5zM589 1268q56 60 125.5 151.5t106.5 149.5h190v-21q-38 -49 -140 -151t-177 -156h-105v27z" /> +<glyph unicode="ô" horiz-adv-x="1149" d="M98 0zM643 1110q190 0 300 -112.5t110 -309.5q0 -188 -72 -355t-195 -258t-278 -91q-192 0 -301 113t-109 309q0 190 73 357.5t197 257t275 89.5zM879 711q0 115 -62.5 186.5t-169.5 71.5q-109 0 -195.5 -74t-134 -205.5t-47.5 -292.5q0 -131 63.5 -202.5t182.5 -71.5 q104 0 187 73t129.5 207.5t46.5 307.5zM997 1241h-103q-57 48 -161 189q-134 -119 -242 -189h-109v27q145 133 204.5 197.5t82.5 103.5h158q37 -99 128 -235l42 -66v-27z" /> +<glyph unicode="õ" horiz-adv-x="1149" d="M98 0zM643 1110q190 0 300 -112.5t110 -309.5q0 -188 -72 -355t-195 -258t-278 -91q-192 0 -301 113t-109 309q0 190 73 357.5t197 257t275 89.5zM879 711q0 115 -62.5 186.5t-169.5 71.5q-109 0 -195.5 -74t-134 -205.5t-47.5 -292.5q0 -131 63.5 -202.5t182.5 -71.5 q104 0 187 73t129.5 207.5t46.5 307.5zM844 1243q-40 0 -77.5 17.5t-73 39t-69 39t-65.5 17.5q-44 0 -69.5 -28.5t-47.5 -86.5h-100q58 258 231 258q44 0 83.5 -18t75 -39.5t66.5 -39.5t58 -18q44 0 69.5 27t51.5 90h100q-66 -258 -233 -258z" /> +<glyph unicode="ö" horiz-adv-x="1149" d="M98 0zM643 1110q190 0 300 -112.5t110 -309.5q0 -188 -72 -355t-195 -258t-278 -91q-192 0 -301 113t-109 309q0 190 73 357.5t197 257t275 89.5zM879 711q0 115 -62.5 186.5t-169.5 71.5q-109 0 -195.5 -74t-134 -205.5t-47.5 -292.5q0 -131 63.5 -202.5t182.5 -71.5 q104 0 187 73t129.5 207.5t46.5 307.5zM433 1378q0 46 28 79.5t74 33.5q78 0 78 -80q0 -49 -29.5 -83t-68.5 -34q-35 0 -58.5 22t-23.5 62zM797 1378q0 46 28 79.5t75 33.5q77 0 77 -80q0 -49 -29.5 -83t-68.5 -34q-35 0 -58.5 22t-23.5 62z" /> +<glyph unicode="÷" d="M127 651v142h920v-142h-920zM475 373q0 121 111 121q53 0 82.5 -30.5t29.5 -90.5q0 -58 -30 -89.5t-82 -31.5t-81.5 31t-29.5 90zM475 1071q0 121 111 121q53 0 82.5 -30.5t29.5 -90.5q0 -58 -30 -89.5t-82 -31.5t-81.5 31t-29.5 90z" /> +<glyph unicode="ø" horiz-adv-x="1149" d="M1047 705q0 -189 -69.5 -360t-191.5 -266t-276 -95q-146 0 -246 65l-98 -125l-105 82l109 135q-68 103 -68 265q0 194 73.5 361t195.5 255t272 88q146 0 252 -68l104 129l105 -79l-119 -129q62 -97 62 -258zM647 971q-108 0 -195.5 -73t-137.5 -202t-50 -280 q0 -92 17 -137l518 645q-54 47 -152 47zM885 688q0 84 -13 119l-514 -641q57 -45 158 -45q103 0 188.5 71.5t133 200.5t47.5 295z" /> +<glyph unicode="ù" horiz-adv-x="1182" d="M113 0zM451 1096l-150 -695q-18 -89 -18 -139q0 -143 147 -143q88 0 173 60t150 172t99 270l100 475h166l-231 -1096h-139l22 203h-12q-98 -125 -187 -174t-184 -49q-128 0 -201 69.5t-73 198.5q0 62 22 172l146 676h170zM800 1241h-104q-61 61 -128.5 154t-95.5 153v21 h181q43 -136 147 -303v-25z" /> +<glyph unicode="ú" horiz-adv-x="1182" d="M113 0zM451 1096l-150 -695q-18 -89 -18 -139q0 -143 147 -143q88 0 173 60t150 172t99 270l100 475h166l-231 -1096h-139l22 203h-12q-98 -125 -187 -174t-184 -49q-128 0 -201 69.5t-73 198.5q0 62 22 172l146 676h170zM636 1268q56 60 125.5 151.5t106.5 149.5h190 v-21q-38 -49 -140 -151t-177 -156h-105v27z" /> +<glyph unicode="û" horiz-adv-x="1182" d="M113 0zM451 1096l-150 -695q-18 -89 -18 -139q0 -143 147 -143q88 0 173 60t150 172t99 270l100 475h166l-231 -1096h-139l22 203h-12q-98 -125 -187 -174t-184 -49q-128 0 -201 69.5t-73 198.5q0 62 22 172l146 676h170zM1024 1241h-103q-57 48 -161 189 q-134 -119 -242 -189h-109v27q145 133 204.5 197.5t82.5 103.5h158q37 -99 128 -235l42 -66v-27z" /> +<glyph unicode="ü" horiz-adv-x="1182" d="M113 0zM451 1096l-150 -695q-18 -89 -18 -139q0 -143 147 -143q88 0 173 60t150 172t99 270l100 475h166l-231 -1096h-139l22 203h-12q-98 -125 -187 -174t-184 -49q-128 0 -201 69.5t-73 198.5q0 62 22 172l146 676h170zM457 1378q0 46 28 79.5t74 33.5q78 0 78 -80 q0 -49 -29.5 -83t-68.5 -34q-35 0 -58.5 22t-23.5 62zM821 1378q0 46 28 79.5t75 33.5q77 0 77 -80q0 -49 -29.5 -83t-68.5 -34q-35 0 -58.5 22t-23.5 62z" /> +<glyph unicode="ý" horiz-adv-x="946" d="M0 0zM98 1096h168l74 -545q10 -69 19.5 -203.5t9.5 -216.5h6q35 87 87 200t77 156l325 609h178l-696 -1282q-93 -172 -184 -239t-219 -67q-72 0 -140 21v135q63 -18 131 -18q82 0 140.5 50.5t113.5 149.5l76 136zM500 1268q56 60 125.5 151.5t106.5 149.5h190v-21 q-38 -49 -140 -151t-177 -156h-105v27z" /> +<glyph unicode="þ" horiz-adv-x="1182" d="M545 -20q-98 0 -172 51t-113 139h-10q-8 -104 -25 -176l-102 -486h-166l432 2048h168q-95 -441 -115 -522t-39 -149h9q101 125 189 177t183 52q139 0 218 -97.5t79 -273.5q0 -212 -69 -389t-191 -275.5t-276 -98.5zM731 975q-96 0 -195.5 -95t-158 -239t-58.5 -295 q0 -110 55.5 -168.5t160.5 -58.5q99 0 184.5 81t137.5 230.5t52 317.5q0 227 -178 227z" /> +<glyph unicode="ÿ" horiz-adv-x="946" d="M0 0zM98 1096h168l74 -545q10 -69 19.5 -203.5t9.5 -216.5h6q35 87 87 200t77 156l325 609h178l-696 -1282q-93 -172 -184 -239t-219 -67q-72 0 -140 21v135q63 -18 131 -18q82 0 140.5 50.5t113.5 149.5l76 136zM335 1378q0 46 28 79.5t74 33.5q78 0 78 -80 q0 -49 -29.5 -83t-68.5 -34q-35 0 -58.5 22t-23.5 62zM699 1378q0 46 28 79.5t75 33.5q77 0 77 -80q0 -49 -29.5 -83t-68.5 -34q-35 0 -58.5 22t-23.5 62z" /> +<glyph unicode="ı" horiz-adv-x="520" d="M227 0h-168l234 1096h168z" /> +<glyph unicode="Œ" horiz-adv-x="1751" d="M1524 0h-674q-78 -20 -158 -20q-256 0 -399 149.5t-143 419.5q0 264 96 482t263.5 336t377.5 118q152 0 237 -23h709l-31 -153h-565l-100 -469h528l-31 -150h-528l-115 -538h565zM696 131q69 0 123 19l246 1161q-76 22 -191 22q-157 0 -281 -101t-192.5 -281t-68.5 -398 q0 -199 98 -310.5t266 -111.5z" /> +<glyph unicode="œ" horiz-adv-x="1769" d="M1251 -20q-270 0 -356 225q-69 -107 -171.5 -164t-225.5 -57q-184 0 -292 114t-108 308q0 193 75 360t201 255.5t281 88.5q270 0 359 -225q75 109 177.5 170t221.5 61q139 0 217 -65.5t78 -186.5q0 -183 -164.5 -284t-468.5 -101h-41l-4 -80q0 -131 61.5 -204.5 t190.5 -73.5q75 0 145 24.5t150 59.5v-150q-162 -75 -326 -75zM649 969q-109 0 -196 -73t-135 -202t-48 -284q0 -141 62 -214t172 -73q177 0 278 160.5t101 427.5q0 124 -59.5 191t-174.5 67zM1413 973q-125 0 -220.5 -94.5t-139.5 -260.5h18q231 0 351 61t120 177 q0 48 -32 82.5t-97 34.5z" /> +<glyph unicode="Ÿ" horiz-adv-x="1030" d="M188 0zM537 715l489 747h193l-627 -921l-113 -541h-172l119 549l-238 913h170zM452 1716q0 46 28 79.5t74 33.5q78 0 78 -80q0 -49 -29.5 -83t-68.5 -34q-35 0 -58.5 22t-23.5 62zM816 1716q0 46 28 79.5t75 33.5q77 0 77 -80q0 -49 -29.5 -83t-68.5 -34q-35 0 -58.5 22 t-23.5 62z" /> +<glyph unicode="ˆ" horiz-adv-x="1135" d="M1014 1241h-103q-57 48 -161 189q-134 -119 -242 -189h-109v27q145 133 204.5 197.5t82.5 103.5h158q37 -99 128 -235l42 -66v-27z" /> +<glyph unicode="˚" horiz-adv-x="1182" d="M989 1456q0 -99 -60 -157t-159 -58q-101 0 -160 57.5t-59 155.5q0 94 62 152.5t157 58.5q101 0 160 -57t59 -152zM885 1454q0 53 -32 84t-83 31q-49 0 -82 -31t-33 -84q0 -54 29.5 -84.5t85.5 -30.5q51 0 83 30.5t32 84.5z" /> +<glyph unicode="˜" horiz-adv-x="1135" d="M838 1243q-40 0 -77.5 17.5t-73 39t-69 39t-65.5 17.5q-44 0 -69.5 -28.5t-47.5 -86.5h-100q58 258 231 258q44 0 83.5 -18t75 -39.5t66.5 -39.5t58 -18q44 0 69.5 27t51.5 90h100q-66 -258 -233 -258z" /> +<glyph unicode=" " horiz-adv-x="953" /> +<glyph unicode=" " horiz-adv-x="1907" /> +<glyph unicode=" " horiz-adv-x="953" /> +<glyph unicode=" " horiz-adv-x="1907" /> +<glyph unicode=" " horiz-adv-x="635" /> +<glyph unicode=" " horiz-adv-x="476" /> +<glyph unicode=" " horiz-adv-x="317" /> +<glyph unicode=" " horiz-adv-x="317" /> +<glyph unicode=" " horiz-adv-x="238" /> +<glyph unicode=" " horiz-adv-x="381" /> +<glyph unicode=" " horiz-adv-x="105" /> +<glyph unicode="‐" horiz-adv-x="639" d="M55 469l35 158h479l-34 -158h-480z" /> +<glyph unicode="‑" horiz-adv-x="639" d="M55 469l35 158h479l-34 -158h-480z" /> +<glyph unicode="‒" horiz-adv-x="639" d="M55 469l35 158h479l-34 -158h-480z" /> +<glyph unicode="–" horiz-adv-x="983" d="M55 469l35 160h823l-34 -160h-824z" /> +<glyph unicode="—" horiz-adv-x="1966" d="M55 469l35 160h1806l-34 -160h-1807z" /> +<glyph unicode="‘" horiz-adv-x="348" d="M129 961l-6 22q98 211 270 479h127q-147 -345 -203 -501h-188z" /> +<glyph unicode="’" horiz-adv-x="348" d="M516 1462l8 -22q-40 -91 -111 -218.5t-159 -260.5h-129q134 298 203 501h188z" /> +<glyph unicode="‚" horiz-adv-x="492" d="M291 238l8 -23q-113 -235 -270 -479h-129q126 286 204 502h187z" /> +<glyph unicode="“" horiz-adv-x="719" d="M500 961l-8 22q80 181 272 479h127q-162 -379 -203 -501h-188zM129 961l-6 22q98 211 270 479h127q-147 -345 -203 -501h-188z" /> +<glyph unicode="”" horiz-adv-x="719" d="M516 1462l8 -22q-40 -91 -111 -218.5t-159 -260.5h-129q134 298 203 501h188zM885 1462l10 -22q-94 -206 -274 -479h-127q57 126 115.5 272.5t86.5 228.5h189z" /> +<glyph unicode="„" horiz-adv-x="858" d="M291 238l8 -23q-113 -235 -270 -479h-129q126 286 204 502h187zM659 238l9 -23q-95 -205 -271 -479h-129q140 316 203 502h188z" /> +<glyph unicode="•" horiz-adv-x="774" d="M199 684q0 145 73.5 231t198.5 86q92 0 139 -49t47 -141q0 -141 -74 -230t-202 -89q-89 0 -135.5 49.5t-46.5 142.5z" /> +<glyph unicode="…" horiz-adv-x="1563" d="M43 0zM563 74q0 77 40.5 122.5t111.5 45.5q43 0 69.5 -26t26.5 -79q0 -71 -40 -118.5t-108 -47.5q-46 0 -73 26t-27 77zM1085 74q0 77 40.5 122.5t111.5 45.5q43 0 69.5 -26t26.5 -79q0 -71 -40 -118.5t-108 -47.5q-46 0 -73 26t-27 77zM43 74q0 77 40.5 122.5 t111.5 45.5q43 0 69.5 -26t26.5 -79q0 -71 -40 -118.5t-108 -47.5q-46 0 -73 26t-27 77z" /> +<glyph unicode=" " horiz-adv-x="381" /> +<glyph unicode="‹" horiz-adv-x="580" d="M88 578l391 380l78 -81l-297 -334l172 -381l-113 -49l-231 436v29z" /> +<glyph unicode="›" horiz-adv-x="580" d="M492 496l-392 -381l-77 82l296 333l-172 381l113 50l232 -437v-28z" /> +<glyph unicode="⁄" horiz-adv-x="268" d="M752 1462l-1086 -1462h-153l1085 1462h154z" /> +<glyph unicode=" " horiz-adv-x="476" /> +<glyph unicode="⁴" horiz-adv-x="717" d="M713 788h-129l-43 -202h-127l43 202h-365l23 101l481 579h133l-121 -563h127zM481 905q69 322 90 395q-20 -36 -110 -149l-205 -246h225z" /> +<glyph unicode="€" d="M928 1329q-140 0 -254 -99t-189 -298h426l-26 -133h-441q-21 -65 -32 -164h381l-29 -131h-361q0 -373 297 -373q123 0 256 55v-147q-127 -59 -278 -59q-212 0 -328.5 133.5t-116.5 378.5v12h-170l27 131h154q8 80 30 164h-151l27 133h159q97 267 259.5 408t369.5 141 q89 0 160 -21.5t141 -70.5l-80 -138q-113 78 -231 78z" /> +<glyph unicode="™" horiz-adv-x="1534" d="M438 741h-121v617h-196v104h516v-104h-199v-617zM1014 741l-189 551h-6q4 -52 4 -121v-430h-118v721h180l182 -557l193 557h170v-721h-121v430q0 73 4 121h-6l-197 -551h-96z" /> +<glyph unicode="" horiz-adv-x="1095" d="M0 1095h1095v-1095h-1095v1095z" /> +<glyph horiz-adv-x="1182" d="M0 0z" /> +<hkern u1=""" u2="Ÿ" k="-20" /> +<hkern u1=""" u2="œ" k="123" /> +<hkern u1=""" u2="ü" k="61" /> +<hkern u1=""" u2="û" k="61" /> +<hkern u1=""" u2="ú" k="61" /> +<hkern u1=""" u2="ù" k="61" /> +<hkern u1=""" u2="ø" k="123" /> +<hkern u1=""" u2="ö" k="123" /> +<hkern u1=""" u2="õ" k="123" /> +<hkern u1=""" u2="ô" k="123" /> +<hkern u1=""" u2="ó" k="123" /> +<hkern u1=""" u2="ò" k="123" /> +<hkern u1=""" u2="ë" k="123" /> +<hkern u1=""" u2="ê" k="123" /> +<hkern u1=""" u2="é" k="123" /> +<hkern u1=""" u2="è" k="123" /> +<hkern u1=""" u2="ç" k="123" /> +<hkern u1=""" u2="æ" k="82" /> +<hkern u1=""" u2="å" k="82" /> +<hkern u1=""" u2="ä" k="82" /> +<hkern u1=""" u2="ã" k="82" /> +<hkern u1=""" u2="â" k="82" /> +<hkern u1=""" u2="á" k="82" /> +<hkern u1=""" u2="à" k="123" /> +<hkern u1=""" u2="Ý" k="-20" /> +<hkern u1=""" u2="Å" k="143" /> +<hkern u1=""" u2="Ä" k="143" /> +<hkern u1=""" u2="Ã" k="143" /> +<hkern u1=""" u2="Â" k="143" /> +<hkern u1=""" u2="Á" k="143" /> +<hkern u1=""" u2="À" k="143" /> +<hkern u1=""" u2="u" k="61" /> +<hkern u1=""" u2="s" k="61" /> +<hkern u1=""" u2="r" k="61" /> +<hkern u1=""" u2="q" k="123" /> +<hkern u1=""" u2="p" k="61" /> +<hkern u1=""" u2="o" k="123" /> +<hkern u1=""" u2="n" k="61" /> +<hkern u1=""" u2="m" k="61" /> +<hkern u1=""" u2="g" k="61" /> +<hkern u1=""" u2="e" k="123" /> +<hkern u1=""" u2="d" k="123" /> +<hkern u1=""" u2="c" k="123" /> +<hkern u1=""" u2="a" k="82" /> +<hkern u1=""" u2="Y" k="-20" /> +<hkern u1=""" u2="W" k="-41" /> +<hkern u1=""" u2="V" k="-41" /> +<hkern u1=""" u2="T" k="-41" /> +<hkern u1=""" u2="A" k="143" /> +<hkern u1="'" u2="Ÿ" k="-20" /> +<hkern u1="'" u2="œ" k="123" /> +<hkern u1="'" u2="ü" k="61" /> +<hkern u1="'" u2="û" k="61" /> +<hkern u1="'" u2="ú" k="61" /> +<hkern u1="'" u2="ù" k="61" /> +<hkern u1="'" u2="ø" k="123" /> +<hkern u1="'" u2="ö" k="123" /> +<hkern u1="'" u2="õ" k="123" /> +<hkern u1="'" u2="ô" k="123" /> +<hkern u1="'" u2="ó" k="123" /> +<hkern u1="'" u2="ò" k="123" /> +<hkern u1="'" u2="ë" k="123" /> +<hkern u1="'" u2="ê" k="123" /> +<hkern u1="'" u2="é" k="123" /> +<hkern u1="'" u2="è" k="123" /> +<hkern u1="'" u2="ç" k="123" /> +<hkern u1="'" u2="æ" k="82" /> +<hkern u1="'" u2="å" k="82" /> +<hkern u1="'" u2="ä" k="82" /> +<hkern u1="'" u2="ã" k="82" /> +<hkern u1="'" u2="â" k="82" /> +<hkern u1="'" u2="á" k="82" /> +<hkern u1="'" u2="à" k="123" /> +<hkern u1="'" u2="Ý" k="-20" /> +<hkern u1="'" u2="Å" k="143" /> +<hkern u1="'" u2="Ä" k="143" /> +<hkern u1="'" u2="Ã" k="143" /> +<hkern u1="'" u2="Â" k="143" /> +<hkern u1="'" u2="Á" k="143" /> +<hkern u1="'" u2="À" k="143" /> +<hkern u1="'" u2="u" k="61" /> +<hkern u1="'" u2="s" k="61" /> +<hkern u1="'" u2="r" k="61" /> +<hkern u1="'" u2="q" k="123" /> +<hkern u1="'" u2="p" k="61" /> +<hkern u1="'" u2="o" k="123" /> +<hkern u1="'" u2="n" k="61" /> +<hkern u1="'" u2="m" k="61" /> +<hkern u1="'" u2="g" k="61" /> +<hkern u1="'" u2="e" k="123" /> +<hkern u1="'" u2="d" k="123" /> +<hkern u1="'" u2="c" k="123" /> +<hkern u1="'" u2="a" k="82" /> +<hkern u1="'" u2="Y" k="-20" /> +<hkern u1="'" u2="W" k="-41" /> +<hkern u1="'" u2="V" k="-41" /> +<hkern u1="'" u2="T" k="-41" /> +<hkern u1="'" u2="A" k="143" /> +<hkern u1="(" u2="J" k="-184" /> +<hkern u1="," u2="Ÿ" k="123" /> +<hkern u1="," u2="Œ" k="102" /> +<hkern u1="," u2="Ý" k="123" /> +<hkern u1="," u2="Ü" k="41" /> +<hkern u1="," u2="Û" k="41" /> +<hkern u1="," u2="Ú" k="41" /> +<hkern u1="," u2="Ù" k="41" /> +<hkern u1="," u2="Ø" k="102" /> +<hkern u1="," u2="Ö" k="102" /> +<hkern u1="," u2="Õ" k="102" /> +<hkern u1="," u2="Ô" k="102" /> +<hkern u1="," u2="Ó" k="102" /> +<hkern u1="," u2="Ò" k="102" /> +<hkern u1="," u2="Ç" k="102" /> +<hkern u1="," u2="Y" k="123" /> +<hkern u1="," u2="W" k="123" /> +<hkern u1="," u2="V" k="123" /> +<hkern u1="," u2="U" k="41" /> +<hkern u1="," u2="T" k="143" /> +<hkern u1="," u2="Q" k="102" /> +<hkern u1="," u2="O" k="102" /> +<hkern u1="," u2="G" k="102" /> +<hkern u1="," u2="C" k="102" /> +<hkern u1="-" u2="T" k="82" /> +<hkern u1="." u2="Ÿ" k="123" /> +<hkern u1="." u2="Œ" k="102" /> +<hkern u1="." u2="Ý" k="123" /> +<hkern u1="." u2="Ü" k="41" /> +<hkern u1="." u2="Û" k="41" /> +<hkern u1="." u2="Ú" k="41" /> +<hkern u1="." u2="Ù" k="41" /> +<hkern u1="." u2="Ø" k="102" /> +<hkern u1="." u2="Ö" k="102" /> +<hkern u1="." u2="Õ" k="102" /> +<hkern u1="." u2="Ô" k="102" /> +<hkern u1="." u2="Ó" k="102" /> +<hkern u1="." u2="Ò" k="102" /> +<hkern u1="." u2="Ç" k="102" /> +<hkern u1="." u2="Y" k="123" /> +<hkern u1="." u2="W" k="123" /> +<hkern u1="." u2="V" k="123" /> +<hkern u1="." u2="U" k="41" /> +<hkern u1="." u2="T" k="143" /> +<hkern u1="." u2="Q" k="102" /> +<hkern u1="." u2="O" k="102" /> +<hkern u1="." u2="G" k="102" /> +<hkern u1="." u2="C" k="102" /> +<hkern u1="A" u2="”" k="143" /> +<hkern u1="A" u2="’" k="143" /> +<hkern u1="A" u2="Ÿ" k="123" /> +<hkern u1="A" u2="Œ" k="41" /> +<hkern u1="A" u2="Ý" k="123" /> +<hkern u1="A" u2="Ø" k="41" /> +<hkern u1="A" u2="Ö" k="41" /> +<hkern u1="A" u2="Õ" k="41" /> +<hkern u1="A" u2="Ô" k="41" /> +<hkern u1="A" u2="Ó" k="41" /> +<hkern u1="A" u2="Ò" k="41" /> +<hkern u1="A" u2="Ç" k="41" /> +<hkern u1="A" u2="Y" k="123" /> +<hkern u1="A" u2="W" k="82" /> +<hkern u1="A" u2="V" k="82" /> +<hkern u1="A" u2="T" k="143" /> +<hkern u1="A" u2="Q" k="41" /> +<hkern u1="A" u2="O" k="41" /> +<hkern u1="A" u2="J" k="-266" /> +<hkern u1="A" u2="G" k="41" /> +<hkern u1="A" u2="C" k="41" /> +<hkern u1="A" u2="'" k="143" /> +<hkern u1="A" u2=""" k="143" /> +<hkern u1="B" u2="„" k="82" /> +<hkern u1="B" u2="‚" k="82" /> +<hkern u1="B" u2="Ÿ" k="20" /> +<hkern u1="B" u2="Ý" k="20" /> +<hkern u1="B" u2="Å" k="41" /> +<hkern u1="B" u2="Ä" k="41" /> +<hkern u1="B" u2="Ã" k="41" /> +<hkern u1="B" u2="Â" k="41" /> +<hkern u1="B" u2="Á" k="41" /> +<hkern u1="B" u2="À" k="41" /> +<hkern u1="B" u2="Z" k="20" /> +<hkern u1="B" u2="Y" k="20" /> +<hkern u1="B" u2="X" k="41" /> +<hkern u1="B" u2="W" k="20" /> +<hkern u1="B" u2="V" k="20" /> +<hkern u1="B" u2="T" k="61" /> +<hkern u1="B" u2="A" k="41" /> +<hkern u1="B" u2="." k="82" /> +<hkern u1="B" u2="," k="82" /> +<hkern u1="C" u2="Œ" k="41" /> +<hkern u1="C" u2="Ø" k="41" /> +<hkern u1="C" u2="Ö" k="41" /> +<hkern u1="C" u2="Õ" k="41" /> +<hkern u1="C" u2="Ô" k="41" /> +<hkern u1="C" u2="Ó" k="41" /> +<hkern u1="C" u2="Ò" k="41" /> +<hkern u1="C" u2="Ç" k="41" /> +<hkern u1="C" u2="Q" k="41" /> +<hkern u1="C" u2="O" k="41" /> +<hkern u1="C" u2="G" k="41" /> +<hkern u1="C" u2="C" k="41" /> +<hkern u1="D" u2="„" k="82" /> +<hkern u1="D" u2="‚" k="82" /> +<hkern u1="D" u2="Ÿ" k="20" /> +<hkern u1="D" u2="Ý" k="20" /> +<hkern u1="D" u2="Å" k="41" /> +<hkern u1="D" u2="Ä" k="41" /> +<hkern u1="D" u2="Ã" k="41" /> +<hkern u1="D" u2="Â" k="41" /> +<hkern u1="D" u2="Á" k="41" /> +<hkern u1="D" u2="À" k="41" /> +<hkern u1="D" u2="Z" k="20" /> +<hkern u1="D" u2="Y" k="20" /> +<hkern u1="D" u2="X" k="41" /> +<hkern u1="D" u2="W" k="20" /> +<hkern u1="D" u2="V" k="20" /> +<hkern u1="D" u2="T" k="61" /> +<hkern u1="D" u2="A" k="41" /> +<hkern u1="D" u2="." k="82" /> +<hkern u1="D" u2="," k="82" /> +<hkern u1="E" u2="J" k="-123" /> +<hkern u1="F" u2="„" k="123" /> +<hkern u1="F" u2="‚" k="123" /> +<hkern u1="F" u2="Å" k="41" /> +<hkern u1="F" u2="Ä" k="41" /> +<hkern u1="F" u2="Ã" k="41" /> +<hkern u1="F" u2="Â" k="41" /> +<hkern u1="F" u2="Á" k="41" /> +<hkern u1="F" u2="À" k="41" /> +<hkern u1="F" u2="A" k="41" /> +<hkern u1="F" u2="?" k="-41" /> +<hkern u1="F" u2="." k="123" /> +<hkern u1="F" u2="," k="123" /> +<hkern u1="K" u2="Œ" k="41" /> +<hkern u1="K" u2="Ø" k="41" /> +<hkern u1="K" u2="Ö" k="41" /> +<hkern u1="K" u2="Õ" k="41" /> +<hkern u1="K" u2="Ô" k="41" /> +<hkern u1="K" u2="Ó" k="41" /> +<hkern u1="K" u2="Ò" k="41" /> +<hkern u1="K" u2="Ç" k="41" /> +<hkern u1="K" u2="Q" k="41" /> +<hkern u1="K" u2="O" k="41" /> +<hkern u1="K" u2="G" k="41" /> +<hkern u1="K" u2="C" k="41" /> +<hkern u1="L" u2="”" k="164" /> +<hkern u1="L" u2="’" k="164" /> +<hkern u1="L" u2="Ÿ" k="61" /> +<hkern u1="L" u2="Œ" k="41" /> +<hkern u1="L" u2="Ý" k="61" /> +<hkern u1="L" u2="Ü" k="20" /> +<hkern u1="L" u2="Û" k="20" /> +<hkern u1="L" u2="Ú" k="20" /> +<hkern u1="L" u2="Ù" k="20" /> +<hkern u1="L" u2="Ø" k="41" /> +<hkern u1="L" u2="Ö" k="41" /> +<hkern u1="L" u2="Õ" k="41" /> +<hkern u1="L" u2="Ô" k="41" /> +<hkern u1="L" u2="Ó" k="41" /> +<hkern u1="L" u2="Ò" k="41" /> +<hkern u1="L" u2="Ç" k="41" /> +<hkern u1="L" u2="Y" k="61" /> +<hkern u1="L" u2="W" k="41" /> +<hkern u1="L" u2="V" k="41" /> +<hkern u1="L" u2="U" k="20" /> +<hkern u1="L" u2="T" k="41" /> +<hkern u1="L" u2="Q" k="41" /> +<hkern u1="L" u2="O" k="41" /> +<hkern u1="L" u2="G" k="41" /> +<hkern u1="L" u2="C" k="41" /> +<hkern u1="L" u2="'" k="164" /> +<hkern u1="L" u2=""" k="164" /> +<hkern u1="O" u2="„" k="82" /> +<hkern u1="O" u2="‚" k="82" /> +<hkern u1="O" u2="Ÿ" k="20" /> +<hkern u1="O" u2="Ý" k="20" /> +<hkern u1="O" u2="Å" k="41" /> +<hkern u1="O" u2="Ä" k="41" /> +<hkern u1="O" u2="Ã" k="41" /> +<hkern u1="O" u2="Â" k="41" /> +<hkern u1="O" u2="Á" k="41" /> +<hkern u1="O" u2="À" k="41" /> +<hkern u1="O" u2="Z" k="20" /> +<hkern u1="O" u2="Y" k="20" /> +<hkern u1="O" u2="X" k="41" /> +<hkern u1="O" u2="W" k="20" /> +<hkern u1="O" u2="V" k="20" /> +<hkern u1="O" u2="T" k="61" /> +<hkern u1="O" u2="A" k="41" /> +<hkern u1="O" u2="." k="82" /> +<hkern u1="O" u2="," k="82" /> +<hkern u1="P" u2="„" k="266" /> +<hkern u1="P" u2="‚" k="266" /> +<hkern u1="P" u2="Å" k="102" /> +<hkern u1="P" u2="Ä" k="102" /> +<hkern u1="P" u2="Ã" k="102" /> +<hkern u1="P" u2="Â" k="102" /> +<hkern u1="P" u2="Á" k="102" /> +<hkern u1="P" u2="À" k="102" /> +<hkern u1="P" u2="Z" k="20" /> +<hkern u1="P" u2="X" k="41" /> +<hkern u1="P" u2="A" k="102" /> +<hkern u1="P" u2="." k="266" /> +<hkern u1="P" u2="," k="266" /> +<hkern u1="Q" u2="„" k="82" /> +<hkern u1="Q" u2="‚" k="82" /> +<hkern u1="Q" u2="Ÿ" k="20" /> +<hkern u1="Q" u2="Ý" k="20" /> +<hkern u1="Q" u2="Å" k="41" /> +<hkern u1="Q" u2="Ä" k="41" /> +<hkern u1="Q" u2="Ã" k="41" /> +<hkern u1="Q" u2="Â" k="41" /> +<hkern u1="Q" u2="Á" k="41" /> +<hkern u1="Q" u2="À" k="41" /> +<hkern u1="Q" u2="Z" k="20" /> +<hkern u1="Q" u2="Y" k="20" /> +<hkern u1="Q" u2="X" k="41" /> +<hkern u1="Q" u2="W" k="20" /> +<hkern u1="Q" u2="V" k="20" /> +<hkern u1="Q" u2="T" k="61" /> +<hkern u1="Q" u2="A" k="41" /> +<hkern u1="Q" u2="." k="82" /> +<hkern u1="Q" u2="," k="82" /> +<hkern u1="T" u2="„" k="123" /> +<hkern u1="T" u2="‚" k="123" /> +<hkern u1="T" u2="—" k="82" /> +<hkern u1="T" u2="–" k="82" /> +<hkern u1="T" u2="œ" k="143" /> +<hkern u1="T" u2="Œ" k="41" /> +<hkern u1="T" u2="ý" k="41" /> +<hkern u1="T" u2="ü" k="102" /> +<hkern u1="T" u2="û" k="102" /> +<hkern u1="T" u2="ú" k="102" /> +<hkern u1="T" u2="ù" k="102" /> +<hkern u1="T" u2="ø" k="143" /> +<hkern u1="T" u2="ö" k="143" /> +<hkern u1="T" u2="õ" k="143" /> +<hkern u1="T" u2="ô" k="143" /> +<hkern u1="T" u2="ó" k="143" /> +<hkern u1="T" u2="ò" k="143" /> +<hkern u1="T" u2="ë" k="143" /> +<hkern u1="T" u2="ê" k="143" /> +<hkern u1="T" u2="é" k="143" /> +<hkern u1="T" u2="è" k="143" /> +<hkern u1="T" u2="ç" k="143" /> +<hkern u1="T" u2="æ" k="164" /> +<hkern u1="T" u2="å" k="164" /> +<hkern u1="T" u2="ä" k="164" /> +<hkern u1="T" u2="ã" k="164" /> +<hkern u1="T" u2="â" k="164" /> +<hkern u1="T" u2="á" k="164" /> +<hkern u1="T" u2="à" k="143" /> +<hkern u1="T" u2="Ø" k="41" /> +<hkern u1="T" u2="Ö" k="41" /> +<hkern u1="T" u2="Õ" k="41" /> +<hkern u1="T" u2="Ô" k="41" /> +<hkern u1="T" u2="Ó" k="41" /> +<hkern u1="T" u2="Ò" k="41" /> +<hkern u1="T" u2="Ç" k="41" /> +<hkern u1="T" u2="Å" k="143" /> +<hkern u1="T" u2="Ä" k="143" /> +<hkern u1="T" u2="Ã" k="143" /> +<hkern u1="T" u2="Â" k="143" /> +<hkern u1="T" u2="Á" k="143" /> +<hkern u1="T" u2="À" k="143" /> +<hkern u1="T" u2="z" k="82" /> +<hkern u1="T" u2="y" k="41" /> +<hkern u1="T" u2="x" k="41" /> +<hkern u1="T" u2="w" k="41" /> +<hkern u1="T" u2="v" k="41" /> +<hkern u1="T" u2="u" k="102" /> +<hkern u1="T" u2="s" k="123" /> +<hkern u1="T" u2="r" k="102" /> +<hkern u1="T" u2="q" k="143" /> +<hkern u1="T" u2="p" k="102" /> +<hkern u1="T" u2="o" k="143" /> +<hkern u1="T" u2="n" k="102" /> +<hkern u1="T" u2="m" k="102" /> +<hkern u1="T" u2="g" k="143" /> +<hkern u1="T" u2="e" k="143" /> +<hkern u1="T" u2="d" k="143" /> +<hkern u1="T" u2="c" k="143" /> +<hkern u1="T" u2="a" k="164" /> +<hkern u1="T" u2="T" k="-41" /> +<hkern u1="T" u2="Q" k="41" /> +<hkern u1="T" u2="O" k="41" /> +<hkern u1="T" u2="G" k="41" /> +<hkern u1="T" u2="C" k="41" /> +<hkern u1="T" u2="A" k="143" /> +<hkern u1="T" u2="?" k="-41" /> +<hkern u1="T" u2="." k="123" /> +<hkern u1="T" u2="-" k="82" /> +<hkern u1="T" u2="," k="123" /> +<hkern u1="U" u2="„" k="41" /> +<hkern u1="U" u2="‚" k="41" /> +<hkern u1="U" u2="Å" k="20" /> +<hkern u1="U" u2="Ä" k="20" /> +<hkern u1="U" u2="Ã" k="20" /> +<hkern u1="U" u2="Â" k="20" /> +<hkern u1="U" u2="Á" k="20" /> +<hkern u1="U" u2="À" k="20" /> +<hkern u1="U" u2="A" k="20" /> +<hkern u1="U" u2="." k="41" /> +<hkern u1="U" u2="," k="41" /> +<hkern u1="V" u2="„" k="102" /> +<hkern u1="V" u2="‚" k="102" /> +<hkern u1="V" u2="œ" k="41" /> +<hkern u1="V" u2="Œ" k="20" /> +<hkern u1="V" u2="ü" k="20" /> +<hkern u1="V" u2="û" k="20" /> +<hkern u1="V" u2="ú" k="20" /> +<hkern u1="V" u2="ù" k="20" /> +<hkern u1="V" u2="ø" k="41" /> +<hkern u1="V" u2="ö" k="41" /> +<hkern u1="V" u2="õ" k="41" /> +<hkern u1="V" u2="ô" k="41" /> +<hkern u1="V" u2="ó" k="41" /> +<hkern u1="V" u2="ò" k="41" /> +<hkern u1="V" u2="ë" k="41" /> +<hkern u1="V" u2="ê" k="41" /> +<hkern u1="V" u2="é" k="41" /> +<hkern u1="V" u2="è" k="41" /> +<hkern u1="V" u2="ç" k="41" /> +<hkern u1="V" u2="æ" k="41" /> +<hkern u1="V" u2="å" k="41" /> +<hkern u1="V" u2="ä" k="41" /> +<hkern u1="V" u2="ã" k="41" /> +<hkern u1="V" u2="â" k="41" /> +<hkern u1="V" u2="á" k="41" /> +<hkern u1="V" u2="à" k="41" /> +<hkern u1="V" u2="Ø" k="20" /> +<hkern u1="V" u2="Ö" k="20" /> +<hkern u1="V" u2="Õ" k="20" /> +<hkern u1="V" u2="Ô" k="20" /> +<hkern u1="V" u2="Ó" k="20" /> +<hkern u1="V" u2="Ò" k="20" /> +<hkern u1="V" u2="Ç" k="20" /> +<hkern u1="V" u2="Å" k="82" /> +<hkern u1="V" u2="Ä" k="82" /> +<hkern u1="V" u2="Ã" k="82" /> +<hkern u1="V" u2="Â" k="82" /> +<hkern u1="V" u2="Á" k="82" /> +<hkern u1="V" u2="À" k="82" /> +<hkern u1="V" u2="u" k="20" /> +<hkern u1="V" u2="s" k="20" /> +<hkern u1="V" u2="r" k="20" /> +<hkern u1="V" u2="q" k="41" /> +<hkern u1="V" u2="p" k="20" /> +<hkern u1="V" u2="o" k="41" /> +<hkern u1="V" u2="n" k="20" /> +<hkern u1="V" u2="m" k="20" /> +<hkern u1="V" u2="g" k="20" /> +<hkern u1="V" u2="e" k="41" /> +<hkern u1="V" u2="d" k="41" /> +<hkern u1="V" u2="c" k="41" /> +<hkern u1="V" u2="a" k="41" /> +<hkern u1="V" u2="Q" k="20" /> +<hkern u1="V" u2="O" k="20" /> +<hkern u1="V" u2="G" k="20" /> +<hkern u1="V" u2="C" k="20" /> +<hkern u1="V" u2="A" k="82" /> +<hkern u1="V" u2="?" k="-41" /> +<hkern u1="V" u2="." k="102" /> +<hkern u1="V" u2="," k="102" /> +<hkern u1="W" u2="„" k="102" /> +<hkern u1="W" u2="‚" k="102" /> +<hkern u1="W" u2="œ" k="41" /> +<hkern u1="W" u2="Œ" k="20" /> +<hkern u1="W" u2="ü" k="20" /> +<hkern u1="W" u2="û" k="20" /> +<hkern u1="W" u2="ú" k="20" /> +<hkern u1="W" u2="ù" k="20" /> +<hkern u1="W" u2="ø" k="41" /> +<hkern u1="W" u2="ö" k="41" /> +<hkern u1="W" u2="õ" k="41" /> +<hkern u1="W" u2="ô" k="41" /> +<hkern u1="W" u2="ó" k="41" /> +<hkern u1="W" u2="ò" k="41" /> +<hkern u1="W" u2="ë" k="41" /> +<hkern u1="W" u2="ê" k="41" /> +<hkern u1="W" u2="é" k="41" /> +<hkern u1="W" u2="è" k="41" /> +<hkern u1="W" u2="ç" k="41" /> +<hkern u1="W" u2="æ" k="41" /> +<hkern u1="W" u2="å" k="41" /> +<hkern u1="W" u2="ä" k="41" /> +<hkern u1="W" u2="ã" k="41" /> +<hkern u1="W" u2="â" k="41" /> +<hkern u1="W" u2="á" k="41" /> +<hkern u1="W" u2="à" k="41" /> +<hkern u1="W" u2="Ø" k="20" /> +<hkern u1="W" u2="Ö" k="20" /> +<hkern u1="W" u2="Õ" k="20" /> +<hkern u1="W" u2="Ô" k="20" /> +<hkern u1="W" u2="Ó" k="20" /> +<hkern u1="W" u2="Ò" k="20" /> +<hkern u1="W" u2="Ç" k="20" /> +<hkern u1="W" u2="Å" k="82" /> +<hkern u1="W" u2="Ä" k="82" /> +<hkern u1="W" u2="Ã" k="82" /> +<hkern u1="W" u2="Â" k="82" /> +<hkern u1="W" u2="Á" k="82" /> +<hkern u1="W" u2="À" k="82" /> +<hkern u1="W" u2="u" k="20" /> +<hkern u1="W" u2="s" k="20" /> +<hkern u1="W" u2="r" k="20" /> +<hkern u1="W" u2="q" k="41" /> +<hkern u1="W" u2="p" k="20" /> +<hkern u1="W" u2="o" k="41" /> +<hkern u1="W" u2="n" k="20" /> +<hkern u1="W" u2="m" k="20" /> +<hkern u1="W" u2="g" k="20" /> +<hkern u1="W" u2="e" k="41" /> +<hkern u1="W" u2="d" k="41" /> +<hkern u1="W" u2="c" k="41" /> +<hkern u1="W" u2="a" k="41" /> +<hkern u1="W" u2="Q" k="20" /> +<hkern u1="W" u2="O" k="20" /> +<hkern u1="W" u2="G" k="20" /> +<hkern u1="W" u2="C" k="20" /> +<hkern u1="W" u2="A" k="82" /> +<hkern u1="W" u2="?" k="-41" /> +<hkern u1="W" u2="." k="102" /> +<hkern u1="W" u2="," k="102" /> +<hkern u1="X" u2="Œ" k="41" /> +<hkern u1="X" u2="Ø" k="41" /> +<hkern u1="X" u2="Ö" k="41" /> +<hkern u1="X" u2="Õ" k="41" /> +<hkern u1="X" u2="Ô" k="41" /> +<hkern u1="X" u2="Ó" k="41" /> +<hkern u1="X" u2="Ò" k="41" /> +<hkern u1="X" u2="Ç" k="41" /> +<hkern u1="X" u2="Q" k="41" /> +<hkern u1="X" u2="O" k="41" /> +<hkern u1="X" u2="G" k="41" /> +<hkern u1="X" u2="C" k="41" /> +<hkern u1="Y" u2="„" k="123" /> +<hkern u1="Y" u2="‚" k="123" /> +<hkern u1="Y" u2="œ" k="102" /> +<hkern u1="Y" u2="Œ" k="41" /> +<hkern u1="Y" u2="ü" k="61" /> +<hkern u1="Y" u2="û" k="61" /> +<hkern u1="Y" u2="ú" k="61" /> +<hkern u1="Y" u2="ù" k="61" /> +<hkern u1="Y" u2="ø" k="102" /> +<hkern u1="Y" u2="ö" k="102" /> +<hkern u1="Y" u2="õ" k="102" /> +<hkern u1="Y" u2="ô" k="102" /> +<hkern u1="Y" u2="ó" k="102" /> +<hkern u1="Y" u2="ò" k="102" /> +<hkern u1="Y" u2="ë" k="102" /> +<hkern u1="Y" u2="ê" k="102" /> +<hkern u1="Y" u2="é" k="102" /> +<hkern u1="Y" u2="è" k="102" /> +<hkern u1="Y" u2="ç" k="102" /> +<hkern u1="Y" u2="æ" k="102" /> +<hkern u1="Y" u2="å" k="102" /> +<hkern u1="Y" u2="ä" k="102" /> +<hkern u1="Y" u2="ã" k="102" /> +<hkern u1="Y" u2="â" k="102" /> +<hkern u1="Y" u2="á" k="102" /> +<hkern u1="Y" u2="à" k="102" /> +<hkern u1="Y" u2="Ø" k="41" /> +<hkern u1="Y" u2="Ö" k="41" /> +<hkern u1="Y" u2="Õ" k="41" /> +<hkern u1="Y" u2="Ô" k="41" /> +<hkern u1="Y" u2="Ó" k="41" /> +<hkern u1="Y" u2="Ò" k="41" /> +<hkern u1="Y" u2="Ç" k="41" /> +<hkern u1="Y" u2="Å" k="123" /> +<hkern u1="Y" u2="Ä" k="123" /> +<hkern u1="Y" u2="Ã" k="123" /> +<hkern u1="Y" u2="Â" k="123" /> +<hkern u1="Y" u2="Á" k="123" /> +<hkern u1="Y" u2="À" k="123" /> +<hkern u1="Y" u2="z" k="41" /> +<hkern u1="Y" u2="u" k="61" /> +<hkern u1="Y" u2="s" k="82" /> +<hkern u1="Y" u2="r" k="61" /> +<hkern u1="Y" u2="q" k="102" /> +<hkern u1="Y" u2="p" k="61" /> +<hkern u1="Y" u2="o" k="102" /> +<hkern u1="Y" u2="n" k="61" /> +<hkern u1="Y" u2="m" k="61" /> +<hkern u1="Y" u2="g" k="41" /> +<hkern u1="Y" u2="e" k="102" /> +<hkern u1="Y" u2="d" k="102" /> +<hkern u1="Y" u2="c" k="102" /> +<hkern u1="Y" u2="a" k="102" /> +<hkern u1="Y" u2="Q" k="41" /> +<hkern u1="Y" u2="O" k="41" /> +<hkern u1="Y" u2="G" k="41" /> +<hkern u1="Y" u2="C" k="41" /> +<hkern u1="Y" u2="A" k="123" /> +<hkern u1="Y" u2="?" k="-41" /> +<hkern u1="Y" u2="." k="123" /> +<hkern u1="Y" u2="," k="123" /> +<hkern u1="Z" u2="Œ" k="20" /> +<hkern u1="Z" u2="Ø" k="20" /> +<hkern u1="Z" u2="Ö" k="20" /> +<hkern u1="Z" u2="Õ" k="20" /> +<hkern u1="Z" u2="Ô" k="20" /> +<hkern u1="Z" u2="Ó" k="20" /> +<hkern u1="Z" u2="Ò" k="20" /> +<hkern u1="Z" u2="Ç" k="20" /> +<hkern u1="Z" u2="Q" k="20" /> +<hkern u1="Z" u2="O" k="20" /> +<hkern u1="Z" u2="G" k="20" /> +<hkern u1="Z" u2="C" k="20" /> +<hkern u1="[" u2="J" k="-184" /> +<hkern u1="a" u2="”" k="20" /> +<hkern u1="a" u2="’" k="20" /> +<hkern u1="a" u2="'" k="20" /> +<hkern u1="a" u2=""" k="20" /> +<hkern u1="b" u2="”" k="20" /> +<hkern u1="b" u2="’" k="20" /> +<hkern u1="b" u2="ý" k="41" /> +<hkern u1="b" u2="z" k="20" /> +<hkern u1="b" u2="y" k="41" /> +<hkern u1="b" u2="x" k="41" /> +<hkern u1="b" u2="w" k="41" /> +<hkern u1="b" u2="v" k="41" /> +<hkern u1="b" u2="'" k="20" /> +<hkern u1="b" u2=""" k="20" /> +<hkern u1="c" u2="”" k="-41" /> +<hkern u1="c" u2="’" k="-41" /> +<hkern u1="c" u2="'" k="-41" /> +<hkern u1="c" u2=""" k="-41" /> +<hkern u1="e" u2="”" k="20" /> +<hkern u1="e" u2="’" k="20" /> +<hkern u1="e" u2="ý" k="41" /> +<hkern u1="e" u2="z" k="20" /> +<hkern u1="e" u2="y" k="41" /> +<hkern u1="e" u2="x" k="41" /> +<hkern u1="e" u2="w" k="41" /> +<hkern u1="e" u2="v" k="41" /> +<hkern u1="e" u2="'" k="20" /> +<hkern u1="e" u2=""" k="20" /> +<hkern u1="f" u2="”" k="-123" /> +<hkern u1="f" u2="’" k="-123" /> +<hkern u1="f" u2="'" k="-123" /> +<hkern u1="f" u2=""" k="-123" /> +<hkern u1="h" u2="”" k="20" /> +<hkern u1="h" u2="’" k="20" /> +<hkern u1="h" u2="'" k="20" /> +<hkern u1="h" u2=""" k="20" /> +<hkern u1="k" u2="œ" k="41" /> +<hkern u1="k" u2="ø" k="41" /> +<hkern u1="k" u2="ö" k="41" /> +<hkern u1="k" u2="õ" k="41" /> +<hkern u1="k" u2="ô" k="41" /> +<hkern u1="k" u2="ó" k="41" /> +<hkern u1="k" u2="ò" k="41" /> +<hkern u1="k" u2="ë" k="41" /> +<hkern u1="k" u2="ê" k="41" /> +<hkern u1="k" u2="é" k="41" /> +<hkern u1="k" u2="è" k="41" /> +<hkern u1="k" u2="ç" k="41" /> +<hkern u1="k" u2="à" k="41" /> +<hkern u1="k" u2="q" k="41" /> +<hkern u1="k" u2="o" k="41" /> +<hkern u1="k" u2="e" k="41" /> +<hkern u1="k" u2="d" k="41" /> +<hkern u1="k" u2="c" k="41" /> +<hkern u1="m" u2="”" k="20" /> +<hkern u1="m" u2="’" k="20" /> +<hkern u1="m" u2="'" k="20" /> +<hkern u1="m" u2=""" k="20" /> +<hkern u1="n" u2="”" k="20" /> +<hkern u1="n" u2="’" k="20" /> +<hkern u1="n" u2="'" k="20" /> +<hkern u1="n" u2=""" k="20" /> +<hkern u1="o" u2="”" k="20" /> +<hkern u1="o" u2="’" k="20" /> +<hkern u1="o" u2="ý" k="41" /> +<hkern u1="o" u2="z" k="20" /> +<hkern u1="o" u2="y" k="41" /> +<hkern u1="o" u2="x" k="41" /> +<hkern u1="o" u2="w" k="41" /> +<hkern u1="o" u2="v" k="41" /> +<hkern u1="o" u2="'" k="20" /> +<hkern u1="o" u2=""" k="20" /> +<hkern u1="p" u2="”" k="20" /> +<hkern u1="p" u2="’" k="20" /> +<hkern u1="p" u2="ý" k="41" /> +<hkern u1="p" u2="z" k="20" /> +<hkern u1="p" u2="y" k="41" /> +<hkern u1="p" u2="x" k="41" /> +<hkern u1="p" u2="w" k="41" /> +<hkern u1="p" u2="v" k="41" /> +<hkern u1="p" u2="'" k="20" /> +<hkern u1="p" u2=""" k="20" /> +<hkern u1="r" u2="”" k="-82" /> +<hkern u1="r" u2="’" k="-82" /> +<hkern u1="r" u2="œ" k="41" /> +<hkern u1="r" u2="ø" k="41" /> +<hkern u1="r" u2="ö" k="41" /> +<hkern u1="r" u2="õ" k="41" /> +<hkern u1="r" u2="ô" k="41" /> +<hkern u1="r" u2="ó" k="41" /> +<hkern u1="r" u2="ò" k="41" /> +<hkern u1="r" u2="ë" k="41" /> +<hkern u1="r" u2="ê" k="41" /> +<hkern u1="r" u2="é" k="41" /> +<hkern u1="r" u2="è" k="41" /> +<hkern u1="r" u2="ç" k="41" /> +<hkern u1="r" u2="æ" k="41" /> +<hkern u1="r" u2="å" k="41" /> +<hkern u1="r" u2="ä" k="41" /> +<hkern u1="r" u2="ã" k="41" /> +<hkern u1="r" u2="â" k="41" /> +<hkern u1="r" u2="á" k="41" /> +<hkern u1="r" u2="à" k="41" /> +<hkern u1="r" u2="q" k="41" /> +<hkern u1="r" u2="o" k="41" /> +<hkern u1="r" u2="g" k="20" /> +<hkern u1="r" u2="e" k="41" /> +<hkern u1="r" u2="d" k="41" /> +<hkern u1="r" u2="c" k="41" /> +<hkern u1="r" u2="a" k="41" /> +<hkern u1="r" u2="'" k="-82" /> +<hkern u1="r" u2=""" k="-82" /> +<hkern u1="t" u2="”" k="-41" /> +<hkern u1="t" u2="’" k="-41" /> +<hkern u1="t" u2="'" k="-41" /> +<hkern u1="t" u2=""" k="-41" /> +<hkern u1="v" u2="„" k="82" /> +<hkern u1="v" u2="”" k="-82" /> +<hkern u1="v" u2="‚" k="82" /> +<hkern u1="v" u2="’" k="-82" /> +<hkern u1="v" u2="?" k="-41" /> +<hkern u1="v" u2="." k="82" /> +<hkern u1="v" u2="," k="82" /> +<hkern u1="v" u2="'" k="-82" /> +<hkern u1="v" u2=""" k="-82" /> +<hkern u1="w" u2="„" k="82" /> +<hkern u1="w" u2="”" k="-82" /> +<hkern u1="w" u2="‚" k="82" /> +<hkern u1="w" u2="’" k="-82" /> +<hkern u1="w" u2="?" k="-41" /> +<hkern u1="w" u2="." k="82" /> +<hkern u1="w" u2="," k="82" /> +<hkern u1="w" u2="'" k="-82" /> +<hkern u1="w" u2=""" k="-82" /> +<hkern u1="x" u2="œ" k="41" /> +<hkern u1="x" u2="ø" k="41" /> +<hkern u1="x" u2="ö" k="41" /> +<hkern u1="x" u2="õ" k="41" /> +<hkern u1="x" u2="ô" k="41" /> +<hkern u1="x" u2="ó" k="41" /> +<hkern u1="x" u2="ò" k="41" /> +<hkern u1="x" u2="ë" k="41" /> +<hkern u1="x" u2="ê" k="41" /> +<hkern u1="x" u2="é" k="41" /> +<hkern u1="x" u2="è" k="41" /> +<hkern u1="x" u2="ç" k="41" /> +<hkern u1="x" u2="à" k="41" /> +<hkern u1="x" u2="q" k="41" /> +<hkern u1="x" u2="o" k="41" /> +<hkern u1="x" u2="e" k="41" /> +<hkern u1="x" u2="d" k="41" /> +<hkern u1="x" u2="c" k="41" /> +<hkern u1="y" u2="„" k="82" /> +<hkern u1="y" u2="”" k="-82" /> +<hkern u1="y" u2="‚" k="82" /> +<hkern u1="y" u2="’" k="-82" /> +<hkern u1="y" u2="?" k="-41" /> +<hkern u1="y" u2="." k="82" /> +<hkern u1="y" u2="," k="82" /> +<hkern u1="y" u2="'" k="-82" /> +<hkern u1="y" u2=""" k="-82" /> +<hkern u1="{" u2="J" k="-184" /> +<hkern u1="À" u2="”" k="143" /> +<hkern u1="À" u2="’" k="143" /> +<hkern u1="À" u2="Ÿ" k="123" /> +<hkern u1="À" u2="Œ" k="41" /> +<hkern u1="À" u2="Ý" k="123" /> +<hkern u1="À" u2="Ø" k="41" /> +<hkern u1="À" u2="Ö" k="41" /> +<hkern u1="À" u2="Õ" k="41" /> +<hkern u1="À" u2="Ô" k="41" /> +<hkern u1="À" u2="Ó" k="41" /> +<hkern u1="À" u2="Ò" k="41" /> +<hkern u1="À" u2="Ç" k="41" /> +<hkern u1="À" u2="Y" k="123" /> +<hkern u1="À" u2="W" k="82" /> +<hkern u1="À" u2="V" k="82" /> +<hkern u1="À" u2="T" k="143" /> +<hkern u1="À" u2="Q" k="41" /> +<hkern u1="À" u2="O" k="41" /> +<hkern u1="À" u2="J" k="-266" /> +<hkern u1="À" u2="G" k="41" /> +<hkern u1="À" u2="C" k="41" /> +<hkern u1="À" u2="'" k="143" /> +<hkern u1="À" u2=""" k="143" /> +<hkern u1="Á" u2="”" k="143" /> +<hkern u1="Á" u2="’" k="143" /> +<hkern u1="Á" u2="Ÿ" k="123" /> +<hkern u1="Á" u2="Œ" k="41" /> +<hkern u1="Á" u2="Ý" k="123" /> +<hkern u1="Á" u2="Ø" k="41" /> +<hkern u1="Á" u2="Ö" k="41" /> +<hkern u1="Á" u2="Õ" k="41" /> +<hkern u1="Á" u2="Ô" k="41" /> +<hkern u1="Á" u2="Ó" k="41" /> +<hkern u1="Á" u2="Ò" k="41" /> +<hkern u1="Á" u2="Ç" k="41" /> +<hkern u1="Á" u2="Y" k="123" /> +<hkern u1="Á" u2="W" k="82" /> +<hkern u1="Á" u2="V" k="82" /> +<hkern u1="Á" u2="T" k="143" /> +<hkern u1="Á" u2="Q" k="41" /> +<hkern u1="Á" u2="O" k="41" /> +<hkern u1="Á" u2="J" k="-266" /> +<hkern u1="Á" u2="G" k="41" /> +<hkern u1="Á" u2="C" k="41" /> +<hkern u1="Á" u2="'" k="143" /> +<hkern u1="Á" u2=""" k="143" /> +<hkern u1="Â" u2="”" k="143" /> +<hkern u1="Â" u2="’" k="143" /> +<hkern u1="Â" u2="Ÿ" k="123" /> +<hkern u1="Â" u2="Œ" k="41" /> +<hkern u1="Â" u2="Ý" k="123" /> +<hkern u1="Â" u2="Ø" k="41" /> +<hkern u1="Â" u2="Ö" k="41" /> +<hkern u1="Â" u2="Õ" k="41" /> +<hkern u1="Â" u2="Ô" k="41" /> +<hkern u1="Â" u2="Ó" k="41" /> +<hkern u1="Â" u2="Ò" k="41" /> +<hkern u1="Â" u2="Ç" k="41" /> +<hkern u1="Â" u2="Y" k="123" /> +<hkern u1="Â" u2="W" k="82" /> +<hkern u1="Â" u2="V" k="82" /> +<hkern u1="Â" u2="T" k="143" /> +<hkern u1="Â" u2="Q" k="41" /> +<hkern u1="Â" u2="O" k="41" /> +<hkern u1="Â" u2="J" k="-266" /> +<hkern u1="Â" u2="G" k="41" /> +<hkern u1="Â" u2="C" k="41" /> +<hkern u1="Â" u2="'" k="143" /> +<hkern u1="Â" u2=""" k="143" /> +<hkern u1="Ã" u2="”" k="143" /> +<hkern u1="Ã" u2="’" k="143" /> +<hkern u1="Ã" u2="Ÿ" k="123" /> +<hkern u1="Ã" u2="Œ" k="41" /> +<hkern u1="Ã" u2="Ý" k="123" /> +<hkern u1="Ã" u2="Ø" k="41" /> +<hkern u1="Ã" u2="Ö" k="41" /> +<hkern u1="Ã" u2="Õ" k="41" /> +<hkern u1="Ã" u2="Ô" k="41" /> +<hkern u1="Ã" u2="Ó" k="41" /> +<hkern u1="Ã" u2="Ò" k="41" /> +<hkern u1="Ã" u2="Ç" k="41" /> +<hkern u1="Ã" u2="Y" k="123" /> +<hkern u1="Ã" u2="W" k="82" /> +<hkern u1="Ã" u2="V" k="82" /> +<hkern u1="Ã" u2="T" k="143" /> +<hkern u1="Ã" u2="Q" k="41" /> +<hkern u1="Ã" u2="O" k="41" /> +<hkern u1="Ã" u2="J" k="-266" /> +<hkern u1="Ã" u2="G" k="41" /> +<hkern u1="Ã" u2="C" k="41" /> +<hkern u1="Ã" u2="'" k="143" /> +<hkern u1="Ã" u2=""" k="143" /> +<hkern u1="Ä" u2="”" k="143" /> +<hkern u1="Ä" u2="’" k="143" /> +<hkern u1="Ä" u2="Ÿ" k="123" /> +<hkern u1="Ä" u2="Œ" k="41" /> +<hkern u1="Ä" u2="Ý" k="123" /> +<hkern u1="Ä" u2="Ø" k="41" /> +<hkern u1="Ä" u2="Ö" k="41" /> +<hkern u1="Ä" u2="Õ" k="41" /> +<hkern u1="Ä" u2="Ô" k="41" /> +<hkern u1="Ä" u2="Ó" k="41" /> +<hkern u1="Ä" u2="Ò" k="41" /> +<hkern u1="Ä" u2="Ç" k="41" /> +<hkern u1="Ä" u2="Y" k="123" /> +<hkern u1="Ä" u2="W" k="82" /> +<hkern u1="Ä" u2="V" k="82" /> +<hkern u1="Ä" u2="T" k="143" /> +<hkern u1="Ä" u2="Q" k="41" /> +<hkern u1="Ä" u2="O" k="41" /> +<hkern u1="Ä" u2="J" k="-266" /> +<hkern u1="Ä" u2="G" k="41" /> +<hkern u1="Ä" u2="C" k="41" /> +<hkern u1="Ä" u2="'" k="143" /> +<hkern u1="Ä" u2=""" k="143" /> +<hkern u1="Å" u2="”" k="143" /> +<hkern u1="Å" u2="’" k="143" /> +<hkern u1="Å" u2="Ÿ" k="123" /> +<hkern u1="Å" u2="Œ" k="41" /> +<hkern u1="Å" u2="Ý" k="123" /> +<hkern u1="Å" u2="Ø" k="41" /> +<hkern u1="Å" u2="Ö" k="41" /> +<hkern u1="Å" u2="Õ" k="41" /> +<hkern u1="Å" u2="Ô" k="41" /> +<hkern u1="Å" u2="Ó" k="41" /> +<hkern u1="Å" u2="Ò" k="41" /> +<hkern u1="Å" u2="Ç" k="41" /> +<hkern u1="Å" u2="Y" k="123" /> +<hkern u1="Å" u2="W" k="82" /> +<hkern u1="Å" u2="V" k="82" /> +<hkern u1="Å" u2="T" k="143" /> +<hkern u1="Å" u2="Q" k="41" /> +<hkern u1="Å" u2="O" k="41" /> +<hkern u1="Å" u2="J" k="-266" /> +<hkern u1="Å" u2="G" k="41" /> +<hkern u1="Å" u2="C" k="41" /> +<hkern u1="Å" u2="'" k="143" /> +<hkern u1="Å" u2=""" k="143" /> +<hkern u1="Æ" u2="J" k="-123" /> +<hkern u1="Ç" u2="Œ" k="41" /> +<hkern u1="Ç" u2="Ø" k="41" /> +<hkern u1="Ç" u2="Ö" k="41" /> +<hkern u1="Ç" u2="Õ" k="41" /> +<hkern u1="Ç" u2="Ô" k="41" /> +<hkern u1="Ç" u2="Ó" k="41" /> +<hkern u1="Ç" u2="Ò" k="41" /> +<hkern u1="Ç" u2="Ç" k="41" /> +<hkern u1="Ç" u2="Q" k="41" /> +<hkern u1="Ç" u2="O" k="41" /> +<hkern u1="Ç" u2="G" k="41" /> +<hkern u1="Ç" u2="C" k="41" /> +<hkern u1="È" u2="J" k="-123" /> +<hkern u1="É" u2="J" k="-123" /> +<hkern u1="Ê" u2="J" k="-123" /> +<hkern u1="Ë" u2="J" k="-123" /> +<hkern u1="Ð" u2="„" k="82" /> +<hkern u1="Ð" u2="‚" k="82" /> +<hkern u1="Ð" u2="Ÿ" k="20" /> +<hkern u1="Ð" u2="Ý" k="20" /> +<hkern u1="Ð" u2="Å" k="41" /> +<hkern u1="Ð" u2="Ä" k="41" /> +<hkern u1="Ð" u2="Ã" k="41" /> +<hkern u1="Ð" u2="Â" k="41" /> +<hkern u1="Ð" u2="Á" k="41" /> +<hkern u1="Ð" u2="À" k="41" /> +<hkern u1="Ð" u2="Z" k="20" /> +<hkern u1="Ð" u2="Y" k="20" /> +<hkern u1="Ð" u2="X" k="41" /> +<hkern u1="Ð" u2="W" k="20" /> +<hkern u1="Ð" u2="V" k="20" /> +<hkern u1="Ð" u2="T" k="61" /> +<hkern u1="Ð" u2="A" k="41" /> +<hkern u1="Ð" u2="." k="82" /> +<hkern u1="Ð" u2="," k="82" /> +<hkern u1="Ò" u2="„" k="82" /> +<hkern u1="Ò" u2="‚" k="82" /> +<hkern u1="Ò" u2="Ÿ" k="20" /> +<hkern u1="Ò" u2="Ý" k="20" /> +<hkern u1="Ò" u2="Å" k="41" /> +<hkern u1="Ò" u2="Ä" k="41" /> +<hkern u1="Ò" u2="Ã" k="41" /> +<hkern u1="Ò" u2="Â" k="41" /> +<hkern u1="Ò" u2="Á" k="41" /> +<hkern u1="Ò" u2="À" k="41" /> +<hkern u1="Ò" u2="Z" k="20" /> +<hkern u1="Ò" u2="Y" k="20" /> +<hkern u1="Ò" u2="X" k="41" /> +<hkern u1="Ò" u2="W" k="20" /> +<hkern u1="Ò" u2="V" k="20" /> +<hkern u1="Ò" u2="T" k="61" /> +<hkern u1="Ò" u2="A" k="41" /> +<hkern u1="Ò" u2="." k="82" /> +<hkern u1="Ò" u2="," k="82" /> +<hkern u1="Ó" u2="„" k="82" /> +<hkern u1="Ó" u2="‚" k="82" /> +<hkern u1="Ó" u2="Ÿ" k="20" /> +<hkern u1="Ó" u2="Ý" k="20" /> +<hkern u1="Ó" u2="Å" k="41" /> +<hkern u1="Ó" u2="Ä" k="41" /> +<hkern u1="Ó" u2="Ã" k="41" /> +<hkern u1="Ó" u2="Â" k="41" /> +<hkern u1="Ó" u2="Á" k="41" /> +<hkern u1="Ó" u2="À" k="41" /> +<hkern u1="Ó" u2="Z" k="20" /> +<hkern u1="Ó" u2="Y" k="20" /> +<hkern u1="Ó" u2="X" k="41" /> +<hkern u1="Ó" u2="W" k="20" /> +<hkern u1="Ó" u2="V" k="20" /> +<hkern u1="Ó" u2="T" k="61" /> +<hkern u1="Ó" u2="A" k="41" /> +<hkern u1="Ó" u2="." k="82" /> +<hkern u1="Ó" u2="," k="82" /> +<hkern u1="Ô" u2="„" k="82" /> +<hkern u1="Ô" u2="‚" k="82" /> +<hkern u1="Ô" u2="Ÿ" k="20" /> +<hkern u1="Ô" u2="Ý" k="20" /> +<hkern u1="Ô" u2="Å" k="41" /> +<hkern u1="Ô" u2="Ä" k="41" /> +<hkern u1="Ô" u2="Ã" k="41" /> +<hkern u1="Ô" u2="Â" k="41" /> +<hkern u1="Ô" u2="Á" k="41" /> +<hkern u1="Ô" u2="À" k="41" /> +<hkern u1="Ô" u2="Z" k="20" /> +<hkern u1="Ô" u2="Y" k="20" /> +<hkern u1="Ô" u2="X" k="41" /> +<hkern u1="Ô" u2="W" k="20" /> +<hkern u1="Ô" u2="V" k="20" /> +<hkern u1="Ô" u2="T" k="61" /> +<hkern u1="Ô" u2="A" k="41" /> +<hkern u1="Ô" u2="." k="82" /> +<hkern u1="Ô" u2="," k="82" /> +<hkern u1="Õ" u2="„" k="82" /> +<hkern u1="Õ" u2="‚" k="82" /> +<hkern u1="Õ" u2="Ÿ" k="20" /> +<hkern u1="Õ" u2="Ý" k="20" /> +<hkern u1="Õ" u2="Å" k="41" /> +<hkern u1="Õ" u2="Ä" k="41" /> +<hkern u1="Õ" u2="Ã" k="41" /> +<hkern u1="Õ" u2="Â" k="41" /> +<hkern u1="Õ" u2="Á" k="41" /> +<hkern u1="Õ" u2="À" k="41" /> +<hkern u1="Õ" u2="Z" k="20" /> +<hkern u1="Õ" u2="Y" k="20" /> +<hkern u1="Õ" u2="X" k="41" /> +<hkern u1="Õ" u2="W" k="20" /> +<hkern u1="Õ" u2="V" k="20" /> +<hkern u1="Õ" u2="T" k="61" /> +<hkern u1="Õ" u2="A" k="41" /> +<hkern u1="Õ" u2="." k="82" /> +<hkern u1="Õ" u2="," k="82" /> +<hkern u1="Ö" u2="„" k="82" /> +<hkern u1="Ö" u2="‚" k="82" /> +<hkern u1="Ö" u2="Ÿ" k="20" /> +<hkern u1="Ö" u2="Ý" k="20" /> +<hkern u1="Ö" u2="Å" k="41" /> +<hkern u1="Ö" u2="Ä" k="41" /> +<hkern u1="Ö" u2="Ã" k="41" /> +<hkern u1="Ö" u2="Â" k="41" /> +<hkern u1="Ö" u2="Á" k="41" /> +<hkern u1="Ö" u2="À" k="41" /> +<hkern u1="Ö" u2="Z" k="20" /> +<hkern u1="Ö" u2="Y" k="20" /> +<hkern u1="Ö" u2="X" k="41" /> +<hkern u1="Ö" u2="W" k="20" /> +<hkern u1="Ö" u2="V" k="20" /> +<hkern u1="Ö" u2="T" k="61" /> +<hkern u1="Ö" u2="A" k="41" /> +<hkern u1="Ö" u2="." k="82" /> +<hkern u1="Ö" u2="," k="82" /> +<hkern u1="Ø" u2="„" k="82" /> +<hkern u1="Ø" u2="‚" k="82" /> +<hkern u1="Ø" u2="Ÿ" k="20" /> +<hkern u1="Ø" u2="Ý" k="20" /> +<hkern u1="Ø" u2="Å" k="41" /> +<hkern u1="Ø" u2="Ä" k="41" /> +<hkern u1="Ø" u2="Ã" k="41" /> +<hkern u1="Ø" u2="Â" k="41" /> +<hkern u1="Ø" u2="Á" k="41" /> +<hkern u1="Ø" u2="À" k="41" /> +<hkern u1="Ø" u2="Z" k="20" /> +<hkern u1="Ø" u2="Y" k="20" /> +<hkern u1="Ø" u2="X" k="41" /> +<hkern u1="Ø" u2="W" k="20" /> +<hkern u1="Ø" u2="V" k="20" /> +<hkern u1="Ø" u2="T" k="61" /> +<hkern u1="Ø" u2="A" k="41" /> +<hkern u1="Ø" u2="." k="82" /> +<hkern u1="Ø" u2="," k="82" /> +<hkern u1="Ù" u2="„" k="41" /> +<hkern u1="Ù" u2="‚" k="41" /> +<hkern u1="Ù" u2="Å" k="20" /> +<hkern u1="Ù" u2="Ä" k="20" /> +<hkern u1="Ù" u2="Ã" k="20" /> +<hkern u1="Ù" u2="Â" k="20" /> +<hkern u1="Ù" u2="Á" k="20" /> +<hkern u1="Ù" u2="À" k="20" /> +<hkern u1="Ù" u2="A" k="20" /> +<hkern u1="Ù" u2="." k="41" /> +<hkern u1="Ù" u2="," k="41" /> +<hkern u1="Ú" u2="„" k="41" /> +<hkern u1="Ú" u2="‚" k="41" /> +<hkern u1="Ú" u2="Å" k="20" /> +<hkern u1="Ú" u2="Ä" k="20" /> +<hkern u1="Ú" u2="Ã" k="20" /> +<hkern u1="Ú" u2="Â" k="20" /> +<hkern u1="Ú" u2="Á" k="20" /> +<hkern u1="Ú" u2="À" k="20" /> +<hkern u1="Ú" u2="A" k="20" /> +<hkern u1="Ú" u2="." k="41" /> +<hkern u1="Ú" u2="," k="41" /> +<hkern u1="Û" u2="„" k="41" /> +<hkern u1="Û" u2="‚" k="41" /> +<hkern u1="Û" u2="Å" k="20" /> +<hkern u1="Û" u2="Ä" k="20" /> +<hkern u1="Û" u2="Ã" k="20" /> +<hkern u1="Û" u2="Â" k="20" /> +<hkern u1="Û" u2="Á" k="20" /> +<hkern u1="Û" u2="À" k="20" /> +<hkern u1="Û" u2="A" k="20" /> +<hkern u1="Û" u2="." k="41" /> +<hkern u1="Û" u2="," k="41" /> +<hkern u1="Ü" u2="„" k="41" /> +<hkern u1="Ü" u2="‚" k="41" /> +<hkern u1="Ü" u2="Å" k="20" /> +<hkern u1="Ü" u2="Ä" k="20" /> +<hkern u1="Ü" u2="Ã" k="20" /> +<hkern u1="Ü" u2="Â" k="20" /> +<hkern u1="Ü" u2="Á" k="20" /> +<hkern u1="Ü" u2="À" k="20" /> +<hkern u1="Ü" u2="A" k="20" /> +<hkern u1="Ü" u2="." k="41" /> +<hkern u1="Ü" u2="," k="41" /> +<hkern u1="Ý" u2="„" k="123" /> +<hkern u1="Ý" u2="‚" k="123" /> +<hkern u1="Ý" u2="œ" k="102" /> +<hkern u1="Ý" u2="Œ" k="41" /> +<hkern u1="Ý" u2="ü" k="61" /> +<hkern u1="Ý" u2="û" k="61" /> +<hkern u1="Ý" u2="ú" k="61" /> +<hkern u1="Ý" u2="ù" k="61" /> +<hkern u1="Ý" u2="ø" k="102" /> +<hkern u1="Ý" u2="ö" k="102" /> +<hkern u1="Ý" u2="õ" k="102" /> +<hkern u1="Ý" u2="ô" k="102" /> +<hkern u1="Ý" u2="ó" k="102" /> +<hkern u1="Ý" u2="ò" k="102" /> +<hkern u1="Ý" u2="ë" k="102" /> +<hkern u1="Ý" u2="ê" k="102" /> +<hkern u1="Ý" u2="é" k="102" /> +<hkern u1="Ý" u2="è" k="102" /> +<hkern u1="Ý" u2="ç" k="102" /> +<hkern u1="Ý" u2="æ" k="102" /> +<hkern u1="Ý" u2="å" k="102" /> +<hkern u1="Ý" u2="ä" k="102" /> +<hkern u1="Ý" u2="ã" k="102" /> +<hkern u1="Ý" u2="â" k="102" /> +<hkern u1="Ý" u2="á" k="102" /> +<hkern u1="Ý" u2="à" k="102" /> +<hkern u1="Ý" u2="Ø" k="41" /> +<hkern u1="Ý" u2="Ö" k="41" /> +<hkern u1="Ý" u2="Õ" k="41" /> +<hkern u1="Ý" u2="Ô" k="41" /> +<hkern u1="Ý" u2="Ó" k="41" /> +<hkern u1="Ý" u2="Ò" k="41" /> +<hkern u1="Ý" u2="Ç" k="41" /> +<hkern u1="Ý" u2="Å" k="123" /> +<hkern u1="Ý" u2="Ä" k="123" /> +<hkern u1="Ý" u2="Ã" k="123" /> +<hkern u1="Ý" u2="Â" k="123" /> +<hkern u1="Ý" u2="Á" k="123" /> +<hkern u1="Ý" u2="À" k="123" /> +<hkern u1="Ý" u2="z" k="41" /> +<hkern u1="Ý" u2="u" k="61" /> +<hkern u1="Ý" u2="s" k="82" /> +<hkern u1="Ý" u2="r" k="61" /> +<hkern u1="Ý" u2="q" k="102" /> +<hkern u1="Ý" u2="p" k="61" /> +<hkern u1="Ý" u2="o" k="102" /> +<hkern u1="Ý" u2="n" k="61" /> +<hkern u1="Ý" u2="m" k="61" /> +<hkern u1="Ý" u2="g" k="41" /> +<hkern u1="Ý" u2="e" k="102" /> +<hkern u1="Ý" u2="d" k="102" /> +<hkern u1="Ý" u2="c" k="102" /> +<hkern u1="Ý" u2="a" k="102" /> +<hkern u1="Ý" u2="Q" k="41" /> +<hkern u1="Ý" u2="O" k="41" /> +<hkern u1="Ý" u2="G" k="41" /> +<hkern u1="Ý" u2="C" k="41" /> +<hkern u1="Ý" u2="A" k="123" /> +<hkern u1="Ý" u2="?" k="-41" /> +<hkern u1="Ý" u2="." k="123" /> +<hkern u1="Ý" u2="," k="123" /> +<hkern u1="Þ" u2="„" k="266" /> +<hkern u1="Þ" u2="‚" k="266" /> +<hkern u1="Þ" u2="Å" k="102" /> +<hkern u1="Þ" u2="Ä" k="102" /> +<hkern u1="Þ" u2="Ã" k="102" /> +<hkern u1="Þ" u2="Â" k="102" /> +<hkern u1="Þ" u2="Á" k="102" /> +<hkern u1="Þ" u2="À" k="102" /> +<hkern u1="Þ" u2="Z" k="20" /> +<hkern u1="Þ" u2="X" k="41" /> +<hkern u1="Þ" u2="A" k="102" /> +<hkern u1="Þ" u2="." k="266" /> +<hkern u1="Þ" u2="," k="266" /> +<hkern u1="à" u2="”" k="20" /> +<hkern u1="à" u2="’" k="20" /> +<hkern u1="à" u2="'" k="20" /> +<hkern u1="à" u2=""" k="20" /> +<hkern u1="á" u2="”" k="20" /> +<hkern u1="á" u2="’" k="20" /> +<hkern u1="á" u2="'" k="20" /> +<hkern u1="á" u2=""" k="20" /> +<hkern u1="â" u2="”" k="20" /> +<hkern u1="â" u2="’" k="20" /> +<hkern u1="â" u2="'" k="20" /> +<hkern u1="â" u2=""" k="20" /> +<hkern u1="ã" u2="”" k="20" /> +<hkern u1="ã" u2="’" k="20" /> +<hkern u1="ã" u2="'" k="20" /> +<hkern u1="ã" u2=""" k="20" /> +<hkern u1="ä" u2="”" k="20" /> +<hkern u1="ä" u2="’" k="20" /> +<hkern u1="ä" u2="'" k="20" /> +<hkern u1="ä" u2=""" k="20" /> +<hkern u1="å" u2="”" k="20" /> +<hkern u1="å" u2="’" k="20" /> +<hkern u1="å" u2="'" k="20" /> +<hkern u1="å" u2=""" k="20" /> +<hkern u1="è" u2="”" k="20" /> +<hkern u1="è" u2="’" k="20" /> +<hkern u1="è" u2="ý" k="41" /> +<hkern u1="è" u2="z" k="20" /> +<hkern u1="è" u2="y" k="41" /> +<hkern u1="è" u2="x" k="41" /> +<hkern u1="è" u2="w" k="41" /> +<hkern u1="è" u2="v" k="41" /> +<hkern u1="è" u2="'" k="20" /> +<hkern u1="è" u2=""" k="20" /> +<hkern u1="é" u2="”" k="20" /> +<hkern u1="é" u2="’" k="20" /> +<hkern u1="é" u2="ý" k="41" /> +<hkern u1="é" u2="z" k="20" /> +<hkern u1="é" u2="y" k="41" /> +<hkern u1="é" u2="x" k="41" /> +<hkern u1="é" u2="w" k="41" /> +<hkern u1="é" u2="v" k="41" /> +<hkern u1="é" u2="'" k="20" /> +<hkern u1="é" u2=""" k="20" /> +<hkern u1="ê" u2="”" k="20" /> +<hkern u1="ê" u2="’" k="20" /> +<hkern u1="ê" u2="ý" k="41" /> +<hkern u1="ê" u2="z" k="20" /> +<hkern u1="ê" u2="y" k="41" /> +<hkern u1="ê" u2="x" k="41" /> +<hkern u1="ê" u2="w" k="41" /> +<hkern u1="ê" u2="v" k="41" /> +<hkern u1="ê" u2="'" k="20" /> +<hkern u1="ê" u2=""" k="20" /> +<hkern u1="ë" u2="”" k="20" /> +<hkern u1="ë" u2="’" k="20" /> +<hkern u1="ë" u2="ý" k="41" /> +<hkern u1="ë" u2="z" k="20" /> +<hkern u1="ë" u2="y" k="41" /> +<hkern u1="ë" u2="x" k="41" /> +<hkern u1="ë" u2="w" k="41" /> +<hkern u1="ë" u2="v" k="41" /> +<hkern u1="ë" u2="'" k="20" /> +<hkern u1="ë" u2=""" k="20" /> +<hkern u1="ð" u2="”" k="20" /> +<hkern u1="ð" u2="’" k="20" /> +<hkern u1="ð" u2="ý" k="41" /> +<hkern u1="ð" u2="z" k="20" /> +<hkern u1="ð" u2="y" k="41" /> +<hkern u1="ð" u2="x" k="41" /> +<hkern u1="ð" u2="w" k="41" /> +<hkern u1="ð" u2="v" k="41" /> +<hkern u1="ð" u2="'" k="20" /> +<hkern u1="ð" u2=""" k="20" /> +<hkern u1="ò" u2="”" k="20" /> +<hkern u1="ò" u2="’" k="20" /> +<hkern u1="ò" u2="ý" k="41" /> +<hkern u1="ò" u2="z" k="20" /> +<hkern u1="ò" u2="y" k="41" /> +<hkern u1="ò" u2="x" k="41" /> +<hkern u1="ò" u2="w" k="41" /> +<hkern u1="ò" u2="v" k="41" /> +<hkern u1="ò" u2="'" k="20" /> +<hkern u1="ò" u2=""" k="20" /> +<hkern u1="ó" u2="”" k="20" /> +<hkern u1="ó" u2="’" k="20" /> +<hkern u1="ó" u2="ý" k="41" /> +<hkern u1="ó" u2="z" k="20" /> +<hkern u1="ó" u2="y" k="41" /> +<hkern u1="ó" u2="x" k="41" /> +<hkern u1="ó" u2="w" k="41" /> +<hkern u1="ó" u2="v" k="41" /> +<hkern u1="ó" u2="'" k="20" /> +<hkern u1="ó" u2=""" k="20" /> +<hkern u1="ô" u2="”" k="20" /> +<hkern u1="ô" u2="’" k="20" /> +<hkern u1="ô" u2="ý" k="41" /> +<hkern u1="ô" u2="z" k="20" /> +<hkern u1="ô" u2="y" k="41" /> +<hkern u1="ô" u2="x" k="41" /> +<hkern u1="ô" u2="w" k="41" /> +<hkern u1="ô" u2="v" k="41" /> +<hkern u1="ô" u2="'" k="20" /> +<hkern u1="ô" u2=""" k="20" /> +<hkern u1="ö" u2="”" k="41" /> +<hkern u1="ö" u2="’" k="41" /> +<hkern u1="ö" u2="'" k="41" /> +<hkern u1="ö" u2=""" k="41" /> +<hkern u1="ø" u2="”" k="20" /> +<hkern u1="ø" u2="’" k="20" /> +<hkern u1="ø" u2="ý" k="41" /> +<hkern u1="ø" u2="z" k="20" /> +<hkern u1="ø" u2="y" k="41" /> +<hkern u1="ø" u2="x" k="41" /> +<hkern u1="ø" u2="w" k="41" /> +<hkern u1="ø" u2="v" k="41" /> +<hkern u1="ø" u2="'" k="20" /> +<hkern u1="ø" u2=""" k="20" /> +<hkern u1="ý" u2="„" k="82" /> +<hkern u1="ý" u2="”" k="-82" /> +<hkern u1="ý" u2="‚" k="82" /> +<hkern u1="ý" u2="’" k="-82" /> +<hkern u1="ý" u2="?" k="-41" /> +<hkern u1="ý" u2="." k="82" /> +<hkern u1="ý" u2="," k="82" /> +<hkern u1="ý" u2="'" k="-82" /> +<hkern u1="ý" u2=""" k="-82" /> +<hkern u1="þ" u2="”" k="20" /> +<hkern u1="þ" u2="’" k="20" /> +<hkern u1="þ" u2="ý" k="41" /> +<hkern u1="þ" u2="z" k="20" /> +<hkern u1="þ" u2="y" k="41" /> +<hkern u1="þ" u2="x" k="41" /> +<hkern u1="þ" u2="w" k="41" /> +<hkern u1="þ" u2="v" k="41" /> +<hkern u1="þ" u2="'" k="20" /> +<hkern u1="þ" u2=""" k="20" /> +<hkern u1="ÿ" u2="„" k="82" /> +<hkern u1="ÿ" u2="”" k="-82" /> +<hkern u1="ÿ" u2="‚" k="82" /> +<hkern u1="ÿ" u2="’" k="-82" /> +<hkern u1="ÿ" u2="?" k="-41" /> +<hkern u1="ÿ" u2="." k="82" /> +<hkern u1="ÿ" u2="," k="82" /> +<hkern u1="ÿ" u2="'" k="-82" /> +<hkern u1="ÿ" u2=""" k="-82" /> +<hkern u1="Œ" u2="J" k="-123" /> +<hkern u1="Ÿ" u2="„" k="123" /> +<hkern u1="Ÿ" u2="‚" k="123" /> +<hkern u1="Ÿ" u2="œ" k="102" /> +<hkern u1="Ÿ" u2="Œ" k="41" /> +<hkern u1="Ÿ" u2="ü" k="61" /> +<hkern u1="Ÿ" u2="û" k="61" /> +<hkern u1="Ÿ" u2="ú" k="61" /> +<hkern u1="Ÿ" u2="ù" k="61" /> +<hkern u1="Ÿ" u2="ø" k="102" /> +<hkern u1="Ÿ" u2="ö" k="102" /> +<hkern u1="Ÿ" u2="õ" k="102" /> +<hkern u1="Ÿ" u2="ô" k="102" /> +<hkern u1="Ÿ" u2="ó" k="102" /> +<hkern u1="Ÿ" u2="ò" k="102" /> +<hkern u1="Ÿ" u2="ë" k="102" /> +<hkern u1="Ÿ" u2="ê" k="102" /> +<hkern u1="Ÿ" u2="é" k="102" /> +<hkern u1="Ÿ" u2="è" k="102" /> +<hkern u1="Ÿ" u2="ç" k="102" /> +<hkern u1="Ÿ" u2="æ" k="102" /> +<hkern u1="Ÿ" u2="å" k="102" /> +<hkern u1="Ÿ" u2="ä" k="102" /> +<hkern u1="Ÿ" u2="ã" k="102" /> +<hkern u1="Ÿ" u2="â" k="102" /> +<hkern u1="Ÿ" u2="á" k="102" /> +<hkern u1="Ÿ" u2="à" k="102" /> +<hkern u1="Ÿ" u2="Ø" k="41" /> +<hkern u1="Ÿ" u2="Ö" k="41" /> +<hkern u1="Ÿ" u2="Õ" k="41" /> +<hkern u1="Ÿ" u2="Ô" k="41" /> +<hkern u1="Ÿ" u2="Ó" k="41" /> +<hkern u1="Ÿ" u2="Ò" k="41" /> +<hkern u1="Ÿ" u2="Ç" k="41" /> +<hkern u1="Ÿ" u2="Å" k="123" /> +<hkern u1="Ÿ" u2="Ä" k="123" /> +<hkern u1="Ÿ" u2="Ã" k="123" /> +<hkern u1="Ÿ" u2="Â" k="123" /> +<hkern u1="Ÿ" u2="Á" k="123" /> +<hkern u1="Ÿ" u2="À" k="123" /> +<hkern u1="Ÿ" u2="z" k="41" /> +<hkern u1="Ÿ" u2="u" k="61" /> +<hkern u1="Ÿ" u2="s" k="82" /> +<hkern u1="Ÿ" u2="r" k="61" /> +<hkern u1="Ÿ" u2="q" k="102" /> +<hkern u1="Ÿ" u2="p" k="61" /> +<hkern u1="Ÿ" u2="o" k="102" /> +<hkern u1="Ÿ" u2="n" k="61" /> +<hkern u1="Ÿ" u2="m" k="61" /> +<hkern u1="Ÿ" u2="g" k="41" /> +<hkern u1="Ÿ" u2="e" k="102" /> +<hkern u1="Ÿ" u2="d" k="102" /> +<hkern u1="Ÿ" u2="c" k="102" /> +<hkern u1="Ÿ" u2="a" k="102" /> +<hkern u1="Ÿ" u2="Q" k="41" /> +<hkern u1="Ÿ" u2="O" k="41" /> +<hkern u1="Ÿ" u2="G" k="41" /> +<hkern u1="Ÿ" u2="C" k="41" /> +<hkern u1="Ÿ" u2="A" k="123" /> +<hkern u1="Ÿ" u2="?" k="-41" /> +<hkern u1="Ÿ" u2="." k="123" /> +<hkern u1="Ÿ" u2="," k="123" /> +<hkern u1="–" u2="T" k="82" /> +<hkern u1="—" u2="T" k="82" /> +<hkern u1="‘" u2="Ÿ" k="-20" /> +<hkern u1="‘" u2="œ" k="123" /> +<hkern u1="‘" u2="ü" k="61" /> +<hkern u1="‘" u2="û" k="61" /> +<hkern u1="‘" u2="ú" k="61" /> +<hkern u1="‘" u2="ù" k="61" /> +<hkern u1="‘" u2="ø" k="123" /> +<hkern u1="‘" u2="ö" k="123" /> +<hkern u1="‘" u2="õ" k="123" /> +<hkern u1="‘" u2="ô" k="123" /> +<hkern u1="‘" u2="ó" k="123" /> +<hkern u1="‘" u2="ò" k="123" /> +<hkern u1="‘" u2="ë" k="123" /> +<hkern u1="‘" u2="ê" k="123" /> +<hkern u1="‘" u2="é" k="123" /> +<hkern u1="‘" u2="è" k="123" /> +<hkern u1="‘" u2="ç" k="123" /> +<hkern u1="‘" u2="æ" k="82" /> +<hkern u1="‘" u2="å" k="82" /> +<hkern u1="‘" u2="ä" k="82" /> +<hkern u1="‘" u2="ã" k="82" /> +<hkern u1="‘" u2="â" k="82" /> +<hkern u1="‘" u2="á" k="82" /> +<hkern u1="‘" u2="à" k="123" /> +<hkern u1="‘" u2="Ý" k="-20" /> +<hkern u1="‘" u2="Å" k="143" /> +<hkern u1="‘" u2="Ä" k="143" /> +<hkern u1="‘" u2="Ã" k="143" /> +<hkern u1="‘" u2="Â" k="143" /> +<hkern u1="‘" u2="Á" k="143" /> +<hkern u1="‘" u2="À" k="143" /> +<hkern u1="‘" u2="u" k="61" /> +<hkern u1="‘" u2="s" k="61" /> +<hkern u1="‘" u2="r" k="61" /> +<hkern u1="‘" u2="q" k="123" /> +<hkern u1="‘" u2="p" k="61" /> +<hkern u1="‘" u2="o" k="123" /> +<hkern u1="‘" u2="n" k="61" /> +<hkern u1="‘" u2="m" k="61" /> +<hkern u1="‘" u2="g" k="61" /> +<hkern u1="‘" u2="e" k="123" /> +<hkern u1="‘" u2="d" k="123" /> +<hkern u1="‘" u2="c" k="123" /> +<hkern u1="‘" u2="a" k="82" /> +<hkern u1="‘" u2="Y" k="-20" /> +<hkern u1="‘" u2="W" k="-41" /> +<hkern u1="‘" u2="V" k="-41" /> +<hkern u1="‘" u2="T" k="-41" /> +<hkern u1="‘" u2="A" k="143" /> +<hkern u1="’" u2="Ÿ" k="-20" /> +<hkern u1="’" u2="œ" k="123" /> +<hkern u1="’" u2="ü" k="61" /> +<hkern u1="’" u2="û" k="61" /> +<hkern u1="’" u2="ú" k="61" /> +<hkern u1="’" u2="ù" k="61" /> +<hkern u1="’" u2="ø" k="123" /> +<hkern u1="’" u2="ö" k="123" /> +<hkern u1="’" u2="õ" k="123" /> +<hkern u1="’" u2="ô" k="123" /> +<hkern u1="’" u2="ó" k="123" /> +<hkern u1="’" u2="ò" k="123" /> +<hkern u1="’" u2="ë" k="123" /> +<hkern u1="’" u2="ê" k="123" /> +<hkern u1="’" u2="é" k="123" /> +<hkern u1="’" u2="è" k="123" /> +<hkern u1="’" u2="ç" k="123" /> +<hkern u1="’" u2="æ" k="82" /> +<hkern u1="’" u2="å" k="82" /> +<hkern u1="’" u2="ä" k="82" /> +<hkern u1="’" u2="ã" k="82" /> +<hkern u1="’" u2="â" k="82" /> +<hkern u1="’" u2="á" k="82" /> +<hkern u1="’" u2="à" k="123" /> +<hkern u1="’" u2="Ý" k="-20" /> +<hkern u1="’" u2="Å" k="143" /> +<hkern u1="’" u2="Ä" k="143" /> +<hkern u1="’" u2="Ã" k="143" /> +<hkern u1="’" u2="Â" k="143" /> +<hkern u1="’" u2="Á" k="143" /> +<hkern u1="’" u2="À" k="143" /> +<hkern u1="’" u2="u" k="61" /> +<hkern u1="’" u2="s" k="61" /> +<hkern u1="’" u2="r" k="61" /> +<hkern u1="’" u2="q" k="123" /> +<hkern u1="’" u2="p" k="61" /> +<hkern u1="’" u2="o" k="123" /> +<hkern u1="’" u2="n" k="61" /> +<hkern u1="’" u2="m" k="61" /> +<hkern u1="’" u2="g" k="61" /> +<hkern u1="’" u2="e" k="123" /> +<hkern u1="’" u2="d" k="123" /> +<hkern u1="’" u2="c" k="123" /> +<hkern u1="’" u2="a" k="82" /> +<hkern u1="’" u2="Y" k="-20" /> +<hkern u1="’" u2="W" k="-41" /> +<hkern u1="’" u2="V" k="-41" /> +<hkern u1="’" u2="T" k="-41" /> +<hkern u1="’" u2="A" k="143" /> +<hkern u1="‚" u2="Ÿ" k="123" /> +<hkern u1="‚" u2="Œ" k="102" /> +<hkern u1="‚" u2="Ý" k="123" /> +<hkern u1="‚" u2="Ü" k="41" /> +<hkern u1="‚" u2="Û" k="41" /> +<hkern u1="‚" u2="Ú" k="41" /> +<hkern u1="‚" u2="Ù" k="41" /> +<hkern u1="‚" u2="Ø" k="102" /> +<hkern u1="‚" u2="Ö" k="102" /> +<hkern u1="‚" u2="Õ" k="102" /> +<hkern u1="‚" u2="Ô" k="102" /> +<hkern u1="‚" u2="Ó" k="102" /> +<hkern u1="‚" u2="Ò" k="102" /> +<hkern u1="‚" u2="Ç" k="102" /> +<hkern u1="‚" u2="Y" k="123" /> +<hkern u1="‚" u2="W" k="123" /> +<hkern u1="‚" u2="V" k="123" /> +<hkern u1="‚" u2="U" k="41" /> +<hkern u1="‚" u2="T" k="143" /> +<hkern u1="‚" u2="Q" k="102" /> +<hkern u1="‚" u2="O" k="102" /> +<hkern u1="‚" u2="G" k="102" /> +<hkern u1="‚" u2="C" k="102" /> +<hkern u1="“" u2="Ÿ" k="-20" /> +<hkern u1="“" u2="œ" k="123" /> +<hkern u1="“" u2="ü" k="61" /> +<hkern u1="“" u2="û" k="61" /> +<hkern u1="“" u2="ú" k="61" /> +<hkern u1="“" u2="ù" k="61" /> +<hkern u1="“" u2="ø" k="123" /> +<hkern u1="“" u2="ö" k="123" /> +<hkern u1="“" u2="õ" k="123" /> +<hkern u1="“" u2="ô" k="123" /> +<hkern u1="“" u2="ó" k="123" /> +<hkern u1="“" u2="ò" k="123" /> +<hkern u1="“" u2="ë" k="123" /> +<hkern u1="“" u2="ê" k="123" /> +<hkern u1="“" u2="é" k="123" /> +<hkern u1="“" u2="è" k="123" /> +<hkern u1="“" u2="ç" k="123" /> +<hkern u1="“" u2="æ" k="82" /> +<hkern u1="“" u2="å" k="82" /> +<hkern u1="“" u2="ä" k="82" /> +<hkern u1="“" u2="ã" k="82" /> +<hkern u1="“" u2="â" k="82" /> +<hkern u1="“" u2="á" k="82" /> +<hkern u1="“" u2="à" k="123" /> +<hkern u1="“" u2="Ý" k="-20" /> +<hkern u1="“" u2="Å" k="143" /> +<hkern u1="“" u2="Ä" k="143" /> +<hkern u1="“" u2="Ã" k="143" /> +<hkern u1="“" u2="Â" k="143" /> +<hkern u1="“" u2="Á" k="143" /> +<hkern u1="“" u2="À" k="143" /> +<hkern u1="“" u2="u" k="61" /> +<hkern u1="“" u2="s" k="61" /> +<hkern u1="“" u2="r" k="61" /> +<hkern u1="“" u2="q" k="123" /> +<hkern u1="“" u2="p" k="61" /> +<hkern u1="“" u2="o" k="123" /> +<hkern u1="“" u2="n" k="61" /> +<hkern u1="“" u2="m" k="61" /> +<hkern u1="“" u2="g" k="61" /> +<hkern u1="“" u2="e" k="123" /> +<hkern u1="“" u2="d" k="123" /> +<hkern u1="“" u2="c" k="123" /> +<hkern u1="“" u2="a" k="82" /> +<hkern u1="“" u2="Y" k="-20" /> +<hkern u1="“" u2="W" k="-41" /> +<hkern u1="“" u2="V" k="-41" /> +<hkern u1="“" u2="T" k="-41" /> +<hkern u1="“" u2="A" k="143" /> +<hkern u1="„" u2="Ÿ" k="123" /> +<hkern u1="„" u2="Œ" k="102" /> +<hkern u1="„" u2="Ý" k="123" /> +<hkern u1="„" u2="Ü" k="41" /> +<hkern u1="„" u2="Û" k="41" /> +<hkern u1="„" u2="Ú" k="41" /> +<hkern u1="„" u2="Ù" k="41" /> +<hkern u1="„" u2="Ø" k="102" /> +<hkern u1="„" u2="Ö" k="102" /> +<hkern u1="„" u2="Õ" k="102" /> +<hkern u1="„" u2="Ô" k="102" /> +<hkern u1="„" u2="Ó" k="102" /> +<hkern u1="„" u2="Ò" k="102" /> +<hkern u1="„" u2="Ç" k="102" /> +<hkern u1="„" u2="Y" k="123" /> +<hkern u1="„" u2="W" k="123" /> +<hkern u1="„" u2="V" k="123" /> +<hkern u1="„" u2="U" k="41" /> +<hkern u1="„" u2="T" k="143" /> +<hkern u1="„" u2="Q" k="102" /> +<hkern u1="„" u2="O" k="102" /> +<hkern u1="„" u2="G" k="102" /> +<hkern u1="„" u2="C" k="102" /> +</font> +</defs></svg>
\ No newline at end of file diff --git a/documentation/jsapi/fonts/OpenSans-Italic-webfont.woff b/documentation/jsapi/fonts/OpenSans-Italic-webfont.woff Binary files differnew file mode 100644 index 000000000..ff652e643 --- /dev/null +++ b/documentation/jsapi/fonts/OpenSans-Italic-webfont.woff diff --git a/documentation/jsapi/fonts/OpenSans-Light-webfont.eot b/documentation/jsapi/fonts/OpenSans-Light-webfont.eot Binary files differnew file mode 100644 index 000000000..14868406a --- /dev/null +++ b/documentation/jsapi/fonts/OpenSans-Light-webfont.eot diff --git a/documentation/jsapi/fonts/OpenSans-Light-webfont.svg b/documentation/jsapi/fonts/OpenSans-Light-webfont.svg new file mode 100644 index 000000000..11a472ca8 --- /dev/null +++ b/documentation/jsapi/fonts/OpenSans-Light-webfont.svg @@ -0,0 +1,1831 @@ +<?xml version="1.0" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" > +<svg xmlns="http://www.w3.org/2000/svg"> +<metadata></metadata> +<defs> +<font id="open_sanslight" horiz-adv-x="1169" > +<font-face units-per-em="2048" ascent="1638" descent="-410" /> +<missing-glyph horiz-adv-x="532" /> +<glyph unicode="fi" horiz-adv-x="1077" d="M29 0zM586 1001h-256v-1001h-99v1001h-202v58l202 37v84q0 200 73.5 293.5t240.5 93.5q90 0 180 -27l-23 -86q-80 25 -159 25q-116 0 -164.5 -68.5t-48.5 -222.5v-101h256v-86zM895 0h-99v1087h99v-1087zM782 1389q0 96 63 96q31 0 48.5 -25t17.5 -71q0 -45 -17.5 -71 t-48.5 -26q-63 0 -63 97z" /> +<glyph unicode="fl" horiz-adv-x="1077" d="M29 0zM586 1001h-256v-1001h-99v1001h-202v58l202 37v84q0 200 73.5 293.5t240.5 93.5q90 0 180 -27l-23 -86q-80 25 -159 25q-116 0 -164.5 -68.5t-48.5 -222.5v-101h256v-86zM895 0h-99v1556h99v-1556z" /> +<glyph unicode="ffi" horiz-adv-x="1692" d="M29 0zM586 1001h-256v-1001h-99v1001h-202v58l202 37v84q0 200 73.5 293.5t240.5 93.5q90 0 180 -27l-23 -86q-80 25 -159 25q-116 0 -164.5 -68.5t-48.5 -222.5v-101h256v-86zM1200 1001h-256v-1001h-99v1001h-202v58l202 37v84q0 200 73.5 293.5t240.5 93.5 q90 0 180 -27l-23 -86q-80 25 -159 25q-116 0 -164.5 -68.5t-48.5 -222.5v-101h256v-86zM1510 0h-99v1087h99v-1087zM1397 1389q0 96 63 96q31 0 48.5 -25t17.5 -71q0 -45 -17.5 -71t-48.5 -26q-63 0 -63 97z" /> +<glyph unicode="ffl" horiz-adv-x="1692" d="M29 0zM586 1001h-256v-1001h-99v1001h-202v58l202 37v84q0 200 73.5 293.5t240.5 93.5q90 0 180 -27l-23 -86q-80 25 -159 25q-116 0 -164.5 -68.5t-48.5 -222.5v-101h256v-86zM1200 1001h-256v-1001h-99v1001h-202v58l202 37v84q0 200 73.5 293.5t240.5 93.5 q90 0 180 -27l-23 -86q-80 25 -159 25q-116 0 -164.5 -68.5t-48.5 -222.5v-101h256v-86zM1510 0h-99v1556h99v-1556z" /> +<glyph horiz-adv-x="2048" /> +<glyph horiz-adv-x="2048" /> +<glyph unicode="
" horiz-adv-x="1044" /> +<glyph unicode=" " horiz-adv-x="532" /> +<glyph unicode="	" horiz-adv-x="532" /> +<glyph unicode=" " horiz-adv-x="532" /> +<glyph unicode="!" horiz-adv-x="492" d="M276 377h-61l-29 1085h119zM164 78q0 98 80 98q82 0 82 -98t-82 -98q-80 0 -80 98z" /> +<glyph unicode=""" horiz-adv-x="723" d="M260 1462l-33 -528h-61l-33 528h127zM590 1462l-33 -528h-61l-33 528h127z" /> +<glyph unicode="#" horiz-adv-x="1323" d="M967 928l-76 -398h303v-79h-320l-86 -451h-90l88 451h-360l-86 -451h-88l86 451h-283v79h299l76 398h-297v80h311l86 454h91l-89 -454h365l88 454h86l-88 -454h285v-80h-301zM440 530h363l78 398h-363z" /> +<glyph unicode="$" d="M991 440q0 -133 -99 -217t-274 -106v-236h-81v232q-92 2 -200.5 22.5t-172.5 50.5v103q75 -36 179.5 -61t193.5 -25v508q-145 44 -215 88t-102 104t-32 146q0 124 94.5 208.5t254.5 104.5v192h81v-190q197 -9 351 -72l-33 -90q-141 62 -318 72v-486q213 -66 293 -144 t80 -204zM881 444q0 85 -63 140.5t-200 95.5v-471q122 13 192.5 75t70.5 160zM297 1049q0 -86 57 -141t183 -93v453q-119 -16 -179.5 -76t-60.5 -143z" /> +<glyph unicode="%" horiz-adv-x="1653" d="M211 1026q0 -186 45 -279.5t141 -93.5q193 0 193 373q0 184 -49.5 276.5t-143.5 92.5q-96 0 -141 -92.5t-45 -276.5zM688 1026q0 -226 -75 -343.5t-216 -117.5q-133 0 -208.5 120.5t-75.5 340.5q0 223 72 340t212 117q139 0 215 -120.5t76 -336.5zM1063 438 q0 -185 45 -277.5t141 -92.5q193 0 193 370q0 369 -193 369q-96 0 -141 -91.5t-45 -277.5zM1540 438q0 -226 -74 -343.5t-215 -117.5q-136 0 -211 121.5t-75 339.5q0 225 73.5 341t212.5 116q137 0 213 -120t76 -337zM1280 1462l-811 -1462h-96l811 1462h96z" /> +<glyph unicode="&" horiz-adv-x="1460" d="M123 371q0 138 73.5 235t274.5 205l-75 82q-66 71 -98 139t-32 142q0 143 95.5 227t256.5 84q155 0 245.5 -81t90.5 -224q0 -105 -70 -192.5t-253 -194.5l452 -457q61 72 104 157t75 201h96q-63 -246 -209 -426l266 -268h-135l-193 197q-92 -90 -164 -131.5t-157.5 -63.5 t-194.5 -22q-209 0 -328.5 103t-119.5 288zM578 70q128 0 234.5 43.5t209.5 146.5l-483 485q-136 -72 -196.5 -122.5t-88 -109.5t-27.5 -138q0 -143 93 -224t258 -81zM373 1176q0 -79 40 -146t152 -174q159 85 221 159t62 169q0 94 -62 152.5t-168 58.5q-114 0 -179.5 -58 t-65.5 -161z" /> +<glyph unicode="'" horiz-adv-x="393" d="M260 1462l-33 -528h-61l-33 528h127z" /> +<glyph unicode="(" horiz-adv-x="557" d="M82 561q0 265 77.5 496t223.5 405h113q-148 -182 -227 -412.5t-79 -486.5q0 -483 304 -887h-111q-147 170 -224 397t-77 488z" /> +<glyph unicode=")" horiz-adv-x="557" d="M475 561q0 -263 -77.5 -490t-223.5 -395h-111q304 404 304 887q0 257 -79 487.5t-227 411.5h113q147 -175 224 -406.5t77 -494.5z" /> +<glyph unicode="*" horiz-adv-x="1128" d="M631 1556l-37 -405l405 104l21 -131l-395 -39l247 -340l-124 -71l-191 379l-180 -379l-125 71l242 340l-390 39l19 131l401 -104l-39 405h146z" /> +<glyph unicode="+" d="M625 764h434v-82h-434v-432h-82v432h-432v82h432v434h82v-434z" /> +<glyph unicode="," horiz-adv-x="440" d="M295 238l12 -21q-75 -265 -174 -481h-65q77 275 110 502h117z" /> +<glyph unicode="-" horiz-adv-x="659" d="M92 512v82h475v-82h-475z" /> +<glyph unicode="." horiz-adv-x="487" d="M162 78q0 98 80 98q82 0 82 -98t-82 -98q-80 0 -80 98z" /> +<glyph unicode="/" horiz-adv-x="698" d="M674 1462l-545 -1462h-104l544 1462h105z" /> +<glyph unicode="0" d="M1055 735q0 -385 -117.5 -570t-355.5 -185q-229 0 -348 190.5t-119 564.5q0 382 115.5 566t351.5 184q231 0 352 -190.5t121 -559.5zM223 735q0 -340 89 -502.5t270 -162.5q189 0 275.5 168t86.5 497q0 324 -86.5 492t-275.5 168t-274 -168t-85 -492z" /> +<glyph unicode="1" d="M682 0h-98v1065q0 145 12 301q-15 -15 -31 -29t-309 -243l-57 71l397 297h86v-1462z" /> +<glyph unicode="2" d="M1028 0h-915v88l389 406q164 170 230 260t97 172t31 172q0 131 -86 213t-223 82q-183 0 -350 -133l-54 69q183 154 406 154q191 0 300.5 -102t109.5 -281q0 -145 -73.5 -280.5t-268.5 -334.5l-375 -385v-4h782v-96z" /> +<glyph unicode="3" d="M979 1118q0 -136 -85.5 -229t-229.5 -119v-6q176 -22 268 -112t92 -242q0 -205 -139.5 -317.5t-401.5 -112.5q-223 0 -389 83v99q84 -44 188.5 -69t196.5 -25q221 0 332 89.5t111 252.5q0 145 -113.5 223t-333.5 78h-158v96h160q182 0 288.5 86.5t106.5 234.5 q0 122 -86.5 195.5t-226.5 73.5q-109 0 -199 -30.5t-202 -104.5l-49 67q85 71 205 112.5t243 41.5q202 0 312 -95.5t110 -269.5z" /> +<glyph unicode="4" d="M1141 373h-252v-373h-94v373h-752v67l725 1030h121v-1011h252v-86zM795 459v418q0 302 14 507h-8q-20 -37 -123 -188l-516 -737h633z" /> +<glyph unicode="5" d="M537 879q234 0 368.5 -113t134.5 -311q0 -225 -140 -350t-386 -125q-109 0 -207 21.5t-164 61.5v103q108 -55 192 -76.5t179 -21.5q192 0 308 101.5t116 274.5q0 163 -113 256t-307 93q-130 0 -272 -39l-60 39l58 669h704v-96h-610l-45 -516q156 29 244 29z" /> +<glyph unicode="6" d="M131 623q0 285 77.5 479.5t220 288.5t343.5 94q94 0 172 -23v-88q-73 27 -176 27q-247 0 -384.5 -178t-154.5 -518h13q76 98 174 148t207 50q205 0 320.5 -117t115.5 -323q0 -224 -121.5 -353.5t-327.5 -129.5q-222 0 -350.5 169.5t-128.5 473.5zM610 68q164 0 255 103 t91 294q0 168 -90 262t-245 94q-102 0 -189.5 -45t-139.5 -119.5t-52 -152.5q0 -111 49.5 -213.5t134 -162.5t186.5 -60z" /> +<glyph unicode="7" d="M334 0l602 1366h-827v96h946v-73l-604 -1389h-117z" /> +<glyph unicode="8" d="M582 1487q186 0 299.5 -95t113.5 -257q0 -112 -70.5 -198t-228.5 -159q192 -79 270 -173t78 -228q0 -181 -126.5 -289t-339.5 -108q-221 0 -339 101t-118 294q0 131 83 230t257 169q-161 76 -227 160.5t-66 202.5q0 105 53 184.5t148.5 122.5t212.5 43zM223 360 q0 -138 93.5 -214t261.5 -76q164 0 264 80.5t100 218.5q0 124 -78.5 201.5t-302.5 162.5q-184 -71 -261 -157t-77 -216zM580 1397q-141 0 -226.5 -69.5t-85.5 -190.5q0 -70 31.5 -123.5t91 -97t199.5 -101.5q163 63 234 139t71 183q0 120 -84.5 190t-230.5 70z" /> +<glyph unicode="9" d="M1036 842q0 -288 -75.5 -482t-220 -287t-349.5 -93q-104 0 -192 26v86q43 -14 103.5 -21.5t92.5 -7.5q247 0 387 178.5t156 520.5h-12q-73 -96 -174 -147.5t-211 -51.5q-203 0 -316.5 112t-113.5 318q0 220 124.5 356t323.5 136q144 0 252 -75.5t166.5 -221.5t58.5 -346z M559 1397q-158 0 -252 -106.5t-94 -291.5q0 -174 87 -264t249 -90q101 0 188.5 45t139 119.5t51.5 151.5q0 117 -46.5 219t-130 159.5t-192.5 57.5z" /> +<glyph unicode=":" horiz-adv-x="487" d="M162 78q0 98 80 98q82 0 82 -98t-82 -98q-80 0 -80 98zM162 971q0 98 80 98q82 0 82 -98q0 -53 -23.5 -76t-58.5 -23q-34 0 -57 23t-23 76z" /> +<glyph unicode=";" horiz-adv-x="487" d="M303 238l12 -21q-75 -265 -174 -481h-65q29 97 62 245.5t48 256.5h117zM162 971q0 98 80 98q82 0 82 -98q0 -53 -23.5 -76t-58.5 -23q-34 0 -57 23t-23 76z" /> +<glyph unicode="<" d="M1059 266l-948 416v61l948 474v-95l-823 -405l823 -355v-96z" /> +<glyph unicode="=" d="M111 885v82h948v-82h-948zM111 477v82h948v-82h-948z" /> +<glyph unicode=">" d="M111 362l823 355l-823 405v95l948 -474v-61l-948 -416v96z" /> +<glyph unicode="?" horiz-adv-x="862" d="M293 377v37q0 123 37.5 201t138.5 167l91 79q72 61 103 121t31 138q0 127 -83.5 202t-219.5 75q-79 0 -148 -17.5t-149 -56.5l-37 80q110 48 184.5 64t153.5 16q183 0 288 -98.5t105 -270.5q0 -68 -18 -119t-50.5 -94.5t-78.5 -84t-102 -87.5q-64 -54 -98.5 -98.5 t-50 -93.5t-15.5 -146v-14h-82zM260 78q0 98 80 98q82 0 82 -98t-82 -98q-80 0 -80 98z" /> +<glyph unicode="@" horiz-adv-x="1815" d="M1702 725q0 -228 -90.5 -366t-245.5 -138q-89 0 -144.5 54t-64.5 147h-4q-43 -100 -124 -150.5t-189 -50.5q-148 0 -229 96.5t-81 270.5q0 202 120.5 330.5t314.5 128.5q138 0 286 -41l-22 -464v-30q0 -104 35 -156.5t116 -52.5q103 0 168.5 116.5t65.5 303.5 q0 194 -79 340t-225.5 224.5t-334.5 78.5q-230 0 -405.5 -99.5t-270 -281.5t-94.5 -418q0 -322 167 -497.5t474 -175.5q93 0 188.5 18t231.5 70v-99q-203 -80 -414 -80q-349 0 -544 200.5t-195 557.5q0 256 108.5 460.5t307 317.5t448.5 113q215 0 380.5 -89t255 -254.5 t89.5 -383.5zM633 590q0 -143 55 -215t174 -72q255 0 273 346l16 291q-79 27 -193 27q-149 0 -237 -102.5t-88 -274.5z" /> +<glyph unicode="A" horiz-adv-x="1229" d="M911 516h-594l-204 -516h-113l588 1468h65l576 -1468h-115zM354 608h523l-199 527q-25 62 -60 172q-27 -96 -59 -174z" /> +<glyph unicode="B" horiz-adv-x="1284" d="M207 1462h401q271 0 398 -92t127 -278q0 -127 -77.5 -211.5t-226.5 -108.5v-6q175 -26 257.5 -110.5t82.5 -235.5q0 -202 -134 -311t-380 -109h-448v1462zM309 811h322q206 0 299.5 68.5t93.5 214.5t-105.5 212t-314.5 66h-295v-561zM309 721v-631h344q406 0 406 330 q0 301 -428 301h-322z" /> +<glyph unicode="C" horiz-adv-x="1272" d="M831 1391q-275 0 -433 -176t-158 -482q0 -313 149 -486t426 -173q184 0 338 47v-90q-145 -51 -362 -51q-308 0 -485 199t-177 556q0 223 84.5 393t243 262.5t368.5 92.5q214 0 383 -80l-41 -92q-160 80 -336 80z" /> +<glyph unicode="D" horiz-adv-x="1446" d="M1317 745q0 -368 -193 -556.5t-567 -188.5h-350v1462h395q350 0 532.5 -183t182.5 -534zM1206 741q0 314 -159.5 472.5t-468.5 158.5h-269v-1282h242q655 0 655 651z" /> +<glyph unicode="E" horiz-adv-x="1130" d="M1006 0h-799v1462h799v-94h-697v-553h658v-94h-658v-627h697v-94z" /> +<glyph unicode="F" horiz-adv-x="1028" d="M309 0h-102v1462h801v-94h-699v-620h660v-95h-660v-653z" /> +<glyph unicode="G" horiz-adv-x="1481" d="M782 737h539v-667q-212 -90 -477 -90q-346 0 -530.5 195.5t-184.5 553.5q0 223 91.5 395.5t262 266.5t391.5 94q239 0 429 -88l-41 -92q-190 88 -394 88q-289 0 -458.5 -178.5t-169.5 -481.5q0 -330 161 -496.5t473 -166.5q202 0 343 57v514h-435v96z" /> +<glyph unicode="H" horiz-adv-x="1473" d="M1266 0h-103v719h-854v-719h-102v1462h102v-649h854v649h103v-1462z" /> +<glyph unicode="I" horiz-adv-x="516" d="M207 0v1462h102v-1462h-102z" /> +<glyph unicode="J" horiz-adv-x="506" d="M-33 -369q-92 0 -151 27v88q78 -20 149 -20q242 0 242 264v1472h102v-1462q0 -369 -342 -369z" /> +<glyph unicode="K" horiz-adv-x="1190" d="M1190 0h-125l-561 772l-195 -172v-600h-102v1462h102v-760l162 162l573 598h130l-599 -618z" /> +<glyph unicode="L" horiz-adv-x="1051" d="M207 0v1462h102v-1366h697v-96h-799z" /> +<glyph unicode="M" horiz-adv-x="1767" d="M850 0l-545 1350h-8q8 -124 8 -254v-1096h-98v1462h158l518 -1286h6l518 1286h154v-1462h-103v1108q0 116 12 240h-8l-547 -1348h-65z" /> +<glyph unicode="N" horiz-adv-x="1477" d="M1270 0h-103l-866 1298h-8q12 -232 12 -350v-948h-98v1462h102l865 -1296h6q-9 180 -9 342v954h99v-1462z" /> +<glyph unicode="O" horiz-adv-x="1565" d="M1436 733q0 -348 -174 -550.5t-480 -202.5q-305 0 -479 202.5t-174 552.5q0 349 175.5 549.5t479.5 200.5q306 0 479 -201.5t173 -550.5zM240 733q0 -314 140 -485.5t402 -171.5q264 0 403.5 170t139.5 487q0 316 -139.5 484.5t-401.5 168.5q-261 0 -402.5 -170 t-141.5 -483z" /> +<glyph unicode="P" horiz-adv-x="1198" d="M1087 1042q0 -212 -144 -325t-408 -113h-226v-604h-102v1462h358q522 0 522 -420zM309 692h201q247 0 357 81.5t110 264.5q0 169 -104 250.5t-322 81.5h-242v-678z" /> +<glyph unicode="Q" horiz-adv-x="1565" d="M1436 733q0 -294 -126 -486.5t-349 -246.5l333 -348h-166l-282 330l-33 -2h-31q-305 0 -479 202.5t-174 552.5q0 349 175.5 549.5t479.5 200.5q306 0 479 -201.5t173 -550.5zM240 733q0 -314 140 -485.5t402 -171.5q264 0 403.5 170t139.5 487q0 316 -139.5 484.5 t-401.5 168.5q-261 0 -402.5 -170t-141.5 -483z" /> +<glyph unicode="R" horiz-adv-x="1217" d="M309 637v-637h-102v1462h348q272 0 402 -100.5t130 -302.5q0 -147 -77.5 -248t-235.5 -145l397 -666h-122l-377 637h-363zM309 725h279q185 0 287 82.5t102 243.5q0 167 -100 243t-326 76h-242v-645z" /> +<glyph unicode="S" horiz-adv-x="1116" d="M1014 377q0 -183 -134.5 -290t-357.5 -107q-268 0 -411 59v102q158 -67 403 -67q180 0 285.5 82.5t105.5 216.5q0 83 -35 137.5t-114 99.5t-232 97q-224 77 -309.5 166.5t-85.5 238.5q0 164 128.5 267.5t330.5 103.5q206 0 387 -78l-37 -88q-182 76 -348 76 q-162 0 -258 -75t-96 -204q0 -81 29.5 -133t96.5 -93.5t230 -99.5q171 -59 257 -114.5t125.5 -126t39.5 -170.5z" /> +<glyph unicode="T" horiz-adv-x="1073" d="M588 0h-103v1366h-475v96h1053v-96h-475v-1366z" /> +<glyph unicode="U" horiz-adv-x="1473" d="M1282 1462v-946q0 -252 -146 -394t-407 -142q-254 0 -396.5 142.5t-142.5 397.5v942h103v-946q0 -211 117 -328.5t331 -117.5q209 0 324 115.5t115 320.5v956h102z" /> +<glyph unicode="V" horiz-adv-x="1182" d="M1071 1462h111l-547 -1462h-90l-545 1462h109l368 -995q84 -225 113 -338q20 75 79 233z" /> +<glyph unicode="W" horiz-adv-x="1827" d="M1372 0h-84l-321 1128q-40 139 -60 228q-16 -87 -45.5 -200t-322.5 -1156h-86l-402 1462h107l256 -942q15 -57 28 -105.5t23.5 -91t19 -82t15.5 -79.5q24 136 102 413l250 887h113l293 -1018q51 -176 73 -284q13 72 33.5 153t308.5 1149h103z" /> +<glyph unicode="X" horiz-adv-x="1102" d="M1102 0h-117l-432 682l-440 -682h-113l492 762l-447 700h115l395 -626l401 626h109l-453 -698z" /> +<glyph unicode="Y" horiz-adv-x="1081" d="M543 662l428 800h110l-487 -897v-565h-105v557l-489 905h117z" /> +<glyph unicode="Z" horiz-adv-x="1180" d="M1098 0h-1016v76l856 1290h-817v96h954v-76l-858 -1290h881v-96z" /> +<glyph unicode="[" horiz-adv-x="653" d="M602 -324h-428v1786h428v-94h-330v-1597h330v-95z" /> +<glyph unicode="\" horiz-adv-x="698" d="M127 1462l547 -1462h-103l-546 1462h102z" /> +<glyph unicode="]" horiz-adv-x="653" d="M51 -229h330v1597h-330v94h428v-1786h-428v95z" /> +<glyph unicode="^" d="M88 561l465 912h68l460 -912h-100l-395 791l-398 -791h-100z" /> +<glyph unicode="_" horiz-adv-x="842" d="M846 -266h-850v82h850v-82z" /> +<glyph unicode="`" horiz-adv-x="1182" d="M776 1241h-69q-96 79 -188.5 171.5t-125.5 139.5v17h142q26 -48 98.5 -142t142.5 -170v-16z" /> +<glyph unicode="a" horiz-adv-x="1085" d="M842 0l-25 172h-8q-82 -105 -168.5 -148.5t-204.5 -43.5q-160 0 -249 82t-89 227q0 159 132.5 247t383.5 93l207 6v72q0 155 -63 234t-203 79q-151 0 -313 -84l-37 86q179 84 354 84q179 0 267.5 -93t88.5 -290v-723h-73zM442 70q174 0 274.5 99.5t100.5 276.5v107 l-190 -8q-229 -11 -326.5 -71.5t-97.5 -188.5q0 -102 62.5 -158.5t176.5 -56.5z" /> +<glyph unicode="b" horiz-adv-x="1219" d="M641 1108q228 0 343.5 -143.5t115.5 -419.5q0 -271 -121.5 -418t-341.5 -147q-116 0 -209 48t-147 136h-9l-28 -164h-62v1556h99v-391q0 -88 -4 -162l-3 -85h7q62 98 149.5 144t210.5 46zM639 1018q-192 0 -275 -110t-83 -363v-17q0 -246 86.5 -353t269.5 -107 q178 0 268 124.5t90 354.5q0 471 -356 471z" /> +<glyph unicode="c" horiz-adv-x="973" d="M616 -20q-233 0 -365 147t-132 410q0 270 137 420.5t375 150.5q141 0 270 -49l-27 -88q-141 47 -245 47q-200 0 -303 -123.5t-103 -355.5q0 -220 103 -344.5t288 -124.5q148 0 275 53v-92q-104 -51 -273 -51z" /> +<glyph unicode="d" horiz-adv-x="1219" d="M580 1108q118 0 204 -43t154 -147h6q-6 126 -6 247v391h98v-1556h-65l-25 166h-8q-124 -186 -356 -186q-225 0 -344 140t-119 408q0 282 118 431t343 149zM580 1018q-178 0 -267.5 -125t-89.5 -363q0 -462 359 -462q184 0 270 107t86 353v17q0 252 -84.5 362.5 t-273.5 110.5z" /> +<glyph unicode="e" horiz-adv-x="1124" d="M621 -20q-237 0 -369.5 146t-132.5 409q0 260 128 416.5t345 156.5q192 0 303 -134t111 -364v-80h-783q2 -224 104.5 -342t293.5 -118q93 0 163.5 13t178.5 56v-90q-92 -40 -170 -54.5t-172 -14.5zM592 1020q-157 0 -252 -103.5t-111 -298.5h672q0 189 -82 295.5 t-227 106.5z" /> +<glyph unicode="f" horiz-adv-x="614" d="M586 1001h-256v-1001h-99v1001h-202v58l202 37v84q0 200 73.5 293.5t240.5 93.5q90 0 180 -27l-23 -86q-80 25 -159 25q-116 0 -164.5 -68.5t-48.5 -222.5v-101h256v-86z" /> +<glyph unicode="g" horiz-adv-x="1071" d="M1030 1087v-69l-225 -14q90 -112 90 -246q0 -157 -104.5 -254.5t-280.5 -97.5q-74 0 -104 6q-59 -31 -90 -73t-31 -89q0 -52 39.5 -76t132.5 -24h190q177 0 271 -71.5t94 -211.5q0 -172 -139.5 -265.5t-397.5 -93.5q-205 0 -317.5 79t-112.5 220q0 112 69.5 186 t188.5 101q-49 21 -78.5 59.5t-29.5 88.5q0 109 139 192q-95 39 -148 122.5t-53 191.5q0 163 103.5 261.5t279.5 98.5q107 0 166 -21h348zM150 -184q0 -224 333 -224q428 0 428 273q0 98 -67 142t-217 44h-178q-299 0 -299 -235zM233 748q0 -126 76.5 -195.5t204.5 -69.5 q136 0 208.5 69t72.5 200q0 139 -74.5 208.5t-208.5 69.5q-130 0 -204.5 -74.5t-74.5 -207.5z" /> +<glyph unicode="h" horiz-adv-x="1208" d="M940 0v705q0 164 -69 238.5t-214 74.5q-195 0 -285.5 -98.5t-90.5 -319.5v-600h-99v1556h99v-495l-5 -139h7q61 98 154 142t231 44q370 0 370 -397v-711h-98z" /> +<glyph unicode="i" horiz-adv-x="463" d="M281 0h-99v1087h99v-1087zM168 1389q0 96 63 96q31 0 48.5 -25t17.5 -71q0 -45 -17.5 -71t-48.5 -26q-63 0 -63 97z" /> +<glyph unicode="j" horiz-adv-x="463" d="M37 -492q-80 0 -135 25v86q69 -20 129 -20q151 0 151 176v1312h99v-1298q0 -135 -63.5 -208t-180.5 -73zM168 1389q0 96 63 96q31 0 48.5 -25t17.5 -71q0 -45 -17.5 -71t-48.5 -26q-63 0 -63 97z" /> +<glyph unicode="k" horiz-adv-x="991" d="M279 477l555 610h120l-428 -464l465 -623h-119l-413 549l-178 -162v-387h-99v1556h99v-780l-7 -299h5z" /> +<glyph unicode="l" horiz-adv-x="463" d="M281 0h-99v1556h99v-1556z" /> +<glyph unicode="m" horiz-adv-x="1808" d="M1540 0v713q0 159 -62 232t-190 73q-167 0 -247 -92t-80 -289v-637h-101v743q0 275 -252 275q-171 0 -249 -99.5t-78 -318.5v-600h-99v1087h82l21 -149h6q45 81 128 125.5t183 44.5q257 0 330 -193h4q53 93 142.5 143t203.5 50q178 0 267 -95t89 -302v-711h-98z" /> +<glyph unicode="n" horiz-adv-x="1208" d="M940 0v705q0 164 -69 238.5t-214 74.5q-195 0 -285.5 -98.5t-90.5 -319.5v-600h-99v1087h84l19 -149h6q106 170 377 170q370 0 370 -397v-711h-98z" /> +<glyph unicode="o" horiz-adv-x="1200" d="M1081 545q0 -266 -129 -415.5t-356 -149.5q-143 0 -252 69t-167 198t-58 298q0 266 129 414.5t354 148.5q224 0 351.5 -150.5t127.5 -412.5zM223 545q0 -224 98.5 -349.5t278.5 -125.5t278.5 125.5t98.5 349.5q0 225 -99.5 349t-279.5 124t-277.5 -123.5t-97.5 -349.5z " /> +<glyph unicode="p" horiz-adv-x="1219" d="M647 -20q-251 0 -366 188h-7l3 -84q4 -74 4 -162v-414h-99v1579h84l19 -155h6q112 176 358 176q220 0 335.5 -144.5t115.5 -420.5q0 -268 -121.5 -415.5t-331.5 -147.5zM645 68q167 0 258.5 124t91.5 347q0 479 -346 479q-190 0 -279 -104.5t-89 -340.5v-32 q0 -255 85.5 -364t278.5 -109z" /> +<glyph unicode="q" horiz-adv-x="1219" d="M569 -20q-214 0 -332 142t-118 410q0 275 118 425.5t338 150.5q236 0 353 -174h6l18 153h84v-1579h-98v414q0 122 6 248h-6q-118 -190 -369 -190zM571 68q198 0 282.5 109t84.5 366v12q0 245 -85 354t-271 109q-176 0 -267.5 -124t-91.5 -364q0 -229 89.5 -345.5 t258.5 -116.5z" /> +<glyph unicode="r" horiz-adv-x="797" d="M610 1108q69 0 148 -14l-19 -95q-68 17 -141 17q-139 0 -228 -118t-89 -298v-600h-99v1087h84l10 -196h7q67 120 143 168.5t184 48.5z" /> +<glyph unicode="s" horiz-adv-x="954" d="M856 283q0 -146 -111 -224.5t-315 -78.5q-218 0 -346 67v107q164 -82 346 -82q161 0 244.5 53.5t83.5 142.5q0 82 -66.5 138t-218.5 110q-163 59 -229 101.5t-99.5 96t-33.5 130.5q0 122 102.5 193t286.5 71q176 0 334 -66l-37 -90q-160 66 -297 66q-133 0 -211 -44 t-78 -122q0 -85 60.5 -136t236.5 -114q147 -53 214 -95.5t100.5 -96.5t33.5 -127z" /> +<glyph unicode="t" horiz-adv-x="686" d="M469 68q94 0 164 16v-80q-72 -24 -166 -24q-144 0 -212.5 77t-68.5 242v702h-161v58l161 45l50 246h51v-263h319v-86h-319v-688q0 -125 44 -185t138 -60z" /> +<glyph unicode="u" horiz-adv-x="1208" d="M268 1087v-704q0 -164 69 -238.5t214 -74.5q194 0 285.5 98t91.5 319v600h98v-1087h-84l-18 150h-6q-106 -170 -377 -170q-371 0 -371 397v710h98z" /> +<glyph unicode="v" horiz-adv-x="940" d="M420 0l-420 1087h102l281 -739q56 -142 84 -248h6q41 136 84 250l281 737h102l-420 -1087h-100z" /> +<glyph unicode="w" horiz-adv-x="1481" d="M1051 0l-238 727q-23 74 -59 217h-6l-21 -74l-45 -145l-242 -725h-98l-311 1087h106l174 -630q61 -234 80 -344h6q59 234 86 311l224 663h90l213 -661q72 -235 88 -311h6q8 65 80 348l166 624h100l-295 -1087h-104z" /> +<glyph unicode="x" horiz-adv-x="1020" d="M449 559l-379 528h114l324 -458l321 458h109l-373 -528l400 -559h-115l-342 485l-344 -485h-109z" /> +<glyph unicode="y" horiz-adv-x="940" d="M0 1087h102l230 -610q105 -281 133 -379h6q42 129 137 385l230 604h102l-487 -1263q-59 -154 -99 -208t-93.5 -81t-129.5 -27q-57 0 -127 21v86q58 -16 125 -16q51 0 90 24t70.5 74.5t73 160t53.5 142.5z" /> +<glyph unicode="z" horiz-adv-x="944" d="M858 0h-776v63l645 936h-598v88h727v-63l-649 -936h651v-88z" /> +<glyph unicode="{" horiz-adv-x="723" d="M389 -27q0 -102 59.5 -152.5t202.5 -53.5v-91q-195 0 -277.5 75t-82.5 231v337q0 205 -230 209v80q122 2 176 51t54 148v350q0 299 360 305v-90q-138 -5 -200 -58t-62 -157v-305q0 -130 -44 -194t-142 -85v-8q97 -20 141.5 -83.5t44.5 -186.5v-322z" /> +<glyph unicode="|" horiz-adv-x="1108" d="M508 1561h92v-2067h-92v2067z" /> +<glyph unicode="}" horiz-adv-x="723" d="M334 295q0 123 44.5 186.5t141.5 83.5v8q-97 20 -141.5 84t-44.5 195v305q0 103 -61.5 156.5t-200.5 58.5v90q174 0 267 -77.5t93 -227.5v-350q0 -100 54.5 -148.5t175.5 -50.5v-80q-230 -4 -230 -209v-337q0 -155 -82.5 -230.5t-277.5 -75.5v91q141 2 201.5 52.5 t60.5 153.5v322z" /> +<glyph unicode="~" d="M334 745q-49 0 -108 -30.5t-115 -89.5v94q108 110 233 110q61 0 115 -13.5t155 -57.5q126 -58 220 -58q56 0 109.5 30.5t115.5 94.5v-96q-48 -49 -104.5 -81t-129.5 -32q-116 0 -270 72q-124 57 -221 57z" /> +<glyph unicode="¡" horiz-adv-x="492" d="M215 711h61l29 -1086h-119zM166 1010q0 98 80 98q82 0 82 -98q0 -53 -23.5 -76t-58.5 -23q-34 0 -57 23t-23 76z" /> +<glyph unicode="¢" d="M602 190q-186 30 -288.5 175t-102.5 380q0 232 102.5 381.5t288.5 182.5v174h82v-166h14q131 0 275 -55l-31 -84q-134 51 -237 51q-187 0 -288.5 -122.5t-101.5 -358.5q0 -225 100.5 -349.5t280.5 -124.5q131 0 267 58v-92q-110 -56 -267 -56h-12v-204h-82v210z" /> +<glyph unicode="£" d="M412 676v-256q0 -116 -35 -196t-113 -128h809v-96h-995v84q110 21 171.5 110t61.5 224v258h-211v82h211v297q0 204 98 315t281 111q175 0 330 -68l-35 -86q-157 66 -295 66q-141 0 -209.5 -81t-68.5 -253v-301h411v-82h-411z" /> +<glyph unicode="¤" d="M991 723q0 -151 -90 -256l139 -141l-59 -60l-137 142q-110 -93 -260 -93q-153 0 -260 93l-138 -142l-59 60l139 141q-90 106 -90 256q0 147 90 258l-139 141l59 60l138 -142q103 93 260 93q155 0 260 -93l137 142l59 -60l-139 -141q90 -111 90 -258zM584 395 q134 0 228.5 95.5t94.5 232.5q0 136 -95 233t-228 97q-134 0 -229 -97t-95 -233t94.5 -232t229.5 -96z" /> +<glyph unicode="¥" d="M586 666l428 796h110l-432 -788h283v-82h-338v-205h338v-82h-338v-305h-105v305h-337v82h337v205h-337v82h278l-430 788h117z" /> +<glyph unicode="¦" horiz-adv-x="1108" d="M508 1561h92v-764h-92v764zM508 258h92v-764h-92v764z" /> +<glyph unicode="§" horiz-adv-x="1057" d="M145 813q0 83 50.5 152.5t138.5 107.5q-86 47 -125 102t-39 136q0 117 101.5 183.5t275.5 66.5q175 0 336 -64l-35 -80q-91 34 -158.5 47t-144.5 13q-134 0 -205.5 -44.5t-71.5 -119.5q0 -54 25.5 -88.5t85.5 -65.5t188 -74q192 -64 264 -132.5t72 -170.5 q0 -173 -186 -274q86 -42 129 -96t43 -136q0 -135 -113 -207.5t-311 -72.5q-92 0 -171 15t-165 52v95q182 -78 332 -78q162 0 247 49.5t85 140.5q0 55 -25 87.5t-88.5 65.5t-190.5 79q-200 73 -272 141.5t-72 169.5zM246 825q0 -65 31.5 -104t105.5 -75t250 -99 q82 41 126 98t44 121q0 62 -32 102t-108.5 77t-236.5 87q-81 -23 -130.5 -79t-49.5 -128z" /> +<glyph unicode="¨" horiz-adv-x="1182" d="M336 1389q0 46 15.5 66t47.5 20q64 0 64 -86t-64 -86q-63 0 -63 86zM717 1389q0 46 15.5 66t47.5 20q64 0 64 -86t-64 -86q-63 0 -63 86z" /> +<glyph unicode="©" horiz-adv-x="1704" d="M897 1092q-142 0 -222.5 -94.5t-80.5 -264.5q0 -186 74.5 -275t220.5 -89q84 0 198 43v-88q-102 -45 -208 -45q-187 0 -288.5 115t-101.5 331q0 208 111 332.5t297 124.5q119 0 227 -52l-37 -83q-98 45 -190 45zM100 731q0 200 100 375t275 276t377 101q200 0 375 -100 t276 -275t101 -377q0 -197 -97 -370t-272 -277t-383 -104q-207 0 -382 103.5t-272.5 276.5t-97.5 371zM193 731q0 -178 88.5 -329.5t240.5 -240.5t330 -89t329.5 88.5t240.5 240.5t89 330q0 174 -85.5 325t-239 243t-334.5 92q-176 0 -328.5 -88.5t-241.5 -242.5t-89 -329z " /> +<glyph unicode="ª" horiz-adv-x="686" d="M512 813l-25 72q-84 -84 -202 -84q-95 0 -151 49t-56 139q0 100 80 151.5t241 59.5l95 4v43q0 77 -38 114.5t-106 37.5q-87 0 -196 -49l-33 73q117 56 231 56q228 0 228 -215v-451h-68zM168 993q0 -54 35 -85t96 -31q90 0 142.5 50t52.5 142v64l-88 -5 q-116 -6 -177 -36.5t-61 -98.5z" /> +<glyph unicode="«" horiz-adv-x="885" d="M82 543l309 393l62 -43l-254 -363l254 -362l-62 -43l-309 391v27zM442 543l310 393l61 -43l-254 -363l254 -362l-61 -43l-310 391v27z" /> +<glyph unicode="¬" d="M1038 764v-494h-82v412h-845v82h927z" /> +<glyph unicode="­" horiz-adv-x="659" d="M92 512zM92 512v82h475v-82h-475z" /> +<glyph unicode="®" horiz-adv-x="1704" d="M709 731h112q91 0 143 46.5t52 135.5q0 172 -197 172h-110v-354zM1120 918q0 -79 -38.5 -139.5t-110.5 -94.5l237 -393h-121l-210 360h-168v-360h-101v880h211q143 0 222 -62t79 -191zM100 731q0 200 100 375t275 276t377 101q200 0 375 -100t276 -275t101 -377 q0 -197 -97 -370t-272 -277t-383 -104q-207 0 -382 103.5t-272.5 276.5t-97.5 371zM193 731q0 -178 88.5 -329.5t240.5 -240.5t330 -89t329.5 88.5t240.5 240.5t89 330q0 174 -85.5 325t-239 243t-334.5 92q-176 0 -328.5 -88.5t-241.5 -242.5t-89 -329z" /> +<glyph unicode="¯" horiz-adv-x="1024" d="M1030 1556h-1036v82h1036v-82z" /> +<glyph unicode="°" horiz-adv-x="877" d="M139 1184q0 132 86.5 215.5t212.5 83.5t212.5 -83.5t86.5 -215.5t-86.5 -215.5t-212.5 -83.5q-130 0 -214.5 83t-84.5 216zM229 1184q0 -91 61 -154t148 -63q86 0 147.5 62t61.5 155q0 92 -60 154.5t-149 62.5q-90 0 -149.5 -64t-59.5 -153z" /> +<glyph unicode="±" d="M111 1zM111 1v82h948v-82h-948zM625 764h434v-82h-434v-432h-82v432h-432v82h432v434h82v-434z" /> +<glyph unicode="²" horiz-adv-x="688" d="M629 586h-576v78l242 237q125 121 172 193t47 149q0 71 -46.5 112.5t-123.5 41.5q-108 0 -217 -82l-49 65q119 103 270 103q124 0 194 -63.5t70 -174.5q0 -47 -13 -89t-40 -85.5t-68.5 -90t-308.5 -306.5h447v-88z" /> +<glyph unicode="³" horiz-adv-x="688" d="M616 1260q0 -78 -44 -131.5t-117 -75.5q186 -45 186 -211q0 -130 -88.5 -201.5t-247.5 -71.5q-144 0 -264 60v88q136 -62 266 -62q115 0 174.5 49t59.5 136q0 83 -59.5 122t-178.5 39h-131v84h135q105 0 158 43.5t53 120.5q0 67 -47 107.5t-127 40.5q-128 0 -246 -78 l-47 70q130 94 293 94q127 0 199.5 -60t72.5 -163z" /> +<glyph unicode="´" horiz-adv-x="1182" d="M393 1257q73 79 144.5 171.5t97.5 140.5h141v-17q-36 -52 -122.5 -138t-190.5 -173h-70v16z" /> +<glyph unicode="µ" horiz-adv-x="1221" d="M281 1087v-704q0 -164 69 -238.5t213 -74.5q194 0 285.5 98t91.5 319v600h98v-1087h-84l-18 150h-6q-50 -77 -150 -123.5t-217 -46.5q-99 0 -167.5 27.5t-119.5 84.5q5 -92 5 -170v-414h-99v1579h99z" /> +<glyph unicode="¶" horiz-adv-x="1341" d="M1106 -260h-100v1722h-228v-1722h-100v819q-64 -18 -146 -18q-216 0 -317.5 125t-101.5 376q0 260 109 387t341 127h543v-1816z" /> +<glyph unicode="·" horiz-adv-x="487" d="M162 623zM162 721q0 98 80 98q82 0 82 -98t-82 -98q-80 0 -80 98z" /> +<glyph unicode="¸" horiz-adv-x="420" d="M393 -291q0 -100 -67.5 -150.5t-188.5 -50.5q-68 0 -94 11v88q30 -10 92 -10q78 0 119 28t41 80q0 94 -193 121l93 174h96l-66 -117q168 -37 168 -174z" /> +<glyph unicode="¹" horiz-adv-x="688" d="M350 1462h92v-876h-98v547q0 99 12 233q-26 -23 -233 -145l-47 77z" /> +<glyph unicode="º" horiz-adv-x="739" d="M670 1141q0 -161 -80 -250.5t-223 -89.5t-220 86t-77 254q0 162 78 250t223 88q142 0 220.5 -87t78.5 -251zM160 1141q0 -264 209 -264t209 264q0 131 -50 194.5t-159 63.5t-159 -63.5t-50 -194.5z" /> +<glyph unicode="»" horiz-adv-x="885" d="M803 518l-309 -393l-62 43l254 362l-254 363l62 43l309 -391v-27zM442 518l-309 -393l-61 43l254 362l-254 363l61 43l309 -391v-27z" /> +<glyph unicode="¼" horiz-adv-x="1516" d="M59 0zM333 1462h92v-876h-98v547q0 99 12 233q-26 -23 -233 -145l-47 77zM1148 1462l-811 -1462h-94l811 1462h94zM1392 242h-129v-241h-90v241h-413v60l407 581h96v-563h129v-78zM1173 320v221q0 132 8 232q-6 -12 -21.5 -35.5t-295.5 -417.5h309z" /> +<glyph unicode="½" horiz-adv-x="1516" d="M11 0zM285 1462h92v-876h-98v547q0 99 12 233q-26 -23 -233 -145l-47 77zM1073 1462l-811 -1462h-94l811 1462h94zM1403 1h-576v78l242 237q125 121 172 193t47 149q0 71 -46.5 112.5t-123.5 41.5q-108 0 -217 -82l-49 65q119 103 270 103q124 0 194 -63.5t70 -174.5 q0 -47 -13 -89t-40 -85.5t-68.5 -90t-308.5 -306.5h447v-88z" /> +<glyph unicode="¾" horiz-adv-x="1516" d="M41 0zM616 1260q0 -78 -44 -131.5t-117 -75.5q186 -45 186 -211q0 -130 -88.5 -201.5t-247.5 -71.5q-144 0 -264 60v88q136 -62 266 -62q115 0 174.5 49t59.5 136q0 83 -59.5 122t-178.5 39h-131v84h135q105 0 158 43.5t53 120.5q0 67 -47 107.5t-127 40.5 q-128 0 -246 -78l-47 70q130 94 293 94q127 0 199.5 -60t72.5 -163zM1300 1462l-811 -1462h-94l811 1462h94zM1495 242h-129v-241h-90v241h-413v60l407 581h96v-563h129v-78zM1276 320v221q0 132 8 232q-6 -12 -21.5 -35.5t-295.5 -417.5h309z" /> +<glyph unicode="¿" horiz-adv-x="862" d="M569 711v-37q0 -125 -39.5 -204.5t-136.5 -164.5l-90 -79q-73 -61 -104 -120.5t-31 -138.5q0 -124 82 -200t221 -76q125 0 233 46l64 27l37 -79q-111 -48 -185.5 -64t-152.5 -16q-184 0 -288.5 99t-104.5 269q0 70 20 124t58.5 102t171.5 159q64 53 98.5 98.5t49.5 94 t15 145.5v15h82zM440 1010q0 98 80 98q82 0 82 -98q0 -53 -23.5 -76t-58.5 -23q-34 0 -57 23t-23 76z" /> +<glyph unicode="À" horiz-adv-x="1229" d="M0 0zM911 516h-594l-204 -516h-113l588 1468h65l576 -1468h-115zM354 608h523l-199 527q-25 62 -60 172q-27 -96 -59 -174zM720 1579h-69q-96 79 -188.5 171.5t-125.5 139.5v17h142q26 -48 98.5 -142t142.5 -170v-16z" /> +<glyph unicode="Á" horiz-adv-x="1229" d="M0 0zM911 516h-594l-204 -516h-113l588 1468h65l576 -1468h-115zM354 608h523l-199 527q-25 62 -60 172q-27 -96 -59 -174zM504 1595q73 79 144.5 171.5t97.5 140.5h141v-17q-36 -52 -122.5 -138t-190.5 -173h-70v16z" /> +<glyph unicode="Â" horiz-adv-x="1229" d="M0 0zM911 516h-594l-204 -516h-113l588 1468h65l576 -1468h-115zM354 608h523l-199 527q-25 62 -60 172q-27 -96 -59 -174zM328 1595q62 67 131.5 156t110.5 156h98q68 -120 242 -312v-16h-70q-122 101 -221 207q-108 -114 -221 -207h-70v16z" /> +<glyph unicode="Ã" horiz-adv-x="1229" d="M0 0zM911 516h-594l-204 -516h-113l588 1468h65l576 -1468h-115zM354 608h523l-199 527q-25 62 -60 172q-27 -96 -59 -174zM784 1581q-36 0 -75 18.5t-101 71.5q-32 26 -62.5 46t-62.5 20q-45 0 -75 -34.5t-48 -121.5h-73q10 111 63 174.5t137 63.5q48 0 88 -25t82 -59 q34 -28 66 -50t61 -22q46 0 77 36.5t48 119.5h76q-16 -116 -69 -177t-132 -61z" /> +<glyph unicode="Ä" horiz-adv-x="1229" d="M0 0zM911 516h-594l-204 -516h-113l588 1468h65l576 -1468h-115zM354 608h523l-199 527q-25 62 -60 172q-27 -96 -59 -174zM367 1727q0 46 15.5 66t47.5 20q64 0 64 -86t-64 -86q-63 0 -63 86zM748 1727q0 46 15.5 66t47.5 20q64 0 64 -86t-64 -86q-63 0 -63 86z" /> +<glyph unicode="Å" horiz-adv-x="1229" d="M0 0zM911 516h-594l-204 -516h-113l588 1468h65l576 -1468h-115zM354 608h523l-199 527q-25 62 -60 172q-27 -96 -59 -174zM836 1610q0 -97 -60 -155t-157 -58t-157 58t-60 155q0 94 60 152.5t157 58.5t157 -59t60 -152zM482 1610q0 -66 37.5 -103.5t99.5 -37.5 t99.5 37.5t37.5 103.5q0 64 -39 101.5t-98 37.5q-62 0 -99.5 -38t-37.5 -101z" /> +<glyph unicode="Æ" horiz-adv-x="1653" d="M1528 0h-717v516h-475l-227 -516h-111l653 1462h877v-94h-615v-553h576v-94h-576v-627h615v-94zM377 608h434v760h-100z" /> +<glyph unicode="Ç" horiz-adv-x="1272" d="M129 0zM831 1391q-275 0 -433 -176t-158 -482q0 -313 149 -486t426 -173q184 0 338 47v-90q-145 -51 -362 -51q-308 0 -485 199t-177 556q0 223 84.5 393t243 262.5t368.5 92.5q214 0 383 -80l-41 -92q-160 80 -336 80zM911 -291q0 -100 -67.5 -150.5t-188.5 -50.5 q-68 0 -94 11v88q30 -10 92 -10q78 0 119 28t41 80q0 94 -193 121l93 174h96l-66 -117q168 -37 168 -174z" /> +<glyph unicode="È" horiz-adv-x="1130" d="M207 0zM1006 0h-799v1462h799v-94h-697v-553h658v-94h-658v-627h697v-94zM697 1579h-69q-96 79 -188.5 171.5t-125.5 139.5v17h142q26 -48 98.5 -142t142.5 -170v-16z" /> +<glyph unicode="É" horiz-adv-x="1130" d="M207 0zM1006 0h-799v1462h799v-94h-697v-553h658v-94h-658v-627h697v-94zM463 1595q73 79 144.5 171.5t97.5 140.5h141v-17q-36 -52 -122.5 -138t-190.5 -173h-70v16z" /> +<glyph unicode="Ê" horiz-adv-x="1130" d="M207 0zM1006 0h-799v1462h799v-94h-697v-553h658v-94h-658v-627h697v-94zM315 1595q62 67 131.5 156t110.5 156h98q68 -120 242 -312v-16h-70q-122 101 -221 207q-108 -114 -221 -207h-70v16z" /> +<glyph unicode="Ë" horiz-adv-x="1130" d="M207 0zM1006 0h-799v1462h799v-94h-697v-553h658v-94h-658v-627h697v-94zM354 1727q0 46 15.5 66t47.5 20q64 0 64 -86t-64 -86q-63 0 -63 86zM735 1727q0 46 15.5 66t47.5 20q64 0 64 -86t-64 -86q-63 0 -63 86z" /> +<glyph unicode="Ì" horiz-adv-x="516" d="M0 0zM207 0v1462h102v-1462h-102zM320 1579h-69q-96 79 -188.5 171.5t-125.5 139.5v17h142q26 -48 98.5 -142t142.5 -170v-16z" /> +<glyph unicode="Í" horiz-adv-x="516" d="M191 0zM207 0v1462h102v-1462h-102zM191 1595q73 79 144.5 171.5t97.5 140.5h141v-17q-36 -52 -122.5 -138t-190.5 -173h-70v16z" /> +<glyph unicode="Î" horiz-adv-x="516" d="M0 0zM207 0v1462h102v-1462h-102zM-32 1595q62 67 131.5 156t110.5 156h98q68 -120 242 -312v-16h-70q-122 101 -221 207q-108 -114 -221 -207h-70v16z" /> +<glyph unicode="Ï" horiz-adv-x="516" d="M5 0zM207 0v1462h102v-1462h-102zM5 1727q0 46 15.5 66t47.5 20q64 0 64 -86t-64 -86q-63 0 -63 86zM386 1727q0 46 15.5 66t47.5 20q64 0 64 -86t-64 -86q-63 0 -63 86z" /> +<glyph unicode="Ð" horiz-adv-x="1466" d="M1317 745q0 -368 -193 -556.5t-567 -188.5h-350v678h-160v94h160v690h395q350 0 532.5 -183t182.5 -534zM1206 741q0 314 -159.5 472.5t-468.5 158.5h-269v-600h406v-94h-406v-588h242q655 0 655 651z" /> +<glyph unicode="Ñ" horiz-adv-x="1477" d="M207 0zM1270 0h-103l-866 1298h-8q12 -232 12 -350v-948h-98v1462h102l865 -1296h6q-9 180 -9 342v954h99v-1462zM897 1581q-36 0 -75 18.5t-101 71.5q-32 26 -62.5 46t-62.5 20q-45 0 -75 -34.5t-48 -121.5h-73q10 111 63 174.5t137 63.5q48 0 88 -25t82 -59 q34 -28 66 -50t61 -22q46 0 77 36.5t48 119.5h76q-16 -116 -69 -177t-132 -61z" /> +<glyph unicode="Ò" horiz-adv-x="1565" d="M129 0zM1436 733q0 -348 -174 -550.5t-480 -202.5q-305 0 -479 202.5t-174 552.5q0 349 175.5 549.5t479.5 200.5q306 0 479 -201.5t173 -550.5zM240 733q0 -314 140 -485.5t402 -171.5q264 0 403.5 170t139.5 487q0 316 -139.5 484.5t-401.5 168.5q-261 0 -402.5 -170 t-141.5 -483zM885 1579h-69q-96 79 -188.5 171.5t-125.5 139.5v17h142q26 -48 98.5 -142t142.5 -170v-16z" /> +<glyph unicode="Ó" horiz-adv-x="1565" d="M129 0zM1436 733q0 -348 -174 -550.5t-480 -202.5q-305 0 -479 202.5t-174 552.5q0 349 175.5 549.5t479.5 200.5q306 0 479 -201.5t173 -550.5zM240 733q0 -314 140 -485.5t402 -171.5q264 0 403.5 170t139.5 487q0 316 -139.5 484.5t-401.5 168.5q-261 0 -402.5 -170 t-141.5 -483zM686 1595q73 79 144.5 171.5t97.5 140.5h141v-17q-36 -52 -122.5 -138t-190.5 -173h-70v16z" /> +<glyph unicode="Ô" horiz-adv-x="1565" d="M129 0zM1436 733q0 -348 -174 -550.5t-480 -202.5q-305 0 -479 202.5t-174 552.5q0 349 175.5 549.5t479.5 200.5q306 0 479 -201.5t173 -550.5zM240 733q0 -314 140 -485.5t402 -171.5q264 0 403.5 170t139.5 487q0 316 -139.5 484.5t-401.5 168.5q-261 0 -402.5 -170 t-141.5 -483zM492 1595q62 67 131.5 156t110.5 156h98q68 -120 242 -312v-16h-70q-122 101 -221 207q-108 -114 -221 -207h-70v16z" /> +<glyph unicode="Õ" horiz-adv-x="1565" d="M129 0zM1436 733q0 -348 -174 -550.5t-480 -202.5q-305 0 -479 202.5t-174 552.5q0 349 175.5 549.5t479.5 200.5q306 0 479 -201.5t173 -550.5zM240 733q0 -314 140 -485.5t402 -171.5q264 0 403.5 170t139.5 487q0 316 -139.5 484.5t-401.5 168.5q-261 0 -402.5 -170 t-141.5 -483zM940 1581q-36 0 -75 18.5t-101 71.5q-32 26 -62.5 46t-62.5 20q-45 0 -75 -34.5t-48 -121.5h-73q10 111 63 174.5t137 63.5q48 0 88 -25t82 -59q34 -28 66 -50t61 -22q46 0 77 36.5t48 119.5h76q-16 -116 -69 -177t-132 -61z" /> +<glyph unicode="Ö" horiz-adv-x="1565" d="M129 0zM1436 733q0 -348 -174 -550.5t-480 -202.5q-305 0 -479 202.5t-174 552.5q0 349 175.5 549.5t479.5 200.5q306 0 479 -201.5t173 -550.5zM240 733q0 -314 140 -485.5t402 -171.5q264 0 403.5 170t139.5 487q0 316 -139.5 484.5t-401.5 168.5q-261 0 -402.5 -170 t-141.5 -483zM529 1727q0 46 15.5 66t47.5 20q64 0 64 -86t-64 -86q-63 0 -63 86zM910 1727q0 46 15.5 66t47.5 20q64 0 64 -86t-64 -86q-63 0 -63 86z" /> +<glyph unicode="×" d="M584 780l409 408l58 -58l-408 -407l406 -408l-58 -57l-407 408l-406 -408l-57 57l405 408l-407 407l57 58z" /> +<glyph unicode="Ø" horiz-adv-x="1565" d="M1436 733q0 -348 -174 -550.5t-480 -202.5q-236 0 -395 120l-86 -120l-74 59l90 127q-188 200 -188 569q0 349 175.5 549.5t479.5 200.5q232 0 392 -121l108 152l72 -60l-111 -153q191 -207 191 -570zM1325 733q0 315 -139 486l-742 -1037q133 -106 338 -106 q264 0 403.5 170t139.5 487zM240 733q0 -312 139 -483l739 1034q-133 102 -334 102q-261 0 -402.5 -170t-141.5 -483z" /> +<glyph unicode="Ù" horiz-adv-x="1473" d="M190 0zM1282 1462v-946q0 -252 -146 -394t-407 -142q-254 0 -396.5 142.5t-142.5 397.5v942h103v-946q0 -211 117 -328.5t331 -117.5q209 0 324 115.5t115 320.5v956h102zM833 1579h-69q-96 79 -188.5 171.5t-125.5 139.5v17h142q26 -48 98.5 -142t142.5 -170v-16z" /> +<glyph unicode="Ú" horiz-adv-x="1473" d="M190 0zM1282 1462v-946q0 -252 -146 -394t-407 -142q-254 0 -396.5 142.5t-142.5 397.5v942h103v-946q0 -211 117 -328.5t331 -117.5q209 0 324 115.5t115 320.5v956h102zM633 1595q73 79 144.5 171.5t97.5 140.5h141v-17q-36 -52 -122.5 -138t-190.5 -173h-70v16z" /> +<glyph unicode="Û" horiz-adv-x="1473" d="M190 0zM1282 1462v-946q0 -252 -146 -394t-407 -142q-254 0 -396.5 142.5t-142.5 397.5v942h103v-946q0 -211 117 -328.5t331 -117.5q209 0 324 115.5t115 320.5v956h102zM444 1595q62 67 131.5 156t110.5 156h98q68 -120 242 -312v-16h-70q-122 101 -221 207 q-108 -114 -221 -207h-70v16z" /> +<glyph unicode="Ü" horiz-adv-x="1473" d="M190 0zM1282 1462v-946q0 -252 -146 -394t-407 -142q-254 0 -396.5 142.5t-142.5 397.5v942h103v-946q0 -211 117 -328.5t331 -117.5q209 0 324 115.5t115 320.5v956h102zM481 1727q0 46 15.5 66t47.5 20q64 0 64 -86t-64 -86q-63 0 -63 86zM862 1727q0 46 15.5 66 t47.5 20q64 0 64 -86t-64 -86q-63 0 -63 86z" /> +<glyph unicode="Ý" horiz-adv-x="1081" d="M0 0zM543 662l428 800h110l-487 -897v-565h-105v557l-489 905h117zM434 1595q73 79 144.5 171.5t97.5 140.5h141v-17q-36 -52 -122.5 -138t-190.5 -173h-70v16z" /> +<glyph unicode="Þ" horiz-adv-x="1198" d="M1087 778q0 -212 -144 -325t-408 -113h-226v-340h-102v1462h102v-264h256q522 0 522 -420zM309 428h201q247 0 357 81.5t110 264.5q0 169 -104 250.5t-322 81.5h-242v-678z" /> +<glyph unicode="ß" horiz-adv-x="1194" d="M961 1284q0 -139 -139 -250q-81 -64 -110.5 -100.5t-29.5 -75.5q0 -44 14.5 -68t51.5 -57t102 -78q106 -75 151.5 -124.5t68 -103t22.5 -120.5q0 -156 -88 -241.5t-246 -85.5q-95 0 -174.5 18.5t-126.5 48.5v107q65 -38 148.5 -62t152.5 -24q114 0 174.5 54.5t60.5 160.5 q0 83 -39 144t-149 136q-127 87 -175 147t-48 146q0 60 32.5 110t106.5 108q74 57 106.5 105.5t32.5 106.5q0 93 -70 143t-202 50q-145 0 -226 -69t-81 -196v-1214h-99v1206q0 173 103.5 267t292.5 94q188 0 285.5 -72.5t97.5 -210.5z" /> +<glyph unicode="à" horiz-adv-x="1085" d="M98 0zM842 0l-25 172h-8q-82 -105 -168.5 -148.5t-204.5 -43.5q-160 0 -249 82t-89 227q0 159 132.5 247t383.5 93l207 6v72q0 155 -63 234t-203 79q-151 0 -313 -84l-37 86q179 84 354 84q179 0 267.5 -93t88.5 -290v-723h-73zM442 70q174 0 274.5 99.5t100.5 276.5v107 l-190 -8q-229 -11 -326.5 -71.5t-97.5 -188.5q0 -102 62.5 -158.5t176.5 -56.5zM638 1241h-69q-96 79 -188.5 171.5t-125.5 139.5v17h142q26 -48 98.5 -142t142.5 -170v-16z" /> +<glyph unicode="á" horiz-adv-x="1085" d="M98 0zM842 0l-25 172h-8q-82 -105 -168.5 -148.5t-204.5 -43.5q-160 0 -249 82t-89 227q0 159 132.5 247t383.5 93l207 6v72q0 155 -63 234t-203 79q-151 0 -313 -84l-37 86q179 84 354 84q179 0 267.5 -93t88.5 -290v-723h-73zM442 70q174 0 274.5 99.5t100.5 276.5v107 l-190 -8q-229 -11 -326.5 -71.5t-97.5 -188.5q0 -102 62.5 -158.5t176.5 -56.5zM422 1257q73 79 144.5 171.5t97.5 140.5h141v-17q-36 -52 -122.5 -138t-190.5 -173h-70v16z" /> +<glyph unicode="â" horiz-adv-x="1085" d="M98 0zM842 0l-25 172h-8q-82 -105 -168.5 -148.5t-204.5 -43.5q-160 0 -249 82t-89 227q0 159 132.5 247t383.5 93l207 6v72q0 155 -63 234t-203 79q-151 0 -313 -84l-37 86q179 84 354 84q179 0 267.5 -93t88.5 -290v-723h-73zM442 70q174 0 274.5 99.5t100.5 276.5v107 l-190 -8q-229 -11 -326.5 -71.5t-97.5 -188.5q0 -102 62.5 -158.5t176.5 -56.5zM251 1257q62 67 131.5 156t110.5 156h98q68 -120 242 -312v-16h-70q-122 101 -221 207q-108 -114 -221 -207h-70v16z" /> +<glyph unicode="ã" horiz-adv-x="1085" d="M98 0zM842 0l-25 172h-8q-82 -105 -168.5 -148.5t-204.5 -43.5q-160 0 -249 82t-89 227q0 159 132.5 247t383.5 93l207 6v72q0 155 -63 234t-203 79q-151 0 -313 -84l-37 86q179 84 354 84q179 0 267.5 -93t88.5 -290v-723h-73zM442 70q174 0 274.5 99.5t100.5 276.5v107 l-190 -8q-229 -11 -326.5 -71.5t-97.5 -188.5q0 -102 62.5 -158.5t176.5 -56.5zM697 1243q-36 0 -75 18.5t-101 71.5q-32 26 -62.5 46t-62.5 20q-45 0 -75 -34.5t-48 -121.5h-73q10 111 63 174.5t137 63.5q48 0 88 -25t82 -59q34 -28 66 -50t61 -22q46 0 77 36.5t48 119.5 h76q-16 -116 -69 -177t-132 -61z" /> +<glyph unicode="ä" horiz-adv-x="1085" d="M98 0zM842 0l-25 172h-8q-82 -105 -168.5 -148.5t-204.5 -43.5q-160 0 -249 82t-89 227q0 159 132.5 247t383.5 93l207 6v72q0 155 -63 234t-203 79q-151 0 -313 -84l-37 86q179 84 354 84q179 0 267.5 -93t88.5 -290v-723h-73zM442 70q174 0 274.5 99.5t100.5 276.5v107 l-190 -8q-229 -11 -326.5 -71.5t-97.5 -188.5q0 -102 62.5 -158.5t176.5 -56.5zM282 1389q0 46 15.5 66t47.5 20q64 0 64 -86t-64 -86q-63 0 -63 86zM663 1389q0 46 15.5 66t47.5 20q64 0 64 -86t-64 -86q-63 0 -63 86z" /> +<glyph unicode="å" horiz-adv-x="1085" d="M98 0zM842 0l-25 172h-8q-82 -105 -168.5 -148.5t-204.5 -43.5q-160 0 -249 82t-89 227q0 159 132.5 247t383.5 93l207 6v72q0 155 -63 234t-203 79q-151 0 -313 -84l-37 86q179 84 354 84q179 0 267.5 -93t88.5 -290v-723h-73zM442 70q174 0 274.5 99.5t100.5 276.5v107 l-190 -8q-229 -11 -326.5 -71.5t-97.5 -188.5q0 -102 62.5 -158.5t176.5 -56.5zM759 1456q0 -97 -60 -155t-157 -58t-157 58t-60 155q0 94 60 152.5t157 58.5t157 -59t60 -152zM405 1456q0 -66 37.5 -103.5t99.5 -37.5t99.5 37.5t37.5 103.5q0 64 -39 101.5t-98 37.5 q-62 0 -99.5 -38t-37.5 -101z" /> +<glyph unicode="æ" horiz-adv-x="1731" d="M1243 -20q-295 0 -397 256q-68 -133 -168 -194.5t-252 -61.5q-156 0 -242 82.5t-86 226.5q0 154 125 243t377 97l201 6v72q0 155 -61.5 234t-198.5 79q-148 0 -305 -84l-37 86q173 84 346 84q261 0 325 -211q111 213 347 213q184 0 289.5 -134.5t105.5 -363.5v-80h-715 q0 -460 348 -460q85 0 150 12t174 57v-90q-92 -41 -165 -55t-161 -14zM434 70q169 0 266 99.5t97 276.5v107l-187 -8q-219 -11 -313 -71.5t-94 -188.5q0 -102 61 -158.5t170 -56.5zM1217 1020q-284 0 -314 -402h604q0 188 -77.5 295t-212.5 107z" /> +<glyph unicode="ç" horiz-adv-x="973" d="M119 0zM616 -20q-233 0 -365 147t-132 410q0 270 137 420.5t375 150.5q141 0 270 -49l-27 -88q-141 47 -245 47q-200 0 -303 -123.5t-103 -355.5q0 -220 103 -344.5t288 -124.5q148 0 275 53v-92q-104 -51 -273 -51zM723 -291q0 -100 -67.5 -150.5t-188.5 -50.5 q-68 0 -94 11v88q30 -10 92 -10q78 0 119 28t41 80q0 94 -193 121l93 174h96l-66 -117q168 -37 168 -174z" /> +<glyph unicode="è" horiz-adv-x="1124" d="M119 0zM621 -20q-237 0 -369.5 146t-132.5 409q0 260 128 416.5t345 156.5q192 0 303 -134t111 -364v-80h-783q2 -224 104.5 -342t293.5 -118q93 0 163.5 13t178.5 56v-90q-92 -40 -170 -54.5t-172 -14.5zM592 1020q-157 0 -252 -103.5t-111 -298.5h672q0 189 -82 295.5 t-227 106.5zM685 1241h-69q-96 79 -188.5 171.5t-125.5 139.5v17h142q26 -48 98.5 -142t142.5 -170v-16z" /> +<glyph unicode="é" horiz-adv-x="1124" d="M119 0zM621 -20q-237 0 -369.5 146t-132.5 409q0 260 128 416.5t345 156.5q192 0 303 -134t111 -364v-80h-783q2 -224 104.5 -342t293.5 -118q93 0 163.5 13t178.5 56v-90q-92 -40 -170 -54.5t-172 -14.5zM592 1020q-157 0 -252 -103.5t-111 -298.5h672q0 189 -82 295.5 t-227 106.5zM452 1257q73 79 144.5 171.5t97.5 140.5h141v-17q-36 -52 -122.5 -138t-190.5 -173h-70v16z" /> +<glyph unicode="ê" horiz-adv-x="1124" d="M119 0zM621 -20q-237 0 -369.5 146t-132.5 409q0 260 128 416.5t345 156.5q192 0 303 -134t111 -364v-80h-783q2 -224 104.5 -342t293.5 -118q93 0 163.5 13t178.5 56v-90q-92 -40 -170 -54.5t-172 -14.5zM592 1020q-157 0 -252 -103.5t-111 -298.5h672q0 189 -82 295.5 t-227 106.5zM290 1257q62 67 131.5 156t110.5 156h98q68 -120 242 -312v-16h-70q-122 101 -221 207q-108 -114 -221 -207h-70v16z" /> +<glyph unicode="ë" horiz-adv-x="1124" d="M119 0zM621 -20q-237 0 -369.5 146t-132.5 409q0 260 128 416.5t345 156.5q192 0 303 -134t111 -364v-80h-783q2 -224 104.5 -342t293.5 -118q93 0 163.5 13t178.5 56v-90q-92 -40 -170 -54.5t-172 -14.5zM592 1020q-157 0 -252 -103.5t-111 -298.5h672q0 189 -82 295.5 t-227 106.5zM331 1389q0 46 15.5 66t47.5 20q64 0 64 -86t-64 -86q-63 0 -63 86zM712 1389q0 46 15.5 66t47.5 20q64 0 64 -86t-64 -86q-63 0 -63 86z" /> +<glyph unicode="ì" horiz-adv-x="463" d="M0 0zM281 0h-99v1087h99v-1087zM349 1241h-69q-96 79 -188.5 171.5t-125.5 139.5v17h142q26 -48 98.5 -142t142.5 -170v-16z" /> +<glyph unicode="í" horiz-adv-x="463" d="M107 0zM281 0h-99v1087h99v-1087zM107 1257q73 79 144.5 171.5t97.5 140.5h141v-17q-36 -52 -122.5 -138t-190.5 -173h-70v16z" /> +<glyph unicode="î" horiz-adv-x="463" d="M0 0zM281 0h-99v1087h99v-1087zM-58 1257q62 67 131.5 156t110.5 156h98q68 -120 242 -312v-16h-70q-122 101 -221 207q-108 -114 -221 -207h-70v16z" /> +<glyph unicode="ï" horiz-adv-x="463" d="M0 0zM281 0h-99v1087h99v-1087zM-21 1389q0 46 15.5 66t47.5 20q64 0 64 -86t-64 -86q-63 0 -63 86zM360 1389q0 46 15.5 66t47.5 20q64 0 64 -86t-64 -86q-63 0 -63 86z" /> +<glyph unicode="ð" horiz-adv-x="1174" d="M1055 559q0 -276 -124 -427.5t-349 -151.5q-214 0 -339.5 130t-125.5 361q0 228 126.5 357.5t342.5 129.5q108 0 187.5 -33t148.5 -96l4 2q-64 270 -269 459l-270 -157l-49 77l244 146q-86 62 -199 119l45 81q147 -69 248 -145l225 137l49 -84l-202 -121 q154 -151 230.5 -353t76.5 -431zM950 557q0 146 -97 228.5t-267 82.5q-185 0 -275 -100.5t-90 -304.5q0 -186 94.5 -289.5t268.5 -103.5q179 0 272.5 123t93.5 364z" /> +<glyph unicode="ñ" horiz-adv-x="1208" d="M182 0zM940 0v705q0 164 -69 238.5t-214 74.5q-195 0 -285.5 -98.5t-90.5 -319.5v-600h-99v1087h84l19 -149h6q106 170 377 170q370 0 370 -397v-711h-98zM779 1243q-36 0 -75 18.5t-101 71.5q-32 26 -62.5 46t-62.5 20q-45 0 -75 -34.5t-48 -121.5h-73q10 111 63 174.5 t137 63.5q48 0 88 -25t82 -59q34 -28 66 -50t61 -22q46 0 77 36.5t48 119.5h76q-16 -116 -69 -177t-132 -61z" /> +<glyph unicode="ò" horiz-adv-x="1200" d="M119 0zM1081 545q0 -266 -129 -415.5t-356 -149.5q-143 0 -252 69t-167 198t-58 298q0 266 129 414.5t354 148.5q224 0 351.5 -150.5t127.5 -412.5zM223 545q0 -224 98.5 -349.5t278.5 -125.5t278.5 125.5t98.5 349.5q0 225 -99.5 349t-279.5 124t-277.5 -123.5 t-97.5 -349.5zM718 1241h-69q-96 79 -188.5 171.5t-125.5 139.5v17h142q26 -48 98.5 -142t142.5 -170v-16z" /> +<glyph unicode="ó" horiz-adv-x="1200" d="M119 0zM1081 545q0 -266 -129 -415.5t-356 -149.5q-143 0 -252 69t-167 198t-58 298q0 266 129 414.5t354 148.5q224 0 351.5 -150.5t127.5 -412.5zM223 545q0 -224 98.5 -349.5t278.5 -125.5t278.5 125.5t98.5 349.5q0 225 -99.5 349t-279.5 124t-277.5 -123.5 t-97.5 -349.5zM499 1257q73 79 144.5 171.5t97.5 140.5h141v-17q-36 -52 -122.5 -138t-190.5 -173h-70v16z" /> +<glyph unicode="ô" horiz-adv-x="1200" d="M119 0zM1081 545q0 -266 -129 -415.5t-356 -149.5q-143 0 -252 69t-167 198t-58 298q0 266 129 414.5t354 148.5q224 0 351.5 -150.5t127.5 -412.5zM223 545q0 -224 98.5 -349.5t278.5 -125.5t278.5 125.5t98.5 349.5q0 225 -99.5 349t-279.5 124t-277.5 -123.5 t-97.5 -349.5zM309 1257q62 67 131.5 156t110.5 156h98q68 -120 242 -312v-16h-70q-122 101 -221 207q-108 -114 -221 -207h-70v16z" /> +<glyph unicode="õ" horiz-adv-x="1200" d="M119 0zM1081 545q0 -266 -129 -415.5t-356 -149.5q-143 0 -252 69t-167 198t-58 298q0 266 129 414.5t354 148.5q224 0 351.5 -150.5t127.5 -412.5zM223 545q0 -224 98.5 -349.5t278.5 -125.5t278.5 125.5t98.5 349.5q0 225 -99.5 349t-279.5 124t-277.5 -123.5 t-97.5 -349.5zM761 1243q-36 0 -75 18.5t-101 71.5q-32 26 -62.5 46t-62.5 20q-45 0 -75 -34.5t-48 -121.5h-73q10 111 63 174.5t137 63.5q48 0 88 -25t82 -59q34 -28 66 -50t61 -22q46 0 77 36.5t48 119.5h76q-16 -116 -69 -177t-132 -61z" /> +<glyph unicode="ö" horiz-adv-x="1200" d="M119 0zM1081 545q0 -266 -129 -415.5t-356 -149.5q-143 0 -252 69t-167 198t-58 298q0 266 129 414.5t354 148.5q224 0 351.5 -150.5t127.5 -412.5zM223 545q0 -224 98.5 -349.5t278.5 -125.5t278.5 125.5t98.5 349.5q0 225 -99.5 349t-279.5 124t-277.5 -123.5 t-97.5 -349.5zM346 1389q0 46 15.5 66t47.5 20q64 0 64 -86t-64 -86q-63 0 -63 86zM727 1389q0 46 15.5 66t47.5 20q64 0 64 -86t-64 -86q-63 0 -63 86z" /> +<glyph unicode="÷" d="M111 682v82h948v-82h-948zM504 1075q0 99 80 99q82 0 82 -99q0 -52 -23.5 -75t-58.5 -23q-34 0 -57 23t-23 75zM504 371q0 98 80 98q82 0 82 -98q0 -53 -23.5 -76t-58.5 -23q-34 0 -57 23t-23 76z" /> +<glyph unicode="ø" horiz-adv-x="1200" d="M1081 545q0 -266 -129 -415.5t-356 -149.5q-173 0 -291 98l-86 -113l-72 58l93 120q-121 153 -121 402q0 266 129 414.5t354 148.5q179 0 301 -104l96 124l74 -55l-104 -137q112 -147 112 -391zM223 545q0 -200 78 -322l543 705q-98 90 -246 90q-180 0 -277.5 -123.5 t-97.5 -349.5zM977 545q0 190 -72 309l-543 -702q94 -82 238 -82q180 0 278.5 125.5t98.5 349.5z" /> +<glyph unicode="ù" horiz-adv-x="1208" d="M170 0zM268 1087v-704q0 -164 69 -238.5t214 -74.5q194 0 285.5 98t91.5 319v600h98v-1087h-84l-18 150h-6q-106 -170 -377 -170q-371 0 -371 397v710h98zM687 1241h-69q-96 79 -188.5 171.5t-125.5 139.5v17h142q26 -48 98.5 -142t142.5 -170v-16z" /> +<glyph unicode="ú" horiz-adv-x="1208" d="M170 0zM268 1087v-704q0 -164 69 -238.5t214 -74.5q194 0 285.5 98t91.5 319v600h98v-1087h-84l-18 150h-6q-106 -170 -377 -170q-371 0 -371 397v710h98zM495 1257q73 79 144.5 171.5t97.5 140.5h141v-17q-36 -52 -122.5 -138t-190.5 -173h-70v16z" /> +<glyph unicode="û" horiz-adv-x="1208" d="M170 0zM268 1087v-704q0 -164 69 -238.5t214 -74.5q194 0 285.5 98t91.5 319v600h98v-1087h-84l-18 150h-6q-106 -170 -377 -170q-371 0 -371 397v710h98zM313 1257q62 67 131.5 156t110.5 156h98q68 -120 242 -312v-16h-70q-122 101 -221 207q-108 -114 -221 -207h-70 v16z" /> +<glyph unicode="ü" horiz-adv-x="1208" d="M170 0zM268 1087v-704q0 -164 69 -238.5t214 -74.5q194 0 285.5 98t91.5 319v600h98v-1087h-84l-18 150h-6q-106 -170 -377 -170q-371 0 -371 397v710h98zM350 1389q0 46 15.5 66t47.5 20q64 0 64 -86t-64 -86q-63 0 -63 86zM731 1389q0 46 15.5 66t47.5 20q64 0 64 -86 t-64 -86q-63 0 -63 86z" /> +<glyph unicode="ý" horiz-adv-x="940" d="M0 0zM0 1087h102l230 -610q105 -281 133 -379h6q42 129 137 385l230 604h102l-487 -1263q-59 -154 -99 -208t-93.5 -81t-129.5 -27q-57 0 -127 21v86q58 -16 125 -16q51 0 90 24t70.5 74.5t73 160t53.5 142.5zM361 1257q73 79 144.5 171.5t97.5 140.5h141v-17 q-36 -52 -122.5 -138t-190.5 -173h-70v16z" /> +<glyph unicode="þ" horiz-adv-x="1219" d="M281 918q114 190 368 190q220 0 335.5 -144.5t115.5 -420.5q0 -268 -121.5 -415.5t-331.5 -147.5q-251 0 -366 188h-7l3 -84q4 -74 4 -162v-414h-99v2048h99v-391l-7 -247h7zM645 68q167 0 258.5 124t91.5 347q0 479 -348 479q-193 0 -279.5 -105t-86.5 -354v-18 q0 -255 85.5 -364t278.5 -109z" /> +<glyph unicode="ÿ" horiz-adv-x="940" d="M0 0zM0 1087h102l230 -610q105 -281 133 -379h6q42 129 137 385l230 604h102l-487 -1263q-59 -154 -99 -208t-93.5 -81t-129.5 -27q-57 0 -127 21v86q58 -16 125 -16q51 0 90 24t70.5 74.5t73 160t53.5 142.5zM214 1389q0 46 15.5 66t47.5 20q64 0 64 -86t-64 -86 q-63 0 -63 86zM595 1389q0 46 15.5 66t47.5 20q64 0 64 -86t-64 -86q-63 0 -63 86z" /> +<glyph unicode="ı" horiz-adv-x="463" d="M281 0h-99v1087h99v-1087z" /> +<glyph unicode="Œ" horiz-adv-x="1839" d="M1714 0h-756q-76 -16 -176 -16q-305 0 -479 200t-174 551q0 347 174.5 545.5t480.5 198.5q78 0 183 -17h747v-94h-655v-553h616v-94h-616v-627h655v-94zM782 80q109 0 174 18v1266q-62 16 -172 16q-262 0 -403 -167.5t-141 -479.5q0 -315 140.5 -484t401.5 -169z" /> +<glyph unicode="œ" horiz-adv-x="1942" d="M1438 -20q-156 0 -266.5 67.5t-165.5 198.5q-59 -128 -158 -197t-252 -69q-143 0 -252 69t-167 198t-58 298q0 266 129 414.5t354 148.5q151 0 251 -70t157 -209q110 279 399 279q192 0 303 -134t111 -364v-80h-762q2 -230 100.5 -345t276.5 -115q93 0 163.5 13t178.5 56 v-90q-92 -40 -170 -54.5t-172 -14.5zM223 545q0 -224 98.5 -349.5t278.5 -125.5q174 0 265 122.5t91 352.5q0 224 -93 348.5t-265 124.5q-180 0 -277.5 -123.5t-97.5 -349.5zM1409 1020q-155 0 -242 -104t-102 -298h653q0 189 -82 295.5t-227 106.5z" /> +<glyph unicode="Ÿ" horiz-adv-x="1081" d="M0 0zM543 662l428 800h110l-487 -897v-565h-105v557l-489 905h117zM288 1727q0 46 15.5 66t47.5 20q64 0 64 -86t-64 -86q-63 0 -63 86zM669 1727q0 46 15.5 66t47.5 20q64 0 64 -86t-64 -86q-63 0 -63 86z" /> +<glyph unicode="ˆ" horiz-adv-x="1182" d="M299 1257q62 67 131.5 156t110.5 156h98q68 -120 242 -312v-16h-70q-122 101 -221 207q-108 -114 -221 -207h-70v16z" /> +<glyph unicode="˚" horiz-adv-x="1182" d="M805 1456q0 -97 -60 -155t-157 -58t-157 58t-60 155q0 94 60 152.5t157 58.5t157 -59t60 -152zM451 1456q0 -66 37.5 -103.5t99.5 -37.5t99.5 37.5t37.5 103.5q0 64 -39 101.5t-98 37.5q-62 0 -99.5 -38t-37.5 -101z" /> +<glyph unicode="˜" horiz-adv-x="1182" d="M780 1243q-36 0 -75 18.5t-101 71.5q-32 26 -62.5 46t-62.5 20q-45 0 -75 -34.5t-48 -121.5h-73q10 111 63 174.5t137 63.5q48 0 88 -25t82 -59q34 -28 66 -50t61 -22q46 0 77 36.5t48 119.5h76q-16 -116 -69 -177t-132 -61z" /> +<glyph unicode=" " horiz-adv-x="953" /> +<glyph unicode=" " horiz-adv-x="1907" /> +<glyph unicode=" " horiz-adv-x="953" /> +<glyph unicode=" " horiz-adv-x="1907" /> +<glyph unicode=" " horiz-adv-x="635" /> +<glyph unicode=" " horiz-adv-x="476" /> +<glyph unicode=" " horiz-adv-x="317" /> +<glyph unicode=" " horiz-adv-x="317" /> +<glyph unicode=" " horiz-adv-x="238" /> +<glyph unicode=" " horiz-adv-x="381" /> +<glyph unicode=" " horiz-adv-x="105" /> +<glyph unicode="‐" horiz-adv-x="659" d="M92 512v82h475v-82h-475z" /> +<glyph unicode="‑" horiz-adv-x="659" d="M92 512v82h475v-82h-475z" /> +<glyph unicode="‒" horiz-adv-x="659" d="M92 512v82h475v-82h-475z" /> +<glyph unicode="–" horiz-adv-x="1024" d="M82 512v82h860v-82h-860z" /> +<glyph unicode="—" horiz-adv-x="2048" d="M82 512v82h1884v-82h-1884z" /> +<glyph unicode="‘" horiz-adv-x="297" d="M41 961l-12 20q32 112 81.5 251t92.5 230h65q-30 -101 -64.5 -257t-45.5 -244h-117z" /> +<glyph unicode="’" horiz-adv-x="297" d="M256 1462l12 -20q-75 -265 -174 -481h-65q29 96 61 241.5t49 259.5h117z" /> +<glyph unicode="‚" horiz-adv-x="451" d="M68 0zM295 238l12 -20q-75 -265 -174 -481h-65q29 96 61 241.5t49 259.5h117z" /> +<glyph unicode="“" horiz-adv-x="614" d="M358 961l-12 20q34 120 83 255t91 226h66q-30 -98 -63 -248.5t-48 -252.5h-117zM41 961l-12 20q32 112 81.5 251t92.5 230h65q-30 -101 -64.5 -257t-45.5 -244h-117z" /> +<glyph unicode="”" horiz-adv-x="614" d="M256 1462l12 -20q-75 -265 -174 -481h-65q29 96 61 241.5t49 259.5h117zM573 1462l13 -20q-36 -128 -85 -261t-89 -220h-66q30 98 63 248.5t48 252.5h116z" /> +<glyph unicode="„" horiz-adv-x="768" d="M68 0zM295 238l12 -20q-75 -265 -174 -481h-65q29 96 61 241.5t49 259.5h117zM612 238l13 -20q-36 -128 -85 -261t-89 -220h-66q30 98 63 248.5t48 252.5h116z" /> +<glyph unicode="•" horiz-adv-x="770" d="M231 748q0 89 40.5 134.5t113.5 45.5t113.5 -47t40.5 -133q0 -85 -41 -133t-113 -48t-113 47t-41 134z" /> +<glyph unicode="…" horiz-adv-x="1466" d="M162 0zM162 78q0 98 80 98q82 0 82 -98t-82 -98q-80 0 -80 98zM651 78q0 98 80 98q82 0 82 -98t-82 -98q-80 0 -80 98zM1141 78q0 98 80 98q82 0 82 -98t-82 -98q-80 0 -80 98z" /> +<glyph unicode=" " horiz-adv-x="381" /> +<glyph unicode="‹" horiz-adv-x="524" d="M82 543l309 393l62 -43l-254 -363l254 -362l-62 -43l-309 391v27z" /> +<glyph unicode="›" horiz-adv-x="524" d="M442 518l-309 -393l-61 43l254 362l-254 363l61 43l309 -391v-27z" /> +<glyph unicode="⁄" horiz-adv-x="246" d="M573 1462l-811 -1462h-94l811 1462h94z" /> +<glyph unicode=" " horiz-adv-x="476" /> +<glyph unicode="⁴" horiz-adv-x="688" d="M657 827h-129v-241h-90v241h-413v60l407 581h96v-563h129v-78zM438 905v221q0 132 8 232q-6 -12 -21.5 -35.5t-295.5 -417.5h309z" /> +<glyph unicode="€" d="M803 1397q-174 0 -288 -125.5t-155 -364.5h502v-82h-510l-4 -104v-24q0 -65 4 -87h449v-82h-443q30 -217 147.5 -338.5t301.5 -121.5q148 0 287 65v-94q-81 -34 -150.5 -46.5t-140.5 -12.5q-228 0 -367.5 140t-181.5 408h-180v82h172q-4 38 -4 113l4 102h-172v82h184 q39 272 183 425t362 153q88 0 161 -17t148 -57l-39 -86q-132 72 -270 72z" /> +<glyph unicode="™" horiz-adv-x="1485" d="M313 741h-86v643h-217v78h522v-78h-219v-643zM913 741l-221 609h-6l4 -201v-408h-82v721h125l221 -606l224 606h125v-721h-86v398l4 207h-7l-227 -605h-74z" /> +<glyph unicode="−" d="M111 682v82h948v-82h-948z" /> +<glyph unicode="" horiz-adv-x="1085" d="M0 1085h1085v-1085h-1085v1085z" /> +<glyph horiz-adv-x="1219" d="M0 0z" /> +<hkern u1=""" u2="Ÿ" k="-20" /> +<hkern u1=""" u2="œ" k="123" /> +<hkern u1=""" u2="ü" k="61" /> +<hkern u1=""" u2="û" k="61" /> +<hkern u1=""" u2="ú" k="61" /> +<hkern u1=""" u2="ù" k="61" /> +<hkern u1=""" u2="ø" k="123" /> +<hkern u1=""" u2="ö" k="123" /> +<hkern u1=""" u2="õ" k="123" /> +<hkern u1=""" u2="ô" k="123" /> +<hkern u1=""" u2="ó" k="123" /> +<hkern u1=""" u2="ò" k="123" /> +<hkern u1=""" u2="ë" k="123" /> +<hkern u1=""" u2="ê" k="123" /> +<hkern u1=""" u2="é" k="123" /> +<hkern u1=""" u2="è" k="123" /> +<hkern u1=""" u2="ç" k="123" /> +<hkern u1=""" u2="æ" k="82" /> +<hkern u1=""" u2="å" k="82" /> +<hkern u1=""" u2="ä" k="82" /> +<hkern u1=""" u2="ã" k="82" /> +<hkern u1=""" u2="â" k="82" /> +<hkern u1=""" u2="á" k="82" /> +<hkern u1=""" u2="à" k="123" /> +<hkern u1=""" u2="Ý" k="-20" /> +<hkern u1=""" u2="Å" k="143" /> +<hkern u1=""" u2="Ä" k="143" /> +<hkern u1=""" u2="Ã" k="143" /> +<hkern u1=""" u2="Â" k="143" /> +<hkern u1=""" u2="Á" k="143" /> +<hkern u1=""" u2="À" k="143" /> +<hkern u1=""" u2="u" k="61" /> +<hkern u1=""" u2="s" k="61" /> +<hkern u1=""" u2="r" k="61" /> +<hkern u1=""" u2="q" k="123" /> +<hkern u1=""" u2="p" k="61" /> +<hkern u1=""" u2="o" k="123" /> +<hkern u1=""" u2="n" k="61" /> +<hkern u1=""" u2="m" k="61" /> +<hkern u1=""" u2="g" k="61" /> +<hkern u1=""" u2="e" k="123" /> +<hkern u1=""" u2="d" k="123" /> +<hkern u1=""" u2="c" k="123" /> +<hkern u1=""" u2="a" k="82" /> +<hkern u1=""" u2="Y" k="-20" /> +<hkern u1=""" u2="W" k="-41" /> +<hkern u1=""" u2="V" k="-41" /> +<hkern u1=""" u2="T" k="-41" /> +<hkern u1=""" u2="A" k="143" /> +<hkern u1="'" u2="Ÿ" k="-20" /> +<hkern u1="'" u2="œ" k="123" /> +<hkern u1="'" u2="ü" k="61" /> +<hkern u1="'" u2="û" k="61" /> +<hkern u1="'" u2="ú" k="61" /> +<hkern u1="'" u2="ù" k="61" /> +<hkern u1="'" u2="ø" k="123" /> +<hkern u1="'" u2="ö" k="123" /> +<hkern u1="'" u2="õ" k="123" /> +<hkern u1="'" u2="ô" k="123" /> +<hkern u1="'" u2="ó" k="123" /> +<hkern u1="'" u2="ò" k="123" /> +<hkern u1="'" u2="ë" k="123" /> +<hkern u1="'" u2="ê" k="123" /> +<hkern u1="'" u2="é" k="123" /> +<hkern u1="'" u2="è" k="123" /> +<hkern u1="'" u2="ç" k="123" /> +<hkern u1="'" u2="æ" k="82" /> +<hkern u1="'" u2="å" k="82" /> +<hkern u1="'" u2="ä" k="82" /> +<hkern u1="'" u2="ã" k="82" /> +<hkern u1="'" u2="â" k="82" /> +<hkern u1="'" u2="á" k="82" /> +<hkern u1="'" u2="à" k="123" /> +<hkern u1="'" u2="Ý" k="-20" /> +<hkern u1="'" u2="Å" k="143" /> +<hkern u1="'" u2="Ä" k="143" /> +<hkern u1="'" u2="Ã" k="143" /> +<hkern u1="'" u2="Â" k="143" /> +<hkern u1="'" u2="Á" k="143" /> +<hkern u1="'" u2="À" k="143" /> +<hkern u1="'" u2="u" k="61" /> +<hkern u1="'" u2="s" k="61" /> +<hkern u1="'" u2="r" k="61" /> +<hkern u1="'" u2="q" k="123" /> +<hkern u1="'" u2="p" k="61" /> +<hkern u1="'" u2="o" k="123" /> +<hkern u1="'" u2="n" k="61" /> +<hkern u1="'" u2="m" k="61" /> +<hkern u1="'" u2="g" k="61" /> +<hkern u1="'" u2="e" k="123" /> +<hkern u1="'" u2="d" k="123" /> +<hkern u1="'" u2="c" k="123" /> +<hkern u1="'" u2="a" k="82" /> +<hkern u1="'" u2="Y" k="-20" /> +<hkern u1="'" u2="W" k="-41" /> +<hkern u1="'" u2="V" k="-41" /> +<hkern u1="'" u2="T" k="-41" /> +<hkern u1="'" u2="A" k="143" /> +<hkern u1="(" u2="J" k="-184" /> +<hkern u1="," u2="Ÿ" k="123" /> +<hkern u1="," u2="Œ" k="102" /> +<hkern u1="," u2="Ý" k="123" /> +<hkern u1="," u2="Ü" k="41" /> +<hkern u1="," u2="Û" k="41" /> +<hkern u1="," u2="Ú" k="41" /> +<hkern u1="," u2="Ù" k="41" /> +<hkern u1="," u2="Ø" k="102" /> +<hkern u1="," u2="Ö" k="102" /> +<hkern u1="," u2="Õ" k="102" /> +<hkern u1="," u2="Ô" k="102" /> +<hkern u1="," u2="Ó" k="102" /> +<hkern u1="," u2="Ò" k="102" /> +<hkern u1="," u2="Ç" k="102" /> +<hkern u1="," u2="Y" k="123" /> +<hkern u1="," u2="W" k="123" /> +<hkern u1="," u2="V" k="123" /> +<hkern u1="," u2="U" k="41" /> +<hkern u1="," u2="T" k="143" /> +<hkern u1="," u2="Q" k="102" /> +<hkern u1="," u2="O" k="102" /> +<hkern u1="," u2="G" k="102" /> +<hkern u1="," u2="C" k="102" /> +<hkern u1="-" u2="T" k="82" /> +<hkern u1="." u2="Ÿ" k="123" /> +<hkern u1="." u2="Œ" k="102" /> +<hkern u1="." u2="Ý" k="123" /> +<hkern u1="." u2="Ü" k="41" /> +<hkern u1="." u2="Û" k="41" /> +<hkern u1="." u2="Ú" k="41" /> +<hkern u1="." u2="Ù" k="41" /> +<hkern u1="." u2="Ø" k="102" /> +<hkern u1="." u2="Ö" k="102" /> +<hkern u1="." u2="Õ" k="102" /> +<hkern u1="." u2="Ô" k="102" /> +<hkern u1="." u2="Ó" k="102" /> +<hkern u1="." u2="Ò" k="102" /> +<hkern u1="." u2="Ç" k="102" /> +<hkern u1="." u2="Y" k="123" /> +<hkern u1="." u2="W" k="123" /> +<hkern u1="." u2="V" k="123" /> +<hkern u1="." u2="U" k="41" /> +<hkern u1="." u2="T" k="143" /> +<hkern u1="." u2="Q" k="102" /> +<hkern u1="." u2="O" k="102" /> +<hkern u1="." u2="G" k="102" /> +<hkern u1="." u2="C" k="102" /> +<hkern u1="A" u2="”" k="143" /> +<hkern u1="A" u2="’" k="143" /> +<hkern u1="A" u2="Ÿ" k="123" /> +<hkern u1="A" u2="Œ" k="41" /> +<hkern u1="A" u2="Ý" k="123" /> +<hkern u1="A" u2="Ø" k="41" /> +<hkern u1="A" u2="Ö" k="41" /> +<hkern u1="A" u2="Õ" k="41" /> +<hkern u1="A" u2="Ô" k="41" /> +<hkern u1="A" u2="Ó" k="41" /> +<hkern u1="A" u2="Ò" k="41" /> +<hkern u1="A" u2="Ç" k="41" /> +<hkern u1="A" u2="Y" k="123" /> +<hkern u1="A" u2="W" k="82" /> +<hkern u1="A" u2="V" k="82" /> +<hkern u1="A" u2="T" k="143" /> +<hkern u1="A" u2="Q" k="41" /> +<hkern u1="A" u2="O" k="41" /> +<hkern u1="A" u2="J" k="-266" /> +<hkern u1="A" u2="G" k="41" /> +<hkern u1="A" u2="C" k="41" /> +<hkern u1="A" u2="'" k="143" /> +<hkern u1="A" u2=""" k="143" /> +<hkern u1="B" u2="„" k="82" /> +<hkern u1="B" u2="‚" k="82" /> +<hkern u1="B" u2="Ÿ" k="20" /> +<hkern u1="B" u2="Ý" k="20" /> +<hkern u1="B" u2="Å" k="41" /> +<hkern u1="B" u2="Ä" k="41" /> +<hkern u1="B" u2="Ã" k="41" /> +<hkern u1="B" u2="Â" k="41" /> +<hkern u1="B" u2="Á" k="41" /> +<hkern u1="B" u2="À" k="41" /> +<hkern u1="B" u2="Z" k="20" /> +<hkern u1="B" u2="Y" k="20" /> +<hkern u1="B" u2="X" k="41" /> +<hkern u1="B" u2="W" k="20" /> +<hkern u1="B" u2="V" k="20" /> +<hkern u1="B" u2="T" k="61" /> +<hkern u1="B" u2="A" k="41" /> +<hkern u1="B" u2="." k="82" /> +<hkern u1="B" u2="," k="82" /> +<hkern u1="C" u2="Œ" k="41" /> +<hkern u1="C" u2="Ø" k="41" /> +<hkern u1="C" u2="Ö" k="41" /> +<hkern u1="C" u2="Õ" k="41" /> +<hkern u1="C" u2="Ô" k="41" /> +<hkern u1="C" u2="Ó" k="41" /> +<hkern u1="C" u2="Ò" k="41" /> +<hkern u1="C" u2="Ç" k="41" /> +<hkern u1="C" u2="Q" k="41" /> +<hkern u1="C" u2="O" k="41" /> +<hkern u1="C" u2="G" k="41" /> +<hkern u1="C" u2="C" k="41" /> +<hkern u1="D" u2="„" k="82" /> +<hkern u1="D" u2="‚" k="82" /> +<hkern u1="D" u2="Ÿ" k="20" /> +<hkern u1="D" u2="Ý" k="20" /> +<hkern u1="D" u2="Å" k="41" /> +<hkern u1="D" u2="Ä" k="41" /> +<hkern u1="D" u2="Ã" k="41" /> +<hkern u1="D" u2="Â" k="41" /> +<hkern u1="D" u2="Á" k="41" /> +<hkern u1="D" u2="À" k="41" /> +<hkern u1="D" u2="Z" k="20" /> +<hkern u1="D" u2="Y" k="20" /> +<hkern u1="D" u2="X" k="41" /> +<hkern u1="D" u2="W" k="20" /> +<hkern u1="D" u2="V" k="20" /> +<hkern u1="D" u2="T" k="61" /> +<hkern u1="D" u2="A" k="41" /> +<hkern u1="D" u2="." k="82" /> +<hkern u1="D" u2="," k="82" /> +<hkern u1="E" u2="J" k="-123" /> +<hkern u1="F" u2="„" k="123" /> +<hkern u1="F" u2="‚" k="123" /> +<hkern u1="F" u2="Å" k="41" /> +<hkern u1="F" u2="Ä" k="41" /> +<hkern u1="F" u2="Ã" k="41" /> +<hkern u1="F" u2="Â" k="41" /> +<hkern u1="F" u2="Á" k="41" /> +<hkern u1="F" u2="À" k="41" /> +<hkern u1="F" u2="A" k="41" /> +<hkern u1="F" u2="?" k="-41" /> +<hkern u1="F" u2="." k="123" /> +<hkern u1="F" u2="," k="123" /> +<hkern u1="K" u2="Œ" k="41" /> +<hkern u1="K" u2="Ø" k="41" /> +<hkern u1="K" u2="Ö" k="41" /> +<hkern u1="K" u2="Õ" k="41" /> +<hkern u1="K" u2="Ô" k="41" /> +<hkern u1="K" u2="Ó" k="41" /> +<hkern u1="K" u2="Ò" k="41" /> +<hkern u1="K" u2="Ç" k="41" /> +<hkern u1="K" u2="Q" k="41" /> +<hkern u1="K" u2="O" k="41" /> +<hkern u1="K" u2="G" k="41" /> +<hkern u1="K" u2="C" k="41" /> +<hkern u1="L" u2="”" k="164" /> +<hkern u1="L" u2="’" k="164" /> +<hkern u1="L" u2="Ÿ" k="61" /> +<hkern u1="L" u2="Œ" k="41" /> +<hkern u1="L" u2="Ý" k="61" /> +<hkern u1="L" u2="Ü" k="20" /> +<hkern u1="L" u2="Û" k="20" /> +<hkern u1="L" u2="Ú" k="20" /> +<hkern u1="L" u2="Ù" k="20" /> +<hkern u1="L" u2="Ø" k="41" /> +<hkern u1="L" u2="Ö" k="41" /> +<hkern u1="L" u2="Õ" k="41" /> +<hkern u1="L" u2="Ô" k="41" /> +<hkern u1="L" u2="Ó" k="41" /> +<hkern u1="L" u2="Ò" k="41" /> +<hkern u1="L" u2="Ç" k="41" /> +<hkern u1="L" u2="Y" k="61" /> +<hkern u1="L" u2="W" k="41" /> +<hkern u1="L" u2="V" k="41" /> +<hkern u1="L" u2="U" k="20" /> +<hkern u1="L" u2="T" k="41" /> +<hkern u1="L" u2="Q" k="41" /> +<hkern u1="L" u2="O" k="41" /> +<hkern u1="L" u2="G" k="41" /> +<hkern u1="L" u2="C" k="41" /> +<hkern u1="L" u2="'" k="164" /> +<hkern u1="L" u2=""" k="164" /> +<hkern u1="O" u2="„" k="82" /> +<hkern u1="O" u2="‚" k="82" /> +<hkern u1="O" u2="Ÿ" k="20" /> +<hkern u1="O" u2="Ý" k="20" /> +<hkern u1="O" u2="Å" k="41" /> +<hkern u1="O" u2="Ä" k="41" /> +<hkern u1="O" u2="Ã" k="41" /> +<hkern u1="O" u2="Â" k="41" /> +<hkern u1="O" u2="Á" k="41" /> +<hkern u1="O" u2="À" k="41" /> +<hkern u1="O" u2="Z" k="20" /> +<hkern u1="O" u2="Y" k="20" /> +<hkern u1="O" u2="X" k="41" /> +<hkern u1="O" u2="W" k="20" /> +<hkern u1="O" u2="V" k="20" /> +<hkern u1="O" u2="T" k="61" /> +<hkern u1="O" u2="A" k="41" /> +<hkern u1="O" u2="." k="82" /> +<hkern u1="O" u2="," k="82" /> +<hkern u1="P" u2="„" k="266" /> +<hkern u1="P" u2="‚" k="266" /> +<hkern u1="P" u2="Å" k="102" /> +<hkern u1="P" u2="Ä" k="102" /> +<hkern u1="P" u2="Ã" k="102" /> +<hkern u1="P" u2="Â" k="102" /> +<hkern u1="P" u2="Á" k="102" /> +<hkern u1="P" u2="À" k="102" /> +<hkern u1="P" u2="Z" k="20" /> +<hkern u1="P" u2="X" k="41" /> +<hkern u1="P" u2="A" k="102" /> +<hkern u1="P" u2="." k="266" /> +<hkern u1="P" u2="," k="266" /> +<hkern u1="Q" u2="„" k="82" /> +<hkern u1="Q" u2="‚" k="82" /> +<hkern u1="Q" u2="Ÿ" k="20" /> +<hkern u1="Q" u2="Ý" k="20" /> +<hkern u1="Q" u2="Å" k="41" /> +<hkern u1="Q" u2="Ä" k="41" /> +<hkern u1="Q" u2="Ã" k="41" /> +<hkern u1="Q" u2="Â" k="41" /> +<hkern u1="Q" u2="Á" k="41" /> +<hkern u1="Q" u2="À" k="41" /> +<hkern u1="Q" u2="Z" k="20" /> +<hkern u1="Q" u2="Y" k="20" /> +<hkern u1="Q" u2="X" k="41" /> +<hkern u1="Q" u2="W" k="20" /> +<hkern u1="Q" u2="V" k="20" /> +<hkern u1="Q" u2="T" k="61" /> +<hkern u1="Q" u2="A" k="41" /> +<hkern u1="Q" u2="." k="82" /> +<hkern u1="Q" u2="," k="82" /> +<hkern u1="T" u2="„" k="123" /> +<hkern u1="T" u2="‚" k="123" /> +<hkern u1="T" u2="—" k="82" /> +<hkern u1="T" u2="–" k="82" /> +<hkern u1="T" u2="œ" k="143" /> +<hkern u1="T" u2="Œ" k="41" /> +<hkern u1="T" u2="ý" k="41" /> +<hkern u1="T" u2="ü" k="102" /> +<hkern u1="T" u2="û" k="102" /> +<hkern u1="T" u2="ú" k="102" /> +<hkern u1="T" u2="ù" k="102" /> +<hkern u1="T" u2="ø" k="143" /> +<hkern u1="T" u2="ö" k="143" /> +<hkern u1="T" u2="õ" k="143" /> +<hkern u1="T" u2="ô" k="143" /> +<hkern u1="T" u2="ó" k="143" /> +<hkern u1="T" u2="ò" k="143" /> +<hkern u1="T" u2="ë" k="143" /> +<hkern u1="T" u2="ê" k="143" /> +<hkern u1="T" u2="é" k="143" /> +<hkern u1="T" u2="è" k="143" /> +<hkern u1="T" u2="ç" k="143" /> +<hkern u1="T" u2="æ" k="164" /> +<hkern u1="T" u2="å" k="164" /> +<hkern u1="T" u2="ä" k="164" /> +<hkern u1="T" u2="ã" k="164" /> +<hkern u1="T" u2="â" k="164" /> +<hkern u1="T" u2="á" k="164" /> +<hkern u1="T" u2="à" k="143" /> +<hkern u1="T" u2="Ø" k="41" /> +<hkern u1="T" u2="Ö" k="41" /> +<hkern u1="T" u2="Õ" k="41" /> +<hkern u1="T" u2="Ô" k="41" /> +<hkern u1="T" u2="Ó" k="41" /> +<hkern u1="T" u2="Ò" k="41" /> +<hkern u1="T" u2="Ç" k="41" /> +<hkern u1="T" u2="Å" k="143" /> +<hkern u1="T" u2="Ä" k="143" /> +<hkern u1="T" u2="Ã" k="143" /> +<hkern u1="T" u2="Â" k="143" /> +<hkern u1="T" u2="Á" k="143" /> +<hkern u1="T" u2="À" k="143" /> +<hkern u1="T" u2="z" k="82" /> +<hkern u1="T" u2="y" k="41" /> +<hkern u1="T" u2="x" k="41" /> +<hkern u1="T" u2="w" k="41" /> +<hkern u1="T" u2="v" k="41" /> +<hkern u1="T" u2="u" k="102" /> +<hkern u1="T" u2="s" k="123" /> +<hkern u1="T" u2="r" k="102" /> +<hkern u1="T" u2="q" k="143" /> +<hkern u1="T" u2="p" k="102" /> +<hkern u1="T" u2="o" k="143" /> +<hkern u1="T" u2="n" k="102" /> +<hkern u1="T" u2="m" k="102" /> +<hkern u1="T" u2="g" k="143" /> +<hkern u1="T" u2="e" k="143" /> +<hkern u1="T" u2="d" k="143" /> +<hkern u1="T" u2="c" k="143" /> +<hkern u1="T" u2="a" k="164" /> +<hkern u1="T" u2="T" k="-41" /> +<hkern u1="T" u2="Q" k="41" /> +<hkern u1="T" u2="O" k="41" /> +<hkern u1="T" u2="G" k="41" /> +<hkern u1="T" u2="C" k="41" /> +<hkern u1="T" u2="A" k="143" /> +<hkern u1="T" u2="?" k="-41" /> +<hkern u1="T" u2="." k="123" /> +<hkern u1="T" u2="-" k="82" /> +<hkern u1="T" u2="," k="123" /> +<hkern u1="U" u2="„" k="41" /> +<hkern u1="U" u2="‚" k="41" /> +<hkern u1="U" u2="Å" k="20" /> +<hkern u1="U" u2="Ä" k="20" /> +<hkern u1="U" u2="Ã" k="20" /> +<hkern u1="U" u2="Â" k="20" /> +<hkern u1="U" u2="Á" k="20" /> +<hkern u1="U" u2="À" k="20" /> +<hkern u1="U" u2="A" k="20" /> +<hkern u1="U" u2="." k="41" /> +<hkern u1="U" u2="," k="41" /> +<hkern u1="V" u2="„" k="102" /> +<hkern u1="V" u2="‚" k="102" /> +<hkern u1="V" u2="œ" k="41" /> +<hkern u1="V" u2="Œ" k="20" /> +<hkern u1="V" u2="ü" k="20" /> +<hkern u1="V" u2="û" k="20" /> +<hkern u1="V" u2="ú" k="20" /> +<hkern u1="V" u2="ù" k="20" /> +<hkern u1="V" u2="ø" k="41" /> +<hkern u1="V" u2="ö" k="41" /> +<hkern u1="V" u2="õ" k="41" /> +<hkern u1="V" u2="ô" k="41" /> +<hkern u1="V" u2="ó" k="41" /> +<hkern u1="V" u2="ò" k="41" /> +<hkern u1="V" u2="ë" k="41" /> +<hkern u1="V" u2="ê" k="41" /> +<hkern u1="V" u2="é" k="41" /> +<hkern u1="V" u2="è" k="41" /> +<hkern u1="V" u2="ç" k="41" /> +<hkern u1="V" u2="æ" k="41" /> +<hkern u1="V" u2="å" k="41" /> +<hkern u1="V" u2="ä" k="41" /> +<hkern u1="V" u2="ã" k="41" /> +<hkern u1="V" u2="â" k="41" /> +<hkern u1="V" u2="á" k="41" /> +<hkern u1="V" u2="à" k="41" /> +<hkern u1="V" u2="Ø" k="20" /> +<hkern u1="V" u2="Ö" k="20" /> +<hkern u1="V" u2="Õ" k="20" /> +<hkern u1="V" u2="Ô" k="20" /> +<hkern u1="V" u2="Ó" k="20" /> +<hkern u1="V" u2="Ò" k="20" /> +<hkern u1="V" u2="Ç" k="20" /> +<hkern u1="V" u2="Å" k="82" /> +<hkern u1="V" u2="Ä" k="82" /> +<hkern u1="V" u2="Ã" k="82" /> +<hkern u1="V" u2="Â" k="82" /> +<hkern u1="V" u2="Á" k="82" /> +<hkern u1="V" u2="À" k="82" /> +<hkern u1="V" u2="u" k="20" /> +<hkern u1="V" u2="s" k="20" /> +<hkern u1="V" u2="r" k="20" /> +<hkern u1="V" u2="q" k="41" /> +<hkern u1="V" u2="p" k="20" /> +<hkern u1="V" u2="o" k="41" /> +<hkern u1="V" u2="n" k="20" /> +<hkern u1="V" u2="m" k="20" /> +<hkern u1="V" u2="g" k="20" /> +<hkern u1="V" u2="e" k="41" /> +<hkern u1="V" u2="d" k="41" /> +<hkern u1="V" u2="c" k="41" /> +<hkern u1="V" u2="a" k="41" /> +<hkern u1="V" u2="Q" k="20" /> +<hkern u1="V" u2="O" k="20" /> +<hkern u1="V" u2="G" k="20" /> +<hkern u1="V" u2="C" k="20" /> +<hkern u1="V" u2="A" k="82" /> +<hkern u1="V" u2="?" k="-41" /> +<hkern u1="V" u2="." k="102" /> +<hkern u1="V" u2="," k="102" /> +<hkern u1="W" u2="„" k="102" /> +<hkern u1="W" u2="‚" k="102" /> +<hkern u1="W" u2="œ" k="41" /> +<hkern u1="W" u2="Œ" k="20" /> +<hkern u1="W" u2="ü" k="20" /> +<hkern u1="W" u2="û" k="20" /> +<hkern u1="W" u2="ú" k="20" /> +<hkern u1="W" u2="ù" k="20" /> +<hkern u1="W" u2="ø" k="41" /> +<hkern u1="W" u2="ö" k="41" /> +<hkern u1="W" u2="õ" k="41" /> +<hkern u1="W" u2="ô" k="41" /> +<hkern u1="W" u2="ó" k="41" /> +<hkern u1="W" u2="ò" k="41" /> +<hkern u1="W" u2="ë" k="41" /> +<hkern u1="W" u2="ê" k="41" /> +<hkern u1="W" u2="é" k="41" /> +<hkern u1="W" u2="è" k="41" /> +<hkern u1="W" u2="ç" k="41" /> +<hkern u1="W" u2="æ" k="41" /> +<hkern u1="W" u2="å" k="41" /> +<hkern u1="W" u2="ä" k="41" /> +<hkern u1="W" u2="ã" k="41" /> +<hkern u1="W" u2="â" k="41" /> +<hkern u1="W" u2="á" k="41" /> +<hkern u1="W" u2="à" k="41" /> +<hkern u1="W" u2="Ø" k="20" /> +<hkern u1="W" u2="Ö" k="20" /> +<hkern u1="W" u2="Õ" k="20" /> +<hkern u1="W" u2="Ô" k="20" /> +<hkern u1="W" u2="Ó" k="20" /> +<hkern u1="W" u2="Ò" k="20" /> +<hkern u1="W" u2="Ç" k="20" /> +<hkern u1="W" u2="Å" k="82" /> +<hkern u1="W" u2="Ä" k="82" /> +<hkern u1="W" u2="Ã" k="82" /> +<hkern u1="W" u2="Â" k="82" /> +<hkern u1="W" u2="Á" k="82" /> +<hkern u1="W" u2="À" k="82" /> +<hkern u1="W" u2="u" k="20" /> +<hkern u1="W" u2="s" k="20" /> +<hkern u1="W" u2="r" k="20" /> +<hkern u1="W" u2="q" k="41" /> +<hkern u1="W" u2="p" k="20" /> +<hkern u1="W" u2="o" k="41" /> +<hkern u1="W" u2="n" k="20" /> +<hkern u1="W" u2="m" k="20" /> +<hkern u1="W" u2="g" k="20" /> +<hkern u1="W" u2="e" k="41" /> +<hkern u1="W" u2="d" k="41" /> +<hkern u1="W" u2="c" k="41" /> +<hkern u1="W" u2="a" k="41" /> +<hkern u1="W" u2="Q" k="20" /> +<hkern u1="W" u2="O" k="20" /> +<hkern u1="W" u2="G" k="20" /> +<hkern u1="W" u2="C" k="20" /> +<hkern u1="W" u2="A" k="82" /> +<hkern u1="W" u2="?" k="-41" /> +<hkern u1="W" u2="." k="102" /> +<hkern u1="W" u2="," k="102" /> +<hkern u1="X" u2="Œ" k="41" /> +<hkern u1="X" u2="Ø" k="41" /> +<hkern u1="X" u2="Ö" k="41" /> +<hkern u1="X" u2="Õ" k="41" /> +<hkern u1="X" u2="Ô" k="41" /> +<hkern u1="X" u2="Ó" k="41" /> +<hkern u1="X" u2="Ò" k="41" /> +<hkern u1="X" u2="Ç" k="41" /> +<hkern u1="X" u2="Q" k="41" /> +<hkern u1="X" u2="O" k="41" /> +<hkern u1="X" u2="G" k="41" /> +<hkern u1="X" u2="C" k="41" /> +<hkern u1="Y" u2="„" k="123" /> +<hkern u1="Y" u2="‚" k="123" /> +<hkern u1="Y" u2="œ" k="102" /> +<hkern u1="Y" u2="Œ" k="41" /> +<hkern u1="Y" u2="ü" k="61" /> +<hkern u1="Y" u2="û" k="61" /> +<hkern u1="Y" u2="ú" k="61" /> +<hkern u1="Y" u2="ù" k="61" /> +<hkern u1="Y" u2="ø" k="102" /> +<hkern u1="Y" u2="ö" k="102" /> +<hkern u1="Y" u2="õ" k="102" /> +<hkern u1="Y" u2="ô" k="102" /> +<hkern u1="Y" u2="ó" k="102" /> +<hkern u1="Y" u2="ò" k="102" /> +<hkern u1="Y" u2="ë" k="102" /> +<hkern u1="Y" u2="ê" k="102" /> +<hkern u1="Y" u2="é" k="102" /> +<hkern u1="Y" u2="è" k="102" /> +<hkern u1="Y" u2="ç" k="102" /> +<hkern u1="Y" u2="æ" k="102" /> +<hkern u1="Y" u2="å" k="102" /> +<hkern u1="Y" u2="ä" k="102" /> +<hkern u1="Y" u2="ã" k="102" /> +<hkern u1="Y" u2="â" k="102" /> +<hkern u1="Y" u2="á" k="102" /> +<hkern u1="Y" u2="à" k="102" /> +<hkern u1="Y" u2="Ø" k="41" /> +<hkern u1="Y" u2="Ö" k="41" /> +<hkern u1="Y" u2="Õ" k="41" /> +<hkern u1="Y" u2="Ô" k="41" /> +<hkern u1="Y" u2="Ó" k="41" /> +<hkern u1="Y" u2="Ò" k="41" /> +<hkern u1="Y" u2="Ç" k="41" /> +<hkern u1="Y" u2="Å" k="123" /> +<hkern u1="Y" u2="Ä" k="123" /> +<hkern u1="Y" u2="Ã" k="123" /> +<hkern u1="Y" u2="Â" k="123" /> +<hkern u1="Y" u2="Á" k="123" /> +<hkern u1="Y" u2="À" k="123" /> +<hkern u1="Y" u2="z" k="41" /> +<hkern u1="Y" u2="u" k="61" /> +<hkern u1="Y" u2="s" k="82" /> +<hkern u1="Y" u2="r" k="61" /> +<hkern u1="Y" u2="q" k="102" /> +<hkern u1="Y" u2="p" k="61" /> +<hkern u1="Y" u2="o" k="102" /> +<hkern u1="Y" u2="n" k="61" /> +<hkern u1="Y" u2="m" k="61" /> +<hkern u1="Y" u2="g" k="41" /> +<hkern u1="Y" u2="e" k="102" /> +<hkern u1="Y" u2="d" k="102" /> +<hkern u1="Y" u2="c" k="102" /> +<hkern u1="Y" u2="a" k="102" /> +<hkern u1="Y" u2="Q" k="41" /> +<hkern u1="Y" u2="O" k="41" /> +<hkern u1="Y" u2="G" k="41" /> +<hkern u1="Y" u2="C" k="41" /> +<hkern u1="Y" u2="A" k="123" /> +<hkern u1="Y" u2="?" k="-41" /> +<hkern u1="Y" u2="." k="123" /> +<hkern u1="Y" u2="," k="123" /> +<hkern u1="Z" u2="Œ" k="20" /> +<hkern u1="Z" u2="Ø" k="20" /> +<hkern u1="Z" u2="Ö" k="20" /> +<hkern u1="Z" u2="Õ" k="20" /> +<hkern u1="Z" u2="Ô" k="20" /> +<hkern u1="Z" u2="Ó" k="20" /> +<hkern u1="Z" u2="Ò" k="20" /> +<hkern u1="Z" u2="Ç" k="20" /> +<hkern u1="Z" u2="Q" k="20" /> +<hkern u1="Z" u2="O" k="20" /> +<hkern u1="Z" u2="G" k="20" /> +<hkern u1="Z" u2="C" k="20" /> +<hkern u1="[" u2="J" k="-184" /> +<hkern u1="a" u2="”" k="20" /> +<hkern u1="a" u2="’" k="20" /> +<hkern u1="a" u2="'" k="20" /> +<hkern u1="a" u2=""" k="20" /> +<hkern u1="b" u2="”" k="20" /> +<hkern u1="b" u2="’" k="20" /> +<hkern u1="b" u2="ý" k="41" /> +<hkern u1="b" u2="z" k="20" /> +<hkern u1="b" u2="y" k="41" /> +<hkern u1="b" u2="x" k="41" /> +<hkern u1="b" u2="w" k="41" /> +<hkern u1="b" u2="v" k="41" /> +<hkern u1="b" u2="'" k="20" /> +<hkern u1="b" u2=""" k="20" /> +<hkern u1="c" u2="”" k="-41" /> +<hkern u1="c" u2="’" k="-41" /> +<hkern u1="c" u2="'" k="-41" /> +<hkern u1="c" u2=""" k="-41" /> +<hkern u1="e" u2="”" k="20" /> +<hkern u1="e" u2="’" k="20" /> +<hkern u1="e" u2="ý" k="41" /> +<hkern u1="e" u2="z" k="20" /> +<hkern u1="e" u2="y" k="41" /> +<hkern u1="e" u2="x" k="41" /> +<hkern u1="e" u2="w" k="41" /> +<hkern u1="e" u2="v" k="41" /> +<hkern u1="e" u2="'" k="20" /> +<hkern u1="e" u2=""" k="20" /> +<hkern u1="f" u2="”" k="-123" /> +<hkern u1="f" u2="’" k="-123" /> +<hkern u1="f" u2="'" k="-123" /> +<hkern u1="f" u2=""" k="-123" /> +<hkern u1="h" u2="”" k="20" /> +<hkern u1="h" u2="’" k="20" /> +<hkern u1="h" u2="'" k="20" /> +<hkern u1="h" u2=""" k="20" /> +<hkern u1="k" u2="œ" k="41" /> +<hkern u1="k" u2="ø" k="41" /> +<hkern u1="k" u2="ö" k="41" /> +<hkern u1="k" u2="õ" k="41" /> +<hkern u1="k" u2="ô" k="41" /> +<hkern u1="k" u2="ó" k="41" /> +<hkern u1="k" u2="ò" k="41" /> +<hkern u1="k" u2="ë" k="41" /> +<hkern u1="k" u2="ê" k="41" /> +<hkern u1="k" u2="é" k="41" /> +<hkern u1="k" u2="è" k="41" /> +<hkern u1="k" u2="ç" k="41" /> +<hkern u1="k" u2="à" k="41" /> +<hkern u1="k" u2="q" k="41" /> +<hkern u1="k" u2="o" k="41" /> +<hkern u1="k" u2="e" k="41" /> +<hkern u1="k" u2="d" k="41" /> +<hkern u1="k" u2="c" k="41" /> +<hkern u1="m" u2="”" k="20" /> +<hkern u1="m" u2="’" k="20" /> +<hkern u1="m" u2="'" k="20" /> +<hkern u1="m" u2=""" k="20" /> +<hkern u1="n" u2="”" k="20" /> +<hkern u1="n" u2="’" k="20" /> +<hkern u1="n" u2="'" k="20" /> +<hkern u1="n" u2=""" k="20" /> +<hkern u1="o" u2="”" k="20" /> +<hkern u1="o" u2="’" k="20" /> +<hkern u1="o" u2="ý" k="41" /> +<hkern u1="o" u2="z" k="20" /> +<hkern u1="o" u2="y" k="41" /> +<hkern u1="o" u2="x" k="41" /> +<hkern u1="o" u2="w" k="41" /> +<hkern u1="o" u2="v" k="41" /> +<hkern u1="o" u2="'" k="20" /> +<hkern u1="o" u2=""" k="20" /> +<hkern u1="p" u2="”" k="20" /> +<hkern u1="p" u2="’" k="20" /> +<hkern u1="p" u2="ý" k="41" /> +<hkern u1="p" u2="z" k="20" /> +<hkern u1="p" u2="y" k="41" /> +<hkern u1="p" u2="x" k="41" /> +<hkern u1="p" u2="w" k="41" /> +<hkern u1="p" u2="v" k="41" /> +<hkern u1="p" u2="'" k="20" /> +<hkern u1="p" u2=""" k="20" /> +<hkern u1="r" u2="”" k="-82" /> +<hkern u1="r" u2="’" k="-82" /> +<hkern u1="r" u2="œ" k="41" /> +<hkern u1="r" u2="ø" k="41" /> +<hkern u1="r" u2="ö" k="41" /> +<hkern u1="r" u2="õ" k="41" /> +<hkern u1="r" u2="ô" k="41" /> +<hkern u1="r" u2="ó" k="41" /> +<hkern u1="r" u2="ò" k="41" /> +<hkern u1="r" u2="ë" k="41" /> +<hkern u1="r" u2="ê" k="41" /> +<hkern u1="r" u2="é" k="41" /> +<hkern u1="r" u2="è" k="41" /> +<hkern u1="r" u2="ç" k="41" /> +<hkern u1="r" u2="æ" k="41" /> +<hkern u1="r" u2="å" k="41" /> +<hkern u1="r" u2="ä" k="41" /> +<hkern u1="r" u2="ã" k="41" /> +<hkern u1="r" u2="â" k="41" /> +<hkern u1="r" u2="á" k="41" /> +<hkern u1="r" u2="à" k="41" /> +<hkern u1="r" u2="q" k="41" /> +<hkern u1="r" u2="o" k="41" /> +<hkern u1="r" u2="g" k="20" /> +<hkern u1="r" u2="e" k="41" /> +<hkern u1="r" u2="d" k="41" /> +<hkern u1="r" u2="c" k="41" /> +<hkern u1="r" u2="a" k="41" /> +<hkern u1="r" u2="'" k="-82" /> +<hkern u1="r" u2=""" k="-82" /> +<hkern u1="t" u2="”" k="-41" /> +<hkern u1="t" u2="’" k="-41" /> +<hkern u1="t" u2="'" k="-41" /> +<hkern u1="t" u2=""" k="-41" /> +<hkern u1="v" u2="„" k="82" /> +<hkern u1="v" u2="”" k="-82" /> +<hkern u1="v" u2="‚" k="82" /> +<hkern u1="v" u2="’" k="-82" /> +<hkern u1="v" u2="?" k="-41" /> +<hkern u1="v" u2="." k="82" /> +<hkern u1="v" u2="," k="82" /> +<hkern u1="v" u2="'" k="-82" /> +<hkern u1="v" u2=""" k="-82" /> +<hkern u1="w" u2="„" k="82" /> +<hkern u1="w" u2="”" k="-82" /> +<hkern u1="w" u2="‚" k="82" /> +<hkern u1="w" u2="’" k="-82" /> +<hkern u1="w" u2="?" k="-41" /> +<hkern u1="w" u2="." k="82" /> +<hkern u1="w" u2="," k="82" /> +<hkern u1="w" u2="'" k="-82" /> +<hkern u1="w" u2=""" k="-82" /> +<hkern u1="x" u2="œ" k="41" /> +<hkern u1="x" u2="ø" k="41" /> +<hkern u1="x" u2="ö" k="41" /> +<hkern u1="x" u2="õ" k="41" /> +<hkern u1="x" u2="ô" k="41" /> +<hkern u1="x" u2="ó" k="41" /> +<hkern u1="x" u2="ò" k="41" /> +<hkern u1="x" u2="ë" k="41" /> +<hkern u1="x" u2="ê" k="41" /> +<hkern u1="x" u2="é" k="41" /> +<hkern u1="x" u2="è" k="41" /> +<hkern u1="x" u2="ç" k="41" /> +<hkern u1="x" u2="à" k="41" /> +<hkern u1="x" u2="q" k="41" /> +<hkern u1="x" u2="o" k="41" /> +<hkern u1="x" u2="e" k="41" /> +<hkern u1="x" u2="d" k="41" /> +<hkern u1="x" u2="c" k="41" /> +<hkern u1="y" u2="„" k="82" /> +<hkern u1="y" u2="”" k="-82" /> +<hkern u1="y" u2="‚" k="82" /> +<hkern u1="y" u2="’" k="-82" /> +<hkern u1="y" u2="?" k="-41" /> +<hkern u1="y" u2="." k="82" /> +<hkern u1="y" u2="," k="82" /> +<hkern u1="y" u2="'" k="-82" /> +<hkern u1="y" u2=""" k="-82" /> +<hkern u1="{" u2="J" k="-184" /> +<hkern u1="À" u2="”" k="143" /> +<hkern u1="À" u2="’" k="143" /> +<hkern u1="À" u2="Ÿ" k="123" /> +<hkern u1="À" u2="Œ" k="41" /> +<hkern u1="À" u2="Ý" k="123" /> +<hkern u1="À" u2="Ø" k="41" /> +<hkern u1="À" u2="Ö" k="41" /> +<hkern u1="À" u2="Õ" k="41" /> +<hkern u1="À" u2="Ô" k="41" /> +<hkern u1="À" u2="Ó" k="41" /> +<hkern u1="À" u2="Ò" k="41" /> +<hkern u1="À" u2="Ç" k="41" /> +<hkern u1="À" u2="Y" k="123" /> +<hkern u1="À" u2="W" k="82" /> +<hkern u1="À" u2="V" k="82" /> +<hkern u1="À" u2="T" k="143" /> +<hkern u1="À" u2="Q" k="41" /> +<hkern u1="À" u2="O" k="41" /> +<hkern u1="À" u2="J" k="-266" /> +<hkern u1="À" u2="G" k="41" /> +<hkern u1="À" u2="C" k="41" /> +<hkern u1="À" u2="'" k="143" /> +<hkern u1="À" u2=""" k="143" /> +<hkern u1="Á" u2="”" k="143" /> +<hkern u1="Á" u2="’" k="143" /> +<hkern u1="Á" u2="Ÿ" k="123" /> +<hkern u1="Á" u2="Œ" k="41" /> +<hkern u1="Á" u2="Ý" k="123" /> +<hkern u1="Á" u2="Ø" k="41" /> +<hkern u1="Á" u2="Ö" k="41" /> +<hkern u1="Á" u2="Õ" k="41" /> +<hkern u1="Á" u2="Ô" k="41" /> +<hkern u1="Á" u2="Ó" k="41" /> +<hkern u1="Á" u2="Ò" k="41" /> +<hkern u1="Á" u2="Ç" k="41" /> +<hkern u1="Á" u2="Y" k="123" /> +<hkern u1="Á" u2="W" k="82" /> +<hkern u1="Á" u2="V" k="82" /> +<hkern u1="Á" u2="T" k="143" /> +<hkern u1="Á" u2="Q" k="41" /> +<hkern u1="Á" u2="O" k="41" /> +<hkern u1="Á" u2="J" k="-266" /> +<hkern u1="Á" u2="G" k="41" /> +<hkern u1="Á" u2="C" k="41" /> +<hkern u1="Á" u2="'" k="143" /> +<hkern u1="Á" u2=""" k="143" /> +<hkern u1="Â" u2="”" k="143" /> +<hkern u1="Â" u2="’" k="143" /> +<hkern u1="Â" u2="Ÿ" k="123" /> +<hkern u1="Â" u2="Œ" k="41" /> +<hkern u1="Â" u2="Ý" k="123" /> +<hkern u1="Â" u2="Ø" k="41" /> +<hkern u1="Â" u2="Ö" k="41" /> +<hkern u1="Â" u2="Õ" k="41" /> +<hkern u1="Â" u2="Ô" k="41" /> +<hkern u1="Â" u2="Ó" k="41" /> +<hkern u1="Â" u2="Ò" k="41" /> +<hkern u1="Â" u2="Ç" k="41" /> +<hkern u1="Â" u2="Y" k="123" /> +<hkern u1="Â" u2="W" k="82" /> +<hkern u1="Â" u2="V" k="82" /> +<hkern u1="Â" u2="T" k="143" /> +<hkern u1="Â" u2="Q" k="41" /> +<hkern u1="Â" u2="O" k="41" /> +<hkern u1="Â" u2="J" k="-266" /> +<hkern u1="Â" u2="G" k="41" /> +<hkern u1="Â" u2="C" k="41" /> +<hkern u1="Â" u2="'" k="143" /> +<hkern u1="Â" u2=""" k="143" /> +<hkern u1="Ã" u2="”" k="143" /> +<hkern u1="Ã" u2="’" k="143" /> +<hkern u1="Ã" u2="Ÿ" k="123" /> +<hkern u1="Ã" u2="Œ" k="41" /> +<hkern u1="Ã" u2="Ý" k="123" /> +<hkern u1="Ã" u2="Ø" k="41" /> +<hkern u1="Ã" u2="Ö" k="41" /> +<hkern u1="Ã" u2="Õ" k="41" /> +<hkern u1="Ã" u2="Ô" k="41" /> +<hkern u1="Ã" u2="Ó" k="41" /> +<hkern u1="Ã" u2="Ò" k="41" /> +<hkern u1="Ã" u2="Ç" k="41" /> +<hkern u1="Ã" u2="Y" k="123" /> +<hkern u1="Ã" u2="W" k="82" /> +<hkern u1="Ã" u2="V" k="82" /> +<hkern u1="Ã" u2="T" k="143" /> +<hkern u1="Ã" u2="Q" k="41" /> +<hkern u1="Ã" u2="O" k="41" /> +<hkern u1="Ã" u2="J" k="-266" /> +<hkern u1="Ã" u2="G" k="41" /> +<hkern u1="Ã" u2="C" k="41" /> +<hkern u1="Ã" u2="'" k="143" /> +<hkern u1="Ã" u2=""" k="143" /> +<hkern u1="Ä" u2="”" k="143" /> +<hkern u1="Ä" u2="’" k="143" /> +<hkern u1="Ä" u2="Ÿ" k="123" /> +<hkern u1="Ä" u2="Œ" k="41" /> +<hkern u1="Ä" u2="Ý" k="123" /> +<hkern u1="Ä" u2="Ø" k="41" /> +<hkern u1="Ä" u2="Ö" k="41" /> +<hkern u1="Ä" u2="Õ" k="41" /> +<hkern u1="Ä" u2="Ô" k="41" /> +<hkern u1="Ä" u2="Ó" k="41" /> +<hkern u1="Ä" u2="Ò" k="41" /> +<hkern u1="Ä" u2="Ç" k="41" /> +<hkern u1="Ä" u2="Y" k="123" /> +<hkern u1="Ä" u2="W" k="82" /> +<hkern u1="Ä" u2="V" k="82" /> +<hkern u1="Ä" u2="T" k="143" /> +<hkern u1="Ä" u2="Q" k="41" /> +<hkern u1="Ä" u2="O" k="41" /> +<hkern u1="Ä" u2="J" k="-266" /> +<hkern u1="Ä" u2="G" k="41" /> +<hkern u1="Ä" u2="C" k="41" /> +<hkern u1="Ä" u2="'" k="143" /> +<hkern u1="Ä" u2=""" k="143" /> +<hkern u1="Å" u2="”" k="143" /> +<hkern u1="Å" u2="’" k="143" /> +<hkern u1="Å" u2="Ÿ" k="123" /> +<hkern u1="Å" u2="Œ" k="41" /> +<hkern u1="Å" u2="Ý" k="123" /> +<hkern u1="Å" u2="Ø" k="41" /> +<hkern u1="Å" u2="Ö" k="41" /> +<hkern u1="Å" u2="Õ" k="41" /> +<hkern u1="Å" u2="Ô" k="41" /> +<hkern u1="Å" u2="Ó" k="41" /> +<hkern u1="Å" u2="Ò" k="41" /> +<hkern u1="Å" u2="Ç" k="41" /> +<hkern u1="Å" u2="Y" k="123" /> +<hkern u1="Å" u2="W" k="82" /> +<hkern u1="Å" u2="V" k="82" /> +<hkern u1="Å" u2="T" k="143" /> +<hkern u1="Å" u2="Q" k="41" /> +<hkern u1="Å" u2="O" k="41" /> +<hkern u1="Å" u2="J" k="-266" /> +<hkern u1="Å" u2="G" k="41" /> +<hkern u1="Å" u2="C" k="41" /> +<hkern u1="Å" u2="'" k="143" /> +<hkern u1="Å" u2=""" k="143" /> +<hkern u1="Æ" u2="J" k="-123" /> +<hkern u1="Ç" u2="Œ" k="41" /> +<hkern u1="Ç" u2="Ø" k="41" /> +<hkern u1="Ç" u2="Ö" k="41" /> +<hkern u1="Ç" u2="Õ" k="41" /> +<hkern u1="Ç" u2="Ô" k="41" /> +<hkern u1="Ç" u2="Ó" k="41" /> +<hkern u1="Ç" u2="Ò" k="41" /> +<hkern u1="Ç" u2="Ç" k="41" /> +<hkern u1="Ç" u2="Q" k="41" /> +<hkern u1="Ç" u2="O" k="41" /> +<hkern u1="Ç" u2="G" k="41" /> +<hkern u1="Ç" u2="C" k="41" /> +<hkern u1="È" u2="J" k="-123" /> +<hkern u1="É" u2="J" k="-123" /> +<hkern u1="Ê" u2="J" k="-123" /> +<hkern u1="Ë" u2="J" k="-123" /> +<hkern u1="Ð" u2="„" k="82" /> +<hkern u1="Ð" u2="‚" k="82" /> +<hkern u1="Ð" u2="Ÿ" k="20" /> +<hkern u1="Ð" u2="Ý" k="20" /> +<hkern u1="Ð" u2="Å" k="41" /> +<hkern u1="Ð" u2="Ä" k="41" /> +<hkern u1="Ð" u2="Ã" k="41" /> +<hkern u1="Ð" u2="Â" k="41" /> +<hkern u1="Ð" u2="Á" k="41" /> +<hkern u1="Ð" u2="À" k="41" /> +<hkern u1="Ð" u2="Z" k="20" /> +<hkern u1="Ð" u2="Y" k="20" /> +<hkern u1="Ð" u2="X" k="41" /> +<hkern u1="Ð" u2="W" k="20" /> +<hkern u1="Ð" u2="V" k="20" /> +<hkern u1="Ð" u2="T" k="61" /> +<hkern u1="Ð" u2="A" k="41" /> +<hkern u1="Ð" u2="." k="82" /> +<hkern u1="Ð" u2="," k="82" /> +<hkern u1="Ò" u2="„" k="82" /> +<hkern u1="Ò" u2="‚" k="82" /> +<hkern u1="Ò" u2="Ÿ" k="20" /> +<hkern u1="Ò" u2="Ý" k="20" /> +<hkern u1="Ò" u2="Å" k="41" /> +<hkern u1="Ò" u2="Ä" k="41" /> +<hkern u1="Ò" u2="Ã" k="41" /> +<hkern u1="Ò" u2="Â" k="41" /> +<hkern u1="Ò" u2="Á" k="41" /> +<hkern u1="Ò" u2="À" k="41" /> +<hkern u1="Ò" u2="Z" k="20" /> +<hkern u1="Ò" u2="Y" k="20" /> +<hkern u1="Ò" u2="X" k="41" /> +<hkern u1="Ò" u2="W" k="20" /> +<hkern u1="Ò" u2="V" k="20" /> +<hkern u1="Ò" u2="T" k="61" /> +<hkern u1="Ò" u2="A" k="41" /> +<hkern u1="Ò" u2="." k="82" /> +<hkern u1="Ò" u2="," k="82" /> +<hkern u1="Ó" u2="„" k="82" /> +<hkern u1="Ó" u2="‚" k="82" /> +<hkern u1="Ó" u2="Ÿ" k="20" /> +<hkern u1="Ó" u2="Ý" k="20" /> +<hkern u1="Ó" u2="Å" k="41" /> +<hkern u1="Ó" u2="Ä" k="41" /> +<hkern u1="Ó" u2="Ã" k="41" /> +<hkern u1="Ó" u2="Â" k="41" /> +<hkern u1="Ó" u2="Á" k="41" /> +<hkern u1="Ó" u2="À" k="41" /> +<hkern u1="Ó" u2="Z" k="20" /> +<hkern u1="Ó" u2="Y" k="20" /> +<hkern u1="Ó" u2="X" k="41" /> +<hkern u1="Ó" u2="W" k="20" /> +<hkern u1="Ó" u2="V" k="20" /> +<hkern u1="Ó" u2="T" k="61" /> +<hkern u1="Ó" u2="A" k="41" /> +<hkern u1="Ó" u2="." k="82" /> +<hkern u1="Ó" u2="," k="82" /> +<hkern u1="Ô" u2="„" k="82" /> +<hkern u1="Ô" u2="‚" k="82" /> +<hkern u1="Ô" u2="Ÿ" k="20" /> +<hkern u1="Ô" u2="Ý" k="20" /> +<hkern u1="Ô" u2="Å" k="41" /> +<hkern u1="Ô" u2="Ä" k="41" /> +<hkern u1="Ô" u2="Ã" k="41" /> +<hkern u1="Ô" u2="Â" k="41" /> +<hkern u1="Ô" u2="Á" k="41" /> +<hkern u1="Ô" u2="À" k="41" /> +<hkern u1="Ô" u2="Z" k="20" /> +<hkern u1="Ô" u2="Y" k="20" /> +<hkern u1="Ô" u2="X" k="41" /> +<hkern u1="Ô" u2="W" k="20" /> +<hkern u1="Ô" u2="V" k="20" /> +<hkern u1="Ô" u2="T" k="61" /> +<hkern u1="Ô" u2="A" k="41" /> +<hkern u1="Ô" u2="." k="82" /> +<hkern u1="Ô" u2="," k="82" /> +<hkern u1="Õ" u2="„" k="82" /> +<hkern u1="Õ" u2="‚" k="82" /> +<hkern u1="Õ" u2="Ÿ" k="20" /> +<hkern u1="Õ" u2="Ý" k="20" /> +<hkern u1="Õ" u2="Å" k="41" /> +<hkern u1="Õ" u2="Ä" k="41" /> +<hkern u1="Õ" u2="Ã" k="41" /> +<hkern u1="Õ" u2="Â" k="41" /> +<hkern u1="Õ" u2="Á" k="41" /> +<hkern u1="Õ" u2="À" k="41" /> +<hkern u1="Õ" u2="Z" k="20" /> +<hkern u1="Õ" u2="Y" k="20" /> +<hkern u1="Õ" u2="X" k="41" /> +<hkern u1="Õ" u2="W" k="20" /> +<hkern u1="Õ" u2="V" k="20" /> +<hkern u1="Õ" u2="T" k="61" /> +<hkern u1="Õ" u2="A" k="41" /> +<hkern u1="Õ" u2="." k="82" /> +<hkern u1="Õ" u2="," k="82" /> +<hkern u1="Ö" u2="„" k="82" /> +<hkern u1="Ö" u2="‚" k="82" /> +<hkern u1="Ö" u2="Ÿ" k="20" /> +<hkern u1="Ö" u2="Ý" k="20" /> +<hkern u1="Ö" u2="Å" k="41" /> +<hkern u1="Ö" u2="Ä" k="41" /> +<hkern u1="Ö" u2="Ã" k="41" /> +<hkern u1="Ö" u2="Â" k="41" /> +<hkern u1="Ö" u2="Á" k="41" /> +<hkern u1="Ö" u2="À" k="41" /> +<hkern u1="Ö" u2="Z" k="20" /> +<hkern u1="Ö" u2="Y" k="20" /> +<hkern u1="Ö" u2="X" k="41" /> +<hkern u1="Ö" u2="W" k="20" /> +<hkern u1="Ö" u2="V" k="20" /> +<hkern u1="Ö" u2="T" k="61" /> +<hkern u1="Ö" u2="A" k="41" /> +<hkern u1="Ö" u2="." k="82" /> +<hkern u1="Ö" u2="," k="82" /> +<hkern u1="Ø" u2="„" k="82" /> +<hkern u1="Ø" u2="‚" k="82" /> +<hkern u1="Ø" u2="Ÿ" k="20" /> +<hkern u1="Ø" u2="Ý" k="20" /> +<hkern u1="Ø" u2="Å" k="41" /> +<hkern u1="Ø" u2="Ä" k="41" /> +<hkern u1="Ø" u2="Ã" k="41" /> +<hkern u1="Ø" u2="Â" k="41" /> +<hkern u1="Ø" u2="Á" k="41" /> +<hkern u1="Ø" u2="À" k="41" /> +<hkern u1="Ø" u2="Z" k="20" /> +<hkern u1="Ø" u2="Y" k="20" /> +<hkern u1="Ø" u2="X" k="41" /> +<hkern u1="Ø" u2="W" k="20" /> +<hkern u1="Ø" u2="V" k="20" /> +<hkern u1="Ø" u2="T" k="61" /> +<hkern u1="Ø" u2="A" k="41" /> +<hkern u1="Ø" u2="." k="82" /> +<hkern u1="Ø" u2="," k="82" /> +<hkern u1="Ù" u2="„" k="41" /> +<hkern u1="Ù" u2="‚" k="41" /> +<hkern u1="Ù" u2="Å" k="20" /> +<hkern u1="Ù" u2="Ä" k="20" /> +<hkern u1="Ù" u2="Ã" k="20" /> +<hkern u1="Ù" u2="Â" k="20" /> +<hkern u1="Ù" u2="Á" k="20" /> +<hkern u1="Ù" u2="À" k="20" /> +<hkern u1="Ù" u2="A" k="20" /> +<hkern u1="Ù" u2="." k="41" /> +<hkern u1="Ù" u2="," k="41" /> +<hkern u1="Ú" u2="„" k="41" /> +<hkern u1="Ú" u2="‚" k="41" /> +<hkern u1="Ú" u2="Å" k="20" /> +<hkern u1="Ú" u2="Ä" k="20" /> +<hkern u1="Ú" u2="Ã" k="20" /> +<hkern u1="Ú" u2="Â" k="20" /> +<hkern u1="Ú" u2="Á" k="20" /> +<hkern u1="Ú" u2="À" k="20" /> +<hkern u1="Ú" u2="A" k="20" /> +<hkern u1="Ú" u2="." k="41" /> +<hkern u1="Ú" u2="," k="41" /> +<hkern u1="Û" u2="„" k="41" /> +<hkern u1="Û" u2="‚" k="41" /> +<hkern u1="Û" u2="Å" k="20" /> +<hkern u1="Û" u2="Ä" k="20" /> +<hkern u1="Û" u2="Ã" k="20" /> +<hkern u1="Û" u2="Â" k="20" /> +<hkern u1="Û" u2="Á" k="20" /> +<hkern u1="Û" u2="À" k="20" /> +<hkern u1="Û" u2="A" k="20" /> +<hkern u1="Û" u2="." k="41" /> +<hkern u1="Û" u2="," k="41" /> +<hkern u1="Ü" u2="„" k="41" /> +<hkern u1="Ü" u2="‚" k="41" /> +<hkern u1="Ü" u2="Å" k="20" /> +<hkern u1="Ü" u2="Ä" k="20" /> +<hkern u1="Ü" u2="Ã" k="20" /> +<hkern u1="Ü" u2="Â" k="20" /> +<hkern u1="Ü" u2="Á" k="20" /> +<hkern u1="Ü" u2="À" k="20" /> +<hkern u1="Ü" u2="A" k="20" /> +<hkern u1="Ü" u2="." k="41" /> +<hkern u1="Ü" u2="," k="41" /> +<hkern u1="Ý" u2="„" k="123" /> +<hkern u1="Ý" u2="‚" k="123" /> +<hkern u1="Ý" u2="œ" k="102" /> +<hkern u1="Ý" u2="Œ" k="41" /> +<hkern u1="Ý" u2="ü" k="61" /> +<hkern u1="Ý" u2="û" k="61" /> +<hkern u1="Ý" u2="ú" k="61" /> +<hkern u1="Ý" u2="ù" k="61" /> +<hkern u1="Ý" u2="ø" k="102" /> +<hkern u1="Ý" u2="ö" k="102" /> +<hkern u1="Ý" u2="õ" k="102" /> +<hkern u1="Ý" u2="ô" k="102" /> +<hkern u1="Ý" u2="ó" k="102" /> +<hkern u1="Ý" u2="ò" k="102" /> +<hkern u1="Ý" u2="ë" k="102" /> +<hkern u1="Ý" u2="ê" k="102" /> +<hkern u1="Ý" u2="é" k="102" /> +<hkern u1="Ý" u2="è" k="102" /> +<hkern u1="Ý" u2="ç" k="102" /> +<hkern u1="Ý" u2="æ" k="102" /> +<hkern u1="Ý" u2="å" k="102" /> +<hkern u1="Ý" u2="ä" k="102" /> +<hkern u1="Ý" u2="ã" k="102" /> +<hkern u1="Ý" u2="â" k="102" /> +<hkern u1="Ý" u2="á" k="102" /> +<hkern u1="Ý" u2="à" k="102" /> +<hkern u1="Ý" u2="Ø" k="41" /> +<hkern u1="Ý" u2="Ö" k="41" /> +<hkern u1="Ý" u2="Õ" k="41" /> +<hkern u1="Ý" u2="Ô" k="41" /> +<hkern u1="Ý" u2="Ó" k="41" /> +<hkern u1="Ý" u2="Ò" k="41" /> +<hkern u1="Ý" u2="Ç" k="41" /> +<hkern u1="Ý" u2="Å" k="123" /> +<hkern u1="Ý" u2="Ä" k="123" /> +<hkern u1="Ý" u2="Ã" k="123" /> +<hkern u1="Ý" u2="Â" k="123" /> +<hkern u1="Ý" u2="Á" k="123" /> +<hkern u1="Ý" u2="À" k="123" /> +<hkern u1="Ý" u2="z" k="41" /> +<hkern u1="Ý" u2="u" k="61" /> +<hkern u1="Ý" u2="s" k="82" /> +<hkern u1="Ý" u2="r" k="61" /> +<hkern u1="Ý" u2="q" k="102" /> +<hkern u1="Ý" u2="p" k="61" /> +<hkern u1="Ý" u2="o" k="102" /> +<hkern u1="Ý" u2="n" k="61" /> +<hkern u1="Ý" u2="m" k="61" /> +<hkern u1="Ý" u2="g" k="41" /> +<hkern u1="Ý" u2="e" k="102" /> +<hkern u1="Ý" u2="d" k="102" /> +<hkern u1="Ý" u2="c" k="102" /> +<hkern u1="Ý" u2="a" k="102" /> +<hkern u1="Ý" u2="Q" k="41" /> +<hkern u1="Ý" u2="O" k="41" /> +<hkern u1="Ý" u2="G" k="41" /> +<hkern u1="Ý" u2="C" k="41" /> +<hkern u1="Ý" u2="A" k="123" /> +<hkern u1="Ý" u2="?" k="-41" /> +<hkern u1="Ý" u2="." k="123" /> +<hkern u1="Ý" u2="," k="123" /> +<hkern u1="Þ" u2="„" k="266" /> +<hkern u1="Þ" u2="‚" k="266" /> +<hkern u1="Þ" u2="Å" k="102" /> +<hkern u1="Þ" u2="Ä" k="102" /> +<hkern u1="Þ" u2="Ã" k="102" /> +<hkern u1="Þ" u2="Â" k="102" /> +<hkern u1="Þ" u2="Á" k="102" /> +<hkern u1="Þ" u2="À" k="102" /> +<hkern u1="Þ" u2="Z" k="20" /> +<hkern u1="Þ" u2="X" k="41" /> +<hkern u1="Þ" u2="A" k="102" /> +<hkern u1="Þ" u2="." k="266" /> +<hkern u1="Þ" u2="," k="266" /> +<hkern u1="à" u2="”" k="20" /> +<hkern u1="à" u2="’" k="20" /> +<hkern u1="à" u2="'" k="20" /> +<hkern u1="à" u2=""" k="20" /> +<hkern u1="á" u2="”" k="20" /> +<hkern u1="á" u2="’" k="20" /> +<hkern u1="á" u2="'" k="20" /> +<hkern u1="á" u2=""" k="20" /> +<hkern u1="â" u2="”" k="20" /> +<hkern u1="â" u2="’" k="20" /> +<hkern u1="â" u2="'" k="20" /> +<hkern u1="â" u2=""" k="20" /> +<hkern u1="ã" u2="”" k="20" /> +<hkern u1="ã" u2="’" k="20" /> +<hkern u1="ã" u2="'" k="20" /> +<hkern u1="ã" u2=""" k="20" /> +<hkern u1="ä" u2="”" k="20" /> +<hkern u1="ä" u2="’" k="20" /> +<hkern u1="ä" u2="'" k="20" /> +<hkern u1="ä" u2=""" k="20" /> +<hkern u1="å" u2="”" k="20" /> +<hkern u1="å" u2="’" k="20" /> +<hkern u1="å" u2="'" k="20" /> +<hkern u1="å" u2=""" k="20" /> +<hkern u1="è" u2="”" k="20" /> +<hkern u1="è" u2="’" k="20" /> +<hkern u1="è" u2="ý" k="41" /> +<hkern u1="è" u2="z" k="20" /> +<hkern u1="è" u2="y" k="41" /> +<hkern u1="è" u2="x" k="41" /> +<hkern u1="è" u2="w" k="41" /> +<hkern u1="è" u2="v" k="41" /> +<hkern u1="è" u2="'" k="20" /> +<hkern u1="è" u2=""" k="20" /> +<hkern u1="é" u2="”" k="20" /> +<hkern u1="é" u2="’" k="20" /> +<hkern u1="é" u2="ý" k="41" /> +<hkern u1="é" u2="z" k="20" /> +<hkern u1="é" u2="y" k="41" /> +<hkern u1="é" u2="x" k="41" /> +<hkern u1="é" u2="w" k="41" /> +<hkern u1="é" u2="v" k="41" /> +<hkern u1="é" u2="'" k="20" /> +<hkern u1="é" u2=""" k="20" /> +<hkern u1="ê" u2="”" k="20" /> +<hkern u1="ê" u2="’" k="20" /> +<hkern u1="ê" u2="ý" k="41" /> +<hkern u1="ê" u2="z" k="20" /> +<hkern u1="ê" u2="y" k="41" /> +<hkern u1="ê" u2="x" k="41" /> +<hkern u1="ê" u2="w" k="41" /> +<hkern u1="ê" u2="v" k="41" /> +<hkern u1="ê" u2="'" k="20" /> +<hkern u1="ê" u2=""" k="20" /> +<hkern u1="ë" u2="”" k="20" /> +<hkern u1="ë" u2="’" k="20" /> +<hkern u1="ë" u2="ý" k="41" /> +<hkern u1="ë" u2="z" k="20" /> +<hkern u1="ë" u2="y" k="41" /> +<hkern u1="ë" u2="x" k="41" /> +<hkern u1="ë" u2="w" k="41" /> +<hkern u1="ë" u2="v" k="41" /> +<hkern u1="ë" u2="'" k="20" /> +<hkern u1="ë" u2=""" k="20" /> +<hkern u1="ð" u2="”" k="20" /> +<hkern u1="ð" u2="’" k="20" /> +<hkern u1="ð" u2="ý" k="41" /> +<hkern u1="ð" u2="z" k="20" /> +<hkern u1="ð" u2="y" k="41" /> +<hkern u1="ð" u2="x" k="41" /> +<hkern u1="ð" u2="w" k="41" /> +<hkern u1="ð" u2="v" k="41" /> +<hkern u1="ð" u2="'" k="20" /> +<hkern u1="ð" u2=""" k="20" /> +<hkern u1="ò" u2="”" k="20" /> +<hkern u1="ò" u2="’" k="20" /> +<hkern u1="ò" u2="ý" k="41" /> +<hkern u1="ò" u2="z" k="20" /> +<hkern u1="ò" u2="y" k="41" /> +<hkern u1="ò" u2="x" k="41" /> +<hkern u1="ò" u2="w" k="41" /> +<hkern u1="ò" u2="v" k="41" /> +<hkern u1="ò" u2="'" k="20" /> +<hkern u1="ò" u2=""" k="20" /> +<hkern u1="ó" u2="”" k="20" /> +<hkern u1="ó" u2="’" k="20" /> +<hkern u1="ó" u2="ý" k="41" /> +<hkern u1="ó" u2="z" k="20" /> +<hkern u1="ó" u2="y" k="41" /> +<hkern u1="ó" u2="x" k="41" /> +<hkern u1="ó" u2="w" k="41" /> +<hkern u1="ó" u2="v" k="41" /> +<hkern u1="ó" u2="'" k="20" /> +<hkern u1="ó" u2=""" k="20" /> +<hkern u1="ô" u2="”" k="20" /> +<hkern u1="ô" u2="’" k="20" /> +<hkern u1="ô" u2="ý" k="41" /> +<hkern u1="ô" u2="z" k="20" /> +<hkern u1="ô" u2="y" k="41" /> +<hkern u1="ô" u2="x" k="41" /> +<hkern u1="ô" u2="w" k="41" /> +<hkern u1="ô" u2="v" k="41" /> +<hkern u1="ô" u2="'" k="20" /> +<hkern u1="ô" u2=""" k="20" /> +<hkern u1="ö" u2="”" k="41" /> +<hkern u1="ö" u2="’" k="41" /> +<hkern u1="ö" u2="'" k="41" /> +<hkern u1="ö" u2=""" k="41" /> +<hkern u1="ø" u2="”" k="20" /> +<hkern u1="ø" u2="’" k="20" /> +<hkern u1="ø" u2="ý" k="41" /> +<hkern u1="ø" u2="z" k="20" /> +<hkern u1="ø" u2="y" k="41" /> +<hkern u1="ø" u2="x" k="41" /> +<hkern u1="ø" u2="w" k="41" /> +<hkern u1="ø" u2="v" k="41" /> +<hkern u1="ø" u2="'" k="20" /> +<hkern u1="ø" u2=""" k="20" /> +<hkern u1="ý" u2="„" k="82" /> +<hkern u1="ý" u2="”" k="-82" /> +<hkern u1="ý" u2="‚" k="82" /> +<hkern u1="ý" u2="’" k="-82" /> +<hkern u1="ý" u2="?" k="-41" /> +<hkern u1="ý" u2="." k="82" /> +<hkern u1="ý" u2="," k="82" /> +<hkern u1="ý" u2="'" k="-82" /> +<hkern u1="ý" u2=""" k="-82" /> +<hkern u1="þ" u2="”" k="20" /> +<hkern u1="þ" u2="’" k="20" /> +<hkern u1="þ" u2="ý" k="41" /> +<hkern u1="þ" u2="z" k="20" /> +<hkern u1="þ" u2="y" k="41" /> +<hkern u1="þ" u2="x" k="41" /> +<hkern u1="þ" u2="w" k="41" /> +<hkern u1="þ" u2="v" k="41" /> +<hkern u1="þ" u2="'" k="20" /> +<hkern u1="þ" u2=""" k="20" /> +<hkern u1="ÿ" u2="„" k="82" /> +<hkern u1="ÿ" u2="”" k="-82" /> +<hkern u1="ÿ" u2="‚" k="82" /> +<hkern u1="ÿ" u2="’" k="-82" /> +<hkern u1="ÿ" u2="?" k="-41" /> +<hkern u1="ÿ" u2="." k="82" /> +<hkern u1="ÿ" u2="," k="82" /> +<hkern u1="ÿ" u2="'" k="-82" /> +<hkern u1="ÿ" u2=""" k="-82" /> +<hkern u1="Œ" u2="J" k="-123" /> +<hkern u1="Ÿ" u2="„" k="123" /> +<hkern u1="Ÿ" u2="‚" k="123" /> +<hkern u1="Ÿ" u2="œ" k="102" /> +<hkern u1="Ÿ" u2="Œ" k="41" /> +<hkern u1="Ÿ" u2="ü" k="61" /> +<hkern u1="Ÿ" u2="û" k="61" /> +<hkern u1="Ÿ" u2="ú" k="61" /> +<hkern u1="Ÿ" u2="ù" k="61" /> +<hkern u1="Ÿ" u2="ø" k="102" /> +<hkern u1="Ÿ" u2="ö" k="102" /> +<hkern u1="Ÿ" u2="õ" k="102" /> +<hkern u1="Ÿ" u2="ô" k="102" /> +<hkern u1="Ÿ" u2="ó" k="102" /> +<hkern u1="Ÿ" u2="ò" k="102" /> +<hkern u1="Ÿ" u2="ë" k="102" /> +<hkern u1="Ÿ" u2="ê" k="102" /> +<hkern u1="Ÿ" u2="é" k="102" /> +<hkern u1="Ÿ" u2="è" k="102" /> +<hkern u1="Ÿ" u2="ç" k="102" /> +<hkern u1="Ÿ" u2="æ" k="102" /> +<hkern u1="Ÿ" u2="å" k="102" /> +<hkern u1="Ÿ" u2="ä" k="102" /> +<hkern u1="Ÿ" u2="ã" k="102" /> +<hkern u1="Ÿ" u2="â" k="102" /> +<hkern u1="Ÿ" u2="á" k="102" /> +<hkern u1="Ÿ" u2="à" k="102" /> +<hkern u1="Ÿ" u2="Ø" k="41" /> +<hkern u1="Ÿ" u2="Ö" k="41" /> +<hkern u1="Ÿ" u2="Õ" k="41" /> +<hkern u1="Ÿ" u2="Ô" k="41" /> +<hkern u1="Ÿ" u2="Ó" k="41" /> +<hkern u1="Ÿ" u2="Ò" k="41" /> +<hkern u1="Ÿ" u2="Ç" k="41" /> +<hkern u1="Ÿ" u2="Å" k="123" /> +<hkern u1="Ÿ" u2="Ä" k="123" /> +<hkern u1="Ÿ" u2="Ã" k="123" /> +<hkern u1="Ÿ" u2="Â" k="123" /> +<hkern u1="Ÿ" u2="Á" k="123" /> +<hkern u1="Ÿ" u2="À" k="123" /> +<hkern u1="Ÿ" u2="z" k="41" /> +<hkern u1="Ÿ" u2="u" k="61" /> +<hkern u1="Ÿ" u2="s" k="82" /> +<hkern u1="Ÿ" u2="r" k="61" /> +<hkern u1="Ÿ" u2="q" k="102" /> +<hkern u1="Ÿ" u2="p" k="61" /> +<hkern u1="Ÿ" u2="o" k="102" /> +<hkern u1="Ÿ" u2="n" k="61" /> +<hkern u1="Ÿ" u2="m" k="61" /> +<hkern u1="Ÿ" u2="g" k="41" /> +<hkern u1="Ÿ" u2="e" k="102" /> +<hkern u1="Ÿ" u2="d" k="102" /> +<hkern u1="Ÿ" u2="c" k="102" /> +<hkern u1="Ÿ" u2="a" k="102" /> +<hkern u1="Ÿ" u2="Q" k="41" /> +<hkern u1="Ÿ" u2="O" k="41" /> +<hkern u1="Ÿ" u2="G" k="41" /> +<hkern u1="Ÿ" u2="C" k="41" /> +<hkern u1="Ÿ" u2="A" k="123" /> +<hkern u1="Ÿ" u2="?" k="-41" /> +<hkern u1="Ÿ" u2="." k="123" /> +<hkern u1="Ÿ" u2="," k="123" /> +<hkern u1="–" u2="T" k="82" /> +<hkern u1="—" u2="T" k="82" /> +<hkern u1="‘" u2="Ÿ" k="-20" /> +<hkern u1="‘" u2="œ" k="123" /> +<hkern u1="‘" u2="ü" k="61" /> +<hkern u1="‘" u2="û" k="61" /> +<hkern u1="‘" u2="ú" k="61" /> +<hkern u1="‘" u2="ù" k="61" /> +<hkern u1="‘" u2="ø" k="123" /> +<hkern u1="‘" u2="ö" k="123" /> +<hkern u1="‘" u2="õ" k="123" /> +<hkern u1="‘" u2="ô" k="123" /> +<hkern u1="‘" u2="ó" k="123" /> +<hkern u1="‘" u2="ò" k="123" /> +<hkern u1="‘" u2="ë" k="123" /> +<hkern u1="‘" u2="ê" k="123" /> +<hkern u1="‘" u2="é" k="123" /> +<hkern u1="‘" u2="è" k="123" /> +<hkern u1="‘" u2="ç" k="123" /> +<hkern u1="‘" u2="æ" k="82" /> +<hkern u1="‘" u2="å" k="82" /> +<hkern u1="‘" u2="ä" k="82" /> +<hkern u1="‘" u2="ã" k="82" /> +<hkern u1="‘" u2="â" k="82" /> +<hkern u1="‘" u2="á" k="82" /> +<hkern u1="‘" u2="à" k="123" /> +<hkern u1="‘" u2="Ý" k="-20" /> +<hkern u1="‘" u2="Å" k="143" /> +<hkern u1="‘" u2="Ä" k="143" /> +<hkern u1="‘" u2="Ã" k="143" /> +<hkern u1="‘" u2="Â" k="143" /> +<hkern u1="‘" u2="Á" k="143" /> +<hkern u1="‘" u2="À" k="143" /> +<hkern u1="‘" u2="u" k="61" /> +<hkern u1="‘" u2="s" k="61" /> +<hkern u1="‘" u2="r" k="61" /> +<hkern u1="‘" u2="q" k="123" /> +<hkern u1="‘" u2="p" k="61" /> +<hkern u1="‘" u2="o" k="123" /> +<hkern u1="‘" u2="n" k="61" /> +<hkern u1="‘" u2="m" k="61" /> +<hkern u1="‘" u2="g" k="61" /> +<hkern u1="‘" u2="e" k="123" /> +<hkern u1="‘" u2="d" k="123" /> +<hkern u1="‘" u2="c" k="123" /> +<hkern u1="‘" u2="a" k="82" /> +<hkern u1="‘" u2="Y" k="-20" /> +<hkern u1="‘" u2="W" k="-41" /> +<hkern u1="‘" u2="V" k="-41" /> +<hkern u1="‘" u2="T" k="-41" /> +<hkern u1="‘" u2="A" k="143" /> +<hkern u1="’" u2="Ÿ" k="-20" /> +<hkern u1="’" u2="œ" k="123" /> +<hkern u1="’" u2="ü" k="61" /> +<hkern u1="’" u2="û" k="61" /> +<hkern u1="’" u2="ú" k="61" /> +<hkern u1="’" u2="ù" k="61" /> +<hkern u1="’" u2="ø" k="123" /> +<hkern u1="’" u2="ö" k="123" /> +<hkern u1="’" u2="õ" k="123" /> +<hkern u1="’" u2="ô" k="123" /> +<hkern u1="’" u2="ó" k="123" /> +<hkern u1="’" u2="ò" k="123" /> +<hkern u1="’" u2="ë" k="123" /> +<hkern u1="’" u2="ê" k="123" /> +<hkern u1="’" u2="é" k="123" /> +<hkern u1="’" u2="è" k="123" /> +<hkern u1="’" u2="ç" k="123" /> +<hkern u1="’" u2="æ" k="82" /> +<hkern u1="’" u2="å" k="82" /> +<hkern u1="’" u2="ä" k="82" /> +<hkern u1="’" u2="ã" k="82" /> +<hkern u1="’" u2="â" k="82" /> +<hkern u1="’" u2="á" k="82" /> +<hkern u1="’" u2="à" k="123" /> +<hkern u1="’" u2="Ý" k="-20" /> +<hkern u1="’" u2="Å" k="143" /> +<hkern u1="’" u2="Ä" k="143" /> +<hkern u1="’" u2="Ã" k="143" /> +<hkern u1="’" u2="Â" k="143" /> +<hkern u1="’" u2="Á" k="143" /> +<hkern u1="’" u2="À" k="143" /> +<hkern u1="’" u2="u" k="61" /> +<hkern u1="’" u2="s" k="61" /> +<hkern u1="’" u2="r" k="61" /> +<hkern u1="’" u2="q" k="123" /> +<hkern u1="’" u2="p" k="61" /> +<hkern u1="’" u2="o" k="123" /> +<hkern u1="’" u2="n" k="61" /> +<hkern u1="’" u2="m" k="61" /> +<hkern u1="’" u2="g" k="61" /> +<hkern u1="’" u2="e" k="123" /> +<hkern u1="’" u2="d" k="123" /> +<hkern u1="’" u2="c" k="123" /> +<hkern u1="’" u2="a" k="82" /> +<hkern u1="’" u2="Y" k="-20" /> +<hkern u1="’" u2="W" k="-41" /> +<hkern u1="’" u2="V" k="-41" /> +<hkern u1="’" u2="T" k="-41" /> +<hkern u1="’" u2="A" k="143" /> +<hkern u1="‚" u2="Ÿ" k="123" /> +<hkern u1="‚" u2="Œ" k="102" /> +<hkern u1="‚" u2="Ý" k="123" /> +<hkern u1="‚" u2="Ü" k="41" /> +<hkern u1="‚" u2="Û" k="41" /> +<hkern u1="‚" u2="Ú" k="41" /> +<hkern u1="‚" u2="Ù" k="41" /> +<hkern u1="‚" u2="Ø" k="102" /> +<hkern u1="‚" u2="Ö" k="102" /> +<hkern u1="‚" u2="Õ" k="102" /> +<hkern u1="‚" u2="Ô" k="102" /> +<hkern u1="‚" u2="Ó" k="102" /> +<hkern u1="‚" u2="Ò" k="102" /> +<hkern u1="‚" u2="Ç" k="102" /> +<hkern u1="‚" u2="Y" k="123" /> +<hkern u1="‚" u2="W" k="123" /> +<hkern u1="‚" u2="V" k="123" /> +<hkern u1="‚" u2="U" k="41" /> +<hkern u1="‚" u2="T" k="143" /> +<hkern u1="‚" u2="Q" k="102" /> +<hkern u1="‚" u2="O" k="102" /> +<hkern u1="‚" u2="G" k="102" /> +<hkern u1="‚" u2="C" k="102" /> +<hkern u1="“" u2="Ÿ" k="-20" /> +<hkern u1="“" u2="œ" k="123" /> +<hkern u1="“" u2="ü" k="61" /> +<hkern u1="“" u2="û" k="61" /> +<hkern u1="“" u2="ú" k="61" /> +<hkern u1="“" u2="ù" k="61" /> +<hkern u1="“" u2="ø" k="123" /> +<hkern u1="“" u2="ö" k="123" /> +<hkern u1="“" u2="õ" k="123" /> +<hkern u1="“" u2="ô" k="123" /> +<hkern u1="“" u2="ó" k="123" /> +<hkern u1="“" u2="ò" k="123" /> +<hkern u1="“" u2="ë" k="123" /> +<hkern u1="“" u2="ê" k="123" /> +<hkern u1="“" u2="é" k="123" /> +<hkern u1="“" u2="è" k="123" /> +<hkern u1="“" u2="ç" k="123" /> +<hkern u1="“" u2="æ" k="82" /> +<hkern u1="“" u2="å" k="82" /> +<hkern u1="“" u2="ä" k="82" /> +<hkern u1="“" u2="ã" k="82" /> +<hkern u1="“" u2="â" k="82" /> +<hkern u1="“" u2="á" k="82" /> +<hkern u1="“" u2="à" k="123" /> +<hkern u1="“" u2="Ý" k="-20" /> +<hkern u1="“" u2="Å" k="143" /> +<hkern u1="“" u2="Ä" k="143" /> +<hkern u1="“" u2="Ã" k="143" /> +<hkern u1="“" u2="Â" k="143" /> +<hkern u1="“" u2="Á" k="143" /> +<hkern u1="“" u2="À" k="143" /> +<hkern u1="“" u2="u" k="61" /> +<hkern u1="“" u2="s" k="61" /> +<hkern u1="“" u2="r" k="61" /> +<hkern u1="“" u2="q" k="123" /> +<hkern u1="“" u2="p" k="61" /> +<hkern u1="“" u2="o" k="123" /> +<hkern u1="“" u2="n" k="61" /> +<hkern u1="“" u2="m" k="61" /> +<hkern u1="“" u2="g" k="61" /> +<hkern u1="“" u2="e" k="123" /> +<hkern u1="“" u2="d" k="123" /> +<hkern u1="“" u2="c" k="123" /> +<hkern u1="“" u2="a" k="82" /> +<hkern u1="“" u2="Y" k="-20" /> +<hkern u1="“" u2="W" k="-41" /> +<hkern u1="“" u2="V" k="-41" /> +<hkern u1="“" u2="T" k="-41" /> +<hkern u1="“" u2="A" k="143" /> +<hkern u1="„" u2="Ÿ" k="123" /> +<hkern u1="„" u2="Œ" k="102" /> +<hkern u1="„" u2="Ý" k="123" /> +<hkern u1="„" u2="Ü" k="41" /> +<hkern u1="„" u2="Û" k="41" /> +<hkern u1="„" u2="Ú" k="41" /> +<hkern u1="„" u2="Ù" k="41" /> +<hkern u1="„" u2="Ø" k="102" /> +<hkern u1="„" u2="Ö" k="102" /> +<hkern u1="„" u2="Õ" k="102" /> +<hkern u1="„" u2="Ô" k="102" /> +<hkern u1="„" u2="Ó" k="102" /> +<hkern u1="„" u2="Ò" k="102" /> +<hkern u1="„" u2="Ç" k="102" /> +<hkern u1="„" u2="Y" k="123" /> +<hkern u1="„" u2="W" k="123" /> +<hkern u1="„" u2="V" k="123" /> +<hkern u1="„" u2="U" k="41" /> +<hkern u1="„" u2="T" k="143" /> +<hkern u1="„" u2="Q" k="102" /> +<hkern u1="„" u2="O" k="102" /> +<hkern u1="„" u2="G" k="102" /> +<hkern u1="„" u2="C" k="102" /> +</font> +</defs></svg>
\ No newline at end of file diff --git a/documentation/jsapi/fonts/OpenSans-Light-webfont.woff b/documentation/jsapi/fonts/OpenSans-Light-webfont.woff Binary files differnew file mode 100644 index 000000000..e78607481 --- /dev/null +++ b/documentation/jsapi/fonts/OpenSans-Light-webfont.woff diff --git a/documentation/jsapi/fonts/OpenSans-LightItalic-webfont.eot b/documentation/jsapi/fonts/OpenSans-LightItalic-webfont.eot Binary files differnew file mode 100644 index 000000000..8f445929f --- /dev/null +++ b/documentation/jsapi/fonts/OpenSans-LightItalic-webfont.eot diff --git a/documentation/jsapi/fonts/OpenSans-LightItalic-webfont.svg b/documentation/jsapi/fonts/OpenSans-LightItalic-webfont.svg new file mode 100644 index 000000000..431d7e354 --- /dev/null +++ b/documentation/jsapi/fonts/OpenSans-LightItalic-webfont.svg @@ -0,0 +1,1835 @@ +<?xml version="1.0" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" > +<svg xmlns="http://www.w3.org/2000/svg"> +<metadata></metadata> +<defs> +<font id="open_sanslight_italic" horiz-adv-x="1128" > +<font-face units-per-em="2048" ascent="1638" descent="-410" /> +<missing-glyph horiz-adv-x="532" /> +<glyph unicode="ff" horiz-adv-x="1155" d="M-131 -492q-48 0 -102 19v90q53 -16 100 -16q88 0 134 53t75 186l246 1166h-205l14 67l205 14l35 160q35 168 116.5 244t227.5 76q73 0 166 -31l-25 -80q-87 27 -147 27q-96 0 -153.5 -53.5t-84.5 -178.5l-35 -164h477l35 160q35 168 116.5 244t227.5 76q73 0 166 -31 l-24 -80q-87 27 -148 27q-97 0 -154.5 -54.5t-82.5 -177.5l-35 -164h248l-17 -81h-248l-252 -1190q-34 -165 -105.5 -236.5t-193.5 -71.5q-48 0 -102 19v90q53 -16 100 -16q88 0 134 53t75 186l244 1166h-477l-252 -1190q-33 -161 -104 -234.5t-195 -73.5z" /> +<glyph unicode="fi" horiz-adv-x="1040" d="M0 0zM739 0h-98l231 1087h96zM915 1366q0 55 22 88t60 33q57 0 57 -72q0 -57 -22 -90t-57 -33q-29 0 -44.5 19.5t-15.5 54.5zM-148 -492q-48 0 -102 19v90q53 -16 100 -16q88 0 134 53t75 186l246 1166h-205l14 67l205 14l35 160q35 168 116.5 244t227.5 76q73 0 166 -31 l-25 -80q-87 27 -147 27q-96 0 -153.5 -53.5t-84.5 -178.5l-35 -164h248l-16 -81h-248l-252 -1190q-33 -161 -104 -234.5t-195 -73.5z" /> +<glyph unicode="fl" horiz-adv-x="1042" d="M0 0zM737 0h-94l334 1556h94zM-148 -492q-48 0 -102 19v90q53 -16 100 -16q88 0 134 53t75 186l246 1166h-205l14 67l205 14l35 160q35 168 116.5 244t227.5 76q73 0 166 -31l-25 -80q-87 27 -147 27q-96 0 -153.5 -53.5t-84.5 -178.5l-35 -164h248l-16 -81h-248 l-252 -1190q-33 -161 -104 -234.5t-195 -73.5z" /> +<glyph unicode="ffi" horiz-adv-x="1616" d="M0 0zM-148 -492q-48 0 -102 19v90q53 -16 100 -16q88 0 134 53t75 186l246 1166h-205l14 67l205 14l35 160q35 168 116.5 244t227.5 76q73 0 166 -31l-25 -80q-87 27 -147 27q-96 0 -153.5 -53.5t-84.5 -178.5l-35 -164h477l35 160q35 168 116.5 244t227.5 76 q73 0 166 -31l-24 -80q-87 27 -148 27q-97 0 -154.5 -54.5t-82.5 -177.5l-35 -164h248l-17 -81h-248l-252 -1190q-34 -165 -105.5 -236.5t-193.5 -71.5q-48 0 -102 19v90q53 -16 100 -16q88 0 134 53t75 186l244 1166h-477l-252 -1190q-33 -161 -104 -234.5t-195 -73.5z M1315 0h-98l231 1087h96zM1491 1366q0 55 22 88t60 33q57 0 57 -72q0 -57 -22 -90t-57 -33q-29 0 -44.5 19.5t-15.5 54.5z" /> +<glyph unicode="ffl" horiz-adv-x="1626" d="M0 0zM-148 -492q-48 0 -102 19v90q53 -16 100 -16q88 0 134 53t75 186l246 1166h-205l14 67l205 14l35 160q35 168 116.5 244t227.5 76q73 0 166 -31l-25 -80q-87 27 -147 27q-96 0 -153.5 -53.5t-84.5 -178.5l-35 -164h477l35 160q35 168 116.5 244t227.5 76 q73 0 166 -31l-24 -80q-87 27 -148 27q-97 0 -154.5 -54.5t-82.5 -177.5l-35 -164h248l-17 -81h-248l-252 -1190q-34 -165 -105.5 -236.5t-193.5 -71.5q-48 0 -102 19v90q53 -16 100 -16q88 0 134 53t75 186l244 1166h-477l-252 -1190q-33 -161 -104 -234.5t-195 -73.5z M1321 0h-94l334 1556h94z" /> +<glyph horiz-adv-x="2048" /> +<glyph horiz-adv-x="2048" /> +<glyph unicode="
" horiz-adv-x="1044" /> +<glyph unicode=" " horiz-adv-x="532" /> +<glyph unicode="	" horiz-adv-x="532" /> +<glyph unicode=" " horiz-adv-x="532" /> +<glyph unicode="!" horiz-adv-x="502" d="M248 377h-62l203 1085h119zM80 57q0 56 25 88.5t69 32.5q66 0 66 -72q0 -53 -25 -87.5t-68 -34.5q-67 0 -67 73z" /> +<glyph unicode=""" horiz-adv-x="721" d="M455 1462l-146 -528h-61l80 528h127zM784 1462l-145 -528h-61l79 528h127z" /> +<glyph unicode="#" horiz-adv-x="1323" d="M389 530l119 398h-297l8 80h311l134 454h90l-136 -454h365l135 454h86l-135 -454h285l-8 -80h-302l-118 -398h303l-8 -79h-320l-133 -451h-90l135 451h-360l-134 -451h-88l134 451h-283l8 79h299zM475 530h363l120 398h-362z" /> +<glyph unicode="$" d="M928 467q0 -151 -110.5 -243t-297.5 -103l-53 -240h-82l51 240q-79 2 -158 18t-137 43v94q65 -34 153.5 -53.5t160.5 -19.5l110 512q-110 53 -153 91t-66.5 87.5t-23.5 116.5q0 155 105.5 250.5t272.5 99.5l41 192h80l-41 -192q149 -5 277 -68l-35 -78q-110 61 -256 70 l-109 -514q124 -60 172.5 -99.5t73.5 -88.5t25 -115zM537 203q142 7 223.5 74.5t81.5 183.5q0 76 -48 129.5t-157 97.5zM686 1284q-134 -9 -205 -80t-71 -186q0 -78 37 -128.5t137 -96.5z" /> +<glyph unicode="%" horiz-adv-x="1556" d="M1458 1462l-1139 -1462h-106l1135 1462h110zM1520 612q0 -175 -50 -327t-136 -230t-197 -78q-112 0 -172 75.5t-60 223.5q0 160 52 312t138 229.5t193 77.5q121 0 176.5 -71.5t55.5 -211.5zM1284 821q-80 0 -146.5 -72.5t-106.5 -202.5t-40 -263q0 -116 41 -174t113 -58 q130 0 209.5 166.5t79.5 386.5q0 109 -36 163t-114 54zM760 1198q0 -175 -50 -327t-136 -230t-197 -78q-112 0 -172 75.5t-60 223.5q0 160 52 312t138 229.5t193 77.5q232 0 232 -283zM524 1407q-79 0 -145 -71.5t-107 -203t-41 -264.5q0 -115 41 -173t113 -58 q84 0 148.5 72t102.5 204t38 277q0 109 -36 163t-114 54z" /> +<glyph unicode="&" horiz-adv-x="1331" d="M748 1395q-125 0 -194 -68t-69 -192q0 -132 109 -281q203 89 279.5 163.5t76.5 182.5q0 91 -56.5 143t-145.5 52zM465 63q108 0 211.5 42.5t222.5 146.5l-352 493q-164 -79 -232 -134.5t-103.5 -124t-35.5 -158.5q0 -119 78 -192t211 -73zM78 324q0 162 99 277.5 t325 215.5l-41 67q-78 128 -78 251q0 157 101 253.5t264 96.5q145 0 227 -76.5t82 -206.5q0 -85 -41 -154t-121 -128t-256 -138l330 -463q73 75 135.5 176.5t91.5 186.5h111q-102 -247 -285 -436l184 -246h-123l-131 184q-121 -108 -242 -156t-266 -48q-167 0 -266.5 94 t-99.5 250z" /> +<glyph unicode="'" horiz-adv-x="403" d="M461 1462l-146 -528h-61l80 528h127z" /> +<glyph unicode="(" horiz-adv-x="526" d="M104 270q0 343 122 633t382 559h105q-259 -276 -384.5 -568t-125.5 -618q0 -317 127 -600h-80q-146 262 -146 594z" /> +<glyph unicode=")" horiz-adv-x="526" d="M453 868q0 -345 -123.5 -636t-380.5 -556h-105q257 274 383.5 566.5t126.5 619.5q0 148 -28.5 294t-98.5 306h80q146 -262 146 -594z" /> +<glyph unicode="*" horiz-adv-x="1137" d="M834 1540l-109 -405l438 8l-8 -107l-416 29l181 -401l-115 -37l-135 417l-285 -348l-78 78l318 318l-392 125l39 102l394 -168l47 408z" /> +<glyph unicode="+" d="M563 672h-401v100h401v404h101v-404h401v-100h-401v-400h-101v400z" /> +<glyph unicode="," horiz-adv-x="451" d="M250 238l8 -23q-34 -92 -114 -233.5t-160 -245.5h-74q79 132 141 271t88 231h111z" /> +<glyph unicode="-" horiz-adv-x="629" d="M82 502l18 90h457l-16 -90h-459z" /> +<glyph unicode="." horiz-adv-x="485" d="M82 55q0 56 25 88.5t69 32.5q66 0 66 -72q0 -53 -25 -87.5t-67 -34.5q-68 0 -68 73z" /> +<glyph unicode="/" horiz-adv-x="641" d="M827 1462l-817 -1462h-110l815 1462h112z" /> +<glyph unicode="0" d="M1075 1016q0 -201 -41 -405t-116.5 -346t-183.5 -213.5t-242 -71.5q-176 0 -264.5 126.5t-88.5 387.5q0 186 44.5 381.5t124 334t187 207t240.5 68.5q340 0 340 -469zM723 1397q-134 0 -241.5 -113t-173.5 -329t-66 -451q0 -222 62.5 -329t197.5 -107q139 0 244 112 t166 337t61 489q0 199 -59.5 295t-190.5 96z" /> +<glyph unicode="1" d="M537 0h-105l225 1055q19 92 74 293q-42 -36 -75.5 -61t-249.5 -161l-52 78l406 258h90z" /> +<glyph unicode="2" d="M909 0h-870l22 104l449 402q198 177 284 276.5t126.5 186.5t40.5 180q0 112 -66 178t-197 66q-176 0 -333 -129l-54 73q180 146 394 146q173 0 268.5 -85t95.5 -237q0 -110 -43.5 -208.5t-141.5 -211.5t-311 -303l-383 -338v-4h736z" /> +<glyph unicode="3" d="M1049 1174q0 -162 -106 -275t-286 -143v-4q117 -24 185.5 -115.5t68.5 -226.5q0 -134 -64 -233t-179.5 -148t-274.5 -49q-96 0 -184.5 20.5t-153.5 52.5v101q172 -86 344 -86q197 0 303.5 89.5t106.5 252.5q0 145 -89 223t-247 78h-117l21 96h110q209 0 333 95.5 t124 258.5q0 114 -63.5 175t-188.5 61q-167 0 -344 -131l-49 75q84 67 188 104.5t218 37.5q161 0 252.5 -82.5t91.5 -226.5z" /> +<glyph unicode="4" d="M1071 371h-264l-80 -371h-96l80 371h-688l20 96l881 1010h118l-215 -1018h265zM729 459q79 369 119 558.5t86 354.5h-4q-66 -91 -129 -166l-651 -747h579z" /> +<glyph unicode="5" d="M582 879q188 0 292.5 -102t104.5 -279q0 -237 -148 -377.5t-407 -140.5q-84 0 -177.5 20t-158.5 51v107q170 -90 340 -90q208 0 328.5 114.5t120.5 313.5q0 140 -85 219.5t-225 79.5q-133 0 -243 -41l-66 49l193 659h624l-18 -96h-541l-149 -516q98 29 215 29z" /> +<glyph unicode="6" d="M170 428q0 283 105 544.5t269.5 385t383.5 123.5q123 0 182 -21l-18 -90q-86 23 -170 23q-233 0 -393.5 -174t-233.5 -502h8q68 94 164 143t211 49q161 0 250.5 -100.5t89.5 -282.5q0 -156 -60 -281t-171 -195t-257 -70q-171 0 -265.5 119t-94.5 329zM543 68 q112 0 196.5 58.5t130 162t45.5 229.5q0 146 -67 224.5t-195 78.5q-81 0 -154 -31.5t-129 -87t-78 -115t-22 -173.5q0 -164 72.5 -255t200.5 -91z" /> +<glyph unicode="7" d="M244 0l796 1366h-766l23 96h858l-20 -110l-779 -1352h-112z" /> +<glyph unicode="8" d="M737 1485q163 0 258 -85t95 -229q0 -138 -84 -234.5t-285 -172.5q130 -78 190 -170.5t60 -208.5t-58 -208t-165.5 -144.5t-260.5 -52.5q-178 0 -283.5 92.5t-105.5 253.5q0 159 100.5 268.5t321.5 187.5q-100 72 -144 152t-44 180q0 159 114 265t291 106zM610 733 q-218 -73 -313.5 -167.5t-95.5 -225.5q0 -136 77.5 -206.5t219.5 -70.5q168 0 270 91t102 233q0 104 -62 189t-198 157zM727 1399q-130 0 -214.5 -82t-84.5 -203q0 -91 41.5 -159t157.5 -142q192 62 279 144t87 206q0 109 -70.5 172.5t-195.5 63.5z" /> +<glyph unicode="9" d="M1059 1032q0 -288 -101.5 -548t-263.5 -382t-393 -122q-114 0 -186 22v90q87 -29 192 -29q474 0 627 674h-8q-140 -192 -367 -192q-162 0 -255 105t-93 284q0 155 59.5 281t170.5 196t257 70q174 0 267.5 -115.5t93.5 -333.5zM686 1393q-112 0 -197.5 -58.5 t-130.5 -162.5t-45 -230q0 -145 67.5 -225t192.5 -80q83 0 157.5 32.5t129 87.5t76.5 114t22 176q0 166 -71 256t-201 90z" /> +<glyph unicode=":" horiz-adv-x="485" d="M260 989q0 57 25.5 89t68.5 32q66 0 66 -72q0 -55 -25 -89t-67 -34q-68 0 -68 74zM102 55q0 56 25.5 88.5t69.5 32.5q65 0 65 -72q0 -55 -25.5 -88.5t-66.5 -33.5q-68 0 -68 73z" /> +<glyph unicode=";" horiz-adv-x="485" d="M287 238l8 -23q-35 -96 -118.5 -242t-156.5 -237h-73q79 132 141 271t88 231h111zM266 989q0 57 25.5 89t68.5 32q66 0 66 -72q0 -55 -25 -89t-67 -34q-68 0 -68 74z" /> +<glyph unicode="<" d="M1051 262l-914 414v74l914 471v-103l-801 -399l801 -350v-107z" /> +<glyph unicode="=" d="M168 885v100h903v-100h-903zM168 461v98h903v-98h-903z" /> +<glyph unicode=">" d="M170 369l801 350l-801 399v103l915 -471v-74l-915 -414v107z" /> +<glyph unicode="?" horiz-adv-x="799" d="M242 362l6 29q29 132 82 206.5t157 147.5q118 84 175 145.5t86.5 127.5t29.5 141q0 108 -67.5 170t-182.5 62q-139 0 -307 -101l-39 86q85 49 171.5 78t187.5 29q159 0 250.5 -84.5t91.5 -229.5q0 -127 -66 -234t-231 -226q-85 -61 -132.5 -108.5t-73 -95t-46.5 -143.5 h-92zM170 59q0 56 25 88.5t69 32.5q66 0 66 -71q0 -54 -24.5 -88.5t-67.5 -34.5q-68 0 -68 73z" /> +<glyph unicode="@" horiz-adv-x="1724" d="M1688 858q0 -179 -56 -323.5t-154.5 -227t-211.5 -82.5q-98 0 -154.5 55t-56.5 144h-4q-54 -97 -132.5 -148t-168.5 -51q-112 0 -178 73t-66 202q0 156 63 283t178 198.5t261 71.5q122 0 252 -52l-84 -315q-39 -140 -39 -221q0 -71 34.5 -111.5t100.5 -40.5 q86 0 160 73.5t117.5 198t43.5 251.5q0 156 -65 277t-187 188t-292 67q-235 0 -424.5 -108.5t-295.5 -304t-106 -439.5q0 -288 155 -449t435 -161q207 0 420 82v-90q-210 -82 -428 -82q-203 0 -357.5 82.5t-238.5 239t-84 370.5q0 276 121.5 493.5t337 337t473.5 119.5 q189 0 330.5 -72.5t221 -213t79.5 -314.5zM1008 969q-113 0 -204.5 -59t-142.5 -165.5t-51 -238.5q0 -92 40.5 -142.5t113.5 -50.5q101 0 180.5 89t124.5 255l78 289q-66 23 -139 23z" /> +<glyph unicode="A" horiz-adv-x="1059" d="M805 520h-512l-287 -520h-117l822 1468h67l201 -1468h-105zM793 612l-39 291q-31 242 -39 402q-30 -63 -64.5 -130t-306.5 -563h449z" /> +<glyph unicode="B" horiz-adv-x="1202" d="M412 1462h379q190 0 290.5 -84t100.5 -241q0 -153 -90 -249t-254 -124v-4q125 -31 188.5 -113.5t63.5 -204.5q0 -205 -140.5 -323.5t-390.5 -118.5h-457zM377 811h278q206 0 313 81t107 238q0 119 -78 180.5t-229 61.5h-272zM358 721l-135 -631h342q201 0 309.5 87.5 t108.5 256.5q0 145 -90 216t-275 71h-260z" /> +<glyph unicode="C" horiz-adv-x="1169" d="M961 1389q-197 0 -351.5 -104.5t-245 -304.5t-90.5 -441q0 -225 110.5 -346t317.5 -121q140 0 304 51v-94q-156 -49 -316 -49q-252 0 -386 145t-134 410q0 266 104.5 488t284.5 341t402 119q177 0 307 -68l-45 -90q-55 30 -124.5 47t-137.5 17z" /> +<glyph unicode="D" horiz-adv-x="1350" d="M1288 879q0 -253 -109.5 -461.5t-300.5 -313t-446 -104.5h-330l310 1462h305q282 0 426.5 -147.5t144.5 -435.5zM430 90q226 0 394.5 94.5t261 275.5t92.5 412q0 498 -476 498h-206l-275 -1280h209z" /> +<glyph unicode="E" horiz-adv-x="1067" d="M829 0h-727l310 1462h727l-21 -94h-624l-117 -553h590l-21 -94h-588l-135 -627h627z" /> +<glyph unicode="F" horiz-adv-x="981" d="M205 0h-103l310 1462h708l-20 -94h-604l-134 -620h570l-21 -95h-569z" /> +<glyph unicode="G" horiz-adv-x="1374" d="M856 735h406l-150 -682q-211 -73 -405 -73q-257 0 -397 146t-140 421q0 265 105 483.5t283.5 335.5t395.5 117q113 0 203 -19t184 -59l-38 -94q-110 46 -189.5 62t-167.5 16q-184 0 -339 -107.5t-244 -301.5t-89 -433q0 -229 114.5 -352t326.5 -123q155 0 309 47l117 526 h-303z" /> +<glyph unicode="H" horiz-adv-x="1366" d="M1063 0h-100l151 719h-760l-149 -719h-103l310 1462h102l-139 -649h760l137 649h100z" /> +<glyph unicode="I" horiz-adv-x="504" d="M102 0l310 1462h98l-309 -1462h-99z" /> +<glyph unicode="J" horiz-adv-x="477" d="M-180 -360q-48 0 -88 8t-56 16l11 92q57 -20 137 -20q213 0 262 241l309 1485h105l-314 -1491q-35 -170 -125 -250.5t-241 -80.5z" /> +<glyph unicode="K" horiz-adv-x="1122" d="M979 0h-111l-342 788l-190 -153l-131 -635h-103l310 1462h102l-158 -723l133 121l680 602h138l-699 -610z" /> +<glyph unicode="L" horiz-adv-x="938" d="M102 0l310 1462h102l-289 -1366h621l-23 -96h-721z" /> +<glyph unicode="M" horiz-adv-x="1669" d="M772 205l733 1257h150l-301 -1462h-101l191 901q79 369 100 447h-6l-780 -1348h-51l-222 1348h-6q-20 -154 -78 -426l-196 -922h-96l309 1462h143l205 -1257h6z" /> +<glyph unicode="N" horiz-adv-x="1372" d="M1069 0h-86l-516 1284h-8q-23 -149 -48 -273t-214 -1011h-95l310 1462h80l522 -1294h8q23 176 74 416l188 878h94z" /> +<glyph unicode="O" horiz-adv-x="1464" d="M1403 911q0 -255 -94 -481.5t-252 -338t-365 -111.5q-250 0 -385 149t-135 430q0 262 93 477.5t255 331t373 115.5q247 0 378.5 -148.5t131.5 -423.5zM879 1389q-174 0 -308.5 -101t-214.5 -298t-80 -417q0 -245 109.5 -373t319.5 -128q169 0 300 98.5t210 300t79 430.5 q0 240 -104.5 364t-310.5 124z" /> +<glyph unicode="P" horiz-adv-x="1145" d="M1145 1102q0 -500 -610 -500h-201l-129 -602h-103l310 1462h315q202 0 310 -92.5t108 -267.5zM350 694h191q252 0 373.5 96.5t121.5 305.5q0 274 -329 274h-211z" /> +<glyph unicode="Q" horiz-adv-x="1464" d="M1403 911q0 -216 -70 -418t-186.5 -324t-274.5 -167l267 -350h-142l-231 332l-74 -4q-250 0 -385 149t-135 430q0 262 93 477.5t255 331t373 115.5q247 0 378.5 -148.5t131.5 -423.5zM879 1389q-174 0 -308.5 -101t-214.5 -298t-80 -417q0 -245 109.5 -373t319.5 -128 q169 0 300 98.5t210 300t79 430.5q0 240 -104.5 364t-310.5 124z" /> +<glyph unicode="R" horiz-adv-x="1145" d="M336 633l-131 -633h-103l310 1462h303q430 0 430 -360q0 -182 -103.5 -303t-281.5 -152q201 -591 221 -647h-111l-211 633h-323zM358 725h252q208 0 317 95.5t109 281.5q0 268 -329 268h-211z" /> +<glyph unicode="S" horiz-adv-x="1020" d="M895 403q0 -126 -65.5 -224.5t-179.5 -148.5t-269 -50q-88 0 -172.5 17t-171.5 58v109q163 -92 348 -92q188 0 295.5 86.5t107.5 232.5q0 61 -17 104.5t-52.5 78.5t-91 68t-131.5 75q-150 76 -209.5 164t-59.5 206t59 207.5t165 139t237 49.5q99 0 180 -17.5t168 -60.5 l-32 -94q-66 40 -151.5 63t-164.5 23q-163 0 -259.5 -82.5t-96.5 -218.5q0 -103 49 -170t182 -133q154 -79 213.5 -130t89 -113t29.5 -147z" /> +<glyph unicode="T" horiz-adv-x="985" d="M438 0h-102l289 1368h-432l20 94h973l-19 -94h-440z" /> +<glyph unicode="U" horiz-adv-x="1370" d="M1395 1462l-207 -977q-58 -270 -197 -387.5t-375 -117.5q-440 0 -440 401q0 83 27 201l186 880h103l-193 -899q-20 -89 -20 -184q0 -309 342 -309q195 0 307.5 96.5t158.5 318.5l207 977h101z" /> +<glyph unicode="V" horiz-adv-x="1079" d="M457 147q51 111 124 247l572 1068h117l-799 -1462h-88l-182 1462h100l117 -950q26 -217 35 -365h4z" /> +<glyph unicode="W" horiz-adv-x="1702" d="M1018 1341q-27 -76 -62 -153.5t-563 -1187.5h-82l-73 1462h100l47 -1031l4 -165l-2 -86h6q85 226 170 398l434 884h105l61 -878q19 -266 19 -410h6q30 86 61.5 163t493.5 1125h108q-169 -365 -330.5 -731t-328.5 -731h-78l-78 1075q-11 142 -11 219l1 47h-8z" /> +<glyph unicode="X" horiz-adv-x="971" d="M879 0h-107l-254 678l-526 -678h-127l608 766l-272 696h106l240 -626l483 626h119l-555 -719z" /> +<glyph unicode="Y" horiz-adv-x="965" d="M494 645l544 817h117l-631 -932l-108 -530h-105l119 545l-237 917h100z" /> +<glyph unicode="Z" d="M913 0h-925l22 92l1069 1276h-764l23 94h887l-19 -88l-1069 -1280h799z" /> +<glyph unicode="[" horiz-adv-x="537" d="M369 -324h-426l376 1786h429l-19 -90h-330l-340 -1605h330z" /> +<glyph unicode="\" horiz-adv-x="641" d="M295 1462l242 -1462h-82l-246 1462h86z" /> +<glyph unicode="]" horiz-adv-x="537" d="M203 1462h426l-377 -1786h-428l18 91h330l340 1605h-330z" /> +<glyph unicode="^" horiz-adv-x="1047" d="M70 569l587 906h91l260 -906h-105l-217 809l-500 -809h-116z" /> +<glyph unicode="_" horiz-adv-x="801" d="M625 -291h-807l18 86h807z" /> +<glyph unicode="`" horiz-adv-x="1135" d="M766 1241h-66q-50 52 -114 144.5t-99 162.5v21h115q46 -129 164 -303v-25z" /> +<glyph unicode="a" horiz-adv-x="1133" d="M655 1104q232 0 279 -219h6l59 202h80l-229 -1087h-82l45 274h-6q-84 -142 -187 -218t-237 -76q-281 0 -281 374q0 197 75 376t200.5 276.5t277.5 97.5zM406 70q89 0 177.5 62t159 166t107.5 230t37 213q0 79 -26 141.5t-77 99t-127 36.5q-124 0 -224 -82t-164 -245.5 t-64 -325.5q0 -152 50 -223.5t151 -71.5z" /> +<glyph unicode="b" horiz-adv-x="1151" d="M500 -16q-113 0 -186 59t-97 166h-6l-55 -209h-80l327 1556h95q-131 -628 -162 -751h6q93 156 199 229.5t231 73.5q281 0 281 -375q0 -203 -76 -380t-201 -273t-276 -96zM750 1018q-91 0 -180 -61.5t-160.5 -169.5t-106.5 -235t-35 -206q0 -129 64 -202.5t166 -73.5 q124 0 224 83t164 245t64 325q0 152 -49 223.5t-151 71.5z" /> +<glyph unicode="c" horiz-adv-x="887" d="M477 -20q-174 0 -274.5 110.5t-100.5 306.5q0 193 73.5 361.5t198.5 257t290 88.5q134 0 241 -43l-28 -90q-107 47 -218 47q-129 0 -232.5 -77t-162.5 -222t-59 -320q0 -158 73.5 -243.5t208.5 -85.5q71 0 131.5 13t131.5 46v-92q-116 -57 -273 -57z" /> +<glyph unicode="d" horiz-adv-x="1133" d="M655 1104q230 0 279 -219h4q12 66 143 671h99l-330 -1556h-82l45 274h-6q-173 -294 -424 -294q-281 0 -281 374q0 193 71.5 370t197.5 278.5t284 101.5zM406 70q89 0 178.5 62.5t160 168t106.5 231t36 209.5q0 126 -61.5 201.5t-168.5 75.5q-124 0 -224 -83t-164 -242.5 t-64 -327.5q0 -295 201 -295z" /> +<glyph unicode="e" horiz-adv-x="928" d="M469 -20q-173 0 -270 109.5t-97 305.5q0 181 71 347t195.5 264t274.5 98q114 0 182 -61t68 -166q0 -181 -163.5 -276t-485.5 -95h-33q-6 -44 -6 -98q0 -165 74 -251.5t213 -86.5q132 0 276 73v-94q-140 -69 -299 -69zM631 1018q-131 0 -243.5 -115.5t-162.5 -308.5h49 q517 0 517 270q0 67 -43.5 110.5t-116.5 43.5z" /> +<glyph unicode="f" horiz-adv-x="578" d="M-131 -492q-48 0 -102 19v90q53 -16 100 -16q88 0 134 53t75 186l246 1166h-205l14 67l205 14l35 160q35 168 116.5 244t227.5 76q73 0 166 -31l-25 -80q-87 27 -147 27q-96 0 -153.5 -53.5t-84.5 -178.5l-35 -164h248l-16 -81h-248l-252 -1190q-33 -161 -104 -234.5 t-195 -73.5z" /> +<glyph unicode="g" horiz-adv-x="1040" d="M1100 1087l-17 -79l-243 -11q26 -28 43.5 -84t17.5 -114q0 -109 -54.5 -206.5t-148 -145.5t-213.5 -48q-63 0 -77 9q-80 -33 -124 -73t-44 -81t31.5 -64.5t113.5 -31.5l121 -11q346 -31 346 -264q0 -112 -65 -197.5t-187 -131.5t-291 -46q-186 0 -291.5 72t-105.5 203 q0 236 309 334q-78 42 -78 123q0 123 191 202q-71 36 -110.5 105.5t-39.5 157.5q0 111 53.5 204t148 146t206.5 53q69 0 147 -21h361zM14 -207q0 -101 81 -150t224 -49q203 0 317 74.5t114 204.5q0 85 -62.5 130.5t-218.5 57.5l-160 15q-157 -45 -226 -114.5t-69 -168.5z M285 711q0 -112 58.5 -170t164.5 -58q88 0 154 37t102.5 114t36.5 169q0 104 -56 161.5t-157 57.5q-93 0 -161 -43t-105 -116t-37 -152z" /> +<glyph unicode="h" horiz-adv-x="1143" d="M764 0l149 692q21 92 21 156q0 80 -43.5 125t-134.5 45q-112 0 -210.5 -67t-166 -188t-103.5 -286l-102 -477h-98l332 1556h96l-86 -411q-44 -200 -66 -279h6q78 113 186.5 175.5t229.5 62.5q124 0 192 -65t68 -183q0 -70 -24 -182l-148 -674h-98z" /> +<glyph unicode="i" horiz-adv-x="475" d="M174 0h-98l231 1087h96zM350 1366q0 55 22 88t60 33q57 0 57 -72q0 -57 -22 -90t-57 -33q-29 0 -44.5 19.5t-15.5 54.5z" /> +<glyph unicode="j" horiz-adv-x="475" d="M-166 -492q-62 0 -113 19v92q47 -22 113 -22q82 0 128.5 51.5t72.5 177.5l266 1261h96l-268 -1271q-35 -165 -106.5 -236.5t-188.5 -71.5zM350 1366q0 55 22 88t60 33q57 0 57 -72q0 -57 -22 -90t-57 -33q-29 0 -44.5 19.5t-15.5 54.5z" /> +<glyph unicode="k" horiz-adv-x="944" d="M270 477l609 610h125l-474 -469l297 -618h-106l-264 559l-205 -188l-80 -371h-96l330 1556h96l-166 -780l-70 -299h4z" /> +<glyph unicode="l" horiz-adv-x="475" d="M170 0h-94l334 1556h94z" /> +<glyph unicode="m" horiz-adv-x="1751" d="M711 0l147 674q25 125 25 162q0 182 -154 182q-106 0 -200 -67.5t-159 -188.5t-100 -287l-100 -475h-98l231 1087h80l-33 -210h6q80 113 181.5 170t212.5 57q106 0 163 -67t60 -195h6q77 129 181 195.5t222 66.5q117 0 182.5 -61.5t65.5 -176.5q0 -29 -2.5 -56.5 t-19.5 -119.5l-152 -690h-100l149 680q25 120 25 176q0 77 -43 119.5t-119 42.5q-157 0 -277.5 -137.5t-168.5 -362.5l-109 -518h-102z" /> +<glyph unicode="n" horiz-adv-x="1143" d="M764 0l149 692q21 92 21 156q0 80 -43.5 125t-134.5 45q-112 0 -210.5 -67t-166 -187.5t-103.5 -286.5l-102 -477h-98l231 1087h82l-37 -221h6q164 238 416 238q130 0 195 -64t65 -184q0 -70 -24 -182l-148 -674h-98z" /> +<glyph unicode="o" horiz-adv-x="1124" d="M649 1108q180 0 278.5 -108.5t98.5 -299.5q0 -197 -71.5 -368.5t-195.5 -261.5t-286 -90q-184 0 -279.5 109.5t-95.5 313.5q0 191 73 358t197 257t281 90zM641 1022q-124 0 -223 -78.5t-158 -225t-59 -310.5q0 -342 282 -342q127 0 225.5 77.5t157 228t58.5 330.5 q0 154 -73 237t-210 83z" /> +<glyph unicode="p" horiz-adv-x="1149" d="M498 -16q-230 0 -279 219h-4q-13 -72 -149 -695h-99l336 1579h82l-45 -274h6q91 153 195.5 224t228.5 71q135 0 208 -92.5t73 -282.5q0 -195 -72 -371t-197.5 -277t-283.5 -101zM748 1018q-87 0 -174 -58.5t-161.5 -167.5t-110.5 -237.5t-36 -208.5q0 -125 61.5 -200.5 t168.5 -75.5q124 0 225 84t164 243.5t63 325.5q0 295 -200 295z" /> +<glyph unicode="q" horiz-adv-x="1157" d="M651 1104q109 0 183.5 -58t99.5 -167h6l55 208h80l-327 -1556h-95l98 470l64 282h-6q-93 -156 -199 -229.5t-231 -73.5q-281 0 -281 374q0 201 75.5 379t200.5 274.5t277 96.5zM401 70q92 0 182 62.5t160.5 171.5t105 236.5t34.5 200.5q0 130 -63.5 203.5t-166.5 73.5 q-124 0 -224 -83t-164 -245t-64 -325q0 -143 45.5 -219t154.5 -76z" /> +<glyph unicode="r" horiz-adv-x="752" d="M713 1106q69 0 123 -14l-21 -93q-47 15 -113 15q-94 0 -179 -64t-153 -192t-100 -277l-100 -481h-98l231 1087h80l-29 -204h6q73 94 123 135.5t106.5 64.5t123.5 23z" /> +<glyph unicode="s" horiz-adv-x="827" d="M713 295q0 -144 -103 -229.5t-280 -85.5q-173 0 -305 75v107q74 -46 153 -71t148 -25q138 0 211 57.5t73 163.5q0 42 -15.5 74t-50 61.5t-132.5 85.5q-148 80 -200 145.5t-52 159.5q0 128 98.5 209.5t259.5 81.5q75 0 158.5 -17.5t140.5 -46.5l-35 -88q-136 64 -264 64 q-116 0 -186 -53t-70 -138q0 -55 17 -88t60.5 -68.5t119.5 -76.5q114 -63 161.5 -103.5t70 -86.5t22.5 -107z" /> +<glyph unicode="t" horiz-adv-x="616" d="M694 1087l-18 -81h-283l-135 -635q-22 -99 -22 -164q0 -139 126 -139q68 0 152 26v-86q-101 -28 -170 -28q-99 0 -153 54.5t-54 158.5q0 73 29 206l129 607h-182l14 67l184 17l97 253h55l-55 -256h286z" /> +<glyph unicode="u" horiz-adv-x="1143" d="M381 1087l-152 -698q-22 -106 -22 -158q0 -74 47.5 -117.5t138.5 -43.5q110 0 207.5 65.5t164 187t99.5 279.5l105 485h98l-231 -1087h-80l28 205h-6q-167 -221 -403 -221q-131 0 -198.5 62t-67.5 181q0 60 22 170l150 690h100z" /> +<glyph unicode="v" horiz-adv-x="895" d="M276 0l-172 1087h101l108 -735q26 -165 33 -254h6q51 115 129 256l406 733h102l-600 -1087h-113z" /> +<glyph unicode="w" horiz-adv-x="1393" d="M838 0l-60 686q-14 224 -14 266h-6q-34 -92 -144 -290l-356 -662h-117l-20 1087h92l13 -821l-3 -157h6q61 134 150 297l373 681h77l64 -681q14 -147 14 -297h6l24 61l101 236l320 681h96l-508 -1087h-108z" /> +<glyph unicode="x" horiz-adv-x="922" d="M442 483l-393 -483h-121l471 559l-245 528h100l207 -462l373 462h120l-448 -534l258 -553h-98z" /> +<glyph unicode="y" horiz-adv-x="920" d="M123 1087h100l82 -548q51 -351 55 -449h11q43 105 186 367l348 630h103l-713 -1290q-72 -127 -122.5 -178t-114 -81t-146.5 -30q-68 0 -129 21v92q71 -27 137 -27q80 0 147 49.5t130 164.5t100 184z" /> +<glyph unicode="z" horiz-adv-x="887" d="M700 0h-729l15 72l776 932h-543l17 83h659l-18 -83l-762 -920h602z" /> +<glyph unicode="{" horiz-adv-x="709" d="M424 -324q-256 0 -256 199q0 45 16 115l56 252q18 90 18 127q0 159 -199 159l21 78q126 0 191 49t89 158l89 393q30 135 106 195.5t215 60.5h29l-17 -86q-86 -2 -129 -20.5t-69.5 -61.5t-44.5 -120l-74 -338q-30 -134 -91.5 -194.5t-164.5 -78.5v-4q68 -18 105.5 -68.5 t37.5 -121.5q0 -52 -24 -164l-47 -225q-13 -58 -13 -101q0 -61 37.5 -89t138.5 -28v-86h-20z" /> +<glyph unicode="|" d="M584 1561h100v-2071h-100v2071z" /> +<glyph unicode="}" horiz-adv-x="709" d="M332 1462q131 0 189.5 -51t58.5 -147q0 -41 -17 -115l-55 -252q-19 -95 -19 -127q0 -77 49.5 -118.5t149.5 -41.5l-20 -78q-125 0 -191 -48.5t-90 -157.5l-88 -394q-32 -139 -108.5 -197.5t-213.5 -58.5h-18v86q96 2 138 21t68.5 61t43.5 121l74 338q27 126 87.5 189.5 t168.5 82.5v5q-75 20 -109.5 72.5t-34.5 117.5q0 55 18 131l54 258q12 61 12 101q0 44 -18 69t-54 36t-116 11l20 86h21z" /> +<glyph unicode="~" d="M350 745q-49 0 -108 -30.5t-115 -89.5v94q108 110 233 110q61 0 115 -13.5t156 -57.5q126 -58 219 -58q54 0 107.5 29t117.5 96v-96q-111 -113 -233 -113q-117 0 -271 72q-62 29 -112.5 43t-108.5 14z" /> +<glyph unicode="¡" horiz-adv-x="502" d="M264 711h62l-203 -1086h-119zM432 1030q0 -56 -25 -88.5t-69 -32.5q-66 0 -66 72q0 55 25 89t68 34q67 0 67 -74z" /> +<glyph unicode="¢" d="M578 -20h-93l45 215q-132 25 -206 132.5t-74 272.5q0 184 63.5 341t178 253t256.5 111l36 178h90l-38 -176q116 -4 217 -43l-29 -90q-107 47 -217 47q-130 0 -233 -76t-162.5 -221t-59.5 -322q0 -164 74.5 -247t208.5 -83q127 0 264 60v-92q-118 -58 -281 -58z" /> +<glyph unicode="£" d="M879 1479q170 0 313 -78l-39 -84l-54 26q-108 50 -231 50q-134 0 -220.5 -74.5t-117.5 -220.5l-73 -340h409l-18 -82h-408l-57 -268q-50 -225 -188 -314h759l-20 -94h-938l16 84q93 11 165.5 95.5t107.5 236.5l57 260h-199l17 82h198l76 350q41 187 155 279t290 92z" /> +<glyph unicode="¤" d="M262 723q0 118 74 225l-129 129l63 64l127 -129q105 78 230 78q118 0 223 -78l131 129l61 -62l-129 -129q78 -106 78 -227q0 -135 -78 -227l129 -127l-61 -62l-131 127q-104 -76 -223 -76q-126 0 -228 80l-129 -129l-61 62l127 127q-74 98 -74 225zM350 723 q0 -116 80 -196.5t197 -80.5t198.5 81t81.5 196q0 75 -36.5 140t-102.5 104t-141 39q-114 0 -195.5 -82t-81.5 -201z" /> +<glyph unicode="¥" d="M584 645l544 817h117l-559 -823h266l-16 -76h-315l-39 -190h317l-18 -84h-316l-59 -289h-105l64 289h-299l18 84h299l41 190h-301l17 76h258l-215 823h100z" /> +<glyph unicode="¦" d="M578 1561h100v-756h-100v756zM578 246h100v-756h-100v756z" /> +<glyph unicode="§" horiz-adv-x="995" d="M211 778q0 101 69.5 182t198.5 130q-64 31 -103.5 85.5t-39.5 120.5q0 74 46 134.5t132.5 94.5t202.5 34q163 0 289 -58l-31 -80q-138 54 -264 54q-124 0 -202.5 -46.5t-78.5 -123.5q0 -59 46 -104.5t183 -106.5q112 -52 158.5 -89.5t71 -85t24.5 -110.5 q0 -197 -249 -317q122 -64 122 -197q0 -86 -48 -153.5t-139.5 -105.5t-221.5 -38q-157 0 -275 53v99q47 -27 126 -46.5t153 -19.5q149 0 228 52.5t79 150.5q0 62 -42.5 106t-166.5 96q-155 65 -211.5 130t-56.5 159zM559 1038q-119 -30 -187.5 -97.5t-68.5 -154.5 q0 -57 24.5 -96.5t81 -73t187.5 -81.5q103 49 162 113.5t59 156.5q0 72 -57.5 126t-200.5 107z" /> +<glyph unicode="¨" horiz-adv-x="1135" d="M836 1366q0 49 20.5 78t56.5 29q54 0 54 -64q0 -48 -21 -77t-55 -29q-55 0 -55 63zM492 1366q0 49 20.5 78t56.5 29q54 0 54 -64q0 -48 -21 -77t-55 -29q-55 0 -55 63z" /> +<glyph unicode="©" horiz-adv-x="1704" d="M944 1092q-142 0 -222.5 -94.5t-80.5 -264.5q0 -186 74.5 -275t220.5 -89q85 0 199 43v-88q-104 -45 -209 -45q-187 0 -288 116t-101 330q0 207 110 332t297 125q119 0 227 -52l-36 -83q-99 45 -191 45zM147 731q0 200 100 375t275 276t377 101q200 0 375 -100t276 -275 t101 -377q0 -197 -97 -370t-272 -277t-383 -104q-207 0 -382 103.5t-272.5 276.5t-97.5 371zM240 731q0 -178 88.5 -329.5t240.5 -240.5t330 -89q174 0 325 85.5t243 239t92 334.5q0 178 -89 330t-240.5 241t-330.5 89q-182 0 -335 -92t-238.5 -243t-85.5 -325z" /> +<glyph unicode="ª" horiz-adv-x="643" d="M487 1485q55 0 97.5 -29t66.5 -86h6l35 103h66l-137 -650h-72l22 125h-4q-96 -137 -223 -137q-80 0 -127 56.5t-47 164.5q0 189 90.5 321t226.5 132zM369 885q66 0 133.5 75.5t97.5 184.5q16 51 16 123q0 58 -36 100.5t-93 42.5q-94 0 -161.5 -111.5t-67.5 -271.5 q0 -143 111 -143z" /> +<glyph unicode="«" horiz-adv-x="860" d="M426 932l57 -49l-317 -336l213 -385l-64 -39l-254 418l2 26zM786 932l58 -49l-314 -336l209 -385l-63 -39l-254 418l2 26z" /> +<glyph unicode="¬" d="M1028 772v-500h-100v400h-803v100h903z" /> +<glyph unicode="­" horiz-adv-x="629" d="M77 502zM77 502l18 90h457l-16 -90h-459z" /> +<glyph unicode="®" horiz-adv-x="1704" d="M758 731h112q93 0 144 46.5t51 135.5q0 172 -197 172h-110v-354zM1169 918q0 -80 -39.5 -141t-109.5 -93l237 -393h-120l-211 360h-168v-360h-101v880h211q143 0 222 -62t79 -191zM150 731q0 207 103.5 382t276.5 272.5t371 97.5q200 0 375 -100t276 -275t101 -377 q0 -197 -97 -370t-272 -277t-383 -104q-204 0 -376.5 100.5t-273.5 273t-101 377.5zM242 731q0 -178 88.5 -329.5t240.5 -240.5t330 -89q174 0 325 85.5t243 239t92 334.5q0 178 -89 330t-240.5 241t-330.5 89q-182 0 -335 -92t-238.5 -243t-85.5 -325z" /> +<glyph unicode="¯" horiz-adv-x="655" d="M1001 1556h-653l53 97h654z" /> +<glyph unicode="°" horiz-adv-x="877" d="M242 1190q0 120 85 206.5t208 86.5q122 0 207 -86.5t85 -206.5q0 -122 -85.5 -207.5t-206.5 -85.5q-122 0 -207.5 85.5t-85.5 207.5zM315 1190q0 -89 64.5 -153t155.5 -64q92 0 155.5 64t63.5 153q0 90 -64 155.5t-155 65.5q-90 0 -155 -65.5t-65 -155.5z" /> +<glyph unicode="±" d="M528 629h-401v98h401v406h101v-406h401v-98h-401v-400h-101v400zM127 0v100h903v-100h-903z" /> +<glyph unicode="²" horiz-adv-x="643" d="M604 586h-522l16 80l297 258q137 118 182.5 190.5t45.5 153.5q0 59 -38.5 97t-105.5 38q-95 0 -194 -76l-41 62q108 90 239 90q73 0 125 -27t78.5 -72t26.5 -100q0 -106 -59 -198.5t-183 -194.5l-266 -223h416z" /> +<glyph unicode="³" horiz-adv-x="643" d="M705 1276q0 -85 -48.5 -148t-154.5 -88v-4q66 -16 105.5 -68t39.5 -124q0 -77 -39 -141t-109 -99t-161 -35q-59 0 -123.5 15.5t-105.5 40.5v90q46 -28 108 -48t125 -20q99 0 159 52.5t60 142.5q0 162 -196 162h-84l16 79h86q102 0 168.5 49.5t66.5 129.5 q0 68 -37.5 102.5t-105.5 34.5q-100 0 -199 -68l-40 64q109 86 251 86q100 0 159 -56.5t59 -148.5z" /> +<glyph unicode="´" horiz-adv-x="1135" d="M580 1262q66 51 150.5 142t129.5 165h137v-23q-51 -66 -157.5 -158.5t-192.5 -146.5h-67v21z" /> +<glyph unicode="µ" horiz-adv-x="1171" d="M238 242q0 -82 48.5 -127t135.5 -45q110 0 207 64.5t162.5 182.5t101.5 285l104 485h99l-234 -1087h-78l29 205h-6q-164 -221 -404 -221q-85 0 -139 32.5t-76 89.5h-6q-18 -132 -51 -284l-63 -314h-97l338 1579h101l-152 -698q-20 -96 -20 -147z" /> +<glyph unicode="¶" horiz-adv-x="1341" d="M1208 -260h-100v1722h-227v-1722h-101v819q-64 -18 -145 -18q-216 0 -318 125t-102 376q0 260 109 387t342 127h542v-1816z" /> +<glyph unicode="·" horiz-adv-x="485" d="M207 625zM207 698q0 56 25 88.5t69 32.5q66 0 66 -72q0 -53 -25 -87.5t-67 -34.5q-68 0 -68 73z" /> +<glyph unicode="¸" horiz-adv-x="420" d="M197 -289q0 -94 -75.5 -148.5t-217.5 -54.5q-46 0 -78 7v79q30 -6 72 -6q198 0 198 115q0 97 -151 107l110 190h80l-78 -137q140 -30 140 -152z" /> +<glyph unicode="¹" horiz-adv-x="643" d="M512 1462h80l-186 -876h-84l118 569q5 21 11.5 50.5t14 60t15.5 59t15 49.5q-34 -31 -60 -51.5t-143 -93.5l-39 59z" /> +<glyph unicode="º" horiz-adv-x="655" d="M518 1479q105 0 165 -64t60 -180q0 -115 -40 -214t-114 -156.5t-175 -57.5q-114 0 -169 67.5t-55 184.5q0 112 41.5 209.5t116 154t170.5 56.5zM508 1405q-70 0 -124 -46.5t-84 -124.5t-30 -167q0 -186 156 -186q73 0 125.5 46.5t81.5 127.5t29 176q0 83 -39 128.5 t-115 45.5z" /> +<glyph unicode="»" horiz-adv-x="860" d="M451 123l-58 49l314 336l-209 385l63 39l254 -418l-2 -27zM90 123l-57 49l313 336l-209 385l64 39l254 -418l-2 -27z" /> +<glyph unicode="¼" horiz-adv-x="1481" d="M129 0zM1319 230h-131l-49 -229h-82l49 229h-391l21 76l506 577h86l-125 -581h133zM1121 302q61 294 79 365.5t29 105.5q-10 -16 -61 -79t-338 -392h291zM1323 1462l-1087 -1462h-107l1086 1462h108zM509 1462h80l-186 -876h-84l118 569q5 21 11.5 50.5t14 60t15.5 59 t15 49.5q-34 -31 -60 -51.5t-143 -93.5l-39 59z" /> +<glyph unicode="½" horiz-adv-x="1458" d="M53 0zM1278 1h-522l16 80l297 258q137 118 182.5 190.5t45.5 153.5q0 59 -38.5 97t-105.5 38q-95 0 -194 -76l-41 62q108 90 239 90q73 0 125 -27t78.5 -72t26.5 -100q0 -106 -59 -198.5t-183 -194.5l-266 -223h416zM431 1462h80l-186 -876h-84l118 569q5 21 11.5 50.5 t14 60t15.5 59t15 49.5q-34 -31 -60 -51.5t-143 -93.5l-39 59zM1247 1462l-1087 -1462h-107l1086 1462h108z" /> +<glyph unicode="¾" horiz-adv-x="1458" d="M71 0zM1380 230h-131l-49 -229h-82l49 229h-391l21 76l506 577h86l-125 -581h133zM1182 302q61 294 79 365.5t29 105.5q-10 -16 -61 -79t-338 -392h291zM667 1276q0 -85 -48.5 -148t-154.5 -88v-4q66 -16 105.5 -68t39.5 -124q0 -77 -39 -141t-109 -99t-161 -35 q-59 0 -123.5 15.5t-105.5 40.5v90q46 -28 108 -48t125 -20q99 0 159 52.5t60 142.5q0 162 -196 162h-84l16 79h86q102 0 168.5 49.5t66.5 129.5q0 68 -37.5 102.5t-105.5 34.5q-100 0 -199 -68l-40 64q109 86 251 86q100 0 159 -56.5t59 -148.5zM1407 1462l-1087 -1462 h-107l1086 1462h108z" /> +<glyph unicode="¿" horiz-adv-x="799" d="M641 717l-6 -29q-28 -127 -79 -200t-161 -154q-118 -84 -175 -145.5t-86.5 -127.5t-29.5 -141q0 -106 65.5 -168.5t184.5 -62.5q141 0 308 100l38 -86q-85 -49 -170.5 -77.5t-187.5 -28.5q-159 0 -250.5 84.5t-91.5 228.5q0 133 70 240.5t227 220.5q85 61 133.5 109 t73 95t45.5 142h92zM713 1020q0 -56 -25.5 -88.5t-69.5 -32.5q-65 0 -65 72q0 56 25 89.5t67 33.5q68 0 68 -74z" /> +<glyph unicode="À" horiz-adv-x="1059" d="M0 0zM805 520h-512l-287 -520h-117l822 1468h67l201 -1468h-105zM793 612l-39 291q-31 242 -39 402q-30 -63 -64.5 -130t-306.5 -563h449zM815 1579h-66q-50 52 -114 144.5t-99 162.5v21h115q46 -129 164 -303v-25z" /> +<glyph unicode="Á" horiz-adv-x="1059" d="M0 0zM805 520h-512l-287 -520h-117l822 1468h67l201 -1468h-105zM793 612l-39 291q-31 242 -39 402q-30 -63 -64.5 -130t-306.5 -563h449zM668 1600q66 51 150.5 142t129.5 165h137v-23q-51 -66 -157.5 -158.5t-192.5 -146.5h-67v21z" /> +<glyph unicode="Â" horiz-adv-x="1059" d="M0 0zM805 520h-512l-287 -520h-117l822 1468h67l201 -1468h-105zM793 612l-39 291q-31 242 -39 402q-30 -63 -64.5 -130t-306.5 -563h449zM1007 1579h-49q-70 60 -161 207q-55 -57 -125 -114.5t-125 -92.5h-54v29q68 56 157.5 148.5t127.5 150.5h64q23 -64 72.5 -152.5 t92.5 -146.5v-29z" /> +<glyph unicode="Ã" horiz-adv-x="1059" d="M0 0zM805 520h-512l-287 -520h-117l822 1468h67l201 -1468h-105zM793 612l-39 291q-31 242 -39 402q-30 -63 -64.5 -130t-306.5 -563h449zM911 1587q-40 0 -77.5 19t-75.5 45q-34 23 -64.5 41t-68.5 18q-45 0 -74 -28.5t-51 -100.5h-74q19 108 71 166.5t134 58.5 q41 0 73.5 -14t117.5 -72q52 -36 94 -36q43 0 71.5 30.5t46.5 100.5h76q-26 -118 -74.5 -173t-124.5 -55z" /> +<glyph unicode="Ä" horiz-adv-x="1059" d="M0 0zM805 520h-512l-287 -520h-117l822 1468h67l201 -1468h-105zM793 612l-39 291q-31 242 -39 402q-30 -63 -64.5 -130t-306.5 -563h449zM879 1704q0 49 20.5 78t56.5 29q54 0 54 -64q0 -48 -21 -77t-55 -29q-55 0 -55 63zM535 1704q0 49 20.5 78t56.5 29q54 0 54 -64 q0 -48 -21 -77t-55 -29q-55 0 -55 63z" /> +<glyph unicode="Å" horiz-adv-x="1059" d="M0 0zM805 520h-512l-287 -520h-117l822 1468h67l201 -1468h-105zM793 612l-39 291q-31 242 -39 402q-30 -63 -64.5 -130t-306.5 -563h449zM945 1600q0 -92 -57.5 -148.5t-145.5 -56.5q-93 0 -148 52t-55 145q0 88 59.5 144t149.5 56q88 0 142.5 -50t54.5 -142zM867 1598 q0 57 -33.5 90t-87.5 33q-60 0 -93.5 -36t-33.5 -93t33 -90t90 -33q56 0 90.5 36t34.5 93z" /> +<glyph unicode="Æ" horiz-adv-x="1640" d="M1403 0h-727l110 522h-444l-328 -522h-131l946 1462h883l-20 -94h-625l-117 -553h590l-20 -94h-588l-135 -627h626zM408 627h401l156 741h-88z" /> +<glyph unicode="Ç" horiz-adv-x="1169" d="M170 0zM961 1389q-197 0 -351.5 -104.5t-245 -304.5t-90.5 -441q0 -225 110.5 -346t317.5 -121q140 0 304 51v-94q-156 -49 -316 -49q-252 0 -386 145t-134 410q0 266 104.5 488t284.5 341t402 119q177 0 307 -68l-45 -90q-55 30 -124.5 47t-137.5 17zM752 -289 q0 -94 -75.5 -148.5t-217.5 -54.5q-46 0 -78 7v79q30 -6 72 -6q198 0 198 115q0 97 -151 107l110 190h80l-78 -137q140 -30 140 -152z" /> +<glyph unicode="È" horiz-adv-x="1067" d="M102 0zM829 0h-727l310 1462h727l-21 -94h-624l-117 -553h590l-21 -94h-588l-135 -627h627zM891 1579h-66q-50 52 -114 144.5t-99 162.5v21h115q46 -129 164 -303v-25z" /> +<glyph unicode="É" horiz-adv-x="1067" d="M102 0zM829 0h-727l310 1462h727l-21 -94h-624l-117 -553h590l-21 -94h-588l-135 -627h627zM654 1600q66 51 150.5 142t129.5 165h137v-23q-51 -66 -157.5 -158.5t-192.5 -146.5h-67v21z" /> +<glyph unicode="Ê" horiz-adv-x="1067" d="M102 0zM829 0h-727l310 1462h727l-21 -94h-624l-117 -553h590l-21 -94h-588l-135 -627h627zM1036 1579h-49q-70 60 -161 207q-55 -57 -125 -114.5t-125 -92.5h-54v29q68 56 157.5 148.5t127.5 150.5h64q23 -64 72.5 -152.5t92.5 -146.5v-29z" /> +<glyph unicode="Ë" horiz-adv-x="1067" d="M102 0zM829 0h-727l310 1462h727l-21 -94h-624l-117 -553h590l-21 -94h-588l-135 -627h627zM902 1704q0 49 20.5 78t56.5 29q54 0 54 -64q0 -48 -21 -77t-55 -29q-55 0 -55 63zM558 1704q0 49 20.5 78t56.5 29q54 0 54 -64q0 -48 -21 -77t-55 -29q-55 0 -55 63z" /> +<glyph unicode="Ì" horiz-adv-x="504" d="M102 0zM102 0l310 1462h98l-309 -1462h-99zM525 1579h-66q-50 52 -114 144.5t-99 162.5v21h115q46 -129 164 -303v-25z" /> +<glyph unicode="Í" horiz-adv-x="504" d="M102 0zM102 0l310 1462h98l-309 -1462h-99zM419 1600q66 51 150.5 142t129.5 165h137v-23q-51 -66 -157.5 -158.5t-192.5 -146.5h-67v21z" /> +<glyph unicode="Î" horiz-adv-x="504" d="M102 0zM102 0l310 1462h98l-309 -1462h-99zM738 1579h-49q-70 60 -161 207q-55 -57 -125 -114.5t-125 -92.5h-54v29q68 56 157.5 148.5t127.5 150.5h64q23 -64 72.5 -152.5t92.5 -146.5v-29z" /> +<glyph unicode="Ï" horiz-adv-x="504" d="M102 0zM102 0l310 1462h98l-309 -1462h-99zM604 1704q0 49 20.5 78t56.5 29q54 0 54 -64q0 -48 -21 -77t-55 -29q-55 0 -55 63zM260 1704q0 49 20.5 78t56.5 29q54 0 54 -64q0 -48 -21 -77t-55 -29q-55 0 -55 63z" /> +<glyph unicode="Ð" horiz-adv-x="1352" d="M1288 879q0 -253 -109.5 -461.5t-300.5 -313t-446 -104.5h-330l144 676h-156l21 96h155l146 690h305q282 0 426.5 -147.5t144.5 -435.5zM430 90q226 0 394.5 94.5t261 275.5t92.5 412q0 498 -476 498h-206l-129 -598h378l-20 -96h-379l-125 -586h209z" /> +<glyph unicode="Ñ" horiz-adv-x="1372" d="M102 0zM1069 0h-86l-516 1284h-8q-23 -149 -48 -273t-214 -1011h-95l310 1462h80l522 -1294h8q23 176 74 416l188 878h94zM1062 1587q-40 0 -77.5 19t-75.5 45q-34 23 -64.5 41t-68.5 18q-45 0 -74 -28.5t-51 -100.5h-74q19 108 71 166.5t134 58.5q41 0 73.5 -14 t117.5 -72q52 -36 94 -36q43 0 71.5 30.5t46.5 100.5h76q-26 -118 -74.5 -173t-124.5 -55z" /> +<glyph unicode="Ò" horiz-adv-x="1464" d="M172 0zM1403 911q0 -255 -94 -481.5t-252 -338t-365 -111.5q-250 0 -385 149t-135 430q0 262 93 477.5t255 331t373 115.5q247 0 378.5 -148.5t131.5 -423.5zM879 1389q-174 0 -308.5 -101t-214.5 -298t-80 -417q0 -245 109.5 -373t319.5 -128q169 0 300 98.5t210 300 t79 430.5q0 240 -104.5 364t-310.5 124zM989 1579h-66q-50 52 -114 144.5t-99 162.5v21h115q46 -129 164 -303v-25z" /> +<glyph unicode="Ó" horiz-adv-x="1464" d="M172 0zM1403 911q0 -255 -94 -481.5t-252 -338t-365 -111.5q-250 0 -385 149t-135 430q0 262 93 477.5t255 331t373 115.5q247 0 378.5 -148.5t131.5 -423.5zM879 1389q-174 0 -308.5 -101t-214.5 -298t-80 -417q0 -245 109.5 -373t319.5 -128q169 0 300 98.5t210 300 t79 430.5q0 240 -104.5 364t-310.5 124zM844 1600q66 51 150.5 142t129.5 165h137v-23q-51 -66 -157.5 -158.5t-192.5 -146.5h-67v21z" /> +<glyph unicode="Ô" horiz-adv-x="1464" d="M172 0zM1403 911q0 -255 -94 -481.5t-252 -338t-365 -111.5q-250 0 -385 149t-135 430q0 262 93 477.5t255 331t373 115.5q247 0 378.5 -148.5t131.5 -423.5zM879 1389q-174 0 -308.5 -101t-214.5 -298t-80 -417q0 -245 109.5 -373t319.5 -128q169 0 300 98.5t210 300 t79 430.5q0 240 -104.5 364t-310.5 124zM1171 1579h-49q-70 60 -161 207q-55 -57 -125 -114.5t-125 -92.5h-54v29q68 56 157.5 148.5t127.5 150.5h64q23 -64 72.5 -152.5t92.5 -146.5v-29z" /> +<glyph unicode="Õ" horiz-adv-x="1464" d="M172 0zM1403 911q0 -255 -94 -481.5t-252 -338t-365 -111.5q-250 0 -385 149t-135 430q0 262 93 477.5t255 331t373 115.5q247 0 378.5 -148.5t131.5 -423.5zM879 1389q-174 0 -308.5 -101t-214.5 -298t-80 -417q0 -245 109.5 -373t319.5 -128q169 0 300 98.5t210 300 t79 430.5q0 240 -104.5 364t-310.5 124zM1077 1587q-40 0 -77.5 19t-75.5 45q-34 23 -64.5 41t-68.5 18q-45 0 -74 -28.5t-51 -100.5h-74q19 108 71 166.5t134 58.5q41 0 73.5 -14t117.5 -72q52 -36 94 -36q43 0 71.5 30.5t46.5 100.5h76q-26 -118 -74.5 -173t-124.5 -55z " /> +<glyph unicode="Ö" horiz-adv-x="1464" d="M172 0zM1403 911q0 -255 -94 -481.5t-252 -338t-365 -111.5q-250 0 -385 149t-135 430q0 262 93 477.5t255 331t373 115.5q247 0 378.5 -148.5t131.5 -423.5zM879 1389q-174 0 -308.5 -101t-214.5 -298t-80 -417q0 -245 109.5 -373t319.5 -128q169 0 300 98.5t210 300 t79 430.5q0 240 -104.5 364t-310.5 124zM1031 1704q0 49 20.5 78t56.5 29q54 0 54 -64q0 -48 -21 -77t-55 -29q-55 0 -55 63zM687 1704q0 49 20.5 78t56.5 29q54 0 54 -64q0 -48 -21 -77t-55 -29q-55 0 -55 63z" /> +<glyph unicode="×" d="M551 723l-330 332l70 69l330 -329l333 329l68 -67l-332 -334l332 -332l-68 -67l-333 329l-330 -327l-68 67z" /> +<glyph unicode="Ø" horiz-adv-x="1464" d="M1403 911q0 -187 -52 -365.5t-144.5 -304.5t-223 -193.5t-291.5 -67.5q-215 0 -348 112l-139 -170l-66 64l146 172q-113 149 -113 401q0 263 94 479.5t256.5 330.5t370.5 114q219 0 352 -121l133 168l70 -53l-145 -183q45 -51 72.5 -161t27.5 -222zM879 1389 q-134 0 -244 -59.5t-188.5 -170t-124.5 -267.5t-46 -319q0 -105 21.5 -191t56.5 -138l826 1032q-107 113 -301 113zM1294 901q0 85 -17.5 172t-43.5 129l-821 -1030q107 -100 293 -100q170 0 301 100t209.5 296.5t78.5 432.5z" /> +<glyph unicode="Ù" horiz-adv-x="1370" d="M176 0zM1395 1462l-207 -977q-58 -270 -197 -387.5t-375 -117.5q-440 0 -440 401q0 83 27 201l186 880h103l-193 -899q-20 -89 -20 -184q0 -309 342 -309q195 0 307.5 96.5t158.5 318.5l207 977h101zM946 1579h-66q-50 52 -114 144.5t-99 162.5v21h115q46 -129 164 -303 v-25z" /> +<glyph unicode="Ú" horiz-adv-x="1370" d="M176 0zM1395 1462l-207 -977q-58 -270 -197 -387.5t-375 -117.5q-440 0 -440 401q0 83 27 201l186 880h103l-193 -899q-20 -89 -20 -184q0 -309 342 -309q195 0 307.5 96.5t158.5 318.5l207 977h101zM838 1600q66 51 150.5 142t129.5 165h137v-23q-51 -66 -157.5 -158.5 t-192.5 -146.5h-67v21z" /> +<glyph unicode="Û" horiz-adv-x="1370" d="M176 0zM1395 1462l-207 -977q-58 -270 -197 -387.5t-375 -117.5q-440 0 -440 401q0 83 27 201l186 880h103l-193 -899q-20 -89 -20 -184q0 -309 342 -309q195 0 307.5 96.5t158.5 318.5l207 977h101zM1148 1579h-49q-70 60 -161 207q-55 -57 -125 -114.5t-125 -92.5h-54 v29q68 56 157.5 148.5t127.5 150.5h64q23 -64 72.5 -152.5t92.5 -146.5v-29z" /> +<glyph unicode="Ü" horiz-adv-x="1370" d="M176 0zM1395 1462l-207 -977q-58 -270 -197 -387.5t-375 -117.5q-440 0 -440 401q0 83 27 201l186 880h103l-193 -899q-20 -89 -20 -184q0 -309 342 -309q195 0 307.5 96.5t158.5 318.5l207 977h101zM1022 1704q0 49 20.5 78t56.5 29q54 0 54 -64q0 -48 -21 -77t-55 -29 q-55 0 -55 63zM678 1704q0 49 20.5 78t56.5 29q54 0 54 -64q0 -48 -21 -77t-55 -29q-55 0 -55 63z" /> +<glyph unicode="Ý" horiz-adv-x="965" d="M193 0zM494 645l544 817h117l-631 -932l-108 -530h-105l119 545l-237 917h100zM563 1600q66 51 150.5 142t129.5 165h137v-23q-51 -66 -157.5 -158.5t-192.5 -146.5h-67v21z" /> +<glyph unicode="Þ" horiz-adv-x="1145" d="M1087 836q0 -247 -153 -373.5t-457 -126.5h-201l-71 -336h-103l310 1462h102l-57 -266h213q200 0 308.5 -92.5t108.5 -267.5zM293 428h190q256 0 376 98.5t120 302.5q0 275 -330 275h-211z" /> +<glyph unicode="ß" horiz-adv-x="1094" d="M-162 -492q-73 0 -119 23v90q53 -24 115 -24q79 0 123 50.5t66 153.5l305 1409q80 357 405 357q137 0 215 -61.5t78 -174.5q0 -75 -44.5 -140.5t-166.5 -148.5q-107 -76 -141.5 -124.5t-34.5 -106.5q0 -51 34 -88.5t93 -75.5q96 -63 138 -133.5t42 -165.5 q0 -170 -106.5 -269t-286.5 -99q-143 0 -234 65v109q45 -36 112.5 -59t129.5 -23q132 0 208.5 71t76.5 195q0 75 -31.5 129t-109.5 108q-82 58 -119 110.5t-37 121.5q0 57 21 103t60.5 88.5t137.5 113.5q101 70 131.5 116t30.5 101q0 70 -55 110t-150 40q-129 0 -205 -76 t-108 -229l-291 -1377q-33 -152 -103.5 -220.5t-179.5 -68.5z" /> +<glyph unicode="à" horiz-adv-x="1133" d="M102 0zM655 1104q232 0 279 -219h6l59 202h80l-229 -1087h-82l45 274h-6q-84 -142 -187 -218t-237 -76q-281 0 -281 374q0 197 75 376t200.5 276.5t277.5 97.5zM406 70q89 0 177.5 62t159 166t107.5 230t37 213q0 79 -26 141.5t-77 99t-127 36.5q-124 0 -224 -82 t-164 -245.5t-64 -325.5q0 -152 50 -223.5t151 -71.5zM809 1241h-66q-50 52 -114 144.5t-99 162.5v21h115q46 -129 164 -303v-25z" /> +<glyph unicode="á" horiz-adv-x="1133" d="M102 0zM655 1104q232 0 279 -219h6l59 202h80l-229 -1087h-82l45 274h-6q-84 -142 -187 -218t-237 -76q-281 0 -281 374q0 197 75 376t200.5 276.5t277.5 97.5zM406 70q89 0 177.5 62t159 166t107.5 230t37 213q0 79 -26 141.5t-77 99t-127 36.5q-124 0 -224 -82 t-164 -245.5t-64 -325.5q0 -152 50 -223.5t151 -71.5zM586 1262q66 51 150.5 142t129.5 165h137v-23q-51 -66 -157.5 -158.5t-192.5 -146.5h-67v21z" /> +<glyph unicode="â" horiz-adv-x="1133" d="M102 0zM655 1104q232 0 279 -219h6l59 202h80l-229 -1087h-82l45 274h-6q-84 -142 -187 -218t-237 -76q-281 0 -281 374q0 197 75 376t200.5 276.5t277.5 97.5zM406 70q89 0 177.5 62t159 166t107.5 230t37 213q0 79 -26 141.5t-77 99t-127 36.5q-124 0 -224 -82 t-164 -245.5t-64 -325.5q0 -152 50 -223.5t151 -71.5zM955 1243h-49q-70 60 -161 207q-55 -57 -125 -114.5t-125 -92.5h-54v29q68 56 157.5 148.5t127.5 150.5h64q23 -64 72.5 -152.5t92.5 -146.5v-29z" /> +<glyph unicode="ã" horiz-adv-x="1133" d="M102 0zM655 1104q232 0 279 -219h6l59 202h80l-229 -1087h-82l45 274h-6q-84 -142 -187 -218t-237 -76q-281 0 -281 374q0 197 75 376t200.5 276.5t277.5 97.5zM406 70q89 0 177.5 62t159 166t107.5 230t37 213q0 79 -26 141.5t-77 99t-127 36.5q-124 0 -224 -82 t-164 -245.5t-64 -325.5q0 -152 50 -223.5t151 -71.5zM858 1249q-40 0 -77.5 19t-75.5 45q-34 23 -64.5 41t-68.5 18q-45 0 -74 -28.5t-51 -100.5h-74q19 108 71 166.5t134 58.5q41 0 73.5 -14t117.5 -72q52 -36 94 -36q43 0 71.5 30.5t46.5 100.5h76q-26 -118 -74.5 -173 t-124.5 -55z" /> +<glyph unicode="ä" horiz-adv-x="1133" d="M102 0zM655 1104q232 0 279 -219h6l59 202h80l-229 -1087h-82l45 274h-6q-84 -142 -187 -218t-237 -76q-281 0 -281 374q0 197 75 376t200.5 276.5t277.5 97.5zM406 70q89 0 177.5 62t159 166t107.5 230t37 213q0 79 -26 141.5t-77 99t-127 36.5q-124 0 -224 -82 t-164 -245.5t-64 -325.5q0 -152 50 -223.5t151 -71.5zM835 1366q0 49 20.5 78t56.5 29q54 0 54 -64q0 -48 -21 -77t-55 -29q-55 0 -55 63zM491 1366q0 49 20.5 78t56.5 29q54 0 54 -64q0 -48 -21 -77t-55 -29q-55 0 -55 63z" /> +<glyph unicode="å" horiz-adv-x="1133" d="M102 0zM655 1104q232 0 279 -219h6l59 202h80l-229 -1087h-82l45 274h-6q-84 -142 -187 -218t-237 -76q-281 0 -281 374q0 197 75 376t200.5 276.5t277.5 97.5zM406 70q89 0 177.5 62t159 166t107.5 230t37 213q0 79 -26 141.5t-77 99t-127 36.5q-124 0 -224 -82 t-164 -245.5t-64 -325.5q0 -152 50 -223.5t151 -71.5zM927 1448q0 -92 -57.5 -148.5t-145.5 -56.5q-93 0 -148 52t-55 145q0 88 59.5 144t149.5 56q88 0 142.5 -50t54.5 -142zM849 1446q0 57 -33.5 90t-87.5 33q-60 0 -93.5 -36t-33.5 -93t33 -90t90 -33q56 0 90.5 36 t34.5 93z" /> +<glyph unicode="æ" horiz-adv-x="1602" d="M1155 -20q-123 0 -211 60t-117 165l-39 -205h-77l41 254h-9q-94 -142 -189 -208t-208 -66q-120 0 -182 94t-62 270q0 206 70.5 384.5t192.5 277t274 98.5q106 0 166 -56.5t74 -156.5h10l59 192h66l-35 -186q139 207 350 207q112 0 175 -61.5t63 -172.5 q0 -179 -158.5 -271.5t-470.5 -92.5h-39q-8 -51 -8 -96q0 -161 69.5 -250.5t217.5 -89.5q69 0 133.5 21t130.5 52v-94q-80 -37 -147 -53t-140 -16zM369 70q67 0 138.5 42t134 117.5t106 170.5t63.5 199t20 165q0 118 -49 186t-141 68q-123 0 -223 -86t-156.5 -240 t-56.5 -340q0 -150 42.5 -216t121.5 -66zM1317 1018q-119 0 -232 -115.5t-172 -308.5h48q263 0 383 67t120 203q0 71 -38.5 112.5t-108.5 41.5z" /> +<glyph unicode="ç" horiz-adv-x="887" d="M102 0zM477 -20q-174 0 -274.5 110.5t-100.5 306.5q0 193 73.5 361.5t198.5 257t290 88.5q134 0 241 -43l-28 -90q-107 47 -218 47q-129 0 -232.5 -77t-162.5 -222t-59 -320q0 -158 73.5 -243.5t208.5 -85.5q71 0 131.5 13t131.5 46v-92q-116 -57 -273 -57zM574 -289 q0 -94 -75.5 -148.5t-217.5 -54.5q-46 0 -78 7v79q30 -6 72 -6q198 0 198 115q0 97 -151 107l110 190h80l-78 -137q140 -30 140 -152z" /> +<glyph unicode="è" horiz-adv-x="928" d="M102 0zM469 -20q-173 0 -270 109.5t-97 305.5q0 181 71 347t195.5 264t274.5 98q114 0 182 -61t68 -166q0 -181 -163.5 -276t-485.5 -95h-33q-6 -44 -6 -98q0 -165 74 -251.5t213 -86.5q132 0 276 73v-94q-140 -69 -299 -69zM631 1018q-131 0 -243.5 -115.5 t-162.5 -308.5h49q517 0 517 270q0 67 -43.5 110.5t-116.5 43.5zM751 1241h-66q-50 52 -114 144.5t-99 162.5v21h115q46 -129 164 -303v-25z" /> +<glyph unicode="é" horiz-adv-x="928" d="M102 0zM469 -20q-173 0 -270 109.5t-97 305.5q0 181 71 347t195.5 264t274.5 98q114 0 182 -61t68 -166q0 -181 -163.5 -276t-485.5 -95h-33q-6 -44 -6 -98q0 -165 74 -251.5t213 -86.5q132 0 276 73v-94q-140 -69 -299 -69zM631 1018q-131 0 -243.5 -115.5 t-162.5 -308.5h49q517 0 517 270q0 67 -43.5 110.5t-116.5 43.5zM532 1262q66 51 150.5 142t129.5 165h137v-23q-51 -66 -157.5 -158.5t-192.5 -146.5h-67v21z" /> +<glyph unicode="ê" horiz-adv-x="928" d="M102 0zM469 -20q-173 0 -270 109.5t-97 305.5q0 181 71 347t195.5 264t274.5 98q114 0 182 -61t68 -166q0 -181 -163.5 -276t-485.5 -95h-33q-6 -44 -6 -98q0 -165 74 -251.5t213 -86.5q132 0 276 73v-94q-140 -69 -299 -69zM631 1018q-131 0 -243.5 -115.5 t-162.5 -308.5h49q517 0 517 270q0 67 -43.5 110.5t-116.5 43.5zM904 1241h-49q-70 60 -161 207q-55 -57 -125 -114.5t-125 -92.5h-54v29q68 56 157.5 148.5t127.5 150.5h64q23 -64 72.5 -152.5t92.5 -146.5v-29z" /> +<glyph unicode="ë" horiz-adv-x="928" d="M102 0zM469 -20q-173 0 -270 109.5t-97 305.5q0 181 71 347t195.5 264t274.5 98q114 0 182 -61t68 -166q0 -181 -163.5 -276t-485.5 -95h-33q-6 -44 -6 -98q0 -165 74 -251.5t213 -86.5q132 0 276 73v-94q-140 -69 -299 -69zM631 1018q-131 0 -243.5 -115.5 t-162.5 -308.5h49q517 0 517 270q0 67 -43.5 110.5t-116.5 43.5zM780 1366q0 49 20.5 78t56.5 29q54 0 54 -64q0 -48 -21 -77t-55 -29q-55 0 -55 63zM436 1366q0 49 20.5 78t56.5 29q54 0 54 -64q0 -48 -21 -77t-55 -29q-55 0 -55 63z" /> +<glyph unicode="ì" horiz-adv-x="475" d="M76 0zM174 0h-98l231 1087h96zM454 1241h-66q-50 52 -114 144.5t-99 162.5v21h115q46 -129 164 -303v-25z" /> +<glyph unicode="í" horiz-adv-x="475" d="M76 0zM174 0h-98l231 1087h96zM284 1262q66 51 150.5 142t129.5 165h137v-23q-51 -66 -157.5 -158.5t-192.5 -146.5h-67v21z" /> +<glyph unicode="î" horiz-adv-x="475" d="M76 0zM174 0h-98l231 1087h96zM642 1241h-49q-70 60 -161 207q-55 -57 -125 -114.5t-125 -92.5h-54v29q68 56 157.5 148.5t127.5 150.5h64q23 -64 72.5 -152.5t92.5 -146.5v-29z" /> +<glyph unicode="ï" horiz-adv-x="475" d="M76 0zM174 0h-98l231 1087h96zM515 1366q0 49 20.5 78t56.5 29q54 0 54 -64q0 -48 -21 -77t-55 -29q-55 0 -55 63zM171 1366q0 49 20.5 78t56.5 29q54 0 54 -64q0 -48 -21 -77t-55 -29q-55 0 -55 63z" /> +<glyph unicode="ð" horiz-adv-x="1124" d="M713 1364q-54 60 -158 139l59 68q32 -26 81 -66t100 -94l266 150l39 -74l-256 -141q87 -116 131.5 -276t44.5 -335q0 -355 -141.5 -555t-399.5 -200q-177 0 -277 106.5t-100 294.5q0 170 63 301.5t178.5 203.5t262.5 72q107 0 188 -49.5t121 -142.5h5q0 139 -43 289 t-115 243l-295 -163l-39 73zM489 70q118 0 208.5 61t144 186.5t53.5 270.5q0 77 -35 142t-100 101.5t-156 36.5q-124 0 -213.5 -61.5t-137.5 -169.5t-48 -248q0 -153 73.5 -236t210.5 -83z" /> +<glyph unicode="ñ" horiz-adv-x="1143" d="M76 0zM764 0l149 692q21 92 21 156q0 80 -43.5 125t-134.5 45q-112 0 -210.5 -67t-166 -187.5t-103.5 -286.5l-102 -477h-98l231 1087h82l-37 -221h6q164 238 416 238q130 0 195 -64t65 -184q0 -70 -24 -182l-148 -674h-98zM874 1249q-40 0 -77.5 19t-75.5 45 q-34 23 -64.5 41t-68.5 18q-45 0 -74 -28.5t-51 -100.5h-74q19 108 71 166.5t134 58.5q41 0 73.5 -14t117.5 -72q52 -36 94 -36q43 0 71.5 30.5t46.5 100.5h76q-26 -118 -74.5 -173t-124.5 -55z" /> +<glyph unicode="ò" horiz-adv-x="1124" d="M98 0zM649 1108q180 0 278.5 -108.5t98.5 -299.5q0 -197 -71.5 -368.5t-195.5 -261.5t-286 -90q-184 0 -279.5 109.5t-95.5 313.5q0 191 73 358t197 257t281 90zM641 1022q-124 0 -223 -78.5t-158 -225t-59 -310.5q0 -342 282 -342q127 0 225.5 77.5t157 228t58.5 330.5 q0 154 -73 237t-210 83zM744 1241h-66q-50 52 -114 144.5t-99 162.5v21h115q46 -129 164 -303v-25z" /> +<glyph unicode="ó" horiz-adv-x="1124" d="M98 0zM649 1108q180 0 278.5 -108.5t98.5 -299.5q0 -197 -71.5 -368.5t-195.5 -261.5t-286 -90q-184 0 -279.5 109.5t-95.5 313.5q0 191 73 358t197 257t281 90zM641 1022q-124 0 -223 -78.5t-158 -225t-59 -310.5q0 -342 282 -342q127 0 225.5 77.5t157 228t58.5 330.5 q0 154 -73 237t-210 83zM573 1262q66 51 150.5 142t129.5 165h137v-23q-51 -66 -157.5 -158.5t-192.5 -146.5h-67v21z" /> +<glyph unicode="ô" horiz-adv-x="1124" d="M98 0zM649 1108q180 0 278.5 -108.5t98.5 -299.5q0 -197 -71.5 -368.5t-195.5 -261.5t-286 -90q-184 0 -279.5 109.5t-95.5 313.5q0 191 73 358t197 257t281 90zM641 1022q-124 0 -223 -78.5t-158 -225t-59 -310.5q0 -342 282 -342q127 0 225.5 77.5t157 228t58.5 330.5 q0 154 -73 237t-210 83zM941 1241h-49q-70 60 -161 207q-55 -57 -125 -114.5t-125 -92.5h-54v29q68 56 157.5 148.5t127.5 150.5h64q23 -64 72.5 -152.5t92.5 -146.5v-29z" /> +<glyph unicode="õ" horiz-adv-x="1124" d="M98 0zM649 1108q180 0 278.5 -108.5t98.5 -299.5q0 -197 -71.5 -368.5t-195.5 -261.5t-286 -90q-184 0 -279.5 109.5t-95.5 313.5q0 191 73 358t197 257t281 90zM641 1022q-124 0 -223 -78.5t-158 -225t-59 -310.5q0 -342 282 -342q127 0 225.5 77.5t157 228t58.5 330.5 q0 154 -73 237t-210 83zM839 1249q-40 0 -77.5 19t-75.5 45q-34 23 -64.5 41t-68.5 18q-45 0 -74 -28.5t-51 -100.5h-74q19 108 71 166.5t134 58.5q41 0 73.5 -14t117.5 -72q52 -36 94 -36q43 0 71.5 30.5t46.5 100.5h76q-26 -118 -74.5 -173t-124.5 -55z" /> +<glyph unicode="ö" horiz-adv-x="1124" d="M98 0zM649 1108q180 0 278.5 -108.5t98.5 -299.5q0 -197 -71.5 -368.5t-195.5 -261.5t-286 -90q-184 0 -279.5 109.5t-95.5 313.5q0 191 73 358t197 257t281 90zM641 1022q-124 0 -223 -78.5t-158 -225t-59 -310.5q0 -342 282 -342q127 0 225.5 77.5t157 228t58.5 330.5 q0 154 -73 237t-210 83zM812 1366q0 49 20.5 78t56.5 29q54 0 54 -64q0 -48 -21 -77t-55 -29q-55 0 -55 63zM468 1366q0 49 20.5 78t56.5 29q54 0 54 -64q0 -48 -21 -77t-55 -29q-55 0 -55 63z" /> +<glyph unicode="÷" d="M168 672v100h903v-100h-903zM522 373q0 106 96 106q48 0 73.5 -27.5t25.5 -78.5q0 -57 -29 -82t-70 -25q-96 0 -96 107zM522 1071q0 107 96 107q46 0 72.5 -27.5t26.5 -79.5q0 -57 -29 -81.5t-70 -24.5q-96 0 -96 106z" /> +<glyph unicode="ø" horiz-adv-x="1124" d="M164 127q-66 106 -66 276q0 191 73 358t197 257t281 90q150 0 250 -82l109 133l65 -53l-117 -143q70 -105 70 -263q0 -197 -71.5 -368.5t-195.5 -261.5t-286 -90q-163 0 -254 83l-110 -135l-64 54zM924 702q0 101 -35 179l-608 -742q67 -73 202 -73q127 0 225.5 77.5 t157 228t58.5 330.5zM641 1022q-124 0 -223 -78.5t-158 -225t-59 -310.5q0 -125 32 -197l605 739q-74 72 -197 72z" /> +<glyph unicode="ù" horiz-adv-x="1143" d="M109 0zM381 1087l-152 -698q-22 -106 -22 -158q0 -74 47.5 -117.5t138.5 -43.5q110 0 207.5 65.5t164 187t99.5 279.5l105 485h98l-231 -1087h-80l28 205h-6q-167 -221 -403 -221q-131 0 -198.5 62t-67.5 181q0 60 22 170l150 690h100zM774 1241h-66q-50 52 -114 144.5 t-99 162.5v21h115q46 -129 164 -303v-25z" /> +<glyph unicode="ú" horiz-adv-x="1143" d="M109 0zM381 1087l-152 -698q-22 -106 -22 -158q0 -74 47.5 -117.5t138.5 -43.5q110 0 207.5 65.5t164 187t99.5 279.5l105 485h98l-231 -1087h-80l28 205h-6q-167 -221 -403 -221q-131 0 -198.5 62t-67.5 181q0 60 22 170l150 690h100zM627 1262q66 51 150.5 142 t129.5 165h137v-23q-51 -66 -157.5 -158.5t-192.5 -146.5h-67v21z" /> +<glyph unicode="û" horiz-adv-x="1143" d="M109 0zM381 1087l-152 -698q-22 -106 -22 -158q0 -74 47.5 -117.5t138.5 -43.5q110 0 207.5 65.5t164 187t99.5 279.5l105 485h98l-231 -1087h-80l28 205h-6q-167 -221 -403 -221q-131 0 -198.5 62t-67.5 181q0 60 22 170l150 690h100zM957 1241h-49q-70 60 -161 207 q-55 -57 -125 -114.5t-125 -92.5h-54v29q68 56 157.5 148.5t127.5 150.5h64q23 -64 72.5 -152.5t92.5 -146.5v-29z" /> +<glyph unicode="ü" horiz-adv-x="1143" d="M109 0zM381 1087l-152 -698q-22 -106 -22 -158q0 -74 47.5 -117.5t138.5 -43.5q110 0 207.5 65.5t164 187t99.5 279.5l105 485h98l-231 -1087h-80l28 205h-6q-167 -221 -403 -221q-131 0 -198.5 62t-67.5 181q0 60 22 170l150 690h100zM827 1366q0 49 20.5 78t56.5 29 q54 0 54 -64q0 -48 -21 -77t-55 -29q-55 0 -55 63zM483 1366q0 49 20.5 78t56.5 29q54 0 54 -64q0 -48 -21 -77t-55 -29q-55 0 -55 63z" /> +<glyph unicode="ý" horiz-adv-x="920" d="M0 0zM123 1087h100l82 -548q51 -351 55 -449h11q43 105 186 367l348 630h103l-713 -1290q-72 -127 -122.5 -178t-114 -81t-146.5 -30q-68 0 -129 21v92q71 -27 137 -27q80 0 147 49.5t130 164.5t100 184zM505 1262q66 51 150.5 142t129.5 165h137v-23 q-51 -66 -157.5 -158.5t-192.5 -146.5h-67v21z" /> +<glyph unicode="þ" horiz-adv-x="1163" d="M498 -16q-230 0 -279 219h-4q-13 -72 -149 -695h-99l434 2048h99q-114 -535 -164 -751h6q93 156 199 229.5t231 73.5q133 0 206 -92.5t73 -282.5q0 -195 -72 -371t-197.5 -277t-283.5 -101zM748 1018q-86 0 -172.5 -57.5t-162.5 -169.5t-111.5 -238t-35.5 -207 q0 -125 61.5 -200.5t168.5 -75.5q124 0 225 84t164 243.5t63 325.5q0 295 -200 295z" /> +<glyph unicode="ÿ" horiz-adv-x="920" d="M0 0zM123 1087h100l82 -548q51 -351 55 -449h11q43 105 186 367l348 630h103l-713 -1290q-72 -127 -122.5 -178t-114 -81t-146.5 -30q-68 0 -129 21v92q71 -27 137 -27q80 0 147 49.5t130 164.5t100 184zM698 1366q0 49 20.5 78t56.5 29q54 0 54 -64q0 -48 -21 -77 t-55 -29q-55 0 -55 63zM354 1366q0 49 20.5 78t56.5 29q54 0 54 -64q0 -48 -21 -77t-55 -29q-55 0 -55 63z" /> +<glyph unicode="ı" horiz-adv-x="475" d="M174 0h-98l231 1087h96z" /> +<glyph unicode="Œ" horiz-adv-x="1767" d="M1530 0h-666q-25 -6 -77.5 -13t-94.5 -7q-251 0 -385.5 149.5t-134.5 429.5q0 263 96 482t262 330.5t381 111.5q130 0 240 -21h688l-20 -94h-625l-117 -553h590l-20 -94h-588l-135 -627h626zM705 72q68 0 116 12l271 1290q-110 15 -189 15q-182 0 -321.5 -98.5 t-222.5 -293.5t-83 -424q0 -245 109 -373t320 -128z" /> +<glyph unicode="œ" horiz-adv-x="1720" d="M1262 -20q-135 0 -228 69t-125 201q-65 -127 -179 -198.5t-257 -71.5q-184 0 -279.5 109.5t-95.5 313.5q0 191 73 358t197 257t281 90q141 0 237 -74.5t126 -212.5q70 132 182.5 207.5t241.5 75.5q114 0 182 -61t68 -166q0 -181 -163.5 -276t-486.5 -95h-32 q-7 -38 -7 -98q0 -165 74 -251.5t213 -86.5q133 0 277 73v-94q-140 -69 -299 -69zM641 1022q-124 0 -223 -78.5t-158 -225t-59 -310.5q0 -342 282 -342q127 0 225.5 77.5t157 228t58.5 330.5q0 154 -73 237t-210 83zM1423 1018q-131 0 -243 -115t-162 -309h49q516 0 516 270 q0 70 -44.5 112t-115.5 42z" /> +<glyph unicode="Ÿ" horiz-adv-x="965" d="M193 0zM494 645l544 817h117l-631 -932l-108 -530h-105l119 545l-237 917h100zM798 1704q0 49 20.5 78t56.5 29q54 0 54 -64q0 -48 -21 -77t-55 -29q-55 0 -55 63zM454 1704q0 49 20.5 78t56.5 29q54 0 54 -64q0 -48 -21 -77t-55 -29q-55 0 -55 63z" /> +<glyph unicode="ˆ" horiz-adv-x="1135" d="M958 1241h-49q-70 60 -161 207q-55 -57 -125 -114.5t-125 -92.5h-54v29q68 56 157.5 148.5t127.5 150.5h64q23 -64 72.5 -152.5t92.5 -146.5v-29z" /> +<glyph unicode="˚" horiz-adv-x="1182" d="M967 1448q0 -92 -57.5 -148.5t-145.5 -56.5q-93 0 -148 52t-55 145q0 88 59.5 144t149.5 56q88 0 142.5 -50t54.5 -142zM889 1446q0 57 -33.5 90t-87.5 33q-60 0 -93.5 -36t-33.5 -93t33 -90t90 -33q56 0 90.5 36t34.5 93z" /> +<glyph unicode="˜" horiz-adv-x="1135" d="M831 1249q-40 0 -77.5 19t-75.5 45q-34 23 -64.5 41t-68.5 18q-45 0 -74 -28.5t-51 -100.5h-74q19 108 71 166.5t134 58.5q41 0 73.5 -14t117.5 -72q52 -36 94 -36q43 0 71.5 30.5t46.5 100.5h76q-26 -118 -74.5 -173t-124.5 -55z" /> +<glyph unicode=" " horiz-adv-x="953" /> +<glyph unicode=" " horiz-adv-x="1907" /> +<glyph unicode=" " horiz-adv-x="953" /> +<glyph unicode=" " horiz-adv-x="1907" /> +<glyph unicode=" " horiz-adv-x="635" /> +<glyph unicode=" " horiz-adv-x="476" /> +<glyph unicode=" " horiz-adv-x="317" /> +<glyph unicode=" " horiz-adv-x="317" /> +<glyph unicode=" " horiz-adv-x="238" /> +<glyph unicode=" " horiz-adv-x="381" /> +<glyph unicode=" " horiz-adv-x="105" /> +<glyph unicode="‐" horiz-adv-x="629" d="M82 502l18 90h457l-16 -90h-459z" /> +<glyph unicode="‑" horiz-adv-x="629" d="M82 502l18 90h457l-16 -90h-459z" /> +<glyph unicode="‒" horiz-adv-x="629" d="M82 502l18 90h457l-16 -90h-459z" /> +<glyph unicode="–" horiz-adv-x="983" d="M66 502l18 90h807l-17 -90h-808z" /> +<glyph unicode="—" horiz-adv-x="1966" d="M68 502l18 90h1788l-16 -90h-1790z" /> +<glyph unicode="‘" horiz-adv-x="299" d="M133 961l-4 22q41 100 116 231t161 248h73q-66 -106 -129.5 -242.5t-103.5 -258.5h-113z" /> +<glyph unicode="’" horiz-adv-x="299" d="M475 1462l4 -22q-43 -105 -117.5 -235.5t-158.5 -243.5h-74q66 106 129.5 242.5t103.5 258.5h113z" /> +<glyph unicode="‚" horiz-adv-x="451" d="M246 238l4 -23q-40 -97 -115.5 -230t-161.5 -249h-73q68 110 131.5 248t101.5 254h113z" /> +<glyph unicode="“" horiz-adv-x="631" d="M133 961l-4 22q41 100 116 231t161 248h73q-66 -106 -129.5 -242.5t-103.5 -258.5h-113zM467 961l-4 22q43 104 120 238.5t156 240.5h74q-66 -106 -129.5 -242.5t-103.5 -258.5h-113z" /> +<glyph unicode="”" horiz-adv-x="631" d="M809 1462l4 -22q-43 -105 -117.5 -235.5t-158.5 -243.5h-74q66 106 129.5 242.5t103.5 258.5h113zM475 1462l4 -22q-43 -105 -117.5 -235.5t-158.5 -243.5h-74q66 106 129.5 242.5t103.5 258.5h113z" /> +<glyph unicode="„" horiz-adv-x="776" d="M561 238l4 -23q-43 -105 -117.5 -235.5t-158.5 -243.5h-74q66 108 129 242.5t105 259.5h112zM227 238l4 -23q-43 -105 -117.5 -235.5t-158.5 -243.5h-74q73 119 135.5 254.5t98.5 247.5h112z" /> +<glyph unicode="•" horiz-adv-x="793" d="M248 682q0 137 63 213t172 76q76 0 116 -39.5t40 -118.5q0 -125 -66 -207t-176 -82q-149 0 -149 158z" /> +<glyph unicode="…" horiz-adv-x="1489" d="M69 0zM69 55q0 56 25 88.5t69 32.5q66 0 66 -72q0 -53 -25 -87.5t-67 -34.5q-68 0 -68 73zM569 55q0 56 25 88.5t69 32.5q66 0 66 -72q0 -53 -25 -87.5t-67 -34.5q-68 0 -68 73zM1071 55q0 56 25 88.5t69 32.5q66 0 66 -72q0 -53 -25 -87.5t-67 -34.5q-68 0 -68 73z" /> +<glyph unicode=" " horiz-adv-x="381" /> +<glyph unicode="‹" horiz-adv-x="537" d="M451 932l57 -49l-318 -336l213 -385l-63 -39l-254 418l2 26z" /> +<glyph unicode="›" horiz-adv-x="537" d="M94 123l-57 49l317 336l-213 385l64 39l254 -418l-2 -27z" /> +<glyph unicode="⁄" horiz-adv-x="274" d="M731 1462l-1087 -1462h-107l1086 1462h108z" /> +<glyph unicode=" " horiz-adv-x="476" /> +<glyph unicode="⁴" horiz-adv-x="643" d="M657 815h-131l-49 -229h-82l49 229h-391l21 76l506 577h86l-125 -581h133zM459 887q61 294 79 365.5t29 105.5q-10 -16 -61 -79t-338 -392h291z" /> +<glyph unicode="€" d="M991 1389q-186 0 -330.5 -120.5t-226.5 -346.5h457l-21 -82h-460q-30 -98 -39 -217h442l-20 -82h-424q0 -243 89 -356t265 -113q115 0 252 57v-94q-129 -55 -270 -55q-209 0 -325 139.5t-116 394.5v27h-184l16 82h172q5 101 35 217h-170l19 82h174q95 273 270 417 t399 144q166 0 287 -90l-53 -82q-102 78 -238 78z" /> +<glyph unicode="™" horiz-adv-x="1534" d="M477 741h-86v643h-217v78h522v-78h-219v-643zM1077 741l-221 609h-6l4 -201v-408h-82v721h125l221 -606l223 606h125v-721h-86v398l4 207h-6l-227 -605h-74z" /> +<glyph unicode="" horiz-adv-x="1085" d="M0 1085h1085v-1085h-1085v1085z" /> +<glyph horiz-adv-x="1133" d="M0 0z" /> +<hkern u1=""" u2="Ÿ" k="-20" /> +<hkern u1=""" u2="œ" k="123" /> +<hkern u1=""" u2="ü" k="61" /> +<hkern u1=""" u2="û" k="61" /> +<hkern u1=""" u2="ú" k="61" /> +<hkern u1=""" u2="ù" k="61" /> +<hkern u1=""" u2="ø" k="123" /> +<hkern u1=""" u2="ö" k="123" /> +<hkern u1=""" u2="õ" k="123" /> +<hkern u1=""" u2="ô" k="123" /> +<hkern u1=""" u2="ó" k="123" /> +<hkern u1=""" u2="ò" k="123" /> +<hkern u1=""" u2="ë" k="123" /> +<hkern u1=""" u2="ê" k="123" /> +<hkern u1=""" u2="é" k="123" /> +<hkern u1=""" u2="è" k="123" /> +<hkern u1=""" u2="ç" k="123" /> +<hkern u1=""" u2="æ" k="82" /> +<hkern u1=""" u2="å" k="82" /> +<hkern u1=""" u2="ä" k="82" /> +<hkern u1=""" u2="ã" k="82" /> +<hkern u1=""" u2="â" k="82" /> +<hkern u1=""" u2="á" k="82" /> +<hkern u1=""" u2="à" k="123" /> +<hkern u1=""" u2="Ý" k="-20" /> +<hkern u1=""" u2="Å" k="143" /> +<hkern u1=""" u2="Ä" k="143" /> +<hkern u1=""" u2="Ã" k="143" /> +<hkern u1=""" u2="Â" k="143" /> +<hkern u1=""" u2="Á" k="143" /> +<hkern u1=""" u2="À" k="143" /> +<hkern u1=""" u2="u" k="61" /> +<hkern u1=""" u2="s" k="61" /> +<hkern u1=""" u2="r" k="61" /> +<hkern u1=""" u2="q" k="123" /> +<hkern u1=""" u2="p" k="61" /> +<hkern u1=""" u2="o" k="123" /> +<hkern u1=""" u2="n" k="61" /> +<hkern u1=""" u2="m" k="61" /> +<hkern u1=""" u2="g" k="61" /> +<hkern u1=""" u2="e" k="123" /> +<hkern u1=""" u2="d" k="123" /> +<hkern u1=""" u2="c" k="123" /> +<hkern u1=""" u2="a" k="82" /> +<hkern u1=""" u2="Y" k="-20" /> +<hkern u1=""" u2="W" k="-41" /> +<hkern u1=""" u2="V" k="-41" /> +<hkern u1=""" u2="T" k="-41" /> +<hkern u1=""" u2="A" k="143" /> +<hkern u1="'" u2="Ÿ" k="-20" /> +<hkern u1="'" u2="œ" k="123" /> +<hkern u1="'" u2="ü" k="61" /> +<hkern u1="'" u2="û" k="61" /> +<hkern u1="'" u2="ú" k="61" /> +<hkern u1="'" u2="ù" k="61" /> +<hkern u1="'" u2="ø" k="123" /> +<hkern u1="'" u2="ö" k="123" /> +<hkern u1="'" u2="õ" k="123" /> +<hkern u1="'" u2="ô" k="123" /> +<hkern u1="'" u2="ó" k="123" /> +<hkern u1="'" u2="ò" k="123" /> +<hkern u1="'" u2="ë" k="123" /> +<hkern u1="'" u2="ê" k="123" /> +<hkern u1="'" u2="é" k="123" /> +<hkern u1="'" u2="è" k="123" /> +<hkern u1="'" u2="ç" k="123" /> +<hkern u1="'" u2="æ" k="82" /> +<hkern u1="'" u2="å" k="82" /> +<hkern u1="'" u2="ä" k="82" /> +<hkern u1="'" u2="ã" k="82" /> +<hkern u1="'" u2="â" k="82" /> +<hkern u1="'" u2="á" k="82" /> +<hkern u1="'" u2="à" k="123" /> +<hkern u1="'" u2="Ý" k="-20" /> +<hkern u1="'" u2="Å" k="143" /> +<hkern u1="'" u2="Ä" k="143" /> +<hkern u1="'" u2="Ã" k="143" /> +<hkern u1="'" u2="Â" k="143" /> +<hkern u1="'" u2="Á" k="143" /> +<hkern u1="'" u2="À" k="143" /> +<hkern u1="'" u2="u" k="61" /> +<hkern u1="'" u2="s" k="61" /> +<hkern u1="'" u2="r" k="61" /> +<hkern u1="'" u2="q" k="123" /> +<hkern u1="'" u2="p" k="61" /> +<hkern u1="'" u2="o" k="123" /> +<hkern u1="'" u2="n" k="61" /> +<hkern u1="'" u2="m" k="61" /> +<hkern u1="'" u2="g" k="61" /> +<hkern u1="'" u2="e" k="123" /> +<hkern u1="'" u2="d" k="123" /> +<hkern u1="'" u2="c" k="123" /> +<hkern u1="'" u2="a" k="82" /> +<hkern u1="'" u2="Y" k="-20" /> +<hkern u1="'" u2="W" k="-41" /> +<hkern u1="'" u2="V" k="-41" /> +<hkern u1="'" u2="T" k="-41" /> +<hkern u1="'" u2="A" k="143" /> +<hkern u1="(" u2="J" k="-184" /> +<hkern u1="," u2="Ÿ" k="123" /> +<hkern u1="," u2="Œ" k="102" /> +<hkern u1="," u2="Ý" k="123" /> +<hkern u1="," u2="Ü" k="41" /> +<hkern u1="," u2="Û" k="41" /> +<hkern u1="," u2="Ú" k="41" /> +<hkern u1="," u2="Ù" k="41" /> +<hkern u1="," u2="Ø" k="102" /> +<hkern u1="," u2="Ö" k="102" /> +<hkern u1="," u2="Õ" k="102" /> +<hkern u1="," u2="Ô" k="102" /> +<hkern u1="," u2="Ó" k="102" /> +<hkern u1="," u2="Ò" k="102" /> +<hkern u1="," u2="Ç" k="102" /> +<hkern u1="," u2="Y" k="123" /> +<hkern u1="," u2="W" k="123" /> +<hkern u1="," u2="V" k="123" /> +<hkern u1="," u2="U" k="41" /> +<hkern u1="," u2="T" k="143" /> +<hkern u1="," u2="Q" k="102" /> +<hkern u1="," u2="O" k="102" /> +<hkern u1="," u2="G" k="102" /> +<hkern u1="," u2="C" k="102" /> +<hkern u1="-" u2="T" k="82" /> +<hkern u1="." u2="Ÿ" k="123" /> +<hkern u1="." u2="Œ" k="102" /> +<hkern u1="." u2="Ý" k="123" /> +<hkern u1="." u2="Ü" k="41" /> +<hkern u1="." u2="Û" k="41" /> +<hkern u1="." u2="Ú" k="41" /> +<hkern u1="." u2="Ù" k="41" /> +<hkern u1="." u2="Ø" k="102" /> +<hkern u1="." u2="Ö" k="102" /> +<hkern u1="." u2="Õ" k="102" /> +<hkern u1="." u2="Ô" k="102" /> +<hkern u1="." u2="Ó" k="102" /> +<hkern u1="." u2="Ò" k="102" /> +<hkern u1="." u2="Ç" k="102" /> +<hkern u1="." u2="Y" k="123" /> +<hkern u1="." u2="W" k="123" /> +<hkern u1="." u2="V" k="123" /> +<hkern u1="." u2="U" k="41" /> +<hkern u1="." u2="T" k="143" /> +<hkern u1="." u2="Q" k="102" /> +<hkern u1="." u2="O" k="102" /> +<hkern u1="." u2="G" k="102" /> +<hkern u1="." u2="C" k="102" /> +<hkern u1="A" u2="”" k="143" /> +<hkern u1="A" u2="’" k="143" /> +<hkern u1="A" u2="Ÿ" k="123" /> +<hkern u1="A" u2="Œ" k="41" /> +<hkern u1="A" u2="Ý" k="123" /> +<hkern u1="A" u2="Ø" k="41" /> +<hkern u1="A" u2="Ö" k="41" /> +<hkern u1="A" u2="Õ" k="41" /> +<hkern u1="A" u2="Ô" k="41" /> +<hkern u1="A" u2="Ó" k="41" /> +<hkern u1="A" u2="Ò" k="41" /> +<hkern u1="A" u2="Ç" k="41" /> +<hkern u1="A" u2="Y" k="123" /> +<hkern u1="A" u2="W" k="82" /> +<hkern u1="A" u2="V" k="82" /> +<hkern u1="A" u2="T" k="143" /> +<hkern u1="A" u2="Q" k="41" /> +<hkern u1="A" u2="O" k="41" /> +<hkern u1="A" u2="J" k="-266" /> +<hkern u1="A" u2="G" k="41" /> +<hkern u1="A" u2="C" k="41" /> +<hkern u1="A" u2="'" k="143" /> +<hkern u1="A" u2=""" k="143" /> +<hkern u1="B" u2="„" k="82" /> +<hkern u1="B" u2="‚" k="82" /> +<hkern u1="B" u2="Ÿ" k="20" /> +<hkern u1="B" u2="Ý" k="20" /> +<hkern u1="B" u2="Å" k="41" /> +<hkern u1="B" u2="Ä" k="41" /> +<hkern u1="B" u2="Ã" k="41" /> +<hkern u1="B" u2="Â" k="41" /> +<hkern u1="B" u2="Á" k="41" /> +<hkern u1="B" u2="À" k="41" /> +<hkern u1="B" u2="Z" k="20" /> +<hkern u1="B" u2="Y" k="20" /> +<hkern u1="B" u2="X" k="41" /> +<hkern u1="B" u2="W" k="20" /> +<hkern u1="B" u2="V" k="20" /> +<hkern u1="B" u2="T" k="61" /> +<hkern u1="B" u2="A" k="41" /> +<hkern u1="B" u2="." k="82" /> +<hkern u1="B" u2="," k="82" /> +<hkern u1="C" u2="Œ" k="41" /> +<hkern u1="C" u2="Ø" k="41" /> +<hkern u1="C" u2="Ö" k="41" /> +<hkern u1="C" u2="Õ" k="41" /> +<hkern u1="C" u2="Ô" k="41" /> +<hkern u1="C" u2="Ó" k="41" /> +<hkern u1="C" u2="Ò" k="41" /> +<hkern u1="C" u2="Ç" k="41" /> +<hkern u1="C" u2="Q" k="41" /> +<hkern u1="C" u2="O" k="41" /> +<hkern u1="C" u2="G" k="41" /> +<hkern u1="C" u2="C" k="41" /> +<hkern u1="D" u2="„" k="82" /> +<hkern u1="D" u2="‚" k="82" /> +<hkern u1="D" u2="Ÿ" k="20" /> +<hkern u1="D" u2="Ý" k="20" /> +<hkern u1="D" u2="Å" k="41" /> +<hkern u1="D" u2="Ä" k="41" /> +<hkern u1="D" u2="Ã" k="41" /> +<hkern u1="D" u2="Â" k="41" /> +<hkern u1="D" u2="Á" k="41" /> +<hkern u1="D" u2="À" k="41" /> +<hkern u1="D" u2="Z" k="20" /> +<hkern u1="D" u2="Y" k="20" /> +<hkern u1="D" u2="X" k="41" /> +<hkern u1="D" u2="W" k="20" /> +<hkern u1="D" u2="V" k="20" /> +<hkern u1="D" u2="T" k="61" /> +<hkern u1="D" u2="A" k="41" /> +<hkern u1="D" u2="." k="82" /> +<hkern u1="D" u2="," k="82" /> +<hkern u1="E" u2="J" k="-123" /> +<hkern u1="F" u2="„" k="123" /> +<hkern u1="F" u2="‚" k="123" /> +<hkern u1="F" u2="Å" k="41" /> +<hkern u1="F" u2="Ä" k="41" /> +<hkern u1="F" u2="Ã" k="41" /> +<hkern u1="F" u2="Â" k="41" /> +<hkern u1="F" u2="Á" k="41" /> +<hkern u1="F" u2="À" k="41" /> +<hkern u1="F" u2="A" k="41" /> +<hkern u1="F" u2="?" k="-41" /> +<hkern u1="F" u2="." k="123" /> +<hkern u1="F" u2="," k="123" /> +<hkern u1="K" u2="Œ" k="41" /> +<hkern u1="K" u2="Ø" k="41" /> +<hkern u1="K" u2="Ö" k="41" /> +<hkern u1="K" u2="Õ" k="41" /> +<hkern u1="K" u2="Ô" k="41" /> +<hkern u1="K" u2="Ó" k="41" /> +<hkern u1="K" u2="Ò" k="41" /> +<hkern u1="K" u2="Ç" k="41" /> +<hkern u1="K" u2="Q" k="41" /> +<hkern u1="K" u2="O" k="41" /> +<hkern u1="K" u2="G" k="41" /> +<hkern u1="K" u2="C" k="41" /> +<hkern u1="L" u2="”" k="164" /> +<hkern u1="L" u2="’" k="164" /> +<hkern u1="L" u2="Ÿ" k="61" /> +<hkern u1="L" u2="Œ" k="41" /> +<hkern u1="L" u2="Ý" k="61" /> +<hkern u1="L" u2="Ü" k="20" /> +<hkern u1="L" u2="Û" k="20" /> +<hkern u1="L" u2="Ú" k="20" /> +<hkern u1="L" u2="Ù" k="20" /> +<hkern u1="L" u2="Ø" k="41" /> +<hkern u1="L" u2="Ö" k="41" /> +<hkern u1="L" u2="Õ" k="41" /> +<hkern u1="L" u2="Ô" k="41" /> +<hkern u1="L" u2="Ó" k="41" /> +<hkern u1="L" u2="Ò" k="41" /> +<hkern u1="L" u2="Ç" k="41" /> +<hkern u1="L" u2="Y" k="61" /> +<hkern u1="L" u2="W" k="41" /> +<hkern u1="L" u2="V" k="41" /> +<hkern u1="L" u2="U" k="20" /> +<hkern u1="L" u2="T" k="41" /> +<hkern u1="L" u2="Q" k="41" /> +<hkern u1="L" u2="O" k="41" /> +<hkern u1="L" u2="G" k="41" /> +<hkern u1="L" u2="C" k="41" /> +<hkern u1="L" u2="'" k="164" /> +<hkern u1="L" u2=""" k="164" /> +<hkern u1="O" u2="„" k="82" /> +<hkern u1="O" u2="‚" k="82" /> +<hkern u1="O" u2="Ÿ" k="20" /> +<hkern u1="O" u2="Ý" k="20" /> +<hkern u1="O" u2="Å" k="41" /> +<hkern u1="O" u2="Ä" k="41" /> +<hkern u1="O" u2="Ã" k="41" /> +<hkern u1="O" u2="Â" k="41" /> +<hkern u1="O" u2="Á" k="41" /> +<hkern u1="O" u2="À" k="41" /> +<hkern u1="O" u2="Z" k="20" /> +<hkern u1="O" u2="Y" k="20" /> +<hkern u1="O" u2="X" k="41" /> +<hkern u1="O" u2="W" k="20" /> +<hkern u1="O" u2="V" k="20" /> +<hkern u1="O" u2="T" k="61" /> +<hkern u1="O" u2="A" k="41" /> +<hkern u1="O" u2="." k="82" /> +<hkern u1="O" u2="," k="82" /> +<hkern u1="P" u2="„" k="266" /> +<hkern u1="P" u2="‚" k="266" /> +<hkern u1="P" u2="Å" k="102" /> +<hkern u1="P" u2="Ä" k="102" /> +<hkern u1="P" u2="Ã" k="102" /> +<hkern u1="P" u2="Â" k="102" /> +<hkern u1="P" u2="Á" k="102" /> +<hkern u1="P" u2="À" k="102" /> +<hkern u1="P" u2="Z" k="20" /> +<hkern u1="P" u2="X" k="41" /> +<hkern u1="P" u2="A" k="102" /> +<hkern u1="P" u2="." k="266" /> +<hkern u1="P" u2="," k="266" /> +<hkern u1="Q" u2="„" k="82" /> +<hkern u1="Q" u2="‚" k="82" /> +<hkern u1="Q" u2="Ÿ" k="20" /> +<hkern u1="Q" u2="Ý" k="20" /> +<hkern u1="Q" u2="Å" k="41" /> +<hkern u1="Q" u2="Ä" k="41" /> +<hkern u1="Q" u2="Ã" k="41" /> +<hkern u1="Q" u2="Â" k="41" /> +<hkern u1="Q" u2="Á" k="41" /> +<hkern u1="Q" u2="À" k="41" /> +<hkern u1="Q" u2="Z" k="20" /> +<hkern u1="Q" u2="Y" k="20" /> +<hkern u1="Q" u2="X" k="41" /> +<hkern u1="Q" u2="W" k="20" /> +<hkern u1="Q" u2="V" k="20" /> +<hkern u1="Q" u2="T" k="61" /> +<hkern u1="Q" u2="A" k="41" /> +<hkern u1="Q" u2="." k="82" /> +<hkern u1="Q" u2="," k="82" /> +<hkern u1="T" u2="„" k="123" /> +<hkern u1="T" u2="‚" k="123" /> +<hkern u1="T" u2="—" k="82" /> +<hkern u1="T" u2="–" k="82" /> +<hkern u1="T" u2="œ" k="143" /> +<hkern u1="T" u2="Œ" k="41" /> +<hkern u1="T" u2="ý" k="41" /> +<hkern u1="T" u2="ü" k="102" /> +<hkern u1="T" u2="û" k="102" /> +<hkern u1="T" u2="ú" k="102" /> +<hkern u1="T" u2="ù" k="102" /> +<hkern u1="T" u2="ø" k="143" /> +<hkern u1="T" u2="ö" k="143" /> +<hkern u1="T" u2="õ" k="143" /> +<hkern u1="T" u2="ô" k="143" /> +<hkern u1="T" u2="ó" k="143" /> +<hkern u1="T" u2="ò" k="143" /> +<hkern u1="T" u2="ë" k="143" /> +<hkern u1="T" u2="ê" k="143" /> +<hkern u1="T" u2="é" k="143" /> +<hkern u1="T" u2="è" k="143" /> +<hkern u1="T" u2="ç" k="143" /> +<hkern u1="T" u2="æ" k="164" /> +<hkern u1="T" u2="å" k="164" /> +<hkern u1="T" u2="ä" k="164" /> +<hkern u1="T" u2="ã" k="164" /> +<hkern u1="T" u2="â" k="164" /> +<hkern u1="T" u2="á" k="164" /> +<hkern u1="T" u2="à" k="143" /> +<hkern u1="T" u2="Ø" k="41" /> +<hkern u1="T" u2="Ö" k="41" /> +<hkern u1="T" u2="Õ" k="41" /> +<hkern u1="T" u2="Ô" k="41" /> +<hkern u1="T" u2="Ó" k="41" /> +<hkern u1="T" u2="Ò" k="41" /> +<hkern u1="T" u2="Ç" k="41" /> +<hkern u1="T" u2="Å" k="143" /> +<hkern u1="T" u2="Ä" k="143" /> +<hkern u1="T" u2="Ã" k="143" /> +<hkern u1="T" u2="Â" k="143" /> +<hkern u1="T" u2="Á" k="143" /> +<hkern u1="T" u2="À" k="143" /> +<hkern u1="T" u2="z" k="82" /> +<hkern u1="T" u2="y" k="41" /> +<hkern u1="T" u2="x" k="41" /> +<hkern u1="T" u2="w" k="41" /> +<hkern u1="T" u2="v" k="41" /> +<hkern u1="T" u2="u" k="102" /> +<hkern u1="T" u2="s" k="123" /> +<hkern u1="T" u2="r" k="102" /> +<hkern u1="T" u2="q" k="143" /> +<hkern u1="T" u2="p" k="102" /> +<hkern u1="T" u2="o" k="143" /> +<hkern u1="T" u2="n" k="102" /> +<hkern u1="T" u2="m" k="102" /> +<hkern u1="T" u2="g" k="143" /> +<hkern u1="T" u2="e" k="143" /> +<hkern u1="T" u2="d" k="143" /> +<hkern u1="T" u2="c" k="143" /> +<hkern u1="T" u2="a" k="164" /> +<hkern u1="T" u2="T" k="-41" /> +<hkern u1="T" u2="Q" k="41" /> +<hkern u1="T" u2="O" k="41" /> +<hkern u1="T" u2="G" k="41" /> +<hkern u1="T" u2="C" k="41" /> +<hkern u1="T" u2="A" k="143" /> +<hkern u1="T" u2="?" k="-41" /> +<hkern u1="T" u2="." k="123" /> +<hkern u1="T" u2="-" k="82" /> +<hkern u1="T" u2="," k="123" /> +<hkern u1="U" u2="„" k="41" /> +<hkern u1="U" u2="‚" k="41" /> +<hkern u1="U" u2="Å" k="20" /> +<hkern u1="U" u2="Ä" k="20" /> +<hkern u1="U" u2="Ã" k="20" /> +<hkern u1="U" u2="Â" k="20" /> +<hkern u1="U" u2="Á" k="20" /> +<hkern u1="U" u2="À" k="20" /> +<hkern u1="U" u2="A" k="20" /> +<hkern u1="U" u2="." k="41" /> +<hkern u1="U" u2="," k="41" /> +<hkern u1="V" u2="„" k="102" /> +<hkern u1="V" u2="‚" k="102" /> +<hkern u1="V" u2="œ" k="41" /> +<hkern u1="V" u2="Œ" k="20" /> +<hkern u1="V" u2="ü" k="20" /> +<hkern u1="V" u2="û" k="20" /> +<hkern u1="V" u2="ú" k="20" /> +<hkern u1="V" u2="ù" k="20" /> +<hkern u1="V" u2="ø" k="41" /> +<hkern u1="V" u2="ö" k="41" /> +<hkern u1="V" u2="õ" k="41" /> +<hkern u1="V" u2="ô" k="41" /> +<hkern u1="V" u2="ó" k="41" /> +<hkern u1="V" u2="ò" k="41" /> +<hkern u1="V" u2="ë" k="41" /> +<hkern u1="V" u2="ê" k="41" /> +<hkern u1="V" u2="é" k="41" /> +<hkern u1="V" u2="è" k="41" /> +<hkern u1="V" u2="ç" k="41" /> +<hkern u1="V" u2="æ" k="41" /> +<hkern u1="V" u2="å" k="41" /> +<hkern u1="V" u2="ä" k="41" /> +<hkern u1="V" u2="ã" k="41" /> +<hkern u1="V" u2="â" k="41" /> +<hkern u1="V" u2="á" k="41" /> +<hkern u1="V" u2="à" k="41" /> +<hkern u1="V" u2="Ø" k="20" /> +<hkern u1="V" u2="Ö" k="20" /> +<hkern u1="V" u2="Õ" k="20" /> +<hkern u1="V" u2="Ô" k="20" /> +<hkern u1="V" u2="Ó" k="20" /> +<hkern u1="V" u2="Ò" k="20" /> +<hkern u1="V" u2="Ç" k="20" /> +<hkern u1="V" u2="Å" k="82" /> +<hkern u1="V" u2="Ä" k="82" /> +<hkern u1="V" u2="Ã" k="82" /> +<hkern u1="V" u2="Â" k="82" /> +<hkern u1="V" u2="Á" k="82" /> +<hkern u1="V" u2="À" k="82" /> +<hkern u1="V" u2="u" k="20" /> +<hkern u1="V" u2="s" k="20" /> +<hkern u1="V" u2="r" k="20" /> +<hkern u1="V" u2="q" k="41" /> +<hkern u1="V" u2="p" k="20" /> +<hkern u1="V" u2="o" k="41" /> +<hkern u1="V" u2="n" k="20" /> +<hkern u1="V" u2="m" k="20" /> +<hkern u1="V" u2="g" k="20" /> +<hkern u1="V" u2="e" k="41" /> +<hkern u1="V" u2="d" k="41" /> +<hkern u1="V" u2="c" k="41" /> +<hkern u1="V" u2="a" k="41" /> +<hkern u1="V" u2="Q" k="20" /> +<hkern u1="V" u2="O" k="20" /> +<hkern u1="V" u2="G" k="20" /> +<hkern u1="V" u2="C" k="20" /> +<hkern u1="V" u2="A" k="82" /> +<hkern u1="V" u2="?" k="-41" /> +<hkern u1="V" u2="." k="102" /> +<hkern u1="V" u2="," k="102" /> +<hkern u1="W" u2="„" k="102" /> +<hkern u1="W" u2="‚" k="102" /> +<hkern u1="W" u2="œ" k="41" /> +<hkern u1="W" u2="Œ" k="20" /> +<hkern u1="W" u2="ü" k="20" /> +<hkern u1="W" u2="û" k="20" /> +<hkern u1="W" u2="ú" k="20" /> +<hkern u1="W" u2="ù" k="20" /> +<hkern u1="W" u2="ø" k="41" /> +<hkern u1="W" u2="ö" k="41" /> +<hkern u1="W" u2="õ" k="41" /> +<hkern u1="W" u2="ô" k="41" /> +<hkern u1="W" u2="ó" k="41" /> +<hkern u1="W" u2="ò" k="41" /> +<hkern u1="W" u2="ë" k="41" /> +<hkern u1="W" u2="ê" k="41" /> +<hkern u1="W" u2="é" k="41" /> +<hkern u1="W" u2="è" k="41" /> +<hkern u1="W" u2="ç" k="41" /> +<hkern u1="W" u2="æ" k="41" /> +<hkern u1="W" u2="å" k="41" /> +<hkern u1="W" u2="ä" k="41" /> +<hkern u1="W" u2="ã" k="41" /> +<hkern u1="W" u2="â" k="41" /> +<hkern u1="W" u2="á" k="41" /> +<hkern u1="W" u2="à" k="41" /> +<hkern u1="W" u2="Ø" k="20" /> +<hkern u1="W" u2="Ö" k="20" /> +<hkern u1="W" u2="Õ" k="20" /> +<hkern u1="W" u2="Ô" k="20" /> +<hkern u1="W" u2="Ó" k="20" /> +<hkern u1="W" u2="Ò" k="20" /> +<hkern u1="W" u2="Ç" k="20" /> +<hkern u1="W" u2="Å" k="82" /> +<hkern u1="W" u2="Ä" k="82" /> +<hkern u1="W" u2="Ã" k="82" /> +<hkern u1="W" u2="Â" k="82" /> +<hkern u1="W" u2="Á" k="82" /> +<hkern u1="W" u2="À" k="82" /> +<hkern u1="W" u2="u" k="20" /> +<hkern u1="W" u2="s" k="20" /> +<hkern u1="W" u2="r" k="20" /> +<hkern u1="W" u2="q" k="41" /> +<hkern u1="W" u2="p" k="20" /> +<hkern u1="W" u2="o" k="41" /> +<hkern u1="W" u2="n" k="20" /> +<hkern u1="W" u2="m" k="20" /> +<hkern u1="W" u2="g" k="20" /> +<hkern u1="W" u2="e" k="41" /> +<hkern u1="W" u2="d" k="41" /> +<hkern u1="W" u2="c" k="41" /> +<hkern u1="W" u2="a" k="41" /> +<hkern u1="W" u2="Q" k="20" /> +<hkern u1="W" u2="O" k="20" /> +<hkern u1="W" u2="G" k="20" /> +<hkern u1="W" u2="C" k="20" /> +<hkern u1="W" u2="A" k="82" /> +<hkern u1="W" u2="?" k="-41" /> +<hkern u1="W" u2="." k="102" /> +<hkern u1="W" u2="," k="102" /> +<hkern u1="X" u2="Œ" k="41" /> +<hkern u1="X" u2="Ø" k="41" /> +<hkern u1="X" u2="Ö" k="41" /> +<hkern u1="X" u2="Õ" k="41" /> +<hkern u1="X" u2="Ô" k="41" /> +<hkern u1="X" u2="Ó" k="41" /> +<hkern u1="X" u2="Ò" k="41" /> +<hkern u1="X" u2="Ç" k="41" /> +<hkern u1="X" u2="Q" k="41" /> +<hkern u1="X" u2="O" k="41" /> +<hkern u1="X" u2="G" k="41" /> +<hkern u1="X" u2="C" k="41" /> +<hkern u1="Y" u2="„" k="123" /> +<hkern u1="Y" u2="‚" k="123" /> +<hkern u1="Y" u2="œ" k="102" /> +<hkern u1="Y" u2="Œ" k="41" /> +<hkern u1="Y" u2="ü" k="61" /> +<hkern u1="Y" u2="û" k="61" /> +<hkern u1="Y" u2="ú" k="61" /> +<hkern u1="Y" u2="ù" k="61" /> +<hkern u1="Y" u2="ø" k="102" /> +<hkern u1="Y" u2="ö" k="102" /> +<hkern u1="Y" u2="õ" k="102" /> +<hkern u1="Y" u2="ô" k="102" /> +<hkern u1="Y" u2="ó" k="102" /> +<hkern u1="Y" u2="ò" k="102" /> +<hkern u1="Y" u2="ë" k="102" /> +<hkern u1="Y" u2="ê" k="102" /> +<hkern u1="Y" u2="é" k="102" /> +<hkern u1="Y" u2="è" k="102" /> +<hkern u1="Y" u2="ç" k="102" /> +<hkern u1="Y" u2="æ" k="102" /> +<hkern u1="Y" u2="å" k="102" /> +<hkern u1="Y" u2="ä" k="102" /> +<hkern u1="Y" u2="ã" k="102" /> +<hkern u1="Y" u2="â" k="102" /> +<hkern u1="Y" u2="á" k="102" /> +<hkern u1="Y" u2="à" k="102" /> +<hkern u1="Y" u2="Ø" k="41" /> +<hkern u1="Y" u2="Ö" k="41" /> +<hkern u1="Y" u2="Õ" k="41" /> +<hkern u1="Y" u2="Ô" k="41" /> +<hkern u1="Y" u2="Ó" k="41" /> +<hkern u1="Y" u2="Ò" k="41" /> +<hkern u1="Y" u2="Ç" k="41" /> +<hkern u1="Y" u2="Å" k="123" /> +<hkern u1="Y" u2="Ä" k="123" /> +<hkern u1="Y" u2="Ã" k="123" /> +<hkern u1="Y" u2="Â" k="123" /> +<hkern u1="Y" u2="Á" k="123" /> +<hkern u1="Y" u2="À" k="123" /> +<hkern u1="Y" u2="z" k="41" /> +<hkern u1="Y" u2="u" k="61" /> +<hkern u1="Y" u2="s" k="82" /> +<hkern u1="Y" u2="r" k="61" /> +<hkern u1="Y" u2="q" k="102" /> +<hkern u1="Y" u2="p" k="61" /> +<hkern u1="Y" u2="o" k="102" /> +<hkern u1="Y" u2="n" k="61" /> +<hkern u1="Y" u2="m" k="61" /> +<hkern u1="Y" u2="g" k="41" /> +<hkern u1="Y" u2="e" k="102" /> +<hkern u1="Y" u2="d" k="102" /> +<hkern u1="Y" u2="c" k="102" /> +<hkern u1="Y" u2="a" k="102" /> +<hkern u1="Y" u2="Q" k="41" /> +<hkern u1="Y" u2="O" k="41" /> +<hkern u1="Y" u2="G" k="41" /> +<hkern u1="Y" u2="C" k="41" /> +<hkern u1="Y" u2="A" k="123" /> +<hkern u1="Y" u2="?" k="-41" /> +<hkern u1="Y" u2="." k="123" /> +<hkern u1="Y" u2="," k="123" /> +<hkern u1="Z" u2="Œ" k="20" /> +<hkern u1="Z" u2="Ø" k="20" /> +<hkern u1="Z" u2="Ö" k="20" /> +<hkern u1="Z" u2="Õ" k="20" /> +<hkern u1="Z" u2="Ô" k="20" /> +<hkern u1="Z" u2="Ó" k="20" /> +<hkern u1="Z" u2="Ò" k="20" /> +<hkern u1="Z" u2="Ç" k="20" /> +<hkern u1="Z" u2="Q" k="20" /> +<hkern u1="Z" u2="O" k="20" /> +<hkern u1="Z" u2="G" k="20" /> +<hkern u1="Z" u2="C" k="20" /> +<hkern u1="[" u2="J" k="-184" /> +<hkern u1="a" u2="”" k="20" /> +<hkern u1="a" u2="’" k="20" /> +<hkern u1="a" u2="'" k="20" /> +<hkern u1="a" u2=""" k="20" /> +<hkern u1="b" u2="”" k="20" /> +<hkern u1="b" u2="’" k="20" /> +<hkern u1="b" u2="ý" k="41" /> +<hkern u1="b" u2="z" k="20" /> +<hkern u1="b" u2="y" k="41" /> +<hkern u1="b" u2="x" k="41" /> +<hkern u1="b" u2="w" k="41" /> +<hkern u1="b" u2="v" k="41" /> +<hkern u1="b" u2="'" k="20" /> +<hkern u1="b" u2=""" k="20" /> +<hkern u1="c" u2="”" k="-41" /> +<hkern u1="c" u2="’" k="-41" /> +<hkern u1="c" u2="'" k="-41" /> +<hkern u1="c" u2=""" k="-41" /> +<hkern u1="e" u2="”" k="20" /> +<hkern u1="e" u2="’" k="20" /> +<hkern u1="e" u2="ý" k="41" /> +<hkern u1="e" u2="z" k="20" /> +<hkern u1="e" u2="y" k="41" /> +<hkern u1="e" u2="x" k="41" /> +<hkern u1="e" u2="w" k="41" /> +<hkern u1="e" u2="v" k="41" /> +<hkern u1="e" u2="'" k="20" /> +<hkern u1="e" u2=""" k="20" /> +<hkern u1="f" u2="”" k="-123" /> +<hkern u1="f" u2="’" k="-123" /> +<hkern u1="f" u2="'" k="-123" /> +<hkern u1="f" u2=""" k="-123" /> +<hkern u1="h" u2="”" k="20" /> +<hkern u1="h" u2="’" k="20" /> +<hkern u1="h" u2="'" k="20" /> +<hkern u1="h" u2=""" k="20" /> +<hkern u1="k" u2="œ" k="41" /> +<hkern u1="k" u2="ø" k="41" /> +<hkern u1="k" u2="ö" k="41" /> +<hkern u1="k" u2="õ" k="41" /> +<hkern u1="k" u2="ô" k="41" /> +<hkern u1="k" u2="ó" k="41" /> +<hkern u1="k" u2="ò" k="41" /> +<hkern u1="k" u2="ë" k="41" /> +<hkern u1="k" u2="ê" k="41" /> +<hkern u1="k" u2="é" k="41" /> +<hkern u1="k" u2="è" k="41" /> +<hkern u1="k" u2="ç" k="41" /> +<hkern u1="k" u2="à" k="41" /> +<hkern u1="k" u2="q" k="41" /> +<hkern u1="k" u2="o" k="41" /> +<hkern u1="k" u2="e" k="41" /> +<hkern u1="k" u2="d" k="41" /> +<hkern u1="k" u2="c" k="41" /> +<hkern u1="m" u2="”" k="20" /> +<hkern u1="m" u2="’" k="20" /> +<hkern u1="m" u2="'" k="20" /> +<hkern u1="m" u2=""" k="20" /> +<hkern u1="n" u2="”" k="20" /> +<hkern u1="n" u2="’" k="20" /> +<hkern u1="n" u2="'" k="20" /> +<hkern u1="n" u2=""" k="20" /> +<hkern u1="o" u2="”" k="20" /> +<hkern u1="o" u2="’" k="20" /> +<hkern u1="o" u2="ý" k="41" /> +<hkern u1="o" u2="z" k="20" /> +<hkern u1="o" u2="y" k="41" /> +<hkern u1="o" u2="x" k="41" /> +<hkern u1="o" u2="w" k="41" /> +<hkern u1="o" u2="v" k="41" /> +<hkern u1="o" u2="'" k="20" /> +<hkern u1="o" u2=""" k="20" /> +<hkern u1="p" u2="”" k="20" /> +<hkern u1="p" u2="’" k="20" /> +<hkern u1="p" u2="ý" k="41" /> +<hkern u1="p" u2="z" k="20" /> +<hkern u1="p" u2="y" k="41" /> +<hkern u1="p" u2="x" k="41" /> +<hkern u1="p" u2="w" k="41" /> +<hkern u1="p" u2="v" k="41" /> +<hkern u1="p" u2="'" k="20" /> +<hkern u1="p" u2=""" k="20" /> +<hkern u1="r" u2="”" k="-82" /> +<hkern u1="r" u2="’" k="-82" /> +<hkern u1="r" u2="œ" k="41" /> +<hkern u1="r" u2="ø" k="41" /> +<hkern u1="r" u2="ö" k="41" /> +<hkern u1="r" u2="õ" k="41" /> +<hkern u1="r" u2="ô" k="41" /> +<hkern u1="r" u2="ó" k="41" /> +<hkern u1="r" u2="ò" k="41" /> +<hkern u1="r" u2="ë" k="41" /> +<hkern u1="r" u2="ê" k="41" /> +<hkern u1="r" u2="é" k="41" /> +<hkern u1="r" u2="è" k="41" /> +<hkern u1="r" u2="ç" k="41" /> +<hkern u1="r" u2="æ" k="41" /> +<hkern u1="r" u2="å" k="41" /> +<hkern u1="r" u2="ä" k="41" /> +<hkern u1="r" u2="ã" k="41" /> +<hkern u1="r" u2="â" k="41" /> +<hkern u1="r" u2="á" k="41" /> +<hkern u1="r" u2="à" k="41" /> +<hkern u1="r" u2="q" k="41" /> +<hkern u1="r" u2="o" k="41" /> +<hkern u1="r" u2="g" k="20" /> +<hkern u1="r" u2="e" k="41" /> +<hkern u1="r" u2="d" k="41" /> +<hkern u1="r" u2="c" k="41" /> +<hkern u1="r" u2="a" k="41" /> +<hkern u1="r" u2="'" k="-82" /> +<hkern u1="r" u2=""" k="-82" /> +<hkern u1="t" u2="”" k="-41" /> +<hkern u1="t" u2="’" k="-41" /> +<hkern u1="t" u2="'" k="-41" /> +<hkern u1="t" u2=""" k="-41" /> +<hkern u1="v" u2="„" k="82" /> +<hkern u1="v" u2="”" k="-82" /> +<hkern u1="v" u2="‚" k="82" /> +<hkern u1="v" u2="’" k="-82" /> +<hkern u1="v" u2="?" k="-41" /> +<hkern u1="v" u2="." k="82" /> +<hkern u1="v" u2="," k="82" /> +<hkern u1="v" u2="'" k="-82" /> +<hkern u1="v" u2=""" k="-82" /> +<hkern u1="w" u2="„" k="82" /> +<hkern u1="w" u2="”" k="-82" /> +<hkern u1="w" u2="‚" k="82" /> +<hkern u1="w" u2="’" k="-82" /> +<hkern u1="w" u2="?" k="-41" /> +<hkern u1="w" u2="." k="82" /> +<hkern u1="w" u2="," k="82" /> +<hkern u1="w" u2="'" k="-82" /> +<hkern u1="w" u2=""" k="-82" /> +<hkern u1="x" u2="œ" k="41" /> +<hkern u1="x" u2="ø" k="41" /> +<hkern u1="x" u2="ö" k="41" /> +<hkern u1="x" u2="õ" k="41" /> +<hkern u1="x" u2="ô" k="41" /> +<hkern u1="x" u2="ó" k="41" /> +<hkern u1="x" u2="ò" k="41" /> +<hkern u1="x" u2="ë" k="41" /> +<hkern u1="x" u2="ê" k="41" /> +<hkern u1="x" u2="é" k="41" /> +<hkern u1="x" u2="è" k="41" /> +<hkern u1="x" u2="ç" k="41" /> +<hkern u1="x" u2="à" k="41" /> +<hkern u1="x" u2="q" k="41" /> +<hkern u1="x" u2="o" k="41" /> +<hkern u1="x" u2="e" k="41" /> +<hkern u1="x" u2="d" k="41" /> +<hkern u1="x" u2="c" k="41" /> +<hkern u1="y" u2="„" k="82" /> +<hkern u1="y" u2="”" k="-82" /> +<hkern u1="y" u2="‚" k="82" /> +<hkern u1="y" u2="’" k="-82" /> +<hkern u1="y" u2="?" k="-41" /> +<hkern u1="y" u2="." k="82" /> +<hkern u1="y" u2="," k="82" /> +<hkern u1="y" u2="'" k="-82" /> +<hkern u1="y" u2=""" k="-82" /> +<hkern u1="{" u2="J" k="-184" /> +<hkern u1="À" u2="”" k="143" /> +<hkern u1="À" u2="’" k="143" /> +<hkern u1="À" u2="Ÿ" k="123" /> +<hkern u1="À" u2="Œ" k="41" /> +<hkern u1="À" u2="Ý" k="123" /> +<hkern u1="À" u2="Ø" k="41" /> +<hkern u1="À" u2="Ö" k="41" /> +<hkern u1="À" u2="Õ" k="41" /> +<hkern u1="À" u2="Ô" k="41" /> +<hkern u1="À" u2="Ó" k="41" /> +<hkern u1="À" u2="Ò" k="41" /> +<hkern u1="À" u2="Ç" k="41" /> +<hkern u1="À" u2="Y" k="123" /> +<hkern u1="À" u2="W" k="82" /> +<hkern u1="À" u2="V" k="82" /> +<hkern u1="À" u2="T" k="143" /> +<hkern u1="À" u2="Q" k="41" /> +<hkern u1="À" u2="O" k="41" /> +<hkern u1="À" u2="J" k="-266" /> +<hkern u1="À" u2="G" k="41" /> +<hkern u1="À" u2="C" k="41" /> +<hkern u1="À" u2="'" k="143" /> +<hkern u1="À" u2=""" k="143" /> +<hkern u1="Á" u2="”" k="143" /> +<hkern u1="Á" u2="’" k="143" /> +<hkern u1="Á" u2="Ÿ" k="123" /> +<hkern u1="Á" u2="Œ" k="41" /> +<hkern u1="Á" u2="Ý" k="123" /> +<hkern u1="Á" u2="Ø" k="41" /> +<hkern u1="Á" u2="Ö" k="41" /> +<hkern u1="Á" u2="Õ" k="41" /> +<hkern u1="Á" u2="Ô" k="41" /> +<hkern u1="Á" u2="Ó" k="41" /> +<hkern u1="Á" u2="Ò" k="41" /> +<hkern u1="Á" u2="Ç" k="41" /> +<hkern u1="Á" u2="Y" k="123" /> +<hkern u1="Á" u2="W" k="82" /> +<hkern u1="Á" u2="V" k="82" /> +<hkern u1="Á" u2="T" k="143" /> +<hkern u1="Á" u2="Q" k="41" /> +<hkern u1="Á" u2="O" k="41" /> +<hkern u1="Á" u2="J" k="-266" /> +<hkern u1="Á" u2="G" k="41" /> +<hkern u1="Á" u2="C" k="41" /> +<hkern u1="Á" u2="'" k="143" /> +<hkern u1="Á" u2=""" k="143" /> +<hkern u1="Â" u2="”" k="143" /> +<hkern u1="Â" u2="’" k="143" /> +<hkern u1="Â" u2="Ÿ" k="123" /> +<hkern u1="Â" u2="Œ" k="41" /> +<hkern u1="Â" u2="Ý" k="123" /> +<hkern u1="Â" u2="Ø" k="41" /> +<hkern u1="Â" u2="Ö" k="41" /> +<hkern u1="Â" u2="Õ" k="41" /> +<hkern u1="Â" u2="Ô" k="41" /> +<hkern u1="Â" u2="Ó" k="41" /> +<hkern u1="Â" u2="Ò" k="41" /> +<hkern u1="Â" u2="Ç" k="41" /> +<hkern u1="Â" u2="Y" k="123" /> +<hkern u1="Â" u2="W" k="82" /> +<hkern u1="Â" u2="V" k="82" /> +<hkern u1="Â" u2="T" k="143" /> +<hkern u1="Â" u2="Q" k="41" /> +<hkern u1="Â" u2="O" k="41" /> +<hkern u1="Â" u2="J" k="-266" /> +<hkern u1="Â" u2="G" k="41" /> +<hkern u1="Â" u2="C" k="41" /> +<hkern u1="Â" u2="'" k="143" /> +<hkern u1="Â" u2=""" k="143" /> +<hkern u1="Ã" u2="”" k="143" /> +<hkern u1="Ã" u2="’" k="143" /> +<hkern u1="Ã" u2="Ÿ" k="123" /> +<hkern u1="Ã" u2="Œ" k="41" /> +<hkern u1="Ã" u2="Ý" k="123" /> +<hkern u1="Ã" u2="Ø" k="41" /> +<hkern u1="Ã" u2="Ö" k="41" /> +<hkern u1="Ã" u2="Õ" k="41" /> +<hkern u1="Ã" u2="Ô" k="41" /> +<hkern u1="Ã" u2="Ó" k="41" /> +<hkern u1="Ã" u2="Ò" k="41" /> +<hkern u1="Ã" u2="Ç" k="41" /> +<hkern u1="Ã" u2="Y" k="123" /> +<hkern u1="Ã" u2="W" k="82" /> +<hkern u1="Ã" u2="V" k="82" /> +<hkern u1="Ã" u2="T" k="143" /> +<hkern u1="Ã" u2="Q" k="41" /> +<hkern u1="Ã" u2="O" k="41" /> +<hkern u1="Ã" u2="J" k="-266" /> +<hkern u1="Ã" u2="G" k="41" /> +<hkern u1="Ã" u2="C" k="41" /> +<hkern u1="Ã" u2="'" k="143" /> +<hkern u1="Ã" u2=""" k="143" /> +<hkern u1="Ä" u2="”" k="143" /> +<hkern u1="Ä" u2="’" k="143" /> +<hkern u1="Ä" u2="Ÿ" k="123" /> +<hkern u1="Ä" u2="Œ" k="41" /> +<hkern u1="Ä" u2="Ý" k="123" /> +<hkern u1="Ä" u2="Ø" k="41" /> +<hkern u1="Ä" u2="Ö" k="41" /> +<hkern u1="Ä" u2="Õ" k="41" /> +<hkern u1="Ä" u2="Ô" k="41" /> +<hkern u1="Ä" u2="Ó" k="41" /> +<hkern u1="Ä" u2="Ò" k="41" /> +<hkern u1="Ä" u2="Ç" k="41" /> +<hkern u1="Ä" u2="Y" k="123" /> +<hkern u1="Ä" u2="W" k="82" /> +<hkern u1="Ä" u2="V" k="82" /> +<hkern u1="Ä" u2="T" k="143" /> +<hkern u1="Ä" u2="Q" k="41" /> +<hkern u1="Ä" u2="O" k="41" /> +<hkern u1="Ä" u2="J" k="-266" /> +<hkern u1="Ä" u2="G" k="41" /> +<hkern u1="Ä" u2="C" k="41" /> +<hkern u1="Ä" u2="'" k="143" /> +<hkern u1="Ä" u2=""" k="143" /> +<hkern u1="Å" u2="”" k="143" /> +<hkern u1="Å" u2="’" k="143" /> +<hkern u1="Å" u2="Ÿ" k="123" /> +<hkern u1="Å" u2="Œ" k="41" /> +<hkern u1="Å" u2="Ý" k="123" /> +<hkern u1="Å" u2="Ø" k="41" /> +<hkern u1="Å" u2="Ö" k="41" /> +<hkern u1="Å" u2="Õ" k="41" /> +<hkern u1="Å" u2="Ô" k="41" /> +<hkern u1="Å" u2="Ó" k="41" /> +<hkern u1="Å" u2="Ò" k="41" /> +<hkern u1="Å" u2="Ç" k="41" /> +<hkern u1="Å" u2="Y" k="123" /> +<hkern u1="Å" u2="W" k="82" /> +<hkern u1="Å" u2="V" k="82" /> +<hkern u1="Å" u2="T" k="143" /> +<hkern u1="Å" u2="Q" k="41" /> +<hkern u1="Å" u2="O" k="41" /> +<hkern u1="Å" u2="J" k="-266" /> +<hkern u1="Å" u2="G" k="41" /> +<hkern u1="Å" u2="C" k="41" /> +<hkern u1="Å" u2="'" k="143" /> +<hkern u1="Å" u2=""" k="143" /> +<hkern u1="Æ" u2="J" k="-123" /> +<hkern u1="Ç" u2="Œ" k="41" /> +<hkern u1="Ç" u2="Ø" k="41" /> +<hkern u1="Ç" u2="Ö" k="41" /> +<hkern u1="Ç" u2="Õ" k="41" /> +<hkern u1="Ç" u2="Ô" k="41" /> +<hkern u1="Ç" u2="Ó" k="41" /> +<hkern u1="Ç" u2="Ò" k="41" /> +<hkern u1="Ç" u2="Ç" k="41" /> +<hkern u1="Ç" u2="Q" k="41" /> +<hkern u1="Ç" u2="O" k="41" /> +<hkern u1="Ç" u2="G" k="41" /> +<hkern u1="Ç" u2="C" k="41" /> +<hkern u1="È" u2="J" k="-123" /> +<hkern u1="É" u2="J" k="-123" /> +<hkern u1="Ê" u2="J" k="-123" /> +<hkern u1="Ë" u2="J" k="-123" /> +<hkern u1="Ð" u2="„" k="82" /> +<hkern u1="Ð" u2="‚" k="82" /> +<hkern u1="Ð" u2="Ÿ" k="20" /> +<hkern u1="Ð" u2="Ý" k="20" /> +<hkern u1="Ð" u2="Å" k="41" /> +<hkern u1="Ð" u2="Ä" k="41" /> +<hkern u1="Ð" u2="Ã" k="41" /> +<hkern u1="Ð" u2="Â" k="41" /> +<hkern u1="Ð" u2="Á" k="41" /> +<hkern u1="Ð" u2="À" k="41" /> +<hkern u1="Ð" u2="Z" k="20" /> +<hkern u1="Ð" u2="Y" k="20" /> +<hkern u1="Ð" u2="X" k="41" /> +<hkern u1="Ð" u2="W" k="20" /> +<hkern u1="Ð" u2="V" k="20" /> +<hkern u1="Ð" u2="T" k="61" /> +<hkern u1="Ð" u2="A" k="41" /> +<hkern u1="Ð" u2="." k="82" /> +<hkern u1="Ð" u2="," k="82" /> +<hkern u1="Ò" u2="„" k="82" /> +<hkern u1="Ò" u2="‚" k="82" /> +<hkern u1="Ò" u2="Ÿ" k="20" /> +<hkern u1="Ò" u2="Ý" k="20" /> +<hkern u1="Ò" u2="Å" k="41" /> +<hkern u1="Ò" u2="Ä" k="41" /> +<hkern u1="Ò" u2="Ã" k="41" /> +<hkern u1="Ò" u2="Â" k="41" /> +<hkern u1="Ò" u2="Á" k="41" /> +<hkern u1="Ò" u2="À" k="41" /> +<hkern u1="Ò" u2="Z" k="20" /> +<hkern u1="Ò" u2="Y" k="20" /> +<hkern u1="Ò" u2="X" k="41" /> +<hkern u1="Ò" u2="W" k="20" /> +<hkern u1="Ò" u2="V" k="20" /> +<hkern u1="Ò" u2="T" k="61" /> +<hkern u1="Ò" u2="A" k="41" /> +<hkern u1="Ò" u2="." k="82" /> +<hkern u1="Ò" u2="," k="82" /> +<hkern u1="Ó" u2="„" k="82" /> +<hkern u1="Ó" u2="‚" k="82" /> +<hkern u1="Ó" u2="Ÿ" k="20" /> +<hkern u1="Ó" u2="Ý" k="20" /> +<hkern u1="Ó" u2="Å" k="41" /> +<hkern u1="Ó" u2="Ä" k="41" /> +<hkern u1="Ó" u2="Ã" k="41" /> +<hkern u1="Ó" u2="Â" k="41" /> +<hkern u1="Ó" u2="Á" k="41" /> +<hkern u1="Ó" u2="À" k="41" /> +<hkern u1="Ó" u2="Z" k="20" /> +<hkern u1="Ó" u2="Y" k="20" /> +<hkern u1="Ó" u2="X" k="41" /> +<hkern u1="Ó" u2="W" k="20" /> +<hkern u1="Ó" u2="V" k="20" /> +<hkern u1="Ó" u2="T" k="61" /> +<hkern u1="Ó" u2="A" k="41" /> +<hkern u1="Ó" u2="." k="82" /> +<hkern u1="Ó" u2="," k="82" /> +<hkern u1="Ô" u2="„" k="82" /> +<hkern u1="Ô" u2="‚" k="82" /> +<hkern u1="Ô" u2="Ÿ" k="20" /> +<hkern u1="Ô" u2="Ý" k="20" /> +<hkern u1="Ô" u2="Å" k="41" /> +<hkern u1="Ô" u2="Ä" k="41" /> +<hkern u1="Ô" u2="Ã" k="41" /> +<hkern u1="Ô" u2="Â" k="41" /> +<hkern u1="Ô" u2="Á" k="41" /> +<hkern u1="Ô" u2="À" k="41" /> +<hkern u1="Ô" u2="Z" k="20" /> +<hkern u1="Ô" u2="Y" k="20" /> +<hkern u1="Ô" u2="X" k="41" /> +<hkern u1="Ô" u2="W" k="20" /> +<hkern u1="Ô" u2="V" k="20" /> +<hkern u1="Ô" u2="T" k="61" /> +<hkern u1="Ô" u2="A" k="41" /> +<hkern u1="Ô" u2="." k="82" /> +<hkern u1="Ô" u2="," k="82" /> +<hkern u1="Õ" u2="„" k="82" /> +<hkern u1="Õ" u2="‚" k="82" /> +<hkern u1="Õ" u2="Ÿ" k="20" /> +<hkern u1="Õ" u2="Ý" k="20" /> +<hkern u1="Õ" u2="Å" k="41" /> +<hkern u1="Õ" u2="Ä" k="41" /> +<hkern u1="Õ" u2="Ã" k="41" /> +<hkern u1="Õ" u2="Â" k="41" /> +<hkern u1="Õ" u2="Á" k="41" /> +<hkern u1="Õ" u2="À" k="41" /> +<hkern u1="Õ" u2="Z" k="20" /> +<hkern u1="Õ" u2="Y" k="20" /> +<hkern u1="Õ" u2="X" k="41" /> +<hkern u1="Õ" u2="W" k="20" /> +<hkern u1="Õ" u2="V" k="20" /> +<hkern u1="Õ" u2="T" k="61" /> +<hkern u1="Õ" u2="A" k="41" /> +<hkern u1="Õ" u2="." k="82" /> +<hkern u1="Õ" u2="," k="82" /> +<hkern u1="Ö" u2="„" k="82" /> +<hkern u1="Ö" u2="‚" k="82" /> +<hkern u1="Ö" u2="Ÿ" k="20" /> +<hkern u1="Ö" u2="Ý" k="20" /> +<hkern u1="Ö" u2="Å" k="41" /> +<hkern u1="Ö" u2="Ä" k="41" /> +<hkern u1="Ö" u2="Ã" k="41" /> +<hkern u1="Ö" u2="Â" k="41" /> +<hkern u1="Ö" u2="Á" k="41" /> +<hkern u1="Ö" u2="À" k="41" /> +<hkern u1="Ö" u2="Z" k="20" /> +<hkern u1="Ö" u2="Y" k="20" /> +<hkern u1="Ö" u2="X" k="41" /> +<hkern u1="Ö" u2="W" k="20" /> +<hkern u1="Ö" u2="V" k="20" /> +<hkern u1="Ö" u2="T" k="61" /> +<hkern u1="Ö" u2="A" k="41" /> +<hkern u1="Ö" u2="." k="82" /> +<hkern u1="Ö" u2="," k="82" /> +<hkern u1="Ø" u2="„" k="82" /> +<hkern u1="Ø" u2="‚" k="82" /> +<hkern u1="Ø" u2="Ÿ" k="20" /> +<hkern u1="Ø" u2="Ý" k="20" /> +<hkern u1="Ø" u2="Å" k="41" /> +<hkern u1="Ø" u2="Ä" k="41" /> +<hkern u1="Ø" u2="Ã" k="41" /> +<hkern u1="Ø" u2="Â" k="41" /> +<hkern u1="Ø" u2="Á" k="41" /> +<hkern u1="Ø" u2="À" k="41" /> +<hkern u1="Ø" u2="Z" k="20" /> +<hkern u1="Ø" u2="Y" k="20" /> +<hkern u1="Ø" u2="X" k="41" /> +<hkern u1="Ø" u2="W" k="20" /> +<hkern u1="Ø" u2="V" k="20" /> +<hkern u1="Ø" u2="T" k="61" /> +<hkern u1="Ø" u2="A" k="41" /> +<hkern u1="Ø" u2="." k="82" /> +<hkern u1="Ø" u2="," k="82" /> +<hkern u1="Ù" u2="„" k="41" /> +<hkern u1="Ù" u2="‚" k="41" /> +<hkern u1="Ù" u2="Å" k="20" /> +<hkern u1="Ù" u2="Ä" k="20" /> +<hkern u1="Ù" u2="Ã" k="20" /> +<hkern u1="Ù" u2="Â" k="20" /> +<hkern u1="Ù" u2="Á" k="20" /> +<hkern u1="Ù" u2="À" k="20" /> +<hkern u1="Ù" u2="A" k="20" /> +<hkern u1="Ù" u2="." k="41" /> +<hkern u1="Ù" u2="," k="41" /> +<hkern u1="Ú" u2="„" k="41" /> +<hkern u1="Ú" u2="‚" k="41" /> +<hkern u1="Ú" u2="Å" k="20" /> +<hkern u1="Ú" u2="Ä" k="20" /> +<hkern u1="Ú" u2="Ã" k="20" /> +<hkern u1="Ú" u2="Â" k="20" /> +<hkern u1="Ú" u2="Á" k="20" /> +<hkern u1="Ú" u2="À" k="20" /> +<hkern u1="Ú" u2="A" k="20" /> +<hkern u1="Ú" u2="." k="41" /> +<hkern u1="Ú" u2="," k="41" /> +<hkern u1="Û" u2="„" k="41" /> +<hkern u1="Û" u2="‚" k="41" /> +<hkern u1="Û" u2="Å" k="20" /> +<hkern u1="Û" u2="Ä" k="20" /> +<hkern u1="Û" u2="Ã" k="20" /> +<hkern u1="Û" u2="Â" k="20" /> +<hkern u1="Û" u2="Á" k="20" /> +<hkern u1="Û" u2="À" k="20" /> +<hkern u1="Û" u2="A" k="20" /> +<hkern u1="Û" u2="." k="41" /> +<hkern u1="Û" u2="," k="41" /> +<hkern u1="Ü" u2="„" k="41" /> +<hkern u1="Ü" u2="‚" k="41" /> +<hkern u1="Ü" u2="Å" k="20" /> +<hkern u1="Ü" u2="Ä" k="20" /> +<hkern u1="Ü" u2="Ã" k="20" /> +<hkern u1="Ü" u2="Â" k="20" /> +<hkern u1="Ü" u2="Á" k="20" /> +<hkern u1="Ü" u2="À" k="20" /> +<hkern u1="Ü" u2="A" k="20" /> +<hkern u1="Ü" u2="." k="41" /> +<hkern u1="Ü" u2="," k="41" /> +<hkern u1="Ý" u2="„" k="123" /> +<hkern u1="Ý" u2="‚" k="123" /> +<hkern u1="Ý" u2="œ" k="102" /> +<hkern u1="Ý" u2="Œ" k="41" /> +<hkern u1="Ý" u2="ü" k="61" /> +<hkern u1="Ý" u2="û" k="61" /> +<hkern u1="Ý" u2="ú" k="61" /> +<hkern u1="Ý" u2="ù" k="61" /> +<hkern u1="Ý" u2="ø" k="102" /> +<hkern u1="Ý" u2="ö" k="102" /> +<hkern u1="Ý" u2="õ" k="102" /> +<hkern u1="Ý" u2="ô" k="102" /> +<hkern u1="Ý" u2="ó" k="102" /> +<hkern u1="Ý" u2="ò" k="102" /> +<hkern u1="Ý" u2="ë" k="102" /> +<hkern u1="Ý" u2="ê" k="102" /> +<hkern u1="Ý" u2="é" k="102" /> +<hkern u1="Ý" u2="è" k="102" /> +<hkern u1="Ý" u2="ç" k="102" /> +<hkern u1="Ý" u2="æ" k="102" /> +<hkern u1="Ý" u2="å" k="102" /> +<hkern u1="Ý" u2="ä" k="102" /> +<hkern u1="Ý" u2="ã" k="102" /> +<hkern u1="Ý" u2="â" k="102" /> +<hkern u1="Ý" u2="á" k="102" /> +<hkern u1="Ý" u2="à" k="102" /> +<hkern u1="Ý" u2="Ø" k="41" /> +<hkern u1="Ý" u2="Ö" k="41" /> +<hkern u1="Ý" u2="Õ" k="41" /> +<hkern u1="Ý" u2="Ô" k="41" /> +<hkern u1="Ý" u2="Ó" k="41" /> +<hkern u1="Ý" u2="Ò" k="41" /> +<hkern u1="Ý" u2="Ç" k="41" /> +<hkern u1="Ý" u2="Å" k="123" /> +<hkern u1="Ý" u2="Ä" k="123" /> +<hkern u1="Ý" u2="Ã" k="123" /> +<hkern u1="Ý" u2="Â" k="123" /> +<hkern u1="Ý" u2="Á" k="123" /> +<hkern u1="Ý" u2="À" k="123" /> +<hkern u1="Ý" u2="z" k="41" /> +<hkern u1="Ý" u2="u" k="61" /> +<hkern u1="Ý" u2="s" k="82" /> +<hkern u1="Ý" u2="r" k="61" /> +<hkern u1="Ý" u2="q" k="102" /> +<hkern u1="Ý" u2="p" k="61" /> +<hkern u1="Ý" u2="o" k="102" /> +<hkern u1="Ý" u2="n" k="61" /> +<hkern u1="Ý" u2="m" k="61" /> +<hkern u1="Ý" u2="g" k="41" /> +<hkern u1="Ý" u2="e" k="102" /> +<hkern u1="Ý" u2="d" k="102" /> +<hkern u1="Ý" u2="c" k="102" /> +<hkern u1="Ý" u2="a" k="102" /> +<hkern u1="Ý" u2="Q" k="41" /> +<hkern u1="Ý" u2="O" k="41" /> +<hkern u1="Ý" u2="G" k="41" /> +<hkern u1="Ý" u2="C" k="41" /> +<hkern u1="Ý" u2="A" k="123" /> +<hkern u1="Ý" u2="?" k="-41" /> +<hkern u1="Ý" u2="." k="123" /> +<hkern u1="Ý" u2="," k="123" /> +<hkern u1="Þ" u2="„" k="266" /> +<hkern u1="Þ" u2="‚" k="266" /> +<hkern u1="Þ" u2="Å" k="102" /> +<hkern u1="Þ" u2="Ä" k="102" /> +<hkern u1="Þ" u2="Ã" k="102" /> +<hkern u1="Þ" u2="Â" k="102" /> +<hkern u1="Þ" u2="Á" k="102" /> +<hkern u1="Þ" u2="À" k="102" /> +<hkern u1="Þ" u2="Z" k="20" /> +<hkern u1="Þ" u2="X" k="41" /> +<hkern u1="Þ" u2="A" k="102" /> +<hkern u1="Þ" u2="." k="266" /> +<hkern u1="Þ" u2="," k="266" /> +<hkern u1="à" u2="”" k="20" /> +<hkern u1="à" u2="’" k="20" /> +<hkern u1="à" u2="'" k="20" /> +<hkern u1="à" u2=""" k="20" /> +<hkern u1="á" u2="”" k="20" /> +<hkern u1="á" u2="’" k="20" /> +<hkern u1="á" u2="'" k="20" /> +<hkern u1="á" u2=""" k="20" /> +<hkern u1="â" u2="”" k="20" /> +<hkern u1="â" u2="’" k="20" /> +<hkern u1="â" u2="'" k="20" /> +<hkern u1="â" u2=""" k="20" /> +<hkern u1="ã" u2="”" k="20" /> +<hkern u1="ã" u2="’" k="20" /> +<hkern u1="ã" u2="'" k="20" /> +<hkern u1="ã" u2=""" k="20" /> +<hkern u1="ä" u2="”" k="20" /> +<hkern u1="ä" u2="’" k="20" /> +<hkern u1="ä" u2="'" k="20" /> +<hkern u1="ä" u2=""" k="20" /> +<hkern u1="å" u2="”" k="20" /> +<hkern u1="å" u2="’" k="20" /> +<hkern u1="å" u2="'" k="20" /> +<hkern u1="å" u2=""" k="20" /> +<hkern u1="è" u2="”" k="20" /> +<hkern u1="è" u2="’" k="20" /> +<hkern u1="è" u2="ý" k="41" /> +<hkern u1="è" u2="z" k="20" /> +<hkern u1="è" u2="y" k="41" /> +<hkern u1="è" u2="x" k="41" /> +<hkern u1="è" u2="w" k="41" /> +<hkern u1="è" u2="v" k="41" /> +<hkern u1="è" u2="'" k="20" /> +<hkern u1="è" u2=""" k="20" /> +<hkern u1="é" u2="”" k="20" /> +<hkern u1="é" u2="’" k="20" /> +<hkern u1="é" u2="ý" k="41" /> +<hkern u1="é" u2="z" k="20" /> +<hkern u1="é" u2="y" k="41" /> +<hkern u1="é" u2="x" k="41" /> +<hkern u1="é" u2="w" k="41" /> +<hkern u1="é" u2="v" k="41" /> +<hkern u1="é" u2="'" k="20" /> +<hkern u1="é" u2=""" k="20" /> +<hkern u1="ê" u2="”" k="20" /> +<hkern u1="ê" u2="’" k="20" /> +<hkern u1="ê" u2="ý" k="41" /> +<hkern u1="ê" u2="z" k="20" /> +<hkern u1="ê" u2="y" k="41" /> +<hkern u1="ê" u2="x" k="41" /> +<hkern u1="ê" u2="w" k="41" /> +<hkern u1="ê" u2="v" k="41" /> +<hkern u1="ê" u2="'" k="20" /> +<hkern u1="ê" u2=""" k="20" /> +<hkern u1="ë" u2="”" k="20" /> +<hkern u1="ë" u2="’" k="20" /> +<hkern u1="ë" u2="ý" k="41" /> +<hkern u1="ë" u2="z" k="20" /> +<hkern u1="ë" u2="y" k="41" /> +<hkern u1="ë" u2="x" k="41" /> +<hkern u1="ë" u2="w" k="41" /> +<hkern u1="ë" u2="v" k="41" /> +<hkern u1="ë" u2="'" k="20" /> +<hkern u1="ë" u2=""" k="20" /> +<hkern u1="ð" u2="”" k="20" /> +<hkern u1="ð" u2="’" k="20" /> +<hkern u1="ð" u2="ý" k="41" /> +<hkern u1="ð" u2="z" k="20" /> +<hkern u1="ð" u2="y" k="41" /> +<hkern u1="ð" u2="x" k="41" /> +<hkern u1="ð" u2="w" k="41" /> +<hkern u1="ð" u2="v" k="41" /> +<hkern u1="ð" u2="'" k="20" /> +<hkern u1="ð" u2=""" k="20" /> +<hkern u1="ò" u2="”" k="20" /> +<hkern u1="ò" u2="’" k="20" /> +<hkern u1="ò" u2="ý" k="41" /> +<hkern u1="ò" u2="z" k="20" /> +<hkern u1="ò" u2="y" k="41" /> +<hkern u1="ò" u2="x" k="41" /> +<hkern u1="ò" u2="w" k="41" /> +<hkern u1="ò" u2="v" k="41" /> +<hkern u1="ò" u2="'" k="20" /> +<hkern u1="ò" u2=""" k="20" /> +<hkern u1="ó" u2="”" k="20" /> +<hkern u1="ó" u2="’" k="20" /> +<hkern u1="ó" u2="ý" k="41" /> +<hkern u1="ó" u2="z" k="20" /> +<hkern u1="ó" u2="y" k="41" /> +<hkern u1="ó" u2="x" k="41" /> +<hkern u1="ó" u2="w" k="41" /> +<hkern u1="ó" u2="v" k="41" /> +<hkern u1="ó" u2="'" k="20" /> +<hkern u1="ó" u2=""" k="20" /> +<hkern u1="ô" u2="”" k="20" /> +<hkern u1="ô" u2="’" k="20" /> +<hkern u1="ô" u2="ý" k="41" /> +<hkern u1="ô" u2="z" k="20" /> +<hkern u1="ô" u2="y" k="41" /> +<hkern u1="ô" u2="x" k="41" /> +<hkern u1="ô" u2="w" k="41" /> +<hkern u1="ô" u2="v" k="41" /> +<hkern u1="ô" u2="'" k="20" /> +<hkern u1="ô" u2=""" k="20" /> +<hkern u1="ö" u2="”" k="41" /> +<hkern u1="ö" u2="’" k="41" /> +<hkern u1="ö" u2="'" k="41" /> +<hkern u1="ö" u2=""" k="41" /> +<hkern u1="ø" u2="”" k="20" /> +<hkern u1="ø" u2="’" k="20" /> +<hkern u1="ø" u2="ý" k="41" /> +<hkern u1="ø" u2="z" k="20" /> +<hkern u1="ø" u2="y" k="41" /> +<hkern u1="ø" u2="x" k="41" /> +<hkern u1="ø" u2="w" k="41" /> +<hkern u1="ø" u2="v" k="41" /> +<hkern u1="ø" u2="'" k="20" /> +<hkern u1="ø" u2=""" k="20" /> +<hkern u1="ý" u2="„" k="82" /> +<hkern u1="ý" u2="”" k="-82" /> +<hkern u1="ý" u2="‚" k="82" /> +<hkern u1="ý" u2="’" k="-82" /> +<hkern u1="ý" u2="?" k="-41" /> +<hkern u1="ý" u2="." k="82" /> +<hkern u1="ý" u2="," k="82" /> +<hkern u1="ý" u2="'" k="-82" /> +<hkern u1="ý" u2=""" k="-82" /> +<hkern u1="þ" u2="”" k="20" /> +<hkern u1="þ" u2="’" k="20" /> +<hkern u1="þ" u2="ý" k="41" /> +<hkern u1="þ" u2="z" k="20" /> +<hkern u1="þ" u2="y" k="41" /> +<hkern u1="þ" u2="x" k="41" /> +<hkern u1="þ" u2="w" k="41" /> +<hkern u1="þ" u2="v" k="41" /> +<hkern u1="þ" u2="'" k="20" /> +<hkern u1="þ" u2=""" k="20" /> +<hkern u1="ÿ" u2="„" k="82" /> +<hkern u1="ÿ" u2="”" k="-82" /> +<hkern u1="ÿ" u2="‚" k="82" /> +<hkern u1="ÿ" u2="’" k="-82" /> +<hkern u1="ÿ" u2="?" k="-41" /> +<hkern u1="ÿ" u2="." k="82" /> +<hkern u1="ÿ" u2="," k="82" /> +<hkern u1="ÿ" u2="'" k="-82" /> +<hkern u1="ÿ" u2=""" k="-82" /> +<hkern u1="Œ" u2="J" k="-123" /> +<hkern u1="Ÿ" u2="„" k="123" /> +<hkern u1="Ÿ" u2="‚" k="123" /> +<hkern u1="Ÿ" u2="œ" k="102" /> +<hkern u1="Ÿ" u2="Œ" k="41" /> +<hkern u1="Ÿ" u2="ü" k="61" /> +<hkern u1="Ÿ" u2="û" k="61" /> +<hkern u1="Ÿ" u2="ú" k="61" /> +<hkern u1="Ÿ" u2="ù" k="61" /> +<hkern u1="Ÿ" u2="ø" k="102" /> +<hkern u1="Ÿ" u2="ö" k="102" /> +<hkern u1="Ÿ" u2="õ" k="102" /> +<hkern u1="Ÿ" u2="ô" k="102" /> +<hkern u1="Ÿ" u2="ó" k="102" /> +<hkern u1="Ÿ" u2="ò" k="102" /> +<hkern u1="Ÿ" u2="ë" k="102" /> +<hkern u1="Ÿ" u2="ê" k="102" /> +<hkern u1="Ÿ" u2="é" k="102" /> +<hkern u1="Ÿ" u2="è" k="102" /> +<hkern u1="Ÿ" u2="ç" k="102" /> +<hkern u1="Ÿ" u2="æ" k="102" /> +<hkern u1="Ÿ" u2="å" k="102" /> +<hkern u1="Ÿ" u2="ä" k="102" /> +<hkern u1="Ÿ" u2="ã" k="102" /> +<hkern u1="Ÿ" u2="â" k="102" /> +<hkern u1="Ÿ" u2="á" k="102" /> +<hkern u1="Ÿ" u2="à" k="102" /> +<hkern u1="Ÿ" u2="Ø" k="41" /> +<hkern u1="Ÿ" u2="Ö" k="41" /> +<hkern u1="Ÿ" u2="Õ" k="41" /> +<hkern u1="Ÿ" u2="Ô" k="41" /> +<hkern u1="Ÿ" u2="Ó" k="41" /> +<hkern u1="Ÿ" u2="Ò" k="41" /> +<hkern u1="Ÿ" u2="Ç" k="41" /> +<hkern u1="Ÿ" u2="Å" k="123" /> +<hkern u1="Ÿ" u2="Ä" k="123" /> +<hkern u1="Ÿ" u2="Ã" k="123" /> +<hkern u1="Ÿ" u2="Â" k="123" /> +<hkern u1="Ÿ" u2="Á" k="123" /> +<hkern u1="Ÿ" u2="À" k="123" /> +<hkern u1="Ÿ" u2="z" k="41" /> +<hkern u1="Ÿ" u2="u" k="61" /> +<hkern u1="Ÿ" u2="s" k="82" /> +<hkern u1="Ÿ" u2="r" k="61" /> +<hkern u1="Ÿ" u2="q" k="102" /> +<hkern u1="Ÿ" u2="p" k="61" /> +<hkern u1="Ÿ" u2="o" k="102" /> +<hkern u1="Ÿ" u2="n" k="61" /> +<hkern u1="Ÿ" u2="m" k="61" /> +<hkern u1="Ÿ" u2="g" k="41" /> +<hkern u1="Ÿ" u2="e" k="102" /> +<hkern u1="Ÿ" u2="d" k="102" /> +<hkern u1="Ÿ" u2="c" k="102" /> +<hkern u1="Ÿ" u2="a" k="102" /> +<hkern u1="Ÿ" u2="Q" k="41" /> +<hkern u1="Ÿ" u2="O" k="41" /> +<hkern u1="Ÿ" u2="G" k="41" /> +<hkern u1="Ÿ" u2="C" k="41" /> +<hkern u1="Ÿ" u2="A" k="123" /> +<hkern u1="Ÿ" u2="?" k="-41" /> +<hkern u1="Ÿ" u2="." k="123" /> +<hkern u1="Ÿ" u2="," k="123" /> +<hkern u1="–" u2="T" k="82" /> +<hkern u1="—" u2="T" k="82" /> +<hkern u1="‘" u2="Ÿ" k="-20" /> +<hkern u1="‘" u2="œ" k="123" /> +<hkern u1="‘" u2="ü" k="61" /> +<hkern u1="‘" u2="û" k="61" /> +<hkern u1="‘" u2="ú" k="61" /> +<hkern u1="‘" u2="ù" k="61" /> +<hkern u1="‘" u2="ø" k="123" /> +<hkern u1="‘" u2="ö" k="123" /> +<hkern u1="‘" u2="õ" k="123" /> +<hkern u1="‘" u2="ô" k="123" /> +<hkern u1="‘" u2="ó" k="123" /> +<hkern u1="‘" u2="ò" k="123" /> +<hkern u1="‘" u2="ë" k="123" /> +<hkern u1="‘" u2="ê" k="123" /> +<hkern u1="‘" u2="é" k="123" /> +<hkern u1="‘" u2="è" k="123" /> +<hkern u1="‘" u2="ç" k="123" /> +<hkern u1="‘" u2="æ" k="82" /> +<hkern u1="‘" u2="å" k="82" /> +<hkern u1="‘" u2="ä" k="82" /> +<hkern u1="‘" u2="ã" k="82" /> +<hkern u1="‘" u2="â" k="82" /> +<hkern u1="‘" u2="á" k="82" /> +<hkern u1="‘" u2="à" k="123" /> +<hkern u1="‘" u2="Ý" k="-20" /> +<hkern u1="‘" u2="Å" k="143" /> +<hkern u1="‘" u2="Ä" k="143" /> +<hkern u1="‘" u2="Ã" k="143" /> +<hkern u1="‘" u2="Â" k="143" /> +<hkern u1="‘" u2="Á" k="143" /> +<hkern u1="‘" u2="À" k="143" /> +<hkern u1="‘" u2="u" k="61" /> +<hkern u1="‘" u2="s" k="61" /> +<hkern u1="‘" u2="r" k="61" /> +<hkern u1="‘" u2="q" k="123" /> +<hkern u1="‘" u2="p" k="61" /> +<hkern u1="‘" u2="o" k="123" /> +<hkern u1="‘" u2="n" k="61" /> +<hkern u1="‘" u2="m" k="61" /> +<hkern u1="‘" u2="g" k="61" /> +<hkern u1="‘" u2="e" k="123" /> +<hkern u1="‘" u2="d" k="123" /> +<hkern u1="‘" u2="c" k="123" /> +<hkern u1="‘" u2="a" k="82" /> +<hkern u1="‘" u2="Y" k="-20" /> +<hkern u1="‘" u2="W" k="-41" /> +<hkern u1="‘" u2="V" k="-41" /> +<hkern u1="‘" u2="T" k="-41" /> +<hkern u1="‘" u2="A" k="143" /> +<hkern u1="’" u2="Ÿ" k="-20" /> +<hkern u1="’" u2="œ" k="123" /> +<hkern u1="’" u2="ü" k="61" /> +<hkern u1="’" u2="û" k="61" /> +<hkern u1="’" u2="ú" k="61" /> +<hkern u1="’" u2="ù" k="61" /> +<hkern u1="’" u2="ø" k="123" /> +<hkern u1="’" u2="ö" k="123" /> +<hkern u1="’" u2="õ" k="123" /> +<hkern u1="’" u2="ô" k="123" /> +<hkern u1="’" u2="ó" k="123" /> +<hkern u1="’" u2="ò" k="123" /> +<hkern u1="’" u2="ë" k="123" /> +<hkern u1="’" u2="ê" k="123" /> +<hkern u1="’" u2="é" k="123" /> +<hkern u1="’" u2="è" k="123" /> +<hkern u1="’" u2="ç" k="123" /> +<hkern u1="’" u2="æ" k="82" /> +<hkern u1="’" u2="å" k="82" /> +<hkern u1="’" u2="ä" k="82" /> +<hkern u1="’" u2="ã" k="82" /> +<hkern u1="’" u2="â" k="82" /> +<hkern u1="’" u2="á" k="82" /> +<hkern u1="’" u2="à" k="123" /> +<hkern u1="’" u2="Ý" k="-20" /> +<hkern u1="’" u2="Å" k="143" /> +<hkern u1="’" u2="Ä" k="143" /> +<hkern u1="’" u2="Ã" k="143" /> +<hkern u1="’" u2="Â" k="143" /> +<hkern u1="’" u2="Á" k="143" /> +<hkern u1="’" u2="À" k="143" /> +<hkern u1="’" u2="u" k="61" /> +<hkern u1="’" u2="s" k="61" /> +<hkern u1="’" u2="r" k="61" /> +<hkern u1="’" u2="q" k="123" /> +<hkern u1="’" u2="p" k="61" /> +<hkern u1="’" u2="o" k="123" /> +<hkern u1="’" u2="n" k="61" /> +<hkern u1="’" u2="m" k="61" /> +<hkern u1="’" u2="g" k="61" /> +<hkern u1="’" u2="e" k="123" /> +<hkern u1="’" u2="d" k="123" /> +<hkern u1="’" u2="c" k="123" /> +<hkern u1="’" u2="a" k="82" /> +<hkern u1="’" u2="Y" k="-20" /> +<hkern u1="’" u2="W" k="-41" /> +<hkern u1="’" u2="V" k="-41" /> +<hkern u1="’" u2="T" k="-41" /> +<hkern u1="’" u2="A" k="143" /> +<hkern u1="‚" u2="Ÿ" k="123" /> +<hkern u1="‚" u2="Œ" k="102" /> +<hkern u1="‚" u2="Ý" k="123" /> +<hkern u1="‚" u2="Ü" k="41" /> +<hkern u1="‚" u2="Û" k="41" /> +<hkern u1="‚" u2="Ú" k="41" /> +<hkern u1="‚" u2="Ù" k="41" /> +<hkern u1="‚" u2="Ø" k="102" /> +<hkern u1="‚" u2="Ö" k="102" /> +<hkern u1="‚" u2="Õ" k="102" /> +<hkern u1="‚" u2="Ô" k="102" /> +<hkern u1="‚" u2="Ó" k="102" /> +<hkern u1="‚" u2="Ò" k="102" /> +<hkern u1="‚" u2="Ç" k="102" /> +<hkern u1="‚" u2="Y" k="123" /> +<hkern u1="‚" u2="W" k="123" /> +<hkern u1="‚" u2="V" k="123" /> +<hkern u1="‚" u2="U" k="41" /> +<hkern u1="‚" u2="T" k="143" /> +<hkern u1="‚" u2="Q" k="102" /> +<hkern u1="‚" u2="O" k="102" /> +<hkern u1="‚" u2="G" k="102" /> +<hkern u1="‚" u2="C" k="102" /> +<hkern u1="“" u2="Ÿ" k="-20" /> +<hkern u1="“" u2="œ" k="123" /> +<hkern u1="“" u2="ü" k="61" /> +<hkern u1="“" u2="û" k="61" /> +<hkern u1="“" u2="ú" k="61" /> +<hkern u1="“" u2="ù" k="61" /> +<hkern u1="“" u2="ø" k="123" /> +<hkern u1="“" u2="ö" k="123" /> +<hkern u1="“" u2="õ" k="123" /> +<hkern u1="“" u2="ô" k="123" /> +<hkern u1="“" u2="ó" k="123" /> +<hkern u1="“" u2="ò" k="123" /> +<hkern u1="“" u2="ë" k="123" /> +<hkern u1="“" u2="ê" k="123" /> +<hkern u1="“" u2="é" k="123" /> +<hkern u1="“" u2="è" k="123" /> +<hkern u1="“" u2="ç" k="123" /> +<hkern u1="“" u2="æ" k="82" /> +<hkern u1="“" u2="å" k="82" /> +<hkern u1="“" u2="ä" k="82" /> +<hkern u1="“" u2="ã" k="82" /> +<hkern u1="“" u2="â" k="82" /> +<hkern u1="“" u2="á" k="82" /> +<hkern u1="“" u2="à" k="123" /> +<hkern u1="“" u2="Ý" k="-20" /> +<hkern u1="“" u2="Å" k="143" /> +<hkern u1="“" u2="Ä" k="143" /> +<hkern u1="“" u2="Ã" k="143" /> +<hkern u1="“" u2="Â" k="143" /> +<hkern u1="“" u2="Á" k="143" /> +<hkern u1="“" u2="À" k="143" /> +<hkern u1="“" u2="u" k="61" /> +<hkern u1="“" u2="s" k="61" /> +<hkern u1="“" u2="r" k="61" /> +<hkern u1="“" u2="q" k="123" /> +<hkern u1="“" u2="p" k="61" /> +<hkern u1="“" u2="o" k="123" /> +<hkern u1="“" u2="n" k="61" /> +<hkern u1="“" u2="m" k="61" /> +<hkern u1="“" u2="g" k="61" /> +<hkern u1="“" u2="e" k="123" /> +<hkern u1="“" u2="d" k="123" /> +<hkern u1="“" u2="c" k="123" /> +<hkern u1="“" u2="a" k="82" /> +<hkern u1="“" u2="Y" k="-20" /> +<hkern u1="“" u2="W" k="-41" /> +<hkern u1="“" u2="V" k="-41" /> +<hkern u1="“" u2="T" k="-41" /> +<hkern u1="“" u2="A" k="143" /> +<hkern u1="„" u2="Ÿ" k="123" /> +<hkern u1="„" u2="Œ" k="102" /> +<hkern u1="„" u2="Ý" k="123" /> +<hkern u1="„" u2="Ü" k="41" /> +<hkern u1="„" u2="Û" k="41" /> +<hkern u1="„" u2="Ú" k="41" /> +<hkern u1="„" u2="Ù" k="41" /> +<hkern u1="„" u2="Ø" k="102" /> +<hkern u1="„" u2="Ö" k="102" /> +<hkern u1="„" u2="Õ" k="102" /> +<hkern u1="„" u2="Ô" k="102" /> +<hkern u1="„" u2="Ó" k="102" /> +<hkern u1="„" u2="Ò" k="102" /> +<hkern u1="„" u2="Ç" k="102" /> +<hkern u1="„" u2="Y" k="123" /> +<hkern u1="„" u2="W" k="123" /> +<hkern u1="„" u2="V" k="123" /> +<hkern u1="„" u2="U" k="41" /> +<hkern u1="„" u2="T" k="143" /> +<hkern u1="„" u2="Q" k="102" /> +<hkern u1="„" u2="O" k="102" /> +<hkern u1="„" u2="G" k="102" /> +<hkern u1="„" u2="C" k="102" /> +<hkern g1="uniFB00" u2="”" k="-123" /> +<hkern g1="uniFB00" u2="’" k="-123" /> +<hkern g1="uniFB00" u2="'" k="-123" /> +<hkern g1="uniFB00" u2=""" k="-123" /> +</font> +</defs></svg>
\ No newline at end of file diff --git a/documentation/jsapi/fonts/OpenSans-LightItalic-webfont.woff b/documentation/jsapi/fonts/OpenSans-LightItalic-webfont.woff Binary files differnew file mode 100644 index 000000000..43e8b9e6c --- /dev/null +++ b/documentation/jsapi/fonts/OpenSans-LightItalic-webfont.woff diff --git a/documentation/jsapi/fonts/OpenSans-Regular-webfont.eot b/documentation/jsapi/fonts/OpenSans-Regular-webfont.eot Binary files differnew file mode 100644 index 000000000..6bbc3cf58 --- /dev/null +++ b/documentation/jsapi/fonts/OpenSans-Regular-webfont.eot diff --git a/documentation/jsapi/fonts/OpenSans-Regular-webfont.svg b/documentation/jsapi/fonts/OpenSans-Regular-webfont.svg new file mode 100644 index 000000000..25a395234 --- /dev/null +++ b/documentation/jsapi/fonts/OpenSans-Regular-webfont.svg @@ -0,0 +1,1831 @@ +<?xml version="1.0" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" > +<svg xmlns="http://www.w3.org/2000/svg"> +<metadata></metadata> +<defs> +<font id="open_sansregular" horiz-adv-x="1171" > +<font-face units-per-em="2048" ascent="1638" descent="-410" /> +<missing-glyph horiz-adv-x="532" /> +<glyph unicode="fi" horiz-adv-x="1212" d="M29 0zM670 967h-279v-967h-166v967h-196v75l196 60v61q0 404 353 404q87 0 204 -35l-43 -133q-96 31 -164 31q-94 0 -139 -62.5t-45 -200.5v-71h279v-129zM1036 0h-166v1096h166v-1096zM856 1393q0 57 28 83.5t70 26.5q40 0 69 -27t29 -83t-29 -83.5t-69 -27.5 q-42 0 -70 27.5t-28 83.5z" /> +<glyph unicode="fl" horiz-adv-x="1212" d="M29 0zM670 967h-279v-967h-166v967h-196v75l196 60v61q0 404 353 404q87 0 204 -35l-43 -133q-96 31 -164 31q-94 0 -139 -62.5t-45 -200.5v-71h279v-129zM1036 0h-166v1556h166v-1556z" /> +<glyph unicode="ffi" horiz-adv-x="1909" d="M29 0zM1358 967h-279v-967h-166v967h-196v75l196 60v61q0 404 353 404q87 0 204 -35l-43 -133q-96 31 -164 31q-94 0 -139 -62.5t-45 -200.5v-71h279v-129zM670 967h-279v-967h-166v967h-196v75l196 60v61q0 404 353 404q87 0 204 -35l-43 -133q-96 31 -164 31 q-94 0 -139 -62.5t-45 -200.5v-71h279v-129zM1731 0h-166v1096h166v-1096zM1551 1393q0 57 28 83.5t70 26.5q40 0 69 -27t29 -83t-29 -83.5t-69 -27.5q-42 0 -70 27.5t-28 83.5z" /> +<glyph unicode="ffl" horiz-adv-x="1909" d="M29 0zM1358 967h-279v-967h-166v967h-196v75l196 60v61q0 404 353 404q87 0 204 -35l-43 -133q-96 31 -164 31q-94 0 -139 -62.5t-45 -200.5v-71h279v-129zM670 967h-279v-967h-166v967h-196v75l196 60v61q0 404 353 404q87 0 204 -35l-43 -133q-96 31 -164 31 q-94 0 -139 -62.5t-45 -200.5v-71h279v-129zM1731 0h-166v1556h166v-1556z" /> +<glyph horiz-adv-x="2048" /> +<glyph horiz-adv-x="2048" /> +<glyph unicode="
" horiz-adv-x="1044" /> +<glyph unicode=" " horiz-adv-x="532" /> +<glyph unicode="	" horiz-adv-x="532" /> +<glyph unicode=" " horiz-adv-x="532" /> +<glyph unicode="!" horiz-adv-x="547" d="M326 403h-105l-51 1059h207zM152 106q0 136 120 136q58 0 89.5 -35t31.5 -101q0 -64 -32 -99.5t-89 -35.5q-52 0 -86 31.5t-34 103.5z" /> +<glyph unicode=""" horiz-adv-x="821" d="M319 1462l-40 -528h-105l-41 528h186zM688 1462l-41 -528h-104l-41 528h186z" /> +<glyph unicode="#" horiz-adv-x="1323" d="M981 899l-66 -340h283v-129h-307l-84 -430h-137l84 430h-303l-82 -430h-136l80 430h-262v129h287l68 340h-277v127h299l82 436h139l-82 -436h305l84 436h134l-84 -436h264v-127h-289zM475 559h303l66 340h-303z" /> +<glyph unicode="$" d="M1036 449q0 -136 -102 -224.5t-285 -111.5v-232h-129v223q-112 0 -217 17.5t-172 48.5v156q83 -37 191.5 -60.5t197.5 -23.5v440q-205 65 -287.5 151t-82.5 222q0 131 101.5 215t268.5 102v182h129v-180q184 -5 355 -74l-52 -131q-149 59 -303 70v-434q157 -50 235 -97.5 t115 -109t37 -149.5zM866 436q0 72 -44.5 116.5t-172.5 88.5v-389q217 30 217 184zM319 1057q0 -76 45 -122t156 -87v387q-99 -16 -150 -62.5t-51 -115.5z" /> +<glyph unicode="%" horiz-adv-x="1686" d="M242 1026q0 -170 37 -255t120 -85q164 0 164 340q0 338 -164 338q-83 0 -120 -84t-37 -254zM700 1026q0 -228 -76.5 -344.5t-224.5 -116.5q-140 0 -217.5 119t-77.5 342q0 227 74.5 342t220.5 115q145 0 223 -119t78 -338zM1122 440q0 -171 37 -255.5t121 -84.5t124 83.5 t40 256.5q0 171 -40 253.5t-124 82.5t-121 -82.5t-37 -253.5zM1581 440q0 -227 -76.5 -343.5t-224.5 -116.5q-142 0 -218.5 119t-76.5 341q0 227 74.5 342t220.5 115q142 0 221.5 -117.5t79.5 -339.5zM1323 1462l-811 -1462h-147l811 1462h147z" /> +<glyph unicode="&" horiz-adv-x="1495" d="M414 1171q0 -69 36 -131.5t123 -150.5q129 75 179.5 138.5t50.5 146.5q0 77 -51.5 125.5t-137.5 48.5q-89 0 -144.5 -48t-55.5 -129zM569 129q241 0 400 154l-437 424q-111 -68 -157 -112.5t-68 -95.5t-22 -116q0 -117 77.5 -185.5t206.5 -68.5zM113 379q0 130 69.5 230 t249.5 202q-85 95 -115.5 144t-48.5 102t-18 110q0 150 98 234t273 84q162 0 255 -83.5t93 -232.5q0 -107 -68 -197.5t-225 -183.5l407 -391q56 62 89.5 145.5t56.5 182.5h168q-68 -286 -205 -434l299 -291h-229l-185 178q-118 -106 -240 -152t-272 -46q-215 0 -333.5 106 t-118.5 293z" /> +<glyph unicode="'" horiz-adv-x="453" d="M319 1462l-40 -528h-105l-41 528h186z" /> +<glyph unicode="(" horiz-adv-x="606" d="M82 561q0 265 77.5 496t223.5 405h162q-144 -193 -216.5 -424t-72.5 -475q0 -240 74 -469t213 -418h-160q-147 170 -224 397t-77 488z" /> +<glyph unicode=")" horiz-adv-x="606" d="M524 561q0 -263 -77.5 -490t-223.5 -395h-160q139 188 213 417.5t74 469.5q0 244 -72.5 475t-216.5 424h162q147 -175 224 -406.5t77 -494.5z" /> +<glyph unicode="*" horiz-adv-x="1130" d="M657 1556l-43 -395l398 111l26 -182l-381 -31l248 -326l-172 -94l-176 362l-160 -362l-176 94l242 326l-377 31l29 182l391 -111l-43 395h194z" /> +<glyph unicode="+" d="M653 791h412v-138h-412v-426h-139v426h-410v138h410v428h139v-428z" /> +<glyph unicode="," horiz-adv-x="502" d="M350 238l15 -23q-26 -100 -75 -232.5t-102 -246.5h-125q27 104 59.5 257t45.5 245h182z" /> +<glyph unicode="-" horiz-adv-x="659" d="M84 473v152h491v-152h-491z" /> +<glyph unicode="." horiz-adv-x="545" d="M152 106q0 67 30.5 101.5t87.5 34.5q58 0 90.5 -34.5t32.5 -101.5q0 -65 -33 -100t-90 -35q-51 0 -84.5 31.5t-33.5 103.5z" /> +<glyph unicode="/" horiz-adv-x="752" d="M731 1462l-545 -1462h-166l545 1462h166z" /> +<glyph unicode="0" d="M1069 733q0 -379 -119.5 -566t-365.5 -187q-236 0 -359 191.5t-123 561.5q0 382 119 567t363 185q238 0 361.5 -193t123.5 -559zM270 733q0 -319 75 -464.5t239 -145.5q166 0 240.5 147.5t74.5 462.5t-74.5 461.5t-240.5 146.5q-164 0 -239 -144.5t-75 -463.5z" /> +<glyph unicode="1" d="M715 0h-162v1042q0 130 8 246q-21 -21 -47 -44t-238 -195l-88 114l387 299h140v-1462z" /> +<glyph unicode="2" d="M1061 0h-961v143l385 387q176 178 232 254t84 148t28 155q0 117 -71 185.5t-197 68.5q-91 0 -172.5 -30t-181.5 -109l-88 113q202 168 440 168q206 0 323 -105.5t117 -283.5q0 -139 -78 -275t-292 -344l-320 -313v-8h752v-154z" /> +<glyph unicode="3" d="M1006 1118q0 -140 -78.5 -229t-222.5 -119v-8q176 -22 261 -112t85 -236q0 -209 -145 -321.5t-412 -112.5q-116 0 -212.5 17.5t-187.5 61.5v158q95 -47 202.5 -71.5t203.5 -24.5q379 0 379 297q0 266 -418 266h-144v143h146q171 0 271 75.5t100 209.5q0 107 -73.5 168 t-199.5 61q-96 0 -181 -26t-194 -96l-84 112q90 71 207.5 111.5t247.5 40.5q213 0 331 -97.5t118 -267.5z" /> +<glyph unicode="4" d="M1130 336h-217v-336h-159v336h-711v145l694 989h176v-983h217v-151zM754 487v486q0 143 10 323h-8q-48 -96 -90 -159l-457 -650h545z" /> +<glyph unicode="5" d="M557 893q231 0 363.5 -114.5t132.5 -313.5q0 -227 -144.5 -356t-398.5 -129q-247 0 -377 79v160q70 -45 174 -70.5t205 -25.5q176 0 273.5 83t97.5 240q0 306 -375 306q-95 0 -254 -29l-86 55l55 684h727v-153h-585l-37 -439q115 23 229 23z" /> +<glyph unicode="6" d="M117 625q0 431 167.5 644.5t495.5 213.5q113 0 178 -19v-143q-77 25 -176 25q-235 0 -359 -146.5t-136 -460.5h12q110 172 348 172q197 0 310.5 -119t113.5 -323q0 -228 -124.5 -358.5t-336.5 -130.5q-227 0 -360 170.5t-133 474.5zM608 121q142 0 220.5 89.5t78.5 258.5 q0 145 -73 228t-218 83q-90 0 -165 -37t-119.5 -102t-44.5 -135q0 -103 40 -192t113.5 -141t167.5 -52z" /> +<glyph unicode="7" d="M285 0l606 1309h-797v153h973v-133l-598 -1329h-184z" /> +<glyph unicode="8" d="M584 1483q200 0 317 -93t117 -257q0 -108 -67 -197t-214 -162q178 -85 253 -178.5t75 -216.5q0 -182 -127 -290.5t-348 -108.5q-234 0 -360 102.5t-126 290.5q0 251 306 391q-138 78 -198 168.5t-60 202.5q0 159 117.5 253.5t314.5 94.5zM268 369q0 -120 83.5 -187 t234.5 -67q149 0 232 70t83 192q0 97 -78 172.5t-272 146.5q-149 -64 -216 -141.5t-67 -185.5zM582 1348q-125 0 -196 -60t-71 -160q0 -92 59 -158t218 -132q143 60 202.5 129t59.5 161q0 101 -72.5 160.5t-199.5 59.5z" /> +<glyph unicode="9" d="M1061 838q0 -858 -664 -858q-116 0 -184 20v143q80 -26 182 -26q240 0 362.5 148.5t133.5 455.5h-12q-55 -83 -146 -126.5t-205 -43.5q-194 0 -308 116t-114 324q0 228 127.5 360t335.5 132q149 0 260.5 -76.5t171.5 -223t60 -345.5zM569 1341q-143 0 -221 -92t-78 -256 q0 -144 72 -226.5t219 -82.5q91 0 167.5 37t120.5 101t44 134q0 105 -41 194t-114.5 140t-168.5 51z" /> +<glyph unicode=":" horiz-adv-x="545" d="M152 106q0 67 30.5 101.5t87.5 34.5q58 0 90.5 -34.5t32.5 -101.5q0 -65 -33 -100t-90 -35q-51 0 -84.5 31.5t-33.5 103.5zM152 989q0 135 118 135q123 0 123 -135q0 -65 -33 -100t-90 -35q-51 0 -84.5 31.5t-33.5 103.5z" /> +<glyph unicode=";" horiz-adv-x="545" d="M350 238l15 -23q-26 -100 -75 -232.5t-102 -246.5h-125q27 104 59.5 257t45.5 245h182zM147 989q0 135 119 135q123 0 123 -135q0 -65 -33 -100t-90 -35q-58 0 -88.5 35t-30.5 100z" /> +<glyph unicode="<" d="M1065 242l-961 422v98l961 479v-149l-782 -371l782 -328v-151z" /> +<glyph unicode="=" d="M119 858v137h930v-137h-930zM119 449v137h930v-137h-930z" /> +<glyph unicode=">" d="M104 393l783 326l-783 373v149l961 -479v-98l-961 -422v151z" /> +<glyph unicode="?" horiz-adv-x="879" d="M289 403v54q0 117 36 192.5t134 159.5q136 115 171.5 173t35.5 140q0 102 -65.5 157.5t-188.5 55.5q-79 0 -154 -18.5t-172 -67.5l-59 135q189 99 395 99q191 0 297 -94t106 -265q0 -73 -19.5 -128.5t-57.5 -105t-164 -159.5q-101 -86 -133.5 -143t-32.5 -152v-33h-129z M240 106q0 136 120 136q58 0 89.5 -35t31.5 -101q0 -64 -32 -99.5t-89 -35.5q-52 0 -86 31.5t-34 103.5z" /> +<glyph unicode="@" horiz-adv-x="1841" d="M1720 729q0 -142 -44 -260t-124 -183t-184 -65q-86 0 -145 52t-70 133h-8q-40 -87 -114.5 -136t-176.5 -49q-150 0 -234.5 102.5t-84.5 278.5q0 204 118 331.5t310 127.5q68 0 154 -12.5t155 -34.5l-25 -470v-22q0 -178 133 -178q91 0 148 107.5t57 279.5q0 181 -74 317 t-210.5 209.5t-313.5 73.5q-223 0 -388 -92.5t-252 -264t-87 -396.5q0 -305 161 -469t464 -164q210 0 436 86v-133q-192 -84 -436 -84q-363 0 -563.5 199.5t-200.5 557.5q0 260 107 463t305 314.5t454 111.5q215 0 382.5 -90.5t259 -257t91.5 -383.5zM686 598 q0 -254 195 -254q207 0 225 313l14 261q-72 20 -157 20q-130 0 -203.5 -90t-73.5 -250z" /> +<glyph unicode="A" horiz-adv-x="1296" d="M1120 0l-182 465h-586l-180 -465h-172l578 1468h143l575 -1468h-176zM885 618l-170 453q-33 86 -68 211q-22 -96 -63 -211l-172 -453h473z" /> +<glyph unicode="B" horiz-adv-x="1327" d="M201 1462h413q291 0 421 -87t130 -275q0 -130 -72.5 -214.5t-211.5 -109.5v-10q333 -57 333 -350q0 -196 -132.5 -306t-370.5 -110h-510v1462zM371 836h280q180 0 259 56.5t79 190.5q0 123 -88 177.5t-280 54.5h-250v-479zM371 692v-547h305q177 0 266.5 68.5t89.5 214.5 q0 136 -91.5 200t-278.5 64h-291z" /> +<glyph unicode="C" horiz-adv-x="1292" d="M827 1331q-241 0 -380.5 -160.5t-139.5 -439.5q0 -287 134.5 -443.5t383.5 -156.5q153 0 349 55v-149q-152 -57 -375 -57q-323 0 -498.5 196t-175.5 557q0 226 84.5 396t244 262t375.5 92q230 0 402 -84l-72 -146q-166 78 -332 78z" /> +<glyph unicode="D" horiz-adv-x="1493" d="M1368 745q0 -362 -196.5 -553.5t-565.5 -191.5h-405v1462h448q341 0 530 -189t189 -528zM1188 739q0 286 -143.5 431t-426.5 145h-247v-1168h207q304 0 457 149.5t153 442.5z" /> +<glyph unicode="E" horiz-adv-x="1139" d="M1016 0h-815v1462h815v-151h-645v-471h606v-150h-606v-538h645v-152z" /> +<glyph unicode="F" horiz-adv-x="1057" d="M371 0h-170v1462h815v-151h-645v-535h606v-151h-606v-625z" /> +<glyph unicode="G" horiz-adv-x="1491" d="M844 766h497v-711q-116 -37 -236 -56t-278 -19q-332 0 -517 197.5t-185 553.5q0 228 91.5 399.5t263.5 262t403 90.5q234 0 436 -86l-66 -150q-198 84 -381 84q-267 0 -417 -159t-150 -441q0 -296 144.5 -449t424.5 -153q152 0 297 35v450h-327v152z" /> +<glyph unicode="H" horiz-adv-x="1511" d="M1311 0h-170v688h-770v-688h-170v1462h170v-622h770v622h170v-1462z" /> +<glyph unicode="I" horiz-adv-x="571" d="M201 0v1462h170v-1462h-170z" /> +<glyph unicode="J" horiz-adv-x="547" d="M-12 -385q-94 0 -148 27v145q71 -20 148 -20q99 0 150.5 60t51.5 173v1462h170v-1448q0 -190 -96 -294.5t-276 -104.5z" /> +<glyph unicode="K" horiz-adv-x="1257" d="M1257 0h-200l-533 709l-153 -136v-573h-170v1462h170v-725l663 725h201l-588 -635z" /> +<glyph unicode="L" horiz-adv-x="1063" d="M201 0v1462h170v-1308h645v-154h-815z" /> +<glyph unicode="M" horiz-adv-x="1849" d="M848 0l-496 1296h-8q14 -154 14 -366v-930h-157v1462h256l463 -1206h8l467 1206h254v-1462h-170v942q0 162 14 352h-8l-500 -1294h-137z" /> +<glyph unicode="N" horiz-adv-x="1544" d="M1343 0h-194l-799 1227h-8q16 -216 16 -396v-831h-157v1462h192l797 -1222h8q-2 27 -9 173.5t-5 209.5v839h159v-1462z" /> +<glyph unicode="O" horiz-adv-x="1595" d="M1470 733q0 -351 -177.5 -552t-493.5 -201q-323 0 -498.5 197.5t-175.5 557.5q0 357 176 553.5t500 196.5q315 0 492 -200t177 -552zM305 733q0 -297 126.5 -450.5t367.5 -153.5q243 0 367 153t124 451q0 295 -123.5 447.5t-365.5 152.5q-243 0 -369.5 -153.5 t-126.5 -446.5z" /> +<glyph unicode="P" horiz-adv-x="1233" d="M1128 1036q0 -222 -151.5 -341.5t-433.5 -119.5h-172v-575h-170v1462h379q548 0 548 -426zM371 721h153q226 0 327 73t101 234q0 145 -95 216t-296 71h-190v-594z" /> +<glyph unicode="Q" horiz-adv-x="1595" d="M1470 733q0 -281 -113 -467t-319 -252l348 -362h-247l-285 330l-55 -2q-323 0 -498.5 197.5t-175.5 557.5q0 357 176 553.5t500 196.5q315 0 492 -200t177 -552zM305 733q0 -297 126.5 -450.5t367.5 -153.5q243 0 367 153t124 451q0 295 -123.5 447.5t-365.5 152.5 q-243 0 -369.5 -153.5t-126.5 -446.5z" /> +<glyph unicode="R" horiz-adv-x="1266" d="M371 608v-608h-170v1462h401q269 0 397.5 -103t128.5 -310q0 -290 -294 -392l397 -657h-201l-354 608h-305zM371 754h233q180 0 264 71.5t84 214.5q0 145 -85.5 209t-274.5 64h-221v-559z" /> +<glyph unicode="S" horiz-adv-x="1124" d="M1026 389q0 -193 -140 -301t-380 -108q-260 0 -400 67v164q90 -38 196 -60t210 -22q170 0 256 64.5t86 179.5q0 76 -30.5 124.5t-102 89.5t-217.5 93q-204 73 -291.5 173t-87.5 261q0 169 127 269t336 100q218 0 401 -80l-53 -148q-181 76 -352 76q-135 0 -211 -58 t-76 -161q0 -76 28 -124.5t94.5 -89t203.5 -89.5q230 -82 316.5 -176t86.5 -244z" /> +<glyph unicode="T" horiz-adv-x="1133" d="M651 0h-170v1311h-463v151h1096v-151h-463v-1311z" /> +<glyph unicode="U" horiz-adv-x="1491" d="M1305 1462v-946q0 -250 -151 -393t-415 -143t-408.5 144t-144.5 396v942h170v-954q0 -183 100 -281t294 -98q185 0 285 98.5t100 282.5v952h170z" /> +<glyph unicode="V" horiz-adv-x="1219" d="M1036 1462h183l-527 -1462h-168l-524 1462h180l336 -946q58 -163 92 -317q36 162 94 323z" /> +<glyph unicode="W" horiz-adv-x="1896" d="M1477 0h-168l-295 979q-21 65 -47 164t-27 119q-22 -132 -70 -289l-286 -973h-168l-389 1462h180l231 -903q48 -190 70 -344q27 183 80 358l262 889h180l275 -897q48 -155 81 -350q19 142 72 346l230 901h180z" /> +<glyph unicode="X" horiz-adv-x="1182" d="M1174 0h-193l-393 643l-400 -643h-180l486 764l-453 698h188l363 -579l366 579h181l-453 -692z" /> +<glyph unicode="Y" horiz-adv-x="1147" d="M573 731l390 731h184l-488 -895v-567h-172v559l-487 903h186z" /> +<glyph unicode="Z" horiz-adv-x="1169" d="M1087 0h-1005v133l776 1176h-752v153h959v-133l-776 -1175h798v-154z" /> +<glyph unicode="[" horiz-adv-x="674" d="M623 -324h-457v1786h457v-141h-289v-1503h289v-142z" /> +<glyph unicode="\" horiz-adv-x="752" d="M186 1462l547 -1462h-166l-544 1462h163z" /> +<glyph unicode="]" horiz-adv-x="674" d="M51 -182h289v1503h-289v141h457v-1786h-457v142z" /> +<glyph unicode="^" horiz-adv-x="1110" d="M49 551l434 922h99l477 -922h-152l-372 745l-334 -745h-152z" /> +<glyph unicode="_" horiz-adv-x="918" d="M922 -315h-926v131h926v-131z" /> +<glyph unicode="`" horiz-adv-x="1182" d="M786 1241h-110q-65 52 -154 148t-129 159v21h203q32 -69 89 -159.5t101 -143.5v-25z" /> +<glyph unicode="a" horiz-adv-x="1139" d="M850 0l-33 156h-8q-82 -103 -163.5 -139.5t-203.5 -36.5q-163 0 -255.5 84t-92.5 239q0 332 531 348l186 6v68q0 129 -55.5 190.5t-177.5 61.5q-137 0 -310 -84l-51 127q81 44 177.5 69t193.5 25q196 0 290.5 -87t94.5 -279v-748h-123zM475 117q155 0 243.5 85t88.5 238 v99l-166 -7q-198 -7 -285.5 -61.5t-87.5 -169.5q0 -90 54.5 -137t152.5 -47z" /> +<glyph unicode="b" horiz-adv-x="1255" d="M686 1114q216 0 335.5 -147.5t119.5 -417.5t-120.5 -419.5t-334.5 -149.5q-107 0 -195.5 39.5t-148.5 121.5h-12l-35 -141h-119v1556h166v-378q0 -127 -8 -228h8q116 164 344 164zM662 975q-170 0 -245 -97.5t-75 -328.5t77 -330.5t247 -99.5q153 0 228 111.5t75 320.5 q0 214 -75 319t-232 105z" /> +<glyph unicode="c" horiz-adv-x="975" d="M614 -20q-238 0 -368.5 146.5t-130.5 414.5q0 275 132.5 425t377.5 150q79 0 158 -17t124 -40l-51 -141q-55 22 -120 36.5t-115 14.5q-334 0 -334 -426q0 -202 81.5 -310t241.5 -108q137 0 281 59v-147q-110 -57 -277 -57z" /> +<glyph unicode="d" horiz-adv-x="1255" d="M922 147h-9q-115 -167 -344 -167q-215 0 -334.5 147t-119.5 418t120 421t334 150q223 0 342 -162h13l-7 79l-4 77v446h166v-1556h-135zM590 119q170 0 246.5 92.5t76.5 298.5v35q0 233 -77.5 332.5t-247.5 99.5q-146 0 -223.5 -113.5t-77.5 -320.5q0 -210 77 -317 t226 -107z" /> +<glyph unicode="e" horiz-adv-x="1149" d="M639 -20q-243 0 -383.5 148t-140.5 411q0 265 130.5 421t350.5 156q206 0 326 -135.5t120 -357.5v-105h-755q5 -193 97.5 -293t260.5 -100q177 0 350 74v-148q-88 -38 -166.5 -54.5t-189.5 -16.5zM594 977q-132 0 -210.5 -86t-92.5 -238h573q0 157 -70 240.5t-200 83.5z " /> +<glyph unicode="f" horiz-adv-x="694" d="M670 967h-279v-967h-166v967h-196v75l196 60v61q0 404 353 404q87 0 204 -35l-43 -133q-96 31 -164 31q-94 0 -139 -62.5t-45 -200.5v-71h279v-129z" /> +<glyph unicode="g" horiz-adv-x="1122" d="M1073 1096v-105l-203 -24q28 -35 50 -91.5t22 -127.5q0 -161 -110 -257t-302 -96q-49 0 -92 8q-106 -56 -106 -141q0 -45 37 -66.5t127 -21.5h194q178 0 273.5 -75t95.5 -218q0 -182 -146 -277.5t-426 -95.5q-215 0 -331.5 80t-116.5 226q0 100 64 173t180 99 q-42 19 -70.5 59t-28.5 93q0 60 32 105t101 87q-85 35 -138.5 119t-53.5 192q0 180 108 277.5t306 97.5q86 0 155 -20h379zM199 -184q0 -89 75 -135t215 -46q209 0 309.5 62.5t100.5 169.5q0 89 -55 123.5t-207 34.5h-199q-113 0 -176 -54t-63 -155zM289 745q0 -115 65 -174 t181 -59q243 0 243 236q0 247 -246 247q-117 0 -180 -63t-63 -187z" /> +<glyph unicode="h" horiz-adv-x="1257" d="M926 0v709q0 134 -61 200t-191 66q-173 0 -252.5 -94t-79.5 -308v-573h-166v1556h166v-471q0 -85 -8 -141h10q49 79 139.5 124.5t206.5 45.5q201 0 301.5 -95.5t100.5 -303.5v-715h-166z" /> +<glyph unicode="i" horiz-adv-x="518" d="M342 0h-166v1096h166v-1096zM162 1393q0 57 28 83.5t70 26.5q40 0 69 -27t29 -83t-29 -83.5t-69 -27.5q-42 0 -70 27.5t-28 83.5z" /> +<glyph unicode="j" horiz-adv-x="518" d="M43 -492q-95 0 -154 25v135q69 -20 136 -20q78 0 114.5 42.5t36.5 129.5v1276h166v-1264q0 -324 -299 -324zM162 1393q0 57 28 83.5t70 26.5q40 0 69 -27t29 -83t-29 -83.5t-69 -27.5q-42 0 -70 27.5t-28 83.5z" /> +<glyph unicode="k" horiz-adv-x="1075" d="M340 561q43 61 131 160l354 375h197l-444 -467l475 -629h-201l-387 518l-125 -108v-410h-164v1556h164v-825q0 -55 -8 -170h8z" /> +<glyph unicode="l" horiz-adv-x="518" d="M342 0h-166v1556h166v-1556z" /> +<glyph unicode="m" horiz-adv-x="1905" d="M1573 0v713q0 131 -56 196.5t-174 65.5q-155 0 -229 -89t-74 -274v-612h-166v713q0 131 -56 196.5t-175 65.5q-156 0 -228.5 -93.5t-72.5 -306.5v-575h-166v1096h135l27 -150h8q47 80 132.5 125t191.5 45q257 0 336 -186h8q49 86 142 136t212 50q186 0 278.5 -95.5 t92.5 -305.5v-715h-166z" /> +<glyph unicode="n" horiz-adv-x="1257" d="M926 0v709q0 134 -61 200t-191 66q-172 0 -252 -93t-80 -307v-575h-166v1096h135l27 -150h8q51 81 143 125.5t205 44.5q198 0 298 -95.5t100 -305.5v-715h-166z" /> +<glyph unicode="o" horiz-adv-x="1237" d="M1122 549q0 -268 -135 -418.5t-373 -150.5q-147 0 -261 69t-176 198t-62 302q0 268 134 417.5t372 149.5q230 0 365.5 -153t135.5 -414zM287 549q0 -210 84 -320t247 -110t247.5 109.5t84.5 320.5q0 209 -84.5 317.5t-249.5 108.5q-163 0 -246 -107t-83 -319z" /> +<glyph unicode="p" horiz-adv-x="1255" d="M686 -20q-107 0 -195.5 39.5t-148.5 121.5h-12q12 -96 12 -182v-451h-166v1588h135l23 -150h8q64 90 149 130t195 40q218 0 336.5 -149t118.5 -418q0 -270 -120.5 -419.5t-334.5 -149.5zM662 975q-168 0 -243 -93t-77 -296v-37q0 -231 77 -330.5t247 -99.5 q142 0 222.5 115t80.5 317q0 205 -80.5 314.5t-226.5 109.5z" /> +<glyph unicode="q" horiz-adv-x="1255" d="M590 119q166 0 242 89t81 300v37q0 230 -78 331t-247 101q-146 0 -223.5 -113.5t-77.5 -320.5t76.5 -315.5t226.5 -108.5zM565 -20q-212 0 -331 149t-119 416q0 269 120 420t334 151q225 0 346 -170h9l24 150h131v-1588h-166v469q0 100 11 170h-13q-115 -167 -346 -167z " /> +<glyph unicode="r" horiz-adv-x="836" d="M676 1116q73 0 131 -12l-23 -154q-68 15 -120 15q-133 0 -227.5 -108t-94.5 -269v-588h-166v1096h137l19 -203h8q61 107 147 165t189 58z" /> +<glyph unicode="s" horiz-adv-x="977" d="M883 299q0 -153 -114 -236t-320 -83q-218 0 -340 69v154q79 -40 169.5 -63t174.5 -23q130 0 200 41.5t70 126.5q0 64 -55.5 109.5t-216.5 107.5q-153 57 -217.5 99.5t-96 96.5t-31.5 129q0 134 109 211.5t299 77.5q177 0 346 -72l-59 -135q-165 68 -299 68 q-118 0 -178 -37t-60 -102q0 -44 22.5 -75t72.5 -59t192 -81q195 -71 263.5 -143t68.5 -181z" /> +<glyph unicode="t" horiz-adv-x="723" d="M530 117q44 0 85 6.5t65 13.5v-127q-27 -13 -79.5 -21.5t-94.5 -8.5q-318 0 -318 335v652h-157v80l157 69l70 234h96v-254h318v-129h-318v-645q0 -99 47 -152t129 -53z" /> +<glyph unicode="u" horiz-adv-x="1257" d="M332 1096v-711q0 -134 61 -200t191 -66q172 0 251.5 94t79.5 307v576h166v-1096h-137l-24 147h-9q-51 -81 -141.5 -124t-206.5 -43q-200 0 -299.5 95t-99.5 304v717h168z" /> +<glyph unicode="v" horiz-adv-x="1026" d="M416 0l-416 1096h178l236 -650q80 -228 94 -296h8q11 53 69.5 219.5t262.5 726.5h178l-416 -1096h-194z" /> +<glyph unicode="w" horiz-adv-x="1593" d="M1071 0l-201 643q-19 59 -71 268h-8q-40 -175 -70 -270l-207 -641h-192l-299 1096h174q106 -413 161.5 -629t63.5 -291h8q11 57 35.5 147.5t42.5 143.5l201 629h180l196 -629q56 -172 76 -289h8q4 36 21.5 111t208.5 807h172l-303 -1096h-197z" /> +<glyph unicode="x" horiz-adv-x="1073" d="M440 561l-381 535h189l289 -420l288 420h187l-381 -535l401 -561h-188l-307 444l-310 -444h-188z" /> +<glyph unicode="y" horiz-adv-x="1032" d="M2 1096h178l240 -625q79 -214 98 -309h8q13 51 54.5 174.5t271.5 759.5h178l-471 -1248q-70 -185 -163.5 -262.5t-229.5 -77.5q-76 0 -150 17v133q55 -12 123 -12q171 0 244 192l61 156z" /> +<glyph unicode="z" horiz-adv-x="958" d="M877 0h-795v113l598 854h-561v129h743v-129l-590 -838h605v-129z" /> +<glyph unicode="{" horiz-adv-x="776" d="M475 12q0 -102 58.5 -148t171.5 -48v-140q-190 2 -294 87t-104 239v303q0 104 -63 148.5t-183 44.5v141q130 2 188 48t58 142v306q0 155 108 241t290 86v-139q-230 -6 -230 -199v-295q0 -215 -223 -254v-12q223 -39 223 -254v-297z" /> +<glyph unicode="|" horiz-adv-x="1128" d="M494 1556h141v-2052h-141v2052z" /> +<glyph unicode="}" horiz-adv-x="776" d="M522 575q-223 39 -223 254v295q0 193 -227 199v139q184 0 289.5 -87t105.5 -240v-306q0 -97 59 -142.5t189 -47.5v-141q-122 0 -185 -44.5t-63 -148.5v-303q0 -153 -102.5 -238.5t-292.5 -87.5v140q111 2 169 48t58 148v297q0 114 55 174t168 80v12z" /> +<glyph unicode="~" d="M338 713q-53 0 -116.5 -33.5t-117.5 -87.5v151q100 109 244 109q68 0 124.5 -14t145.5 -52q66 -28 115 -41.5t96 -13.5q54 0 118 32t118 89v-150q-102 -110 -244 -110q-72 0 -135 16.5t-135 48.5q-75 32 -120 44t-93 12z" /> +<glyph unicode="¡" horiz-adv-x="547" d="M219 684h105l51 -1057h-207zM393 983q0 -135 -121 -135q-60 0 -90 35.5t-30 99.5q0 63 31.5 99t88.5 36q51 0 86 -32t35 -103z" /> +<glyph unicode="¢" d="M971 240q-105 -54 -252 -60v-200h-133v206q-203 32 -299.5 168.5t-96.5 386.5q0 508 396 570v172h135v-164q75 -3 146 -19.5t120 -39.5l-49 -140q-133 51 -242 51q-172 0 -253 -105.5t-81 -322.5q0 -212 79.5 -313.5t246.5 -101.5q141 0 283 59v-147z" /> +<glyph unicode="£" d="M682 1481q190 0 360 -84l-61 -133q-154 77 -297 77q-123 0 -185.5 -62t-62.5 -202v-295h422v-127h-422v-221q0 -100 -32.5 -168t-106.5 -112h795v-154h-1029v141q205 47 205 291v223h-198v127h198v316q0 178 112 280.5t302 102.5z" /> +<glyph unicode="¤" d="M184 723q0 122 74 229l-135 140l94 92l135 -133q104 73 234 73q127 0 229 -73l137 133l95 -92l-134 -138q74 -113 74 -231q0 -131 -74 -234l131 -135l-92 -92l-137 133q-102 -71 -229 -71q-134 0 -234 73l-135 -133l-92 92l133 136q-74 107 -74 231zM313 723 q0 -112 78.5 -192t194.5 -80t195 79.5t79 192.5q0 114 -80 195t-194 81q-116 0 -194.5 -82t-78.5 -194z" /> +<glyph unicode="¥" d="M584 735l379 727h174l-416 -770h262v-127h-317v-170h317v-127h-317v-268h-164v268h-316v127h316v170h-316v127h256l-411 770h178z" /> +<glyph unicode="¦" horiz-adv-x="1128" d="M494 1556h141v-776h-141v776zM494 281h141v-777h-141v777z" /> +<glyph unicode="§" horiz-adv-x="1057" d="M139 809q0 86 43 154.5t121 105.5q-74 40 -116 95.5t-42 140.5q0 121 103.5 190.5t300.5 69.5q94 0 173.5 -14.5t176.5 -53.5l-53 -131q-98 39 -165.5 52.5t-143.5 13.5q-116 0 -174 -29.5t-58 -93.5q0 -60 61.5 -102t215.5 -97q186 -68 261 -143.5t75 -182.5 q0 -90 -41 -160.5t-115 -111.5q153 -81 153 -227q0 -140 -117 -216.5t-329 -76.5q-218 0 -346 65v148q78 -37 175 -59.5t179 -22.5q134 0 204.5 38t70.5 109q0 46 -24 75t-78 58t-169 72q-142 52 -209 97t-100 102t-33 135zM285 829q0 -77 66 -129.5t233 -113.5l49 -19 q137 80 137 191q0 83 -73.5 139t-258.5 113q-68 -19 -110.5 -69t-42.5 -112z" /> +<glyph unicode="¨" horiz-adv-x="1182" d="M309 1393q0 52 26.5 75t63.5 23q38 0 65.5 -23t27.5 -75q0 -50 -27.5 -74.5t-65.5 -24.5q-37 0 -63.5 24.5t-26.5 74.5zM690 1393q0 52 26.5 75t63.5 23t64.5 -23t27.5 -75q0 -50 -27.5 -74.5t-64.5 -24.5t-63.5 24.5t-26.5 74.5z" /> +<glyph unicode="©" horiz-adv-x="1704" d="M893 1059q-125 0 -192.5 -87t-67.5 -241q0 -168 63.5 -249t194.5 -81q86 0 211 45v-124q-48 -20 -98.5 -34t-120.5 -14q-194 0 -298 120.5t-104 336.5q0 209 110.5 332t301.5 123q128 0 246 -60l-58 -118q-108 51 -188 51zM100 731q0 200 100 375t275 276t377 101 q200 0 375 -100t276 -275t101 -377q0 -197 -97 -370t-272 -277t-383 -104q-207 0 -382 103.5t-272.5 276.5t-97.5 371zM205 731q0 -173 87 -323.5t237.5 -237t322.5 -86.5q174 0 323 87t236.5 235.5t87.5 324.5q0 174 -87 323t-235.5 236.5t-324.5 87.5q-174 0 -323 -87 t-236.5 -235.5t-87.5 -324.5z" /> +<glyph unicode="ª" horiz-adv-x="725" d="M532 801l-24 84q-92 -97 -232 -97q-95 0 -150.5 49.5t-55.5 151.5t77 154.5t242 58.5l117 4v39q0 133 -148 133q-100 0 -204 -51l-43 96q114 56 247 56q130 0 198.5 -52.5t68.5 -173.5v-452h-93zM193 989q0 -100 112 -100q201 0 201 180v49l-98 -4q-112 -4 -163.5 -32.5 t-51.5 -92.5z" /> +<glyph unicode="«" horiz-adv-x="1018" d="M82 551l342 407l119 -69l-289 -350l289 -351l-119 -71l-342 407v27zM477 551l344 407l117 -69l-287 -350l287 -351l-117 -71l-344 407v27z" /> +<glyph unicode="¬" d="M1065 791v-527h-137v389h-824v138h961z" /> +<glyph unicode="­" horiz-adv-x="659" d="M84 473zM84 473v152h491v-152h-491z" /> +<glyph unicode="®" horiz-adv-x="1704" d="M723 762h108q80 0 128.5 41.5t48.5 105.5q0 75 -43 107.5t-136 32.5h-106v-287zM1157 913q0 -80 -42.5 -141.5t-119.5 -91.5l238 -395h-168l-207 354h-135v-354h-148v891h261q166 0 243.5 -65t77.5 -198zM100 731q0 200 100 375t275 276t377 101q200 0 375 -100t276 -275 t101 -377q0 -197 -97 -370t-272 -277t-383 -104q-207 0 -382 103.5t-272.5 276.5t-97.5 371zM205 731q0 -173 87 -323.5t237.5 -237t322.5 -86.5q174 0 323 87t236.5 235.5t87.5 324.5q0 174 -87 323t-235.5 236.5t-324.5 87.5q-174 0 -323 -87t-236.5 -235.5t-87.5 -324.5z " /> +<glyph unicode="¯" horiz-adv-x="1024" d="M1030 1556h-1036v127h1036v-127z" /> +<glyph unicode="°" horiz-adv-x="877" d="M127 1171q0 130 90.5 221t220.5 91t221 -90.5t91 -221.5q0 -84 -41 -155.5t-114 -113.5t-157 -42q-130 0 -220.5 90t-90.5 221zM242 1171q0 -82 58.5 -139t139.5 -57q80 0 137.5 56.5t57.5 139.5q0 84 -56.5 140.5t-138.5 56.5q-83 0 -140.5 -57t-57.5 -140z" /> +<glyph unicode="±" d="M104 1zM653 791h412v-138h-412v-426h-139v426h-410v138h410v428h139v-428zM104 1v138h961v-138h-961z" /> +<glyph unicode="²" horiz-adv-x="711" d="M653 586h-604v104l236 230q89 86 130 134.5t57.5 86.5t16.5 92q0 68 -40 102.5t-103 34.5q-52 0 -101 -19t-118 -69l-66 88q131 111 283 111q132 0 205.5 -65t73.5 -177q0 -80 -44.5 -155.5t-191.5 -213.5l-174 -165h440v-119z" /> +<glyph unicode="³" horiz-adv-x="711" d="M627 1255q0 -80 -41 -131.5t-109 -74.5q176 -47 176 -209q0 -128 -92 -199.5t-260 -71.5q-152 0 -268 56v123q147 -68 270 -68q211 0 211 162q0 145 -231 145h-117v107h119q103 0 152.5 39.5t49.5 107.5q0 61 -40 95t-107 34q-66 0 -122 -21.5t-112 -56.5l-69 90 q63 45 133 72t164 27q136 0 214.5 -59.5t78.5 -166.5z" /> +<glyph unicode="´" horiz-adv-x="1182" d="M393 1266q48 62 103.5 150t87.5 153h202v-21q-44 -65 -131 -160t-151 -147h-111v25z" /> +<glyph unicode="µ" horiz-adv-x="1268" d="M342 381q0 -262 254 -262q171 0 250.5 94.5t79.5 306.5v576h166v-1096h-136l-26 147h-10q-111 -167 -340 -167q-150 0 -238 92h-10q10 -84 10 -244v-320h-166v1588h166v-715z" /> +<glyph unicode="¶" horiz-adv-x="1341" d="M1120 -260h-114v1712h-213v-1712h-115v819q-62 -18 -146 -18q-216 0 -317.5 125t-101.5 376q0 260 109 387t341 127h557v-1816z" /> +<glyph unicode="·" horiz-adv-x="545" d="M152 723q0 66 31 100.5t87 34.5q58 0 90.5 -34.5t32.5 -100.5q0 -65 -33 -100t-90 -35q-51 0 -84.5 31.5t-33.5 103.5z" /> +<glyph unicode="¸" horiz-adv-x="465" d="M436 -289q0 -97 -76.5 -150t-226.5 -53q-51 0 -96 9v106q45 -8 104 -8q79 0 119.5 20t40.5 74q0 43 -39.5 69.5t-148.5 43.5l88 178h110l-55 -115q180 -39 180 -174z" /> +<glyph unicode="¹" horiz-adv-x="711" d="M338 1462h143v-876h-133v579q0 91 6 181q-22 -22 -49 -44.5t-162 -117.5l-67 96z" /> +<glyph unicode="º" horiz-adv-x="768" d="M702 1135q0 -164 -85.5 -255.5t-235.5 -91.5q-146 0 -230.5 93t-84.5 254q0 163 84 253.5t235 90.5q152 0 234.5 -91t82.5 -253zM188 1135q0 -122 45.5 -183t149.5 -61q105 0 151 61t46 183q0 123 -46 182t-151 59q-103 0 -149 -59t-46 -182z" /> +<glyph unicode="»" horiz-adv-x="1018" d="M936 524l-344 -407l-117 71l287 351l-287 350l117 69l344 -407v-27zM541 524l-344 -407l-117 71l287 351l-287 350l117 69l344 -407v-27z" /> +<glyph unicode="¼" horiz-adv-x="1597" d="M75 0zM1298 1462l-903 -1462h-143l903 1462h143zM337 1462h143v-876h-133v579q0 91 6 181q-22 -22 -49 -44.5t-162 -117.5l-67 96zM1489 203h-125v-202h-145v202h-402v101l408 579h139v-563h125v-117zM1219 320v195q0 134 6 209q-5 -12 -17 -31.5t-27 -42l-30 -45 t-26 -39.5l-168 -246h262z" /> +<glyph unicode="½" horiz-adv-x="1597" d="M46 0zM1230 1462l-903 -1462h-143l903 1462h143zM308 1462h143v-876h-133v579q0 91 6 181q-22 -22 -49 -44.5t-162 -117.5l-67 96zM1499 1h-604v104l236 230q89 86 130 134.5t57.5 86.5t16.5 92q0 68 -40 102.5t-103 34.5q-52 0 -101 -19t-118 -69l-66 88 q131 111 283 111q132 0 205.5 -65t73.5 -177q0 -80 -44.5 -155.5t-191.5 -213.5l-174 -165h440v-119z" /> +<glyph unicode="¾" horiz-adv-x="1597" d="M26 0zM620 1255q0 -80 -41 -131.5t-109 -74.5q176 -47 176 -209q0 -128 -92 -199.5t-260 -71.5q-152 0 -268 56v123q147 -68 270 -68q211 0 211 162q0 145 -231 145h-117v107h119q103 0 152.5 39.5t49.5 107.5q0 61 -40 95t-107 34q-66 0 -122 -21.5t-112 -56.5l-69 90 q63 45 133 72t164 27q136 0 214.5 -59.5t78.5 -166.5zM1390 1462l-903 -1462h-143l903 1462h143zM1569 203h-125v-202h-145v202h-402v101l408 579h139v-563h125v-117zM1299 320v195q0 134 6 209q-5 -12 -17 -31.5t-27 -42l-30 -45t-26 -39.5l-168 -246h262z" /> +<glyph unicode="¿" horiz-adv-x="879" d="M590 684v-51q0 -122 -37.5 -196t-134.5 -158q-121 -106 -151.5 -143.5t-43 -76t-12.5 -94.5q0 -100 66 -156.5t188 -56.5q80 0 155 19t173 67l59 -135q-197 -96 -395 -96q-190 0 -298 93t-108 263q0 70 17.5 122.5t49.5 97t76.5 85.5t98.5 88q101 88 133.5 146t32.5 151 v31h131zM639 983q0 -135 -121 -135q-59 0 -90 34.5t-31 100.5q0 64 33 99.5t88 35.5q51 0 86 -32t35 -103z" /> +<glyph unicode="À" horiz-adv-x="1296" d="M0 0zM1120 0l-182 465h-586l-180 -465h-172l578 1468h143l575 -1468h-176zM885 618l-170 453q-33 86 -68 211q-22 -96 -63 -211l-172 -453h473zM724 1579h-110q-65 52 -154 148t-129 159v21h203q32 -69 89 -159.5t101 -143.5v-25z" /> +<glyph unicode="Á" horiz-adv-x="1296" d="M0 0zM1120 0l-182 465h-586l-180 -465h-172l578 1468h143l575 -1468h-176zM885 618l-170 453q-33 86 -68 211q-22 -96 -63 -211l-172 -453h473zM526 1604q48 62 103.5 150t87.5 153h202v-21q-44 -65 -131 -160t-151 -147h-111v25z" /> +<glyph unicode="Â" horiz-adv-x="1296" d="M0 0zM1120 0l-182 465h-586l-180 -465h-172l578 1468h143l575 -1468h-176zM885 618l-170 453q-33 86 -68 211q-22 -96 -63 -211l-172 -453h473zM303 1602q127 136 178 200t74 105h166q22 -42 76.5 -108.5t179.5 -196.5v-23h-119q-88 55 -221 186q-136 -134 -219 -186 h-115v23z" /> +<glyph unicode="Ã" horiz-adv-x="1296" d="M0 0zM1120 0l-182 465h-586l-180 -465h-172l578 1468h143l575 -1468h-176zM885 618l-170 453q-33 86 -68 211q-22 -96 -63 -211l-172 -453h473zM792 1581q-43 0 -84 18.5t-80.5 41t-76 41t-70.5 18.5q-50 0 -75.5 -30t-39.5 -91h-98q13 121 70.5 189.5t148.5 68.5 q46 0 89 -18.5t82 -41t75 -41t68 -18.5q49 0 73 29.5t39 91.5h99q-13 -121 -69.5 -189.5t-150.5 -68.5z" /> +<glyph unicode="Ä" horiz-adv-x="1296" d="M0 0zM1120 0l-182 465h-586l-180 -465h-172l578 1468h143l575 -1468h-176zM885 618l-170 453q-33 86 -68 211q-22 -96 -63 -211l-172 -453h473zM364 1731q0 52 26.5 75t63.5 23q38 0 65.5 -23t27.5 -75q0 -50 -27.5 -74.5t-65.5 -24.5q-37 0 -63.5 24.5t-26.5 74.5z M745 1731q0 52 26.5 75t63.5 23t64.5 -23t27.5 -75q0 -50 -27.5 -74.5t-64.5 -24.5t-63.5 24.5t-26.5 74.5z" /> +<glyph unicode="Å" horiz-adv-x="1296" d="M0 0zM1120 0l-182 465h-586l-180 -465h-172l578 1468h143l575 -1468h-176zM885 618l-170 453q-33 86 -68 211q-22 -96 -63 -211l-172 -453h473zM870 1587q0 -98 -61.5 -157.5t-163.5 -59.5q-101 0 -161 58.5t-60 156.5t60.5 155.5t160.5 57.5q101 0 163 -59.5t62 -151.5z M762 1585q0 56 -33 86.5t-84 30.5t-84 -30.5t-33 -86.5t30 -86.5t87 -30.5q52 0 84.5 30.5t32.5 86.5z" /> +<glyph unicode="Æ" horiz-adv-x="1788" d="M1665 0h-750v465h-514l-227 -465h-176l698 1462h969v-151h-580v-471h541v-150h-541v-538h580v-152zM469 618h446v693h-118z" /> +<glyph unicode="Ç" horiz-adv-x="1292" d="M125 0zM827 1331q-241 0 -380.5 -160.5t-139.5 -439.5q0 -287 134.5 -443.5t383.5 -156.5q153 0 349 55v-149q-152 -57 -375 -57q-323 0 -498.5 196t-175.5 557q0 226 84.5 396t244 262t375.5 92q230 0 402 -84l-72 -146q-166 78 -332 78zM950 -289q0 -97 -76.5 -150 t-226.5 -53q-51 0 -96 9v106q45 -8 104 -8q79 0 119.5 20t40.5 74q0 43 -39.5 69.5t-148.5 43.5l88 178h110l-55 -115q180 -39 180 -174z" /> +<glyph unicode="È" horiz-adv-x="1139" d="M201 0zM1016 0h-815v1462h815v-151h-645v-471h606v-150h-606v-538h645v-152zM713 1579h-110q-65 52 -154 148t-129 159v21h203q32 -69 89 -159.5t101 -143.5v-25z" /> +<glyph unicode="É" horiz-adv-x="1139" d="M201 0zM1016 0h-815v1462h815v-151h-645v-471h606v-150h-606v-538h645v-152zM456 1604q48 62 103.5 150t87.5 153h202v-21q-44 -65 -131 -160t-151 -147h-111v25z" /> +<glyph unicode="Ê" horiz-adv-x="1139" d="M201 0zM1016 0h-815v1462h815v-151h-645v-471h606v-150h-606v-538h645v-152zM263 1602q127 136 178 200t74 105h166q22 -42 76.5 -108.5t179.5 -196.5v-23h-119q-88 55 -221 186q-136 -134 -219 -186h-115v23z" /> +<glyph unicode="Ë" horiz-adv-x="1139" d="M201 0zM1016 0h-815v1462h815v-151h-645v-471h606v-150h-606v-538h645v-152zM327 1731q0 52 26.5 75t63.5 23q38 0 65.5 -23t27.5 -75q0 -50 -27.5 -74.5t-65.5 -24.5q-37 0 -63.5 24.5t-26.5 74.5zM708 1731q0 52 26.5 75t63.5 23t64.5 -23t27.5 -75q0 -50 -27.5 -74.5 t-64.5 -24.5t-63.5 24.5t-26.5 74.5z" /> +<glyph unicode="Ì" horiz-adv-x="571" d="M5 0zM201 0v1462h170v-1462h-170zM398 1579h-110q-65 52 -154 148t-129 159v21h203q32 -69 89 -159.5t101 -143.5v-25z" /> +<glyph unicode="Í" horiz-adv-x="571" d="M179 0zM201 0v1462h170v-1462h-170zM179 1604q48 62 103.5 150t87.5 153h202v-21q-44 -65 -131 -160t-151 -147h-111v25z" /> +<glyph unicode="Î" horiz-adv-x="571" d="M0 0zM201 0v1462h170v-1462h-170zM-57 1602q127 136 178 200t74 105h166q22 -42 76.5 -108.5t179.5 -196.5v-23h-119q-88 55 -221 186q-136 -134 -219 -186h-115v23z" /> +<glyph unicode="Ï" horiz-adv-x="571" d="M5 0zM201 0v1462h170v-1462h-170zM5 1731q0 52 26.5 75t63.5 23q38 0 65.5 -23t27.5 -75q0 -50 -27.5 -74.5t-65.5 -24.5q-37 0 -63.5 24.5t-26.5 74.5zM386 1731q0 52 26.5 75t63.5 23t64.5 -23t27.5 -75q0 -50 -27.5 -74.5t-64.5 -24.5t-63.5 24.5t-26.5 74.5z" /> +<glyph unicode="Ð" horiz-adv-x="1479" d="M1352 745q0 -362 -196.5 -553.5t-565.5 -191.5h-389v649h-154v150h154v663h434q337 0 527 -187.5t190 -529.5zM1171 739q0 576 -569 576h-231v-516h379v-150h-379v-502h190q610 0 610 592z" /> +<glyph unicode="Ñ" horiz-adv-x="1544" d="M201 0zM1343 0h-194l-799 1227h-8q16 -216 16 -396v-831h-157v1462h192l797 -1222h8q-2 27 -9 173.5t-5 209.5v839h159v-1462zM935 1581q-43 0 -84 18.5t-80.5 41t-76 41t-70.5 18.5q-50 0 -75.5 -30t-39.5 -91h-98q13 121 70.5 189.5t148.5 68.5q46 0 89 -18.5t82 -41 t75 -41t68 -18.5q49 0 73 29.5t39 91.5h99q-13 -121 -69.5 -189.5t-150.5 -68.5z" /> +<glyph unicode="Ò" horiz-adv-x="1595" d="M125 0zM1470 733q0 -351 -177.5 -552t-493.5 -201q-323 0 -498.5 197.5t-175.5 557.5q0 357 176 553.5t500 196.5q315 0 492 -200t177 -552zM305 733q0 -297 126.5 -450.5t367.5 -153.5q243 0 367 153t124 451q0 295 -123.5 447.5t-365.5 152.5q-243 0 -369.5 -153.5 t-126.5 -446.5zM907 1579h-110q-65 52 -154 148t-129 159v21h203q32 -69 89 -159.5t101 -143.5v-25z" /> +<glyph unicode="Ó" horiz-adv-x="1595" d="M125 0zM1470 733q0 -351 -177.5 -552t-493.5 -201q-323 0 -498.5 197.5t-175.5 557.5q0 357 176 553.5t500 196.5q315 0 492 -200t177 -552zM305 733q0 -297 126.5 -450.5t367.5 -153.5q243 0 367 153t124 451q0 295 -123.5 447.5t-365.5 152.5q-243 0 -369.5 -153.5 t-126.5 -446.5zM659 1604q48 62 103.5 150t87.5 153h202v-21q-44 -65 -131 -160t-151 -147h-111v25z" /> +<glyph unicode="Ô" horiz-adv-x="1595" d="M125 0zM1470 733q0 -351 -177.5 -552t-493.5 -201q-323 0 -498.5 197.5t-175.5 557.5q0 357 176 553.5t500 196.5q315 0 492 -200t177 -552zM305 733q0 -297 126.5 -450.5t367.5 -153.5q243 0 367 153t124 451q0 295 -123.5 447.5t-365.5 152.5q-243 0 -369.5 -153.5 t-126.5 -446.5zM448 1602q127 136 178 200t74 105h166q22 -42 76.5 -108.5t179.5 -196.5v-23h-119q-88 55 -221 186q-136 -134 -219 -186h-115v23z" /> +<glyph unicode="Õ" horiz-adv-x="1595" d="M125 0zM1470 733q0 -351 -177.5 -552t-493.5 -201q-323 0 -498.5 197.5t-175.5 557.5q0 357 176 553.5t500 196.5q315 0 492 -200t177 -552zM305 733q0 -297 126.5 -450.5t367.5 -153.5q243 0 367 153t124 451q0 295 -123.5 447.5t-365.5 152.5q-243 0 -369.5 -153.5 t-126.5 -446.5zM942 1581q-43 0 -84 18.5t-80.5 41t-76 41t-70.5 18.5q-50 0 -75.5 -30t-39.5 -91h-98q13 121 70.5 189.5t148.5 68.5q46 0 89 -18.5t82 -41t75 -41t68 -18.5q49 0 73 29.5t39 91.5h99q-13 -121 -69.5 -189.5t-150.5 -68.5z" /> +<glyph unicode="Ö" horiz-adv-x="1595" d="M125 0zM1470 733q0 -351 -177.5 -552t-493.5 -201q-323 0 -498.5 197.5t-175.5 557.5q0 357 176 553.5t500 196.5q315 0 492 -200t177 -552zM305 733q0 -297 126.5 -450.5t367.5 -153.5q243 0 367 153t124 451q0 295 -123.5 447.5t-365.5 152.5q-243 0 -369.5 -153.5 t-126.5 -446.5zM522 1731q0 52 26.5 75t63.5 23q38 0 65.5 -23t27.5 -75q0 -50 -27.5 -74.5t-65.5 -24.5q-37 0 -63.5 24.5t-26.5 74.5zM903 1731q0 52 26.5 75t63.5 23t64.5 -23t27.5 -75q0 -50 -27.5 -74.5t-64.5 -24.5t-63.5 24.5t-26.5 74.5z" /> +<glyph unicode="×" d="M940 1176l96 -99l-352 -354l350 -352l-96 -99l-354 351l-348 -351l-101 99l350 352l-352 352l100 101l353 -355z" /> +<glyph unicode="Ø" horiz-adv-x="1595" d="M1470 733q0 -351 -177.5 -552t-493.5 -201q-235 0 -383 100l-101 -141l-120 79l108 154q-178 198 -178 563q0 357 176 553.5t500 196.5q209 0 366 -94l97 135l120 -80l-106 -148q192 -202 192 -565zM1290 733q0 272 -110 426l-672 -948q115 -82 291 -82q243 0 367 153 t124 451zM305 733q0 -262 101 -416l669 943q-106 73 -274 73q-243 0 -369.5 -153.5t-126.5 -446.5z" /> +<glyph unicode="Ù" horiz-adv-x="1491" d="M186 0zM1305 1462v-946q0 -250 -151 -393t-415 -143t-408.5 144t-144.5 396v942h170v-954q0 -183 100 -281t294 -98q185 0 285 98.5t100 282.5v952h170zM856 1579h-110q-65 52 -154 148t-129 159v21h203q32 -69 89 -159.5t101 -143.5v-25z" /> +<glyph unicode="Ú" horiz-adv-x="1491" d="M186 0zM1305 1462v-946q0 -250 -151 -393t-415 -143t-408.5 144t-144.5 396v942h170v-954q0 -183 100 -281t294 -98q185 0 285 98.5t100 282.5v952h170zM600 1604q48 62 103.5 150t87.5 153h202v-21q-44 -65 -131 -160t-151 -147h-111v25z" /> +<glyph unicode="Û" horiz-adv-x="1491" d="M186 0zM1305 1462v-946q0 -250 -151 -393t-415 -143t-408.5 144t-144.5 396v942h170v-954q0 -183 100 -281t294 -98q185 0 285 98.5t100 282.5v952h170zM393 1602q127 136 178 200t74 105h166q22 -42 76.5 -108.5t179.5 -196.5v-23h-119q-88 55 -221 186 q-136 -134 -219 -186h-115v23z" /> +<glyph unicode="Ü" horiz-adv-x="1491" d="M186 0zM1305 1462v-946q0 -250 -151 -393t-415 -143t-408.5 144t-144.5 396v942h170v-954q0 -183 100 -281t294 -98q185 0 285 98.5t100 282.5v952h170zM461 1731q0 52 26.5 75t63.5 23q38 0 65.5 -23t27.5 -75q0 -50 -27.5 -74.5t-65.5 -24.5q-37 0 -63.5 24.5 t-26.5 74.5zM842 1731q0 52 26.5 75t63.5 23t64.5 -23t27.5 -75q0 -50 -27.5 -74.5t-64.5 -24.5t-63.5 24.5t-26.5 74.5z" /> +<glyph unicode="Ý" horiz-adv-x="1147" d="M0 0zM573 731l390 731h184l-488 -895v-567h-172v559l-487 903h186zM442 1604q48 62 103.5 150t87.5 153h202v-21q-44 -65 -131 -160t-151 -147h-111v25z" /> +<glyph unicode="Þ" horiz-adv-x="1251" d="M1145 784q0 -227 -151.5 -346t-438.5 -119h-184v-319h-170v1462h170v-256h215q281 0 420 -103.5t139 -318.5zM371 465h168q226 0 327 71.5t101 235.5q0 149 -95 218t-297 69h-204v-594z" /> +<glyph unicode="ß" horiz-adv-x="1274" d="M1049 1266q0 -135 -143 -250q-88 -70 -116 -103.5t-28 -66.5q0 -32 13.5 -53t49 -49.5t113.5 -79.5q140 -95 191 -173.5t51 -179.5q0 -160 -97 -245.5t-276 -85.5q-188 0 -295 69v154q63 -39 141 -62.5t150 -23.5q215 0 215 182q0 75 -41.5 128.5t-151.5 123.5 q-127 82 -175 143.5t-48 145.5q0 63 34.5 116t105.5 106q75 57 107 102t32 98q0 80 -68 122.5t-195 42.5q-276 0 -276 -223v-1204h-166v1202q0 178 110 271.5t332 93.5q206 0 318.5 -78.5t112.5 -222.5z" /> +<glyph unicode="à" horiz-adv-x="1139" d="M94 0zM850 0l-33 156h-8q-82 -103 -163.5 -139.5t-203.5 -36.5q-163 0 -255.5 84t-92.5 239q0 332 531 348l186 6v68q0 129 -55.5 190.5t-177.5 61.5q-137 0 -310 -84l-51 127q81 44 177.5 69t193.5 25q196 0 290.5 -87t94.5 -279v-748h-123zM475 117q155 0 243.5 85 t88.5 238v99l-166 -7q-198 -7 -285.5 -61.5t-87.5 -169.5q0 -90 54.5 -137t152.5 -47zM672 1241h-110q-65 52 -154 148t-129 159v21h203q32 -69 89 -159.5t101 -143.5v-25z" /> +<glyph unicode="á" horiz-adv-x="1139" d="M94 0zM850 0l-33 156h-8q-82 -103 -163.5 -139.5t-203.5 -36.5q-163 0 -255.5 84t-92.5 239q0 332 531 348l186 6v68q0 129 -55.5 190.5t-177.5 61.5q-137 0 -310 -84l-51 127q81 44 177.5 69t193.5 25q196 0 290.5 -87t94.5 -279v-748h-123zM475 117q155 0 243.5 85 t88.5 238v99l-166 -7q-198 -7 -285.5 -61.5t-87.5 -169.5q0 -90 54.5 -137t152.5 -47zM436 1266q48 62 103.5 150t87.5 153h202v-21q-44 -65 -131 -160t-151 -147h-111v25z" /> +<glyph unicode="â" horiz-adv-x="1139" d="M94 0zM850 0l-33 156h-8q-82 -103 -163.5 -139.5t-203.5 -36.5q-163 0 -255.5 84t-92.5 239q0 332 531 348l186 6v68q0 129 -55.5 190.5t-177.5 61.5q-137 0 -310 -84l-51 127q81 44 177.5 69t193.5 25q196 0 290.5 -87t94.5 -279v-748h-123zM475 117q155 0 243.5 85 t88.5 238v99l-166 -7q-198 -7 -285.5 -61.5t-87.5 -169.5q0 -90 54.5 -137t152.5 -47zM228 1264q127 136 178 200t74 105h166q22 -42 76.5 -108.5t179.5 -196.5v-23h-119q-88 55 -221 186q-136 -134 -219 -186h-115v23z" /> +<glyph unicode="ã" horiz-adv-x="1139" d="M94 0zM850 0l-33 156h-8q-82 -103 -163.5 -139.5t-203.5 -36.5q-163 0 -255.5 84t-92.5 239q0 332 531 348l186 6v68q0 129 -55.5 190.5t-177.5 61.5q-137 0 -310 -84l-51 127q81 44 177.5 69t193.5 25q196 0 290.5 -87t94.5 -279v-748h-123zM475 117q155 0 243.5 85 t88.5 238v99l-166 -7q-198 -7 -285.5 -61.5t-87.5 -169.5q0 -90 54.5 -137t152.5 -47zM721 1243q-43 0 -84 18.5t-80.5 41t-76 41t-70.5 18.5q-50 0 -75.5 -30t-39.5 -91h-98q13 121 70.5 189.5t148.5 68.5q46 0 89 -18.5t82 -41t75 -41t68 -18.5q49 0 73 29.5t39 91.5h99 q-13 -121 -69.5 -189.5t-150.5 -68.5z" /> +<glyph unicode="ä" horiz-adv-x="1139" d="M94 0zM850 0l-33 156h-8q-82 -103 -163.5 -139.5t-203.5 -36.5q-163 0 -255.5 84t-92.5 239q0 332 531 348l186 6v68q0 129 -55.5 190.5t-177.5 61.5q-137 0 -310 -84l-51 127q81 44 177.5 69t193.5 25q196 0 290.5 -87t94.5 -279v-748h-123zM475 117q155 0 243.5 85 t88.5 238v99l-166 -7q-198 -7 -285.5 -61.5t-87.5 -169.5q0 -90 54.5 -137t152.5 -47zM279 1393q0 52 26.5 75t63.5 23q38 0 65.5 -23t27.5 -75q0 -50 -27.5 -74.5t-65.5 -24.5q-37 0 -63.5 24.5t-26.5 74.5zM660 1393q0 52 26.5 75t63.5 23t64.5 -23t27.5 -75 q0 -50 -27.5 -74.5t-64.5 -24.5t-63.5 24.5t-26.5 74.5z" /> +<glyph unicode="å" horiz-adv-x="1139" d="M94 0zM850 0l-33 156h-8q-82 -103 -163.5 -139.5t-203.5 -36.5q-163 0 -255.5 84t-92.5 239q0 332 531 348l186 6v68q0 129 -55.5 190.5t-177.5 61.5q-137 0 -310 -84l-51 127q81 44 177.5 69t193.5 25q196 0 290.5 -87t94.5 -279v-748h-123zM475 117q155 0 243.5 85 t88.5 238v99l-166 -7q-198 -7 -285.5 -61.5t-87.5 -169.5q0 -90 54.5 -137t152.5 -47zM804 1458q0 -98 -61.5 -157.5t-163.5 -59.5q-101 0 -161 58.5t-60 156.5t60.5 155.5t160.5 57.5q101 0 163 -59.5t62 -151.5zM696 1456q0 56 -33 86.5t-84 30.5t-84 -30.5t-33 -86.5 t30 -86.5t87 -30.5q52 0 84.5 30.5t32.5 86.5z" /> +<glyph unicode="æ" horiz-adv-x="1757" d="M94 303q0 161 124 250.5t378 97.5l184 6v68q0 129 -58 190.5t-177 61.5q-144 0 -307 -84l-52 127q74 41 173.5 67.5t197.5 26.5q130 0 212.5 -43.5t123.5 -138.5q53 88 138.5 136t195.5 48q192 0 308 -133.5t116 -355.5v-107h-701q8 -395 322 -395q91 0 169.5 17.5 t162.5 56.5v-148q-86 -38 -160.5 -54.5t-175.5 -16.5q-289 0 -414 233q-81 -127 -179.5 -180t-232.5 -53q-163 0 -255.5 85t-92.5 238zM268 301q0 -95 53.5 -139.5t141.5 -44.5q145 0 229 84.5t84 238.5v99l-158 -7q-186 -8 -268 -62.5t-82 -168.5zM1225 977 q-121 0 -190.5 -83t-80.5 -241h519q0 156 -64 240t-184 84z" /> +<glyph unicode="ç" horiz-adv-x="975" d="M115 0zM614 -20q-238 0 -368.5 146.5t-130.5 414.5q0 275 132.5 425t377.5 150q79 0 158 -17t124 -40l-51 -141q-55 22 -120 36.5t-115 14.5q-334 0 -334 -426q0 -202 81.5 -310t241.5 -108q137 0 281 59v-147q-110 -57 -277 -57zM762 -289q0 -97 -76.5 -150t-226.5 -53 q-51 0 -96 9v106q45 -8 104 -8q79 0 119.5 20t40.5 74q0 43 -39.5 69.5t-148.5 43.5l88 178h110l-55 -115q180 -39 180 -174z" /> +<glyph unicode="è" horiz-adv-x="1149" d="M115 0zM639 -20q-243 0 -383.5 148t-140.5 411q0 265 130.5 421t350.5 156q206 0 326 -135.5t120 -357.5v-105h-755q5 -193 97.5 -293t260.5 -100q177 0 350 74v-148q-88 -38 -166.5 -54.5t-189.5 -16.5zM594 977q-132 0 -210.5 -86t-92.5 -238h573q0 157 -70 240.5 t-200 83.5zM711 1241h-110q-65 52 -154 148t-129 159v21h203q32 -69 89 -159.5t101 -143.5v-25z" /> +<glyph unicode="é" horiz-adv-x="1149" d="M115 0zM639 -20q-243 0 -383.5 148t-140.5 411q0 265 130.5 421t350.5 156q206 0 326 -135.5t120 -357.5v-105h-755q5 -193 97.5 -293t260.5 -100q177 0 350 74v-148q-88 -38 -166.5 -54.5t-189.5 -16.5zM594 977q-132 0 -210.5 -86t-92.5 -238h573q0 157 -70 240.5 t-200 83.5zM471 1266q48 62 103.5 150t87.5 153h202v-21q-44 -65 -131 -160t-151 -147h-111v25z" /> +<glyph unicode="ê" horiz-adv-x="1149" d="M115 0zM639 -20q-243 0 -383.5 148t-140.5 411q0 265 130.5 421t350.5 156q206 0 326 -135.5t120 -357.5v-105h-755q5 -193 97.5 -293t260.5 -100q177 0 350 74v-148q-88 -38 -166.5 -54.5t-189.5 -16.5zM594 977q-132 0 -210.5 -86t-92.5 -238h573q0 157 -70 240.5 t-200 83.5zM259 1264q127 136 178 200t74 105h166q22 -42 76.5 -108.5t179.5 -196.5v-23h-119q-88 55 -221 186q-136 -134 -219 -186h-115v23z" /> +<glyph unicode="ë" horiz-adv-x="1149" d="M115 0zM639 -20q-243 0 -383.5 148t-140.5 411q0 265 130.5 421t350.5 156q206 0 326 -135.5t120 -357.5v-105h-755q5 -193 97.5 -293t260.5 -100q177 0 350 74v-148q-88 -38 -166.5 -54.5t-189.5 -16.5zM594 977q-132 0 -210.5 -86t-92.5 -238h573q0 157 -70 240.5 t-200 83.5zM319 1393q0 52 26.5 75t63.5 23q38 0 65.5 -23t27.5 -75q0 -50 -27.5 -74.5t-65.5 -24.5q-37 0 -63.5 24.5t-26.5 74.5zM700 1393q0 52 26.5 75t63.5 23t64.5 -23t27.5 -75q0 -50 -27.5 -74.5t-64.5 -24.5t-63.5 24.5t-26.5 74.5z" /> +<glyph unicode="ì" horiz-adv-x="518" d="M0 0zM342 0h-166v1096h166v-1096zM355 1241h-110q-65 52 -154 148t-129 159v21h203q32 -69 89 -159.5t101 -143.5v-25z" /> +<glyph unicode="í" horiz-adv-x="518" d="M169 0zM342 0h-166v1096h166v-1096zM169 1266q48 62 103.5 150t87.5 153h202v-21q-44 -65 -131 -160t-151 -147h-111v25z" /> +<glyph unicode="î" horiz-adv-x="518" d="M0 0zM342 0h-166v1096h166v-1096zM-77 1264q127 136 178 200t74 105h166q22 -42 76.5 -108.5t179.5 -196.5v-23h-119q-88 55 -221 186q-136 -134 -219 -186h-115v23z" /> +<glyph unicode="ï" horiz-adv-x="518" d="M0 0zM342 0h-166v1096h166v-1096zM-20 1393q0 52 26.5 75t63.5 23q38 0 65.5 -23t27.5 -75q0 -50 -27.5 -74.5t-65.5 -24.5q-37 0 -63.5 24.5t-26.5 74.5zM361 1393q0 52 26.5 75t63.5 23t64.5 -23t27.5 -75q0 -50 -27.5 -74.5t-64.5 -24.5t-63.5 24.5t-26.5 74.5z" /> +<glyph unicode="ð" horiz-adv-x="1221" d="M1122 563q0 -281 -130.5 -432t-377.5 -151q-222 0 -361.5 134.5t-139.5 360.5q0 230 131.5 361t351.5 131q226 0 326 -121l8 4q-57 214 -262 405l-271 -155l-73 108l233 133q-92 62 -186 111l69 117q156 -73 258 -148l238 138l76 -107l-207 -119q152 -143 234.5 -342 t82.5 -428zM954 512q0 147 -90 232t-246 85q-337 0 -337 -360q0 -167 87.5 -258.5t249.5 -91.5q175 0 255.5 100.5t80.5 292.5z" /> +<glyph unicode="ñ" horiz-adv-x="1257" d="M176 0zM926 0v709q0 134 -61 200t-191 66q-172 0 -252 -93t-80 -307v-575h-166v1096h135l27 -150h8q51 81 143 125.5t205 44.5q198 0 298 -95.5t100 -305.5v-715h-166zM802 1243q-43 0 -84 18.5t-80.5 41t-76 41t-70.5 18.5q-50 0 -75.5 -30t-39.5 -91h-98 q13 121 70.5 189.5t148.5 68.5q46 0 89 -18.5t82 -41t75 -41t68 -18.5q49 0 73 29.5t39 91.5h99q-13 -121 -69.5 -189.5t-150.5 -68.5z" /> +<glyph unicode="ò" horiz-adv-x="1237" d="M115 0zM1122 549q0 -268 -135 -418.5t-373 -150.5q-147 0 -261 69t-176 198t-62 302q0 268 134 417.5t372 149.5q230 0 365.5 -153t135.5 -414zM287 549q0 -210 84 -320t247 -110t247.5 109.5t84.5 320.5q0 209 -84.5 317.5t-249.5 108.5q-163 0 -246 -107t-83 -319z M742 1241h-110q-65 52 -154 148t-129 159v21h203q32 -69 89 -159.5t101 -143.5v-25z" /> +<glyph unicode="ó" horiz-adv-x="1237" d="M115 0zM1122 549q0 -268 -135 -418.5t-373 -150.5q-147 0 -261 69t-176 198t-62 302q0 268 134 417.5t372 149.5q230 0 365.5 -153t135.5 -414zM287 549q0 -210 84 -320t247 -110t247.5 109.5t84.5 320.5q0 209 -84.5 317.5t-249.5 108.5q-163 0 -246 -107t-83 -319z M479 1266q48 62 103.5 150t87.5 153h202v-21q-44 -65 -131 -160t-151 -147h-111v25z" /> +<glyph unicode="ô" horiz-adv-x="1237" d="M115 0zM1122 549q0 -268 -135 -418.5t-373 -150.5q-147 0 -261 69t-176 198t-62 302q0 268 134 417.5t372 149.5q230 0 365.5 -153t135.5 -414zM287 549q0 -210 84 -320t247 -110t247.5 109.5t84.5 320.5q0 209 -84.5 317.5t-249.5 108.5q-163 0 -246 -107t-83 -319z M282 1264q127 136 178 200t74 105h166q22 -42 76.5 -108.5t179.5 -196.5v-23h-119q-88 55 -221 186q-136 -134 -219 -186h-115v23z" /> +<glyph unicode="õ" horiz-adv-x="1237" d="M115 0zM1122 549q0 -268 -135 -418.5t-373 -150.5q-147 0 -261 69t-176 198t-62 302q0 268 134 417.5t372 149.5q230 0 365.5 -153t135.5 -414zM287 549q0 -210 84 -320t247 -110t247.5 109.5t84.5 320.5q0 209 -84.5 317.5t-249.5 108.5q-163 0 -246 -107t-83 -319z M773 1243q-43 0 -84 18.5t-80.5 41t-76 41t-70.5 18.5q-50 0 -75.5 -30t-39.5 -91h-98q13 121 70.5 189.5t148.5 68.5q46 0 89 -18.5t82 -41t75 -41t68 -18.5q49 0 73 29.5t39 91.5h99q-13 -121 -69.5 -189.5t-150.5 -68.5z" /> +<glyph unicode="ö" horiz-adv-x="1237" d="M115 0zM1122 549q0 -268 -135 -418.5t-373 -150.5q-147 0 -261 69t-176 198t-62 302q0 268 134 417.5t372 149.5q230 0 365.5 -153t135.5 -414zM287 549q0 -210 84 -320t247 -110t247.5 109.5t84.5 320.5q0 209 -84.5 317.5t-249.5 108.5q-163 0 -246 -107t-83 -319z M336 1393q0 52 26.5 75t63.5 23q38 0 65.5 -23t27.5 -75q0 -50 -27.5 -74.5t-65.5 -24.5q-37 0 -63.5 24.5t-26.5 74.5zM717 1393q0 52 26.5 75t63.5 23t64.5 -23t27.5 -75q0 -50 -27.5 -74.5t-64.5 -24.5t-63.5 24.5t-26.5 74.5z" /> +<glyph unicode="÷" d="M104 653v138h961v-138h-961zM471 373q0 60 29.5 90.5t83.5 30.5q52 0 81 -31.5t29 -89.5q0 -57 -29.5 -89t-80.5 -32q-52 0 -82.5 31.5t-30.5 89.5zM471 1071q0 60 29.5 90.5t83.5 30.5q52 0 81 -31.5t29 -89.5q0 -57 -29.5 -89t-80.5 -32q-52 0 -82.5 31.5t-30.5 89.5z " /> +<glyph unicode="ø" horiz-adv-x="1237" d="M1122 549q0 -268 -135 -418.5t-373 -150.5q-154 0 -266 69l-84 -117l-114 78l94 131q-129 152 -129 408q0 268 134 417.5t372 149.5q154 0 270 -76l84 119l117 -76l-97 -133q127 -152 127 -401zM287 549q0 -171 53 -273l465 646q-75 53 -189 53q-163 0 -246 -107 t-83 -319zM950 549q0 164 -51 264l-465 -643q71 -51 184 -51q163 0 247.5 109.5t84.5 320.5z" /> +<glyph unicode="ù" horiz-adv-x="1257" d="M164 0zM332 1096v-711q0 -134 61 -200t191 -66q172 0 251.5 94t79.5 307v576h166v-1096h-137l-24 147h-9q-51 -81 -141.5 -124t-206.5 -43q-200 0 -299.5 95t-99.5 304v717h168zM726 1241h-110q-65 52 -154 148t-129 159v21h203q32 -69 89 -159.5t101 -143.5v-25z" /> +<glyph unicode="ú" horiz-adv-x="1257" d="M164 0zM332 1096v-711q0 -134 61 -200t191 -66q172 0 251.5 94t79.5 307v576h166v-1096h-137l-24 147h-9q-51 -81 -141.5 -124t-206.5 -43q-200 0 -299.5 95t-99.5 304v717h168zM506 1266q48 62 103.5 150t87.5 153h202v-21q-44 -65 -131 -160t-151 -147h-111v25z" /> +<glyph unicode="û" horiz-adv-x="1257" d="M164 0zM332 1096v-711q0 -134 61 -200t191 -66q172 0 251.5 94t79.5 307v576h166v-1096h-137l-24 147h-9q-51 -81 -141.5 -124t-206.5 -43q-200 0 -299.5 95t-99.5 304v717h168zM286 1264q127 136 178 200t74 105h166q22 -42 76.5 -108.5t179.5 -196.5v-23h-119 q-88 55 -221 186q-136 -134 -219 -186h-115v23z" /> +<glyph unicode="ü" horiz-adv-x="1257" d="M164 0zM332 1096v-711q0 -134 61 -200t191 -66q172 0 251.5 94t79.5 307v576h166v-1096h-137l-24 147h-9q-51 -81 -141.5 -124t-206.5 -43q-200 0 -299.5 95t-99.5 304v717h168zM342 1393q0 52 26.5 75t63.5 23q38 0 65.5 -23t27.5 -75q0 -50 -27.5 -74.5t-65.5 -24.5 q-37 0 -63.5 24.5t-26.5 74.5zM723 1393q0 52 26.5 75t63.5 23t64.5 -23t27.5 -75q0 -50 -27.5 -74.5t-64.5 -24.5t-63.5 24.5t-26.5 74.5z" /> +<glyph unicode="ý" horiz-adv-x="1032" d="M2 0zM2 1096h178l240 -625q79 -214 98 -309h8q13 51 54.5 174.5t271.5 759.5h178l-471 -1248q-70 -185 -163.5 -262.5t-229.5 -77.5q-76 0 -150 17v133q55 -12 123 -12q171 0 244 192l61 156zM411 1266q48 62 103.5 150t87.5 153h202v-21q-44 -65 -131 -160t-151 -147 h-111v25z" /> +<glyph unicode="þ" horiz-adv-x="1255" d="M344 948q66 89 151 128.5t191 39.5q215 0 335 -150t120 -417q0 -268 -120.5 -418.5t-334.5 -150.5q-222 0 -344 161h-12l4 -34q8 -77 8 -140v-459h-166v2048h166v-466q0 -52 -6 -142h8zM664 975q-168 0 -244 -92t-78 -293v-41q0 -231 77 -330.5t247 -99.5q303 0 303 432 q0 215 -74 319.5t-231 104.5z" /> +<glyph unicode="ÿ" horiz-adv-x="1032" d="M2 0zM2 1096h178l240 -625q79 -214 98 -309h8q13 51 54.5 174.5t271.5 759.5h178l-471 -1248q-70 -185 -163.5 -262.5t-229.5 -77.5q-76 0 -150 17v133q55 -12 123 -12q171 0 244 192l61 156zM234 1393q0 52 26.5 75t63.5 23q38 0 65.5 -23t27.5 -75q0 -50 -27.5 -74.5 t-65.5 -24.5q-37 0 -63.5 24.5t-26.5 74.5zM615 1393q0 52 26.5 75t63.5 23t64.5 -23t27.5 -75q0 -50 -27.5 -74.5t-64.5 -24.5t-63.5 24.5t-26.5 74.5z" /> +<glyph unicode="ı" horiz-adv-x="518" d="M342 0h-166v1096h166v-1096z" /> +<glyph unicode="Œ" horiz-adv-x="1890" d="M1767 0h-768q-102 -20 -194 -20q-327 0 -503.5 196.5t-176.5 558.5q0 360 174 555t494 195q102 0 192 -23h782v-151h-589v-471h551v-150h-551v-538h589v-152zM811 1333q-249 0 -377.5 -152.5t-128.5 -447.5q0 -297 128.5 -450.5t375.5 -153.5q112 0 199 33v1141 q-87 30 -197 30z" /> +<glyph unicode="œ" horiz-adv-x="1929" d="M1430 -20q-293 0 -418 235q-62 -116 -166.5 -175.5t-241.5 -59.5q-223 0 -357 152.5t-134 416.5q0 265 131 415t366 150q131 0 233.5 -59.5t164.5 -173.5q58 112 154 172.5t222 60.5q201 0 320 -132.5t119 -358.5v-105h-729q8 -393 338 -393q94 0 174.5 17.5t167.5 56.5 v-148q-88 -39 -164 -55t-180 -16zM287 549q0 -211 76 -320.5t243 -109.5q163 0 239.5 106.5t76.5 315.5q0 221 -77.5 327.5t-242.5 106.5q-166 0 -240.5 -108t-74.5 -318zM1382 975q-127 0 -199.5 -82t-84.5 -240h544q0 158 -66 240t-194 82z" /> +<glyph unicode="Ÿ" horiz-adv-x="1147" d="M0 0zM573 731l390 731h184l-488 -895v-567h-172v559l-487 903h186zM294 1731q0 52 26.5 75t63.5 23q38 0 65.5 -23t27.5 -75q0 -50 -27.5 -74.5t-65.5 -24.5q-37 0 -63.5 24.5t-26.5 74.5zM675 1731q0 52 26.5 75t63.5 23t64.5 -23t27.5 -75q0 -50 -27.5 -74.5 t-64.5 -24.5t-63.5 24.5t-26.5 74.5z" /> +<glyph unicode="ˆ" horiz-adv-x="1212" d="M268 1264q127 136 178 200t74 105h166q22 -42 76.5 -108.5t179.5 -196.5v-23h-119q-88 55 -221 186q-136 -134 -219 -186h-115v23z" /> +<glyph unicode="˚" horiz-adv-x="1182" d="M813 1458q0 -98 -61.5 -157.5t-163.5 -59.5q-101 0 -161 58.5t-60 156.5t60.5 155.5t160.5 57.5q101 0 163 -59.5t62 -151.5zM705 1456q0 56 -33 86.5t-84 30.5t-84 -30.5t-33 -86.5t30 -86.5t87 -30.5q52 0 84.5 30.5t32.5 86.5z" /> +<glyph unicode="˜" horiz-adv-x="1212" d="M788 1243q-43 0 -84 18.5t-80.5 41t-76 41t-70.5 18.5q-50 0 -75.5 -30t-39.5 -91h-98q13 121 70.5 189.5t148.5 68.5q46 0 89 -18.5t82 -41t75 -41t68 -18.5q49 0 73 29.5t39 91.5h99q-13 -121 -69.5 -189.5t-150.5 -68.5z" /> +<glyph unicode=" " horiz-adv-x="953" /> +<glyph unicode=" " horiz-adv-x="1907" /> +<glyph unicode=" " horiz-adv-x="953" /> +<glyph unicode=" " horiz-adv-x="1907" /> +<glyph unicode=" " horiz-adv-x="635" /> +<glyph unicode=" " horiz-adv-x="476" /> +<glyph unicode=" " horiz-adv-x="317" /> +<glyph unicode=" " horiz-adv-x="317" /> +<glyph unicode=" " horiz-adv-x="238" /> +<glyph unicode=" " horiz-adv-x="381" /> +<glyph unicode=" " horiz-adv-x="105" /> +<glyph unicode="‐" horiz-adv-x="659" d="M84 473v152h491v-152h-491z" /> +<glyph unicode="‑" horiz-adv-x="659" d="M84 473v152h491v-152h-491z" /> +<glyph unicode="‒" horiz-adv-x="659" d="M84 473v152h491v-152h-491z" /> +<glyph unicode="–" horiz-adv-x="1024" d="M82 473v152h860v-152h-860z" /> +<glyph unicode="—" horiz-adv-x="2048" d="M82 473v152h1884v-152h-1884z" /> +<glyph unicode="‘" horiz-adv-x="348" d="M37 961l-12 22q22 90 71 224t105 255h123q-66 -254 -103 -501h-184z" /> +<glyph unicode="’" horiz-adv-x="348" d="M309 1462l15 -22q-26 -100 -75 -232.5t-102 -246.5h-122q70 285 102 501h182z" /> +<glyph unicode="‚" horiz-adv-x="502" d="M63 0zM350 238l15 -23q-26 -100 -75 -232.5t-102 -246.5h-125q27 104 59.5 257t45.5 245h182z" /> +<glyph unicode="“" horiz-adv-x="717" d="M406 961l-15 22q56 215 178 479h123q-30 -115 -59.5 -259.5t-42.5 -241.5h-184zM37 961l-12 22q22 90 71 224t105 255h123q-66 -254 -103 -501h-184z" /> +<glyph unicode="”" horiz-adv-x="717" d="M309 1462l15 -22q-26 -100 -75 -232.5t-102 -246.5h-122q70 285 102 501h182zM678 1462l14 -22q-24 -91 -72 -224t-104 -255h-125q26 100 59 254t46 247h182z" /> +<glyph unicode="„" horiz-adv-x="829" d="M25 0zM309 238l15 -22q-26 -100 -75 -232.5t-102 -246.5h-122q70 285 102 501h182zM678 238l14 -22q-24 -91 -72 -224t-104 -255h-125q26 100 59 254t46 247h182z" /> +<glyph unicode="•" horiz-adv-x="770" d="M164 748q0 121 56.5 184t164.5 63q105 0 163 -62t58 -185q0 -119 -57.5 -183.5t-163.5 -64.5q-107 0 -164 65.5t-57 182.5z" /> +<glyph unicode="…" horiz-adv-x="1606" d="M152 0zM152 106q0 67 30.5 101.5t87.5 34.5q58 0 90.5 -34.5t32.5 -101.5q0 -65 -33 -100t-90 -35q-51 0 -84.5 31.5t-33.5 103.5zM682 106q0 67 30.5 101.5t87.5 34.5q58 0 90.5 -34.5t32.5 -101.5q0 -65 -33 -100t-90 -35q-51 0 -84.5 31.5t-33.5 103.5zM1213 106 q0 67 30.5 101.5t87.5 34.5q58 0 90.5 -34.5t32.5 -101.5q0 -65 -33 -100t-90 -35q-51 0 -84.5 31.5t-33.5 103.5z" /> +<glyph unicode=" " horiz-adv-x="381" /> +<glyph unicode="‹" horiz-adv-x="623" d="M82 551l342 407l119 -69l-289 -350l289 -351l-119 -71l-342 407v27z" /> +<glyph unicode="›" horiz-adv-x="623" d="M541 524l-344 -407l-117 71l287 351l-287 350l117 69l344 -407v-27z" /> +<glyph unicode="⁄" horiz-adv-x="266" d="M655 1462l-903 -1462h-143l903 1462h143z" /> +<glyph unicode=" " horiz-adv-x="476" /> +<glyph unicode="⁴" horiz-adv-x="711" d="M692 788h-125v-202h-145v202h-402v101l408 579h139v-563h125v-117zM422 905v195q0 134 6 209q-5 -12 -17 -31.5t-27 -42l-30 -45t-26 -39.5l-168 -246h262z" /> +<glyph unicode="€" horiz-adv-x="1208" d="M795 1333q-319 0 -398 -403h510v-129h-524l-2 -57v-64l2 -45h463v-129h-447q37 -180 138.5 -278.5t271.5 -98.5q156 0 309 66v-150q-146 -65 -317 -65q-237 0 -381.5 134.5t-190.5 391.5h-166v129h152l-2 42v44l2 80h-152v129h164q39 261 185 407t383 146q201 0 366 -97 l-71 -139q-166 86 -295 86z" /> +<glyph unicode="™" horiz-adv-x="1589" d="M369 741h-123v615h-209v106h543v-106h-211v-615zM969 741l-201 559h-8l6 -129v-430h-119v721h187l196 -559l203 559h180v-721h-127v420l6 137h-8l-211 -557h-104z" /> +<glyph unicode="−" d="M104 653v138h961v-138h-961z" /> +<glyph unicode="" horiz-adv-x="1095" d="M0 1095h1095v-1095h-1095v1095z" /> +<glyph horiz-adv-x="1255" d="M0 0z" /> +<hkern u1=""" u2="Ÿ" k="-20" /> +<hkern u1=""" u2="œ" k="123" /> +<hkern u1=""" u2="ü" k="61" /> +<hkern u1=""" u2="û" k="61" /> +<hkern u1=""" u2="ú" k="61" /> +<hkern u1=""" u2="ù" k="61" /> +<hkern u1=""" u2="ø" k="123" /> +<hkern u1=""" u2="ö" k="123" /> +<hkern u1=""" u2="õ" k="123" /> +<hkern u1=""" u2="ô" k="123" /> +<hkern u1=""" u2="ó" k="123" /> +<hkern u1=""" u2="ò" k="123" /> +<hkern u1=""" u2="ë" k="123" /> +<hkern u1=""" u2="ê" k="123" /> +<hkern u1=""" u2="é" k="123" /> +<hkern u1=""" u2="è" k="123" /> +<hkern u1=""" u2="ç" k="123" /> +<hkern u1=""" u2="æ" k="82" /> +<hkern u1=""" u2="å" k="82" /> +<hkern u1=""" u2="ä" k="82" /> +<hkern u1=""" u2="ã" k="82" /> +<hkern u1=""" u2="â" k="82" /> +<hkern u1=""" u2="á" k="82" /> +<hkern u1=""" u2="à" k="123" /> +<hkern u1=""" u2="Ý" k="-20" /> +<hkern u1=""" u2="Å" k="143" /> +<hkern u1=""" u2="Ä" k="143" /> +<hkern u1=""" u2="Ã" k="143" /> +<hkern u1=""" u2="Â" k="143" /> +<hkern u1=""" u2="Á" k="143" /> +<hkern u1=""" u2="À" k="143" /> +<hkern u1=""" u2="u" k="61" /> +<hkern u1=""" u2="s" k="61" /> +<hkern u1=""" u2="r" k="61" /> +<hkern u1=""" u2="q" k="123" /> +<hkern u1=""" u2="p" k="61" /> +<hkern u1=""" u2="o" k="123" /> +<hkern u1=""" u2="n" k="61" /> +<hkern u1=""" u2="m" k="61" /> +<hkern u1=""" u2="g" k="61" /> +<hkern u1=""" u2="e" k="123" /> +<hkern u1=""" u2="d" k="123" /> +<hkern u1=""" u2="c" k="123" /> +<hkern u1=""" u2="a" k="82" /> +<hkern u1=""" u2="Y" k="-20" /> +<hkern u1=""" u2="W" k="-41" /> +<hkern u1=""" u2="V" k="-41" /> +<hkern u1=""" u2="T" k="-41" /> +<hkern u1=""" u2="A" k="143" /> +<hkern u1="'" u2="Ÿ" k="-20" /> +<hkern u1="'" u2="œ" k="123" /> +<hkern u1="'" u2="ü" k="61" /> +<hkern u1="'" u2="û" k="61" /> +<hkern u1="'" u2="ú" k="61" /> +<hkern u1="'" u2="ù" k="61" /> +<hkern u1="'" u2="ø" k="123" /> +<hkern u1="'" u2="ö" k="123" /> +<hkern u1="'" u2="õ" k="123" /> +<hkern u1="'" u2="ô" k="123" /> +<hkern u1="'" u2="ó" k="123" /> +<hkern u1="'" u2="ò" k="123" /> +<hkern u1="'" u2="ë" k="123" /> +<hkern u1="'" u2="ê" k="123" /> +<hkern u1="'" u2="é" k="123" /> +<hkern u1="'" u2="è" k="123" /> +<hkern u1="'" u2="ç" k="123" /> +<hkern u1="'" u2="æ" k="82" /> +<hkern u1="'" u2="å" k="82" /> +<hkern u1="'" u2="ä" k="82" /> +<hkern u1="'" u2="ã" k="82" /> +<hkern u1="'" u2="â" k="82" /> +<hkern u1="'" u2="á" k="82" /> +<hkern u1="'" u2="à" k="123" /> +<hkern u1="'" u2="Ý" k="-20" /> +<hkern u1="'" u2="Å" k="143" /> +<hkern u1="'" u2="Ä" k="143" /> +<hkern u1="'" u2="Ã" k="143" /> +<hkern u1="'" u2="Â" k="143" /> +<hkern u1="'" u2="Á" k="143" /> +<hkern u1="'" u2="À" k="143" /> +<hkern u1="'" u2="u" k="61" /> +<hkern u1="'" u2="s" k="61" /> +<hkern u1="'" u2="r" k="61" /> +<hkern u1="'" u2="q" k="123" /> +<hkern u1="'" u2="p" k="61" /> +<hkern u1="'" u2="o" k="123" /> +<hkern u1="'" u2="n" k="61" /> +<hkern u1="'" u2="m" k="61" /> +<hkern u1="'" u2="g" k="61" /> +<hkern u1="'" u2="e" k="123" /> +<hkern u1="'" u2="d" k="123" /> +<hkern u1="'" u2="c" k="123" /> +<hkern u1="'" u2="a" k="82" /> +<hkern u1="'" u2="Y" k="-20" /> +<hkern u1="'" u2="W" k="-41" /> +<hkern u1="'" u2="V" k="-41" /> +<hkern u1="'" u2="T" k="-41" /> +<hkern u1="'" u2="A" k="143" /> +<hkern u1="(" u2="J" k="-184" /> +<hkern u1="," u2="Ÿ" k="123" /> +<hkern u1="," u2="Œ" k="102" /> +<hkern u1="," u2="Ý" k="123" /> +<hkern u1="," u2="Ü" k="41" /> +<hkern u1="," u2="Û" k="41" /> +<hkern u1="," u2="Ú" k="41" /> +<hkern u1="," u2="Ù" k="41" /> +<hkern u1="," u2="Ø" k="102" /> +<hkern u1="," u2="Ö" k="102" /> +<hkern u1="," u2="Õ" k="102" /> +<hkern u1="," u2="Ô" k="102" /> +<hkern u1="," u2="Ó" k="102" /> +<hkern u1="," u2="Ò" k="102" /> +<hkern u1="," u2="Ç" k="102" /> +<hkern u1="," u2="Y" k="123" /> +<hkern u1="," u2="W" k="123" /> +<hkern u1="," u2="V" k="123" /> +<hkern u1="," u2="U" k="41" /> +<hkern u1="," u2="T" k="143" /> +<hkern u1="," u2="Q" k="102" /> +<hkern u1="," u2="O" k="102" /> +<hkern u1="," u2="G" k="102" /> +<hkern u1="," u2="C" k="102" /> +<hkern u1="-" u2="T" k="82" /> +<hkern u1="." u2="Ÿ" k="123" /> +<hkern u1="." u2="Œ" k="102" /> +<hkern u1="." u2="Ý" k="123" /> +<hkern u1="." u2="Ü" k="41" /> +<hkern u1="." u2="Û" k="41" /> +<hkern u1="." u2="Ú" k="41" /> +<hkern u1="." u2="Ù" k="41" /> +<hkern u1="." u2="Ø" k="102" /> +<hkern u1="." u2="Ö" k="102" /> +<hkern u1="." u2="Õ" k="102" /> +<hkern u1="." u2="Ô" k="102" /> +<hkern u1="." u2="Ó" k="102" /> +<hkern u1="." u2="Ò" k="102" /> +<hkern u1="." u2="Ç" k="102" /> +<hkern u1="." u2="Y" k="123" /> +<hkern u1="." u2="W" k="123" /> +<hkern u1="." u2="V" k="123" /> +<hkern u1="." u2="U" k="41" /> +<hkern u1="." u2="T" k="143" /> +<hkern u1="." u2="Q" k="102" /> +<hkern u1="." u2="O" k="102" /> +<hkern u1="." u2="G" k="102" /> +<hkern u1="." u2="C" k="102" /> +<hkern u1="A" u2="”" k="143" /> +<hkern u1="A" u2="’" k="143" /> +<hkern u1="A" u2="Ÿ" k="123" /> +<hkern u1="A" u2="Œ" k="41" /> +<hkern u1="A" u2="Ý" k="123" /> +<hkern u1="A" u2="Ø" k="41" /> +<hkern u1="A" u2="Ö" k="41" /> +<hkern u1="A" u2="Õ" k="41" /> +<hkern u1="A" u2="Ô" k="41" /> +<hkern u1="A" u2="Ó" k="41" /> +<hkern u1="A" u2="Ò" k="41" /> +<hkern u1="A" u2="Ç" k="41" /> +<hkern u1="A" u2="Y" k="123" /> +<hkern u1="A" u2="W" k="82" /> +<hkern u1="A" u2="V" k="82" /> +<hkern u1="A" u2="T" k="143" /> +<hkern u1="A" u2="Q" k="41" /> +<hkern u1="A" u2="O" k="41" /> +<hkern u1="A" u2="J" k="-266" /> +<hkern u1="A" u2="G" k="41" /> +<hkern u1="A" u2="C" k="41" /> +<hkern u1="A" u2="'" k="143" /> +<hkern u1="A" u2=""" k="143" /> +<hkern u1="B" u2="„" k="82" /> +<hkern u1="B" u2="‚" k="82" /> +<hkern u1="B" u2="Ÿ" k="20" /> +<hkern u1="B" u2="Ý" k="20" /> +<hkern u1="B" u2="Å" k="41" /> +<hkern u1="B" u2="Ä" k="41" /> +<hkern u1="B" u2="Ã" k="41" /> +<hkern u1="B" u2="Â" k="41" /> +<hkern u1="B" u2="Á" k="41" /> +<hkern u1="B" u2="À" k="41" /> +<hkern u1="B" u2="Z" k="20" /> +<hkern u1="B" u2="Y" k="20" /> +<hkern u1="B" u2="X" k="41" /> +<hkern u1="B" u2="W" k="20" /> +<hkern u1="B" u2="V" k="20" /> +<hkern u1="B" u2="T" k="61" /> +<hkern u1="B" u2="A" k="41" /> +<hkern u1="B" u2="." k="82" /> +<hkern u1="B" u2="," k="82" /> +<hkern u1="C" u2="Œ" k="41" /> +<hkern u1="C" u2="Ø" k="41" /> +<hkern u1="C" u2="Ö" k="41" /> +<hkern u1="C" u2="Õ" k="41" /> +<hkern u1="C" u2="Ô" k="41" /> +<hkern u1="C" u2="Ó" k="41" /> +<hkern u1="C" u2="Ò" k="41" /> +<hkern u1="C" u2="Ç" k="41" /> +<hkern u1="C" u2="Q" k="41" /> +<hkern u1="C" u2="O" k="41" /> +<hkern u1="C" u2="G" k="41" /> +<hkern u1="C" u2="C" k="41" /> +<hkern u1="D" u2="„" k="82" /> +<hkern u1="D" u2="‚" k="82" /> +<hkern u1="D" u2="Ÿ" k="20" /> +<hkern u1="D" u2="Ý" k="20" /> +<hkern u1="D" u2="Å" k="41" /> +<hkern u1="D" u2="Ä" k="41" /> +<hkern u1="D" u2="Ã" k="41" /> +<hkern u1="D" u2="Â" k="41" /> +<hkern u1="D" u2="Á" k="41" /> +<hkern u1="D" u2="À" k="41" /> +<hkern u1="D" u2="Z" k="20" /> +<hkern u1="D" u2="Y" k="20" /> +<hkern u1="D" u2="X" k="41" /> +<hkern u1="D" u2="W" k="20" /> +<hkern u1="D" u2="V" k="20" /> +<hkern u1="D" u2="T" k="61" /> +<hkern u1="D" u2="A" k="41" /> +<hkern u1="D" u2="." k="82" /> +<hkern u1="D" u2="," k="82" /> +<hkern u1="E" u2="J" k="-123" /> +<hkern u1="F" u2="„" k="123" /> +<hkern u1="F" u2="‚" k="123" /> +<hkern u1="F" u2="Å" k="41" /> +<hkern u1="F" u2="Ä" k="41" /> +<hkern u1="F" u2="Ã" k="41" /> +<hkern u1="F" u2="Â" k="41" /> +<hkern u1="F" u2="Á" k="41" /> +<hkern u1="F" u2="À" k="41" /> +<hkern u1="F" u2="A" k="41" /> +<hkern u1="F" u2="?" k="-41" /> +<hkern u1="F" u2="." k="123" /> +<hkern u1="F" u2="," k="123" /> +<hkern u1="K" u2="Œ" k="41" /> +<hkern u1="K" u2="Ø" k="41" /> +<hkern u1="K" u2="Ö" k="41" /> +<hkern u1="K" u2="Õ" k="41" /> +<hkern u1="K" u2="Ô" k="41" /> +<hkern u1="K" u2="Ó" k="41" /> +<hkern u1="K" u2="Ò" k="41" /> +<hkern u1="K" u2="Ç" k="41" /> +<hkern u1="K" u2="Q" k="41" /> +<hkern u1="K" u2="O" k="41" /> +<hkern u1="K" u2="G" k="41" /> +<hkern u1="K" u2="C" k="41" /> +<hkern u1="L" u2="”" k="164" /> +<hkern u1="L" u2="’" k="164" /> +<hkern u1="L" u2="Ÿ" k="61" /> +<hkern u1="L" u2="Œ" k="41" /> +<hkern u1="L" u2="Ý" k="61" /> +<hkern u1="L" u2="Ü" k="20" /> +<hkern u1="L" u2="Û" k="20" /> +<hkern u1="L" u2="Ú" k="20" /> +<hkern u1="L" u2="Ù" k="20" /> +<hkern u1="L" u2="Ø" k="41" /> +<hkern u1="L" u2="Ö" k="41" /> +<hkern u1="L" u2="Õ" k="41" /> +<hkern u1="L" u2="Ô" k="41" /> +<hkern u1="L" u2="Ó" k="41" /> +<hkern u1="L" u2="Ò" k="41" /> +<hkern u1="L" u2="Ç" k="41" /> +<hkern u1="L" u2="Y" k="61" /> +<hkern u1="L" u2="W" k="41" /> +<hkern u1="L" u2="V" k="41" /> +<hkern u1="L" u2="U" k="20" /> +<hkern u1="L" u2="T" k="41" /> +<hkern u1="L" u2="Q" k="41" /> +<hkern u1="L" u2="O" k="41" /> +<hkern u1="L" u2="G" k="41" /> +<hkern u1="L" u2="C" k="41" /> +<hkern u1="L" u2="'" k="164" /> +<hkern u1="L" u2=""" k="164" /> +<hkern u1="O" u2="„" k="82" /> +<hkern u1="O" u2="‚" k="82" /> +<hkern u1="O" u2="Ÿ" k="20" /> +<hkern u1="O" u2="Ý" k="20" /> +<hkern u1="O" u2="Å" k="41" /> +<hkern u1="O" u2="Ä" k="41" /> +<hkern u1="O" u2="Ã" k="41" /> +<hkern u1="O" u2="Â" k="41" /> +<hkern u1="O" u2="Á" k="41" /> +<hkern u1="O" u2="À" k="41" /> +<hkern u1="O" u2="Z" k="20" /> +<hkern u1="O" u2="Y" k="20" /> +<hkern u1="O" u2="X" k="41" /> +<hkern u1="O" u2="W" k="20" /> +<hkern u1="O" u2="V" k="20" /> +<hkern u1="O" u2="T" k="61" /> +<hkern u1="O" u2="A" k="41" /> +<hkern u1="O" u2="." k="82" /> +<hkern u1="O" u2="," k="82" /> +<hkern u1="P" u2="„" k="266" /> +<hkern u1="P" u2="‚" k="266" /> +<hkern u1="P" u2="Å" k="102" /> +<hkern u1="P" u2="Ä" k="102" /> +<hkern u1="P" u2="Ã" k="102" /> +<hkern u1="P" u2="Â" k="102" /> +<hkern u1="P" u2="Á" k="102" /> +<hkern u1="P" u2="À" k="102" /> +<hkern u1="P" u2="Z" k="20" /> +<hkern u1="P" u2="X" k="41" /> +<hkern u1="P" u2="A" k="102" /> +<hkern u1="P" u2="." k="266" /> +<hkern u1="P" u2="," k="266" /> +<hkern u1="Q" u2="„" k="82" /> +<hkern u1="Q" u2="‚" k="82" /> +<hkern u1="Q" u2="Ÿ" k="20" /> +<hkern u1="Q" u2="Ý" k="20" /> +<hkern u1="Q" u2="Å" k="41" /> +<hkern u1="Q" u2="Ä" k="41" /> +<hkern u1="Q" u2="Ã" k="41" /> +<hkern u1="Q" u2="Â" k="41" /> +<hkern u1="Q" u2="Á" k="41" /> +<hkern u1="Q" u2="À" k="41" /> +<hkern u1="Q" u2="Z" k="20" /> +<hkern u1="Q" u2="Y" k="20" /> +<hkern u1="Q" u2="X" k="41" /> +<hkern u1="Q" u2="W" k="20" /> +<hkern u1="Q" u2="V" k="20" /> +<hkern u1="Q" u2="T" k="61" /> +<hkern u1="Q" u2="A" k="41" /> +<hkern u1="Q" u2="." k="82" /> +<hkern u1="Q" u2="," k="82" /> +<hkern u1="T" u2="„" k="123" /> +<hkern u1="T" u2="‚" k="123" /> +<hkern u1="T" u2="—" k="82" /> +<hkern u1="T" u2="–" k="82" /> +<hkern u1="T" u2="œ" k="143" /> +<hkern u1="T" u2="Œ" k="41" /> +<hkern u1="T" u2="ý" k="41" /> +<hkern u1="T" u2="ü" k="102" /> +<hkern u1="T" u2="û" k="102" /> +<hkern u1="T" u2="ú" k="102" /> +<hkern u1="T" u2="ù" k="102" /> +<hkern u1="T" u2="ø" k="143" /> +<hkern u1="T" u2="ö" k="143" /> +<hkern u1="T" u2="õ" k="143" /> +<hkern u1="T" u2="ô" k="143" /> +<hkern u1="T" u2="ó" k="143" /> +<hkern u1="T" u2="ò" k="143" /> +<hkern u1="T" u2="ë" k="143" /> +<hkern u1="T" u2="ê" k="143" /> +<hkern u1="T" u2="é" k="143" /> +<hkern u1="T" u2="è" k="143" /> +<hkern u1="T" u2="ç" k="143" /> +<hkern u1="T" u2="æ" k="164" /> +<hkern u1="T" u2="å" k="164" /> +<hkern u1="T" u2="ä" k="164" /> +<hkern u1="T" u2="ã" k="164" /> +<hkern u1="T" u2="â" k="164" /> +<hkern u1="T" u2="á" k="164" /> +<hkern u1="T" u2="à" k="143" /> +<hkern u1="T" u2="Ø" k="41" /> +<hkern u1="T" u2="Ö" k="41" /> +<hkern u1="T" u2="Õ" k="41" /> +<hkern u1="T" u2="Ô" k="41" /> +<hkern u1="T" u2="Ó" k="41" /> +<hkern u1="T" u2="Ò" k="41" /> +<hkern u1="T" u2="Ç" k="41" /> +<hkern u1="T" u2="Å" k="143" /> +<hkern u1="T" u2="Ä" k="143" /> +<hkern u1="T" u2="Ã" k="143" /> +<hkern u1="T" u2="Â" k="143" /> +<hkern u1="T" u2="Á" k="143" /> +<hkern u1="T" u2="À" k="143" /> +<hkern u1="T" u2="z" k="82" /> +<hkern u1="T" u2="y" k="41" /> +<hkern u1="T" u2="x" k="41" /> +<hkern u1="T" u2="w" k="41" /> +<hkern u1="T" u2="v" k="41" /> +<hkern u1="T" u2="u" k="102" /> +<hkern u1="T" u2="s" k="123" /> +<hkern u1="T" u2="r" k="102" /> +<hkern u1="T" u2="q" k="143" /> +<hkern u1="T" u2="p" k="102" /> +<hkern u1="T" u2="o" k="143" /> +<hkern u1="T" u2="n" k="102" /> +<hkern u1="T" u2="m" k="102" /> +<hkern u1="T" u2="g" k="143" /> +<hkern u1="T" u2="e" k="143" /> +<hkern u1="T" u2="d" k="143" /> +<hkern u1="T" u2="c" k="143" /> +<hkern u1="T" u2="a" k="164" /> +<hkern u1="T" u2="T" k="-41" /> +<hkern u1="T" u2="Q" k="41" /> +<hkern u1="T" u2="O" k="41" /> +<hkern u1="T" u2="G" k="41" /> +<hkern u1="T" u2="C" k="41" /> +<hkern u1="T" u2="A" k="143" /> +<hkern u1="T" u2="?" k="-41" /> +<hkern u1="T" u2="." k="123" /> +<hkern u1="T" u2="-" k="82" /> +<hkern u1="T" u2="," k="123" /> +<hkern u1="U" u2="„" k="41" /> +<hkern u1="U" u2="‚" k="41" /> +<hkern u1="U" u2="Å" k="20" /> +<hkern u1="U" u2="Ä" k="20" /> +<hkern u1="U" u2="Ã" k="20" /> +<hkern u1="U" u2="Â" k="20" /> +<hkern u1="U" u2="Á" k="20" /> +<hkern u1="U" u2="À" k="20" /> +<hkern u1="U" u2="A" k="20" /> +<hkern u1="U" u2="." k="41" /> +<hkern u1="U" u2="," k="41" /> +<hkern u1="V" u2="„" k="102" /> +<hkern u1="V" u2="‚" k="102" /> +<hkern u1="V" u2="œ" k="41" /> +<hkern u1="V" u2="Œ" k="20" /> +<hkern u1="V" u2="ü" k="20" /> +<hkern u1="V" u2="û" k="20" /> +<hkern u1="V" u2="ú" k="20" /> +<hkern u1="V" u2="ù" k="20" /> +<hkern u1="V" u2="ø" k="41" /> +<hkern u1="V" u2="ö" k="41" /> +<hkern u1="V" u2="õ" k="41" /> +<hkern u1="V" u2="ô" k="41" /> +<hkern u1="V" u2="ó" k="41" /> +<hkern u1="V" u2="ò" k="41" /> +<hkern u1="V" u2="ë" k="41" /> +<hkern u1="V" u2="ê" k="41" /> +<hkern u1="V" u2="é" k="41" /> +<hkern u1="V" u2="è" k="41" /> +<hkern u1="V" u2="ç" k="41" /> +<hkern u1="V" u2="æ" k="41" /> +<hkern u1="V" u2="å" k="41" /> +<hkern u1="V" u2="ä" k="41" /> +<hkern u1="V" u2="ã" k="41" /> +<hkern u1="V" u2="â" k="41" /> +<hkern u1="V" u2="á" k="41" /> +<hkern u1="V" u2="à" k="41" /> +<hkern u1="V" u2="Ø" k="20" /> +<hkern u1="V" u2="Ö" k="20" /> +<hkern u1="V" u2="Õ" k="20" /> +<hkern u1="V" u2="Ô" k="20" /> +<hkern u1="V" u2="Ó" k="20" /> +<hkern u1="V" u2="Ò" k="20" /> +<hkern u1="V" u2="Ç" k="20" /> +<hkern u1="V" u2="Å" k="82" /> +<hkern u1="V" u2="Ä" k="82" /> +<hkern u1="V" u2="Ã" k="82" /> +<hkern u1="V" u2="Â" k="82" /> +<hkern u1="V" u2="Á" k="82" /> +<hkern u1="V" u2="À" k="82" /> +<hkern u1="V" u2="u" k="20" /> +<hkern u1="V" u2="s" k="20" /> +<hkern u1="V" u2="r" k="20" /> +<hkern u1="V" u2="q" k="41" /> +<hkern u1="V" u2="p" k="20" /> +<hkern u1="V" u2="o" k="41" /> +<hkern u1="V" u2="n" k="20" /> +<hkern u1="V" u2="m" k="20" /> +<hkern u1="V" u2="g" k="20" /> +<hkern u1="V" u2="e" k="41" /> +<hkern u1="V" u2="d" k="41" /> +<hkern u1="V" u2="c" k="41" /> +<hkern u1="V" u2="a" k="41" /> +<hkern u1="V" u2="Q" k="20" /> +<hkern u1="V" u2="O" k="20" /> +<hkern u1="V" u2="G" k="20" /> +<hkern u1="V" u2="C" k="20" /> +<hkern u1="V" u2="A" k="82" /> +<hkern u1="V" u2="?" k="-41" /> +<hkern u1="V" u2="." k="102" /> +<hkern u1="V" u2="," k="102" /> +<hkern u1="W" u2="„" k="102" /> +<hkern u1="W" u2="‚" k="102" /> +<hkern u1="W" u2="œ" k="41" /> +<hkern u1="W" u2="Œ" k="20" /> +<hkern u1="W" u2="ü" k="20" /> +<hkern u1="W" u2="û" k="20" /> +<hkern u1="W" u2="ú" k="20" /> +<hkern u1="W" u2="ù" k="20" /> +<hkern u1="W" u2="ø" k="41" /> +<hkern u1="W" u2="ö" k="41" /> +<hkern u1="W" u2="õ" k="41" /> +<hkern u1="W" u2="ô" k="41" /> +<hkern u1="W" u2="ó" k="41" /> +<hkern u1="W" u2="ò" k="41" /> +<hkern u1="W" u2="ë" k="41" /> +<hkern u1="W" u2="ê" k="41" /> +<hkern u1="W" u2="é" k="41" /> +<hkern u1="W" u2="è" k="41" /> +<hkern u1="W" u2="ç" k="41" /> +<hkern u1="W" u2="æ" k="41" /> +<hkern u1="W" u2="å" k="41" /> +<hkern u1="W" u2="ä" k="41" /> +<hkern u1="W" u2="ã" k="41" /> +<hkern u1="W" u2="â" k="41" /> +<hkern u1="W" u2="á" k="41" /> +<hkern u1="W" u2="à" k="41" /> +<hkern u1="W" u2="Ø" k="20" /> +<hkern u1="W" u2="Ö" k="20" /> +<hkern u1="W" u2="Õ" k="20" /> +<hkern u1="W" u2="Ô" k="20" /> +<hkern u1="W" u2="Ó" k="20" /> +<hkern u1="W" u2="Ò" k="20" /> +<hkern u1="W" u2="Ç" k="20" /> +<hkern u1="W" u2="Å" k="82" /> +<hkern u1="W" u2="Ä" k="82" /> +<hkern u1="W" u2="Ã" k="82" /> +<hkern u1="W" u2="Â" k="82" /> +<hkern u1="W" u2="Á" k="82" /> +<hkern u1="W" u2="À" k="82" /> +<hkern u1="W" u2="u" k="20" /> +<hkern u1="W" u2="s" k="20" /> +<hkern u1="W" u2="r" k="20" /> +<hkern u1="W" u2="q" k="41" /> +<hkern u1="W" u2="p" k="20" /> +<hkern u1="W" u2="o" k="41" /> +<hkern u1="W" u2="n" k="20" /> +<hkern u1="W" u2="m" k="20" /> +<hkern u1="W" u2="g" k="20" /> +<hkern u1="W" u2="e" k="41" /> +<hkern u1="W" u2="d" k="41" /> +<hkern u1="W" u2="c" k="41" /> +<hkern u1="W" u2="a" k="41" /> +<hkern u1="W" u2="Q" k="20" /> +<hkern u1="W" u2="O" k="20" /> +<hkern u1="W" u2="G" k="20" /> +<hkern u1="W" u2="C" k="20" /> +<hkern u1="W" u2="A" k="82" /> +<hkern u1="W" u2="?" k="-41" /> +<hkern u1="W" u2="." k="102" /> +<hkern u1="W" u2="," k="102" /> +<hkern u1="X" u2="Œ" k="41" /> +<hkern u1="X" u2="Ø" k="41" /> +<hkern u1="X" u2="Ö" k="41" /> +<hkern u1="X" u2="Õ" k="41" /> +<hkern u1="X" u2="Ô" k="41" /> +<hkern u1="X" u2="Ó" k="41" /> +<hkern u1="X" u2="Ò" k="41" /> +<hkern u1="X" u2="Ç" k="41" /> +<hkern u1="X" u2="Q" k="41" /> +<hkern u1="X" u2="O" k="41" /> +<hkern u1="X" u2="G" k="41" /> +<hkern u1="X" u2="C" k="41" /> +<hkern u1="Y" u2="„" k="123" /> +<hkern u1="Y" u2="‚" k="123" /> +<hkern u1="Y" u2="œ" k="102" /> +<hkern u1="Y" u2="Œ" k="41" /> +<hkern u1="Y" u2="ü" k="61" /> +<hkern u1="Y" u2="û" k="61" /> +<hkern u1="Y" u2="ú" k="61" /> +<hkern u1="Y" u2="ù" k="61" /> +<hkern u1="Y" u2="ø" k="102" /> +<hkern u1="Y" u2="ö" k="102" /> +<hkern u1="Y" u2="õ" k="102" /> +<hkern u1="Y" u2="ô" k="102" /> +<hkern u1="Y" u2="ó" k="102" /> +<hkern u1="Y" u2="ò" k="102" /> +<hkern u1="Y" u2="ë" k="102" /> +<hkern u1="Y" u2="ê" k="102" /> +<hkern u1="Y" u2="é" k="102" /> +<hkern u1="Y" u2="è" k="102" /> +<hkern u1="Y" u2="ç" k="102" /> +<hkern u1="Y" u2="æ" k="102" /> +<hkern u1="Y" u2="å" k="102" /> +<hkern u1="Y" u2="ä" k="102" /> +<hkern u1="Y" u2="ã" k="102" /> +<hkern u1="Y" u2="â" k="102" /> +<hkern u1="Y" u2="á" k="102" /> +<hkern u1="Y" u2="à" k="102" /> +<hkern u1="Y" u2="Ø" k="41" /> +<hkern u1="Y" u2="Ö" k="41" /> +<hkern u1="Y" u2="Õ" k="41" /> +<hkern u1="Y" u2="Ô" k="41" /> +<hkern u1="Y" u2="Ó" k="41" /> +<hkern u1="Y" u2="Ò" k="41" /> +<hkern u1="Y" u2="Ç" k="41" /> +<hkern u1="Y" u2="Å" k="123" /> +<hkern u1="Y" u2="Ä" k="123" /> +<hkern u1="Y" u2="Ã" k="123" /> +<hkern u1="Y" u2="Â" k="123" /> +<hkern u1="Y" u2="Á" k="123" /> +<hkern u1="Y" u2="À" k="123" /> +<hkern u1="Y" u2="z" k="41" /> +<hkern u1="Y" u2="u" k="61" /> +<hkern u1="Y" u2="s" k="82" /> +<hkern u1="Y" u2="r" k="61" /> +<hkern u1="Y" u2="q" k="102" /> +<hkern u1="Y" u2="p" k="61" /> +<hkern u1="Y" u2="o" k="102" /> +<hkern u1="Y" u2="n" k="61" /> +<hkern u1="Y" u2="m" k="61" /> +<hkern u1="Y" u2="g" k="41" /> +<hkern u1="Y" u2="e" k="102" /> +<hkern u1="Y" u2="d" k="102" /> +<hkern u1="Y" u2="c" k="102" /> +<hkern u1="Y" u2="a" k="102" /> +<hkern u1="Y" u2="Q" k="41" /> +<hkern u1="Y" u2="O" k="41" /> +<hkern u1="Y" u2="G" k="41" /> +<hkern u1="Y" u2="C" k="41" /> +<hkern u1="Y" u2="A" k="123" /> +<hkern u1="Y" u2="?" k="-41" /> +<hkern u1="Y" u2="." k="123" /> +<hkern u1="Y" u2="," k="123" /> +<hkern u1="Z" u2="Œ" k="20" /> +<hkern u1="Z" u2="Ø" k="20" /> +<hkern u1="Z" u2="Ö" k="20" /> +<hkern u1="Z" u2="Õ" k="20" /> +<hkern u1="Z" u2="Ô" k="20" /> +<hkern u1="Z" u2="Ó" k="20" /> +<hkern u1="Z" u2="Ò" k="20" /> +<hkern u1="Z" u2="Ç" k="20" /> +<hkern u1="Z" u2="Q" k="20" /> +<hkern u1="Z" u2="O" k="20" /> +<hkern u1="Z" u2="G" k="20" /> +<hkern u1="Z" u2="C" k="20" /> +<hkern u1="[" u2="J" k="-184" /> +<hkern u1="a" u2="”" k="20" /> +<hkern u1="a" u2="’" k="20" /> +<hkern u1="a" u2="'" k="20" /> +<hkern u1="a" u2=""" k="20" /> +<hkern u1="b" u2="”" k="20" /> +<hkern u1="b" u2="’" k="20" /> +<hkern u1="b" u2="ý" k="41" /> +<hkern u1="b" u2="z" k="20" /> +<hkern u1="b" u2="y" k="41" /> +<hkern u1="b" u2="x" k="41" /> +<hkern u1="b" u2="w" k="41" /> +<hkern u1="b" u2="v" k="41" /> +<hkern u1="b" u2="'" k="20" /> +<hkern u1="b" u2=""" k="20" /> +<hkern u1="c" u2="”" k="-41" /> +<hkern u1="c" u2="’" k="-41" /> +<hkern u1="c" u2="'" k="-41" /> +<hkern u1="c" u2=""" k="-41" /> +<hkern u1="e" u2="”" k="20" /> +<hkern u1="e" u2="’" k="20" /> +<hkern u1="e" u2="ý" k="41" /> +<hkern u1="e" u2="z" k="20" /> +<hkern u1="e" u2="y" k="41" /> +<hkern u1="e" u2="x" k="41" /> +<hkern u1="e" u2="w" k="41" /> +<hkern u1="e" u2="v" k="41" /> +<hkern u1="e" u2="'" k="20" /> +<hkern u1="e" u2=""" k="20" /> +<hkern u1="f" u2="”" k="-123" /> +<hkern u1="f" u2="’" k="-123" /> +<hkern u1="f" u2="'" k="-123" /> +<hkern u1="f" u2=""" k="-123" /> +<hkern u1="h" u2="”" k="20" /> +<hkern u1="h" u2="’" k="20" /> +<hkern u1="h" u2="'" k="20" /> +<hkern u1="h" u2=""" k="20" /> +<hkern u1="k" u2="œ" k="41" /> +<hkern u1="k" u2="ø" k="41" /> +<hkern u1="k" u2="ö" k="41" /> +<hkern u1="k" u2="õ" k="41" /> +<hkern u1="k" u2="ô" k="41" /> +<hkern u1="k" u2="ó" k="41" /> +<hkern u1="k" u2="ò" k="41" /> +<hkern u1="k" u2="ë" k="41" /> +<hkern u1="k" u2="ê" k="41" /> +<hkern u1="k" u2="é" k="41" /> +<hkern u1="k" u2="è" k="41" /> +<hkern u1="k" u2="ç" k="41" /> +<hkern u1="k" u2="à" k="41" /> +<hkern u1="k" u2="q" k="41" /> +<hkern u1="k" u2="o" k="41" /> +<hkern u1="k" u2="e" k="41" /> +<hkern u1="k" u2="d" k="41" /> +<hkern u1="k" u2="c" k="41" /> +<hkern u1="m" u2="”" k="20" /> +<hkern u1="m" u2="’" k="20" /> +<hkern u1="m" u2="'" k="20" /> +<hkern u1="m" u2=""" k="20" /> +<hkern u1="n" u2="”" k="20" /> +<hkern u1="n" u2="’" k="20" /> +<hkern u1="n" u2="'" k="20" /> +<hkern u1="n" u2=""" k="20" /> +<hkern u1="o" u2="”" k="20" /> +<hkern u1="o" u2="’" k="20" /> +<hkern u1="o" u2="ý" k="41" /> +<hkern u1="o" u2="z" k="20" /> +<hkern u1="o" u2="y" k="41" /> +<hkern u1="o" u2="x" k="41" /> +<hkern u1="o" u2="w" k="41" /> +<hkern u1="o" u2="v" k="41" /> +<hkern u1="o" u2="'" k="20" /> +<hkern u1="o" u2=""" k="20" /> +<hkern u1="p" u2="”" k="20" /> +<hkern u1="p" u2="’" k="20" /> +<hkern u1="p" u2="ý" k="41" /> +<hkern u1="p" u2="z" k="20" /> +<hkern u1="p" u2="y" k="41" /> +<hkern u1="p" u2="x" k="41" /> +<hkern u1="p" u2="w" k="41" /> +<hkern u1="p" u2="v" k="41" /> +<hkern u1="p" u2="'" k="20" /> +<hkern u1="p" u2=""" k="20" /> +<hkern u1="r" u2="”" k="-82" /> +<hkern u1="r" u2="’" k="-82" /> +<hkern u1="r" u2="œ" k="41" /> +<hkern u1="r" u2="ø" k="41" /> +<hkern u1="r" u2="ö" k="41" /> +<hkern u1="r" u2="õ" k="41" /> +<hkern u1="r" u2="ô" k="41" /> +<hkern u1="r" u2="ó" k="41" /> +<hkern u1="r" u2="ò" k="41" /> +<hkern u1="r" u2="ë" k="41" /> +<hkern u1="r" u2="ê" k="41" /> +<hkern u1="r" u2="é" k="41" /> +<hkern u1="r" u2="è" k="41" /> +<hkern u1="r" u2="ç" k="41" /> +<hkern u1="r" u2="æ" k="41" /> +<hkern u1="r" u2="å" k="41" /> +<hkern u1="r" u2="ä" k="41" /> +<hkern u1="r" u2="ã" k="41" /> +<hkern u1="r" u2="â" k="41" /> +<hkern u1="r" u2="á" k="41" /> +<hkern u1="r" u2="à" k="41" /> +<hkern u1="r" u2="q" k="41" /> +<hkern u1="r" u2="o" k="41" /> +<hkern u1="r" u2="g" k="20" /> +<hkern u1="r" u2="e" k="41" /> +<hkern u1="r" u2="d" k="41" /> +<hkern u1="r" u2="c" k="41" /> +<hkern u1="r" u2="a" k="41" /> +<hkern u1="r" u2="'" k="-82" /> +<hkern u1="r" u2=""" k="-82" /> +<hkern u1="t" u2="”" k="-41" /> +<hkern u1="t" u2="’" k="-41" /> +<hkern u1="t" u2="'" k="-41" /> +<hkern u1="t" u2=""" k="-41" /> +<hkern u1="v" u2="„" k="82" /> +<hkern u1="v" u2="”" k="-82" /> +<hkern u1="v" u2="‚" k="82" /> +<hkern u1="v" u2="’" k="-82" /> +<hkern u1="v" u2="?" k="-41" /> +<hkern u1="v" u2="." k="82" /> +<hkern u1="v" u2="," k="82" /> +<hkern u1="v" u2="'" k="-82" /> +<hkern u1="v" u2=""" k="-82" /> +<hkern u1="w" u2="„" k="82" /> +<hkern u1="w" u2="”" k="-82" /> +<hkern u1="w" u2="‚" k="82" /> +<hkern u1="w" u2="’" k="-82" /> +<hkern u1="w" u2="?" k="-41" /> +<hkern u1="w" u2="." k="82" /> +<hkern u1="w" u2="," k="82" /> +<hkern u1="w" u2="'" k="-82" /> +<hkern u1="w" u2=""" k="-82" /> +<hkern u1="x" u2="œ" k="41" /> +<hkern u1="x" u2="ø" k="41" /> +<hkern u1="x" u2="ö" k="41" /> +<hkern u1="x" u2="õ" k="41" /> +<hkern u1="x" u2="ô" k="41" /> +<hkern u1="x" u2="ó" k="41" /> +<hkern u1="x" u2="ò" k="41" /> +<hkern u1="x" u2="ë" k="41" /> +<hkern u1="x" u2="ê" k="41" /> +<hkern u1="x" u2="é" k="41" /> +<hkern u1="x" u2="è" k="41" /> +<hkern u1="x" u2="ç" k="41" /> +<hkern u1="x" u2="à" k="41" /> +<hkern u1="x" u2="q" k="41" /> +<hkern u1="x" u2="o" k="41" /> +<hkern u1="x" u2="e" k="41" /> +<hkern u1="x" u2="d" k="41" /> +<hkern u1="x" u2="c" k="41" /> +<hkern u1="y" u2="„" k="82" /> +<hkern u1="y" u2="”" k="-82" /> +<hkern u1="y" u2="‚" k="82" /> +<hkern u1="y" u2="’" k="-82" /> +<hkern u1="y" u2="?" k="-41" /> +<hkern u1="y" u2="." k="82" /> +<hkern u1="y" u2="," k="82" /> +<hkern u1="y" u2="'" k="-82" /> +<hkern u1="y" u2=""" k="-82" /> +<hkern u1="{" u2="J" k="-184" /> +<hkern u1="À" u2="”" k="143" /> +<hkern u1="À" u2="’" k="143" /> +<hkern u1="À" u2="Ÿ" k="123" /> +<hkern u1="À" u2="Œ" k="41" /> +<hkern u1="À" u2="Ý" k="123" /> +<hkern u1="À" u2="Ø" k="41" /> +<hkern u1="À" u2="Ö" k="41" /> +<hkern u1="À" u2="Õ" k="41" /> +<hkern u1="À" u2="Ô" k="41" /> +<hkern u1="À" u2="Ó" k="41" /> +<hkern u1="À" u2="Ò" k="41" /> +<hkern u1="À" u2="Ç" k="41" /> +<hkern u1="À" u2="Y" k="123" /> +<hkern u1="À" u2="W" k="82" /> +<hkern u1="À" u2="V" k="82" /> +<hkern u1="À" u2="T" k="143" /> +<hkern u1="À" u2="Q" k="41" /> +<hkern u1="À" u2="O" k="41" /> +<hkern u1="À" u2="J" k="-266" /> +<hkern u1="À" u2="G" k="41" /> +<hkern u1="À" u2="C" k="41" /> +<hkern u1="À" u2="'" k="143" /> +<hkern u1="À" u2=""" k="143" /> +<hkern u1="Á" u2="”" k="143" /> +<hkern u1="Á" u2="’" k="143" /> +<hkern u1="Á" u2="Ÿ" k="123" /> +<hkern u1="Á" u2="Œ" k="41" /> +<hkern u1="Á" u2="Ý" k="123" /> +<hkern u1="Á" u2="Ø" k="41" /> +<hkern u1="Á" u2="Ö" k="41" /> +<hkern u1="Á" u2="Õ" k="41" /> +<hkern u1="Á" u2="Ô" k="41" /> +<hkern u1="Á" u2="Ó" k="41" /> +<hkern u1="Á" u2="Ò" k="41" /> +<hkern u1="Á" u2="Ç" k="41" /> +<hkern u1="Á" u2="Y" k="123" /> +<hkern u1="Á" u2="W" k="82" /> +<hkern u1="Á" u2="V" k="82" /> +<hkern u1="Á" u2="T" k="143" /> +<hkern u1="Á" u2="Q" k="41" /> +<hkern u1="Á" u2="O" k="41" /> +<hkern u1="Á" u2="J" k="-266" /> +<hkern u1="Á" u2="G" k="41" /> +<hkern u1="Á" u2="C" k="41" /> +<hkern u1="Á" u2="'" k="143" /> +<hkern u1="Á" u2=""" k="143" /> +<hkern u1="Â" u2="”" k="143" /> +<hkern u1="Â" u2="’" k="143" /> +<hkern u1="Â" u2="Ÿ" k="123" /> +<hkern u1="Â" u2="Œ" k="41" /> +<hkern u1="Â" u2="Ý" k="123" /> +<hkern u1="Â" u2="Ø" k="41" /> +<hkern u1="Â" u2="Ö" k="41" /> +<hkern u1="Â" u2="Õ" k="41" /> +<hkern u1="Â" u2="Ô" k="41" /> +<hkern u1="Â" u2="Ó" k="41" /> +<hkern u1="Â" u2="Ò" k="41" /> +<hkern u1="Â" u2="Ç" k="41" /> +<hkern u1="Â" u2="Y" k="123" /> +<hkern u1="Â" u2="W" k="82" /> +<hkern u1="Â" u2="V" k="82" /> +<hkern u1="Â" u2="T" k="143" /> +<hkern u1="Â" u2="Q" k="41" /> +<hkern u1="Â" u2="O" k="41" /> +<hkern u1="Â" u2="J" k="-266" /> +<hkern u1="Â" u2="G" k="41" /> +<hkern u1="Â" u2="C" k="41" /> +<hkern u1="Â" u2="'" k="143" /> +<hkern u1="Â" u2=""" k="143" /> +<hkern u1="Ã" u2="”" k="143" /> +<hkern u1="Ã" u2="’" k="143" /> +<hkern u1="Ã" u2="Ÿ" k="123" /> +<hkern u1="Ã" u2="Œ" k="41" /> +<hkern u1="Ã" u2="Ý" k="123" /> +<hkern u1="Ã" u2="Ø" k="41" /> +<hkern u1="Ã" u2="Ö" k="41" /> +<hkern u1="Ã" u2="Õ" k="41" /> +<hkern u1="Ã" u2="Ô" k="41" /> +<hkern u1="Ã" u2="Ó" k="41" /> +<hkern u1="Ã" u2="Ò" k="41" /> +<hkern u1="Ã" u2="Ç" k="41" /> +<hkern u1="Ã" u2="Y" k="123" /> +<hkern u1="Ã" u2="W" k="82" /> +<hkern u1="Ã" u2="V" k="82" /> +<hkern u1="Ã" u2="T" k="143" /> +<hkern u1="Ã" u2="Q" k="41" /> +<hkern u1="Ã" u2="O" k="41" /> +<hkern u1="Ã" u2="J" k="-266" /> +<hkern u1="Ã" u2="G" k="41" /> +<hkern u1="Ã" u2="C" k="41" /> +<hkern u1="Ã" u2="'" k="143" /> +<hkern u1="Ã" u2=""" k="143" /> +<hkern u1="Ä" u2="”" k="143" /> +<hkern u1="Ä" u2="’" k="143" /> +<hkern u1="Ä" u2="Ÿ" k="123" /> +<hkern u1="Ä" u2="Œ" k="41" /> +<hkern u1="Ä" u2="Ý" k="123" /> +<hkern u1="Ä" u2="Ø" k="41" /> +<hkern u1="Ä" u2="Ö" k="41" /> +<hkern u1="Ä" u2="Õ" k="41" /> +<hkern u1="Ä" u2="Ô" k="41" /> +<hkern u1="Ä" u2="Ó" k="41" /> +<hkern u1="Ä" u2="Ò" k="41" /> +<hkern u1="Ä" u2="Ç" k="41" /> +<hkern u1="Ä" u2="Y" k="123" /> +<hkern u1="Ä" u2="W" k="82" /> +<hkern u1="Ä" u2="V" k="82" /> +<hkern u1="Ä" u2="T" k="143" /> +<hkern u1="Ä" u2="Q" k="41" /> +<hkern u1="Ä" u2="O" k="41" /> +<hkern u1="Ä" u2="J" k="-266" /> +<hkern u1="Ä" u2="G" k="41" /> +<hkern u1="Ä" u2="C" k="41" /> +<hkern u1="Ä" u2="'" k="143" /> +<hkern u1="Ä" u2=""" k="143" /> +<hkern u1="Å" u2="”" k="143" /> +<hkern u1="Å" u2="’" k="143" /> +<hkern u1="Å" u2="Ÿ" k="123" /> +<hkern u1="Å" u2="Œ" k="41" /> +<hkern u1="Å" u2="Ý" k="123" /> +<hkern u1="Å" u2="Ø" k="41" /> +<hkern u1="Å" u2="Ö" k="41" /> +<hkern u1="Å" u2="Õ" k="41" /> +<hkern u1="Å" u2="Ô" k="41" /> +<hkern u1="Å" u2="Ó" k="41" /> +<hkern u1="Å" u2="Ò" k="41" /> +<hkern u1="Å" u2="Ç" k="41" /> +<hkern u1="Å" u2="Y" k="123" /> +<hkern u1="Å" u2="W" k="82" /> +<hkern u1="Å" u2="V" k="82" /> +<hkern u1="Å" u2="T" k="143" /> +<hkern u1="Å" u2="Q" k="41" /> +<hkern u1="Å" u2="O" k="41" /> +<hkern u1="Å" u2="J" k="-266" /> +<hkern u1="Å" u2="G" k="41" /> +<hkern u1="Å" u2="C" k="41" /> +<hkern u1="Å" u2="'" k="143" /> +<hkern u1="Å" u2=""" k="143" /> +<hkern u1="Æ" u2="J" k="-123" /> +<hkern u1="Ç" u2="Œ" k="41" /> +<hkern u1="Ç" u2="Ø" k="41" /> +<hkern u1="Ç" u2="Ö" k="41" /> +<hkern u1="Ç" u2="Õ" k="41" /> +<hkern u1="Ç" u2="Ô" k="41" /> +<hkern u1="Ç" u2="Ó" k="41" /> +<hkern u1="Ç" u2="Ò" k="41" /> +<hkern u1="Ç" u2="Ç" k="41" /> +<hkern u1="Ç" u2="Q" k="41" /> +<hkern u1="Ç" u2="O" k="41" /> +<hkern u1="Ç" u2="G" k="41" /> +<hkern u1="Ç" u2="C" k="41" /> +<hkern u1="È" u2="J" k="-123" /> +<hkern u1="É" u2="J" k="-123" /> +<hkern u1="Ê" u2="J" k="-123" /> +<hkern u1="Ë" u2="J" k="-123" /> +<hkern u1="Ð" u2="„" k="82" /> +<hkern u1="Ð" u2="‚" k="82" /> +<hkern u1="Ð" u2="Ÿ" k="20" /> +<hkern u1="Ð" u2="Ý" k="20" /> +<hkern u1="Ð" u2="Å" k="41" /> +<hkern u1="Ð" u2="Ä" k="41" /> +<hkern u1="Ð" u2="Ã" k="41" /> +<hkern u1="Ð" u2="Â" k="41" /> +<hkern u1="Ð" u2="Á" k="41" /> +<hkern u1="Ð" u2="À" k="41" /> +<hkern u1="Ð" u2="Z" k="20" /> +<hkern u1="Ð" u2="Y" k="20" /> +<hkern u1="Ð" u2="X" k="41" /> +<hkern u1="Ð" u2="W" k="20" /> +<hkern u1="Ð" u2="V" k="20" /> +<hkern u1="Ð" u2="T" k="61" /> +<hkern u1="Ð" u2="A" k="41" /> +<hkern u1="Ð" u2="." k="82" /> +<hkern u1="Ð" u2="," k="82" /> +<hkern u1="Ò" u2="„" k="82" /> +<hkern u1="Ò" u2="‚" k="82" /> +<hkern u1="Ò" u2="Ÿ" k="20" /> +<hkern u1="Ò" u2="Ý" k="20" /> +<hkern u1="Ò" u2="Å" k="41" /> +<hkern u1="Ò" u2="Ä" k="41" /> +<hkern u1="Ò" u2="Ã" k="41" /> +<hkern u1="Ò" u2="Â" k="41" /> +<hkern u1="Ò" u2="Á" k="41" /> +<hkern u1="Ò" u2="À" k="41" /> +<hkern u1="Ò" u2="Z" k="20" /> +<hkern u1="Ò" u2="Y" k="20" /> +<hkern u1="Ò" u2="X" k="41" /> +<hkern u1="Ò" u2="W" k="20" /> +<hkern u1="Ò" u2="V" k="20" /> +<hkern u1="Ò" u2="T" k="61" /> +<hkern u1="Ò" u2="A" k="41" /> +<hkern u1="Ò" u2="." k="82" /> +<hkern u1="Ò" u2="," k="82" /> +<hkern u1="Ó" u2="„" k="82" /> +<hkern u1="Ó" u2="‚" k="82" /> +<hkern u1="Ó" u2="Ÿ" k="20" /> +<hkern u1="Ó" u2="Ý" k="20" /> +<hkern u1="Ó" u2="Å" k="41" /> +<hkern u1="Ó" u2="Ä" k="41" /> +<hkern u1="Ó" u2="Ã" k="41" /> +<hkern u1="Ó" u2="Â" k="41" /> +<hkern u1="Ó" u2="Á" k="41" /> +<hkern u1="Ó" u2="À" k="41" /> +<hkern u1="Ó" u2="Z" k="20" /> +<hkern u1="Ó" u2="Y" k="20" /> +<hkern u1="Ó" u2="X" k="41" /> +<hkern u1="Ó" u2="W" k="20" /> +<hkern u1="Ó" u2="V" k="20" /> +<hkern u1="Ó" u2="T" k="61" /> +<hkern u1="Ó" u2="A" k="41" /> +<hkern u1="Ó" u2="." k="82" /> +<hkern u1="Ó" u2="," k="82" /> +<hkern u1="Ô" u2="„" k="82" /> +<hkern u1="Ô" u2="‚" k="82" /> +<hkern u1="Ô" u2="Ÿ" k="20" /> +<hkern u1="Ô" u2="Ý" k="20" /> +<hkern u1="Ô" u2="Å" k="41" /> +<hkern u1="Ô" u2="Ä" k="41" /> +<hkern u1="Ô" u2="Ã" k="41" /> +<hkern u1="Ô" u2="Â" k="41" /> +<hkern u1="Ô" u2="Á" k="41" /> +<hkern u1="Ô" u2="À" k="41" /> +<hkern u1="Ô" u2="Z" k="20" /> +<hkern u1="Ô" u2="Y" k="20" /> +<hkern u1="Ô" u2="X" k="41" /> +<hkern u1="Ô" u2="W" k="20" /> +<hkern u1="Ô" u2="V" k="20" /> +<hkern u1="Ô" u2="T" k="61" /> +<hkern u1="Ô" u2="A" k="41" /> +<hkern u1="Ô" u2="." k="82" /> +<hkern u1="Ô" u2="," k="82" /> +<hkern u1="Õ" u2="„" k="82" /> +<hkern u1="Õ" u2="‚" k="82" /> +<hkern u1="Õ" u2="Ÿ" k="20" /> +<hkern u1="Õ" u2="Ý" k="20" /> +<hkern u1="Õ" u2="Å" k="41" /> +<hkern u1="Õ" u2="Ä" k="41" /> +<hkern u1="Õ" u2="Ã" k="41" /> +<hkern u1="Õ" u2="Â" k="41" /> +<hkern u1="Õ" u2="Á" k="41" /> +<hkern u1="Õ" u2="À" k="41" /> +<hkern u1="Õ" u2="Z" k="20" /> +<hkern u1="Õ" u2="Y" k="20" /> +<hkern u1="Õ" u2="X" k="41" /> +<hkern u1="Õ" u2="W" k="20" /> +<hkern u1="Õ" u2="V" k="20" /> +<hkern u1="Õ" u2="T" k="61" /> +<hkern u1="Õ" u2="A" k="41" /> +<hkern u1="Õ" u2="." k="82" /> +<hkern u1="Õ" u2="," k="82" /> +<hkern u1="Ö" u2="„" k="82" /> +<hkern u1="Ö" u2="‚" k="82" /> +<hkern u1="Ö" u2="Ÿ" k="20" /> +<hkern u1="Ö" u2="Ý" k="20" /> +<hkern u1="Ö" u2="Å" k="41" /> +<hkern u1="Ö" u2="Ä" k="41" /> +<hkern u1="Ö" u2="Ã" k="41" /> +<hkern u1="Ö" u2="Â" k="41" /> +<hkern u1="Ö" u2="Á" k="41" /> +<hkern u1="Ö" u2="À" k="41" /> +<hkern u1="Ö" u2="Z" k="20" /> +<hkern u1="Ö" u2="Y" k="20" /> +<hkern u1="Ö" u2="X" k="41" /> +<hkern u1="Ö" u2="W" k="20" /> +<hkern u1="Ö" u2="V" k="20" /> +<hkern u1="Ö" u2="T" k="61" /> +<hkern u1="Ö" u2="A" k="41" /> +<hkern u1="Ö" u2="." k="82" /> +<hkern u1="Ö" u2="," k="82" /> +<hkern u1="Ø" u2="„" k="82" /> +<hkern u1="Ø" u2="‚" k="82" /> +<hkern u1="Ø" u2="Ÿ" k="20" /> +<hkern u1="Ø" u2="Ý" k="20" /> +<hkern u1="Ø" u2="Å" k="41" /> +<hkern u1="Ø" u2="Ä" k="41" /> +<hkern u1="Ø" u2="Ã" k="41" /> +<hkern u1="Ø" u2="Â" k="41" /> +<hkern u1="Ø" u2="Á" k="41" /> +<hkern u1="Ø" u2="À" k="41" /> +<hkern u1="Ø" u2="Z" k="20" /> +<hkern u1="Ø" u2="Y" k="20" /> +<hkern u1="Ø" u2="X" k="41" /> +<hkern u1="Ø" u2="W" k="20" /> +<hkern u1="Ø" u2="V" k="20" /> +<hkern u1="Ø" u2="T" k="61" /> +<hkern u1="Ø" u2="A" k="41" /> +<hkern u1="Ø" u2="." k="82" /> +<hkern u1="Ø" u2="," k="82" /> +<hkern u1="Ù" u2="„" k="41" /> +<hkern u1="Ù" u2="‚" k="41" /> +<hkern u1="Ù" u2="Å" k="20" /> +<hkern u1="Ù" u2="Ä" k="20" /> +<hkern u1="Ù" u2="Ã" k="20" /> +<hkern u1="Ù" u2="Â" k="20" /> +<hkern u1="Ù" u2="Á" k="20" /> +<hkern u1="Ù" u2="À" k="20" /> +<hkern u1="Ù" u2="A" k="20" /> +<hkern u1="Ù" u2="." k="41" /> +<hkern u1="Ù" u2="," k="41" /> +<hkern u1="Ú" u2="„" k="41" /> +<hkern u1="Ú" u2="‚" k="41" /> +<hkern u1="Ú" u2="Å" k="20" /> +<hkern u1="Ú" u2="Ä" k="20" /> +<hkern u1="Ú" u2="Ã" k="20" /> +<hkern u1="Ú" u2="Â" k="20" /> +<hkern u1="Ú" u2="Á" k="20" /> +<hkern u1="Ú" u2="À" k="20" /> +<hkern u1="Ú" u2="A" k="20" /> +<hkern u1="Ú" u2="." k="41" /> +<hkern u1="Ú" u2="," k="41" /> +<hkern u1="Û" u2="„" k="41" /> +<hkern u1="Û" u2="‚" k="41" /> +<hkern u1="Û" u2="Å" k="20" /> +<hkern u1="Û" u2="Ä" k="20" /> +<hkern u1="Û" u2="Ã" k="20" /> +<hkern u1="Û" u2="Â" k="20" /> +<hkern u1="Û" u2="Á" k="20" /> +<hkern u1="Û" u2="À" k="20" /> +<hkern u1="Û" u2="A" k="20" /> +<hkern u1="Û" u2="." k="41" /> +<hkern u1="Û" u2="," k="41" /> +<hkern u1="Ü" u2="„" k="41" /> +<hkern u1="Ü" u2="‚" k="41" /> +<hkern u1="Ü" u2="Å" k="20" /> +<hkern u1="Ü" u2="Ä" k="20" /> +<hkern u1="Ü" u2="Ã" k="20" /> +<hkern u1="Ü" u2="Â" k="20" /> +<hkern u1="Ü" u2="Á" k="20" /> +<hkern u1="Ü" u2="À" k="20" /> +<hkern u1="Ü" u2="A" k="20" /> +<hkern u1="Ü" u2="." k="41" /> +<hkern u1="Ü" u2="," k="41" /> +<hkern u1="Ý" u2="„" k="123" /> +<hkern u1="Ý" u2="‚" k="123" /> +<hkern u1="Ý" u2="œ" k="102" /> +<hkern u1="Ý" u2="Œ" k="41" /> +<hkern u1="Ý" u2="ü" k="61" /> +<hkern u1="Ý" u2="û" k="61" /> +<hkern u1="Ý" u2="ú" k="61" /> +<hkern u1="Ý" u2="ù" k="61" /> +<hkern u1="Ý" u2="ø" k="102" /> +<hkern u1="Ý" u2="ö" k="102" /> +<hkern u1="Ý" u2="õ" k="102" /> +<hkern u1="Ý" u2="ô" k="102" /> +<hkern u1="Ý" u2="ó" k="102" /> +<hkern u1="Ý" u2="ò" k="102" /> +<hkern u1="Ý" u2="ë" k="102" /> +<hkern u1="Ý" u2="ê" k="102" /> +<hkern u1="Ý" u2="é" k="102" /> +<hkern u1="Ý" u2="è" k="102" /> +<hkern u1="Ý" u2="ç" k="102" /> +<hkern u1="Ý" u2="æ" k="102" /> +<hkern u1="Ý" u2="å" k="102" /> +<hkern u1="Ý" u2="ä" k="102" /> +<hkern u1="Ý" u2="ã" k="102" /> +<hkern u1="Ý" u2="â" k="102" /> +<hkern u1="Ý" u2="á" k="102" /> +<hkern u1="Ý" u2="à" k="102" /> +<hkern u1="Ý" u2="Ø" k="41" /> +<hkern u1="Ý" u2="Ö" k="41" /> +<hkern u1="Ý" u2="Õ" k="41" /> +<hkern u1="Ý" u2="Ô" k="41" /> +<hkern u1="Ý" u2="Ó" k="41" /> +<hkern u1="Ý" u2="Ò" k="41" /> +<hkern u1="Ý" u2="Ç" k="41" /> +<hkern u1="Ý" u2="Å" k="123" /> +<hkern u1="Ý" u2="Ä" k="123" /> +<hkern u1="Ý" u2="Ã" k="123" /> +<hkern u1="Ý" u2="Â" k="123" /> +<hkern u1="Ý" u2="Á" k="123" /> +<hkern u1="Ý" u2="À" k="123" /> +<hkern u1="Ý" u2="z" k="41" /> +<hkern u1="Ý" u2="u" k="61" /> +<hkern u1="Ý" u2="s" k="82" /> +<hkern u1="Ý" u2="r" k="61" /> +<hkern u1="Ý" u2="q" k="102" /> +<hkern u1="Ý" u2="p" k="61" /> +<hkern u1="Ý" u2="o" k="102" /> +<hkern u1="Ý" u2="n" k="61" /> +<hkern u1="Ý" u2="m" k="61" /> +<hkern u1="Ý" u2="g" k="41" /> +<hkern u1="Ý" u2="e" k="102" /> +<hkern u1="Ý" u2="d" k="102" /> +<hkern u1="Ý" u2="c" k="102" /> +<hkern u1="Ý" u2="a" k="102" /> +<hkern u1="Ý" u2="Q" k="41" /> +<hkern u1="Ý" u2="O" k="41" /> +<hkern u1="Ý" u2="G" k="41" /> +<hkern u1="Ý" u2="C" k="41" /> +<hkern u1="Ý" u2="A" k="123" /> +<hkern u1="Ý" u2="?" k="-41" /> +<hkern u1="Ý" u2="." k="123" /> +<hkern u1="Ý" u2="," k="123" /> +<hkern u1="Þ" u2="„" k="266" /> +<hkern u1="Þ" u2="‚" k="266" /> +<hkern u1="Þ" u2="Å" k="102" /> +<hkern u1="Þ" u2="Ä" k="102" /> +<hkern u1="Þ" u2="Ã" k="102" /> +<hkern u1="Þ" u2="Â" k="102" /> +<hkern u1="Þ" u2="Á" k="102" /> +<hkern u1="Þ" u2="À" k="102" /> +<hkern u1="Þ" u2="Z" k="20" /> +<hkern u1="Þ" u2="X" k="41" /> +<hkern u1="Þ" u2="A" k="102" /> +<hkern u1="Þ" u2="." k="266" /> +<hkern u1="Þ" u2="," k="266" /> +<hkern u1="à" u2="”" k="20" /> +<hkern u1="à" u2="’" k="20" /> +<hkern u1="à" u2="'" k="20" /> +<hkern u1="à" u2=""" k="20" /> +<hkern u1="á" u2="”" k="20" /> +<hkern u1="á" u2="’" k="20" /> +<hkern u1="á" u2="'" k="20" /> +<hkern u1="á" u2=""" k="20" /> +<hkern u1="â" u2="”" k="20" /> +<hkern u1="â" u2="’" k="20" /> +<hkern u1="â" u2="'" k="20" /> +<hkern u1="â" u2=""" k="20" /> +<hkern u1="ã" u2="”" k="20" /> +<hkern u1="ã" u2="’" k="20" /> +<hkern u1="ã" u2="'" k="20" /> +<hkern u1="ã" u2=""" k="20" /> +<hkern u1="ä" u2="”" k="20" /> +<hkern u1="ä" u2="’" k="20" /> +<hkern u1="ä" u2="'" k="20" /> +<hkern u1="ä" u2=""" k="20" /> +<hkern u1="å" u2="”" k="20" /> +<hkern u1="å" u2="’" k="20" /> +<hkern u1="å" u2="'" k="20" /> +<hkern u1="å" u2=""" k="20" /> +<hkern u1="è" u2="”" k="20" /> +<hkern u1="è" u2="’" k="20" /> +<hkern u1="è" u2="ý" k="41" /> +<hkern u1="è" u2="z" k="20" /> +<hkern u1="è" u2="y" k="41" /> +<hkern u1="è" u2="x" k="41" /> +<hkern u1="è" u2="w" k="41" /> +<hkern u1="è" u2="v" k="41" /> +<hkern u1="è" u2="'" k="20" /> +<hkern u1="è" u2=""" k="20" /> +<hkern u1="é" u2="”" k="20" /> +<hkern u1="é" u2="’" k="20" /> +<hkern u1="é" u2="ý" k="41" /> +<hkern u1="é" u2="z" k="20" /> +<hkern u1="é" u2="y" k="41" /> +<hkern u1="é" u2="x" k="41" /> +<hkern u1="é" u2="w" k="41" /> +<hkern u1="é" u2="v" k="41" /> +<hkern u1="é" u2="'" k="20" /> +<hkern u1="é" u2=""" k="20" /> +<hkern u1="ê" u2="”" k="20" /> +<hkern u1="ê" u2="’" k="20" /> +<hkern u1="ê" u2="ý" k="41" /> +<hkern u1="ê" u2="z" k="20" /> +<hkern u1="ê" u2="y" k="41" /> +<hkern u1="ê" u2="x" k="41" /> +<hkern u1="ê" u2="w" k="41" /> +<hkern u1="ê" u2="v" k="41" /> +<hkern u1="ê" u2="'" k="20" /> +<hkern u1="ê" u2=""" k="20" /> +<hkern u1="ë" u2="”" k="20" /> +<hkern u1="ë" u2="’" k="20" /> +<hkern u1="ë" u2="ý" k="41" /> +<hkern u1="ë" u2="z" k="20" /> +<hkern u1="ë" u2="y" k="41" /> +<hkern u1="ë" u2="x" k="41" /> +<hkern u1="ë" u2="w" k="41" /> +<hkern u1="ë" u2="v" k="41" /> +<hkern u1="ë" u2="'" k="20" /> +<hkern u1="ë" u2=""" k="20" /> +<hkern u1="ð" u2="”" k="20" /> +<hkern u1="ð" u2="’" k="20" /> +<hkern u1="ð" u2="ý" k="41" /> +<hkern u1="ð" u2="z" k="20" /> +<hkern u1="ð" u2="y" k="41" /> +<hkern u1="ð" u2="x" k="41" /> +<hkern u1="ð" u2="w" k="41" /> +<hkern u1="ð" u2="v" k="41" /> +<hkern u1="ð" u2="'" k="20" /> +<hkern u1="ð" u2=""" k="20" /> +<hkern u1="ò" u2="”" k="20" /> +<hkern u1="ò" u2="’" k="20" /> +<hkern u1="ò" u2="ý" k="41" /> +<hkern u1="ò" u2="z" k="20" /> +<hkern u1="ò" u2="y" k="41" /> +<hkern u1="ò" u2="x" k="41" /> +<hkern u1="ò" u2="w" k="41" /> +<hkern u1="ò" u2="v" k="41" /> +<hkern u1="ò" u2="'" k="20" /> +<hkern u1="ò" u2=""" k="20" /> +<hkern u1="ó" u2="”" k="20" /> +<hkern u1="ó" u2="’" k="20" /> +<hkern u1="ó" u2="ý" k="41" /> +<hkern u1="ó" u2="z" k="20" /> +<hkern u1="ó" u2="y" k="41" /> +<hkern u1="ó" u2="x" k="41" /> +<hkern u1="ó" u2="w" k="41" /> +<hkern u1="ó" u2="v" k="41" /> +<hkern u1="ó" u2="'" k="20" /> +<hkern u1="ó" u2=""" k="20" /> +<hkern u1="ô" u2="”" k="20" /> +<hkern u1="ô" u2="’" k="20" /> +<hkern u1="ô" u2="ý" k="41" /> +<hkern u1="ô" u2="z" k="20" /> +<hkern u1="ô" u2="y" k="41" /> +<hkern u1="ô" u2="x" k="41" /> +<hkern u1="ô" u2="w" k="41" /> +<hkern u1="ô" u2="v" k="41" /> +<hkern u1="ô" u2="'" k="20" /> +<hkern u1="ô" u2=""" k="20" /> +<hkern u1="ö" u2="”" k="41" /> +<hkern u1="ö" u2="’" k="41" /> +<hkern u1="ö" u2="'" k="41" /> +<hkern u1="ö" u2=""" k="41" /> +<hkern u1="ø" u2="”" k="20" /> +<hkern u1="ø" u2="’" k="20" /> +<hkern u1="ø" u2="ý" k="41" /> +<hkern u1="ø" u2="z" k="20" /> +<hkern u1="ø" u2="y" k="41" /> +<hkern u1="ø" u2="x" k="41" /> +<hkern u1="ø" u2="w" k="41" /> +<hkern u1="ø" u2="v" k="41" /> +<hkern u1="ø" u2="'" k="20" /> +<hkern u1="ø" u2=""" k="20" /> +<hkern u1="ý" u2="„" k="82" /> +<hkern u1="ý" u2="”" k="-82" /> +<hkern u1="ý" u2="‚" k="82" /> +<hkern u1="ý" u2="’" k="-82" /> +<hkern u1="ý" u2="?" k="-41" /> +<hkern u1="ý" u2="." k="82" /> +<hkern u1="ý" u2="," k="82" /> +<hkern u1="ý" u2="'" k="-82" /> +<hkern u1="ý" u2=""" k="-82" /> +<hkern u1="þ" u2="”" k="20" /> +<hkern u1="þ" u2="’" k="20" /> +<hkern u1="þ" u2="ý" k="41" /> +<hkern u1="þ" u2="z" k="20" /> +<hkern u1="þ" u2="y" k="41" /> +<hkern u1="þ" u2="x" k="41" /> +<hkern u1="þ" u2="w" k="41" /> +<hkern u1="þ" u2="v" k="41" /> +<hkern u1="þ" u2="'" k="20" /> +<hkern u1="þ" u2=""" k="20" /> +<hkern u1="ÿ" u2="„" k="82" /> +<hkern u1="ÿ" u2="”" k="-82" /> +<hkern u1="ÿ" u2="‚" k="82" /> +<hkern u1="ÿ" u2="’" k="-82" /> +<hkern u1="ÿ" u2="?" k="-41" /> +<hkern u1="ÿ" u2="." k="82" /> +<hkern u1="ÿ" u2="," k="82" /> +<hkern u1="ÿ" u2="'" k="-82" /> +<hkern u1="ÿ" u2=""" k="-82" /> +<hkern u1="Œ" u2="J" k="-123" /> +<hkern u1="Ÿ" u2="„" k="123" /> +<hkern u1="Ÿ" u2="‚" k="123" /> +<hkern u1="Ÿ" u2="œ" k="102" /> +<hkern u1="Ÿ" u2="Œ" k="41" /> +<hkern u1="Ÿ" u2="ü" k="61" /> +<hkern u1="Ÿ" u2="û" k="61" /> +<hkern u1="Ÿ" u2="ú" k="61" /> +<hkern u1="Ÿ" u2="ù" k="61" /> +<hkern u1="Ÿ" u2="ø" k="102" /> +<hkern u1="Ÿ" u2="ö" k="102" /> +<hkern u1="Ÿ" u2="õ" k="102" /> +<hkern u1="Ÿ" u2="ô" k="102" /> +<hkern u1="Ÿ" u2="ó" k="102" /> +<hkern u1="Ÿ" u2="ò" k="102" /> +<hkern u1="Ÿ" u2="ë" k="102" /> +<hkern u1="Ÿ" u2="ê" k="102" /> +<hkern u1="Ÿ" u2="é" k="102" /> +<hkern u1="Ÿ" u2="è" k="102" /> +<hkern u1="Ÿ" u2="ç" k="102" /> +<hkern u1="Ÿ" u2="æ" k="102" /> +<hkern u1="Ÿ" u2="å" k="102" /> +<hkern u1="Ÿ" u2="ä" k="102" /> +<hkern u1="Ÿ" u2="ã" k="102" /> +<hkern u1="Ÿ" u2="â" k="102" /> +<hkern u1="Ÿ" u2="á" k="102" /> +<hkern u1="Ÿ" u2="à" k="102" /> +<hkern u1="Ÿ" u2="Ø" k="41" /> +<hkern u1="Ÿ" u2="Ö" k="41" /> +<hkern u1="Ÿ" u2="Õ" k="41" /> +<hkern u1="Ÿ" u2="Ô" k="41" /> +<hkern u1="Ÿ" u2="Ó" k="41" /> +<hkern u1="Ÿ" u2="Ò" k="41" /> +<hkern u1="Ÿ" u2="Ç" k="41" /> +<hkern u1="Ÿ" u2="Å" k="123" /> +<hkern u1="Ÿ" u2="Ä" k="123" /> +<hkern u1="Ÿ" u2="Ã" k="123" /> +<hkern u1="Ÿ" u2="Â" k="123" /> +<hkern u1="Ÿ" u2="Á" k="123" /> +<hkern u1="Ÿ" u2="À" k="123" /> +<hkern u1="Ÿ" u2="z" k="41" /> +<hkern u1="Ÿ" u2="u" k="61" /> +<hkern u1="Ÿ" u2="s" k="82" /> +<hkern u1="Ÿ" u2="r" k="61" /> +<hkern u1="Ÿ" u2="q" k="102" /> +<hkern u1="Ÿ" u2="p" k="61" /> +<hkern u1="Ÿ" u2="o" k="102" /> +<hkern u1="Ÿ" u2="n" k="61" /> +<hkern u1="Ÿ" u2="m" k="61" /> +<hkern u1="Ÿ" u2="g" k="41" /> +<hkern u1="Ÿ" u2="e" k="102" /> +<hkern u1="Ÿ" u2="d" k="102" /> +<hkern u1="Ÿ" u2="c" k="102" /> +<hkern u1="Ÿ" u2="a" k="102" /> +<hkern u1="Ÿ" u2="Q" k="41" /> +<hkern u1="Ÿ" u2="O" k="41" /> +<hkern u1="Ÿ" u2="G" k="41" /> +<hkern u1="Ÿ" u2="C" k="41" /> +<hkern u1="Ÿ" u2="A" k="123" /> +<hkern u1="Ÿ" u2="?" k="-41" /> +<hkern u1="Ÿ" u2="." k="123" /> +<hkern u1="Ÿ" u2="," k="123" /> +<hkern u1="–" u2="T" k="82" /> +<hkern u1="—" u2="T" k="82" /> +<hkern u1="‘" u2="Ÿ" k="-20" /> +<hkern u1="‘" u2="œ" k="123" /> +<hkern u1="‘" u2="ü" k="61" /> +<hkern u1="‘" u2="û" k="61" /> +<hkern u1="‘" u2="ú" k="61" /> +<hkern u1="‘" u2="ù" k="61" /> +<hkern u1="‘" u2="ø" k="123" /> +<hkern u1="‘" u2="ö" k="123" /> +<hkern u1="‘" u2="õ" k="123" /> +<hkern u1="‘" u2="ô" k="123" /> +<hkern u1="‘" u2="ó" k="123" /> +<hkern u1="‘" u2="ò" k="123" /> +<hkern u1="‘" u2="ë" k="123" /> +<hkern u1="‘" u2="ê" k="123" /> +<hkern u1="‘" u2="é" k="123" /> +<hkern u1="‘" u2="è" k="123" /> +<hkern u1="‘" u2="ç" k="123" /> +<hkern u1="‘" u2="æ" k="82" /> +<hkern u1="‘" u2="å" k="82" /> +<hkern u1="‘" u2="ä" k="82" /> +<hkern u1="‘" u2="ã" k="82" /> +<hkern u1="‘" u2="â" k="82" /> +<hkern u1="‘" u2="á" k="82" /> +<hkern u1="‘" u2="à" k="123" /> +<hkern u1="‘" u2="Ý" k="-20" /> +<hkern u1="‘" u2="Å" k="143" /> +<hkern u1="‘" u2="Ä" k="143" /> +<hkern u1="‘" u2="Ã" k="143" /> +<hkern u1="‘" u2="Â" k="143" /> +<hkern u1="‘" u2="Á" k="143" /> +<hkern u1="‘" u2="À" k="143" /> +<hkern u1="‘" u2="u" k="61" /> +<hkern u1="‘" u2="s" k="61" /> +<hkern u1="‘" u2="r" k="61" /> +<hkern u1="‘" u2="q" k="123" /> +<hkern u1="‘" u2="p" k="61" /> +<hkern u1="‘" u2="o" k="123" /> +<hkern u1="‘" u2="n" k="61" /> +<hkern u1="‘" u2="m" k="61" /> +<hkern u1="‘" u2="g" k="61" /> +<hkern u1="‘" u2="e" k="123" /> +<hkern u1="‘" u2="d" k="123" /> +<hkern u1="‘" u2="c" k="123" /> +<hkern u1="‘" u2="a" k="82" /> +<hkern u1="‘" u2="Y" k="-20" /> +<hkern u1="‘" u2="W" k="-41" /> +<hkern u1="‘" u2="V" k="-41" /> +<hkern u1="‘" u2="T" k="-41" /> +<hkern u1="‘" u2="A" k="143" /> +<hkern u1="’" u2="Ÿ" k="-20" /> +<hkern u1="’" u2="œ" k="123" /> +<hkern u1="’" u2="ü" k="61" /> +<hkern u1="’" u2="û" k="61" /> +<hkern u1="’" u2="ú" k="61" /> +<hkern u1="’" u2="ù" k="61" /> +<hkern u1="’" u2="ø" k="123" /> +<hkern u1="’" u2="ö" k="123" /> +<hkern u1="’" u2="õ" k="123" /> +<hkern u1="’" u2="ô" k="123" /> +<hkern u1="’" u2="ó" k="123" /> +<hkern u1="’" u2="ò" k="123" /> +<hkern u1="’" u2="ë" k="123" /> +<hkern u1="’" u2="ê" k="123" /> +<hkern u1="’" u2="é" k="123" /> +<hkern u1="’" u2="è" k="123" /> +<hkern u1="’" u2="ç" k="123" /> +<hkern u1="’" u2="æ" k="82" /> +<hkern u1="’" u2="å" k="82" /> +<hkern u1="’" u2="ä" k="82" /> +<hkern u1="’" u2="ã" k="82" /> +<hkern u1="’" u2="â" k="82" /> +<hkern u1="’" u2="á" k="82" /> +<hkern u1="’" u2="à" k="123" /> +<hkern u1="’" u2="Ý" k="-20" /> +<hkern u1="’" u2="Å" k="143" /> +<hkern u1="’" u2="Ä" k="143" /> +<hkern u1="’" u2="Ã" k="143" /> +<hkern u1="’" u2="Â" k="143" /> +<hkern u1="’" u2="Á" k="143" /> +<hkern u1="’" u2="À" k="143" /> +<hkern u1="’" u2="u" k="61" /> +<hkern u1="’" u2="s" k="61" /> +<hkern u1="’" u2="r" k="61" /> +<hkern u1="’" u2="q" k="123" /> +<hkern u1="’" u2="p" k="61" /> +<hkern u1="’" u2="o" k="123" /> +<hkern u1="’" u2="n" k="61" /> +<hkern u1="’" u2="m" k="61" /> +<hkern u1="’" u2="g" k="61" /> +<hkern u1="’" u2="e" k="123" /> +<hkern u1="’" u2="d" k="123" /> +<hkern u1="’" u2="c" k="123" /> +<hkern u1="’" u2="a" k="82" /> +<hkern u1="’" u2="Y" k="-20" /> +<hkern u1="’" u2="W" k="-41" /> +<hkern u1="’" u2="V" k="-41" /> +<hkern u1="’" u2="T" k="-41" /> +<hkern u1="’" u2="A" k="143" /> +<hkern u1="‚" u2="Ÿ" k="123" /> +<hkern u1="‚" u2="Œ" k="102" /> +<hkern u1="‚" u2="Ý" k="123" /> +<hkern u1="‚" u2="Ü" k="41" /> +<hkern u1="‚" u2="Û" k="41" /> +<hkern u1="‚" u2="Ú" k="41" /> +<hkern u1="‚" u2="Ù" k="41" /> +<hkern u1="‚" u2="Ø" k="102" /> +<hkern u1="‚" u2="Ö" k="102" /> +<hkern u1="‚" u2="Õ" k="102" /> +<hkern u1="‚" u2="Ô" k="102" /> +<hkern u1="‚" u2="Ó" k="102" /> +<hkern u1="‚" u2="Ò" k="102" /> +<hkern u1="‚" u2="Ç" k="102" /> +<hkern u1="‚" u2="Y" k="123" /> +<hkern u1="‚" u2="W" k="123" /> +<hkern u1="‚" u2="V" k="123" /> +<hkern u1="‚" u2="U" k="41" /> +<hkern u1="‚" u2="T" k="143" /> +<hkern u1="‚" u2="Q" k="102" /> +<hkern u1="‚" u2="O" k="102" /> +<hkern u1="‚" u2="G" k="102" /> +<hkern u1="‚" u2="C" k="102" /> +<hkern u1="“" u2="Ÿ" k="-20" /> +<hkern u1="“" u2="œ" k="123" /> +<hkern u1="“" u2="ü" k="61" /> +<hkern u1="“" u2="û" k="61" /> +<hkern u1="“" u2="ú" k="61" /> +<hkern u1="“" u2="ù" k="61" /> +<hkern u1="“" u2="ø" k="123" /> +<hkern u1="“" u2="ö" k="123" /> +<hkern u1="“" u2="õ" k="123" /> +<hkern u1="“" u2="ô" k="123" /> +<hkern u1="“" u2="ó" k="123" /> +<hkern u1="“" u2="ò" k="123" /> +<hkern u1="“" u2="ë" k="123" /> +<hkern u1="“" u2="ê" k="123" /> +<hkern u1="“" u2="é" k="123" /> +<hkern u1="“" u2="è" k="123" /> +<hkern u1="“" u2="ç" k="123" /> +<hkern u1="“" u2="æ" k="82" /> +<hkern u1="“" u2="å" k="82" /> +<hkern u1="“" u2="ä" k="82" /> +<hkern u1="“" u2="ã" k="82" /> +<hkern u1="“" u2="â" k="82" /> +<hkern u1="“" u2="á" k="82" /> +<hkern u1="“" u2="à" k="123" /> +<hkern u1="“" u2="Ý" k="-20" /> +<hkern u1="“" u2="Å" k="143" /> +<hkern u1="“" u2="Ä" k="143" /> +<hkern u1="“" u2="Ã" k="143" /> +<hkern u1="“" u2="Â" k="143" /> +<hkern u1="“" u2="Á" k="143" /> +<hkern u1="“" u2="À" k="143" /> +<hkern u1="“" u2="u" k="61" /> +<hkern u1="“" u2="s" k="61" /> +<hkern u1="“" u2="r" k="61" /> +<hkern u1="“" u2="q" k="123" /> +<hkern u1="“" u2="p" k="61" /> +<hkern u1="“" u2="o" k="123" /> +<hkern u1="“" u2="n" k="61" /> +<hkern u1="“" u2="m" k="61" /> +<hkern u1="“" u2="g" k="61" /> +<hkern u1="“" u2="e" k="123" /> +<hkern u1="“" u2="d" k="123" /> +<hkern u1="“" u2="c" k="123" /> +<hkern u1="“" u2="a" k="82" /> +<hkern u1="“" u2="Y" k="-20" /> +<hkern u1="“" u2="W" k="-41" /> +<hkern u1="“" u2="V" k="-41" /> +<hkern u1="“" u2="T" k="-41" /> +<hkern u1="“" u2="A" k="143" /> +<hkern u1="„" u2="Ÿ" k="123" /> +<hkern u1="„" u2="Œ" k="102" /> +<hkern u1="„" u2="Ý" k="123" /> +<hkern u1="„" u2="Ü" k="41" /> +<hkern u1="„" u2="Û" k="41" /> +<hkern u1="„" u2="Ú" k="41" /> +<hkern u1="„" u2="Ù" k="41" /> +<hkern u1="„" u2="Ø" k="102" /> +<hkern u1="„" u2="Ö" k="102" /> +<hkern u1="„" u2="Õ" k="102" /> +<hkern u1="„" u2="Ô" k="102" /> +<hkern u1="„" u2="Ó" k="102" /> +<hkern u1="„" u2="Ò" k="102" /> +<hkern u1="„" u2="Ç" k="102" /> +<hkern u1="„" u2="Y" k="123" /> +<hkern u1="„" u2="W" k="123" /> +<hkern u1="„" u2="V" k="123" /> +<hkern u1="„" u2="U" k="41" /> +<hkern u1="„" u2="T" k="143" /> +<hkern u1="„" u2="Q" k="102" /> +<hkern u1="„" u2="O" k="102" /> +<hkern u1="„" u2="G" k="102" /> +<hkern u1="„" u2="C" k="102" /> +</font> +</defs></svg>
\ No newline at end of file diff --git a/documentation/jsapi/fonts/OpenSans-Regular-webfont.woff b/documentation/jsapi/fonts/OpenSans-Regular-webfont.woff Binary files differnew file mode 100644 index 000000000..e231183dc --- /dev/null +++ b/documentation/jsapi/fonts/OpenSans-Regular-webfont.woff diff --git a/documentation/jsapi/fs.js.html b/documentation/jsapi/fs.js.html new file mode 100644 index 000000000..3ee1af8e6 --- /dev/null +++ b/documentation/jsapi/fs.js.html @@ -0,0 +1,350 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="utf-8"> + <title>JSDoc: Source: fs.js</title> + + <script src="scripts/prettify/prettify.js"> </script> + <script src="scripts/prettify/lang-css.js"> </script> + <!--[if lt IE 9]> + <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script> + <![endif]--> + <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css"> + <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css"> +</head> + +<body> + +<div id="main"> + + <h1 class="page-title">Source: fs.js</h1> + + + + + + + <section> + <article> + <pre class="prettyprint source linenums"><code>'use strict'; +'require rpc'; + +/** + * @typedef {Object} FileStatEntry + * @memberof LuCI.fs + + * @property {string} name - Name of the directory entry + * @property {string} type - Type of the entry, one of `block`, `char`, `directory`, `fifo`, `symlink`, `file`, `socket` or `unknown` + * @property {number} size - Size in bytes + * @property {number} mode - Access permissions + * @property {number} atime - Last access time in seconds since epoch + * @property {number} mtime - Last modification time in seconds since epoch + * @property {number} ctime - Last change time in seconds since epoch + * @property {number} inode - Inode number + * @property {number} uid - Numeric owner id + * @property {number} gid - Numeric group id + */ + +/** + * @typedef {Object} FileExecResult + * @memberof LuCI.fs + * + * @property {number} code - The exit code of the invoked command + * @property {string} [stdout] - The stdout produced by the command, if any + * @property {string} [stderr] - The stderr produced by the command, if any + */ + +var callFileList, callFileStat, callFileRead, callFileWrite, callFileRemove, + callFileExec, callFileMD5; + +callFileList = rpc.declare({ + object: 'file', + method: 'list', + params: [ 'path' ] +}); + +callFileStat = rpc.declare({ + object: 'file', + method: 'stat', + params: [ 'path' ] +}); + +callFileRead = rpc.declare({ + object: 'file', + method: 'read', + params: [ 'path' ] +}); + +callFileWrite = rpc.declare({ + object: 'file', + method: 'write', + params: [ 'path', 'data', 'mode' ] +}); + +callFileRemove = rpc.declare({ + object: 'file', + method: 'remove', + params: [ 'path' ] +}); + +callFileExec = rpc.declare({ + object: 'file', + method: 'exec', + params: [ 'command', 'params', 'env' ] +}); + +callFileMD5 = rpc.declare({ + object: 'file', + method: 'md5', + params: [ 'path' ] +}); + +var rpcErrors = [ + null, + 'InvalidCommandError', + 'InvalidArgumentError', + 'MethodNotFoundError', + 'NotFoundError', + 'NoDataError', + 'PermissionError', + 'TimeoutError', + 'UnsupportedError' +]; + +function handleRpcReply(expect, rc) { + if (typeof(rc) == 'number' && rc != 0) { + var e = new Error(rpc.getStatusText(rc)); e.name = rpcErrors[rc] || 'Error'; + throw e; + } + + if (expect) { + var type = Object.prototype.toString; + + for (var key in expect) { + if (rc != null && key != '') + rc = rc[key]; + + if (rc == null || type.call(rc) != type.call(expect[key])) { + var e = new Error(_('Unexpected reply data format')); e.name = 'TypeError'; + throw e; + } + + break; + } + } + + return rc; +} + +/** + * @class fs + * @memberof LuCI + * @hideconstructor + * @classdesc + * + * Provides high level utilities to wrap file system related RPC calls. + * To import the class in views, use `'require fs'`, to import it in + * external JavaScript, use `L.require("fs").then(...)`. + */ +var FileSystem = L.Class.extend(/** @lends LuCI.fs.prototype */ { + /** + * Obtains a listing of the specified directory. + * + * @param {string} path + * The directory path to list. + * + * @returns {Promise<LuCI.fs.FileStatEntry[]>} + * Returns a promise resolving to an array of stat detail objects or + * rejecting with an error stating the failure reason. + */ + list: function(path) { + return callFileList(path).then(handleRpcReply.bind(this, { entries: [] })); + }, + + /** + * Return file stat information on the specified path. + * + * @param {string} path + * The filesystem path to stat. + * + * @returns {Promise<LuCI.fs.FileStatEntry>} + * Returns a promise resolving to a stat detail object or + * rejecting with an error stating the failure reason. + */ + stat: function(path) { + return callFileStat(path).then(handleRpcReply.bind(this, { '': {} })); + }, + + /** + * Read the contents of the given file and return them. + * Note: this function is unsuitable for obtaining binary data. + * + * @param {string} path + * The file path to read. + * + * @returns {Promise<string>} + * Returns a promise resolving to a string containing the file contents or + * rejecting with an error stating the failure reason. + */ + read: function(path) { + return callFileRead(path).then(handleRpcReply.bind(this, { data: '' })); + }, + + /** + * Write the given data to the specified file path. + * If the specified file path does not exist, it will be created, given + * sufficient permissions. + * + * Note: `data` will be converted to a string using `String(data)` or to + * `''` when it is `null`. + * + * @param {string} path + * The file path to write to. + * + * @param {*} [data] + * The file data to write. If it is null, it will be set to an empty + * string. + * + * @param {number} [mode] + * The permissions to use on file creation. Default is 420 (0644). + * + * @returns {Promise<number>} + * Returns a promise resolving to `0` or rejecting with an error stating + * the failure reason. + */ + write: function(path, data, mode) { + data = (data != null) ? String(data) : ''; + mode = (mode != null) ? mode : 420; // 0644 + return callFileWrite(path, data, mode).then(handleRpcReply.bind(this, { '': 0 })); + }, + + /** + * Unlink the given file. + * + * @param {string} + * The file path to remove. + * + * @returns {Promise<number>} + * Returns a promise resolving to `0` or rejecting with an error stating + * the failure reason. + */ + remove: function(path) { + return callFileRemove(path).then(handleRpcReply.bind(this, { '': 0 })); + }, + + /** + * Execute the specified command, optionally passing params and + * environment variables. + * + * Note: The `command` must be either the path to an executable, + * or a basename without arguments in which case it will be searched + * in $PATH. If specified, the values given in `params` will be passed + * as arguments to the command. + * + * The key/value pairs in the optional `env` table are translated to + * `setenv()` calls prior to running the command. + * + * @param {string} command + * The command to invoke. + * + * @param {string[]} [params] + * The arguments to pass to the command. + * + * @param {Object.<string, string>} [env] + * Environment variables to set. + * + * @returns {Promise<LuCI.fs.FileExecResult>} + * Returns a promise resolving to an object describing the execution + * results or rejecting with an error stating the failure reason. + */ + exec: function(command, params, env) { + if (!Array.isArray(params)) + params = null; + + if (!L.isObject(env)) + env = null; + + return callFileExec(command, params, env).then(handleRpcReply.bind(this, { '': {} })); + }, + + /** + * Read the contents of the given file, trim leading and trailing white + * space and return the trimmed result. In case of errors, return an empty + * string instead. + * + * Note: this function is useful to read single-value files in `/sys` + * or `/proc`. + * + * This function is guaranteed to not reject its promises, on failure, + * an empty string will be returned. + * + * @param {string} path + * The file path to read. + * + * @returns {Promise<string>} + * Returns a promise resolving to the file contents or the empty string + * on failure. + */ + trimmed: function(path) { + return L.resolveDefault(this.read(path), '').then(function(s) { + return s.trim(); + }); + }, + + /** + * Read the contents of the given file, split it into lines, trim + * leading and trailing white space of each line and return the + * resulting array. + * + * This function is guaranteed to not reject its promises, on failure, + * an empty array will be returned. + * + * @param {string} path + * The file path to read. + * + * @returns {Promise<string[]>} + * Returns a promise resolving to an array containing the stripped lines + * of the given file or `[]` on failure. + */ + lines: function(path) { + return L.resolveDefault(this.read(path), '').then(function(s) { + var lines = []; + + s = s.trim(); + + if (s != '') { + var l = s.split(/\n/); + + for (var i = 0; i < l.length; i++) + lines.push(l[i].trim()); + } + + return lines; + }); + } +}); + +return FileSystem; +</code></pre> + </article> + </section> + + + + +</div> + +<nav> + <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="LuCI.html">LuCI</a></li><li><a href="LuCI.Class.html">Class</a></li><li><a href="LuCI.dom.html">dom</a></li><li><a href="LuCI.fs.html">fs</a></li><li><a href="LuCI.Headers.html">Headers</a></li><li><a href="LuCI.Network.html">Network</a></li><li><a href="LuCI.Network.Device.html">Device</a></li><li><a href="LuCI.Network.Hosts.html">Hosts</a></li><li><a href="LuCI.Network.Protocol.html">Protocol</a></li><li><a href="LuCI.Network.WifiDevice.html">WifiDevice</a></li><li><a href="LuCI.Network.WifiNetwork.html">WifiNetwork</a></li><li><a href="LuCI.Poll.html">Poll</a></li><li><a href="LuCI.Request.html">Request</a></li><li><a href="LuCI.Request.poll.html">poll</a></li><li><a href="LuCI.Response.html">Response</a></li><li><a href="LuCI.rpc.html">rpc</a></li><li><a href="LuCI.uci.html">uci</a></li><li><a href="LuCI.view.html">view</a></li><li><a href="LuCI.XHR.html">XHR</a></li></ul> +</nav> + +<br class="clear"> + +<footer> + Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a> on Tue Nov 05 2019 09:33:05 GMT+0100 (Central European Standard Time) +</footer> + +<script> prettyPrint(); </script> +<script src="scripts/linenumber.js"> </script> +</body> +</html> diff --git a/documentation/jsapi/index.html b/documentation/jsapi/index.html new file mode 100644 index 000000000..d6997c8d8 --- /dev/null +++ b/documentation/jsapi/index.html @@ -0,0 +1,90 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="utf-8"> + <title>JSDoc: Home</title> + + <script src="scripts/prettify/prettify.js"> </script> + <script src="scripts/prettify/lang-css.js"> </script> + <!--[if lt IE 9]> + <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script> + <![endif]--> + <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css"> + <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css"> +</head> + +<body> + +<div id="main"> + + <h1 class="page-title">Home</h1> + + + + + + + + + <h3> </h3> + + + + + + + + + + + + + + + + <section> + <article><h1>OpenWrt luci feed</h1> +<p><a href="https://hosted.weblate.org/engage/openwrt/?utm_source=widget"><img src="https://hosted.weblate.org/widgets/openwrt/-/svg-badge.svg" alt="Translation status"></a></p> +<h2>Description</h2> +<p>This is the OpenWrt "luci"-feed containing LuCI - OpenWrt Configuration Interface.</p> +<h2>Usage</h2> +<p>This feed is enabled by default. Your feeds.conf.default (or feeds.conf) should contain a line like:</p> +<pre class="prettyprint source"><code>src-git luci https://github.com/openwrt/luci.git +</code></pre> +<p>To install all its package definitions, run:</p> +<pre class="prettyprint source"><code>./scripts/feeds update luci +./scripts/feeds install -a -p luci +</code></pre> +<h2>API Reference</h2> +<p>You can browse the generated API documentation <a href="http://htmlpreview.github.io/?http://raw.githubusercontent.com/openwrt/luci/master/documentation/api/index.html">directly on Github</a>.</p> +<h2>Development</h2> +<p>Documentation for developing and extending LuCI can be found <a href="https://github.com/openwrt/luci/wiki">in the Wiki</a></p> +<h2>License</h2> +<p>See <a href="LICENSE">LICENSE</a> file.</p> +<h2>Package Guidelines</h2> +<p>See <a href="CONTRIBUTING.md">CONTRIBUTING.md</a> file.</p> +<h2>Translation status</h2> +<p><a href="https://hosted.weblate.org/engage/openwrt/?utm_source=widget"><img src="https://hosted.weblate.org/widgets/openwrt/-/multi-auto.svg" alt="Translation status"></a></p></article> + </section> + + + + + + +</div> + +<nav> + <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="LuCI.html">LuCI</a></li><li><a href="LuCI.Class.html">Class</a></li><li><a href="LuCI.dom.html">dom</a></li><li><a href="LuCI.fs.html">fs</a></li><li><a href="LuCI.Headers.html">Headers</a></li><li><a href="LuCI.Network.html">Network</a></li><li><a href="LuCI.Network.Device.html">Device</a></li><li><a href="LuCI.Network.Hosts.html">Hosts</a></li><li><a href="LuCI.Network.Protocol.html">Protocol</a></li><li><a href="LuCI.Network.WifiDevice.html">WifiDevice</a></li><li><a href="LuCI.Network.WifiNetwork.html">WifiNetwork</a></li><li><a href="LuCI.Poll.html">Poll</a></li><li><a href="LuCI.Request.html">Request</a></li><li><a href="LuCI.Request.poll.html">poll</a></li><li><a href="LuCI.Response.html">Response</a></li><li><a href="LuCI.rpc.html">rpc</a></li><li><a href="LuCI.uci.html">uci</a></li><li><a href="LuCI.view.html">view</a></li><li><a href="LuCI.XHR.html">XHR</a></li></ul> +</nav> + +<br class="clear"> + +<footer> + Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a> on Tue Nov 05 2019 09:33:05 GMT+0100 (Central European Standard Time) +</footer> + +<script> prettyPrint(); </script> +<script src="scripts/linenumber.js"> </script> +</body> +</html>
\ No newline at end of file diff --git a/documentation/jsapi/luci.js.html b/documentation/jsapi/luci.js.html new file mode 100644 index 000000000..7cad32ce5 --- /dev/null +++ b/documentation/jsapi/luci.js.html @@ -0,0 +1,3125 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="utf-8"> + <title>JSDoc: Source: luci.js</title> + + <script src="scripts/prettify/prettify.js"> </script> + <script src="scripts/prettify/lang-css.js"> </script> + <!--[if lt IE 9]> + <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script> + <![endif]--> + <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css"> + <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css"> +</head> + +<body> + +<div id="main"> + + <h1 class="page-title">Source: luci.js</h1> + + + + + + + <section> + <article> + <pre class="prettyprint source linenums"><code>/** + * @class LuCI + * @classdesc + * + * This is the LuCI base class. It is automatically instantiated and + * accessible using the global `L` variable. + * + * @param {Object} env + * The environment settings to use for the LuCI runtime. + */ + +(function(window, document, undefined) { + 'use strict'; + + /* Object.assign polyfill for IE */ + if (typeof Object.assign !== 'function') { + Object.defineProperty(Object, 'assign', { + value: function assign(target, varArgs) { + if (target == null) + throw new TypeError('Cannot convert undefined or null to object'); + + var to = Object(target); + + for (var index = 1; index < arguments.length; index++) + if (arguments[index] != null) + for (var nextKey in arguments[index]) + if (Object.prototype.hasOwnProperty.call(arguments[index], nextKey)) + to[nextKey] = arguments[index][nextKey]; + + return to; + }, + writable: true, + configurable: true + }); + } + + /* Promise.finally polyfill */ + if (typeof Promise.prototype.finally !== 'function') { + Promise.prototype.finally = function(fn) { + var onFinally = function(cb) { + return Promise.resolve(fn.call(this)).then(cb); + }; + + return this.then( + function(result) { return onFinally.call(this, function() { return result }) }, + function(reason) { return onFinally.call(this, function() { return Promise.reject(reason) }) } + ); + }; + } + + /* + * Class declaration and inheritance helper + */ + + var toCamelCase = function(s) { + return s.replace(/(?:^|[\. -])(.)/g, function(m0, m1) { return m1.toUpperCase() }); + }; + + /** + * @class Class + * @hideconstructor + * @memberof LuCI + * @classdesc + * + * `LuCI.Class` is the abstract base class all LuCI classes inherit from. + * + * It provides simple means to create subclasses of given classes and + * implements prototypal inheritance. + */ + var superContext = null, Class = Object.assign(function() {}, { + /** + * Extends this base class with the properties described in + * `properties` and returns a new subclassed Class instance + * + * @memberof LuCI.Class + * + * @param {Object<string, *>} properties + * An object describing the properties to add to the new + * subclass. + * + * @returns {LuCI.Class} + * Returns a new LuCI.Class sublassed from this class, extended + * by the given properties and with its prototype set to this base + * class to enable inheritance. The resulting value represents a + * class constructor and can be instantiated with `new`. + */ + extend: function(properties) { + var props = { + __base__: { value: this.prototype }, + __name__: { value: properties.__name__ || 'anonymous' } + }; + + var ClassConstructor = function() { + if (!(this instanceof ClassConstructor)) + throw new TypeError('Constructor must not be called without "new"'); + + if (Object.getPrototypeOf(this).hasOwnProperty('__init__')) { + if (typeof(this.__init__) != 'function') + throw new TypeError('Class __init__ member is not a function'); + + this.__init__.apply(this, arguments) + } + else { + this.super('__init__', arguments); + } + }; + + for (var key in properties) + if (!props[key] && properties.hasOwnProperty(key)) + props[key] = { value: properties[key], writable: true }; + + ClassConstructor.prototype = Object.create(this.prototype, props); + ClassConstructor.prototype.constructor = ClassConstructor; + Object.assign(ClassConstructor, this); + ClassConstructor.displayName = toCamelCase(props.__name__.value + 'Class'); + + return ClassConstructor; + }, + + /** + * Extends this base class with the properties described in + * `properties`, instantiates the resulting subclass using + * the additional optional arguments passed to this function + * and returns the resulting subclassed Class instance. + * + * This function serves as a convenience shortcut for + * {@link LuCI.Class.extend Class.extend()} and subsequent + * `new`. + * + * @memberof LuCI.Class + * + * @param {Object<string, *>} properties + * An object describing the properties to add to the new + * subclass. + * + * @param {...*} [new_args] + * Specifies arguments to be passed to the subclass constructor + * as-is in order to instantiate the new subclass. + * + * @returns {LuCI.Class} + * Returns a new LuCI.Class instance extended by the given + * properties with its prototype set to this base class to + * enable inheritance. + */ + singleton: function(properties /*, ... */) { + return Class.extend(properties) + .instantiate(Class.prototype.varargs(arguments, 1)); + }, + + /** + * Calls the class constructor using `new` with the given argument + * array being passed as variadic parameters to the constructor. + * + * @memberof LuCI.Class + * + * @param {Array<*>} params + * An array of arbitrary values which will be passed as arguments + * to the constructor function. + * + * @param {...*} [new_args] + * Specifies arguments to be passed to the subclass constructor + * as-is in order to instantiate the new subclass. + * + * @returns {LuCI.Class} + * Returns a new LuCI.Class instance extended by the given + * properties with its prototype set to this base class to + * enable inheritance. + */ + instantiate: function(args) { + return new (Function.prototype.bind.apply(this, + Class.prototype.varargs(args, 0, null)))(); + }, + + /* unused */ + call: function(self, method) { + if (typeof(this.prototype[method]) != 'function') + throw new ReferenceError(method + ' is not defined in class'); + + return this.prototype[method].apply(self, self.varargs(arguments, 1)); + }, + + /** + * Checks whether the given class value is a subclass of this class. + * + * @memberof LuCI.Class + * + * @param {LuCI.Class} classValue + * The class object to test. + * + * @returns {boolean} + * Returns `true` when the given `classValue` is a subclass of this + * class or `false` if the given value is not a valid class or not + * a subclass of this class'. + */ + isSubclass: function(classValue) { + return (classValue != null && + typeof(classValue) == 'function' && + classValue.prototype instanceof this); + }, + + prototype: { + /** + * Extract all values from the given argument array beginning from + * `offset` and prepend any further given optional parameters to + * the beginning of the resulting array copy. + * + * @memberof LuCI.Class + * @instance + * + * @param {Array<*>} args + * The array to extract the values from. + * + * @param {number} offset + * The offset from which to extract the values. An offset of `0` + * would copy all values till the end. + * + * @param {...*} [extra_args] + * Extra arguments to add to prepend to the resultung array. + * + * @returns {Array<*>} + * Returns a new array consisting of the optional extra arguments + * and the values extracted from the `args` array beginning with + * `offset`. + */ + varargs: function(args, offset /*, ... */) { + return Array.prototype.slice.call(arguments, 2) + .concat(Array.prototype.slice.call(args, offset)); + }, + + /** + * Walks up the parent class chain and looks for a class member + * called `key` in any of the parent classes this class inherits + * from. Returns the member value of the superclass or calls the + * member as function and returns its return value when the + * optional `callArgs` array is given. + * + * This function has two signatures and is sensitive to the + * amount of arguments passed to it: + * - `super('key')` - + * Returns the value of `key` when found within one of the + * parent classes. + * - `super('key', ['arg1', 'arg2'])` - + * Calls the `key()` method with parameters `arg1` and `arg2` + * when found within one of the parent classes. + * + * @memberof LuCI.Class + * @instance + * + * @param {string} key + * The name of the superclass member to retrieve. + * + * @param {Array<*>} [callArgs] + * An optional array of function call parameters to use. When + * this parameter is specified, the found member value is called + * as function using the values of this array as arguments. + * + * @throws {ReferenceError} + * Throws a `ReferenceError` when `callArgs` are specified and + * the found member named by `key` is not a function value. + * + * @returns {*|null} + * Returns the value of the found member or the return value of + * the call to the found method. Returns `null` when no member + * was found in the parent class chain or when the call to the + * superclass method returned `null`. + */ + super: function(key, callArgs) { + for (superContext = Object.getPrototypeOf(superContext || + Object.getPrototypeOf(this)); + superContext && !superContext.hasOwnProperty(key); + superContext = Object.getPrototypeOf(superContext)) { } + + if (!superContext) + return null; + + var res = superContext[key]; + + if (arguments.length > 1) { + if (typeof(res) != 'function') + throw new ReferenceError(key + ' is not a function in base class'); + + if (typeof(callArgs) != 'object') + callArgs = this.varargs(arguments, 1); + + res = res.apply(this, callArgs); + } + + superContext = null; + + return res; + }, + + /** + * Returns a string representation of this class. + * + * @returns {string} + * Returns a string representation of this class containing the + * constructor functions `displayName` and describing the class + * members and their respective types. + */ + toString: function() { + var s = '[' + this.constructor.displayName + ']', f = true; + for (var k in this) { + if (this.hasOwnProperty(k)) { + s += (f ? ' {\n' : '') + ' ' + k + ': ' + typeof(this[k]) + '\n'; + f = false; + } + } + return s + (f ? '' : '}'); + } + } + }); + + + /** + * @class + * @memberof LuCI + * @hideconstructor + * @classdesc + * + * The `Headers` class is an internal utility class exposed in HTTP + * response objects using the `response.headers` property. + */ + var Headers = Class.extend(/** @lends LuCI.Headers.prototype */ { + __name__: 'LuCI.XHR.Headers', + __init__: function(xhr) { + var hdrs = this.headers = {}; + xhr.getAllResponseHeaders().split(/\r\n/).forEach(function(line) { + var m = /^([^:]+):(.*)$/.exec(line); + if (m != null) + hdrs[m[1].trim().toLowerCase()] = m[2].trim(); + }); + }, + + /** + * Checks whether the given header name is present. + * Note: Header-Names are case-insensitive. + * + * @instance + * @memberof LuCI.Headers + * @param {string} name + * The header name to check + * + * @returns {boolean} + * Returns `true` if the header name is present, `false` otherwise + */ + has: function(name) { + return this.headers.hasOwnProperty(String(name).toLowerCase()); + }, + + /** + * Returns the value of the given header name. + * Note: Header-Names are case-insensitive. + * + * @instance + * @memberof LuCI.Headers + * @param {string} name + * The header name to read + * + * @returns {string|null} + * The value of the given header name or `null` if the header isn't present. + */ + get: function(name) { + var key = String(name).toLowerCase(); + return this.headers.hasOwnProperty(key) ? this.headers[key] : null; + } + }); + + /** + * @class + * @memberof LuCI + * @hideconstructor + * @classdesc + * + * The `Response` class is an internal utility class representing HTTP responses. + */ + var Response = Class.extend({ + __name__: 'LuCI.XHR.Response', + __init__: function(xhr, url, duration, headers, content) { + /** + * Describes whether the response is successful (status codes `200..299`) or not + * @instance + * @memberof LuCI.Response + * @name ok + * @type {boolean} + */ + this.ok = (xhr.status >= 200 && xhr.status <= 299); + + /** + * The numeric HTTP status code of the response + * @instance + * @memberof LuCI.Response + * @name status + * @type {number} + */ + this.status = xhr.status; + + /** + * The HTTP status description message of the response + * @instance + * @memberof LuCI.Response + * @name statusText + * @type {string} + */ + this.statusText = xhr.statusText; + + /** + * The HTTP headers of the response + * @instance + * @memberof LuCI.Response + * @name headers + * @type {LuCI.Headers} + */ + this.headers = (headers != null) ? headers : new Headers(xhr); + + /** + * The total duration of the HTTP request in milliseconds + * @instance + * @memberof LuCI.Response + * @name duration + * @type {number} + */ + this.duration = duration; + + /** + * The final URL of the request, i.e. after following redirects. + * @instance + * @memberof LuCI.Response + * @name url + * @type {string} + */ + this.url = url; + + /* privates */ + this.xhr = xhr; + + if (content != null && typeof(content) == 'object') { + this.responseJSON = content; + this.responseText = null; + } + else if (content != null) { + this.responseJSON = null; + this.responseText = String(content); + } + else { + this.responseJSON = null; + this.responseText = xhr.responseText; + } + }, + + /** + * Clones the given response object, optionally overriding the content + * of the cloned instance. + * + * @instance + * @memberof LuCI.Response + * @param {*} [content] + * Override the content of the cloned response. Object values will be + * treated as JSON response data, all other types will be converted + * using `String()` and treated as response text. + * + * @returns {LuCI.Response} + * The cloned `Response` instance. + */ + clone: function(content) { + var copy = new Response(this.xhr, this.url, this.duration, this.headers, content); + + copy.ok = this.ok; + copy.status = this.status; + copy.statusText = this.statusText; + + return copy; + }, + + /** + * Access the response content as JSON data. + * + * @instance + * @memberof LuCI.Response + * @throws {SyntaxError} + * Throws `SyntaxError` if the content isn't valid JSON. + * + * @returns {*} + * The parsed JSON data. + */ + json: function() { + if (this.responseJSON == null) + this.responseJSON = JSON.parse(this.responseText); + + return this.responseJSON; + }, + + /** + * Access the response content as string. + * + * @instance + * @memberof LuCI.Response + * @returns {string} + * The response content. + */ + text: function() { + if (this.responseText == null && this.responseJSON != null) + this.responseText = JSON.stringify(this.responseJSON); + + return this.responseText; + } + }); + + + var requestQueue = []; + + function isQueueableRequest(opt) { + if (!classes.rpc) + return false; + + if (opt.method != 'POST' || typeof(opt.content) != 'object') + return false; + + if (opt.nobatch === true) + return false; + + var rpcBaseURL = Request.expandURL(classes.rpc.getBaseURL()); + + return (rpcBaseURL != null && opt.url.indexOf(rpcBaseURL) == 0); + } + + function flushRequestQueue() { + if (!requestQueue.length) + return; + + var reqopt = Object.assign({}, requestQueue[0][0], { content: [], nobatch: true }), + batch = []; + + for (var i = 0; i < requestQueue.length; i++) { + batch[i] = requestQueue[i]; + reqopt.content[i] = batch[i][0].content; + } + + requestQueue.length = 0; + + Request.request(rpcBaseURL, reqopt).then(function(reply) { + var json = null, req = null; + + try { json = reply.json() } + catch(e) { } + + while ((req = batch.shift()) != null) + if (Array.isArray(json) && json.length) + req[2].call(reqopt, reply.clone(json.shift())); + else + req[1].call(reqopt, new Error('No related RPC reply')); + }).catch(function(error) { + var req = null; + + while ((req = batch.shift()) != null) + req[1].call(reqopt, error); + }); + } + + /** + * @class + * @memberof LuCI + * @hideconstructor + * @classdesc + * + * The `Request` class allows initiating HTTP requests and provides utilities + * for dealing with responses. + */ + var Request = Class.singleton(/** @lends LuCI.Request.prototype */ { + __name__: 'LuCI.Request', + + interceptors: [], + + /** + * Turn the given relative URL into an absolute URL if necessary. + * + * @instance + * @memberof LuCI.Request + * @param {string} url + * The URL to convert. + * + * @returns {string} + * The absolute URL derived from the given one, or the original URL + * if it already was absolute. + */ + expandURL: function(url) { + if (!/^(?:[^/]+:)?\/\//.test(url)) + url = location.protocol + '//' + location.host + url; + + return url; + }, + + /** + * @typedef {Object} RequestOptions + * @memberof LuCI.Request + * + * @property {string} [method=GET] + * The HTTP method to use, e.g. `GET` or `POST`. + * + * @property {Object<string, Object|string>} [query] + * Query string data to append to the URL. Non-string values of the + * given object will be converted to JSON. + * + * @property {boolean} [cache=false] + * Specifies whether the HTTP response may be retrieved from cache. + * + * @property {string} [username] + * Provides a username for HTTP basic authentication. + * + * @property {string} [password] + * Provides a password for HTTP basic authentication. + * + * @property {number} [timeout] + * Specifies the request timeout in seconds. + * + * @property {boolean} [credentials=false] + * Whether to include credentials such as cookies in the request. + * + * @property {*} [content] + * Specifies the HTTP message body to send along with the request. + * If the value is a function, it is invoked and the return value + * used as content, if it is a FormData instance, it is used as-is, + * if it is an object, it will be converted to JSON, in all other + * cases it is converted to a string. + * + * @property {Object<string, string>} [header] + * Specifies HTTP headers to set for the request. + * + * @property {function} [progress] + * An optional request callback function which receives ProgressEvent + * instances as sole argument during the HTTP request transfer. + */ + + /** + * Initiate an HTTP request to the given target. + * + * @instance + * @memberof LuCI.Request + * @param {string} target + * The URL to request. + * + * @param {LuCI.Request.RequestOptions} [options] + * Additional options to configure the request. + * + * @returns {Promise<LuCI.Response>} + * The resulting HTTP response. + */ + request: function(target, options) { + var state = { xhr: new XMLHttpRequest(), url: this.expandURL(target), start: Date.now() }, + opt = Object.assign({}, options, state), + content = null, + contenttype = null, + callback = this.handleReadyStateChange; + + return new Promise(function(resolveFn, rejectFn) { + opt.xhr.onreadystatechange = callback.bind(opt, resolveFn, rejectFn); + opt.method = String(opt.method || 'GET').toUpperCase(); + + if ('query' in opt) { + var q = (opt.query != null) ? Object.keys(opt.query).map(function(k) { + if (opt.query[k] != null) { + var v = (typeof(opt.query[k]) == 'object') + ? JSON.stringify(opt.query[k]) + : String(opt.query[k]); + + return '%s=%s'.format(encodeURIComponent(k), encodeURIComponent(v)); + } + else { + return encodeURIComponent(k); + } + }).join('&') : ''; + + if (q !== '') { + switch (opt.method) { + case 'GET': + case 'HEAD': + case 'OPTIONS': + opt.url += ((/\?/).test(opt.url) ? '&' : '?') + q; + break; + + default: + if (content == null) { + content = q; + contenttype = 'application/x-www-form-urlencoded'; + } + } + } + } + + if (!opt.cache) + opt.url += ((/\?/).test(opt.url) ? '&' : '?') + (new Date()).getTime(); + + if (isQueueableRequest(opt)) { + requestQueue.push([opt, rejectFn, resolveFn]); + requestAnimationFrame(flushRequestQueue); + return; + } + + if ('username' in opt && 'password' in opt) + opt.xhr.open(opt.method, opt.url, true, opt.username, opt.password); + else + opt.xhr.open(opt.method, opt.url, true); + + opt.xhr.responseType = 'text'; + + if ('overrideMimeType' in opt.xhr) + opt.xhr.overrideMimeType('application/octet-stream'); + + if ('timeout' in opt) + opt.xhr.timeout = +opt.timeout; + + if ('credentials' in opt) + opt.xhr.withCredentials = !!opt.credentials; + + if (opt.content != null) { + switch (typeof(opt.content)) { + case 'function': + content = opt.content(xhr); + break; + + case 'object': + if (!(opt.content instanceof FormData)) { + content = JSON.stringify(opt.content); + contenttype = 'application/json'; + } + else { + content = opt.content; + } + break; + + default: + content = String(opt.content); + } + } + + if ('headers' in opt) + for (var header in opt.headers) + if (opt.headers.hasOwnProperty(header)) { + if (header.toLowerCase() != 'content-type') + opt.xhr.setRequestHeader(header, opt.headers[header]); + else + contenttype = opt.headers[header]; + } + + if ('progress' in opt && 'upload' in opt.xhr) + opt.xhr.upload.addEventListener('progress', opt.progress); + + if (contenttype != null) + opt.xhr.setRequestHeader('Content-Type', contenttype); + + try { + opt.xhr.send(content); + } + catch (e) { + rejectFn.call(opt, e); + } + }); + }, + + handleReadyStateChange: function(resolveFn, rejectFn, ev) { + var xhr = this.xhr, + duration = Date.now() - this.start; + + if (xhr.readyState !== 4) + return; + + if (xhr.status === 0 && xhr.statusText === '') { + if (duration >= this.timeout) + rejectFn.call(this, new Error('XHR request timed out')); + else + rejectFn.call(this, new Error('XHR request aborted by browser')); + } + else { + var response = new Response( + xhr, xhr.responseURL || this.url, duration); + + Promise.all(Request.interceptors.map(function(fn) { return fn(response) })) + .then(resolveFn.bind(this, response)) + .catch(rejectFn.bind(this)); + } + }, + + /** + * Initiate an HTTP GET request to the given target. + * + * @instance + * @memberof LuCI.Request + * @param {string} target + * The URL to request. + * + * @param {LuCI.Request.RequestOptions} [options] + * Additional options to configure the request. + * + * @returns {Promise<LuCI.Response>} + * The resulting HTTP response. + */ + get: function(url, options) { + return this.request(url, Object.assign({ method: 'GET' }, options)); + }, + + /** + * Initiate an HTTP POST request to the given target. + * + * @instance + * @memberof LuCI.Request + * @param {string} target + * The URL to request. + * + * @param {*} [data] + * The request data to send, see {@link LuCI.Request.RequestOptions} for details. + * + * @param {LuCI.Request.RequestOptions} [options] + * Additional options to configure the request. + * + * @returns {Promise<LuCI.Response>} + * The resulting HTTP response. + */ + post: function(url, data, options) { + return this.request(url, Object.assign({ method: 'POST', content: data }, options)); + }, + + /** + * Interceptor functions are invoked whenever an HTTP reply is received, in the order + * these functions have been registered. + * @callback LuCI.Request.interceptorFn + * @param {LuCI.Response} res + * The HTTP response object + */ + + /** + * Register an HTTP response interceptor function. Interceptor + * functions are useful to perform default actions on incoming HTTP + * responses, such as checking for expired authentication or for + * implementing request retries before returning a failure. + * + * @instance + * @memberof LuCI.Request + * @param {LuCI.Request.interceptorFn} interceptorFn + * The interceptor function to register. + * + * @returns {LuCI.Request.interceptorFn} + * The registered function. + */ + addInterceptor: function(interceptorFn) { + if (typeof(interceptorFn) == 'function') + this.interceptors.push(interceptorFn); + return interceptorFn; + }, + + /** + * Remove an HTTP response interceptor function. The passed function + * value must be the very same value that was used to register the + * function. + * + * @instance + * @memberof LuCI.Request + * @param {LuCI.Request.interceptorFn} interceptorFn + * The interceptor function to remove. + * + * @returns {boolean} + * Returns `true` if any function has been removed, else `false`. + */ + removeInterceptor: function(interceptorFn) { + var oldlen = this.interceptors.length, i = oldlen; + while (i--) + if (this.interceptors[i] === interceptorFn) + this.interceptors.splice(i, 1); + return (this.interceptors.length < oldlen); + }, + + /** + * @class + * @memberof LuCI.Request + * @hideconstructor + * @classdesc + * + * The `Request.poll` class provides some convience wrappers around + * {@link LuCI.Poll} mainly to simplify registering repeating HTTP + * request calls as polling functions. + */ + poll: { + /** + * The callback function is invoked whenever an HTTP reply to a + * polled request is received or when the polled request timed + * out. + * + * @callback LuCI.Request.poll~callbackFn + * @param {LuCI.Response} res + * The HTTP response object. + * + * @param {*} data + * The response JSON if the response could be parsed as such, + * else `null`. + * + * @param {number} duration + * The total duration of the request in milliseconds. + */ + + /** + * Register a repeating HTTP request with an optional callback + * to invoke whenever a response for the request is received. + * + * @instance + * @memberof LuCI.Request.poll + * @param {number} interval + * The poll interval in seconds. + * + * @param {string} url + * The URL to request on each poll. + * + * @param {LuCI.Request.RequestOptions} [options] + * Additional options to configure the request. + * + * @param {LuCI.Request.poll~callbackFn} [callback] + * {@link LuCI.Request.poll~callbackFn Callback} function to + * invoke for each HTTP reply. + * + * @throws {TypeError} + * Throws `TypeError` when an invalid interval was passed. + * + * @returns {function} + * Returns the internally created poll function. + */ + add: function(interval, url, options, callback) { + if (isNaN(interval) || interval <= 0) + throw new TypeError('Invalid poll interval'); + + var ival = interval >>> 0, + opts = Object.assign({}, options, { timeout: ival * 1000 - 5 }); + + var fn = function() { + return Request.request(url, options).then(function(res) { + if (!Poll.active()) + return; + + try { + callback(res, res.json(), res.duration); + } + catch (err) { + callback(res, null, res.duration); + } + }); + }; + + return (Poll.add(fn, ival) ? fn : null); + }, + + /** + * Remove a polling request that has been previously added using `add()`. + * This function is essentially a wrapper around + * {@link LuCI.Poll.remove LuCI.Poll.remove()}. + * + * @instance + * @memberof LuCI.Request.poll + * @param {function} entry + * The poll function returned by {@link LuCI.Request.poll#add add()}. + * + * @returns {boolean} + * Returns `true` if any function has been removed, else `false`. + */ + remove: function(entry) { return Poll.remove(entry) }, + + /** + * Alias for {@link LuCI.Poll.start LuCI.Poll.start()}. + * + * @instance + * @memberof LuCI.Request.poll + */ + start: function() { return Poll.start() }, + + /** + * Alias for {@link LuCI.Poll.stop LuCI.Poll.stop()}. + * + * @instance + * @memberof LuCI.Request.poll + */ + stop: function() { return Poll.stop() }, + + /** + * Alias for {@link LuCI.Poll.active LuCI.Poll.active()}. + * + * @instance + * @memberof LuCI.Request.poll + */ + active: function() { return Poll.active() } + } + }); + + /** + * @class + * @memberof LuCI + * @hideconstructor + * @classdesc + * + * The `Poll` class allows registering and unregistering poll actions, + * as well as starting, stopping and querying the state of the polling + * loop. + */ + var Poll = Class.singleton(/** @lends LuCI.Poll.prototype */ { + __name__: 'LuCI.Poll', + + queue: [], + + /** + * Add a new operation to the polling loop. If the polling loop is not + * already started at this point, it will be implicitely started. + * + * @instance + * @memberof LuCI.Poll + * @param {function} fn + * The function to invoke on each poll interval. + * + * @param {number} interval + * The poll interval in seconds. + * + * @throws {TypeError} + * Throws `TypeError` when an invalid interval was passed. + * + * @returns {boolean} + * Returns `true` if the function has been added or `false` if it + * already is registered. + */ + add: function(fn, interval) { + if (interval == null || interval <= 0) + interval = window.L ? window.L.env.pollinterval : null; + + if (isNaN(interval) || typeof(fn) != 'function') + throw new TypeError('Invalid argument to LuCI.Poll.add()'); + + for (var i = 0; i < this.queue.length; i++) + if (this.queue[i].fn === fn) + return false; + + var e = { + r: true, + i: interval >>> 0, + fn: fn + }; + + this.queue.push(e); + + if (this.tick != null && !this.active()) + this.start(); + + return true; + }, + + /** + * Remove an operation from the polling loop. If no further operatons + * are registered, the polling loop is implicitely stopped. + * + * @instance + * @memberof LuCI.Poll + * @param {function} fn + * The function to remove. + * + * @throws {TypeError} + * Throws `TypeError` when the given argument isn't a function. + * + * @returns {boolean} + * Returns `true` if the function has been removed or `false` if it + * wasn't found. + */ + remove: function(fn) { + if (typeof(fn) != 'function') + throw new TypeError('Invalid argument to LuCI.Poll.remove()'); + + var len = this.queue.length; + + for (var i = len; i > 0; i--) + if (this.queue[i-1].fn === fn) + this.queue.splice(i-1, 1); + + if (!this.queue.length && this.stop()) + this.tick = 0; + + return (this.queue.length != len); + }, + + /** + * (Re)start the polling loop. Dispatches a custom `poll-start` event + * to the `document` object upon successful start. + * + * @instance + * @memberof LuCI.Poll + * @returns {boolean} + * Returns `true` if polling has been started (or if no functions + * where registered) or `false` when the polling loop already runs. + */ + start: function() { + if (this.active()) + return false; + + this.tick = 0; + + if (this.queue.length) { + this.timer = window.setInterval(this.step, 1000); + this.step(); + document.dispatchEvent(new CustomEvent('poll-start')); + } + + return true; + }, + + /** + * Stop the polling loop. Dispatches a custom `poll-stop` event + * to the `document` object upon successful stop. + * + * @instance + * @memberof LuCI.Poll + * @returns {boolean} + * Returns `true` if polling has been stopped or `false` if it din't + * run to begin with. + */ + stop: function() { + if (!this.active()) + return false; + + document.dispatchEvent(new CustomEvent('poll-stop')); + window.clearInterval(this.timer); + delete this.timer; + delete this.tick; + return true; + }, + + /* private */ + step: function() { + for (var i = 0, e = null; (e = Poll.queue[i]) != null; i++) { + if ((Poll.tick % e.i) != 0) + continue; + + if (!e.r) + continue; + + e.r = false; + + Promise.resolve(e.fn()).finally((function() { this.r = true }).bind(e)); + } + + Poll.tick = (Poll.tick + 1) % Math.pow(2, 32); + }, + + /** + * Test whether the polling loop is running. + * + * @instance + * @memberof LuCI.Poll + * @returns {boolean} - Returns `true` if polling is active, else `false`. + */ + active: function() { + return (this.timer != null); + } + }); + + + var dummyElem = null, + domParser = null, + originalCBIInit = null, + rpcBaseURL = null, + sysFeatures = null, + classes = {}; + + var LuCI = Class.extend(/** @lends LuCI.prototype */ { + __name__: 'LuCI', + __init__: function(env) { + + document.querySelectorAll('script[src*="/luci.js"]').forEach(function(s) { + if (env.base_url == null || env.base_url == '') { + var m = (s.getAttribute('src') || '').match(/^(.*)\/luci\.js(?:\?v=([^?]+))?$/); + if (m) { + env.base_url = m[1]; + env.resource_version = m[2]; + } + } + }); + + if (env.base_url == null) + this.error('InternalError', 'Cannot find url of luci.js'); + + Object.assign(this.env, env); + + document.addEventListener('poll-start', function(ev) { + document.querySelectorAll('[id^="xhr_poll_status"]').forEach(function(e) { + e.style.display = (e.id == 'xhr_poll_status_off') ? 'none' : ''; + }); + }); + + document.addEventListener('poll-stop', function(ev) { + document.querySelectorAll('[id^="xhr_poll_status"]').forEach(function(e) { + e.style.display = (e.id == 'xhr_poll_status_on') ? 'none' : ''; + }); + }); + + var domReady = new Promise(function(resolveFn, rejectFn) { + document.addEventListener('DOMContentLoaded', resolveFn); + }); + + Promise.all([ + domReady, + this.require('ui'), + this.require('rpc'), + this.require('form'), + this.probeRPCBaseURL() + ]).then(this.setupDOM.bind(this)).catch(this.error); + + originalCBIInit = window.cbi_init; + window.cbi_init = function() {}; + }, + + /** + * Captures the current stack trace and throws an error of the + * specified type as a new exception. Also logs the exception as + * error to the debug console if it is available. + * + * @instance + * @memberof LuCI + * + * @param {Error|string} [type=Error] + * Either a string specifying the type of the error to throw or an + * existing `Error` instance to copy. + * + * @param {string} [fmt=Unspecified error] + * A format string which is used to form the error message, together + * with all subsequent optional arguments. + * + * @param {...*} [args] + * Zero or more variable arguments to the supplied format string. + * + * @throws {Error} + * Throws the created error object with the captured stack trace + * appended to the message and the type set to the given type + * argument or copied from the given error instance. + */ + raise: function(type, fmt /*, ...*/) { + var e = null, + msg = fmt ? String.prototype.format.apply(fmt, this.varargs(arguments, 2)) : null, + stack = null; + + if (type instanceof Error) { + e = type; + + if (msg) + e.message = msg + ': ' + e.message; + } + else { + try { throw new Error('stacktrace') } + catch (e2) { stack = (e2.stack || '').split(/\n/) } + + e = new (window[type || 'Error'] || Error)(msg || 'Unspecified error'); + e.name = type || 'Error'; + } + + stack = (stack || []).map(function(frame) { + frame = frame.replace(/(.*?)@(.+):(\d+):(\d+)/g, 'at $1 ($2:$3:$4)').trim(); + return frame ? ' ' + frame : ''; + }); + + if (!/^ at /.test(stack[0])) + stack.shift(); + + if (/\braise /.test(stack[0])) + stack.shift(); + + if (/\berror /.test(stack[0])) + stack.shift(); + + if (stack.length) + e.message += '\n' + stack.join('\n'); + + if (window.console && console.debug) + console.debug(e); + + throw e; + }, + + /** + * A wrapper around {@link LuCI#raise raise()} which also renders + * the error either as modal overlay when `ui.js` is already loaed + * or directly into the view body. + * + * @instance + * @memberof LuCI + * + * @param {Error|string} [type=Error] + * Either a string specifying the type of the error to throw or an + * existing `Error` instance to copy. + * + * @param {string} [fmt=Unspecified error] + * A format string which is used to form the error message, together + * with all subsequent optional arguments. + * + * @param {...*} [args] + * Zero or more variable arguments to the supplied format string. + * + * @throws {Error} + * Throws the created error object with the captured stack trace + * appended to the message and the type set to the given type + * argument or copied from the given error instance. + */ + error: function(type, fmt /*, ...*/) { + try { + L.raise.apply(L, Array.prototype.slice.call(arguments)); + } + catch (e) { + if (!e.reported) { + if (L.ui) + L.ui.addNotification(e.name || _('Runtime error'), + E('pre', {}, e.message), 'danger'); + else + L.dom.content(document.querySelector('#maincontent'), + E('pre', { 'class': 'alert-message error' }, e.message)); + + e.reported = true; + } + + throw e; + } + }, + + /** + * Return a bound function using the given `self` as `this` context + * and any further arguments as parameters to the bound function. + * + * @instance + * @memberof LuCI + * + * @param {function} fn + * The function to bind. + * + * @param {*} self + * The value to bind as `this` context to the specified function. + * + * @param {...*} [args] + * Zero or more variable arguments which are bound to the function + * as parameters. + * + * @returns {function} + * Returns the bound function. + */ + bind: function(fn, self /*, ... */) { + return Function.prototype.bind.apply(fn, this.varargs(arguments, 2, self)); + }, + + /** + * Load an additional LuCI JavaScript class and its dependencies, + * instantiate it and return the resulting class instance. Each + * class is only loaded once. Subsequent attempts to load the same + * class will return the already instantiated class. + * + * @instance + * @memberof LuCI + * + * @param {string} name + * The name of the class to load in dotted notation. Dots will + * be replaced by spaces and joined with the runtime-determined + * base URL of LuCI.js to form an absolute URL to load the class + * file from. + * + * @throws {DependencyError} + * Throws a `DependencyError` when the class to load includes + * circular dependencies. + * + * @throws {NetworkError} + * Throws `NetworkError` when the underlying {@link LuCI.Request} + * call failed. + * + * @throws {SyntaxError} + * Throws `SyntaxError` when the loaded class file code cannot + * be interpreted by `eval`. + * + * @throws {TypeError} + * Throws `TypeError` when the class file could be loaded and + * interpreted, but when invoking its code did not yield a valid + * class instance. + * + * @returns {Promise<LuCI#Class>} + * Returns the instantiated class. + */ + require: function(name, from) { + var L = this, url = null, from = from || []; + + /* Class already loaded */ + if (classes[name] != null) { + /* Circular dependency */ + if (from.indexOf(name) != -1) + L.raise('DependencyError', + 'Circular dependency: class "%s" depends on "%s"', + name, from.join('" which depends on "')); + + return Promise.resolve(classes[name]); + } + + url = '%s/%s.js%s'.format(L.env.base_url, name.replace(/\./g, '/'), (L.env.resource_version ? '?v=' + L.env.resource_version : '')); + from = [ name ].concat(from); + + var compileClass = function(res) { + if (!res.ok) + L.raise('NetworkError', + 'HTTP error %d while loading class file "%s"', res.status, url); + + var source = res.text(), + requirematch = /^require[ \t]+(\S+)(?:[ \t]+as[ \t]+([a-zA-Z_]\S*))?$/, + strictmatch = /^use[ \t]+strict$/, + depends = [], + args = ''; + + /* find require statements in source */ + for (var i = 0, off = -1, quote = -1, esc = false; i < source.length; i++) { + var chr = source.charCodeAt(i); + + if (esc) { + esc = false; + } + else if (chr == 92) { + esc = true; + } + else if (chr == quote) { + var s = source.substring(off, i), + m = requirematch.exec(s); + + if (m) { + var dep = m[1], as = m[2] || dep.replace(/[^a-zA-Z0-9_]/g, '_'); + depends.push(L.require(dep, from)); + args += ', ' + as; + } + else if (!strictmatch.exec(s)) { + break; + } + + off = -1; + quote = -1; + } + else if (quote == -1 && (chr == 34 || chr == 39)) { + off = i + 1; + quote = chr; + } + } + + /* load dependencies and instantiate class */ + return Promise.all(depends).then(function(instances) { + var _factory, _class; + + try { + _factory = eval( + '(function(window, document, L%s) { %s })\n\n//# sourceURL=%s\n' + .format(args, source, res.url)); + } + catch (error) { + L.raise('SyntaxError', '%s\n in %s:%s', + error.message, res.url, error.lineNumber || '?'); + } + + _factory.displayName = toCamelCase(name + 'ClassFactory'); + _class = _factory.apply(_factory, [window, document, L].concat(instances)); + + if (!Class.isSubclass(_class)) + L.error('TypeError', '"%s" factory yields invalid constructor', name); + + if (_class.displayName == 'AnonymousClass') + _class.displayName = toCamelCase(name + 'Class'); + + var ptr = Object.getPrototypeOf(L), + parts = name.split(/\./), + instance = new _class(); + + for (var i = 0; ptr && i < parts.length - 1; i++) + ptr = ptr[parts[i]]; + + if (ptr) + ptr[parts[i]] = instance; + + classes[name] = instance; + + return instance; + }); + }; + + /* Request class file */ + classes[name] = Request.get(url, { cache: true }).then(compileClass); + + return classes[name]; + }, + + /* DOM setup */ + probeRPCBaseURL: function() { + if (rpcBaseURL == null) { + try { + rpcBaseURL = window.sessionStorage.getItem('rpcBaseURL'); + } + catch (e) { } + } + + if (rpcBaseURL == null) { + var rpcFallbackURL = this.url('admin/ubus'); + + rpcBaseURL = Request.get('/ubus/').then(function(res) { + return (rpcBaseURL = (res.status == 400) ? '/ubus/' : rpcFallbackURL); + }, function() { + return (rpcBaseURL = rpcFallbackURL); + }).then(function(url) { + try { + window.sessionStorage.setItem('rpcBaseURL', url); + } + catch (e) { } + + return url; + }); + } + + return Promise.resolve(rpcBaseURL); + }, + + probeSystemFeatures: function() { + var sessionid = classes.rpc.getSessionID(); + + if (sysFeatures == null) { + try { + var data = JSON.parse(window.sessionStorage.getItem('sysFeatures')); + + if (this.isObject(data) && this.isObject(data[sessionid])) + sysFeatures = data[sessionid]; + } + catch (e) {} + } + + if (!this.isObject(sysFeatures)) { + sysFeatures = classes.rpc.declare({ + object: 'luci', + method: 'getFeatures', + expect: { '': {} } + })().then(function(features) { + try { + var data = {}; + data[sessionid] = features; + + window.sessionStorage.setItem('sysFeatures', JSON.stringify(data)); + } + catch (e) {} + + sysFeatures = features; + + return features; + }); + } + + return Promise.resolve(sysFeatures); + }, + + /** + * Test whether a particular system feature is available, such as + * hostapd SAE support or an installed firewall. The features are + * queried once at the beginning of the LuCI session and cached in + * `SessionStorage` throughout the lifetime of the associated tab or + * browser window. + * + * @instance + * @memberof LuCI + * + * @param {string} feature + * The feature to test. For detailed list of known feature flags, + * see `/modules/luci-base/root/usr/libexec/rpcd/luci`. + * + * @param {string} [subfeature] + * Some feature classes like `hostapd` provide sub-feature flags, + * such as `sae` or `11w` support. The `subfeature` argument can + * be used to query these. + * + * @return {boolean|null} + * Return `true` if the queried feature (and sub-feature) is available + * or `false` if the requested feature isn't present or known. + * Return `null` when a sub-feature was queried for a feature which + * has no sub-features. + */ + hasSystemFeature: function() { + var ft = sysFeatures[arguments[0]]; + + if (arguments.length == 2) + return this.isObject(ft) ? ft[arguments[1]] : null; + + return (ft != null && ft != false); + }, + + /* private */ + notifySessionExpiry: function() { + Poll.stop(); + + L.ui.showModal(_('Session expired'), [ + E('div', { class: 'alert-message warning' }, + _('A new login is required since the authentication session expired.')), + E('div', { class: 'right' }, + E('div', { + class: 'btn primary', + click: function() { + var loc = window.location; + window.location = loc.protocol + '//' + loc.host + loc.pathname + loc.search; + } + }, _('To login…'))) + ]); + + L.raise('SessionError', 'Login session is expired'); + }, + + /* private */ + setupDOM: function(res) { + var domEv = res[0], + uiClass = res[1], + rpcClass = res[2], + formClass = res[3], + rpcBaseURL = res[4]; + + rpcClass.setBaseURL(rpcBaseURL); + + rpcClass.addInterceptor(function(msg, req) { + if (!L.isObject(msg) || !L.isObject(msg.error) || msg.error.code != -32002) + return; + + if (!L.isObject(req) || (req.object == 'session' && req.method == 'access')) + return; + + return rpcClass.declare({ + 'object': 'session', + 'method': 'access', + 'params': [ 'scope', 'object', 'function' ], + 'expect': { access: true } + })('uci', 'luci', 'read').catch(L.notifySessionExpiry); + }); + + Request.addInterceptor(function(res) { + var isDenied = false; + + if (res.status == 403 && res.headers.get('X-LuCI-Login-Required') == 'yes') + isDenied = true; + + if (!isDenied) + return; + + L.notifySessionExpiry(); + }); + + return this.probeSystemFeatures().finally(this.initDOM); + }, + + /* private */ + initDOM: function() { + originalCBIInit(); + Poll.start(); + document.dispatchEvent(new CustomEvent('luci-loaded')); + }, + + /** + * The `env` object holds environment settings used by LuCI, such + * as request timeouts, base URLs etc. + * + * @instance + * @memberof LuCI + */ + env: {}, + + /** + * Construct a relative URL path from the given prefix and parts. + * The resulting URL is guaranteed to only contain the characters + * `a-z`, `A-Z`, `0-9`, `_`, `.`, `%`, `,`, `;`, and `-` as well + * as `/` for the path separator. + * + * @instance + * @memberof LuCI + * + * @param {string} [prefix] + * The prefix to join the given parts with. If the `prefix` is + * omitted, it defaults to an empty string. + * + * @param {string[]} [parts] + * An array of parts to join into an URL path. Parts may contain + * slashes and any of the other characters mentioned above. + * + * @return {string} + * Return the joined URL path. + */ + path: function(prefix, parts) { + var url = [ prefix || '' ]; + + for (var i = 0; i < parts.length; i++) + if (/^(?:[a-zA-Z0-9_.%,;-]+\/)*[a-zA-Z0-9_.%,;-]+$/.test(parts[i])) + url.push('/', parts[i]); + + if (url.length === 1) + url.push('/'); + + return url.join(''); + }, + + /** + * Construct an URL pathrelative to the script path of the server + * side LuCI application (usually `/cgi-bin/luci`). + * + * The resulting URL is guaranteed to only contain the characters + * `a-z`, `A-Z`, `0-9`, `_`, `.`, `%`, `,`, `;`, and `-` as well + * as `/` for the path separator. + * + * @instance + * @memberof LuCI + * + * @param {string[]} [parts] + * An array of parts to join into an URL path. Parts may contain + * slashes and any of the other characters mentioned above. + * + * @return {string} + * Returns the resulting URL path. + */ + url: function() { + return this.path(this.env.scriptname, arguments); + }, + + /** + * Construct an URL path relative to the global static resource path + * of the LuCI ui (usually `/luci-static/resources`). + * + * The resulting URL is guaranteed to only contain the characters + * `a-z`, `A-Z`, `0-9`, `_`, `.`, `%`, `,`, `;`, and `-` as well + * as `/` for the path separator. + * + * @instance + * @memberof LuCI + * + * @param {string[]} [parts] + * An array of parts to join into an URL path. Parts may contain + * slashes and any of the other characters mentioned above. + * + * @return {string} + * Returns the resulting URL path. + */ + resource: function() { + return this.path(this.env.resource, arguments); + }, + + /** + * Return the complete URL path to the current view. + * + * @instance + * @memberof LuCI + * + * @return {string} + * Returns the URL path to the current view. + */ + location: function() { + return this.path(this.env.scriptname, this.env.requestpath); + }, + + + /** + * Tests whether the passed argument is a JavaScript object. + * This function is meant to be an object counterpart to the + * standard `Array.isArray()` function. + * + * @instance + * @memberof LuCI + * + * @param {*} [val] + * The value to test + * + * @return {boolean} + * Returns `true` if the given value is of type object and + * not `null`, else returns `false`. + */ + isObject: function(val) { + return (val != null && typeof(val) == 'object'); + }, + + /** + * Return an array of sorted object keys, optionally sorted by + * a different key or a different sorting mode. + * + * @instance + * @memberof LuCI + * + * @param {object} obj + * The object to extract the keys from. If the given value is + * not an object, the function will return an empty array. + * + * @param {string} [key] + * Specifies the key to order by. This is mainly useful for + * nested objects of objects or objects of arrays when sorting + * shall not be performed by the primary object keys but by + * some other key pointing to a value within the nested values. + * + * @param {string} [sortmode] + * May be either `addr` or `num` to override the natural + * lexicographic sorting with a sorting suitable for IP/MAC style + * addresses or numeric values respectively. + * + * @return {string[]} + * Returns an array containing the sorted keys of the given object. + */ + sortedKeys: function(obj, key, sortmode) { + if (obj == null || typeof(obj) != 'object') + return []; + + return Object.keys(obj).map(function(e) { + var v = (key != null) ? obj[e][key] : e; + + switch (sortmode) { + case 'addr': + v = (v != null) ? v.replace(/(?:^|[.:])([0-9a-fA-F]{1,4})/g, + function(m0, m1) { return ('000' + m1.toLowerCase()).substr(-4) }) : null; + break; + + case 'num': + v = (v != null) ? +v : null; + break; + } + + return [ e, v ]; + }).filter(function(e) { + return (e[1] != null); + }).sort(function(a, b) { + return (a[1] > b[1]); + }).map(function(e) { + return e[0]; + }); + }, + + /** + * Converts the given value to an array. If the given value is of + * type array, it is returned as-is, values of type object are + * returned as one-element array containing the object, empty + * strings and `null` values are returned as empty array, all other + * values are converted using `String()`, trimmed, split on white + * space and returned as array. + * + * @instance + * @memberof LuCI + * + * @param {*} val + * The value to convert into an array. + * + * @return {Array<*>} + * Returns the resulting array. + */ + toArray: function(val) { + if (val == null) + return []; + else if (Array.isArray(val)) + return val; + else if (typeof(val) == 'object') + return [ val ]; + + var s = String(val).trim(); + + if (s == '') + return []; + + return s.split(/\s+/); + }, + + /** + * Returns a promise resolving with either the given value or or with + * the given default in case the input value is a rejecting promise. + * + * @instance + * @memberof LuCI + * + * @param {*} value + * The value to resolve the promise with. + * + * @param {*} defvalue + * The default value to resolve the promise with in case the given + * input value is a rejecting promise. + * + * @returns {Promise<*>} + * Returns a new promise resolving either to the given input value or + * to the given default value on error. + */ + resolveDefault: function(value, defvalue) { + return Promise.resolve(value).catch(function() { return defvalue }); + }, + + /** + * The request callback function is invoked whenever an HTTP + * reply to a request made using the `L.get()`, `L.post()` or + * `L.poll()` function is timed out or received successfully. + * + * @instance + * @memberof LuCI + * + * @callback LuCI.requestCallbackFn + * @param {XMLHTTPRequest} xhr + * The XMLHTTPRequest instance used to make the request. + * + * @param {*} data + * The response JSON if the response could be parsed as such, + * else `null`. + * + * @param {number} duration + * The total duration of the request in milliseconds. + */ + + /** + * Issues a GET request to the given url and invokes the specified + * callback function. The function is a wrapper around + * {@link LuCI.Request#request Request.request()}. + * + * @deprecated + * @instance + * @memberof LuCI + * + * @param {string} url + * The URL to request. + * + * @param {Object<string, string>} [args] + * Additional query string arguments to append to the URL. + * + * @param {LuCI.requestCallbackFn} cb + * The callback function to invoke when the request finishes. + * + * @return {Promise<null>} + * Returns a promise resolving to `null` when concluded. + */ + get: function(url, args, cb) { + return this.poll(null, url, args, cb, false); + }, + + /** + * Issues a POST request to the given url and invokes the specified + * callback function. The function is a wrapper around + * {@link LuCI.Request#request Request.request()}. The request is + * sent using `application/x-www-form-urlencoded` encoding and will + * contain a field `token` with the current value of `LuCI.env.token` + * by default. + * + * @deprecated + * @instance + * @memberof LuCI + * + * @param {string} url + * The URL to request. + * + * @param {Object<string, string>} [args] + * Additional post arguments to append to the request body. + * + * @param {LuCI.requestCallbackFn} cb + * The callback function to invoke when the request finishes. + * + * @return {Promise<null>} + * Returns a promise resolving to `null` when concluded. + */ + post: function(url, args, cb) { + return this.poll(null, url, args, cb, true); + }, + + /** + * Register a polling HTTP request that invokes the specified + * callback function. The function is a wrapper around + * {@link LuCI.Request.poll#add Request.poll.add()}. + * + * @deprecated + * @instance + * @memberof LuCI + * + * @param {number} interval + * The poll interval to use. If set to a value less than or equal + * to `0`, it will default to the global poll interval configured + * in `LuCI.env.pollinterval`. + * + * @param {string} url + * The URL to request. + * + * @param {Object<string, string>} [args] + * Specifies additional arguments for the request. For GET requests, + * the arguments are appended to the URL as query string, for POST + * requests, they'll be added to the request body. + * + * @param {LuCI.requestCallbackFn} cb + * The callback function to invoke whenever a request finishes. + * + * @param {boolean} [post=false] + * When set to `false` or not specified, poll requests will be made + * using the GET method. When set to `true`, POST requests will be + * issued. In case of POST requests, the request body will contain + * an argument `token` with the current value of `LuCI.env.token` by + * default, regardless of the parameters specified with `args`. + * + * @return {function} + * Returns the internally created function that has been passed to + * {@link LuCI.Request.poll#add Request.poll.add()}. This value can + * be passed to {@link LuCI.Poll.remove Poll.remove()} to remove the + * polling request. + */ + poll: function(interval, url, args, cb, post) { + if (interval !== null && interval <= 0) + interval = this.env.pollinterval; + + var data = post ? { token: this.env.token } : null, + method = post ? 'POST' : 'GET'; + + if (!/^(?:\/|\S+:\/\/)/.test(url)) + url = this.url(url); + + if (args != null) + data = Object.assign(data || {}, args); + + if (interval !== null) + return Request.poll.add(interval, url, { method: method, query: data }, cb); + else + return Request.request(url, { method: method, query: data }) + .then(function(res) { + var json = null; + if (/^application\/json\b/.test(res.headers.get('Content-Type'))) + try { json = res.json() } catch(e) {} + cb(res.xhr, json, res.duration); + }); + }, + + /** + * Deprecated wrapper around {@link LuCI.Poll.remove Poll.remove()}. + * + * @deprecated + * @instance + * @memberof LuCI + * + * @param {function} entry + * The polling function to remove. + * + * @return {boolean} + * Returns `true` when the function has been removed or `false` if + * it could not be found. + */ + stop: function(entry) { return Poll.remove(entry) }, + + /** + * Deprecated wrapper around {@link LuCI.Poll.stop Poll.stop()}. + * + * @deprecated + * @instance + * @memberof LuCI + * + * @return {boolean} + * Returns `true` when the polling loop has been stopped or `false` + * when it didn't run to begin with. + */ + halt: function() { return Poll.stop() }, + + /** + * Deprecated wrapper around {@link LuCI.Poll.start Poll.start()}. + * + * @deprecated + * @instance + * @memberof LuCI + * + * @return {boolean} + * Returns `true` when the polling loop has been started or `false` + * when it was already running. + */ + run: function() { return Poll.start() }, + + + /** + * @class + * @memberof LuCI + * @hideconstructor + * @classdesc + * + * The `dom` class provides convenience method for creating and + * manipulating DOM elements. + */ + dom: Class.singleton(/* @lends LuCI.dom.prototype */ { + __name__: 'LuCI.DOM', + + /** + * Tests whether the given argument is a valid DOM `Node`. + * + * @instance + * @memberof LuCI.dom + * @param {*} e + * The value to test. + * + * @returns {boolean} + * Returns `true` if the value is a DOM `Node`, else `false`. + */ + elem: function(e) { + return (e != null && typeof(e) == 'object' && 'nodeType' in e); + }, + + /** + * Parses a given string as HTML and returns the first child node. + * + * @instance + * @memberof LuCI.dom + * @param {string} s + * A string containing an HTML fragment to parse. Note that only + * the first result of the resulting structure is returned, so an + * input value of `<div>foo</div> <div>bar</div>` will only return + * the first `div` element node. + * + * @returns {Node} + * Returns the first DOM `Node` extracted from the HTML fragment or + * `null` on parsing failures or if no element could be found. + */ + parse: function(s) { + var elem; + + try { + domParser = domParser || new DOMParser(); + elem = domParser.parseFromString(s, 'text/html').body.firstChild; + } + catch(e) {} + + if (!elem) { + try { + dummyElem = dummyElem || document.createElement('div'); + dummyElem.innerHTML = s; + elem = dummyElem.firstChild; + } + catch (e) {} + } + + return elem || null; + }, + + /** + * Tests whether a given `Node` matches the given query selector. + * + * This function is a convenience wrapper around the standard + * `Node.matches("selector")` function with the added benefit that + * the `node` argument may be a non-`Node` value, in which case + * this function simply returns `false`. + * + * @instance + * @memberof LuCI.dom + * @param {*} node + * The `Node` argument to test the selector against. + * + * @param {string} [selector] + * The query selector expression to test against the given node. + * + * @returns {boolean} + * Returns `true` if the given node matches the specified selector + * or `false` when the node argument is no valid DOM `Node` or the + * selector didn't match. + */ + matches: function(node, selector) { + var m = this.elem(node) ? node.matches || node.msMatchesSelector : null; + return m ? m.call(node, selector) : false; + }, + + /** + * Returns the closest parent node that matches the given query + * selector expression. + * + * This function is a convenience wrapper around the standard + * `Node.closest("selector")` function with the added benefit that + * the `node` argument may be a non-`Node` value, in which case + * this function simply returns `null`. + * + * @instance + * @memberof LuCI.dom + * @param {*} node + * The `Node` argument to find the closest parent for. + * + * @param {string} [selector] + * The query selector expression to test against each parent. + * + * @returns {Node|null} + * Returns the closest parent node matching the selector or + * `null` when the node argument is no valid DOM `Node` or the + * selector didn't match any parent. + */ + parent: function(node, selector) { + if (this.elem(node) && node.closest) + return node.closest(selector); + + while (this.elem(node)) + if (this.matches(node, selector)) + return node; + else + node = node.parentNode; + + return null; + }, + + /** + * Appends the given children data to the given node. + * + * @instance + * @memberof LuCI.dom + * @param {*} node + * The `Node` argument to append the children to. + * + * @param {*} [children] + * The childrens to append to the given node. + * + * When `children` is an array, then each item of the array + * will be either appended as child element or text node, + * depending on whether the item is a DOM `Node` instance or + * some other non-`null` value. Non-`Node`, non-`null` values + * will be converted to strings first before being passed as + * argument to `createTextNode()`. + * + * When `children` is a function, it will be invoked with + * the passed `node` argument as sole parameter and the `append` + * function will be invoked again, with the given `node` argument + * as first and the return value of the `children` function as + * second parameter. + * + * When `children` is is a DOM `Node` instance, it will be + * appended to the given `node`. + * + * When `children` is any other non-`null` value, it will be + * converted to a string and appened to the `innerHTML` property + * of the given `node`. + * + * @returns {Node|null} + * Returns the last children `Node` appended to the node or `null` + * if either the `node` argument was no valid DOM `node` or if the + * `children` was `null` or didn't result in further DOM nodes. + */ + append: function(node, children) { + if (!this.elem(node)) + return null; + + if (Array.isArray(children)) { + for (var i = 0; i < children.length; i++) + if (this.elem(children[i])) + node.appendChild(children[i]); + else if (children !== null && children !== undefined) + node.appendChild(document.createTextNode('' + children[i])); + + return node.lastChild; + } + else if (typeof(children) === 'function') { + return this.append(node, children(node)); + } + else if (this.elem(children)) { + return node.appendChild(children); + } + else if (children !== null && children !== undefined) { + node.innerHTML = '' + children; + return node.lastChild; + } + + return null; + }, + + /** + * Replaces the content of the given node with the given children. + * + * This function first removes any children of the given DOM + * `Node` and then adds the given given children following the + * rules outlined below. + * + * @instance + * @memberof LuCI.dom + * @param {*} node + * The `Node` argument to replace the children of. + * + * @param {*} [children] + * The childrens to replace into the given node. + * + * When `children` is an array, then each item of the array + * will be either appended as child element or text node, + * depending on whether the item is a DOM `Node` instance or + * some other non-`null` value. Non-`Node`, non-`null` values + * will be converted to strings first before being passed as + * argument to `createTextNode()`. + * + * When `children` is a function, it will be invoked with + * the passed `node` argument as sole parameter and the `append` + * function will be invoked again, with the given `node` argument + * as first and the return value of the `children` function as + * second parameter. + * + * When `children` is is a DOM `Node` instance, it will be + * appended to the given `node`. + * + * When `children` is any other non-`null` value, it will be + * converted to a string and appened to the `innerHTML` property + * of the given `node`. + * + * @returns {Node|null} + * Returns the last children `Node` appended to the node or `null` + * if either the `node` argument was no valid DOM `node` or if the + * `children` was `null` or didn't result in further DOM nodes. + */ + content: function(node, children) { + if (!this.elem(node)) + return null; + + var dataNodes = node.querySelectorAll('[data-idref]'); + + for (var i = 0; i < dataNodes.length; i++) + delete this.registry[dataNodes[i].getAttribute('data-idref')]; + + while (node.firstChild) + node.removeChild(node.firstChild); + + return this.append(node, children); + }, + + /** + * Sets attributes or registers event listeners on element nodes. + * + * @instance + * @memberof LuCI.dom + * @param {*} node + * The `Node` argument to set the attributes or add the event + * listeners for. When the given `node` value is not a valid + * DOM `Node`, the function returns and does nothing. + * + * @param {string|Object<string, *>} key + * Specifies either the attribute or event handler name to use, + * or an object containing multiple key, value pairs which are + * each added to the node as either attribute or event handler, + * depending on the respective value. + * + * @param {*} [val] + * Specifies the attribute value or event handler function to add. + * If the `key` parameter is an `Object`, this parameter will be + * ignored. + * + * When `val` is of type function, it will be registered as event + * handler on the given `node` with the `key` parameter being the + * event name. + * + * When `val` is of type object, it will be serialized as JSON and + * added as attribute to the given `node`, using the given `key` + * as attribute name. + * + * When `val` is of any other type, it will be added as attribute + * to the given `node` as-is, with the underlying `setAttribute()` + * call implicitely turning it into a string. + */ + attr: function(node, key, val) { + if (!this.elem(node)) + return null; + + var attr = null; + + if (typeof(key) === 'object' && key !== null) + attr = key; + else if (typeof(key) === 'string') + attr = {}, attr[key] = val; + + for (key in attr) { + if (!attr.hasOwnProperty(key) || attr[key] == null) + continue; + + switch (typeof(attr[key])) { + case 'function': + node.addEventListener(key, attr[key]); + break; + + case 'object': + node.setAttribute(key, JSON.stringify(attr[key])); + break; + + default: + node.setAttribute(key, attr[key]); + } + } + }, + + /** + * Creates a new DOM `Node` from the given `html`, `attr` and + * `data` parameters. + * + * This function has multiple signatures, it can be either invoked + * in the form `create(html[, attr[, data]])` or in the form + * `create(html[, data])`. The used variant is determined from the + * type of the second argument. + * + * @instance + * @memberof LuCI.dom + * @param {*} html + * Describes the node to create. + * + * When the value of `html` is of type array, a `DocumentFragment` + * node is created and each item of the array is first converted + * to a DOM `Node` by passing it through `create()` and then added + * as child to the fragment. + * + * When the value of `html` is a DOM `Node` instance, no new + * element will be created but the node will be used as-is. + * + * When the value of `html` is a string starting with `<`, it will + * be passed to `dom.parse()` and the resulting value is used. + * + * When the value of `html` is any other string, it will be passed + * to `document.createElement()` for creating a new DOM `Node` of + * the given name. + * + * @param {Object<string, *>} [attr] + * Specifies an Object of key, value pairs to set as attributes + * or event handlers on the created node. Refer to + * {@link LuCI.dom#attr dom.attr()} for details. + * + * @param {*} [data] + * Specifies children to append to the newly created element. + * Refer to {@link LuCI.dom#append dom.append()} for details. + * + * @throws {InvalidCharacterError} + * Throws an `InvalidCharacterError` when the given `html` + * argument contained malformed markup (such as not escaped + * `&` characters in XHTML mode) or when the given node name + * in `html` contains characters which are not legal in DOM + * element names, such as spaces. + * + * @returns {Node} + * Returns the newly created `Node`. + */ + create: function() { + var html = arguments[0], + attr = arguments[1], + data = arguments[2], + elem; + + if (!(attr instanceof Object) || Array.isArray(attr)) + data = attr, attr = null; + + if (Array.isArray(html)) { + elem = document.createDocumentFragment(); + for (var i = 0; i < html.length; i++) + elem.appendChild(this.create(html[i])); + } + else if (this.elem(html)) { + elem = html; + } + else if (html.charCodeAt(0) === 60) { + elem = this.parse(html); + } + else { + elem = document.createElement(html); + } + + if (!elem) + return null; + + this.attr(elem, attr); + this.append(elem, data); + + return elem; + }, + + registry: {}, + + /** + * Attaches or detaches arbitrary data to and from a DOM `Node`. + * + * This function is useful to attach non-string values or runtime + * data that is not serializable to DOM nodes. To decouple data + * from the DOM, values are not added directly to nodes, but + * inserted into a registry instead which is then referenced by a + * string key stored as `data-idref` attribute in the node. + * + * This function has multiple signatures and is sensitive to the + * number of arguments passed to it. + * + * - `dom.data(node)` - + * Fetches all data associated with the given node. + * - `dom.data(node, key)` - + * Fetches a specific key associated with the given node. + * - `dom.data(node, key, val)` - + * Sets a specific key to the given value associated with the + * given node. + * - `dom.data(node, null)` - + * Clears any data associated with the node. + * - `dom.data(node, key, null)` - + * Clears the given key associated with the node. + * + * @instance + * @memberof LuCI.dom + * @param {Node} node + * The DOM `Node` instance to set or retrieve the data for. + * + * @param {string|null} [key] + * This is either a string specifying the key to retrieve, or + * `null` to unset the entire node data. + * + * @param {*|null} [val] + * This is either a non-`null` value to set for a given key or + * `null` to remove the given `key` from the specified node. + * + * @returns {*} + * Returns the get or set value, or `null` when no value could + * be found. + */ + data: function(node, key, val) { + var id = node.getAttribute('data-idref'); + + /* clear all data */ + if (arguments.length > 1 && key == null) { + if (id != null) { + node.removeAttribute('data-idref'); + val = this.registry[id] + delete this.registry[id]; + return val; + } + + return null; + } + + /* clear a key */ + else if (arguments.length > 2 && key != null && val == null) { + if (id != null) { + val = this.registry[id][key]; + delete this.registry[id][key]; + return val; + } + + return null; + } + + /* set a key */ + else if (arguments.length > 2 && key != null && val != null) { + if (id == null) { + do { id = Math.floor(Math.random() * 0xffffffff).toString(16) } + while (this.registry.hasOwnProperty(id)); + + node.setAttribute('data-idref', id); + this.registry[id] = {}; + } + + return (this.registry[id][key] = val); + } + + /* get all data */ + else if (arguments.length == 1) { + if (id != null) + return this.registry[id]; + + return null; + } + + /* get a key */ + else if (arguments.length == 2) { + if (id != null) + return this.registry[id][key]; + } + + return null; + }, + + /** + * Binds the given class instance ot the specified DOM `Node`. + * + * This function uses the `dom.data()` facility to attach the + * passed instance of a Class to a node. This is needed for + * complex widget elements or similar where the corresponding + * class instance responsible for the element must be retrieved + * from DOM nodes obtained by `querySelector()` or similar means. + * + * @instance + * @memberof LuCI.dom + * @param {Node} node + * The DOM `Node` instance to bind the class to. + * + * @param {Class} inst + * The Class instance to bind to the node. + * + * @throws {TypeError} + * Throws a `TypeError` when the given instance argument isn't + * a valid Class instance. + * + * @returns {Class} + * Returns the bound class instance. + */ + bindClassInstance: function(node, inst) { + if (!(inst instanceof Class)) + L.error('TypeError', 'Argument must be a class instance'); + + return this.data(node, '_class', inst); + }, + + /** + * Finds a bound class instance on the given node itself or the + * first bound instance on its closest parent node. + * + * @instance + * @memberof LuCI.dom + * @param {Node} node + * The DOM `Node` instance to start from. + * + * @returns {Class|null} + * Returns the founds class instance if any or `null` if no bound + * class could be found on the node itself or any of its parents. + */ + findClassInstance: function(node) { + var inst = null; + + do { + inst = this.data(node, '_class'); + node = node.parentNode; + } + while (!(inst instanceof Class) && node != null); + + return inst; + }, + + /** + * Finds a bound class instance on the given node itself or the + * first bound instance on its closest parent node and invokes + * the specified method name on the found class instance. + * + * @instance + * @memberof LuCI.dom + * @param {Node} node + * The DOM `Node` instance to start from. + * + * @param {string} method + * The name of the method to invoke on the found class instance. + * + * @param {...*} params + * Additional arguments to pass to the invoked method as-is. + * + * @returns {*|null} + * Returns the return value of the invoked method if a class + * instance and method has been found. Returns `null` if either + * no bound class instance could be found, or if the found + * instance didn't have the requested `method`. + */ + callClassMethod: function(node, method /*, ... */) { + var inst = this.findClassInstance(node); + + if (inst == null || typeof(inst[method]) != 'function') + return null; + + return inst[method].apply(inst, inst.varargs(arguments, 2)); + }, + + /** + * The ignore callback function is invoked by `isEmpty()` for each + * child node to decide whether to ignore a child node or not. + * + * When this function returns `false`, the node passed to it is + * ignored, else not. + * + * @callback LuCI.dom~ignoreCallbackFn + * @param {Node} node + * The child node to test. + * + * @returns {boolean} + * Boolean indicating whether to ignore the node or not. + */ + + /** + * Tests whether a given DOM `Node` instance is empty or appears + * empty. + * + * Any element child nodes which have the CSS class `hidden` set + * or for which the optionally passed `ignoreFn` callback function + * returns `false` are ignored. + * + * @instance + * @memberof LuCI.dom + * @param {Node} node + * The DOM `Node` instance to test. + * + * @param {LuCI.dom~ignoreCallbackFn} [ignoreFn] + * Specifies an optional function which is invoked for each child + * node to decide whether the child node should be ignored or not. + * + * @returns {boolean} + * Returns `true` if the node does not have any children or if + * any children node either has a `hidden` CSS class or a `false` + * result when testing it using the given `ignoreFn`. + */ + isEmpty: function(node, ignoreFn) { + for (var child = node.firstElementChild; child != null; child = child.nextElementSibling) + if (!child.classList.contains('hidden') && (!ignoreFn || !ignoreFn(child))) + return false; + + return true; + } + }), + + Poll: Poll, + Class: Class, + Request: Request, + + /** + * @class + * @memberof LuCI + * @hideconstructor + * @classdesc + * + * The `view` class forms the basis of views and provides a standard + * set of methods to inherit from. + */ + view: Class.extend(/* @lends LuCI.view.prototype */ { + __name__: 'LuCI.View', + + __init__: function() { + var vp = document.getElementById('view'); + + L.dom.content(vp, E('div', { 'class': 'spinning' }, _('Loading view…'))); + + return Promise.resolve(this.load()) + .then(L.bind(this.render, this)) + .then(L.bind(function(nodes) { + var vp = document.getElementById('view'); + + L.dom.content(vp, nodes); + L.dom.append(vp, this.addFooter()); + }, this)).catch(L.error); + }, + + /** + * The load function is invoked before the view is rendered. + * + * The invocation of this function is wrapped by + * `Promise.resolve()` so it may return Promises if needed. + * + * The return value of the function (or the resolved values + * of the promise returned by it) will be passed as first + * argument to `render()`. + * + * This function is supposed to be overwritten by subclasses, + * the default implementation does nothing. + * + * @instance + * @abstract + * @memberof LuCI.view + * + * @returns {*|Promise<*>} + * May return any value or a Promise resolving to any value. + */ + load: function() {}, + + /** + * The render function is invoked after the + * {@link LuCI.view#load load()} function and responsible + * for setting up the view contents. It must return a DOM + * `Node` or `DocumentFragment` holding the contents to + * insert into the view area. + * + * The invocation of this function is wrapped by + * `Promise.resolve()` so it may return Promises if needed. + * + * The return value of the function (or the resolved values + * of the promise returned by it) will be inserted into the + * main content area using + * {@link LuCI.dom#append dom.append()}. + * + * This function is supposed to be overwritten by subclasses, + * the default implementation does nothing. + * + * @instance + * @abstract + * @memberof LuCI.view + * @param {*|null} load_results + * This function will receive the return value of the + * {@link LuCI.view#load view.load()} function as first + * argument. + * + * @returns {Node|Promise<Node>} + * Should return a DOM `Node` value or a `Promise` resolving + * to a `Node` value. + */ + render: function() {}, + + /** + * The handleSave function is invoked when the user clicks + * the `Save` button in the page action footer. + * + * The default implementation should be sufficient for most + * views using {@link form#Map form.Map()} based forms - it + * will iterate all forms present in the view and invoke + * the {@link form#Map#save Map.save()} method on each form. + * + * Views not using `Map` instances or requiring other special + * logic should overwrite `handleSave()` with a custom + * implementation. + * + * To disable the `Save` page footer button, views extending + * this base class should overwrite the `handleSave` function + * with `null`. + * + * The invocation of this function is wrapped by + * `Promise.resolve()` so it may return Promises if needed. + * + * @instance + * @memberof LuCI.view + * @param {Event} ev + * The DOM event that triggered the function. + * + * @returns {*|Promise<*>} + * Any return values of this function are discarded, but + * passed through `Promise.resolve()` to ensure that any + * returned promise runs to completion before the button + * is reenabled. + */ + handleSave: function(ev) { + var tasks = []; + + document.getElementById('maincontent') + .querySelectorAll('.cbi-map').forEach(function(map) { + tasks.push(L.dom.callClassMethod(map, 'save')); + }); + + return Promise.all(tasks); + }, + + /** + * The handleSaveApply function is invoked when the user clicks + * the `Save & Apply` button in the page action footer. + * + * The default implementation should be sufficient for most + * views using {@link form#Map form.Map()} based forms - it + * will first invoke + * {@link LuCI.view.handleSave view.handleSave()} and then + * call {@link ui#changes#apply ui.changes.apply()} to start the + * modal config apply and page reload flow. + * + * Views not using `Map` instances or requiring other special + * logic should overwrite `handleSaveApply()` with a custom + * implementation. + * + * To disable the `Save & Apply` page footer button, views + * extending this base class should overwrite the + * `handleSaveApply` function with `null`. + * + * The invocation of this function is wrapped by + * `Promise.resolve()` so it may return Promises if needed. + * + * @instance + * @memberof LuCI.view + * @param {Event} ev + * The DOM event that triggered the function. + * + * @returns {*|Promise<*>} + * Any return values of this function are discarded, but + * passed through `Promise.resolve()` to ensure that any + * returned promise runs to completion before the button + * is reenabled. + */ + handleSaveApply: function(ev) { + return this.handleSave(ev).then(function() { + L.ui.changes.apply(true); + }); + }, + + /** + * The handleReset function is invoked when the user clicks + * the `Reset` button in the page action footer. + * + * The default implementation should be sufficient for most + * views using {@link form#Map form.Map()} based forms - it + * will iterate all forms present in the view and invoke + * the {@link form#Map#save Map.reset()} method on each form. + * + * Views not using `Map` instances or requiring other special + * logic should overwrite `handleReset()` with a custom + * implementation. + * + * To disable the `Reset` page footer button, views extending + * this base class should overwrite the `handleReset` function + * with `null`. + * + * The invocation of this function is wrapped by + * `Promise.resolve()` so it may return Promises if needed. + * + * @instance + * @memberof LuCI.view + * @param {Event} ev + * The DOM event that triggered the function. + * + * @returns {*|Promise<*>} + * Any return values of this function are discarded, but + * passed through `Promise.resolve()` to ensure that any + * returned promise runs to completion before the button + * is reenabled. + */ + handleReset: function(ev) { + var tasks = []; + + document.getElementById('maincontent') + .querySelectorAll('.cbi-map').forEach(function(map) { + tasks.push(L.dom.callClassMethod(map, 'reset')); + }); + + return Promise.all(tasks); + }, + + /** + * Renders a standard page action footer if any of the + * `handleSave()`, `handleSaveApply()` or `handleReset()` + * functions are defined. + * + * The default implementation should be sufficient for most + * views - it will render a standard page footer with action + * buttons labeled `Save`, `Save & Apply` and `Reset` + * triggering the `handleSave()`, `handleSaveApply()` and + * `handleReset()` functions respectively. + * + * When any of these `handle*()` functions is overwritten + * with `null` by a view extending this class, the + * corresponding button will not be rendered. + * + * @instance + * @memberof LuCI.view + * @returns {DocumentFragment} + * Returns a `DocumentFragment` containing the footer bar + * with buttons for each corresponding `handle*()` action + * or an empty `DocumentFragment` if all three `handle*()` + * methods are overwritten with `null`. + */ + addFooter: function() { + var footer = E([]); + + if (this.handleSaveApply || this.handleSave || this.handleReset) { + footer.appendChild(E('div', { 'class': 'cbi-page-actions' }, [ + this.handleSaveApply ? E('button', { + 'class': 'cbi-button cbi-button-apply', + 'click': L.ui.createHandlerFn(this, 'handleSaveApply') + }, [ _('Save & Apply') ]) : '', ' ', + this.handleSave ? E('button', { + 'class': 'cbi-button cbi-button-save', + 'click': L.ui.createHandlerFn(this, 'handleSave') + }, [ _('Save') ]) : '', ' ', + this.handleReset ? E('button', { + 'class': 'cbi-button cbi-button-reset', + 'click': L.ui.createHandlerFn(this, 'handleReset') + }, [ _('Reset') ]) : '' + ])); + } + + return footer; + } + }) + }); + + /** + * @class + * @memberof LuCI + * @deprecated + * @classdesc + * + * The `LuCI.XHR` class is a legacy compatibility shim for the + * functionality formerly provided by `xhr.js`. It is registered as global + * `window.XHR` symbol for compatibility with legacy code. + * + * New code should use {@link LuCI.Request} instead to implement HTTP + * request handling. + */ + var XHR = Class.extend(/** @lends LuCI.XHR.prototype */ { + __name__: 'LuCI.XHR', + __init__: function() { + if (window.console && console.debug) + console.debug('Direct use XHR() is deprecated, please use L.Request instead'); + }, + + _response: function(cb, res, json, duration) { + if (this.active) + cb(res, json, duration); + delete this.active; + }, + + /** + * This function is a legacy wrapper around + * {@link LuCI#get LuCI.get()}. + * + * @instance + * @deprecated + * @memberof LuCI.XHR + * + * @param {string} url + * The URL to request + * + * @param {Object} [data] + * Additional query string data + * + * @param {LuCI.requestCallbackFn} [callback] + * Callback function to invoke on completion + * + * @param {number} [timeout] + * Request timeout to use + * + * @return {Promise<null>} + */ + get: function(url, data, callback, timeout) { + this.active = true; + L.get(url, data, this._response.bind(this, callback), timeout); + }, + + /** + * This function is a legacy wrapper around + * {@link LuCI#post LuCI.post()}. + * + * @instance + * @deprecated + * @memberof LuCI.XHR + * + * @param {string} url + * The URL to request + * + * @param {Object} [data] + * Additional data to append to the request body. + * + * @param {LuCI.requestCallbackFn} [callback] + * Callback function to invoke on completion + * + * @param {number} [timeout] + * Request timeout to use + * + * @return {Promise<null>} + */ + post: function(url, data, callback, timeout) { + this.active = true; + L.post(url, data, this._response.bind(this, callback), timeout); + }, + + /** + * Cancels a running request. + * + * This function does not actually cancel the underlying + * `XMLHTTPRequest` request but it sets a flag which prevents the + * invocation of the callback function when the request eventually + * finishes or timed out. + * + * @instance + * @deprecated + * @memberof LuCI.XHR + */ + cancel: function() { delete this.active }, + + /** + * Checks the running state of the request. + * + * @instance + * @deprecated + * @memberof LuCI.XHR + * + * @returns {boolean} + * Returns `true` if the request is still running or `false` if it + * already completed. + */ + busy: function() { return (this.active === true) }, + + /** + * Ignored for backwards compatibility. + * + * This function does nothing. + * + * @instance + * @deprecated + * @memberof LuCI.XHR + */ + abort: function() {}, + + /** + * Existing for backwards compatibility. + * + * This function simply throws an `InternalError` when invoked. + * + * @instance + * @deprecated + * @memberof LuCI.XHR + * + * @throws {InternalError} + * Throws an `InternalError` with the message `Not implemented` + * when invoked. + */ + send_form: function() { L.error('InternalError', 'Not implemented') }, + }); + + XHR.get = function() { return window.L.get.apply(window.L, arguments) }; + XHR.post = function() { return window.L.post.apply(window.L, arguments) }; + XHR.poll = function() { return window.L.poll.apply(window.L, arguments) }; + XHR.stop = Request.poll.remove.bind(Request.poll); + XHR.halt = Request.poll.stop.bind(Request.poll); + XHR.run = Request.poll.start.bind(Request.poll); + XHR.running = Request.poll.active.bind(Request.poll); + + window.XHR = XHR; + window.LuCI = LuCI; +})(window, document); +</code></pre> + </article> + </section> + + + + +</div> + +<nav> + <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="LuCI.html">LuCI</a></li><li><a href="LuCI.Class.html">Class</a></li><li><a href="LuCI.dom.html">dom</a></li><li><a href="LuCI.fs.html">fs</a></li><li><a href="LuCI.Headers.html">Headers</a></li><li><a href="LuCI.Network.html">Network</a></li><li><a href="LuCI.Network.Device.html">Device</a></li><li><a href="LuCI.Network.Hosts.html">Hosts</a></li><li><a href="LuCI.Network.Protocol.html">Protocol</a></li><li><a href="LuCI.Network.WifiDevice.html">WifiDevice</a></li><li><a href="LuCI.Network.WifiNetwork.html">WifiNetwork</a></li><li><a href="LuCI.Poll.html">Poll</a></li><li><a href="LuCI.Request.html">Request</a></li><li><a href="LuCI.Request.poll.html">poll</a></li><li><a href="LuCI.Response.html">Response</a></li><li><a href="LuCI.rpc.html">rpc</a></li><li><a href="LuCI.uci.html">uci</a></li><li><a href="LuCI.view.html">view</a></li><li><a href="LuCI.XHR.html">XHR</a></li></ul> +</nav> + +<br class="clear"> + +<footer> + Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a> on Tue Nov 05 2019 09:33:05 GMT+0100 (Central European Standard Time) +</footer> + +<script> prettyPrint(); </script> +<script src="scripts/linenumber.js"> </script> +</body> +</html> diff --git a/documentation/jsapi/network.js.html b/documentation/jsapi/network.js.html new file mode 100644 index 000000000..e06633357 --- /dev/null +++ b/documentation/jsapi/network.js.html @@ -0,0 +1,4038 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="utf-8"> + <title>JSDoc: Source: network.js</title> + + <script src="scripts/prettify/prettify.js"> </script> + <script src="scripts/prettify/lang-css.js"> </script> + <!--[if lt IE 9]> + <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script> + <![endif]--> + <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css"> + <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css"> +</head> + +<body> + +<div id="main"> + + <h1 class="page-title">Source: network.js</h1> + + + + + + + <section> + <article> + <pre class="prettyprint source linenums"><code>'use strict'; +'require uci'; +'require rpc'; +'require validation'; + +var proto_errors = { + CONNECT_FAILED: _('Connection attempt failed'), + INVALID_ADDRESS: _('IP address in invalid'), + INVALID_GATEWAY: _('Gateway address is invalid'), + INVALID_LOCAL_ADDRESS: _('Local IP address is invalid'), + MISSING_ADDRESS: _('IP address is missing'), + MISSING_PEER_ADDRESS: _('Peer address is missing'), + NO_DEVICE: _('Network device is not present'), + NO_IFACE: _('Unable to determine device name'), + NO_IFNAME: _('Unable to determine device name'), + NO_WAN_ADDRESS: _('Unable to determine external IP address'), + NO_WAN_LINK: _('Unable to determine upstream interface'), + PEER_RESOLVE_FAIL: _('Unable to resolve peer host name'), + PIN_FAILED: _('PIN code rejected') +}; + +var iface_patterns_ignore = [ + /^wmaster\d+/, + /^wifi\d+/, + /^hwsim\d+/, + /^imq\d+/, + /^ifb\d+/, + /^mon\.wlan\d+/, + /^sit\d+/, + /^gre\d+/, + /^gretap\d+/, + /^ip6gre\d+/, + /^ip6tnl\d+/, + /^tunl\d+/, + /^lo$/ +]; + +var iface_patterns_wireless = [ + /^wlan\d+/, + /^wl\d+/, + /^ath\d+/, + /^\w+\.network\d+/ +]; + +var iface_patterns_virtual = [ ]; + +var callLuciNetworkDevices = rpc.declare({ + object: 'luci-rpc', + method: 'getNetworkDevices', + expect: { '': {} } +}); + +var callLuciWirelessDevices = rpc.declare({ + object: 'luci-rpc', + method: 'getWirelessDevices', + expect: { '': {} } +}); + +var callLuciBoardJSON = rpc.declare({ + object: 'luci-rpc', + method: 'getBoardJSON' +}); + +var callLuciHostHints = rpc.declare({ + object: 'luci-rpc', + method: 'getHostHints', + expect: { '': {} } +}); + +var callIwinfoAssoclist = rpc.declare({ + object: 'iwinfo', + method: 'assoclist', + params: [ 'device', 'mac' ], + expect: { results: [] } +}); + +var callIwinfoScan = rpc.declare({ + object: 'iwinfo', + method: 'scan', + params: [ 'device' ], + nobatch: true, + expect: { results: [] } +}); + +var callNetworkInterfaceDump = rpc.declare({ + object: 'network.interface', + method: 'dump', + expect: { 'interface': [] } +}); + +var callNetworkProtoHandlers = rpc.declare({ + object: 'network', + method: 'get_proto_handlers', + expect: { '': {} } +}); + +var _init = null, + _state = null, + _protocols = {}, + _protospecs = {}; + +function getProtocolHandlers(cache) { + return callNetworkProtoHandlers().then(function(protos) { + /* Register "none" protocol */ + if (!protos.hasOwnProperty('none')) + Object.assign(protos, { none: { no_device: false } }); + + /* Hack: emulate relayd protocol */ + if (!protos.hasOwnProperty('relay')) + Object.assign(protos, { relay: { no_device: true } }); + + Object.assign(_protospecs, protos); + + return Promise.all(Object.keys(protos).map(function(p) { + return Promise.resolve(L.require('protocol.%s'.format(p))).catch(function(err) { + if (L.isObject(err) && err.name != 'NetworkError') + L.error(err); + }); + })).then(function() { + return protos; + }); + }).catch(function() { + return {}; + }); +} + +function getWifiStateBySid(sid) { + var s = uci.get('wireless', sid); + + if (s != null && s['.type'] == 'wifi-iface') { + for (var radioname in _state.radios) { + for (var i = 0; i < _state.radios[radioname].interfaces.length; i++) { + var netstate = _state.radios[radioname].interfaces[i]; + + if (typeof(netstate.section) != 'string') + continue; + + var s2 = uci.get('wireless', netstate.section); + + if (s2 != null && s['.type'] == s2['.type'] && s['.name'] == s2['.name']) { + if (s2['.anonymous'] == false && netstate.section.charAt(0) == '@') + return null; + + return [ radioname, _state.radios[radioname], netstate ]; + } + } + } + } + + return null; +} + +function getWifiStateByIfname(ifname) { + for (var radioname in _state.radios) { + for (var i = 0; i < _state.radios[radioname].interfaces.length; i++) { + var netstate = _state.radios[radioname].interfaces[i]; + + if (typeof(netstate.ifname) != 'string') + continue; + + if (netstate.ifname == ifname) + return [ radioname, _state.radios[radioname], netstate ]; + } + } + + return null; +} + +function isWifiIfname(ifname) { + for (var i = 0; i < iface_patterns_wireless.length; i++) + if (iface_patterns_wireless[i].test(ifname)) + return true; + + return false; +} + +function getWifiSidByNetid(netid) { + var m = /^(\w+)\.network(\d+)$/.exec(netid); + if (m) { + var sections = uci.sections('wireless', 'wifi-iface'); + for (var i = 0, n = 0; i < sections.length; i++) { + if (sections[i].device != m[1]) + continue; + + if (++n == +m[2]) + return sections[i]['.name']; + } + } + + return null; +} + +function getWifiSidByIfname(ifname) { + var sid = getWifiSidByNetid(ifname); + + if (sid != null) + return sid; + + var res = getWifiStateByIfname(ifname); + + if (res != null && L.isObject(res[2]) && typeof(res[2].section) == 'string') + return res[2].section; + + return null; +} + +function getWifiNetidBySid(sid) { + var s = uci.get('wireless', sid); + if (s != null && s['.type'] == 'wifi-iface') { + var radioname = s.device; + if (typeof(s.device) == 'string') { + var i = 0, netid = null, sections = uci.sections('wireless', 'wifi-iface'); + for (var i = 0, n = 0; i < sections.length; i++) { + if (sections[i].device != s.device) + continue; + + n++; + + if (sections[i]['.name'] != s['.name']) + continue; + + return [ '%s.network%d'.format(s.device, n), s.device ]; + } + + } + } + + return null; +} + +function getWifiNetidByNetname(name) { + var sections = uci.sections('wireless', 'wifi-iface'); + for (var i = 0; i < sections.length; i++) { + if (typeof(sections[i].network) != 'string') + continue; + + var nets = sections[i].network.split(/\s+/); + for (var j = 0; j < nets.length; j++) { + if (nets[j] != name) + continue; + + return getWifiNetidBySid(sections[i]['.name']); + } + } + + return null; +} + +function isVirtualIfname(ifname) { + for (var i = 0; i < iface_patterns_virtual.length; i++) + if (iface_patterns_virtual[i].test(ifname)) + return true; + + return false; +} + +function isIgnoredIfname(ifname) { + for (var i = 0; i < iface_patterns_ignore.length; i++) + if (iface_patterns_ignore[i].test(ifname)) + return true; + + return false; +} + +function appendValue(config, section, option, value) { + var values = uci.get(config, section, option), + isArray = Array.isArray(values), + rv = false; + + if (isArray == false) + values = L.toArray(values); + + if (values.indexOf(value) == -1) { + values.push(value); + rv = true; + } + + uci.set(config, section, option, isArray ? values : values.join(' ')); + + return rv; +} + +function removeValue(config, section, option, value) { + var values = uci.get(config, section, option), + isArray = Array.isArray(values), + rv = false; + + if (isArray == false) + values = L.toArray(values); + + for (var i = values.length - 1; i >= 0; i--) { + if (values[i] == value) { + values.splice(i, 1); + rv = true; + } + } + + if (values.length > 0) + uci.set(config, section, option, isArray ? values : values.join(' ')); + else + uci.unset(config, section, option); + + return rv; +} + +function prefixToMask(bits, v6) { + var w = v6 ? 128 : 32, + m = []; + + if (bits > w) + return null; + + for (var i = 0; i < w / 16; i++) { + var b = Math.min(16, bits); + m.push((0xffff << (16 - b)) & 0xffff); + bits -= b; + } + + if (v6) + return String.prototype.format.apply('%x:%x:%x:%x:%x:%x:%x:%x', m).replace(/:0(?::0)+$/, '::'); + else + return '%d.%d.%d.%d'.format(m[0] >>> 8, m[0] & 0xff, m[1] >>> 8, m[1] & 0xff); +} + +function maskToPrefix(mask, v6) { + var m = v6 ? validation.parseIPv6(mask) : validation.parseIPv4(mask); + + if (!m) + return null; + + var bits = 0; + + for (var i = 0, z = false; i < m.length; i++) { + z = z || !m[i]; + + while (!z && (m[i] & (v6 ? 0x8000 : 0x80))) { + m[i] = (m[i] << 1) & (v6 ? 0xffff : 0xff); + bits++; + } + + if (m[i]) + return null; + } + + return bits; +} + +function initNetworkState(refresh) { + if (_state == null || refresh) { + _init = _init || Promise.all([ + L.resolveDefault(callNetworkInterfaceDump(), []), + L.resolveDefault(callLuciBoardJSON(), {}), + L.resolveDefault(callLuciNetworkDevices(), {}), + L.resolveDefault(callLuciWirelessDevices(), {}), + L.resolveDefault(callLuciHostHints(), {}), + getProtocolHandlers(), + uci.load(['network', 'wireless', 'luci']) + ]).then(function(data) { + var netifd_ifaces = data[0], + board_json = data[1], + luci_devs = data[2]; + + var s = { + isTunnel: {}, isBridge: {}, isSwitch: {}, isWifi: {}, + ifaces: netifd_ifaces, radios: data[3], hosts: data[4], + netdevs: {}, bridges: {}, switches: {} + }; + + for (var name in luci_devs) { + var dev = luci_devs[name]; + + if (isVirtualIfname(name)) + s.isTunnel[name] = true; + + if (!s.isTunnel[name] && isIgnoredIfname(name)) + continue; + + s.netdevs[name] = s.netdevs[name] || { + idx: dev.ifindex, + name: name, + rawname: name, + flags: dev.flags, + stats: dev.stats, + macaddr: dev.mac, + type: dev.type, + mtu: dev.mtu, + qlen: dev.qlen, + ipaddrs: [], + ip6addrs: [] + }; + + if (Array.isArray(dev.ipaddrs)) + for (var i = 0; i < dev.ipaddrs.length; i++) + s.netdevs[name].ipaddrs.push(dev.ipaddrs[i].address + '/' + dev.ipaddrs[i].netmask); + + if (Array.isArray(dev.ip6addrs)) + for (var i = 0; i < dev.ip6addrs.length; i++) + s.netdevs[name].ip6addrs.push(dev.ip6addrs[i].address + '/' + dev.ip6addrs[i].netmask); + } + + for (var name in luci_devs) { + var dev = luci_devs[name]; + + if (!dev.bridge) + continue; + + var b = { + name: name, + id: dev.id, + stp: dev.stp, + ifnames: [] + }; + + for (var i = 0; dev.ports && i < dev.ports.length; i++) { + var subdev = s.netdevs[dev.ports[i]]; + + if (subdev == null) + continue; + + b.ifnames.push(subdev); + subdev.bridge = b; + } + + s.bridges[name] = b; + s.isBridge[name] = true; + } + + if (L.isObject(board_json.switch)) { + for (var switchname in board_json.switch) { + var layout = board_json.switch[switchname], + netdevs = {}, + nports = {}, + ports = [], + pnum = null, + role = null; + + if (L.isObject(layout) && Array.isArray(layout.ports)) { + for (var i = 0, port; (port = layout.ports[i]) != null; i++) { + if (typeof(port) == 'object' && typeof(port.num) == 'number' && + (typeof(port.role) == 'string' || typeof(port.device) == 'string')) { + var spec = { + num: port.num, + role: port.role || 'cpu', + index: (port.index != null) ? port.index : port.num + }; + + if (port.device != null) { + spec.device = port.device; + spec.tagged = spec.need_tag; + netdevs[port.num] = port.device; + } + + ports.push(spec); + + if (port.role != null) + nports[port.role] = (nports[port.role] || 0) + 1; + } + } + + ports.sort(function(a, b) { + if (a.role != b.role) + return (a.role < b.role) ? -1 : 1; + + return (a.index - b.index); + }); + + for (var i = 0, port; (port = ports[i]) != null; i++) { + if (port.role != role) { + role = port.role; + pnum = 1; + } + + if (role == 'cpu') + port.label = 'CPU (%s)'.format(port.device); + else if (nports[role] > 1) + port.label = '%s %d'.format(role.toUpperCase(), pnum++); + else + port.label = role.toUpperCase(); + + delete port.role; + delete port.index; + } + + s.switches[switchname] = { + ports: ports, + netdevs: netdevs + }; + } + } + } + + if (L.isObject(board_json.dsl) && L.isObject(board_json.dsl.modem)) { + s.hasDSLModem = board_json.dsl.modem; + } + + _init = null; + + return (_state = s); + }); + } + + return (_state != null ? Promise.resolve(_state) : _init); +} + +function ifnameOf(obj) { + if (obj instanceof Protocol) + return obj.getIfname(); + else if (obj instanceof Device) + return obj.getName(); + else if (obj instanceof WifiDevice) + return obj.getName(); + else if (obj instanceof WifiNetwork) + return obj.getIfname(); + else if (typeof(obj) == 'string') + return obj.replace(/:.+$/, ''); + + return null; +} + +function networkSort(a, b) { + return a.getName() > b.getName(); +} + +function deviceSort(a, b) { + var typeWeigth = { wifi: 2, alias: 3 }, + weightA = typeWeigth[a.getType()] || 1, + weightB = typeWeigth[b.getType()] || 1; + + if (weightA != weightB) + return weightA - weightB; + + return a.getName() > b.getName(); +} + +function formatWifiEncryption(enc) { + if (!L.isObject(enc)) + return null; + + if (!enc.enabled) + return 'None'; + + var ciphers = Array.isArray(enc.ciphers) + ? enc.ciphers.map(function(c) { return c.toUpperCase() }) : [ 'NONE' ]; + + if (Array.isArray(enc.wep)) { + var has_open = false, + has_shared = false; + + for (var i = 0; i < enc.wep.length; i++) + if (enc.wep[i] == 'open') + has_open = true; + else if (enc.wep[i] == 'shared') + has_shared = true; + + if (has_open && has_shared) + return 'WEP Open/Shared (%s)'.format(ciphers.join(', ')); + else if (has_open) + return 'WEP Open System (%s)'.format(ciphers.join(', ')); + else if (has_shared) + return 'WEP Shared Auth (%s)'.format(ciphers.join(', ')); + + return 'WEP'; + } + + if (Array.isArray(enc.wpa)) { + var versions = [], + suites = Array.isArray(enc.authentication) + ? enc.authentication.map(function(a) { return a.toUpperCase() }) : [ 'NONE' ]; + + for (var i = 0; i < enc.wpa.length; i++) + switch (enc.wpa[i]) { + case 1: + versions.push('WPA'); + break; + + default: + versions.push('WPA%d'.format(enc.wpa[i])); + break; + } + + if (versions.length > 1) + return 'mixed %s %s (%s)'.format(versions.join('/'), suites.join(', '), ciphers.join(', ')); + + return '%s %s (%s)'.format(versions[0], suites.join(', '), ciphers.join(', ')); + } + + return 'Unknown'; +} + +function enumerateNetworks() { + var uciInterfaces = uci.sections('network', 'interface'), + networks = {}; + + for (var i = 0; i < uciInterfaces.length; i++) + networks[uciInterfaces[i]['.name']] = this.instantiateNetwork(uciInterfaces[i]['.name']); + + for (var i = 0; i < _state.ifaces.length; i++) + if (networks[_state.ifaces[i].interface] == null) + networks[_state.ifaces[i].interface] = + this.instantiateNetwork(_state.ifaces[i].interface, _state.ifaces[i].proto); + + var rv = []; + + for (var network in networks) + if (networks.hasOwnProperty(network)) + rv.push(networks[network]); + + rv.sort(networkSort); + + return rv; +} + + +var Hosts, Network, Protocol, Device, WifiDevice, WifiNetwork; + +/** + * @class + * @memberof LuCI + * @hideconstructor + * @classdesc + * + * The `LuCI.Network` class combines data from multiple `ubus` apis to + * provide an abstraction of the current network configuration state. + * + * It provides methods to enumerate interfaces and devices, to query + * current configuration details and to manipulate settings. + */ +Network = L.Class.extend(/** @lends LuCI.Network.prototype */ { + /** + * Converts the given prefix size in bits to a netmask. + * + * @method + * + * @param {number} bits + * The prefix size in bits. + * + * @param {boolean} [v6=false] + * Whether to convert the bits value into an IPv4 netmask (`false`) or + * an IPv6 netmask (`true`). + * + * @returns {null|string} + * Returns a string containing the netmask corresponding to the bit count + * or `null` when the given amount of bits exceeds the maximum possible + * value of `32` for IPv4 or `128` for IPv6. + */ + prefixToMask: prefixToMask, + + /** + * Converts the given netmask to a prefix size in bits. + * + * @method + * + * @param {string} netmask + * The netmask to convert into a bit count. + * + * @param {boolean} [v6=false] + * Whether to parse the given netmask as IPv4 (`false`) or IPv6 (`true`) + * address. + * + * @returns {null|number} + * Returns the number of prefix bits contained in the netmask or `null` + * if the given netmask value was invalid. + */ + maskToPrefix: maskToPrefix, + + /** + * An encryption entry describes active wireless encryption settings + * such as the used key management protocols, active ciphers and + * protocol versions. + * + * @typedef {Object<string, boolean|Array<number|string>>} LuCI.Network.WifiEncryption + * @memberof LuCI.Network + * + * @property {boolean} enabled + * Specifies whether any kind of encryption, such as `WEP` or `WPA` is + * enabled. If set to `false`, then no encryption is active and the + * corresponding network is open. + * + * @property {string[]} [wep] + * When the `wep` property exists, the network uses WEP encryption. + * In this case, the property is set to an array of active WEP modes + * which might be either `open`, `shared` or both. + * + * @property {number[]} [wpa] + * When the `wpa` property exists, the network uses WPA security. + * In this case, the property is set to an array containing the WPA + * protocol versions used, e.g. `[ 1, 2 ]` for WPA/WPA2 mixed mode or + * `[ 3 ]` for WPA3-SAE. + * + * @property {string[]} [authentication] + * The `authentication` property only applies to WPA encryption and + * is defined when the `wpa` property is set as well. It points to + * an array of active authentication suites used by the network, e.g. + * `[ "psk" ]` for a WPA(2)-PSK network or `[ "psk", "sae" ]` for + * mixed WPA2-PSK/WPA3-SAE encryption. + * + * @property {string[]} [ciphers] + * If either WEP or WPA encryption is active, then the `ciphers` + * property will be set to an array describing the active encryption + * ciphers used by the network, e.g. `[ "tkip", "ccmp" ]` for a + * WPA/WPA2-PSK mixed network or `[ "wep-40", "wep-104" ]` for an + * WEP network. + */ + + /** + * Converts a given {@link LuCI.Network.WifiEncryption encryption entry} + * into a human readable string such as `mixed WPA/WPA2 PSK (TKIP, CCMP)` + * or `WPA3 SAE (CCMP)`. + * + * @method + * + * @param {LuCI.Network.WifiEncryption} encryption + * The wireless encryption entry to convert. + * + * @returns {null|string} + * Returns the description string for the given encryption entry or + * `null` if the given entry was invalid. + */ + formatWifiEncryption: formatWifiEncryption, + + /** + * Flushes the local network state cache and fetches updated information + * from the remote `ubus` apis. + * + * @returns {Promise<Object>} + * Returns a promise resolving to the internal network state object. + */ + flushCache: function() { + initNetworkState(true); + return _init; + }, + + /** + * Instantiates the given {@link LuCI.Network.Protocol Protocol} backend, + * optionally using the given network name. + * + * @param {string} protoname + * The protocol backend to use, e.g. `static` or `dhcp`. + * + * @param {string} [netname=__dummy__] + * The network name to use for the instantiated protocol. This should be + * usually set to one of the interfaces described in /etc/config/network + * but it is allowed to omit it, e.g. to query protocol capabilities + * without the need for an existing interface. + * + * @returns {null|LuCI.Network.Protocol} + * Returns the instantiated protocol backend class or `null` if the given + * protocol isn't known. + */ + getProtocol: function(protoname, netname) { + var v = _protocols[protoname]; + if (v != null) + return new v(netname || '__dummy__'); + + return null; + }, + + /** + * Obtains instances of all known {@link LuCI.Network.Protocol Protocol} + * backend classes. + * + * @returns {Array<LuCI.Network.Protocol>} + * Returns an array of protocol class instances. + */ + getProtocols: function() { + var rv = []; + + for (var protoname in _protocols) + rv.push(new _protocols[protoname]('__dummy__')); + + return rv; + }, + + /** + * Registers a new {@link LuCI.Network.Protocol Protocol} subclass + * with the given methods and returns the resulting subclass value. + * + * This functions internally calls + * {@link LuCI.Class.extend Class.extend()} on the `Network.Protocol` + * base class. + * + * @param {string} protoname + * The name of the new protocol to register. + * + * @param {Object<string, *>} methods + * The member methods and values of the new `Protocol` subclass to + * be passed to {@link LuCI.Class.extend Class.extend()}. + * + * @returns {LuCI.Network.Protocol} + * Returns the new `Protocol` subclass. + */ + registerProtocol: function(protoname, methods) { + var spec = L.isObject(_protospecs) ? _protospecs[protoname] : null; + var proto = Protocol.extend(Object.assign({ + getI18n: function() { + return protoname; + }, + + isFloating: function() { + return false; + }, + + isVirtual: function() { + return (L.isObject(spec) && spec.no_device == true); + }, + + renderFormOptions: function(section) { + + } + }, methods, { + __init__: function(name) { + this.sid = name; + }, + + getProtocol: function() { + return protoname; + } + })); + + _protocols[protoname] = proto; + + return proto; + }, + + /** + * Registers a new regular expression pattern to recognize + * virtual interfaces. + * + * @param {RegExp} pat + * A `RegExp` instance to match a virtual interface name + * such as `6in4-wan` or `tun0`. + */ + registerPatternVirtual: function(pat) { + iface_patterns_virtual.push(pat); + }, + + /** + * Registers a new human readable translation string for a `Protocol` + * error code. + * + * @param {string} code + * The `ubus` protocol error code to register a translation for, e.g. + * `NO_DEVICE`. + * + * @param {string} message + * The message to use as translation for the given protocol error code. + * + * @returns {boolean} + * Returns `true` if the error code description has been added or `false` + * if either the arguments were invalid or if there already was a + * description for the given code. + */ + registerErrorCode: function(code, message) { + if (typeof(code) == 'string' && + typeof(message) == 'string' && + !proto_errors.hasOwnProperty(code)) { + proto_errors[code] = message; + return true; + } + + return false; + }, + + /** + * Adds a new network of the given name and update it with the given + * uci option values. + * + * If a network with the given name already exist but is empty, then + * this function will update its option, otherwise it will do nothing. + * + * @param {string} name + * The name of the network to add. Must be in the format `[a-zA-Z0-9_]+`. + * + * @param {Object<string, string|string[]>} [options] + * An object of uci option values to set on the new network or to + * update in an existing, empty network. + * + * @returns {Promise<null|LuCI.Network.Protocol>} + * Returns a promise resolving to the `Protocol` subclass instance + * describing the added network or resolving to `null` if the name + * was invalid or if a non-empty network of the given name already + * existed. + */ + addNetwork: function(name, options) { + return this.getNetwork(name).then(L.bind(function(existingNetwork) { + if (name != null && /^[a-zA-Z0-9_]+$/.test(name) && existingNetwork == null) { + var sid = uci.add('network', 'interface', name); + + if (sid != null) { + if (L.isObject(options)) + for (var key in options) + if (options.hasOwnProperty(key)) + uci.set('network', sid, key, options[key]); + + return this.instantiateNetwork(sid); + } + } + else if (existingNetwork != null && existingNetwork.isEmpty()) { + if (L.isObject(options)) + for (var key in options) + if (options.hasOwnProperty(key)) + existingNetwork.set(key, options[key]); + + return existingNetwork; + } + }, this)); + }, + + /** + * Get a {@link LuCI.Network.Protocol Protocol} instance describing + * the network with the given name. + * + * @param {string} name + * The logical interface name of the network get, e.g. `lan` or `wan`. + * + * @returns {Promise<null|LuCI.Network.Protocol>} + * Returns a promise resolving to a + * {@link LuCI.Network.Protocol Protocol} subclass instance describing + * the network or `null` if the network did not exist. + */ + getNetwork: function(name) { + return initNetworkState().then(L.bind(function() { + var section = (name != null) ? uci.get('network', name) : null; + + if (section != null && section['.type'] == 'interface') { + return this.instantiateNetwork(name); + } + else if (name != null) { + for (var i = 0; i < _state.ifaces.length; i++) + if (_state.ifaces[i].interface == name) + return this.instantiateNetwork(name, _state.ifaces[i].proto); + } + + return null; + }, this)); + }, + + /** + * Gets an array containing all known networks. + * + * @returns {Promise<Array<LuCI.Network.Protocol>>} + * Returns a promise resolving to a name-sorted array of + * {@link LuCI.Network.Protocol Protocol} subclass instances + * describing all known networks. + */ + getNetworks: function() { + return initNetworkState().then(L.bind(enumerateNetworks, this)); + }, + + /** + * Deletes the given network and its references from the network and + * firewall configuration. + * + * @param {string} name + * The name of the network to delete. + * + * @returns {Promise<boolean>} + * Returns a promise resolving to either `true` if the network and + * references to it were successfully deleted from the configuration or + * `false` if the given network could not be found. + */ + deleteNetwork: function(name) { + var requireFirewall = Promise.resolve(L.require('firewall')).catch(function() {}); + + return Promise.all([ requireFirewall, initNetworkState() ]).then(function() { + var uciInterface = uci.get('network', name); + + if (uciInterface != null && uciInterface['.type'] == 'interface') { + uci.remove('network', name); + + uci.sections('luci', 'ifstate', function(s) { + if (s.interface == name) + uci.remove('luci', s['.name']); + }); + + uci.sections('network', 'alias', function(s) { + if (s.interface == name) + uci.remove('network', s['.name']); + }); + + uci.sections('network', 'route', function(s) { + if (s.interface == name) + uci.remove('network', s['.name']); + }); + + uci.sections('network', 'route6', function(s) { + if (s.interface == name) + uci.remove('network', s['.name']); + }); + + uci.sections('wireless', 'wifi-iface', function(s) { + var networks = L.toArray(s.network).filter(function(network) { return network != name }); + + if (networks.length > 0) + uci.set('wireless', s['.name'], 'network', networks.join(' ')); + else + uci.unset('wireless', s['.name'], 'network'); + }); + + if (L.firewall) + return L.firewall.deleteNetwork(name).then(function() { return true }); + + return true; + } + + return false; + }); + }, + + /** + * Rename the given network and its references to a new name. + * + * @param {string} oldName + * The current name of the network. + * + * @param {string} newName + * The name to rename the network to, must be in the format + * `[a-z-A-Z0-9_]+`. + * + * @returns {Promise<boolean>} + * Returns a promise resolving to either `true` if the network was + * successfully renamed or `false` if the new name was invalid, if + * a network with the new name already exists or if the network to + * rename could not be found. + */ + renameNetwork: function(oldName, newName) { + return initNetworkState().then(function() { + if (newName == null || !/^[a-zA-Z0-9_]+$/.test(newName) || uci.get('network', newName) != null) + return false; + + var oldNetwork = uci.get('network', oldName); + + if (oldNetwork == null || oldNetwork['.type'] != 'interface') + return false; + + var sid = uci.add('network', 'interface', newName); + + for (var key in oldNetwork) + if (oldNetwork.hasOwnProperty(key) && key.charAt(0) != '.') + uci.set('network', sid, key, oldNetwork[key]); + + uci.sections('luci', 'ifstate', function(s) { + if (s.interface == oldName) + uci.set('luci', s['.name'], 'interface', newName); + }); + + uci.sections('network', 'alias', function(s) { + if (s.interface == oldName) + uci.set('network', s['.name'], 'interface', newName); + }); + + uci.sections('network', 'route', function(s) { + if (s.interface == oldName) + uci.set('network', s['.name'], 'interface', newName); + }); + + uci.sections('network', 'route6', function(s) { + if (s.interface == oldName) + uci.set('network', s['.name'], 'interface', newName); + }); + + uci.sections('wireless', 'wifi-iface', function(s) { + var networks = L.toArray(s.network).map(function(network) { return (network == oldName ? newName : network) }); + + if (networks.length > 0) + uci.set('wireless', s['.name'], 'network', networks.join(' ')); + }); + + uci.remove('network', oldName); + + return true; + }); + }, + + /** + * Get a {@link LuCI.Network.Device Device} instance describing the + * given network device. + * + * @param {string} name + * The name of the network device to get, e.g. `eth0` or `br-lan`. + * + * @returns {Promise<null|LuCI.Network.Device>} + * Returns a promise resolving to the `Device` instance describing + * the network device or `null` if the given device name could not + * be found. + */ + getDevice: function(name) { + return initNetworkState().then(L.bind(function() { + if (name == null) + return null; + + if (_state.netdevs.hasOwnProperty(name) || isWifiIfname(name)) + return this.instantiateDevice(name); + + var netid = getWifiNetidBySid(name); + if (netid != null) + return this.instantiateDevice(netid[0]); + + return null; + }, this)); + }, + + /** + * Get a sorted list of all found network devices. + * + * @returns {Promise<Array<LuCI.Network.Device>>} + * Returns a promise resolving to a sorted array of `Device` class + * instances describing the network devices found on the system. + */ + getDevices: function() { + return initNetworkState().then(L.bind(function() { + var devices = {}; + + /* find simple devices */ + var uciInterfaces = uci.sections('network', 'interface'); + for (var i = 0; i < uciInterfaces.length; i++) { + var ifnames = L.toArray(uciInterfaces[i].ifname); + + for (var j = 0; j < ifnames.length; j++) { + if (ifnames[j].charAt(0) == '@') + continue; + + if (isIgnoredIfname(ifnames[j]) || isVirtualIfname(ifnames[j]) || isWifiIfname(ifnames[j])) + continue; + + devices[ifnames[j]] = this.instantiateDevice(ifnames[j]); + } + } + + for (var ifname in _state.netdevs) { + if (devices.hasOwnProperty(ifname)) + continue; + + if (isIgnoredIfname(ifname) || isVirtualIfname(ifname) || isWifiIfname(ifname)) + continue; + + devices[ifname] = this.instantiateDevice(ifname); + } + + /* find VLAN devices */ + var uciSwitchVLANs = uci.sections('network', 'switch_vlan'); + for (var i = 0; i < uciSwitchVLANs.length; i++) { + if (typeof(uciSwitchVLANs[i].ports) != 'string' || + typeof(uciSwitchVLANs[i].device) != 'string' || + !_state.switches.hasOwnProperty(uciSwitchVLANs[i].device)) + continue; + + var ports = uciSwitchVLANs[i].ports.split(/\s+/); + for (var j = 0; j < ports.length; j++) { + var m = ports[j].match(/^(\d+)([tu]?)$/); + if (m == null) + continue; + + var netdev = _state.switches[uciSwitchVLANs[i].device].netdevs[m[1]]; + if (netdev == null) + continue; + + if (!devices.hasOwnProperty(netdev)) + devices[netdev] = this.instantiateDevice(netdev); + + _state.isSwitch[netdev] = true; + + if (m[2] != 't') + continue; + + var vid = uciSwitchVLANs[i].vid || uciSwitchVLANs[i].vlan; + vid = (vid != null ? +vid : null); + + if (vid == null || vid < 0 || vid > 4095) + continue; + + var vlandev = '%s.%d'.format(netdev, vid); + + if (!devices.hasOwnProperty(vlandev)) + devices[vlandev] = this.instantiateDevice(vlandev); + + _state.isSwitch[vlandev] = true; + } + } + + /* find wireless interfaces */ + var uciWifiIfaces = uci.sections('wireless', 'wifi-iface'), + networkCount = {}; + + for (var i = 0; i < uciWifiIfaces.length; i++) { + if (typeof(uciWifiIfaces[i].device) != 'string') + continue; + + networkCount[uciWifiIfaces[i].device] = (networkCount[uciWifiIfaces[i].device] || 0) + 1; + + var netid = '%s.network%d'.format(uciWifiIfaces[i].device, networkCount[uciWifiIfaces[i].device]); + + devices[netid] = this.instantiateDevice(netid); + } + + var rv = []; + + for (var netdev in devices) + if (devices.hasOwnProperty(netdev)) + rv.push(devices[netdev]); + + rv.sort(deviceSort); + + return rv; + }, this)); + }, + + /** + * Test if a given network device name is in the list of patterns for + * device names to ignore. + * + * Ignored device names are usually Linux network devices which are + * spawned implicitly by kernel modules such as `tunl0` or `hwsim0` + * and which are unsuitable for use in network configuration. + * + * @param {string} name + * The device name to test. + * + * @returns {boolean} + * Returns `true` if the given name is in the ignore pattern list, + * else returns `false`. + */ + isIgnoredDevice: function(name) { + return isIgnoredIfname(name); + }, + + /** + * Get a {@link LuCI.Network.WifiDevice WifiDevice} instance describing + * the given wireless radio. + * + * @param {string} devname + * The configuration name of the wireless radio to lookup, e.g. `radio0` + * for the first mac80211 phy on the system. + * + * @returns {Promise<null|LuCI.Network.WifiDevice>} + * Returns a promise resolving to the `WifiDevice` instance describing + * the underlying radio device or `null` if the wireless radio could not + * be found. + */ + getWifiDevice: function(devname) { + return initNetworkState().then(L.bind(function() { + var existingDevice = uci.get('wireless', devname); + + if (existingDevice == null || existingDevice['.type'] != 'wifi-device') + return null; + + return this.instantiateWifiDevice(devname, _state.radios[devname] || {}); + }, this)); + }, + + /** + * Obtain a list of all configured radio devices. + * + * @returns {Promise<Array<LuCI.Network.WifiDevice>>} + * Returns a promise resolving to an array of `WifiDevice` instances + * describing the wireless radios configured in the system. + * The order of the array corresponds to the order of the radios in + * the configuration. + */ + getWifiDevices: function() { + return initNetworkState().then(L.bind(function() { + var uciWifiDevices = uci.sections('wireless', 'wifi-device'), + rv = []; + + for (var i = 0; i < uciWifiDevices.length; i++) { + var devname = uciWifiDevices[i]['.name']; + rv.push(this.instantiateWifiDevice(devname, _state.radios[devname] || {})); + } + + return rv; + }, this)); + }, + + /** + * Get a {@link LuCI.Network.WifiNetwork WifiNetwork} instance describing + * the given wireless network. + * + * @param {string} netname + * The name of the wireless network to lookup. This may be either an uci + * configuration section ID, a network ID in the form `radio#.network#` + * or a Linux network device name like `wlan0` which is resolved to the + * corresponding configuration section through `ubus` runtime information. + * + * @returns {Promise<null|LuCI.Network.WifiNetwork>} + * Returns a promise resolving to the `WifiNetwork` instance describing + * the wireless network or `null` if the corresponding network could not + * be found. + */ + getWifiNetwork: function(netname) { + var sid, res, netid, radioname, radiostate, netstate; + + return initNetworkState().then(L.bind(function() { + sid = getWifiSidByNetid(netname); + + if (sid != null) { + res = getWifiStateBySid(sid); + netid = netname; + radioname = res ? res[0] : null; + radiostate = res ? res[1] : null; + netstate = res ? res[2] : null; + } + else { + res = getWifiStateByIfname(netname); + + if (res != null) { + radioname = res[0]; + radiostate = res[1]; + netstate = res[2]; + sid = netstate.section; + netid = L.toArray(getWifiNetidBySid(sid))[0]; + } + else { + res = getWifiStateBySid(netname); + + if (res != null) { + radioname = res[0]; + radiostate = res[1]; + netstate = res[2]; + sid = netname; + netid = L.toArray(getWifiNetidBySid(sid))[0]; + } + else { + res = getWifiNetidBySid(netname); + + if (res != null) { + netid = res[0]; + radioname = res[1]; + sid = netname; + } + } + } + } + + return this.instantiateWifiNetwork(sid || netname, radioname, radiostate, netid, netstate); + }, this)); + }, + + /** + * Adds a new wireless network to the configuration and sets its options + * to the provided values. + * + * @param {Object<string, string|string[]>} options + * The options to set for the newly added wireless network. This object + * must at least contain a `device` property which is set to the radio + * name the new network belongs to. + * + * @returns {Promise<null|LuCI.Network.WifiNetwork>} + * Returns a promise resolving to a `WifiNetwork` instance describing + * the newly added wireless network or `null` if the given options + * were invalid or if the associated radio device could not be found. + */ + addWifiNetwork: function(options) { + return initNetworkState().then(L.bind(function() { + if (options == null || + typeof(options) != 'object' || + typeof(options.device) != 'string') + return null; + + var existingDevice = uci.get('wireless', options.device); + if (existingDevice == null || existingDevice['.type'] != 'wifi-device') + return null; + + /* XXX: need to add a named section (wifinet#) here */ + var sid = uci.add('wireless', 'wifi-iface'); + for (var key in options) + if (options.hasOwnProperty(key)) + uci.set('wireless', sid, key, options[key]); + + var radioname = existingDevice['.name'], + netid = getWifiNetidBySid(sid) || []; + + return this.instantiateWifiNetwork(sid, radioname, _state.radios[radioname], netid[0], null); + }, this)); + }, + + /** + * Deletes the given wireless network from the configuration. + * + * @param {string} netname + * The name of the network to remove. This may be either a + * network ID in the form `radio#.network#` or a Linux network device + * name like `wlan0` which is resolved to the corresponding configuration + * section through `ubus` runtime information. + * + * @returns {Promise<boolean>} + * Returns a promise resolving to `true` if the wireless network has been + * successfully deleted from the configuration or `false` if it could not + * be found. + */ + deleteWifiNetwork: function(netname) { + return initNetworkState().then(L.bind(function() { + var sid = getWifiSidByIfname(netname); + + if (sid == null) + return false; + + uci.remove('wireless', sid); + return true; + }, this)); + }, + + /* private */ + getStatusByRoute: function(addr, mask) { + return initNetworkState().then(L.bind(function() { + var rv = []; + + for (var i = 0; i < _state.ifaces.length; i++) { + if (!Array.isArray(_state.ifaces[i].route)) + continue; + + for (var j = 0; j < _state.ifaces[i].route.length; j++) { + if (typeof(_state.ifaces[i].route[j]) != 'object' || + typeof(_state.ifaces[i].route[j].target) != 'string' || + typeof(_state.ifaces[i].route[j].mask) != 'number') + continue; + + if (_state.ifaces[i].route[j].table) + continue; + + if (_state.ifaces[i].route[j].target != addr || + _state.ifaces[i].route[j].mask != mask) + continue; + + rv.push(_state.ifaces[i]); + } + } + + return rv; + }, this)); + }, + + /* private */ + getStatusByAddress: function(addr) { + return initNetworkState().then(L.bind(function() { + var rv = []; + + for (var i = 0; i < _state.ifaces.length; i++) { + if (Array.isArray(_state.ifaces[i]['ipv4-address'])) + for (var j = 0; j < _state.ifaces[i]['ipv4-address'].length; j++) + if (typeof(_state.ifaces[i]['ipv4-address'][j]) == 'object' && + _state.ifaces[i]['ipv4-address'][j].address == addr) + return _state.ifaces[i]; + + if (Array.isArray(_state.ifaces[i]['ipv6-address'])) + for (var j = 0; j < _state.ifaces[i]['ipv6-address'].length; j++) + if (typeof(_state.ifaces[i]['ipv6-address'][j]) == 'object' && + _state.ifaces[i]['ipv6-address'][j].address == addr) + return _state.ifaces[i]; + + if (Array.isArray(_state.ifaces[i]['ipv6-prefix-assignment'])) + for (var j = 0; j < _state.ifaces[i]['ipv6-prefix-assignment'].length; j++) + if (typeof(_state.ifaces[i]['ipv6-prefix-assignment'][j]) == 'object' && + typeof(_state.ifaces[i]['ipv6-prefix-assignment'][j]['local-address']) == 'object' && + _state.ifaces[i]['ipv6-prefix-assignment'][j]['local-address'].address == addr) + return _state.ifaces[i]; + } + + return null; + }, this)); + }, + + /** + * Get IPv4 wan networks. + * + * This function looks up all networks having a default `0.0.0.0/0` route + * and returns them as array. + * + * @returns {Promise<Array<LuCI.Network.Protocol>>} + * Returns a promise resolving to an array of `Protocol` subclass + * instances describing the found default route interfaces. + */ + getWANNetworks: function() { + return this.getStatusByRoute('0.0.0.0', 0).then(L.bind(function(statuses) { + var rv = []; + + for (var i = 0; i < statuses.length; i++) + rv.push(this.instantiateNetwork(statuses[i].interface, statuses[i].proto)); + + return rv; + }, this)); + }, + + /** + * Get IPv6 wan networks. + * + * This function looks up all networks having a default `::/0` route + * and returns them as array. + * + * @returns {Promise<Array<LuCI.Network.Protocol>>} + * Returns a promise resolving to an array of `Protocol` subclass + * instances describing the found IPv6 default route interfaces. + */ + getWAN6Networks: function() { + return this.getStatusByRoute('::', 0).then(L.bind(function(statuses) { + var rv = []; + + for (var i = 0; i < statuses.length; i++) + rv.push(this.instantiateNetwork(statuses[i].interface, statuses[i].proto)); + + return rv; + }, this)); + }, + + /** + * Describes an swconfig switch topology by specifying the CPU + * connections and external port labels of a switch. + * + * @typedef {Object<string, Object|Array>} SwitchTopology + * @memberof LuCI.Network + * + * @property {Object<number, string>} netdevs + * The `netdevs` property points to an object describing the CPU port + * connections of the switch. The numeric key of the enclosed object is + * the port number, the value contains the Linux network device name the + * port is hardwired to. + * + * @property {Array<Object<string, boolean|number|string>>} ports + * The `ports` property points to an array describing the populated + * ports of the switch in the external label order. Each array item is + * an object containg the following keys: + * - `num` - the internal switch port number + * - `label` - the label of the port, e.g. `LAN 1` or `CPU (eth0)` + * - `device` - the connected Linux network device name (CPU ports only) + * - `tagged` - a boolean indicating whether the port must be tagged to + * function (CPU ports only) + */ + + /** + * Returns the topologies of all swconfig switches found on the system. + * + * @returns {Promise<Object<string, LuCI.Network.SwitchTopology>>} + * Returns a promise resolving to an object containing the topologies + * of each switch. The object keys correspond to the name of the switches + * such as `switch0`, the values are + * {@link LuCI.Network.SwitchTopology SwitchTopology} objects describing + * the layout. + */ + getSwitchTopologies: function() { + return initNetworkState().then(function() { + return _state.switches; + }); + }, + + /* private */ + instantiateNetwork: function(name, proto) { + if (name == null) + return null; + + proto = (proto == null ? uci.get('network', name, 'proto') : proto); + + var protoClass = _protocols[proto] || Protocol; + return new protoClass(name); + }, + + /* private */ + instantiateDevice: function(name, network, extend) { + if (extend != null) + return new (Device.extend(extend))(name, network); + + return new Device(name, network); + }, + + /* private */ + instantiateWifiDevice: function(radioname, radiostate) { + return new WifiDevice(radioname, radiostate); + }, + + /* private */ + instantiateWifiNetwork: function(sid, radioname, radiostate, netid, netstate) { + return new WifiNetwork(sid, radioname, radiostate, netid, netstate); + }, + + /** + * Obtains the the network device name of the given object. + * + * @param {LuCI.Network.Protocol|LuCI.Network.Device|LuCI.Network.WifiDevice|LuCI.Network.WifiNetwork|string} obj + * The object to get the device name from. + * + * @returns {null|string} + * Returns a string containing the device name or `null` if the given + * object could not be converted to a name. + */ + getIfnameOf: function(obj) { + return ifnameOf(obj); + }, + + /** + * Queries the internal DSL modem type from board information. + * + * @returns {Promise<null|string>} + * Returns a promise resolving to the type of the internal modem + * (e.g. `vdsl`) or to `null` if no internal modem is present. + */ + getDSLModemType: function() { + return initNetworkState().then(function() { + return _state.hasDSLModem ? _state.hasDSLModem.type : null; + }); + }, + + /** + * Queries aggregated information about known hosts. + * + * This function aggregates information from various sources such as + * DHCP lease databases, ARP and IPv6 neighbour entries, wireless + * association list etc. and returns a {@link LuCI.Network.Hosts Hosts} + * class instance describing the found hosts. + * + * @returns {Promise<LuCI.Network.Hosts>} + * Returns a `Hosts` instance describing host known on the system. + */ + getHostHints: function() { + return initNetworkState().then(function() { + return new Hosts(_state.hosts); + }); + } +}); + +/** + * @class + * @memberof LuCI.Network + * @hideconstructor + * @classdesc + * + * The `LuCI.Network.Hosts` class encapsulates host information aggregated + * from multiple sources and provides convenience functions to access the + * host information by different criteria. + */ +Hosts = L.Class.extend(/** @lends LuCI.Network.Hosts.prototype */ { + __init__: function(hosts) { + this.hosts = hosts; + }, + + /** + * Lookup the hostname associated with the given MAC address. + * + * @param {string} mac + * The MAC address to lookup. + * + * @returns {null|string} + * Returns the hostname associated with the given MAC or `null` if + * no matching host could be found or if no hostname is known for + * the corresponding host. + */ + getHostnameByMACAddr: function(mac) { + return this.hosts[mac] ? this.hosts[mac].name : null; + }, + + /** + * Lookup the IPv4 address associated with the given MAC address. + * + * @param {string} mac + * The MAC address to lookup. + * + * @returns {null|string} + * Returns the IPv4 address associated with the given MAC or `null` if + * no matching host could be found or if no IPv4 address is known for + * the corresponding host. + */ + getIPAddrByMACAddr: function(mac) { + return this.hosts[mac] ? this.hosts[mac].ipv4 : null; + }, + + /** + * Lookup the IPv6 address associated with the given MAC address. + * + * @param {string} mac + * The MAC address to lookup. + * + * @returns {null|string} + * Returns the IPv6 address associated with the given MAC or `null` if + * no matching host could be found or if no IPv6 address is known for + * the corresponding host. + */ + getIP6AddrByMACAddr: function(mac) { + return this.hosts[mac] ? this.hosts[mac].ipv6 : null; + }, + + /** + * Lookup the hostname associated with the given IPv4 address. + * + * @param {string} ipaddr + * The IPv4 address to lookup. + * + * @returns {null|string} + * Returns the hostname associated with the given IPv4 or `null` if + * no matching host could be found or if no hostname is known for + * the corresponding host. + */ + getHostnameByIPAddr: function(ipaddr) { + for (var mac in this.hosts) + if (this.hosts[mac].ipv4 == ipaddr && this.hosts[mac].name != null) + return this.hosts[mac].name; + return null; + }, + + /** + * Lookup the MAC address associated with the given IPv4 address. + * + * @param {string} ipaddr + * The IPv4 address to lookup. + * + * @returns {null|string} + * Returns the MAC address associated with the given IPv4 or `null` if + * no matching host could be found or if no MAC address is known for + * the corresponding host. + */ + getMACAddrByIPAddr: function(ipaddr) { + for (var mac in this.hosts) + if (this.hosts[mac].ipv4 == ipaddr) + return mac; + return null; + }, + + /** + * Lookup the hostname associated with the given IPv6 address. + * + * @param {string} ipaddr + * The IPv6 address to lookup. + * + * @returns {null|string} + * Returns the hostname associated with the given IPv6 or `null` if + * no matching host could be found or if no hostname is known for + * the corresponding host. + */ + getHostnameByIP6Addr: function(ip6addr) { + for (var mac in this.hosts) + if (this.hosts[mac].ipv6 == ip6addr && this.hosts[mac].name != null) + return this.hosts[mac].name; + return null; + }, + + /** + * Lookup the MAC address associated with the given IPv6 address. + * + * @param {string} ipaddr + * The IPv6 address to lookup. + * + * @returns {null|string} + * Returns the MAC address associated with the given IPv6 or `null` if + * no matching host could be found or if no MAC address is known for + * the corresponding host. + */ + getMACAddrByIP6Addr: function(ip6addr) { + for (var mac in this.hosts) + if (this.hosts[mac].ipv6 == ip6addr) + return mac; + return null; + }, + + /** + * Return an array of (MAC address, name hint) tuples sorted by + * MAC address. + * + * @param {boolean} [preferIp6=false] + * Whether to prefer IPv6 addresses (`true`) or IPv4 addresses (`false`) + * as name hint when no hostname is known for a specific MAC address. + * + * @returns {Array<Array<string>>} + * Returns an array of arrays containing a name hint for each found + * MAC address on the system. The array is sorted ascending by MAC. + * + * Each item of the resulting array is a two element array with the + * MAC being the first element and the name hint being the second + * element. The name hint is either the hostname, an IPv4 or an IPv6 + * address related to the MAC address. + * + * If no hostname but both IPv4 and IPv6 addresses are known, the + * `preferIP6` flag specifies whether the IPv6 or the IPv4 address + * is used as hint. + */ + getMACHints: function(preferIp6) { + var rv = []; + for (var mac in this.hosts) { + var hint = this.hosts[mac].name || + this.hosts[mac][preferIp6 ? 'ipv6' : 'ipv4'] || + this.hosts[mac][preferIp6 ? 'ipv4' : 'ipv6']; + + rv.push([mac, hint]); + } + return rv.sort(function(a, b) { return a[0] > b[0] }); + } +}); + +/** + * @class + * @memberof LuCI.Network + * @hideconstructor + * @classdesc + * + * The `Network.Protocol` class serves as base for protocol specific + * subclasses which describe logical UCI networks defined by `config + * interface` sections in `/etc/config/network`. + */ +Protocol = L.Class.extend(/** @lends LuCI.Network.Protocol.prototype */ { + __init__: function(name) { + this.sid = name; + }, + + _get: function(opt) { + var val = uci.get('network', this.sid, opt); + + if (Array.isArray(val)) + return val.join(' '); + + return val || ''; + }, + + _ubus: function(field) { + for (var i = 0; i < _state.ifaces.length; i++) { + if (_state.ifaces[i].interface != this.sid) + continue; + + return (field != null ? _state.ifaces[i][field] : _state.ifaces[i]); + } + }, + + /** + * Read the given UCI option value of this network. + * + * @param {string} opt + * The UCI option name to read. + * + * @returns {null|string|string[]} + * Returns the UCI option value or `null` if the requested option is + * not found. + */ + get: function(opt) { + return uci.get('network', this.sid, opt); + }, + + /** + * Set the given UCI option of this network to the given value. + * + * @param {string} opt + * The name of the UCI option to set. + * + * @param {null|string|string[]} val + * The value to set or `null` to remove the given option from the + * configuration. + */ + set: function(opt, val) { + return uci.set('network', this.sid, opt, val); + }, + + /** + * Get the associared Linux network device of this network. + * + * @returns {null|string} + * Returns the name of the associated network device or `null` if + * it could not be determined. + */ + getIfname: function() { + var ifname; + + if (this.isFloating()) + ifname = this._ubus('l3_device'); + else + ifname = this._ubus('device') || this._ubus('l3_device'); + + if (ifname != null) + return ifname; + + var res = getWifiNetidByNetname(this.sid); + return (res != null ? res[0] : null); + }, + + /** + * Get the name of this network protocol class. + * + * This function will be overwritten by subclasses created by + * {@link LuCI.Network#registerProtocol Network.registerProtocol()}. + * + * @abstract + * @returns {string} + * Returns the name of the network protocol implementation, e.g. + * `static` or `dhcp`. + */ + getProtocol: function() { + return null; + }, + + /** + * Return a human readable description for the protcol, such as + * `Static address` or `DHCP client`. + * + * This function should be overwritten by subclasses. + * + * @abstract + * @returns {string} + * Returns the description string. + */ + getI18n: function() { + switch (this.getProtocol()) { + case 'none': return _('Unmanaged'); + case 'static': return _('Static address'); + case 'dhcp': return _('DHCP client'); + default: return _('Unknown'); + } + }, + + /** + * Get the type of the underlying interface. + * + * This function actually is a convenience wrapper around + * `proto.get("type")` and is mainly used by other `LuCI.Network` code + * to check whether the interface is declared as bridge in UCI. + * + * @returns {null|string} + * Returns the value of the `type` option of the associated logical + * interface or `null` if no `type` option is set. + */ + getType: function() { + return this._get('type'); + }, + + /** + * Get the name of the associated logical interface. + * + * @returns {string} + * Returns the logical interface name, such as `lan` or `wan`. + */ + getName: function() { + return this.sid; + }, + + /** + * Get the uptime of the logical interface. + * + * @returns {number} + * Returns the uptime of the associated interface in seconds. + */ + getUptime: function() { + return this._ubus('uptime') || 0; + }, + + /** + * Get the logical interface expiry time in seconds. + * + * For protocols that have a concept of a lease, such as DHCP or + * DHCPv6, this function returns the remaining time in seconds + * until the lease expires. + * + * @returns {number} + * Returns the amount of seconds until the lease expires or `-1` + * if it isn't applicable to the associated protocol. + */ + getExpiry: function() { + var u = this._ubus('uptime'), + d = this._ubus('data'); + + if (typeof(u) == 'number' && d != null && + typeof(d) == 'object' && typeof(d.leasetime) == 'number') { + var r = d.leasetime - (u % d.leasetime); + return (r > 0 ? r : 0); + } + + return -1; + }, + + /** + * Get the metric value of the logical interface. + * + * @returns {number} + * Returns the current metric value used for device and network + * routes spawned by the associated logical interface. + */ + getMetric: function() { + return this._ubus('metric') || 0; + }, + + /** + * Get the requested firewall zone name of the logical interface. + * + * Some protocol implementations request a specific firewall zone + * to trigger inclusion of their resulting network devices into the + * firewall rule set. + * + * @returns {null|string} + * Returns the requested firewall zone name as published in the + * `ubus` runtime information or `null` if the remote protocol + * handler didn't request a zone. + */ + getZoneName: function() { + var d = this._ubus('data'); + + if (L.isObject(d) && typeof(d.zone) == 'string') + return d.zone; + + return null; + }, + + /** + * Query the first (primary) IPv4 address of the logical interface. + * + * @returns {null|string} + * Returns the primary IPv4 address registered by the protocol handler + * or `null` if no IPv4 addresses were set. + */ + getIPAddr: function() { + var addrs = this._ubus('ipv4-address'); + return ((Array.isArray(addrs) && addrs.length) ? addrs[0].address : null); + }, + + /** + * Query all IPv4 addresses of the logical interface. + * + * @returns {string[]} + * Returns an array of IPv4 addresses in CIDR notation which have been + * registered by the protocol handler. The order of the resulting array + * follows the order of the addresses in `ubus` runtime information. + */ + getIPAddrs: function() { + var addrs = this._ubus('ipv4-address'), + rv = []; + + if (Array.isArray(addrs)) + for (var i = 0; i < addrs.length; i++) + rv.push('%s/%d'.format(addrs[i].address, addrs[i].mask)); + + return rv; + }, + + /** + * Query the first (primary) IPv4 netmask of the logical interface. + * + * @returns {null|string} + * Returns the netmask of the primary IPv4 address registered by the + * protocol handler or `null` if no IPv4 addresses were set. + */ + getNetmask: function() { + var addrs = this._ubus('ipv4-address'); + if (Array.isArray(addrs) && addrs.length) + return prefixToMask(addrs[0].mask, false); + }, + + /** + * Query the gateway (nexthop) of the default route associated with + * this logical interface. + * + * @returns {string} + * Returns a string containing the IPv4 nexthop address of the associated + * default route or `null` if no default route was found. + */ + getGatewayAddr: function() { + var routes = this._ubus('route'); + + if (Array.isArray(routes)) + for (var i = 0; i < routes.length; i++) + if (typeof(routes[i]) == 'object' && + routes[i].target == '0.0.0.0' && + routes[i].mask == 0) + return routes[i].nexthop; + + return null; + }, + + /** + * Query the IPv4 DNS servers associated with the logical interface. + * + * @returns {string[]} + * Returns an array of IPv4 DNS servers registered by the remote + * protocol backend. + */ + getDNSAddrs: function() { + var addrs = this._ubus('dns-server'), + rv = []; + + if (Array.isArray(addrs)) + for (var i = 0; i < addrs.length; i++) + if (!/:/.test(addrs[i])) + rv.push(addrs[i]); + + return rv; + }, + + /** + * Query the first (primary) IPv6 address of the logical interface. + * + * @returns {null|string} + * Returns the primary IPv6 address registered by the protocol handler + * in CIDR notation or `null` if no IPv6 addresses were set. + */ + getIP6Addr: function() { + var addrs = this._ubus('ipv6-address'); + + if (Array.isArray(addrs) && L.isObject(addrs[0])) + return '%s/%d'.format(addrs[0].address, addrs[0].mask); + + addrs = this._ubus('ipv6-prefix-assignment'); + + if (Array.isArray(addrs) && L.isObject(addrs[0]) && L.isObject(addrs[0]['local-address'])) + return '%s/%d'.format(addrs[0]['local-address'].address, addrs[0]['local-address'].mask); + + return null; + }, + + /** + * Query all IPv6 addresses of the logical interface. + * + * @returns {string[]} + * Returns an array of IPv6 addresses in CIDR notation which have been + * registered by the protocol handler. The order of the resulting array + * follows the order of the addresses in `ubus` runtime information. + */ + getIP6Addrs: function() { + var addrs = this._ubus('ipv6-address'), + rv = []; + + if (Array.isArray(addrs)) + for (var i = 0; i < addrs.length; i++) + if (L.isObject(addrs[i])) + rv.push('%s/%d'.format(addrs[i].address, addrs[i].mask)); + + addrs = this._ubus('ipv6-prefix-assignment'); + + if (Array.isArray(addrs)) + for (var i = 0; i < addrs.length; i++) + if (L.isObject(addrs[i]) && L.isObject(addrs[i]['local-address'])) + rv.push('%s/%d'.format(addrs[i]['local-address'].address, addrs[i]['local-address'].mask)); + + return rv; + }, + + /** + * Query the gateway (nexthop) of the IPv6 default route associated with + * this logical interface. + * + * @returns {string} + * Returns a string containing the IPv6 nexthop address of the associated + * default route or `null` if no default route was found. + */ + getGateway6Addr: function() { + var routes = this._ubus('route'); + + if (Array.isArray(routes)) + for (var i = 0; i < routes.length; i++) + if (typeof(routes[i]) == 'object' && + routes[i].target == '::' && + routes[i].mask == 0) + return routes[i].nexthop; + + return null; + }, + + /** + * Query the IPv6 DNS servers associated with the logical interface. + * + * @returns {string[]} + * Returns an array of IPv6 DNS servers registered by the remote + * protocol backend. + */ + getDNS6Addrs: function() { + var addrs = this._ubus('dns-server'), + rv = []; + + if (Array.isArray(addrs)) + for (var i = 0; i < addrs.length; i++) + if (/:/.test(addrs[i])) + rv.push(addrs[i]); + + return rv; + }, + + /** + * Query the routed IPv6 prefix associated with the logical interface. + * + * @returns {null|string} + * Returns the routed IPv6 prefix registered by the remote protocol + * handler or `null` if no prefix is present. + */ + getIP6Prefix: function() { + var prefixes = this._ubus('ipv6-prefix'); + + if (Array.isArray(prefixes) && L.isObject(prefixes[0])) + return '%s/%d'.format(prefixes[0].address, prefixes[0].mask); + + return null; + }, + + /** + * Query interface error messages published in `ubus` runtime state. + * + * Interface errors are emitted by remote protocol handlers if the setup + * of the underlying logical interface failed, e.g. due to bad + * configuration or network connectivity issues. + * + * This function will translate the found error codes to human readable + * messages using the descriptions registered by + * {@link LuCI.Network#registerErrorCode Network.registerErrorCode()} + * and fall back to `"Unknown error (%s)"` where `%s` is replaced by the + * error code in case no translation can be found. + * + * @returns {string[]} + * Returns an array of translated interface error messages. + */ + getErrors: function() { + var errors = this._ubus('errors'), + rv = null; + + if (Array.isArray(errors)) { + for (var i = 0; i < errors.length; i++) { + if (!L.isObject(errors[i]) || typeof(errors[i].code) != 'string') + continue; + + rv = rv || []; + rv.push(proto_errors[errors[i].code] || _('Unknown error (%s)').format(errors[i].code)); + } + } + + return rv; + }, + + /** + * Checks whether the underlying logical interface is declared as bridge. + * + * @returns {boolean} + * Returns `true` when the interface is declared with `option type bridge` + * and when the associated protocol implementation is not marked virtual + * or `false` when the logical interface is no bridge. + */ + isBridge: function() { + return (!this.isVirtual() && this.getType() == 'bridge'); + }, + + /** + * Get the name of the opkg package providing the protocol functionality. + * + * This function should be overwritten by protocol specific subclasses. + * + * @abstract + * + * @returns {string} + * Returns the name of the opkg package required for the protocol to + * function, e.g. `odhcp6c` for the `dhcpv6` prototocol. + */ + getOpkgPackage: function() { + return null; + }, + + /** + * Checks whether the protocol functionality is installed. + * + * This function exists for compatibility with old code, it always + * returns `true`. + * + * @deprecated + * @abstract + * + * @returns {boolean} + * Returns `true` if the protocol support is installed, else `false`. + */ + isInstalled: function() { + return true; + }, + + /** + * Checks whether this protocol is "virtual". + * + * A "virtual" protocol is a protocol which spawns its own interfaces + * on demand instead of using existing physical interfaces. + * + * Examples for virtual protocols are `6in4` which `gre` spawn tunnel + * network device on startup, examples for non-virtual protcols are + * `dhcp` or `static` which apply IP configuration to existing interfaces. + * + * This function should be overwritten by subclasses. + * + * @returns {boolean} + * Returns a boolean indicating whether the underlying protocol spawns + * dynamic interfaces (`true`) or not (`false`). + */ + isVirtual: function() { + return false; + }, + + /** + * Checks whether this protocol is "floating". + * + * A "floating" protocol is a protocol which spawns its own interfaces + * on demand, like a virtual one but which relies on an existinf lower + * level interface to initiate the connection. + * + * An example for such a protocol is "pppoe". + * + * This function exists for backwards compatibility with older code + * but should not be used anymore. + * + * @deprecated + * @returns {boolean} + * Returns a boolean indicating whether this protocol is floating (`true`) + * or not (`false`). + */ + isFloating: function() { + return false; + }, + + /** + * Checks whether this logical interface is dynamic. + * + * A dynamic interface is an interface which has been created at runtime, + * e.g. as sub-interface of another interface, but which is not backed by + * any user configuration. Such dynamic interfaces cannot be edited but + * only brought down or restarted. + * + * @returns {boolean} + * Returns a boolean indicating whether this interface is dynamic (`true`) + * or not (`false`). + */ + isDynamic: function() { + return (this._ubus('dynamic') == true); + }, + + /** + * Checks whether this interface is an alias interface. + * + * Alias interfaces are interfaces layering on top of another interface + * and are denoted by a special `@interfacename` notation in the + * underlying `ifname` option. + * + * @returns {null|string} + * Returns the name of the parent interface if this logical interface + * is an alias or `null` if it is not an alias interface. + */ + isAlias: function() { + var ifnames = L.toArray(uci.get('network', this.sid, 'ifname')), + parent = null; + + for (var i = 0; i < ifnames.length; i++) + if (ifnames[i].charAt(0) == '@') + parent = ifnames[i].substr(1); + else if (parent != null) + parent = null; + + return parent; + }, + + /** + * Checks whether this logical interface is "empty", meaning that ut + * has no network devices attached. + * + * @returns {boolean} + * Returns `true` if this logical interface is empty, else `false`. + */ + isEmpty: function() { + if (this.isFloating()) + return false; + + var empty = true, + ifname = this._get('ifname'); + + if (ifname != null && ifname.match(/\S+/)) + empty = false; + + if (empty == true && getWifiNetidBySid(this.sid) != null) + empty = false; + + return empty; + }, + + /** + * Checks whether this logical interface is configured and running. + * + * @returns {boolean} + * Returns `true` when the interface is active or `false` when it is not. + */ + isUp: function() { + return (this._ubus('up') == true); + }, + + /** + * Add the given network device to the logical interface. + * + * @param {LuCI.Network.Protocol|LuCI.Network.Device|LuCI.Network.WifiDevice|LuCI.Network.WifiNetwork|string} device + * The object or device name to add to the logical interface. In case the + * given argument is not a string, it is resolved though the + * {@link LuCI.Network#getIfnameOf Network.getIfnameOf()} function. + * + * @returns {boolean} + * Returns `true` if the device name has been added or `false` if any + * argument was invalid, if the device was already part of the logical + * interface or if the logical interface is virtual. + */ + addDevice: function(ifname) { + ifname = ifnameOf(ifname); + + if (ifname == null || this.isFloating()) + return false; + + var wif = getWifiSidByIfname(ifname); + + if (wif != null) + return appendValue('wireless', wif, 'network', this.sid); + + return appendValue('network', this.sid, 'ifname', ifname); + }, + + /** + * Remove the given network device from the logical interface. + * + * @param {LuCI.Network.Protocol|LuCI.Network.Device|LuCI.Network.WifiDevice|LuCI.Network.WifiNetwork|string} device + * The object or device name to remove from the logical interface. In case + * the given argument is not a string, it is resolved though the + * {@link LuCI.Network#getIfnameOf Network.getIfnameOf()} function. + * + * @returns {boolean} + * Returns `true` if the device name has been added or `false` if any + * argument was invalid, if the device was already part of the logical + * interface or if the logical interface is virtual. + */ + deleteDevice: function(ifname) { + var rv = false; + + ifname = ifnameOf(ifname); + + if (ifname == null || this.isFloating()) + return false; + + var wif = getWifiSidByIfname(ifname); + + if (wif != null) + rv = removeValue('wireless', wif, 'network', this.sid); + + if (removeValue('network', this.sid, 'ifname', ifname)) + rv = true; + + return rv; + }, + + /** + * Returns the Linux network device associated with this logical + * interface. + * + * @returns {LuCI.Network.Device} + * Returns a `Network.Device` class instance representing the + * expected Linux network device according to the configuration. + */ + getDevice: function() { + if (this.isVirtual()) { + var ifname = '%s-%s'.format(this.getProtocol(), this.sid); + _state.isTunnel[this.getProtocol() + '-' + this.sid] = true; + return L.network.instantiateDevice(ifname, this); + } + else if (this.isBridge()) { + var ifname = 'br-%s'.format(this.sid); + _state.isBridge[ifname] = true; + return new Device(ifname, this); + } + else { + var ifnames = L.toArray(uci.get('network', this.sid, 'ifname')); + + for (var i = 0; i < ifnames.length; i++) { + var m = ifnames[i].match(/^([^:/]+)/); + return ((m && m[1]) ? L.network.instantiateDevice(m[1], this) : null); + } + + ifname = getWifiNetidByNetname(this.sid); + + return (ifname != null ? L.network.instantiateDevice(ifname[0], this) : null); + } + }, + + /** + * Returns the layer 2 linux network device currently associated + * with this logical interface. + * + * @returns {LuCI.Network.Device} + * Returns a `Network.Device` class instance representing the Linux + * network device currently associated with the logical interface. + */ + getL2Device: function() { + var ifname = this._ubus('device'); + return (ifname != null ? L.network.instantiateDevice(ifname, this) : null); + }, + + /** + * Returns the layer 3 linux network device currently associated + * with this logical interface. + * + * @returns {LuCI.Network.Device} + * Returns a `Network.Device` class instance representing the Linux + * network device currently associated with the logical interface. + */ + getL3Device: function() { + var ifname = this._ubus('l3_device'); + return (ifname != null ? L.network.instantiateDevice(ifname, this) : null); + }, + + /** + * Returns a list of network sub-devices associated with this logical + * interface. + * + * @returns {null|Array<LuCI.Network.Device>} + * Returns an array of of `Network.Device` class instances representing + * the sub-devices attached to this logical interface or `null` if the + * logical interface does not support sub-devices, e.g. because it is + * virtual and not a bridge. + */ + getDevices: function() { + var rv = []; + + if (!this.isBridge() && !(this.isVirtual() && !this.isFloating())) + return null; + + var ifnames = L.toArray(uci.get('network', this.sid, 'ifname')); + + for (var i = 0; i < ifnames.length; i++) { + if (ifnames[i].charAt(0) == '@') + continue; + + var m = ifnames[i].match(/^([^:/]+)/); + if (m != null) + rv.push(L.network.instantiateDevice(m[1], this)); + } + + var uciWifiIfaces = uci.sections('wireless', 'wifi-iface'); + + for (var i = 0; i < uciWifiIfaces.length; i++) { + if (typeof(uciWifiIfaces[i].device) != 'string') + continue; + + var networks = L.toArray(uciWifiIfaces[i].network); + + for (var j = 0; j < networks.length; j++) { + if (networks[j] != this.sid) + continue; + + var netid = getWifiNetidBySid(uciWifiIfaces[i]['.name']); + + if (netid != null) + rv.push(L.network.instantiateDevice(netid[0], this)); + } + } + + rv.sort(deviceSort); + + return rv; + }, + + /** + * Checks whether this logical interface contains the given device + * object. + * + * @param {LuCI.Network.Protocol|LuCI.Network.Device|LuCI.Network.WifiDevice|LuCI.Network.WifiNetwork|string} device + * The object or device name to check. In case the given argument is not + * a string, it is resolved though the + * {@link LuCI.Network#getIfnameOf Network.getIfnameOf()} function. + * + * @returns {boolean} + * Returns `true` when this logical interface contains the given network + * device or `false` if not. + */ + containsDevice: function(ifname) { + ifname = ifnameOf(ifname); + + if (ifname == null) + return false; + else if (this.isVirtual() && '%s-%s'.format(this.getProtocol(), this.sid) == ifname) + return true; + else if (this.isBridge() && 'br-%s'.format(this.sid) == ifname) + return true; + + var ifnames = L.toArray(uci.get('network', this.sid, 'ifname')); + + for (var i = 0; i < ifnames.length; i++) { + var m = ifnames[i].match(/^([^:/]+)/); + if (m != null && m[1] == ifname) + return true; + } + + var wif = getWifiSidByIfname(ifname); + + if (wif != null) { + var networks = L.toArray(uci.get('wireless', wif, 'network')); + + for (var i = 0; i < networks.length; i++) + if (networks[i] == this.sid) + return true; + } + + return false; + } +}); + +/** + * @class + * @memberof LuCI.Network + * @hideconstructor + * @classdesc + * + * A `Network.Device` class instance represents an underlying Linux network + * device and allows querying device details such as packet statistics or MTU. + */ +Device = L.Class.extend(/** @lends LuCI.Network.Device.prototype */ { + __init__: function(ifname, network) { + var wif = getWifiSidByIfname(ifname); + + if (wif != null) { + var res = getWifiStateBySid(wif) || [], + netid = getWifiNetidBySid(wif) || []; + + this.wif = new WifiNetwork(wif, res[0], res[1], netid[0], res[2], { ifname: ifname }); + this.ifname = this.wif.getIfname(); + } + + this.ifname = this.ifname || ifname; + this.dev = _state.netdevs[this.ifname]; + this.network = network; + }, + + _devstate: function(/* ... */) { + var rv = this.dev; + + for (var i = 0; i < arguments.length; i++) + if (L.isObject(rv)) + rv = rv[arguments[i]]; + else + return null; + + return rv; + }, + + /** + * Get the name of the network device. + * + * @returns {string} + * Returns the name of the device, e.g. `eth0` or `wlan0`. + */ + getName: function() { + return (this.wif != null ? this.wif.getIfname() : this.ifname); + }, + + /** + * Get the MAC address of the device. + * + * @returns {null|string} + * Returns the MAC address of the device or `null` if not applicable, + * e.g. for non-ethernet tunnel devices. + */ + getMAC: function() { + var mac = this._devstate('macaddr'); + return mac ? mac.toUpperCase() : null; + }, + + /** + * Get the MTU of the device. + * + * @returns {number} + * Returns the MTU of the device. + */ + getMTU: function() { + return this._devstate('mtu'); + }, + + /** + * Get the IPv4 addresses configured on the device. + * + * @returns {string[]} + * Returns an array of IPv4 address strings. + */ + getIPAddrs: function() { + var addrs = this._devstate('ipaddrs'); + return (Array.isArray(addrs) ? addrs : []); + }, + + /** + * Get the IPv6 addresses configured on the device. + * + * @returns {string[]} + * Returns an array of IPv6 address strings. + */ + getIP6Addrs: function() { + var addrs = this._devstate('ip6addrs'); + return (Array.isArray(addrs) ? addrs : []); + }, + + /** + * Get the type of the device.. + * + * @returns {string} + * Returns a string describing the type of the network device: + * - `alias` if it is an abstract alias device (`@` notation) + * - `wifi` if it is a wireless interface (e.g. `wlan0`) + * - `bridge` if it is a bridge device (e.g. `br-lan`) + * - `tunnel` if it is a tun or tap device (e.g. `tun0`) + * - `vlan` if it is a vlan device (e.g. `eth0.1`) + * - `switch` if it is a switch device (e.g.`eth1` connected to switch0) + * - `ethernet` for all other device types + */ + getType: function() { + if (this.ifname != null && this.ifname.charAt(0) == '@') + return 'alias'; + else if (this.wif != null || isWifiIfname(this.ifname)) + return 'wifi'; + else if (_state.isBridge[this.ifname]) + return 'bridge'; + else if (_state.isTunnel[this.ifname]) + return 'tunnel'; + else if (this.ifname.indexOf('.') > -1) + return 'vlan'; + else if (_state.isSwitch[this.ifname]) + return 'switch'; + else + return 'ethernet'; + }, + + /** + * Get a short description string for the device. + * + * @returns {string} + * Returns the device name for non-wifi devices or a string containing + * the operation mode and SSID for wifi devices. + */ + getShortName: function() { + if (this.wif != null) + return this.wif.getShortName(); + + return this.ifname; + }, + + /** + * Get a long description string for the device. + * + * @returns {string} + * Returns a string containing the type description and device name + * for non-wifi devices or operation mode and ssid for wifi ones. + */ + getI18n: function() { + if (this.wif != null) { + return '%s: %s "%s"'.format( + _('Wireless Network'), + this.wif.getActiveMode(), + this.wif.getActiveSSID() || this.wif.getActiveBSSID() || this.wif.getID() || '?'); + } + + return '%s: "%s"'.format(this.getTypeI18n(), this.getName()); + }, + + /** + * Get a string describing the device type. + * + * @returns {string} + * Returns a string describing the type, e.g. "Wireless Adapter" or + * "Bridge". + */ + getTypeI18n: function() { + switch (this.getType()) { + case 'alias': + return _('Alias Interface'); + + case 'wifi': + return _('Wireless Adapter'); + + case 'bridge': + return _('Bridge'); + + case 'switch': + return _('Ethernet Switch'); + + case 'vlan': + return (_state.isSwitch[this.ifname] ? _('Switch VLAN') : _('Software VLAN')); + + case 'tunnel': + return _('Tunnel Interface'); + + default: + return _('Ethernet Adapter'); + } + }, + + /** + * Get the associated bridge ports of the device. + * + * @returns {null|Array<LuCI.Network.Device>} + * Returns an array of `Network.Device` instances representing the ports + * (slave interfaces) of the bridge or `null` when this device isn't + * a Linux bridge. + */ + getPorts: function() { + var br = _state.bridges[this.ifname], + rv = []; + + if (br == null || !Array.isArray(br.ifnames)) + return null; + + for (var i = 0; i < br.ifnames.length; i++) + rv.push(L.network.instantiateDevice(br.ifnames[i].name)); + + rv.sort(deviceSort); + + return rv; + }, + + /** + * Get the bridge ID + * + * @returns {null|string} + * Returns the ID of this network bridge or `null` if this network + * device is not a Linux bridge. + */ + getBridgeID: function() { + var br = _state.bridges[this.ifname]; + return (br != null ? br.id : null); + }, + + /** + * Get the bridge STP setting + * + * @returns {boolean} + * Returns `true` when this device is a Linux bridge and has `stp` + * enabled, else `false`. + */ + getBridgeSTP: function() { + var br = _state.bridges[this.ifname]; + return (br != null ? !!br.stp : false); + }, + + /** + * Checks whether this device is up. + * + * @returns {boolean} + * Returns `true` when the associated device is running pr `false` + * when it is down or absent. + */ + isUp: function() { + var up = this._devstate('flags', 'up'); + + if (up == null) + up = (this.getType() == 'alias'); + + return up; + }, + + /** + * Checks whether this device is a Linux bridge. + * + * @returns {boolean} + * Returns `true` when the network device is present and a Linux bridge, + * else `false`. + */ + isBridge: function() { + return (this.getType() == 'bridge'); + }, + + /** + * Checks whether this device is part of a Linux bridge. + * + * @returns {boolean} + * Returns `true` when this network device is part of a bridge, + * else `false`. + */ + isBridgePort: function() { + return (this._devstate('bridge') != null); + }, + + /** + * Get the amount of transmitted bytes. + * + * @returns {number} + * Returns the amount of bytes transmitted by the network device. + */ + getTXBytes: function() { + var stat = this._devstate('stats'); + return (stat != null ? stat.tx_bytes || 0 : 0); + }, + + /** + * Get the amount of received bytes. + * + * @returns {number} + * Returns the amount of bytes received by the network device. + */ + getRXBytes: function() { + var stat = this._devstate('stats'); + return (stat != null ? stat.rx_bytes || 0 : 0); + }, + + /** + * Get the amount of transmitted packets. + * + * @returns {number} + * Returns the amount of packets transmitted by the network device. + */ + getTXPackets: function() { + var stat = this._devstate('stats'); + return (stat != null ? stat.tx_packets || 0 : 0); + }, + + /** + * Get the amount of received packets. + * + * @returns {number} + * Returns the amount of packets received by the network device. + */ + getRXPackets: function() { + var stat = this._devstate('stats'); + return (stat != null ? stat.rx_packets || 0 : 0); + }, + + /** + * Get the primary logical interface this device is assigned to. + * + * @returns {null|LuCI.Network.Protocol} + * Returns a `Network.Protocol` instance representing the logical + * interface this device is attached to or `null` if it is not + * assigned to any logical interface. + */ + getNetwork: function() { + return this.getNetworks()[0]; + }, + + /** + * Get the logical interfaces this device is assigned to. + * + * @returns {Array<LuCI.Network.Protocol>} + * Returns an array of `Network.Protocol` instances representing the + * logical interfaces this device is assigned to. + */ + getNetworks: function() { + if (this.networks == null) { + this.networks = []; + + var networks = enumerateNetworks.apply(L.network); + + for (var i = 0; i < networks.length; i++) + if (networks[i].containsDevice(this.ifname) || networks[i].getIfname() == this.ifname) + this.networks.push(networks[i]); + + this.networks.sort(networkSort); + } + + return this.networks; + }, + + /** + * Get the related wireless network this device is related to. + * + * @returns {null|LuCI.Network.WifiNetwork} + * Returns a `Network.WifiNetwork` instance representing the wireless + * network corresponding to this network device or `null` if this device + * is not a wireless device. + */ + getWifiNetwork: function() { + return (this.wif != null ? this.wif : null); + } +}); + +/** + * @class + * @memberof LuCI.Network + * @hideconstructor + * @classdesc + * + * A `Network.WifiDevice` class instance represents a wireless radio device + * present on the system and provides wireless capability information as + * well as methods for enumerating related wireless networks. + */ +WifiDevice = L.Class.extend(/** @lends LuCI.Network.WifiDevice.prototype */ { + __init__: function(name, radiostate) { + var uciWifiDevice = uci.get('wireless', name); + + if (uciWifiDevice != null && + uciWifiDevice['.type'] == 'wifi-device' && + uciWifiDevice['.name'] != null) { + this.sid = uciWifiDevice['.name']; + } + + this.sid = this.sid || name; + this._ubusdata = { + radio: name, + dev: radiostate + }; + }, + + /* private */ + ubus: function(/* ... */) { + var v = this._ubusdata; + + for (var i = 0; i < arguments.length; i++) + if (L.isObject(v)) + v = v[arguments[i]]; + else + return null; + + return v; + }, + + /** + * Read the given UCI option value of this wireless device. + * + * @param {string} opt + * The UCI option name to read. + * + * @returns {null|string|string[]} + * Returns the UCI option value or `null` if the requested option is + * not found. + */ + get: function(opt) { + return uci.get('wireless', this.sid, opt); + }, + + /** + * Set the given UCI option of this network to the given value. + * + * @param {string} opt + * The name of the UCI option to set. + * + * @param {null|string|string[]} val + * The value to set or `null` to remove the given option from the + * configuration. + */ + set: function(opt, value) { + return uci.set('wireless', this.sid, opt, value); + }, + + /** + * Checks whether this wireless radio is disabled. + * + * @returns {boolean} + * Returns `true` when the wireless radio is marked as disabled in `ubus` + * runtime state or when the `disabled` option is set in the corresponding + * UCI configuration. + */ + isDisabled: function() { + return this.ubus('dev', 'disabled') || this.get('disabled') == '1'; + }, + + /** + * Get the configuration name of this wireless radio. + * + * @returns {string} + * Returns the UCI section name (e.g. `radio0`) of the corresponding + * radio configuration which also serves as unique logical identifier + * for the wireless phy. + */ + getName: function() { + return this.sid; + }, + + /** + * Gets a list of supported hwmodes. + * + * The hwmode values describe the frequency band and wireless standard + * versions supported by the wireless phy. + * + * @returns {string[]} + * Returns an array of valid hwmode values for this radio. Currently + * known mode values are: + * - `a` - Legacy 802.11a mode, 5 GHz, up to 54 Mbit/s + * - `b` - Legacy 802.11b mode, 2.4 GHz, up to 11 Mbit/s + * - `g` - Legacy 802.11g mode, 2.4 GHz, up to 54 Mbit/s + * - `n` - IEEE 802.11n mode, 2.4 or 5 GHz, up to 600 Mbit/s + * - `ac` - IEEE 802.11ac mode, 5 GHz, up to 6770 Mbit/s + */ + getHWModes: function() { + var hwmodes = this.ubus('dev', 'iwinfo', 'hwmodes'); + return Array.isArray(hwmodes) ? hwmodes : [ 'b', 'g' ]; + }, + + /** + * Gets a list of supported htmodes. + * + * The htmode values describe the wide-frequency options supported by + * the wireless phy. + * + * @returns {string[]} + * Returns an array of valid htmode values for this radio. Currently + * known mode values are: + * - `HT20` - applicable to IEEE 802.11n, 20 MHz wide channels + * - `HT40` - applicable to IEEE 802.11n, 40 MHz wide channels + * - `VHT20` - applicable to IEEE 802.11ac, 20 MHz wide channels + * - `VHT40` - applicable to IEEE 802.11ac, 40 MHz wide channels + * - `VHT80` - applicable to IEEE 802.11ac, 80 MHz wide channels + * - `VHT160` - applicable to IEEE 802.11ac, 160 MHz wide channels + */ + getHTModes: function() { + var htmodes = this.ubus('dev', 'iwinfo', 'htmodes'); + return (Array.isArray(htmodes) && htmodes.length) ? htmodes : null; + }, + + /** + * Get a string describing the wireless radio hardware. + * + * @returns {string} + * Returns the description string. + */ + getI18n: function() { + var hw = this.ubus('dev', 'iwinfo', 'hardware'), + type = L.isObject(hw) ? hw.name : null; + + if (this.ubus('dev', 'iwinfo', 'type') == 'wl') + type = 'Broadcom'; + + var hwmodes = this.getHWModes(), + modestr = ''; + + hwmodes.sort(function(a, b) { + return (a.length != b.length ? a.length > b.length : a > b); + }); + + modestr = hwmodes.join(''); + + return '%s 802.11%s Wireless Controller (%s)'.format(type || 'Generic', modestr, this.getName()); + }, + + /** + * A wireless scan result object describes a neighbouring wireless + * network found in the vincinity. + * + * @typedef {Object<string, number|string|LuCI.Network.WifiEncryption>} WifiScanResult + * @memberof LuCI.Network + * + * @property {string} ssid + * The SSID / Mesh ID of the network. + * + * @property {string} bssid + * The BSSID if the network. + * + * @property {string} mode + * The operation mode of the network (`Master`, `Ad-Hoc`, `Mesh Point`). + * + * @property {number} channel + * The wireless channel of the network. + * + * @property {number} signal + * The received signal strength of the network in dBm. + * + * @property {number} quality + * The numeric quality level of the signal, can be used in conjunction + * with `quality_max` to calculate a quality percentage. + * + * @property {number} quality_max + * The maximum possible quality level of the signal, can be used in + * conjunction with `quality` to calculate a quality percentage. + * + * @property {LuCI.Network.WifiEncryption} encryption + * The encryption used by the wireless network. + */ + + /** + * Trigger a wireless scan on this radio device and obtain a list of + * nearby networks. + * + * @returns {Promise<Array<LuCI.Network.WifiScanResult>>} + * Returns a promise resolving to an array of scan result objects + * describing the networks found in the vincinity. + */ + getScanList: function() { + return callIwinfoScan(this.sid); + }, + + /** + * Check whether the wireless radio is marked as up in the `ubus` + * runtime state. + * + * @returns {boolean} + * Returns `true` when the radio device is up, else `false`. + */ + isUp: function() { + if (L.isObject(_state.radios[this.sid])) + return (_state.radios[this.sid].up == true); + + return false; + }, + + /** + * Get the wifi network of the given name belonging to this radio device + * + * @param {string} network + * The name of the wireless network to lookup. This may be either an uci + * configuration section ID, a network ID in the form `radio#.network#` + * or a Linux network device name like `wlan0` which is resolved to the + * corresponding configuration section through `ubus` runtime information. + * + * @returns {Promise<LuCI.Network.WifiNetwork>} + * Returns a promise resolving to a `Network.WifiNetwork` instance + * representing the wireless network and rejecting with `null` if + * the given network could not be found or is not associated with + * this radio device. + */ + getWifiNetwork: function(network) { + return L.network.getWifiNetwork(network).then(L.bind(function(networkInstance) { + var uciWifiIface = (networkInstance.sid ? uci.get('wireless', networkInstance.sid) : null); + + if (uciWifiIface == null || uciWifiIface['.type'] != 'wifi-iface' || uciWifiIface.device != this.sid) + return Promise.reject(); + + return networkInstance; + }, this)); + }, + + /** + * Get all wireless networks associated with this wireless radio device. + * + * @returns {Promise<Array<LuCI.Network.WifiNetwork>>} + * Returns a promise resolving to an array of `Network.WifiNetwork` + * instances respresenting the wireless networks associated with this + * radio device. + */ + getWifiNetworks: function() { + var uciWifiIfaces = uci.sections('wireless', 'wifi-iface'), + tasks = []; + + for (var i = 0; i < uciWifiIfaces.length; i++) + if (uciWifiIfaces[i].device == this.sid) + tasks.push(L.network.getWifiNetwork(uciWifiIfaces[i]['.name'])); + + return Promise.all(tasks); + }, + + /** + * Adds a new wireless network associated with this radio device to the + * configuration and sets its options to the provided values. + * + * @param {Object<string, string|string[]>} [options] + * The options to set for the newly added wireless network. + * + * @returns {Promise<null|LuCI.Network.WifiNetwork>} + * Returns a promise resolving to a `WifiNetwork` instance describing + * the newly added wireless network or `null` if the given options + * were invalid. + */ + addWifiNetwork: function(options) { + if (!L.isObject(options)) + options = {}; + + options.device = this.sid; + + return L.network.addWifiNetwork(options); + }, + + /** + * Deletes the wireless network with the given name associated with this + * radio device. + * + * @param {string} network + * The name of the wireless network to lookup. This may be either an uci + * configuration section ID, a network ID in the form `radio#.network#` + * or a Linux network device name like `wlan0` which is resolved to the + * corresponding configuration section through `ubus` runtime information. + * + * @returns {Promise<boolean>} + * Returns a promise resolving to `true` when the wireless network was + * successfully deleted from the configuration or `false` when the given + * network could not be found or if the found network was not associated + * with this wireless radio device. + */ + deleteWifiNetwork: function(network) { + var sid = null; + + if (network instanceof WifiNetwork) { + sid = network.sid; + } + else { + var uciWifiIface = uci.get('wireless', network); + + if (uciWifiIface == null || uciWifiIface['.type'] != 'wifi-iface') + sid = getWifiSidByIfname(network); + } + + if (sid == null || uci.get('wireless', sid, 'device') != this.sid) + return Promise.resolve(false); + + uci.delete('wireless', network); + + return Promise.resolve(true); + } +}); + +/** + * @class + * @memberof LuCI.Network + * @hideconstructor + * @classdesc + * + * A `Network.WifiNetwork` instance represents a wireless network (vif) + * configured on top of a radio device and provides functions for querying + * the runtime state of the network. Most radio devices support multiple + * such networks in parallel. + */ +WifiNetwork = L.Class.extend(/** @lends LuCI.Network.WifiNetwork.prototype */ { + __init__: function(sid, radioname, radiostate, netid, netstate) { + this.sid = sid; + this.netid = netid; + this._ubusdata = { + radio: radioname, + dev: radiostate, + net: netstate + }; + }, + + ubus: function(/* ... */) { + var v = this._ubusdata; + + for (var i = 0; i < arguments.length; i++) + if (L.isObject(v)) + v = v[arguments[i]]; + else + return null; + + return v; + }, + + /** + * Read the given UCI option value of this wireless network. + * + * @param {string} opt + * The UCI option name to read. + * + * @returns {null|string|string[]} + * Returns the UCI option value or `null` if the requested option is + * not found. + */ + get: function(opt) { + return uci.get('wireless', this.sid, opt); + }, + + /** + * Set the given UCI option of this network to the given value. + * + * @param {string} opt + * The name of the UCI option to set. + * + * @param {null|string|string[]} val + * The value to set or `null` to remove the given option from the + * configuration. + */ + set: function(opt, value) { + return uci.set('wireless', this.sid, opt, value); + }, + + /** + * Checks whether this wireless network is disabled. + * + * @returns {boolean} + * Returns `true` when the wireless radio is marked as disabled in `ubus` + * runtime state or when the `disabled` option is set in the corresponding + * UCI configuration. + */ + isDisabled: function() { + return this.ubus('dev', 'disabled') || this.get('disabled') == '1'; + }, + + /** + * Get the configured operation mode of the wireless network. + * + * @returns {string} + * Returns the configured operation mode. Possible values are: + * - `ap` - Master (Access Point) mode + * - `sta` - Station (client) mode + * - `adhoc` - Ad-Hoc (IBSS) mode + * - `mesh` - Mesh (IEEE 802.11s) mode + * - `monitor` - Monitor mode + */ + getMode: function() { + return this.ubus('net', 'config', 'mode') || this.get('mode') || 'ap'; + }, + + /** + * Get the configured SSID of the wireless network. + * + * @returns {null|string} + * Returns the configured SSID value or `null` when this network is + * in mesh mode. + */ + getSSID: function() { + if (this.getMode() == 'mesh') + return null; + + return this.ubus('net', 'config', 'ssid') || this.get('ssid'); + }, + + /** + * Get the configured Mesh ID of the wireless network. + * + * @returns {null|string} + * Returns the configured mesh ID value or `null` when this network + * is not in mesh mode. + */ + getMeshID: function() { + if (this.getMode() != 'mesh') + return null; + + return this.ubus('net', 'config', 'mesh_id') || this.get('mesh_id'); + }, + + /** + * Get the configured BSSID of the wireless network. + * + * @returns {null|string} + * Returns the BSSID value or `null` if none has been specified. + */ + getBSSID: function() { + return this.ubus('net', 'config', 'bssid') || this.get('bssid'); + }, + + /** + * Get the names of the logical interfaces this wireless network is + * attached to. + * + * @returns {string[]} + * Returns an array of logical interface names. + */ + getNetworkNames: function() { + return L.toArray(this.ubus('net', 'config', 'network') || this.get('network')); + }, + + /** + * Get the internal network ID of this wireless network. + * + * The network ID is a LuCI specific identifer in the form + * `radio#.network#` to identify wireless networks by their corresponding + * radio and network index numbers. + * + * @returns {string} + * Returns the LuCI specific network ID. + */ + getID: function() { + return this.netid; + }, + + /** + * Get the configuration ID of this wireless network. + * + * @returns {string} + * Returns the corresponding UCI section ID of the network. + */ + getName: function() { + return this.sid; + }, + + /** + * Get the Linux network device name. + * + * @returns {null|string} + * Returns the current Linux network device name as resolved from + * `ubus` runtime information or `null` if this network has no + * associated network device, e.g. when not configured or up. + */ + getIfname: function() { + var ifname = this.ubus('net', 'ifname') || this.ubus('net', 'iwinfo', 'ifname'); + + if (ifname == null || ifname.match(/^(wifi|radio)\d/)) + ifname = this.netid; + + return ifname; + }, + + /** + * Get the name of the corresponding wifi radio device. + * + * @returns {null|string} + * Returns the name of the radio device this network is configured on + * or `null` if it cannot be determined. + */ + getWifiDeviceName: function() { + return this.ubus('radio') || this.get('device'); + }, + + /** + * Get the corresponding wifi radio device. + * + * @returns {null|LuCI.Network.WifiDevice} + * Returns a `Network.WifiDevice` instance representing the corresponding + * wifi radio device or `null` if the related radio device could not be + * found. + */ + getWifiDevice: function() { + var radioname = this.getWifiDeviceName(); + + if (radioname == null) + return Promise.reject(); + + return L.network.getWifiDevice(radioname); + }, + + /** + * Check whether the radio network is up. + * + * This function actually queries the up state of the related radio + * device and assumes this network to be up as well when the parent + * radio is up. This is due to the fact that OpenWrt does not control + * virtual interfaces individually but within one common hostapd + * instance. + * + * @returns {boolean} + * Returns `true` when the network is up, else `false`. + */ + isUp: function() { + var device = this.getDevice(); + + if (device == null) + return false; + + return device.isUp(); + }, + + /** + * Query the current operation mode from runtime information. + * + * @returns {string} + * Returns the human readable mode name as reported by `ubus` runtime + * state. Possible returned values are: + * - `Master` + * - `Ad-Hoc` + * - `Client` + * - `Monitor` + * - `Master (VLAN)` + * - `WDS` + * - `Mesh Point` + * - `P2P Client` + * - `P2P Go` + * - `Unknown` + */ + getActiveMode: function() { + var mode = this.ubus('net', 'iwinfo', 'mode') || this.ubus('net', 'config', 'mode') || this.get('mode') || 'ap'; + + switch (mode) { + case 'ap': return 'Master'; + case 'sta': return 'Client'; + case 'adhoc': return 'Ad-Hoc'; + case 'mesh': return 'Mesh'; + case 'monitor': return 'Monitor'; + default: return mode; + } + }, + + /** + * Query the current operation mode from runtime information as + * translated string. + * + * @returns {string} + * Returns the translated, human readable mode name as reported by + *`ubus` runtime state. + */ + getActiveModeI18n: function() { + var mode = this.getActiveMode(); + + switch (mode) { + case 'Master': return _('Master'); + case 'Client': return _('Client'); + case 'Ad-Hoc': return _('Ad-Hoc'); + case 'Mash': return _('Mesh'); + case 'Monitor': return _('Monitor'); + default: return mode; + } + }, + + /** + * Query the current SSID from runtime information. + * + * @returns {string} + * Returns the current SSID or Mesh ID as reported by `ubus` runtime + * information. + */ + getActiveSSID: function() { + return this.ubus('net', 'iwinfo', 'ssid') || this.ubus('net', 'config', 'ssid') || this.get('ssid'); + }, + + /** + * Query the current BSSID from runtime information. + * + * @returns {string} + * Returns the current BSSID or Mesh ID as reported by `ubus` runtime + * information. + */ + getActiveBSSID: function() { + return this.ubus('net', 'iwinfo', 'bssid') || this.ubus('net', 'config', 'bssid') || this.get('bssid'); + }, + + /** + * Query the current encryption settings from runtime information. + * + * @returns {string} + * Returns a string describing the current encryption or `-` if the the + * encryption state could not be found in `ubus` runtime information. + */ + getActiveEncryption: function() { + return formatWifiEncryption(this.ubus('net', 'iwinfo', 'encryption')) || '-'; + }, + + /** + * A wireless peer entry describes the properties of a remote wireless + * peer associated with a local network. + * + * @typedef {Object<string, boolean|number|string|LuCI.Network.WifiRateEntry>} WifiPeerEntry + * @memberof LuCI.Network + * + * @property {string} mac + * The MAC address (BSSID). + * + * @property {number} signal + * The received signal strength. + * + * @property {number} [signal_avg] + * The average signal strength if supported by the driver. + * + * @property {number} [noise] + * The current noise floor of the radio. May be `0` or absent if not + * supported by the driver. + * + * @property {number} inactive + * The amount of milliseconds the peer has been inactive, e.g. due + * to powersave. + * + * @property {number} connected_time + * The amount of milliseconds the peer is associated to this network. + * + * @property {number} [thr] + * The estimated throughput of the peer, May be `0` or absent if not + * supported by the driver. + * + * @property {boolean} authorized + * Specifies whether the peer is authorized to associate to this network. + * + * @property {boolean} authenticated + * Specifies whether the peer completed authentication to this network. + * + * @property {string} preamble + * The preamble mode used by the peer. May be `long` or `short`. + * + * @property {boolean} wme + * Specifies whether the peer supports WME/WMM capabilities. + * + * @property {boolean} mfp + * Specifies whether management frame protection is active. + * + * @property {boolean} tdls + * Specifies whether TDLS is active. + * + * @property {number} [mesh llid] + * The mesh LLID, may be `0` or absent if not applicable or supported + * by the driver. + * + * @property {number} [mesh plid] + * The mesh PLID, may be `0` or absent if not applicable or supported + * by the driver. + * + * @property {string} [mesh plink] + * The mesh peer link state description, may be an empty string (`''`) + * or absent if not applicable or supported by the driver. + * + * The following states are known: + * - `LISTEN` + * - `OPN_SNT` + * - `OPN_RCVD` + * - `CNF_RCVD` + * - `ESTAB` + * - `HOLDING` + * - `BLOCKED` + * - `UNKNOWN` + * + * @property {number} [mesh local PS] + * The local powersafe mode for the peer link, may be an empty + * string (`''`) or absent if not applicable or supported by + * the driver. + * + * The following modes are known: + * - `ACTIVE` (no power save) + * - `LIGHT SLEEP` + * - `DEEP SLEEP` + * - `UNKNOWN` + * + * @property {number} [mesh peer PS] + * The remote powersafe mode for the peer link, may be an empty + * string (`''`) or absent if not applicable or supported by + * the driver. + * + * The following modes are known: + * - `ACTIVE` (no power save) + * - `LIGHT SLEEP` + * - `DEEP SLEEP` + * - `UNKNOWN` + * + * @property {number} [mesh non-peer PS] + * The powersafe mode for all non-peer neigbours, may be an empty + * string (`''`) or absent if not applicable or supported by the driver. + * + * The following modes are known: + * - `ACTIVE` (no power save) + * - `LIGHT SLEEP` + * - `DEEP SLEEP` + * - `UNKNOWN` + * + * @property {LuCI.Network.WifiRateEntry} rx + * Describes the receiving wireless rate from the peer. + * + * @property {LuCI.Network.WifiRateEntry} tx + * Describes the transmitting wireless rate to the peer. + */ + + /** + * A wireless rate entry describes the properties of a wireless + * transmission rate to or from a peer. + * + * @typedef {Object<string, boolean|number>} WifiRateEntry + * @memberof LuCI.Network + * + * @property {number} [drop_misc] + * The amount of received misc. packages that have been dropped, e.g. + * due to corruption or missing authentication. Only applicable to + * receiving rates. + * + * @property {number} packets + * The amount of packets that have been received or sent. + * + * @property {number} bytes + * The amount of bytes that have been received or sent. + * + * @property {number} [failed] + * The amount of failed tranmission attempts. Only applicable to + * transmit rates. + * + * @property {number} [retries] + * The amount of retried transmissions. Only applicable to transmit + * rates. + * + * @property {boolean} is_ht + * Specifies whether this rate is an HT (IEEE 802.11n) rate. + * + * @property {boolean} is_vht + * Specifies whether this rate is an VHT (IEEE 802.11ac) rate. + * + * @property {number} mhz + * The channel width in MHz used for the transmission. + * + * @property {number} rate + * The bitrate in bit/s of the transmission. + * + * @property {number} [mcs] + * The MCS index of the used transmission rate. Only applicable to + * HT or VHT rates. + * + * @property {number} [40mhz] + * Specifies whether the tranmission rate used 40MHz wide channel. + * Only applicable to HT or VHT rates. + * + * Note: this option exists for backwards compatibility only and its + * use is discouraged. The `mhz` field should be used instead to + * determine the channel width. + * + * @property {boolean} [short_gi] + * Specifies whether a short guard interval is used for the transmission. + * Only applicable to HT or VHT rates. + * + * @property {number} [nss] + * Specifies the number of spatial streams used by the transmission. + * Only applicable to VHT rates. + */ + + /** + * Fetch the list of associated peers. + * + * @returns {Promise<Array<LuCI.Network.WifiPeerEntry>>} + * Returns a promise resolving to an array of wireless peers associated + * with this network. + */ + getAssocList: function() { + return callIwinfoAssoclist(this.getIfname()); + }, + + /** + * Query the current operating frequency of the wireless network. + * + * @returns {null|string} + * Returns the current operating frequency of the network from `ubus` + * runtime information in GHz or `null` if the information is not + * available. + */ + getFrequency: function() { + var freq = this.ubus('net', 'iwinfo', 'frequency'); + + if (freq != null && freq > 0) + return '%.03f'.format(freq / 1000); + + return null; + }, + + /** + * Query the current average bitrate of all peers associated to this + * wireless network. + * + * @returns {null|number} + * Returns the average bit rate among all peers associated to the network + * as reported by `ubus` runtime information or `null` if the information + * is not available. + */ + getBitRate: function() { + var rate = this.ubus('net', 'iwinfo', 'bitrate'); + + if (rate != null && rate > 0) + return (rate / 1000); + + return null; + }, + + /** + * Query the current wireless channel. + * + * @returns {null|number} + * Returns the wireless channel as reported by `ubus` runtime information + * or `null` if it cannot be determined. + */ + getChannel: function() { + return this.ubus('net', 'iwinfo', 'channel') || this.ubus('dev', 'config', 'channel') || this.get('channel'); + }, + + /** + * Query the current wireless signal. + * + * @returns {null|number} + * Returns the wireless signal in dBm as reported by `ubus` runtime + * information or `null` if it cannot be determined. + */ + getSignal: function() { + return this.ubus('net', 'iwinfo', 'signal') || 0; + }, + + /** + * Query the current radio noise floor. + * + * @returns {number} + * Returns the radio noise floor in dBm as reported by `ubus` runtime + * information or `0` if it cannot be determined. + */ + getNoise: function() { + return this.ubus('net', 'iwinfo', 'noise') || 0; + }, + + /** + * Query the current country code. + * + * @returns {string} + * Returns the wireless country code as reported by `ubus` runtime + * information or `00` if it cannot be determined. + */ + getCountryCode: function() { + return this.ubus('net', 'iwinfo', 'country') || this.ubus('dev', 'config', 'country') || '00'; + }, + + /** + * Query the current radio TX power. + * + * @returns {null|number} + * Returns the wireless network transmit power in dBm as reported by + * `ubus` runtime information or `null` if it cannot be determined. + */ + getTXPower: function() { + return this.ubus('net', 'iwinfo', 'txpower'); + }, + + /** + * Query the radio TX power offset. + * + * Some wireless radios have a fixed power offset, e.g. due to the + * use of external amplifiers. + * + * @returns {number} + * Returns the wireless network transmit power offset in dBm as reported + * by `ubus` runtime information or `0` if there is no offset, or if it + * cannot be determined. + */ + getTXPowerOffset: function() { + return this.ubus('net', 'iwinfo', 'txpower_offset') || 0; + }, + + /** + * Calculate the current signal. + * + * @deprecated + * @returns {number} + * Returns the calculated signal level, which is the difference between + * noise and signal (SNR), divided by 5. + */ + getSignalLevel: function(signal, noise) { + if (this.getActiveBSSID() == '00:00:00:00:00:00') + return -1; + + signal = signal || this.getSignal(); + noise = noise || this.getNoise(); + + if (signal < 0 && noise < 0) { + var snr = -1 * (noise - signal); + return Math.floor(snr / 5); + } + + return 0; + }, + + /** + * Calculate the current signal quality percentage. + * + * @returns {number} + * Returns the calculated signal quality in percent. The value is + * calculated from the `quality` and `quality_max` indicators reported + * by `ubus` runtime state. + */ + getSignalPercent: function() { + var qc = this.ubus('net', 'iwinfo', 'quality') || 0, + qm = this.ubus('net', 'iwinfo', 'quality_max') || 0; + + if (qc > 0 && qm > 0) + return Math.floor((100 / qm) * qc); + + return 0; + }, + + /** + * Get a short description string for this wireless network. + * + * @returns {string} + * Returns a string describing this network, consisting of the + * active operation mode, followed by either the SSID, BSSID or + * internal network ID, depending on which information is available. + */ + getShortName: function() { + return '%s "%s"'.format( + this.getActiveModeI18n(), + this.getActiveSSID() || this.getActiveBSSID() || this.getID()); + }, + + /** + * Get a description string for this wireless network. + * + * @returns {string} + * Returns a string describing this network, consisting of the + * term `Wireless Network`, followed by the active operation mode, + * the SSID, BSSID or internal network ID and the Linux network device + * name, depending on which information is available. + */ + getI18n: function() { + return '%s: %s "%s" (%s)'.format( + _('Wireless Network'), + this.getActiveModeI18n(), + this.getActiveSSID() || this.getActiveBSSID() || this.getID(), + this.getIfname()); + }, + + /** + * Get the primary logical interface this wireless network is attached to. + * + * @returns {null|LuCI.Network.Protocol} + * Returns a `Network.Protocol` instance representing the logical + * interface or `null` if this network is not attached to any logical + * interface. + */ + getNetwork: function() { + return this.getNetworks()[0]; + }, + + /** + * Get the logical interfaces this wireless network is attached to. + * + * @returns {Array<LuCI.Network.Protocol>} + * Returns an array of `Network.Protocol` instances representing the + * logical interfaces this wireless network is attached to. + */ + getNetworks: function() { + var networkNames = this.getNetworkNames(), + networks = []; + + for (var i = 0; i < networkNames.length; i++) { + var uciInterface = uci.get('network', networkNames[i]); + + if (uciInterface == null || uciInterface['.type'] != 'interface') + continue; + + networks.push(L.network.instantiateNetwork(networkNames[i])); + } + + networks.sort(networkSort); + + return networks; + }, + + /** + * Get the associated Linux network device. + * + * @returns {LuCI.Network.Device} + * Returns a `Network.Device` instance representing the Linux network + * device associted with this wireless network. + */ + getDevice: function() { + return L.network.instantiateDevice(this.getIfname()); + } +}); + +return Network; +</code></pre> + </article> + </section> + + + + +</div> + +<nav> + <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="LuCI.html">LuCI</a></li><li><a href="LuCI.Class.html">Class</a></li><li><a href="LuCI.dom.html">dom</a></li><li><a href="LuCI.fs.html">fs</a></li><li><a href="LuCI.Headers.html">Headers</a></li><li><a href="LuCI.Network.html">Network</a></li><li><a href="LuCI.Network.Device.html">Device</a></li><li><a href="LuCI.Network.Hosts.html">Hosts</a></li><li><a href="LuCI.Network.Protocol.html">Protocol</a></li><li><a href="LuCI.Network.WifiDevice.html">WifiDevice</a></li><li><a href="LuCI.Network.WifiNetwork.html">WifiNetwork</a></li><li><a href="LuCI.Poll.html">Poll</a></li><li><a href="LuCI.Request.html">Request</a></li><li><a href="LuCI.Request.poll.html">poll</a></li><li><a href="LuCI.Response.html">Response</a></li><li><a href="LuCI.rpc.html">rpc</a></li><li><a href="LuCI.uci.html">uci</a></li><li><a href="LuCI.view.html">view</a></li><li><a href="LuCI.XHR.html">XHR</a></li></ul> +</nav> + +<br class="clear"> + +<footer> + Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a> on Tue Nov 05 2019 09:33:05 GMT+0100 (Central European Standard Time) +</footer> + +<script> prettyPrint(); </script> +<script src="scripts/linenumber.js"> </script> +</body> +</html> diff --git a/documentation/jsapi/rpc.js.html b/documentation/jsapi/rpc.js.html new file mode 100644 index 000000000..ca068f31b --- /dev/null +++ b/documentation/jsapi/rpc.js.html @@ -0,0 +1,528 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="utf-8"> + <title>JSDoc: Source: rpc.js</title> + + <script src="scripts/prettify/prettify.js"> </script> + <script src="scripts/prettify/lang-css.js"> </script> + <!--[if lt IE 9]> + <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script> + <![endif]--> + <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css"> + <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css"> +</head> + +<body> + +<div id="main"> + + <h1 class="page-title">Source: rpc.js</h1> + + + + + + + <section> + <article> + <pre class="prettyprint source linenums"><code>'use strict'; + +var rpcRequestID = 1, + rpcSessionID = L.env.sessionid || '00000000000000000000000000000000', + rpcBaseURL = L.url('admin/ubus'), + rpcInterceptorFns = []; + +/** + * @class rpc + * @memberof LuCI + * @hideconstructor + * @classdesc + * + * The `LuCI.rpc` class provides high level ubus JSON-RPC abstractions + * and means for listing and invoking remove RPC methods. + */ +return L.Class.extend(/** @lends LuCI.rpc.prototype */ { + /* privates */ + call: function(req, cb, nobatch) { + var q = ''; + + if (Array.isArray(req)) { + if (req.length == 0) + return Promise.resolve([]); + + for (var i = 0; i < req.length; i++) + if (req[i].params) + q += '%s%s.%s'.format( + q ? ';' : '/', + req[i].params[1], + req[i].params[2] + ); + } + else if (req.params) { + q += '/%s.%s'.format(req.params[1], req.params[2]); + } + + return L.Request.post(rpcBaseURL + q, req, { + timeout: (L.env.rpctimeout || 20) * 1000, + nobatch: nobatch, + credentials: true + }).then(cb, cb); + }, + + parseCallReply: function(req, res) { + var msg = null; + + if (res instanceof Error) + return req.reject(res); + + try { + if (!res.ok) + L.raise('RPCError', 'RPC call to %s/%s failed with HTTP error %d: %s', + req.object, req.method, res.status, res.statusText || '?'); + + msg = res.json(); + } + catch (e) { + return req.reject(e); + } + + /* + * The interceptor args are intentionally swapped. + * Response is passed as first arg to align with Request class interceptors + */ + Promise.all(rpcInterceptorFns.map(function(fn) { return fn(msg, req) })) + .then(this.handleCallReply.bind(this, req, msg)) + .catch(req.reject); + }, + + handleCallReply: function(req, msg) { + var type = Object.prototype.toString, + ret = null; + + try { + /* verify message frame */ + if (!L.isObject(msg) || msg.jsonrpc != '2.0') + L.raise('RPCError', 'RPC call to %s/%s returned invalid message frame', + req.object, req.method); + + /* check error condition */ + if (L.isObject(msg.error) && msg.error.code && msg.error.message) + L.raise('RPCError', 'RPC call to %s/%s failed with error %d: %s', + req.object, req.method, msg.error.code, msg.error.message || '?'); + } + catch (e) { + return req.reject(e); + } + + if (!req.object && !req.method) { + ret = msg.result; + } + else if (Array.isArray(msg.result)) { + ret = (msg.result.length > 1) ? msg.result[1] : msg.result[0]; + } + + if (req.expect) { + for (var key in req.expect) { + if (ret != null && key != '') + ret = ret[key]; + + if (ret == null || type.call(ret) != type.call(req.expect[key])) + ret = req.expect[key]; + + break; + } + } + + /* apply filter */ + if (typeof(req.filter) == 'function') { + req.priv[0] = ret; + req.priv[1] = req.params; + ret = req.filter.apply(this, req.priv); + } + + req.resolve(ret); + }, + + /** + * Lists available remote ubus objects or the method signatures of + * specific objects. + * + * This function has two signatures and is sensitive to the number of + * arguments passed to it: + * - `list()` - + * Returns an array containing the names of all remote `ubus` objects + * - `list("objname", ...)` + * Returns method signatures for each given `ubus` object name. + * + * @param {...string} [objectNames] + * If any object names are given, this function will return the method + * signatures of each given object. + * + * @returns {Promise<Array<string>|Object<string, Object<string, Object<string, string>>>>} + * When invoked without arguments, this function will return a promise + * resolving to an array of `ubus` object names. When invoked with one or + * more arguments, a promise resolving to an object describing the method + * signatures of each requested `ubus` object name will be returned. + */ + list: function() { + var msg = { + jsonrpc: '2.0', + id: rpcRequestID++, + method: 'list', + params: arguments.length ? this.varargs(arguments) : undefined + }; + + return new Promise(L.bind(function(resolveFn, rejectFn) { + /* store request info */ + var req = { + resolve: resolveFn, + reject: rejectFn + }; + + /* call rpc */ + this.call(msg, this.parseCallReply.bind(this, req)); + }, this)); + }, + + /** + * @typedef {Object} DeclareOptions + * @memberof LuCI.rpc + * + * @property {string} object + * The name of the remote `ubus` object to invoke. + * + * @property {string} method + * The name of the remote `ubus` method to invoke. + * + * @property {string[]} [params] + * Lists the named parameters expected by the remote `ubus` RPC method. + * The arguments passed to the resulting generated method call function + * will be mapped to named parameters in the order they appear in this + * array. + * + * Extraneous parameters passed to the generated function will not be + * sent to the remote procedure but are passed to the + * {@link LuCI.rpc~filterFn filter function} if one is specified. + * + * Examples: + * - `params: [ "foo", "bar" ]` - + * When the resulting call function is invoked with `fn(true, false)`, + * the corresponding args object sent to the remote procedure will be + * `{ foo: true, bar: false }`. + * - `params: [ "test" ], filter: function(reply, args, extra) { ... }` - + * When the resultung generated function is invoked with + * `fn("foo", "bar", "baz")` then `{ "test": "foo" }` will be sent as + * argument to the remote procedure and the filter function will be + * invoked with `filterFn(reply, [ "foo" ], "bar", "baz")` + * + * @property {Object<string,*>} [expect] + * Describes the expected return data structure. The given object is + * supposed to contain a single key selecting the value to use from + * the returned `ubus` reply object. The value of the sole key within + * the `expect` object is used to infer the expected type of the received + * `ubus` reply data. + * + * If the received data does not contain `expect`'s key, or if the + * type of the data differs from the type of the value in the expect + * object, the expect object's value is returned as default instead. + * + * The key in the `expect` object may be an empty string (`''`) in which + * case the entire reply object is selected instead of one of its subkeys. + * + * If the `expect` option is omitted, the received reply will be returned + * as-is, regardless of its format or type. + * + * Examples: + * - `expect: { '': { error: 'Invalid response' } }` - + * This requires the entire `ubus` reply to be a plain JavaScript + * object. If the reply isn't an object but e.g. an array or a numeric + * error code instead, it will get replaced with + * `{ error: 'Invalid response' }` instead. + * - `expect: { results: [] }` - + * This requires the received `ubus` reply to be an object containing + * a key `results` with an array as value. If the received reply does + * not contain such a key, or if `reply.results` points to a non-array + * value, the empty array (`[]`) will be used instead. + * - `expect: { success: false }` - + * This requires the received `ubus` reply to be an object containing + * a key `success` with a boolean value. If the reply does not contain + * `success` or if `reply.success` is not a boolean value, `false` will + * be returned as default instead. + * + * @property {LuCI.rpc~filterFn} [filter] + * Specfies an optional filter function which is invoked to transform the + * received reply data before it is returned to the caller. + * + */ + + /** + * The filter function is invoked to transform a received `ubus` RPC call + * reply before returning it to the caller. + * + * @callback LuCI.rpc~filterFn + * + * @param {*} data + * The received `ubus` reply data or a subset of it as described in the + * `expect` option of the RPC call declaration. In case of remote call + * errors, `data` is numeric `ubus` error code instead. + * + * @param {Array<*>} args + * The arguments the RPC method has been invoked with. + * + * @param {...*} extraArgs + * All extraneous arguments passed to the RPC method exceeding the number + * of arguments describes in the RPC call declaration. + * + * @return {*} + * The return value of the filter function will be returned to the caller + * of the RPC method as-is. + */ + + /** + * The generated invocation function is returned by + * {@link LuCI.rpc#declare rpc.declare()} and encapsulates a single + * RPC method call. + * + * Calling this function will execute a remote `ubus` HTTP call request + * using the arguments passed to it as arguments and return a promise + * resolving to the received reply values. + * + * @callback LuCI.rpc~invokeFn + * + * @param {...*} params + * The parameters to pass to the remote procedure call. The given + * positional arguments will be named to named RPC parameters according + * to the names specified in the `params` array of the method declaration. + * + * Any additional parameters exceeding the amount of arguments in the + * `params` declaration are passed as private extra arguments to the + * declared filter function. + * + * @return {Promise<*>} + * Returns a promise resolving to the result data of the remote `ubus` + * RPC method invocation, optionally substituted and filtered according + * to the `expect` and `filter` declarations. + */ + + /** + * Describes a remote RPC call procedure and returns a function + * implementing it. + * + * @param {LuCI.rpc.DeclareOptions} options + * If any object names are given, this function will return the method + * signatures of each given object. + * + * @returns {LuCI.rpc~invokeFn} + * Returns a new function implementing the method call described in + * `options`. + */ + declare: function(options) { + return Function.prototype.bind.call(function(rpc, options) { + var args = this.varargs(arguments, 2); + return new Promise(function(resolveFn, rejectFn) { + /* build parameter object */ + var p_off = 0; + var params = { }; + if (Array.isArray(options.params)) + for (p_off = 0; p_off < options.params.length; p_off++) + params[options.params[p_off]] = args[p_off]; + + /* all remaining arguments are private args */ + var priv = [ undefined, undefined ]; + for (; p_off < args.length; p_off++) + priv.push(args[p_off]); + + /* store request info */ + var req = { + expect: options.expect, + filter: options.filter, + resolve: resolveFn, + reject: rejectFn, + params: params, + priv: priv, + object: options.object, + method: options.method + }; + + /* build message object */ + var msg = { + jsonrpc: '2.0', + id: rpcRequestID++, + method: 'call', + params: [ + rpcSessionID, + options.object, + options.method, + params + ] + }; + + /* call rpc */ + rpc.call(msg, rpc.parseCallReply.bind(rpc, req), options.nobatch); + }); + }, this, this, options); + }, + + /** + * Returns the current RPC session id. + * + * @returns {string} + * Returns the 32 byte session ID string used for authenticating remote + * requests. + */ + getSessionID: function() { + return rpcSessionID; + }, + + /** + * Set the RPC session id to use. + * + * @param {string} sid + * Sets the 32 byte session ID string used for authenticating remote + * requests. + */ + setSessionID: function(sid) { + rpcSessionID = sid; + }, + + /** + * Returns the current RPC base URL. + * + * @returns {string} + * Returns the RPC URL endpoint to issue requests against. + */ + getBaseURL: function() { + return rpcBaseURL; + }, + + /** + * Set the RPC base URL to use. + * + * @param {string} sid + * Sets the RPC URL endpoint to issue requests against. + */ + setBaseURL: function(url) { + rpcBaseURL = url; + }, + + /** + * Translates a numeric `ubus` error code into a human readable + * description. + * + * @param {number} statusCode + * The numeric status code. + * + * @returns {string} + * Returns the textual description of the code. + */ + getStatusText: function(statusCode) { + switch (statusCode) { + case 0: return _('Command OK'); + case 1: return _('Invalid command'); + case 2: return _('Invalid argument'); + case 3: return _('Method not found'); + case 4: return _('Resource not found'); + case 5: return _('No data received'); + case 6: return _('Permission denied'); + case 7: return _('Request timeout'); + case 8: return _('Not supported'); + case 9: return _('Unspecified error'); + case 10: return _('Connection lost'); + default: return _('Unknown error code'); + } + }, + + /** + * Registered interceptor functions are invoked before the standard reply + * parsing and handling logic. + * + * By returning rejected promises, interceptor functions can cause the + * invocation function to fail, regardless of the received reply. + * + * Interceptors may also modify their message argument in-place to + * rewrite received replies before they're processed by the standard + * response handling code. + * + * A common use case for such functions is to detect failing RPC replies + * due to expired authentication in order to trigger a new login. + * + * @callback LuCI.rpc~interceptorFn + * + * @param {*} msg + * The unprocessed, JSON decoded remote RPC method call reply. + * + * Since interceptors run before the standard parsing logic, the reply + * data is not verified for correctness or filtered according to + * `expect` and `filter` specifications in the declarations. + * + * @param {Object} req + * The related request object which is an extended variant of the + * declaration object, allowing access to internals of the invocation + * function such as `filter`, `expect` or `params` values. + * + * @return {Promise<*>|*} + * Interceptor functions may return a promise to defer response + * processing until some delayed work completed. Any values the returned + * promise resolves to are ignored. + * + * When the returned promise rejects with an error, the invocation + * function will fail too, forwarding the error to the caller. + */ + + /** + * Registers a new interceptor function. + * + * @param {LuCI.rpc~interceptorFn} interceptorFn + * The inteceptor function to register. + * + * @returns {LuCI.rpc~interceptorFn} + * Returns the given function value. + */ + addInterceptor: function(interceptorFn) { + if (typeof(interceptorFn) == 'function') + rpcInterceptorFns.push(interceptorFn); + return interceptorFn; + }, + + /** + * Removes a registered interceptor function. + * + * @param {LuCI.rpc~interceptorFn} interceptorFn + * The inteceptor function to remove. + * + * @returns {boolean} + * Returns `true` if the given function has been removed or `false` + * if it has not been found. + */ + removeInterceptor: function(interceptorFn) { + var oldlen = rpcInterceptorFns.length, i = oldlen; + while (i--) + if (rpcInterceptorFns[i] === interceptorFn) + rpcInterceptorFns.splice(i, 1); + return (rpcInterceptorFns.length < oldlen); + } +}); +</code></pre> + </article> + </section> + + + + +</div> + +<nav> + <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="LuCI.html">LuCI</a></li><li><a href="LuCI.Class.html">Class</a></li><li><a href="LuCI.dom.html">dom</a></li><li><a href="LuCI.fs.html">fs</a></li><li><a href="LuCI.Headers.html">Headers</a></li><li><a href="LuCI.Network.html">Network</a></li><li><a href="LuCI.Network.Device.html">Device</a></li><li><a href="LuCI.Network.Hosts.html">Hosts</a></li><li><a href="LuCI.Network.Protocol.html">Protocol</a></li><li><a href="LuCI.Network.WifiDevice.html">WifiDevice</a></li><li><a href="LuCI.Network.WifiNetwork.html">WifiNetwork</a></li><li><a href="LuCI.Poll.html">Poll</a></li><li><a href="LuCI.Request.html">Request</a></li><li><a href="LuCI.Request.poll.html">poll</a></li><li><a href="LuCI.Response.html">Response</a></li><li><a href="LuCI.rpc.html">rpc</a></li><li><a href="LuCI.uci.html">uci</a></li><li><a href="LuCI.view.html">view</a></li><li><a href="LuCI.XHR.html">XHR</a></li></ul> +</nav> + +<br class="clear"> + +<footer> + Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a> on Tue Nov 05 2019 09:33:05 GMT+0100 (Central European Standard Time) +</footer> + +<script> prettyPrint(); </script> +<script src="scripts/linenumber.js"> </script> +</body> +</html> diff --git a/documentation/jsapi/scripts/linenumber.js b/documentation/jsapi/scripts/linenumber.js new file mode 100644 index 000000000..4354785ce --- /dev/null +++ b/documentation/jsapi/scripts/linenumber.js @@ -0,0 +1,25 @@ +/*global document */ +(() => { + const source = document.getElementsByClassName('prettyprint source linenums'); + let i = 0; + let lineNumber = 0; + let lineId; + let lines; + let totalLines; + let anchorHash; + + if (source && source[0]) { + anchorHash = document.location.hash.substring(1); + lines = source[0].getElementsByTagName('li'); + totalLines = lines.length; + + for (; i < totalLines; i++) { + lineNumber++; + lineId = `line${lineNumber}`; + lines[i].id = lineId; + if (lineId === anchorHash) { + lines[i].className += ' selected'; + } + } + } +})(); diff --git a/documentation/jsapi/scripts/prettify/Apache-License-2.0.txt b/documentation/jsapi/scripts/prettify/Apache-License-2.0.txt new file mode 100644 index 000000000..d64569567 --- /dev/null +++ b/documentation/jsapi/scripts/prettify/Apache-License-2.0.txt @@ -0,0 +1,202 @@ + + 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 + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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/documentation/jsapi/scripts/prettify/lang-css.js b/documentation/jsapi/scripts/prettify/lang-css.js new file mode 100644 index 000000000..041e1f590 --- /dev/null +++ b/documentation/jsapi/scripts/prettify/lang-css.js @@ -0,0 +1,2 @@ +PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\f\r ]+/,null," \t\r\n"]],[["str",/^"(?:[^\n\f\r"\\]|\\(?:\r\n?|\n|\f)|\\[\S\s])*"/,null],["str",/^'(?:[^\n\f\r'\\]|\\(?:\r\n?|\n|\f)|\\[\S\s])*'/,null],["lang-css-str",/^url\(([^"')]*)\)/i],["kwd",/^(?:url|rgb|!important|@import|@page|@media|@charset|inherit)(?=[^\w-]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|\\[\da-f]+ ?)(?:[\w-]|\\\\[\da-f]+ ?)*)\s*:/i],["com",/^\/\*[^*]*\*+(?:[^*/][^*]*\*+)*\//],["com", +/^(?:<\!--|--\>)/],["lit",/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],["lit",/^#[\da-f]{3,6}/i],["pln",/^-?(?:[_a-z]|\\[\da-f]+ ?)(?:[\w-]|\\\\[\da-f]+ ?)*/i],["pun",/^[^\s\w"']+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[["kwd",/^-?(?:[_a-z]|\\[\da-f]+ ?)(?:[\w-]|\\\\[\da-f]+ ?)*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[["str",/^[^"')]+/]]),["css-str"]); diff --git a/documentation/jsapi/scripts/prettify/prettify.js b/documentation/jsapi/scripts/prettify/prettify.js new file mode 100644 index 000000000..eef5ad7e6 --- /dev/null +++ b/documentation/jsapi/scripts/prettify/prettify.js @@ -0,0 +1,28 @@ +var q=null;window.PR_SHOULD_USE_CONTINUATION=!0; +(function(){function L(a){function m(a){var f=a.charCodeAt(0);if(f!==92)return f;var b=a.charAt(1);return(f=r[b])?f:"0"<=b&&b<="7"?parseInt(a.substring(1),8):b==="u"||b==="x"?parseInt(a.substring(2),16):a.charCodeAt(1)}function e(a){if(a<32)return(a<16?"\\x0":"\\x")+a.toString(16);a=String.fromCharCode(a);if(a==="\\"||a==="-"||a==="["||a==="]")a="\\"+a;return a}function h(a){for(var f=a.substring(1,a.length-1).match(/\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\[0-3][0-7]{0,2}|\\[0-7]{1,2}|\\[\S\s]|[^\\]/g),a= +[],b=[],o=f[0]==="^",c=o?1:0,i=f.length;c<i;++c){var j=f[c];if(/\\[bdsw]/i.test(j))a.push(j);else{var j=m(j),d;c+2<i&&"-"===f[c+1]?(d=m(f[c+2]),c+=2):d=j;b.push([j,d]);d<65||j>122||(d<65||j>90||b.push([Math.max(65,j)|32,Math.min(d,90)|32]),d<97||j>122||b.push([Math.max(97,j)&-33,Math.min(d,122)&-33]))}}b.sort(function(a,f){return a[0]-f[0]||f[1]-a[1]});f=[];j=[NaN,NaN];for(c=0;c<b.length;++c)i=b[c],i[0]<=j[1]+1?j[1]=Math.max(j[1],i[1]):f.push(j=i);b=["["];o&&b.push("^");b.push.apply(b,a);for(c=0;c< +f.length;++c)i=f[c],b.push(e(i[0])),i[1]>i[0]&&(i[1]+1>i[0]&&b.push("-"),b.push(e(i[1])));b.push("]");return b.join("")}function y(a){for(var f=a.source.match(/\[(?:[^\\\]]|\\[\S\s])*]|\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\\d+|\\[^\dux]|\(\?[!:=]|[()^]|[^()[\\^]+/g),b=f.length,d=[],c=0,i=0;c<b;++c){var j=f[c];j==="("?++i:"\\"===j.charAt(0)&&(j=+j.substring(1))&&j<=i&&(d[j]=-1)}for(c=1;c<d.length;++c)-1===d[c]&&(d[c]=++t);for(i=c=0;c<b;++c)j=f[c],j==="("?(++i,d[i]===void 0&&(f[c]="(?:")):"\\"===j.charAt(0)&& +(j=+j.substring(1))&&j<=i&&(f[c]="\\"+d[i]);for(i=c=0;c<b;++c)"^"===f[c]&&"^"!==f[c+1]&&(f[c]="");if(a.ignoreCase&&s)for(c=0;c<b;++c)j=f[c],a=j.charAt(0),j.length>=2&&a==="["?f[c]=h(j):a!=="\\"&&(f[c]=j.replace(/[A-Za-z]/g,function(a){a=a.charCodeAt(0);return"["+String.fromCharCode(a&-33,a|32)+"]"}));return f.join("")}for(var t=0,s=!1,l=!1,p=0,d=a.length;p<d;++p){var g=a[p];if(g.ignoreCase)l=!0;else if(/[a-z]/i.test(g.source.replace(/\\u[\da-f]{4}|\\x[\da-f]{2}|\\[^UXux]/gi,""))){s=!0;l=!1;break}}for(var r= +{b:8,t:9,n:10,v:11,f:12,r:13},n=[],p=0,d=a.length;p<d;++p){g=a[p];if(g.global||g.multiline)throw Error(""+g);n.push("(?:"+y(g)+")")}return RegExp(n.join("|"),l?"gi":"g")}function M(a){function m(a){switch(a.nodeType){case 1:if(e.test(a.className))break;for(var g=a.firstChild;g;g=g.nextSibling)m(g);g=a.nodeName;if("BR"===g||"LI"===g)h[s]="\n",t[s<<1]=y++,t[s++<<1|1]=a;break;case 3:case 4:g=a.nodeValue,g.length&&(g=p?g.replace(/\r\n?/g,"\n"):g.replace(/[\t\n\r ]+/g," "),h[s]=g,t[s<<1]=y,y+=g.length, +t[s++<<1|1]=a)}}var e=/(?:^|\s)nocode(?:\s|$)/,h=[],y=0,t=[],s=0,l;a.currentStyle?l=a.currentStyle.whiteSpace:window.getComputedStyle&&(l=document.defaultView.getComputedStyle(a,q).getPropertyValue("white-space"));var p=l&&"pre"===l.substring(0,3);m(a);return{a:h.join("").replace(/\n$/,""),c:t}}function B(a,m,e,h){m&&(a={a:m,d:a},e(a),h.push.apply(h,a.e))}function x(a,m){function e(a){for(var l=a.d,p=[l,"pln"],d=0,g=a.a.match(y)||[],r={},n=0,z=g.length;n<z;++n){var f=g[n],b=r[f],o=void 0,c;if(typeof b=== +"string")c=!1;else{var i=h[f.charAt(0)];if(i)o=f.match(i[1]),b=i[0];else{for(c=0;c<t;++c)if(i=m[c],o=f.match(i[1])){b=i[0];break}o||(b="pln")}if((c=b.length>=5&&"lang-"===b.substring(0,5))&&!(o&&typeof o[1]==="string"))c=!1,b="src";c||(r[f]=b)}i=d;d+=f.length;if(c){c=o[1];var j=f.indexOf(c),k=j+c.length;o[2]&&(k=f.length-o[2].length,j=k-c.length);b=b.substring(5);B(l+i,f.substring(0,j),e,p);B(l+i+j,c,C(b,c),p);B(l+i+k,f.substring(k),e,p)}else p.push(l+i,b)}a.e=p}var h={},y;(function(){for(var e=a.concat(m), +l=[],p={},d=0,g=e.length;d<g;++d){var r=e[d],n=r[3];if(n)for(var k=n.length;--k>=0;)h[n.charAt(k)]=r;r=r[1];n=""+r;p.hasOwnProperty(n)||(l.push(r),p[n]=q)}l.push(/[\S\s]/);y=L(l)})();var t=m.length;return e}function u(a){var m=[],e=[];a.tripleQuotedStrings?m.push(["str",/^(?:'''(?:[^'\\]|\\[\S\s]|''?(?=[^']))*(?:'''|$)|"""(?:[^"\\]|\\[\S\s]|""?(?=[^"]))*(?:"""|$)|'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$))/,q,"'\""]):a.multiLineStrings?m.push(["str",/^(?:'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$)|`(?:[^\\`]|\\[\S\s])*(?:`|$))/, +q,"'\"`"]):m.push(["str",/^(?:'(?:[^\n\r'\\]|\\.)*(?:'|$)|"(?:[^\n\r"\\]|\\.)*(?:"|$))/,q,"\"'"]);a.verbatimStrings&&e.push(["str",/^@"(?:[^"]|"")*(?:"|$)/,q]);var h=a.hashComments;h&&(a.cStyleComments?(h>1?m.push(["com",/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,q,"#"]):m.push(["com",/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\n\r]*)/,q,"#"]),e.push(["str",/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,q])):m.push(["com",/^#[^\n\r]*/, +q,"#"]));a.cStyleComments&&(e.push(["com",/^\/\/[^\n\r]*/,q]),e.push(["com",/^\/\*[\S\s]*?(?:\*\/|$)/,q]));a.regexLiterals&&e.push(["lang-regex",/^(?:^^\.?|[!+-]|!=|!==|#|%|%=|&|&&|&&=|&=|\(|\*|\*=|\+=|,|-=|->|\/|\/=|:|::|;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|[?@[^]|\^=|\^\^|\^\^=|{|\||\|=|\|\||\|\|=|~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\s*(\/(?=[^*/])(?:[^/[\\]|\\[\S\s]|\[(?:[^\\\]]|\\[\S\s])*(?:]|$))+\/)/]);(h=a.types)&&e.push(["typ",h]);a=(""+a.keywords).replace(/^ | $/g, +"");a.length&&e.push(["kwd",RegExp("^(?:"+a.replace(/[\s,]+/g,"|")+")\\b"),q]);m.push(["pln",/^\s+/,q," \r\n\t\xa0"]);e.push(["lit",/^@[$_a-z][\w$@]*/i,q],["typ",/^(?:[@_]?[A-Z]+[a-z][\w$@]*|\w+_t\b)/,q],["pln",/^[$_a-z][\w$@]*/i,q],["lit",/^(?:0x[\da-f]+|(?:\d(?:_\d+)*\d*(?:\.\d*)?|\.\d\+)(?:e[+-]?\d+)?)[a-z]*/i,q,"0123456789"],["pln",/^\\[\S\s]?/,q],["pun",/^.[^\s\w"-$'./@\\`]*/,q]);return x(m,e)}function D(a,m){function e(a){switch(a.nodeType){case 1:if(k.test(a.className))break;if("BR"===a.nodeName)h(a), +a.parentNode&&a.parentNode.removeChild(a);else for(a=a.firstChild;a;a=a.nextSibling)e(a);break;case 3:case 4:if(p){var b=a.nodeValue,d=b.match(t);if(d){var c=b.substring(0,d.index);a.nodeValue=c;(b=b.substring(d.index+d[0].length))&&a.parentNode.insertBefore(s.createTextNode(b),a.nextSibling);h(a);c||a.parentNode.removeChild(a)}}}}function h(a){function b(a,d){var e=d?a.cloneNode(!1):a,f=a.parentNode;if(f){var f=b(f,1),g=a.nextSibling;f.appendChild(e);for(var h=g;h;h=g)g=h.nextSibling,f.appendChild(h)}return e} +for(;!a.nextSibling;)if(a=a.parentNode,!a)return;for(var a=b(a.nextSibling,0),e;(e=a.parentNode)&&e.nodeType===1;)a=e;d.push(a)}var k=/(?:^|\s)nocode(?:\s|$)/,t=/\r\n?|\n/,s=a.ownerDocument,l;a.currentStyle?l=a.currentStyle.whiteSpace:window.getComputedStyle&&(l=s.defaultView.getComputedStyle(a,q).getPropertyValue("white-space"));var p=l&&"pre"===l.substring(0,3);for(l=s.createElement("LI");a.firstChild;)l.appendChild(a.firstChild);for(var d=[l],g=0;g<d.length;++g)e(d[g]);m===(m|0)&&d[0].setAttribute("value", +m);var r=s.createElement("OL");r.className="linenums";for(var n=Math.max(0,m-1|0)||0,g=0,z=d.length;g<z;++g)l=d[g],l.className="L"+(g+n)%10,l.firstChild||l.appendChild(s.createTextNode("\xa0")),r.appendChild(l);a.appendChild(r)}function k(a,m){for(var e=m.length;--e>=0;){var h=m[e];A.hasOwnProperty(h)?window.console&&console.warn("cannot override language handler %s",h):A[h]=a}}function C(a,m){if(!a||!A.hasOwnProperty(a))a=/^\s*</.test(m)?"default-markup":"default-code";return A[a]}function E(a){var m= +a.g;try{var e=M(a.h),h=e.a;a.a=h;a.c=e.c;a.d=0;C(m,h)(a);var k=/\bMSIE\b/.test(navigator.userAgent),m=/\n/g,t=a.a,s=t.length,e=0,l=a.c,p=l.length,h=0,d=a.e,g=d.length,a=0;d[g]=s;var r,n;for(n=r=0;n<g;)d[n]!==d[n+2]?(d[r++]=d[n++],d[r++]=d[n++]):n+=2;g=r;for(n=r=0;n<g;){for(var z=d[n],f=d[n+1],b=n+2;b+2<=g&&d[b+1]===f;)b+=2;d[r++]=z;d[r++]=f;n=b}for(d.length=r;h<p;){var o=l[h+2]||s,c=d[a+2]||s,b=Math.min(o,c),i=l[h+1],j;if(i.nodeType!==1&&(j=t.substring(e,b))){k&&(j=j.replace(m,"\r"));i.nodeValue= +j;var u=i.ownerDocument,v=u.createElement("SPAN");v.className=d[a+1];var x=i.parentNode;x.replaceChild(v,i);v.appendChild(i);e<o&&(l[h+1]=i=u.createTextNode(t.substring(b,o)),x.insertBefore(i,v.nextSibling))}e=b;e>=o&&(h+=2);e>=c&&(a+=2)}}catch(w){"console"in window&&console.log(w&&w.stack?w.stack:w)}}var v=["break,continue,do,else,for,if,return,while"],w=[[v,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"], +"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"],F=[w,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"],G=[w,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"], +H=[G,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"],w=[w,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"],I=[v,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"], +J=[v,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"],v=[v,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"],K=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/,N=/\S/,O=u({keywords:[F,H,w,"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END"+ +I,J,v],hashComments:!0,cStyleComments:!0,multiLineStrings:!0,regexLiterals:!0}),A={};k(O,["default-code"]);k(x([],[["pln",/^[^<?]+/],["dec",/^<!\w[^>]*(?:>|$)/],["com",/^<\!--[\S\s]*?(?:--\>|$)/],["lang-",/^<\?([\S\s]+?)(?:\?>|$)/],["lang-",/^<%([\S\s]+?)(?:%>|$)/],["pun",/^(?:<[%?]|[%?]>)/],["lang-",/^<xmp\b[^>]*>([\S\s]+?)<\/xmp\b[^>]*>/i],["lang-js",/^<script\b[^>]*>([\S\s]*?)(<\/script\b[^>]*>)/i],["lang-css",/^<style\b[^>]*>([\S\s]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]), +["default-markup","htm","html","mxml","xhtml","xml","xsl"]);k(x([["pln",/^\s+/,q," \t\r\n"],["atv",/^(?:"[^"]*"?|'[^']*'?)/,q,"\"'"]],[["tag",/^^<\/?[a-z](?:[\w-.:]*\w)?|\/?>$/i],["atn",/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^\s"'>]*(?:[^\s"'/>]|\/(?=\s)))/],["pun",/^[/<->]+/],["lang-js",/^on\w+\s*=\s*"([^"]+)"/i],["lang-js",/^on\w+\s*=\s*'([^']+)'/i],["lang-js",/^on\w+\s*=\s*([^\s"'>]+)/i],["lang-css",/^style\s*=\s*"([^"]+)"/i],["lang-css",/^style\s*=\s*'([^']+)'/i],["lang-css", +/^style\s*=\s*([^\s"'>]+)/i]]),["in.tag"]);k(x([],[["atv",/^[\S\s]+/]]),["uq.val"]);k(u({keywords:F,hashComments:!0,cStyleComments:!0,types:K}),["c","cc","cpp","cxx","cyc","m"]);k(u({keywords:"null,true,false"}),["json"]);k(u({keywords:H,hashComments:!0,cStyleComments:!0,verbatimStrings:!0,types:K}),["cs"]);k(u({keywords:G,cStyleComments:!0}),["java"]);k(u({keywords:v,hashComments:!0,multiLineStrings:!0}),["bsh","csh","sh"]);k(u({keywords:I,hashComments:!0,multiLineStrings:!0,tripleQuotedStrings:!0}), +["cv","py"]);k(u({keywords:"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END",hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["perl","pl","pm"]);k(u({keywords:J,hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["rb"]);k(u({keywords:w,cStyleComments:!0,regexLiterals:!0}),["js"]);k(u({keywords:"all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes", +hashComments:3,cStyleComments:!0,multilineStrings:!0,tripleQuotedStrings:!0,regexLiterals:!0}),["coffee"]);k(x([],[["str",/^[\S\s]+/]]),["regex"]);window.prettyPrintOne=function(a,m,e){var h=document.createElement("PRE");h.innerHTML=a;e&&D(h,e);E({g:m,i:e,h:h});return h.innerHTML};window.prettyPrint=function(a){function m(){for(var e=window.PR_SHOULD_USE_CONTINUATION?l.now()+250:Infinity;p<h.length&&l.now()<e;p++){var n=h[p],k=n.className;if(k.indexOf("prettyprint")>=0){var k=k.match(g),f,b;if(b= +!k){b=n;for(var o=void 0,c=b.firstChild;c;c=c.nextSibling)var i=c.nodeType,o=i===1?o?b:c:i===3?N.test(c.nodeValue)?b:o:o;b=(f=o===b?void 0:o)&&"CODE"===f.tagName}b&&(k=f.className.match(g));k&&(k=k[1]);b=!1;for(o=n.parentNode;o;o=o.parentNode)if((o.tagName==="pre"||o.tagName==="code"||o.tagName==="xmp")&&o.className&&o.className.indexOf("prettyprint")>=0){b=!0;break}b||((b=(b=n.className.match(/\blinenums\b(?::(\d+))?/))?b[1]&&b[1].length?+b[1]:!0:!1)&&D(n,b),d={g:k,h:n,i:b},E(d))}}p<h.length?setTimeout(m, +250):a&&a()}for(var e=[document.getElementsByTagName("pre"),document.getElementsByTagName("code"),document.getElementsByTagName("xmp")],h=[],k=0;k<e.length;++k)for(var t=0,s=e[k].length;t<s;++t)h.push(e[k][t]);var e=q,l=Date;l.now||(l={now:function(){return+new Date}});var p=0,d,g=/\blang(?:uage)?-([\w.]+)(?!\S)/;m()};window.PR={createSimpleLexer:x,registerLangHandler:k,sourceDecorator:u,PR_ATTRIB_NAME:"atn",PR_ATTRIB_VALUE:"atv",PR_COMMENT:"com",PR_DECLARATION:"dec",PR_KEYWORD:"kwd",PR_LITERAL:"lit", +PR_NOCODE:"nocode",PR_PLAIN:"pln",PR_PUNCTUATION:"pun",PR_SOURCE:"src",PR_STRING:"str",PR_TAG:"tag",PR_TYPE:"typ"}})(); diff --git a/documentation/jsapi/styles/jsdoc-default.css b/documentation/jsapi/styles/jsdoc-default.css new file mode 100644 index 000000000..7d1729dc9 --- /dev/null +++ b/documentation/jsapi/styles/jsdoc-default.css @@ -0,0 +1,358 @@ +@font-face { + font-family: 'Open Sans'; + font-weight: normal; + font-style: normal; + src: url('../fonts/OpenSans-Regular-webfont.eot'); + src: + local('Open Sans'), + local('OpenSans'), + url('../fonts/OpenSans-Regular-webfont.eot?#iefix') format('embedded-opentype'), + url('../fonts/OpenSans-Regular-webfont.woff') format('woff'), + url('../fonts/OpenSans-Regular-webfont.svg#open_sansregular') format('svg'); +} + +@font-face { + font-family: 'Open Sans Light'; + font-weight: normal; + font-style: normal; + src: url('../fonts/OpenSans-Light-webfont.eot'); + src: + local('Open Sans Light'), + local('OpenSans Light'), + url('../fonts/OpenSans-Light-webfont.eot?#iefix') format('embedded-opentype'), + url('../fonts/OpenSans-Light-webfont.woff') format('woff'), + url('../fonts/OpenSans-Light-webfont.svg#open_sanslight') format('svg'); +} + +html +{ + overflow: auto; + background-color: #fff; + font-size: 14px; +} + +body +{ + font-family: 'Open Sans', sans-serif; + line-height: 1.5; + color: #4d4e53; + background-color: white; +} + +a, a:visited, a:active { + color: #0095dd; + text-decoration: none; +} + +a:hover { + text-decoration: underline; +} + +header +{ + display: block; + padding: 0px 4px; +} + +tt, code, kbd, samp { + font-family: Consolas, Monaco, 'Andale Mono', monospace; +} + +.class-description { + font-size: 130%; + line-height: 140%; + margin-bottom: 1em; + margin-top: 1em; +} + +.class-description:empty { + margin: 0; +} + +#main { + float: left; + width: 70%; +} + +article dl { + margin-bottom: 40px; +} + +article img { + max-width: 100%; +} + +section +{ + display: block; + background-color: #fff; + padding: 12px 24px; + border-bottom: 1px solid #ccc; + margin-right: 30px; +} + +.variation { + display: none; +} + +.signature-attributes { + font-size: 60%; + color: #aaa; + font-style: italic; + font-weight: lighter; +} + +nav +{ + display: block; + float: right; + margin-top: 28px; + width: 30%; + box-sizing: border-box; + border-left: 1px solid #ccc; + padding-left: 16px; +} + +nav ul { + font-family: 'Lucida Grande', 'Lucida Sans Unicode', arial, sans-serif; + font-size: 100%; + line-height: 17px; + padding: 0; + margin: 0; + list-style-type: none; +} + +nav ul a, nav ul a:visited, nav ul a:active { + font-family: Consolas, Monaco, 'Andale Mono', monospace; + line-height: 18px; + color: #4D4E53; +} + +nav h3 { + margin-top: 12px; +} + +nav li { + margin-top: 6px; +} + +footer { + display: block; + padding: 6px; + margin-top: 12px; + font-style: italic; + font-size: 90%; +} + +h1, h2, h3, h4 { + font-weight: 200; + margin: 0; +} + +h1 +{ + font-family: 'Open Sans Light', sans-serif; + font-size: 48px; + letter-spacing: -2px; + margin: 12px 24px 20px; +} + +h2, h3.subsection-title +{ + font-size: 30px; + font-weight: 700; + letter-spacing: -1px; + margin-bottom: 12px; +} + +h3 +{ + font-size: 24px; + letter-spacing: -0.5px; + margin-bottom: 12px; +} + +h4 +{ + font-size: 18px; + letter-spacing: -0.33px; + margin-bottom: 12px; + color: #4d4e53; +} + +h5, .container-overview .subsection-title +{ + font-size: 120%; + font-weight: bold; + letter-spacing: -0.01em; + margin: 8px 0 3px 0; +} + +h6 +{ + font-size: 100%; + letter-spacing: -0.01em; + margin: 6px 0 3px 0; + font-style: italic; +} + +table +{ + border-spacing: 0; + border: 0; + border-collapse: collapse; +} + +td, th +{ + border: 1px solid #ddd; + margin: 0px; + text-align: left; + vertical-align: top; + padding: 4px 6px; + display: table-cell; +} + +thead tr +{ + background-color: #ddd; + font-weight: bold; +} + +th { border-right: 1px solid #aaa; } +tr > th:last-child { border-right: 1px solid #ddd; } + +.ancestors, .attribs { color: #999; } +.ancestors a, .attribs a +{ + color: #999 !important; + text-decoration: none; +} + +.clear +{ + clear: both; +} + +.important +{ + font-weight: bold; + color: #950B02; +} + +.yes-def { + text-indent: -1000px; +} + +.type-signature { + color: #aaa; +} + +.name, .signature { + font-family: Consolas, Monaco, 'Andale Mono', monospace; +} + +.details { margin-top: 14px; border-left: 2px solid #DDD; } +.details dt { width: 120px; float: left; padding-left: 10px; padding-top: 6px; } +.details dd { margin-left: 70px; } +.details ul { margin: 0; } +.details ul { list-style-type: none; } +.details li { margin-left: 30px; padding-top: 6px; } +.details pre.prettyprint { margin: 0 } +.details .object-value { padding-top: 0; } + +.description { + margin-bottom: 1em; + margin-top: 1em; +} + +.code-caption +{ + font-style: italic; + font-size: 107%; + margin: 0; +} + +.source +{ + border: 1px solid #ddd; + width: 80%; + overflow: auto; +} + +.prettyprint.source { + width: inherit; +} + +.source code +{ + font-size: 100%; + line-height: 18px; + display: block; + padding: 4px 12px; + margin: 0; + background-color: #fff; + color: #4D4E53; +} + +.prettyprint code span.line +{ + display: inline-block; +} + +.prettyprint.linenums +{ + padding-left: 70px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.prettyprint.linenums ol +{ + padding-left: 0; +} + +.prettyprint.linenums li +{ + border-left: 3px #ddd solid; +} + +.prettyprint.linenums li.selected, +.prettyprint.linenums li.selected * +{ + background-color: lightyellow; +} + +.prettyprint.linenums li * +{ + -webkit-user-select: text; + -moz-user-select: text; + -ms-user-select: text; + user-select: text; +} + +.params .name, .props .name, .name code { + color: #4D4E53; + font-family: Consolas, Monaco, 'Andale Mono', monospace; + font-size: 100%; +} + +.params td.description > p:first-child, +.props td.description > p:first-child +{ + margin-top: 0; + padding-top: 0; +} + +.params td.description > p:last-child, +.props td.description > p:last-child +{ + margin-bottom: 0; + padding-bottom: 0; +} + +.disabled { + color: #454545; +} diff --git a/documentation/jsapi/styles/prettify-jsdoc.css b/documentation/jsapi/styles/prettify-jsdoc.css new file mode 100644 index 000000000..5a2526e37 --- /dev/null +++ b/documentation/jsapi/styles/prettify-jsdoc.css @@ -0,0 +1,111 @@ +/* JSDoc prettify.js theme */ + +/* plain text */ +.pln { + color: #000000; + font-weight: normal; + font-style: normal; +} + +/* string content */ +.str { + color: #006400; + font-weight: normal; + font-style: normal; +} + +/* a keyword */ +.kwd { + color: #000000; + font-weight: bold; + font-style: normal; +} + +/* a comment */ +.com { + font-weight: normal; + font-style: italic; +} + +/* a type name */ +.typ { + color: #000000; + font-weight: normal; + font-style: normal; +} + +/* a literal value */ +.lit { + color: #006400; + font-weight: normal; + font-style: normal; +} + +/* punctuation */ +.pun { + color: #000000; + font-weight: bold; + font-style: normal; +} + +/* lisp open bracket */ +.opn { + color: #000000; + font-weight: bold; + font-style: normal; +} + +/* lisp close bracket */ +.clo { + color: #000000; + font-weight: bold; + font-style: normal; +} + +/* a markup tag name */ +.tag { + color: #006400; + font-weight: normal; + font-style: normal; +} + +/* a markup attribute name */ +.atn { + color: #006400; + font-weight: normal; + font-style: normal; +} + +/* a markup attribute value */ +.atv { + color: #006400; + font-weight: normal; + font-style: normal; +} + +/* a declaration */ +.dec { + color: #000000; + font-weight: bold; + font-style: normal; +} + +/* a variable name */ +.var { + color: #000000; + font-weight: normal; + font-style: normal; +} + +/* a function name */ +.fun { + color: #000000; + font-weight: bold; + font-style: normal; +} + +/* Specify class=linenums on a pre to get line numbering */ +ol.linenums { + margin-top: 0; + margin-bottom: 0; +} diff --git a/documentation/jsapi/styles/prettify-tomorrow.css b/documentation/jsapi/styles/prettify-tomorrow.css new file mode 100644 index 000000000..b6f92a78d --- /dev/null +++ b/documentation/jsapi/styles/prettify-tomorrow.css @@ -0,0 +1,132 @@ +/* Tomorrow Theme */ +/* Original theme - https://github.com/chriskempson/tomorrow-theme */ +/* Pretty printing styles. Used with prettify.js. */ +/* SPAN elements with the classes below are added by prettyprint. */ +/* plain text */ +.pln { + color: #4d4d4c; } + +@media screen { + /* string content */ + .str { + color: #718c00; } + + /* a keyword */ + .kwd { + color: #8959a8; } + + /* a comment */ + .com { + color: #8e908c; } + + /* a type name */ + .typ { + color: #4271ae; } + + /* a literal value */ + .lit { + color: #f5871f; } + + /* punctuation */ + .pun { + color: #4d4d4c; } + + /* lisp open bracket */ + .opn { + color: #4d4d4c; } + + /* lisp close bracket */ + .clo { + color: #4d4d4c; } + + /* a markup tag name */ + .tag { + color: #c82829; } + + /* a markup attribute name */ + .atn { + color: #f5871f; } + + /* a markup attribute value */ + .atv { + color: #3e999f; } + + /* a declaration */ + .dec { + color: #f5871f; } + + /* a variable name */ + .var { + color: #c82829; } + + /* a function name */ + .fun { + color: #4271ae; } } +/* Use higher contrast and text-weight for printable form. */ +@media print, projection { + .str { + color: #060; } + + .kwd { + color: #006; + font-weight: bold; } + + .com { + color: #600; + font-style: italic; } + + .typ { + color: #404; + font-weight: bold; } + + .lit { + color: #044; } + + .pun, .opn, .clo { + color: #440; } + + .tag { + color: #006; + font-weight: bold; } + + .atn { + color: #404; } + + .atv { + color: #060; } } +/* Style */ +/* +pre.prettyprint { + background: white; + font-family: Consolas, Monaco, 'Andale Mono', monospace; + font-size: 12px; + line-height: 1.5; + border: 1px solid #ccc; + padding: 10px; } +*/ + +/* Specify class=linenums on a pre to get line numbering */ +ol.linenums { + margin-top: 0; + margin-bottom: 0; } + +/* IE indents via margin-left */ +li.L0, +li.L1, +li.L2, +li.L3, +li.L4, +li.L5, +li.L6, +li.L7, +li.L8, +li.L9 { + /* */ } + +/* Alternate shading for lines */ +li.L1, +li.L3, +li.L5, +li.L7, +li.L9 { + /* */ } diff --git a/documentation/jsapi/uci.js.html b/documentation/jsapi/uci.js.html new file mode 100644 index 000000000..d61010f0e --- /dev/null +++ b/documentation/jsapi/uci.js.html @@ -0,0 +1,994 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="utf-8"> + <title>JSDoc: Source: uci.js</title> + + <script src="scripts/prettify/prettify.js"> </script> + <script src="scripts/prettify/lang-css.js"> </script> + <!--[if lt IE 9]> + <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script> + <![endif]--> + <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css"> + <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css"> +</head> + +<body> + +<div id="main"> + + <h1 class="page-title">Source: uci.js</h1> + + + + + + + <section> + <article> + <pre class="prettyprint source linenums"><code>'use strict'; +'require rpc'; + +/** + * @class uci + * @memberof LuCI + * @hideconstructor + * @classdesc + * + * The `LuCI.uci` class utilizes {@link LuCI.rpc} to declare low level + * remote UCI `ubus` procedures and implements a local caching and data + * manipulation layer on top to allow for synchroneous operations on + * UCI configuration data. + */ +return L.Class.extend(/** @lends LuCI.uci.prototype */ { + __init__: function() { + this.state = { + newidx: 0, + values: { }, + creates: { }, + changes: { }, + deletes: { }, + reorder: { } + }; + + this.loaded = {}; + }, + + callLoad: rpc.declare({ + object: 'uci', + method: 'get', + params: [ 'config' ], + expect: { values: { } } + }), + + + callOrder: rpc.declare({ + object: 'uci', + method: 'order', + params: [ 'config', 'sections' ] + }), + + callAdd: rpc.declare({ + object: 'uci', + method: 'add', + params: [ 'config', 'type', 'name', 'values' ], + expect: { section: '' } + }), + + callSet: rpc.declare({ + object: 'uci', + method: 'set', + params: [ 'config', 'section', 'values' ] + }), + + callDelete: rpc.declare({ + object: 'uci', + method: 'delete', + params: [ 'config', 'section', 'options' ] + }), + + callApply: rpc.declare({ + object: 'uci', + method: 'apply', + params: [ 'timeout', 'rollback' ] + }), + + callConfirm: rpc.declare({ + object: 'uci', + method: 'confirm' + }), + + + /** + * Generates a new, unique section ID for the given configuration. + * + * Note that the generated ID is temporary, it will get replaced by an + * identifier in the form `cfgXXXXXX` once the configuration is saved + * by the remote `ubus` UCI api. + * + * @param {string} config + * The configuration to generate the new section ID for. + * + * @returns {string} + * A newly generated, unique section ID in the form `newXXXXXX` + * where `X` denotes a hexadecimal digit. + */ + createSID: function(conf) { + var v = this.state.values, + n = this.state.creates, + sid; + + do { + sid = "new%06x".format(Math.random() * 0xFFFFFF); + } while ((n[conf] && n[conf][sid]) || (v[conf] && v[conf][sid])); + + return sid; + }, + + /** + * Resolves a given section ID in extended notation to the internal + * section ID value. + * + * @param {string} config + * The configuration to resolve the section ID for. + * + * @param {string} sid + * The section ID to resolve. If the ID is in the form `@typename[#]`, + * it will get resolved to an internal anonymous ID in the forms + * `cfgXXXXXX`/`newXXXXXX` or to the name of a section in case it points + * to a named section. When the given ID is not in extended notation, + * it will be returned as-is. + * + * @returns {string|null} + * Returns the resolved section ID or the original given ID if it was + * not in extended notation. Returns `null` when an extended ID could + * not be resolved to existing section ID. + */ + resolveSID: function(conf, sid) { + if (typeof(sid) != 'string') + return sid; + + var m = /^@([a-zA-Z0-9_-]+)\[(-?[0-9]+)\]$/.exec(sid); + + if (m) { + var type = m[1], + pos = +m[2], + sections = this.sections(conf, type), + section = sections[pos >= 0 ? pos : sections.length + pos]; + + return section ? section['.name'] : null; + } + + return sid; + }, + + /* private */ + reorderSections: function() { + var v = this.state.values, + n = this.state.creates, + r = this.state.reorder, + tasks = []; + + if (Object.keys(r).length === 0) + return Promise.resolve(); + + /* + gather all created and existing sections, sort them according + to their index value and issue an uci order call + */ + for (var c in r) { + var o = [ ]; + + if (n[c]) + for (var s in n[c]) + o.push(n[c][s]); + + for (var s in v[c]) + o.push(v[c][s]); + + if (o.length > 0) { + o.sort(function(a, b) { + return (a['.index'] - b['.index']); + }); + + var sids = [ ]; + + for (var i = 0; i < o.length; i++) + sids.push(o[i]['.name']); + + tasks.push(this.callOrder(c, sids)); + } + } + + this.state.reorder = { }; + return Promise.all(tasks); + }, + + /* private */ + loadPackage: function(packageName) { + if (this.loaded[packageName] == null) + return (this.loaded[packageName] = this.callLoad(packageName)); + + return Promise.resolve(this.loaded[packageName]); + }, + + /** + * Loads the given UCI configurations from the remote `ubus` api. + * + * Loaded configurations are cached and only loaded once. Subsequent + * load operations of the same configurations will return the cached + * data. + * + * To force reloading a configuration, it has to be unloaded with + * {@link LuCI.uci#unload uci.unload()} first. + * + * @param {string|string[]} config + * The name of the configuration or an array of configuration + * names to load. + * + * @returns {Promise<string[]>} + * Returns a promise resolving to the names of the configurations + * that have been successfully loaded. + */ + load: function(packages) { + var self = this, + pkgs = [ ], + tasks = []; + + if (!Array.isArray(packages)) + packages = [ packages ]; + + for (var i = 0; i < packages.length; i++) + if (!self.state.values[packages[i]]) { + pkgs.push(packages[i]); + tasks.push(self.loadPackage(packages[i])); + } + + return Promise.all(tasks).then(function(responses) { + for (var i = 0; i < responses.length; i++) + self.state.values[pkgs[i]] = responses[i]; + + if (responses.length) + document.dispatchEvent(new CustomEvent('uci-loaded')); + + return pkgs; + }); + }, + + /** + * Unloads the given UCI configurations from the local cache. + * + * @param {string|string[]} config + * The name of the configuration or an array of configuration + * names to unload. + */ + unload: function(packages) { + if (!Array.isArray(packages)) + packages = [ packages ]; + + for (var i = 0; i < packages.length; i++) { + delete this.state.values[packages[i]]; + delete this.state.creates[packages[i]]; + delete this.state.changes[packages[i]]; + delete this.state.deletes[packages[i]]; + + delete this.loaded[packages[i]]; + } + }, + + /** + * Adds a new section of the given type to the given configuration, + * optionally named according to the given name. + * + * @param {string} config + * The name of the configuration to add the section to. + * + * @param {string} type + * The type of the section to add. + * + * @param {string} [name] + * The name of the section to add. If the name is omitted, an anonymous + * section will be added instead. + * + * @returns {string} + * Returns the section ID of the newly added section which is equivalent + * to the given name for non-anonymous sections. + */ + add: function(conf, type, name) { + var n = this.state.creates, + sid = name || this.createSID(conf); + + if (!n[conf]) + n[conf] = { }; + + n[conf][sid] = { + '.type': type, + '.name': sid, + '.create': name, + '.anonymous': !name, + '.index': 1000 + this.state.newidx++ + }; + + return sid; + }, + + /** + * Removes the section with the given ID from the given configuration. + * + * @param {string} config + * The name of the configuration to remove the section from. + * + * @param {string} sid + * The ID of the section to remove. + */ + remove: function(conf, sid) { + var n = this.state.creates, + c = this.state.changes, + d = this.state.deletes; + + /* requested deletion of a just created section */ + if (n[conf] && n[conf][sid]) { + delete n[conf][sid]; + } + else { + if (c[conf]) + delete c[conf][sid]; + + if (!d[conf]) + d[conf] = { }; + + d[conf][sid] = true; + } + }, + + /** + * A section object represents the options and their corresponding values + * enclosed within a configuration section, as well as some additional + * meta data such as sort indexes and internal ID. + * + * Any internal metadata fields are prefixed with a dot which is isn't + * an allowed character for normal option names. + * + * @typedef {Object<string, boolean|number|string|string[]>} SectionObject + * @memberof LuCI.uci + * + * @property {boolean} .anonymous + * The `.anonymous` property specifies whether the configuration is + * anonymous (`true`) or named (`false`). + * + * @property {number} .index + * The `.index` property specifes the sort order of the section. + * + * @property {string} .name + * The `.name` property holds the name of the section object. It may be + * either an anonymous ID in the form `cfgXXXXXX` or `newXXXXXX` with `X` + * being a hexadecimal digit or a string holding the name of the section. + * + * @property {string} .type + * The `.type` property contains the type of the corresponding uci + * section. + * + * @property {string|string[]} * + * A section object may contain an arbitrary number of further properties + * representing the uci option enclosed in the section. + * + * All option property names will be in the form `[A-Za-z0-9_]+` and + * either contain a string value or an array of strings, in case the + * underlying option is an UCI list. + */ + + /** + * The sections callback is invoked for each section found within + * the given configuration and receives the section object and its + * associated name as arguments. + * + * @callback LuCI.uci~sectionsFn + * + * @param {LuCI.uci.SectionObject} section + * The section object. + * + * @param {string} sid + * The name or ID of the section. + */ + + /** + * Enumerates the sections of the given configuration, optionally + * filtered by type. + * + * @param {string} config + * The name of the configuration to enumerate the sections for. + * + * @param {string} [type] + * Enumerate only sections of the given type. If omitted, enumerate + * all sections. + * + * @param {LuCI.uci~sectionsFn} [cb] + * An optional callback to invoke for each enumerated section. + * + * @returns {Array<LuCI.uci.SectionObject>} + * Returns a sorted array of the section objects within the given + * configuration, filtered by type of a type has been specified. + */ + sections: function(conf, type, cb) { + var sa = [ ], + v = this.state.values[conf], + n = this.state.creates[conf], + c = this.state.changes[conf], + d = this.state.deletes[conf]; + + if (!v) + return sa; + + for (var s in v) + if (!d || d[s] !== true) + if (!type || v[s]['.type'] == type) + sa.push(Object.assign({ }, v[s], c ? c[s] : undefined)); + + if (n) + for (var s in n) + if (!type || n[s]['.type'] == type) + sa.push(Object.assign({ }, n[s])); + + sa.sort(function(a, b) { + return a['.index'] - b['.index']; + }); + + for (var i = 0; i < sa.length; i++) + sa[i]['.index'] = i; + + if (typeof(cb) == 'function') + for (var i = 0; i < sa.length; i++) + cb.call(this, sa[i], sa[i]['.name']); + + return sa; + }, + + /** + * Gets the value of the given option within the specified section + * of the given configuration or the entire section object if the + * option name is omitted. + * + * @param {string} config + * The name of the configuration to read the value from. + * + * @param {string} sid + * The name or ID of the section to read. + * + * @param {string} [option] + * The option name to read the value from. If the option name is + * omitted or `null`, the entire section is returned instead. + * + * @returns {null|string|string[]|LuCI.uci.SectionObject} + * - Returns a string containing the option value in case of a + * plain UCI option. + * - Returns an array of strings containing the option values in + * case of `option` pointing to an UCI list. + * - Returns a {@link LuCI.uci.SectionObject section object} if + * the `option` argument has been omitted or is `null`. + * - Returns `null` if the config, section or option has not been + * found or if the corresponding configuration is not loaded. + */ + get: function(conf, sid, opt) { + var v = this.state.values, + n = this.state.creates, + c = this.state.changes, + d = this.state.deletes; + + sid = this.resolveSID(conf, sid); + + if (sid == null) + return null; + + /* requested option in a just created section */ + if (n[conf] && n[conf][sid]) { + if (!n[conf]) + return undefined; + + if (opt == null) + return n[conf][sid]; + + return n[conf][sid][opt]; + } + + /* requested an option value */ + if (opt != null) { + /* check whether option was deleted */ + if (d[conf] && d[conf][sid]) { + if (d[conf][sid] === true) + return undefined; + + for (var i = 0; i < d[conf][sid].length; i++) + if (d[conf][sid][i] == opt) + return undefined; + } + + /* check whether option was changed */ + if (c[conf] && c[conf][sid] && c[conf][sid][opt] != null) + return c[conf][sid][opt]; + + /* return base value */ + if (v[conf] && v[conf][sid]) + return v[conf][sid][opt]; + + return undefined; + } + + /* requested an entire section */ + if (v[conf]) + return v[conf][sid]; + + return undefined; + }, + + /** + * Sets the value of the given option within the specified section + * of the given configuration. + * + * If either config, section or option is null, or if `option` begins + * with a dot, the function will do nothing. + * + * @param {string} config + * The name of the configuration to set the option value in. + * + * @param {string} sid + * The name or ID of the section to set the option value in. + * + * @param {string} option + * The option name to set the value for. + * + * @param {null|string|string[]} value + * The option value to set. If the value is `null` or an empty string, + * the option will be removed, otherwise it will be set or overwritten + * with the given value. + */ + set: function(conf, sid, opt, val) { + var v = this.state.values, + n = this.state.creates, + c = this.state.changes, + d = this.state.deletes; + + sid = this.resolveSID(conf, sid); + + if (sid == null || opt == null || opt.charAt(0) == '.') + return; + + if (n[conf] && n[conf][sid]) { + if (val != null) + n[conf][sid][opt] = val; + else + delete n[conf][sid][opt]; + } + else if (val != null && val !== '') { + /* do not set within deleted section */ + if (d[conf] && d[conf][sid] === true) + return; + + /* only set in existing sections */ + if (!v[conf] || !v[conf][sid]) + return; + + if (!c[conf]) + c[conf] = {}; + + if (!c[conf][sid]) + c[conf][sid] = {}; + + /* undelete option */ + if (d[conf] && d[conf][sid]) + d[conf][sid] = d[conf][sid].filter(function(o) { return o !== opt }); + + c[conf][sid][opt] = val; + } + else { + /* only delete in existing sections */ + if (!(v[conf] && v[conf][sid] && v[conf][sid].hasOwnProperty(opt)) && + !(c[conf] && c[conf][sid] && c[conf][sid].hasOwnProperty(opt))) + return; + + if (!d[conf]) + d[conf] = { }; + + if (!d[conf][sid]) + d[conf][sid] = [ ]; + + if (d[conf][sid] !== true) + d[conf][sid].push(opt); + } + }, + + /** + * Remove the given option within the specified section of the given + * configuration. + * + * This function is a convenience wrapper around + * `uci.set(config, section, option, null)`. + * + * @param {string} config + * The name of the configuration to remove the option from. + * + * @param {string} sid + * The name or ID of the section to remove the option from. + * + * @param {string} option + * The name of the option to remove. + */ + unset: function(conf, sid, opt) { + return this.set(conf, sid, opt, null); + }, + + /** + * Gets the value of the given option or the entire section object of + * the first found section of the specified type or the first found + * section of the entire configuration if no type is specfied. + * + * @param {string} config + * The name of the configuration to read the value from. + * + * @param {string} [type] + * The type of the first section to find. If it is `null`, the first + * section of the entire config is read, otherwise the first section + * matching the given type. + * + * @param {string} [option] + * The option name to read the value from. If the option name is + * omitted or `null`, the entire section is returned instead. + * + * @returns {null|string|string[]|LuCI.uci.SectionObject} + * - Returns a string containing the option value in case of a + * plain UCI option. + * - Returns an array of strings containing the option values in + * case of `option` pointing to an UCI list. + * - Returns a {@link LuCI.uci.SectionObject section object} if + * the `option` argument has been omitted or is `null`. + * - Returns `null` if the config, section or option has not been + * found or if the corresponding configuration is not loaded. + */ + get_first: function(conf, type, opt) { + var sid = null; + + this.sections(conf, type, function(s) { + if (sid == null) + sid = s['.name']; + }); + + return this.get(conf, sid, opt); + }, + + /** + * Sets the value of the given option within the first found section + * of the given configuration matching the specified type or within + * the first section of the entire config when no type has is specified. + * + * If either config, type or option is null, or if `option` begins + * with a dot, the function will do nothing. + * + * @param {string} config + * The name of the configuration to set the option value in. + * + * @param {string} [type] + * The type of the first section to find. If it is `null`, the first + * section of the entire config is written to, otherwise the first + * section matching the given type is used. + * + * @param {string} option + * The option name to set the value for. + * + * @param {null|string|string[]} value + * The option value to set. If the value is `null` or an empty string, + * the option will be removed, otherwise it will be set or overwritten + * with the given value. + */ + set_first: function(conf, type, opt, val) { + var sid = null; + + this.sections(conf, type, function(s) { + if (sid == null) + sid = s['.name']; + }); + + return this.set(conf, sid, opt, val); + }, + + /** + * Removes the given option within the first found section of the given + * configuration matching the specified type or within the first section + * of the entire config when no type has is specified. + * + * This function is a convenience wrapper around + * `uci.set_first(config, type, option, null)`. + * + * @param {string} config + * The name of the configuration to set the option value in. + * + * @param {string} [type] + * The type of the first section to find. If it is `null`, the first + * section of the entire config is written to, otherwise the first + * section matching the given type is used. + * + * @param {string} option + * The option name to set the value for. + */ + unset_first: function(conf, type, opt) { + return this.set_first(conf, type, opt, null); + }, + + /** + * Move the first specified section within the given configuration + * before or after the second specified section. + * + * @param {string} config + * The configuration to move the section within. + * + * @param {string} sid1 + * The ID of the section to move within the configuration. + * + * @param {string} [sid2] + * The ID of the target section for the move operation. If the + * `after` argument is `false` or not specified, the section named by + * `sid1` will be moved before this target section, if the `after` + * argument is `true`, the `sid1` section will be moved after this + * section. + * + * When the `sid2` argument is `null`, the section specified by `sid1` + * is moved to the end of the configuration. + * + * @param {boolean} [after=false] + * When `true`, the section `sid1` is moved after the section `sid2`, + * when `false`, the section `sid1` is moved before `sid2`. + * + * If `sid2` is null, then this parameter has no effect and the section + * `sid1` is moved to the end of the configuration instead. + * + * @returns {boolean} + * Returns `true` when the section was successfully moved, or `false` + * when either the section specified by `sid1` or by `sid2` is not found. + */ + move: function(conf, sid1, sid2, after) { + var sa = this.sections(conf), + s1 = null, s2 = null; + + sid1 = this.resolveSID(conf, sid1); + sid2 = this.resolveSID(conf, sid2); + + for (var i = 0; i < sa.length; i++) { + if (sa[i]['.name'] != sid1) + continue; + + s1 = sa[i]; + sa.splice(i, 1); + break; + } + + if (s1 == null) + return false; + + if (sid2 == null) { + sa.push(s1); + } + else { + for (var i = 0; i < sa.length; i++) { + if (sa[i]['.name'] != sid2) + continue; + + s2 = sa[i]; + sa.splice(i + !!after, 0, s1); + break; + } + + if (s2 == null) + return false; + } + + for (var i = 0; i < sa.length; i++) + this.get(conf, sa[i]['.name'])['.index'] = i; + + this.state.reorder[conf] = true; + + return true; + }, + + /** + * Submits all local configuration changes to the remove `ubus` api, + * adds, removes and reorders remote sections as needed and reloads + * all loaded configurations to resynchronize the local state with + * the remote configuration values. + * + * @returns {string[]} + * Returns a promise resolving to an array of configuration names which + * have been reloaded by the save operation. + */ + save: function() { + var v = this.state.values, + n = this.state.creates, + c = this.state.changes, + d = this.state.deletes, + r = this.state.reorder, + self = this, + snew = [ ], + pkgs = { }, + tasks = []; + + if (n) + for (var conf in n) { + for (var sid in n[conf]) { + var r = { + config: conf, + values: { } + }; + + for (var k in n[conf][sid]) { + if (k == '.type') + r.type = n[conf][sid][k]; + else if (k == '.create') + r.name = n[conf][sid][k]; + else if (k.charAt(0) != '.') + r.values[k] = n[conf][sid][k]; + } + + snew.push(n[conf][sid]); + tasks.push(self.callAdd(r.config, r.type, r.name, r.values)); + } + + pkgs[conf] = true; + } + + if (c) + for (var conf in c) { + for (var sid in c[conf]) + tasks.push(self.callSet(conf, sid, c[conf][sid])); + + pkgs[conf] = true; + } + + if (d) + for (var conf in d) { + for (var sid in d[conf]) { + var o = d[conf][sid]; + tasks.push(self.callDelete(conf, sid, (o === true) ? null : o)); + } + + pkgs[conf] = true; + } + + if (r) + for (var conf in r) + pkgs[conf] = true; + + return Promise.all(tasks).then(function(responses) { + /* + array "snew" holds references to the created uci sections, + use it to assign the returned names of the new sections + */ + for (var i = 0; i < snew.length; i++) + snew[i]['.name'] = responses[i]; + + return self.reorderSections(); + }).then(function() { + pkgs = Object.keys(pkgs); + + self.unload(pkgs); + + return self.load(pkgs); + }); + }, + + /** + * Instructs the remote `ubus` UCI api to commit all saved changes with + * rollback protection and attempts to confirm the pending commit + * operation to cancel the rollback timer. + * + * @param {number} [timeout=10] + * Override the confirmation timeout after which a rollback is triggered. + * + * @returns {Promise<number>} + * Returns a promise resolving/rejecting with the `ubus` RPC status code. + */ + apply: function(timeout) { + var self = this, + date = new Date(); + + if (typeof(timeout) != 'number' || timeout < 1) + timeout = 10; + + return self.callApply(timeout, true).then(function(rv) { + if (rv != 0) + return Promise.reject(rv); + + var try_deadline = date.getTime() + 1000 * timeout; + var try_confirm = function() { + return self.callConfirm().then(function(rv) { + if (rv != 0) { + if (date.getTime() < try_deadline) + window.setTimeout(try_confirm, 250); + else + return Promise.reject(rv); + } + + return rv; + }); + }; + + window.setTimeout(try_confirm, 1000); + }); + }, + + /** + * An UCI change record is a plain array containing the change operation + * name as first element, the affected section ID as second argument + * and an optional third and fourth argument whose meanings depend on + * the operation. + * + * @typedef {string[]} ChangeRecord + * @memberof LuCI.uci + * + * @property {string} 0 + * The operation name - may be one of `add`, `set`, `remove`, `order`, + * `list-add`, `list-del` or `rename`. + * + * @property {string} 1 + * The section ID targeted by the operation. + * + * @property {string} 2 + * The meaning of the third element depends on the operation. + * - For `add` it is type of the section that has been added + * - For `set` it either is the option name if a fourth element exists, + * or the type of a named section which has been added when the change + * entry only contains three elements. + * - For `remove` it contains the name of the option that has been + * removed. + * - For `order` it specifies the new sort index of the section. + * - For `list-add` it contains the name of the list option a new value + * has been added to. + * - For `list-del` it contains the name of the list option a value has + * been removed from. + * - For `rename` it contains the name of the option that has been + * renamed if a fourth element exists, else it contains the new name + * a section has been renamed to if the change entry only contains + * three elements. + * + * @property {string} 4 + * The meaning of the fourth element depends on the operation. + * - For `set` it is the value an option has been set to. + * - For `list-add` it is the new value that has been added to a + * list option. + * - For `rename` it is the new name of an option that has been + * renamed. + */ + + /** + * Fetches uncommitted UCI changes from the remote `ubus` RPC api. + * + * @method + * @returns {Promise<Object<string, Array<LuCI.uci.ChangeRecord>>>} + * Returns a promise resolving to an object containing the configuration + * names as keys and arrays of related change records as values. + */ + changes: rpc.declare({ + object: 'uci', + method: 'changes', + expect: { changes: { } } + }) +}); +</code></pre> + </article> + </section> + + + + +</div> + +<nav> + <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="LuCI.html">LuCI</a></li><li><a href="LuCI.Class.html">Class</a></li><li><a href="LuCI.dom.html">dom</a></li><li><a href="LuCI.fs.html">fs</a></li><li><a href="LuCI.Headers.html">Headers</a></li><li><a href="LuCI.Network.html">Network</a></li><li><a href="LuCI.Network.Device.html">Device</a></li><li><a href="LuCI.Network.Hosts.html">Hosts</a></li><li><a href="LuCI.Network.Protocol.html">Protocol</a></li><li><a href="LuCI.Network.WifiDevice.html">WifiDevice</a></li><li><a href="LuCI.Network.WifiNetwork.html">WifiNetwork</a></li><li><a href="LuCI.Poll.html">Poll</a></li><li><a href="LuCI.Request.html">Request</a></li><li><a href="LuCI.Request.poll.html">poll</a></li><li><a href="LuCI.Response.html">Response</a></li><li><a href="LuCI.rpc.html">rpc</a></li><li><a href="LuCI.uci.html">uci</a></li><li><a href="LuCI.view.html">view</a></li><li><a href="LuCI.XHR.html">XHR</a></li></ul> +</nav> + +<br class="clear"> + +<footer> + Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a> on Tue Nov 05 2019 09:33:05 GMT+0100 (Central European Standard Time) +</footer> + +<script> prettyPrint(); </script> +<script src="scripts/linenumber.js"> </script> +</body> +</html> diff --git a/jsdoc.conf.json b/jsdoc.conf.json new file mode 100644 index 000000000..87a5b603f --- /dev/null +++ b/jsdoc.conf.json @@ -0,0 +1,22 @@ +{ + "tags": { + "allowUnknownTags": true, + "dictionaries": ["jsdoc","closure"] + }, + "source": { + "include": ["modules/luci-base/htdocs/luci-static/resources"], + "includePattern": ".+\\.js(doc|x)?$" + }, + "plugins": [ + "plugins/markdown" + ], + "templates": { + "cleverLinks": true, + "monospaceLinks": true + }, + "opts": { + "destination": "documentation/jsapi", + "recurse": true, + "readme": "README.md" + } +} diff --git a/package.json b/package.json new file mode 100644 index 000000000..30ad4264b --- /dev/null +++ b/package.json @@ -0,0 +1,8 @@ +{ + "scripts": { + "doc": "jsdoc -c jsdoc.conf.json" + }, + "devDependencies": { + "jsdoc": "^3.6.3" + } +} |