mirror of
https://github.com/elastic/kibana.git
synced 2025-04-23 17:28:26 -04:00
Initial sense checkin
This commit is contained in:
parent
10aeee046c
commit
7354035798
63 changed files with 30617 additions and 0 deletions
93
sense/README.md
Normal file
93
sense/README.md
Normal file
|
@ -0,0 +1,93 @@
|
|||
Sense
|
||||
=====
|
||||
|
||||
A JSON aware developer's interface to ElasticSearch. Comes with handy machinery such as syntax highlighting, autocomplete,
|
||||
formatting and code folding.
|
||||
|
||||
[](https://travis-ci.org/bleskes/sense)
|
||||
|
||||
Installation
|
||||
------------
|
||||
|
||||
Sense is installed as a Chrome Extension. Install it from
|
||||
the [Chrome Webstore](http://bit.ly/es_sense) .
|
||||
|
||||
Screenshots
|
||||
-----------
|
||||
|
||||
### Syntax highlighting
|
||||

|
||||
|
||||
### Auto complete
|
||||

|
||||
|
||||
### Broken JSON detection
|
||||

|
||||
|
||||
### History
|
||||

|
||||
|
||||
Other goodies
|
||||
-----
|
||||
|
||||
- Keep multiple requests at hand:
|
||||
|
||||

|
||||
- Copy and paste requests as cURL
|
||||
- Resizable panels
|
||||
- Friendly keyboard shortcuts (for a complete list, click the help button):
|
||||
* `Ctrl/Cmd + I` - Auto indent current request.
|
||||
* `Ctrl + Space` - Open Auto complete (even if not typing).
|
||||
* `Ctrl/Cmd + Enter` - Submit request.
|
||||
* `Ctrl/Cmd + Shift + C` - Copy request in cURL format.
|
||||
* `Ctrl/Cmd + Up/Down` - Jump to the previous/next request start or end.
|
||||
* `Ctrl/Cmd + Alt + L` - Collapse/expand current scope.
|
||||
|
||||
Changes
|
||||
-------
|
||||
|
||||
### v0.8
|
||||
- Major rewrite to support multiple requests in the editor.
|
||||
- You can now move the split between editor & output.
|
||||
- New shortcuts to navigate through requests quickly (see help).
|
||||
- Improved help popup.
|
||||
- Added editor support for request with multiple documents, separated by a new line.
|
||||
- Auto indent now toggels between single line per doc and multi-line formatted & indented.
|
||||
- Use Tab (as well as Enter) to select autocomplete suggestions.
|
||||
- Auto complete suggestion now sort prefix matches first.
|
||||
- Added a welcome message (which will only be shown once)
|
||||
|
||||
### v0.7
|
||||
- Increased history size to 500 elements
|
||||
- Add mappings to the KB.
|
||||
- Auto complete menu opens automatically when typing (read help for details on keyboard usage)
|
||||
- Added the possibility to indicate an endpoint needs one or more indexes to KB (previously had 0 or more).
|
||||
- GET request ignore editor content and the editor is visually disabled.
|
||||
- Double a click a history item to select it and close.
|
||||
- Changed icons to latest ES icons (thanks to @spenceralger)
|
||||
- Reduced size of method selector (v0.7.9)
|
||||
|
||||
### v0.6
|
||||
- Added support for username passwords in the url.
|
||||
- Added support for cURL copy & paste.
|
||||
- You can now copy current request in curl format (using menu button or a keyboard shortcut)
|
||||
- Paste a curl command into the editor and it will be parsed and all the correct fields populated
|
||||
|
||||
### v0.5
|
||||
- Mapping integration - autocomplete on indices, aliases and fields.
|
||||
- Added facets to the KB.
|
||||
- Enabled soft wrap in both input and output editors
|
||||
|
||||
### v0.4
|
||||
- Completed knowledge base and autocomplete for Query DSL
|
||||
|
||||
### v0.3
|
||||
- Moved to a Chrome Extension for better deployment and upgrading infrastructure.
|
||||
- Introduced a knowledge base system to better manage growing size.
|
||||
- Added an automated test suite.
|
||||
|
||||
### v0.2
|
||||
- History support
|
||||
|
||||
### v0.1
|
||||
- Initial release
|
209
sense/css/sense.css
Normal file
209
sense/css/sense.css
Normal file
|
@ -0,0 +1,209 @@
|
|||
body {
|
||||
margin: 0;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.pull-right-btn {
|
||||
float: right;
|
||||
margin-right: 5px;
|
||||
}
|
||||
|
||||
.pull-right-btn:first-of-type {
|
||||
margin-right: 0;
|
||||
}
|
||||
|
||||
#es_method {
|
||||
width: 100px;
|
||||
}
|
||||
|
||||
#editor_actions {
|
||||
position: absolute;
|
||||
top: 47px;
|
||||
right: 100%;
|
||||
margin-right: -468px;
|
||||
z-index: 100;
|
||||
}
|
||||
|
||||
#editor_actions > .btn-group > a {
|
||||
padding: 2px 4px;
|
||||
}
|
||||
|
||||
#editor_actions > .btn-group > a:hover {
|
||||
padding: 2px 4px;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.editor_position {
|
||||
position: absolute;
|
||||
top: 50px;
|
||||
bottom: 0;
|
||||
left: 5px;
|
||||
width: 468px;
|
||||
}
|
||||
|
||||
.overlay {
|
||||
background-color: #000;
|
||||
opacity: 0.5;
|
||||
z-index: 100;
|
||||
}
|
||||
|
||||
#output {
|
||||
position: absolute;
|
||||
top: 50px;
|
||||
bottom: 0;
|
||||
left: 488px;
|
||||
right: 5px;
|
||||
min-width: 700px;
|
||||
}
|
||||
|
||||
#autocomplete {
|
||||
visibility: hidden;
|
||||
position: absolute;
|
||||
z-index: 1000;
|
||||
margin-top: 22px;
|
||||
/*font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', 'source-code-pro', monospace;*/
|
||||
/*font-size: 12px;*/
|
||||
/*max-height: 100px;*/
|
||||
/*overflow-y: auto;*/
|
||||
/* prevent horizontal scrollbar */
|
||||
/*overflow-x: hidden;*/
|
||||
}
|
||||
|
||||
|
||||
.ui-state-focus {
|
||||
margin: auto !important;
|
||||
}
|
||||
|
||||
#history_popup {
|
||||
width: 90%;
|
||||
margin-left: -45%;
|
||||
height: 90%;
|
||||
top: 5%;
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
#history_popup .modal-body {
|
||||
}
|
||||
|
||||
#history_popup .modal-header {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
}
|
||||
|
||||
#history_popup .modal-footer {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
}
|
||||
|
||||
#history_popup .nav {
|
||||
position: absolute;
|
||||
width: 400px;
|
||||
left: 0;
|
||||
top: 60px;
|
||||
bottom: 70px;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
#example_editor_container {
|
||||
width: 100%;
|
||||
height: 10em;
|
||||
margin: 10px 0;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
#example_editor_container #example_editor {
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
right: 0;
|
||||
left: 0;
|
||||
}
|
||||
|
||||
.icon-chevron-right {
|
||||
position: absolute;
|
||||
right: 10px;
|
||||
margin-top: 2px;
|
||||
margin-right: -6px;
|
||||
opacity: .25;
|
||||
}
|
||||
|
||||
#history_popup .nav a {
|
||||
display: block;
|
||||
margin: 0 0 -1px;
|
||||
padding: 8px 14px;
|
||||
border: 1px solid #e5e5e5;
|
||||
white-space: nowrap;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
#history_popup .nav li:first-child > a {
|
||||
-webkit-border-radius: 6px 6px 0 0;
|
||||
-moz-border-radius: 6px 6px 0 0;
|
||||
border-radius: 6px 6px 0 0;
|
||||
}
|
||||
|
||||
#history_popup .nav li:last-child > a {
|
||||
-webkit-border-radius: 0 0 6px 6px;
|
||||
-moz-border-radius: 0 0 6px 6px;
|
||||
border-radius: 0 0 6px 6px;
|
||||
}
|
||||
|
||||
#history_viewer {
|
||||
position: absolute;
|
||||
left: 430px;
|
||||
right: 0;
|
||||
margin-right: 9px;
|
||||
top: 60px;
|
||||
bottom: 70px;
|
||||
}
|
||||
|
||||
#welcome_popup {
|
||||
top: 40%;
|
||||
}
|
||||
|
||||
#welcome_popup .modal-body {
|
||||
max-height: 600px;
|
||||
}
|
||||
|
||||
.ui-autocomplete {
|
||||
z-index: 400 !important;
|
||||
}
|
||||
|
||||
.ace_editor {
|
||||
line-height: normal;
|
||||
}
|
||||
|
||||
.out_of_screen {
|
||||
width: 1px;
|
||||
height: 1px;
|
||||
overflow: hidden;
|
||||
margin-left: -1000px;
|
||||
}
|
||||
|
||||
.ace_snippet-marker {
|
||||
position: absolute;
|
||||
width: 100% !important;
|
||||
}
|
||||
|
||||
.ui-resizable-e {
|
||||
cursor: ew-resize;
|
||||
width: 10px;
|
||||
right: -5px;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
background-color: transparent;
|
||||
position: absolute;
|
||||
z-index: 50 !important;
|
||||
}
|
||||
|
||||
.ui-resizable-e:hover {
|
||||
background-color: rgba(194, 193, 208, 0.80);
|
||||
}
|
||||
|
||||
.ui-resizable-e.active {
|
||||
background-color: rgba(194, 193, 208, 100);
|
||||
}
|
75
sense/css/sense.dark.css
Normal file
75
sense/css/sense.dark.css
Normal file
|
@ -0,0 +1,75 @@
|
|||
|
||||
#editor, #output {
|
||||
outline: 1px solid #101214;
|
||||
border-top: 1px solid #3e444c;
|
||||
}
|
||||
|
||||
.ace_url {
|
||||
color: #66D9EF;
|
||||
}
|
||||
|
||||
.ace_url.ace_param {
|
||||
color: #AE81FF;
|
||||
}
|
||||
|
||||
.ace_url.ace_value {
|
||||
color: #AE81FF;
|
||||
}
|
||||
|
||||
.ace_method {
|
||||
color: #F92672;
|
||||
}
|
||||
|
||||
.ace_snippet-marker {
|
||||
background: rgba(194, 193, 208, 0.05);
|
||||
/*border: 1px dotted rgba(211, 208, 235, 0.62); */
|
||||
}
|
||||
|
||||
.ace_snippet-marker.ace_start {
|
||||
border-top: dotted 1px rgba(194, 193, 208, 0.30);
|
||||
}
|
||||
|
||||
.ace_snippet-marker.ace_start + .ace_snippet-marker {
|
||||
border-bottom: dotted 1px rgba(194, 193, 208, 0.30);
|
||||
}
|
||||
|
||||
#editor .ace_active-line {
|
||||
background-color: rgba(255, 255, 255, 0.10) !important;
|
||||
}
|
||||
|
||||
#output .ace_active-line {
|
||||
background-color: transparent !important;
|
||||
}
|
||||
|
||||
#request_wrench i {
|
||||
color: #c8c8c8;
|
||||
}
|
||||
|
||||
#send i {
|
||||
color: #7EB26D;
|
||||
}
|
||||
|
||||
|
||||
.ui-menu {
|
||||
background-color: #3a3f44;
|
||||
border: 1px solid rgba(0,0,0,0.2);
|
||||
color: #7a8288;
|
||||
}
|
||||
|
||||
.ui-menu .ui-menu-item {
|
||||
color: #7a8288;
|
||||
}
|
||||
|
||||
.ui-menu .ui-state-focus {
|
||||
color: white;
|
||||
background-color: #202328;
|
||||
}
|
||||
|
||||
/* fix for mismatch with light theme */
|
||||
input.span5 {
|
||||
width: 366px;
|
||||
}
|
||||
.container-fluid {
|
||||
padding-left: 20px;
|
||||
padding-right: 20px;
|
||||
}
|
57
sense/css/sense.light.css
Normal file
57
sense/css/sense.light.css
Normal file
|
@ -0,0 +1,57 @@
|
|||
|
||||
body {
|
||||
background-color: #f7f7f7;
|
||||
}
|
||||
|
||||
#editor, #output {
|
||||
outline: 1px solid #ccc;
|
||||
border-top: 1px solid #ffffff;
|
||||
}
|
||||
|
||||
.ace_url {
|
||||
color: #0088cc;
|
||||
}
|
||||
|
||||
.ace_url.ace_param {
|
||||
color: rgb(49, 132, 149);
|
||||
}
|
||||
|
||||
.ace_url.ace_value {
|
||||
color: rgb(3, 106, 7);
|
||||
}
|
||||
|
||||
.ace_method {
|
||||
color: rgb(197, 6, 11);
|
||||
}
|
||||
|
||||
.ace_snippet-marker {
|
||||
background: rgba(194, 193, 208, 0.20);
|
||||
/*border: 1px dotted rgba(211, 208, 235, 0.62); */
|
||||
}
|
||||
|
||||
.ace_snippet-marker.ace_start {
|
||||
border-top: dotted 1px rgba(194, 193, 208, 0.80);
|
||||
}
|
||||
|
||||
.ace_snippet-marker.ace_start + .ace_snippet-marker {
|
||||
border-bottom: dotted 1px rgba(194, 193, 208, 0.80);
|
||||
}
|
||||
|
||||
#request_wrench i {
|
||||
color: rgb(51, 51, 51);
|
||||
}
|
||||
|
||||
#send i {
|
||||
color: rgb(112, 186, 86);
|
||||
}
|
||||
|
||||
|
||||
.ui-menu {
|
||||
background-color: white;
|
||||
border: 1px solid #CCC
|
||||
}
|
||||
|
||||
.ui-state-focus {
|
||||
color: white;
|
||||
background-color: #08C;
|
||||
}
|
BIN
sense/favicon.ico
Normal file
BIN
sense/favicon.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.1 KiB |
210
sense/index.html
Normal file
210
sense/index.html
Normal file
|
@ -0,0 +1,210 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en" xmlns="http://www.w3.org/1999/html">
|
||||
<head>
|
||||
<title>Sense - a JSON aware interface to ElasticSearch</title>
|
||||
<link id="bootstrapThemeCss" href="lib/bootstrap/css/bootstrap.light.min.css" type="text/css" rel="stylesheet"/>
|
||||
<link href="lib/font-awesome/css/font-awesome.min.css" type="text/css" rel="stylesheet"/>
|
||||
<link href="lib/jqueryui/jquery-ui-1.9.2.custom.min.css" type="text/css" rel="stylesheet"/>
|
||||
<link href="css/sense.css" rel="stylesheet" type="text/css"/>
|
||||
<link id="senseThemeCss" href="css/sense.light.css" rel="stylesheet" type="text/css"/>
|
||||
</head>
|
||||
<body>
|
||||
<div class="navbar navbar-static-top">
|
||||
<div class="navbar-inner">
|
||||
<div class="container-fluid">
|
||||
<span class="brand" id="server_label">Server</span>
|
||||
|
||||
<form class="navbar-form pull-left">
|
||||
<input id="es_server" type="text" class="span5" value="localhost:9200"/>
|
||||
</form>
|
||||
<span class="pull-left btn btn-link">
|
||||
<span id="notification" style="visibility: hidden"
|
||||
class="label label-info"></span></span>
|
||||
<ul class="nav pull-right">
|
||||
<li id="history_btn" data-toggle="modal" data-target="#history_popup">
|
||||
<a title="History" href="#" data-placement="bottom"><i class="fa fa-clock-o"></i></a>
|
||||
</li>
|
||||
<li id="settings_btn" data-toggle="modal" data-target="#settings_popup">
|
||||
<a title="Settings" href="#" data-placement="bottom"><i class="fa fa-cog"></i></a>
|
||||
</li>
|
||||
<li id="help_btn" data-toggle="modal" data-target="#help_popup">
|
||||
<a title="Help" href="#" data-placement="bottom"><i class="fa fa-question-circle"></i></a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div id="main" class="container-fluid">
|
||||
<div id="editor" class="editor_position">GET _search
|
||||
{
|
||||
"query": { "match_all": {} }
|
||||
}
|
||||
</div>
|
||||
<div id="output">{}</div>
|
||||
<div id="editor_actions">
|
||||
<ul>
|
||||
<a id="send" href="#" data-toggle="tooltip" title="click to send request"><i
|
||||
class="fa fa-play"></i></a>
|
||||
<a id="request_wrench" data-toggle="dropdown" href="#"><i
|
||||
class="fa fa-wrench"></i></a>
|
||||
<ul class="dropdown-menu">
|
||||
<li><a id="copy_as_curl" tabindex="-1" href="#">Copy as cURL</a></li>
|
||||
<li><a id="auto_indent" tabindex="-1" href="#">Auto indent</a></li>
|
||||
</ul>
|
||||
</ul>
|
||||
</div>
|
||||
<ul id="autocomplete" style="left: -1000px;"></ul>
|
||||
</div>
|
||||
|
||||
|
||||
<div id="help_popup" class="modal hide fade" data-keyboard="true">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
|
||||
<h3>Help</h3>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<h4>Request format</h4>
|
||||
|
||||
<div id="help_requests">
|
||||
You can type one or more requests in the white editor. Sense understands requests in a compact format:
|
||||
<div id="example_editor_container">
|
||||
</div>
|
||||
</div>
|
||||
<h4>Keyboard tips</h4>
|
||||
<dl class="dl-horizontal">
|
||||
<dt></dt>
|
||||
<dd><strong>General editing</strong></dd>
|
||||
<dt>Ctrl/Cmd + I</dt>
|
||||
<dd>Auto indent current request</dd>
|
||||
<dt>Ctrl + Space</dt>
|
||||
<dd>Open Auto complete (even if not typing)</dd>
|
||||
<dt>Ctrl/Cmd + Enter</dt>
|
||||
<dd>Submit request</dd>
|
||||
<dt>Ctrl/Cmd + Shift + C</dt>
|
||||
<dd>Copy request in cURL format</dd>
|
||||
<dt>Ctrl/Cmd + Up/Down</dt>
|
||||
<dd>Jump to the previous/next request start or end.</dd>
|
||||
<dt>Ctrl/Cmd + Alt + L</dt>
|
||||
<dd>Collapse/expand current scope.</dd>
|
||||
</dl>
|
||||
<dl class="dl-horizontal">
|
||||
<dt></dt>
|
||||
<dd><strong>When auto-complete is visible</strong></dd>
|
||||
<dt>Down arrow</dt>
|
||||
<dd>Switch focus to auto-complete menu. Use arrows to further select a term</dd>
|
||||
<dt>Enter/Tab</dt>
|
||||
<dd>Select the currently selected or the top most term in auto-complete menu</dd>
|
||||
<dt>Esc</dt>
|
||||
<dd>Close auto-complete menu</dd>
|
||||
</dl>
|
||||
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<a href="#" class="btn btn-primary" data-dismiss="modal" aria-hidden="true">Got it</a>
|
||||
</div>
|
||||
</div>
|
||||
<div id="history_popup" class="modal hide fade" data-keyboard="true">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
|
||||
<h3>History</h3>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<ul class="nav nav-list">
|
||||
<!--<li><a href="#"><i class="icon-chevron-right"></i><span></span></a></li>-->
|
||||
</ul>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<a href="#" class="btn pull-left" id="hist_clear">Clear</a>
|
||||
|
||||
<a href="#" class="btn" data-dismiss="modal">Cancel</a>
|
||||
<a href="#" class="btn btn-primary" data-dismiss="modal" aria-hidden="true">Apply</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div id="settings_popup" class="modal hide fade" data-keyboard="true">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
|
||||
<h3>Settings</h3>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<form class="form-horizontal">
|
||||
<div class="control-group">
|
||||
<div class="controls">
|
||||
<h5>Editor & Output pane settings</h5>
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="font_size">Font Size</label>
|
||||
<div class="controls">
|
||||
<input type="number" id="font_size">
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<div class="controls">
|
||||
<label class="checkbox">
|
||||
<input id="wrap_mode" type="checkbox"> Wrap long lines </input>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="font_size">Theme</label>
|
||||
<div class="controls">
|
||||
<select id="theme">
|
||||
<option value="dark">Dark</option>
|
||||
<option value="light">Light</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<a href="#" class="btn" data-dismiss="modal">Cancel</a>
|
||||
<a id="accept_settings" href="#" class="btn btn-primary" data-dismiss="modal" aria-hidden="true">Save</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div id="welcome_popup" class="modal hide fade" data-keyboard="true" data-remote="welcome.html">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
|
||||
<h3>Welcome to Sense</h3>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<a href="#" class="btn btn-primary" data-dismiss="modal" aria-hidden="true">Get to work</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<textarea class="out_of_screen" id="clipboardStaging"> </textarea>
|
||||
|
||||
</body>
|
||||
<script src="lib/jquery-1.8.3.min.js" type="text/javascript"></script>
|
||||
<script src="lib/jqueryui/jquery-ui-1.9.2.custom.min.js" type="text/javascript"></script>
|
||||
<script src="lib/bootstrap/js/bootstrap.min.js" type="text/javascript"></script>
|
||||
<script src="lib/moment.min.js" type="text/javascript"></script>
|
||||
<script src="lib/src-noconflict/ace.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="src/utils.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="src/kb.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="kb/aliases.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="kb/cluster.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="kb/filter.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="kb/facets.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="kb/globals.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="kb/indices.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="kb/query.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="kb/search.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="kb/settings.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="kb/templates.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="kb/warmers.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="kb/mappings.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="kb/misc.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="src/curl.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="src/settings.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="src/base.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="src/mappings.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="src/history.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="src/autocomplete.js" type="text/javascript" charset="utf-8"></script>
|
||||
</html>
|
34
sense/kb/aliases.js
Normal file
34
sense/kb/aliases.js
Normal file
|
@ -0,0 +1,34 @@
|
|||
sense.kb.addEndpointDescription('_aliases', {
|
||||
match: /_aliases/,
|
||||
def_method: "GET",
|
||||
methods: ["GET", "POST"],
|
||||
endpoint_autocomplete: [
|
||||
"_aliases"
|
||||
],
|
||||
indices_mode: "multi",
|
||||
types_mode: "none",
|
||||
doc_id_mode: "none",
|
||||
data_autocomplete_rules: {
|
||||
"actions": {
|
||||
__template: [
|
||||
{ "add": { "index": "test1", "alias": "alias1" } }
|
||||
],
|
||||
__any_of: [
|
||||
{
|
||||
add: {
|
||||
index: "$INDEX$",
|
||||
alias: "",
|
||||
filter: {},
|
||||
routing: "1",
|
||||
search_routing: "1,2",
|
||||
index_routing: "1"
|
||||
},
|
||||
remove: {
|
||||
index: "",
|
||||
alias: ""
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
});
|
34
sense/kb/cluster.js
Normal file
34
sense/kb/cluster.js
Normal file
|
@ -0,0 +1,34 @@
|
|||
sense.kb.addEndpointDescription('_cluster/nodes/stats', {
|
||||
methods: ["GET"],
|
||||
indices_mode: "none",
|
||||
types_mode: "none"
|
||||
});
|
||||
sense.kb.addEndpointDescription('_cluster/state', {
|
||||
methods: ["GET"],
|
||||
endpoint_autocomplete: ['_cluster/state'],
|
||||
indices_mode: "none",
|
||||
types_mode: "none"
|
||||
});
|
||||
|
||||
sense.kb.addEndpointDescription('_cluster/health', {
|
||||
methods: ["GET"],
|
||||
endpoint_autocomplete: ['_cluster/health'],
|
||||
indices_mode: "none",
|
||||
types_mode: "none"
|
||||
});
|
||||
|
||||
sense.kb.addEndpointDescription('_cluster/settings', {
|
||||
methods: ["GET", "PUT"],
|
||||
endpoint_autocomplete: ['_cluster/settings'],
|
||||
indices_mode: "none",
|
||||
types_mode: "none",
|
||||
data_autocomplete_rules: {
|
||||
persistent: {
|
||||
"routing.allocation.same_shard.host" : { __one_of: [ false, true ]}
|
||||
},
|
||||
|
||||
transient: {
|
||||
__scope_link: ".persistent"
|
||||
}
|
||||
}
|
||||
});
|
92
sense/kb/facets.js
Normal file
92
sense/kb/facets.js
Normal file
|
@ -0,0 +1,92 @@
|
|||
sense.kb.addGlobalAutocompleteRules("facets", {
|
||||
"*": {
|
||||
terms: {
|
||||
__template: {
|
||||
field: "FIELD",
|
||||
size: 10
|
||||
},
|
||||
field: "$FIELD$",
|
||||
fields: ["$FIELD$"],
|
||||
size: 10,
|
||||
script: "",
|
||||
script_field: "",
|
||||
order: { __one_of: ["count", "term", "reverse_count", "reverse_term"]},
|
||||
all_terms: { __one_of: [false, true]},
|
||||
exclude: ["TERM"],
|
||||
regex: "",
|
||||
regex_flags: ""
|
||||
},
|
||||
range: {
|
||||
__template: {
|
||||
field: "FIELD",
|
||||
ranges: [
|
||||
{ "to": 50 },
|
||||
{ "from": 20, "to": 70 },
|
||||
{ "from": 70, "to": 120 },
|
||||
{ "from": 150 }
|
||||
]
|
||||
},
|
||||
field: "$FIELD$",
|
||||
ranges: [
|
||||
{ to: 10, from: 20}
|
||||
]
|
||||
},
|
||||
histogram: {
|
||||
__template: {
|
||||
field: "FIELD", interval: 100
|
||||
},
|
||||
field: "$FIELD$",
|
||||
interval: 100,
|
||||
time_interval: "1.5h",
|
||||
key_field: "$FIELD$",
|
||||
value_field: "$FIELD$",
|
||||
key_script: "",
|
||||
value_script: "",
|
||||
params: {}
|
||||
},
|
||||
date_histogram: {
|
||||
__template: {
|
||||
field: "FIELD",
|
||||
"interval": "day"
|
||||
},
|
||||
field: "$FIELD$",
|
||||
interval: { __one_of: ["year", "quarter", "month", "week", "day", "hour", "minute", "1h", "1d", "1w"]},
|
||||
post_zone: -1,
|
||||
pre_zone: -1,
|
||||
factor: 1000,
|
||||
pre_offset: "1d",
|
||||
post_offset: "1d",
|
||||
key_field: "$FIELD$",
|
||||
value_field: "$FIELD$",
|
||||
value_script: ""
|
||||
},
|
||||
filter: {
|
||||
},
|
||||
query: {
|
||||
},
|
||||
facet_filter: {
|
||||
__scope_link: "GLOBAL.filter"
|
||||
},
|
||||
statistical: {
|
||||
__template: {
|
||||
field: "FIELD"
|
||||
},
|
||||
field: "$FIELD$",
|
||||
fields: ["$FIELD$"],
|
||||
script: ""
|
||||
},
|
||||
terms_stats: {
|
||||
__template: {
|
||||
key_field: "FIELD",
|
||||
value_field: "FIELD"
|
||||
},
|
||||
key_field: "$FIELD$",
|
||||
value_field: "$FIELD$",
|
||||
value_script: "",
|
||||
size: 10,
|
||||
order: {__one_of: ["count", "term", "reverse_term", "reverse_count", "total", "reverse_total",
|
||||
"min", "reverse_min", "max", "reverse_max", "mean", "reverse_mean"]}
|
||||
}
|
||||
}
|
||||
}
|
||||
);
|
255
sense/kb/filter.js
Normal file
255
sense/kb/filter.js
Normal file
|
@ -0,0 +1,255 @@
|
|||
sense.kb.addGlobalAutocompleteRules("filter", {
|
||||
and: {
|
||||
__template: {
|
||||
filters: [
|
||||
{}
|
||||
]
|
||||
},
|
||||
filters: [
|
||||
{ __scope_link: ".filter" }
|
||||
],
|
||||
_cache: {__one_of: [ false, true ]}
|
||||
},
|
||||
bool: {
|
||||
must: [
|
||||
{ __scope_link: ".filter"}
|
||||
],
|
||||
must_not: [
|
||||
{ __scope_link: ".filter"}
|
||||
],
|
||||
should: [
|
||||
{ __scope_link: ".filter"}
|
||||
],
|
||||
_cache: {__one_of: [ false, true ]}
|
||||
},
|
||||
exists: {
|
||||
__template: { "FIELD": "VALUE"},
|
||||
"$FIELD$": ""
|
||||
},
|
||||
ids: {
|
||||
__template: { "values": ["ID"] },
|
||||
"type": "$TYPE$",
|
||||
"values": [""]
|
||||
},
|
||||
limit: {
|
||||
__template: { value: 100},
|
||||
value: 100
|
||||
},
|
||||
type: {
|
||||
__template: { value: "TYPE"},
|
||||
value: "$TYPE$"
|
||||
},
|
||||
geo_bounding_box: {
|
||||
__template: {
|
||||
"FIELD": {
|
||||
"top_left": {
|
||||
"lat": 40.73,
|
||||
"lon": -74.1
|
||||
},
|
||||
"bottom_right": {
|
||||
"lat": 40.717,
|
||||
"lon": -73.99
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
"$FIELD$": {
|
||||
top_left: { lat: 40.73, lon: -74.1 },
|
||||
bottom_right: { lat: 40.73, lon: -74.1 }
|
||||
},
|
||||
type: { __one_of: ["memory", "indexed"]},
|
||||
_cache: {__one_of: [ false, true ]}
|
||||
},
|
||||
geo_distance: {
|
||||
__template: {
|
||||
distance: 100,
|
||||
distance_unit: "km",
|
||||
"FIELD": { lat: 40.73, lon: -74.1 }
|
||||
},
|
||||
distance: 100,
|
||||
distance_unit: { __one_of: [ "km", "miles"]},
|
||||
distance_type: { __one_of: [ "arc", "plane"]},
|
||||
optimize_bbox: { __one_of: [ "memory", "indexed", "none"]},
|
||||
"$FIELD$": { lat: 40.73, lon: -74.1 },
|
||||
_cache: {__one_of: [ false, true ]}
|
||||
},
|
||||
geo_distance_range: {
|
||||
__template: {
|
||||
from: 100,
|
||||
to: 200,
|
||||
distance_unit: "km",
|
||||
"FIELD": { lat: 40.73, lon: -74.1 }
|
||||
},
|
||||
from: 100,
|
||||
to: 200,
|
||||
|
||||
distance_unit: { __one_of: [ "km", "miles"]},
|
||||
distance_type: { __one_of: [ "arc", "plane"]},
|
||||
include_lower: { __one_of: [ true, false]},
|
||||
include_upper: { __one_of: [ true, false]},
|
||||
|
||||
"$FIELD$": { lat: 40.73, lon: -74.1 },
|
||||
_cache: {__one_of: [ false, true ]}
|
||||
},
|
||||
geo_polygon: {
|
||||
__template: {
|
||||
"FIELD": {
|
||||
"points": [
|
||||
{ lat: 40.73, lon: -74.1 },
|
||||
{ lat: 40.83, lon: -75.1 }
|
||||
]
|
||||
}
|
||||
},
|
||||
"$FIELD$": {
|
||||
points: [
|
||||
{ lat: 40.73, lon: -74.1 }
|
||||
]
|
||||
},
|
||||
_cache: {__one_of: [ false, true ]}
|
||||
},
|
||||
geo_shape: {
|
||||
__template: {
|
||||
"FIELD": {
|
||||
shape: {
|
||||
type: "envelope",
|
||||
coordinates: [
|
||||
[-45, 45],
|
||||
[45, -45]
|
||||
]
|
||||
},
|
||||
"relation": "within"
|
||||
}
|
||||
},
|
||||
"$FIELD$": {
|
||||
shape: {
|
||||
type: "",
|
||||
coordinates: []
|
||||
},
|
||||
indexed_shape: {
|
||||
id: "",
|
||||
index: "$INDEX$",
|
||||
type: "$TYPE$",
|
||||
shape_field_name: "shape"
|
||||
},
|
||||
relation: { __one_of: ["within", "intersects", "disjoint"]}
|
||||
}
|
||||
},
|
||||
has_child: {
|
||||
__template: {
|
||||
type: "TYPE",
|
||||
query: {}
|
||||
},
|
||||
type: "$TYPE$",
|
||||
query: {},
|
||||
_scope: ""
|
||||
},
|
||||
has_parent: {
|
||||
__template: {
|
||||
type: "TYPE",
|
||||
query: {}
|
||||
},
|
||||
type: "$TYPE$",
|
||||
query: {},
|
||||
_scope: ""
|
||||
},
|
||||
match_all: { },
|
||||
missing: {
|
||||
__template: {
|
||||
field: "FIELD"
|
||||
},
|
||||
existence: { __one_of: [ true, false]},
|
||||
null_value: { __one_of: [ true, false]},
|
||||
field: "$FIELD$"
|
||||
},
|
||||
not: {
|
||||
__template: {
|
||||
filter: {}
|
||||
},
|
||||
filter: { __scope_link: ".filter"},
|
||||
_cache: { __one_of: [ true, false]}
|
||||
},
|
||||
numeric_range: {
|
||||
__template: {
|
||||
"FIELD": {
|
||||
from: 10,
|
||||
to: 20
|
||||
}
|
||||
},
|
||||
from: 1,
|
||||
to: 20,
|
||||
include_lower: { __one_of: [ true, false]},
|
||||
include_upper: { __one_of: [ true, false]}
|
||||
},
|
||||
or: {
|
||||
__template: {
|
||||
filters: [
|
||||
{}
|
||||
]
|
||||
},
|
||||
filters: [
|
||||
{ __scope_link: ".filter" }
|
||||
],
|
||||
_cache: {__one_of: [ false, true ]}
|
||||
},
|
||||
prefix: {
|
||||
__template: {
|
||||
"FIELD": "VALUE"
|
||||
},
|
||||
"$FIELD$": "",
|
||||
_cache: { __one_of: [ true, false]}
|
||||
},
|
||||
query: { __scope_link: ".query"},
|
||||
fquery: {
|
||||
__template: {
|
||||
query: {},
|
||||
_cache: true
|
||||
},
|
||||
query: { __scope_link: ".query"},
|
||||
_cache: { __one_of: [ true, false]}
|
||||
},
|
||||
range: {
|
||||
__template: {
|
||||
"FIELD": {
|
||||
from: 10,
|
||||
to: 20
|
||||
}
|
||||
},
|
||||
from: 1,
|
||||
to: 20,
|
||||
include_lower: { __one_of: [ true, false]},
|
||||
include_upper: { __one_of: [ true, false]},
|
||||
_cache: { __one_of: [ false, true ]}
|
||||
},
|
||||
script: {
|
||||
__template: {
|
||||
script: "SCRIPT",
|
||||
params: {}
|
||||
},
|
||||
script: "",
|
||||
params: {},
|
||||
_cache: { __one_of: [ true, false]}
|
||||
},
|
||||
term: {
|
||||
__template: {
|
||||
"FIELD": "VALUE"
|
||||
},
|
||||
"$FIELD$": "",
|
||||
_cache: { __one_of: [ false, true]}
|
||||
},
|
||||
terms: {
|
||||
__template: { "FIELD": ["VALUE1", "VALUE2"]},
|
||||
field: [ "$FIELD$"],
|
||||
execution: { __one_of: [ "plain", "bool", "and", "or", "bool_nocache", "and_nocache", "or_nocache"]},
|
||||
_cache: { __one_of: [ false, true ]}
|
||||
},
|
||||
nested: {
|
||||
__template: {
|
||||
path: "path_to_nested_doc",
|
||||
query: {}
|
||||
},
|
||||
query: {},
|
||||
path: "",
|
||||
_cache: { __one_of: [ true, false]},
|
||||
_name: ""
|
||||
}
|
||||
});
|
14
sense/kb/globals.js
Normal file
14
sense/kb/globals.js
Normal file
|
@ -0,0 +1,14 @@
|
|||
sense.kb.addGlobalAutocompleteRules("highlight", {
|
||||
pre_tags: {}, post_tags: {}, tags_schema: {},
|
||||
fields: { "$FIELD$": { "fragment_size": 20, "number_of_fragments": 3 }}
|
||||
}
|
||||
);
|
||||
|
||||
// only used with scope links as there is no common name for scripts
|
||||
sense.kb.addGlobalAutocompleteRules("SCRIPT_ENV", {
|
||||
__template: { "script": ""},
|
||||
script: "",
|
||||
lang: "",
|
||||
params: {}
|
||||
}
|
||||
);
|
47
sense/kb/indices.js
Normal file
47
sense/kb/indices.js
Normal file
|
@ -0,0 +1,47 @@
|
|||
sense.kb.addEndpointDescription('_refresh', {
|
||||
def_method: "POST",
|
||||
methods: ["POST"],
|
||||
endpoint_autocomplete: [
|
||||
"_refresh"
|
||||
],
|
||||
indices_mode: "multi"
|
||||
});
|
||||
|
||||
sense.kb.addEndpointDescription('_stats', {
|
||||
def_method: "GET",
|
||||
methods: ["GET"],
|
||||
endpoint_autocomplete: [
|
||||
"_stats"
|
||||
],
|
||||
indices_mode: "multi"
|
||||
});
|
||||
|
||||
sense.kb.addEndpointDescription('_segments', {
|
||||
def_method: "GET",
|
||||
methods: ["GET"],
|
||||
endpoint_autocomplete: [
|
||||
"_segments"
|
||||
],
|
||||
indices_mode: "multi"
|
||||
});
|
||||
|
||||
sense.kb.addEndpointDescription('__create_index__', {
|
||||
methods: ["PUT", "DELETE"],
|
||||
indices_mode: "single",
|
||||
types_mode: "none",
|
||||
match: "^/?$",
|
||||
endpoint_autocomplete: [
|
||||
""
|
||||
],
|
||||
data_autocomplete_rules: {
|
||||
mappings: {
|
||||
__scope_link: "_mapping"
|
||||
},
|
||||
settings: {
|
||||
__scope_link: "_settings.index"
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
});
|
93
sense/kb/mappings.js
Normal file
93
sense/kb/mappings.js
Normal file
|
@ -0,0 +1,93 @@
|
|||
sense.kb.addEndpointDescription('_mapping', {
|
||||
def_method: "GET",
|
||||
methods: ["GET", "PUT"],
|
||||
indices_mode: "multi",
|
||||
types_mode: "multi",
|
||||
data_autocomplete_rules: {
|
||||
"$TYPE$": {
|
||||
__template: {
|
||||
properties: {
|
||||
"FIELD": {}
|
||||
}
|
||||
},
|
||||
"_parent": {
|
||||
__template: {
|
||||
"type": ""
|
||||
},
|
||||
"type": "$TYPE$"
|
||||
},
|
||||
"index_analyzer": "standard",
|
||||
"search_analyzer": "standard",
|
||||
"analyzer": "standard",
|
||||
"dynamic_date_formats": ["yyyy-MM-dd"],
|
||||
"date_detection": { __one_of: [ true, false ]},
|
||||
"numeric_detection": { __one_of: [ true, false ]},
|
||||
"properties": {
|
||||
"*": {
|
||||
type: { __one_of: ["string", "float", "double", "byte", "short", "integer", "long", "date", "boolean",
|
||||
"binary", "object", "nested", "multi_field"]},
|
||||
|
||||
// strings
|
||||
index_name: "",
|
||||
store: { __one_of: ["no", "yes"]},
|
||||
index: { __one_of: ["analyzed", "not_analyzed", "no"]},
|
||||
term_vector: { __one_of: ["no", "yes", "with_offsets", "with_positions", "with_positions_offsets"]},
|
||||
boost: 1.0,
|
||||
null_value: "",
|
||||
omit_norms: { __one_of: [ true, false]},
|
||||
index_options: { __one_of: [ "docs", "freqs", "positions"]},
|
||||
analyzer: "standard",
|
||||
index_analyzer: "standard",
|
||||
search_analyzer: "standard",
|
||||
include_in_all: { __one_of: [ false, true]},
|
||||
ignore_above: 10,
|
||||
position_offset_gap: 0,
|
||||
|
||||
// numeric
|
||||
precision_step: 4,
|
||||
ignore_malformed: { __one_of: [ true, false]},
|
||||
|
||||
// dates
|
||||
format: { __one_of: [ "basic_date", "basic_date_time", "basic_date_time_no_millis",
|
||||
"basic_ordinal_date", "basic_ordinal_date_time", "basic_ordinal_date_time_no_millis",
|
||||
"basic_time", "basic_time_no_millis", "basic_t_time", "basic_t_time_no_millis",
|
||||
"basic_week_date", "basic_week_date_time", "basic_week_date_time_no_millis",
|
||||
"date", "date_hour", "date_hour_minute", "date_hour_minute_second", "date_hour_minute_second_fraction",
|
||||
"date_hour_minute_second_millis", "date_optional_time", "date_time", "date_time_no_millis",
|
||||
"hour", "hour_minute", "hour_minute_second", "hour_minute_second_fraction", "hour_minute_second_millis",
|
||||
"ordinal_date", "ordinal_date_time", "ordinal_date_time_no_millis", "time", "time_no_millis",
|
||||
"t_time", "t_time_no_millis", "week_date", "week_date_time", "weekDateTimeNoMillis", "week_year",
|
||||
"weekyearWeek", "weekyearWeekDay", "year", "year_month", "year_month_day"]},
|
||||
|
||||
fielddata: {
|
||||
filter: {
|
||||
regex: "",
|
||||
frequency: {
|
||||
min: 0.001,
|
||||
max: 0.1,
|
||||
min_segment_size: 500
|
||||
}
|
||||
}
|
||||
},
|
||||
postings_format: { __one_of: ["direct", "memory", "pulsing", "bloom_default", "bloom_pulsing", "default"]},
|
||||
similarity: { __one_of: [ "default", "BM25" ]},
|
||||
|
||||
// objects
|
||||
properties: {
|
||||
__scope_link: "_mapping.$TYPE$.properties"
|
||||
},
|
||||
|
||||
// multi_field
|
||||
path: { __one_of: [ "just_name", "full"]},
|
||||
fields: {
|
||||
"*": {
|
||||
__scope_link: "_mapping.$TYPE$.properties.$FIELD$"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
23
sense/kb/misc.js
Normal file
23
sense/kb/misc.js
Normal file
|
@ -0,0 +1,23 @@
|
|||
sense.kb.addEndpointDescription('_stats', {
|
||||
methods: ["GET"],
|
||||
endpoint_autocomplete: ['_stats'],
|
||||
indices_mode: "multi",
|
||||
types_mode: "none",
|
||||
doc_id_mode: "none"
|
||||
});
|
||||
|
||||
sense.kb.addEndpointDescription('_cache/clear', {
|
||||
methods: ["GET"],
|
||||
endpoint_autocomplete: ['_cache/clear'],
|
||||
indices_mode: "multi",
|
||||
types_mode: "none",
|
||||
doc_id_mode: "none"
|
||||
});
|
||||
sense.kb.addEndpointDescription('_status', {
|
||||
methods: ["GET"],
|
||||
indices_mode: "multi",
|
||||
types_mode: "none",
|
||||
doc_id_mode: "none",
|
||||
endpoint_autocomplete: ['_status']
|
||||
});
|
||||
|
351
sense/kb/query.js
Normal file
351
sense/kb/query.js
Normal file
|
@ -0,0 +1,351 @@
|
|||
SPAN_QUERIES = {
|
||||
// TODO add one_of for objects
|
||||
span_first: {__scope_link: ".query.span_first"},
|
||||
span_near: {__scope_link: ".query.span_near"},
|
||||
span_or: {__scope_link: ".query.span_or"},
|
||||
span_not: {__scope_link: ".query.span_not"},
|
||||
span_term: {__scope_link: ".query.span_term"}
|
||||
};
|
||||
|
||||
sense.kb.addGlobalAutocompleteRules("query", {
|
||||
match: { __template: { "FIELD": "TEXT" },
|
||||
"$FIELD$": {
|
||||
"query": "",
|
||||
"operator": { __one_of: ["and" , "or"]},
|
||||
"type": { __one_of: [ "phrase", "phrase_prefix", "boolean"]},
|
||||
"max_expansions": 10,
|
||||
"analyzer": "",
|
||||
"fuzziness": 1.0,
|
||||
"prefix_length": 1
|
||||
} },
|
||||
match_phrase: { __template: { "FIELD": "PHRASE" },
|
||||
"$FIELD$": {
|
||||
query: "",
|
||||
analyzer: ""
|
||||
} },
|
||||
match_phrase_prefix: { __template: { "FIELD": "PREFIX" },
|
||||
"$FIELD$": {
|
||||
query: "",
|
||||
analyzer: "",
|
||||
max_expansions: 10,
|
||||
prefix_length: 1,
|
||||
fuzziness: 0.1
|
||||
} },
|
||||
multi_match: { __template: { "query": "", "fields": [] },
|
||||
query: "",
|
||||
fields: ["$FIELD$"],
|
||||
use_dis_max: { __template: true, __one_of: [ true, false ]},
|
||||
tie_breaker: 0.0
|
||||
},
|
||||
bool: {
|
||||
must: [
|
||||
{ __scope_link: "GLOBAL.query"}
|
||||
],
|
||||
must_not: [
|
||||
{ __scope_link: "GLOBAL.query"}
|
||||
],
|
||||
should: [
|
||||
{ __scope_link: "GLOBAL.query" }
|
||||
],
|
||||
minimum_number_should_match: 1,
|
||||
boost: 1.0
|
||||
},
|
||||
boosting: {
|
||||
positive: { __scope_link: ".query" },
|
||||
negative: { __scope_link: ".query" },
|
||||
negative_boost: 0.2
|
||||
},
|
||||
ids: { type: "", values: [] },
|
||||
custom_score: {
|
||||
__template: { query: {}, script: ""},
|
||||
query: {},
|
||||
script: "",
|
||||
params: {},
|
||||
lang: "mvel"
|
||||
},
|
||||
custom_boost_factor: {
|
||||
__template: { query: {}, boost_factor: 1.1 },
|
||||
query: {},
|
||||
boost_factor: 1.1
|
||||
},
|
||||
constant_score: {
|
||||
__template: { filter: {}, boost: 1.2 },
|
||||
query: {},
|
||||
filter: {},
|
||||
boost: 1.2
|
||||
},
|
||||
dis_max: {
|
||||
__template: { tie_breaker: 0.7, boost: 1.2, queries: []},
|
||||
tie_breaker: 0.7,
|
||||
boost: 1.2,
|
||||
queries: [
|
||||
{ __scope_link: ".query"}
|
||||
]
|
||||
},
|
||||
field: {
|
||||
"$FIELD$": {
|
||||
query: "", boost: 2.0,
|
||||
enable_position_increments: { __template: false, __one_of: [ true, false ]}
|
||||
} },
|
||||
filtered: {
|
||||
__template: {
|
||||
query: {},
|
||||
filter: {}
|
||||
},
|
||||
query: {},
|
||||
filter: {}
|
||||
},
|
||||
fuzzy_like_this: {
|
||||
fields: [],
|
||||
like_text: "",
|
||||
max_query_terms: 12
|
||||
},
|
||||
flt: {
|
||||
__scope_link: ".query.fuzzy_like_this"
|
||||
},
|
||||
fuzzy: {
|
||||
"$FIELD$": {
|
||||
"value": "",
|
||||
"boost": 1.0,
|
||||
"min_similarity": 0.5,
|
||||
"prefix_length": 0
|
||||
}
|
||||
},
|
||||
has_child: {
|
||||
"type": "$TYPE$",
|
||||
"score_type": { __one_of: ["none", "max", "sum", "avg"]},
|
||||
"_scope": "",
|
||||
"query": {
|
||||
}
|
||||
},
|
||||
has_parent: {
|
||||
"parent_type": "$TYPE$",
|
||||
"score_type": { __one_of: ["none", "score"]},
|
||||
"_scope": "",
|
||||
"query": {
|
||||
}
|
||||
},
|
||||
match_all: {},
|
||||
more_like_this: {
|
||||
__template: {
|
||||
"fields": ["FIELD"],
|
||||
"like_text": "text like this one",
|
||||
"min_term_freq": 1,
|
||||
"max_query_terms": 12
|
||||
},
|
||||
fields: [ "$FIELD$ "],
|
||||
like_text: "",
|
||||
percent_terms_to_match: 0.3,
|
||||
min_term_freq: 2,
|
||||
max_query_terms: 25,
|
||||
stop_words: [""],
|
||||
min_doc_freq: 5,
|
||||
max_doc_freq: 100,
|
||||
min_word_len: 0,
|
||||
max_word_len: 0,
|
||||
boost_terms: 1,
|
||||
boost: 1.0,
|
||||
analyzer: ""
|
||||
},
|
||||
more_like_this_field: {
|
||||
__template: {
|
||||
"FIELD": {
|
||||
"like_text": "text like this one",
|
||||
"min_term_freq": 1,
|
||||
"max_query_terms": 12
|
||||
} },
|
||||
"$FIELD$": {
|
||||
like_text: "",
|
||||
percent_terms_to_match: 0.3,
|
||||
min_term_freq: 2,
|
||||
max_query_terms: 25,
|
||||
stop_words: [""],
|
||||
min_doc_freq: 5,
|
||||
max_doc_freq: 100,
|
||||
min_word_len: 0,
|
||||
max_word_len: 0,
|
||||
boost_terms: 1,
|
||||
boost: 1.0,
|
||||
analyzer: ""
|
||||
}
|
||||
},
|
||||
prefix: {
|
||||
__template: {
|
||||
"FIELD": { "value": "" }
|
||||
},
|
||||
"$FIELD$": {
|
||||
value: "",
|
||||
boost: 1.0
|
||||
}
|
||||
},
|
||||
query_string: {
|
||||
__template: {
|
||||
"default_field": "FIELD",
|
||||
"query": "this AND that OR thus"
|
||||
},
|
||||
query: "",
|
||||
default_field: "$FIELD$",
|
||||
fields: ["$FIELD$"],
|
||||
default_operator: { __one_of: ["OR", "AND"] },
|
||||
analyzer: "",
|
||||
allow_leading_wildcard: { __one_of: [ true, false]},
|
||||
lowercase_expanded_terms: { __one_of: [ true, false]},
|
||||
enable_position_increments: { __one_of: [ true, false]},
|
||||
fuzzy_max_expansions: 50,
|
||||
fuzzy_min_sim: 0.5,
|
||||
fuzzy_prefix_length: 0,
|
||||
phrase_slop: 0,
|
||||
boost: 1.0,
|
||||
analyze_wildcard: { __one_of: [ false, true ]},
|
||||
auto_generate_phrase_queries: { __one_of: [ false, true ]},
|
||||
minimum_should_match: "20%",
|
||||
lenient: { __one_of: [ false, true ]},
|
||||
use_dis_max: { __one_of: [ true, false]},
|
||||
tie_breaker: 0
|
||||
},
|
||||
range: {
|
||||
__template: {
|
||||
"FIELD": {
|
||||
from: 10,
|
||||
to: 20
|
||||
}
|
||||
},
|
||||
"$FIELD$": {
|
||||
__template: { from: 10, to: 20},
|
||||
from: 1,
|
||||
to: 20,
|
||||
include_lower: { __one_of: [ true, false]},
|
||||
include_upper: { __one_of: [ true, false]},
|
||||
boost: 1.0
|
||||
}
|
||||
},
|
||||
span_first: {
|
||||
__template: {
|
||||
"match": {
|
||||
"span_term": { "FIELD": "VALUE" }
|
||||
},
|
||||
"end": 3
|
||||
},
|
||||
match: SPAN_QUERIES
|
||||
},
|
||||
span_near: {
|
||||
__template: {
|
||||
"clauses": [
|
||||
{ span_term: { "FIELD": { "value": "VALUE"} } }
|
||||
],
|
||||
slop: 12,
|
||||
in_order: false
|
||||
},
|
||||
clauses: [
|
||||
SPAN_QUERIES
|
||||
],
|
||||
slop: 12,
|
||||
in_order: {__one_of: [ false, true ]},
|
||||
collect_payloads: {__one_of: [ false, true ]}
|
||||
},
|
||||
span_term: {
|
||||
__template: { "FIELD": { "value": "VALUE"}},
|
||||
"$FIELD$": {
|
||||
value: "",
|
||||
boost: 2.0
|
||||
}
|
||||
},
|
||||
span_not: {
|
||||
__template: {
|
||||
include: {
|
||||
span_term: { "FIELD": { "value": "VALUE"} }
|
||||
},
|
||||
exclude: {
|
||||
span_term: { "FIELD": { "value": "VALUE"} }
|
||||
}
|
||||
},
|
||||
include: SPAN_QUERIES,
|
||||
exclude: SPAN_QUERIES
|
||||
},
|
||||
span_or: {
|
||||
__template: {
|
||||
clauses: [
|
||||
{ span_term: { "FIELD": { "value": "VALUE"} } }
|
||||
]
|
||||
},
|
||||
clauses: [
|
||||
SPAN_QUERIES
|
||||
]
|
||||
},
|
||||
term: {
|
||||
__template: { "FIELD": { value: "VALUE" }},
|
||||
"$FIELD$": {
|
||||
value: "",
|
||||
boost: 2.0
|
||||
}
|
||||
},
|
||||
terms: {
|
||||
__template: {
|
||||
"FIELD": [ "VALUE1", "VALUE2"]
|
||||
},
|
||||
"$FIELD$": [ "" ],
|
||||
minimum_match: 1
|
||||
},
|
||||
top_children: {
|
||||
__template: {
|
||||
type: "CHILD_TYPE",
|
||||
query: {}
|
||||
},
|
||||
type: "$CHILD_TYPE$",
|
||||
query: { },
|
||||
score: { __one_of: [ "max", "sum", "avg"] },
|
||||
factor: 5,
|
||||
incremental_factor: 2
|
||||
},
|
||||
wildcard: {
|
||||
__template: {
|
||||
"FIELD": { value: "VALUE"}
|
||||
},
|
||||
"$FIELD$": { value: "", boost: 2.0 }
|
||||
},
|
||||
nested: {
|
||||
__template: {
|
||||
path: "path_to_nested_doc",
|
||||
query: {}
|
||||
},
|
||||
path: "",
|
||||
query: {},
|
||||
filter: {},
|
||||
score_mode: { __one_of: ["avg", "total", "max", "none"]}
|
||||
},
|
||||
custom_filters_score: {
|
||||
__template: {
|
||||
query: {},
|
||||
filters: [
|
||||
{
|
||||
filter: {}
|
||||
}
|
||||
]
|
||||
},
|
||||
query: {},
|
||||
filters: [
|
||||
{ filter: {}, boost: 2.0, script: ""}
|
||||
],
|
||||
score_mode: { __one_of: [ "first", "min", "max", "total", "avg", "multiply"] },
|
||||
max_boost: 2.0,
|
||||
params: {},
|
||||
lang: ""
|
||||
},
|
||||
indices: {
|
||||
__template: {
|
||||
indices: ["INDEX1", "INDEX2"],
|
||||
query: {}
|
||||
},
|
||||
indices: ["$INDEX$"],
|
||||
query: {},
|
||||
no_match_query: { __scope_link: ".query"}
|
||||
},
|
||||
geo_shape: {
|
||||
__template: {
|
||||
location: {},
|
||||
relation: "within"
|
||||
},
|
||||
__scope_link: ".filter.geo_shape"
|
||||
}
|
||||
|
||||
});
|
68
sense/kb/search.js
Normal file
68
sense/kb/search.js
Normal file
|
@ -0,0 +1,68 @@
|
|||
sense.kb.addEndpointDescription('_search', {
|
||||
def_method: "POST",
|
||||
methods: ["GET", "POST"],
|
||||
endpoint_autocomplete: [
|
||||
"_search"
|
||||
],
|
||||
indices_mode: "multi",
|
||||
types_mode: "multi",
|
||||
doc_id_mode: "none",
|
||||
data_autocomplete_rules: {
|
||||
query: {
|
||||
// populated by a global rule
|
||||
},
|
||||
facets: {
|
||||
__template: {
|
||||
"NAME": {
|
||||
"TYPE": {
|
||||
}
|
||||
}
|
||||
}
|
||||
// populated by a global rule
|
||||
},
|
||||
filter: {
|
||||
// added by global rules.
|
||||
},
|
||||
size: { __template: 20 },
|
||||
from: {},
|
||||
sort: {
|
||||
__template: [
|
||||
{ "FIELD": { "order": "desc"} }
|
||||
],
|
||||
__any_of: [
|
||||
{
|
||||
"$FIELD$": {
|
||||
"order": { __one_of: ["desc", "asc"]}
|
||||
}
|
||||
},
|
||||
"$FIELD$",
|
||||
"_score"
|
||||
]
|
||||
},
|
||||
search_type: {},
|
||||
fields: [ "$FIELD$" ],
|
||||
script_fields: {
|
||||
__template: { "FIELD": {
|
||||
"script": ""
|
||||
}},
|
||||
"*": {
|
||||
__scope_link: "GLOBAL.SCRIPT_ENV"
|
||||
}
|
||||
},
|
||||
partial_fields: {
|
||||
__template: {
|
||||
"NAME": { include: [] }
|
||||
},
|
||||
"*": {
|
||||
include: [],
|
||||
exclude: []
|
||||
}
|
||||
},
|
||||
highlight: {
|
||||
// populated by a global rule
|
||||
},
|
||||
explain: { __one_of: [ true, false ]},
|
||||
stats: [ "" ]
|
||||
|
||||
}
|
||||
});
|
46
sense/kb/settings.js
Normal file
46
sense/kb/settings.js
Normal file
|
@ -0,0 +1,46 @@
|
|||
sense.kb.addEndpointDescription('_settings', {
|
||||
match: /_settings/,
|
||||
methods: ["GET", "PUT"],
|
||||
endpoint_autocomplete: ['_settings'],
|
||||
indices_mode: "multi",
|
||||
types_mode: "none",
|
||||
doc_id_mode: "none",
|
||||
data_autocomplete_rules: {
|
||||
index: {
|
||||
refresh_interval: "1s",
|
||||
number_of_shards: 5,
|
||||
number_of_replicas: 1,
|
||||
"blocks.read_only": { __one_of: [ false, true ]},
|
||||
"blocks.read": { __one_of: [ true, false ]},
|
||||
"blocks.write": { __one_of: [ true, false ]},
|
||||
"blocks.metadata": { __one_of: [ true, false] },
|
||||
term_index_interval: 32,
|
||||
term_index_divisor: 1,
|
||||
"translog.flush_threshold_ops": 5000,
|
||||
"translog.flush_threshold_size": "200mb",
|
||||
"translog.flush_threshold_period": "30m",
|
||||
"translog.disable_flush": { __one_of: [ true, false ]},
|
||||
"cache.filter.max_size": "2gb",
|
||||
"cache.filter.expire": "2h",
|
||||
"gateway.snapshot_interval": "10s",
|
||||
routing: {
|
||||
allocation: {
|
||||
include: { tag: "" },
|
||||
exclude: { tag: ""},
|
||||
require: { tag: ""},
|
||||
total_shards_per_node: -1
|
||||
}
|
||||
},
|
||||
"recovery.initial_shards": { __one_of: ["quorum", "quorum-1", "half", "full", "full-1" ]},
|
||||
"ttl.disable_purge": { __one_of: [ true, false ]},
|
||||
analysis: {
|
||||
analyzer: {},
|
||||
tokenizer: {},
|
||||
filter: {},
|
||||
char_filter: {}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
});
|
18
sense/kb/templates.js
Normal file
18
sense/kb/templates.js
Normal file
|
@ -0,0 +1,18 @@
|
|||
sense.kb.addEndpointDescription('_template', {
|
||||
match: /\/?_template/,
|
||||
def_method: "PUT",
|
||||
methods: ["GET", "PUT", "DELETE"],
|
||||
endpoint_autocomplete: [
|
||||
"_template/TEMPLATE_ID"
|
||||
],
|
||||
indices_mode: "none",
|
||||
types_mode: "none",
|
||||
doc_id_mode: "none",
|
||||
|
||||
data_autocomplete_rules: {
|
||||
template: "index*",
|
||||
warmers: { __scope_link: "_warmer" },
|
||||
mappings: {},
|
||||
settings: {}
|
||||
}
|
||||
});
|
19
sense/kb/warmers.js
Normal file
19
sense/kb/warmers.js
Normal file
|
@ -0,0 +1,19 @@
|
|||
sense.kb.addEndpointDescription('_warmer', {
|
||||
match: /_warmer/,
|
||||
def_method: "PUT",
|
||||
methods: ["GET", "PUT", "DELETE"],
|
||||
endpoint_autocomplete: [
|
||||
"_warmer", "_warmer/WARMER_ID"
|
||||
],
|
||||
indices_mode: "required_multi",
|
||||
types_mode: "none",
|
||||
doc_id_mode: "none",
|
||||
data_autocomplete_rules: {
|
||||
query: {
|
||||
// populated by a global rule
|
||||
},
|
||||
facets: {
|
||||
// populated by a global rule
|
||||
}
|
||||
}
|
||||
});
|
9
sense/lib/bootstrap/css/bootstrap.dark.min.css
vendored
Normal file
9
sense/lib/bootstrap/css/bootstrap.dark.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
9
sense/lib/bootstrap/css/bootstrap.light.min.css
vendored
Normal file
9
sense/lib/bootstrap/css/bootstrap.light.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
9
sense/lib/bootstrap/css/bootstrap.min.css
vendored
Normal file
9
sense/lib/bootstrap/css/bootstrap.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
BIN
sense/lib/bootstrap/img/glyphicons-halflings-white.png
Normal file
BIN
sense/lib/bootstrap/img/glyphicons-halflings-white.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 8.6 KiB |
BIN
sense/lib/bootstrap/img/glyphicons-halflings.png
Normal file
BIN
sense/lib/bootstrap/img/glyphicons-halflings.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 12 KiB |
6
sense/lib/bootstrap/js/bootstrap.min.js
vendored
Normal file
6
sense/lib/bootstrap/js/bootstrap.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
4
sense/lib/font-awesome/css/font-awesome.min.css
vendored
Normal file
4
sense/lib/font-awesome/css/font-awesome.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
BIN
sense/lib/font-awesome/fonts/FontAwesome.otf
Normal file
BIN
sense/lib/font-awesome/fonts/FontAwesome.otf
Normal file
Binary file not shown.
BIN
sense/lib/font-awesome/fonts/fontawesome-webfont.eot
Executable file
BIN
sense/lib/font-awesome/fonts/fontawesome-webfont.eot
Executable file
Binary file not shown.
414
sense/lib/font-awesome/fonts/fontawesome-webfont.svg
Executable file
414
sense/lib/font-awesome/fonts/fontawesome-webfont.svg
Executable file
|
@ -0,0 +1,414 @@
|
|||
<?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="fontawesomeregular" horiz-adv-x="1536" >
|
||||
<font-face units-per-em="1792" ascent="1536" descent="-256" />
|
||||
<missing-glyph horiz-adv-x="448" />
|
||||
<glyph unicode=" " horiz-adv-x="448" />
|
||||
<glyph unicode="	" horiz-adv-x="448" />
|
||||
<glyph unicode=" " horiz-adv-x="448" />
|
||||
<glyph unicode="¨" horiz-adv-x="1792" />
|
||||
<glyph unicode="©" horiz-adv-x="1792" />
|
||||
<glyph unicode="®" horiz-adv-x="1792" />
|
||||
<glyph unicode="´" horiz-adv-x="1792" />
|
||||
<glyph unicode="Æ" horiz-adv-x="1792" />
|
||||
<glyph unicode=" " horiz-adv-x="768" />
|
||||
<glyph unicode=" " />
|
||||
<glyph unicode=" " horiz-adv-x="768" />
|
||||
<glyph unicode=" " />
|
||||
<glyph unicode=" " horiz-adv-x="512" />
|
||||
<glyph unicode=" " horiz-adv-x="384" />
|
||||
<glyph unicode=" " horiz-adv-x="256" />
|
||||
<glyph unicode=" " horiz-adv-x="256" />
|
||||
<glyph unicode=" " horiz-adv-x="192" />
|
||||
<glyph unicode=" " horiz-adv-x="307" />
|
||||
<glyph unicode=" " horiz-adv-x="85" />
|
||||
<glyph unicode=" " horiz-adv-x="307" />
|
||||
<glyph unicode=" " horiz-adv-x="384" />
|
||||
<glyph unicode="™" horiz-adv-x="1792" />
|
||||
<glyph unicode="∞" horiz-adv-x="1792" />
|
||||
<glyph unicode="≠" horiz-adv-x="1792" />
|
||||
<glyph unicode="" horiz-adv-x="500" d="M0 0z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" d="M1699 1350q0 -35 -43 -78l-632 -632v-768h320q26 0 45 -19t19 -45t-19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45t45 19h320v768l-632 632q-43 43 -43 78q0 23 18 36.5t38 17.5t43 4h1408q23 0 43 -4t38 -17.5t18 -36.5z" />
|
||||
<glyph unicode="" d="M1536 1312v-1120q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v537l-768 -237v-709q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89 t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v967q0 31 19 56.5t49 35.5l832 256q12 4 28 4q40 0 68 -28t28 -68z" />
|
||||
<glyph unicode="" horiz-adv-x="1664" d="M1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -52 -38 -90t-90 -38q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5 t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" d="M1664 32v768q-32 -36 -69 -66q-268 -206 -426 -338q-51 -43 -83 -67t-86.5 -48.5t-102.5 -24.5h-1h-1q-48 0 -102.5 24.5t-86.5 48.5t-83 67q-158 132 -426 338q-37 30 -69 66v-768q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1664 1083v11v13.5t-0.5 13 t-3 12.5t-5.5 9t-9 7.5t-14 2.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5q0 -168 147 -284q193 -152 401 -317q6 -5 35 -29.5t46 -37.5t44.5 -31.5t50.5 -27.5t43 -9h1h1q20 0 43 9t50.5 27.5t44.5 31.5t46 37.5t35 29.5q208 165 401 317q54 43 100.5 115.5t46.5 131.5z M1792 1120v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" d="M896 -128q-26 0 -44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5q224 0 351 -124t127 -344q0 -221 -229 -450l-623 -600 q-18 -18 -44 -18z" />
|
||||
<glyph unicode="" horiz-adv-x="1664" d="M1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -21 -10.5 -35.5t-30.5 -14.5q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455 l502 -73q56 -9 56 -46z" />
|
||||
<glyph unicode="" horiz-adv-x="1664" d="M1137 532l306 297l-422 62l-189 382l-189 -382l-422 -62l306 -297l-73 -421l378 199l377 -199zM1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -50 -41 -50q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500 l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455l502 -73q56 -9 56 -46z" />
|
||||
<glyph unicode="" horiz-adv-x="1408" d="M1408 131q0 -120 -73 -189.5t-194 -69.5h-874q-121 0 -194 69.5t-73 189.5q0 53 3.5 103.5t14 109t26.5 108.5t43 97.5t62 81t85.5 53.5t111.5 20q9 0 42 -21.5t74.5 -48t108 -48t133.5 -21.5t133.5 21.5t108 48t74.5 48t42 21.5q61 0 111.5 -20t85.5 -53.5t62 -81 t43 -97.5t26.5 -108.5t14 -109t3.5 -103.5zM1088 1024q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5z" />
|
||||
<glyph unicode="" horiz-adv-x="1920" d="M384 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 320v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 704v128q0 26 -19 45t-45 19h-128 q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 -64v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM384 1088v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45 t45 -19h128q26 0 45 19t19 45zM1792 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 704v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1792 320v128 q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1792 704v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1792 1088v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19 t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1920 1248v-1344q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1344q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
|
||||
<glyph unicode="" horiz-adv-x="1664" d="M768 512v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM768 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 512v-384q0 -52 -38 -90t-90 -38 h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" d="M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 288v-192q0 -40 -28 -68t-68 -28h-320 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28 h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192 q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" d="M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-960 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v192q0 40 28 68t68 28 h960q40 0 68 -28t28 -68zM1792 1312v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" d="M1671 970q0 -40 -28 -68l-724 -724l-136 -136q-28 -28 -68 -28t-68 28l-136 136l-362 362q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -295l656 657q28 28 68 28t68 -28l136 -136q28 -28 28 -68z" />
|
||||
<glyph unicode="" horiz-adv-x="1408" d="M1298 214q0 -40 -28 -68l-136 -136q-28 -28 -68 -28t-68 28l-294 294l-294 -294q-28 -28 -68 -28t-68 28l-136 136q-28 28 -28 68t28 68l294 294l-294 294q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -294l294 294q28 28 68 28t68 -28l136 -136q28 -28 28 -68 t-28 -68l-294 -294l294 -294q28 -28 28 -68z" />
|
||||
<glyph unicode="" horiz-adv-x="1664" d="M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-224q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v224h-224q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h224v224q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5v-224h224 q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5 t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z" />
|
||||
<glyph unicode="" horiz-adv-x="1664" d="M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-576q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h576q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5z M1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z " />
|
||||
<glyph unicode="" d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61t-298 61t-245 164t-164 245t-61 298q0 182 80.5 343t226.5 270q43 32 95.5 25t83.5 -50q32 -42 24.5 -94.5t-49.5 -84.5q-98 -74 -151.5 -181t-53.5 -228q0 -104 40.5 -198.5t109.5 -163.5t163.5 -109.5 t198.5 -40.5t198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5q0 121 -53.5 228t-151.5 181q-42 32 -49.5 84.5t24.5 94.5q31 43 84 50t95 -25q146 -109 226.5 -270t80.5 -343zM896 1408v-640q0 -52 -38 -90t-90 -38t-90 38t-38 90v640q0 52 38 90t90 38t90 -38t38 -90z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" d="M256 96v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM640 224v-320q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v320q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1024 480v-576q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23 v576q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1408 864v-960q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v960q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 1376v-1472q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v1472q0 14 9 23t23 9h192q14 0 23 -9t9 -23z" />
|
||||
<glyph unicode="" d="M1024 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1536 749v-222q0 -12 -8 -23t-20 -13l-185 -28q-19 -54 -39 -91q35 -50 107 -138q10 -12 10 -25t-9 -23q-27 -37 -99 -108t-94 -71q-12 0 -26 9l-138 108q-44 -23 -91 -38 q-16 -136 -29 -186q-7 -28 -36 -28h-222q-14 0 -24.5 8.5t-11.5 21.5l-28 184q-49 16 -90 37l-141 -107q-10 -9 -25 -9q-14 0 -25 11q-126 114 -165 168q-7 10 -7 23q0 12 8 23q15 21 51 66.5t54 70.5q-27 50 -41 99l-183 27q-13 2 -21 12.5t-8 23.5v222q0 12 8 23t19 13 l186 28q14 46 39 92q-40 57 -107 138q-10 12 -10 24q0 10 9 23q26 36 98.5 107.5t94.5 71.5q13 0 26 -10l138 -107q44 23 91 38q16 136 29 186q7 28 36 28h222q14 0 24.5 -8.5t11.5 -21.5l28 -184q49 -16 90 -37l142 107q9 9 24 9q13 0 25 -10q129 -119 165 -170q7 -8 7 -22 q0 -12 -8 -23q-15 -21 -51 -66.5t-54 -70.5q26 -50 41 -98l183 -28q13 -2 21 -12.5t8 -23.5z" />
|
||||
<glyph unicode="" horiz-adv-x="1408" d="M512 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM768 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1024 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576 q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1152 76v948h-896v-948q0 -22 7 -40.5t14.5 -27t10.5 -8.5h832q3 0 10.5 8.5t14.5 27t7 40.5zM480 1152h448l-48 117q-7 9 -17 11h-317q-10 -2 -17 -11zM1408 1120v-64q0 -14 -9 -23t-23 -9h-96v-948q0 -83 -47 -143.5t-113 -60.5h-832 q-66 0 -113 58.5t-47 141.5v952h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h309l70 167q15 37 54 63t79 26h320q40 0 79 -26t54 -63l70 -167h309q14 0 23 -9t9 -23z" />
|
||||
<glyph unicode="" horiz-adv-x="1664" d="M1408 544v-480q0 -26 -19 -45t-45 -19h-384v384h-256v-384h-384q-26 0 -45 19t-19 45v480q0 1 0.5 3t0.5 3l575 474l575 -474q1 -2 1 -6zM1631 613l-62 -74q-8 -9 -21 -11h-3q-13 0 -21 7l-692 577l-692 -577q-12 -8 -24 -7q-13 2 -21 11l-62 74q-8 10 -7 23.5t11 21.5 l719 599q32 26 76 26t76 -26l244 -204v195q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-408l219 -182q10 -8 11 -21.5t-7 -23.5z" />
|
||||
<glyph unicode="" horiz-adv-x="1280" d="M128 0h1024v768h-416q-40 0 -68 28t-28 68v416h-512v-1280zM768 896h376q-10 29 -22 41l-313 313q-12 12 -41 22v-376zM1280 864v-896q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h640q40 0 88 -20t76 -48l312 -312q28 -28 48 -76t20 -88z " />
|
||||
<glyph unicode="" d="M896 992v-448q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
||||
<glyph unicode="" horiz-adv-x="1920" d="M1111 540v4l-24 320q-1 13 -11 22.5t-23 9.5h-186q-13 0 -23 -9.5t-11 -22.5l-24 -320v-4q-1 -12 8 -20t21 -8h244q12 0 21 8t8 20zM1870 73q0 -73 -46 -73h-704q13 0 22 9.5t8 22.5l-20 256q-1 13 -11 22.5t-23 9.5h-272q-13 0 -23 -9.5t-11 -22.5l-20 -256 q-1 -13 8 -22.5t22 -9.5h-704q-46 0 -46 73q0 54 26 116l417 1044q8 19 26 33t38 14h339q-13 0 -23 -9.5t-11 -22.5l-15 -192q-1 -14 8 -23t22 -9h166q13 0 22 9t8 23l-15 192q-1 13 -11 22.5t-23 9.5h339q20 0 38 -14t26 -33l417 -1044q26 -62 26 -116z" />
|
||||
<glyph unicode="" horiz-adv-x="1664" d="M1280 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 416v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h465l135 -136 q58 -56 136 -56t136 56l136 136h464q40 0 68 -28t28 -68zM1339 985q17 -41 -14 -70l-448 -448q-18 -19 -45 -19t-45 19l-448 448q-31 29 -14 70q17 39 59 39h256v448q0 26 19 45t45 19h256q26 0 45 -19t19 -45v-448h256q42 0 59 -39z" />
|
||||
<glyph unicode="" d="M1120 608q0 -12 -10 -24l-319 -319q-11 -9 -23 -9t-23 9l-320 320q-15 16 -7 35q8 20 30 20h192v352q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-352h192q14 0 23 -9t9 -23zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273 t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
||||
<glyph unicode="" d="M1118 660q-8 -20 -30 -20h-192v-352q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v352h-192q-14 0 -23 9t-9 23q0 12 10 24l319 319q11 9 23 9t23 -9l320 -320q15 -16 7 -35zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198 t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
||||
<glyph unicode="" d="M1023 576h316q-1 3 -2.5 8t-2.5 8l-212 496h-708l-212 -496q-1 -2 -2.5 -8t-2.5 -8h316l95 -192h320zM1536 546v-482q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v482q0 62 25 123l238 552q10 25 36.5 42t52.5 17h832q26 0 52.5 -17t36.5 -42l238 -552 q25 -61 25 -123z" />
|
||||
<glyph unicode="" d="M1184 640q0 -37 -32 -55l-544 -320q-15 -9 -32 -9q-16 0 -32 8q-32 19 -32 56v640q0 37 32 56q33 18 64 -1l544 -320q32 -18 32 -55zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
||||
<glyph unicode="" d="M1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l138 138q-148 137 -349 137q-104 0 -198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5q119 0 225 52t179 147q7 10 23 12q14 0 25 -9 l137 -138q9 -8 9.5 -20.5t-7.5 -22.5q-109 -132 -264 -204.5t-327 -72.5q-156 0 -298 61t-245 164t-164 245t-61 298t61 298t164 245t245 164t298 61q147 0 284.5 -55.5t244.5 -156.5l130 129q29 31 70 14q39 -17 39 -59z" />
|
||||
<glyph unicode="" d="M1511 480q0 -5 -1 -7q-64 -268 -268 -434.5t-478 -166.5q-146 0 -282.5 55t-243.5 157l-129 -129q-19 -19 -45 -19t-45 19t-19 45v448q0 26 19 45t45 19h448q26 0 45 -19t19 -45t-19 -45l-137 -137q71 -66 161 -102t187 -36q134 0 250 65t186 179q11 17 53 117 q8 23 30 23h192q13 0 22.5 -9.5t9.5 -22.5zM1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-26 0 -45 19t-19 45t19 45l138 138q-148 137 -349 137q-134 0 -250 -65t-186 -179q-11 -17 -53 -117q-8 -23 -30 -23h-199q-13 0 -22.5 9.5t-9.5 22.5v7q65 268 270 434.5t480 166.5 q146 0 284 -55.5t245 -156.5l130 129q19 19 45 19t45 -19t19 -45z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" d="M384 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M384 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1536 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5z M1536 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5zM1536 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5 t9.5 -22.5zM1664 160v832q0 13 -9.5 22.5t-22.5 9.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5v-832q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1792 1248v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47 t47 -113z" />
|
||||
<glyph unicode="" horiz-adv-x="1152" d="M320 768h512v192q0 106 -75 181t-181 75t-181 -75t-75 -181v-192zM1152 672v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h32v192q0 184 132 316t316 132t316 -132t132 -316v-192h32q40 0 68 -28t28 -68z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" d="M320 1280q0 -72 -64 -110v-1266q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v1266q-64 38 -64 110q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -25 -12.5 -38.5t-39.5 -27.5q-215 -116 -369 -116q-61 0 -123.5 22t-108.5 48 t-115.5 48t-142.5 22q-192 0 -464 -146q-17 -9 -33 -9q-26 0 -45 19t-19 45v742q0 32 31 55q21 14 79 43q236 120 421 120q107 0 200 -29t219 -88q38 -19 88 -19q54 0 117.5 21t110 47t88 47t54.5 21q26 0 45 -19t19 -45z" />
|
||||
<glyph unicode="" horiz-adv-x="1664" d="M1664 650q0 -166 -60 -314l-20 -49l-185 -33q-22 -83 -90.5 -136.5t-156.5 -53.5v-32q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-32q71 0 130 -35.5t93 -95.5l68 12q29 95 29 193q0 148 -88 279t-236.5 209t-315.5 78 t-315.5 -78t-236.5 -209t-88 -279q0 -98 29 -193l68 -12q34 60 93 95.5t130 35.5v32q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v32q-88 0 -156.5 53.5t-90.5 136.5l-185 33l-20 49q-60 148 -60 314q0 151 67 291t179 242.5 t266 163.5t320 61t320 -61t266 -163.5t179 -242.5t67 -291z" />
|
||||
<glyph unicode="" horiz-adv-x="768" d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45z" />
|
||||
<glyph unicode="" horiz-adv-x="1152" d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 35.5 t12 57t-12 57t-29 35.5t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142z" />
|
||||
<glyph unicode="" horiz-adv-x="1664" d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 35.5 t12 57t-12 57t-29 35.5t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142zM1408 640q0 -153 -85 -282.5t-225 -188.5q-13 -5 -25 -5q-27 0 -46 19t-19 45q0 39 39 59q56 29 76 44q74 54 115.5 135.5t41.5 173.5t-41.5 173.5 t-115.5 135.5q-20 15 -76 44q-39 20 -39 59q0 26 19 45t45 19q13 0 26 -5q140 -59 225 -188.5t85 -282.5zM1664 640q0 -230 -127 -422.5t-338 -283.5q-13 -5 -26 -5q-26 0 -45 19t-19 45q0 36 39 59q7 4 22.5 10.5t22.5 10.5q46 25 82 51q123 91 192 227t69 289t-69 289 t-192 227q-36 26 -82 51q-7 4 -22.5 10.5t-22.5 10.5q-39 23 -39 59q0 26 19 45t45 19q13 0 26 -5q211 -91 338 -283.5t127 -422.5z" />
|
||||
<glyph unicode="" horiz-adv-x="1408" d="M384 384v-128h-128v128h128zM384 1152v-128h-128v128h128zM1152 1152v-128h-128v128h128zM128 129h384v383h-384v-383zM128 896h384v384h-384v-384zM896 896h384v384h-384v-384zM640 640v-640h-640v640h640zM1152 128v-128h-128v128h128zM1408 128v-128h-128v128h128z M1408 640v-384h-384v128h-128v-384h-128v640h384v-128h128v128h128zM640 1408v-640h-640v640h640zM1408 1408v-640h-640v640h640z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" d="M63 0h-63v1408h63v-1408zM126 1h-32v1407h32v-1407zM220 1h-31v1407h31v-1407zM377 1h-31v1407h31v-1407zM534 1h-62v1407h62v-1407zM660 1h-31v1407h31v-1407zM723 1h-31v1407h31v-1407zM786 1h-31v1407h31v-1407zM943 1h-63v1407h63v-1407zM1100 1h-63v1407h63v-1407z M1226 1h-63v1407h63v-1407zM1352 1h-63v1407h63v-1407zM1446 1h-63v1407h63v-1407zM1635 1h-94v1407h94v-1407zM1698 1h-32v1407h32v-1407zM1792 0h-63v1408h63v-1408z" />
|
||||
<glyph unicode="" d="M448 1088q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5 l715 -714q37 -39 37 -91z" />
|
||||
<glyph unicode="" horiz-adv-x="1920" d="M448 1088q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5 l715 -714q37 -39 37 -91zM1899 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-36 0 -59 14t-53 45l470 470q37 37 37 90q0 52 -37 91l-715 714q-38 38 -102 64.5t-117 26.5h224q53 0 117 -26.5t102 -64.5l715 -714q37 -39 37 -91z" />
|
||||
<glyph unicode="" horiz-adv-x="1664" d="M1639 1058q40 -57 18 -129l-275 -906q-19 -64 -76.5 -107.5t-122.5 -43.5h-923q-77 0 -148.5 53.5t-99.5 131.5q-24 67 -2 127q0 4 3 27t4 37q1 8 -3 21.5t-3 19.5q2 11 8 21t16.5 23.5t16.5 23.5q23 38 45 91.5t30 91.5q3 10 0.5 30t-0.5 28q3 11 17 28t17 23 q21 36 42 92t25 90q1 9 -2.5 32t0.5 28q4 13 22 30.5t22 22.5q19 26 42.5 84.5t27.5 96.5q1 8 -3 25.5t-2 26.5q2 8 9 18t18 23t17 21q8 12 16.5 30.5t15 35t16 36t19.5 32t26.5 23.5t36 11.5t47.5 -5.5l-1 -3q38 9 51 9h761q74 0 114 -56t18 -130l-274 -906 q-36 -119 -71.5 -153.5t-128.5 -34.5h-869q-27 0 -38 -15q-11 -16 -1 -43q24 -70 144 -70h923q29 0 56 15.5t35 41.5l300 987q7 22 5 57q38 -15 59 -43zM575 1056q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5 t-16.5 -22.5zM492 800q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5t-16.5 -22.5z" />
|
||||
<glyph unicode="" horiz-adv-x="1280" d="M1164 1408q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62v1289q0 34 19.5 62t52.5 41q21 9 44 9h1048z" />
|
||||
<glyph unicode="" horiz-adv-x="1664" d="M384 0h896v256h-896v-256zM384 640h896v384h-160q-40 0 -68 28t-28 68v160h-640v-640zM1536 576q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 576v-416q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-160q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68 v160h-224q-13 0 -22.5 9.5t-9.5 22.5v416q0 79 56.5 135.5t135.5 56.5h64v544q0 40 28 68t68 28h672q40 0 88 -20t76 -48l152 -152q28 -28 48 -76t20 -88v-256h64q79 0 135.5 -56.5t56.5 -135.5z" />
|
||||
<glyph unicode="" horiz-adv-x="1920" d="M960 864q119 0 203.5 -84.5t84.5 -203.5t-84.5 -203.5t-203.5 -84.5t-203.5 84.5t-84.5 203.5t84.5 203.5t203.5 84.5zM1664 1280q106 0 181 -75t75 -181v-896q0 -106 -75 -181t-181 -75h-1408q-106 0 -181 75t-75 181v896q0 106 75 181t181 75h224l51 136 q19 49 69.5 84.5t103.5 35.5h512q53 0 103.5 -35.5t69.5 -84.5l51 -136h224zM960 128q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
|
||||
<glyph unicode="" horiz-adv-x="1664" d="M725 977l-170 -450q73 -1 153.5 -2t119 -1.5t52.5 -0.5l29 2q-32 95 -92 241q-53 132 -92 211zM21 -128h-21l2 79q22 7 80 18q89 16 110 31q20 16 48 68l237 616l280 724h75h53l11 -21l205 -480q103 -242 124 -297q39 -102 96 -235q26 -58 65 -164q24 -67 65 -149 q22 -49 35 -57q22 -19 69 -23q47 -6 103 -27q6 -39 6 -57q0 -14 -1 -26q-80 0 -192 8q-93 8 -189 8q-79 0 -135 -2l-200 -11l-58 -2q0 45 4 78l131 28q56 13 68 23q12 12 12 27t-6 32l-47 114l-92 228l-450 2q-29 -65 -104 -274q-23 -64 -23 -84q0 -31 17 -43 q26 -21 103 -32q3 0 13.5 -2t30 -5t40.5 -6q1 -28 1 -58q0 -17 -2 -27q-66 0 -349 20l-48 -8q-81 -14 -167 -14z" />
|
||||
<glyph unicode="" horiz-adv-x="1408" d="M555 15q76 -32 140 -32q131 0 216 41t122 113q38 70 38 181q0 114 -41 180q-58 94 -141 126q-80 32 -247 32q-74 0 -101 -10v-144l-1 -173l3 -270q0 -15 12 -44zM541 761q43 -7 109 -7q175 0 264 65t89 224q0 112 -85 187q-84 75 -255 75q-52 0 -130 -13q0 -44 2 -77 q7 -122 6 -279l-1 -98q0 -43 1 -77zM0 -128l2 94q45 9 68 12q77 12 123 31q17 27 21 51q9 66 9 194l-2 497q-5 256 -9 404q-1 87 -11 109q-1 4 -12 12q-18 12 -69 15q-30 2 -114 13l-4 83l260 6l380 13l45 1q5 0 14 0.5t14 0.5q1 0 21.5 -0.5t40.5 -0.5h74q88 0 191 -27 q43 -13 96 -39q57 -29 102 -76q44 -47 65 -104t21 -122q0 -70 -32 -128t-95 -105q-26 -20 -150 -77q177 -41 267 -146q92 -106 92 -236q0 -76 -29 -161q-21 -62 -71 -117q-66 -72 -140 -108q-73 -36 -203 -60q-82 -15 -198 -11l-197 4q-84 2 -298 -11q-33 -3 -272 -11z" />
|
||||
<glyph unicode="" horiz-adv-x="1024" d="M0 -126l17 85q4 1 77 20q76 19 116 39q29 37 41 101l27 139l56 268l12 64q8 44 17 84.5t16 67t12.5 46.5t9 30.5t3.5 11.5l29 157l16 63l22 135l8 50v38q-41 22 -144 28q-28 2 -38 4l19 103l317 -14q39 -2 73 -2q66 0 214 9q33 2 68 4.5t36 2.5q-2 -19 -6 -38 q-7 -29 -13 -51q-55 -19 -109 -31q-64 -16 -101 -31q-12 -31 -24 -88q-9 -44 -13 -82q-44 -199 -66 -306l-61 -311l-38 -158l-43 -235l-12 -45q-2 -7 1 -27q64 -15 119 -21q36 -5 66 -10q-1 -29 -7 -58q-7 -31 -9 -41q-18 0 -23 -1q-24 -2 -42 -2q-9 0 -28 3q-19 4 -145 17 l-198 2q-41 1 -174 -11q-74 -7 -98 -9z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" d="M81 1407l54 -27q20 -5 211 -5h130l19 3l115 1l215 -1h293l34 -2q14 -1 28 7t21 16l7 8l42 1q15 0 28 -1v-104.5t1 -131.5l1 -100l-1 -58q0 -32 -4 -51q-39 -15 -68 -18q-25 43 -54 128q-8 24 -15.5 62.5t-11.5 65.5t-6 29q-13 15 -27 19q-7 2 -42.5 2t-103.5 -1t-111 -1 q-34 0 -67 -5q-10 -97 -8 -136l1 -152v-332l3 -359l-1 -147q-1 -46 11 -85q49 -25 89 -32q2 0 18 -5t44 -13t43 -12q30 -8 50 -18q5 -45 5 -50q0 -10 -3 -29q-14 -1 -34 -1q-110 0 -187 10q-72 8 -238 8q-88 0 -233 -14q-48 -4 -70 -4q-2 22 -2 26l-1 26v9q21 33 79 49 q139 38 159 50q9 21 12 56q8 192 6 433l-5 428q-1 62 -0.5 118.5t0.5 102.5t-2 57t-6 15q-6 5 -14 6q-38 6 -148 6q-43 0 -100 -13.5t-73 -24.5q-13 -9 -22 -33t-22 -75t-24 -84q-6 -19 -19.5 -32t-20.5 -13q-44 27 -56 44v297v86zM1744 128q33 0 42 -18.5t-11 -44.5 l-126 -162q-20 -26 -49 -26t-49 26l-126 162q-20 26 -11 44.5t42 18.5h80v1024h-80q-33 0 -42 18.5t11 44.5l126 162q20 26 49 26t49 -26l126 -162q20 -26 11 -44.5t-42 -18.5h-80v-1024h80z" />
|
||||
<glyph unicode="" d="M81 1407l54 -27q20 -5 211 -5h130l19 3l115 1l446 -1h318l34 -2q14 -1 28 7t21 16l7 8l42 1q15 0 28 -1v-104.5t1 -131.5l1 -100l-1 -58q0 -32 -4 -51q-39 -15 -68 -18q-25 43 -54 128q-8 24 -15.5 62.5t-11.5 65.5t-6 29q-13 15 -27 19q-7 2 -58.5 2t-138.5 -1t-128 -1 q-94 0 -127 -5q-10 -97 -8 -136l1 -152v52l3 -359l-1 -147q-1 -46 11 -85q49 -25 89 -32q2 0 18 -5t44 -13t43 -12q30 -8 50 -18q5 -45 5 -50q0 -10 -3 -29q-14 -1 -34 -1q-110 0 -187 10q-72 8 -238 8q-82 0 -233 -13q-45 -5 -70 -5q-2 22 -2 26l-1 26v9q21 33 79 49 q139 38 159 50q9 21 12 56q6 137 6 433l-5 44q0 265 -2 278q-2 11 -6 15q-6 5 -14 6q-38 6 -148 6q-50 0 -168.5 -14t-132.5 -24q-13 -9 -22 -33t-22 -75t-24 -84q-6 -19 -19.5 -32t-20.5 -13q-44 27 -56 44v297v86zM1505 113q26 -20 26 -49t-26 -49l-162 -126 q-26 -20 -44.5 -11t-18.5 42v80h-1024v-80q0 -33 -18.5 -42t-44.5 11l-162 126q-26 20 -26 49t26 49l162 126q26 20 44.5 11t18.5 -42v-80h1024v80q0 33 18.5 42t44.5 -11z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1408 576v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45zM1664 960v-128q0 -26 -19 -45 t-45 -19h-1536q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45zM1280 1344v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1408 576v-128q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h896q26 0 45 -19t19 -45zM1664 960v-128q0 -26 -19 -45t-45 -19 h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1280 1344v-128q0 -26 -19 -45t-45 -19h-640q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h640q26 0 45 -19t19 -45z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 576v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45zM1792 960v-128q0 -26 -19 -45 t-45 -19h-1536q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45zM1792 1344v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 576v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 960v-128q0 -26 -19 -45 t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 1344v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" d="M256 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM256 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5 t9.5 -22.5zM256 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1344 q13 0 22.5 -9.5t9.5 -22.5zM256 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5 t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192 q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" d="M384 992v-576q0 -13 -9.5 -22.5t-22.5 -9.5q-14 0 -23 9l-288 288q-9 9 -9 23t9 23l288 288q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5 t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088 q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" d="M352 704q0 -14 -9 -23l-288 -288q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v576q0 13 9.5 22.5t22.5 9.5q14 0 23 -9l288 -288q9 -9 9 -23zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5 t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088 q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" d="M1792 1184v-1088q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-403 403v-166q0 -119 -84.5 -203.5t-203.5 -84.5h-704q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h704q119 0 203.5 -84.5t84.5 -203.5v-165l403 402q18 19 45 19q12 0 25 -5 q39 -17 39 -59z" />
|
||||
<glyph unicode="" horiz-adv-x="1920" d="M640 960q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1664 576v-448h-1408v192l320 320l160 -160l512 512zM1760 1280h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-1216q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5v1216 q0 13 -9.5 22.5t-22.5 9.5zM1920 1248v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
|
||||
<glyph unicode="" d="M363 0l91 91l-235 235l-91 -91v-107h128v-128h107zM886 928q0 22 -22 22q-10 0 -17 -7l-542 -542q-7 -7 -7 -17q0 -22 22 -22q10 0 17 7l542 542q7 7 7 17zM832 1120l416 -416l-832 -832h-416v416zM1515 1024q0 -53 -37 -90l-166 -166l-416 416l166 165q36 38 90 38 q53 0 91 -38l235 -234q37 -39 37 -91z" />
|
||||
<glyph unicode="" horiz-adv-x="1024" d="M768 896q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1024 896q0 -109 -33 -179l-364 -774q-16 -33 -47.5 -52t-67.5 -19t-67.5 19t-46.5 52l-365 774q-33 70 -33 179q0 212 150 362t362 150t362 -150t150 -362z" />
|
||||
<glyph unicode="" d="M768 96v1088q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
||||
<glyph unicode="" horiz-adv-x="1024" d="M512 384q0 36 -20 69q-1 1 -15.5 22.5t-25.5 38t-25 44t-21 50.5q-4 16 -21 16t-21 -16q-7 -23 -21 -50.5t-25 -44t-25.5 -38t-15.5 -22.5q-20 -33 -20 -69q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 512q0 -212 -150 -362t-362 -150t-362 150t-150 362 q0 145 81 275q6 9 62.5 90.5t101 151t99.5 178t83 201.5q9 30 34 47t51 17t51.5 -17t33.5 -47q28 -93 83 -201.5t99.5 -178t101 -151t62.5 -90.5q81 -127 81 -275z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" d="M888 352l116 116l-152 152l-116 -116v-56h96v-96h56zM1328 1072q-16 16 -33 -1l-350 -350q-17 -17 -1 -33t33 1l350 350q17 17 1 33zM1408 478v-190q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832 q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-14 -14 -32 -8q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v126q0 13 9 22l64 64q15 15 35 7t20 -29zM1312 1216l288 -288l-672 -672h-288v288zM1756 1084l-92 -92 l-288 288l92 92q28 28 68 28t68 -28l152 -152q28 -28 28 -68t-28 -68z" />
|
||||
<glyph unicode="" horiz-adv-x="1664" d="M1408 547v-259q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h255v0q13 0 22.5 -9.5t9.5 -22.5q0 -27 -26 -32q-77 -26 -133 -60q-10 -4 -16 -4h-112q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832 q66 0 113 47t47 113v214q0 19 18 29q28 13 54 37q16 16 35 8q21 -9 21 -29zM1645 1043l-384 -384q-18 -19 -45 -19q-12 0 -25 5q-39 17 -39 59v192h-160q-323 0 -438 -131q-119 -137 -74 -473q3 -23 -20 -34q-8 -2 -12 -2q-16 0 -26 13q-10 14 -21 31t-39.5 68.5t-49.5 99.5 t-38.5 114t-17.5 122q0 49 3.5 91t14 90t28 88t47 81.5t68.5 74t94.5 61.5t124.5 48.5t159.5 30.5t196.5 11h160v192q0 42 39 59q13 5 25 5q26 0 45 -19l384 -384q19 -19 19 -45t-19 -45z" />
|
||||
<glyph unicode="" horiz-adv-x="1664" d="M1408 606v-318q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-10 -10 -23 -10q-3 0 -9 2q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832 q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v254q0 13 9 22l64 64q10 10 23 10q6 0 12 -3q20 -8 20 -29zM1639 1095l-814 -814q-24 -24 -57 -24t-57 24l-430 430q-24 24 -24 57t24 57l110 110q24 24 57 24t57 -24l263 -263l647 647q24 24 57 24t57 -24l110 -110 q24 -24 24 -57t-24 -57z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" d="M1792 640q0 -26 -19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-384v-384h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v384h-384v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45 t19 45l256 256q19 19 45 19t45 -19t19 -45v-128h384v384h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45t-19 -45t-45 -19h-128v-384h384v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45z" />
|
||||
<glyph unicode="" horiz-adv-x="1024" d="M979 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 11 13 19z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" d="M1747 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 11 13 19l710 710 q19 19 32 13t13 -32v-710q4 11 13 19z" />
|
||||
<glyph unicode="" horiz-adv-x="1664" d="M1619 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-8 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-19 19 -19 45t19 45l710 710q19 19 32 13t13 -32v-710q5 11 13 19z" />
|
||||
<glyph unicode="" horiz-adv-x="1408" d="M1384 609l-1328 -738q-23 -13 -39.5 -3t-16.5 36v1472q0 26 16.5 36t39.5 -3l1328 -738q23 -13 23 -31t-23 -31z" />
|
||||
<glyph unicode="" d="M1536 1344v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45zM640 1344v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45z" />
|
||||
<glyph unicode="" d="M1536 1344v-1408q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
|
||||
<glyph unicode="" horiz-adv-x="1664" d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v710q0 26 13 32t32 -13l710 -710q19 -19 19 -45t-19 -45l-710 -710q-19 -19 -32 -13t-13 32v710q-5 -10 -13 -19z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v710q0 26 13 32t32 -13l710 -710q8 -8 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-5 -10 -13 -19l-710 -710 q-19 -19 -32 -13t-13 32v710q-5 -10 -13 -19z" />
|
||||
<glyph unicode="" horiz-adv-x="1024" d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-5 -10 -13 -19z" />
|
||||
<glyph unicode="" horiz-adv-x="1538" d="M14 557l710 710q19 19 45 19t45 -19l710 -710q19 -19 13 -32t-32 -13h-1472q-26 0 -32 13t13 32zM1473 0h-1408q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1408q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19z" />
|
||||
<glyph unicode="" horiz-adv-x="1152" d="M742 -37l-652 651q-37 37 -37 90.5t37 90.5l652 651q37 37 90.5 37t90.5 -37l75 -75q37 -37 37 -90.5t-37 -90.5l-486 -486l486 -485q37 -38 37 -91t-37 -90l-75 -75q-37 -37 -90.5 -37t-90.5 37z" />
|
||||
<glyph unicode="" horiz-adv-x="1152" d="M1099 704q0 -52 -37 -91l-652 -651q-37 -37 -90 -37t-90 37l-76 75q-37 39 -37 91q0 53 37 90l486 486l-486 485q-37 39 -37 91q0 53 37 90l76 75q36 38 90 38t90 -38l652 -651q37 -37 37 -90z" />
|
||||
<glyph unicode="" d="M1216 576v128q0 26 -19 45t-45 19h-256v256q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-256h-256q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h256v-256q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v256h256q26 0 45 19t19 45zM1536 640q0 -209 -103 -385.5 t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
||||
<glyph unicode="" d="M1216 576v128q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5 t103 -385.5z" />
|
||||
<glyph unicode="" d="M1149 414q0 26 -19 45l-181 181l181 181q19 19 19 45q0 27 -19 46l-90 90q-19 19 -46 19q-26 0 -45 -19l-181 -181l-181 181q-19 19 -45 19q-27 0 -46 -19l-90 -90q-19 -19 -19 -46q0 -26 19 -45l181 -181l-181 -181q-19 -19 -19 -45q0 -27 19 -46l90 -90q19 -19 46 -19 q26 0 45 19l181 181l181 -181q19 -19 45 -19q27 0 46 19l90 90q19 19 19 46zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
||||
<glyph unicode="" d="M1284 802q0 28 -18 46l-91 90q-19 19 -45 19t-45 -19l-408 -407l-226 226q-19 19 -45 19t-45 -19l-91 -90q-18 -18 -18 -46q0 -27 18 -45l362 -362q19 -19 45 -19q27 0 46 19l543 543q18 18 18 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
||||
<glyph unicode="" d="M896 160v192q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h192q14 0 23 9t9 23zM1152 832q0 88 -55.5 163t-138.5 116t-170 41q-243 0 -371 -213q-15 -24 8 -42l132 -100q7 -6 19 -6q16 0 25 12q53 68 86 92q34 24 86 24q48 0 85.5 -26t37.5 -59 q0 -38 -20 -61t-68 -45q-63 -28 -115.5 -86.5t-52.5 -125.5v-36q0 -14 9 -23t23 -9h192q14 0 23 9t9 23q0 19 21.5 49.5t54.5 49.5q32 18 49 28.5t46 35t44.5 48t28 60.5t12.5 81zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
||||
<glyph unicode="" d="M1024 160v160q0 14 -9 23t-23 9h-96v512q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h96v-320h-96q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h448q14 0 23 9t9 23zM896 1056v160q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23 t23 -9h192q14 0 23 9t9 23zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
||||
<glyph unicode="" d="M1197 512h-109q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h109q-32 108 -112.5 188.5t-188.5 112.5v-109q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v109q-108 -32 -188.5 -112.5t-112.5 -188.5h109q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-109 q32 -108 112.5 -188.5t188.5 -112.5v109q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-109q108 32 188.5 112.5t112.5 188.5zM1536 704v-128q0 -26 -19 -45t-45 -19h-143q-37 -161 -154.5 -278.5t-278.5 -154.5v-143q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v143 q-161 37 -278.5 154.5t-154.5 278.5h-143q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h143q37 161 154.5 278.5t278.5 154.5v143q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-143q161 -37 278.5 -154.5t154.5 -278.5h143q26 0 45 -19t19 -45z" />
|
||||
<glyph unicode="" d="M1097 457l-146 -146q-10 -10 -23 -10t-23 10l-137 137l-137 -137q-10 -10 -23 -10t-23 10l-146 146q-10 10 -10 23t10 23l137 137l-137 137q-10 10 -10 23t10 23l146 146q10 10 23 10t23 -10l137 -137l137 137q10 10 23 10t23 -10l146 -146q10 -10 10 -23t-10 -23 l-137 -137l137 -137q10 -10 10 -23t-10 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5 t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
||||
<glyph unicode="" d="M1171 723l-422 -422q-19 -19 -45 -19t-45 19l-294 294q-19 19 -19 45t19 45l102 102q19 19 45 19t45 -19l147 -147l275 275q19 19 45 19t45 -19l102 -102q19 -19 19 -45t-19 -45zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198 t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
||||
<glyph unicode="" d="M1312 643q0 161 -87 295l-754 -753q137 -89 297 -89q111 0 211.5 43.5t173.5 116.5t116 174.5t43 212.5zM313 344l755 754q-135 91 -300 91q-148 0 -273 -73t-198 -199t-73 -274q0 -162 89 -299zM1536 643q0 -157 -61 -300t-163.5 -246t-245 -164t-298.5 -61t-298.5 61 t-245 164t-163.5 246t-61 300t61 299.5t163.5 245.5t245 164t298.5 61t298.5 -61t245 -164t163.5 -245.5t61 -299.5z" />
|
||||
<glyph unicode="" d="M1536 640v-128q0 -53 -32.5 -90.5t-84.5 -37.5h-704l293 -294q38 -36 38 -90t-38 -90l-75 -76q-37 -37 -90 -37q-52 0 -91 37l-651 652q-37 37 -37 90q0 52 37 91l651 650q38 38 91 38q52 0 90 -38l75 -74q38 -38 38 -91t-38 -91l-293 -293h704q52 0 84.5 -37.5 t32.5 -90.5z" />
|
||||
<glyph unicode="" d="M1472 576q0 -54 -37 -91l-651 -651q-39 -37 -91 -37q-51 0 -90 37l-75 75q-38 38 -38 91t38 91l293 293h-704q-52 0 -84.5 37.5t-32.5 90.5v128q0 53 32.5 90.5t84.5 37.5h704l-293 294q-38 36 -38 90t38 90l75 75q38 38 90 38q53 0 91 -38l651 -651q37 -35 37 -90z" />
|
||||
<glyph unicode="" horiz-adv-x="1664" d="M1611 565q0 -51 -37 -90l-75 -75q-38 -38 -91 -38q-54 0 -90 38l-294 293v-704q0 -52 -37.5 -84.5t-90.5 -32.5h-128q-53 0 -90.5 32.5t-37.5 84.5v704l-294 -293q-36 -38 -90 -38t-90 38l-75 75q-38 38 -38 90q0 53 38 91l651 651q35 37 90 37q54 0 91 -37l651 -651 q37 -39 37 -91z" />
|
||||
<glyph unicode="" horiz-adv-x="1664" d="M1611 704q0 -53 -37 -90l-651 -652q-39 -37 -91 -37q-53 0 -90 37l-651 652q-38 36 -38 90q0 53 38 91l74 75q39 37 91 37q53 0 90 -37l294 -294v704q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-704l294 294q37 37 90 37q52 0 91 -37l75 -75q37 -39 37 -91z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" d="M1792 896q0 -26 -19 -45l-512 -512q-19 -19 -45 -19t-45 19t-19 45v256h-224q-98 0 -175.5 -6t-154 -21.5t-133 -42.5t-105.5 -69.5t-80 -101t-48.5 -138.5t-17.5 -181q0 -55 5 -123q0 -6 2.5 -23.5t2.5 -26.5q0 -15 -8.5 -25t-23.5 -10q-16 0 -28 17q-7 9 -13 22 t-13.5 30t-10.5 24q-127 285 -127 451q0 199 53 333q162 403 875 403h224v256q0 26 19 45t45 19t45 -19l512 -512q19 -19 19 -45z" />
|
||||
<glyph unicode="" d="M755 480q0 -13 -10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45t-45 -19h-448q-26 0 -45 19t-19 45v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23zM1536 1344v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332 q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45z" />
|
||||
<glyph unicode="" d="M768 576v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45zM1523 1248q0 -13 -10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45 t-45 -19h-448q-26 0 -45 19t-19 45v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23z" />
|
||||
<glyph unicode="" horiz-adv-x="1408" d="M1408 800v-192q0 -40 -28 -68t-68 -28h-416v-416q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v416h-416q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h416v416q0 40 28 68t68 28h192q40 0 68 -28t28 -68v-416h416q40 0 68 -28t28 -68z" />
|
||||
<glyph unicode="" horiz-adv-x="1408" d="M1408 800v-192q0 -40 -28 -68t-68 -28h-1216q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h1216q40 0 68 -28t28 -68z" />
|
||||
<glyph unicode="" horiz-adv-x="1664" d="M1482 486q46 -26 59.5 -77.5t-12.5 -97.5l-64 -110q-26 -46 -77.5 -59.5t-97.5 12.5l-266 153v-307q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v307l-266 -153q-46 -26 -97.5 -12.5t-77.5 59.5l-64 110q-26 46 -12.5 97.5t59.5 77.5l266 154l-266 154 q-46 26 -59.5 77.5t12.5 97.5l64 110q26 46 77.5 59.5t97.5 -12.5l266 -153v307q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-307l266 153q46 26 97.5 12.5t77.5 -59.5l64 -110q26 -46 12.5 -97.5t-59.5 -77.5l-266 -154z" />
|
||||
<glyph unicode="" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM896 161v190q0 14 -9 23.5t-22 9.5h-192q-13 0 -23 -10t-10 -23v-190q0 -13 10 -23t23 -10h192 q13 0 22 9.5t9 23.5zM894 505l18 621q0 12 -10 18q-10 8 -24 8h-220q-14 0 -24 -8q-10 -6 -10 -18l17 -621q0 -10 10 -17.5t24 -7.5h185q14 0 23.5 7.5t10.5 17.5z" />
|
||||
<glyph unicode="" d="M928 180v56v468v192h-320v-192v-468v-56q0 -25 18 -38.5t46 -13.5h192q28 0 46 13.5t18 38.5zM472 1024h195l-126 161q-26 31 -69 31q-40 0 -68 -28t-28 -68t28 -68t68 -28zM1160 1120q0 40 -28 68t-68 28q-43 0 -69 -31l-125 -161h194q40 0 68 28t28 68zM1536 864v-320 q0 -14 -9 -23t-23 -9h-96v-416q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v416h-96q-14 0 -23 9t-9 23v320q0 14 9 23t23 9h440q-93 0 -158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5q107 0 168 -77l128 -165l128 165q61 77 168 77q93 0 158.5 -65.5t65.5 -158.5 t-65.5 -158.5t-158.5 -65.5h440q14 0 23 -9t9 -23z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" d="M1280 832q0 26 -19 45t-45 19q-172 0 -318 -49.5t-259.5 -134t-235.5 -219.5q-19 -21 -19 -45q0 -26 19 -45t45 -19q24 0 45 19q27 24 74 71t67 66q137 124 268.5 176t313.5 52q26 0 45 19t19 45zM1792 1030q0 -95 -20 -193q-46 -224 -184.5 -383t-357.5 -268 q-214 -108 -438 -108q-148 0 -286 47q-15 5 -88 42t-96 37q-16 0 -39.5 -32t-45 -70t-52.5 -70t-60 -32q-30 0 -51 11t-31 24t-27 42q-2 4 -6 11t-5.5 10t-3 9.5t-1.5 13.5q0 35 31 73.5t68 65.5t68 56t31 48q0 4 -14 38t-16 44q-9 51 -9 104q0 115 43.5 220t119 184.5 t170.5 139t204 95.5q55 18 145 25.5t179.5 9t178.5 6t163.5 24t113.5 56.5l29.5 29.5t29.5 28t27 20t36.5 16t43.5 4.5q39 0 70.5 -46t47.5 -112t24 -124t8 -96z" />
|
||||
<glyph unicode="" horiz-adv-x="1408" d="M1408 -160v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1152 896q0 -78 -24.5 -144t-64 -112.5t-87.5 -88t-96 -77.5t-87.5 -72t-64 -81.5t-24.5 -96.5q0 -96 67 -224l-4 1l1 -1 q-90 41 -160 83t-138.5 100t-113.5 122.5t-72.5 150.5t-27.5 184q0 78 24.5 144t64 112.5t87.5 88t96 77.5t87.5 72t64 81.5t24.5 96.5q0 94 -66 224l3 -1l-1 1q90 -41 160 -83t138.5 -100t113.5 -122.5t72.5 -150.5t27.5 -184z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" d="M1664 576q-152 236 -381 353q61 -104 61 -225q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 121 61 225q-229 -117 -381 -353q133 -205 333.5 -326.5t434.5 -121.5t434.5 121.5t333.5 326.5zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5 t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1792 576q0 -34 -20 -69q-140 -230 -376.5 -368.5t-499.5 -138.5t-499.5 139t-376.5 368q-20 35 -20 69t20 69q140 229 376.5 368t499.5 139t499.5 -139t376.5 -368q20 -35 20 -69z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" d="M555 201l78 141q-87 63 -136 159t-49 203q0 121 61 225q-229 -117 -381 -353q167 -258 427 -375zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1307 1151q0 -7 -1 -9 q-105 -188 -315 -566t-316 -567l-49 -89q-10 -16 -28 -16q-12 0 -134 70q-16 10 -16 28q0 12 44 87q-143 65 -263.5 173t-208.5 245q-20 31 -20 69t20 69q153 235 380 371t496 136q89 0 180 -17l54 97q10 16 28 16q5 0 18 -6t31 -15.5t33 -18.5t31.5 -18.5t19.5 -11.5 q16 -10 16 -27zM1344 704q0 -139 -79 -253.5t-209 -164.5l280 502q8 -45 8 -84zM1792 576q0 -35 -20 -69q-39 -64 -109 -145q-150 -172 -347.5 -267t-419.5 -95l74 132q212 18 392.5 137t301.5 307q-115 179 -282 294l63 112q95 -64 182.5 -153t144.5 -184q20 -34 20 -69z " />
|
||||
<glyph unicode="" horiz-adv-x="1792" d="M1024 161v190q0 14 -9.5 23.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -23.5v-190q0 -14 9.5 -23.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 23.5zM1022 535l18 459q0 12 -10 19q-13 11 -24 11h-220q-11 0 -24 -11q-10 -7 -10 -21l17 -457q0 -10 10 -16.5t24 -6.5h185 q14 0 23.5 6.5t10.5 16.5zM1008 1469l768 -1408q35 -63 -2 -126q-17 -29 -46.5 -46t-63.5 -17h-1536q-34 0 -63.5 17t-46.5 46q-37 63 -2 126l768 1408q17 31 47 49t65 18t65 -18t47 -49z" />
|
||||
<glyph unicode="" horiz-adv-x="1408" d="M1376 1376q44 -52 12 -148t-108 -172l-161 -161l160 -696q5 -19 -12 -33l-128 -96q-7 -6 -19 -6q-4 0 -7 1q-15 3 -21 16l-279 508l-259 -259l53 -194q5 -17 -8 -31l-96 -96q-9 -9 -23 -9h-2q-15 2 -24 13l-189 252l-252 189q-11 7 -13 23q-1 13 9 25l96 97q9 9 23 9 q6 0 8 -1l194 -53l259 259l-508 279q-14 8 -17 24q-2 16 9 27l128 128q14 13 30 8l665 -159l160 160q76 76 172 108t148 -12z" />
|
||||
<glyph unicode="" horiz-adv-x="1664" d="M128 -128h288v288h-288v-288zM480 -128h320v288h-320v-288zM128 224h288v320h-288v-320zM480 224h320v320h-320v-320zM128 608h288v288h-288v-288zM864 -128h320v288h-320v-288zM480 608h320v288h-320v-288zM1248 -128h288v288h-288v-288zM864 224h320v320h-320v-320z M512 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1248 224h288v320h-288v-320zM864 608h320v288h-320v-288zM1248 608h288v288h-288v-288zM1280 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64 q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1664 1152v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47 h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" d="M666 1055q-60 -92 -137 -273q-22 45 -37 72.5t-40.5 63.5t-51 56.5t-63 35t-81.5 14.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q250 0 410 -225zM1792 256q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v192q-32 0 -85 -0.5t-81 -1t-73 1 t-71 5t-64 10.5t-63 18.5t-58 28.5t-59 40t-55 53.5t-56 69.5q59 93 136 273q22 -45 37 -72.5t40.5 -63.5t51 -56.5t63 -35t81.5 -14.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23zM1792 1152q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5 v192h-256q-48 0 -87 -15t-69 -45t-51 -61.5t-45 -77.5q-32 -62 -78 -171q-29 -66 -49.5 -111t-54 -105t-64 -100t-74 -83t-90 -68.5t-106.5 -42t-128 -16.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q48 0 87 15t69 45t51 61.5t45 77.5q32 62 78 171q29 66 49.5 111 t54 105t64 100t74 83t90 68.5t106.5 42t128 16.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" d="M1792 640q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22q-17 -2 -30.5 9t-17.5 29v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51t27 59t26 76q-157 89 -247.5 220t-90.5 281 q0 130 71 248.5t191 204.5t286 136.5t348 50.5q244 0 450 -85.5t326 -233t120 -321.5z" />
|
||||
<glyph unicode="" d="M1536 704v-128q0 -201 -98.5 -362t-274 -251.5t-395.5 -90.5t-395.5 90.5t-274 251.5t-98.5 362v128q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-128q0 -52 23.5 -90t53.5 -57t71 -30t64 -13t44 -2t44 2t64 13t71 30t53.5 57t23.5 90v128q0 26 19 45t45 19h384 q26 0 45 -19t19 -45zM512 1344v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45zM1536 1344v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45z" />
|
||||
<glyph unicode="" horiz-adv-x="1664" d="M1611 320q0 -53 -37 -90l-75 -75q-38 -38 -91 -38q-54 0 -90 38l-486 485l-486 -485q-36 -38 -90 -38t-90 38l-75 75q-38 36 -38 90q0 53 38 91l651 651q37 37 90 37q52 0 91 -37l650 -651q38 -38 38 -91z" />
|
||||
<glyph unicode="" horiz-adv-x="1664" d="M1611 832q0 -53 -37 -90l-651 -651q-38 -38 -91 -38q-54 0 -90 38l-651 651q-38 36 -38 90q0 53 38 91l74 75q39 37 91 37q53 0 90 -37l486 -486l486 486q37 37 90 37q52 0 91 -37l75 -75q37 -39 37 -91z" />
|
||||
<glyph unicode="" horiz-adv-x="1920" d="M1280 32q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-8 0 -13.5 2t-9 7t-5.5 8t-3 11.5t-1 11.5v13v11v160v416h-192q-26 0 -45 19t-19 45q0 24 15 41l320 384q19 22 49 22t49 -22l320 -384q15 -17 15 -41q0 -26 -19 -45t-45 -19h-192v-384h576q16 0 25 -11l160 -192q7 -11 7 -21 zM1920 448q0 -24 -15 -41l-320 -384q-20 -23 -49 -23t-49 23l-320 384q-15 17 -15 41q0 26 19 45t45 19h192v384h-576q-16 0 -25 12l-160 192q-7 9 -7 20q0 13 9.5 22.5t22.5 9.5h960q8 0 13.5 -2t9 -7t5.5 -8t3 -11.5t1 -11.5v-13v-11v-160v-416h192q26 0 45 -19t19 -45z " />
|
||||
<glyph unicode="" horiz-adv-x="1664" d="M640 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1536 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1664 1088v-512q0 -24 -16 -42.5t-41 -21.5 l-1044 -122q1 -7 4.5 -21.5t6 -26.5t2.5 -22q0 -16 -24 -64h920q26 0 45 -19t19 -45t-19 -45t-45 -19h-1024q-26 0 -45 19t-19 45q0 14 11 39.5t29.5 59.5t20.5 38l-177 823h-204q-26 0 -45 19t-19 45t19 45t45 19h256q16 0 28.5 -6.5t20 -15.5t13 -24.5t7.5 -26.5 t5.5 -29.5t4.5 -25.5h1201q26 0 45 -19t19 -45z" />
|
||||
<glyph unicode="" horiz-adv-x="1664" d="M1664 928v-704q0 -92 -66 -158t-158 -66h-1216q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h672q92 0 158 -66t66 -158z" />
|
||||
<glyph unicode="" horiz-adv-x="1920" d="M1879 584q0 -31 -31 -66l-336 -396q-43 -51 -120.5 -86.5t-143.5 -35.5h-1088q-34 0 -60.5 13t-26.5 43q0 31 31 66l336 396q43 51 120.5 86.5t143.5 35.5h1088q34 0 60.5 -13t26.5 -43zM1536 928v-160h-832q-94 0 -197 -47.5t-164 -119.5l-337 -396l-5 -6q0 4 -0.5 12.5 t-0.5 12.5v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h544q92 0 158 -66t66 -158z" />
|
||||
<glyph unicode="" horiz-adv-x="768" d="M704 1216q0 -26 -19 -45t-45 -19h-128v-1024h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v1024h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" d="M1792 640q0 -26 -19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-1024v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45t19 45l256 256q19 19 45 19t45 -19t19 -45v-128h1024v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45z" />
|
||||
<glyph unicode="" horiz-adv-x="1920" d="M512 512v-384h-256v384h256zM896 1024v-896h-256v896h256zM1280 768v-640h-256v640h256zM1664 1152v-1024h-256v1024h256zM1792 32v1216q0 13 -9.5 22.5t-22.5 9.5h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-1216q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5z M1920 1248v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
|
||||
<glyph unicode="" d="M1280 926q-56 -25 -121 -34q68 40 93 117q-65 -38 -134 -51q-61 66 -153 66q-87 0 -148.5 -61.5t-61.5 -148.5q0 -29 5 -48q-129 7 -242 65t-192 155q-29 -50 -29 -106q0 -114 91 -175q-47 1 -100 26v-2q0 -75 50 -133.5t123 -72.5q-29 -8 -51 -8q-13 0 -39 4 q21 -63 74.5 -104t121.5 -42q-116 -90 -261 -90q-26 0 -50 3q148 -94 322 -94q112 0 210 35.5t168 95t120.5 137t75 162t24.5 168.5q0 18 -1 27q63 45 105 109zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5 t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
|
||||
<glyph unicode="" d="M1307 618l23 219h-198v109q0 49 15.5 68.5t71.5 19.5h110v219h-175q-152 0 -218 -72t-66 -213v-131h-131v-219h131v-635h262v635h175zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960 q119 0 203.5 -84.5t84.5 -203.5z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" d="M928 704q0 14 -9 23t-23 9q-66 0 -113 -47t-47 -113q0 -14 9 -23t23 -9t23 9t9 23q0 40 28 68t68 28q14 0 23 9t9 23zM1152 574q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM128 0h1536v128h-1536v-128zM1280 574q0 159 -112.5 271.5 t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM256 1216h384v128h-384v-128zM128 1024h1536v118v138h-828l-64 -128h-644v-128zM1792 1280v-1280q0 -53 -37.5 -90.5t-90.5 -37.5h-1536q-53 0 -90.5 37.5t-37.5 90.5v1280 q0 53 37.5 90.5t90.5 37.5h1536q53 0 90.5 -37.5t37.5 -90.5z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" d="M832 1024q0 80 -56 136t-136 56t-136 -56t-56 -136q0 -42 19 -83q-41 19 -83 19q-80 0 -136 -56t-56 -136t56 -136t136 -56t136 56t56 136q0 42 -19 83q41 -19 83 -19q80 0 136 56t56 136zM1683 320q0 -17 -49 -66t-66 -49q-9 0 -28.5 16t-36.5 33t-38.5 40t-24.5 26 l-96 -96l220 -220q28 -28 28 -68q0 -42 -39 -81t-81 -39q-40 0 -68 28l-671 671q-176 -131 -365 -131q-163 0 -265.5 102.5t-102.5 265.5q0 160 95 313t248 248t313 95q163 0 265.5 -102.5t102.5 -265.5q0 -189 -131 -365l355 -355l96 96q-3 3 -26 24.5t-40 38.5t-33 36.5 t-16 28.5q0 17 49 66t66 49q13 0 23 -10q6 -6 46 -44.5t82 -79.5t86.5 -86t73 -78t28.5 -41z" />
|
||||
<glyph unicode="" horiz-adv-x="1920" d="M896 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1664 128q0 52 -38 90t-90 38t-90 -38t-38 -90q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 1152q0 52 -38 90t-90 38t-90 -38t-38 -90q0 -53 37.5 -90.5t90.5 -37.5 t90.5 37.5t37.5 90.5zM1280 731v-185q0 -10 -7 -19.5t-16 -10.5l-155 -24q-11 -35 -32 -76q34 -48 90 -115q7 -10 7 -20q0 -12 -7 -19q-23 -30 -82.5 -89.5t-78.5 -59.5q-11 0 -21 7l-115 90q-37 -19 -77 -31q-11 -108 -23 -155q-7 -24 -30 -24h-186q-11 0 -20 7.5t-10 17.5 l-23 153q-34 10 -75 31l-118 -89q-7 -7 -20 -7q-11 0 -21 8q-144 133 -144 160q0 9 7 19q10 14 41 53t47 61q-23 44 -35 82l-152 24q-10 1 -17 9.5t-7 19.5v185q0 10 7 19.5t16 10.5l155 24q11 35 32 76q-34 48 -90 115q-7 11 -7 20q0 12 7 20q22 30 82 89t79 59q11 0 21 -7 l115 -90q34 18 77 32q11 108 23 154q7 24 30 24h186q11 0 20 -7.5t10 -17.5l23 -153q34 -10 75 -31l118 89q8 7 20 7q11 0 21 -8q144 -133 144 -160q0 -9 -7 -19q-12 -16 -42 -54t-45 -60q23 -48 34 -82l152 -23q10 -2 17 -10.5t7 -19.5zM1920 198v-140q0 -16 -149 -31 q-12 -27 -30 -52q51 -113 51 -138q0 -4 -4 -7q-122 -71 -124 -71q-8 0 -46 47t-52 68q-20 -2 -30 -2t-30 2q-14 -21 -52 -68t-46 -47q-2 0 -124 71q-4 3 -4 7q0 25 51 138q-18 25 -30 52q-149 15 -149 31v140q0 16 149 31q13 29 30 52q-51 113 -51 138q0 4 4 7q4 2 35 20 t59 34t30 16q8 0 46 -46.5t52 -67.5q20 2 30 2t30 -2q51 71 92 112l6 2q4 0 124 -70q4 -3 4 -7q0 -25 -51 -138q17 -23 30 -52q149 -15 149 -31zM1920 1222v-140q0 -16 -149 -31q-12 -27 -30 -52q51 -113 51 -138q0 -4 -4 -7q-122 -71 -124 -71q-8 0 -46 47t-52 68 q-20 -2 -30 -2t-30 2q-14 -21 -52 -68t-46 -47q-2 0 -124 71q-4 3 -4 7q0 25 51 138q-18 25 -30 52q-149 15 -149 31v140q0 16 149 31q13 29 30 52q-51 113 -51 138q0 4 4 7q4 2 35 20t59 34t30 16q8 0 46 -46.5t52 -67.5q20 2 30 2t30 -2q51 71 92 112l6 2q4 0 124 -70 q4 -3 4 -7q0 -25 -51 -138q17 -23 30 -52q149 -15 149 -31z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" d="M1408 768q0 -139 -94 -257t-256.5 -186.5t-353.5 -68.5q-86 0 -176 16q-124 -88 -278 -128q-36 -9 -86 -16h-3q-11 0 -20.5 8t-11.5 21q-1 3 -1 6.5t0.5 6.5t2 6l2.5 5t3.5 5.5t4 5t4.5 5t4 4.5q5 6 23 25t26 29.5t22.5 29t25 38.5t20.5 44q-124 72 -195 177t-71 224 q0 139 94 257t256.5 186.5t353.5 68.5t353.5 -68.5t256.5 -186.5t94 -257zM1792 512q0 -120 -71 -224.5t-195 -176.5q10 -24 20.5 -44t25 -38.5t22.5 -29t26 -29.5t23 -25q1 -1 4 -4.5t4.5 -5t4 -5t3.5 -5.5l2.5 -5t2 -6t0.5 -6.5t-1 -6.5q-3 -14 -13 -22t-22 -7 q-50 7 -86 16q-154 40 -278 128q-90 -16 -176 -16q-271 0 -472 132q58 -4 88 -4q161 0 309 45t264 129q125 92 192 212t67 254q0 77 -23 152q129 -71 204 -178t75 -230z" />
|
||||
<glyph unicode="" d="M256 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 768q0 51 -39 89.5t-89 38.5h-352q0 58 48 159.5t48 160.5q0 98 -32 145t-128 47q-26 -26 -38 -85t-30.5 -125.5t-59.5 -109.5q-22 -23 -77 -91q-4 -5 -23 -30t-31.5 -41t-34.5 -42.5 t-40 -44t-38.5 -35.5t-40 -27t-35.5 -9h-32v-640h32q13 0 31.5 -3t33 -6.5t38 -11t35 -11.5t35.5 -12.5t29 -10.5q211 -73 342 -73h121q192 0 192 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5q32 1 53.5 47t21.5 81zM1536 769 q0 -89 -49 -163q9 -33 9 -69q0 -77 -38 -144q3 -21 3 -43q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5h-36h-93q-96 0 -189.5 22.5t-216.5 65.5q-116 40 -138 40h-288q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5h274q36 24 137 155q58 75 107 128 q24 25 35.5 85.5t30.5 126.5t62 108q39 37 90 37q84 0 151 -32.5t102 -101.5t35 -186q0 -93 -48 -192h176q104 0 180 -76t76 -179z" />
|
||||
<glyph unicode="" d="M256 1088q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 512q0 35 -21.5 81t-53.5 47q15 17 25 47.5t10 55.5q0 69 -53 119q18 32 18 69t-17.5 73.5t-47.5 52.5q5 30 5 56q0 85 -49 126t-136 41h-128q-131 0 -342 -73q-5 -2 -29 -10.5 t-35.5 -12.5t-35 -11.5t-38 -11t-33 -6.5t-31.5 -3h-32v-640h32q16 0 35.5 -9t40 -27t38.5 -35.5t40 -44t34.5 -42.5t31.5 -41t23 -30q55 -68 77 -91q41 -43 59.5 -109.5t30.5 -125.5t38 -85q96 0 128 47t32 145q0 59 -48 160.5t-48 159.5h352q50 0 89 38.5t39 89.5z M1536 511q0 -103 -76 -179t-180 -76h-176q48 -99 48 -192q0 -118 -35 -186q-35 -69 -102 -101.5t-151 -32.5q-51 0 -90 37q-34 33 -54 82t-25.5 90.5t-17.5 84.5t-31 64q-48 50 -107 127q-101 131 -137 155h-274q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5 h288q22 0 138 40q128 44 223 66t200 22h112q140 0 226.5 -79t85.5 -216v-5q60 -77 60 -178q0 -22 -3 -43q38 -67 38 -144q0 -36 -9 -69q49 -74 49 -163z" />
|
||||
<glyph unicode="" horiz-adv-x="896" d="M832 1504v-1339l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" d="M1664 940q0 81 -21.5 143t-55 98.5t-81.5 59.5t-94 31t-98 8t-112 -25.5t-110.5 -64t-86.5 -72t-60 -61.5q-18 -22 -49 -22t-49 22q-24 28 -60 61.5t-86.5 72t-110.5 64t-112 25.5t-98 -8t-94 -31t-81.5 -59.5t-55 -98.5t-21.5 -143q0 -168 187 -355l581 -560l580 559 q188 188 188 356zM1792 940q0 -221 -229 -450l-623 -600q-18 -18 -44 -18t-44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5 q224 0 351 -124t127 -344z" />
|
||||
<glyph unicode="" horiz-adv-x="1664" d="M640 96q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h320q13 0 22.5 -9.5t9.5 -22.5q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-66 0 -113 -47t-47 -113v-704 q0 -66 47 -113t113 -47h288h11h13t11.5 -1t11.5 -3t8 -5.5t7 -9t2 -13.5zM1568 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45z" />
|
||||
<glyph unicode="" d="M237 122h231v694h-231v-694zM483 1030q-1 52 -36 86t-93 34t-94.5 -34t-36.5 -86q0 -51 35.5 -85.5t92.5 -34.5h1q59 0 95 34.5t36 85.5zM1068 122h231v398q0 154 -73 233t-193 79q-136 0 -209 -117h2v101h-231q3 -66 0 -694h231v388q0 38 7 56q15 35 45 59.5t74 24.5 q116 0 116 -157v-371zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
|
||||
<glyph unicode="" horiz-adv-x="1152" d="M480 672v448q0 14 -9 23t-23 9t-23 -9t-9 -23v-448q0 -14 9 -23t23 -9t23 9t9 23zM1152 320q0 -26 -19 -45t-45 -19h-429l-51 -483q-2 -12 -10.5 -20.5t-20.5 -8.5h-1q-27 0 -32 27l-76 485h-404q-26 0 -45 19t-19 45q0 123 78.5 221.5t177.5 98.5v512q-52 0 -90 38 t-38 90t38 90t90 38h640q52 0 90 -38t38 -90t-38 -90t-90 -38v-512q99 0 177.5 -98.5t78.5 -221.5z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" d="M1408 608v-320q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h704q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v320 q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1792 1472v-512q0 -26 -19 -45t-45 -19t-45 19l-176 176l-652 -652q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l652 652l-176 176q-19 19 -19 45t19 45t45 19h512q26 0 45 -19t19 -45z" />
|
||||
<glyph unicode="" d="M1184 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45zM1536 992v-704q0 -119 -84.5 -203.5t-203.5 -84.5h-320q-13 0 -22.5 9.5t-9.5 22.5 q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q66 0 113 47t47 113v704q0 66 -47 113t-113 47h-288h-11h-13t-11.5 1t-11.5 3t-8 5.5t-7 9t-2 13.5q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q119 0 203.5 -84.5t84.5 -203.5z" />
|
||||
<glyph unicode="" horiz-adv-x="1664" d="M458 653q-74 162 -74 371h-256v-96q0 -78 94.5 -162t235.5 -113zM1536 928v96h-256q0 -209 -74 -371q141 29 235.5 113t94.5 162zM1664 1056v-128q0 -71 -41.5 -143t-112 -130t-173 -97.5t-215.5 -44.5q-42 -54 -95 -95q-38 -34 -52.5 -72.5t-14.5 -89.5q0 -54 30.5 -91 t97.5 -37q75 0 133.5 -45.5t58.5 -114.5v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v64q0 69 58.5 114.5t133.5 45.5q67 0 97.5 37t30.5 91q0 51 -14.5 89.5t-52.5 72.5q-53 41 -95 95q-113 5 -215.5 44.5t-173 97.5t-112 130t-41.5 143v128q0 40 28 68t68 28h288v96 q0 66 47 113t113 47h576q66 0 113 -47t47 -113v-96h288q40 0 68 -28t28 -68z" />
|
||||
<glyph unicode="" d="M394 184q-8 -9 -20 3q-13 11 -4 19q8 9 20 -3q12 -11 4 -19zM352 245q9 -12 0 -19q-8 -6 -17 7t0 18q9 7 17 -6zM291 305q-5 -7 -13 -2q-10 5 -7 12q3 5 13 2q10 -5 7 -12zM322 271q-6 -7 -16 3q-9 11 -2 16q6 6 16 -3q9 -11 2 -16zM451 159q-4 -12 -19 -6q-17 4 -13 15 t19 7q16 -5 13 -16zM514 154q0 -11 -16 -11q-17 -2 -17 11q0 11 16 11q17 2 17 -11zM572 164q2 -10 -14 -14t-18 8t14 15q16 2 18 -9zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-224q-16 0 -24.5 1t-19.5 5t-16 14.5t-5 27.5v239q0 97 -52 142q57 6 102.5 18t94 39 t81 66.5t53 105t20.5 150.5q0 121 -79 206q37 91 -8 204q-28 9 -81 -11t-92 -44l-38 -24q-93 26 -192 26t-192 -26q-16 11 -42.5 27t-83.5 38.5t-86 13.5q-44 -113 -7 -204q-79 -85 -79 -206q0 -85 20.5 -150t52.5 -105t80.5 -67t94 -39t102.5 -18q-40 -36 -49 -103 q-21 -10 -45 -15t-57 -5t-65.5 21.5t-55.5 62.5q-19 32 -48.5 52t-49.5 24l-20 3q-21 0 -29 -4.5t-5 -11.5t9 -14t13 -12l7 -5q22 -10 43.5 -38t31.5 -51l10 -23q13 -38 44 -61.5t67 -30t69.5 -7t55.5 3.5l23 4q0 -38 0.5 -103t0.5 -68q0 -22 -11 -33.5t-22 -13t-33 -1.5 h-224q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
|
||||
<glyph unicode="" horiz-adv-x="1664" d="M1280 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 288v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h427q21 -56 70.5 -92 t110.5 -36h256q61 0 110.5 36t70.5 92h427q40 0 68 -28t28 -68zM1339 936q-17 -40 -59 -40h-256v-448q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v448h-256q-42 0 -59 40q-17 39 14 69l448 448q18 19 45 19t45 -19l448 -448q31 -30 14 -69z" />
|
||||
<glyph unicode="" d="M1407 710q0 44 -7 113.5t-18 96.5q-12 30 -17 44t-9 36.5t-4 48.5q0 23 5 68.5t5 67.5q0 37 -10 55q-4 1 -13 1q-19 0 -58 -4.5t-59 -4.5q-60 0 -176 24t-175 24q-43 0 -94.5 -11.5t-85 -23.5t-89.5 -34q-137 -54 -202 -103q-96 -73 -159.5 -189.5t-88 -236t-24.5 -248.5 q0 -40 12.5 -120t12.5 -121q0 -23 -11 -66.5t-11 -65.5t12 -36.5t34 -14.5q24 0 72.5 11t73.5 11q57 0 169.5 -15.5t169.5 -15.5q181 0 284 36q129 45 235.5 152.5t166 245.5t59.5 275zM1535 712q0 -165 -70 -327.5t-196 -288t-281 -180.5q-124 -44 -326 -44 q-57 0 -170 14.5t-169 14.5q-24 0 -72.5 -14.5t-73.5 -14.5q-73 0 -123.5 55.5t-50.5 128.5q0 24 11 68t11 67q0 40 -12.5 120.5t-12.5 121.5q0 111 18 217.5t54.5 209.5t100.5 194t150 156q78 59 232 120q194 78 316 78q60 0 175.5 -24t173.5 -24q19 0 57 5t58 5 q81 0 118 -50.5t37 -134.5q0 -23 -5 -68t-5 -68q0 -10 1 -18.5t3 -17t4 -13.5t6.5 -16t6.5 -17q16 -40 25 -118.5t9 -136.5z" />
|
||||
<glyph unicode="" horiz-adv-x="1408" d="M1408 296q0 -27 -10 -70.5t-21 -68.5q-21 -50 -122 -106q-94 -51 -186 -51q-27 0 -52.5 3.5t-57.5 12.5t-47.5 14.5t-55.5 20.5t-49 18q-98 35 -175 83q-128 79 -264.5 215.5t-215.5 264.5q-48 77 -83 175q-3 9 -18 49t-20.5 55.5t-14.5 47.5t-12.5 57.5t-3.5 52.5 q0 92 51 186q56 101 106 122q25 11 68.5 21t70.5 10q14 0 21 -3q18 -6 53 -76q11 -19 30 -54t35 -63.5t31 -53.5q3 -4 17.5 -25t21.5 -35.5t7 -28.5q0 -20 -28.5 -50t-62 -55t-62 -53t-28.5 -46q0 -9 5 -22.5t8.5 -20.5t14 -24t11.5 -19q76 -137 174 -235t235 -174 q2 -1 19 -11.5t24 -14t20.5 -8.5t22.5 -5q18 0 46 28.5t53 62t55 62t50 28.5q14 0 28.5 -7t35.5 -21.5t25 -17.5q25 -15 53.5 -31t63.5 -35t54 -30q70 -35 76 -53q3 -7 3 -21z" />
|
||||
<glyph unicode="" horiz-adv-x="1408" d="M1120 1280h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v832q0 66 -47 113t-113 47zM1408 1120v-832q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832 q119 0 203.5 -84.5t84.5 -203.5z" />
|
||||
<glyph unicode="" horiz-adv-x="1280" d="M1152 1280h-1024v-1242l423 406l89 85l89 -85l423 -406v1242zM1164 1408q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62v1289 q0 34 19.5 62t52.5 41q21 9 44 9h1048z" />
|
||||
<glyph unicode="" d="M1280 343q0 11 -2 16q-3 8 -38.5 29.5t-88.5 49.5l-53 29q-5 3 -19 13t-25 15t-21 5q-18 0 -47 -32.5t-57 -65.5t-44 -33q-7 0 -16.5 3.5t-15.5 6.5t-17 9.5t-14 8.5q-99 55 -170.5 126.5t-126.5 170.5q-2 3 -8.5 14t-9.5 17t-6.5 15.5t-3.5 16.5q0 13 20.5 33.5t45 38.5 t45 39.5t20.5 36.5q0 10 -5 21t-15 25t-13 19q-3 6 -15 28.5t-25 45.5t-26.5 47.5t-25 40.5t-16.5 18t-16 2q-48 0 -101 -22q-46 -21 -80 -94.5t-34 -130.5q0 -16 2.5 -34t5 -30.5t9 -33t10 -29.5t12.5 -33t11 -30q60 -164 216.5 -320.5t320.5 -216.5q6 -2 30 -11t33 -12.5 t29.5 -10t33 -9t30.5 -5t34 -2.5q57 0 130.5 34t94.5 80q22 53 22 101zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
|
||||
<glyph unicode="" horiz-adv-x="1664" d="M1620 1128q-67 -98 -162 -167q1 -14 1 -42q0 -130 -38 -259.5t-115.5 -248.5t-184.5 -210.5t-258 -146t-323 -54.5q-271 0 -496 145q35 -4 78 -4q225 0 401 138q-105 2 -188 64.5t-114 159.5q33 -5 61 -5q43 0 85 11q-112 23 -185.5 111.5t-73.5 205.5v4q68 -38 146 -41 q-66 44 -105 115t-39 154q0 88 44 163q121 -149 294.5 -238.5t371.5 -99.5q-8 38 -8 74q0 134 94.5 228.5t228.5 94.5q140 0 236 -102q109 21 205 78q-37 -115 -142 -178q93 10 186 50z" />
|
||||
<glyph unicode="" horiz-adv-x="768" d="M511 980h257l-30 -284h-227v-824h-341v824h-170v284h170v171q0 182 86 275.5t283 93.5h227v-284h-142q-39 0 -62.5 -6.5t-34 -23.5t-13.5 -34.5t-3 -49.5v-142z" />
|
||||
<glyph unicode="" d="M1536 640q0 -251 -146.5 -451.5t-378.5 -277.5q-27 -5 -39.5 7t-12.5 30v211q0 97 -52 142q57 6 102.5 18t94 39t81 66.5t53 105t20.5 150.5q0 121 -79 206q37 91 -8 204q-28 9 -81 -11t-92 -44l-38 -24q-93 26 -192 26t-192 -26q-16 11 -42.5 27t-83.5 38.5t-86 13.5 q-44 -113 -7 -204q-79 -85 -79 -206q0 -85 20.5 -150t52.5 -105t80.5 -67t94 -39t102.5 -18q-40 -36 -49 -103q-21 -10 -45 -15t-57 -5t-65.5 21.5t-55.5 62.5q-19 32 -48.5 52t-49.5 24l-20 3q-21 0 -29 -4.5t-5 -11.5t9 -14t13 -12l7 -5q22 -10 43.5 -38t31.5 -51l10 -23 q13 -38 44 -61.5t67 -30t69.5 -7t55.5 3.5l23 4q0 -38 0.5 -89t0.5 -54q0 -18 -13 -30t-40 -7q-232 77 -378.5 277.5t-146.5 451.5q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
||||
<glyph unicode="" horiz-adv-x="1664" d="M1664 960v-256q0 -26 -19 -45t-45 -19h-64q-26 0 -45 19t-19 45v256q0 106 -75 181t-181 75t-181 -75t-75 -181v-192h96q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h672v192q0 185 131.5 316.5t316.5 131.5 t316.5 -131.5t131.5 -316.5z" />
|
||||
<glyph unicode="" horiz-adv-x="1920" d="M1760 1408q66 0 113 -47t47 -113v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600zM160 1280q-13 0 -22.5 -9.5t-9.5 -22.5v-224h1664v224q0 13 -9.5 22.5t-22.5 9.5h-1600zM1760 0q13 0 22.5 9.5t9.5 22.5v608h-1664v-608 q0 -13 9.5 -22.5t22.5 -9.5h1600zM256 128v128h256v-128h-256zM640 128v128h384v-128h-384z" />
|
||||
<glyph unicode="" horiz-adv-x="1408" d="M384 192q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 69q2 -28 -17 -48q-18 -21 -47 -21h-135q-25 0 -43 16.5t-20 41.5q-22 229 -184.5 391.5t-391.5 184.5q-25 2 -41.5 20t-16.5 43v135q0 29 21 47q17 17 43 17h5q160 -13 306 -80.5 t259 -181.5q114 -113 181.5 -259t80.5 -306zM1408 67q2 -27 -18 -47q-18 -20 -46 -20h-143q-26 0 -44.5 17.5t-19.5 42.5q-12 215 -101 408.5t-231.5 336t-336 231.5t-408.5 102q-25 1 -42.5 19.5t-17.5 43.5v143q0 28 20 46q18 18 44 18h3q262 -13 501.5 -120t425.5 -294 q187 -186 294 -425.5t120 -501.5z" />
|
||||
<glyph unicode="" d="M1040 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1296 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1408 160v320q0 13 -9.5 22.5t-22.5 9.5 h-1216q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h1216q13 0 22.5 9.5t9.5 22.5zM178 640h1180l-157 482q-4 13 -16 21.5t-26 8.5h-782q-14 0 -26 -8.5t-16 -21.5zM1536 480v-320q0 -66 -47 -113t-113 -47h-1216q-66 0 -113 47t-47 113v320q0 25 16 75 l197 606q17 53 63 86t101 33h782q55 0 101 -33t63 -86l197 -606q16 -50 16 -75z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" d="M1664 896q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5v-384q0 -52 -38 -90t-90 -38q-417 347 -812 380q-58 -19 -91 -66t-31 -100.5t40 -92.5q-20 -33 -23 -65.5t6 -58t33.5 -55t48 -50t61.5 -50.5q-29 -58 -111.5 -83t-168.5 -11.5t-132 55.5q-7 23 -29.5 87.5 t-32 94.5t-23 89t-15 101t3.5 98.5t22 110.5h-122q-66 0 -113 47t-47 113v192q0 66 47 113t113 47h480q435 0 896 384q52 0 90 -38t38 -90v-384zM1536 292v954q-394 -302 -768 -343v-270q377 -42 768 -341z" />
|
||||
<glyph unicode="" horiz-adv-x="1664" d="M848 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM183 128h1298q-164 181 -246.5 411.5t-82.5 484.5q0 256 -320 256t-320 -256q0 -254 -82.5 -484.5t-246.5 -411.5zM1664 128q0 -52 -38 -90t-90 -38 h-448q0 -106 -75 -181t-181 -75t-181 75t-75 181h-448q-52 0 -90 38t-38 90q190 161 287 397.5t97 498.5q0 165 96 262t264 117q-8 18 -8 37q0 40 28 68t68 28t68 -28t28 -68q0 -19 -8 -37q168 -20 264 -117t96 -262q0 -262 97 -498.5t287 -397.5z" />
|
||||
<glyph unicode="" d="M1376 640l138 -135q30 -28 20 -70q-12 -41 -52 -51l-188 -48l53 -186q12 -41 -19 -70q-29 -31 -70 -19l-186 53l-48 -188q-10 -40 -51 -52q-12 -2 -19 -2q-31 0 -51 22l-135 138l-135 -138q-28 -30 -70 -20q-41 11 -51 52l-48 188l-186 -53q-41 -12 -70 19q-31 29 -19 70 l53 186l-188 48q-40 10 -52 51q-10 42 20 70l138 135l-138 135q-30 28 -20 70q12 41 52 51l188 48l-53 186q-12 41 19 70q29 31 70 19l186 -53l48 188q10 41 51 51q41 12 70 -19l135 -139l135 139q29 30 70 19q41 -10 51 -51l48 -188l186 53q41 12 70 -19q31 -29 19 -70 l-53 -186l188 -48q40 -10 52 -51q10 -42 -20 -70z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" d="M256 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 768q0 51 -39 89.5t-89 38.5h-576q0 20 15 48.5t33 55t33 68t15 84.5q0 67 -44.5 97.5t-115.5 30.5q-24 0 -90 -139q-24 -44 -37 -65q-40 -64 -112 -145q-71 -81 -101 -106 q-69 -57 -140 -57h-32v-640h32q72 0 167 -32t193.5 -64t179.5 -32q189 0 189 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5h331q52 0 90 38t38 90zM1792 769q0 -105 -75.5 -181t-180.5 -76h-169q-4 -62 -37 -119q3 -21 3 -43 q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5q-133 0 -322 69q-164 59 -223 59h-288q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5h288q10 0 21.5 4.5t23.5 14t22.5 18t24 22.5t20.5 21.5t19 21.5t14 17q65 74 100 129q13 21 33 62t37 72t40.5 63t55 49.5 t69.5 17.5q125 0 206.5 -67t81.5 -189q0 -68 -22 -128h374q104 0 180 -76t76 -179z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" d="M1376 128h32v640h-32q-35 0 -67.5 12t-62.5 37t-50 46t-49 54q-2 3 -3.5 4.5t-4 4.5t-4.5 5q-72 81 -112 145q-14 22 -38 68q-1 3 -10.5 22.5t-18.5 36t-20 35.5t-21.5 30.5t-18.5 11.5q-71 0 -115.5 -30.5t-44.5 -97.5q0 -43 15 -84.5t33 -68t33 -55t15 -48.5h-576 q-50 0 -89 -38.5t-39 -89.5q0 -52 38 -90t90 -38h331q-15 -17 -25 -47.5t-10 -55.5q0 -69 53 -119q-18 -32 -18 -69t17.5 -73.5t47.5 -52.5q-4 -24 -4 -56q0 -85 48.5 -126t135.5 -41q84 0 183 32t194 64t167 32zM1664 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45 t45 -19t45 19t19 45zM1792 768v-640q0 -53 -37.5 -90.5t-90.5 -37.5h-288q-59 0 -223 -59q-190 -69 -317 -69q-142 0 -230 77.5t-87 217.5l1 5q-61 76 -61 178q0 22 3 43q-33 57 -37 119h-169q-105 0 -180.5 76t-75.5 181q0 103 76 179t180 76h374q-22 60 -22 128 q0 122 81.5 189t206.5 67q38 0 69.5 -17.5t55 -49.5t40.5 -63t37 -72t33 -62q35 -55 100 -129q2 -3 14 -17t19 -21.5t20.5 -21.5t24 -22.5t22.5 -18t23.5 -14t21.5 -4.5h288q53 0 90.5 -37.5t37.5 -90.5z" />
|
||||
<glyph unicode="" d="M1280 -64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 700q0 189 -167 189q-26 0 -56 -5q-16 30 -52.5 47.5t-73.5 17.5t-69 -18q-50 53 -119 53q-25 0 -55.5 -10t-47.5 -25v331q0 52 -38 90t-90 38q-51 0 -89.5 -39t-38.5 -89v-576 q-20 0 -48.5 15t-55 33t-68 33t-84.5 15q-67 0 -97.5 -44.5t-30.5 -115.5q0 -24 139 -90q44 -24 65 -37q64 -40 145 -112q81 -71 106 -101q57 -69 57 -140v-32h640v32q0 72 32 167t64 193.5t32 179.5zM1536 705q0 -133 -69 -322q-59 -164 -59 -223v-288q0 -53 -37.5 -90.5 t-90.5 -37.5h-640q-53 0 -90.5 37.5t-37.5 90.5v288q0 10 -4.5 21.5t-14 23.5t-18 22.5t-22.5 24t-21.5 20.5t-21.5 19t-17 14q-74 65 -129 100q-21 13 -62 33t-72 37t-63 40.5t-49.5 55t-17.5 69.5q0 125 67 206.5t189 81.5q68 0 128 -22v374q0 104 76 180t179 76 q105 0 181 -75.5t76 -180.5v-169q62 -4 119 -37q21 3 43 3q101 0 178 -60q139 1 219.5 -85t80.5 -227z" />
|
||||
<glyph unicode="" d="M1408 576q0 84 -32 183t-64 194t-32 167v32h-640v-32q0 -35 -12 -67.5t-37 -62.5t-46 -50t-54 -49q-9 -8 -14 -12q-81 -72 -145 -112q-22 -14 -68 -38q-3 -1 -22.5 -10.5t-36 -18.5t-35.5 -20t-30.5 -21.5t-11.5 -18.5q0 -71 30.5 -115.5t97.5 -44.5q43 0 84.5 15t68 33 t55 33t48.5 15v-576q0 -50 38.5 -89t89.5 -39q52 0 90 38t38 90v331q46 -35 103 -35q69 0 119 53q32 -18 69 -18t73.5 17.5t52.5 47.5q24 -4 56 -4q85 0 126 48.5t41 135.5zM1280 1344q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 580 q0 -142 -77.5 -230t-217.5 -87l-5 1q-76 -61 -178 -61q-22 0 -43 3q-54 -30 -119 -37v-169q0 -105 -76 -180.5t-181 -75.5q-103 0 -179 76t-76 180v374q-54 -22 -128 -22q-121 0 -188.5 81.5t-67.5 206.5q0 38 17.5 69.5t49.5 55t63 40.5t72 37t62 33q55 35 129 100 q3 2 17 14t21.5 19t21.5 20.5t22.5 24t18 22.5t14 23.5t4.5 21.5v288q0 53 37.5 90.5t90.5 37.5h640q53 0 90.5 -37.5t37.5 -90.5v-288q0 -59 59 -223q69 -190 69 -317z" />
|
||||
<glyph unicode="" d="M1280 576v128q0 26 -19 45t-45 19h-502l189 189q19 19 19 45t-19 45l-91 91q-18 18 -45 18t-45 -18l-362 -362l-91 -91q-18 -18 -18 -45t18 -45l91 -91l362 -362q18 -18 45 -18t45 18l91 91q18 18 18 45t-18 45l-189 189h502q26 0 45 19t19 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
||||
<glyph unicode="" d="M1285 640q0 27 -18 45l-91 91l-362 362q-18 18 -45 18t-45 -18l-91 -91q-18 -18 -18 -45t18 -45l189 -189h-502q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h502l-189 -189q-19 -19 -19 -45t19 -45l91 -91q18 -18 45 -18t45 18l362 362l91 91q18 18 18 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
||||
<glyph unicode="" d="M1284 641q0 27 -18 45l-362 362l-91 91q-18 18 -45 18t-45 -18l-91 -91l-362 -362q-18 -18 -18 -45t18 -45l91 -91q18 -18 45 -18t45 18l189 189v-502q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v502l189 -189q19 -19 45 -19t45 19l91 91q18 18 18 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
||||
<glyph unicode="" d="M1284 639q0 27 -18 45l-91 91q-18 18 -45 18t-45 -18l-189 -189v502q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-502l-189 189q-19 19 -45 19t-45 -19l-91 -91q-18 -18 -18 -45t18 -45l362 -362l91 -91q18 -18 45 -18t45 18l91 91l362 362q18 18 18 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
||||
<glyph unicode="" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM1042 887q-2 -1 -9.5 -9.5t-13.5 -9.5q2 0 4.5 5t5 11t3.5 7q6 7 22 15q14 6 52 12q34 8 51 -11 q-2 2 9.5 13t14.5 12q3 2 15 4.5t15 7.5l2 22q-12 -1 -17.5 7t-6.5 21q0 -2 -6 -8q0 7 -4.5 8t-11.5 -1t-9 -1q-10 3 -15 7.5t-8 16.5t-4 15q-2 5 -9.5 10.5t-9.5 10.5q-1 2 -2.5 5.5t-3 6.5t-4 5.5t-5.5 2.5t-7 -5t-7.5 -10t-4.5 -5q-3 2 -6 1.5t-4.5 -1t-4.5 -3t-5 -3.5 q-3 -2 -8.5 -3t-8.5 -2q15 5 -1 11q-10 4 -16 3q9 4 7.5 12t-8.5 14h5q-1 4 -8.5 8.5t-17.5 8.5t-13 6q-8 5 -34 9.5t-33 0.5q-5 -6 -4.5 -10.5t4 -14t3.5 -12.5q1 -6 -5.5 -13t-6.5 -12q0 -7 14 -15.5t10 -21.5q-3 -8 -16 -16t-16 -12q-5 -8 -1.5 -18.5t10.5 -16.5 q2 -2 1.5 -4t-3.5 -4.5t-5.5 -4t-6.5 -3.5l-3 -2q-11 -5 -20.5 6t-13.5 26q-7 25 -16 30q-23 8 -29 -1q-5 13 -41 26q-25 9 -58 4q6 1 0 15q-7 15 -19 12q3 6 4 17.5t1 13.5q3 13 12 23q1 1 7 8.5t9.5 13.5t0.5 6q35 -4 50 11q5 5 11.5 17t10.5 17q9 6 14 5.5t14.5 -5.5 t14.5 -5q14 -1 15.5 11t-7.5 20q12 -1 3 17q-5 7 -8 9q-12 4 -27 -5q-8 -4 2 -8q-1 1 -9.5 -10.5t-16.5 -17.5t-16 5q-1 1 -5.5 13.5t-9.5 13.5q-8 0 -16 -15q3 8 -11 15t-24 8q19 12 -8 27q-7 4 -20.5 5t-19.5 -4q-5 -7 -5.5 -11.5t5 -8t10.5 -5.5t11.5 -4t8.5 -3 q14 -10 8 -14q-2 -1 -8.5 -3.5t-11.5 -4.5t-6 -4q-3 -4 0 -14t-2 -14q-5 5 -9 17.5t-7 16.5q7 -9 -25 -6l-10 1q-4 0 -16 -2t-20.5 -1t-13.5 8q-4 8 0 20q1 4 4 2q-4 3 -11 9.5t-10 8.5q-46 -15 -94 -41q6 -1 12 1q5 2 13 6.5t10 5.5q34 14 42 7l5 5q14 -16 20 -25 q-7 4 -30 1q-20 -6 -22 -12q7 -12 5 -18q-4 3 -11.5 10t-14.5 11t-15 5q-16 0 -22 -1q-146 -80 -235 -222q7 -7 12 -8q4 -1 5 -9t2.5 -11t11.5 3q9 -8 3 -19q1 1 44 -27q19 -17 21 -21q3 -11 -10 -18q-1 2 -9 9t-9 4q-3 -5 0.5 -18.5t10.5 -12.5q-7 0 -9.5 -16t-2.5 -35.5 t-1 -23.5l2 -1q-3 -12 5.5 -34.5t21.5 -19.5q-13 -3 20 -43q6 -8 8 -9q3 -2 12 -7.5t15 -10t10 -10.5q4 -5 10 -22.5t14 -23.5q-2 -6 9.5 -20t10.5 -23q-1 0 -2.5 -1t-2.5 -1q3 -7 15.5 -14t15.5 -13q1 -3 2 -10t3 -11t8 -2q2 20 -24 62q-15 25 -17 29q-3 5 -5.5 15.5 t-4.5 14.5q2 0 6 -1.5t8.5 -3.5t7.5 -4t2 -3q-3 -7 2 -17.5t12 -18.5t17 -19t12 -13q6 -6 14 -19.5t0 -13.5q9 0 20 -10t17 -20q5 -8 8 -26t5 -24q2 -7 8.5 -13.5t12.5 -9.5l16 -8t13 -7q5 -2 18.5 -10.5t21.5 -11.5q10 -4 16 -4t14.5 2.5t13.5 3.5q15 2 29 -15t21 -21 q36 -19 55 -11q-2 -1 0.5 -7.5t8 -15.5t9 -14.5t5.5 -8.5q5 -6 18 -15t18 -15q6 4 7 9q-3 -8 7 -20t18 -10q14 3 14 32q-31 -15 -49 18q0 1 -2.5 5.5t-4 8.5t-2.5 8.5t0 7.5t5 3q9 0 10 3.5t-2 12.5t-4 13q-1 8 -11 20t-12 15q-5 -9 -16 -8t-16 9q0 -1 -1.5 -5.5t-1.5 -6.5 q-13 0 -15 1q1 3 2.5 17.5t3.5 22.5q1 4 5.5 12t7.5 14.5t4 12.5t-4.5 9.5t-17.5 2.5q-19 -1 -26 -20q-1 -3 -3 -10.5t-5 -11.5t-9 -7q-7 -3 -24 -2t-24 5q-13 8 -22.5 29t-9.5 37q0 10 2.5 26.5t3 25t-5.5 24.5q3 2 9 9.5t10 10.5q2 1 4.5 1.5t4.5 0t4 1.5t3 6q-1 1 -4 3 q-3 3 -4 3q7 -3 28.5 1.5t27.5 -1.5q15 -11 22 2q0 1 -2.5 9.5t-0.5 13.5q5 -27 29 -9q3 -3 15.5 -5t17.5 -5q3 -2 7 -5.5t5.5 -4.5t5 0.5t8.5 6.5q10 -14 12 -24q11 -40 19 -44q7 -3 11 -2t4.5 9.5t0 14t-1.5 12.5l-1 8v18l-1 8q-15 3 -18.5 12t1.5 18.5t15 18.5q1 1 8 3.5 t15.5 6.5t12.5 8q21 19 15 35q7 0 11 9q-1 0 -5 3t-7.5 5t-4.5 2q9 5 2 16q5 3 7.5 11t7.5 10q9 -12 21 -2q7 8 1 16q5 7 20.5 10.5t18.5 9.5q7 -2 8 2t1 12t3 12q4 5 15 9t13 5l17 11q3 4 0 4q18 -2 31 11q10 11 -6 20q3 6 -3 9.5t-15 5.5q3 1 11.5 0.5t10.5 1.5 q15 10 -7 16q-17 5 -43 -12zM879 10q206 36 351 189q-3 3 -12.5 4.5t-12.5 3.5q-18 7 -24 8q1 7 -2.5 13t-8 9t-12.5 8t-11 7q-2 2 -7 6t-7 5.5t-7.5 4.5t-8.5 2t-10 -1l-3 -1q-3 -1 -5.5 -2.5t-5.5 -3t-4 -3t0 -2.5q-21 17 -36 22q-5 1 -11 5.5t-10.5 7t-10 1.5t-11.5 -7 q-5 -5 -6 -15t-2 -13q-7 5 0 17.5t2 18.5q-3 6 -10.5 4.5t-12 -4.5t-11.5 -8.5t-9 -6.5t-8.5 -5.5t-8.5 -7.5q-3 -4 -6 -12t-5 -11q-2 4 -11.5 6.5t-9.5 5.5q2 -10 4 -35t5 -38q7 -31 -12 -48q-27 -25 -29 -40q-4 -22 12 -26q0 -7 -8 -20.5t-7 -21.5q0 -6 2 -16z" />
|
||||
<glyph unicode="" horiz-adv-x="1664" d="M384 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1028 484l-682 -682q-37 -37 -90 -37q-52 0 -91 37l-106 108q-38 36 -38 90q0 53 38 91l681 681q39 -98 114.5 -173.5t173.5 -114.5zM1662 919q0 -39 -23 -106q-47 -134 -164.5 -217.5 t-258.5 -83.5q-185 0 -316.5 131.5t-131.5 316.5t131.5 316.5t316.5 131.5q58 0 121.5 -16.5t107.5 -46.5q16 -11 16 -28t-16 -28l-293 -169v-224l193 -107q5 3 79 48.5t135.5 81t70.5 35.5q15 0 23.5 -10t8.5 -25z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" d="M1024 128h640v128h-640v-128zM640 640h1024v128h-1024v-128zM1280 1152h384v128h-384v-128zM1792 320v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 832v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19 t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 1344v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45z" />
|
||||
<glyph unicode="" horiz-adv-x="1408" d="M1403 1241q17 -41 -14 -70l-493 -493v-742q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-256 256q-19 19 -19 45v486l-493 493q-31 29 -14 70q17 39 59 39h1280q42 0 59 -39z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" d="M640 1280h512v128h-512v-128zM1792 640v-480q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v480h672v-160q0 -26 19 -45t45 -19h320q26 0 45 19t19 45v160h672zM1024 640v-128h-256v128h256zM1792 1120v-384h-1792v384q0 66 47 113t113 47h352v160q0 40 28 68 t68 28h576q40 0 68 -28t28 -68v-160h352q66 0 113 -47t47 -113z" />
|
||||
<glyph unicode="" d="M1283 995l-355 -355l355 -355l144 144q29 31 70 14q39 -17 39 -59v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l144 144l-355 355l-355 -355l144 -144q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l144 -144 l355 355l-355 355l-144 -144q-19 -19 -45 -19q-12 0 -24 5q-40 17 -40 59v448q0 26 19 45t45 19h448q42 0 59 -40q17 -39 -14 -69l-144 -144l355 -355l355 355l-144 144q-31 30 -14 69q17 40 59 40h448q26 0 45 -19t19 -45v-448q0 -42 -39 -59q-13 -5 -25 -5q-26 0 -45 19z " />
|
||||
<glyph unicode="" horiz-adv-x="1920" d="M593 640q-162 -5 -265 -128h-134q-82 0 -138 40.5t-56 118.5q0 353 124 353q6 0 43.5 -21t97.5 -42.5t119 -21.5q67 0 133 23q-5 -37 -5 -66q0 -139 81 -256zM1664 3q0 -120 -73 -189.5t-194 -69.5h-874q-121 0 -194 69.5t-73 189.5q0 53 3.5 103.5t14 109t26.5 108.5 t43 97.5t62 81t85.5 53.5t111.5 20q10 0 43 -21.5t73 -48t107 -48t135 -21.5t135 21.5t107 48t73 48t43 21.5q61 0 111.5 -20t85.5 -53.5t62 -81t43 -97.5t26.5 -108.5t14 -109t3.5 -103.5zM640 1280q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75 t75 -181zM1344 896q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5zM1920 671q0 -78 -56 -118.5t-138 -40.5h-134q-103 123 -265 128q81 117 81 256q0 29 -5 66q66 -23 133 -23q59 0 119 21.5t97.5 42.5 t43.5 21q124 0 124 -353zM1792 1280q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181z" />
|
||||
<glyph unicode="" horiz-adv-x="1664" d="M1456 320q0 40 -28 68l-208 208q-28 28 -68 28q-42 0 -72 -32q3 -3 19 -18.5t21.5 -21.5t15 -19t13 -25.5t3.5 -27.5q0 -40 -28 -68t-68 -28q-15 0 -27.5 3.5t-25.5 13t-19 15t-21.5 21.5t-18.5 19q-33 -31 -33 -73q0 -40 28 -68l206 -207q27 -27 68 -27q40 0 68 26 l147 146q28 28 28 67zM753 1025q0 40 -28 68l-206 207q-28 28 -68 28q-39 0 -68 -27l-147 -146q-28 -28 -28 -67q0 -40 28 -68l208 -208q27 -27 68 -27q42 0 72 31q-3 3 -19 18.5t-21.5 21.5t-15 19t-13 25.5t-3.5 27.5q0 40 28 68t68 28q15 0 27.5 -3.5t25.5 -13t19 -15 t21.5 -21.5t18.5 -19q33 31 33 73zM1648 320q0 -120 -85 -203l-147 -146q-83 -83 -203 -83q-121 0 -204 85l-206 207q-83 83 -83 203q0 123 88 209l-88 88q-86 -88 -208 -88q-120 0 -204 84l-208 208q-84 84 -84 204t85 203l147 146q83 83 203 83q121 0 204 -85l206 -207 q83 -83 83 -203q0 -123 -88 -209l88 -88q86 88 208 88q120 0 204 -84l208 -208q84 -84 84 -204z" />
|
||||
<glyph unicode="" horiz-adv-x="1920" d="M1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088q-185 0 -316.5 131.5t-131.5 316.5q0 132 71 241.5t187 163.5q-2 28 -2 43q0 212 150 362t362 150q158 0 286.5 -88t187.5 -230q70 62 166 62q106 0 181 -75t75 -181q0 -75 -41 -138q129 -30 213 -134.5t84 -239.5z " />
|
||||
<glyph unicode="" horiz-adv-x="1664" d="M1527 88q56 -89 21.5 -152.5t-140.5 -63.5h-1152q-106 0 -140.5 63.5t21.5 152.5l503 793v399h-64q-26 0 -45 19t-19 45t19 45t45 19h512q26 0 45 -19t19 -45t-19 -45t-45 -19h-64v-399zM748 813l-272 -429h712l-272 429l-20 31v37v399h-128v-399v-37z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" d="M960 640q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1260 576l507 -398q28 -20 25 -56q-5 -35 -35 -51l-128 -64q-13 -7 -29 -7q-17 0 -31 8l-690 387l-110 -66q-8 -4 -12 -5q14 -49 10 -97q-7 -77 -56 -147.5t-132 -123.5q-132 -84 -277 -84 q-136 0 -222 78q-90 84 -79 207q7 76 56 147t131 124q132 84 278 84q83 0 151 -31q9 13 22 22l122 73l-122 73q-13 9 -22 22q-68 -31 -151 -31q-146 0 -278 84q-82 53 -131 124t-56 147q-5 59 15.5 113t63.5 93q85 79 222 79q145 0 277 -84q83 -52 132 -123t56 -148 q4 -48 -10 -97q4 -1 12 -5l110 -66l690 387q14 8 31 8q16 0 29 -7l128 -64q30 -16 35 -51q3 -36 -25 -56zM579 836q46 42 21 108t-106 117q-92 59 -192 59q-74 0 -113 -36q-46 -42 -21 -108t106 -117q92 -59 192 -59q74 0 113 36zM494 91q81 51 106 117t-21 108 q-39 36 -113 36q-100 0 -192 -59q-81 -51 -106 -117t21 -108q39 -36 113 -36q100 0 192 59zM672 704l96 -58v11q0 36 33 56l14 8l-79 47l-26 -26q-3 -3 -10 -11t-12 -12q-2 -2 -4 -3.5t-3 -2.5zM896 480l96 -32l736 576l-128 64l-768 -431v-113l-160 -96l9 -8q2 -2 7 -6 q4 -4 11 -12t11 -12l26 -26zM1600 64l128 64l-520 408l-177 -138q-2 -3 -13 -7z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" d="M1696 1152q40 0 68 -28t28 -68v-1216q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v288h-544q-40 0 -68 28t-28 68v672q0 40 20 88t48 76l408 408q28 28 76 48t88 20h416q40 0 68 -28t28 -68v-328q68 40 128 40h416zM1152 939l-299 -299h299v299zM512 1323l-299 -299 h299v299zM708 676l316 316v416h-384v-416q0 -40 -28 -68t-68 -28h-416v-640h512v256q0 40 20 88t48 76zM1664 -128v1152h-384v-416q0 -40 -28 -68t-68 -28h-416v-640h896z" />
|
||||
<glyph unicode="" horiz-adv-x="1408" d="M1404 151q0 -117 -79 -196t-196 -79q-135 0 -235 100l-777 776q-113 115 -113 271q0 159 110 270t269 111q158 0 273 -113l605 -606q10 -10 10 -22q0 -16 -30.5 -46.5t-46.5 -30.5q-13 0 -23 10l-606 607q-79 77 -181 77q-106 0 -179 -75t-73 -181q0 -105 76 -181 l776 -777q63 -63 145 -63q64 0 106 42t42 106q0 82 -63 145l-581 581q-26 24 -60 24q-29 0 -48 -19t-19 -48q0 -32 25 -59l410 -410q10 -10 10 -22q0 -16 -31 -47t-47 -31q-12 0 -22 10l-410 410q-63 61 -63 149q0 82 57 139t139 57q88 0 149 -63l581 -581q100 -98 100 -235 z" />
|
||||
<glyph unicode="" d="M384 0h768v384h-768v-384zM1280 0h128v896q0 14 -10 38.5t-20 34.5l-281 281q-10 10 -34 20t-39 10v-416q0 -40 -28 -68t-68 -28h-576q-40 0 -68 28t-28 68v416h-128v-1280h128v416q0 40 28 68t68 28h832q40 0 68 -28t28 -68v-416zM896 928v320q0 13 -9.5 22.5t-22.5 9.5 h-192q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 22.5zM1536 896v-928q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h928q40 0 88 -20t76 -48l280 -280q28 -28 48 -76t20 -88z" />
|
||||
<glyph unicode="" d="M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
|
||||
<glyph unicode="" d="M1536 192v-128q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1536 704v-128q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1536 1216v-128q0 -26 -19 -45 t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" d="M384 128q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM384 640q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5 t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5zM384 1152q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1792 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z M1792 1248v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" d="M381 -84q0 -80 -54.5 -126t-135.5 -46q-106 0 -172 66l57 88q49 -45 106 -45q29 0 50.5 14.5t21.5 42.5q0 64 -105 56l-26 56q8 10 32.5 43.5t42.5 54t37 38.5v1q-16 0 -48.5 -1t-48.5 -1v-53h-106v152h333v-88l-95 -115q51 -12 81 -49t30 -88zM383 543v-159h-362 q-6 36 -6 54q0 51 23.5 93t56.5 68t66 47.5t56.5 43.5t23.5 45q0 25 -14.5 38.5t-39.5 13.5q-46 0 -81 -58l-85 59q24 51 71.5 79.5t105.5 28.5q73 0 123 -41.5t50 -112.5q0 -50 -34 -91.5t-75 -64.5t-75.5 -50.5t-35.5 -52.5h127v60h105zM1792 224v-192q0 -13 -9.5 -22.5 t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 14 9 23t23 9h1216q13 0 22.5 -9.5t9.5 -22.5zM384 1123v-99h-335v99h107q0 41 0.5 122t0.5 121v12h-2q-8 -17 -50 -54l-71 76l136 127h106v-404h108zM1792 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5 t-9.5 22.5v192q0 14 9 23t23 9h1216q13 0 22.5 -9.5t9.5 -22.5zM1792 1248v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" d="M1760 640q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1728q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h1728zM483 704q-28 35 -51 80q-48 97 -48 188q0 181 134 309q133 127 393 127q50 0 167 -19q66 -12 177 -48q10 -38 21 -118q14 -123 14 -183q0 -18 -5 -45l-12 -3l-84 6 l-14 2q-50 149 -103 205q-88 91 -210 91q-114 0 -182 -59q-67 -58 -67 -146q0 -73 66 -140t279 -129q69 -20 173 -66q58 -28 95 -52h-743zM990 448h411q7 -39 7 -92q0 -111 -41 -212q-23 -55 -71 -104q-37 -35 -109 -81q-80 -48 -153 -66q-80 -21 -203 -21q-114 0 -195 23 l-140 40q-57 16 -72 28q-8 8 -8 22v13q0 108 -2 156q-1 30 0 68l2 37v44l102 2q15 -34 30 -71t22.5 -56t12.5 -27q35 -57 80 -94q43 -36 105 -57q59 -22 132 -22q64 0 139 27q77 26 122 86q47 61 47 129q0 84 -81 157q-34 29 -137 71z" />
|
||||
<glyph unicode="" d="M48 1313q-37 2 -45 4l-3 88q13 1 40 1q60 0 112 -4q132 -7 166 -7q86 0 168 3q116 4 146 5q56 0 86 2l-1 -14l2 -64v-9q-60 -9 -124 -9q-60 0 -79 -25q-13 -14 -13 -132q0 -13 0.5 -32.5t0.5 -25.5l1 -229l14 -280q6 -124 51 -202q35 -59 96 -92q88 -47 177 -47 q104 0 191 28q56 18 99 51q48 36 65 64q36 56 53 114q21 73 21 229q0 79 -3.5 128t-11 122.5t-13.5 159.5l-4 59q-5 67 -24 88q-34 35 -77 34l-100 -2l-14 3l2 86h84l205 -10q76 -3 196 10l18 -2q6 -38 6 -51q0 -7 -4 -31q-45 -12 -84 -13q-73 -11 -79 -17q-15 -15 -15 -41 q0 -7 1.5 -27t1.5 -31q8 -19 22 -396q6 -195 -15 -304q-15 -76 -41 -122q-38 -65 -112 -123q-75 -57 -182 -89q-109 -33 -255 -33q-167 0 -284 46q-119 47 -179 122q-61 76 -83 195q-16 80 -16 237v333q0 188 -17 213q-25 36 -147 39zM1536 -96v64q0 14 -9 23t-23 9h-1472 q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h1472q14 0 23 9t9 23z" />
|
||||
<glyph unicode="" horiz-adv-x="1664" d="M512 160v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM512 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 160v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23 v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM512 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 160v192 q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192 q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1664 1248v-1088q0 -66 -47 -113t-113 -47h-1344q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1344q66 0 113 -47t47 -113 z" />
|
||||
<glyph unicode="" horiz-adv-x="1664" d="M1190 955l293 293l-107 107l-293 -293zM1637 1248q0 -27 -18 -45l-1286 -1286q-18 -18 -45 -18t-45 18l-198 198q-18 18 -18 45t18 45l1286 1286q18 18 45 18t45 -18l198 -198q18 -18 18 -45zM286 1438l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98zM636 1276 l196 -60l-196 -60l-60 -196l-60 196l-196 60l196 60l60 196zM1566 798l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98zM926 1438l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" d="M640 128q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM256 640h384v256h-158q-13 0 -22 -9l-195 -195q-9 -9 -9 -22v-30zM1536 128q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM1792 1216v-1024q0 -15 -4 -26.5t-13.5 -18.5 t-16.5 -11.5t-23.5 -6t-22.5 -2t-25.5 0t-22.5 0.5q0 -106 -75 -181t-181 -75t-181 75t-75 181h-384q0 -106 -75 -181t-181 -75t-181 75t-75 181h-64q-3 0 -22.5 -0.5t-25.5 0t-22.5 2t-23.5 6t-16.5 11.5t-13.5 18.5t-4 26.5q0 26 19 45t45 19v320q0 8 -0.5 35t0 38 t2.5 34.5t6.5 37t14 30.5t22.5 30l198 198q19 19 50.5 32t58.5 13h160v192q0 26 19 45t45 19h1024q26 0 45 -19t19 -45z" />
|
||||
<glyph unicode="" d="M1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103q-111 0 -218 32q59 93 78 164q9 34 54 211q20 -39 73 -67.5t114 -28.5q121 0 216 68.5t147 188.5t52 270q0 114 -59.5 214t-172.5 163t-255 63q-105 0 -196 -29t-154.5 -77t-109 -110.5t-67 -129.5t-21.5 -134 q0 -104 40 -183t117 -111q30 -12 38 20q2 7 8 31t8 30q6 23 -11 43q-51 61 -51 151q0 151 104.5 259.5t273.5 108.5q151 0 235.5 -82t84.5 -213q0 -170 -68.5 -289t-175.5 -119q-61 0 -98 43.5t-23 104.5q8 35 26.5 93.5t30 103t11.5 75.5q0 50 -27 83t-77 33 q-62 0 -105 -57t-43 -142q0 -73 25 -122l-99 -418q-17 -70 -13 -177q-206 91 -333 281t-127 423q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
||||
<glyph unicode="" d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-725q85 122 108 210q9 34 53 209q21 -39 73.5 -67t112.5 -28q181 0 295.5 147.5t114.5 373.5q0 84 -35 162.5t-96.5 139t-152.5 97t-197 36.5q-104 0 -194.5 -28.5t-153 -76.5 t-107.5 -109.5t-66.5 -128t-21.5 -132.5q0 -102 39.5 -180t116.5 -110q13 -5 23.5 0t14.5 19q10 44 15 61q6 23 -11 42q-50 62 -50 150q0 150 103.5 256.5t270.5 106.5q149 0 232.5 -81t83.5 -210q0 -168 -67.5 -286t-173.5 -118q-60 0 -97 43.5t-23 103.5q8 34 26.5 92.5 t29.5 102t11 74.5q0 49 -26.5 81.5t-75.5 32.5q-61 0 -103.5 -56.5t-42.5 -139.5q0 -72 24 -121l-98 -414q-24 -100 -7 -254h-183q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960z" />
|
||||
<glyph unicode="" d="M678 -57q0 -38 -10 -71h-380q-95 0 -171.5 56.5t-103.5 147.5q24 45 69 77.5t100 49.5t107 24t107 7q32 0 49 -2q6 -4 30.5 -21t33 -23t31 -23t32 -25.5t27.5 -25.5t26.5 -29.5t21 -30.5t17.5 -34.5t9.5 -36t4.5 -40.5zM385 294q-234 -7 -385 -85v433q103 -118 273 -118 q32 0 70 5q-21 -61 -21 -86q0 -67 63 -149zM558 805q0 -100 -43.5 -160.5t-140.5 -60.5q-51 0 -97 26t-78 67.5t-56 93.5t-35.5 104t-11.5 99q0 96 51.5 165t144.5 69q66 0 119 -41t84 -104t47 -130t16 -128zM1536 896v-736q0 -119 -84.5 -203.5t-203.5 -84.5h-468 q39 73 39 157q0 66 -22 122.5t-55.5 93t-72 71t-72 59.5t-55.5 54.5t-22 59.5q0 36 23 68t56 61.5t65.5 64.5t55.5 93t23 131t-26.5 145.5t-75.5 118.5q-6 6 -14 11t-12.5 7.5t-10 9.5t-10.5 17h135l135 64h-437q-138 0 -244.5 -38.5t-182.5 -133.5q0 126 81 213t207 87h960 q119 0 203.5 -84.5t84.5 -203.5v-96h-256v256h-128v-256h-256v-128h256v-256h128v256h256z" />
|
||||
<glyph unicode="" horiz-adv-x="1664" d="M876 71q0 21 -4.5 40.5t-9.5 36t-17.5 34.5t-21 30.5t-26.5 29.5t-27.5 25.5t-32 25.5t-31 23t-33 23t-30.5 21q-17 2 -50 2q-54 0 -106 -7t-108 -25t-98 -46t-69 -75t-27 -107q0 -68 35.5 -121.5t93 -84t120.5 -45.5t127 -15q59 0 112.5 12.5t100.5 39t74.5 73.5 t27.5 110zM756 933q0 60 -16.5 127.5t-47 130.5t-84 104t-119.5 41q-93 0 -144 -69t-51 -165q0 -47 11.5 -99t35.5 -104t56 -93.5t78 -67.5t97 -26q97 0 140.5 60.5t43.5 160.5zM625 1408h437l-135 -79h-135q71 -45 110 -126t39 -169q0 -74 -23 -131.5t-56 -92.5t-66 -64.5 t-56 -61t-23 -67.5q0 -26 16.5 -51t43 -48t58.5 -48t64 -55.5t58.5 -66t43 -85t16.5 -106.5q0 -160 -140 -282q-152 -131 -420 -131q-59 0 -119.5 10t-122 33.5t-108.5 58t-77 89t-30 121.5q0 61 37 135q32 64 96 110.5t145 71t155 36t150 13.5q-64 83 -64 149q0 12 2 23.5 t5 19.5t8 21.5t7 21.5q-40 -5 -70 -5q-149 0 -255.5 98t-106.5 246q0 140 95 250.5t234 141.5q94 20 187 20zM1664 1152v-128h-256v-256h-128v256h-256v128h256v256h128v-256h256z" />
|
||||
<glyph unicode="" horiz-adv-x="1920" d="M768 384h384v96h-128v448h-114l-148 -137l77 -80q42 37 55 57h2v-288h-128v-96zM1280 640q0 -70 -21 -142t-59.5 -134t-101.5 -101t-138 -39t-138 39t-101.5 101t-59.5 134t-21 142t21 142t59.5 134t101.5 101t138 39t138 -39t101.5 -101t59.5 -134t21 -142zM1792 384 v512q-106 0 -181 75t-75 181h-1152q0 -106 -75 -181t-181 -75v-512q106 0 181 -75t75 -181h1152q0 106 75 181t181 75zM1920 1216v-1152q0 -26 -19 -45t-45 -19h-1792q-26 0 -45 19t-19 45v1152q0 26 19 45t45 19h1792q26 0 45 -19t19 -45z" />
|
||||
<glyph unicode="" horiz-adv-x="1024" d="M1024 832q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45z" />
|
||||
<glyph unicode="" horiz-adv-x="1024" d="M1024 320q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
|
||||
<glyph unicode="" horiz-adv-x="640" d="M640 1088v-896q0 -26 -19 -45t-45 -19t-45 19l-448 448q-19 19 -19 45t19 45l448 448q19 19 45 19t45 -19t19 -45z" />
|
||||
<glyph unicode="" horiz-adv-x="640" d="M576 640q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19t-19 45v896q0 26 19 45t45 19t45 -19l448 -448q19 -19 19 -45z" />
|
||||
<glyph unicode="" horiz-adv-x="1664" d="M160 0h608v1152h-640v-1120q0 -13 9.5 -22.5t22.5 -9.5zM1536 32v1120h-640v-1152h608q13 0 22.5 9.5t9.5 22.5zM1664 1248v-1216q0 -66 -47 -113t-113 -47h-1344q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1344q66 0 113 -47t47 -113z" />
|
||||
<glyph unicode="" horiz-adv-x="1024" d="M1024 448q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45zM1024 832q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
|
||||
<glyph unicode="" horiz-adv-x="1024" d="M1024 448q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45z" />
|
||||
<glyph unicode="" horiz-adv-x="1024" d="M1024 832q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" d="M1792 826v-794q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v794q44 -49 101 -87q362 -246 497 -345q57 -42 92.5 -65.5t94.5 -48t110 -24.5h1h1q51 0 110 24.5t94.5 48t92.5 65.5q170 123 498 345q57 39 100 87zM1792 1120q0 -79 -49 -151t-122 -123 q-376 -261 -468 -325q-10 -7 -42.5 -30.5t-54 -38t-52 -32.5t-57.5 -27t-50 -9h-1h-1q-23 0 -50 9t-57.5 27t-52 32.5t-54 38t-42.5 30.5q-91 64 -262 182.5t-205 142.5q-62 42 -117 115.5t-55 136.5q0 78 41.5 130t118.5 52h1472q65 0 112.5 -47t47.5 -113z" />
|
||||
<glyph unicode="" d="M349 911v-991h-330v991h330zM370 1217q1 -73 -50.5 -122t-135.5 -49h-2q-82 0 -132 49t-50 122q0 74 51.5 122.5t134.5 48.5t133 -48.5t51 -122.5zM1536 488v-568h-329v530q0 105 -40.5 164.5t-126.5 59.5q-63 0 -105.5 -34.5t-63.5 -85.5q-11 -30 -11 -81v-553h-329 q2 399 2 647t-1 296l-1 48h329v-144h-2q20 32 41 56t56.5 52t87 43.5t114.5 15.5q171 0 275 -113.5t104 -332.5z" />
|
||||
<glyph unicode="" d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61q-172 0 -327 72.5t-264 204.5q-7 10 -6.5 22.5t8.5 20.5l137 138q10 9 25 9q16 -2 23 -12q73 -95 179 -147t225 -52q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5 t-163.5 109.5t-198.5 40.5q-98 0 -188 -35.5t-160 -101.5l137 -138q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l130 -129q107 101 244.5 156.5t284.5 55.5q156 0 298 -61t245 -164t164 -245t61 -298z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" d="M1771 0q0 -53 -37 -90l-107 -108q-39 -37 -91 -37q-53 0 -90 37l-363 364q-38 36 -38 90q0 53 43 96l-256 256l-126 -126q-14 -14 -34 -14t-34 14q2 -2 12.5 -12t12.5 -13t10 -11.5t10 -13.5t6 -13.5t5.5 -16.5t1.5 -18q0 -38 -28 -68q-3 -3 -16.5 -18t-19 -20.5 t-18.5 -16.5t-22 -15.5t-22 -9t-26 -4.5q-40 0 -68 28l-408 408q-28 28 -28 68q0 13 4.5 26t9 22t15.5 22t16.5 18.5t20.5 19t18 16.5q30 28 68 28q10 0 18 -1.5t16.5 -5.5t13.5 -6t13.5 -10t11.5 -10t13 -12.5t12 -12.5q-14 14 -14 34t14 34l348 348q14 14 34 14t34 -14 q-2 2 -12.5 12t-12.5 13t-10 11.5t-10 13.5t-6 13.5t-5.5 16.5t-1.5 18q0 38 28 68q3 3 16.5 18t19 20.5t18.5 16.5t22 15.5t22 9t26 4.5q40 0 68 -28l408 -408q28 -28 28 -68q0 -13 -4.5 -26t-9 -22t-15.5 -22t-16.5 -18.5t-20.5 -19t-18 -16.5q-30 -28 -68 -28 q-10 0 -18 1.5t-16.5 5.5t-13.5 6t-13.5 10t-11.5 10t-13 12.5t-12 12.5q14 -14 14 -34t-14 -34l-126 -126l256 -256q43 43 96 43q52 0 91 -37l363 -363q37 -39 37 -91z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" d="M384 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM576 832q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1004 351l101 382q6 26 -7.5 48.5t-38.5 29.5 t-48 -6.5t-30 -39.5l-101 -382q-60 -5 -107 -43.5t-63 -98.5q-20 -77 20 -146t117 -89t146 20t89 117q16 60 -6 117t-72 91zM1664 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 1024q0 53 -37.5 90.5 t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1472 832q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1792 384q0 -261 -141 -483q-19 -29 -54 -29h-1402q-35 0 -54 29 q-141 221 -141 483q0 182 71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" d="M896 1152q-204 0 -381.5 -69.5t-282 -187.5t-104.5 -255q0 -112 71.5 -213.5t201.5 -175.5l87 -50l-27 -96q-24 -91 -70 -172q152 63 275 171l43 38l57 -6q69 -8 130 -8q204 0 381.5 69.5t282 187.5t104.5 255t-104.5 255t-282 187.5t-381.5 69.5zM1792 640 q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22h-5q-15 0 -27 10.5t-16 27.5v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51t27 59t26 76q-157 89 -247.5 220t-90.5 281q0 174 120 321.5 t326 233t450 85.5t450 -85.5t326 -233t120 -321.5z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" d="M704 1152q-153 0 -286 -52t-211.5 -141t-78.5 -191q0 -82 53 -158t149 -132l97 -56l-35 -84q34 20 62 39l44 31l53 -10q78 -14 153 -14q153 0 286 52t211.5 141t78.5 191t-78.5 191t-211.5 141t-286 52zM704 1280q191 0 353.5 -68.5t256.5 -186.5t94 -257t-94 -257 t-256.5 -186.5t-353.5 -68.5q-86 0 -176 16q-124 -88 -278 -128q-36 -9 -86 -16h-3q-11 0 -20.5 8t-11.5 21q-1 3 -1 6.5t0.5 6.5t2 6l2.5 5t3.5 5.5t4 5t4.5 5t4 4.5q5 6 23 25t26 29.5t22.5 29t25 38.5t20.5 44q-124 72 -195 177t-71 224q0 139 94 257t256.5 186.5 t353.5 68.5zM1526 111q10 -24 20.5 -44t25 -38.5t22.5 -29t26 -29.5t23 -25q1 -1 4 -4.5t4.5 -5t4 -5t3.5 -5.5l2.5 -5t2 -6t0.5 -6.5t-1 -6.5q-3 -14 -13 -22t-22 -7q-50 7 -86 16q-154 40 -278 128q-90 -16 -176 -16q-271 0 -472 132q58 -4 88 -4q161 0 309 45t264 129 q125 92 192 212t67 254q0 77 -23 152q129 -71 204 -178t75 -230q0 -120 -71 -224.5t-195 -176.5z" />
|
||||
<glyph unicode="" horiz-adv-x="896" d="M885 970q18 -20 7 -44l-540 -1157q-13 -25 -42 -25q-4 0 -14 2q-17 5 -25.5 19t-4.5 30l197 808l-406 -101q-4 -1 -12 -1q-18 0 -31 11q-18 15 -13 39l201 825q4 14 16 23t28 9h328q19 0 32 -12.5t13 -29.5q0 -8 -5 -18l-171 -463l396 98q8 2 12 2q19 0 34 -15z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" d="M1792 288v-320q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192h-512v-192h96q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192h-512v-192h96q40 0 68 -28t28 -68v-320 q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192q0 52 38 90t90 38h512v192h-96q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h320q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-96v-192h512q52 0 90 -38t38 -90v-192h96q40 0 68 -28t28 -68 z" />
|
||||
<glyph unicode="" horiz-adv-x="1664" d="M896 708v-580q0 -104 -76 -180t-180 -76t-180 76t-76 180q0 26 19 45t45 19t45 -19t19 -45q0 -50 39 -89t89 -39t89 39t39 89v580q33 11 64 11t64 -11zM1664 681q0 -13 -9.5 -22.5t-22.5 -9.5q-11 0 -23 10q-49 46 -93 69t-102 23q-68 0 -128 -37t-103 -97 q-7 -10 -17.5 -28t-14.5 -24q-11 -17 -28 -17q-18 0 -29 17q-4 6 -14.5 24t-17.5 28q-43 60 -102.5 97t-127.5 37t-127.5 -37t-102.5 -97q-7 -10 -17.5 -28t-14.5 -24q-11 -17 -29 -17q-17 0 -28 17q-4 6 -14.5 24t-17.5 28q-43 60 -103 97t-128 37q-58 0 -102 -23t-93 -69 q-12 -10 -23 -10q-13 0 -22.5 9.5t-9.5 22.5q0 5 1 7q45 183 172.5 319.5t298 204.5t360.5 68q140 0 274.5 -40t246.5 -113.5t194.5 -187t115.5 -251.5q1 -2 1 -7zM896 1408v-98q-42 2 -64 2t-64 -2v98q0 26 19 45t45 19t45 -19t19 -45z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" d="M768 -128h896v640h-416q-40 0 -68 28t-28 68v416h-384v-1152zM1024 1312v64q0 13 -9.5 22.5t-22.5 9.5h-704q-13 0 -22.5 -9.5t-9.5 -22.5v-64q0 -13 9.5 -22.5t22.5 -9.5h704q13 0 22.5 9.5t9.5 22.5zM1280 640h299l-299 299v-299zM1792 512v-672q0 -40 -28 -68t-68 -28 h-960q-40 0 -68 28t-28 68v160h-544q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h1088q40 0 68 -28t28 -68v-328q21 -13 36 -28l408 -408q28 -28 48 -76t20 -88z" />
|
||||
<glyph unicode="" horiz-adv-x="1024" d="M736 960q0 -13 -9.5 -22.5t-22.5 -9.5t-22.5 9.5t-9.5 22.5q0 46 -54 71t-106 25q-13 0 -22.5 9.5t-9.5 22.5t9.5 22.5t22.5 9.5q50 0 99.5 -16t87 -54t37.5 -90zM896 960q0 72 -34.5 134t-90 101.5t-123 62t-136.5 22.5t-136.5 -22.5t-123 -62t-90 -101.5t-34.5 -134 q0 -101 68 -180q10 -11 30.5 -33t30.5 -33q128 -153 141 -298h228q13 145 141 298q10 11 30.5 33t30.5 33q68 79 68 180zM1024 960q0 -155 -103 -268q-45 -49 -74.5 -87t-59.5 -95.5t-34 -107.5q47 -28 47 -82q0 -37 -25 -64q25 -27 25 -64q0 -52 -45 -81q13 -23 13 -47 q0 -46 -31.5 -71t-77.5 -25q-20 -44 -60 -70t-87 -26t-87 26t-60 70q-46 0 -77.5 25t-31.5 71q0 24 13 47q-45 29 -45 81q0 37 25 64q-25 27 -25 64q0 54 47 82q-4 50 -34 107.5t-59.5 95.5t-74.5 87q-103 113 -103 268q0 99 44.5 184.5t117 142t164 89t186.5 32.5 t186.5 -32.5t164 -89t117 -142t44.5 -184.5z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" d="M1792 352v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5q-12 0 -24 10l-319 320q-9 9 -9 22q0 14 9 23l320 320q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5v-192h1376q13 0 22.5 -9.5t9.5 -22.5zM1792 896q0 -14 -9 -23l-320 -320q-9 -9 -23 -9 q-13 0 -22.5 9.5t-9.5 22.5v192h-1376q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1376v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23z" />
|
||||
<glyph unicode="" horiz-adv-x="1920" d="M1280 608q0 14 -9 23t-23 9h-224v352q0 13 -9.5 22.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -22.5v-352h-224q-13 0 -22.5 -9.5t-9.5 -22.5q0 -14 9 -23l352 -352q9 -9 23 -9t23 9l351 351q10 12 10 24zM1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088 q-185 0 -316.5 131.5t-131.5 316.5q0 130 70 240t188 165q-2 30 -2 43q0 212 150 362t362 150q156 0 285.5 -87t188.5 -231q71 62 166 62q106 0 181 -75t75 -181q0 -76 -41 -138q130 -31 213.5 -135.5t83.5 -238.5z" />
|
||||
<glyph unicode="" horiz-adv-x="1920" d="M1280 672q0 14 -9 23l-352 352q-9 9 -23 9t-23 -9l-351 -351q-10 -12 -10 -24q0 -14 9 -23t23 -9h224v-352q0 -13 9.5 -22.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 22.5v352h224q13 0 22.5 9.5t9.5 22.5zM1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088 q-185 0 -316.5 131.5t-131.5 316.5q0 130 70 240t188 165q-2 30 -2 43q0 212 150 362t362 150q156 0 285.5 -87t188.5 -231q71 62 166 62q106 0 181 -75t75 -181q0 -76 -41 -138q130 -31 213.5 -135.5t83.5 -238.5z" />
|
||||
<glyph unicode="" horiz-adv-x="1408" d="M384 192q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45t45 19t45 -19t19 -45zM1408 131q0 -121 -73 -190t-194 -69h-874q-121 0 -194 69t-73 190q0 68 5.5 131t24 138t47.5 132.5t81 103t120 60.5q-22 -52 -22 -120v-203q-58 -20 -93 -70t-35 -111q0 -80 56 -136t136 -56 t136 56t56 136q0 61 -35.5 111t-92.5 70v203q0 62 25 93q132 -104 295 -104t295 104q25 -31 25 -93v-64q-106 0 -181 -75t-75 -181v-89q-32 -29 -32 -71q0 -40 28 -68t68 -28t68 28t28 68q0 42 -32 71v89q0 52 38 90t90 38t90 -38t38 -90v-89q-32 -29 -32 -71q0 -40 28 -68 t68 -28t68 28t28 68q0 42 -32 71v89q0 68 -34.5 127.5t-93.5 93.5q0 10 0.5 42.5t0 48t-2.5 41.5t-7 47t-13 40q68 -15 120 -60.5t81 -103t47.5 -132.5t24 -138t5.5 -131zM1088 1024q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5 t271.5 -112.5t112.5 -271.5z" />
|
||||
<glyph unicode="" horiz-adv-x="1408" d="M1280 832q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 832q0 -62 -35.5 -111t-92.5 -70v-395q0 -159 -131.5 -271.5t-316.5 -112.5t-316.5 112.5t-131.5 271.5v132q-164 20 -274 128t-110 252v512q0 26 19 45t45 19q6 0 16 -2q17 30 47 48 t65 18q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5q-33 0 -64 18v-402q0 -106 94 -181t226 -75t226 75t94 181v402q-31 -18 -64 -18q-53 0 -90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5q35 0 65 -18t47 -48q10 2 16 2q26 0 45 -19t19 -45v-512q0 -144 -110 -252 t-274 -128v-132q0 -106 94 -181t226 -75t226 75t94 181v395q-57 21 -92.5 70t-35.5 111q0 80 56 136t136 56t136 -56t56 -136z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" d="M640 1152h512v128h-512v-128zM288 1152v-1280h-64q-92 0 -158 66t-66 158v832q0 92 66 158t158 66h64zM1408 1152v-1280h-1024v1280h128v160q0 40 28 68t68 28h576q40 0 68 -28t28 -68v-160h128zM1792 928v-832q0 -92 -66 -158t-158 -66h-64v1280h64q92 0 158 -66 t66 -158z" />
|
||||
<glyph unicode="" horiz-adv-x="1664" d="M848 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM1664 128q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-181 75t-75 181h-448q-52 0 -90 38t-38 90q190 161 287 397.5t97 498.5 q0 165 96 262t264 117q-8 18 -8 37q0 40 28 68t68 28t68 -28t28 -68q0 -19 -8 -37q168 -20 264 -117t96 -262q0 -262 97 -498.5t287 -397.5z" />
|
||||
<glyph unicode="" horiz-adv-x="1920" d="M1664 896q0 80 -56 136t-136 56h-64v-384h64q80 0 136 56t56 136zM0 128h1792q0 -106 -75 -181t-181 -75h-1280q-106 0 -181 75t-75 181zM1856 896q0 -159 -112.5 -271.5t-271.5 -112.5h-64v-32q0 -92 -66 -158t-158 -66h-704q-92 0 -158 66t-66 158v736q0 26 19 45 t45 19h1152q159 0 271.5 -112.5t112.5 -271.5z" />
|
||||
<glyph unicode="" horiz-adv-x="1408" d="M640 1472v-640q0 -61 -35.5 -111t-92.5 -70v-779q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v779q-57 20 -92.5 70t-35.5 111v640q0 26 19 45t45 19t45 -19t19 -45v-416q0 -26 19 -45t45 -19t45 19t19 45v416q0 26 19 45t45 19t45 -19t19 -45v-416q0 -26 19 -45 t45 -19t45 19t19 45v416q0 26 19 45t45 19t45 -19t19 -45zM1408 1472v-1600q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v512h-224q-13 0 -22.5 9.5t-9.5 22.5v800q0 132 94 226t226 94h256q26 0 45 -19t19 -45z" />
|
||||
<glyph unicode="" horiz-adv-x="1280" d="M1024 352v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704q14 0 23 -9t9 -23zM1024 608v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704q14 0 23 -9t9 -23zM128 0h1024v768h-416q-40 0 -68 28t-28 68v416h-512v-1280z M768 896h376q-10 29 -22 41l-313 313q-12 12 -41 22v-376zM1280 864v-896q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h640q40 0 88 -20t76 -48l312 -312q28 -28 48 -76t20 -88z" />
|
||||
<glyph unicode="" horiz-adv-x="1408" d="M384 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 -128h384v1536h-1152v-1536h384v224q0 13 9.5 22.5t22.5 9.5h320q13 0 22.5 -9.5t9.5 -22.5v-224zM1408 1472v-1664q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1664q0 26 19 45t45 19h1280q26 0 45 -19t19 -45z" />
|
||||
<glyph unicode="" horiz-adv-x="1408" d="M384 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 -128h384v1152h-256v-32q0 -40 -28 -68t-68 -28h-448q-40 0 -68 28t-28 68v32h-256v-1152h384v224q0 13 9.5 22.5t22.5 9.5h320q13 0 22.5 -9.5t9.5 -22.5v-224zM896 1056v320q0 13 -9.5 22.5t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-96h-128v96q0 13 -9.5 22.5 t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5v96h128v-96q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1408 1088v-1280q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1280q0 26 19 45t45 19h320 v288q0 40 28 68t68 28h448q40 0 68 -28t28 -68v-288h320q26 0 45 -19t19 -45z" />
|
||||
<glyph unicode="" horiz-adv-x="1920" d="M640 128q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM256 640h384v256h-158q-14 -2 -22 -9l-195 -195q-7 -12 -9 -22v-30zM1536 128q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5 t90.5 37.5t37.5 90.5zM1664 800v192q0 14 -9 23t-23 9h-224v224q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-224h-224q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h224v-224q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v224h224q14 0 23 9t9 23zM1920 1344v-1152 q0 -26 -19 -45t-45 -19h-192q0 -106 -75 -181t-181 -75t-181 75t-75 181h-384q0 -106 -75 -181t-181 -75t-181 75t-75 181h-128q-26 0 -45 19t-19 45t19 45t45 19v416q0 26 13 58t32 51l198 198q19 19 51 32t58 13h160v320q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" d="M1280 416v192q0 14 -9 23t-23 9h-224v224q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-224h-224q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h224v-224q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v224h224q14 0 23 9t9 23zM640 1152h512v128h-512v-128zM256 1152v-1280h-32 q-92 0 -158 66t-66 158v832q0 92 66 158t158 66h32zM1440 1152v-1280h-1088v1280h160v160q0 40 28 68t68 28h576q40 0 68 -28t28 -68v-160h160zM1792 928v-832q0 -92 -66 -158t-158 -66h-32v1280h32q92 0 158 -66t66 -158z" />
|
||||
<glyph unicode="" horiz-adv-x="1920" d="M1920 576q-1 -32 -288 -96l-352 -32l-224 -64h-64l-293 -352h69q26 0 45 -4.5t19 -11.5t-19 -11.5t-45 -4.5h-96h-160h-64v32h64v416h-160l-192 -224h-96l-32 32v192h32v32h128v8l-192 24v128l192 24v8h-128v32h-32v192l32 32h96l192 -224h160v416h-64v32h64h160h96 q26 0 45 -4.5t19 -11.5t-19 -11.5t-45 -4.5h-69l293 -352h64l224 -64l352 -32q261 -58 287 -93z" />
|
||||
<glyph unicode="" horiz-adv-x="1664" d="M640 640v384h-256v-256q0 -53 37.5 -90.5t90.5 -37.5h128zM1664 192v-192h-1152v192l128 192h-128q-159 0 -271.5 112.5t-112.5 271.5v320l-64 64l32 128h480l32 128h960l32 -192l-64 -32v-800z" />
|
||||
<glyph unicode="" d="M1280 192v896q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-512v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-896q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h512v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
|
||||
<glyph unicode="" d="M1280 576v128q0 26 -19 45t-45 19h-320v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-320q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h320v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h320q26 0 45 19t19 45zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
|
||||
<glyph unicode="" horiz-adv-x="1024" d="M627 160q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23zM1011 160q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23 t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23z" />
|
||||
<glyph unicode="" horiz-adv-x="1024" d="M595 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23zM979 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23 l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
|
||||
<glyph unicode="" horiz-adv-x="1152" d="M1075 224q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23zM1075 608q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393 q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
|
||||
<glyph unicode="" horiz-adv-x="1152" d="M1075 672q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23zM1075 1056q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23 t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" />
|
||||
<glyph unicode="" horiz-adv-x="640" d="M627 992q0 -13 -10 -23l-393 -393l393 -393q10 -10 10 -23t-10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" />
|
||||
<glyph unicode="" horiz-adv-x="640" d="M595 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
|
||||
<glyph unicode="" horiz-adv-x="1152" d="M1075 352q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
|
||||
<glyph unicode="" horiz-adv-x="1152" d="M1075 800q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" />
|
||||
<glyph unicode="" horiz-adv-x="1920" d="M1792 544v832q0 13 -9.5 22.5t-22.5 9.5h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-832q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5zM1920 1376v-1088q0 -66 -47 -113t-113 -47h-544q0 -37 16 -77.5t32 -71t16 -43.5q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19 t-19 45q0 14 16 44t32 70t16 78h-544q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
|
||||
<glyph unicode="" horiz-adv-x="1920" d="M416 256q-66 0 -113 47t-47 113v704q0 66 47 113t113 47h1088q66 0 113 -47t47 -113v-704q0 -66 -47 -113t-113 -47h-1088zM384 1120v-704q0 -13 9.5 -22.5t22.5 -9.5h1088q13 0 22.5 9.5t9.5 22.5v704q0 13 -9.5 22.5t-22.5 9.5h-1088q-13 0 -22.5 -9.5t-9.5 -22.5z M1760 192h160v-96q0 -40 -47 -68t-113 -28h-1600q-66 0 -113 28t-47 68v96h160h1600zM1040 96q16 0 16 16t-16 16h-160q-16 0 -16 -16t16 -16h160z" />
|
||||
<glyph unicode="" horiz-adv-x="1152" d="M640 128q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1024 288v960q0 13 -9.5 22.5t-22.5 9.5h-832q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h832q13 0 22.5 9.5t9.5 22.5zM1152 1248v-1088q0 -66 -47 -113t-113 -47h-832 q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h832q66 0 113 -47t47 -113z" />
|
||||
<glyph unicode="" horiz-adv-x="768" d="M464 128q0 33 -23.5 56.5t-56.5 23.5t-56.5 -23.5t-23.5 -56.5t23.5 -56.5t56.5 -23.5t56.5 23.5t23.5 56.5zM672 288v704q0 13 -9.5 22.5t-22.5 9.5h-512q-13 0 -22.5 -9.5t-9.5 -22.5v-704q0 -13 9.5 -22.5t22.5 -9.5h512q13 0 22.5 9.5t9.5 22.5zM480 1136 q0 16 -16 16h-160q-16 0 -16 -16t16 -16h160q16 0 16 16zM768 1152v-1024q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v1024q0 52 38 90t90 38h512q52 0 90 -38t38 -90z" />
|
||||
<glyph unicode="" d="M768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103 t279.5 -279.5t103 -385.5z" />
|
||||
<glyph unicode="" horiz-adv-x="1664" d="M768 576v-384q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v704q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5h64q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-64q-106 0 -181 -75t-75 -181v-32q0 -40 28 -68t68 -28h224q80 0 136 -56t56 -136z M1664 576v-384q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v704q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5h64q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-64q-106 0 -181 -75t-75 -181v-32q0 -40 28 -68t68 -28h224q80 0 136 -56t56 -136z" />
|
||||
<glyph unicode="" horiz-adv-x="1664" d="M768 1216v-704q0 -104 -40.5 -198.5t-109.5 -163.5t-163.5 -109.5t-198.5 -40.5h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64q106 0 181 75t75 181v32q0 40 -28 68t-68 28h-224q-80 0 -136 56t-56 136v384q0 80 56 136t136 56h384q80 0 136 -56t56 -136zM1664 1216 v-704q0 -104 -40.5 -198.5t-109.5 -163.5t-163.5 -109.5t-198.5 -40.5h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64q106 0 181 75t75 181v32q0 40 -28 68t-68 28h-224q-80 0 -136 56t-56 136v384q0 80 56 136t136 56h384q80 0 136 -56t56 -136z" />
|
||||
<glyph unicode="" horiz-adv-x="1568" d="M496 192q0 -60 -42.5 -102t-101.5 -42q-60 0 -102 42t-42 102t42 102t102 42q59 0 101.5 -42t42.5 -102zM928 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM320 640q0 -66 -47 -113t-113 -47t-113 47t-47 113 t47 113t113 47t113 -47t47 -113zM1360 192q0 -46 -33 -79t-79 -33t-79 33t-33 79t33 79t79 33t79 -33t33 -79zM528 1088q0 -73 -51.5 -124.5t-124.5 -51.5t-124.5 51.5t-51.5 124.5t51.5 124.5t124.5 51.5t124.5 -51.5t51.5 -124.5zM992 1280q0 -80 -56 -136t-136 -56 t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1536 640q0 -40 -28 -68t-68 -28t-68 28t-28 68t28 68t68 28t68 -28t28 -68zM1328 1088q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5z" />
|
||||
<glyph unicode="" d="M1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" d="M1792 416q0 -166 -127 -451q-3 -7 -10.5 -24t-13.5 -30t-13 -22q-12 -17 -28 -17q-15 0 -23.5 10t-8.5 25q0 9 2.5 26.5t2.5 23.5q5 68 5 123q0 101 -17.5 181t-48.5 138.5t-80 101t-105.5 69.5t-133 42.5t-154 21.5t-175.5 6h-224v-256q0 -26 -19 -45t-45 -19t-45 19 l-512 512q-19 19 -19 45t19 45l512 512q19 19 45 19t45 -19t19 -45v-256h224q713 0 875 -403q53 -134 53 -333z" />
|
||||
<glyph unicode="" horiz-adv-x="1664" d="M640 320q0 -40 -12.5 -82t-43 -76t-72.5 -34t-72.5 34t-43 76t-12.5 82t12.5 82t43 76t72.5 34t72.5 -34t43 -76t12.5 -82zM1280 320q0 -40 -12.5 -82t-43 -76t-72.5 -34t-72.5 34t-43 76t-12.5 82t12.5 82t43 76t72.5 34t72.5 -34t43 -76t12.5 -82zM1440 320 q0 120 -69 204t-187 84q-41 0 -195 -21q-71 -11 -157 -11t-157 11q-152 21 -195 21q-118 0 -187 -84t-69 -204q0 -88 32 -153.5t81 -103t122 -60t140 -29.5t149 -7h168q82 0 149 7t140 29.5t122 60t81 103t32 153.5zM1664 496q0 -207 -61 -331q-38 -77 -105.5 -133t-141 -86 t-170 -47.5t-171.5 -22t-167 -4.5q-78 0 -142 3t-147.5 12.5t-152.5 30t-137 51.5t-121 81t-86 115q-62 123 -62 331q0 237 136 396q-27 82 -27 170q0 116 51 218q108 0 190 -39.5t189 -123.5q147 35 309 35q148 0 280 -32q105 82 187 121t189 39q51 -102 51 -218 q0 -87 -27 -168q136 -160 136 -398z" />
|
||||
<glyph unicode="" horiz-adv-x="1664" d="M1536 224v704q0 40 -28 68t-68 28h-704q-40 0 -68 28t-28 68v64q0 40 -28 68t-68 28h-320q-40 0 -68 -28t-28 -68v-960q0 -40 28 -68t68 -28h1216q40 0 68 28t28 68zM1664 928v-704q0 -92 -66 -158t-158 -66h-1216q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320 q92 0 158 -66t66 -158v-32h672q92 0 158 -66t66 -158z" />
|
||||
<glyph unicode="" horiz-adv-x="1920" d="M1781 605q0 35 -53 35h-1088q-40 0 -85.5 -21.5t-71.5 -52.5l-294 -363q-18 -24 -18 -40q0 -35 53 -35h1088q40 0 86 22t71 53l294 363q18 22 18 39zM640 768h768v160q0 40 -28 68t-68 28h-576q-40 0 -68 28t-28 68v64q0 40 -28 68t-68 28h-320q-40 0 -68 -28t-28 -68 v-853l256 315q44 53 116 87.5t140 34.5zM1909 605q0 -62 -46 -120l-295 -363q-43 -53 -116 -87.5t-140 -34.5h-1088q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h544q92 0 158 -66t66 -158v-160h192q54 0 99 -24.5t67 -70.5q15 -32 15 -68z " />
|
||||
<glyph unicode="" horiz-adv-x="1792" />
|
||||
<glyph unicode="" horiz-adv-x="1792" />
|
||||
<glyph unicode="" d="M1134 461q-37 -121 -138 -195t-228 -74t-228 74t-138 195q-8 25 4 48.5t38 31.5q25 8 48.5 -4t31.5 -38q25 -80 92.5 -129.5t151.5 -49.5t151.5 49.5t92.5 129.5q8 26 32 38t49 4t37 -31.5t4 -48.5zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5 t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5 t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
||||
<glyph unicode="" d="M1134 307q8 -25 -4 -48.5t-37 -31.5t-49 4t-32 38q-25 80 -92.5 129.5t-151.5 49.5t-151.5 -49.5t-92.5 -129.5q-8 -26 -31.5 -38t-48.5 -4q-26 8 -38 31.5t-4 48.5q37 121 138 195t228 74t228 -74t138 -195zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5 t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204 t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
||||
<glyph unicode="" d="M1152 448q0 -26 -19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h640q26 0 45 -19t19 -45zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5 t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
||||
<glyph unicode="" horiz-adv-x="1920" d="M832 448v128q0 14 -9 23t-23 9h-192v192q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-192h-192q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h192v-192q0 -14 9 -23t23 -9h128q14 0 23 9t9 23v192h192q14 0 23 9t9 23zM1408 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5 t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 640q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1920 512q0 -212 -150 -362t-362 -150q-192 0 -338 128h-220q-146 -128 -338 -128q-212 0 -362 150 t-150 362t150 362t362 150h896q212 0 362 -150t150 -362z" />
|
||||
<glyph unicode="" horiz-adv-x="1920" d="M384 368v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM512 624v-96q0 -16 -16 -16h-224q-16 0 -16 16v96q0 16 16 16h224q16 0 16 -16zM384 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1408 368v-96q0 -16 -16 -16 h-864q-16 0 -16 16v96q0 16 16 16h864q16 0 16 -16zM768 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM640 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1024 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16 h96q16 0 16 -16zM896 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1280 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1664 368v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1152 880v-96 q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1408 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1664 880v-352q0 -16 -16 -16h-224q-16 0 -16 16v96q0 16 16 16h112v240q0 16 16 16h96q16 0 16 -16zM1792 128v896h-1664v-896 h1664zM1920 1024v-896q0 -53 -37.5 -90.5t-90.5 -37.5h-1664q-53 0 -90.5 37.5t-37.5 90.5v896q0 53 37.5 90.5t90.5 37.5h1664q53 0 90.5 -37.5t37.5 -90.5z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" d="M1664 491v616q-169 -91 -306 -91q-82 0 -145 32q-100 49 -184 76.5t-178 27.5q-173 0 -403 -127v-599q245 113 433 113q55 0 103.5 -7.5t98 -26t77 -31t82.5 -39.5l28 -14q44 -22 101 -22q120 0 293 92zM320 1280q0 -35 -17.5 -64t-46.5 -46v-1266q0 -14 -9 -23t-23 -9 h-64q-14 0 -23 9t-9 23v1266q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -39 -35 -57q-10 -5 -17 -9q-218 -116 -369 -116q-88 0 -158 35l-28 14q-64 33 -99 48t-91 29t-114 14q-102 0 -235.5 -44t-228.5 -102 q-15 -9 -33 -9q-16 0 -32 8q-32 19 -32 56v742q0 35 31 55q35 21 78.5 42.5t114 52t152.5 49.5t155 19q112 0 209 -31t209 -86q38 -19 89 -19q122 0 310 112q22 12 31 17q31 16 62 -2q31 -20 31 -55z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" d="M832 536v192q-181 -16 -384 -117v-185q205 96 384 110zM832 954v197q-172 -8 -384 -126v-189q215 111 384 118zM1664 491v184q-235 -116 -384 -71v224q-20 6 -39 15q-5 3 -33 17t-34.5 17t-31.5 15t-34.5 15.5t-32.5 13t-36 12.5t-35 8.5t-39.5 7.5t-39.5 4t-44 2 q-23 0 -49 -3v-222h19q102 0 192.5 -29t197.5 -82q19 -9 39 -15v-188q42 -17 91 -17q120 0 293 92zM1664 918v189q-169 -91 -306 -91q-45 0 -78 8v-196q148 -42 384 90zM320 1280q0 -35 -17.5 -64t-46.5 -46v-1266q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v1266 q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -39 -35 -57q-10 -5 -17 -9q-218 -116 -369 -116q-88 0 -158 35l-28 14q-64 33 -99 48t-91 29t-114 14q-102 0 -235.5 -44t-228.5 -102q-15 -9 -33 -9q-16 0 -32 8 q-32 19 -32 56v742q0 35 31 55q35 21 78.5 42.5t114 52t152.5 49.5t155 19q112 0 209 -31t209 -86q38 -19 89 -19q122 0 310 112q22 12 31 17q31 16 62 -2q31 -20 31 -55z" />
|
||||
<glyph unicode="" horiz-adv-x="1664" d="M585 553l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23t-10 -23zM1664 96v-64q0 -14 -9 -23t-23 -9h-960q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h960q14 0 23 -9 t9 -23z" />
|
||||
<glyph unicode="" horiz-adv-x="1920" d="M617 137l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23t-10 -23zM1208 1204l-373 -1291q-4 -13 -15.5 -19.5t-23.5 -2.5l-62 17q-13 4 -19.5 15.5t-2.5 24.5 l373 1291q4 13 15.5 19.5t23.5 2.5l62 -17q13 -4 19.5 -15.5t2.5 -24.5zM1865 553l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23t-10 -23z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" d="M640 454v-70q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-512 512q-19 19 -19 45t19 45l512 512q29 31 70 14q39 -17 39 -59v-69l-397 -398q-19 -19 -19 -45t19 -45zM1792 416q0 -58 -17 -133.5t-38.5 -138t-48 -125t-40.5 -90.5l-20 -40q-8 -17 -28 -17q-6 0 -9 1 q-25 8 -23 34q43 400 -106 565q-64 71 -170.5 110.5t-267.5 52.5v-251q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-512 512q-19 19 -19 45t19 45l512 512q29 31 70 14q39 -17 39 -59v-262q411 -28 599 -221q169 -173 169 -509z" />
|
||||
<glyph unicode="" horiz-adv-x="1664" d="M1186 579l257 250l-356 52l-66 10l-30 60l-159 322v-963l59 -31l318 -168l-60 355l-12 66zM1638 841l-363 -354l86 -500q5 -33 -6 -51.5t-34 -18.5q-17 0 -40 12l-449 236l-449 -236q-23 -12 -40 -12q-23 0 -34 18.5t-6 51.5l86 500l-364 354q-32 32 -23 59.5t54 34.5 l502 73l225 455q20 41 49 41q28 0 49 -41l225 -455l502 -73q45 -7 54 -34.5t-24 -59.5z" />
|
||||
<glyph unicode="" horiz-adv-x="1408" d="M1401 1187l-640 -1280q-17 -35 -57 -35q-5 0 -15 2q-22 5 -35.5 22.5t-13.5 39.5v576h-576q-22 0 -39.5 13.5t-22.5 35.5t4 42t29 30l1280 640q13 7 29 7q27 0 45 -19q15 -14 18.5 -34.5t-6.5 -39.5z" />
|
||||
<glyph unicode="" horiz-adv-x="1664" d="M557 256h595v595zM512 301l595 595h-595v-595zM1664 224v-192q0 -14 -9 -23t-23 -9h-224v-224q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v224h-864q-14 0 -23 9t-9 23v864h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224v224q0 14 9 23t23 9h192q14 0 23 -9t9 -23 v-224h851l246 247q10 9 23 9t23 -9q9 -10 9 -23t-9 -23l-247 -246v-851h224q14 0 23 -9t9 -23z" />
|
||||
<glyph unicode="" horiz-adv-x="1024" d="M288 64q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM288 1216q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM928 1088q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1024 1088q0 -52 -26 -96.5t-70 -69.5 q-2 -287 -226 -414q-68 -38 -203 -81q-128 -40 -169.5 -71t-41.5 -100v-26q44 -25 70 -69.5t26 -96.5q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 52 26 96.5t70 69.5v820q-44 25 -70 69.5t-26 96.5q0 80 56 136t136 56t136 -56t56 -136q0 -52 -26 -96.5t-70 -69.5v-497 q54 26 154 57q55 17 87.5 29.5t70.5 31t59 39.5t40.5 51t28 69.5t8.5 91.5q-44 25 -70 69.5t-26 96.5q0 80 56 136t136 56t136 -56t56 -136z" />
|
||||
<glyph unicode="" horiz-adv-x="1664" d="M439 265l-256 -256q-10 -9 -23 -9q-12 0 -23 9q-9 10 -9 23t9 23l256 256q10 9 23 9t23 -9q9 -10 9 -23t-9 -23zM608 224v-320q0 -14 -9 -23t-23 -9t-23 9t-9 23v320q0 14 9 23t23 9t23 -9t9 -23zM384 448q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23t9 23t23 9h320 q14 0 23 -9t9 -23zM1648 320q0 -120 -85 -203l-147 -146q-83 -83 -203 -83q-121 0 -204 85l-334 335q-21 21 -42 56l239 18l273 -274q27 -27 68 -27.5t68 26.5l147 146q28 28 28 67q0 40 -28 68l-274 275l18 239q35 -21 56 -42l336 -336q84 -86 84 -204zM1031 1044l-239 -18 l-273 274q-28 28 -68 28q-39 0 -68 -27l-147 -146q-28 -28 -28 -67q0 -40 28 -68l274 -274l-18 -240q-35 21 -56 42l-336 336q-84 86 -84 204q0 120 85 203l147 146q83 83 203 83q121 0 204 -85l334 -335q21 -21 42 -56zM1664 960q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9 t-9 23t9 23t23 9h320q14 0 23 -9t9 -23zM1120 1504v-320q0 -14 -9 -23t-23 -9t-23 9t-9 23v320q0 14 9 23t23 9t23 -9t9 -23zM1527 1353l-256 -256q-11 -9 -23 -9t-23 9q-9 10 -9 23t9 23l256 256q10 9 23 9t23 -9q9 -10 9 -23t-9 -23z" />
|
||||
<glyph unicode="" horiz-adv-x="1024" d="M704 280v-240q0 -16 -12 -28t-28 -12h-240q-16 0 -28 12t-12 28v240q0 16 12 28t28 12h240q16 0 28 -12t12 -28zM1020 880q0 -54 -15.5 -101t-35 -76.5t-55 -59.5t-57.5 -43.5t-61 -35.5q-41 -23 -68.5 -65t-27.5 -67q0 -17 -12 -32.5t-28 -15.5h-240q-15 0 -25.5 18.5 t-10.5 37.5v45q0 83 65 156.5t143 108.5q59 27 84 56t25 76q0 42 -46.5 74t-107.5 32q-65 0 -108 -29q-35 -25 -107 -115q-13 -16 -31 -16q-12 0 -25 8l-164 125q-13 10 -15.5 25t5.5 28q160 266 464 266q80 0 161 -31t146 -83t106 -127.5t41 -158.5z" />
|
||||
<glyph unicode="" horiz-adv-x="640" d="M640 192v-128q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64v384h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-576h64q26 0 45 -19t19 -45zM512 1344v-192q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v192 q0 26 19 45t45 19h256q26 0 45 -19t19 -45z" />
|
||||
<glyph unicode="" horiz-adv-x="640" d="M512 288v-224q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v224q0 26 19 45t45 19h256q26 0 45 -19t19 -45zM542 1344l-28 -768q-1 -26 -20.5 -45t-45.5 -19h-256q-26 0 -45.5 19t-20.5 45l-28 768q-1 26 17.5 45t44.5 19h320q26 0 44.5 -19t17.5 -45z" />
|
||||
<glyph unicode="" d="M897 167v-167h-248l-159 252l-24 42q-8 9 -11 21h-3l-9 -21q-10 -20 -25 -44l-155 -250h-258v167h128l197 291l-185 272h-137v168h276l139 -228q2 -4 23 -42q8 -9 11 -21h3q3 9 11 21l25 42l140 228h257v-168h-125l-184 -267l204 -296h109zM1534 846v-206h-514l-3 27 q-4 28 -4 46q0 64 26 117t65 86.5t84 65t84 54.5t65 54t26 64q0 38 -29.5 62.5t-70.5 24.5q-51 0 -97 -39q-14 -11 -36 -38l-105 92q26 37 63 66q83 65 188 65q110 0 178 -59.5t68 -158.5q0 -56 -24.5 -103t-62 -76.5t-81.5 -58.5t-82 -50.5t-65.5 -51.5t-30.5 -63h232v80 h126z" />
|
||||
<glyph unicode="" d="M897 167v-167h-248l-159 252l-24 42q-8 9 -11 21h-3l-9 -21q-10 -20 -25 -44l-155 -250h-258v167h128l197 291l-185 272h-137v168h276l139 -228q2 -4 23 -42q8 -9 11 -21h3q3 9 11 21l25 42l140 228h257v-168h-125l-184 -267l204 -296h109zM1536 -50v-206h-514l-4 27 q-3 45 -3 46q0 64 26 117t65 86.5t84 65t84 54.5t65 54t26 64q0 38 -29.5 62.5t-70.5 24.5q-51 0 -97 -39q-14 -11 -36 -38l-105 92q26 37 63 66q80 65 188 65q110 0 178 -59.5t68 -158.5q0 -66 -34.5 -118.5t-84 -86t-99.5 -62.5t-87 -63t-41 -73h232v80h126z" />
|
||||
<glyph unicode="" horiz-adv-x="1920" d="M896 128l336 384h-768l-336 -384h768zM1909 1205q15 -34 9.5 -71.5t-30.5 -65.5l-896 -1024q-38 -44 -96 -44h-768q-38 0 -69.5 20.5t-47.5 54.5q-15 34 -9.5 71.5t30.5 65.5l896 1024q38 44 96 44h768q38 0 69.5 -20.5t47.5 -54.5z" />
|
||||
<glyph unicode="" horiz-adv-x="1664" d="M1664 438q0 -81 -44.5 -135t-123.5 -54q-41 0 -77.5 17.5t-59 38t-56.5 38t-71 17.5q-110 0 -110 -124q0 -39 16 -115t15 -115v-5q-22 0 -33 -1q-34 -3 -97.5 -11.5t-115.5 -13.5t-98 -5q-61 0 -103 26.5t-42 83.5q0 37 17.5 71t38 56.5t38 59t17.5 77.5q0 79 -54 123.5 t-135 44.5q-84 0 -143 -45.5t-59 -127.5q0 -43 15 -83t33.5 -64.5t33.5 -53t15 -50.5q0 -45 -46 -89q-37 -35 -117 -35q-95 0 -245 24q-9 2 -27.5 4t-27.5 4l-13 2q-1 0 -3 1q-2 0 -2 1v1024q2 -1 17.5 -3.5t34 -5t21.5 -3.5q150 -24 245 -24q80 0 117 35q46 44 46 89 q0 22 -15 50.5t-33.5 53t-33.5 64.5t-15 83q0 82 59 127.5t144 45.5q80 0 134 -44.5t54 -123.5q0 -41 -17.5 -77.5t-38 -59t-38 -56.5t-17.5 -71q0 -57 42 -83.5t103 -26.5q64 0 180 15t163 17v-2q-1 -2 -3.5 -17.5t-5 -34t-3.5 -21.5q-24 -150 -24 -245q0 -80 35 -117 q44 -46 89 -46q22 0 50.5 15t53 33.5t64.5 33.5t83 15q82 0 127.5 -59t45.5 -143z" />
|
||||
<glyph unicode="" horiz-adv-x="1152" d="M1152 832v-128q0 -221 -147.5 -384.5t-364.5 -187.5v-132h256q26 0 45 -19t19 -45t-19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h256v132q-217 24 -364.5 187.5t-147.5 384.5v128q0 26 19 45t45 19t45 -19t19 -45v-128q0 -185 131.5 -316.5t316.5 -131.5 t316.5 131.5t131.5 316.5v128q0 26 19 45t45 19t45 -19t19 -45zM896 1216v-512q0 -132 -94 -226t-226 -94t-226 94t-94 226v512q0 132 94 226t226 94t226 -94t94 -226z" />
|
||||
<glyph unicode="" horiz-adv-x="1408" d="M271 591l-101 -101q-42 103 -42 214v128q0 26 19 45t45 19t45 -19t19 -45v-128q0 -53 15 -113zM1385 1193l-361 -361v-128q0 -132 -94 -226t-226 -94q-55 0 -109 19l-96 -96q97 -51 205 -51q185 0 316.5 131.5t131.5 316.5v128q0 26 19 45t45 19t45 -19t19 -45v-128 q0 -221 -147.5 -384.5t-364.5 -187.5v-132h256q26 0 45 -19t19 -45t-19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h256v132q-125 13 -235 81l-254 -254q-10 -10 -23 -10t-23 10l-82 82q-10 10 -10 23t10 23l1234 1234q10 10 23 10t23 -10l82 -82q10 -10 10 -23 t-10 -23zM1005 1325l-621 -621v512q0 132 94 226t226 94q102 0 184.5 -59t116.5 -152z" />
|
||||
<glyph unicode="" horiz-adv-x="1280" d="M1088 576v640h-448v-1137q119 63 213 137q235 184 235 360zM1280 1344v-768q0 -86 -33.5 -170.5t-83 -150t-118 -127.5t-126.5 -103t-121 -77.5t-89.5 -49.5t-42.5 -20q-12 -6 -26 -6t-26 6q-16 7 -42.5 20t-89.5 49.5t-121 77.5t-126.5 103t-118 127.5t-83 150 t-33.5 170.5v768q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
|
||||
<glyph unicode="" horiz-adv-x="1664" d="M128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280 q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" />
|
||||
<glyph unicode="" horiz-adv-x="1408" d="M512 1344q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 1376v-320q0 -16 -12 -25q-8 -7 -20 -7q-4 0 -7 1l-448 96q-11 2 -18 11t-7 20h-256v-102q111 -23 183.5 -111t72.5 -203v-800q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v800 q0 106 62.5 190.5t161.5 114.5v111h-32q-59 0 -115 -23.5t-91.5 -53t-66 -66.5t-40.5 -53.5t-14 -24.5q-17 -35 -57 -35q-16 0 -29 7q-23 12 -31.5 37t3.5 49q5 10 14.5 26t37.5 53.5t60.5 70t85 67t108.5 52.5q-25 42 -25 86q0 66 47 113t113 47t113 -47t47 -113 q0 -33 -14 -64h302q0 11 7 20t18 11l448 96q3 1 7 1q12 0 20 -7q12 -9 12 -25z" />
|
||||
<glyph unicode="" horiz-adv-x="1664" d="M1440 1088q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1664 1376q0 -249 -75.5 -430.5t-253.5 -360.5q-81 -80 -195 -176l-20 -379q-2 -16 -16 -26l-384 -224q-7 -4 -16 -4q-12 0 -23 9l-64 64q-13 14 -8 32l85 276l-281 281l-276 -85q-3 -1 -9 -1 q-14 0 -23 9l-64 64q-17 19 -5 39l224 384q10 14 26 16l379 20q96 114 176 195q188 187 358 258t431 71q14 0 24 -9.5t10 -22.5z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" d="M1745 763l-164 -763h-334l178 832q13 56 -15 88q-27 33 -83 33h-169l-204 -953h-334l204 953h-286l-204 -953h-334l204 953l-153 327h1276q101 0 189.5 -40.5t147.5 -113.5q60 -73 81 -168.5t0 -194.5z" />
|
||||
<glyph unicode="" d="M909 141l102 102q19 19 19 45t-19 45l-307 307l307 307q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-454 -454q-19 -19 -19 -45t19 -45l454 -454q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
||||
<glyph unicode="" d="M717 141l454 454q19 19 19 45t-19 45l-454 454q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l307 -307l-307 -307q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
||||
<glyph unicode="" d="M1165 397l102 102q19 19 19 45t-19 45l-454 454q-19 19 -45 19t-45 -19l-454 -454q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19l307 307l307 -307q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
||||
<glyph unicode="" d="M813 237l454 454q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-307 -307l-307 307q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l454 -454q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
||||
<glyph unicode="" horiz-adv-x="1408" d="M1130 939l16 175h-884l47 -534h612l-22 -228l-197 -53l-196 53l-13 140h-175l22 -278l362 -100h4v1l359 99l50 544h-644l-15 181h674zM0 1408h1408l-128 -1438l-578 -162l-574 162z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" d="M275 1408h1505l-266 -1333l-804 -267l-698 267l71 356h297l-29 -147l422 -161l486 161l68 339h-1208l58 297h1209l38 191h-1208z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" d="M960 1280q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1792 352v-352q0 -22 -20 -30q-8 -2 -12 -2q-13 0 -23 9l-93 93q-119 -143 -318.5 -226.5t-429.5 -83.5t-429.5 83.5t-318.5 226.5l-93 -93q-9 -9 -23 -9q-4 0 -12 2q-20 8 -20 30v352 q0 14 9 23t23 9h352q22 0 30 -20q8 -19 -7 -35l-100 -100q67 -91 189.5 -153.5t271.5 -82.5v647h-192q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h192v163q-58 34 -93 92.5t-35 128.5q0 106 75 181t181 75t181 -75t75 -181q0 -70 -35 -128.5t-93 -92.5v-163h192q26 0 45 -19 t19 -45v-128q0 -26 -19 -45t-45 -19h-192v-647q149 20 271.5 82.5t189.5 153.5l-100 100q-15 16 -7 35q8 20 30 20h352q14 0 23 -9t9 -23z" />
|
||||
<glyph unicode="" horiz-adv-x="1152" d="M1056 768q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h32v320q0 185 131.5 316.5t316.5 131.5t316.5 -131.5t131.5 -316.5q0 -26 -19 -45t-45 -19h-64q-26 0 -45 19t-19 45q0 106 -75 181t-181 75t-181 -75t-75 -181 v-320h736z" />
|
||||
<glyph unicode="" d="M1024 640q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM1152 640q0 159 -112.5 271.5t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM1280 640q0 -212 -150 -362t-362 -150t-362 150 t-150 362t150 362t362 150t362 -150t150 -362zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
||||
<glyph unicode="" horiz-adv-x="1408" d="M384 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM896 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM1408 800v-192q0 -40 -28 -68t-68 -28h-192 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68z" />
|
||||
<glyph unicode="" horiz-adv-x="384" d="M384 288v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM384 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM384 1312v-192q0 -40 -28 -68t-68 -28h-192 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68z" />
|
||||
<glyph unicode="" d="M512 256q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM863 162q-13 232 -177 396t-396 177q-14 1 -24 -9t-10 -23v-128q0 -13 8.5 -22t21.5 -10q154 -11 264 -121t121 -264q1 -13 10 -21.5t22 -8.5h128q13 0 23 10 t9 24zM1247 161q-5 154 -56 297.5t-139.5 260t-205 205t-260 139.5t-297.5 56q-14 1 -23 -9q-10 -10 -10 -23v-128q0 -13 9 -22t22 -10q204 -7 378 -111.5t278.5 -278.5t111.5 -378q1 -13 10 -22t22 -9h128q13 0 23 10q11 9 9 23zM1536 1120v-960q0 -119 -84.5 -203.5 t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
|
||||
<glyph unicode="" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM1152 585q32 18 32 55t-32 55l-544 320q-31 19 -64 1q-32 -19 -32 -56v-640q0 -37 32 -56 q16 -8 32 -8q17 0 32 9z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" d="M1024 1084l316 -316l-572 -572l-316 316zM813 105l618 618q19 19 19 45t-19 45l-362 362q-18 18 -45 18t-45 -18l-618 -618q-19 -19 -19 -45t19 -45l362 -362q18 -18 45 -18t45 18zM1702 742l-907 -908q-37 -37 -90.5 -37t-90.5 37l-126 126q56 56 56 136t-56 136 t-136 56t-136 -56l-125 126q-37 37 -37 90.5t37 90.5l907 906q37 37 90.5 37t90.5 -37l125 -125q-56 -56 -56 -136t56 -136t136 -56t136 56l126 -125q37 -37 37 -90.5t-37 -90.5z" />
|
||||
<glyph unicode="" d="M1280 576v128q0 26 -19 45t-45 19h-896q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h896q26 0 45 19t19 45zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5 t84.5 -203.5z" />
|
||||
<glyph unicode="" horiz-adv-x="1408" d="M1152 736v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h832q14 0 23 -9t9 -23zM1280 288v832q0 66 -47 113t-113 47h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113zM1408 1120v-832q0 -119 -84.5 -203.5 t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q119 0 203.5 -84.5t84.5 -203.5z" />
|
||||
<glyph unicode="" horiz-adv-x="1024" d="M1018 933q-18 -37 -58 -37h-192v-864q0 -14 -9 -23t-23 -9h-704q-21 0 -29 18q-8 20 4 35l160 192q9 11 25 11h320v640h-192q-40 0 -58 37q-17 37 9 68l320 384q18 22 49 22t49 -22l320 -384q27 -32 9 -68z" />
|
||||
<glyph unicode="" horiz-adv-x="1024" d="M32 1280h704q13 0 22.5 -9.5t9.5 -23.5v-863h192q40 0 58 -37t-9 -69l-320 -384q-18 -22 -49 -22t-49 22l-320 384q-26 31 -9 69q18 37 58 37h192v640h-320q-14 0 -25 11l-160 192q-13 14 -4 34q9 19 29 19z" />
|
||||
<glyph unicode="" d="M685 237l614 614q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-467 -467l-211 211q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l358 -358q19 -19 45 -19t45 19zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5 t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
|
||||
<glyph unicode="" d="M404 428l152 -152l-52 -52h-56v96h-96v56zM818 818q14 -13 -3 -30l-291 -291q-17 -17 -30 -3q-14 13 3 30l291 291q17 17 30 3zM544 128l544 544l-288 288l-544 -544v-288h288zM1152 736l92 92q28 28 28 68t-28 68l-152 152q-28 28 -68 28t-68 -28l-92 -92zM1536 1120 v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
|
||||
<glyph unicode="" d="M1280 608v480q0 26 -19 45t-45 19h-480q-42 0 -59 -39q-17 -41 14 -70l144 -144l-534 -534q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19l534 534l144 -144q18 -19 45 -19q12 0 25 5q39 17 39 59zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960 q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
|
||||
<glyph unicode="" d="M1005 435l352 352q19 19 19 45t-19 45l-352 352q-30 31 -69 14q-40 -17 -40 -59v-160q-119 0 -216 -19.5t-162.5 -51t-114 -79t-76.5 -95.5t-44.5 -109t-21.5 -111.5t-5 -110.5q0 -181 167 -404q10 -12 25 -12q7 0 13 3q22 9 19 33q-44 354 62 473q46 52 130 75.5 t224 23.5v-160q0 -42 40 -59q12 -5 24 -5q26 0 45 19zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
|
||||
<glyph unicode="" d="M640 448l256 128l-256 128v-256zM1024 1039v-542l-512 -256v542zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
||||
<glyph unicode="" d="M1145 861q18 -35 -5 -66l-320 -448q-19 -27 -52 -27t-52 27l-320 448q-23 31 -5 66q17 35 57 35h640q40 0 57 -35zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5zM1536 1120 v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
|
||||
<glyph unicode="" d="M1145 419q-17 -35 -57 -35h-640q-40 0 -57 35q-18 35 5 66l320 448q19 27 52 27t52 -27l320 -448q23 -31 5 -66zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
|
||||
<glyph unicode="" d="M1088 640q0 -33 -27 -52l-448 -320q-31 -23 -66 -5q-35 17 -35 57v640q0 40 35 57q35 18 66 -5l448 -320q27 -19 27 -52zM1280 160v960q0 14 -9 23t-23 9h-960q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h960q14 0 23 9t9 23zM1536 1120v-960q0 -119 -84.5 -203.5 t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
|
||||
<glyph unicode="" horiz-adv-x="1024" d="M976 229l35 -159q3 -12 -3 -22.5t-17 -14.5l-5 -1q-4 -2 -10.5 -3.5t-16 -4.5t-21.5 -5.5t-25.5 -5t-30 -5t-33.5 -4.5t-36.5 -3t-38.5 -1q-234 0 -409 130.5t-238 351.5h-95q-13 0 -22.5 9.5t-9.5 22.5v113q0 13 9.5 22.5t22.5 9.5h66q-2 57 1 105h-67q-14 0 -23 9 t-9 23v114q0 14 9 23t23 9h98q67 210 243.5 338t400.5 128q102 0 194 -23q11 -3 20 -15q6 -11 3 -24l-43 -159q-3 -13 -14 -19.5t-24 -2.5l-4 1q-4 1 -11.5 2.5l-17.5 3.5t-22.5 3.5t-26 3t-29 2.5t-29.5 1q-126 0 -226 -64t-150 -176h468q16 0 25 -12q10 -12 7 -26 l-24 -114q-5 -26 -32 -26h-488q-3 -37 0 -105h459q15 0 25 -12q9 -12 6 -27l-24 -112q-2 -11 -11 -18.5t-20 -7.5h-387q48 -117 149.5 -185.5t228.5 -68.5q18 0 36 1.5t33.5 3.5t29.5 4.5t24.5 5t18.5 4.5l12 3l5 2q13 5 26 -2q12 -7 15 -21z" />
|
||||
<glyph unicode="" horiz-adv-x="1024" d="M1020 399v-367q0 -14 -9 -23t-23 -9h-956q-14 0 -23 9t-9 23v150q0 13 9.5 22.5t22.5 9.5h97v383h-95q-14 0 -23 9.5t-9 22.5v131q0 14 9 23t23 9h95v223q0 171 123.5 282t314.5 111q185 0 335 -125q9 -8 10 -20.5t-7 -22.5l-103 -127q-9 -11 -22 -12q-13 -2 -23 7 q-5 5 -26 19t-69 32t-93 18q-85 0 -137 -47t-52 -123v-215h305q13 0 22.5 -9t9.5 -23v-131q0 -13 -9.5 -22.5t-22.5 -9.5h-305v-379h414v181q0 13 9 22.5t23 9.5h162q14 0 23 -9.5t9 -22.5z" />
|
||||
<glyph unicode="" horiz-adv-x="1024" d="M978 351q0 -153 -99.5 -263.5t-258.5 -136.5v-175q0 -14 -9 -23t-23 -9h-135q-13 0 -22.5 9.5t-9.5 22.5v175q-66 9 -127.5 31t-101.5 44.5t-74 48t-46.5 37.5t-17.5 18q-17 21 -2 41l103 135q7 10 23 12q15 2 24 -9l2 -2q113 -99 243 -125q37 -8 74 -8q81 0 142.5 43 t61.5 122q0 28 -15 53t-33.5 42t-58.5 37.5t-66 32t-80 32.5q-39 16 -61.5 25t-61.5 26.5t-62.5 31t-56.5 35.5t-53.5 42.5t-43.5 49t-35.5 58t-21 66.5t-8.5 78q0 138 98 242t255 134v180q0 13 9.5 22.5t22.5 9.5h135q14 0 23 -9t9 -23v-176q57 -6 110.5 -23t87 -33.5 t63.5 -37.5t39 -29t15 -14q17 -18 5 -38l-81 -146q-8 -15 -23 -16q-14 -3 -27 7q-3 3 -14.5 12t-39 26.5t-58.5 32t-74.5 26t-85.5 11.5q-95 0 -155 -43t-60 -111q0 -26 8.5 -48t29.5 -41.5t39.5 -33t56 -31t60.5 -27t70 -27.5q53 -20 81 -31.5t76 -35t75.5 -42.5t62 -50 t53 -63.5t31.5 -76.5t13 -94z" />
|
||||
<glyph unicode="" horiz-adv-x="898" d="M898 1066v-102q0 -14 -9 -23t-23 -9h-168q-23 -144 -129 -234t-276 -110q167 -178 459 -536q14 -16 4 -34q-8 -18 -29 -18h-195q-16 0 -25 12q-306 367 -498 571q-9 9 -9 22v127q0 13 9.5 22.5t22.5 9.5h112q132 0 212.5 43t102.5 125h-427q-14 0 -23 9t-9 23v102 q0 14 9 23t23 9h413q-57 113 -268 113h-145q-13 0 -22.5 9.5t-9.5 22.5v133q0 14 9 23t23 9h832q14 0 23 -9t9 -23v-102q0 -14 -9 -23t-23 -9h-233q47 -61 64 -144h171q14 0 23 -9t9 -23z" />
|
||||
<glyph unicode="" horiz-adv-x="1027" d="M603 0h-172q-13 0 -22.5 9t-9.5 23v330h-288q-13 0 -22.5 9t-9.5 23v103q0 13 9.5 22.5t22.5 9.5h288v85h-288q-13 0 -22.5 9t-9.5 23v104q0 13 9.5 22.5t22.5 9.5h214l-321 578q-8 16 0 32q10 16 28 16h194q19 0 29 -18l215 -425q19 -38 56 -125q10 24 30.5 68t27.5 61 l191 420q8 19 29 19h191q17 0 27 -16q9 -14 1 -31l-313 -579h215q13 0 22.5 -9.5t9.5 -22.5v-104q0 -14 -9.5 -23t-22.5 -9h-290v-85h290q13 0 22.5 -9.5t9.5 -22.5v-103q0 -14 -9.5 -23t-22.5 -9h-290v-330q0 -13 -9.5 -22.5t-22.5 -9.5z" />
|
||||
<glyph unicode="" horiz-adv-x="1280" d="M1043 971q0 100 -65 162t-171 62h-320v-448h320q106 0 171 62t65 162zM1280 971q0 -193 -126.5 -315t-326.5 -122h-340v-118h505q14 0 23 -9t9 -23v-128q0 -14 -9 -23t-23 -9h-505v-192q0 -14 -9.5 -23t-22.5 -9h-167q-14 0 -23 9t-9 23v192h-224q-14 0 -23 9t-9 23v128 q0 14 9 23t23 9h224v118h-224q-14 0 -23 9t-9 23v149q0 13 9 22.5t23 9.5h224v629q0 14 9 23t23 9h539q200 0 326.5 -122t126.5 -315z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" d="M514 341l81 299h-159l75 -300q1 -1 1 -3t1 -3q0 1 0.5 3.5t0.5 3.5zM630 768l35 128h-292l32 -128h225zM822 768h139l-35 128h-70zM1271 340l78 300h-162l81 -299q0 -1 0.5 -3.5t1.5 -3.5q0 1 0.5 3t0.5 3zM1382 768l33 128h-297l34 -128h230zM1792 736v-64q0 -14 -9 -23 t-23 -9h-213l-164 -616q-7 -24 -31 -24h-159q-24 0 -31 24l-166 616h-209l-167 -616q-7 -24 -31 -24h-159q-11 0 -19.5 7t-10.5 17l-160 616h-208q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h175l-33 128h-142q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h109l-89 344q-5 15 5 28 q10 12 26 12h137q26 0 31 -24l90 -360h359l97 360q7 24 31 24h126q24 0 31 -24l98 -360h365l93 360q5 24 31 24h137q16 0 26 -12q10 -13 5 -28l-91 -344h111q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-145l-34 -128h179q14 0 23 -9t9 -23z" />
|
||||
<glyph unicode="" horiz-adv-x="1280" d="M1167 896q18 -182 -131 -258q117 -28 175 -103t45 -214q-7 -71 -32.5 -125t-64.5 -89t-97 -58.5t-121.5 -34.5t-145.5 -15v-255h-154v251q-80 0 -122 1v-252h-154v255q-18 0 -54 0.5t-55 0.5h-200l31 183h111q50 0 58 51v402h16q-6 1 -16 1v287q-13 68 -89 68h-111v164 l212 -1q64 0 97 1v252h154v-247q82 2 122 2v245h154v-252q79 -7 140 -22.5t113 -45t82.5 -78t36.5 -114.5zM952 351q0 36 -15 64t-37 46t-57.5 30.5t-65.5 18.5t-74 9t-69 3t-64.5 -1t-47.5 -1v-338q8 0 37 -0.5t48 -0.5t53 1.5t58.5 4t57 8.5t55.5 14t47.5 21t39.5 30 t24.5 40t9.5 51zM881 827q0 33 -12.5 58.5t-30.5 42t-48 28t-55 16.5t-61.5 8t-58 2.5t-54 -1t-39.5 -0.5v-307q5 0 34.5 -0.5t46.5 0t50 2t55 5.5t51.5 11t48.5 18.5t37 27t27 38.5t9 51z" />
|
||||
<glyph unicode="" horiz-adv-x="1280" d="M1280 768v-800q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h544v-544q0 -40 28 -68t68 -28h544zM1277 896h-509v509q82 -15 132 -65l312 -312q50 -50 65 -132z" />
|
||||
<glyph unicode="" horiz-adv-x="1280" d="M1024 160v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23zM1024 416v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23zM1280 768v-800q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28 t-28 68v1344q0 40 28 68t68 28h544v-544q0 -40 28 -68t68 -28h544zM1277 896h-509v509q82 -15 132 -65l312 -312q50 -50 65 -132z" />
|
||||
<glyph unicode="" horiz-adv-x="1664" d="M1191 1128h177l-72 218l-12 47q-2 16 -2 20h-4l-3 -20q0 -1 -3.5 -18t-7.5 -29zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1572 -23 v-233h-584v90l369 529q12 18 21 27l11 9v3q-2 0 -6.5 -0.5t-7.5 -0.5q-12 -3 -30 -3h-232v-115h-120v229h567v-89l-369 -530q-6 -8 -21 -26l-11 -11v-2l14 2q9 2 30 2h248v119h121zM1661 874v-106h-288v106h75l-47 144h-243l-47 -144h75v-106h-287v106h70l230 662h162 l230 -662h70z" />
|
||||
<glyph unicode="" horiz-adv-x="1664" d="M1191 104h177l-72 218l-12 47q-2 16 -2 20h-4l-3 -20q0 -1 -3.5 -18t-7.5 -29zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1661 -150 v-106h-288v106h75l-47 144h-243l-47 -144h75v-106h-287v106h70l230 662h162l230 -662h70zM1572 1001v-233h-584v90l369 529q12 18 21 27l11 9v3q-2 0 -6.5 -0.5t-7.5 -0.5q-12 -3 -30 -3h-232v-115h-120v229h567v-89l-369 -530q-6 -8 -21 -26l-11 -10v-3l14 3q9 1 30 1h248 v119h121z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" d="M736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1792 -32v-192q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h832 q14 0 23 -9t9 -23zM1600 480v-192q0 -14 -9 -23t-23 -9h-640q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h640q14 0 23 -9t9 -23zM1408 992v-192q0 -14 -9 -23t-23 -9h-448q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h448q14 0 23 -9t9 -23zM1216 1504v-192q0 -14 -9 -23t-23 -9h-256 q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h256q14 0 23 -9t9 -23z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" d="M1216 -32v-192q0 -14 -9 -23t-23 -9h-256q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h256q14 0 23 -9t9 -23zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192 q14 0 23 -9t9 -23zM1408 480v-192q0 -14 -9 -23t-23 -9h-448q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h448q14 0 23 -9t9 -23zM1600 992v-192q0 -14 -9 -23t-23 -9h-640q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h640q14 0 23 -9t9 -23zM1792 1504v-192q0 -14 -9 -23t-23 -9h-832 q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h832q14 0 23 -9t9 -23z" />
|
||||
<glyph unicode="" d="M1346 223q0 63 -44 116t-103 53q-52 0 -83 -37t-31 -94t36.5 -95t104.5 -38q50 0 85 27t35 68zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23 zM1486 165q0 -62 -13 -121.5t-41 -114t-68 -95.5t-98.5 -65.5t-127.5 -24.5q-62 0 -108 16q-24 8 -42 15l39 113q15 -7 31 -11q37 -13 75 -13q84 0 134.5 58.5t66.5 145.5h-2q-21 -23 -61.5 -37t-84.5 -14q-106 0 -173 71.5t-67 172.5q0 105 72 178t181 73q123 0 205 -94.5 t82 -252.5zM1456 882v-114h-469v114h167v432q0 7 0.5 19t0.5 17v16h-2l-7 -12q-8 -13 -26 -31l-62 -58l-82 86l192 185h123v-654h165z" />
|
||||
<glyph unicode="" d="M1346 1247q0 63 -44 116t-103 53q-52 0 -83 -37t-31 -94t36.5 -95t104.5 -38q50 0 85 27t35 68zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9 t9 -23zM1456 -142v-114h-469v114h167v432q0 7 0.5 19t0.5 17v16h-2l-7 -12q-8 -13 -26 -31l-62 -58l-82 86l192 185h123v-654h165zM1486 1189q0 -62 -13 -121.5t-41 -114t-68 -95.5t-98.5 -65.5t-127.5 -24.5q-62 0 -108 16q-24 8 -42 15l39 113q15 -7 31 -11q37 -13 75 -13 q84 0 134.5 58.5t66.5 145.5h-2q-21 -23 -61.5 -37t-84.5 -14q-106 0 -173 71.5t-67 172.5q0 105 72 178t181 73q123 0 205 -94.5t82 -252.5z" />
|
||||
<glyph unicode="" horiz-adv-x="1664" d="M256 192q0 26 -19 45t-45 19q-27 0 -45.5 -19t-18.5 -45q0 -27 18.5 -45.5t45.5 -18.5q26 0 45 18.5t19 45.5zM416 704v-640q0 -26 -19 -45t-45 -19h-288q-26 0 -45 19t-19 45v640q0 26 19 45t45 19h288q26 0 45 -19t19 -45zM1600 704q0 -86 -55 -149q15 -44 15 -76 q3 -76 -43 -137q17 -56 0 -117q-15 -57 -54 -94q9 -112 -49 -181q-64 -76 -197 -78h-36h-76h-17q-66 0 -144 15.5t-121.5 29t-120.5 39.5q-123 43 -158 44q-26 1 -45 19.5t-19 44.5v641q0 25 18 43.5t43 20.5q24 2 76 59t101 121q68 87 101 120q18 18 31 48t17.5 48.5 t13.5 60.5q7 39 12.5 61t19.5 52t34 50q19 19 45 19q46 0 82.5 -10.5t60 -26t40 -40.5t24 -45t12 -50t5 -45t0.5 -39q0 -38 -9.5 -76t-19 -60t-27.5 -56q-3 -6 -10 -18t-11 -22t-8 -24h277q78 0 135 -57t57 -135z" />
|
||||
<glyph unicode="" horiz-adv-x="1664" d="M256 960q0 -26 -19 -45t-45 -19q-27 0 -45.5 19t-18.5 45q0 27 18.5 45.5t45.5 18.5q26 0 45 -18.5t19 -45.5zM416 448v640q0 26 -19 45t-45 19h-288q-26 0 -45 -19t-19 -45v-640q0 -26 19 -45t45 -19h288q26 0 45 19t19 45zM1545 597q55 -61 55 -149q-1 -78 -57.5 -135 t-134.5 -57h-277q4 -14 8 -24t11 -22t10 -18q18 -37 27 -57t19 -58.5t10 -76.5q0 -24 -0.5 -39t-5 -45t-12 -50t-24 -45t-40 -40.5t-60 -26t-82.5 -10.5q-26 0 -45 19q-20 20 -34 50t-19.5 52t-12.5 61q-9 42 -13.5 60.5t-17.5 48.5t-31 48q-33 33 -101 120q-49 64 -101 121 t-76 59q-25 2 -43 20.5t-18 43.5v641q0 26 19 44.5t45 19.5q35 1 158 44q77 26 120.5 39.5t121.5 29t144 15.5h17h76h36q133 -2 197 -78q58 -69 49 -181q39 -37 54 -94q17 -61 0 -117q46 -61 43 -137q0 -32 -15 -76z" />
|
||||
<glyph unicode="" d="M919 233v157q0 50 -29 50q-17 0 -33 -16v-224q16 -16 33 -16q29 0 29 49zM1103 355h66v34q0 51 -33 51t-33 -51v-34zM532 621v-70h-80v-423h-74v423h-78v70h232zM733 495v-367h-67v40q-39 -45 -76 -45q-33 0 -42 28q-6 16 -6 54v290h66v-270q0 -24 1 -26q1 -15 15 -15 q20 0 42 31v280h67zM985 384v-146q0 -52 -7 -73q-12 -42 -53 -42q-35 0 -68 41v-36h-67v493h67v-161q32 40 68 40q41 0 53 -42q7 -21 7 -74zM1236 255v-9q0 -29 -2 -43q-3 -22 -15 -40q-27 -40 -80 -40q-52 0 -81 38q-21 27 -21 86v129q0 59 20 86q29 38 80 38t78 -38 q21 -28 21 -86v-76h-133v-65q0 -51 34 -51q24 0 30 26q0 1 0.5 7t0.5 16.5v21.5h68zM785 1079v-156q0 -51 -32 -51t-32 51v156q0 52 32 52t32 -52zM1318 366q0 177 -19 260q-10 44 -43 73.5t-76 34.5q-136 15 -412 15q-275 0 -411 -15q-44 -5 -76.5 -34.5t-42.5 -73.5 q-20 -87 -20 -260q0 -176 20 -260q10 -43 42.5 -73t75.5 -35q137 -15 412 -15t412 15q43 5 75.5 35t42.5 73q20 84 20 260zM563 1017l90 296h-75l-51 -195l-53 195h-78l24 -69t23 -69q35 -103 46 -158v-201h74v201zM852 936v130q0 58 -21 87q-29 38 -78 38q-51 0 -78 -38 q-21 -29 -21 -87v-130q0 -58 21 -87q27 -38 78 -38q49 0 78 38q21 27 21 87zM1033 816h67v370h-67v-283q-22 -31 -42 -31q-15 0 -16 16q-1 2 -1 26v272h-67v-293q0 -37 6 -55q11 -27 43 -27q36 0 77 45v-40zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960 q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
|
||||
<glyph unicode="" d="M971 292v-211q0 -67 -39 -67q-23 0 -45 22v301q22 22 45 22q39 0 39 -67zM1309 291v-46h-90v46q0 68 45 68t45 -68zM343 509h107v94h-312v-94h105v-569h100v569zM631 -60h89v494h-89v-378q-30 -42 -57 -42q-18 0 -21 21q-1 3 -1 35v364h-89v-391q0 -49 8 -73 q12 -37 58 -37q48 0 102 61v-54zM1060 88v197q0 73 -9 99q-17 56 -71 56q-50 0 -93 -54v217h-89v-663h89v48q45 -55 93 -55q54 0 71 55q9 27 9 100zM1398 98v13h-91q0 -51 -2 -61q-7 -36 -40 -36q-46 0 -46 69v87h179v103q0 79 -27 116q-39 51 -106 51q-68 0 -107 -51 q-28 -37 -28 -116v-173q0 -79 29 -116q39 -51 108 -51q72 0 108 53q18 27 21 54q2 9 2 58zM790 1011v210q0 69 -43 69t-43 -69v-210q0 -70 43 -70t43 70zM1509 260q0 -234 -26 -350q-14 -59 -58 -99t-102 -46q-184 -21 -555 -21t-555 21q-58 6 -102.5 46t-57.5 99 q-26 112 -26 350q0 234 26 350q14 59 58 99t103 47q183 20 554 20t555 -20q58 -7 102.5 -47t57.5 -99q26 -112 26 -350zM511 1536h102l-121 -399v-271h-100v271q-14 74 -61 212q-37 103 -65 187h106l71 -263zM881 1203v-175q0 -81 -28 -118q-37 -51 -106 -51q-67 0 -105 51 q-28 38 -28 118v175q0 80 28 117q38 51 105 51q69 0 106 -51q28 -37 28 -117zM1216 1365v-499h-91v55q-53 -62 -103 -62q-46 0 -59 37q-8 24 -8 75v394h91v-367q0 -33 1 -35q3 -22 21 -22q27 0 57 43v381h91z" />
|
||||
<glyph unicode="" horiz-adv-x="1408" d="M597 869q-10 -18 -257 -456q-27 -46 -65 -46h-239q-21 0 -31 17t0 36l253 448q1 0 0 1l-161 279q-12 22 -1 37q9 15 32 15h239q40 0 66 -45zM1403 1511q11 -16 0 -37l-528 -934v-1l336 -615q11 -20 1 -37q-10 -15 -32 -15h-239q-42 0 -66 45l-339 622q18 32 531 942 q25 45 64 45h241q22 0 31 -15z" />
|
||||
<glyph unicode="" d="M685 771q0 1 -126 222q-21 34 -52 34h-184q-18 0 -26 -11q-7 -12 1 -29l125 -216v-1l-196 -346q-9 -14 0 -28q8 -13 24 -13h185q31 0 50 36zM1309 1268q-7 12 -24 12h-187q-30 0 -49 -35l-411 -729q1 -2 262 -481q20 -35 52 -35h184q18 0 25 12q8 13 -1 28l-260 476v1 l409 723q8 16 0 28zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" d="M1280 640q0 37 -30 54l-512 320q-31 20 -65 2q-33 -18 -33 -56v-640q0 -38 33 -56q16 -8 31 -8q20 0 34 10l512 320q30 17 30 54zM1792 640q0 -96 -1 -150t-8.5 -136.5t-22.5 -147.5q-16 -73 -69 -123t-124 -58q-222 -25 -671 -25t-671 25q-71 8 -124.5 58t-69.5 123 q-14 65 -21.5 147.5t-8.5 136.5t-1 150t1 150t8.5 136.5t22.5 147.5q16 73 69 123t124 58q222 25 671 25t671 -25q71 -8 124.5 -58t69.5 -123q14 -65 21.5 -147.5t8.5 -136.5t1 -150z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" d="M402 829l494 -305l-342 -285l-490 319zM1388 274v-108l-490 -293v-1l-1 1l-1 -1v1l-489 293v108l147 -96l342 284v2l1 -1l1 1v-2l343 -284zM554 1418l342 -285l-494 -304l-338 270zM1390 829l338 -271l-489 -319l-343 285zM1239 1418l489 -319l-338 -270l-494 304z" />
|
||||
<glyph unicode="" horiz-adv-x="1408" d="M928 135v-151l-707 -1v151zM1169 481v-701l-1 -35v-1h-1132l-35 1h-1v736h121v-618h928v618h120zM241 393l704 -65l-13 -150l-705 65zM309 709l683 -183l-39 -146l-683 183zM472 1058l609 -360l-77 -130l-609 360zM832 1389l398 -585l-124 -85l-399 584zM1285 1536 l121 -697l-149 -26l-121 697z" />
|
||||
<glyph unicode="" d="M1362 110v648h-135q20 -63 20 -131q0 -126 -64 -232.5t-174 -168.5t-240 -62q-197 0 -337 135.5t-140 327.5q0 68 20 131h-141v-648q0 -26 17.5 -43.5t43.5 -17.5h1069q25 0 43 17.5t18 43.5zM1078 643q0 124 -90.5 211.5t-218.5 87.5q-127 0 -217.5 -87.5t-90.5 -211.5 t90.5 -211.5t217.5 -87.5q128 0 218.5 87.5t90.5 211.5zM1362 1003v165q0 28 -20 48.5t-49 20.5h-174q-29 0 -49 -20.5t-20 -48.5v-165q0 -29 20 -49t49 -20h174q29 0 49 20t20 49zM1536 1211v-1142q0 -81 -58 -139t-139 -58h-1142q-81 0 -139 58t-58 139v1142q0 81 58 139 t139 58h1142q81 0 139 -58t58 -139z" />
|
||||
<glyph unicode="" d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM698 640q0 88 -62 150t-150 62t-150 -62t-62 -150t62 -150t150 -62t150 62t62 150zM1262 640q0 88 -62 150 t-150 62t-150 -62t-62 -150t62 -150t150 -62t150 62t62 150z" />
|
||||
<glyph unicode="" d="M768 914l201 -306h-402zM1133 384h94l-459 691l-459 -691h94l104 160h522zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
||||
<glyph unicode="" horiz-adv-x="1408" d="M815 677q8 -63 -50.5 -101t-111.5 -6q-39 17 -53.5 58t-0.5 82t52 58q36 18 72.5 12t64 -35.5t27.5 -67.5zM926 698q-14 107 -113 164t-197 13q-63 -28 -100.5 -88.5t-34.5 -129.5q4 -91 77.5 -155t165.5 -56q91 8 152 84t50 168zM1165 1240q-20 27 -56 44.5t-58 22 t-71 12.5q-291 47 -566 -2q-43 -7 -66 -12t-55 -22t-50 -43q30 -28 76 -45.5t73.5 -22t87.5 -11.5q228 -29 448 -1q63 8 89.5 12t72.5 21.5t75 46.5zM1222 205q-8 -26 -15.5 -76.5t-14 -84t-28.5 -70t-58 -56.5q-86 -48 -189.5 -71.5t-202 -22t-201.5 18.5q-46 8 -81.5 18 t-76.5 27t-73 43.5t-52 61.5q-25 96 -57 292l6 16l18 9q223 -148 506.5 -148t507.5 148q21 -6 24 -23t-5 -45t-8 -37zM1403 1166q-26 -167 -111 -655q-5 -30 -27 -56t-43.5 -40t-54.5 -31q-252 -126 -610 -88q-248 27 -394 139q-15 12 -25.5 26.5t-17 35t-9 34t-6 39.5 t-5.5 35q-9 50 -26.5 150t-28 161.5t-23.5 147.5t-22 158q3 26 17.5 48.5t31.5 37.5t45 30t46 22.5t48 18.5q125 46 313 64q379 37 676 -50q155 -46 215 -122q16 -20 16.5 -51t-5.5 -54z" />
|
||||
<glyph unicode="" d="M848 666q0 43 -41 66t-77 1q-43 -20 -42.5 -72.5t43.5 -70.5q39 -23 81 4t36 72zM928 682q8 -66 -36 -121t-110 -61t-119 40t-56 113q-2 49 25.5 93t72.5 64q70 31 141.5 -10t81.5 -118zM1100 1073q-20 -21 -53.5 -34t-53 -16t-63.5 -8q-155 -20 -324 0q-44 6 -63 9.5 t-52.5 16t-54.5 32.5q13 19 36 31t40 15.5t47 8.5q198 35 408 1q33 -5 51 -8.5t43 -16t39 -31.5zM1142 327q0 7 5.5 26.5t3 32t-17.5 16.5q-161 -106 -365 -106t-366 106l-12 -6l-5 -12q26 -154 41 -210q47 -81 204 -108q249 -46 428 53q34 19 49 51.5t22.5 85.5t12.5 71z M1272 1020q9 53 -8 75q-43 55 -155 88q-216 63 -487 36q-132 -12 -226 -46q-38 -15 -59.5 -25t-47 -34t-29.5 -54q8 -68 19 -138t29 -171t24 -137q1 -5 5 -31t7 -36t12 -27t22 -28q105 -80 284 -100q259 -28 440 63q24 13 39.5 23t31 29t19.5 40q48 267 80 473zM1536 1120 v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
|
||||
<glyph unicode="" horiz-adv-x="1024" d="M390 1408h219v-388h364v-241h-364v-394q0 -136 14 -172q13 -37 52 -60q50 -31 117 -31q117 0 232 76v-242q-102 -48 -178 -65q-77 -19 -173 -19q-105 0 -186 27q-78 25 -138 75q-58 51 -79 105q-22 54 -22 161v539h-170v217q91 30 155 84q64 55 103 132q39 78 54 196z " />
|
||||
<glyph unicode="" d="M1123 127v181q-88 -56 -174 -56q-51 0 -88 23q-29 17 -39 45q-11 30 -11 129v295h274v181h-274v291h-164q-11 -90 -40 -147t-78 -99q-48 -40 -116 -63v-163h127v-404q0 -78 17 -121q17 -42 59 -78q43 -37 104 -57q62 -20 140 -20q67 0 129 14q57 13 134 49zM1536 1120 v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
|
||||
<glyph unicode="" horiz-adv-x="768" d="M765 237q8 -19 -5 -35l-350 -384q-10 -10 -23 -10q-14 0 -24 10l-355 384q-13 16 -5 35q9 19 29 19h224v1248q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1248h224q21 0 29 -19z" />
|
||||
<glyph unicode="" horiz-adv-x="768" d="M765 1043q-9 -19 -29 -19h-224v-1248q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v1248h-224q-21 0 -29 19t5 35l350 384q10 10 23 10q14 0 24 -10l355 -384q13 -16 5 -35z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" d="M1792 736v-192q0 -14 -9 -23t-23 -9h-1248v-224q0 -21 -19 -29t-35 5l-384 350q-10 10 -10 23q0 14 10 24l384 354q16 14 35 6q19 -9 19 -29v-224h1248q14 0 23 -9t9 -23z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" d="M1728 643q0 -14 -10 -24l-384 -354q-16 -14 -35 -6q-19 9 -19 29v224h-1248q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h1248v224q0 21 19 29t35 -5l384 -350q10 -10 10 -23z" />
|
||||
<glyph unicode="" horiz-adv-x="1408" d="M1393 321q-39 -125 -123 -250q-129 -196 -257 -196q-49 0 -140 32q-86 32 -151 32q-61 0 -142 -33q-81 -34 -132 -34q-152 0 -301 259q-147 261 -147 503q0 228 113 374q112 144 284 144q72 0 177 -30q104 -30 138 -30q45 0 143 34q102 34 173 34q119 0 213 -65 q52 -36 104 -100q-79 -67 -114 -118q-65 -94 -65 -207q0 -124 69 -223t158 -126zM1017 1494q0 -61 -29 -136q-30 -75 -93 -138q-54 -54 -108 -72q-37 -11 -104 -17q3 149 78 257q74 107 250 148q1 -3 2.5 -11t2.5 -11q0 -4 0.5 -10t0.5 -10z" />
|
||||
<glyph unicode="" horiz-adv-x="1664" d="M682 530v-651l-682 94v557h682zM682 1273v-659h-682v565zM1664 530v-786l-907 125v661h907zM1664 1408v-794h-907v669z" />
|
||||
<glyph unicode="" horiz-adv-x="1408" d="M493 1053q16 0 27.5 11.5t11.5 27.5t-11.5 27.5t-27.5 11.5t-27 -11.5t-11 -27.5t11 -27.5t27 -11.5zM915 1053q16 0 27 11.5t11 27.5t-11 27.5t-27 11.5t-27.5 -11.5t-11.5 -27.5t11.5 -27.5t27.5 -11.5zM103 869q42 0 72 -30t30 -72v-430q0 -43 -29.5 -73t-72.5 -30 t-73 30t-30 73v430q0 42 30 72t73 30zM1163 850v-666q0 -46 -32 -78t-77 -32h-75v-227q0 -43 -30 -73t-73 -30t-73 30t-30 73v227h-138v-227q0 -43 -30 -73t-73 -30q-42 0 -72 30t-30 73l-1 227h-74q-46 0 -78 32t-32 78v666h918zM931 1255q107 -55 171 -153.5t64 -215.5 h-925q0 117 64 215.5t172 153.5l-71 131q-7 13 5 20q13 6 20 -6l72 -132q95 42 201 42t201 -42l72 132q7 12 20 6q12 -7 5 -20zM1408 767v-430q0 -43 -30 -73t-73 -30q-42 0 -72 30t-30 73v430q0 43 30 72.5t72 29.5q43 0 73 -29.5t30 -72.5z" />
|
||||
<glyph unicode="" d="M663 1125q-11 -1 -15.5 -10.5t-8.5 -9.5q-5 -1 -5 5q0 12 19 15h10zM750 1111q-4 -1 -11.5 6.5t-17.5 4.5q24 11 32 -2q3 -6 -3 -9zM399 684q-4 1 -6 -3t-4.5 -12.5t-5.5 -13.5t-10 -13q-7 -10 -1 -12q4 -1 12.5 7t12.5 18q1 3 2 7t2 6t1.5 4.5t0.5 4v3t-1 2.5t-3 2z M1254 325q0 18 -55 42q4 15 7.5 27.5t5 26t3 21.5t0.5 22.5t-1 19.5t-3.5 22t-4 20.5t-5 25t-5.5 26.5q-10 48 -47 103t-72 75q24 -20 57 -83q87 -162 54 -278q-11 -40 -50 -42q-31 -4 -38.5 18.5t-8 83.5t-11.5 107q-9 39 -19.5 69t-19.5 45.5t-15.5 24.5t-13 15t-7.5 7 q-14 62 -31 103t-29.5 56t-23.5 33t-15 40q-4 21 6 53.5t4.5 49.5t-44.5 25q-15 3 -44.5 18t-35.5 16q-8 1 -11 26t8 51t36 27q37 3 51 -30t4 -58q-11 -19 -2 -26.5t30 -0.5q13 4 13 36v37q-5 30 -13.5 50t-21 30.5t-23.5 15t-27 7.5q-107 -8 -89 -134q0 -15 -1 -15 q-9 9 -29.5 10.5t-33 -0.5t-15.5 5q1 57 -16 90t-45 34q-27 1 -41.5 -27.5t-16.5 -59.5q-1 -15 3.5 -37t13 -37.5t15.5 -13.5q10 3 16 14q4 9 -7 8q-7 0 -15.5 14.5t-9.5 33.5q-1 22 9 37t34 14q17 0 27 -21t9.5 -39t-1.5 -22q-22 -15 -31 -29q-8 -12 -27.5 -23.5 t-20.5 -12.5q-13 -14 -15.5 -27t7.5 -18q14 -8 25 -19.5t16 -19t18.5 -13t35.5 -6.5q47 -2 102 15q2 1 23 7t34.5 10.5t29.5 13t21 17.5q9 14 20 8q5 -3 6.5 -8.5t-3 -12t-16.5 -9.5q-20 -6 -56.5 -21.5t-45.5 -19.5q-44 -19 -70 -23q-25 -5 -79 2q-10 2 -9 -2t17 -19 q25 -23 67 -22q17 1 36 7t36 14t33.5 17.5t30 17t24.5 12t17.5 2.5t8.5 -11q0 -2 -1 -4.5t-4 -5t-6 -4.5t-8.5 -5t-9 -4.5t-10 -5t-9.5 -4.5q-28 -14 -67.5 -44t-66.5 -43t-49 -1q-21 11 -63 73q-22 31 -25 22q-1 -3 -1 -10q0 -25 -15 -56.5t-29.5 -55.5t-21 -58t11.5 -63 q-23 -6 -62.5 -90t-47.5 -141q-2 -18 -1.5 -69t-5.5 -59q-8 -24 -29 -3q-32 31 -36 94q-2 28 4 56q4 19 -1 18l-4 -5q-36 -65 10 -166q5 -12 25 -28t24 -20q20 -23 104 -90.5t93 -76.5q16 -15 17.5 -38t-14 -43t-45.5 -23q8 -15 29 -44.5t28 -54t7 -70.5q46 24 7 92 q-4 8 -10.5 16t-9.5 12t-2 6q3 5 13 9.5t20 -2.5q46 -52 166 -36q133 15 177 87q23 38 34 30q12 -6 10 -52q-1 -25 -23 -92q-9 -23 -6 -37.5t24 -15.5q3 19 14.5 77t13.5 90q2 21 -6.5 73.5t-7.5 97t23 70.5q15 18 51 18q1 37 34.5 53t72.5 10.5t60 -22.5zM626 1152 q3 17 -2.5 30t-11.5 15q-9 2 -9 -7q2 -5 5 -6q10 0 7 -15q-3 -20 8 -20q3 0 3 3zM1045 955q-2 8 -6.5 11.5t-13 5t-14.5 5.5q-5 3 -9.5 8t-7 8t-5.5 6.5t-4 4t-4 -1.5q-14 -16 7 -43.5t39 -31.5q9 -1 14.5 8t3.5 20zM867 1168q0 11 -5 19.5t-11 12.5t-9 3q-14 -1 -7 -7l4 -2 q14 -4 18 -31q0 -3 8 2zM921 1401q0 2 -2.5 5t-9 7t-9.5 6q-15 15 -24 15q-9 -1 -11.5 -7.5t-1 -13t-0.5 -12.5q-1 -4 -6 -10.5t-6 -9t3 -8.5q4 -3 8 0t11 9t15 9q1 1 9 1t15 2t9 7zM1486 60q20 -12 31 -24.5t12 -24t-2.5 -22.5t-15.5 -22t-23.5 -19.5t-30 -18.5 t-31.5 -16.5t-32 -15.5t-27 -13q-38 -19 -85.5 -56t-75.5 -64q-17 -16 -68 -19.5t-89 14.5q-18 9 -29.5 23.5t-16.5 25.5t-22 19.5t-47 9.5q-44 1 -130 1q-19 0 -57 -1.5t-58 -2.5q-44 -1 -79.5 -15t-53.5 -30t-43.5 -28.5t-53.5 -11.5q-29 1 -111 31t-146 43q-19 4 -51 9.5 t-50 9t-39.5 9.5t-33.5 14.5t-17 19.5q-10 23 7 66.5t18 54.5q1 16 -4 40t-10 42.5t-4.5 36.5t10.5 27q14 12 57 14t60 12q30 18 42 35t12 51q21 -73 -32 -106q-32 -20 -83 -15q-34 3 -43 -10q-13 -15 5 -57q2 -6 8 -18t8.5 -18t4.5 -17t1 -22q0 -15 -17 -49t-14 -48 q3 -17 37 -26q20 -6 84.5 -18.5t99.5 -20.5q24 -6 74 -22t82.5 -23t55.5 -4q43 6 64.5 28t23 48t-7.5 58.5t-19 52t-20 36.5q-121 190 -169 242q-68 74 -113 40q-11 -9 -15 15q-3 16 -2 38q1 29 10 52t24 47t22 42q8 21 26.5 72t29.5 78t30 61t39 54q110 143 124 195 q-12 112 -16 310q-2 90 24 151.5t106 104.5q39 21 104 21q53 1 106 -13.5t89 -41.5q57 -42 91.5 -121.5t29.5 -147.5q-5 -95 30 -214q34 -113 133 -218q55 -59 99.5 -163t59.5 -191q8 -49 5 -84.5t-12 -55.5t-20 -22q-10 -2 -23.5 -19t-27 -35.5t-40.5 -33.5t-61 -14 q-18 1 -31.5 5t-22.5 13.5t-13.5 15.5t-11.5 20.5t-9 19.5q-22 37 -41 30t-28 -49t7 -97q20 -70 1 -195q-10 -65 18 -100.5t73 -33t85 35.5q59 49 89.5 66.5t103.5 42.5q53 18 77 36.5t18.5 34.5t-25 28.5t-51.5 23.5q-33 11 -49.5 48t-15 72.5t15.5 47.5q1 -31 8 -56.5 t14.5 -40.5t20.5 -28.5t21 -19t21.5 -13t16.5 -9.5z" />
|
||||
<glyph unicode="" d="M1024 36q-42 241 -140 498h-2l-2 -1q-16 -6 -43 -16.5t-101 -49t-137 -82t-131 -114.5t-103 -148l-15 11q184 -150 418 -150q132 0 256 52zM839 643q-21 49 -53 111q-311 -93 -673 -93q-1 -7 -1 -21q0 -124 44 -236.5t124 -201.5q50 89 123.5 166.5t142.5 124.5t130.5 81 t99.5 48l37 13q4 1 13 3.5t13 4.5zM732 855q-120 213 -244 378q-138 -65 -234 -186t-128 -272q302 0 606 80zM1416 536q-210 60 -409 29q87 -239 128 -469q111 75 185 189.5t96 250.5zM611 1277q-1 0 -2 -1q1 1 2 1zM1201 1132q-185 164 -433 164q-76 0 -155 -19 q131 -170 246 -382q69 26 130 60.5t96.5 61.5t65.5 57t37.5 40.5zM1424 647q-3 232 -149 410l-1 -1q-9 -12 -19 -24.5t-43.5 -44.5t-71 -60.5t-100 -65t-131.5 -64.5q25 -53 44 -95q2 -6 6.5 -17.5t7.5 -16.5q36 5 74.5 7t73.5 2t69 -1.5t64 -4t56.5 -5.5t48 -6.5t36.5 -6 t25 -4.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
||||
<glyph unicode="" d="M1173 473q0 50 -19.5 91.5t-48.5 68.5t-73 49t-82.5 34t-87.5 23l-104 24q-30 7 -44 10.5t-35 11.5t-30 16t-16.5 21t-7.5 30q0 77 144 77q43 0 77 -12t54 -28.5t38 -33.5t40 -29t48 -12q47 0 75.5 32t28.5 77q0 55 -56 99.5t-142 67.5t-182 23q-68 0 -132 -15.5 t-119.5 -47t-89 -87t-33.5 -128.5q0 -61 19 -106.5t56 -75.5t80 -48.5t103 -32.5l146 -36q90 -22 112 -36q32 -20 32 -60q0 -39 -40 -64.5t-105 -25.5q-51 0 -91.5 16t-65 38.5t-45.5 45t-46 38.5t-54 16q-50 0 -75.5 -30t-25.5 -75q0 -92 122 -157.5t291 -65.5 q73 0 140 18.5t122.5 53.5t88.5 93.5t33 131.5zM1536 256q0 -159 -112.5 -271.5t-271.5 -112.5q-130 0 -234 80q-77 -16 -150 -16q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5q0 73 16 150q-80 104 -80 234q0 159 112.5 271.5t271.5 112.5q130 0 234 -80 q77 16 150 16q143 0 273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -73 -16 -150q80 -104 80 -234z" />
|
||||
<glyph unicode="" horiz-adv-x="1664" d="M1483 512l-587 -587q-52 -53 -127.5 -53t-128.5 53l-587 587q-53 53 -53 128t53 128l587 587q53 53 128 53t128 -53l265 -265l-398 -399l-188 188q-42 42 -99 42q-59 0 -100 -41l-120 -121q-42 -40 -42 -99q0 -58 42 -100l406 -408q30 -28 67 -37l6 -4h28q60 0 99 41 l619 619l2 -3q53 -53 53 -128t-53 -128zM1406 1138l120 -120q14 -15 14 -36t-14 -36l-730 -730q-17 -15 -37 -15v0q-4 0 -6 1q-18 2 -30 14l-407 408q-14 15 -14 36t14 35l121 120q13 15 35 15t36 -15l252 -252l574 575q15 15 36 15t36 -15z" />
|
||||
<glyph unicode="" d="M704 192v1024q0 14 -9 23t-23 9h-480q-14 0 -23 -9t-9 -23v-1024q0 -14 9 -23t23 -9h480q14 0 23 9t9 23zM1376 576v640q0 14 -9 23t-23 9h-480q-14 0 -23 -9t-9 -23v-640q0 -14 9 -23t23 -9h480q14 0 23 9t9 23zM1536 1344v-1408q0 -26 -19 -45t-45 -19h-1408 q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
|
||||
<glyph unicode="" horiz-adv-x="1280" d="M1280 480q0 -40 -28 -68t-68 -28q-51 0 -80 43l-227 341h-45v-132l247 -411q9 -15 9 -33q0 -26 -19 -45t-45 -19h-192v-272q0 -46 -33 -79t-79 -33h-160q-46 0 -79 33t-33 79v272h-192q-26 0 -45 19t-19 45q0 18 9 33l247 411v132h-45l-227 -341q-29 -43 -80 -43 q-40 0 -68 28t-28 68q0 29 16 53l256 384q73 107 176 107h384q103 0 176 -107l256 -384q16 -24 16 -53zM864 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" />
|
||||
<glyph unicode="" horiz-adv-x="1024" d="M1024 832v-416q0 -40 -28 -68t-68 -28t-68 28t-28 68v352h-64v-912q0 -46 -33 -79t-79 -33t-79 33t-33 79v464h-64v-464q0 -46 -33 -79t-79 -33t-79 33t-33 79v912h-64v-352q0 -40 -28 -68t-68 -28t-68 28t-28 68v416q0 80 56 136t136 56h640q80 0 136 -56t56 -136z M736 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" />
|
||||
<glyph unicode="" d="M773 234l350 473q16 22 24.5 59t-6 85t-61.5 79q-40 26 -83 25.5t-73.5 -17.5t-54.5 -45q-36 -40 -96 -40q-59 0 -95 40q-24 28 -54.5 45t-73.5 17.5t-84 -25.5q-46 -31 -60.5 -79t-6 -85t24.5 -59zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" d="M1472 640q0 117 -45.5 223.5t-123 184t-184 123t-223.5 45.5t-223.5 -45.5t-184 -123t-123 -184t-45.5 -223.5t45.5 -223.5t123 -184t184 -123t223.5 -45.5t223.5 45.5t184 123t123 184t45.5 223.5zM1748 363q-4 -15 -20 -20l-292 -96v-306q0 -16 -13 -26q-15 -10 -29 -4 l-292 94l-180 -248q-10 -13 -26 -13t-26 13l-180 248l-292 -94q-14 -6 -29 4q-13 10 -13 26v306l-292 96q-16 5 -20 20q-5 17 4 29l180 248l-180 248q-9 13 -4 29q4 15 20 20l292 96v306q0 16 13 26q15 10 29 4l292 -94l180 248q9 12 26 12t26 -12l180 -248l292 94 q14 6 29 -4q13 -10 13 -26v-306l292 -96q16 -5 20 -20q5 -16 -4 -29l-180 -248l180 -248q9 -12 4 -29z" />
|
||||
<glyph unicode="" d="M1262 233q-54 -9 -110 -9q-182 0 -337 90t-245 245t-90 337q0 192 104 357q-201 -60 -328.5 -229t-127.5 -384q0 -130 51 -248.5t136.5 -204t204 -136.5t248.5 -51q144 0 273.5 61.5t220.5 171.5zM1465 318q-94 -203 -283.5 -324.5t-413.5 -121.5q-156 0 -298 61 t-245 164t-164 245t-61 298q0 153 57.5 292.5t156 241.5t235.5 164.5t290 68.5q44 2 61 -39q18 -41 -15 -72q-86 -78 -131.5 -181.5t-45.5 -218.5q0 -148 73 -273t198 -198t273 -73q118 0 228 51q41 18 72 -13q14 -14 17.5 -34t-4.5 -38z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" d="M1088 704q0 26 -19 45t-45 19h-256q-26 0 -45 -19t-19 -45t19 -45t45 -19h256q26 0 45 19t19 45zM1664 896v-960q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v960q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1728 1344v-256q0 -26 -19 -45t-45 -19h-1536 q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1536q26 0 45 -19t19 -45z" />
|
||||
<glyph unicode="" horiz-adv-x="1664" d="M1632 576q0 -26 -19 -45t-45 -19h-224q0 -171 -67 -290l208 -209q19 -19 19 -45t-19 -45q-18 -19 -45 -19t-45 19l-198 197q-5 -5 -15 -13t-42 -28.5t-65 -36.5t-82 -29t-97 -13v896h-128v-896q-51 0 -101.5 13.5t-87 33t-66 39t-43.5 32.5l-15 14l-183 -207 q-20 -21 -48 -21q-24 0 -43 16q-19 18 -20.5 44.5t15.5 46.5l202 227q-58 114 -58 274h-224q-26 0 -45 19t-19 45t19 45t45 19h224v294l-173 173q-19 19 -19 45t19 45t45 19t45 -19l173 -173h844l173 173q19 19 45 19t45 -19t19 -45t-19 -45l-173 -173v-294h224q26 0 45 -19 t19 -45zM1152 1152h-640q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5z" />
|
||||
<glyph unicode="" horiz-adv-x="1920" d="M1917 1016q23 -64 -150 -294q-24 -32 -65 -85q-78 -100 -90 -131q-17 -41 14 -81q17 -21 81 -82h1l1 -1l1 -1l2 -2q141 -131 191 -221q3 -5 6.5 -12.5t7 -26.5t-0.5 -34t-25 -27.5t-59 -12.5l-256 -4q-24 -5 -56 5t-52 22l-20 12q-30 21 -70 64t-68.5 77.5t-61 58 t-56.5 15.5q-3 -1 -8 -3.5t-17 -14.5t-21.5 -29.5t-17 -52t-6.5 -77.5q0 -15 -3.5 -27.5t-7.5 -18.5l-4 -5q-18 -19 -53 -22h-115q-71 -4 -146 16.5t-131.5 53t-103 66t-70.5 57.5l-25 24q-10 10 -27.5 30t-71.5 91t-106 151t-122.5 211t-130.5 272q-6 16 -6 27t3 16l4 6 q15 19 57 19l274 2q12 -2 23 -6.5t16 -8.5l5 -3q16 -11 24 -32q20 -50 46 -103.5t41 -81.5l16 -29q29 -60 56 -104t48.5 -68.5t41.5 -38.5t34 -14t27 5q2 1 5 5t12 22t13.5 47t9.5 81t0 125q-2 40 -9 73t-14 46l-6 12q-25 34 -85 43q-13 2 5 24q17 19 38 30q53 26 239 24 q82 -1 135 -13q20 -5 33.5 -13.5t20.5 -24t10.5 -32t3.5 -45.5t-1 -55t-2.5 -70.5t-1.5 -82.5q0 -11 -1 -42t-0.5 -48t3.5 -40.5t11.5 -39t22.5 -24.5q8 -2 17 -4t26 11t38 34.5t52 67t68 107.5q60 104 107 225q4 10 10 17.5t11 10.5l4 3l5 2.5t13 3t20 0.5l288 2 q39 5 64 -2.5t31 -16.5z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" d="M675 252q21 34 11 69t-45 50q-34 14 -73 1t-60 -46q-22 -34 -13 -68.5t43 -50.5t74.5 -2.5t62.5 47.5zM769 373q8 13 3.5 26.5t-17.5 18.5q-14 5 -28.5 -0.5t-21.5 -18.5q-17 -31 13 -45q14 -5 29 0.5t22 18.5zM943 266q-45 -102 -158 -150t-224 -12 q-107 34 -147.5 126.5t6.5 187.5q47 93 151.5 139t210.5 19q111 -29 158.5 -119.5t2.5 -190.5zM1255 426q-9 96 -89 170t-208.5 109t-274.5 21q-223 -23 -369.5 -141.5t-132.5 -264.5q9 -96 89 -170t208.5 -109t274.5 -21q223 23 369.5 141.5t132.5 264.5zM1563 422 q0 -68 -37 -139.5t-109 -137t-168.5 -117.5t-226 -83t-270.5 -31t-275 33.5t-240.5 93t-171.5 151t-65 199.5q0 115 69.5 245t197.5 258q169 169 341.5 236t246.5 -7q65 -64 20 -209q-4 -14 -1 -20t10 -7t14.5 0.5t13.5 3.5l6 2q139 59 246 59t153 -61q45 -63 0 -178 q-2 -13 -4.5 -20t4.5 -12.5t12 -7.5t17 -6q57 -18 103 -47t80 -81.5t34 -116.5zM1489 1046q42 -47 54.5 -108.5t-6.5 -117.5q-8 -23 -29.5 -34t-44.5 -4q-23 8 -34 29.5t-4 44.5q20 63 -24 111t-107 35q-24 -5 -45 8t-25 37q-5 24 8 44.5t37 25.5q60 13 119 -5.5t101 -65.5z M1670 1209q87 -96 112.5 -222.5t-13.5 -241.5q-9 -27 -34 -40t-52 -4t-40 34t-5 52q28 82 10 172t-80 158q-62 69 -148 95.5t-173 8.5q-28 -6 -52 9.5t-30 43.5t9.5 51.5t43.5 29.5q123 26 244 -11.5t208 -134.5z" />
|
||||
<glyph unicode="" d="M1133 -34q-171 -94 -368 -94q-196 0 -367 94q138 87 235.5 211t131.5 268q35 -144 132.5 -268t235.5 -211zM638 1394v-485q0 -252 -126.5 -459.5t-330.5 -306.5q-181 215 -181 495q0 187 83.5 349.5t229.5 269.5t325 137zM1536 638q0 -280 -181 -495 q-204 99 -330.5 306.5t-126.5 459.5v485q179 -30 325 -137t229.5 -269.5t83.5 -349.5z" />
|
||||
<glyph unicode="" horiz-adv-x="1408" d="M1402 433q-32 -80 -76 -138t-91 -88.5t-99 -46.5t-101.5 -14.5t-96.5 8.5t-86.5 22t-69.5 27.5t-46 22.5l-17 10q-113 -228 -289.5 -359.5t-384.5 -132.5q-19 0 -32 13t-13 32t13 31.5t32 12.5q173 1 322.5 107.5t251.5 294.5q-36 -14 -72 -23t-83 -13t-91 2.5t-93 28.5 t-92 59t-84.5 100t-74.5 146q114 47 214 57t167.5 -7.5t124.5 -56.5t88.5 -77t56.5 -82q53 131 79 291q-7 -1 -18 -2.5t-46.5 -2.5t-69.5 0.5t-81.5 10t-88.5 23t-84 42.5t-75 65t-54.5 94.5t-28.5 127.5q70 28 133.5 36.5t112.5 -1t92 -30t73.5 -50t56 -61t42 -63t27.5 -56 t16 -39.5l4 -16q12 122 12 195q-8 6 -21.5 16t-49 44.5t-63.5 71.5t-54 93t-33 112.5t12 127t70 138.5q73 -25 127.5 -61.5t84.5 -76.5t48 -85t20.5 -89t-0.5 -85.5t-13 -76.5t-19 -62t-17 -42l-7 -15q1 -5 1 -50.5t-1 -71.5q3 7 10 18.5t30.5 43t50.5 58t71 55.5t91.5 44.5 t112 14.5t132.5 -24q-2 -78 -21.5 -141.5t-50 -104.5t-69.5 -71.5t-81.5 -45.5t-84.5 -24t-80 -9.5t-67.5 1t-46.5 4.5l-17 3q-23 -147 -73 -283q6 7 18 18.5t49.5 41t77.5 52.5t99.5 42t117.5 20t129 -23.5t137 -77.5z" />
|
||||
<glyph unicode="" horiz-adv-x="1280" d="M1259 283v-66q0 -85 -57.5 -144.5t-138.5 -59.5h-57l-260 -269v269h-529q-81 0 -138.5 59.5t-57.5 144.5v66h1238zM1259 609v-255h-1238v255h1238zM1259 937v-255h-1238v255h1238zM1259 1077v-67h-1238v67q0 84 57.5 143.5t138.5 59.5h846q81 0 138.5 -59.5t57.5 -143.5z " />
|
||||
<glyph unicode="" d="M1152 640q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v192h-352q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h352v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198 t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
||||
<glyph unicode="" d="M1152 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-352v-192q0 -14 -9 -23t-23 -9q-12 0 -24 10l-319 319q-9 9 -9 23t9 23l320 320q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5v-192h352q13 0 22.5 -9.5t9.5 -22.5zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198 t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
||||
<glyph unicode="" d="M1024 960v-640q0 -26 -19 -45t-45 -19q-20 0 -37 12l-448 320q-27 19 -27 52t27 52l448 320q17 12 37 12q26 0 45 -19t19 -45zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5z M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
|
||||
<glyph unicode="" d="M1024 640q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5 t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
||||
<glyph unicode="" horiz-adv-x="1664" d="M1023 349l102 -204q-58 -179 -210 -290t-339 -111q-156 0 -288.5 77.5t-210 210t-77.5 288.5q0 181 104.5 330t274.5 211l17 -131q-122 -54 -195 -165.5t-73 -244.5q0 -185 131.5 -316.5t316.5 -131.5q126 0 232.5 65t165 175.5t49.5 236.5zM1571 249l58 -114l-256 -128 q-13 -7 -29 -7q-40 0 -57 35l-239 477h-472q-24 0 -42.5 16.5t-21.5 40.5l-96 779q-2 16 6 42q14 51 57 82.5t97 31.5q66 0 113 -47t47 -113q0 -69 -52 -117.5t-120 -41.5l37 -289h423v-128h-407l16 -128h455q40 0 57 -35l228 -455z" />
|
||||
<glyph unicode="" d="M1254 899q16 85 -21 132q-52 65 -187 45q-17 -3 -41 -12.5t-57.5 -30.5t-64.5 -48.5t-59.5 -70t-44.5 -91.5q80 7 113.5 -16t26.5 -99q-5 -52 -52 -143q-43 -78 -71 -99q-44 -32 -87 14q-23 24 -37.5 64.5t-19 73t-10 84t-8.5 71.5q-23 129 -34 164q-12 37 -35.5 69 t-50.5 40q-57 16 -127 -25q-54 -32 -136.5 -106t-122.5 -102v-7q16 -8 25.5 -26t21.5 -20q21 -3 54.5 8.5t58 10.5t41.5 -30q11 -18 18.5 -38.5t15 -48t12.5 -40.5q17 -46 53 -187q36 -146 57 -197q42 -99 103 -125q43 -12 85 -1.5t76 31.5q131 77 250 237 q104 139 172.5 292.5t82.5 226.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
|
||||
<glyph unicode="" horiz-adv-x="1152" d="M1152 704q0 -191 -94.5 -353t-256.5 -256.5t-353 -94.5h-160q-14 0 -23 9t-9 23v611l-215 -66q-3 -1 -9 -1q-10 0 -19 6q-13 10 -13 26v128q0 23 23 31l233 71v93l-215 -66q-3 -1 -9 -1q-10 0 -19 6q-13 10 -13 26v128q0 23 23 31l233 71v250q0 14 9 23t23 9h160 q14 0 23 -9t9 -23v-181l375 116q15 5 28 -5t13 -26v-128q0 -23 -23 -31l-393 -121v-93l375 116q15 5 28 -5t13 -26v-128q0 -23 -23 -31l-393 -121v-487q188 13 318 151t130 328q0 14 9 23t23 9h160q14 0 23 -9t9 -23z" />
|
||||
<glyph unicode="" horiz-adv-x="1408" d="M1152 736v-64q0 -14 -9 -23t-23 -9h-352v-352q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v352h-352q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h352v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-352h352q14 0 23 -9t9 -23zM1280 288v832q0 66 -47 113t-113 47h-832 q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113zM1408 1120v-832q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q119 0 203.5 -84.5t84.5 -203.5z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" />
|
||||
<glyph unicode="" horiz-adv-x="1792" />
|
||||
<glyph unicode="" horiz-adv-x="1792" />
|
||||
<glyph unicode="" horiz-adv-x="1792" />
|
||||
<glyph unicode="" horiz-adv-x="1792" />
|
||||
<glyph unicode="" horiz-adv-x="1792" />
|
||||
<glyph unicode="" horiz-adv-x="1792" />
|
||||
<glyph unicode="" horiz-adv-x="1792" />
|
||||
<glyph unicode="" horiz-adv-x="1792" />
|
||||
</font>
|
||||
</defs></svg>
|
After Width: | Height: | Size: 197 KiB |
BIN
sense/lib/font-awesome/fonts/fontawesome-webfont.ttf
Executable file
BIN
sense/lib/font-awesome/fonts/fontawesome-webfont.ttf
Executable file
Binary file not shown.
BIN
sense/lib/font-awesome/fonts/fontawesome-webfont.woff
Executable file
BIN
sense/lib/font-awesome/fonts/fontawesome-webfont.woff
Executable file
Binary file not shown.
2
sense/lib/jquery-1.8.3.min.js
vendored
Normal file
2
sense/lib/jquery-1.8.3.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
6
sense/lib/jqueryui/jquery-ui-1.9.2.custom.min.css
vendored
Normal file
6
sense/lib/jqueryui/jquery-ui-1.9.2.custom.min.css
vendored
Normal file
|
@ -0,0 +1,6 @@
|
|||
/*! jQuery UI - v1.9.2 - 2012-12-17
|
||||
* http://jqueryui.com
|
||||
* Includes: jquery.ui.core.css, jquery.ui.autocomplete.css, jquery.ui.menu.css
|
||||
* Copyright (c) 2012 jQuery Foundation and other contributors Licensed MIT */
|
||||
|
||||
.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{zoom:1}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:absolute;top:0;left:0;width:100%;height:100%}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}* html .ui-autocomplete{width:1px}.ui-menu{list-style:none;padding:2px;margin:0;display:block;outline:none}.ui-menu .ui-menu{margin-top:-3px;position:absolute}.ui-menu .ui-menu-item{margin:0;padding:0;zoom:1;width:100%}.ui-menu .ui-menu-divider{margin:5px -2px 5px -2px;height:0;font-size:0;line-height:0;border-width:1px 0 0 0}.ui-menu .ui-menu-item a{text-decoration:none;display:block;padding:2px .4em;line-height:1.5;zoom:1;font-weight:normal}.ui-menu .ui-menu-item a.ui-state-focus,.ui-menu .ui-menu-item a.ui-state-active{font-weight:normal;margin:-1px}.ui-menu .ui-state-disabled{font-weight:normal;margin:.4em 0 .2em;line-height:1.5}.ui-menu .ui-state-disabled a{cursor:default}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item a{position:relative;padding-left:2em}.ui-menu .ui-icon{position:absolute;top:.2em;left:.2em}.ui-menu .ui-menu-icon{position:static;float:right}
|
942
sense/lib/jqueryui/jquery-ui-1.9.2.custom.min.js
vendored
Executable file
942
sense/lib/jqueryui/jquery-ui-1.9.2.custom.min.js
vendored
Executable file
|
@ -0,0 +1,942 @@
|
|||
/*! jQuery UI - v1.9.2 - 2013-08-29
|
||||
* http://jqueryui.com
|
||||
* Includes: jquery.ui.core.js, jquery.ui.widget.js, jquery.ui.mouse.js, jquery.ui.position.js, jquery.ui.resizable.js, jquery.ui.autocomplete.js, jquery.ui.menu.js
|
||||
* Copyright 2013 jQuery Foundation and other contributors Licensed MIT */
|
||||
|
||||
(function (e, t) {
|
||||
function i(t, n) {
|
||||
var r, i, o, u = t.nodeName.toLowerCase();
|
||||
return"area" === u ? (r = t.parentNode, i = r.name, !t.href || !i || r.nodeName.toLowerCase() !== "map" ? !1 : (o = e("img[usemap=#" + i + "]")[0], !!o && s(o))) : (/input|select|textarea|button|object/.test(u) ? !t.disabled : "a" === u ? t.href || n : n) && s(t)
|
||||
}
|
||||
|
||||
function s(t) {
|
||||
return e.expr.filters.visible(t) && !e(t).parents().andSelf().filter(function () {
|
||||
return e.css(this, "visibility") === "hidden"
|
||||
}).length
|
||||
}
|
||||
|
||||
var n = 0, r = /^ui-id-\d+$/;
|
||||
e.ui = e.ui || {};
|
||||
if (e.ui.version)return;
|
||||
e.extend(e.ui, {version: "1.9.2", keyCode: {BACKSPACE: 8, COMMA: 188, DELETE: 46, DOWN: 40, END: 35, ENTER: 13, ESCAPE: 27, HOME: 36, LEFT: 37, NUMPAD_ADD: 107, NUMPAD_DECIMAL: 110, NUMPAD_DIVIDE: 111, NUMPAD_ENTER: 108, NUMPAD_MULTIPLY: 106, NUMPAD_SUBTRACT: 109, PAGE_DOWN: 34, PAGE_UP: 33, PERIOD: 190, RIGHT: 39, SPACE: 32, TAB: 9, UP: 38}}), e.fn.extend({_focus: e.fn.focus, focus: function (t, n) {
|
||||
return typeof t == "number" ? this.each(function () {
|
||||
var r = this;
|
||||
setTimeout(function () {
|
||||
e(r).focus(), n && n.call(r)
|
||||
}, t)
|
||||
}) : this._focus.apply(this, arguments)
|
||||
}, scrollParent: function () {
|
||||
var t;
|
||||
return e.ui.ie && /(static|relative)/.test(this.css("position")) || /absolute/.test(this.css("position")) ? t = this.parents().filter(function () {
|
||||
return/(relative|absolute|fixed)/.test(e.css(this, "position")) && /(auto|scroll)/.test(e.css(this, "overflow") + e.css(this, "overflow-y") + e.css(this, "overflow-x"))
|
||||
}).eq(0) : t = this.parents().filter(function () {
|
||||
return/(auto|scroll)/.test(e.css(this, "overflow") + e.css(this, "overflow-y") + e.css(this, "overflow-x"))
|
||||
}).eq(0), /fixed/.test(this.css("position")) || !t.length ? e(document) : t
|
||||
}, zIndex: function (n) {
|
||||
if (n !== t)return this.css("zIndex", n);
|
||||
if (this.length) {
|
||||
var r = e(this[0]), i, s;
|
||||
while (r.length && r[0] !== document) {
|
||||
i = r.css("position");
|
||||
if (i === "absolute" || i === "relative" || i === "fixed") {
|
||||
s = parseInt(r.css("zIndex"), 10);
|
||||
if (!isNaN(s) && s !== 0)return s
|
||||
}
|
||||
r = r.parent()
|
||||
}
|
||||
}
|
||||
return 0
|
||||
}, uniqueId: function () {
|
||||
return this.each(function () {
|
||||
this.id || (this.id = "ui-id-" + ++n)
|
||||
})
|
||||
}, removeUniqueId: function () {
|
||||
return this.each(function () {
|
||||
r.test(this.id) && e(this).removeAttr("id")
|
||||
})
|
||||
}}), e.extend(e.expr[":"], {data: e.expr.createPseudo ? e.expr.createPseudo(function (t) {
|
||||
return function (n) {
|
||||
return!!e.data(n, t)
|
||||
}
|
||||
}) : function (t, n, r) {
|
||||
return!!e.data(t, r[3])
|
||||
}, focusable: function (t) {
|
||||
return i(t, !isNaN(e.attr(t, "tabindex")))
|
||||
}, tabbable: function (t) {
|
||||
var n = e.attr(t, "tabindex"), r = isNaN(n);
|
||||
return(r || n >= 0) && i(t, !r)
|
||||
}}), e(function () {
|
||||
var t = document.body, n = t.appendChild(n = document.createElement("div"));
|
||||
n.offsetHeight, e.extend(n.style, {minHeight: "100px", height: "auto", padding: 0, borderWidth: 0}), e.support.minHeight = n.offsetHeight === 100, e.support.selectstart = "onselectstart"in n, t.removeChild(n).style.display = "none"
|
||||
}), e("<a>").outerWidth(1).jquery || e.each(["Width", "Height"], function (n, r) {
|
||||
function u(t, n, r, s) {
|
||||
return e.each(i, function () {
|
||||
n -= parseFloat(e.css(t, "padding" + this)) || 0, r && (n -= parseFloat(e.css(t, "border" + this + "Width")) || 0), s && (n -= parseFloat(e.css(t, "margin" + this)) || 0)
|
||||
}), n
|
||||
}
|
||||
|
||||
var i = r === "Width" ? ["Left", "Right"] : ["Top", "Bottom"], s = r.toLowerCase(), o = {innerWidth: e.fn.innerWidth, innerHeight: e.fn.innerHeight, outerWidth: e.fn.outerWidth, outerHeight: e.fn.outerHeight};
|
||||
e.fn["inner" + r] = function (n) {
|
||||
return n === t ? o["inner" + r].call(this) : this.each(function () {
|
||||
e(this).css(s, u(this, n) + "px")
|
||||
})
|
||||
}, e.fn["outer" + r] = function (t, n) {
|
||||
return typeof t != "number" ? o["outer" + r].call(this, t) : this.each(function () {
|
||||
e(this).css(s, u(this, t, !0, n) + "px")
|
||||
})
|
||||
}
|
||||
}), e("<a>").data("a-b", "a").removeData("a-b").data("a-b") && (e.fn.removeData = function (t) {
|
||||
return function (n) {
|
||||
return arguments.length ? t.call(this, e.camelCase(n)) : t.call(this)
|
||||
}
|
||||
}(e.fn.removeData)), function () {
|
||||
var t = /msie ([\w.]+)/.exec(navigator.userAgent.toLowerCase()) || [];
|
||||
e.ui.ie = t.length ? !0 : !1, e.ui.ie6 = parseFloat(t[1], 10) === 6
|
||||
}(), e.fn.extend({disableSelection: function () {
|
||||
return this.bind((e.support.selectstart ? "selectstart" : "mousedown") + ".ui-disableSelection", function (e) {
|
||||
e.preventDefault()
|
||||
})
|
||||
}, enableSelection: function () {
|
||||
return this.unbind(".ui-disableSelection")
|
||||
}}), e.extend(e.ui, {plugin: {add: function (t, n, r) {
|
||||
var i, s = e.ui[t].prototype;
|
||||
for (i in r)s.plugins[i] = s.plugins[i] || [], s.plugins[i].push([n, r[i]])
|
||||
}, call: function (e, t, n) {
|
||||
var r, i = e.plugins[t];
|
||||
if (!i || !e.element[0].parentNode || e.element[0].parentNode.nodeType === 11)return;
|
||||
for (r = 0; r < i.length; r++)e.options[i[r][0]] && i[r][1].apply(e.element, n)
|
||||
}}, contains: e.contains, hasScroll: function (t, n) {
|
||||
if (e(t).css("overflow") === "hidden")return!1;
|
||||
var r = n && n === "left" ? "scrollLeft" : "scrollTop", i = !1;
|
||||
return t[r] > 0 ? !0 : (t[r] = 1, i = t[r] > 0, t[r] = 0, i)
|
||||
}, isOverAxis: function (e, t, n) {
|
||||
return e > t && e < t + n
|
||||
}, isOver: function (t, n, r, i, s, o) {
|
||||
return e.ui.isOverAxis(t, r, s) && e.ui.isOverAxis(n, i, o)
|
||||
}})
|
||||
})(jQuery);
|
||||
(function (e, t) {
|
||||
var n = 0, r = Array.prototype.slice, i = e.cleanData;
|
||||
e.cleanData = function (t) {
|
||||
for (var n = 0, r; (r = t[n]) != null; n++)try {
|
||||
e(r).triggerHandler("remove")
|
||||
} catch (s) {
|
||||
}
|
||||
i(t)
|
||||
}, e.widget = function (t, n, r) {
|
||||
var i, s, o, u, a = t.split(".")[0];
|
||||
t = t.split(".")[1], i = a + "-" + t, r || (r = n, n = e.Widget), e.expr[":"][i.toLowerCase()] = function (t) {
|
||||
return!!e.data(t, i)
|
||||
}, e[a] = e[a] || {}, s = e[a][t], o = e[a][t] = function (e, t) {
|
||||
if (!this._createWidget)return new o(e, t);
|
||||
arguments.length && this._createWidget(e, t)
|
||||
}, e.extend(o, s, {version: r.version, _proto: e.extend({}, r), _childConstructors: []}), u = new n, u.options = e.widget.extend({}, u.options), e.each(r, function (t, i) {
|
||||
e.isFunction(i) && (r[t] = function () {
|
||||
var e = function () {
|
||||
return n.prototype[t].apply(this, arguments)
|
||||
}, r = function (e) {
|
||||
return n.prototype[t].apply(this, e)
|
||||
};
|
||||
return function () {
|
||||
var t = this._super, n = this._superApply, s;
|
||||
return this._super = e, this._superApply = r, s = i.apply(this, arguments), this._super = t, this._superApply = n, s
|
||||
}
|
||||
}())
|
||||
}), o.prototype = e.widget.extend(u, {widgetEventPrefix: s ? u.widgetEventPrefix : t}, r, {constructor: o, namespace: a, widgetName: t, widgetBaseClass: i, widgetFullName: i}), s ? (e.each(s._childConstructors, function (t, n) {
|
||||
var r = n.prototype;
|
||||
e.widget(r.namespace + "." + r.widgetName, o, n._proto)
|
||||
}), delete s._childConstructors) : n._childConstructors.push(o), e.widget.bridge(t, o)
|
||||
}, e.widget.extend = function (n) {
|
||||
var i = r.call(arguments, 1), s = 0, o = i.length, u, a;
|
||||
for (; s < o; s++)for (u in i[s])a = i[s][u], i[s].hasOwnProperty(u) && a !== t && (e.isPlainObject(a) ? n[u] = e.isPlainObject(n[u]) ? e.widget.extend({}, n[u], a) : e.widget.extend({}, a) : n[u] = a);
|
||||
return n
|
||||
}, e.widget.bridge = function (n, i) {
|
||||
var s = i.prototype.widgetFullName || n;
|
||||
e.fn[n] = function (o) {
|
||||
var u = typeof o == "string", a = r.call(arguments, 1), f = this;
|
||||
return o = !u && a.length ? e.widget.extend.apply(null, [o].concat(a)) : o, u ? this.each(function () {
|
||||
var r, i = e.data(this, s);
|
||||
if (!i)return e.error("cannot call methods on " + n + " prior to initialization; " + "attempted to call method '" + o + "'");
|
||||
if (!e.isFunction(i[o]) || o.charAt(0) === "_")return e.error("no such method '" + o + "' for " + n + " widget instance");
|
||||
r = i[o].apply(i, a);
|
||||
if (r !== i && r !== t)return f = r && r.jquery ? f.pushStack(r.get()) : r, !1
|
||||
}) : this.each(function () {
|
||||
var t = e.data(this, s);
|
||||
t ? t.option(o || {})._init() : e.data(this, s, new i(o, this))
|
||||
}), f
|
||||
}
|
||||
}, e.Widget = function () {
|
||||
}, e.Widget._childConstructors = [], e.Widget.prototype = {widgetName: "widget", widgetEventPrefix: "", defaultElement: "<div>", options: {disabled: !1, create: null}, _createWidget: function (t, r) {
|
||||
r = e(r || this.defaultElement || this)[0], this.element = e(r), this.uuid = n++, this.eventNamespace = "." + this.widgetName + this.uuid, this.options = e.widget.extend({}, this.options, this._getCreateOptions(), t), this.bindings = e(), this.hoverable = e(), this.focusable = e(), r !== this && (e.data(r, this.widgetName, this), e.data(r, this.widgetFullName, this), this._on(!0, this.element, {remove: function (e) {
|
||||
e.target === r && this.destroy()
|
||||
}}), this.document = e(r.style ? r.ownerDocument : r.document || r), this.window = e(this.document[0].defaultView || this.document[0].parentWindow)), this._create(), this._trigger("create", null, this._getCreateEventData()), this._init()
|
||||
}, _getCreateOptions: e.noop, _getCreateEventData: e.noop, _create: e.noop, _init: e.noop, destroy: function () {
|
||||
this._destroy(), this.element.unbind(this.eventNamespace).removeData(this.widgetName).removeData(this.widgetFullName).removeData(e.camelCase(this.widgetFullName)), this.widget().unbind(this.eventNamespace).removeAttr("aria-disabled").removeClass(this.widgetFullName + "-disabled " + "ui-state-disabled"), this.bindings.unbind(this.eventNamespace), this.hoverable.removeClass("ui-state-hover"), this.focusable.removeClass("ui-state-focus")
|
||||
}, _destroy: e.noop, widget: function () {
|
||||
return this.element
|
||||
}, option: function (n, r) {
|
||||
var i = n, s, o, u;
|
||||
if (arguments.length === 0)return e.widget.extend({}, this.options);
|
||||
if (typeof n == "string") {
|
||||
i = {}, s = n.split("."), n = s.shift();
|
||||
if (s.length) {
|
||||
o = i[n] = e.widget.extend({}, this.options[n]);
|
||||
for (u = 0; u < s.length - 1; u++)o[s[u]] = o[s[u]] || {}, o = o[s[u]];
|
||||
n = s.pop();
|
||||
if (r === t)return o[n] === t ? null : o[n];
|
||||
o[n] = r
|
||||
} else {
|
||||
if (r === t)return this.options[n] === t ? null : this.options[n];
|
||||
i[n] = r
|
||||
}
|
||||
}
|
||||
return this._setOptions(i), this
|
||||
}, _setOptions: function (e) {
|
||||
var t;
|
||||
for (t in e)this._setOption(t, e[t]);
|
||||
return this
|
||||
}, _setOption: function (e, t) {
|
||||
return this.options[e] = t, e === "disabled" && (this.widget().toggleClass(this.widgetFullName + "-disabled ui-state-disabled", !!t).attr("aria-disabled", t), this.hoverable.removeClass("ui-state-hover"), this.focusable.removeClass("ui-state-focus")), this
|
||||
}, enable: function () {
|
||||
return this._setOption("disabled", !1)
|
||||
}, disable: function () {
|
||||
return this._setOption("disabled", !0)
|
||||
}, _on: function (t, n, r) {
|
||||
var i, s = this;
|
||||
typeof t != "boolean" && (r = n, n = t, t = !1), r ? (n = i = e(n), this.bindings = this.bindings.add(n)) : (r = n, n = this.element, i = this.widget()), e.each(r, function (r, o) {
|
||||
function u() {
|
||||
if (!t && (s.options.disabled === !0 || e(this).hasClass("ui-state-disabled")))return;
|
||||
return(typeof o == "string" ? s[o] : o).apply(s, arguments)
|
||||
}
|
||||
|
||||
typeof o != "string" && (u.guid = o.guid = o.guid || u.guid || e.guid++);
|
||||
var a = r.match(/^(\w+)\s*(.*)$/), f = a[1] + s.eventNamespace, l = a[2];
|
||||
l ? i.delegate(l, f, u) : n.bind(f, u)
|
||||
})
|
||||
}, _off: function (e, t) {
|
||||
t = (t || "").split(" ").join(this.eventNamespace + " ") + this.eventNamespace, e.unbind(t).undelegate(t)
|
||||
}, _delay: function (e, t) {
|
||||
function n() {
|
||||
return(typeof e == "string" ? r[e] : e).apply(r, arguments)
|
||||
}
|
||||
|
||||
var r = this;
|
||||
return setTimeout(n, t || 0)
|
||||
}, _hoverable: function (t) {
|
||||
this.hoverable = this.hoverable.add(t), this._on(t, {mouseenter: function (t) {
|
||||
e(t.currentTarget).addClass("ui-state-hover")
|
||||
}, mouseleave: function (t) {
|
||||
e(t.currentTarget).removeClass("ui-state-hover")
|
||||
}})
|
||||
}, _focusable: function (t) {
|
||||
this.focusable = this.focusable.add(t), this._on(t, {focusin: function (t) {
|
||||
e(t.currentTarget).addClass("ui-state-focus")
|
||||
}, focusout: function (t) {
|
||||
e(t.currentTarget).removeClass("ui-state-focus")
|
||||
}})
|
||||
}, _trigger: function (t, n, r) {
|
||||
var i, s, o = this.options[t];
|
||||
r = r || {}, n = e.Event(n), n.type = (t === this.widgetEventPrefix ? t : this.widgetEventPrefix + t).toLowerCase(), n.target = this.element[0], s = n.originalEvent;
|
||||
if (s)for (i in s)i in n || (n[i] = s[i]);
|
||||
return this.element.trigger(n, r), !(e.isFunction(o) && o.apply(this.element[0], [n].concat(r)) === !1 || n.isDefaultPrevented())
|
||||
}}, e.each({show: "fadeIn", hide: "fadeOut"}, function (t, n) {
|
||||
e.Widget.prototype["_" + t] = function (r, i, s) {
|
||||
typeof i == "string" && (i = {effect: i});
|
||||
var o, u = i ? i === !0 || typeof i == "number" ? n : i.effect || n : t;
|
||||
i = i || {}, typeof i == "number" && (i = {duration: i}), o = !e.isEmptyObject(i), i.complete = s, i.delay && r.delay(i.delay), o && e.effects && (e.effects.effect[u] || e.uiBackCompat !== !1 && e.effects[u]) ? r[t](i) : u !== t && r[u] ? r[u](i.duration, i.easing, s) : r.queue(function (n) {
|
||||
e(this)[t](), s && s.call(r[0]), n()
|
||||
})
|
||||
}
|
||||
}), e.uiBackCompat !== !1 && (e.Widget.prototype._getCreateOptions = function () {
|
||||
return e.metadata && e.metadata.get(this.element[0])[this.widgetName]
|
||||
})
|
||||
})(jQuery);
|
||||
(function (e, t) {
|
||||
var n = !1;
|
||||
e(document).mouseup(function (e) {
|
||||
n = !1
|
||||
}), e.widget("ui.mouse", {version: "1.9.2", options: {cancel: "input,textarea,button,select,option", distance: 1, delay: 0}, _mouseInit: function () {
|
||||
var t = this;
|
||||
this.element.bind("mousedown." + this.widgetName,function (e) {
|
||||
return t._mouseDown(e)
|
||||
}).bind("click." + this.widgetName, function (n) {
|
||||
if (!0 === e.data(n.target, t.widgetName + ".preventClickEvent"))return e.removeData(n.target, t.widgetName + ".preventClickEvent"), n.stopImmediatePropagation(), !1
|
||||
}), this.started = !1
|
||||
}, _mouseDestroy: function () {
|
||||
this.element.unbind("." + this.widgetName), this._mouseMoveDelegate && e(document).unbind("mousemove." + this.widgetName, this._mouseMoveDelegate).unbind("mouseup." + this.widgetName, this._mouseUpDelegate)
|
||||
}, _mouseDown: function (t) {
|
||||
if (n)return;
|
||||
this._mouseStarted && this._mouseUp(t), this._mouseDownEvent = t;
|
||||
var r = this, i = t.which === 1, s = typeof this.options.cancel == "string" && t.target.nodeName ? e(t.target).closest(this.options.cancel).length : !1;
|
||||
if (!i || s || !this._mouseCapture(t))return!0;
|
||||
this.mouseDelayMet = !this.options.delay, this.mouseDelayMet || (this._mouseDelayTimer = setTimeout(function () {
|
||||
r.mouseDelayMet = !0
|
||||
}, this.options.delay));
|
||||
if (this._mouseDistanceMet(t) && this._mouseDelayMet(t)) {
|
||||
this._mouseStarted = this._mouseStart(t) !== !1;
|
||||
if (!this._mouseStarted)return t.preventDefault(), !0
|
||||
}
|
||||
return!0 === e.data(t.target, this.widgetName + ".preventClickEvent") && e.removeData(t.target, this.widgetName + ".preventClickEvent"), this._mouseMoveDelegate = function (e) {
|
||||
return r._mouseMove(e)
|
||||
}, this._mouseUpDelegate = function (e) {
|
||||
return r._mouseUp(e)
|
||||
}, e(document).bind("mousemove." + this.widgetName, this._mouseMoveDelegate).bind("mouseup." + this.widgetName, this._mouseUpDelegate), t.preventDefault(), n = !0, !0
|
||||
}, _mouseMove: function (t) {
|
||||
return!e.ui.ie || document.documentMode >= 9 || !!t.button ? this._mouseStarted ? (this._mouseDrag(t), t.preventDefault()) : (this._mouseDistanceMet(t) && this._mouseDelayMet(t) && (this._mouseStarted = this._mouseStart(this._mouseDownEvent, t) !== !1, this._mouseStarted ? this._mouseDrag(t) : this._mouseUp(t)), !this._mouseStarted) : this._mouseUp(t)
|
||||
}, _mouseUp: function (t) {
|
||||
return e(document).unbind("mousemove." + this.widgetName, this._mouseMoveDelegate).unbind("mouseup." + this.widgetName, this._mouseUpDelegate), this._mouseStarted && (this._mouseStarted = !1, t.target === this._mouseDownEvent.target && e.data(t.target, this.widgetName + ".preventClickEvent", !0), this._mouseStop(t)), !1
|
||||
}, _mouseDistanceMet: function (e) {
|
||||
return Math.max(Math.abs(this._mouseDownEvent.pageX - e.pageX), Math.abs(this._mouseDownEvent.pageY - e.pageY)) >= this.options.distance
|
||||
}, _mouseDelayMet: function (e) {
|
||||
return this.mouseDelayMet
|
||||
}, _mouseStart: function (e) {
|
||||
}, _mouseDrag: function (e) {
|
||||
}, _mouseStop: function (e) {
|
||||
}, _mouseCapture: function (e) {
|
||||
return!0
|
||||
}})
|
||||
})(jQuery);
|
||||
(function (e, t) {
|
||||
function h(e, t, n) {
|
||||
return[parseInt(e[0], 10) * (l.test(e[0]) ? t / 100 : 1), parseInt(e[1], 10) * (l.test(e[1]) ? n / 100 : 1)]
|
||||
}
|
||||
|
||||
function p(t, n) {
|
||||
return parseInt(e.css(t, n), 10) || 0
|
||||
}
|
||||
|
||||
e.ui = e.ui || {};
|
||||
var n, r = Math.max, i = Math.abs, s = Math.round, o = /left|center|right/, u = /top|center|bottom/, a = /[\+\-]\d+%?/, f = /^\w+/, l = /%$/, c = e.fn.position;
|
||||
e.position = {scrollbarWidth: function () {
|
||||
if (n !== t)return n;
|
||||
var r, i, s = e("<div style='display:block;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>"), o = s.children()[0];
|
||||
return e("body").append(s), r = o.offsetWidth, s.css("overflow", "scroll"), i = o.offsetWidth, r === i && (i = s[0].clientWidth), s.remove(), n = r - i
|
||||
}, getScrollInfo: function (t) {
|
||||
var n = t.isWindow ? "" : t.element.css("overflow-x"), r = t.isWindow ? "" : t.element.css("overflow-y"), i = n === "scroll" || n === "auto" && t.width < t.element[0].scrollWidth, s = r === "scroll" || r === "auto" && t.height < t.element[0].scrollHeight;
|
||||
return{width: i ? e.position.scrollbarWidth() : 0, height: s ? e.position.scrollbarWidth() : 0}
|
||||
}, getWithinInfo: function (t) {
|
||||
var n = e(t || window), r = e.isWindow(n[0]);
|
||||
return{element: n, isWindow: r, offset: n.offset() || {left: 0, top: 0}, scrollLeft: n.scrollLeft(), scrollTop: n.scrollTop(), width: r ? n.width() : n.outerWidth(), height: r ? n.height() : n.outerHeight()}
|
||||
}}, e.fn.position = function (t) {
|
||||
if (!t || !t.of)return c.apply(this, arguments);
|
||||
t = e.extend({}, t);
|
||||
var n, l, d, v, m, g = e(t.of), y = e.position.getWithinInfo(t.within), b = e.position.getScrollInfo(y), w = g[0], E = (t.collision || "flip").split(" "), S = {};
|
||||
return w.nodeType === 9 ? (l = g.width(), d = g.height(), v = {top: 0, left: 0}) : e.isWindow(w) ? (l = g.width(), d = g.height(), v = {top: g.scrollTop(), left: g.scrollLeft()}) : w.preventDefault ? (t.at = "left top", l = d = 0, v = {top: w.pageY, left: w.pageX}) : (l = g.outerWidth(), d = g.outerHeight(), v = g.offset()), m = e.extend({}, v), e.each(["my", "at"], function () {
|
||||
var e = (t[this] || "").split(" "), n, r;
|
||||
e.length === 1 && (e = o.test(e[0]) ? e.concat(["center"]) : u.test(e[0]) ? ["center"].concat(e) : ["center", "center"]), e[0] = o.test(e[0]) ? e[0] : "center", e[1] = u.test(e[1]) ? e[1] : "center", n = a.exec(e[0]), r = a.exec(e[1]), S[this] = [n ? n[0] : 0, r ? r[0] : 0], t[this] = [f.exec(e[0])[0], f.exec(e[1])[0]]
|
||||
}), E.length === 1 && (E[1] = E[0]), t.at[0] === "right" ? m.left += l : t.at[0] === "center" && (m.left += l / 2), t.at[1] === "bottom" ? m.top += d : t.at[1] === "center" && (m.top += d / 2), n = h(S.at, l, d), m.left += n[0], m.top += n[1], this.each(function () {
|
||||
var o, u, a = e(this), f = a.outerWidth(), c = a.outerHeight(), w = p(this, "marginLeft"), x = p(this, "marginTop"), T = f + w + p(this, "marginRight") + b.width, N = c + x + p(this, "marginBottom") + b.height, C = e.extend({}, m), k = h(S.my, a.outerWidth(), a.outerHeight());
|
||||
t.my[0] === "right" ? C.left -= f : t.my[0] === "center" && (C.left -= f / 2), t.my[1] === "bottom" ? C.top -= c : t.my[1] === "center" && (C.top -= c / 2), C.left += k[0], C.top += k[1], e.support.offsetFractions || (C.left = s(C.left), C.top = s(C.top)), o = {marginLeft: w, marginTop: x}, e.each(["left", "top"], function (r, i) {
|
||||
e.ui.position[E[r]] && e.ui.position[E[r]][i](C, {targetWidth: l, targetHeight: d, elemWidth: f, elemHeight: c, collisionPosition: o, collisionWidth: T, collisionHeight: N, offset: [n[0] + k[0], n[1] + k[1]], my: t.my, at: t.at, within: y, elem: a})
|
||||
}), e.fn.bgiframe && a.bgiframe(), t.using && (u = function (e) {
|
||||
var n = v.left - C.left, s = n + l - f, o = v.top - C.top, u = o + d - c, h = {target: {element: g, left: v.left, top: v.top, width: l, height: d}, element: {element: a, left: C.left, top: C.top, width: f, height: c}, horizontal: s < 0 ? "left" : n > 0 ? "right" : "center", vertical: u < 0 ? "top" : o > 0 ? "bottom" : "middle"};
|
||||
l < f && i(n + s) < l && (h.horizontal = "center"), d < c && i(o + u) < d && (h.vertical = "middle"), r(i(n), i(s)) > r(i(o), i(u)) ? h.important = "horizontal" : h.important = "vertical", t.using.call(this, e, h)
|
||||
}), a.offset(e.extend(C, {using: u}))
|
||||
})
|
||||
}, e.ui.position = {fit: {left: function (e, t) {
|
||||
var n = t.within, i = n.isWindow ? n.scrollLeft : n.offset.left, s = n.width, o = e.left - t.collisionPosition.marginLeft, u = i - o, a = o + t.collisionWidth - s - i, f;
|
||||
t.collisionWidth > s ? u > 0 && a <= 0 ? (f = e.left + u + t.collisionWidth - s - i, e.left += u - f) : a > 0 && u <= 0 ? e.left = i : u > a ? e.left = i + s - t.collisionWidth : e.left = i : u > 0 ? e.left += u : a > 0 ? e.left -= a : e.left = r(e.left - o, e.left)
|
||||
}, top: function (e, t) {
|
||||
var n = t.within, i = n.isWindow ? n.scrollTop : n.offset.top, s = t.within.height, o = e.top - t.collisionPosition.marginTop, u = i - o, a = o + t.collisionHeight - s - i, f;
|
||||
t.collisionHeight > s ? u > 0 && a <= 0 ? (f = e.top + u + t.collisionHeight - s - i, e.top += u - f) : a > 0 && u <= 0 ? e.top = i : u > a ? e.top = i + s - t.collisionHeight : e.top = i : u > 0 ? e.top += u : a > 0 ? e.top -= a : e.top = r(e.top - o, e.top)
|
||||
}}, flip: {left: function (e, t) {
|
||||
var n = t.within, r = n.offset.left + n.scrollLeft, s = n.width, o = n.isWindow ? n.scrollLeft : n.offset.left, u = e.left - t.collisionPosition.marginLeft, a = u - o, f = u + t.collisionWidth - s - o, l = t.my[0] === "left" ? -t.elemWidth : t.my[0] === "right" ? t.elemWidth : 0, c = t.at[0] === "left" ? t.targetWidth : t.at[0] === "right" ? -t.targetWidth : 0, h = -2 * t.offset[0], p, d;
|
||||
if (a < 0) {
|
||||
p = e.left + l + c + h + t.collisionWidth - s - r;
|
||||
if (p < 0 || p < i(a))e.left += l + c + h
|
||||
} else if (f > 0) {
|
||||
d = e.left - t.collisionPosition.marginLeft + l + c + h - o;
|
||||
if (d > 0 || i(d) < f)e.left += l + c + h
|
||||
}
|
||||
}, top: function (e, t) {
|
||||
var n = t.within, r = n.offset.top + n.scrollTop, s = n.height, o = n.isWindow ? n.scrollTop : n.offset.top, u = e.top - t.collisionPosition.marginTop, a = u - o, f = u + t.collisionHeight - s - o, l = t.my[1] === "top", c = l ? -t.elemHeight : t.my[1] === "bottom" ? t.elemHeight : 0, h = t.at[1] === "top" ? t.targetHeight : t.at[1] === "bottom" ? -t.targetHeight : 0, p = -2 * t.offset[1], d, v;
|
||||
a < 0 ? (v = e.top + c + h + p + t.collisionHeight - s - r, e.top + c + h + p > a && (v < 0 || v < i(a)) && (e.top += c + h + p)) : f > 0 && (d = e.top - t.collisionPosition.marginTop + c + h + p - o, e.top + c + h + p > f && (d > 0 || i(d) < f) && (e.top += c + h + p))
|
||||
}}, flipfit: {left: function () {
|
||||
e.ui.position.flip.left.apply(this, arguments), e.ui.position.fit.left.apply(this, arguments)
|
||||
}, top: function () {
|
||||
e.ui.position.flip.top.apply(this, arguments), e.ui.position.fit.top.apply(this, arguments)
|
||||
}}}, function () {
|
||||
var t, n, r, i, s, o = document.getElementsByTagName("body")[0], u = document.createElement("div");
|
||||
t = document.createElement(o ? "div" : "body"), r = {visibility: "hidden", width: 0, height: 0, border: 0, margin: 0, background: "none"}, o && e.extend(r, {position: "absolute", left: "-1000px", top: "-1000px"});
|
||||
for (s in r)t.style[s] = r[s];
|
||||
t.appendChild(u), n = o || document.documentElement, n.insertBefore(t, n.firstChild), u.style.cssText = "position: absolute; left: 10.7432222px;", i = e(u).offset().left, e.support.offsetFractions = i > 10 && i < 11, t.innerHTML = "", n.removeChild(t)
|
||||
}(), e.uiBackCompat !== !1 && function (e) {
|
||||
var n = e.fn.position;
|
||||
e.fn.position = function (r) {
|
||||
if (!r || !r.offset)return n.call(this, r);
|
||||
var i = r.offset.split(" "), s = r.at.split(" ");
|
||||
return i.length === 1 && (i[1] = i[0]), /^\d/.test(i[0]) && (i[0] = "+" + i[0]), /^\d/.test(i[1]) && (i[1] = "+" + i[1]), s.length === 1 && (/left|center|right/.test(s[0]) ? s[1] = "center" : (s[1] = s[0], s[0] = "center")), n.call(this, e.extend(r, {at: s[0] + i[0] + " " + s[1] + i[1], offset: t}))
|
||||
}
|
||||
}(jQuery)
|
||||
})(jQuery);
|
||||
(function (e, t) {
|
||||
e.widget("ui.resizable", e.ui.mouse, {version: "1.9.2", widgetEventPrefix: "resize", options: {alsoResize: !1, animate: !1, animateDuration: "slow", animateEasing: "swing", aspectRatio: !1, autoHide: !1, containment: !1, ghost: !1, grid: !1, handles: "e,s,se", helper: !1, maxHeight: null, maxWidth: null, minHeight: 10, minWidth: 10, zIndex: 1e3}, _create: function () {
|
||||
var t = this, n = this.options;
|
||||
this.element.addClass("ui-resizable"), e.extend(this, {_aspectRatio: !!n.aspectRatio, aspectRatio: n.aspectRatio, originalElement: this.element, _proportionallyResizeElements: [], _helper: n.helper || n.ghost || n.animate ? n.helper || "ui-resizable-helper" : null}), this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i) && (this.element.wrap(e('<div class="ui-wrapper" style="overflow: hidden;"></div>').css({position: this.element.css("position"), width: this.element.outerWidth(), height: this.element.outerHeight(), top: this.element.css("top"), left: this.element.css("left")})), this.element = this.element.parent().data("resizable", this.element.data("resizable")), this.elementIsWrapper = !0, this.element.css({marginLeft: this.originalElement.css("marginLeft"), marginTop: this.originalElement.css("marginTop"), marginRight: this.originalElement.css("marginRight"), marginBottom: this.originalElement.css("marginBottom")}), this.originalElement.css({marginLeft: 0, marginTop: 0, marginRight: 0, marginBottom: 0}), this.originalResizeStyle = this.originalElement.css("resize"), this.originalElement.css("resize", "none"), this._proportionallyResizeElements.push(this.originalElement.css({position: "static", zoom: 1, display: "block"})), this.originalElement.css({margin: this.originalElement.css("margin")}), this._proportionallyResize()), this.handles = n.handles || (e(".ui-resizable-handle", this.element).length ? {n: ".ui-resizable-n", e: ".ui-resizable-e", s: ".ui-resizable-s", w: ".ui-resizable-w", se: ".ui-resizable-se", sw: ".ui-resizable-sw", ne: ".ui-resizable-ne", nw: ".ui-resizable-nw"} : "e,s,se");
|
||||
if (this.handles.constructor == String) {
|
||||
this.handles == "all" && (this.handles = "n,e,s,w,se,sw,ne,nw");
|
||||
var r = this.handles.split(",");
|
||||
this.handles = {};
|
||||
for (var i = 0; i < r.length; i++) {
|
||||
var s = e.trim(r[i]), o = "ui-resizable-" + s, u = e('<div class="ui-resizable-handle ' + o + '"></div>');
|
||||
u.css({zIndex: n.zIndex}), "se" == s && u.addClass("ui-icon ui-icon-gripsmall-diagonal-se"), this.handles[s] = ".ui-resizable-" + s, this.element.append(u)
|
||||
}
|
||||
}
|
||||
this._renderAxis = function (t) {
|
||||
t = t || this.element;
|
||||
for (var n in this.handles) {
|
||||
this.handles[n].constructor == String && (this.handles[n] = e(this.handles[n], this.element).show());
|
||||
if (this.elementIsWrapper && this.originalElement[0].nodeName.match(/textarea|input|select|button/i)) {
|
||||
var r = e(this.handles[n], this.element), i = 0;
|
||||
i = /sw|ne|nw|se|n|s/.test(n) ? r.outerHeight() : r.outerWidth();
|
||||
var s = ["padding", /ne|nw|n/.test(n) ? "Top" : /se|sw|s/.test(n) ? "Bottom" : /^e$/.test(n) ? "Right" : "Left"].join("");
|
||||
t.css(s, i), this._proportionallyResize()
|
||||
}
|
||||
if (!e(this.handles[n]).length)continue
|
||||
}
|
||||
}, this._renderAxis(this.element), this._handles = e(".ui-resizable-handle", this.element).disableSelection(), this._handles.mouseover(function () {
|
||||
if (!t.resizing) {
|
||||
if (this.className)var e = this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);
|
||||
t.axis = e && e[1] ? e[1] : "se"
|
||||
}
|
||||
}), n.autoHide && (this._handles.hide(), e(this.element).addClass("ui-resizable-autohide").mouseenter(function () {
|
||||
if (n.disabled)return;
|
||||
e(this).removeClass("ui-resizable-autohide"), t._handles.show()
|
||||
}).mouseleave(function () {
|
||||
if (n.disabled)return;
|
||||
t.resizing || (e(this).addClass("ui-resizable-autohide"), t._handles.hide())
|
||||
})), this._mouseInit()
|
||||
}, _destroy: function () {
|
||||
this._mouseDestroy();
|
||||
var t = function (t) {
|
||||
e(t).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").removeData("ui-resizable").unbind(".resizable").find(".ui-resizable-handle").remove()
|
||||
};
|
||||
if (this.elementIsWrapper) {
|
||||
t(this.element);
|
||||
var n = this.element;
|
||||
this.originalElement.css({position: n.css("position"), width: n.outerWidth(), height: n.outerHeight(), top: n.css("top"), left: n.css("left")}).insertAfter(n), n.remove()
|
||||
}
|
||||
return this.originalElement.css("resize", this.originalResizeStyle), t(this.originalElement), this
|
||||
}, _mouseCapture: function (t) {
|
||||
var n = !1;
|
||||
for (var r in this.handles)e(this.handles[r])[0] == t.target && (n = !0);
|
||||
return!this.options.disabled && n
|
||||
}, _mouseStart: function (t) {
|
||||
var r = this.options, i = this.element.position(), s = this.element;
|
||||
this.resizing = !0, this.documentScroll = {top: e(document).scrollTop(), left: e(document).scrollLeft()}, (s.is(".ui-draggable") || /absolute/.test(s.css("position"))) && s.css({position: "absolute", top: i.top, left: i.left}), this._renderProxy();
|
||||
var o = n(this.helper.css("left")), u = n(this.helper.css("top"));
|
||||
r.containment && (o += e(r.containment).scrollLeft() || 0, u += e(r.containment).scrollTop() || 0), this.offset = this.helper.offset(), this.position = {left: o, top: u}, this.size = this._helper ? {width: s.outerWidth(), height: s.outerHeight()} : {width: s.width(), height: s.height()}, this.originalSize = this._helper ? {width: s.outerWidth(), height: s.outerHeight()} : {width: s.width(), height: s.height()}, this.originalPosition = {left: o, top: u}, this.sizeDiff = {width: s.outerWidth() - s.width(), height: s.outerHeight() - s.height()}, this.originalMousePosition = {left: t.pageX, top: t.pageY}, this.aspectRatio = typeof r.aspectRatio == "number" ? r.aspectRatio : this.originalSize.width / this.originalSize.height || 1;
|
||||
var a = e(".ui-resizable-" + this.axis).css("cursor");
|
||||
return e("body").css("cursor", a == "auto" ? this.axis + "-resize" : a), s.addClass("ui-resizable-resizing"), this._propagate("start", t), !0
|
||||
}, _mouseDrag: function (e) {
|
||||
var t = this.helper, n = this.options, r = {}, i = this, s = this.originalMousePosition, o = this.axis, u = e.pageX - s.left || 0, a = e.pageY - s.top || 0, f = this._change[o];
|
||||
if (!f)return!1;
|
||||
var l = f.apply(this, [e, u, a]);
|
||||
this._updateVirtualBoundaries(e.shiftKey);
|
||||
if (this._aspectRatio || e.shiftKey)l = this._updateRatio(l, e);
|
||||
return l = this._respectSize(l, e), this._propagate("resize", e), t.css({top: this.position.top + "px", left: this.position.left + "px", width: this.size.width + "px", height: this.size.height + "px"}), !this._helper && this._proportionallyResizeElements.length && this._proportionallyResize(), this._updateCache(l), this._trigger("resize", e, this.ui()), !1
|
||||
}, _mouseStop: function (t) {
|
||||
this.resizing = !1;
|
||||
var n = this.options, r = this;
|
||||
if (this._helper) {
|
||||
var i = this._proportionallyResizeElements, s = i.length && /textarea/i.test(i[0].nodeName), o = s && e.ui.hasScroll(i[0], "left") ? 0 : r.sizeDiff.height, u = s ? 0 : r.sizeDiff.width, a = {width: r.helper.width() - u, height: r.helper.height() - o}, f = parseInt(r.element.css("left"), 10) + (r.position.left - r.originalPosition.left) || null, l = parseInt(r.element.css("top"), 10) + (r.position.top - r.originalPosition.top) || null;
|
||||
n.animate || this.element.css(e.extend(a, {top: l, left: f})), r.helper.height(r.size.height), r.helper.width(r.size.width), this._helper && !n.animate && this._proportionallyResize()
|
||||
}
|
||||
return e("body").css("cursor", "auto"), this.element.removeClass("ui-resizable-resizing"), this._propagate("stop", t), this._helper && this.helper.remove(), !1
|
||||
}, _updateVirtualBoundaries: function (e) {
|
||||
var t = this.options, n, i, s, o, u;
|
||||
u = {minWidth: r(t.minWidth) ? t.minWidth : 0, maxWidth: r(t.maxWidth) ? t.maxWidth : Infinity, minHeight: r(t.minHeight) ? t.minHeight : 0, maxHeight: r(t.maxHeight) ? t.maxHeight : Infinity};
|
||||
if (this._aspectRatio || e)n = u.minHeight * this.aspectRatio, s = u.minWidth / this.aspectRatio, i = u.maxHeight * this.aspectRatio, o = u.maxWidth / this.aspectRatio, n > u.minWidth && (u.minWidth = n), s > u.minHeight && (u.minHeight = s), i < u.maxWidth && (u.maxWidth = i), o < u.maxHeight && (u.maxHeight = o);
|
||||
this._vBoundaries = u
|
||||
}, _updateCache: function (e) {
|
||||
var t = this.options;
|
||||
this.offset = this.helper.offset(), r(e.left) && (this.position.left = e.left), r(e.top) && (this.position.top = e.top), r(e.height) && (this.size.height = e.height), r(e.width) && (this.size.width = e.width)
|
||||
}, _updateRatio: function (e, t) {
|
||||
var n = this.options, i = this.position, s = this.size, o = this.axis;
|
||||
return r(e.height) ? e.width = e.height * this.aspectRatio : r(e.width) && (e.height = e.width / this.aspectRatio), o == "sw" && (e.left = i.left + (s.width - e.width), e.top = null), o == "nw" && (e.top = i.top + (s.height - e.height), e.left = i.left + (s.width - e.width)), e
|
||||
}, _respectSize: function (e, t) {
|
||||
var n = this.helper, i = this._vBoundaries, s = this._aspectRatio || t.shiftKey, o = this.axis, u = r(e.width) && i.maxWidth && i.maxWidth < e.width, a = r(e.height) && i.maxHeight && i.maxHeight < e.height, f = r(e.width) && i.minWidth && i.minWidth > e.width, l = r(e.height) && i.minHeight && i.minHeight > e.height;
|
||||
f && (e.width = i.minWidth), l && (e.height = i.minHeight), u && (e.width = i.maxWidth), a && (e.height = i.maxHeight);
|
||||
var c = this.originalPosition.left + this.originalSize.width, h = this.position.top + this.size.height, p = /sw|nw|w/.test(o), d = /nw|ne|n/.test(o);
|
||||
f && p && (e.left = c - i.minWidth), u && p && (e.left = c - i.maxWidth), l && d && (e.top = h - i.minHeight), a && d && (e.top = h - i.maxHeight);
|
||||
var v = !e.width && !e.height;
|
||||
return v && !e.left && e.top ? e.top = null : v && !e.top && e.left && (e.left = null), e
|
||||
}, _proportionallyResize: function () {
|
||||
var t = this.options;
|
||||
if (!this._proportionallyResizeElements.length)return;
|
||||
var n = this.helper || this.element;
|
||||
for (var r = 0; r < this._proportionallyResizeElements.length; r++) {
|
||||
var i = this._proportionallyResizeElements[r];
|
||||
if (!this.borderDif) {
|
||||
var s = [i.css("borderTopWidth"), i.css("borderRightWidth"), i.css("borderBottomWidth"), i.css("borderLeftWidth")], o = [i.css("paddingTop"), i.css("paddingRight"), i.css("paddingBottom"), i.css("paddingLeft")];
|
||||
this.borderDif = e.map(s, function (e, t) {
|
||||
var n = parseInt(e, 10) || 0, r = parseInt(o[t], 10) || 0;
|
||||
return n + r
|
||||
})
|
||||
}
|
||||
i.css({height: n.height() - this.borderDif[0] - this.borderDif[2] || 0, width: n.width() - this.borderDif[1] - this.borderDif[3] || 0})
|
||||
}
|
||||
}, _renderProxy: function () {
|
||||
var t = this.element, n = this.options;
|
||||
this.elementOffset = t.offset();
|
||||
if (this._helper) {
|
||||
this.helper = this.helper || e('<div style="overflow:hidden;"></div>');
|
||||
var r = e.ui.ie6 ? 1 : 0, i = e.ui.ie6 ? 2 : -1;
|
||||
this.helper.addClass(this._helper).css({width: this.element.outerWidth() + i, height: this.element.outerHeight() + i, position: "absolute", left: this.elementOffset.left - r + "px", top: this.elementOffset.top - r + "px", zIndex: ++n.zIndex}), this.helper.appendTo("body").disableSelection()
|
||||
} else this.helper = this.element
|
||||
}, _change: {e: function (e, t, n) {
|
||||
return{width: this.originalSize.width + t}
|
||||
}, w: function (e, t, n) {
|
||||
var r = this.options, i = this.originalSize, s = this.originalPosition;
|
||||
return{left: s.left + t, width: i.width - t}
|
||||
}, n: function (e, t, n) {
|
||||
var r = this.options, i = this.originalSize, s = this.originalPosition;
|
||||
return{top: s.top + n, height: i.height - n}
|
||||
}, s: function (e, t, n) {
|
||||
return{height: this.originalSize.height + n}
|
||||
}, se: function (t, n, r) {
|
||||
return e.extend(this._change.s.apply(this, arguments), this._change.e.apply(this, [t, n, r]))
|
||||
}, sw: function (t, n, r) {
|
||||
return e.extend(this._change.s.apply(this, arguments), this._change.w.apply(this, [t, n, r]))
|
||||
}, ne: function (t, n, r) {
|
||||
return e.extend(this._change.n.apply(this, arguments), this._change.e.apply(this, [t, n, r]))
|
||||
}, nw: function (t, n, r) {
|
||||
return e.extend(this._change.n.apply(this, arguments), this._change.w.apply(this, [t, n, r]))
|
||||
}}, _propagate: function (t, n) {
|
||||
e.ui.plugin.call(this, t, [n, this.ui()]), t != "resize" && this._trigger(t, n, this.ui())
|
||||
}, plugins: {}, ui: function () {
|
||||
return{originalElement: this.originalElement, element: this.element, helper: this.helper, position: this.position, size: this.size, originalSize: this.originalSize, originalPosition: this.originalPosition}
|
||||
}}), e.ui.plugin.add("resizable", "alsoResize", {start: function (t, n) {
|
||||
var r = e(this).data("resizable"), i = r.options, s = function (t) {
|
||||
e(t).each(function () {
|
||||
var t = e(this);
|
||||
t.data("resizable-alsoresize", {width: parseInt(t.width(), 10), height: parseInt(t.height(), 10), left: parseInt(t.css("left"), 10), top: parseInt(t.css("top"), 10)})
|
||||
})
|
||||
};
|
||||
typeof i.alsoResize == "object" && !i.alsoResize.parentNode ? i.alsoResize.length ? (i.alsoResize = i.alsoResize[0], s(i.alsoResize)) : e.each(i.alsoResize, function (e) {
|
||||
s(e)
|
||||
}) : s(i.alsoResize)
|
||||
}, resize: function (t, n) {
|
||||
var r = e(this).data("resizable"), i = r.options, s = r.originalSize, o = r.originalPosition, u = {height: r.size.height - s.height || 0, width: r.size.width - s.width || 0, top: r.position.top - o.top || 0, left: r.position.left - o.left || 0}, a = function (t, r) {
|
||||
e(t).each(function () {
|
||||
var t = e(this), i = e(this).data("resizable-alsoresize"), s = {}, o = r && r.length ? r : t.parents(n.originalElement[0]).length ? ["width", "height"] : ["width", "height", "top", "left"];
|
||||
e.each(o, function (e, t) {
|
||||
var n = (i[t] || 0) + (u[t] || 0);
|
||||
n && n >= 0 && (s[t] = n || null)
|
||||
}), t.css(s)
|
||||
})
|
||||
};
|
||||
typeof i.alsoResize == "object" && !i.alsoResize.nodeType ? e.each(i.alsoResize, function (e, t) {
|
||||
a(e, t)
|
||||
}) : a(i.alsoResize)
|
||||
}, stop: function (t, n) {
|
||||
e(this).removeData("resizable-alsoresize")
|
||||
}}), e.ui.plugin.add("resizable", "animate", {stop: function (t, n) {
|
||||
var r = e(this).data("resizable"), i = r.options, s = r._proportionallyResizeElements, o = s.length && /textarea/i.test(s[0].nodeName), u = o && e.ui.hasScroll(s[0], "left") ? 0 : r.sizeDiff.height, a = o ? 0 : r.sizeDiff.width, f = {width: r.size.width - a, height: r.size.height - u}, l = parseInt(r.element.css("left"), 10) + (r.position.left - r.originalPosition.left) || null, c = parseInt(r.element.css("top"), 10) + (r.position.top - r.originalPosition.top) || null;
|
||||
r.element.animate(e.extend(f, c && l ? {top: c, left: l} : {}), {duration: i.animateDuration, easing: i.animateEasing, step: function () {
|
||||
var n = {width: parseInt(r.element.css("width"), 10), height: parseInt(r.element.css("height"), 10), top: parseInt(r.element.css("top"), 10), left: parseInt(r.element.css("left"), 10)};
|
||||
s && s.length && e(s[0]).css({width: n.width, height: n.height}), r._updateCache(n), r._propagate("resize", t)
|
||||
}})
|
||||
}}), e.ui.plugin.add("resizable", "containment", {start: function (t, r) {
|
||||
var i = e(this).data("resizable"), s = i.options, o = i.element, u = s.containment, a = u instanceof e ? u.get(0) : /parent/.test(u) ? o.parent().get(0) : u;
|
||||
if (!a)return;
|
||||
i.containerElement = e(a);
|
||||
if (/document/.test(u) || u == document)i.containerOffset = {left: 0, top: 0}, i.containerPosition = {left: 0, top: 0}, i.parentData = {element: e(document), left: 0, top: 0, width: e(document).width(), height: e(document).height() || document.body.parentNode.scrollHeight}; else {
|
||||
var f = e(a), l = [];
|
||||
e(["Top", "Right", "Left", "Bottom"]).each(function (e, t) {
|
||||
l[e] = n(f.css("padding" + t))
|
||||
}), i.containerOffset = f.offset(), i.containerPosition = f.position(), i.containerSize = {height: f.innerHeight() - l[3], width: f.innerWidth() - l[1]};
|
||||
var c = i.containerOffset, h = i.containerSize.height, p = i.containerSize.width, d = e.ui.hasScroll(a, "left") ? a.scrollWidth : p, v = e.ui.hasScroll(a) ? a.scrollHeight : h;
|
||||
i.parentData = {element: a, left: c.left, top: c.top, width: d, height: v}
|
||||
}
|
||||
}, resize: function (t, n) {
|
||||
var r = e(this).data("resizable"), i = r.options, s = r.containerSize, o = r.containerOffset, u = r.size, a = r.position, f = r._aspectRatio || t.shiftKey, l = {top: 0, left: 0}, c = r.containerElement;
|
||||
c[0] != document && /static/.test(c.css("position")) && (l = o), a.left < (r._helper ? o.left : 0) && (r.size.width = r.size.width + (r._helper ? r.position.left - o.left : r.position.left - l.left), f && (r.size.height = r.size.width / r.aspectRatio), r.position.left = i.helper ? o.left : 0), a.top < (r._helper ? o.top : 0) && (r.size.height = r.size.height + (r._helper ? r.position.top - o.top : r.position.top), f && (r.size.width = r.size.height * r.aspectRatio), r.position.top = r._helper ? o.top : 0), r.offset.left = r.parentData.left + r.position.left, r.offset.top = r.parentData.top + r.position.top;
|
||||
var h = Math.abs((r._helper ? r.offset.left - l.left : r.offset.left - l.left) + r.sizeDiff.width), p = Math.abs((r._helper ? r.offset.top - l.top : r.offset.top - o.top) + r.sizeDiff.height), d = r.containerElement.get(0) == r.element.parent().get(0), v = /relative|absolute/.test(r.containerElement.css("position"));
|
||||
d && v && (h -= r.parentData.left), h + r.size.width >= r.parentData.width && (r.size.width = r.parentData.width - h, f && (r.size.height = r.size.width / r.aspectRatio)), p + r.size.height >= r.parentData.height && (r.size.height = r.parentData.height - p, f && (r.size.width = r.size.height * r.aspectRatio))
|
||||
}, stop: function (t, n) {
|
||||
var r = e(this).data("resizable"), i = r.options, s = r.position, o = r.containerOffset, u = r.containerPosition, a = r.containerElement, f = e(r.helper), l = f.offset(), c = f.outerWidth() - r.sizeDiff.width, h = f.outerHeight() - r.sizeDiff.height;
|
||||
r._helper && !i.animate && /relative/.test(a.css("position")) && e(this).css({left: l.left - u.left - o.left, width: c, height: h}), r._helper && !i.animate && /static/.test(a.css("position")) && e(this).css({left: l.left - u.left - o.left, width: c, height: h})
|
||||
}}), e.ui.plugin.add("resizable", "ghost", {start: function (t, n) {
|
||||
var r = e(this).data("resizable"), i = r.options, s = r.size;
|
||||
r.ghost = r.originalElement.clone(), r.ghost.css({opacity: .25, display: "block", position: "relative", height: s.height, width: s.width, margin: 0, left: 0, top: 0}).addClass("ui-resizable-ghost").addClass(typeof i.ghost == "string" ? i.ghost : ""), r.ghost.appendTo(r.helper)
|
||||
}, resize: function (t, n) {
|
||||
var r = e(this).data("resizable"), i = r.options;
|
||||
r.ghost && r.ghost.css({position: "relative", height: r.size.height, width: r.size.width})
|
||||
}, stop: function (t, n) {
|
||||
var r = e(this).data("resizable"), i = r.options;
|
||||
r.ghost && r.helper && r.helper.get(0).removeChild(r.ghost.get(0))
|
||||
}}), e.ui.plugin.add("resizable", "grid", {resize: function (t, n) {
|
||||
var r = e(this).data("resizable"), i = r.options, s = r.size, o = r.originalSize, u = r.originalPosition, a = r.axis, f = i._aspectRatio || t.shiftKey;
|
||||
i.grid = typeof i.grid == "number" ? [i.grid, i.grid] : i.grid;
|
||||
var l = Math.round((s.width - o.width) / (i.grid[0] || 1)) * (i.grid[0] || 1), c = Math.round((s.height - o.height) / (i.grid[1] || 1)) * (i.grid[1] || 1);
|
||||
/^(se|s|e)$/.test(a) ? (r.size.width = o.width + l, r.size.height = o.height + c) : /^(ne)$/.test(a) ? (r.size.width = o.width + l, r.size.height = o.height + c, r.position.top = u.top - c) : /^(sw)$/.test(a) ? (r.size.width = o.width + l, r.size.height = o.height + c, r.position.left = u.left - l) : (r.size.width = o.width + l, r.size.height = o.height + c, r.position.top = u.top - c, r.position.left = u.left - l)
|
||||
}});
|
||||
var n = function (e) {
|
||||
return parseInt(e, 10) || 0
|
||||
}, r = function (e) {
|
||||
return!isNaN(parseInt(e, 10))
|
||||
}
|
||||
})(jQuery);
|
||||
(function (e, t) {
|
||||
var n = 0;
|
||||
e.widget("ui.autocomplete", {version: "1.9.2", defaultElement: "<input>", options: {appendTo: "body", autoFocus: !1, delay: 300, minLength: 1, position: {my: "left top", at: "left bottom", collision: "none"}, source: null, change: null, close: null, focus: null, open: null, response: null, search: null, select: null}, pending: 0, _create: function () {
|
||||
var t, n, r;
|
||||
this.isMultiLine = this._isMultiLine(), this.valueMethod = this.element[this.element.is("input,textarea") ? "val" : "text"], this.isNewMenu = !0, this.element.addClass("ui-autocomplete-input").attr("autocomplete", "off"), this._on(this.element, {keydown: function (i) {
|
||||
if (this.element.prop("readOnly")) {
|
||||
t = !0, r = !0, n = !0;
|
||||
return
|
||||
}
|
||||
t = !1, r = !1, n = !1;
|
||||
var s = e.ui.keyCode;
|
||||
switch (i.keyCode) {
|
||||
case s.PAGE_UP:
|
||||
t = !0, this._move("previousPage", i);
|
||||
break;
|
||||
case s.PAGE_DOWN:
|
||||
t = !0, this._move("nextPage", i);
|
||||
break;
|
||||
case s.UP:
|
||||
t = !0, this._keyEvent("previous", i);
|
||||
break;
|
||||
case s.DOWN:
|
||||
t = !0, this._keyEvent("next", i);
|
||||
break;
|
||||
case s.ENTER:
|
||||
case s.NUMPAD_ENTER:
|
||||
this.menu.active && (t = !0, i.preventDefault(), this.menu.select(i));
|
||||
break;
|
||||
case s.TAB:
|
||||
this.menu.active && this.menu.select(i);
|
||||
break;
|
||||
case s.ESCAPE:
|
||||
this.menu.element.is(":visible") && (this._value(this.term), this.close(i), i.preventDefault());
|
||||
break;
|
||||
default:
|
||||
n = !0, this._searchTimeout(i)
|
||||
}
|
||||
}, keypress: function (r) {
|
||||
if (t) {
|
||||
t = !1, r.preventDefault();
|
||||
return
|
||||
}
|
||||
if (n)return;
|
||||
var i = e.ui.keyCode;
|
||||
switch (r.keyCode) {
|
||||
case i.PAGE_UP:
|
||||
this._move("previousPage", r);
|
||||
break;
|
||||
case i.PAGE_DOWN:
|
||||
this._move("nextPage", r);
|
||||
break;
|
||||
case i.UP:
|
||||
this._keyEvent("previous", r);
|
||||
break;
|
||||
case i.DOWN:
|
||||
this._keyEvent("next", r)
|
||||
}
|
||||
}, input: function (e) {
|
||||
if (r) {
|
||||
r = !1, e.preventDefault();
|
||||
return
|
||||
}
|
||||
this._searchTimeout(e)
|
||||
}, focus: function () {
|
||||
this.selectedItem = null, this.previous = this._value()
|
||||
}, blur: function (e) {
|
||||
if (this.cancelBlur) {
|
||||
delete this.cancelBlur;
|
||||
return
|
||||
}
|
||||
clearTimeout(this.searching), this.close(e), this._change(e)
|
||||
}}), this._initSource(), this.menu = e("<ul>").addClass("ui-autocomplete").appendTo(this.document.find(this.options.appendTo || "body")[0]).menu({input: e(), role: null}).zIndex(this.element.zIndex() + 1).hide().data("menu"), this._on(this.menu.element, {mousedown: function (t) {
|
||||
t.preventDefault(), this.cancelBlur = !0, this._delay(function () {
|
||||
delete this.cancelBlur
|
||||
});
|
||||
var n = this.menu.element[0];
|
||||
e(t.target).closest(".ui-menu-item").length || this._delay(function () {
|
||||
var t = this;
|
||||
this.document.one("mousedown", function (r) {
|
||||
r.target !== t.element[0] && r.target !== n && !e.contains(n, r.target) && t.close()
|
||||
})
|
||||
})
|
||||
}, menufocus: function (t, n) {
|
||||
if (this.isNewMenu) {
|
||||
this.isNewMenu = !1;
|
||||
if (t.originalEvent && /^mouse/.test(t.originalEvent.type)) {
|
||||
this.menu.blur(), this.document.one("mousemove", function () {
|
||||
e(t.target).trigger(t.originalEvent)
|
||||
});
|
||||
return
|
||||
}
|
||||
}
|
||||
var r = n.item.data("ui-autocomplete-item") || n.item.data("item.autocomplete");
|
||||
!1 !== this._trigger("focus", t, {item: r}) ? t.originalEvent && /^key/.test(t.originalEvent.type) && this._value(r.value) : this.liveRegion.text(r.value)
|
||||
}, menuselect: function (e, t) {
|
||||
var n = t.item.data("ui-autocomplete-item") || t.item.data("item.autocomplete"), r = this.previous;
|
||||
this.element[0] !== this.document[0].activeElement && (this.element.focus(), this.previous = r, this._delay(function () {
|
||||
this.previous = r, this.selectedItem = n
|
||||
})), !1 !== this._trigger("select", e, {item: n}) && this._value(n.value), this.term = this._value(), this.close(e), this.selectedItem = n
|
||||
}}), this.liveRegion = e("<span>", {role: "status", "aria-live": "polite"}).addClass("ui-helper-hidden-accessible").insertAfter(this.element), e.fn.bgiframe && this.menu.element.bgiframe(), this._on(this.window, {beforeunload: function () {
|
||||
this.element.removeAttr("autocomplete")
|
||||
}})
|
||||
}, _destroy: function () {
|
||||
clearTimeout(this.searching), this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete"), this.menu.element.remove(), this.liveRegion.remove()
|
||||
}, _setOption: function (e, t) {
|
||||
this._super(e, t), e === "source" && this._initSource(), e === "appendTo" && this.menu.element.appendTo(this.document.find(t || "body")[0]), e === "disabled" && t && this.xhr && this.xhr.abort()
|
||||
}, _isMultiLine: function () {
|
||||
return this.element.is("textarea") ? !0 : this.element.is("input") ? !1 : this.element.prop("isContentEditable")
|
||||
}, _initSource: function () {
|
||||
var t, n, r = this;
|
||||
e.isArray(this.options.source) ? (t = this.options.source, this.source = function (n, r) {
|
||||
r(e.ui.autocomplete.filter(t, n.term))
|
||||
}) : typeof this.options.source == "string" ? (n = this.options.source, this.source = function (t, i) {
|
||||
r.xhr && r.xhr.abort(), r.xhr = e.ajax({url: n, data: t, dataType: "json", success: function (e) {
|
||||
i(e)
|
||||
}, error: function () {
|
||||
i([])
|
||||
}})
|
||||
}) : this.source = this.options.source
|
||||
}, _searchTimeout: function (e) {
|
||||
clearTimeout(this.searching), this.searching = this._delay(function () {
|
||||
this.term !== this._value() && (this.selectedItem = null, this.search(null, e))
|
||||
}, this.options.delay)
|
||||
}, search: function (e, t) {
|
||||
e = e != null ? e : this._value(), this.term = this._value();
|
||||
if (e.length < this.options.minLength)return this.close(t);
|
||||
if (this._trigger("search", t) === !1)return;
|
||||
return this._search(e)
|
||||
}, _search: function (e) {
|
||||
this.pending++, this.element.addClass("ui-autocomplete-loading"), this.cancelSearch = !1, this.source({term: e}, this._response())
|
||||
}, _response: function () {
|
||||
var e = this, t = ++n;
|
||||
return function (r) {
|
||||
t === n && e.__response(r), e.pending--, e.pending || e.element.removeClass("ui-autocomplete-loading")
|
||||
}
|
||||
}, __response: function (e) {
|
||||
e && (e = this._normalize(e)), this._trigger("response", null, {content: e}), !this.options.disabled && e && e.length && !this.cancelSearch ? (this._suggest(e), this._trigger("open")) : this._close()
|
||||
}, close: function (e) {
|
||||
this.cancelSearch = !0, this._close(e)
|
||||
}, _close: function (e) {
|
||||
this.menu.element.is(":visible") && (this.menu.element.hide(), this.menu.blur(), this.isNewMenu = !0, this._trigger("close", e))
|
||||
}, _change: function (e) {
|
||||
this.previous !== this._value() && this._trigger("change", e, {item: this.selectedItem})
|
||||
}, _normalize: function (t) {
|
||||
return t.length && t[0].label && t[0].value ? t : e.map(t, function (t) {
|
||||
return typeof t == "string" ? {label: t, value: t} : e.extend({label: t.label || t.value, value: t.value || t.label}, t)
|
||||
})
|
||||
}, _suggest: function (t) {
|
||||
var n = this.menu.element.empty().zIndex(this.element.zIndex() + 1);
|
||||
this._renderMenu(n, t), this.menu.refresh(), n.show(), this._resizeMenu(), n.position(e.extend({of: this.element}, this.options.position)), this.options.autoFocus && this.menu.next()
|
||||
}, _resizeMenu: function () {
|
||||
var e = this.menu.element;
|
||||
e.outerWidth(Math.max(e.width("").outerWidth() + 1, this.element.outerWidth()))
|
||||
}, _renderMenu: function (t, n) {
|
||||
var r = this;
|
||||
e.each(n, function (e, n) {
|
||||
r._renderItemData(t, n)
|
||||
})
|
||||
}, _renderItemData: function (e, t) {
|
||||
return this._renderItem(e, t).data("ui-autocomplete-item", t)
|
||||
}, _renderItem: function (t, n) {
|
||||
return e("<li>").append(e("<a>").text(n.label)).appendTo(t)
|
||||
}, _move: function (e, t) {
|
||||
if (!this.menu.element.is(":visible")) {
|
||||
this.search(null, t);
|
||||
return
|
||||
}
|
||||
if (this.menu.isFirstItem() && /^previous/.test(e) || this.menu.isLastItem() && /^next/.test(e)) {
|
||||
this._value(this.term), this.menu.blur();
|
||||
return
|
||||
}
|
||||
this.menu[e](t)
|
||||
}, widget: function () {
|
||||
return this.menu.element
|
||||
}, _value: function () {
|
||||
return this.valueMethod.apply(this.element, arguments)
|
||||
}, _keyEvent: function (e, t) {
|
||||
if (!this.isMultiLine || this.menu.element.is(":visible"))this._move(e, t), t.preventDefault()
|
||||
}}), e.extend(e.ui.autocomplete, {escapeRegex: function (e) {
|
||||
return e.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&")
|
||||
}, filter: function (t, n) {
|
||||
var r = new RegExp(e.ui.autocomplete.escapeRegex(n), "i");
|
||||
return e.grep(t, function (e) {
|
||||
return r.test(e.label || e.value || e)
|
||||
})
|
||||
}}), e.widget("ui.autocomplete", e.ui.autocomplete, {options: {messages: {noResults: "No search results.", results: function (e) {
|
||||
return e + (e > 1 ? " results are" : " result is") + " available, use up and down arrow keys to navigate."
|
||||
}}}, __response: function (e) {
|
||||
var t;
|
||||
this._superApply(arguments);
|
||||
if (this.options.disabled || this.cancelSearch)return;
|
||||
e && e.length ? t = this.options.messages.results(e.length) : t = this.options.messages.noResults, this.liveRegion.text(t)
|
||||
}})
|
||||
})(jQuery);
|
||||
(function (e, t) {
|
||||
var n = !1;
|
||||
e.widget("ui.menu", {version: "1.9.2", defaultElement: "<ul>", delay: 300, options: {icons: {submenu: "ui-icon-carat-1-e"}, menus: "ul", position: {my: "left top", at: "right top"}, role: "menu", blur: null, focus: null, select: null}, _create: function () {
|
||||
this.activeMenu = this.element, this.element.uniqueId().addClass("ui-menu ui-widget ui-widget-content ui-corner-all").toggleClass("ui-menu-icons", !!this.element.find(".ui-icon").length).attr({role: this.options.role, tabIndex: 0}).bind("click" + this.eventNamespace, e.proxy(function (e) {
|
||||
this.options.disabled && e.preventDefault()
|
||||
}, this)), this.options.disabled && this.element.addClass("ui-state-disabled").attr("aria-disabled", "true"), this._on({"mousedown .ui-menu-item > a": function (e) {
|
||||
e.preventDefault()
|
||||
}, "click .ui-state-disabled > a": function (e) {
|
||||
e.preventDefault()
|
||||
}, "click .ui-menu-item:has(a)": function (t) {
|
||||
var r = e(t.target).closest(".ui-menu-item");
|
||||
!n && r.not(".ui-state-disabled").length && (n = !0, this.select(t), r.has(".ui-menu").length ? this.expand(t) : this.element.is(":focus") || (this.element.trigger("focus", [!0]), this.active && this.active.parents(".ui-menu").length === 1 && clearTimeout(this.timer)))
|
||||
}, "mouseenter .ui-menu-item": function (t) {
|
||||
var n = e(t.currentTarget);
|
||||
n.siblings().children(".ui-state-active").removeClass("ui-state-active"), this.focus(t, n)
|
||||
}, mouseleave: "collapseAll", "mouseleave .ui-menu": "collapseAll", focus: function (e, t) {
|
||||
var n = this.active || this.element.children(".ui-menu-item").eq(0);
|
||||
t || this.focus(e, n)
|
||||
}, blur: function (t) {
|
||||
this._delay(function () {
|
||||
e.contains(this.element[0], this.document[0].activeElement) || this.collapseAll(t)
|
||||
})
|
||||
}, keydown: "_keydown"}), this.refresh(), this._on(this.document, {click: function (t) {
|
||||
e(t.target).closest(".ui-menu").length || this.collapseAll(t), n = !1
|
||||
}})
|
||||
}, _destroy: function () {
|
||||
this.element.removeAttr("aria-activedescendant").find(".ui-menu").andSelf().removeClass("ui-menu ui-widget ui-widget-content ui-corner-all ui-menu-icons").removeAttr("role").removeAttr("tabIndex").removeAttr("aria-labelledby").removeAttr("aria-expanded").removeAttr("aria-hidden").removeAttr("aria-disabled").removeUniqueId().show(), this.element.find(".ui-menu-item").removeClass("ui-menu-item").removeAttr("role").removeAttr("aria-disabled").children("a").removeUniqueId().removeClass("ui-corner-all ui-state-hover").removeAttr("tabIndex").removeAttr("role").removeAttr("aria-haspopup").children().each(function () {
|
||||
var t = e(this);
|
||||
t.data("ui-menu-submenu-carat") && t.remove()
|
||||
}), this.element.find(".ui-menu-divider").removeClass("ui-menu-divider ui-widget-content")
|
||||
}, _keydown: function (t) {
|
||||
function a(e) {
|
||||
return e.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&")
|
||||
}
|
||||
|
||||
var n, r, i, s, o, u = !0;
|
||||
switch (t.keyCode) {
|
||||
case e.ui.keyCode.PAGE_UP:
|
||||
this.previousPage(t);
|
||||
break;
|
||||
case e.ui.keyCode.PAGE_DOWN:
|
||||
this.nextPage(t);
|
||||
break;
|
||||
case e.ui.keyCode.HOME:
|
||||
this._move("first", "first", t);
|
||||
break;
|
||||
case e.ui.keyCode.END:
|
||||
this._move("last", "last", t);
|
||||
break;
|
||||
case e.ui.keyCode.UP:
|
||||
this.previous(t);
|
||||
break;
|
||||
case e.ui.keyCode.DOWN:
|
||||
this.next(t);
|
||||
break;
|
||||
case e.ui.keyCode.LEFT:
|
||||
this.collapse(t);
|
||||
break;
|
||||
case e.ui.keyCode.RIGHT:
|
||||
this.active && !this.active.is(".ui-state-disabled") && this.expand(t);
|
||||
break;
|
||||
case e.ui.keyCode.ENTER:
|
||||
case e.ui.keyCode.SPACE:
|
||||
this._activate(t);
|
||||
break;
|
||||
case e.ui.keyCode.ESCAPE:
|
||||
this.collapse(t);
|
||||
break;
|
||||
default:
|
||||
u = !1, r = this.previousFilter || "", i = String.fromCharCode(t.keyCode), s = !1, clearTimeout(this.filterTimer), i === r ? s = !0 : i = r + i, o = new RegExp("^" + a(i), "i"), n = this.activeMenu.children(".ui-menu-item").filter(function () {
|
||||
return o.test(e(this).children("a").text())
|
||||
}), n = s && n.index(this.active.next()) !== -1 ? this.active.nextAll(".ui-menu-item") : n, n.length || (i = String.fromCharCode(t.keyCode), o = new RegExp("^" + a(i), "i"), n = this.activeMenu.children(".ui-menu-item").filter(function () {
|
||||
return o.test(e(this).children("a").text())
|
||||
})), n.length ? (this.focus(t, n), n.length > 1 ? (this.previousFilter = i, this.filterTimer = this._delay(function () {
|
||||
delete this.previousFilter
|
||||
}, 1e3)) : delete this.previousFilter) : delete this.previousFilter
|
||||
}
|
||||
u && t.preventDefault()
|
||||
}, _activate: function (e) {
|
||||
this.active.is(".ui-state-disabled") || (this.active.children("a[aria-haspopup='true']").length ? this.expand(e) : this.select(e))
|
||||
}, refresh: function () {
|
||||
var t, n = this.options.icons.submenu, r = this.element.find(this.options.menus);
|
||||
r.filter(":not(.ui-menu)").addClass("ui-menu ui-widget ui-widget-content ui-corner-all").hide().attr({role: this.options.role, "aria-hidden": "true", "aria-expanded": "false"}).each(function () {
|
||||
var t = e(this), r = t.prev("a"), i = e("<span>").addClass("ui-menu-icon ui-icon " + n).data("ui-menu-submenu-carat", !0);
|
||||
r.attr("aria-haspopup", "true").prepend(i), t.attr("aria-labelledby", r.attr("id"))
|
||||
}), t = r.add(this.element), t.children(":not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role", "presentation").children("a").uniqueId().addClass("ui-corner-all").attr({tabIndex: -1, role: this._itemRole()}), t.children(":not(.ui-menu-item)").each(function () {
|
||||
var t = e(this);
|
||||
/[^\-—–\s]/.test(t.text()) || t.addClass("ui-widget-content ui-menu-divider")
|
||||
}), t.children(".ui-state-disabled").attr("aria-disabled", "true"), this.active && !e.contains(this.element[0], this.active[0]) && this.blur()
|
||||
}, _itemRole: function () {
|
||||
return{menu: "menuitem", listbox: "option"}[this.options.role]
|
||||
}, focus: function (e, t) {
|
||||
var n, r;
|
||||
this.blur(e, e && e.type === "focus"), this._scrollIntoView(t), this.active = t.first(), r = this.active.children("a").addClass("ui-state-focus"), this.options.role && this.element.attr("aria-activedescendant", r.attr("id")), this.active.parent().closest(".ui-menu-item").children("a:first").addClass("ui-state-active"), e && e.type === "keydown" ? this._close() : this.timer = this._delay(function () {
|
||||
this._close()
|
||||
}, this.delay), n = t.children(".ui-menu"), n.length && /^mouse/.test(e.type) && this._startOpening(n), this.activeMenu = t.parent(), this._trigger("focus", e, {item: t})
|
||||
}, _scrollIntoView: function (t) {
|
||||
var n, r, i, s, o, u;
|
||||
this._hasScroll() && (n = parseFloat(e.css(this.activeMenu[0], "borderTopWidth")) || 0, r = parseFloat(e.css(this.activeMenu[0], "paddingTop")) || 0, i = t.offset().top - this.activeMenu.offset().top - n - r, s = this.activeMenu.scrollTop(), o = this.activeMenu.height(), u = t.height(), i < 0 ? this.activeMenu.scrollTop(s + i) : i + u > o && this.activeMenu.scrollTop(s + i - o + u))
|
||||
}, blur: function (e, t) {
|
||||
t || clearTimeout(this.timer);
|
||||
if (!this.active)return;
|
||||
this.active.children("a").removeClass("ui-state-focus"), this.active = null, this._trigger("blur", e, {item: this.active})
|
||||
}, _startOpening: function (e) {
|
||||
clearTimeout(this.timer);
|
||||
if (e.attr("aria-hidden") !== "true")return;
|
||||
this.timer = this._delay(function () {
|
||||
this._close(), this._open(e)
|
||||
}, this.delay)
|
||||
}, _open: function (t) {
|
||||
var n = e.extend({of: this.active}, this.options.position);
|
||||
clearTimeout(this.timer), this.element.find(".ui-menu").not(t.parents(".ui-menu")).hide().attr("aria-hidden", "true"), t.show().removeAttr("aria-hidden").attr("aria-expanded", "true").position(n)
|
||||
}, collapseAll: function (t, n) {
|
||||
clearTimeout(this.timer), this.timer = this._delay(function () {
|
||||
var r = n ? this.element : e(t && t.target).closest(this.element.find(".ui-menu"));
|
||||
r.length || (r = this.element), this._close(r), this.blur(t), this.activeMenu = r
|
||||
}, this.delay)
|
||||
}, _close: function (e) {
|
||||
e || (e = this.active ? this.active.parent() : this.element), e.find(".ui-menu").hide().attr("aria-hidden", "true").attr("aria-expanded", "false").end().find("a.ui-state-active").removeClass("ui-state-active")
|
||||
}, collapse: function (e) {
|
||||
var t = this.active && this.active.parent().closest(".ui-menu-item", this.element);
|
||||
t && t.length && (this._close(), this.focus(e, t))
|
||||
}, expand: function (e) {
|
||||
var t = this.active && this.active.children(".ui-menu ").children(".ui-menu-item").first();
|
||||
t && t.length && (this._open(t.parent()), this._delay(function () {
|
||||
this.focus(e, t)
|
||||
}))
|
||||
}, next: function (e) {
|
||||
this._move("next", "first", e)
|
||||
}, previous: function (e) {
|
||||
this._move("prev", "last", e)
|
||||
}, isFirstItem: function () {
|
||||
return this.active && !this.active.prevAll(".ui-menu-item").length
|
||||
}, isLastItem: function () {
|
||||
return this.active && !this.active.nextAll(".ui-menu-item").length
|
||||
}, _move: function (e, t, n) {
|
||||
var r;
|
||||
this.active && (e === "first" || e === "last" ? r = this.active[e === "first" ? "prevAll" : "nextAll"](".ui-menu-item").eq(-1) : r = this.active[e + "All"](".ui-menu-item").eq(0));
|
||||
if (!r || !r.length || !this.active)r = this.activeMenu.children(".ui-menu-item")[t]();
|
||||
this.focus(n, r)
|
||||
}, nextPage: function (t) {
|
||||
var n, r, i;
|
||||
if (!this.active) {
|
||||
this.next(t);
|
||||
return
|
||||
}
|
||||
if (this.isLastItem())return;
|
||||
this._hasScroll() ? (r = this.active.offset().top, i = this.element.height(), this.active.nextAll(".ui-menu-item").each(function () {
|
||||
return n = e(this), n.offset().top - r - i < 0
|
||||
}), this.focus(t, n)) : this.focus(t, this.activeMenu.children(".ui-menu-item")[this.active ? "last" : "first"]())
|
||||
}, previousPage: function (t) {
|
||||
var n, r, i;
|
||||
if (!this.active) {
|
||||
this.next(t);
|
||||
return
|
||||
}
|
||||
if (this.isFirstItem())return;
|
||||
this._hasScroll() ? (r = this.active.offset().top, i = this.element.height(), this.active.prevAll(".ui-menu-item").each(function () {
|
||||
return n = e(this), n.offset().top - r + i > 0
|
||||
}), this.focus(t, n)) : this.focus(t, this.activeMenu.children(".ui-menu-item").first())
|
||||
}, _hasScroll: function () {
|
||||
return this.element.outerHeight() < this.element.prop("scrollHeight")
|
||||
}, select: function (t) {
|
||||
this.active = this.active || e(t.target).closest(".ui-menu-item");
|
||||
var n = {item: this.active};
|
||||
this.active.has(".ui-menu").length || this.collapseAll(t, !0), this._trigger("select", t, n)
|
||||
}})
|
||||
})(jQuery);
|
6
sense/lib/moment.min.js
vendored
Normal file
6
sense/lib/moment.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
14270
sense/lib/src-noconflict/ace.js
Normal file
14270
sense/lib/src-noconflict/ace.js
Normal file
File diff suppressed because it is too large
Load diff
528
sense/lib/src-noconflict/mode-json.js
Normal file
528
sense/lib/src-noconflict/mode-json.js
Normal file
|
@ -0,0 +1,528 @@
|
|||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Distributed under the BSD license:
|
||||
*
|
||||
* Copyright (c) 2010, Ajax.org B.V.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the name of Ajax.org B.V. nor the
|
||||
* names of its contributors may be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
|
||||
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
ace.define('ace/mode/json', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/json_highlight_rules', 'ace/mode/matching_brace_outdent', 'ace/mode/behaviour/cstyle', 'ace/mode/folding/cstyle', 'ace/worker/worker_client'], function(require, exports, module) {
|
||||
|
||||
|
||||
var oop = require("../lib/oop");
|
||||
var TextMode = require("./text").Mode;
|
||||
var Tokenizer = require("../tokenizer").Tokenizer;
|
||||
var HighlightRules = require("./json_highlight_rules").JsonHighlightRules;
|
||||
var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
|
||||
var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;
|
||||
var CStyleFoldMode = require("./folding/cstyle").FoldMode;
|
||||
var WorkerClient = require("../worker/worker_client").WorkerClient;
|
||||
|
||||
var Mode = function() {
|
||||
this.$tokenizer = new Tokenizer(new HighlightRules().getRules());
|
||||
this.$outdent = new MatchingBraceOutdent();
|
||||
this.$behaviour = new CstyleBehaviour();
|
||||
this.foldingRules = new CStyleFoldMode();
|
||||
};
|
||||
oop.inherits(Mode, TextMode);
|
||||
|
||||
(function() {
|
||||
|
||||
this.getNextLineIndent = function(state, line, tab) {
|
||||
var indent = this.$getIndent(line);
|
||||
|
||||
if (state == "start") {
|
||||
var match = line.match(/^.*[\{\(\[]\s*$/);
|
||||
if (match) {
|
||||
indent += tab;
|
||||
}
|
||||
}
|
||||
|
||||
return indent;
|
||||
};
|
||||
|
||||
this.checkOutdent = function(state, line, input) {
|
||||
return this.$outdent.checkOutdent(line, input);
|
||||
};
|
||||
|
||||
this.autoOutdent = function(state, doc, row) {
|
||||
this.$outdent.autoOutdent(doc, row);
|
||||
};
|
||||
|
||||
this.createWorker = function(session) {
|
||||
var worker = new WorkerClient(["ace"], "ace/mode/json_worker", "JsonWorker");
|
||||
worker.attachToDocument(session.getDocument());
|
||||
|
||||
worker.on("error", function(e) {
|
||||
session.setAnnotations([e.data]);
|
||||
});
|
||||
|
||||
worker.on("ok", function() {
|
||||
session.clearAnnotations();
|
||||
});
|
||||
|
||||
return worker;
|
||||
};
|
||||
|
||||
|
||||
}).call(Mode.prototype);
|
||||
|
||||
exports.Mode = Mode;
|
||||
});
|
||||
|
||||
ace.define('ace/mode/json_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
|
||||
|
||||
|
||||
var oop = require("../lib/oop");
|
||||
var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
|
||||
|
||||
var JsonHighlightRules = function() {
|
||||
this.$rules = {
|
||||
"start" : [
|
||||
{
|
||||
token : "variable", // single line
|
||||
regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]\\s*(?=:)'
|
||||
}, {
|
||||
token : "string", // single line
|
||||
regex : '"',
|
||||
next : "string"
|
||||
}, {
|
||||
token : "constant.numeric", // hex
|
||||
regex : "0[xX][0-9a-fA-F]+\\b"
|
||||
}, {
|
||||
token : "constant.numeric", // float
|
||||
regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"
|
||||
}, {
|
||||
token : "constant.language.boolean",
|
||||
regex : "(?:true|false)\\b"
|
||||
}, {
|
||||
token : "invalid.illegal", // single quoted strings are not allowed
|
||||
regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"
|
||||
}, {
|
||||
token : "invalid.illegal", // comments are not allowed
|
||||
regex : "\\/\\/.*$"
|
||||
}, {
|
||||
token : "paren.lparen",
|
||||
regex : "[[({]"
|
||||
}, {
|
||||
token : "paren.rparen",
|
||||
regex : "[\\])}]"
|
||||
}, {
|
||||
token : "text",
|
||||
regex : "\\s+"
|
||||
}
|
||||
],
|
||||
"string" : [
|
||||
{
|
||||
token : "constant.language.escape",
|
||||
regex : /\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|["\\\/bfnrt])/
|
||||
}, {
|
||||
token : "string",
|
||||
regex : '[^"\\\\]+',
|
||||
merge : true
|
||||
}, {
|
||||
token : "string",
|
||||
regex : '"',
|
||||
next : "start",
|
||||
merge : true
|
||||
}, {
|
||||
token : "string",
|
||||
regex : "",
|
||||
next : "start",
|
||||
merge : true
|
||||
}
|
||||
]
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
oop.inherits(JsonHighlightRules, TextHighlightRules);
|
||||
|
||||
exports.JsonHighlightRules = JsonHighlightRules;
|
||||
});
|
||||
|
||||
ace.define('ace/mode/matching_brace_outdent', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) {
|
||||
|
||||
|
||||
var Range = require("../range").Range;
|
||||
|
||||
var MatchingBraceOutdent = function() {};
|
||||
|
||||
(function() {
|
||||
|
||||
this.checkOutdent = function(line, input) {
|
||||
if (! /^\s+$/.test(line))
|
||||
return false;
|
||||
|
||||
return /^\s*\}/.test(input);
|
||||
};
|
||||
|
||||
this.autoOutdent = function(doc, row) {
|
||||
var line = doc.getLine(row);
|
||||
var match = line.match(/^(\s*\})/);
|
||||
|
||||
if (!match) return 0;
|
||||
|
||||
var column = match[1].length;
|
||||
var openBracePos = doc.findMatchingBracket({row: row, column: column});
|
||||
|
||||
if (!openBracePos || openBracePos.row == row) return 0;
|
||||
|
||||
var indent = this.$getIndent(doc.getLine(openBracePos.row));
|
||||
doc.replace(new Range(row, 0, row, column-1), indent);
|
||||
};
|
||||
|
||||
this.$getIndent = function(line) {
|
||||
var match = line.match(/^(\s+)/);
|
||||
if (match) {
|
||||
return match[1];
|
||||
}
|
||||
|
||||
return "";
|
||||
};
|
||||
|
||||
}).call(MatchingBraceOutdent.prototype);
|
||||
|
||||
exports.MatchingBraceOutdent = MatchingBraceOutdent;
|
||||
});
|
||||
|
||||
ace.define('ace/mode/behaviour/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/behaviour', 'ace/token_iterator'], function(require, exports, module) {
|
||||
|
||||
|
||||
var oop = require("../../lib/oop");
|
||||
var Behaviour = require("../behaviour").Behaviour;
|
||||
var TokenIterator = require("../../token_iterator").TokenIterator;
|
||||
|
||||
var autoInsertedBrackets = 0;
|
||||
var autoInsertedRow = -1;
|
||||
var autoInsertedLineEnd = "";
|
||||
|
||||
var CstyleBehaviour = function () {
|
||||
|
||||
CstyleBehaviour.isSaneInsertion = function(editor, session) {
|
||||
var cursor = editor.getCursorPosition();
|
||||
var iterator = new TokenIterator(session, cursor.row, cursor.column);
|
||||
if (!this.$matchTokenType(iterator.getCurrentToken() || "text", ["text", "paren.rparen"])) {
|
||||
iterator = new TokenIterator(session, cursor.row, cursor.column + 1);
|
||||
if (!this.$matchTokenType(iterator.getCurrentToken() || "text", ["text", "paren.rparen"]))
|
||||
return false;
|
||||
}
|
||||
iterator.stepForward();
|
||||
return iterator.getCurrentTokenRow() !== cursor.row ||
|
||||
this.$matchTokenType(iterator.getCurrentToken() || "text", ["text", "comment", "paren.rparen"]);
|
||||
};
|
||||
|
||||
CstyleBehaviour.$matchTokenType = function(token, types) {
|
||||
return types.indexOf(token.type || token) > -1;
|
||||
};
|
||||
|
||||
CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) {
|
||||
var cursor = editor.getCursorPosition();
|
||||
var line = session.doc.getLine(cursor.row);
|
||||
if (!this.isAutoInsertedClosing(cursor, line, autoInsertedLineEnd[0]))
|
||||
autoInsertedBrackets = 0;
|
||||
autoInsertedRow = cursor.row;
|
||||
autoInsertedLineEnd = bracket + line.substr(cursor.column);
|
||||
autoInsertedBrackets++;
|
||||
};
|
||||
|
||||
CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) {
|
||||
return autoInsertedBrackets > 0 &&
|
||||
cursor.row === autoInsertedRow &&
|
||||
bracket === autoInsertedLineEnd[0] &&
|
||||
line.substr(cursor.column) === autoInsertedLineEnd;
|
||||
};
|
||||
|
||||
CstyleBehaviour.popAutoInsertedClosing = function() {
|
||||
autoInsertedLineEnd = autoInsertedLineEnd.substr(1);
|
||||
autoInsertedBrackets--;
|
||||
};
|
||||
|
||||
this.add("braces", "insertion", function (state, action, editor, session, text) {
|
||||
if (text == '{') {
|
||||
var selection = editor.getSelectionRange();
|
||||
var selected = session.doc.getTextRange(selection);
|
||||
if (selected !== "" && selected !== "{") {
|
||||
return {
|
||||
text: '{' + selected + '}',
|
||||
selection: false
|
||||
};
|
||||
} else if (CstyleBehaviour.isSaneInsertion(editor, session)) {
|
||||
CstyleBehaviour.recordAutoInsert(editor, session, "}");
|
||||
return {
|
||||
text: '{}',
|
||||
selection: [1, 1]
|
||||
};
|
||||
}
|
||||
} else if (text == '}') {
|
||||
var cursor = editor.getCursorPosition();
|
||||
var line = session.doc.getLine(cursor.row);
|
||||
var rightChar = line.substring(cursor.column, cursor.column + 1);
|
||||
if (rightChar == '}') {
|
||||
var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row});
|
||||
if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {
|
||||
CstyleBehaviour.popAutoInsertedClosing();
|
||||
return {
|
||||
text: '',
|
||||
selection: [1, 1]
|
||||
};
|
||||
}
|
||||
}
|
||||
} else if (text == "\n" || text == "\r\n") {
|
||||
var cursor = editor.getCursorPosition();
|
||||
var line = session.doc.getLine(cursor.row);
|
||||
var rightChar = line.substring(cursor.column, cursor.column + 1);
|
||||
if (rightChar == '}') {
|
||||
var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column + 1});
|
||||
if (!openBracePos)
|
||||
return null;
|
||||
|
||||
var indent = this.getNextLineIndent(state, line.substring(0, line.length - 1), session.getTabString());
|
||||
var next_indent = this.$getIndent(session.doc.getLine(openBracePos.row));
|
||||
|
||||
return {
|
||||
text: '\n' + indent + '\n' + next_indent,
|
||||
selection: [1, indent.length, 1, indent.length]
|
||||
};
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
this.add("braces", "deletion", function (state, action, editor, session, range) {
|
||||
var selected = session.doc.getTextRange(range);
|
||||
if (!range.isMultiLine() && selected == '{') {
|
||||
var line = session.doc.getLine(range.start.row);
|
||||
var rightChar = line.substring(range.end.column, range.end.column + 1);
|
||||
if (rightChar == '}') {
|
||||
range.end.column++;
|
||||
return range;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
this.add("parens", "insertion", function (state, action, editor, session, text) {
|
||||
if (text == '(') {
|
||||
var selection = editor.getSelectionRange();
|
||||
var selected = session.doc.getTextRange(selection);
|
||||
if (selected !== "") {
|
||||
return {
|
||||
text: '(' + selected + ')',
|
||||
selection: false
|
||||
};
|
||||
} else if (CstyleBehaviour.isSaneInsertion(editor, session)) {
|
||||
CstyleBehaviour.recordAutoInsert(editor, session, ")");
|
||||
return {
|
||||
text: '()',
|
||||
selection: [1, 1]
|
||||
};
|
||||
}
|
||||
} else if (text == ')') {
|
||||
var cursor = editor.getCursorPosition();
|
||||
var line = session.doc.getLine(cursor.row);
|
||||
var rightChar = line.substring(cursor.column, cursor.column + 1);
|
||||
if (rightChar == ')') {
|
||||
var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row});
|
||||
if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {
|
||||
CstyleBehaviour.popAutoInsertedClosing();
|
||||
return {
|
||||
text: '',
|
||||
selection: [1, 1]
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
this.add("parens", "deletion", function (state, action, editor, session, range) {
|
||||
var selected = session.doc.getTextRange(range);
|
||||
if (!range.isMultiLine() && selected == '(') {
|
||||
var line = session.doc.getLine(range.start.row);
|
||||
var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
|
||||
if (rightChar == ')') {
|
||||
range.end.column++;
|
||||
return range;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
this.add("brackets", "insertion", function (state, action, editor, session, text) {
|
||||
if (text == '[') {
|
||||
var selection = editor.getSelectionRange();
|
||||
var selected = session.doc.getTextRange(selection);
|
||||
if (selected !== "") {
|
||||
return {
|
||||
text: '[' + selected + ']',
|
||||
selection: false
|
||||
};
|
||||
} else if (CstyleBehaviour.isSaneInsertion(editor, session)) {
|
||||
CstyleBehaviour.recordAutoInsert(editor, session, "]");
|
||||
return {
|
||||
text: '[]',
|
||||
selection: [1, 1]
|
||||
};
|
||||
}
|
||||
} else if (text == ']') {
|
||||
var cursor = editor.getCursorPosition();
|
||||
var line = session.doc.getLine(cursor.row);
|
||||
var rightChar = line.substring(cursor.column, cursor.column + 1);
|
||||
if (rightChar == ']') {
|
||||
var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row});
|
||||
if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {
|
||||
CstyleBehaviour.popAutoInsertedClosing();
|
||||
return {
|
||||
text: '',
|
||||
selection: [1, 1]
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
this.add("brackets", "deletion", function (state, action, editor, session, range) {
|
||||
var selected = session.doc.getTextRange(range);
|
||||
if (!range.isMultiLine() && selected == '[') {
|
||||
var line = session.doc.getLine(range.start.row);
|
||||
var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
|
||||
if (rightChar == ']') {
|
||||
range.end.column++;
|
||||
return range;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
this.add("string_dquotes", "insertion", function (state, action, editor, session, text) {
|
||||
if (text == '"' || text == "'") {
|
||||
var quote = text;
|
||||
var selection = editor.getSelectionRange();
|
||||
var selected = session.doc.getTextRange(selection);
|
||||
if (selected !== "") {
|
||||
return {
|
||||
text: quote + selected + quote,
|
||||
selection: false
|
||||
};
|
||||
} else {
|
||||
var cursor = editor.getCursorPosition();
|
||||
var line = session.doc.getLine(cursor.row);
|
||||
var leftChar = line.substring(cursor.column-1, cursor.column);
|
||||
if (leftChar == '\\') {
|
||||
return null;
|
||||
}
|
||||
var tokens = session.getTokens(selection.start.row);
|
||||
var col = 0, token;
|
||||
var quotepos = -1; // Track whether we're inside an open quote.
|
||||
|
||||
for (var x = 0; x < tokens.length; x++) {
|
||||
token = tokens[x];
|
||||
if (token.type == "string") {
|
||||
quotepos = -1;
|
||||
} else if (quotepos < 0) {
|
||||
quotepos = token.value.indexOf(quote);
|
||||
}
|
||||
if ((token.value.length + col) > selection.start.column) {
|
||||
break;
|
||||
}
|
||||
col += tokens[x].value.length;
|
||||
}
|
||||
if (!token || (quotepos < 0 && token.type !== "comment" && (token.type !== "string" || ((selection.start.column !== token.value.length+col-1) && token.value.lastIndexOf(quote) === token.value.length-1)))) {
|
||||
return {
|
||||
text: quote + quote,
|
||||
selection: [1,1]
|
||||
};
|
||||
} else if (token && token.type === "string") {
|
||||
var rightChar = line.substring(cursor.column, cursor.column + 1);
|
||||
if (rightChar == quote) {
|
||||
return {
|
||||
text: '',
|
||||
selection: [1, 1]
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
this.add("string_dquotes", "deletion", function (state, action, editor, session, range) {
|
||||
var selected = session.doc.getTextRange(range);
|
||||
if (!range.isMultiLine() && (selected == '"' || selected == "'")) {
|
||||
var line = session.doc.getLine(range.start.row);
|
||||
var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
|
||||
if (rightChar == '"') {
|
||||
range.end.column++;
|
||||
return range;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
};
|
||||
|
||||
oop.inherits(CstyleBehaviour, Behaviour);
|
||||
|
||||
exports.CstyleBehaviour = CstyleBehaviour;
|
||||
});
|
||||
|
||||
ace.define('ace/mode/folding/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/range', 'ace/mode/folding/fold_mode'], function(require, exports, module) {
|
||||
|
||||
|
||||
var oop = require("../../lib/oop");
|
||||
var Range = require("../../range").Range;
|
||||
var BaseFoldMode = require("./fold_mode").FoldMode;
|
||||
|
||||
var FoldMode = exports.FoldMode = function() {};
|
||||
oop.inherits(FoldMode, BaseFoldMode);
|
||||
|
||||
(function() {
|
||||
|
||||
this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/;
|
||||
this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/;
|
||||
|
||||
this.getFoldWidgetRange = function(session, foldStyle, row) {
|
||||
var line = session.getLine(row);
|
||||
var match = line.match(this.foldingStartMarker);
|
||||
if (match) {
|
||||
var i = match.index;
|
||||
|
||||
if (match[1])
|
||||
return this.openingBracketBlock(session, match[1], row, i);
|
||||
|
||||
return session.getCommentFoldRange(row, i + match[0].length, 1);
|
||||
}
|
||||
|
||||
if (foldStyle !== "markbeginend")
|
||||
return;
|
||||
|
||||
var match = line.match(this.foldingStopMarker);
|
||||
if (match) {
|
||||
var i = match.index + match[0].length;
|
||||
|
||||
if (match[1])
|
||||
return this.closingBracketBlock(session, match[1], row, i);
|
||||
|
||||
return session.getCommentFoldRange(row, i, -1);
|
||||
}
|
||||
};
|
||||
|
||||
}).call(FoldMode.prototype);
|
||||
|
||||
});
|
742
sense/lib/src-noconflict/mode-sense.js
Normal file
742
sense/lib/src-noconflict/mode-sense.js
Normal file
|
@ -0,0 +1,742 @@
|
|||
ace.define('ace/mode/sense', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/sense_json_highlight_rules', 'ace/mode/matching_brace_outdent', 'ace/mode/behaviour/cstyle', 'ace/mode/folding/cstyle', 'ace/worker/worker_client'], function (require, exports, module) {
|
||||
|
||||
|
||||
var oop = require("../lib/oop");
|
||||
var TextMode = require("./text").Mode;
|
||||
var HighlightRules = require("./sense_json_highlight_rules").SenseJsonHighlightRules;
|
||||
var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
|
||||
var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;
|
||||
var CStyleFoldMode = require("./folding/cstyle").FoldMode;
|
||||
var WorkerClient = require("../worker/worker_client").WorkerClient;
|
||||
|
||||
|
||||
var Tokenizer = function (rules, flag) {
|
||||
this.constructor(rules, flag);
|
||||
};
|
||||
|
||||
|
||||
(function () {
|
||||
this.constructor = require("../tokenizer").Tokenizer;
|
||||
this.prototype = this.constructor.prototype;
|
||||
this.getLineTokens = function (line, startState) {
|
||||
var currentState;
|
||||
if (!startState) {
|
||||
currentState = { name: "start"};
|
||||
} else if (typeof startState === "string") {
|
||||
currentState = { name: startState };
|
||||
}
|
||||
else {
|
||||
currentState = startState;
|
||||
}
|
||||
|
||||
var state = this.rules[currentState.name];
|
||||
var mapping = this.matchMappings[currentState.name];
|
||||
var re = this.regExps[currentState.name];
|
||||
re.lastIndex = 0;
|
||||
|
||||
var match, tokens = [];
|
||||
|
||||
var lastIndex = 0;
|
||||
|
||||
var token = {
|
||||
type: null,
|
||||
value: ""
|
||||
};
|
||||
|
||||
while (match = re.exec(line)) {
|
||||
var type = "text";
|
||||
var rule = null;
|
||||
var value = [match[0]];
|
||||
|
||||
for (var i = 0; i < match.length - 2; i++) {
|
||||
if (match[i + 1] === undefined)
|
||||
continue;
|
||||
|
||||
rule = state[mapping[i].rule];
|
||||
|
||||
if (mapping[i].len > 1)
|
||||
value = match.slice(i + 2, i + 1 + mapping[i].len);
|
||||
if (typeof rule.token == "function")
|
||||
type = rule.token.apply(this, value);
|
||||
else
|
||||
type = rule.token;
|
||||
|
||||
var next = rule.next;
|
||||
if (typeof next == "function") {
|
||||
next = next.call(this, currentState, type, value);
|
||||
}
|
||||
if (typeof next == "string") next = { name: next };
|
||||
|
||||
if (next) {
|
||||
currentState = next;
|
||||
state = this.rules[currentState.name];
|
||||
mapping = this.matchMappings[currentState.name];
|
||||
lastIndex = re.lastIndex;
|
||||
|
||||
re = this.regExps[currentState.name];
|
||||
|
||||
if (re === undefined) {
|
||||
throw new Error("You indicated a state of " + next + " to go to, but it doesn't exist!");
|
||||
}
|
||||
|
||||
re.lastIndex = lastIndex;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if (value[0]) {
|
||||
if (typeof type == "string") {
|
||||
value = [value.join("")];
|
||||
type = [type];
|
||||
}
|
||||
for (var i = 0; i < value.length; i++) {
|
||||
if (!value[i])
|
||||
continue;
|
||||
|
||||
if ((!rule || rule.merge || type[i] === "text") && token.type === type[i]) {
|
||||
token.value += value[i];
|
||||
} else {
|
||||
if (token.type)
|
||||
tokens.push(token);
|
||||
|
||||
token = {
|
||||
type: type[i],
|
||||
value: value[i]
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (lastIndex == line.length)
|
||||
break;
|
||||
|
||||
lastIndex = re.lastIndex;
|
||||
}
|
||||
|
||||
if (token.type)
|
||||
tokens.push(token);
|
||||
|
||||
return {
|
||||
tokens: tokens,
|
||||
state: currentState
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
return this;
|
||||
|
||||
}).call(Tokenizer.prototype);
|
||||
|
||||
|
||||
var Mode = function () {
|
||||
this.$tokenizer = new Tokenizer(new HighlightRules().getRules());
|
||||
this.$outdent = new MatchingBraceOutdent();
|
||||
this.$behaviour = new CstyleBehaviour();
|
||||
this.foldingRules = new CStyleFoldMode();
|
||||
};
|
||||
oop.inherits(Mode, TextMode);
|
||||
|
||||
(function () {
|
||||
|
||||
this.getNextLineIndent = function (state, line, tab) {
|
||||
var indent = this.$getIndent(line);
|
||||
|
||||
if (state != "double_q_string") {
|
||||
var match = line.match(/^.*[\{\(\[]\s*$/);
|
||||
if (match) {
|
||||
indent += tab;
|
||||
}
|
||||
}
|
||||
|
||||
return indent;
|
||||
};
|
||||
|
||||
this.checkOutdent = function (state, line, input) {
|
||||
return this.$outdent.checkOutdent(line, input);
|
||||
};
|
||||
|
||||
this.autoOutdent = function (state, doc, row) {
|
||||
this.$outdent.autoOutdent(doc, row);
|
||||
};
|
||||
|
||||
this.createWorker = function (session) {
|
||||
var worker = new WorkerClient(["ace"], "ace/mode/sense_worker", "SenseWorker");
|
||||
worker.attachToDocument(session.getDocument());
|
||||
|
||||
|
||||
worker.on("error", function (e) {
|
||||
session.setAnnotations([e.data]);
|
||||
});
|
||||
|
||||
worker.on("ok", function (anno) {
|
||||
session.setAnnotations(anno.data);
|
||||
});
|
||||
|
||||
return worker;
|
||||
};
|
||||
|
||||
|
||||
}).call(Mode.prototype);
|
||||
|
||||
exports.Mode = Mode;
|
||||
});
|
||||
|
||||
ace.define('ace/mode/sense_json_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text_highlight_rules'], function (require, exports, module) {
|
||||
|
||||
|
||||
var oop = require("../lib/oop");
|
||||
var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
|
||||
|
||||
var SenseJsonHighlightRules = function () {
|
||||
|
||||
function mergeTokens(/* ... */) {
|
||||
return [].concat.apply([], arguments);
|
||||
}
|
||||
|
||||
function addEOL(tokens, reg, nextIfEOL, normalNext) {
|
||||
if (typeof reg == "object") reg = reg.source;
|
||||
return [
|
||||
{ token: tokens.concat(["whitespace"]), regex: reg + "(\\s*)$", next: nextIfEOL },
|
||||
{ token: tokens, regex: reg, next: normalNext }
|
||||
];
|
||||
}
|
||||
|
||||
function scopeIncrement(next) {
|
||||
return function (state) {
|
||||
state = { name: next, depth: state.depth };
|
||||
if (!state.depth) {
|
||||
state.depth = 1;
|
||||
}
|
||||
else {
|
||||
state.depth++;
|
||||
}
|
||||
return state;
|
||||
}
|
||||
}
|
||||
|
||||
function scopeDecrement(next, nextIfZero) {
|
||||
return function (state) {
|
||||
state = { name: state.name, depth: state.depth };
|
||||
if (!state.depth) {
|
||||
state.name = next;
|
||||
}
|
||||
else {
|
||||
state.depth--;
|
||||
state.name = state.depth == 0 ? nextIfZero : next;
|
||||
}
|
||||
return state;
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
// regexp must not have capturing parentheses. Use (?:) instead.
|
||||
// regexps are ordered -> the first match is used
|
||||
this.$rules = {
|
||||
"start": mergeTokens([
|
||||
{ token: "comment", regex: /^#.*$/},
|
||||
{ token: "paren.lparen", regex: "{", next: scopeIncrement("json") },
|
||||
],
|
||||
addEOL(["method"], /([a-zA-Z]+)/, "start", "method_sep")
|
||||
,
|
||||
[
|
||||
{
|
||||
token: "whitespace",
|
||||
regex: "\\s+"
|
||||
},
|
||||
{
|
||||
token: "text",
|
||||
regex: ".+?"
|
||||
}
|
||||
]),
|
||||
"method_sep": mergeTokens(
|
||||
addEOL(["whitespace", "url.slash"], /(\s+)(\/)/, "start", "indices"),
|
||||
addEOL(["whitespace"], /(\s+)/, "start", "indices")
|
||||
),
|
||||
"indices": mergeTokens(
|
||||
addEOL(["url.scheme", "url.host", "url.slash"], /([^:]+:\/\/)([^?\/\s]*)(\/?)/, "start"),
|
||||
addEOL(["url.index"], /(_all)/, "start"),
|
||||
addEOL(["url.endpoint"], /(_[^\/?]+)/, "start", "urlRest"),
|
||||
addEOL(["url.index"], /([^\/?,]+)/, "start"),
|
||||
addEOL(["url.comma"], /(,)/, "start"),
|
||||
addEOL(["url.slash"], /(\/)/, "start", "types"),
|
||||
addEOL(["url.questionmark"], /(\?)/, "start", "urlParams")
|
||||
),
|
||||
"types": mergeTokens(
|
||||
addEOL(["url.endpoint"], /(_[^\/?]+)/, "start", "urlRest"),
|
||||
addEOL(["url.type"], /([^\/?,]+)/, "start"),
|
||||
addEOL(["url.comma"], /(,)/, "start"),
|
||||
addEOL(["url.slash"], /(\/)/, "start", "id"),
|
||||
addEOL(["url.questionmark"], /(\?)/, "start", "urlParams")
|
||||
),
|
||||
"id": mergeTokens(
|
||||
addEOL(["url.endpoint"], /(_[^\/?]+)/, "start", "urlRest"),
|
||||
addEOL(["url.id"], /([^\/?]+)/, "start"),
|
||||
addEOL(["url.slash"], /(\/)/, "start", "urlRest"),
|
||||
addEOL(["url.questionmark"], /(\?)/, "start", "urlParams")
|
||||
),
|
||||
"urlRest": mergeTokens(
|
||||
addEOL(["url.part"], /([^?\/]+)/, "start"),
|
||||
addEOL(["url.slash"], /(\/)/, "start"),
|
||||
addEOL(["url.questionmark"], /(\?)/, "start", "urlParams")
|
||||
),
|
||||
"urlParams": mergeTokens(
|
||||
addEOL(["url.param", "url.equal", "url.value"], /([^&=]+)(=)([^&]*)/, "start"),
|
||||
addEOL(["url.param"], /([^&=]+)/, "start"),
|
||||
addEOL(["url.amp"], /(&)/, "start")
|
||||
),
|
||||
|
||||
|
||||
"json": [
|
||||
{
|
||||
token: "variable", // single line
|
||||
regex: '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]\\s*(?=:)'
|
||||
},
|
||||
{
|
||||
token: "string", // single line
|
||||
regex: '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'
|
||||
},
|
||||
{
|
||||
token: "constant.numeric", // hex
|
||||
regex: "0[xX][0-9a-fA-F]+\\b"
|
||||
},
|
||||
{
|
||||
token: "constant.numeric", // float
|
||||
regex: "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"
|
||||
},
|
||||
{
|
||||
token: "constant.language.boolean",
|
||||
regex: "(?:true|false)\\b"
|
||||
},
|
||||
{
|
||||
token: "invalid.illegal", // single quoted strings are not allowed
|
||||
regex: "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"
|
||||
},
|
||||
{
|
||||
token: "invalid.illegal", // comments are not allowed
|
||||
regex: "\\/\\/.*$"
|
||||
},
|
||||
{
|
||||
token: "paren.lparen",
|
||||
regex: "{",
|
||||
next: scopeIncrement("json")
|
||||
},
|
||||
{
|
||||
token: "paren.lparen",
|
||||
regex: "[[(]"
|
||||
},
|
||||
{
|
||||
token: "paren.rparen",
|
||||
regex: "[\\])]"
|
||||
},
|
||||
{
|
||||
token: "paren.rparen",
|
||||
regex: "}",
|
||||
next: scopeDecrement("json", "start")
|
||||
},
|
||||
{
|
||||
token: "punctuation.comma",
|
||||
regex: ","
|
||||
},
|
||||
{
|
||||
token: "punctuation.colon",
|
||||
regex: ":"
|
||||
},
|
||||
{
|
||||
token: "whitespace",
|
||||
regex: "\\s+"
|
||||
},
|
||||
{
|
||||
token: "text",
|
||||
regex: ".+?"
|
||||
}
|
||||
],
|
||||
"double_q_string": [
|
||||
{
|
||||
token: "string",
|
||||
regex: '[^"]+'
|
||||
},
|
||||
{
|
||||
token: "punctuation.end_quote",
|
||||
regex: '"',
|
||||
next: "json"
|
||||
},
|
||||
{
|
||||
token: "string",
|
||||
regex: "",
|
||||
next: "json"
|
||||
}
|
||||
]
|
||||
}
|
||||
};
|
||||
|
||||
oop.inherits(SenseJsonHighlightRules, TextHighlightRules);
|
||||
|
||||
exports.SenseJsonHighlightRules = SenseJsonHighlightRules;
|
||||
|
||||
});
|
||||
|
||||
ace.define('ace/mode/matching_brace_outdent', ['require', 'exports', 'module' , 'ace/range'], function (require, exports, module) {
|
||||
|
||||
|
||||
var Range = require("../range").Range;
|
||||
|
||||
var MatchingBraceOutdent = function () {
|
||||
};
|
||||
|
||||
(function () {
|
||||
|
||||
this.checkOutdent = function (line, input) {
|
||||
if (!/^\s+$/.test(line))
|
||||
return false;
|
||||
|
||||
return /^\s*\}/.test(input);
|
||||
};
|
||||
|
||||
this.autoOutdent = function (doc, row) {
|
||||
var line = doc.getLine(row);
|
||||
var match = line.match(/^(\s*\})/);
|
||||
|
||||
if (!match) return 0;
|
||||
|
||||
var column = match[1].length;
|
||||
var openBracePos = doc.findMatchingBracket({row: row, column: column});
|
||||
|
||||
if (!openBracePos || openBracePos.row == row) return 0;
|
||||
|
||||
var indent = this.$getIndent(doc.getLine(openBracePos.row));
|
||||
doc.replace(new Range(row, 0, row, column - 1), indent);
|
||||
};
|
||||
|
||||
this.$getIndent = function (line) {
|
||||
var match = line.match(/^(\s+)/);
|
||||
if (match) {
|
||||
return match[1];
|
||||
}
|
||||
|
||||
return "";
|
||||
};
|
||||
|
||||
}).call(MatchingBraceOutdent.prototype);
|
||||
|
||||
exports.MatchingBraceOutdent = MatchingBraceOutdent;
|
||||
});
|
||||
|
||||
ace.define('ace/mode/behaviour/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/behaviour', 'ace/token_iterator'], function (require, exports, module) {
|
||||
|
||||
|
||||
var oop = require("../../lib/oop");
|
||||
var Behaviour = require("../behaviour").Behaviour;
|
||||
var TokenIterator = require("../../token_iterator").TokenIterator;
|
||||
|
||||
var autoInsertedBrackets = 0;
|
||||
var autoInsertedRow = -1;
|
||||
var autoInsertedLineEnd = "";
|
||||
|
||||
var CstyleBehaviour = function () {
|
||||
|
||||
CstyleBehaviour.isSaneInsertion = function (editor, session) {
|
||||
var cursor = editor.getCursorPosition();
|
||||
var iterator = new TokenIterator(session, cursor.row, cursor.column);
|
||||
if (!this.$matchTokenType(iterator.getCurrentToken() || "text", ["text", "paren.rparen"])) {
|
||||
iterator = new TokenIterator(session, cursor.row, cursor.column + 1);
|
||||
if (!this.$matchTokenType(iterator.getCurrentToken() || "text", ["text", "paren.rparen"]))
|
||||
return false;
|
||||
}
|
||||
iterator.stepForward();
|
||||
return iterator.getCurrentTokenRow() !== cursor.row ||
|
||||
this.$matchTokenType(iterator.getCurrentToken() || "text", ["text", "comment", "paren.rparen"]);
|
||||
};
|
||||
|
||||
CstyleBehaviour.$matchTokenType = function (token, types) {
|
||||
return types.indexOf(token.type || token) > -1;
|
||||
};
|
||||
|
||||
CstyleBehaviour.recordAutoInsert = function (editor, session, bracket) {
|
||||
var cursor = editor.getCursorPosition();
|
||||
var line = session.doc.getLine(cursor.row);
|
||||
if (!this.isAutoInsertedClosing(cursor, line, autoInsertedLineEnd[0]))
|
||||
autoInsertedBrackets = 0;
|
||||
autoInsertedRow = cursor.row;
|
||||
autoInsertedLineEnd = bracket + line.substr(cursor.column);
|
||||
autoInsertedBrackets++;
|
||||
};
|
||||
|
||||
CstyleBehaviour.isAutoInsertedClosing = function (cursor, line, bracket) {
|
||||
return autoInsertedBrackets > 0 &&
|
||||
cursor.row === autoInsertedRow &&
|
||||
bracket === autoInsertedLineEnd[0] &&
|
||||
line.substr(cursor.column) === autoInsertedLineEnd;
|
||||
};
|
||||
|
||||
CstyleBehaviour.popAutoInsertedClosing = function () {
|
||||
autoInsertedLineEnd = autoInsertedLineEnd.substr(1);
|
||||
autoInsertedBrackets--;
|
||||
};
|
||||
|
||||
this.add("braces", "insertion", function (state, action, editor, session, text) {
|
||||
if (text == '{') {
|
||||
var selection = editor.getSelectionRange();
|
||||
var selected = session.doc.getTextRange(selection);
|
||||
if (selected !== "" && selected !== "{") {
|
||||
return {
|
||||
text: '{' + selected + '}',
|
||||
selection: false
|
||||
};
|
||||
} else if (CstyleBehaviour.isSaneInsertion(editor, session)) {
|
||||
CstyleBehaviour.recordAutoInsert(editor, session, "}");
|
||||
return {
|
||||
text: '{}',
|
||||
selection: [1, 1]
|
||||
};
|
||||
}
|
||||
} else if (text == '}') {
|
||||
var cursor = editor.getCursorPosition();
|
||||
var line = session.doc.getLine(cursor.row);
|
||||
var rightChar = line.substring(cursor.column, cursor.column + 1);
|
||||
if (rightChar == '}') {
|
||||
var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row});
|
||||
if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {
|
||||
CstyleBehaviour.popAutoInsertedClosing();
|
||||
return {
|
||||
text: '',
|
||||
selection: [1, 1]
|
||||
};
|
||||
}
|
||||
}
|
||||
} else if (text == "\n" || text == "\r\n") {
|
||||
var cursor = editor.getCursorPosition();
|
||||
var line = session.doc.getLine(cursor.row);
|
||||
var rightChar = line.substring(cursor.column, cursor.column + 1);
|
||||
if (rightChar == '}') {
|
||||
var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column + 1});
|
||||
if (!openBracePos)
|
||||
return null;
|
||||
|
||||
var indent = this.getNextLineIndent(state, line.substring(0, line.length - 1), session.getTabString());
|
||||
var next_indent = this.$getIndent(session.doc.getLine(openBracePos.row));
|
||||
|
||||
return {
|
||||
text: '\n' + indent + '\n' + next_indent,
|
||||
selection: [1, indent.length, 1, indent.length]
|
||||
};
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
this.add("braces", "deletion", function (state, action, editor, session, range) {
|
||||
var selected = session.doc.getTextRange(range);
|
||||
if (!range.isMultiLine() && selected == '{') {
|
||||
var line = session.doc.getLine(range.start.row);
|
||||
var rightChar = line.substring(range.end.column, range.end.column + 1);
|
||||
if (rightChar == '}') {
|
||||
range.end.column++;
|
||||
return range;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
this.add("parens", "insertion", function (state, action, editor, session, text) {
|
||||
if (text == '(') {
|
||||
var selection = editor.getSelectionRange();
|
||||
var selected = session.doc.getTextRange(selection);
|
||||
if (selected !== "") {
|
||||
return {
|
||||
text: '(' + selected + ')',
|
||||
selection: false
|
||||
};
|
||||
} else if (CstyleBehaviour.isSaneInsertion(editor, session)) {
|
||||
CstyleBehaviour.recordAutoInsert(editor, session, ")");
|
||||
return {
|
||||
text: '()',
|
||||
selection: [1, 1]
|
||||
};
|
||||
}
|
||||
} else if (text == ')') {
|
||||
var cursor = editor.getCursorPosition();
|
||||
var line = session.doc.getLine(cursor.row);
|
||||
var rightChar = line.substring(cursor.column, cursor.column + 1);
|
||||
if (rightChar == ')') {
|
||||
var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row});
|
||||
if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {
|
||||
CstyleBehaviour.popAutoInsertedClosing();
|
||||
return {
|
||||
text: '',
|
||||
selection: [1, 1]
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
this.add("parens", "deletion", function (state, action, editor, session, range) {
|
||||
var selected = session.doc.getTextRange(range);
|
||||
if (!range.isMultiLine() && selected == '(') {
|
||||
var line = session.doc.getLine(range.start.row);
|
||||
var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
|
||||
if (rightChar == ')') {
|
||||
range.end.column++;
|
||||
return range;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
this.add("brackets", "insertion", function (state, action, editor, session, text) {
|
||||
if (text == '[') {
|
||||
var selection = editor.getSelectionRange();
|
||||
var selected = session.doc.getTextRange(selection);
|
||||
if (selected !== "") {
|
||||
return {
|
||||
text: '[' + selected + ']',
|
||||
selection: false
|
||||
};
|
||||
} else if (CstyleBehaviour.isSaneInsertion(editor, session)) {
|
||||
CstyleBehaviour.recordAutoInsert(editor, session, "]");
|
||||
return {
|
||||
text: '[]',
|
||||
selection: [1, 1]
|
||||
};
|
||||
}
|
||||
} else if (text == ']') {
|
||||
var cursor = editor.getCursorPosition();
|
||||
var line = session.doc.getLine(cursor.row);
|
||||
var rightChar = line.substring(cursor.column, cursor.column + 1);
|
||||
if (rightChar == ']') {
|
||||
var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row});
|
||||
if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {
|
||||
CstyleBehaviour.popAutoInsertedClosing();
|
||||
return {
|
||||
text: '',
|
||||
selection: [1, 1]
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
this.add("brackets", "deletion", function (state, action, editor, session, range) {
|
||||
var selected = session.doc.getTextRange(range);
|
||||
if (!range.isMultiLine() && selected == '[') {
|
||||
var line = session.doc.getLine(range.start.row);
|
||||
var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
|
||||
if (rightChar == ']') {
|
||||
range.end.column++;
|
||||
return range;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
this.add("string_dquotes", "insertion", function (state, action, editor, session, text) {
|
||||
if (text == '"' || text == "'") {
|
||||
var quote = text;
|
||||
var selection = editor.getSelectionRange();
|
||||
var selected = session.doc.getTextRange(selection);
|
||||
if (selected !== "") {
|
||||
return {
|
||||
text: quote + selected + quote,
|
||||
selection: false
|
||||
};
|
||||
} else {
|
||||
var cursor = editor.getCursorPosition();
|
||||
var line = session.doc.getLine(cursor.row);
|
||||
var leftChar = line.substring(cursor.column - 1, cursor.column);
|
||||
if (leftChar == '\\') {
|
||||
return null;
|
||||
}
|
||||
var tokens = session.getTokens(selection.start.row);
|
||||
var col = 0, token;
|
||||
var quotepos = -1; // Track whether we're inside an open quote.
|
||||
|
||||
for (var x = 0; x < tokens.length; x++) {
|
||||
token = tokens[x];
|
||||
if (token.type == "string") {
|
||||
quotepos = -1;
|
||||
} else if (quotepos < 0) {
|
||||
quotepos = token.value.indexOf(quote);
|
||||
}
|
||||
if ((token.value.length + col) > selection.start.column) {
|
||||
break;
|
||||
}
|
||||
col += tokens[x].value.length;
|
||||
}
|
||||
if (!token || (quotepos < 0 && token.type !== "comment" && (token.type !== "string" || ((selection.start.column !== token.value.length + col - 1) && token.value.lastIndexOf(quote) === token.value.length - 1)))) {
|
||||
return {
|
||||
text: quote + quote,
|
||||
selection: [1, 1]
|
||||
};
|
||||
} else if (token && token.type === "string") {
|
||||
var rightChar = line.substring(cursor.column, cursor.column + 1);
|
||||
if (rightChar == quote) {
|
||||
return {
|
||||
text: '',
|
||||
selection: [1, 1]
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
this.add("string_dquotes", "deletion", function (state, action, editor, session, range) {
|
||||
var selected = session.doc.getTextRange(range);
|
||||
if (!range.isMultiLine() && (selected == '"' || selected == "'")) {
|
||||
var line = session.doc.getLine(range.start.row);
|
||||
var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
|
||||
if (rightChar == '"') {
|
||||
range.end.column++;
|
||||
return range;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
};
|
||||
|
||||
oop.inherits(CstyleBehaviour, Behaviour);
|
||||
|
||||
exports.CstyleBehaviour = CstyleBehaviour;
|
||||
});
|
||||
|
||||
ace.define('ace/mode/folding/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/range', 'ace/mode/folding/fold_mode'], function (require, exports, module) {
|
||||
|
||||
|
||||
var oop = require("../../lib/oop");
|
||||
var Range = require("../../range").Range;
|
||||
var BaseFoldMode = require("./fold_mode").FoldMode;
|
||||
|
||||
var FoldMode = exports.FoldMode = function () {
|
||||
};
|
||||
oop.inherits(FoldMode, BaseFoldMode);
|
||||
|
||||
(function () {
|
||||
|
||||
this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/;
|
||||
this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/;
|
||||
|
||||
this.getFoldWidgetRange = function (session, foldStyle, row) {
|
||||
var line = session.getLine(row);
|
||||
var match = line.match(this.foldingStartMarker);
|
||||
if (match) {
|
||||
var i = match.index;
|
||||
|
||||
if (match[1])
|
||||
return this.openingBracketBlock(session, match[1], row, i);
|
||||
|
||||
return session.getCommentFoldRange(row, i + match[0].length, 1);
|
||||
}
|
||||
|
||||
if (foldStyle !== "markbeginend")
|
||||
return;
|
||||
|
||||
var match = line.match(this.foldingStopMarker);
|
||||
if (match) {
|
||||
var i = match.index + match[0].length;
|
||||
|
||||
if (match[1])
|
||||
return this.closingBracketBlock(session, match[1], row, i);
|
||||
|
||||
return session.getCommentFoldRange(row, i, -1);
|
||||
}
|
||||
};
|
||||
|
||||
}).call(FoldMode.prototype);
|
||||
|
||||
});
|
140
sense/lib/src-noconflict/theme-sense-dark.js
Normal file
140
sense/lib/src-noconflict/theme-sense-dark.js
Normal file
|
@ -0,0 +1,140 @@
|
|||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Distributed under the BSD license:
|
||||
*
|
||||
* Copyright (c) 2010, Ajax.org B.V.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the name of Ajax.org B.V. nor the
|
||||
* names of its contributors may be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
|
||||
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
ace.define('ace/theme/sense-dark', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) {
|
||||
|
||||
exports.isDark = true;
|
||||
exports.cssClass = "ace-sense-dark";
|
||||
exports.cssText = ".ace-sense-dark .ace_gutter {\
|
||||
background: #2e3236;\
|
||||
color: #grey\
|
||||
}\
|
||||
.ace-sense-dark .ace_print-margin {\
|
||||
width: 1px;\
|
||||
background: #555651\
|
||||
}\
|
||||
.ace-sense-dark .ace_scroller {\
|
||||
background-color: #202328\
|
||||
}\
|
||||
.ace-sense-dark .ace_text-layer {\
|
||||
color: #F8F8F2\
|
||||
}\
|
||||
.ace-sense-dark .ace_cursor {\
|
||||
border-left: 2px solid #F8F8F0\
|
||||
}\
|
||||
.ace-sense-dark .ace_overwrite-cursors .ace_cursor {\
|
||||
border-left: 0px;\
|
||||
border-bottom: 1px solid #F8F8F0\
|
||||
}\
|
||||
.ace-sense-dark .ace_marker-layer .ace_selection {\
|
||||
background: #49483E\
|
||||
}\
|
||||
.ace-sense-dark.ace_multiselect .ace_selection.ace_start {\
|
||||
box-shadow: 0 0 3px 0px #272822;\
|
||||
border-radius: 2px\
|
||||
}\
|
||||
.ace-sense-dark .ace_marker-layer .ace_step {\
|
||||
background: rgb(102, 82, 0)\
|
||||
}\
|
||||
.ace-sense-dark .ace_marker-layer .ace_bracket {\
|
||||
margin: -1px 0 0 -1px;\
|
||||
border: 1px solid #49483E\
|
||||
}\
|
||||
.ace-sense-dark .ace_marker-layer .ace_active-line {\
|
||||
background: #202020\
|
||||
}\
|
||||
.ace-sense-dark .ace_gutter-active-line {\
|
||||
background-color: #272727\
|
||||
}\
|
||||
.ace-sense-dark .ace_marker-layer .ace_selected-word {\
|
||||
border: 1px solid #49483E\
|
||||
}\
|
||||
.ace-sense-dark .ace_invisible {\
|
||||
color: #49483E\
|
||||
}\
|
||||
.ace-sense-dark .ace_entity.ace_name.ace_tag,\
|
||||
.ace-sense-dark .ace_keyword,\
|
||||
.ace-sense-dark .ace_meta,\
|
||||
.ace-sense-dark .ace_storage {\
|
||||
color: #F92672\
|
||||
}\
|
||||
.ace-sense-dark .ace_constant.ace_character,\
|
||||
.ace-sense-dark .ace_constant.ace_language,\
|
||||
.ace-sense-dark .ace_constant.ace_numeric,\
|
||||
.ace-sense-dark .ace_constant.ace_other {\
|
||||
color: #AE81FF\
|
||||
}\
|
||||
.ace-sense-dark .ace_invalid {\
|
||||
color: #F8F8F0;\
|
||||
background-color: #F92672\
|
||||
}\
|
||||
.ace-sense-dark .ace_invalid.ace_deprecated {\
|
||||
color: #F8F8F0;\
|
||||
background-color: #AE81FF\
|
||||
}\
|
||||
.ace-sense-dark .ace_support.ace_constant,\
|
||||
.ace-sense-dark .ace_support.ace_function {\
|
||||
color: #66D9EF\
|
||||
}\
|
||||
.ace-sense-dark .ace_fold {\
|
||||
background-color: #A6E22E;\
|
||||
border-color: #F8F8F2\
|
||||
}\
|
||||
.ace-sense-dark .ace_storage.ace_type,\
|
||||
.ace-sense-dark .ace_support.ace_class,\
|
||||
.ace-sense-dark .ace_support.ace_type {\
|
||||
font-style: italic;\
|
||||
color: #66D9EF\
|
||||
}\
|
||||
.ace-sense-dark .ace_entity.ace_name.ace_function,\
|
||||
.ace-sense-dark .ace_entity.ace_other.ace_attribute-name,\
|
||||
.ace-sense-dark .ace_variable {\
|
||||
color: #A6E22E\
|
||||
}\
|
||||
.ace-sense-dark .ace_variable.ace_parameter {\
|
||||
font-style: italic;\
|
||||
color: #FD971F\
|
||||
}\
|
||||
.ace-sense-dark .ace_string {\
|
||||
color: #E6DB74\
|
||||
}\
|
||||
.ace-sense-dark .ace_comment {\
|
||||
color: #629755\
|
||||
}\
|
||||
.ace-sense-dark .ace_markup.ace_underline {\
|
||||
text-decoration: underline\
|
||||
}\
|
||||
.ace-sense-dark .ace_indent-guide {\
|
||||
background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNQ11D6z7Bq1ar/ABCKBG6g04U2AAAAAElFTkSuQmCC) right repeat-y\
|
||||
}";
|
||||
|
||||
var dom = require("../lib/dom");
|
||||
dom.importCssString(exports.cssText, exports.cssClass);
|
||||
});
|
2232
sense/lib/src-noconflict/worker-json.js
Normal file
2232
sense/lib/src-noconflict/worker-json.js
Normal file
File diff suppressed because it is too large
Load diff
2371
sense/lib/src-noconflict/worker-sense.js
Normal file
2371
sense/lib/src-noconflict/worker-sense.js
Normal file
File diff suppressed because it is too large
Load diff
1395
sense/src/autocomplete.js
Normal file
1395
sense/src/autocomplete.js
Normal file
File diff suppressed because it is too large
Load diff
4
sense/src/background.js
Normal file
4
sense/src/background.js
Normal file
|
@ -0,0 +1,4 @@
|
|||
chrome.browserAction.onClicked.addListener(function (tab) {
|
||||
chrome.tabs.create({'url': chrome.extension.getURL('index.html')}, function (tab) {
|
||||
});
|
||||
});
|
566
sense/src/base.js
Normal file
566
sense/src/base.js
Normal file
|
@ -0,0 +1,566 @@
|
|||
if (!sense)
|
||||
sense = { };
|
||||
|
||||
sense.VERSION = "0.9.0";
|
||||
|
||||
function autoRetryIfTokenizing(func, cancelAlreadyScheduledCalls) {
|
||||
var timer = false;
|
||||
var wrapper;
|
||||
wrapper = function () {
|
||||
|
||||
if (!sense.utils.isTokenizationStable()) {
|
||||
var self = this;
|
||||
var args = arguments;
|
||||
if (cancelAlreadyScheduledCalls && typeof timer == "number") {
|
||||
clearTimeout(timer);
|
||||
}
|
||||
timer = setTimeout(function () {
|
||||
wrapper.apply(self, args)
|
||||
}, 100);
|
||||
return undefined;
|
||||
}
|
||||
timer = true;
|
||||
try {
|
||||
// now call the original method
|
||||
return func.apply(this, arguments);
|
||||
}
|
||||
finally {
|
||||
timer = false;
|
||||
}
|
||||
}
|
||||
return wrapper;
|
||||
}
|
||||
|
||||
function resetToValues(server, content) {
|
||||
if (server != null) {
|
||||
$("#es_server").val(server);
|
||||
sense.mappings.notifyServerChange(server);
|
||||
}
|
||||
if (content != null) sense.editor.getSession().setValue(content);
|
||||
sense.output.getSession().setValue("");
|
||||
|
||||
}
|
||||
|
||||
function constructESUrl(server, url) {
|
||||
if (url.indexOf("://") >= 0) return url;
|
||||
if (server.indexOf("://") < 0) server = "http://" + server;
|
||||
if (server.substr(-1) == "/") {
|
||||
server = server.substr(0, server.length - 1);
|
||||
}
|
||||
if (url.charAt(0) === "/") url = url.substr(1);
|
||||
|
||||
return server + "/" + url;
|
||||
}
|
||||
|
||||
function callES(server, url, method, data, successCallback, completeCallback) {
|
||||
|
||||
url = constructESUrl(server, url);
|
||||
var uname_password_re = /^(https?:\/\/)?(?:(?:([^\/]*):)?([^\/]*?)@)?(.*)$/;
|
||||
var url_parts = url.match(uname_password_re);
|
||||
|
||||
var uname = url_parts[2];
|
||||
var password = url_parts[3];
|
||||
url = url_parts[1] + url_parts[4];
|
||||
console.log("Calling " + url + " (uname: " + uname + " pwd: " + password + ")");
|
||||
if (data && method == "GET") method = "POST";
|
||||
|
||||
$.ajax({
|
||||
url: url,
|
||||
data: method == "GET" ? null : data,
|
||||
// xhrFields: {
|
||||
// withCredentials: true
|
||||
// },
|
||||
// headers: {
|
||||
// "Authorization": "Basic " + btoa(uname + ":" + password)
|
||||
// },
|
||||
// beforeSend: function(xhr){
|
||||
// xhr.withCredentials = true;
|
||||
// xhr.setRequestHeader("Authorization", "Basic " + btoa(uname + ":" + password));
|
||||
// },
|
||||
|
||||
password: password,
|
||||
username: uname,
|
||||
crossDomain: true,
|
||||
type: method,
|
||||
dataType: "json",
|
||||
complete: completeCallback,
|
||||
success: successCallback
|
||||
});
|
||||
}
|
||||
|
||||
function submitCurrentRequestToES() {
|
||||
var req = sense.utils.getCurrentRequest();
|
||||
if (!req) return;
|
||||
|
||||
$("#notification").text("Calling ES....").css("visibility", "visible");
|
||||
sense.output.getSession().setValue('');
|
||||
|
||||
var es_server = $("#es_server").val(),
|
||||
es_url = req.url,
|
||||
es_method = req.method,
|
||||
es_data = req.data.join("\n");
|
||||
if (es_data) es_data += "\n"; //append a new line for bulk requests.
|
||||
|
||||
callES(es_server, es_url, es_method, es_data, null, function (xhr, status) {
|
||||
$("#notification").text("").css("visibility", "hidden");
|
||||
if (typeof xhr.status == "number" &&
|
||||
((xhr.status >= 400 && xhr.status < 600) ||
|
||||
(xhr.status >= 200 && xhr.status < 300)
|
||||
)) {
|
||||
// we have someone on the other side. Add to history
|
||||
sense.history.addToHistory(es_server, es_url, es_method, es_data);
|
||||
|
||||
|
||||
var value = xhr.responseText;
|
||||
try {
|
||||
value = JSON.stringify(JSON.parse(value), null, 3);
|
||||
}
|
||||
catch (e) {
|
||||
|
||||
}
|
||||
sense.output.getSession().setValue(value);
|
||||
}
|
||||
else {
|
||||
sense.output.getSession().setValue("Request failed to get to the server (status code: " + xhr.status + "):" + xhr.responseText);
|
||||
}
|
||||
|
||||
}
|
||||
);
|
||||
|
||||
saveEditorState();
|
||||
|
||||
_gaq.push(['_trackEvent', "elasticsearch", 'query']);
|
||||
}
|
||||
|
||||
submitCurrentRequestToES = autoRetryIfTokenizing(submitCurrentRequestToES);
|
||||
|
||||
function reformatData(data, indent) {
|
||||
var changed = false;
|
||||
var formatted_data = [];
|
||||
for (var i = 0; i < data.length; i++) {
|
||||
var cur_doc = data[i];
|
||||
try {
|
||||
var new_doc = JSON.stringify(JSON.parse(cur_doc), null, indent ? 3 : 0);
|
||||
changed = changed || new_doc != cur_doc;
|
||||
formatted_data.push(new_doc);
|
||||
}
|
||||
catch (e) {
|
||||
console.log(e);
|
||||
formatted_data.push(cur_doc);
|
||||
}
|
||||
}
|
||||
|
||||
return { changed: changed, data: formatted_data}
|
||||
}
|
||||
|
||||
|
||||
function autoIndent() {
|
||||
var req_range = sense.utils.getCurrentRequestRange();
|
||||
if (!req_range) return;
|
||||
var parsed_req = sense.utils.getCurrentRequest();
|
||||
if (parsed_req.data && parsed_req.data.length > 0) {
|
||||
var indent = parsed_req.data.length == 1; // unindent multi docs by default
|
||||
var formatted_data = reformatData(parsed_req.data, indent);
|
||||
if (!formatted_data.changed) {
|
||||
// toggle.
|
||||
formatted_data = reformatData(parsed_req.data, !indent);
|
||||
}
|
||||
parsed_req.data = formatted_data.data;
|
||||
|
||||
sense.utils.replaceCurrentRequest(parsed_req, req_range);
|
||||
}
|
||||
}
|
||||
|
||||
autoIndent = autoRetryIfTokenizing(autoIndent);
|
||||
|
||||
function copyToClipboard(value) {
|
||||
var currentActive = document.activeElement;
|
||||
var clipboardStaging = $("#clipboardStaging");
|
||||
clipboardStaging.val(value);
|
||||
clipboardStaging.select();
|
||||
document.execCommand("Copy", false);
|
||||
$(currentActive).focus(); // restore focus.
|
||||
}
|
||||
|
||||
function copyAsCURL() {
|
||||
var req = sense.utils.getCurrentRequest();
|
||||
if (!req) return;
|
||||
|
||||
_gaq.push(['_trackEvent', "curl", 'copied']);
|
||||
|
||||
var es_server = $("#es_server").val(),
|
||||
es_url = req.url,
|
||||
es_method = req.method,
|
||||
es_data = req.data;
|
||||
|
||||
var url = constructESUrl(es_server, es_url);
|
||||
|
||||
var curl = 'curl -X' + es_method + ' "' + url + '"';
|
||||
if (es_data && es_data.length) {
|
||||
curl += " -d'\n";
|
||||
// since Sense doesn't allow single quote json string any single qoute is within a string.
|
||||
curl += es_data.join("\n").replace(/'/g, '\\"');
|
||||
if (es_data.length > 1) curl += "\n"; // end with a new line
|
||||
curl += "'";
|
||||
}
|
||||
|
||||
//console.log(curl);
|
||||
copyToClipboard(curl);
|
||||
|
||||
}
|
||||
|
||||
copyAsCURL = autoRetryIfTokenizing(copyAsCURL, true);
|
||||
|
||||
|
||||
function handleCURLPaste(text) {
|
||||
_gaq.push(['_trackEvent', "curl", 'pasted']);
|
||||
var curlInput = sense.curl.parseCURL(text);
|
||||
if ($("#es_server").val()) curlInput.server = null; // do not override server
|
||||
|
||||
if (!curlInput.method) curlInput.method = "GET";
|
||||
|
||||
sense.editor.insert(sense.utils.textFromRequest(curlInput));
|
||||
|
||||
}
|
||||
|
||||
|
||||
var CURRENT_REQ_RANGE = null;
|
||||
|
||||
|
||||
function saveEditorState() {
|
||||
try {
|
||||
var content = sense.editor.getValue();
|
||||
var server = $("#es_server").val();
|
||||
sense.history.saveCurrentEditorState(server, content);
|
||||
}
|
||||
catch (e) {
|
||||
console.log("Ignoring saving error: " + e)
|
||||
}
|
||||
}
|
||||
|
||||
function updateEditorActionsBar() {
|
||||
var editor_actions = $("#editor_actions");
|
||||
|
||||
if (CURRENT_REQ_RANGE) {
|
||||
var row = CURRENT_REQ_RANGE.start.row;
|
||||
var column = CURRENT_REQ_RANGE.start.column;
|
||||
var session = sense.editor.session;
|
||||
var firstLine = session.getLine(row);
|
||||
var offset = 0;
|
||||
if (firstLine.length > session.getScreenWidth() - 5) {
|
||||
// overlap first row
|
||||
if (row > 0) row--; else row++;
|
||||
}
|
||||
var screen_pos = sense.editor.renderer.textToScreenCoordinates(row, column);
|
||||
offset += screen_pos.pageY - 3;
|
||||
var end_offset = sense.editor.renderer.textToScreenCoordinates(CURRENT_REQ_RANGE.end.row,
|
||||
CURRENT_REQ_RANGE.end.column).pageY;
|
||||
|
||||
offset = Math.min(end_offset, Math.max(offset, 47));
|
||||
if (offset >= 47) {
|
||||
editor_actions.css("top", Math.max(offset, 47));
|
||||
editor_actions.css('visibility', 'visible');
|
||||
}
|
||||
else {
|
||||
editor_actions.css("top", 0);
|
||||
editor_actions.css('visibility', 'hidden');
|
||||
}
|
||||
}
|
||||
else {
|
||||
editor_actions.css("top", 0);
|
||||
editor_actions.css('visibility', 'hidden');
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function highlighCurrentRequestAndUpdateActionBar() {
|
||||
var session = sense.editor.getSession();
|
||||
var new_current_req_range = sense.utils.getCurrentRequestRange();
|
||||
if (new_current_req_range == null && CURRENT_REQ_RANGE == null) return;
|
||||
if (new_current_req_range != null && CURRENT_REQ_RANGE != null &&
|
||||
new_current_req_range.start.row == CURRENT_REQ_RANGE.start.row &&
|
||||
new_current_req_range.end.row == CURRENT_REQ_RANGE.end.row
|
||||
) {
|
||||
// same request, now see if we are on the first line and update the action bar
|
||||
var cursorRow = sense.editor.getCursorPosition().row;
|
||||
if (cursorRow == CURRENT_REQ_RANGE.start.row) {
|
||||
updateEditorActionsBar();
|
||||
}
|
||||
return; // nothing to do..
|
||||
}
|
||||
|
||||
if (CURRENT_REQ_RANGE) {
|
||||
session.removeMarker(CURRENT_REQ_RANGE.marker_id);
|
||||
}
|
||||
|
||||
CURRENT_REQ_RANGE = new_current_req_range;
|
||||
if (CURRENT_REQ_RANGE) {
|
||||
CURRENT_REQ_RANGE.marker_id = session.addMarker(CURRENT_REQ_RANGE, "ace_snippet-marker", "text");
|
||||
}
|
||||
updateEditorActionsBar();
|
||||
}
|
||||
|
||||
highlighCurrentRequestAndUpdateActionBar = autoRetryIfTokenizing(highlighCurrentRequestAndUpdateActionBar, true);
|
||||
|
||||
function moveToPreviousRequestEdge() {
|
||||
var pos = sense.editor.getCursorPosition();
|
||||
for (pos.row--; pos.row > 0 && !sense.utils.isRequestEdge(pos.row); pos.row--) {
|
||||
}
|
||||
sense.editor.moveCursorTo(pos.row, 0);
|
||||
}
|
||||
|
||||
moveToPreviousRequestEdge = autoRetryIfTokenizing(moveToPreviousRequestEdge);
|
||||
|
||||
|
||||
function moveToNextRequestEdge() {
|
||||
var pos = sense.editor.getCursorPosition();
|
||||
var maxRow = sense.editor.getSession().getLength();
|
||||
for (pos.row++; pos.row < maxRow && !sense.utils.isRequestEdge(pos.row); pos.row++) {
|
||||
}
|
||||
sense.editor.moveCursorTo(pos.row, 0);
|
||||
}
|
||||
|
||||
moveToNextRequestEdge = autoRetryIfTokenizing(moveToNextRequestEdge);
|
||||
|
||||
function init() {
|
||||
|
||||
sense.editor = ace.edit("editor");
|
||||
ace.require("ace/mode/sense");
|
||||
sense.editor.getSession().setMode("ace/mode/sense");
|
||||
sense.editor.setShowPrintMargin(false);
|
||||
sense.editor.getSession().setFoldStyle('markbeginend');
|
||||
sense.editor.getSession().setUseWrapMode(true);
|
||||
sense.editor.commands.addCommand({
|
||||
name: 'autocomplete',
|
||||
bindKey: {win: 'Ctrl-Space', mac: 'Ctrl-Space'},
|
||||
exec: sense.autocomplete.editorAutocompleteCommand
|
||||
});
|
||||
sense.editor.commands.addCommand({
|
||||
name: 'auto indent request',
|
||||
bindKey: {win: 'Ctrl-I', mac: 'Command-I'},
|
||||
exec: autoIndent
|
||||
});
|
||||
sense.editor.commands.addCommand({
|
||||
name: 'send to elasticsearch',
|
||||
bindKey: {win: 'Ctrl-Enter', mac: 'Command-Enter'},
|
||||
exec: submitCurrentRequestToES
|
||||
});
|
||||
|
||||
sense.editor.commands.addCommand({
|
||||
name: 'copy as cUrl',
|
||||
bindKey: {win: 'Ctrl-Shift-C', mac: 'Command-Shift-C'},
|
||||
exec: copyAsCURL
|
||||
});
|
||||
|
||||
sense.editor.commands.addCommand({
|
||||
name: 'move to previous request start or end',
|
||||
bindKey: {win: 'Ctrl-Up', mac: 'Command-Up'},
|
||||
exec: moveToPreviousRequestEdge
|
||||
});
|
||||
|
||||
sense.editor.commands.addCommand({
|
||||
name: 'move to next request start or end',
|
||||
bindKey: {win: 'Ctrl-Down', mac: 'Command-Down'},
|
||||
exec: moveToNextRequestEdge
|
||||
});
|
||||
|
||||
|
||||
var orig_paste = sense.editor.onPaste;
|
||||
sense.editor.onPaste = function (text) {
|
||||
if (text && sense.curl.detectCURL(text)) {
|
||||
handleCURLPaste(text);
|
||||
return;
|
||||
}
|
||||
orig_paste.call(this, text);
|
||||
};
|
||||
|
||||
sense.editor.getSession().on('tokenizerUpdate', function (e) {
|
||||
highlighCurrentRequestAndUpdateActionBar();
|
||||
});
|
||||
|
||||
sense.editor.getSession().selection.on('changeCursor', function (e) {
|
||||
highlighCurrentRequestAndUpdateActionBar();
|
||||
});
|
||||
|
||||
|
||||
var save_generation = 0;
|
||||
|
||||
function get_save_callback(for_generation) {
|
||||
return function () {
|
||||
if (save_generation == for_generation) {
|
||||
saveEditorState();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sense.editor.getSession().on("change", function (e) {
|
||||
setTimeout(get_save_callback(++save_generation), 500);
|
||||
});
|
||||
|
||||
sense.editor.getSession().on("changeScrollTop", updateEditorActionsBar);
|
||||
|
||||
|
||||
sense.output = ace.edit("output");
|
||||
sense.output.getSession().setMode("ace/mode/json");
|
||||
sense.output.getSession().setFoldStyle('markbeginend');
|
||||
sense.output.getSession().setUseWrapMode(true);
|
||||
sense.output.setShowPrintMargin(false);
|
||||
sense.output.setReadOnly(true);
|
||||
|
||||
var editorElement = $("#editor"),
|
||||
outputElement = $("#output"),
|
||||
editorActions = $("#editor_actions");
|
||||
|
||||
|
||||
editorElement.resizable(
|
||||
{
|
||||
autoHide: false,
|
||||
handles: 'e',
|
||||
start: function (e, ui) {
|
||||
editor_resizebar = $(".ui-resizable-e").addClass("active");
|
||||
},
|
||||
stop: function (e, ui) {
|
||||
editor_resizebar = $(".ui-resizable-e").removeClass("active");
|
||||
|
||||
var parent = ui.element.parent();
|
||||
var editorSize = ui.element.outerWidth();
|
||||
outputElement.css("left", editorSize+20);
|
||||
editorActions.css("margin-right", -editorSize + 3);
|
||||
sense.editor.resize(true);
|
||||
sense.output.resize(true);
|
||||
}
|
||||
});
|
||||
|
||||
sense.history.init();
|
||||
sense.autocomplete.init();
|
||||
sense.settings.init();
|
||||
|
||||
$("#send").tooltip();
|
||||
$("#send").click(function () {
|
||||
submitCurrentRequestToES();
|
||||
return false;
|
||||
});
|
||||
|
||||
$("#copy_as_curl").click(function (e) {
|
||||
copyAsCURL();
|
||||
e.preventDefault();
|
||||
});
|
||||
|
||||
$("#auto_indent").click(function (e) {
|
||||
autoIndent();
|
||||
e.preventDefault();
|
||||
});
|
||||
|
||||
var help_popup = $("#help_popup");
|
||||
|
||||
help_popup.on('shown', function () {
|
||||
_gaq.push(['_trackEvent', "help", 'shown']);
|
||||
$('<div id="example_editor">PUT index/type/1\n'
|
||||
+ '{\n'
|
||||
+ ' "body": "here"\n'
|
||||
+ '}\n\n'
|
||||
+ 'GET index/type/1\n'
|
||||
+ '</div>').appendTo(help_popup.find("#example_editor_container"));
|
||||
|
||||
var example_editor = ace.edit("example_editor");
|
||||
example_editor.getSession().setMode("ace/mode/sense");
|
||||
example_editor.getSession().setFoldStyle('markbeginend');
|
||||
example_editor.setReadOnly(true);
|
||||
example_editor.renderer.setShowPrintMargin(false);
|
||||
});
|
||||
|
||||
help_popup.on('hidden', function () {
|
||||
help_popup.find('#example_editor').remove();
|
||||
|
||||
});
|
||||
|
||||
|
||||
var es_server = $("#es_server");
|
||||
|
||||
es_server.blur(function () {
|
||||
sense.mappings.notifyServerChange(es_server.val());
|
||||
});
|
||||
|
||||
var editor_source = sense.utils.getUrlParam('load_from') || "stored";
|
||||
var last_editor_state = sense.history.getSavedEditorState();
|
||||
if (editor_source == "stored") {
|
||||
if (last_editor_state) {
|
||||
resetToValues(last_editor_state.server, last_editor_state.content);
|
||||
}
|
||||
else {
|
||||
autoIndent();
|
||||
}
|
||||
}
|
||||
else if (/^https?:\/\//.exec(editor_source)) {
|
||||
$.get(editor_source, null, function (data) {
|
||||
resetToValues(null, data);
|
||||
highlighCurrentRequestAndUpdateActionBar();
|
||||
updateEditorActionsBar();
|
||||
});
|
||||
}
|
||||
else {
|
||||
if (last_editor_state) {
|
||||
resetToValues(last_editor_state.server);
|
||||
}
|
||||
}
|
||||
|
||||
if (document.location.pathname && document.location.pathname.indexOf("_plugin") == 1) {
|
||||
// running as an ES plugin. Always assume we are using that elasticsearch
|
||||
resetToValues(document.location.host);
|
||||
}
|
||||
|
||||
sense.editor.focus();
|
||||
highlighCurrentRequestAndUpdateActionBar();
|
||||
updateEditorActionsBar();
|
||||
|
||||
if (!localStorage.getItem("version_welcome_shown")) {
|
||||
localStorage.setItem("version_welcome_shown", sense.VERSION);
|
||||
var welcome_popup = $("#welcome_popup");
|
||||
welcome_popup.modal();
|
||||
welcome_popup.on('shown', function () {
|
||||
$('<div id="example_editor">PUT index/type/1\n'
|
||||
+ '{\n'
|
||||
+ ' "body": "here"\n'
|
||||
+ '}\n\n'
|
||||
+ 'GET index/type/1\n'
|
||||
+ '</div>').appendTo(welcome_popup.find("#example_editor_container"));
|
||||
|
||||
var example_editor = ace.edit("example_editor");
|
||||
example_editor.getSession().setMode("ace/mode/sense");
|
||||
example_editor.getSession().setFoldStyle('markbeginend');
|
||||
example_editor.setReadOnly(true);
|
||||
example_editor.renderer.setShowPrintMargin(false);
|
||||
});
|
||||
|
||||
welcome_popup.on('hidden', function () {
|
||||
welcome_popup.find('#example_editor').remove();
|
||||
|
||||
});
|
||||
// welcome_popup.modal('show');
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
$(document).ready(init);
|
||||
|
||||
/* google analytics */
|
||||
var _gaq = _gaq || [];
|
||||
_gaq.push(['_setAccount', 'UA-11830182-16']);
|
||||
_gaq.push(['_setCustomVar',
|
||||
1, // This custom var is set to slot #1. Required parameter.
|
||||
'Version', // The name of the custom variable. Required parameter.
|
||||
sense.VERSION, // The value of the custom variable. Required parameter.
|
||||
1 // Sets the scope to visitor-level. Optional parameter.
|
||||
]);
|
||||
|
||||
_gaq.push(['_trackPageview']);
|
||||
|
||||
(function () {
|
||||
var ga = document.createElement('script');
|
||||
ga.type = 'text/javascript';
|
||||
ga.async = true;
|
||||
ga.src = 'https://ssl.google-analytics.com/ga.js';
|
||||
var s = document.getElementsByTagName('script')[0];
|
||||
s.parentNode.insertBefore(ga, s);
|
||||
})();
|
||||
|
75
sense/src/curl.js
Normal file
75
sense/src/curl.js
Normal file
|
@ -0,0 +1,75 @@
|
|||
(function () {
|
||||
var global = window;
|
||||
if (!global.sense)
|
||||
global.sense = {};
|
||||
|
||||
function detectCURL(text) {
|
||||
// returns true if text matches a curl request
|
||||
if (!text) return false;
|
||||
return text.match(/^\s*?curl\s+(-X[A-Z]+)?\s*['"]?.*?['"]?(\s*$|\s+?-d\s*?['"])/);
|
||||
|
||||
}
|
||||
|
||||
function parseCURL(text) {
|
||||
var matches = text.match(/^\s*?curl\s+(?:-s\s+)?(-X\s*[A-Z]+)?\s*/);
|
||||
var ret = {
|
||||
method: "",
|
||||
server: "",
|
||||
endpoint: "",
|
||||
data: ""
|
||||
};
|
||||
if (matches[1]) {
|
||||
ret.method = matches[1].substring(2).trim(); // strip -X
|
||||
}
|
||||
text = text.substring(matches[0].length); // strip everything so far.
|
||||
if (text.length == 0) return ret;
|
||||
if (text[0] == '"') {
|
||||
matches = text.match(/^"([^"]*)"/);
|
||||
}
|
||||
else if (text[0] == "'") {
|
||||
matches = text.match(/^'([^']*)'/);
|
||||
}
|
||||
else {
|
||||
matches = text.match(/^(\S*)/);
|
||||
}
|
||||
|
||||
if (!matches) return ret;
|
||||
var url = matches[1];
|
||||
|
||||
if (!url.match(/:\/\//)) url = "http://" + url; // inject http as curl does
|
||||
|
||||
var urlAnchor = document.createElement("a");
|
||||
urlAnchor.href = url;
|
||||
|
||||
ret.server = (urlAnchor.protocol || "http") + "//" + urlAnchor.hostname;
|
||||
if (urlAnchor.port && urlAnchor.port != 0) ret.server += ":" + urlAnchor.port;
|
||||
ret.url = (urlAnchor.pathname || "") + (urlAnchor.search || "");
|
||||
|
||||
text = text.substring(matches[0].length);
|
||||
|
||||
// now search for -d
|
||||
matches = text.match(/.*-d\s*?'/);
|
||||
if (matches) {
|
||||
ret.data = text.substring(matches[0].length).replace(/'\s*$/, '');
|
||||
}
|
||||
else {
|
||||
matches = text.match(/.*-d\s*?"/);
|
||||
if (matches) {
|
||||
ret.data = text.substring(matches[0].length).replace(/"\s*$/, '');
|
||||
ret.data = ret.data.replace(/\\(.)/gi, "$1");
|
||||
}
|
||||
}
|
||||
|
||||
if (ret.data) {
|
||||
ret.data = ret.data.trim();
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
global.sense.curl = {};
|
||||
global.sense.curl.parseCURL = parseCURL;
|
||||
global.sense.curl.detectCURL = detectCURL;
|
||||
|
||||
})();
|
199
sense/src/history.js
Normal file
199
sense/src/history.js
Normal file
|
@ -0,0 +1,199 @@
|
|||
(function () {
|
||||
|
||||
var global = window;
|
||||
|
||||
var history_viewer, history_popup;
|
||||
|
||||
function getHistoryKeys() {
|
||||
var keys = [];
|
||||
for (var i = 0; i < localStorage.length; i++) {
|
||||
var k = localStorage.key(i);
|
||||
if (k.indexOf("hist_elem") == 0) {
|
||||
keys.push(k);
|
||||
}
|
||||
}
|
||||
|
||||
keys.sort();
|
||||
keys.reverse();
|
||||
return keys;
|
||||
}
|
||||
|
||||
function getHistory() {
|
||||
var hist_items = [];
|
||||
$.each(getHistoryKeys(), function (i, key) {
|
||||
hist_items.push(JSON.parse(localStorage.getItem(key)));
|
||||
});
|
||||
|
||||
return hist_items;
|
||||
}
|
||||
|
||||
function getHistoricalServers() {
|
||||
var servers = {};
|
||||
$.each(getHistory(), function (i, h) {
|
||||
servers[h.server] = 1;
|
||||
});
|
||||
|
||||
var server_list = [];
|
||||
for (var s in servers) server_list.push(s);
|
||||
|
||||
return server_list;
|
||||
}
|
||||
|
||||
function populateHistElem(hist_elem) {
|
||||
var s = hist_elem.method + " " + hist_elem.endpoint + "\n" + (hist_elem.data || "");
|
||||
history_viewer.setValue(s);
|
||||
history_viewer.clearSelection();
|
||||
}
|
||||
|
||||
function applyHistElem(hist_elem) {
|
||||
var session = sense.editor.getSession();
|
||||
var pos = sense.editor.getCursorPosition();
|
||||
var prefix = "";
|
||||
var suffix = "\n";
|
||||
if (sense.utils.isStartRequestRow(pos.row)) {
|
||||
pos.column = 0;
|
||||
suffix += "\n";
|
||||
}
|
||||
else if (sense.utils.isEndRequestRow(pos.row)) {
|
||||
var line = session.getLine(pos.row);
|
||||
pos.column = line.length;
|
||||
prefix = "\n\n";
|
||||
}
|
||||
else if (sense.utils.isInBetweenRequestsRow(pos.row)) {
|
||||
pos.column = 0;
|
||||
}
|
||||
else {
|
||||
pos = sense.utils.nextRequestEnd(pos);
|
||||
prefix = "\n\n";
|
||||
}
|
||||
|
||||
var s = prefix + hist_elem.method + " " + hist_elem.endpoint;
|
||||
if (hist_elem.data) s += "\n" + hist_elem.data;
|
||||
|
||||
s += suffix;
|
||||
|
||||
session.insert(pos, s);
|
||||
sense.editor.clearSelection();
|
||||
sense.editor.moveCursorTo(pos.row + prefix.length, 0);
|
||||
sense.editor.focus();
|
||||
}
|
||||
|
||||
function init() {
|
||||
|
||||
history_popup = $("#history_popup");
|
||||
|
||||
|
||||
history_popup.on('shown', function () {
|
||||
$('<div id="history_viewer">No history available</div>').appendTo(history_popup.find(".modal-body"));
|
||||
|
||||
history_viewer = ace.edit("history_viewer");
|
||||
history_viewer.getSession().setMode("ace/mode/sense");
|
||||
// history_viewer.setTheme("ace/theme/monokai");
|
||||
history_viewer.getSession().setFoldStyle('markbeginend');
|
||||
history_viewer.setReadOnly(true);
|
||||
history_viewer.renderer.setShowPrintMargin(false);
|
||||
sense.editor.getSession().setUseWrapMode(true);
|
||||
|
||||
$.each(getHistory(), function (i, hist_elem) {
|
||||
var li = $('<li><a href="#"><i class="icon-chevron-right"></i><span/></a></li>');
|
||||
var disc = hist_elem.endpoint;
|
||||
var date = moment(hist_elem.time);
|
||||
if (date.diff(moment(), "days") < -7)
|
||||
disc += " (" + date.format("MMM D") + ")";
|
||||
else
|
||||
disc += " (" + date.fromNow() + ")";
|
||||
|
||||
li.find("span").text(disc);
|
||||
li.attr("title", disc);
|
||||
|
||||
li.find("a").click(function () {
|
||||
history_popup.find('.modal-body .nav li').removeClass("active");
|
||||
li.addClass("active");
|
||||
populateHistElem(hist_elem);
|
||||
return false;
|
||||
});
|
||||
|
||||
li.dblclick(function () {
|
||||
li.addClass("active");
|
||||
history_popup.find(".btn-primary").click();
|
||||
});
|
||||
|
||||
li.hover(function () {
|
||||
populateHistElem(hist_elem);
|
||||
return false;
|
||||
}, function () {
|
||||
history_popup.find(".modal-body .nav li.active a").click();
|
||||
});
|
||||
|
||||
li.bind('apply', function () {
|
||||
_gaq.push(['_trackEvent', "history", 'applied']);
|
||||
applyHistElem(hist_elem);
|
||||
});
|
||||
|
||||
|
||||
li.appendTo(history_popup.find(".modal-body .nav"));
|
||||
});
|
||||
|
||||
history_popup.find(".modal-body .nav li:first a").click();
|
||||
|
||||
});
|
||||
|
||||
history_popup.on('hidden', function () {
|
||||
history_popup.find('.modal-body #history_viewer').remove();
|
||||
history_popup.find('.modal-body .nav li').remove();
|
||||
history_viewer = null;
|
||||
});
|
||||
|
||||
history_popup.find(".btn-primary").click(function () {
|
||||
history_popup.find(".modal-body .nav li.active").trigger("apply");
|
||||
});
|
||||
|
||||
history_popup.find("#hist_clear").click(function () {
|
||||
var keys = getHistoryKeys();
|
||||
$.each(keys, function (i, k) {
|
||||
localStorage.removeItem(k);
|
||||
});
|
||||
history_popup.find(".modal-body .nav").html("");
|
||||
history_viewer.getSession().setValue("No history available");
|
||||
})
|
||||
|
||||
}
|
||||
|
||||
function addToHistory(server, endpoint, method, data) {
|
||||
var keys = getHistoryKeys();
|
||||
keys.splice(0, 500); // only maintain most recent X;
|
||||
$.each(keys, function (i, k) {
|
||||
localStorage.removeItem(k);
|
||||
});
|
||||
|
||||
var timestamp = new Date().getTime();
|
||||
var k = "hist_elem_" + timestamp;
|
||||
localStorage.setItem(k, JSON.stringify(
|
||||
{ 'time': timestamp, 'server': server, 'endpoint': endpoint, 'method': method, 'data': data }));
|
||||
}
|
||||
|
||||
function saveCurrentEditorState(server, content) {
|
||||
var timestamp = new Date().getTime();
|
||||
localStorage.setItem("editor_state", JSON.stringify(
|
||||
{ 'time': timestamp, 'server': server, 'content': content }));
|
||||
|
||||
}
|
||||
|
||||
function getSavedEditorState(server, content) {
|
||||
return JSON.parse(localStorage.getItem("editor_state"));
|
||||
}
|
||||
|
||||
global.sense.history = {
|
||||
init: init,
|
||||
addToHistory: addToHistory,
|
||||
getHistoricalServers: getHistoricalServers,
|
||||
saveCurrentEditorState: saveCurrentEditorState,
|
||||
getSavedEditorState: getSavedEditorState
|
||||
};
|
||||
|
||||
})();
|
||||
|
||||
|
||||
|
||||
|
||||
|
129
sense/src/kb.js
Normal file
129
sense/src/kb.js
Normal file
|
@ -0,0 +1,129 @@
|
|||
(function () {
|
||||
|
||||
var global = window;
|
||||
var GLOBAL_AUTOCOMPLETE_RULES = {}, ES_SCHEME_BY_ENDPOINT = {};
|
||||
|
||||
function escapeRegex(text) {
|
||||
return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
|
||||
}
|
||||
|
||||
function addGlobalAutocompleteRules(parentNode, rules) {
|
||||
GLOBAL_AUTOCOMPLETE_RULES[parentNode] = rules;
|
||||
}
|
||||
|
||||
function getGlobalAutocompleteRules() {
|
||||
return GLOBAL_AUTOCOMPLETE_RULES;
|
||||
}
|
||||
|
||||
|
||||
function addEndpointDescription(endpoint, description) {
|
||||
if (!description.endpoint_autocomplete)
|
||||
description.endpoint_autocomplete = [endpoint];
|
||||
|
||||
if (!description.match) {
|
||||
var l = $.map(description.endpoint_autocomplete, escapeRegex);
|
||||
description.match = "(?:" + l.join(")|(?:") + ")";
|
||||
}
|
||||
|
||||
if (typeof description.match == "string") description.match = new RegExp(description.match);
|
||||
|
||||
var copiedDescription = {};
|
||||
$.extend(copiedDescription, description);
|
||||
copiedDescription._id = endpoint;
|
||||
|
||||
ES_SCHEME_BY_ENDPOINT[endpoint] = copiedDescription;
|
||||
}
|
||||
|
||||
function getEndpointDescriptionByEndpoint(endpoint) {
|
||||
return ES_SCHEME_BY_ENDPOINT[endpoint];
|
||||
}
|
||||
|
||||
function getEndpointsForIndicesTypesAndId(indices, types, id) {
|
||||
var ret = [];
|
||||
var index_mode = "none";
|
||||
if (indices && indices.length > 0) {
|
||||
indices = sense.mappings.expandAliases(indices);
|
||||
index_mode = typeof indices == "string" ? "single" : "multi";
|
||||
}
|
||||
|
||||
var type_mode = "none";
|
||||
if (types && types.length > 0) type_mode = types.length > 1 ? "multi" : "single";
|
||||
var id_mode = "none";
|
||||
if (id && id.length > 0) id_mode = "single";
|
||||
|
||||
for (var endpoint in ES_SCHEME_BY_ENDPOINT) {
|
||||
var scheme = ES_SCHEME_BY_ENDPOINT[endpoint];
|
||||
switch (scheme.indices_mode) {
|
||||
case "none":
|
||||
if (index_mode !== "none") continue;
|
||||
break;
|
||||
case "single":
|
||||
if (index_mode !== "single") continue;
|
||||
break;
|
||||
case "required_multi":
|
||||
if (index_mode === "none") continue;
|
||||
break;
|
||||
case "multi": // always good
|
||||
break;
|
||||
}
|
||||
switch (scheme.types_mode) {
|
||||
case "none":
|
||||
if (type_mode !== "none") continue;
|
||||
break;
|
||||
case "single":
|
||||
if (type_mode !== "single") continue;
|
||||
break;
|
||||
case "multi": // always good
|
||||
break;
|
||||
}
|
||||
|
||||
switch (scheme.doc_id_mode) {
|
||||
case "none":
|
||||
if (id_mode !== "none") continue;
|
||||
break;
|
||||
case "required_single":
|
||||
if (id_mode === "none") continue;
|
||||
break;
|
||||
}
|
||||
|
||||
ret.push(endpoint);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
function getEndpointDescriptionByPath(path, indices, types, id) {
|
||||
var endpoints = getEndpointsForIndicesTypesAndId(indices, types, id);
|
||||
for (var i = 0; i < endpoints.length; i++) {
|
||||
var scheme = ES_SCHEME_BY_ENDPOINT[endpoints[i]];
|
||||
if (scheme.match.test(path || "")) return scheme;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
function getEndpointAutocomplete(indices, types, id) {
|
||||
var ret = [];
|
||||
var endpoints = getEndpointsForIndicesTypesAndId(indices, types, id);
|
||||
for (var i = 0; i < endpoints.length; i++) {
|
||||
var scheme = ES_SCHEME_BY_ENDPOINT[endpoints[i]];
|
||||
ret.push.apply(ret, scheme.endpoint_autocomplete);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
function clear() {
|
||||
ES_SCHEME_BY_ENDPOINT = {};
|
||||
GLOBAL_AUTOCOMPLETE_RULES = {};
|
||||
}
|
||||
|
||||
if (!global.sense) global.sense = {};
|
||||
global.sense.kb = {};
|
||||
global.sense.kb.addGlobalAutocompleteRules = addGlobalAutocompleteRules;
|
||||
global.sense.kb.getGlobalAutocompleteRules = getGlobalAutocompleteRules;
|
||||
global.sense.kb.addEndpointDescription = addEndpointDescription;
|
||||
global.sense.kb.getEndpointAutocomplete = getEndpointAutocomplete;
|
||||
global.sense.kb.getEndpointDescriptionByPath = getEndpointDescriptionByPath;
|
||||
global.sense.kb.getEndpointDescriptionByEndpoint = getEndpointDescriptionByEndpoint;
|
||||
global.sense.kb.clear = clear;
|
||||
|
||||
|
||||
})();
|
231
sense/src/mappings.js
Normal file
231
sense/src/mappings.js
Normal file
|
@ -0,0 +1,231 @@
|
|||
(function () {
|
||||
|
||||
var global = window;
|
||||
|
||||
var currentServer;
|
||||
var per_index_types = {};
|
||||
var per_alias_indexes = [];
|
||||
|
||||
|
||||
function expandAliases(indicesOrAliases) {
|
||||
// takes a list of indices or aliases or a string which may be either and returns a list of indices
|
||||
// returns a list for multiple values or a string for a single.
|
||||
|
||||
if (!indicesOrAliases) return indicesOrAliases;
|
||||
|
||||
if (typeof indicesOrAliases === "string") indicesOrAliases = [indicesOrAliases];
|
||||
indicesOrAliases = $.map(indicesOrAliases, function (iOrA) {
|
||||
if (per_alias_indexes[iOrA]) return per_alias_indexes[iOrA];
|
||||
return [iOrA];
|
||||
});
|
||||
var ret = [].concat.apply([], indicesOrAliases);
|
||||
ret.sort();
|
||||
var last;
|
||||
ret = $.map(ret, function (v) {
|
||||
var r = last == v ? null : v;
|
||||
last = v;
|
||||
return r;
|
||||
});
|
||||
return ret.length > 1 ? ret : ret[0];
|
||||
}
|
||||
|
||||
function getFields(indices, types) {
|
||||
// get fields for indices and types. Both can be a list, a string or null (meaning all).
|
||||
var ret = [];
|
||||
indices = expandAliases(indices);
|
||||
if (typeof indices == "string") {
|
||||
|
||||
var type_dict = per_index_types[indices];
|
||||
if (!type_dict) return [];
|
||||
|
||||
if (typeof types == "string") {
|
||||
var f = type_dict[types];
|
||||
ret = f ? f : [];
|
||||
}
|
||||
else {
|
||||
// filter what we need
|
||||
$.each(type_dict, function (type, fields) {
|
||||
if (!types || types.length == 0 || $.inArray(type, types) != -1)
|
||||
ret.push(fields);
|
||||
});
|
||||
|
||||
ret = [].concat.apply([], ret);
|
||||
}
|
||||
}
|
||||
else {
|
||||
// multi index mode.
|
||||
$.each(per_index_types, function (index) {
|
||||
if (!indices || indices.length == 0 || $.inArray(index, indices) != -1)
|
||||
ret.push(getFields(index, types));
|
||||
});
|
||||
ret = [].concat.apply([], ret);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
function getTypes(indices) {
|
||||
var ret = [];
|
||||
indices = expandAliases(indices);
|
||||
if (typeof indices == "string") {
|
||||
var type_dict = per_index_types[indices];
|
||||
if (!type_dict) return [];
|
||||
|
||||
// filter what we need
|
||||
$.each(type_dict, function (type, fields) {
|
||||
ret.push(type);
|
||||
});
|
||||
|
||||
}
|
||||
else {
|
||||
// multi index mode.
|
||||
$.each(per_index_types, function (index) {
|
||||
if (!indices || $.inArray(index, indices) != -1)
|
||||
ret.push(getTypes(index));
|
||||
});
|
||||
ret = [].concat.apply([], ret);
|
||||
}
|
||||
|
||||
return ret.filter(function (v, i, a) {
|
||||
return a.indexOf(v) == i
|
||||
}); // dedupe array;
|
||||
|
||||
}
|
||||
|
||||
|
||||
function getIndices(include_aliases) {
|
||||
var ret = [];
|
||||
$.each(per_index_types, function (index) {
|
||||
ret.push(index);
|
||||
});
|
||||
if (typeof include_aliases === "undefined" ? true : include_aliases) {
|
||||
$.each(per_alias_indexes, function (alias) {
|
||||
ret.push(alias);
|
||||
});
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
function getFieldNamesFromFieldMapping(field_name, field_mapping) {
|
||||
if (field_mapping['enabled'] == false) return [];
|
||||
|
||||
|
||||
function applyPathSettings(nested_field_names) {
|
||||
var path_type = field_mapping['path'] || "full";
|
||||
if (path_type == "full") {
|
||||
return $.map(nested_field_names, function (f) {
|
||||
return field_name + "." + f;
|
||||
});
|
||||
}
|
||||
return nested_field_names;
|
||||
}
|
||||
|
||||
if (field_mapping["properties"]) {
|
||||
// derived object type
|
||||
var nested_fields = getFieldNamesFromTypeMapping(field_mapping);
|
||||
return applyPathSettings(nested_fields);
|
||||
}
|
||||
|
||||
if (field_mapping['type'] == 'multi_field') {
|
||||
var nested_fields = $.map(field_mapping['fields'], function (field_mapping, field_name) {
|
||||
return getFieldNamesFromFieldMapping(field_name, field_mapping);
|
||||
});
|
||||
|
||||
return applyPathSettings(nested_fields);
|
||||
}
|
||||
|
||||
if (field_mapping["index_name"]) return [field_mapping["index_name"]];
|
||||
|
||||
return [field_name];
|
||||
}
|
||||
|
||||
function getFieldNamesFromTypeMapping(type_mapping) {
|
||||
var field_list =
|
||||
$.map(type_mapping['properties'], function (field_mapping, field_name) {
|
||||
return getFieldNamesFromFieldMapping(field_name, field_mapping);
|
||||
});
|
||||
|
||||
// deduping
|
||||
var last = undefined;
|
||||
field_list.sort();
|
||||
return $.map(field_list, function (f) {
|
||||
var r = (f === last) ? null : f;
|
||||
last = f;
|
||||
return r;
|
||||
});
|
||||
}
|
||||
|
||||
function loadMappings(mappings) {
|
||||
per_index_types = {};
|
||||
$.each(mappings, function (index, index_mapping) {
|
||||
var normalized_index_mappings = {};
|
||||
$.each(index_mapping, function (type_name, type_mapping) {
|
||||
var field_list = getFieldNamesFromTypeMapping(type_mapping);
|
||||
normalized_index_mappings[type_name] = field_list;
|
||||
});
|
||||
per_index_types[index] = normalized_index_mappings;
|
||||
});
|
||||
}
|
||||
|
||||
function loadAliases(aliases) {
|
||||
per_alias_indexes = {}
|
||||
$.each(aliases, function (index, index_aliases) {
|
||||
$.each(index_aliases.aliases, function (alias) {
|
||||
if (alias === index) return; // alias which is identical to index means no index.
|
||||
var cur_aliases = per_alias_indexes[alias];
|
||||
if (!cur_aliases) {
|
||||
cur_aliases = [];
|
||||
per_alias_indexes[alias] = cur_aliases;
|
||||
}
|
||||
cur_aliases.push(index);
|
||||
});
|
||||
});
|
||||
|
||||
per_alias_indexes['_all'] = getIndices(false);
|
||||
}
|
||||
|
||||
function clear() {
|
||||
per_index_types = {};
|
||||
per_alias_indexes = {};
|
||||
}
|
||||
|
||||
function retrieveMappingFromServer() {
|
||||
if (!currentServer) return;
|
||||
callES(currentServer, "_mapping", "GET", null, function (data, status, xhr) {
|
||||
loadMappings(data);
|
||||
});
|
||||
callES(currentServer, "_aliases", "GET", null, function (data, status, xhr) {
|
||||
loadAliases(data);
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
function notifyServerChange(newServer) {
|
||||
if (newServer.indexOf("://") < 0) newServer = "http://" + newServer;
|
||||
newServer = newServer.trim("/");
|
||||
if (newServer === currentServer) return; // already have it.
|
||||
currentServer = newServer;
|
||||
retrieveMappingFromServer();
|
||||
}
|
||||
|
||||
function mapping_retriever() {
|
||||
retrieveMappingFromServer();
|
||||
setTimeout(function () {
|
||||
mapping_retriever();
|
||||
}, 60000);
|
||||
}
|
||||
|
||||
mapping_retriever();
|
||||
|
||||
if (!global.sense) global.sense = {};
|
||||
global.sense.mappings = {};
|
||||
global.sense.mappings.getFields = getFields;
|
||||
global.sense.mappings.getIndices = getIndices;
|
||||
global.sense.mappings.getTypes = getTypes;
|
||||
global.sense.mappings.loadMappings = loadMappings;
|
||||
global.sense.mappings.loadAliases = loadAliases;
|
||||
global.sense.mappings.expandAliases = expandAliases;
|
||||
global.sense.mappings.clear = clear;
|
||||
global.sense.mappings.notifyServerChange = notifyServerChange;
|
||||
|
||||
})();
|
91
sense/src/settings.js
Normal file
91
sense/src/settings.js
Normal file
|
@ -0,0 +1,91 @@
|
|||
(function () {
|
||||
var global = window;
|
||||
if (!global.sense)
|
||||
global.sense = {};
|
||||
|
||||
function getFontSize() {
|
||||
return localStorage.getItem("font_size") || "12";
|
||||
}
|
||||
|
||||
function setFontSize(size) {
|
||||
if (!/^([1-9]\d*)$/.test(size)) return false;
|
||||
localStorage.setItem("font_size", size);
|
||||
$("#editor").css("font-size", size + "px");
|
||||
$("#output").css("font-size", size + "px");
|
||||
return true;
|
||||
}
|
||||
|
||||
function getWrapMode() {
|
||||
var mode = localStorage.getItem("wrap_mode") || "true";
|
||||
return mode == "true";
|
||||
}
|
||||
|
||||
function setWrapMode(mode) {
|
||||
if (typeof mode !== "boolean") return false;
|
||||
localStorage.setItem("wrap_mode", mode);
|
||||
|
||||
sense.editor.getSession().setUseWrapMode(mode);
|
||||
sense.output.getSession().setUseWrapMode(mode);
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
function getTheme() {
|
||||
var mode = localStorage.getItem("theme") || "dark";
|
||||
return mode;
|
||||
}
|
||||
|
||||
function setTheme(mode) {
|
||||
localStorage.setItem("theme", mode);
|
||||
|
||||
$("#bootstrapThemeCss").attr("href", "lib/bootstrap/css/bootstrap." + mode + ".min.css");
|
||||
$("#senseThemeCss").attr("href", "css/sense." + mode + ".css");
|
||||
|
||||
var aceTheme = mode === "light" ? "" : "ace/theme/sense-dark";
|
||||
sense.editor.setTheme(aceTheme);
|
||||
sense.output.setTheme(aceTheme);
|
||||
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
function init() {
|
||||
|
||||
var settings_popup = $("#settings_popup");
|
||||
|
||||
var font_size_ctl = settings_popup.find("#font_size");
|
||||
var fs = getFontSize();
|
||||
font_size_ctl.val(fs);
|
||||
setFontSize(fs);
|
||||
|
||||
var wrap_mode_ctl = settings_popup.find("#wrap_mode");
|
||||
var wm = getWrapMode();
|
||||
wrap_mode_ctl.prop('checked', wm);
|
||||
setWrapMode(wm);
|
||||
|
||||
var theme_ctl = settings_popup.find("#theme");
|
||||
var theme = getTheme();
|
||||
theme_ctl.val(theme);
|
||||
setTheme(theme);
|
||||
|
||||
function save() {
|
||||
if (!setFontSize(font_size_ctl.val())) font_size_ctl.val(getFontSize());
|
||||
if (!setWrapMode(wrap_mode_ctl.prop("checked"))) wrap_mode_ctl.prop('checked', getWrapMode());
|
||||
if (!setTheme(theme_ctl.val())) theme_ctl.val(getTheme());
|
||||
global.sense.editor.focus();
|
||||
return true;
|
||||
}
|
||||
|
||||
var save_button = settings_popup.find(".btn-primary");
|
||||
save_button.click(save);
|
||||
settings_popup.find(".btn-primary").click(save);
|
||||
settings_popup.find("form").submit(function () {
|
||||
save_button.click();
|
||||
return false
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
global.sense.settings = {};
|
||||
global.sense.settings.init = init;
|
||||
})();
|
278
sense/src/utils.js
Normal file
278
sense/src/utils.js
Normal file
|
@ -0,0 +1,278 @@
|
|||
(function () {
|
||||
|
||||
var global = window;
|
||||
if (!global.sense)
|
||||
global.sense = {};
|
||||
|
||||
var ns = {};
|
||||
global.sense.utils = ns;
|
||||
|
||||
var sense = global.sense;
|
||||
|
||||
ROW_PARSE_MODE = {
|
||||
REQUEST_START: 2,
|
||||
IN_REQUEST: 4,
|
||||
MULTI_DOC_CUR_DOC_END: 8,
|
||||
REQUEST_END: 16,
|
||||
BETWEEN_REQUESTS: 32
|
||||
};
|
||||
|
||||
getRowParseMode = function (row, editor) {
|
||||
editor = editor || sense.editor;
|
||||
if (row == null || typeof row == "undefined") row = editor.getCursorPosition().row;
|
||||
|
||||
var session = editor.getSession();
|
||||
if (row >= session.getLength()) return ROW_PARSE_MODE.BETWEEN_REQUESTS;
|
||||
var mode = (session.getState(row) || {}).name;
|
||||
if (!mode)
|
||||
return ROW_PARSE_MODE.BETWEEN_REQUESTS; // shouldn't really happen
|
||||
|
||||
|
||||
if (mode != "start") return ROW_PARSE_MODE.IN_REQUEST;
|
||||
var line = (session.getLine(row) || "").trim();
|
||||
if (!line || line[0] === '#') return ROW_PARSE_MODE.BETWEEN_REQUESTS; // empty line or a comment waiting for a new req to start
|
||||
|
||||
if (line.indexOf("}", line.length - 1) >= 0) {
|
||||
// check for a multi doc request (must start a new json doc immediately after this one end.
|
||||
row++;
|
||||
if (row < session.getLength()) {
|
||||
line = (session.getLine(row) || "").trim();
|
||||
if (line.indexOf("{") == 0) { // next line is another doc in a multi doc
|
||||
return ROW_PARSE_MODE.MULTI_DOC_CUR_DOC_END | ROW_PARSE_MODE.IN_REQUEST;
|
||||
}
|
||||
|
||||
}
|
||||
return ROW_PARSE_MODE.REQUEST_END | ROW_PARSE_MODE.MULTI_DOC_CUR_DOC_END; // end of request
|
||||
}
|
||||
|
||||
// check for single line requests
|
||||
row++;
|
||||
if (row >= session.getLength()) {
|
||||
return ROW_PARSE_MODE.REQUEST_START | ROW_PARSE_MODE.REQUEST_END;
|
||||
}
|
||||
line = (session.getLine(row) || "").trim();
|
||||
if (line.indexOf("{") != 0) { // next line is another request
|
||||
return ROW_PARSE_MODE.REQUEST_START | ROW_PARSE_MODE.REQUEST_END;
|
||||
}
|
||||
|
||||
return ROW_PARSE_MODE.REQUEST_START;
|
||||
};
|
||||
|
||||
function rowPredicate(row, editor, value) {
|
||||
var mode = getRowParseMode(row, editor);
|
||||
return (mode & value) > 0;
|
||||
}
|
||||
|
||||
ns.isEndRequestRow = function (row, editor) {
|
||||
return rowPredicate(row, editor, ROW_PARSE_MODE.REQUEST_END);
|
||||
};
|
||||
|
||||
ns.isRequestEdge = function (row, editor) {
|
||||
return rowPredicate(row, editor, ROW_PARSE_MODE.REQUEST_END | ROW_PARSE_MODE.REQUEST_START);
|
||||
};
|
||||
|
||||
|
||||
ns.isStartRequestRow = function (row, editor) {
|
||||
return rowPredicate(row, editor, ROW_PARSE_MODE.REQUEST_START);
|
||||
};
|
||||
|
||||
ns.isInBetweenRequestsRow = function (row, editor) {
|
||||
return rowPredicate(row, editor, ROW_PARSE_MODE.BETWEEN_REQUESTS);
|
||||
};
|
||||
|
||||
ns.isInRequestsRow = function (row, editor) {
|
||||
return rowPredicate(row, editor, ROW_PARSE_MODE.IN_REQUEST);
|
||||
};
|
||||
|
||||
ns.isMultiDocDocEndRow = function (row, editor) {
|
||||
return rowPredicate(row, editor, ROW_PARSE_MODE.MULTI_DOC_CUR_DOC_END);
|
||||
};
|
||||
|
||||
|
||||
ns.iterForCurrentLoc = function (editor) {
|
||||
editor = editor || sense.editor;
|
||||
var pos = editor.getCursorPosition();
|
||||
return ns.iterForPosition(pos.row, pos.column, editor);
|
||||
};
|
||||
|
||||
ns.iterForPosition = function (row, column, editor) {
|
||||
editor = editor || sense.editor;
|
||||
return new (ace.require("ace/token_iterator").TokenIterator)(editor.getSession(), row, column);
|
||||
};
|
||||
|
||||
ns.isEmptyToken = function (tokenOrTokenIter) {
|
||||
var token = tokenOrTokenIter && tokenOrTokenIter.getCurrentToken ? tokenOrTokenIter.getCurrentToken() : tokenOrTokenIter;
|
||||
return !token || token.type == "whitespace"
|
||||
};
|
||||
|
||||
ns.isUrlOrMethodToken = function (tokenOrTokenIter) {
|
||||
var t = tokenOrTokenIter.getCurrentToken ? tokenOrTokenIter.getCurrentToken() : tokenOrTokenIter;
|
||||
return t && t.type && (t.type == "method" || t.type.indexOf("url") == 0);
|
||||
};
|
||||
|
||||
|
||||
ns.nextNonEmptyToken = function (tokenIter) {
|
||||
var t = tokenIter.stepForward();
|
||||
while (t && ns.isEmptyToken(t)) t = tokenIter.stepForward();
|
||||
return t;
|
||||
};
|
||||
|
||||
ns.prevNonEmptyToken = function (tokenIter) {
|
||||
var t = tokenIter.stepBackward();
|
||||
// empty rows return null token.
|
||||
while ((t || tokenIter.getCurrentTokenRow() > 0) && ns.isEmptyToken(t)) t = tokenIter.stepBackward();
|
||||
return t;
|
||||
};
|
||||
|
||||
ns.prevRequestStart = function (pos, editor) {
|
||||
editor = editor || sense.editor;
|
||||
pos = pos || editor.getCursorPosition();
|
||||
var curRow = pos.row;
|
||||
while (curRow > 0 && !ns.isStartRequestRow(curRow, editor)) curRow--;
|
||||
|
||||
return { row: curRow, column: 0};
|
||||
};
|
||||
|
||||
ns.nextRequestEnd = function (pos, editor) {
|
||||
editor = editor || sense.editor;
|
||||
pos = pos || editor.getCursorPosition();
|
||||
var session = editor.getSession();
|
||||
var curRow = pos.row;
|
||||
var maxLines = session.getLength();
|
||||
for (; curRow < maxLines - 1; curRow++) {
|
||||
var curRowMode = getRowParseMode(curRow, editor);
|
||||
if ((curRowMode & ROW_PARSE_MODE.REQUEST_END) > 0) break;
|
||||
if (curRow != pos.row && (curRowMode & ROW_PARSE_MODE.REQUEST_START) > 0) break;
|
||||
}
|
||||
|
||||
var column = (session.getLine(curRow) || "").length;
|
||||
|
||||
return { row: curRow, column: column};
|
||||
};
|
||||
|
||||
ns.nextDataDocEnd = function (pos, editor) {
|
||||
editor = editor || sense.editor;
|
||||
pos = pos || editor.getCursorPosition();
|
||||
var session = editor.getSession();
|
||||
var curRow = pos.row;
|
||||
var maxLines = session.getLength();
|
||||
for (; curRow < maxLines - 1; curRow++) {
|
||||
var curRowMode = getRowParseMode(curRow, editor);
|
||||
if ((curRowMode & ROW_PARSE_MODE.REQUEST_END) > 0) {
|
||||
break;
|
||||
}
|
||||
if ((curRowMode & ROW_PARSE_MODE.MULTI_DOC_CUR_DOC_END) > 0) break;
|
||||
if (curRow != pos.row && (curRowMode & ROW_PARSE_MODE.REQUEST_START) > 0) break;
|
||||
}
|
||||
|
||||
var column = (session.getLine(curRow) || "").length;
|
||||
|
||||
return { row: curRow, column: column };
|
||||
};
|
||||
|
||||
|
||||
ns.getCurrentRequestRange = function (editor) {
|
||||
if (ns.isInBetweenRequestsRow(null, editor)) return null;
|
||||
|
||||
var reqStart = ns.prevRequestStart(null, editor);
|
||||
var reqEnd = ns.nextRequestEnd(reqStart, editor);
|
||||
return new (ace.require("ace/range").Range)(
|
||||
reqStart.row, reqStart.column,
|
||||
reqEnd.row, reqEnd.column
|
||||
);
|
||||
};
|
||||
|
||||
ns.getCurrentRequest = function (editor) {
|
||||
editor = editor || sense.editor;
|
||||
|
||||
if (ns.isInBetweenRequestsRow(null, editor)) return null;
|
||||
|
||||
var request = {
|
||||
method: "",
|
||||
data: [],
|
||||
url: null
|
||||
};
|
||||
|
||||
var currentReqRange = ns.getCurrentRequestRange(editor);
|
||||
|
||||
var pos = currentReqRange.start;
|
||||
var tokenIter = ns.iterForPosition(pos.row, pos.column, editor);
|
||||
var t = tokenIter.getCurrentToken();
|
||||
request.method = t.value;
|
||||
t = ns.nextNonEmptyToken(tokenIter);
|
||||
if (!t || t.type == "method") return null;
|
||||
request.url = "";
|
||||
while (t && t.type && t.type.indexOf("url") == 0) {
|
||||
request.url += t.value;
|
||||
t = tokenIter.stepForward();
|
||||
}
|
||||
|
||||
var bodyStartRow = (t ? 0 : 1) + tokenIter.getCurrentTokenRow(); // artificially increase end of docs.
|
||||
var bodyStartColumn = 0;
|
||||
while (bodyStartRow < currentReqRange.end.row ||
|
||||
(bodyStartRow == currentReqRange.end.row &&
|
||||
bodyStartColumn < currentReqRange.end.column
|
||||
)) {
|
||||
dataEndPos = ns.nextDataDocEnd({ row: bodyStartRow, column: bodyStartColumn}, editor);
|
||||
var bodyRange = new (ace.require("ace/range").Range)(
|
||||
bodyStartRow, bodyStartColumn,
|
||||
dataEndPos.row, dataEndPos.column
|
||||
);
|
||||
var data = editor.getSession().getTextRange(bodyRange);
|
||||
request.data.push(data.trim());
|
||||
bodyStartRow = dataEndPos.row + 1;
|
||||
bodyStartColumn = 0;
|
||||
}
|
||||
return request;
|
||||
};
|
||||
|
||||
ns.textFromRequest = function (request) {
|
||||
var data = request.data;
|
||||
if (typeof data != "string") {
|
||||
data = data.join("\n");
|
||||
}
|
||||
return request.method + " " + request.url + "\n" + data;
|
||||
};
|
||||
|
||||
ns.replaceCurrentRequest = function (newRequest, curRequestRange) {
|
||||
if (!curRequestRange) curRequestRange = ns.getCurrentRequestRange();
|
||||
var text = ns.textFromRequest(newRequest);
|
||||
if (curRequestRange) {
|
||||
sense.editor.getSession().replace(curRequestRange, text);
|
||||
}
|
||||
else {
|
||||
// just insert where we are
|
||||
sense.editor.insert(text);
|
||||
}
|
||||
};
|
||||
|
||||
ns.getUrlParam = function (name) {
|
||||
name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
|
||||
var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
|
||||
results = regex.exec(location.search);
|
||||
return results == null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
|
||||
};
|
||||
|
||||
ns.isTokenizationStable = function (editor) {
|
||||
editor = editor || sense.editor;
|
||||
return !editor.getSession().bgTokenizer.running;
|
||||
};
|
||||
|
||||
ns.updateEditorAndCallWhenUpdated = function (data, editor, callback) {
|
||||
editor = editor || sense.editor;
|
||||
var session = editor.getSession();
|
||||
|
||||
function mycallback() {
|
||||
session.removeListener(mycallback);
|
||||
if (session.bgTokenizer.running) {
|
||||
setTimeout(mycallback, 50); // wait
|
||||
return;
|
||||
}
|
||||
callback();
|
||||
}
|
||||
|
||||
session.on('tokenizerUpdate', mycallback);
|
||||
session.setValue(data);
|
||||
}
|
||||
|
||||
})();
|
37
sense/tests/index.html
Normal file
37
sense/tests/index.html
Normal file
|
@ -0,0 +1,37 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Sense unittests</title>
|
||||
<link rel="stylesheet" href="lib/qunit-1.10.0.css">
|
||||
<style type="text/css">
|
||||
#editor {
|
||||
position: absolute;
|
||||
top: 20px;
|
||||
bottom: 20px;
|
||||
left: 20px;
|
||||
right: 20px;
|
||||
z-index: 200;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div id="qunit"></div>
|
||||
<script src="../lib/jquery-1.8.3.min.js" type="text/javascript"></script>
|
||||
<script src="../lib/jqueryui/jquery-ui-1.9.2.custom.min.js" type="text/javascript"></script>
|
||||
<script src="../lib/src-noconflict/ace.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="../src/utils.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="../src/curl.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="../src/kb.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="../src/autocomplete.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="../src/mappings.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="lib/qunit-1.10.0.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="src/curl_tests.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="src/kb_tests.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="src/mapping_tests.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="src/utils_tests.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="src/autocomplete_tests.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="src/tokenization_tests.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="src/integration_tests.js" type="text/javascript" charset="utf-8"></script>
|
||||
</body>
|
||||
</html>
|
270
sense/tests/lib/qunit-1.10.0.css
Normal file
270
sense/tests/lib/qunit-1.10.0.css
Normal file
|
@ -0,0 +1,270 @@
|
|||
/**
|
||||
* QUnit v1.10.0 - A JavaScript Unit Testing Framework
|
||||
*
|
||||
* http://qunitjs.com
|
||||
*
|
||||
* Copyright 2012 jQuery Foundation and other contributors
|
||||
* Released under the MIT license.
|
||||
* http://jquery.org/license
|
||||
*/
|
||||
|
||||
/** Font Family and Sizes */
|
||||
|
||||
#qunit-tests, #qunit-header, #qunit-banner, #qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult {
|
||||
font-family: "Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial, sans-serif;
|
||||
}
|
||||
|
||||
#qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult, #qunit-tests li {
|
||||
font-size: small;
|
||||
}
|
||||
|
||||
#qunit-tests {
|
||||
font-size: smaller;
|
||||
}
|
||||
|
||||
/** Resets */
|
||||
|
||||
#qunit-tests, #qunit-tests ol, #qunit-header, #qunit-banner, #qunit-userAgent, #qunit-testresult, #qunit-modulefilter {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
/** Header */
|
||||
|
||||
#qunit-header {
|
||||
padding: 0.5em 0 0.5em 1em;
|
||||
|
||||
color: #8699a4;
|
||||
background-color: #0d3349;
|
||||
|
||||
font-size: 1.5em;
|
||||
line-height: 1em;
|
||||
font-weight: normal;
|
||||
|
||||
border-radius: 5px 5px 0 0;
|
||||
-moz-border-radius: 5px 5px 0 0;
|
||||
-webkit-border-top-right-radius: 5px;
|
||||
-webkit-border-top-left-radius: 5px;
|
||||
}
|
||||
|
||||
#qunit-header a {
|
||||
text-decoration: none;
|
||||
color: #c2ccd1;
|
||||
}
|
||||
|
||||
#qunit-header a:hover,
|
||||
#qunit-header a:focus {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
#qunit-testrunner-toolbar label {
|
||||
display: inline-block;
|
||||
padding: 0 .5em 0 .1em;
|
||||
}
|
||||
|
||||
#qunit-banner {
|
||||
height: 5px;
|
||||
}
|
||||
|
||||
#qunit-testrunner-toolbar {
|
||||
padding: 0.5em 0 0.5em 2em;
|
||||
color: #5E740B;
|
||||
background-color: #eee;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
#qunit-userAgent {
|
||||
padding: 0.5em 0 0.5em 2.5em;
|
||||
background-color: #2b81af;
|
||||
color: #fff;
|
||||
text-shadow: rgba(0, 0, 0, 0.5) 2px 2px 1px;
|
||||
}
|
||||
|
||||
#qunit-modulefilter-container {
|
||||
float: right;
|
||||
}
|
||||
|
||||
/** Tests: Pass/Fail */
|
||||
|
||||
#qunit-tests {
|
||||
list-style-position: inside;
|
||||
}
|
||||
|
||||
#qunit-tests li {
|
||||
padding: 0.4em 0.5em 0.4em 2.5em;
|
||||
border-bottom: 1px solid #fff;
|
||||
list-style-position: inside;
|
||||
}
|
||||
|
||||
#qunit-tests.hidepass li.pass, #qunit-tests.hidepass li.running {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#qunit-tests li strong {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
#qunit-tests li a {
|
||||
padding: 0.5em;
|
||||
color: #c2ccd1;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
#qunit-tests li a:hover,
|
||||
#qunit-tests li a:focus {
|
||||
color: #000;
|
||||
}
|
||||
|
||||
#qunit-tests ol {
|
||||
margin-top: 0.5em;
|
||||
padding: 0.5em;
|
||||
|
||||
background-color: #fff;
|
||||
|
||||
border-radius: 5px;
|
||||
-moz-border-radius: 5px;
|
||||
-webkit-border-radius: 5px;
|
||||
}
|
||||
|
||||
#qunit-tests table {
|
||||
border-collapse: collapse;
|
||||
margin-top: .2em;
|
||||
}
|
||||
|
||||
#qunit-tests th {
|
||||
text-align: right;
|
||||
vertical-align: top;
|
||||
padding: 0 .5em 0 0;
|
||||
}
|
||||
|
||||
#qunit-tests td {
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
#qunit-tests pre {
|
||||
margin: 0;
|
||||
white-space: pre-wrap;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
|
||||
#qunit-tests del {
|
||||
background-color: #e0f2be;
|
||||
color: #374e0c;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
#qunit-tests ins {
|
||||
background-color: #ffcaca;
|
||||
color: #500;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
/*** Test Counts */
|
||||
|
||||
#qunit-tests b.counts {
|
||||
color: black;
|
||||
}
|
||||
|
||||
#qunit-tests b.passed {
|
||||
color: #5E740B;
|
||||
}
|
||||
|
||||
#qunit-tests b.failed {
|
||||
color: #710909;
|
||||
}
|
||||
|
||||
#qunit-tests li li {
|
||||
padding: 5px;
|
||||
background-color: #fff;
|
||||
border-bottom: none;
|
||||
list-style-position: inside;
|
||||
}
|
||||
|
||||
/*** Passing Styles */
|
||||
|
||||
#qunit-tests li li.pass {
|
||||
color: #3c510c;
|
||||
background-color: #fff;
|
||||
border-left: 10px solid #C6E746;
|
||||
}
|
||||
|
||||
#qunit-tests .pass {
|
||||
color: #528CE0;
|
||||
background-color: #D2E0E6;
|
||||
}
|
||||
|
||||
#qunit-tests .pass .test-name {
|
||||
color: #366097;
|
||||
}
|
||||
|
||||
#qunit-tests .pass .test-actual,
|
||||
#qunit-tests .pass .test-expected {
|
||||
color: #999999;
|
||||
}
|
||||
|
||||
#qunit-banner.qunit-pass {
|
||||
background-color: #C6E746;
|
||||
}
|
||||
|
||||
/*** Failing Styles */
|
||||
|
||||
#qunit-tests li li.fail {
|
||||
color: #710909;
|
||||
background-color: #fff;
|
||||
border-left: 10px solid #EE5757;
|
||||
white-space: pre;
|
||||
}
|
||||
|
||||
#qunit-tests > li:last-child {
|
||||
border-radius: 0 0 5px 5px;
|
||||
-moz-border-radius: 0 0 5px 5px;
|
||||
-webkit-border-bottom-right-radius: 5px;
|
||||
-webkit-border-bottom-left-radius: 5px;
|
||||
}
|
||||
|
||||
#qunit-tests .fail {
|
||||
color: #000000;
|
||||
background-color: #EE5757;
|
||||
}
|
||||
|
||||
#qunit-tests .fail .test-name,
|
||||
#qunit-tests .fail .module-name {
|
||||
color: #000000;
|
||||
}
|
||||
|
||||
#qunit-tests .fail .test-actual {
|
||||
color: #EE5757;
|
||||
}
|
||||
|
||||
#qunit-tests .fail .test-expected {
|
||||
color: green;
|
||||
}
|
||||
|
||||
#qunit-banner.qunit-fail {
|
||||
background-color: #EE5757;
|
||||
}
|
||||
|
||||
/** Result */
|
||||
|
||||
#qunit-testresult {
|
||||
padding: 0.5em 0.5em 0.5em 2.5em;
|
||||
|
||||
color: #2b81af;
|
||||
background-color: #D2E0E6;
|
||||
|
||||
border-bottom: 1px solid white;
|
||||
}
|
||||
|
||||
#qunit-testresult .module-name {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/** Fixture */
|
||||
|
||||
#qunit-fixture {
|
||||
position: absolute;
|
||||
top: -10000px;
|
||||
left: -10000px;
|
||||
width: 1000px;
|
||||
height: 1000px;
|
||||
}
|
1991
sense/tests/lib/qunit-1.10.0.js
Normal file
1991
sense/tests/lib/qunit-1.10.0.js
Normal file
File diff suppressed because it is too large
Load diff
129
sense/tests/phantomjs.runner.js
Normal file
129
sense/tests/phantomjs.runner.js
Normal file
|
@ -0,0 +1,129 @@
|
|||
/*
|
||||
* QtWebKit-powered headless test runner using PhantomJS
|
||||
*
|
||||
* PhantomJS binaries: http://phantomjs.org/download.html
|
||||
* Requires PhantomJS 1.6+ (1.7+ recommended)
|
||||
*
|
||||
* Run with:
|
||||
* phantomjs runner.js [url-of-your-qunit-testsuite]
|
||||
*
|
||||
* e.g.
|
||||
* phantomjs runner.js http://localhost/qunit/test/index.html
|
||||
*/
|
||||
|
||||
/*jshint latedef:false */
|
||||
/*global phantom:false, require:false, console:false, window:false, QUnit:false */
|
||||
|
||||
(function () {
|
||||
'use strict';
|
||||
|
||||
var args = require('system').args;
|
||||
|
||||
// arg[0]: scriptName, args[1...]: arguments
|
||||
if (args.length !== 2) {
|
||||
console.error('Usage:\n phantomjs runner.js [url-of-your-qunit-testsuite]');
|
||||
phantom.exit(1);
|
||||
}
|
||||
|
||||
var url = args[1],
|
||||
page = require('webpage').create();
|
||||
|
||||
// Route `console.log()` calls from within the Page context to the main Phantom context (i.e. current `this`)
|
||||
page.onConsoleMessage = function (msg) {
|
||||
console.log(msg);
|
||||
};
|
||||
|
||||
page.onInitialized = function () {
|
||||
page.evaluate(addLogging);
|
||||
};
|
||||
|
||||
page.onCallback = function (message) {
|
||||
var result,
|
||||
failed;
|
||||
|
||||
if (message) {
|
||||
if (message.name === 'QUnit.done') {
|
||||
result = message.data;
|
||||
failed = !result || result.failed;
|
||||
|
||||
phantom.exit(failed ? 1 : 0);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
page.open(url, function (status) {
|
||||
if (status !== 'success') {
|
||||
console.error('Unable to access network: ' + status);
|
||||
phantom.exit(1);
|
||||
} else {
|
||||
// Cannot do this verification with the 'DOMContentLoaded' handler because it
|
||||
// will be too late to attach it if a page does not have any script tags.
|
||||
var qunitMissing = page.evaluate(function () {
|
||||
return (typeof QUnit === 'undefined' || !QUnit);
|
||||
});
|
||||
if (qunitMissing) {
|
||||
console.error('The `QUnit` object is not present on this page.');
|
||||
phantom.exit(1);
|
||||
}
|
||||
|
||||
// Do nothing... the callback mechanism will handle everything!
|
||||
}
|
||||
});
|
||||
|
||||
function addLogging() {
|
||||
window.document.addEventListener('DOMContentLoaded', function () {
|
||||
var current_test_assertions = [];
|
||||
|
||||
QUnit.log(function (details) {
|
||||
var response;
|
||||
|
||||
// Ignore passing assertions
|
||||
if (details.result) {
|
||||
return;
|
||||
}
|
||||
|
||||
response = details.message || '';
|
||||
|
||||
if (typeof details.expected !== 'undefined') {
|
||||
if (response) {
|
||||
response += ', ';
|
||||
}
|
||||
|
||||
response += 'expected: ' + details.expected + ', but was: ' + details.actual;
|
||||
if (details.source) {
|
||||
response += "\n" + details.source;
|
||||
}
|
||||
}
|
||||
|
||||
current_test_assertions.push('Failed assertion: ' + response);
|
||||
});
|
||||
|
||||
QUnit.testDone(function (result) {
|
||||
var i,
|
||||
len,
|
||||
name = result.module + ': ' + result.name;
|
||||
|
||||
if (result.failed) {
|
||||
console.log('Test failed: ' + name);
|
||||
|
||||
for (i = 0, len = current_test_assertions.length; i < len; i++) {
|
||||
console.log(' ' + current_test_assertions[i]);
|
||||
}
|
||||
}
|
||||
|
||||
current_test_assertions.length = 0;
|
||||
});
|
||||
|
||||
QUnit.done(function (result) {
|
||||
console.log('Took ' + result.runtime + 'ms to run ' + result.total + ' tests. ' + result.passed + ' passed, ' + result.failed + ' failed.');
|
||||
|
||||
if (typeof window.callPhantom === 'function') {
|
||||
window.callPhantom({
|
||||
'name': 'QUnit.done',
|
||||
'data': result
|
||||
});
|
||||
}
|
||||
});
|
||||
}, false);
|
||||
}
|
||||
})();
|
14
sense/tests/src/autocomplete_tests.js
Normal file
14
sense/tests/src/autocomplete_tests.js
Normal file
|
@ -0,0 +1,14 @@
|
|||
var global = window;
|
||||
|
||||
module("Autocomplete", {
|
||||
setup: function () {
|
||||
if (!global.sense)
|
||||
global.sense = {};
|
||||
var sense = global.sense;
|
||||
sense.tests = {};
|
||||
},
|
||||
|
||||
teardown: function () {
|
||||
sense.tests = {};
|
||||
}
|
||||
});
|
162
sense/tests/src/curl_tests.js
Normal file
162
sense/tests/src/curl_tests.js
Normal file
|
@ -0,0 +1,162 @@
|
|||
var global = window;
|
||||
|
||||
module("CURL", {
|
||||
setup: function () {
|
||||
if (!global.sense)
|
||||
global.sense = {};
|
||||
var sense = global.sense;
|
||||
sense.tests = {};
|
||||
},
|
||||
|
||||
teardown: function () {
|
||||
sense.tests = {};
|
||||
}
|
||||
});
|
||||
|
||||
var notCURLS = [
|
||||
'sldhfsljfhs',
|
||||
's;kdjfsldkfj curl -XDELETE ""',
|
||||
'{ "hello": 1 }'
|
||||
];
|
||||
|
||||
var CURLS = [
|
||||
{
|
||||
"curl": "curl -XPUT 'http://localhost:9200/twitter/tweet/1' -d '{ \
|
||||
\"user\" : \"kimchy\", \
|
||||
\"post_date\" : \"2009-11-15T14:12:12\",\
|
||||
\"message\" : \"trying out Elastic Search\"\
|
||||
}'",
|
||||
"ret": {
|
||||
"server": "http://localhost:9200",
|
||||
"method": "PUT",
|
||||
"url": "/twitter/tweet/1",
|
||||
"data": "{ \
|
||||
\"user\" : \"kimchy\", \
|
||||
\"post_date\" : \"2009-11-15T14:12:12\",\
|
||||
\"message\" : \"trying out Elastic Search\"\
|
||||
}"
|
||||
}
|
||||
},
|
||||
{
|
||||
"curl": "curl -XGET \"localhost/twitter/tweet/1?version=2\" -d '{ \
|
||||
\"message\" : \"elasticsearch now has versioning support, double cool!\"\
|
||||
}'",
|
||||
"ret": {
|
||||
"server": "http://localhost",
|
||||
"method": "GET",
|
||||
"url": "/twitter/tweet/1?version=2",
|
||||
"data": "{ \
|
||||
\"message\" : \"elasticsearch now has versioning support, double cool!\"\
|
||||
}"
|
||||
}
|
||||
},
|
||||
{
|
||||
"curl": "curl -XPOST https://localhost/twitter/tweet/1?version=2 -d '{ \n\
|
||||
\"message\" : \"elasticsearch now has versioning support, double cool!\"\n\
|
||||
}'",
|
||||
"ret": {
|
||||
"server": "https://localhost",
|
||||
"method": "POST",
|
||||
"url": "/twitter/tweet/1?version=2",
|
||||
"data": "{ \n\
|
||||
\"message\" : \"elasticsearch now has versioning support, double cool!\"\n\
|
||||
}"
|
||||
}
|
||||
},
|
||||
{
|
||||
"curl": "curl -XPOST https://localhost/twitter",
|
||||
"ret": {
|
||||
"server": "https://localhost",
|
||||
"method": "POST",
|
||||
"url": "/twitter",
|
||||
"data": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"curl": "curl -X POST https://localhost/twitter/",
|
||||
"ret": {
|
||||
"server": "https://localhost",
|
||||
"method": "POST",
|
||||
"url": "/twitter/",
|
||||
"data": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"curl": "curl -s -XPOST localhost:9200/missing-test -d'\n\
|
||||
{ \n\
|
||||
\"mappings\": {\n\
|
||||
}\n\
|
||||
}'",
|
||||
"ret": {
|
||||
"server": "http://localhost:9200",
|
||||
"method": "POST",
|
||||
"url": "/missing-test",
|
||||
"data": "{ \n\
|
||||
\"mappings\": {\n\
|
||||
}\n\
|
||||
}"
|
||||
}
|
||||
},
|
||||
{
|
||||
"curl": "curl 'localhost:9200/missing-test/doc/_search?pretty' -d'\n\
|
||||
{\n\
|
||||
\"query\": {\n\
|
||||
},\n\
|
||||
}'",
|
||||
"ret": {
|
||||
"server": "http://localhost:9200",
|
||||
"method": "",
|
||||
"url": "/missing-test/doc/_search?pretty",
|
||||
"data": "{\n\
|
||||
\"query\": {\n\
|
||||
},\n\
|
||||
}"
|
||||
}
|
||||
},
|
||||
{
|
||||
"curl": 'curl localhost:9200/ -d"\n\
|
||||
{\n\
|
||||
\\"query\\": {\n\
|
||||
},\n\
|
||||
}"',
|
||||
"ret": {
|
||||
"server": "http://localhost:9200",
|
||||
"method": "",
|
||||
"url": "/",
|
||||
"data": "{\n\
|
||||
\"query\": {\n\
|
||||
},\n\
|
||||
}"
|
||||
}
|
||||
}
|
||||
];
|
||||
|
||||
|
||||
function compareCURL(result, expected) {
|
||||
deepEqual(result.server, expected.server);
|
||||
deepEqual(result.method, expected.method);
|
||||
deepEqual(result.url, expected.url);
|
||||
deepEqual(result.data, expected.data);
|
||||
}
|
||||
|
||||
for (var i = 0; i < notCURLS.length; i++)
|
||||
|
||||
test("cURL Detection - broken strings " + i, function (c) {
|
||||
return function () {
|
||||
ok(!global.sense.curl.detectCURL(notCURLS[c]), "marked as curl while it wasn't:" + notCURLS[c]);
|
||||
}
|
||||
}(i)
|
||||
);
|
||||
|
||||
for (var i = 0; i < CURLS.length; i++)
|
||||
|
||||
|
||||
test("cURL Detection - correct strings " + i, function (c) {
|
||||
return function () {
|
||||
ok(global.sense.curl.detectCURL(CURLS[c].curl), "marked as not curl while it was:" + CURLS[c].curl);
|
||||
var r = global.sense.curl.parseCURL(CURLS[c].curl);
|
||||
compareCURL(r, CURLS[c].ret);
|
||||
}
|
||||
}(i)
|
||||
);
|
||||
|
849
sense/tests/src/integration_tests.js
Normal file
849
sense/tests/src/integration_tests.js
Normal file
|
@ -0,0 +1,849 @@
|
|||
var sense = window.sense;
|
||||
var utils = sense.utils;
|
||||
|
||||
module("Integration", {
|
||||
setup: function () {
|
||||
sense.tests = {};
|
||||
sense.tests.editor_div = $('<div id="editor"></div>').appendTo($('body'));
|
||||
sense.tests.editor = ace.edit("editor");
|
||||
ace.require("ace/mode/sense");
|
||||
sense.tests.editor.getSession().setMode("ace/mode/sense");
|
||||
sense.tests.editor.getSession().setValue("hello");
|
||||
|
||||
},
|
||||
|
||||
teardown: function () {
|
||||
sense.tests.editor_div.remove();
|
||||
sense.tests = {};
|
||||
}
|
||||
});
|
||||
|
||||
function process_context_test(data, mapping, kb_schemes, request_line, test) {
|
||||
QUnit.asyncTest(test.name, function () {
|
||||
var autocomplete = sense.autocomplete;
|
||||
var editor = sense.tests.editor;
|
||||
var rowOffset = 0; // add one for the extra method line
|
||||
var editorValue = data;
|
||||
if (request_line != null) {
|
||||
if (data != null) {
|
||||
editorValue = request_line + "\n" + data;
|
||||
rowOffset = 1;
|
||||
}
|
||||
else {
|
||||
editorValue = request_line;
|
||||
}
|
||||
}
|
||||
|
||||
sense.mappings.clear();
|
||||
sense.mappings.loadMappings(mapping);
|
||||
|
||||
sense.kb.clear();
|
||||
if (kb_schemes) {
|
||||
if (kb_schemes.globals)
|
||||
$.each(kb_schemes.globals, function (parent, rules) {
|
||||
sense.kb.addGlobalAutocompleteRules(parent, rules);
|
||||
});
|
||||
if (kb_schemes.endpoints)
|
||||
$.each(kb_schemes.endpoints, function (endpoint, scheme) {
|
||||
sense.kb.addEndpointDescription(endpoint, scheme);
|
||||
});
|
||||
}
|
||||
|
||||
utils.updateEditorAndCallWhenUpdated(editorValue, editor, function () {
|
||||
editor.moveCursorTo(test.cursor.row + rowOffset, test.cursor.column);
|
||||
|
||||
|
||||
var context = autocomplete.test.getAutoCompleteContext(editor);
|
||||
|
||||
if (test.no_context) {
|
||||
assert.ok(!context, "Expected no context bug got one.");
|
||||
}
|
||||
else {
|
||||
assert.ok(context, "failed to have a context ...");
|
||||
}
|
||||
|
||||
if (!context) {
|
||||
start();
|
||||
return;
|
||||
}
|
||||
|
||||
context.initialValue = autocomplete.test.getAutoCompleteValueFromToken(context.updatedForToken);
|
||||
|
||||
|
||||
function ac(prop, prop_test) {
|
||||
if (typeof test[prop] != "undefined")
|
||||
if (prop_test)
|
||||
prop_test(context[prop], test[prop], prop);
|
||||
else
|
||||
assert.deepEqual(context[prop], test[prop], prop + " element of context are equal");
|
||||
}
|
||||
|
||||
function pos_compare(actual, expected, name) {
|
||||
assert.equal(actual.row, expected.row + rowOffset, "row of " + name + " position is not as expected");
|
||||
assert.equal(actual.column, expected.column, "column of " + name + " position is not as expected");
|
||||
}
|
||||
|
||||
function range_compare(actual, expected, name) {
|
||||
pos_compare(actual.start, expected.start, name + ".start");
|
||||
pos_compare(actual.end, expected.end, name + ".end");
|
||||
}
|
||||
|
||||
function autocompleteset_compare(actual, expected, name) {
|
||||
if (typeof expected.completionTerms != "undefined")
|
||||
assert.deepEqual(actual.completionTerms, expected.completionTerms,
|
||||
name + ".completionTerms are not equal");
|
||||
if (typeof expected.templateByTerm != "undefined")
|
||||
assert.deepEqual(actual.templateByTerm, expected.templateByTerm,
|
||||
name + ".templateByTerm are not equal");
|
||||
|
||||
}
|
||||
|
||||
ac("initialValue");
|
||||
ac("prefixToAdd");
|
||||
ac("suffixToAdd");
|
||||
ac("addTemplate");
|
||||
ac("textBoxPosition", pos_compare);
|
||||
ac("rangeToReplace", range_compare);
|
||||
ac("autoCompleteSet", autocompleteset_compare);
|
||||
|
||||
start();
|
||||
});
|
||||
|
||||
})
|
||||
}
|
||||
|
||||
function context_tests(data, mapping, kb_schemes, request_line, tests) {
|
||||
if (data != null && typeof data != "string") data = JSON.stringify(data, null, 3);
|
||||
for (var t = 0; t < tests.length; t++) {
|
||||
process_context_test(data, mapping, kb_schemes, request_line, tests[t]);
|
||||
}
|
||||
}
|
||||
|
||||
SEARCH_KB = {
|
||||
endpoints: {
|
||||
_search: {
|
||||
data_autocomplete_rules: {
|
||||
query: { match_all: {}, term: { "$FIELD$": ""}},
|
||||
size: {},
|
||||
facets: { "*": { terms: { field: "$FIELD$" }}, __template: {}}
|
||||
}
|
||||
}}
|
||||
};
|
||||
|
||||
MAPPING = {
|
||||
"index1": {
|
||||
"type1.1": {
|
||||
"properties": {
|
||||
"field1.1.1": { "type": "string" },
|
||||
"field1.1.2": { "type": "string" }
|
||||
}
|
||||
}
|
||||
},
|
||||
"index2": {
|
||||
"type2.1": {
|
||||
"properties": {
|
||||
"field2.1.1": { "type": "string" },
|
||||
"field2.1.2": { "type": "string" }
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
context_tests(
|
||||
{},
|
||||
MAPPING,
|
||||
SEARCH_KB,
|
||||
"POST _search",
|
||||
[
|
||||
{
|
||||
name: "Empty doc",
|
||||
cursor: { row: 0, column: 1},
|
||||
initialValue: "",
|
||||
addTemplate: true,
|
||||
prefixToAdd: "",
|
||||
suffixToAdd: "",
|
||||
rangeToReplace: { start: { row: 0, column: 1 }, end: { row: 0, column: 1 }},
|
||||
autoCompleteSet: { completionTerms: ["facets", "query", "size"]}
|
||||
}
|
||||
]
|
||||
);
|
||||
|
||||
context_tests(
|
||||
{},
|
||||
MAPPING,
|
||||
SEARCH_KB,
|
||||
"POST _no_context",
|
||||
[
|
||||
{
|
||||
name: "Missing KB",
|
||||
cursor: { row: 0, column: 1},
|
||||
no_context: true
|
||||
}
|
||||
]
|
||||
);
|
||||
|
||||
context_tests(
|
||||
{
|
||||
"query": {
|
||||
"field": "something"
|
||||
},
|
||||
"facets": {},
|
||||
"size": 20
|
||||
},
|
||||
MAPPING,
|
||||
SEARCH_KB,
|
||||
"POST _search",
|
||||
[
|
||||
{
|
||||
name: "existing dictionary key, no template",
|
||||
cursor: { row: 1, column: 6},
|
||||
initialValue: "query",
|
||||
addTemplate: false,
|
||||
prefixToAdd: "",
|
||||
suffixToAdd: "",
|
||||
rangeToReplace: { start: { row: 1, column: 3 }, end: { row: 1, column: 10 }},
|
||||
autoCompleteSet: { completionTerms: ["facets", "query", "size"]}
|
||||
},
|
||||
{
|
||||
name: "existing inner dictionary key",
|
||||
cursor: { row: 2, column: 7},
|
||||
initialValue: "field",
|
||||
addTemplate: false,
|
||||
prefixToAdd: "",
|
||||
suffixToAdd: "",
|
||||
rangeToReplace: { start: { row: 2, column: 6}, end: { row: 2, column: 13 }},
|
||||
autoCompleteSet: { completionTerms: ["match_all", "term"]}
|
||||
},
|
||||
{
|
||||
name: "existing dictionary key, yes template",
|
||||
cursor: { row: 4, column: 7},
|
||||
initialValue: "facets",
|
||||
addTemplate: true,
|
||||
prefixToAdd: "",
|
||||
suffixToAdd: "",
|
||||
rangeToReplace: { start: { row: 4, column: 3 }, end: { row: 4, column: 15 }},
|
||||
autoCompleteSet: { completionTerms: ["facets", "query", "size"]}
|
||||
}
|
||||
]
|
||||
);
|
||||
|
||||
context_tests(
|
||||
'{\n' +
|
||||
' "query": {\n' +
|
||||
' "field": "something"\n' +
|
||||
' },\n' +
|
||||
' "facets": {},\n' +
|
||||
' "size": 20 \n' +
|
||||
'}',
|
||||
MAPPING,
|
||||
SEARCH_KB,
|
||||
"POST _search",
|
||||
[
|
||||
{
|
||||
name: "trailing comma, end of line",
|
||||
cursor: { row: 4, column: 18},
|
||||
initialValue: "",
|
||||
addTemplate: true,
|
||||
prefixToAdd: "",
|
||||
suffixToAdd: ", ",
|
||||
rangeToReplace: { start: { row: 4, column: 16 }, end: { row: 4, column: 16 }},
|
||||
autoCompleteSet: { completionTerms: ["facets", "query", "size"]}
|
||||
},
|
||||
{
|
||||
name: "trailing comma, beginning of line",
|
||||
cursor: { row: 5, column: 1},
|
||||
initialValue: "",
|
||||
addTemplate: true,
|
||||
prefixToAdd: "",
|
||||
suffixToAdd: ", ",
|
||||
rangeToReplace: { start: { row: 5, column: 1 }, end: { row: 5, column: 1 }},
|
||||
autoCompleteSet: { completionTerms: ["facets", "query", "size"]}
|
||||
},
|
||||
{
|
||||
name: "prefix comma, beginning of line",
|
||||
cursor: { row: 6, column: 0},
|
||||
initialValue: "",
|
||||
addTemplate: true,
|
||||
prefixToAdd: ", ",
|
||||
suffixToAdd: "",
|
||||
rangeToReplace: { start: { row: 6, column: 0 }, end: { row: 6, column: 0 }},
|
||||
autoCompleteSet: { completionTerms: ["facets", "query", "size"]}
|
||||
},
|
||||
{
|
||||
name: "prefix comma, end of line",
|
||||
cursor: { row: 5, column: 14},
|
||||
initialValue: "",
|
||||
addTemplate: true,
|
||||
prefixToAdd: ", ",
|
||||
suffixToAdd: "",
|
||||
rangeToReplace: { start: { row: 5, column: 14 }, end: { row: 5, column: 14 }},
|
||||
autoCompleteSet: { completionTerms: ["facets", "query", "size"]}
|
||||
}
|
||||
|
||||
]
|
||||
);
|
||||
|
||||
context_tests(
|
||||
{
|
||||
"object": 1,
|
||||
"array": 1,
|
||||
"value_one_of": 1,
|
||||
"value": 2
|
||||
},
|
||||
MAPPING,
|
||||
{
|
||||
endpoints: {
|
||||
_test: {
|
||||
data_autocomplete_rules: {
|
||||
object: { bla: 1 },
|
||||
array: [ 1 ],
|
||||
value_one_of: { __one_of: [ 1, 2]},
|
||||
value: 3
|
||||
}
|
||||
}}
|
||||
},
|
||||
"POST _test",
|
||||
[
|
||||
{
|
||||
name: "not matching object when { is not opened",
|
||||
cursor: { row: 1, column: 12},
|
||||
initialValue: "",
|
||||
autoCompleteSet: { completionTerms: ["{"] }
|
||||
},
|
||||
{
|
||||
name: "not matching array when [ is not opened",
|
||||
cursor: { row: 2, column: 12},
|
||||
initialValue: "",
|
||||
autoCompleteSet: { completionTerms: ["["] }
|
||||
},
|
||||
{
|
||||
name: "matching value with one_of",
|
||||
cursor: { row: 3, column: 19},
|
||||
initialValue: "",
|
||||
autoCompleteSet: { completionTerms: [ 1, 2] }
|
||||
},
|
||||
{
|
||||
name: "matching value",
|
||||
cursor: { row: 4, column: 12},
|
||||
initialValue: "",
|
||||
autoCompleteSet: { completionTerms: [ 3 ] }
|
||||
}
|
||||
]
|
||||
);
|
||||
|
||||
context_tests(
|
||||
{
|
||||
"query": {
|
||||
"field": "something"
|
||||
},
|
||||
"facets": {
|
||||
"name": {}
|
||||
},
|
||||
"size": 20
|
||||
},
|
||||
MAPPING,
|
||||
SEARCH_KB,
|
||||
"POST _search",
|
||||
[
|
||||
{
|
||||
name: "$FIELD$ matching",
|
||||
cursor: { row: 5, column: 15},
|
||||
initialValue: "",
|
||||
addTemplate: true,
|
||||
prefixToAdd: "",
|
||||
suffixToAdd: "",
|
||||
rangeToReplace: { start: { row: 5, column: 15 }, end: { row: 5, column: 15 }},
|
||||
autoCompleteSet: { completionTerms: ["terms"] }
|
||||
}
|
||||
// , made redundent by inline auto complete. Still need to find a solution for templates
|
||||
// {
|
||||
// name: "$FIELD$ options",
|
||||
// cursor: { row: 5, column: 7},
|
||||
// initialValue: "name",
|
||||
// addTemplate: true,
|
||||
// prefixToAdd: "",
|
||||
// suffixToAdd: "",
|
||||
// autoCompleteSet: { completionTerms: [] }
|
||||
// }
|
||||
]
|
||||
);
|
||||
|
||||
context_tests(
|
||||
{
|
||||
"index": "123"
|
||||
},
|
||||
MAPPING,
|
||||
{
|
||||
endpoints: {
|
||||
_test: {
|
||||
data_autocomplete_rules: {
|
||||
index: "$INDEX$"
|
||||
}
|
||||
}}
|
||||
},
|
||||
"POST _test",
|
||||
[
|
||||
{
|
||||
name: "$INDEX$ matching",
|
||||
cursor: { row: 1, column: 15},
|
||||
autoCompleteSet: { completionTerms: ["index1", "index2"] }
|
||||
}
|
||||
]
|
||||
);
|
||||
|
||||
context_tests(
|
||||
{
|
||||
"array": [
|
||||
"a"
|
||||
],
|
||||
"oneof": "1"
|
||||
},
|
||||
MAPPING,
|
||||
{
|
||||
endpoints: {
|
||||
_endpoint: {
|
||||
data_autocomplete_rules: {
|
||||
array: [ "a", "b"],
|
||||
number: 1,
|
||||
object: {},
|
||||
fixed: { __template: { "a": 1 }},
|
||||
oneof: { __one_of: [ "o1", "o2"]}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"POST _endpoint",
|
||||
[
|
||||
{
|
||||
name: "Templates 1",
|
||||
cursor: { row: 1, column: 0},
|
||||
autoCompleteSet: { completionTerms: ["array", "fixed", "number", "object", "oneof"],
|
||||
templateByTerm: { array: [ "a" ], number: 1, object: {}, fixed: { a: 1}, oneof: "o1" }}
|
||||
},
|
||||
{
|
||||
name: "Templates - one off",
|
||||
cursor: { row: 4, column: 12},
|
||||
autoCompleteSet: { completionTerms: ["o1", "o2"],
|
||||
templateByTerm: { }
|
||||
}
|
||||
}
|
||||
]
|
||||
);
|
||||
|
||||
|
||||
context_tests(
|
||||
{
|
||||
"any_of_numbers": [
|
||||
1
|
||||
],
|
||||
"any_of_obj": [
|
||||
{
|
||||
"a": 1
|
||||
}
|
||||
]
|
||||
},
|
||||
MAPPING,
|
||||
{
|
||||
endpoints: {
|
||||
_endpoint: {
|
||||
data_autocomplete_rules: {
|
||||
any_of_numbers: { __template: [1, 2], __any_of: [1, 2, 3]},
|
||||
any_of_obj: { __template: [
|
||||
{ c: 1}
|
||||
], __any_of: [
|
||||
{ a: 1, b: 2 },
|
||||
{c: 1}
|
||||
]}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"POST _endpoint",
|
||||
[
|
||||
{
|
||||
name: "Any of - templates",
|
||||
cursor: { row: 1, column: 0},
|
||||
autoCompleteSet: { completionTerms: ["any_of_numbers", "any_of_obj"],
|
||||
templateByTerm: { any_of_numbers: [ 1, 2 ], any_of_obj: [
|
||||
{ c: 1}
|
||||
]}
|
||||
}
|
||||
},
|
||||
{
|
||||
name: "Any of - numbers",
|
||||
cursor: { row: 2, column: 2},
|
||||
autoCompleteSet: { completionTerms: [1, 2, 3],
|
||||
templateByTerm: { }
|
||||
}
|
||||
},
|
||||
{
|
||||
name: "Any of - object",
|
||||
cursor: { row: 6, column: 2},
|
||||
autoCompleteSet: { completionTerms: ["a", "b"],
|
||||
templateByTerm: { a: 1, b: 2 }
|
||||
}
|
||||
}
|
||||
]
|
||||
);
|
||||
|
||||
context_tests(
|
||||
{
|
||||
|
||||
},
|
||||
MAPPING,
|
||||
{
|
||||
endpoints: {
|
||||
_endpoint: {
|
||||
data_autocomplete_rules: {
|
||||
"query": ""
|
||||
}
|
||||
}}},
|
||||
"POST _endpoint",
|
||||
[
|
||||
{
|
||||
name: "Empty string as default",
|
||||
cursor: { row: 0, column: 1},
|
||||
autoCompleteSet: { completionTerms: ["query"],
|
||||
templateByTerm: { query: ""}}
|
||||
}
|
||||
]
|
||||
);
|
||||
|
||||
context_tests(
|
||||
{
|
||||
"a": {
|
||||
"b": {},
|
||||
"c": {},
|
||||
"d": {},
|
||||
"e": {},
|
||||
"f": [
|
||||
{}
|
||||
]
|
||||
}
|
||||
},
|
||||
MAPPING,
|
||||
{
|
||||
globals: {
|
||||
gtarget: {
|
||||
t1: 2
|
||||
}
|
||||
},
|
||||
endpoints: {
|
||||
_current: {
|
||||
|
||||
_id: "POST _current",
|
||||
data_autocomplete_rules: {
|
||||
"a": {
|
||||
"b": {
|
||||
__scope_link: ".a"
|
||||
},
|
||||
"c": {
|
||||
__scope_link: "ext.target"
|
||||
},
|
||||
"d": {
|
||||
__scope_link: "GLOBAL.gtarget"
|
||||
},
|
||||
"e": {
|
||||
__scope_link: "ext"
|
||||
},
|
||||
"f": [
|
||||
{
|
||||
__scope_link: "ext.target"
|
||||
}
|
||||
]
|
||||
}
|
||||
}},
|
||||
|
||||
ext: {
|
||||
data_autocomplete_rules: {
|
||||
target: {
|
||||
t2: 1
|
||||
}
|
||||
}}
|
||||
}
|
||||
},
|
||||
"POST _current",
|
||||
[
|
||||
{
|
||||
name: "Relative scope link test",
|
||||
cursor: { row: 2, column: 12},
|
||||
autoCompleteSet: { completionTerms: ["b", "c", "d", "e", "f"],
|
||||
templateByTerm: { b: {}, c: {}, d: {}, e: {}, f: [
|
||||
{}
|
||||
]}}
|
||||
},
|
||||
{
|
||||
name: "External scope link test",
|
||||
cursor: { row: 3, column: 12},
|
||||
autoCompleteSet: { completionTerms: ["t2"],
|
||||
templateByTerm: { t2: 1}}
|
||||
},
|
||||
{
|
||||
name: "Global scope link test",
|
||||
cursor: { row: 4, column: 12},
|
||||
autoCompleteSet: { completionTerms: ["t1"],
|
||||
templateByTerm: { t1: 2}}
|
||||
},
|
||||
{
|
||||
name: "Entire endpoint scope link test",
|
||||
cursor: { row: 5, column: 12},
|
||||
autoCompleteSet: { completionTerms: ["target"],
|
||||
templateByTerm: { target: {}}}
|
||||
},
|
||||
{
|
||||
name: "A scope link within an array",
|
||||
cursor: { row: 7, column: 10},
|
||||
autoCompleteSet: { completionTerms: ["t2"],
|
||||
templateByTerm: { t2: 1}}
|
||||
}
|
||||
]
|
||||
);
|
||||
|
||||
context_tests(
|
||||
{
|
||||
"a": {}
|
||||
},
|
||||
MAPPING,
|
||||
{
|
||||
endpoints: {
|
||||
_endpoint: {
|
||||
data_autocomplete_rules: {
|
||||
"a": {},
|
||||
"b": {}
|
||||
}
|
||||
}}},
|
||||
"POST _endpoint",
|
||||
[
|
||||
{
|
||||
name: "Path after empty object",
|
||||
cursor: { row: 1, column: 10},
|
||||
autoCompleteSet: { completionTerms: ["a", "b"] }
|
||||
}
|
||||
]
|
||||
);
|
||||
|
||||
context_tests(
|
||||
{
|
||||
"": {}
|
||||
},
|
||||
MAPPING,
|
||||
SEARCH_KB,
|
||||
"POST _search",
|
||||
[
|
||||
{
|
||||
name: "Replace an empty string",
|
||||
cursor: { row: 1, column: 4},
|
||||
rangeToReplace: { start: { row: 1, column: 3 }, end: { row: 1, column: 9 }}
|
||||
}
|
||||
]
|
||||
);
|
||||
|
||||
context_tests(
|
||||
{
|
||||
"a": [
|
||||
{
|
||||
"c": {}
|
||||
}
|
||||
]
|
||||
},
|
||||
MAPPING,
|
||||
{
|
||||
endpoints: {
|
||||
_endpoint: {
|
||||
data_autocomplete_rules: {
|
||||
"a": [
|
||||
{ b: 1}
|
||||
]
|
||||
}
|
||||
}}},
|
||||
"POST _endpoint",
|
||||
[
|
||||
{
|
||||
name: "List of objects - internal autocomplete",
|
||||
cursor: { row: 3, column: 10},
|
||||
autoCompleteSet: { completionTerms: ["b"] }
|
||||
},
|
||||
{
|
||||
name: "List of objects - external template",
|
||||
cursor: { row: 0, column: 1},
|
||||
autoCompleteSet: { completionTerms: ["a"], templateByTerm: { a: [
|
||||
{}
|
||||
]} }
|
||||
}
|
||||
]
|
||||
);
|
||||
|
||||
context_tests(
|
||||
{
|
||||
"query": {
|
||||
"term": {
|
||||
"field": "something"
|
||||
}
|
||||
},
|
||||
"facets": {
|
||||
"test": {
|
||||
"terms": {
|
||||
"field": "test"
|
||||
}
|
||||
}
|
||||
},
|
||||
"size": 20
|
||||
},
|
||||
MAPPING,
|
||||
SEARCH_KB,
|
||||
"POST index1/_search",
|
||||
[
|
||||
{
|
||||
name: "Field completion as scope",
|
||||
cursor: { row: 3, column: 10},
|
||||
autoCompleteSet: { completionTerms: ["field1.1.1", "field1.1.2"]}
|
||||
},
|
||||
{
|
||||
name: "Field completion as value",
|
||||
cursor: { row: 9, column: 23},
|
||||
autoCompleteSet: { completionTerms: ["field1.1.1", "field1.1.2"]}
|
||||
}
|
||||
]
|
||||
);
|
||||
|
||||
|
||||
context_tests(
|
||||
"",
|
||||
MAPPING,
|
||||
SEARCH_KB,
|
||||
"POST _search",
|
||||
[
|
||||
{
|
||||
name: "initial doc start",
|
||||
cursor: { row: 1, column: 0},
|
||||
autoCompleteSet: { completionTerms: ["{"]},
|
||||
prefixToAdd: "", suffixToAdd: ""
|
||||
}
|
||||
]
|
||||
);
|
||||
|
||||
|
||||
context_tests(
|
||||
'{\n' +
|
||||
' "query": {} \n' +
|
||||
'}\n' +
|
||||
'\n' +
|
||||
'\n',
|
||||
MAPPING,
|
||||
SEARCH_KB,
|
||||
"POST _search",
|
||||
[
|
||||
{
|
||||
name: "Cursor rows after request end",
|
||||
cursor: { row: 4, column: 0},
|
||||
autoCompleteSet: { completionTerms: [ "GET", "PUT", "POST", "DELETE", "HEAD" ]},
|
||||
prefixToAdd: "", suffixToAdd: " "
|
||||
},
|
||||
{
|
||||
name: "Cursor just after request end",
|
||||
cursor: { row: 2, column: 1},
|
||||
no_context: true
|
||||
}
|
||||
|
||||
]
|
||||
);
|
||||
|
||||
|
||||
var CLUSTER_KB = {
|
||||
endpoints: {
|
||||
"_search": {
|
||||
data_autocomplete_rules: {
|
||||
}
|
||||
},
|
||||
"_cluster/stats": {
|
||||
indices_mode: "none",
|
||||
data_autocomplete_rules: {
|
||||
}
|
||||
},
|
||||
"_cluster/nodes/stats": {
|
||||
data_autocomplete_rules: {
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
context_tests(
|
||||
null,
|
||||
MAPPING,
|
||||
CLUSTER_KB,
|
||||
"POST _cluster",
|
||||
[
|
||||
{
|
||||
name: "Endpoints with slashes - no slash",
|
||||
cursor: { row: 0, column: 8},
|
||||
autoCompleteSet: { completionTerms: [ "_search", "_cluster/stats", "_cluster/nodes/stats" ]},
|
||||
prefixToAdd: "", suffixToAdd: ""
|
||||
}
|
||||
]
|
||||
);
|
||||
|
||||
context_tests(
|
||||
null,
|
||||
MAPPING,
|
||||
CLUSTER_KB,
|
||||
"POST _cluster/",
|
||||
[
|
||||
{
|
||||
name: "Endpoints with slashes - before slash",
|
||||
cursor: { row: 0, column: 8},
|
||||
autoCompleteSet: { completionTerms: [ "_search", "_cluster/stats", "_cluster/nodes/stats" ]},
|
||||
prefixToAdd: "", suffixToAdd: ""
|
||||
},
|
||||
{
|
||||
name: "Endpoints with slashes - on slash",
|
||||
cursor: { row: 0, column: 13},
|
||||
autoCompleteSet: { completionTerms: [ "_search", "_cluster/stats", "_cluster/nodes/stats" ]},
|
||||
prefixToAdd: "", suffixToAdd: ""
|
||||
}
|
||||
]
|
||||
);
|
||||
|
||||
context_tests(
|
||||
null,
|
||||
MAPPING,
|
||||
CLUSTER_KB,
|
||||
"POST _cluster/no",
|
||||
[
|
||||
{
|
||||
name: "Endpoints with slashes - after slash",
|
||||
cursor: { row: 0, column: 15},
|
||||
autoCompleteSet: { completionTerms: [ "stats", "nodes/stats" ]},
|
||||
prefixToAdd: "", suffixToAdd: "", initialValue: "no"
|
||||
}
|
||||
]
|
||||
);
|
||||
|
||||
context_tests(
|
||||
null,
|
||||
MAPPING,
|
||||
CLUSTER_KB,
|
||||
"POST _cluster/nodes/st",
|
||||
[
|
||||
{
|
||||
name: "Endpoints with two slashes",
|
||||
cursor: { row: 0, column: 21},
|
||||
autoCompleteSet: { completionTerms: ["stats" ]},
|
||||
prefixToAdd: "", suffixToAdd: "", initialValue: "st"
|
||||
}
|
||||
]
|
||||
);
|
||||
|
||||
context_tests(
|
||||
null,
|
||||
MAPPING,
|
||||
CLUSTER_KB,
|
||||
"POST cl",
|
||||
[
|
||||
{
|
||||
name: "Endpoints by subpart",
|
||||
cursor: { row: 0, column: 14},
|
||||
autoCompleteSet: { completionTerms: [ "index1", "index2", "_search", "_cluster/stats", "_cluster/nodes/stats" ]},
|
||||
prefixToAdd: "", suffixToAdd: "", initialValue: "cl"
|
||||
}
|
||||
]
|
||||
);
|
103
sense/tests/src/kb_tests.js
Normal file
103
sense/tests/src/kb_tests.js
Normal file
|
@ -0,0 +1,103 @@
|
|||
var global = window;
|
||||
|
||||
module("Knowledge base", {
|
||||
setup: function () {
|
||||
var sense = global.sense;
|
||||
sense.mappings.clear();
|
||||
sense.tests = {};
|
||||
},
|
||||
|
||||
teardown: function () {
|
||||
sense.tests = {};
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
test("Index mode filters", function () {
|
||||
global.sense.mappings.clear();
|
||||
global.sense.kb.clear();
|
||||
global.sense.kb.addEndpointDescription("_multi_indices", {
|
||||
indices_mode: "multi"
|
||||
});
|
||||
global.sense.kb.addEndpointDescription("_one_or_more_indices", {
|
||||
indices_mode: "required_multi"
|
||||
});
|
||||
global.sense.kb.addEndpointDescription("_single_index", {
|
||||
match: "_single_index",
|
||||
endpoint_autocomplete: [
|
||||
"_single_index"
|
||||
],
|
||||
indices_mode: "single"
|
||||
});
|
||||
global.sense.kb.addEndpointDescription("_no_index", {
|
||||
indices_mode: "none"
|
||||
});
|
||||
|
||||
deepEqual(global.sense.kb.getEndpointAutocomplete([], [], null).sort(), ["_multi_indices", "_no_index" ]);
|
||||
deepEqual(global.sense.kb.getEndpointAutocomplete(["index"], [], null).sort(), ["_multi_indices", "_one_or_more_indices", "_single_index"]);
|
||||
deepEqual(global.sense.kb.getEndpointAutocomplete(["index1", "index2"], [], null).sort(), ["_multi_indices", "_one_or_more_indices"]);
|
||||
deepEqual(global.sense.kb.getEndpointAutocomplete(["index1", "index2"], ["type"], null).sort(), ["_multi_indices", "_one_or_more_indices"]);
|
||||
});
|
||||
|
||||
test("Type mode filters", function () {
|
||||
global.sense.mappings.clear();
|
||||
global.sense.kb.clear();
|
||||
global.sense.kb.addEndpointDescription("_multi_types", {
|
||||
indices_mode: "single",
|
||||
types_mode: "multi"
|
||||
});
|
||||
global.sense.kb.addEndpointDescription("_single_type", {
|
||||
endpoint_autocomplete: [
|
||||
"_single_type"
|
||||
],
|
||||
indices_mode: "single",
|
||||
types_mode: "single"
|
||||
});
|
||||
global.sense.kb.addEndpointDescription("_no_types", {
|
||||
indices_mode: "single",
|
||||
types_mode: "none"
|
||||
|
||||
});
|
||||
|
||||
deepEqual(global.sense.kb.getEndpointAutocomplete(["index"], [], null).sort(), ["_multi_types", "_no_types" ]);
|
||||
deepEqual(global.sense.kb.getEndpointAutocomplete(["index"], ["type"], null).sort(), ["_multi_types", "_single_type"]);
|
||||
deepEqual(global.sense.kb.getEndpointAutocomplete(["index"], ["type", "type1"], null).sort(), ["_multi_types"]);
|
||||
});
|
||||
|
||||
test("Id mode filters", function () {
|
||||
global.sense.kb.clear();
|
||||
global.sense.kb.addEndpointDescription("_single_id", {
|
||||
indices_mode: "single",
|
||||
types_mode: "single",
|
||||
doc_id_mode: "required_single"
|
||||
});
|
||||
global.sense.kb.addEndpointDescription("_no_id", {
|
||||
indices_mode: "single",
|
||||
types_mode: "single",
|
||||
doc_id_mode: "none"
|
||||
|
||||
});
|
||||
|
||||
deepEqual(global.sense.kb.getEndpointAutocomplete(["index"], ["type"], null).sort(), ["_no_id"].sort());
|
||||
deepEqual(global.sense.kb.getEndpointAutocomplete(["index"], ["type"], "123").sort(), ["_single_id"].sort());
|
||||
});
|
||||
|
||||
test("Get active scheme by doc id", function () {
|
||||
global.sense.kb.clear();
|
||||
global.sense.kb.addEndpointDescription("_single_id", {
|
||||
match: ".*",
|
||||
indices_mode: "single",
|
||||
types_mode: "single",
|
||||
doc_id_mode: "required_single"
|
||||
});
|
||||
global.sense.kb.addEndpointDescription("_no_id", {
|
||||
match: ".*",
|
||||
indices_mode: "single",
|
||||
types_mode: "single",
|
||||
doc_id_mode: "none"
|
||||
|
||||
});
|
||||
|
||||
deepEqual(global.sense.kb.getEndpointDescriptionByPath("bla", ["index"], ["type"], null).doc_id_mode, "none");
|
||||
deepEqual(global.sense.kb.getEndpointDescriptionByPath("bla", ["index"], ["type"], "123").doc_id_mode, "required_single");
|
||||
});
|
209
sense/tests/src/mapping_tests.js
Normal file
209
sense/tests/src/mapping_tests.js
Normal file
|
@ -0,0 +1,209 @@
|
|||
var global = window;
|
||||
|
||||
module("Mappings", {
|
||||
setup: function () {
|
||||
if (!global.sense)
|
||||
global.sense = {};
|
||||
var sense = global.sense;
|
||||
sense.tests = {};
|
||||
},
|
||||
|
||||
teardown: function () {
|
||||
sense.tests = {};
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
test("Multi fields", function () {
|
||||
global.sense.mappings.loadMappings({
|
||||
"index": {
|
||||
"tweet": {
|
||||
"properties": {
|
||||
"first_name": {
|
||||
"type": "multi_field",
|
||||
"path": "just_name",
|
||||
"fields": {
|
||||
"first_name": {"type": "string", "index": "analyzed"},
|
||||
"any_name": {"type": "string", "index": "analyzed"}
|
||||
}
|
||||
},
|
||||
"last_name": {
|
||||
"type": "multi_field",
|
||||
"path": "just_name",
|
||||
"fields": {
|
||||
"last_name": {"type": "string", "index": "analyzed"},
|
||||
"any_name": {"type": "string", "index": "analyzed"}
|
||||
}
|
||||
}
|
||||
}
|
||||
}}
|
||||
});
|
||||
|
||||
deepEqual(global.sense.mappings.getFields("index").sort(), ["any_name", "first_name", "last_name" ]);
|
||||
});
|
||||
|
||||
test("Simple fields", function () {
|
||||
global.sense.mappings.loadMappings({
|
||||
"index": {
|
||||
"tweet": {
|
||||
"properties": {
|
||||
"str": {
|
||||
"type": "string"
|
||||
},
|
||||
"number": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
}}
|
||||
});
|
||||
|
||||
deepEqual(global.sense.mappings.getFields("index").sort(), ["number", "str" ]);
|
||||
});
|
||||
|
||||
|
||||
test("Nested fields", function () {
|
||||
global.sense.mappings.loadMappings({
|
||||
"index": {
|
||||
"tweet": {
|
||||
"properties": {
|
||||
"person": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"name": {
|
||||
"properties": {
|
||||
"first_name": {"type": "string"},
|
||||
"last_name": {"type": "string"}
|
||||
}
|
||||
},
|
||||
"sid": {"type": "string", "index": "not_analyzed"}
|
||||
}
|
||||
},
|
||||
"message": {"type": "string"}
|
||||
}
|
||||
}
|
||||
}});
|
||||
|
||||
deepEqual(global.sense.mappings.getFields("index", ["tweet"]).sort(),
|
||||
["message", "person.name.first_name", "person.name.last_name", "person.sid" ]);
|
||||
});
|
||||
|
||||
test("Enabled fields", function () {
|
||||
global.sense.mappings.loadMappings({
|
||||
"index": {
|
||||
"tweet": {
|
||||
"properties": {
|
||||
"person": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "object",
|
||||
"enabled": false
|
||||
},
|
||||
"sid": {"type": "string", "index": "not_analyzed"}
|
||||
}
|
||||
},
|
||||
"message": {"type": "string"}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
deepEqual(global.sense.mappings.getFields("index", ["tweet"]).sort(),
|
||||
["message", "person.sid" ]);
|
||||
});
|
||||
|
||||
|
||||
test("Path tests", function () {
|
||||
global.sense.mappings.loadMappings({
|
||||
"index": {
|
||||
"person": {
|
||||
"properties": {
|
||||
"name1": {
|
||||
"type": "object",
|
||||
"path": "just_name",
|
||||
"properties": {
|
||||
"first1": {"type": "string"},
|
||||
"last1": {"type": "string", "index_name": "i_last_1"}
|
||||
}
|
||||
},
|
||||
"name2": {
|
||||
"type": "object",
|
||||
"path": "full",
|
||||
"properties": {
|
||||
"first2": {"type": "string"},
|
||||
"last2": {"type": "string", "index_name": "i_last_2"}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
deepEqual(global.sense.mappings.getFields().sort(),
|
||||
["first1", "i_last_1", "name2.first2", "name2.i_last_2" ]);
|
||||
});
|
||||
|
||||
test("Use index_name tests", function () {
|
||||
global.sense.mappings.loadMappings({
|
||||
"index": {
|
||||
"person": {
|
||||
"properties": {
|
||||
"last1": {"type": "string", "index_name": "i_last_1"}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
deepEqual(global.sense.mappings.getFields().sort(),
|
||||
[ "i_last_1" ]);
|
||||
});
|
||||
|
||||
test("Aliases", function () {
|
||||
global.sense.mappings.loadAliases({
|
||||
"test_index1": {
|
||||
"aliases": {
|
||||
"alias1": {}
|
||||
}
|
||||
},
|
||||
"test_index2": {
|
||||
"aliases": {
|
||||
"alias2": {
|
||||
"filter": {
|
||||
"term": {
|
||||
"FIELD": "VALUE"
|
||||
}
|
||||
}
|
||||
},
|
||||
"alias1": {}
|
||||
}
|
||||
}
|
||||
});
|
||||
global.sense.mappings.loadMappings({
|
||||
"test_index1": {
|
||||
"type1": {
|
||||
"properties": {
|
||||
"last1": {"type": "string", "index_name": "i_last_1"}
|
||||
}
|
||||
}
|
||||
},
|
||||
"test_index2": {
|
||||
"type2": {
|
||||
"properties": {
|
||||
"last1": {"type": "string", "index_name": "i_last_1"}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
deepEqual(global.sense.mappings.getIndices().sort(),
|
||||
[ "_all", "alias1", "alias2", "test_index1", "test_index2" ]
|
||||
);
|
||||
deepEqual(global.sense.mappings.getIndices(false).sort(),
|
||||
["test_index1", "test_index2" ]
|
||||
);
|
||||
deepEqual(global.sense.mappings.expandAliases(["alias1", "test_index2"]).sort(),
|
||||
["test_index1", "test_index2" ]
|
||||
);
|
||||
deepEqual(global.sense.mappings.expandAliases("alias2"), "test_index2");
|
||||
});
|
||||
|
242
sense/tests/src/tokenization_tests.js
Normal file
242
sense/tests/src/tokenization_tests.js
Normal file
|
@ -0,0 +1,242 @@
|
|||
var sense = window.sense;
|
||||
var utils = sense.utils;
|
||||
|
||||
module("Tokenization", {
|
||||
setup: function () {
|
||||
|
||||
sense.tests = {};
|
||||
sense.tests.editor_div = $('<div id="editor"></div>').appendTo($('body'));
|
||||
sense.tests.editor = ace.edit("editor");
|
||||
ace.require("ace/mode/sense");
|
||||
sense.tests.editor.getSession().setMode("ace/mode/sense");
|
||||
sense.tests.editor.getSession().setValue("hello");
|
||||
|
||||
},
|
||||
|
||||
teardown: function () {
|
||||
sense.tests.editor_div.remove();
|
||||
sense.tests = {};
|
||||
}
|
||||
});
|
||||
|
||||
function tokensAsList(editor) {
|
||||
var iter = new (ace.require("ace/token_iterator").TokenIterator)(editor.getSession(), 0, 0);
|
||||
var ret = [];
|
||||
var t = iter.getCurrentToken();
|
||||
if (utils.isEmptyToken(t)) t = utils.nextNonEmptyToken(iter);
|
||||
while (t) {
|
||||
ret.push({ value: t.value, type: t.type });
|
||||
t = utils.nextNonEmptyToken(iter);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
var testCount = 0;
|
||||
|
||||
function token_test(token_list, prefix, data) {
|
||||
if (data && typeof data != "string") data = JSON.stringify(data, null, 3);
|
||||
if (data) {
|
||||
if (prefix) data = prefix + "\n" + data;
|
||||
} else {
|
||||
data = prefix;
|
||||
}
|
||||
|
||||
QUnit.asyncTest("Token test " + testCount++ + " prefix: " + prefix, function () {
|
||||
var editor = sense.tests.editor;
|
||||
|
||||
utils.updateEditorAndCallWhenUpdated(data, editor, function () {
|
||||
var tokens = tokensAsList(editor);
|
||||
var normTokenList = [];
|
||||
for (var i = 0; i < token_list.length; i++) {
|
||||
normTokenList.push({ type: token_list[i++], value: token_list[i] });
|
||||
}
|
||||
|
||||
deepEqual(tokens, normTokenList, "Doc:\n" + data);
|
||||
start();
|
||||
});
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
token_test(
|
||||
[ "method", "GET", "url.endpoint", "_search" ],
|
||||
"GET _search"
|
||||
);
|
||||
|
||||
token_test(
|
||||
[ "method", "GET", "url.slash", "/", "url.endpoint", "_search" ],
|
||||
"GET /_search"
|
||||
);
|
||||
|
||||
|
||||
token_test(
|
||||
[ "method", "GET", "url.endpoint", "_cluster", "url.slash", "/", "url.part" , "nodes" ],
|
||||
"GET _cluster/nodes"
|
||||
);
|
||||
|
||||
token_test(
|
||||
[ "method", "GET", "url.slash", "/", "url.endpoint", "_cluster", "url.slash", "/", "url.part" , "nodes" ],
|
||||
"GET /_cluster/nodes"
|
||||
);
|
||||
|
||||
|
||||
token_test(
|
||||
[ "method", "GET", "url.index", "index", "url.slash", "/", "url.endpoint", "_search" ],
|
||||
"GET index/_search"
|
||||
);
|
||||
|
||||
token_test(
|
||||
[ "method", "GET", "url.index", "index" ],
|
||||
"GET index"
|
||||
);
|
||||
|
||||
token_test(
|
||||
[ "method", "GET", "url.index", "index", "url.slash", "/", "url.type", "type" ],
|
||||
"GET index/type"
|
||||
);
|
||||
|
||||
token_test(
|
||||
[ "method", "GET", "url.slash", "/", "url.index", "index", "url.slash", "/", "url.type", "type", "url.slash", "/" ],
|
||||
"GET /index/type/"
|
||||
);
|
||||
|
||||
token_test(
|
||||
[ "method", "GET", "url.index", "index", "url.slash", "/", "url.type", "type", "url.slash", "/", "url.endpoint", "_search" ],
|
||||
"GET index/type/_search"
|
||||
);
|
||||
|
||||
token_test(
|
||||
[ "method", "GET", "url.index", "index", "url.slash", "/", "url.type", "type", "url.slash", "/", "url.endpoint", "_search",
|
||||
"url.questionmark", "?", "url.param", "value", "url.equal", "=", "url.value", "1"
|
||||
],
|
||||
"GET index/type/_search?value=1"
|
||||
);
|
||||
|
||||
|
||||
token_test(
|
||||
[ "method", "GET", "url.index", "index", "url.slash", "/", "url.type", "type", "url.slash", "/", "url.id", "1" ],
|
||||
"GET index/type/1"
|
||||
);
|
||||
|
||||
|
||||
token_test(
|
||||
[ "method", "GET", "url.slash", "/", "url.index", "index1", "url.comma", ",", "url.index", "index2", "url.slash", "/" ],
|
||||
"GET /index1,index2/"
|
||||
);
|
||||
|
||||
token_test(
|
||||
[ "method", "GET", "url.slash", "/", "url.index", "index1", "url.comma", ",", "url.index", "index2", "url.slash", "/",
|
||||
"url.endpoint", "_search"],
|
||||
"GET /index1,index2/_search"
|
||||
);
|
||||
|
||||
token_test(
|
||||
[ "method", "GET", "url.index", "index1", "url.comma", ",", "url.index", "index2", "url.slash", "/",
|
||||
"url.endpoint", "_search"],
|
||||
"GET index1,index2/_search"
|
||||
);
|
||||
|
||||
token_test(
|
||||
[ "method", "GET", "url.slash", "/", "url.index", "index1", "url.comma", ",", "url.index", "index2" ],
|
||||
"GET /index1,index2"
|
||||
);
|
||||
|
||||
token_test(
|
||||
[ "method", "GET", "url.index", "index1", "url.comma", ",", "url.index", "index2" ],
|
||||
"GET index1,index2"
|
||||
);
|
||||
|
||||
token_test(
|
||||
[ "method", "GET", "url.slash", "/", "url.index", "index1", "url.comma", "," ],
|
||||
"GET /index1,"
|
||||
);
|
||||
|
||||
|
||||
token_test(
|
||||
[ "method", "PUT", "url.slash", "/", "url.index", "index", "url.slash", "/" ],
|
||||
"PUT /index/"
|
||||
);
|
||||
|
||||
token_test(
|
||||
[ "method", "PUT", "url.slash", "/", "url.index", "index" ],
|
||||
"PUT /index"
|
||||
);
|
||||
|
||||
token_test(
|
||||
[ "method", "PUT", "url.slash", "/", "url.index", "index1", "url.comma", ",", "url.index", "index2",
|
||||
"url.slash", "/", "url.type", "type1", "url.comma", ",", "url.type", "type2"],
|
||||
"PUT /index1,index2/type1,type2"
|
||||
);
|
||||
|
||||
token_test(
|
||||
[ "method", "PUT", "url.slash", "/", "url.index", "index1",
|
||||
"url.slash", "/", "url.type", "type1", "url.comma", ",", "url.type", "type2", "url.comma", ","],
|
||||
"PUT /index1/type1,type2,"
|
||||
);
|
||||
|
||||
token_test(
|
||||
[ "method", "PUT", "url.index", "index1", "url.comma", ",", "url.index", "index2",
|
||||
"url.slash", "/", "url.type", "type1", "url.comma", ",", "url.type", "type2", "url.slash", "/",
|
||||
"url.id", "1234"],
|
||||
"PUT index1,index2/type1,type2/1234"
|
||||
);
|
||||
|
||||
|
||||
token_test(
|
||||
[ "method", "POST", "url.endpoint", "_search", "paren.lparen", "{", "variable", '"q"', "punctuation.colon", ":",
|
||||
"paren.lparen", "{", "paren.rparen", "}", "paren.rparen", "}"
|
||||
],
|
||||
'POST _search\n' +
|
||||
'{\n' +
|
||||
' "q": {}\n' +
|
||||
' \n' +
|
||||
'}'
|
||||
);
|
||||
|
||||
function statesAsList(editor) {
|
||||
var ret = [];
|
||||
var session = editor.getSession();
|
||||
var maxLine = session.getLength();
|
||||
for (var row = 0; row < maxLine; row++) ret.push(session.getState(row));
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
function states_test(states_list, prefix, data) {
|
||||
if (data && typeof data != "string") data = JSON.stringify(data, null, 3);
|
||||
if (data) {
|
||||
if (prefix) data = prefix + "\n" + data;
|
||||
} else {
|
||||
data = prefix;
|
||||
}
|
||||
|
||||
QUnit.asyncTest("States test " + testCount++ + " prefix: " + prefix, function () {
|
||||
var editor = global.sense.tests.editor;
|
||||
|
||||
utils.updateEditorAndCallWhenUpdated(data, editor, function () {
|
||||
var modes = statesAsList(editor);
|
||||
deepEqual(modes, states_list, "Doc:\n" + data);
|
||||
|
||||
start();
|
||||
});
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
function n(name) {
|
||||
return { name: name};
|
||||
}
|
||||
function nd(name, depth) {
|
||||
return { name: name, depth: depth };
|
||||
}
|
||||
|
||||
states_test(
|
||||
[n("start"), nd("json", 1), nd("json", 1), nd("start", 0) ],
|
||||
'POST _search\n' +
|
||||
'{\n' +
|
||||
' "query": { "match_all": {} }\n' +
|
||||
'}'
|
||||
);
|
188
sense/tests/src/utils_tests.js
Normal file
188
sense/tests/src/utils_tests.js
Normal file
|
@ -0,0 +1,188 @@
|
|||
var sense = window.sense;
|
||||
var utils = sense.utils;
|
||||
|
||||
module("Utils", {
|
||||
setup: function () {
|
||||
sense.tests = {};
|
||||
sense.tests.editor_div = $('<div id="editor"></div>').appendTo($('body'));
|
||||
sense.tests.editor = ace.edit("editor");
|
||||
ace.require("ace/mode/sense");
|
||||
sense.tests.editor.getSession().setMode("ace/mode/sense");
|
||||
sense.tests.editor.getSession().setValue("hello");
|
||||
|
||||
},
|
||||
|
||||
teardown: function () {
|
||||
sense.tests.editor_div.remove();
|
||||
sense.tests = {};
|
||||
}
|
||||
});
|
||||
|
||||
var testCount = 0;
|
||||
|
||||
function utils_test(name, prefix, data, test) {
|
||||
if (data && typeof data != "string") data = JSON.stringify(data, null, 3);
|
||||
if (data) {
|
||||
if (prefix) data = prefix + "\n" + data;
|
||||
} else {
|
||||
data = prefix;
|
||||
}
|
||||
|
||||
QUnit.asyncTest("Utils test " + testCount++ + ":" + name,
|
||||
function () {
|
||||
var editor = sense.tests.editor;
|
||||
utils.updateEditorAndCallWhenUpdated(data, editor, function () {
|
||||
test(editor);
|
||||
start();
|
||||
});
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
var simple_request =
|
||||
{ prefix: 'POST _search',
|
||||
data: '{\n' +
|
||||
' "query": { "match_all": {} }\n' +
|
||||
'}'
|
||||
};
|
||||
|
||||
var single_line_request =
|
||||
{ prefix: 'POST _search',
|
||||
data: '{ "query": { "match_all": {} } }'
|
||||
};
|
||||
|
||||
|
||||
utils_test("simple request range", simple_request.prefix, simple_request.data,
|
||||
function (editor) {
|
||||
var range = utils.getCurrentRequestRange(editor);
|
||||
var expected = new (ace.require("ace/range").Range)(
|
||||
0, 0,
|
||||
3, 1
|
||||
);
|
||||
deepEqual(range, expected);
|
||||
}
|
||||
);
|
||||
|
||||
utils_test("single line request range", single_line_request.prefix, single_line_request.data,
|
||||
function (editor) {
|
||||
var range = utils.getCurrentRequestRange(editor);
|
||||
var expected = new (ace.require("ace/range").Range)(
|
||||
0, 0,
|
||||
1, 32
|
||||
);
|
||||
deepEqual(range, expected);
|
||||
}
|
||||
);
|
||||
|
||||
utils_test("simple request data", simple_request.prefix, simple_request.data,
|
||||
function (editor) {
|
||||
var request = utils.getCurrentRequest(editor);
|
||||
var expected = {
|
||||
method: "POST",
|
||||
url: "_search",
|
||||
data: [simple_request.data]
|
||||
};
|
||||
|
||||
deepEqual(request, expected);
|
||||
}
|
||||
);
|
||||
|
||||
utils_test("single line request data", single_line_request.prefix, single_line_request.data,
|
||||
function (editor) {
|
||||
var request = utils.getCurrentRequest(editor);
|
||||
var expected = {
|
||||
method: "POST",
|
||||
url: "_search",
|
||||
data: [single_line_request.data]
|
||||
};
|
||||
|
||||
deepEqual(request, expected);
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
var get_request_no_data =
|
||||
{ prefix: 'GET _stats'
|
||||
};
|
||||
|
||||
utils_test("request with no data followed by a new line", get_request_no_data.prefix, "\n",
|
||||
function (editor) {
|
||||
var range = utils.getCurrentRequestRange(editor);
|
||||
var expected = new (ace.require("ace/range").Range)(
|
||||
0, 0,
|
||||
0, 10
|
||||
);
|
||||
deepEqual(range, expected);
|
||||
}
|
||||
);
|
||||
|
||||
utils_test("request with no data followed by a new line (data)", get_request_no_data.prefix, "\n",
|
||||
function (editor) {
|
||||
var range = utils.getCurrentRequest(editor);
|
||||
var expected = {
|
||||
method: "GET",
|
||||
url: "_stats",
|
||||
data: []
|
||||
};
|
||||
|
||||
deepEqual(range, expected);
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
utils_test("request with no data", get_request_no_data.prefix, get_request_no_data.data,
|
||||
function (editor) {
|
||||
var range = utils.getCurrentRequestRange(editor);
|
||||
var expected = new (ace.require("ace/range").Range)(
|
||||
0, 0,
|
||||
0, 10
|
||||
);
|
||||
deepEqual(range, expected);
|
||||
}
|
||||
);
|
||||
|
||||
utils_test("request with no data (data)", get_request_no_data.prefix, get_request_no_data.data,
|
||||
function (editor) {
|
||||
var range = utils.getCurrentRequest(editor);
|
||||
var expected = {
|
||||
method: "GET",
|
||||
url: "_stats",
|
||||
data: []
|
||||
};
|
||||
|
||||
deepEqual(range, expected);
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
var multi_doc_request =
|
||||
{ prefix: 'POST _bulk',
|
||||
data_as_array: ['{ "index": { "_index": "index", "_type":"type" } }',
|
||||
'{ "field": 1 }'
|
||||
]
|
||||
};
|
||||
multi_doc_request.data = multi_doc_request.data_as_array.join("\n");
|
||||
|
||||
utils_test("multi doc request range", multi_doc_request.prefix, multi_doc_request.data,
|
||||
function (editor) {
|
||||
var range = utils.getCurrentRequestRange(editor);
|
||||
var expected = new (ace.require("ace/range").Range)(
|
||||
0, 0,
|
||||
2, 14
|
||||
);
|
||||
deepEqual(range, expected);
|
||||
}
|
||||
);
|
||||
|
||||
utils_test("multi doc request data", multi_doc_request.prefix, multi_doc_request.data,
|
||||
function (editor) {
|
||||
var request = utils.getCurrentRequest(editor);
|
||||
var expected = {
|
||||
method: "POST",
|
||||
url: "_bulk",
|
||||
data: multi_doc_request.data_as_array
|
||||
};
|
||||
|
||||
deepEqual(request, expected);
|
||||
}
|
||||
);
|
26
sense/welcome.html
Normal file
26
sense/welcome.html
Normal file
|
@ -0,0 +1,26 @@
|
|||
<h4>Quick intro to the UI</h4>
|
||||
|
||||
<p>Sense is split into two panes: an editor pane (white) and a response pane (black).
|
||||
Use the editor to type requests and submit them to Elasticsearch. The results will be displayed in
|
||||
the response pane on the right side.
|
||||
</p>
|
||||
|
||||
<p>Sense understands requests in a compact format, similar to cURL:
|
||||
<div id="example_editor_container"></div>
|
||||
|
||||
<p>While typing a request, Sense will make suggestions which you can than accept by hitting Enter/Tab.
|
||||
These suggestions are made based on the request structure <i>as well as</i> your indices and types.
|
||||
</p>
|
||||
|
||||
|
||||
<h4>A few quick tips, while I have your attention</h4>
|
||||
<ul>
|
||||
<li>Submit requests to ES using the green triangle button.</li>
|
||||
<li>Use the wrench menu for other useful things.</li>
|
||||
<li>You can paste requests in cURL format and they will be translated to the Sense syntax.</li>
|
||||
<li>You can resize the editor and output panes by dragging the separator between them.</li>
|
||||
<li>Study the keyboard shortcuts under the Help button. Good stuff in there!</li>
|
||||
</ul>
|
||||
|
||||
|
||||
|
|
@ -17,6 +17,7 @@ module.exports = function (config) {
|
|||
'^/app/dashboards/marvel/(.*)$': '/dashboards/$1',
|
||||
'^/app/panels/marvel/(.*)$': '/panels/$1',
|
||||
'^/config.js$': '/<%= buildTempDir %>/config.js',
|
||||
'^/sense(.*)$': '/sense$1',
|
||||
'^(.*)$': '<%= kibanaCheckoutDir %>/src/$1'
|
||||
}
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue