");
+ t.b("\n" + i);
+ t.b(' ');
+ t.b("\n" + i);
+ t.b(" ");
+ t.b(t.t(t.f("lineNumber", c, p, 0)));
+ t.b("\n" + i);
+ t.b(" | ");
+ t.b("\n" + i);
+ t.b(' ');
+ t.b("\n" + i);
+ t.b(' ');
+ t.b("\n" + i);
+ if (t.s(t.f("prefix", c, p, 1), c, p, 0, 162, 238, "{{ }}")) {
+ t.rs(c, p, function(c2, p2, t2) {
+ t2.b(' ');
+ t2.b(t2.t(t2.f("prefix", c2, p2, 0)));
+ t2.b("");
+ t2.b("\n" + i);
+ });
+ c.pop();
+ }
+ if (!t.s(t.f("prefix", c, p, 1), c, p, 1, 0, 0, "")) {
+ t.b(' ');
+ t.b("\n" + i);
+ }
+ ;
+ if (t.s(t.f("content", c, p, 1), c, p, 0, 371, 445, "{{ }}")) {
+ t.rs(c, p, function(c2, p2, t2) {
+ t2.b(' ');
+ t2.b(t2.t(t2.f("content", c2, p2, 0)));
+ t2.b("");
+ t2.b("\n" + i);
+ });
+ c.pop();
+ }
+ if (!t.s(t.f("content", c, p, 1), c, p, 1, 0, 0, "")) {
+ t.b(' ');
+ t.b("\n" + i);
+ }
+ ;
+ t.b(" ");
+ t.b("\n" + i);
+ t.b(" | ");
+ t.b("\n" + i);
+ t.b("");
+ return t.fl();
+ }, partials: {}, subs: {} });
+ exports.defaultTemplates["generic-wrapper"] = new Hogan2.Template({ code: function(c, p, i) {
+ var t = this;
+ t.b(i = i || "");
+ t.b('');
+ t.b("\n" + i);
+ t.b(" ");
+ t.b(t.t(t.f("content", c, p, 0)));
+ t.b("\n" + i);
+ t.b("
");
+ return t.fl();
+ }, partials: {}, subs: {} });
+ exports.defaultTemplates["icon-file-added"] = new Hogan2.Template({ code: function(c, p, i) {
+ var t = this;
+ t.b(i = i || "");
+ t.b('");
+ return t.fl();
+ }, partials: {}, subs: {} });
+ exports.defaultTemplates["icon-file-changed"] = new Hogan2.Template({ code: function(c, p, i) {
+ var t = this;
+ t.b(i = i || "");
+ t.b('");
+ return t.fl();
+ }, partials: {}, subs: {} });
+ exports.defaultTemplates["icon-file-deleted"] = new Hogan2.Template({ code: function(c, p, i) {
+ var t = this;
+ t.b(i = i || "");
+ t.b('");
+ return t.fl();
+ }, partials: {}, subs: {} });
+ exports.defaultTemplates["icon-file-renamed"] = new Hogan2.Template({ code: function(c, p, i) {
+ var t = this;
+ t.b(i = i || "");
+ t.b('");
+ return t.fl();
+ }, partials: {}, subs: {} });
+ exports.defaultTemplates["icon-file"] = new Hogan2.Template({ code: function(c, p, i) {
+ var t = this;
+ t.b(i = i || "");
+ t.b('");
+ return t.fl();
+ }, partials: {}, subs: {} });
+ exports.defaultTemplates["line-by-line-file-diff"] = new Hogan2.Template({ code: function(c, p, i) {
+ var t = this;
+ t.b(i = i || "");
+ t.b('');
+ t.b("\n" + i);
+ t.b(' ");
+ t.b("\n" + i);
+ t.b('
');
+ t.b("\n" + i);
+ t.b('
');
+ t.b("\n" + i);
+ t.b('
');
+ t.b("\n" + i);
+ t.b(' ');
+ t.b("\n" + i);
+ t.b(" ");
+ t.b(t.t(t.f("diffs", c, p, 0)));
+ t.b("\n" + i);
+ t.b(" ");
+ t.b("\n" + i);
+ t.b("
");
+ t.b("\n" + i);
+ t.b("
");
+ t.b("\n" + i);
+ t.b("
");
+ t.b("\n" + i);
+ t.b("
");
+ return t.fl();
+ }, partials: {}, subs: {} });
+ exports.defaultTemplates["line-by-line-numbers"] = new Hogan2.Template({ code: function(c, p, i) {
+ var t = this;
+ t.b(i = i || "");
+ t.b('');
+ t.b(t.v(t.f("oldNumber", c, p, 0)));
+ t.b("
");
+ t.b("\n" + i);
+ t.b('');
+ t.b(t.v(t.f("newNumber", c, p, 0)));
+ t.b("
");
+ return t.fl();
+ }, partials: {}, subs: {} });
+ exports.defaultTemplates["side-by-side-file-diff"] = new Hogan2.Template({ code: function(c, p, i) {
+ var t = this;
+ t.b(i = i || "");
+ t.b('');
+ t.b("\n" + i);
+ t.b(' ");
+ t.b("\n" + i);
+ t.b('
');
+ t.b("\n" + i);
+ t.b('
');
+ t.b("\n" + i);
+ t.b('
');
+ t.b("\n" + i);
+ t.b('
');
+ t.b("\n" + i);
+ t.b(' ');
+ t.b("\n" + i);
+ t.b(" ");
+ t.b(t.t(t.d("diffs.left", c, p, 0)));
+ t.b("\n" + i);
+ t.b(" ");
+ t.b("\n" + i);
+ t.b("
");
+ t.b("\n" + i);
+ t.b("
");
+ t.b("\n" + i);
+ t.b("
");
+ t.b("\n" + i);
+ t.b('
');
+ t.b("\n" + i);
+ t.b('
');
+ t.b("\n" + i);
+ t.b('
');
+ t.b("\n" + i);
+ t.b(' ');
+ t.b("\n" + i);
+ t.b(" ");
+ t.b(t.t(t.d("diffs.right", c, p, 0)));
+ t.b("\n" + i);
+ t.b(" ");
+ t.b("\n" + i);
+ t.b("
");
+ t.b("\n" + i);
+ t.b("
");
+ t.b("\n" + i);
+ t.b("
");
+ t.b("\n" + i);
+ t.b("
");
+ t.b("\n" + i);
+ t.b("
");
+ return t.fl();
+ }, partials: {}, subs: {} });
+ exports.defaultTemplates["tag-file-added"] = new Hogan2.Template({ code: function(c, p, i) {
+ var t = this;
+ t.b(i = i || "");
+ t.b('ADDED');
+ return t.fl();
+ }, partials: {}, subs: {} });
+ exports.defaultTemplates["tag-file-changed"] = new Hogan2.Template({ code: function(c, p, i) {
+ var t = this;
+ t.b(i = i || "");
+ t.b('CHANGED');
+ return t.fl();
+ }, partials: {}, subs: {} });
+ exports.defaultTemplates["tag-file-deleted"] = new Hogan2.Template({ code: function(c, p, i) {
+ var t = this;
+ t.b(i = i || "");
+ t.b('DELETED');
+ return t.fl();
+ }, partials: {}, subs: {} });
+ exports.defaultTemplates["tag-file-renamed"] = new Hogan2.Template({ code: function(c, p, i) {
+ var t = this;
+ t.b(i = i || "");
+ t.b('RENAMED');
+ return t.fl();
+ }, partials: {}, subs: {} });
+ }
+});
+
+// node_modules/diff2html/lib/hoganjs-utils.js
+var require_hoganjs_utils = __commonJS({
+ "node_modules/diff2html/lib/hoganjs-utils.js"(exports) {
+ "use strict";
+ var __assign2 = exports && exports.__assign || function() {
+ __assign2 = Object.assign || function(t) {
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
+ s = arguments[i];
+ for (var p in s)
+ if (Object.prototype.hasOwnProperty.call(s, p))
+ t[p] = s[p];
+ }
+ return t;
+ };
+ return __assign2.apply(this, arguments);
+ };
+ var __createBinding2 = exports && exports.__createBinding || (Object.create ? function(o, m, k, k2) {
+ if (k2 === void 0)
+ k2 = k;
+ var desc = Object.getOwnPropertyDescriptor(m, k);
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+ desc = { enumerable: true, get: function() {
+ return m[k];
+ } };
+ }
+ Object.defineProperty(o, k2, desc);
+ } : function(o, m, k, k2) {
+ if (k2 === void 0)
+ k2 = k;
+ o[k2] = m[k];
+ });
+ var __setModuleDefault = exports && exports.__setModuleDefault || (Object.create ? function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+ } : function(o, v) {
+ o["default"] = v;
+ });
+ var __importStar2 = exports && exports.__importStar || function(mod) {
+ if (mod && mod.__esModule)
+ return mod;
+ var result = {};
+ if (mod != null) {
+ for (var k in mod)
+ if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k))
+ __createBinding2(result, mod, k);
+ }
+ __setModuleDefault(result, mod);
+ return result;
+ };
+ Object.defineProperty(exports, "__esModule", { value: true });
+ var Hogan2 = __importStar2(require_hogan());
+ var diff2html_templates_1 = require_diff2html_templates();
+ var HoganJsUtils = function() {
+ function HoganJsUtils2(_a2) {
+ var _b = _a2.compiledTemplates, compiledTemplates = _b === void 0 ? {} : _b, _c = _a2.rawTemplates, rawTemplates = _c === void 0 ? {} : _c;
+ var compiledRawTemplates = Object.entries(rawTemplates).reduce(function(previousTemplates, _a3) {
+ var _b2;
+ var name = _a3[0], templateString = _a3[1];
+ var compiledTemplate = Hogan2.compile(templateString, { asString: false });
+ return __assign2(__assign2({}, previousTemplates), (_b2 = {}, _b2[name] = compiledTemplate, _b2));
+ }, {});
+ this.preCompiledTemplates = __assign2(__assign2(__assign2({}, diff2html_templates_1.defaultTemplates), compiledTemplates), compiledRawTemplates);
+ }
+ HoganJsUtils2.compile = function(templateString) {
+ return Hogan2.compile(templateString, { asString: false });
+ };
+ HoganJsUtils2.prototype.render = function(namespace, view, params, partials, indent) {
+ var templateKey = this.templateKey(namespace, view);
+ try {
+ var template = this.preCompiledTemplates[templateKey];
+ return template.render(params, partials, indent);
+ } catch (e) {
+ throw new Error("Could not find template to render '".concat(templateKey, "'"));
+ }
+ };
+ HoganJsUtils2.prototype.template = function(namespace, view) {
+ return this.preCompiledTemplates[this.templateKey(namespace, view)];
+ };
+ HoganJsUtils2.prototype.templateKey = function(namespace, view) {
+ return "".concat(namespace, "-").concat(view);
+ };
+ return HoganJsUtils2;
+ }();
+ exports.default = HoganJsUtils;
+ }
+});
+
+// node_modules/diff2html/lib/diff2html.js
+var require_diff2html = __commonJS({
+ "node_modules/diff2html/lib/diff2html.js"(exports) {
+ "use strict";
+ var __assign2 = exports && exports.__assign || function() {
+ __assign2 = Object.assign || function(t) {
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
+ s = arguments[i];
+ for (var p in s)
+ if (Object.prototype.hasOwnProperty.call(s, p))
+ t[p] = s[p];
+ }
+ return t;
+ };
+ return __assign2.apply(this, arguments);
+ };
+ var __createBinding2 = exports && exports.__createBinding || (Object.create ? function(o, m, k, k2) {
+ if (k2 === void 0)
+ k2 = k;
+ var desc = Object.getOwnPropertyDescriptor(m, k);
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+ desc = { enumerable: true, get: function() {
+ return m[k];
+ } };
+ }
+ Object.defineProperty(o, k2, desc);
+ } : function(o, m, k, k2) {
+ if (k2 === void 0)
+ k2 = k;
+ o[k2] = m[k];
+ });
+ var __setModuleDefault = exports && exports.__setModuleDefault || (Object.create ? function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+ } : function(o, v) {
+ o["default"] = v;
+ });
+ var __importStar2 = exports && exports.__importStar || function(mod) {
+ if (mod && mod.__esModule)
+ return mod;
+ var result = {};
+ if (mod != null) {
+ for (var k in mod)
+ if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k))
+ __createBinding2(result, mod, k);
+ }
+ __setModuleDefault(result, mod);
+ return result;
+ };
+ var __importDefault2 = exports && exports.__importDefault || function(mod) {
+ return mod && mod.__esModule ? mod : { "default": mod };
+ };
+ Object.defineProperty(exports, "__esModule", { value: true });
+ exports.html = exports.parse = exports.defaultDiff2HtmlConfig = void 0;
+ var DiffParser = __importStar2(require_diff_parser());
+ var fileListPrinter = __importStar2(require_file_list_renderer());
+ var line_by_line_renderer_1 = __importStar2(require_line_by_line_renderer());
+ var side_by_side_renderer_1 = __importStar2(require_side_by_side_renderer());
+ var types_1 = require_types();
+ var hoganjs_utils_1 = __importDefault2(require_hoganjs_utils());
+ exports.defaultDiff2HtmlConfig = __assign2(__assign2(__assign2({}, line_by_line_renderer_1.defaultLineByLineRendererConfig), side_by_side_renderer_1.defaultSideBySideRendererConfig), { outputFormat: types_1.OutputFormatType.LINE_BY_LINE, drawFileList: true });
+ function parse(diffInput, configuration) {
+ if (configuration === void 0) {
+ configuration = {};
+ }
+ return DiffParser.parse(diffInput, __assign2(__assign2({}, exports.defaultDiff2HtmlConfig), configuration));
+ }
+ exports.parse = parse;
+ function html2(diffInput, configuration) {
+ if (configuration === void 0) {
+ configuration = {};
+ }
+ var config = __assign2(__assign2({}, exports.defaultDiff2HtmlConfig), configuration);
+ var diffJson = typeof diffInput === "string" ? DiffParser.parse(diffInput, config) : diffInput;
+ var hoganUtils = new hoganjs_utils_1.default(config);
+ var fileList = config.drawFileList ? fileListPrinter.render(diffJson, hoganUtils) : "";
+ var diffOutput = config.outputFormat === "side-by-side" ? new side_by_side_renderer_1.default(hoganUtils, config).render(diffJson) : new line_by_line_renderer_1.default(hoganUtils, config).render(diffJson);
+ return fileList + diffOutput;
+ }
+ exports.html = html2;
+ }
+});
+
+// node_modules/tslib/tslib.js
+var require_tslib = __commonJS({
+ "node_modules/tslib/tslib.js"(exports, module2) {
+ var __extends2;
+ var __assign2;
+ var __rest2;
+ var __decorate2;
+ var __param2;
+ var __metadata2;
+ var __awaiter2;
+ var __generator2;
+ var __exportStar2;
+ var __values2;
+ var __read2;
+ var __spread2;
+ var __spreadArrays2;
+ var __spreadArray2;
+ var __await2;
+ var __asyncGenerator2;
+ var __asyncDelegator2;
+ var __asyncValues2;
+ var __makeTemplateObject2;
+ var __importStar2;
+ var __importDefault2;
+ var __classPrivateFieldGet2;
+ var __classPrivateFieldSet2;
+ var __classPrivateFieldIn2;
+ var __createBinding2;
+ (function(factory) {
+ var root = typeof global === "object" ? global : typeof self === "object" ? self : typeof this === "object" ? this : {};
+ if (typeof define === "function" && define.amd) {
+ define("tslib", ["exports"], function(exports2) {
+ factory(createExporter(root, createExporter(exports2)));
+ });
+ } else if (typeof module2 === "object" && typeof module2.exports === "object") {
+ factory(createExporter(root, createExporter(module2.exports)));
+ } else {
+ factory(createExporter(root));
+ }
+ function createExporter(exports2, previous) {
+ if (exports2 !== root) {
+ if (typeof Object.create === "function") {
+ Object.defineProperty(exports2, "__esModule", { value: true });
+ } else {
+ exports2.__esModule = true;
+ }
+ }
+ return function(id, v) {
+ return exports2[id] = previous ? previous(id, v) : v;
+ };
+ }
+ })(function(exporter) {
+ var extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d, b) {
+ d.__proto__ = b;
+ } || function(d, b) {
+ for (var p in b)
+ if (Object.prototype.hasOwnProperty.call(b, p))
+ d[p] = b[p];
+ };
+ __extends2 = function(d, b) {
+ if (typeof b !== "function" && b !== null)
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
+ extendStatics(d, b);
+ function __() {
+ this.constructor = d;
+ }
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+ };
+ __assign2 = Object.assign || function(t) {
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
+ s = arguments[i];
+ for (var p in s)
+ if (Object.prototype.hasOwnProperty.call(s, p))
+ t[p] = s[p];
+ }
+ return t;
+ };
+ __rest2 = function(s, e) {
+ var t = {};
+ for (var p in s)
+ if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
+ t[p] = s[p];
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
+ t[p[i]] = s[p[i]];
+ }
+ return t;
+ };
+ __decorate2 = function(decorators, target, key2, desc) {
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key2) : desc, d;
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
+ r = Reflect.decorate(decorators, target, key2, desc);
+ else
+ for (var i = decorators.length - 1; i >= 0; i--)
+ if (d = decorators[i])
+ r = (c < 3 ? d(r) : c > 3 ? d(target, key2, r) : d(target, key2)) || r;
+ return c > 3 && r && Object.defineProperty(target, key2, r), r;
+ };
+ __param2 = function(paramIndex, decorator) {
+ return function(target, key2) {
+ decorator(target, key2, paramIndex);
+ };
+ };
+ __metadata2 = function(metadataKey, metadataValue) {
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function")
+ return Reflect.metadata(metadataKey, metadataValue);
+ };
+ __awaiter2 = function(thisArg, _arguments, P, generator) {
+ function adopt(value) {
+ return value instanceof P ? value : new P(function(resolve) {
+ resolve(value);
+ });
+ }
+ return new (P || (P = Promise))(function(resolve, reject) {
+ function fulfilled(value) {
+ try {
+ step(generator.next(value));
+ } catch (e) {
+ reject(e);
+ }
+ }
+ function rejected(value) {
+ try {
+ step(generator["throw"](value));
+ } catch (e) {
+ reject(e);
+ }
+ }
+ function step(result) {
+ result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
+ }
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
+ });
+ };
+ __generator2 = function(thisArg, body) {
+ var _ = { label: 0, sent: function() {
+ if (t[0] & 1)
+ throw t[1];
+ return t[1];
+ }, trys: [], ops: [] }, f, y, t, g;
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() {
+ return this;
+ }), g;
+ function verb(n) {
+ return function(v) {
+ return step([n, v]);
+ };
+ }
+ function step(op) {
+ if (f)
+ throw new TypeError("Generator is already executing.");
+ while (_)
+ try {
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done)
+ return t;
+ if (y = 0, t)
+ op = [op[0] & 2, t.value];
+ switch (op[0]) {
+ case 0:
+ case 1:
+ t = op;
+ break;
+ case 4:
+ _.label++;
+ return { value: op[1], done: false };
+ case 5:
+ _.label++;
+ y = op[1];
+ op = [0];
+ continue;
+ case 7:
+ op = _.ops.pop();
+ _.trys.pop();
+ continue;
+ default:
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
+ _ = 0;
+ continue;
+ }
+ if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
+ _.label = op[1];
+ break;
+ }
+ if (op[0] === 6 && _.label < t[1]) {
+ _.label = t[1];
+ t = op;
+ break;
+ }
+ if (t && _.label < t[2]) {
+ _.label = t[2];
+ _.ops.push(op);
+ break;
+ }
+ if (t[2])
+ _.ops.pop();
+ _.trys.pop();
+ continue;
+ }
+ op = body.call(thisArg, _);
+ } catch (e) {
+ op = [6, e];
+ y = 0;
+ } finally {
+ f = t = 0;
+ }
+ if (op[0] & 5)
+ throw op[1];
+ return { value: op[0] ? op[1] : void 0, done: true };
+ }
+ };
+ __exportStar2 = function(m, o) {
+ for (var p in m)
+ if (p !== "default" && !Object.prototype.hasOwnProperty.call(o, p))
+ __createBinding2(o, m, p);
+ };
+ __createBinding2 = Object.create ? function(o, m, k, k2) {
+ if (k2 === void 0)
+ k2 = k;
+ var desc = Object.getOwnPropertyDescriptor(m, k);
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+ desc = { enumerable: true, get: function() {
+ return m[k];
+ } };
+ }
+ Object.defineProperty(o, k2, desc);
+ } : function(o, m, k, k2) {
+ if (k2 === void 0)
+ k2 = k;
+ o[k2] = m[k];
+ };
+ __values2 = function(o) {
+ var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
+ if (m)
+ return m.call(o);
+ if (o && typeof o.length === "number")
+ return {
+ next: function() {
+ if (o && i >= o.length)
+ o = void 0;
+ return { value: o && o[i++], done: !o };
+ }
+ };
+ throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
+ };
+ __read2 = function(o, n) {
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
+ if (!m)
+ return o;
+ var i = m.call(o), r, ar = [], e;
+ try {
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done)
+ ar.push(r.value);
+ } catch (error) {
+ e = { error };
+ } finally {
+ try {
+ if (r && !r.done && (m = i["return"]))
+ m.call(i);
+ } finally {
+ if (e)
+ throw e.error;
+ }
+ }
+ return ar;
+ };
+ __spread2 = function() {
+ for (var ar = [], i = 0; i < arguments.length; i++)
+ ar = ar.concat(__read2(arguments[i]));
+ return ar;
+ };
+ __spreadArrays2 = function() {
+ for (var s = 0, i = 0, il = arguments.length; i < il; i++)
+ s += arguments[i].length;
+ for (var r = Array(s), k = 0, i = 0; i < il; i++)
+ for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
+ r[k] = a[j];
+ return r;
+ };
+ __spreadArray2 = function(to, from, pack) {
+ if (pack || arguments.length === 2)
+ for (var i = 0, l = from.length, ar; i < l; i++) {
+ if (ar || !(i in from)) {
+ if (!ar)
+ ar = Array.prototype.slice.call(from, 0, i);
+ ar[i] = from[i];
+ }
+ }
+ return to.concat(ar || Array.prototype.slice.call(from));
+ };
+ __await2 = function(v) {
+ return this instanceof __await2 ? (this.v = v, this) : new __await2(v);
+ };
+ __asyncGenerator2 = function(thisArg, _arguments, generator) {
+ if (!Symbol.asyncIterator)
+ throw new TypeError("Symbol.asyncIterator is not defined.");
+ var g = generator.apply(thisArg, _arguments || []), i, q = [];
+ return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function() {
+ return this;
+ }, i;
+ function verb(n) {
+ if (g[n])
+ i[n] = function(v) {
+ return new Promise(function(a, b) {
+ q.push([n, v, a, b]) > 1 || resume(n, v);
+ });
+ };
+ }
+ function resume(n, v) {
+ try {
+ step(g[n](v));
+ } catch (e) {
+ settle(q[0][3], e);
+ }
+ }
+ function step(r) {
+ r.value instanceof __await2 ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r);
+ }
+ function fulfill(value) {
+ resume("next", value);
+ }
+ function reject(value) {
+ resume("throw", value);
+ }
+ function settle(f, v) {
+ if (f(v), q.shift(), q.length)
+ resume(q[0][0], q[0][1]);
+ }
+ };
+ __asyncDelegator2 = function(o) {
+ var i, p;
+ return i = {}, verb("next"), verb("throw", function(e) {
+ throw e;
+ }), verb("return"), i[Symbol.iterator] = function() {
+ return this;
+ }, i;
+ function verb(n, f) {
+ i[n] = o[n] ? function(v) {
+ return (p = !p) ? { value: __await2(o[n](v)), done: n === "return" } : f ? f(v) : v;
+ } : f;
+ }
+ };
+ __asyncValues2 = function(o) {
+ if (!Symbol.asyncIterator)
+ throw new TypeError("Symbol.asyncIterator is not defined.");
+ var m = o[Symbol.asyncIterator], i;
+ return m ? m.call(o) : (o = typeof __values2 === "function" ? __values2(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function() {
+ return this;
+ }, i);
+ function verb(n) {
+ i[n] = o[n] && function(v) {
+ return new Promise(function(resolve, reject) {
+ v = o[n](v), settle(resolve, reject, v.done, v.value);
+ });
+ };
+ }
+ function settle(resolve, reject, d, v) {
+ Promise.resolve(v).then(function(v2) {
+ resolve({ value: v2, done: d });
+ }, reject);
+ }
+ };
+ __makeTemplateObject2 = function(cooked, raw) {
+ if (Object.defineProperty) {
+ Object.defineProperty(cooked, "raw", { value: raw });
+ } else {
+ cooked.raw = raw;
+ }
+ return cooked;
+ };
+ var __setModuleDefault = Object.create ? function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+ } : function(o, v) {
+ o["default"] = v;
+ };
+ __importStar2 = function(mod) {
+ if (mod && mod.__esModule)
+ return mod;
+ var result = {};
+ if (mod != null) {
+ for (var k in mod)
+ if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k))
+ __createBinding2(result, mod, k);
+ }
+ __setModuleDefault(result, mod);
+ return result;
+ };
+ __importDefault2 = function(mod) {
+ return mod && mod.__esModule ? mod : { "default": mod };
+ };
+ __classPrivateFieldGet2 = function(receiver, state, kind, f) {
+ if (kind === "a" && !f)
+ throw new TypeError("Private accessor was defined without a getter");
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver))
+ throw new TypeError("Cannot read private member from an object whose class did not declare it");
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
+ };
+ __classPrivateFieldSet2 = function(receiver, state, value, kind, f) {
+ if (kind === "m")
+ throw new TypeError("Private method is not writable");
+ if (kind === "a" && !f)
+ throw new TypeError("Private accessor was defined without a setter");
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver))
+ throw new TypeError("Cannot write private member to an object whose class did not declare it");
+ return kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value), value;
+ };
+ __classPrivateFieldIn2 = function(state, receiver) {
+ if (receiver === null || typeof receiver !== "object" && typeof receiver !== "function")
+ throw new TypeError("Cannot use 'in' operator on non-object");
+ return typeof state === "function" ? receiver === state : state.has(receiver);
+ };
+ exporter("__extends", __extends2);
+ exporter("__assign", __assign2);
+ exporter("__rest", __rest2);
+ exporter("__decorate", __decorate2);
+ exporter("__param", __param2);
+ exporter("__metadata", __metadata2);
+ exporter("__awaiter", __awaiter2);
+ exporter("__generator", __generator2);
+ exporter("__exportStar", __exportStar2);
+ exporter("__createBinding", __createBinding2);
+ exporter("__values", __values2);
+ exporter("__read", __read2);
+ exporter("__spread", __spread2);
+ exporter("__spreadArrays", __spreadArrays2);
+ exporter("__spreadArray", __spreadArray2);
+ exporter("__await", __await2);
+ exporter("__asyncGenerator", __asyncGenerator2);
+ exporter("__asyncDelegator", __asyncDelegator2);
+ exporter("__asyncValues", __asyncValues2);
+ exporter("__makeTemplateObject", __makeTemplateObject2);
+ exporter("__importStar", __importStar2);
+ exporter("__importDefault", __importDefault2);
+ exporter("__classPrivateFieldGet", __classPrivateFieldGet2);
+ exporter("__classPrivateFieldSet", __classPrivateFieldSet2);
+ exporter("__classPrivateFieldIn", __classPrivateFieldIn2);
+ });
+ }
+});
+
+// node_modules/feather-icons/dist/feather.js
+var require_feather = __commonJS({
+ "node_modules/feather-icons/dist/feather.js"(exports, module2) {
+ (function webpackUniversalModuleDefinition(root, factory) {
+ if (typeof exports === "object" && typeof module2 === "object")
+ module2.exports = factory();
+ else if (typeof define === "function" && define.amd)
+ define([], factory);
+ else if (typeof exports === "object")
+ exports["feather"] = factory();
+ else
+ root["feather"] = factory();
+ })(typeof self !== "undefined" ? self : exports, function() {
+ return function(modules) {
+ var installedModules = {};
+ function __webpack_require__(moduleId) {
+ if (installedModules[moduleId]) {
+ return installedModules[moduleId].exports;
+ }
+ var module3 = installedModules[moduleId] = {
+ i: moduleId,
+ l: false,
+ exports: {}
+ };
+ modules[moduleId].call(module3.exports, module3, module3.exports, __webpack_require__);
+ module3.l = true;
+ return module3.exports;
+ }
+ __webpack_require__.m = modules;
+ __webpack_require__.c = installedModules;
+ __webpack_require__.d = function(exports2, name, getter) {
+ if (!__webpack_require__.o(exports2, name)) {
+ Object.defineProperty(exports2, name, {
+ configurable: false,
+ enumerable: true,
+ get: getter
+ });
+ }
+ };
+ __webpack_require__.r = function(exports2) {
+ Object.defineProperty(exports2, "__esModule", { value: true });
+ };
+ __webpack_require__.n = function(module3) {
+ var getter = module3 && module3.__esModule ? function getDefault() {
+ return module3["default"];
+ } : function getModuleExports() {
+ return module3;
+ };
+ __webpack_require__.d(getter, "a", getter);
+ return getter;
+ };
+ __webpack_require__.o = function(object, property) {
+ return Object.prototype.hasOwnProperty.call(object, property);
+ };
+ __webpack_require__.p = "";
+ return __webpack_require__(__webpack_require__.s = 0);
+ }({
+ "./dist/icons.json": function(module3) {
+ module3.exports = { "activity": '', "airplay": '', "alert-circle": '', "alert-octagon": '', "alert-triangle": '', "align-center": '', "align-justify": '', "align-left": '', "align-right": '', "anchor": '', "aperture": '', "archive": '', "arrow-down-circle": '', "arrow-down-left": '', "arrow-down-right": '', "arrow-down": '', "arrow-left-circle": '', "arrow-left": '', "arrow-right-circle": '', "arrow-right": '', "arrow-up-circle": '', "arrow-up-left": '', "arrow-up-right": '', "arrow-up": '', "at-sign": '', "award": '', "bar-chart-2": '', "bar-chart": '', "battery-charging": '', "battery": '', "bell-off": '', "bell": '', "bluetooth": '', "bold": '', "book-open": '', "book": '', "bookmark": '', "box": '', "briefcase": '', "calendar": '', "camera-off": '', "camera": '', "cast": '', "check-circle": '', "check-square": '', "check": '', "chevron-down": '', "chevron-left": '', "chevron-right": '', "chevron-up": '', "chevrons-down": '', "chevrons-left": '', "chevrons-right": '', "chevrons-up": '', "chrome": '', "circle": '', "clipboard": '', "clock": '', "cloud-drizzle": '', "cloud-lightning": '', "cloud-off": '', "cloud-rain": '', "cloud-snow": '', "cloud": '', "code": '', "codepen": '', "codesandbox": '', "coffee": '', "columns": '', "command": '', "compass": '', "copy": '', "corner-down-left": '', "corner-down-right": '', "corner-left-down": '', "corner-left-up": '', "corner-right-down": '', "corner-right-up": '', "corner-up-left": '', "corner-up-right": '', "cpu": '', "credit-card": '', "crop": '', "crosshair": '', "database": '', "delete": '', "disc": '', "divide-circle": '', "divide-square": '', "divide": '', "dollar-sign": '', "download-cloud": '', "download": '', "dribbble": '', "droplet": '', "edit-2": '', "edit-3": '', "edit": '', "external-link": '', "eye-off": '', "eye": '', "facebook": '', "fast-forward": '', "feather": '', "figma": '', "file-minus": '', "file-plus": '', "file-text": '', "file": '', "film": '', "filter": '', "flag": '', "folder-minus": '', "folder-plus": '', "folder": '', "framer": '', "frown": '', "gift": '', "git-branch": '', "git-commit": '', "git-merge": '', "git-pull-request": '', "github": '', "gitlab": '', "globe": '', "grid": '', "hard-drive": '', "hash": '', "headphones": '', "heart": '', "help-circle": '', "hexagon": '', "home": '', "image": '', "inbox": '', "info": '', "instagram": '', "italic": '', "key": '', "layers": '', "layout": '', "life-buoy": '', "link-2": '', "link": '', "linkedin": '', "list": '', "loader": '', "lock": '', "log-in": '', "log-out": '', "mail": '', "map-pin": '', "map": '', "maximize-2": '', "maximize": '', "meh": '', "menu": '', "message-circle": '', "message-square": '', "mic-off": '', "mic": '', "minimize-2": '', "minimize": '', "minus-circle": '', "minus-square": '', "minus": '', "monitor": '', "moon": '', "more-horizontal": '', "more-vertical": '', "mouse-pointer": '', "move": '', "music": '', "navigation-2": '', "navigation": '', "octagon": '', "package": '', "paperclip": '', "pause-circle": '', "pause": '', "pen-tool": '', "percent": '', "phone-call": '', "phone-forwarded": '', "phone-incoming": '', "phone-missed": '', "phone-off": '', "phone-outgoing": '', "phone": '', "pie-chart": '', "play-circle": '', "play": '', "plus-circle": '', "plus-square": '', "plus": '', "pocket": '', "power": '', "printer": '', "radio": '', "refresh-ccw": '', "refresh-cw": '', "repeat": '', "rewind": '', "rotate-ccw": '', "rotate-cw": '', "rss": '', "save": '', "scissors": '', "search": '', "send": '', "server": '', "settings": '', "share-2": '', "share": '', "shield-off": '', "shield": '', "shopping-bag": '', "shopping-cart": '', "shuffle": '', "sidebar": '', "skip-back": '', "skip-forward": '', "slack": '', "slash": '', "sliders": '', "smartphone": '', "smile": '', "speaker": '', "square": '', "star": '', "stop-circle": '', "sun": '', "sunrise": '', "sunset": '', "table": '', "tablet": '', "tag": '', "target": '', "terminal": '', "thermometer": '', "thumbs-down": '', "thumbs-up": '', "toggle-left": '', "toggle-right": '', "tool": '', "trash-2": '', "trash": '', "trello": '', "trending-down": '', "trending-up": '', "triangle": '', "truck": '', "tv": '', "twitch": '', "twitter": '', "type": '', "umbrella": '', "underline": '', "unlock": '', "upload-cloud": '', "upload": '', "user-check": '', "user-minus": '', "user-plus": '', "user-x": '', "user": '', "users": '', "video-off": '', "video": '', "voicemail": '', "volume-1": '', "volume-2": '', "volume-x": '', "volume": '', "watch": '', "wifi-off": '', "wifi": '', "wind": '', "x-circle": '', "x-octagon": '', "x-square": '', "x": '', "youtube": '', "zap-off": '', "zap": '', "zoom-in": '', "zoom-out": '' };
+ },
+ "./node_modules/classnames/dedupe.js": function(module3, exports2, __webpack_require__) {
+ var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;
+ (function() {
+ "use strict";
+ var classNames = function() {
+ function StorageObject() {
+ }
+ StorageObject.prototype = Object.create(null);
+ function _parseArray(resultSet, array) {
+ var length = array.length;
+ for (var i = 0; i < length; ++i) {
+ _parse(resultSet, array[i]);
+ }
+ }
+ var hasOwn = {}.hasOwnProperty;
+ function _parseNumber(resultSet, num) {
+ resultSet[num] = true;
+ }
+ function _parseObject(resultSet, object) {
+ for (var k in object) {
+ if (hasOwn.call(object, k)) {
+ resultSet[k] = !!object[k];
+ }
+ }
+ }
+ var SPACE = /\s+/;
+ function _parseString(resultSet, str) {
+ var array = str.split(SPACE);
+ var length = array.length;
+ for (var i = 0; i < length; ++i) {
+ resultSet[array[i]] = true;
+ }
+ }
+ function _parse(resultSet, arg) {
+ if (!arg)
+ return;
+ var argType = typeof arg;
+ if (argType === "string") {
+ _parseString(resultSet, arg);
+ } else if (Array.isArray(arg)) {
+ _parseArray(resultSet, arg);
+ } else if (argType === "object") {
+ _parseObject(resultSet, arg);
+ } else if (argType === "number") {
+ _parseNumber(resultSet, arg);
+ }
+ }
+ function _classNames() {
+ var len = arguments.length;
+ var args = Array(len);
+ for (var i = 0; i < len; i++) {
+ args[i] = arguments[i];
+ }
+ var classSet = new StorageObject();
+ _parseArray(classSet, args);
+ var list = [];
+ for (var k in classSet) {
+ if (classSet[k]) {
+ list.push(k);
+ }
+ }
+ return list.join(" ");
+ }
+ return _classNames;
+ }();
+ if (typeof module3 !== "undefined" && module3.exports) {
+ module3.exports = classNames;
+ } else if (true) {
+ !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function() {
+ return classNames;
+ }.apply(exports2, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== void 0 && (module3.exports = __WEBPACK_AMD_DEFINE_RESULT__));
+ } else {
+ }
+ })();
+ },
+ "./node_modules/core-js/es/array/from.js": function(module3, exports2, __webpack_require__) {
+ __webpack_require__("./node_modules/core-js/modules/es.string.iterator.js");
+ __webpack_require__("./node_modules/core-js/modules/es.array.from.js");
+ var path3 = __webpack_require__("./node_modules/core-js/internals/path.js");
+ module3.exports = path3.Array.from;
+ },
+ "./node_modules/core-js/internals/a-function.js": function(module3, exports2) {
+ module3.exports = function(it) {
+ if (typeof it != "function") {
+ throw TypeError(String(it) + " is not a function");
+ }
+ return it;
+ };
+ },
+ "./node_modules/core-js/internals/an-object.js": function(module3, exports2, __webpack_require__) {
+ var isObject = __webpack_require__("./node_modules/core-js/internals/is-object.js");
+ module3.exports = function(it) {
+ if (!isObject(it)) {
+ throw TypeError(String(it) + " is not an object");
+ }
+ return it;
+ };
+ },
+ "./node_modules/core-js/internals/array-from.js": function(module3, exports2, __webpack_require__) {
+ "use strict";
+ var bind = __webpack_require__("./node_modules/core-js/internals/bind-context.js");
+ var toObject = __webpack_require__("./node_modules/core-js/internals/to-object.js");
+ var callWithSafeIterationClosing = __webpack_require__("./node_modules/core-js/internals/call-with-safe-iteration-closing.js");
+ var isArrayIteratorMethod = __webpack_require__("./node_modules/core-js/internals/is-array-iterator-method.js");
+ var toLength = __webpack_require__("./node_modules/core-js/internals/to-length.js");
+ var createProperty = __webpack_require__("./node_modules/core-js/internals/create-property.js");
+ var getIteratorMethod = __webpack_require__("./node_modules/core-js/internals/get-iterator-method.js");
+ module3.exports = function from(arrayLike) {
+ var O = toObject(arrayLike);
+ var C = typeof this == "function" ? this : Array;
+ var argumentsLength = arguments.length;
+ var mapfn = argumentsLength > 1 ? arguments[1] : void 0;
+ var mapping = mapfn !== void 0;
+ var index = 0;
+ var iteratorMethod = getIteratorMethod(O);
+ var length, result, step, iterator;
+ if (mapping)
+ mapfn = bind(mapfn, argumentsLength > 2 ? arguments[2] : void 0, 2);
+ if (iteratorMethod != void 0 && !(C == Array && isArrayIteratorMethod(iteratorMethod))) {
+ iterator = iteratorMethod.call(O);
+ result = new C();
+ for (; !(step = iterator.next()).done; index++) {
+ createProperty(result, index, mapping ? callWithSafeIterationClosing(iterator, mapfn, [step.value, index], true) : step.value);
+ }
+ } else {
+ length = toLength(O.length);
+ result = new C(length);
+ for (; length > index; index++) {
+ createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);
+ }
+ }
+ result.length = index;
+ return result;
+ };
+ },
+ "./node_modules/core-js/internals/array-includes.js": function(module3, exports2, __webpack_require__) {
+ var toIndexedObject = __webpack_require__("./node_modules/core-js/internals/to-indexed-object.js");
+ var toLength = __webpack_require__("./node_modules/core-js/internals/to-length.js");
+ var toAbsoluteIndex = __webpack_require__("./node_modules/core-js/internals/to-absolute-index.js");
+ module3.exports = function(IS_INCLUDES) {
+ return function($this, el, fromIndex) {
+ var O = toIndexedObject($this);
+ var length = toLength(O.length);
+ var index = toAbsoluteIndex(fromIndex, length);
+ var value;
+ if (IS_INCLUDES && el != el)
+ while (length > index) {
+ value = O[index++];
+ if (value != value)
+ return true;
+ }
+ else
+ for (; length > index; index++)
+ if (IS_INCLUDES || index in O) {
+ if (O[index] === el)
+ return IS_INCLUDES || index || 0;
+ }
+ return !IS_INCLUDES && -1;
+ };
+ };
+ },
+ "./node_modules/core-js/internals/bind-context.js": function(module3, exports2, __webpack_require__) {
+ var aFunction = __webpack_require__("./node_modules/core-js/internals/a-function.js");
+ module3.exports = function(fn, that, length) {
+ aFunction(fn);
+ if (that === void 0)
+ return fn;
+ switch (length) {
+ case 0:
+ return function() {
+ return fn.call(that);
+ };
+ case 1:
+ return function(a) {
+ return fn.call(that, a);
+ };
+ case 2:
+ return function(a, b) {
+ return fn.call(that, a, b);
+ };
+ case 3:
+ return function(a, b, c) {
+ return fn.call(that, a, b, c);
+ };
+ }
+ return function() {
+ return fn.apply(that, arguments);
+ };
+ };
+ },
+ "./node_modules/core-js/internals/call-with-safe-iteration-closing.js": function(module3, exports2, __webpack_require__) {
+ var anObject = __webpack_require__("./node_modules/core-js/internals/an-object.js");
+ module3.exports = function(iterator, fn, value, ENTRIES) {
+ try {
+ return ENTRIES ? fn(anObject(value)[0], value[1]) : fn(value);
+ } catch (error) {
+ var returnMethod = iterator["return"];
+ if (returnMethod !== void 0)
+ anObject(returnMethod.call(iterator));
+ throw error;
+ }
+ };
+ },
+ "./node_modules/core-js/internals/check-correctness-of-iteration.js": function(module3, exports2, __webpack_require__) {
+ var wellKnownSymbol = __webpack_require__("./node_modules/core-js/internals/well-known-symbol.js");
+ var ITERATOR = wellKnownSymbol("iterator");
+ var SAFE_CLOSING = false;
+ try {
+ var called = 0;
+ var iteratorWithReturn = {
+ next: function() {
+ return { done: !!called++ };
+ },
+ "return": function() {
+ SAFE_CLOSING = true;
+ }
+ };
+ iteratorWithReturn[ITERATOR] = function() {
+ return this;
+ };
+ Array.from(iteratorWithReturn, function() {
+ throw 2;
+ });
+ } catch (error) {
+ }
+ module3.exports = function(exec, SKIP_CLOSING) {
+ if (!SKIP_CLOSING && !SAFE_CLOSING)
+ return false;
+ var ITERATION_SUPPORT = false;
+ try {
+ var object = {};
+ object[ITERATOR] = function() {
+ return {
+ next: function() {
+ return { done: ITERATION_SUPPORT = true };
+ }
+ };
+ };
+ exec(object);
+ } catch (error) {
+ }
+ return ITERATION_SUPPORT;
+ };
+ },
+ "./node_modules/core-js/internals/classof-raw.js": function(module3, exports2) {
+ var toString = {}.toString;
+ module3.exports = function(it) {
+ return toString.call(it).slice(8, -1);
+ };
+ },
+ "./node_modules/core-js/internals/classof.js": function(module3, exports2, __webpack_require__) {
+ var classofRaw = __webpack_require__("./node_modules/core-js/internals/classof-raw.js");
+ var wellKnownSymbol = __webpack_require__("./node_modules/core-js/internals/well-known-symbol.js");
+ var TO_STRING_TAG = wellKnownSymbol("toStringTag");
+ var CORRECT_ARGUMENTS = classofRaw(function() {
+ return arguments;
+ }()) == "Arguments";
+ var tryGet = function(it, key2) {
+ try {
+ return it[key2];
+ } catch (error) {
+ }
+ };
+ module3.exports = function(it) {
+ var O, tag, result;
+ return it === void 0 ? "Undefined" : it === null ? "Null" : typeof (tag = tryGet(O = Object(it), TO_STRING_TAG)) == "string" ? tag : CORRECT_ARGUMENTS ? classofRaw(O) : (result = classofRaw(O)) == "Object" && typeof O.callee == "function" ? "Arguments" : result;
+ };
+ },
+ "./node_modules/core-js/internals/copy-constructor-properties.js": function(module3, exports2, __webpack_require__) {
+ var has = __webpack_require__("./node_modules/core-js/internals/has.js");
+ var ownKeys = __webpack_require__("./node_modules/core-js/internals/own-keys.js");
+ var getOwnPropertyDescriptorModule = __webpack_require__("./node_modules/core-js/internals/object-get-own-property-descriptor.js");
+ var definePropertyModule = __webpack_require__("./node_modules/core-js/internals/object-define-property.js");
+ module3.exports = function(target, source) {
+ var keys = ownKeys(source);
+ var defineProperty = definePropertyModule.f;
+ var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;
+ for (var i = 0; i < keys.length; i++) {
+ var key2 = keys[i];
+ if (!has(target, key2))
+ defineProperty(target, key2, getOwnPropertyDescriptor(source, key2));
+ }
+ };
+ },
+ "./node_modules/core-js/internals/correct-prototype-getter.js": function(module3, exports2, __webpack_require__) {
+ var fails = __webpack_require__("./node_modules/core-js/internals/fails.js");
+ module3.exports = !fails(function() {
+ function F() {
+ }
+ F.prototype.constructor = null;
+ return Object.getPrototypeOf(new F()) !== F.prototype;
+ });
+ },
+ "./node_modules/core-js/internals/create-iterator-constructor.js": function(module3, exports2, __webpack_require__) {
+ "use strict";
+ var IteratorPrototype = __webpack_require__("./node_modules/core-js/internals/iterators-core.js").IteratorPrototype;
+ var create = __webpack_require__("./node_modules/core-js/internals/object-create.js");
+ var createPropertyDescriptor = __webpack_require__("./node_modules/core-js/internals/create-property-descriptor.js");
+ var setToStringTag = __webpack_require__("./node_modules/core-js/internals/set-to-string-tag.js");
+ var Iterators = __webpack_require__("./node_modules/core-js/internals/iterators.js");
+ var returnThis = function() {
+ return this;
+ };
+ module3.exports = function(IteratorConstructor, NAME, next) {
+ var TO_STRING_TAG = NAME + " Iterator";
+ IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(1, next) });
+ setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true);
+ Iterators[TO_STRING_TAG] = returnThis;
+ return IteratorConstructor;
+ };
+ },
+ "./node_modules/core-js/internals/create-property-descriptor.js": function(module3, exports2) {
+ module3.exports = function(bitmap, value) {
+ return {
+ enumerable: !(bitmap & 1),
+ configurable: !(bitmap & 2),
+ writable: !(bitmap & 4),
+ value
+ };
+ };
+ },
+ "./node_modules/core-js/internals/create-property.js": function(module3, exports2, __webpack_require__) {
+ "use strict";
+ var toPrimitive = __webpack_require__("./node_modules/core-js/internals/to-primitive.js");
+ var definePropertyModule = __webpack_require__("./node_modules/core-js/internals/object-define-property.js");
+ var createPropertyDescriptor = __webpack_require__("./node_modules/core-js/internals/create-property-descriptor.js");
+ module3.exports = function(object, key2, value) {
+ var propertyKey = toPrimitive(key2);
+ if (propertyKey in object)
+ definePropertyModule.f(object, propertyKey, createPropertyDescriptor(0, value));
+ else
+ object[propertyKey] = value;
+ };
+ },
+ "./node_modules/core-js/internals/define-iterator.js": function(module3, exports2, __webpack_require__) {
+ "use strict";
+ var $ = __webpack_require__("./node_modules/core-js/internals/export.js");
+ var createIteratorConstructor = __webpack_require__("./node_modules/core-js/internals/create-iterator-constructor.js");
+ var getPrototypeOf = __webpack_require__("./node_modules/core-js/internals/object-get-prototype-of.js");
+ var setPrototypeOf = __webpack_require__("./node_modules/core-js/internals/object-set-prototype-of.js");
+ var setToStringTag = __webpack_require__("./node_modules/core-js/internals/set-to-string-tag.js");
+ var hide = __webpack_require__("./node_modules/core-js/internals/hide.js");
+ var redefine = __webpack_require__("./node_modules/core-js/internals/redefine.js");
+ var wellKnownSymbol = __webpack_require__("./node_modules/core-js/internals/well-known-symbol.js");
+ var IS_PURE = __webpack_require__("./node_modules/core-js/internals/is-pure.js");
+ var Iterators = __webpack_require__("./node_modules/core-js/internals/iterators.js");
+ var IteratorsCore = __webpack_require__("./node_modules/core-js/internals/iterators-core.js");
+ var IteratorPrototype = IteratorsCore.IteratorPrototype;
+ var BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS;
+ var ITERATOR = wellKnownSymbol("iterator");
+ var KEYS = "keys";
+ var VALUES = "values";
+ var ENTRIES = "entries";
+ var returnThis = function() {
+ return this;
+ };
+ module3.exports = function(Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) {
+ createIteratorConstructor(IteratorConstructor, NAME, next);
+ var getIterationMethod = function(KIND) {
+ if (KIND === DEFAULT && defaultIterator)
+ return defaultIterator;
+ if (!BUGGY_SAFARI_ITERATORS && KIND in IterablePrototype)
+ return IterablePrototype[KIND];
+ switch (KIND) {
+ case KEYS:
+ return function keys() {
+ return new IteratorConstructor(this, KIND);
+ };
+ case VALUES:
+ return function values() {
+ return new IteratorConstructor(this, KIND);
+ };
+ case ENTRIES:
+ return function entries() {
+ return new IteratorConstructor(this, KIND);
+ };
+ }
+ return function() {
+ return new IteratorConstructor(this);
+ };
+ };
+ var TO_STRING_TAG = NAME + " Iterator";
+ var INCORRECT_VALUES_NAME = false;
+ var IterablePrototype = Iterable.prototype;
+ var nativeIterator = IterablePrototype[ITERATOR] || IterablePrototype["@@iterator"] || DEFAULT && IterablePrototype[DEFAULT];
+ var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT);
+ var anyNativeIterator = NAME == "Array" ? IterablePrototype.entries || nativeIterator : nativeIterator;
+ var CurrentIteratorPrototype, methods, KEY;
+ if (anyNativeIterator) {
+ CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable()));
+ if (IteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) {
+ if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) {
+ if (setPrototypeOf) {
+ setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype);
+ } else if (typeof CurrentIteratorPrototype[ITERATOR] != "function") {
+ hide(CurrentIteratorPrototype, ITERATOR, returnThis);
+ }
+ }
+ setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true);
+ if (IS_PURE)
+ Iterators[TO_STRING_TAG] = returnThis;
+ }
+ }
+ if (DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) {
+ INCORRECT_VALUES_NAME = true;
+ defaultIterator = function values() {
+ return nativeIterator.call(this);
+ };
+ }
+ if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) {
+ hide(IterablePrototype, ITERATOR, defaultIterator);
+ }
+ Iterators[NAME] = defaultIterator;
+ if (DEFAULT) {
+ methods = {
+ values: getIterationMethod(VALUES),
+ keys: IS_SET ? defaultIterator : getIterationMethod(KEYS),
+ entries: getIterationMethod(ENTRIES)
+ };
+ if (FORCED)
+ for (KEY in methods) {
+ if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) {
+ redefine(IterablePrototype, KEY, methods[KEY]);
+ }
+ }
+ else
+ $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods);
+ }
+ return methods;
+ };
+ },
+ "./node_modules/core-js/internals/descriptors.js": function(module3, exports2, __webpack_require__) {
+ var fails = __webpack_require__("./node_modules/core-js/internals/fails.js");
+ module3.exports = !fails(function() {
+ return Object.defineProperty({}, "a", { get: function() {
+ return 7;
+ } }).a != 7;
+ });
+ },
+ "./node_modules/core-js/internals/document-create-element.js": function(module3, exports2, __webpack_require__) {
+ var global2 = __webpack_require__("./node_modules/core-js/internals/global.js");
+ var isObject = __webpack_require__("./node_modules/core-js/internals/is-object.js");
+ var document2 = global2.document;
+ var exist = isObject(document2) && isObject(document2.createElement);
+ module3.exports = function(it) {
+ return exist ? document2.createElement(it) : {};
+ };
+ },
+ "./node_modules/core-js/internals/enum-bug-keys.js": function(module3, exports2) {
+ module3.exports = [
+ "constructor",
+ "hasOwnProperty",
+ "isPrototypeOf",
+ "propertyIsEnumerable",
+ "toLocaleString",
+ "toString",
+ "valueOf"
+ ];
+ },
+ "./node_modules/core-js/internals/export.js": function(module3, exports2, __webpack_require__) {
+ var global2 = __webpack_require__("./node_modules/core-js/internals/global.js");
+ var getOwnPropertyDescriptor = __webpack_require__("./node_modules/core-js/internals/object-get-own-property-descriptor.js").f;
+ var hide = __webpack_require__("./node_modules/core-js/internals/hide.js");
+ var redefine = __webpack_require__("./node_modules/core-js/internals/redefine.js");
+ var setGlobal = __webpack_require__("./node_modules/core-js/internals/set-global.js");
+ var copyConstructorProperties = __webpack_require__("./node_modules/core-js/internals/copy-constructor-properties.js");
+ var isForced = __webpack_require__("./node_modules/core-js/internals/is-forced.js");
+ module3.exports = function(options, source) {
+ var TARGET = options.target;
+ var GLOBAL = options.global;
+ var STATIC = options.stat;
+ var FORCED, target, key2, targetProperty, sourceProperty, descriptor;
+ if (GLOBAL) {
+ target = global2;
+ } else if (STATIC) {
+ target = global2[TARGET] || setGlobal(TARGET, {});
+ } else {
+ target = (global2[TARGET] || {}).prototype;
+ }
+ if (target)
+ for (key2 in source) {
+ sourceProperty = source[key2];
+ if (options.noTargetGet) {
+ descriptor = getOwnPropertyDescriptor(target, key2);
+ targetProperty = descriptor && descriptor.value;
+ } else
+ targetProperty = target[key2];
+ FORCED = isForced(GLOBAL ? key2 : TARGET + (STATIC ? "." : "#") + key2, options.forced);
+ if (!FORCED && targetProperty !== void 0) {
+ if (typeof sourceProperty === typeof targetProperty)
+ continue;
+ copyConstructorProperties(sourceProperty, targetProperty);
+ }
+ if (options.sham || targetProperty && targetProperty.sham) {
+ hide(sourceProperty, "sham", true);
+ }
+ redefine(target, key2, sourceProperty, options);
+ }
+ };
+ },
+ "./node_modules/core-js/internals/fails.js": function(module3, exports2) {
+ module3.exports = function(exec) {
+ try {
+ return !!exec();
+ } catch (error) {
+ return true;
+ }
+ };
+ },
+ "./node_modules/core-js/internals/function-to-string.js": function(module3, exports2, __webpack_require__) {
+ var shared = __webpack_require__("./node_modules/core-js/internals/shared.js");
+ module3.exports = shared("native-function-to-string", Function.toString);
+ },
+ "./node_modules/core-js/internals/get-iterator-method.js": function(module3, exports2, __webpack_require__) {
+ var classof = __webpack_require__("./node_modules/core-js/internals/classof.js");
+ var Iterators = __webpack_require__("./node_modules/core-js/internals/iterators.js");
+ var wellKnownSymbol = __webpack_require__("./node_modules/core-js/internals/well-known-symbol.js");
+ var ITERATOR = wellKnownSymbol("iterator");
+ module3.exports = function(it) {
+ if (it != void 0)
+ return it[ITERATOR] || it["@@iterator"] || Iterators[classof(it)];
+ };
+ },
+ "./node_modules/core-js/internals/global.js": function(module3, exports2, __webpack_require__) {
+ (function(global2) {
+ var O = "object";
+ var check = function(it) {
+ return it && it.Math == Math && it;
+ };
+ module3.exports = check(typeof globalThis == O && globalThis) || check(typeof window == O && window) || check(typeof self == O && self) || check(typeof global2 == O && global2) || Function("return this")();
+ }).call(this, __webpack_require__("./node_modules/webpack/buildin/global.js"));
+ },
+ "./node_modules/core-js/internals/has.js": function(module3, exports2) {
+ var hasOwnProperty = {}.hasOwnProperty;
+ module3.exports = function(it, key2) {
+ return hasOwnProperty.call(it, key2);
+ };
+ },
+ "./node_modules/core-js/internals/hidden-keys.js": function(module3, exports2) {
+ module3.exports = {};
+ },
+ "./node_modules/core-js/internals/hide.js": function(module3, exports2, __webpack_require__) {
+ var DESCRIPTORS = __webpack_require__("./node_modules/core-js/internals/descriptors.js");
+ var definePropertyModule = __webpack_require__("./node_modules/core-js/internals/object-define-property.js");
+ var createPropertyDescriptor = __webpack_require__("./node_modules/core-js/internals/create-property-descriptor.js");
+ module3.exports = DESCRIPTORS ? function(object, key2, value) {
+ return definePropertyModule.f(object, key2, createPropertyDescriptor(1, value));
+ } : function(object, key2, value) {
+ object[key2] = value;
+ return object;
+ };
+ },
+ "./node_modules/core-js/internals/html.js": function(module3, exports2, __webpack_require__) {
+ var global2 = __webpack_require__("./node_modules/core-js/internals/global.js");
+ var document2 = global2.document;
+ module3.exports = document2 && document2.documentElement;
+ },
+ "./node_modules/core-js/internals/ie8-dom-define.js": function(module3, exports2, __webpack_require__) {
+ var DESCRIPTORS = __webpack_require__("./node_modules/core-js/internals/descriptors.js");
+ var fails = __webpack_require__("./node_modules/core-js/internals/fails.js");
+ var createElement = __webpack_require__("./node_modules/core-js/internals/document-create-element.js");
+ module3.exports = !DESCRIPTORS && !fails(function() {
+ return Object.defineProperty(createElement("div"), "a", {
+ get: function() {
+ return 7;
+ }
+ }).a != 7;
+ });
+ },
+ "./node_modules/core-js/internals/indexed-object.js": function(module3, exports2, __webpack_require__) {
+ var fails = __webpack_require__("./node_modules/core-js/internals/fails.js");
+ var classof = __webpack_require__("./node_modules/core-js/internals/classof-raw.js");
+ var split = "".split;
+ module3.exports = fails(function() {
+ return !Object("z").propertyIsEnumerable(0);
+ }) ? function(it) {
+ return classof(it) == "String" ? split.call(it, "") : Object(it);
+ } : Object;
+ },
+ "./node_modules/core-js/internals/internal-state.js": function(module3, exports2, __webpack_require__) {
+ var NATIVE_WEAK_MAP = __webpack_require__("./node_modules/core-js/internals/native-weak-map.js");
+ var global2 = __webpack_require__("./node_modules/core-js/internals/global.js");
+ var isObject = __webpack_require__("./node_modules/core-js/internals/is-object.js");
+ var hide = __webpack_require__("./node_modules/core-js/internals/hide.js");
+ var objectHas = __webpack_require__("./node_modules/core-js/internals/has.js");
+ var sharedKey = __webpack_require__("./node_modules/core-js/internals/shared-key.js");
+ var hiddenKeys = __webpack_require__("./node_modules/core-js/internals/hidden-keys.js");
+ var WeakMap2 = global2.WeakMap;
+ var set, get, has;
+ var enforce = function(it) {
+ return has(it) ? get(it) : set(it, {});
+ };
+ var getterFor = function(TYPE) {
+ return function(it) {
+ var state;
+ if (!isObject(it) || (state = get(it)).type !== TYPE) {
+ throw TypeError("Incompatible receiver, " + TYPE + " required");
+ }
+ return state;
+ };
+ };
+ if (NATIVE_WEAK_MAP) {
+ var store = new WeakMap2();
+ var wmget = store.get;
+ var wmhas = store.has;
+ var wmset = store.set;
+ set = function(it, metadata) {
+ wmset.call(store, it, metadata);
+ return metadata;
+ };
+ get = function(it) {
+ return wmget.call(store, it) || {};
+ };
+ has = function(it) {
+ return wmhas.call(store, it);
+ };
+ } else {
+ var STATE = sharedKey("state");
+ hiddenKeys[STATE] = true;
+ set = function(it, metadata) {
+ hide(it, STATE, metadata);
+ return metadata;
+ };
+ get = function(it) {
+ return objectHas(it, STATE) ? it[STATE] : {};
+ };
+ has = function(it) {
+ return objectHas(it, STATE);
+ };
+ }
+ module3.exports = {
+ set,
+ get,
+ has,
+ enforce,
+ getterFor
+ };
+ },
+ "./node_modules/core-js/internals/is-array-iterator-method.js": function(module3, exports2, __webpack_require__) {
+ var wellKnownSymbol = __webpack_require__("./node_modules/core-js/internals/well-known-symbol.js");
+ var Iterators = __webpack_require__("./node_modules/core-js/internals/iterators.js");
+ var ITERATOR = wellKnownSymbol("iterator");
+ var ArrayPrototype = Array.prototype;
+ module3.exports = function(it) {
+ return it !== void 0 && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it);
+ };
+ },
+ "./node_modules/core-js/internals/is-forced.js": function(module3, exports2, __webpack_require__) {
+ var fails = __webpack_require__("./node_modules/core-js/internals/fails.js");
+ var replacement = /#|\.prototype\./;
+ var isForced = function(feature, detection) {
+ var value = data[normalize2(feature)];
+ return value == POLYFILL ? true : value == NATIVE ? false : typeof detection == "function" ? fails(detection) : !!detection;
+ };
+ var normalize2 = isForced.normalize = function(string) {
+ return String(string).replace(replacement, ".").toLowerCase();
+ };
+ var data = isForced.data = {};
+ var NATIVE = isForced.NATIVE = "N";
+ var POLYFILL = isForced.POLYFILL = "P";
+ module3.exports = isForced;
+ },
+ "./node_modules/core-js/internals/is-object.js": function(module3, exports2) {
+ module3.exports = function(it) {
+ return typeof it === "object" ? it !== null : typeof it === "function";
+ };
+ },
+ "./node_modules/core-js/internals/is-pure.js": function(module3, exports2) {
+ module3.exports = false;
+ },
+ "./node_modules/core-js/internals/iterators-core.js": function(module3, exports2, __webpack_require__) {
+ "use strict";
+ var getPrototypeOf = __webpack_require__("./node_modules/core-js/internals/object-get-prototype-of.js");
+ var hide = __webpack_require__("./node_modules/core-js/internals/hide.js");
+ var has = __webpack_require__("./node_modules/core-js/internals/has.js");
+ var wellKnownSymbol = __webpack_require__("./node_modules/core-js/internals/well-known-symbol.js");
+ var IS_PURE = __webpack_require__("./node_modules/core-js/internals/is-pure.js");
+ var ITERATOR = wellKnownSymbol("iterator");
+ var BUGGY_SAFARI_ITERATORS = false;
+ var returnThis = function() {
+ return this;
+ };
+ var IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator;
+ if ([].keys) {
+ arrayIterator = [].keys();
+ if (!("next" in arrayIterator))
+ BUGGY_SAFARI_ITERATORS = true;
+ else {
+ PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator));
+ if (PrototypeOfArrayIteratorPrototype !== Object.prototype)
+ IteratorPrototype = PrototypeOfArrayIteratorPrototype;
+ }
+ }
+ if (IteratorPrototype == void 0)
+ IteratorPrototype = {};
+ if (!IS_PURE && !has(IteratorPrototype, ITERATOR))
+ hide(IteratorPrototype, ITERATOR, returnThis);
+ module3.exports = {
+ IteratorPrototype,
+ BUGGY_SAFARI_ITERATORS
+ };
+ },
+ "./node_modules/core-js/internals/iterators.js": function(module3, exports2) {
+ module3.exports = {};
+ },
+ "./node_modules/core-js/internals/native-symbol.js": function(module3, exports2, __webpack_require__) {
+ var fails = __webpack_require__("./node_modules/core-js/internals/fails.js");
+ module3.exports = !!Object.getOwnPropertySymbols && !fails(function() {
+ return !String(Symbol());
+ });
+ },
+ "./node_modules/core-js/internals/native-weak-map.js": function(module3, exports2, __webpack_require__) {
+ var global2 = __webpack_require__("./node_modules/core-js/internals/global.js");
+ var nativeFunctionToString = __webpack_require__("./node_modules/core-js/internals/function-to-string.js");
+ var WeakMap2 = global2.WeakMap;
+ module3.exports = typeof WeakMap2 === "function" && /native code/.test(nativeFunctionToString.call(WeakMap2));
+ },
+ "./node_modules/core-js/internals/object-create.js": function(module3, exports2, __webpack_require__) {
+ var anObject = __webpack_require__("./node_modules/core-js/internals/an-object.js");
+ var defineProperties = __webpack_require__("./node_modules/core-js/internals/object-define-properties.js");
+ var enumBugKeys = __webpack_require__("./node_modules/core-js/internals/enum-bug-keys.js");
+ var hiddenKeys = __webpack_require__("./node_modules/core-js/internals/hidden-keys.js");
+ var html2 = __webpack_require__("./node_modules/core-js/internals/html.js");
+ var documentCreateElement = __webpack_require__("./node_modules/core-js/internals/document-create-element.js");
+ var sharedKey = __webpack_require__("./node_modules/core-js/internals/shared-key.js");
+ var IE_PROTO = sharedKey("IE_PROTO");
+ var PROTOTYPE = "prototype";
+ var Empty = function() {
+ };
+ var createDict = function() {
+ var iframe = documentCreateElement("iframe");
+ var length = enumBugKeys.length;
+ var lt = "<";
+ var script = "script";
+ var gt = ">";
+ var js = "java" + script + ":";
+ var iframeDocument;
+ iframe.style.display = "none";
+ html2.appendChild(iframe);
+ iframe.src = String(js);
+ iframeDocument = iframe.contentWindow.document;
+ iframeDocument.open();
+ iframeDocument.write(lt + script + gt + "document.F=Object" + lt + "/" + script + gt);
+ iframeDocument.close();
+ createDict = iframeDocument.F;
+ while (length--)
+ delete createDict[PROTOTYPE][enumBugKeys[length]];
+ return createDict();
+ };
+ module3.exports = Object.create || function create(O, Properties) {
+ var result;
+ if (O !== null) {
+ Empty[PROTOTYPE] = anObject(O);
+ result = new Empty();
+ Empty[PROTOTYPE] = null;
+ result[IE_PROTO] = O;
+ } else
+ result = createDict();
+ return Properties === void 0 ? result : defineProperties(result, Properties);
+ };
+ hiddenKeys[IE_PROTO] = true;
+ },
+ "./node_modules/core-js/internals/object-define-properties.js": function(module3, exports2, __webpack_require__) {
+ var DESCRIPTORS = __webpack_require__("./node_modules/core-js/internals/descriptors.js");
+ var definePropertyModule = __webpack_require__("./node_modules/core-js/internals/object-define-property.js");
+ var anObject = __webpack_require__("./node_modules/core-js/internals/an-object.js");
+ var objectKeys = __webpack_require__("./node_modules/core-js/internals/object-keys.js");
+ module3.exports = DESCRIPTORS ? Object.defineProperties : function defineProperties(O, Properties) {
+ anObject(O);
+ var keys = objectKeys(Properties);
+ var length = keys.length;
+ var i = 0;
+ var key2;
+ while (length > i)
+ definePropertyModule.f(O, key2 = keys[i++], Properties[key2]);
+ return O;
+ };
+ },
+ "./node_modules/core-js/internals/object-define-property.js": function(module3, exports2, __webpack_require__) {
+ var DESCRIPTORS = __webpack_require__("./node_modules/core-js/internals/descriptors.js");
+ var IE8_DOM_DEFINE = __webpack_require__("./node_modules/core-js/internals/ie8-dom-define.js");
+ var anObject = __webpack_require__("./node_modules/core-js/internals/an-object.js");
+ var toPrimitive = __webpack_require__("./node_modules/core-js/internals/to-primitive.js");
+ var nativeDefineProperty = Object.defineProperty;
+ exports2.f = DESCRIPTORS ? nativeDefineProperty : function defineProperty(O, P, Attributes) {
+ anObject(O);
+ P = toPrimitive(P, true);
+ anObject(Attributes);
+ if (IE8_DOM_DEFINE)
+ try {
+ return nativeDefineProperty(O, P, Attributes);
+ } catch (error) {
+ }
+ if ("get" in Attributes || "set" in Attributes)
+ throw TypeError("Accessors not supported");
+ if ("value" in Attributes)
+ O[P] = Attributes.value;
+ return O;
+ };
+ },
+ "./node_modules/core-js/internals/object-get-own-property-descriptor.js": function(module3, exports2, __webpack_require__) {
+ var DESCRIPTORS = __webpack_require__("./node_modules/core-js/internals/descriptors.js");
+ var propertyIsEnumerableModule = __webpack_require__("./node_modules/core-js/internals/object-property-is-enumerable.js");
+ var createPropertyDescriptor = __webpack_require__("./node_modules/core-js/internals/create-property-descriptor.js");
+ var toIndexedObject = __webpack_require__("./node_modules/core-js/internals/to-indexed-object.js");
+ var toPrimitive = __webpack_require__("./node_modules/core-js/internals/to-primitive.js");
+ var has = __webpack_require__("./node_modules/core-js/internals/has.js");
+ var IE8_DOM_DEFINE = __webpack_require__("./node_modules/core-js/internals/ie8-dom-define.js");
+ var nativeGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
+ exports2.f = DESCRIPTORS ? nativeGetOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {
+ O = toIndexedObject(O);
+ P = toPrimitive(P, true);
+ if (IE8_DOM_DEFINE)
+ try {
+ return nativeGetOwnPropertyDescriptor(O, P);
+ } catch (error) {
+ }
+ if (has(O, P))
+ return createPropertyDescriptor(!propertyIsEnumerableModule.f.call(O, P), O[P]);
+ };
+ },
+ "./node_modules/core-js/internals/object-get-own-property-names.js": function(module3, exports2, __webpack_require__) {
+ var internalObjectKeys = __webpack_require__("./node_modules/core-js/internals/object-keys-internal.js");
+ var enumBugKeys = __webpack_require__("./node_modules/core-js/internals/enum-bug-keys.js");
+ var hiddenKeys = enumBugKeys.concat("length", "prototype");
+ exports2.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {
+ return internalObjectKeys(O, hiddenKeys);
+ };
+ },
+ "./node_modules/core-js/internals/object-get-own-property-symbols.js": function(module3, exports2) {
+ exports2.f = Object.getOwnPropertySymbols;
+ },
+ "./node_modules/core-js/internals/object-get-prototype-of.js": function(module3, exports2, __webpack_require__) {
+ var has = __webpack_require__("./node_modules/core-js/internals/has.js");
+ var toObject = __webpack_require__("./node_modules/core-js/internals/to-object.js");
+ var sharedKey = __webpack_require__("./node_modules/core-js/internals/shared-key.js");
+ var CORRECT_PROTOTYPE_GETTER = __webpack_require__("./node_modules/core-js/internals/correct-prototype-getter.js");
+ var IE_PROTO = sharedKey("IE_PROTO");
+ var ObjectPrototype = Object.prototype;
+ module3.exports = CORRECT_PROTOTYPE_GETTER ? Object.getPrototypeOf : function(O) {
+ O = toObject(O);
+ if (has(O, IE_PROTO))
+ return O[IE_PROTO];
+ if (typeof O.constructor == "function" && O instanceof O.constructor) {
+ return O.constructor.prototype;
+ }
+ return O instanceof Object ? ObjectPrototype : null;
+ };
+ },
+ "./node_modules/core-js/internals/object-keys-internal.js": function(module3, exports2, __webpack_require__) {
+ var has = __webpack_require__("./node_modules/core-js/internals/has.js");
+ var toIndexedObject = __webpack_require__("./node_modules/core-js/internals/to-indexed-object.js");
+ var arrayIncludes = __webpack_require__("./node_modules/core-js/internals/array-includes.js");
+ var hiddenKeys = __webpack_require__("./node_modules/core-js/internals/hidden-keys.js");
+ var arrayIndexOf = arrayIncludes(false);
+ module3.exports = function(object, names) {
+ var O = toIndexedObject(object);
+ var i = 0;
+ var result = [];
+ var key2;
+ for (key2 in O)
+ !has(hiddenKeys, key2) && has(O, key2) && result.push(key2);
+ while (names.length > i)
+ if (has(O, key2 = names[i++])) {
+ ~arrayIndexOf(result, key2) || result.push(key2);
+ }
+ return result;
+ };
+ },
+ "./node_modules/core-js/internals/object-keys.js": function(module3, exports2, __webpack_require__) {
+ var internalObjectKeys = __webpack_require__("./node_modules/core-js/internals/object-keys-internal.js");
+ var enumBugKeys = __webpack_require__("./node_modules/core-js/internals/enum-bug-keys.js");
+ module3.exports = Object.keys || function keys(O) {
+ return internalObjectKeys(O, enumBugKeys);
+ };
+ },
+ "./node_modules/core-js/internals/object-property-is-enumerable.js": function(module3, exports2, __webpack_require__) {
+ "use strict";
+ var nativePropertyIsEnumerable = {}.propertyIsEnumerable;
+ var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
+ var NASHORN_BUG = getOwnPropertyDescriptor && !nativePropertyIsEnumerable.call({ 1: 2 }, 1);
+ exports2.f = NASHORN_BUG ? function propertyIsEnumerable(V) {
+ var descriptor = getOwnPropertyDescriptor(this, V);
+ return !!descriptor && descriptor.enumerable;
+ } : nativePropertyIsEnumerable;
+ },
+ "./node_modules/core-js/internals/object-set-prototype-of.js": function(module3, exports2, __webpack_require__) {
+ var validateSetPrototypeOfArguments = __webpack_require__("./node_modules/core-js/internals/validate-set-prototype-of-arguments.js");
+ module3.exports = Object.setPrototypeOf || ("__proto__" in {} ? function() {
+ var correctSetter = false;
+ var test = {};
+ var setter;
+ try {
+ setter = Object.getOwnPropertyDescriptor(Object.prototype, "__proto__").set;
+ setter.call(test, []);
+ correctSetter = test instanceof Array;
+ } catch (error) {
+ }
+ return function setPrototypeOf(O, proto) {
+ validateSetPrototypeOfArguments(O, proto);
+ if (correctSetter)
+ setter.call(O, proto);
+ else
+ O.__proto__ = proto;
+ return O;
+ };
+ }() : void 0);
+ },
+ "./node_modules/core-js/internals/own-keys.js": function(module3, exports2, __webpack_require__) {
+ var global2 = __webpack_require__("./node_modules/core-js/internals/global.js");
+ var getOwnPropertyNamesModule = __webpack_require__("./node_modules/core-js/internals/object-get-own-property-names.js");
+ var getOwnPropertySymbolsModule = __webpack_require__("./node_modules/core-js/internals/object-get-own-property-symbols.js");
+ var anObject = __webpack_require__("./node_modules/core-js/internals/an-object.js");
+ var Reflect2 = global2.Reflect;
+ module3.exports = Reflect2 && Reflect2.ownKeys || function ownKeys(it) {
+ var keys = getOwnPropertyNamesModule.f(anObject(it));
+ var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;
+ return getOwnPropertySymbols ? keys.concat(getOwnPropertySymbols(it)) : keys;
+ };
+ },
+ "./node_modules/core-js/internals/path.js": function(module3, exports2, __webpack_require__) {
+ module3.exports = __webpack_require__("./node_modules/core-js/internals/global.js");
+ },
+ "./node_modules/core-js/internals/redefine.js": function(module3, exports2, __webpack_require__) {
+ var global2 = __webpack_require__("./node_modules/core-js/internals/global.js");
+ var shared = __webpack_require__("./node_modules/core-js/internals/shared.js");
+ var hide = __webpack_require__("./node_modules/core-js/internals/hide.js");
+ var has = __webpack_require__("./node_modules/core-js/internals/has.js");
+ var setGlobal = __webpack_require__("./node_modules/core-js/internals/set-global.js");
+ var nativeFunctionToString = __webpack_require__("./node_modules/core-js/internals/function-to-string.js");
+ var InternalStateModule = __webpack_require__("./node_modules/core-js/internals/internal-state.js");
+ var getInternalState = InternalStateModule.get;
+ var enforceInternalState = InternalStateModule.enforce;
+ var TEMPLATE = String(nativeFunctionToString).split("toString");
+ shared("inspectSource", function(it) {
+ return nativeFunctionToString.call(it);
+ });
+ (module3.exports = function(O, key2, value, options) {
+ var unsafe = options ? !!options.unsafe : false;
+ var simple = options ? !!options.enumerable : false;
+ var noTargetGet = options ? !!options.noTargetGet : false;
+ if (typeof value == "function") {
+ if (typeof key2 == "string" && !has(value, "name"))
+ hide(value, "name", key2);
+ enforceInternalState(value).source = TEMPLATE.join(typeof key2 == "string" ? key2 : "");
+ }
+ if (O === global2) {
+ if (simple)
+ O[key2] = value;
+ else
+ setGlobal(key2, value);
+ return;
+ } else if (!unsafe) {
+ delete O[key2];
+ } else if (!noTargetGet && O[key2]) {
+ simple = true;
+ }
+ if (simple)
+ O[key2] = value;
+ else
+ hide(O, key2, value);
+ })(Function.prototype, "toString", function toString() {
+ return typeof this == "function" && getInternalState(this).source || nativeFunctionToString.call(this);
+ });
+ },
+ "./node_modules/core-js/internals/require-object-coercible.js": function(module3, exports2) {
+ module3.exports = function(it) {
+ if (it == void 0)
+ throw TypeError("Can't call method on " + it);
+ return it;
+ };
+ },
+ "./node_modules/core-js/internals/set-global.js": function(module3, exports2, __webpack_require__) {
+ var global2 = __webpack_require__("./node_modules/core-js/internals/global.js");
+ var hide = __webpack_require__("./node_modules/core-js/internals/hide.js");
+ module3.exports = function(key2, value) {
+ try {
+ hide(global2, key2, value);
+ } catch (error) {
+ global2[key2] = value;
+ }
+ return value;
+ };
+ },
+ "./node_modules/core-js/internals/set-to-string-tag.js": function(module3, exports2, __webpack_require__) {
+ var defineProperty = __webpack_require__("./node_modules/core-js/internals/object-define-property.js").f;
+ var has = __webpack_require__("./node_modules/core-js/internals/has.js");
+ var wellKnownSymbol = __webpack_require__("./node_modules/core-js/internals/well-known-symbol.js");
+ var TO_STRING_TAG = wellKnownSymbol("toStringTag");
+ module3.exports = function(it, TAG, STATIC) {
+ if (it && !has(it = STATIC ? it : it.prototype, TO_STRING_TAG)) {
+ defineProperty(it, TO_STRING_TAG, { configurable: true, value: TAG });
+ }
+ };
+ },
+ "./node_modules/core-js/internals/shared-key.js": function(module3, exports2, __webpack_require__) {
+ var shared = __webpack_require__("./node_modules/core-js/internals/shared.js");
+ var uid = __webpack_require__("./node_modules/core-js/internals/uid.js");
+ var keys = shared("keys");
+ module3.exports = function(key2) {
+ return keys[key2] || (keys[key2] = uid(key2));
+ };
+ },
+ "./node_modules/core-js/internals/shared.js": function(module3, exports2, __webpack_require__) {
+ var global2 = __webpack_require__("./node_modules/core-js/internals/global.js");
+ var setGlobal = __webpack_require__("./node_modules/core-js/internals/set-global.js");
+ var IS_PURE = __webpack_require__("./node_modules/core-js/internals/is-pure.js");
+ var SHARED = "__core-js_shared__";
+ var store = global2[SHARED] || setGlobal(SHARED, {});
+ (module3.exports = function(key2, value) {
+ return store[key2] || (store[key2] = value !== void 0 ? value : {});
+ })("versions", []).push({
+ version: "3.1.3",
+ mode: IS_PURE ? "pure" : "global",
+ copyright: "\xA9 2019 Denis Pushkarev (zloirock.ru)"
+ });
+ },
+ "./node_modules/core-js/internals/string-at.js": function(module3, exports2, __webpack_require__) {
+ var toInteger = __webpack_require__("./node_modules/core-js/internals/to-integer.js");
+ var requireObjectCoercible = __webpack_require__("./node_modules/core-js/internals/require-object-coercible.js");
+ module3.exports = function(that, pos, CONVERT_TO_STRING) {
+ var S = String(requireObjectCoercible(that));
+ var position = toInteger(pos);
+ var size = S.length;
+ var first2, second;
+ if (position < 0 || position >= size)
+ return CONVERT_TO_STRING ? "" : void 0;
+ first2 = S.charCodeAt(position);
+ return first2 < 55296 || first2 > 56319 || position + 1 === size || (second = S.charCodeAt(position + 1)) < 56320 || second > 57343 ? CONVERT_TO_STRING ? S.charAt(position) : first2 : CONVERT_TO_STRING ? S.slice(position, position + 2) : (first2 - 55296 << 10) + (second - 56320) + 65536;
+ };
+ },
+ "./node_modules/core-js/internals/to-absolute-index.js": function(module3, exports2, __webpack_require__) {
+ var toInteger = __webpack_require__("./node_modules/core-js/internals/to-integer.js");
+ var max = Math.max;
+ var min = Math.min;
+ module3.exports = function(index, length) {
+ var integer = toInteger(index);
+ return integer < 0 ? max(integer + length, 0) : min(integer, length);
+ };
+ },
+ "./node_modules/core-js/internals/to-indexed-object.js": function(module3, exports2, __webpack_require__) {
+ var IndexedObject = __webpack_require__("./node_modules/core-js/internals/indexed-object.js");
+ var requireObjectCoercible = __webpack_require__("./node_modules/core-js/internals/require-object-coercible.js");
+ module3.exports = function(it) {
+ return IndexedObject(requireObjectCoercible(it));
+ };
+ },
+ "./node_modules/core-js/internals/to-integer.js": function(module3, exports2) {
+ var ceil = Math.ceil;
+ var floor = Math.floor;
+ module3.exports = function(argument) {
+ return isNaN(argument = +argument) ? 0 : (argument > 0 ? floor : ceil)(argument);
+ };
+ },
+ "./node_modules/core-js/internals/to-length.js": function(module3, exports2, __webpack_require__) {
+ var toInteger = __webpack_require__("./node_modules/core-js/internals/to-integer.js");
+ var min = Math.min;
+ module3.exports = function(argument) {
+ return argument > 0 ? min(toInteger(argument), 9007199254740991) : 0;
+ };
+ },
+ "./node_modules/core-js/internals/to-object.js": function(module3, exports2, __webpack_require__) {
+ var requireObjectCoercible = __webpack_require__("./node_modules/core-js/internals/require-object-coercible.js");
+ module3.exports = function(argument) {
+ return Object(requireObjectCoercible(argument));
+ };
+ },
+ "./node_modules/core-js/internals/to-primitive.js": function(module3, exports2, __webpack_require__) {
+ var isObject = __webpack_require__("./node_modules/core-js/internals/is-object.js");
+ module3.exports = function(it, S) {
+ if (!isObject(it))
+ return it;
+ var fn, val;
+ if (S && typeof (fn = it.toString) == "function" && !isObject(val = fn.call(it)))
+ return val;
+ if (typeof (fn = it.valueOf) == "function" && !isObject(val = fn.call(it)))
+ return val;
+ if (!S && typeof (fn = it.toString) == "function" && !isObject(val = fn.call(it)))
+ return val;
+ throw TypeError("Can't convert object to primitive value");
+ };
+ },
+ "./node_modules/core-js/internals/uid.js": function(module3, exports2) {
+ var id = 0;
+ var postfix = Math.random();
+ module3.exports = function(key2) {
+ return "Symbol(".concat(key2 === void 0 ? "" : key2, ")_", (++id + postfix).toString(36));
+ };
+ },
+ "./node_modules/core-js/internals/validate-set-prototype-of-arguments.js": function(module3, exports2, __webpack_require__) {
+ var isObject = __webpack_require__("./node_modules/core-js/internals/is-object.js");
+ var anObject = __webpack_require__("./node_modules/core-js/internals/an-object.js");
+ module3.exports = function(O, proto) {
+ anObject(O);
+ if (!isObject(proto) && proto !== null) {
+ throw TypeError("Can't set " + String(proto) + " as a prototype");
+ }
+ };
+ },
+ "./node_modules/core-js/internals/well-known-symbol.js": function(module3, exports2, __webpack_require__) {
+ var global2 = __webpack_require__("./node_modules/core-js/internals/global.js");
+ var shared = __webpack_require__("./node_modules/core-js/internals/shared.js");
+ var uid = __webpack_require__("./node_modules/core-js/internals/uid.js");
+ var NATIVE_SYMBOL = __webpack_require__("./node_modules/core-js/internals/native-symbol.js");
+ var Symbol2 = global2.Symbol;
+ var store = shared("wks");
+ module3.exports = function(name) {
+ return store[name] || (store[name] = NATIVE_SYMBOL && Symbol2[name] || (NATIVE_SYMBOL ? Symbol2 : uid)("Symbol." + name));
+ };
+ },
+ "./node_modules/core-js/modules/es.array.from.js": function(module3, exports2, __webpack_require__) {
+ var $ = __webpack_require__("./node_modules/core-js/internals/export.js");
+ var from = __webpack_require__("./node_modules/core-js/internals/array-from.js");
+ var checkCorrectnessOfIteration = __webpack_require__("./node_modules/core-js/internals/check-correctness-of-iteration.js");
+ var INCORRECT_ITERATION = !checkCorrectnessOfIteration(function(iterable) {
+ Array.from(iterable);
+ });
+ $({ target: "Array", stat: true, forced: INCORRECT_ITERATION }, {
+ from
+ });
+ },
+ "./node_modules/core-js/modules/es.string.iterator.js": function(module3, exports2, __webpack_require__) {
+ "use strict";
+ var codePointAt = __webpack_require__("./node_modules/core-js/internals/string-at.js");
+ var InternalStateModule = __webpack_require__("./node_modules/core-js/internals/internal-state.js");
+ var defineIterator = __webpack_require__("./node_modules/core-js/internals/define-iterator.js");
+ var STRING_ITERATOR = "String Iterator";
+ var setInternalState = InternalStateModule.set;
+ var getInternalState = InternalStateModule.getterFor(STRING_ITERATOR);
+ defineIterator(String, "String", function(iterated) {
+ setInternalState(this, {
+ type: STRING_ITERATOR,
+ string: String(iterated),
+ index: 0
+ });
+ }, function next() {
+ var state = getInternalState(this);
+ var string = state.string;
+ var index = state.index;
+ var point;
+ if (index >= string.length)
+ return { value: void 0, done: true };
+ point = codePointAt(string, index, true);
+ state.index += point.length;
+ return { value: point, done: false };
+ });
+ },
+ "./node_modules/webpack/buildin/global.js": function(module3, exports2) {
+ var g;
+ g = function() {
+ return this;
+ }();
+ try {
+ g = g || Function("return this")() || (1, eval)("this");
+ } catch (e) {
+ if (typeof window === "object")
+ g = window;
+ }
+ module3.exports = g;
+ },
+ "./src/default-attrs.json": function(module3) {
+ module3.exports = { "xmlns": "http://www.w3.org/2000/svg", "width": 24, "height": 24, "viewBox": "0 0 24 24", "fill": "none", "stroke": "currentColor", "stroke-width": 2, "stroke-linecap": "round", "stroke-linejoin": "round" };
+ },
+ "./src/icon.js": function(module3, exports2, __webpack_require__) {
+ "use strict";
+ Object.defineProperty(exports2, "__esModule", {
+ value: true
+ });
+ var _extends = Object.assign || function(target) {
+ for (var i = 1; i < arguments.length; i++) {
+ var source = arguments[i];
+ for (var key2 in source) {
+ if (Object.prototype.hasOwnProperty.call(source, key2)) {
+ target[key2] = source[key2];
+ }
+ }
+ }
+ return target;
+ };
+ var _createClass = function() {
+ function defineProperties(target, props) {
+ for (var i = 0; i < props.length; i++) {
+ var descriptor = props[i];
+ descriptor.enumerable = descriptor.enumerable || false;
+ descriptor.configurable = true;
+ if ("value" in descriptor)
+ descriptor.writable = true;
+ Object.defineProperty(target, descriptor.key, descriptor);
+ }
+ }
+ return function(Constructor, protoProps, staticProps) {
+ if (protoProps)
+ defineProperties(Constructor.prototype, protoProps);
+ if (staticProps)
+ defineProperties(Constructor, staticProps);
+ return Constructor;
+ };
+ }();
+ var _dedupe = __webpack_require__("./node_modules/classnames/dedupe.js");
+ var _dedupe2 = _interopRequireDefault(_dedupe);
+ var _defaultAttrs = __webpack_require__("./src/default-attrs.json");
+ var _defaultAttrs2 = _interopRequireDefault(_defaultAttrs);
+ function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : { default: obj };
+ }
+ function _classCallCheck(instance5, Constructor) {
+ if (!(instance5 instanceof Constructor)) {
+ throw new TypeError("Cannot call a class as a function");
+ }
+ }
+ var Icon = function() {
+ function Icon2(name, contents) {
+ var tags = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : [];
+ _classCallCheck(this, Icon2);
+ this.name = name;
+ this.contents = contents;
+ this.tags = tags;
+ this.attrs = _extends({}, _defaultAttrs2.default, { class: "feather feather-" + name });
+ }
+ _createClass(Icon2, [{
+ key: "toSvg",
+ value: function toSvg() {
+ var attrs = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
+ var combinedAttrs = _extends({}, this.attrs, attrs, { class: (0, _dedupe2.default)(this.attrs.class, attrs.class) });
+ return "";
+ }
+ }, {
+ key: "toString",
+ value: function toString() {
+ return this.contents;
+ }
+ }]);
+ return Icon2;
+ }();
+ function attrsToString(attrs) {
+ return Object.keys(attrs).map(function(key2) {
+ return key2 + '="' + attrs[key2] + '"';
+ }).join(" ");
+ }
+ exports2.default = Icon;
+ },
+ "./src/icons.js": function(module3, exports2, __webpack_require__) {
+ "use strict";
+ Object.defineProperty(exports2, "__esModule", {
+ value: true
+ });
+ var _icon = __webpack_require__("./src/icon.js");
+ var _icon2 = _interopRequireDefault(_icon);
+ var _icons = __webpack_require__("./dist/icons.json");
+ var _icons2 = _interopRequireDefault(_icons);
+ var _tags = __webpack_require__("./src/tags.json");
+ var _tags2 = _interopRequireDefault(_tags);
+ function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : { default: obj };
+ }
+ exports2.default = Object.keys(_icons2.default).map(function(key2) {
+ return new _icon2.default(key2, _icons2.default[key2], _tags2.default[key2]);
+ }).reduce(function(object, icon) {
+ object[icon.name] = icon;
+ return object;
+ }, {});
+ },
+ "./src/index.js": function(module3, exports2, __webpack_require__) {
+ "use strict";
+ var _icons = __webpack_require__("./src/icons.js");
+ var _icons2 = _interopRequireDefault(_icons);
+ var _toSvg = __webpack_require__("./src/to-svg.js");
+ var _toSvg2 = _interopRequireDefault(_toSvg);
+ var _replace = __webpack_require__("./src/replace.js");
+ var _replace2 = _interopRequireDefault(_replace);
+ function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : { default: obj };
+ }
+ module3.exports = { icons: _icons2.default, toSvg: _toSvg2.default, replace: _replace2.default };
+ },
+ "./src/replace.js": function(module3, exports2, __webpack_require__) {
+ "use strict";
+ Object.defineProperty(exports2, "__esModule", {
+ value: true
+ });
+ var _extends = Object.assign || function(target) {
+ for (var i = 1; i < arguments.length; i++) {
+ var source = arguments[i];
+ for (var key2 in source) {
+ if (Object.prototype.hasOwnProperty.call(source, key2)) {
+ target[key2] = source[key2];
+ }
+ }
+ }
+ return target;
+ };
+ var _dedupe = __webpack_require__("./node_modules/classnames/dedupe.js");
+ var _dedupe2 = _interopRequireDefault(_dedupe);
+ var _icons = __webpack_require__("./src/icons.js");
+ var _icons2 = _interopRequireDefault(_icons);
+ function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : { default: obj };
+ }
+ function replace() {
+ var attrs = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
+ if (typeof document === "undefined") {
+ throw new Error("`feather.replace()` only works in a browser environment.");
+ }
+ var elementsToReplace = document.querySelectorAll("[data-feather]");
+ Array.from(elementsToReplace).forEach(function(element2) {
+ return replaceElement(element2, attrs);
+ });
+ }
+ function replaceElement(element2) {
+ var attrs = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
+ var elementAttrs = getAttrs(element2);
+ var name = elementAttrs["data-feather"];
+ delete elementAttrs["data-feather"];
+ var svgString = _icons2.default[name].toSvg(_extends({}, attrs, elementAttrs, { class: (0, _dedupe2.default)(attrs.class, elementAttrs.class) }));
+ var svgDocument = new DOMParser().parseFromString(svgString, "image/svg+xml");
+ var svgElement = svgDocument.querySelector("svg");
+ element2.parentNode.replaceChild(svgElement, element2);
+ }
+ function getAttrs(element2) {
+ return Array.from(element2.attributes).reduce(function(attrs, attr2) {
+ attrs[attr2.name] = attr2.value;
+ return attrs;
+ }, {});
+ }
+ exports2.default = replace;
+ },
+ "./src/tags.json": function(module3) {
+ module3.exports = { "activity": ["pulse", "health", "action", "motion"], "airplay": ["stream", "cast", "mirroring"], "alert-circle": ["warning", "alert", "danger"], "alert-octagon": ["warning", "alert", "danger"], "alert-triangle": ["warning", "alert", "danger"], "align-center": ["text alignment", "center"], "align-justify": ["text alignment", "justified"], "align-left": ["text alignment", "left"], "align-right": ["text alignment", "right"], "anchor": [], "archive": ["index", "box"], "at-sign": ["mention", "at", "email", "message"], "award": ["achievement", "badge"], "aperture": ["camera", "photo"], "bar-chart": ["statistics", "diagram", "graph"], "bar-chart-2": ["statistics", "diagram", "graph"], "battery": ["power", "electricity"], "battery-charging": ["power", "electricity"], "bell": ["alarm", "notification", "sound"], "bell-off": ["alarm", "notification", "silent"], "bluetooth": ["wireless"], "book-open": ["read", "library"], "book": ["read", "dictionary", "booklet", "magazine", "library"], "bookmark": ["read", "clip", "marker", "tag"], "box": ["cube"], "briefcase": ["work", "bag", "baggage", "folder"], "calendar": ["date"], "camera": ["photo"], "cast": ["chromecast", "airplay"], "chevron-down": ["expand"], "chevron-up": ["collapse"], "circle": ["off", "zero", "record"], "clipboard": ["copy"], "clock": ["time", "watch", "alarm"], "cloud-drizzle": ["weather", "shower"], "cloud-lightning": ["weather", "bolt"], "cloud-rain": ["weather"], "cloud-snow": ["weather", "blizzard"], "cloud": ["weather"], "codepen": ["logo"], "codesandbox": ["logo"], "code": ["source", "programming"], "coffee": ["drink", "cup", "mug", "tea", "cafe", "hot", "beverage"], "columns": ["layout"], "command": ["keyboard", "cmd", "terminal", "prompt"], "compass": ["navigation", "safari", "travel", "direction"], "copy": ["clone", "duplicate"], "corner-down-left": ["arrow", "return"], "corner-down-right": ["arrow"], "corner-left-down": ["arrow"], "corner-left-up": ["arrow"], "corner-right-down": ["arrow"], "corner-right-up": ["arrow"], "corner-up-left": ["arrow"], "corner-up-right": ["arrow"], "cpu": ["processor", "technology"], "credit-card": ["purchase", "payment", "cc"], "crop": ["photo", "image"], "crosshair": ["aim", "target"], "database": ["storage", "memory"], "delete": ["remove"], "disc": ["album", "cd", "dvd", "music"], "dollar-sign": ["currency", "money", "payment"], "droplet": ["water"], "edit": ["pencil", "change"], "edit-2": ["pencil", "change"], "edit-3": ["pencil", "change"], "eye": ["view", "watch"], "eye-off": ["view", "watch", "hide", "hidden"], "external-link": ["outbound"], "facebook": ["logo", "social"], "fast-forward": ["music"], "figma": ["logo", "design", "tool"], "file-minus": ["delete", "remove", "erase"], "file-plus": ["add", "create", "new"], "file-text": ["data", "txt", "pdf"], "film": ["movie", "video"], "filter": ["funnel", "hopper"], "flag": ["report"], "folder-minus": ["directory"], "folder-plus": ["directory"], "folder": ["directory"], "framer": ["logo", "design", "tool"], "frown": ["emoji", "face", "bad", "sad", "emotion"], "gift": ["present", "box", "birthday", "party"], "git-branch": ["code", "version control"], "git-commit": ["code", "version control"], "git-merge": ["code", "version control"], "git-pull-request": ["code", "version control"], "github": ["logo", "version control"], "gitlab": ["logo", "version control"], "globe": ["world", "browser", "language", "translate"], "hard-drive": ["computer", "server", "memory", "data"], "hash": ["hashtag", "number", "pound"], "headphones": ["music", "audio", "sound"], "heart": ["like", "love", "emotion"], "help-circle": ["question mark"], "hexagon": ["shape", "node.js", "logo"], "home": ["house", "living"], "image": ["picture"], "inbox": ["email"], "instagram": ["logo", "camera"], "key": ["password", "login", "authentication", "secure"], "layers": ["stack"], "layout": ["window", "webpage"], "life-bouy": ["help", "life ring", "support"], "link": ["chain", "url"], "link-2": ["chain", "url"], "linkedin": ["logo", "social media"], "list": ["options"], "lock": ["security", "password", "secure"], "log-in": ["sign in", "arrow", "enter"], "log-out": ["sign out", "arrow", "exit"], "mail": ["email", "message"], "map-pin": ["location", "navigation", "travel", "marker"], "map": ["location", "navigation", "travel"], "maximize": ["fullscreen"], "maximize-2": ["fullscreen", "arrows", "expand"], "meh": ["emoji", "face", "neutral", "emotion"], "menu": ["bars", "navigation", "hamburger"], "message-circle": ["comment", "chat"], "message-square": ["comment", "chat"], "mic-off": ["record", "sound", "mute"], "mic": ["record", "sound", "listen"], "minimize": ["exit fullscreen", "close"], "minimize-2": ["exit fullscreen", "arrows", "close"], "minus": ["subtract"], "monitor": ["tv", "screen", "display"], "moon": ["dark", "night"], "more-horizontal": ["ellipsis"], "more-vertical": ["ellipsis"], "mouse-pointer": ["arrow", "cursor"], "move": ["arrows"], "music": ["note"], "navigation": ["location", "travel"], "navigation-2": ["location", "travel"], "octagon": ["stop"], "package": ["box", "container"], "paperclip": ["attachment"], "pause": ["music", "stop"], "pause-circle": ["music", "audio", "stop"], "pen-tool": ["vector", "drawing"], "percent": ["discount"], "phone-call": ["ring"], "phone-forwarded": ["call"], "phone-incoming": ["call"], "phone-missed": ["call"], "phone-off": ["call", "mute"], "phone-outgoing": ["call"], "phone": ["call"], "play": ["music", "start"], "pie-chart": ["statistics", "diagram"], "play-circle": ["music", "start"], "plus": ["add", "new"], "plus-circle": ["add", "new"], "plus-square": ["add", "new"], "pocket": ["logo", "save"], "power": ["on", "off"], "printer": ["fax", "office", "device"], "radio": ["signal"], "refresh-cw": ["synchronise", "arrows"], "refresh-ccw": ["arrows"], "repeat": ["loop", "arrows"], "rewind": ["music"], "rotate-ccw": ["arrow"], "rotate-cw": ["arrow"], "rss": ["feed", "subscribe"], "save": ["floppy disk"], "scissors": ["cut"], "search": ["find", "magnifier", "magnifying glass"], "send": ["message", "mail", "email", "paper airplane", "paper aeroplane"], "settings": ["cog", "edit", "gear", "preferences"], "share-2": ["network", "connections"], "shield": ["security", "secure"], "shield-off": ["security", "insecure"], "shopping-bag": ["ecommerce", "cart", "purchase", "store"], "shopping-cart": ["ecommerce", "cart", "purchase", "store"], "shuffle": ["music"], "skip-back": ["music"], "skip-forward": ["music"], "slack": ["logo"], "slash": ["ban", "no"], "sliders": ["settings", "controls"], "smartphone": ["cellphone", "device"], "smile": ["emoji", "face", "happy", "good", "emotion"], "speaker": ["audio", "music"], "star": ["bookmark", "favorite", "like"], "stop-circle": ["media", "music"], "sun": ["brightness", "weather", "light"], "sunrise": ["weather", "time", "morning", "day"], "sunset": ["weather", "time", "evening", "night"], "tablet": ["device"], "tag": ["label"], "target": ["logo", "bullseye"], "terminal": ["code", "command line", "prompt"], "thermometer": ["temperature", "celsius", "fahrenheit", "weather"], "thumbs-down": ["dislike", "bad", "emotion"], "thumbs-up": ["like", "good", "emotion"], "toggle-left": ["on", "off", "switch"], "toggle-right": ["on", "off", "switch"], "tool": ["settings", "spanner"], "trash": ["garbage", "delete", "remove", "bin"], "trash-2": ["garbage", "delete", "remove", "bin"], "triangle": ["delta"], "truck": ["delivery", "van", "shipping", "transport", "lorry"], "tv": ["television", "stream"], "twitch": ["logo"], "twitter": ["logo", "social"], "type": ["text"], "umbrella": ["rain", "weather"], "unlock": ["security"], "user-check": ["followed", "subscribed"], "user-minus": ["delete", "remove", "unfollow", "unsubscribe"], "user-plus": ["new", "add", "create", "follow", "subscribe"], "user-x": ["delete", "remove", "unfollow", "unsubscribe", "unavailable"], "user": ["person", "account"], "users": ["group"], "video-off": ["camera", "movie", "film"], "video": ["camera", "movie", "film"], "voicemail": ["phone"], "volume": ["music", "sound", "mute"], "volume-1": ["music", "sound"], "volume-2": ["music", "sound"], "volume-x": ["music", "sound", "mute"], "watch": ["clock", "time"], "wifi-off": ["disabled"], "wifi": ["connection", "signal", "wireless"], "wind": ["weather", "air"], "x-circle": ["cancel", "close", "delete", "remove", "times", "clear"], "x-octagon": ["delete", "stop", "alert", "warning", "times", "clear"], "x-square": ["cancel", "close", "delete", "remove", "times", "clear"], "x": ["cancel", "close", "delete", "remove", "times", "clear"], "youtube": ["logo", "video", "play"], "zap-off": ["flash", "camera", "lightning"], "zap": ["flash", "camera", "lightning"], "zoom-in": ["magnifying glass"], "zoom-out": ["magnifying glass"] };
+ },
+ "./src/to-svg.js": function(module3, exports2, __webpack_require__) {
+ "use strict";
+ Object.defineProperty(exports2, "__esModule", {
+ value: true
+ });
+ var _icons = __webpack_require__("./src/icons.js");
+ var _icons2 = _interopRequireDefault(_icons);
+ function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : { default: obj };
+ }
+ function toSvg(name) {
+ var attrs = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
+ console.warn("feather.toSvg() is deprecated. Please use feather.icons[name].toSvg() instead.");
+ if (!name) {
+ throw new Error("The required `key` (icon name) parameter is missing.");
+ }
+ if (!_icons2.default[name]) {
+ throw new Error("No icon matching '" + name + "'. See the complete list of icons at https://feathericons.com");
+ }
+ return _icons2.default[name].toSvg(attrs);
+ }
+ exports2.default = toSvg;
+ },
+ 0: function(module3, exports2, __webpack_require__) {
+ __webpack_require__("./node_modules/core-js/es/array/from.js");
+ module3.exports = __webpack_require__("./src/index.js");
+ }
+ });
+ });
+ }
+});
+
+// src/main.ts
+__export(exports, {
+ default: () => ObsidianGit
+});
+var import_obsidian15 = __toModule(require("obsidian"));
+var path2 = __toModule(require("path"));
+
+// src/promiseQueue.ts
+var PromiseQueue = class {
+ constructor() {
+ this.tasks = [];
+ }
+ addTask(task) {
+ this.tasks.push(task);
+ if (this.tasks.length === 1) {
+ this.handleTask();
+ }
+ }
+ handleTask() {
+ return __async(this, null, function* () {
+ if (this.tasks.length > 0) {
+ this.tasks[0]().finally(() => {
+ this.tasks.shift();
+ this.handleTask();
+ });
+ }
+ });
+ }
+};
+
+// src/settings.ts
+var import_obsidian = __toModule(require("obsidian"));
+var ObsidianGitSettingsTab = class extends import_obsidian.PluginSettingTab {
+ display() {
+ let { containerEl } = this;
+ const plugin = this.plugin;
+ containerEl.empty();
+ containerEl.createEl("h2", { text: "Git Backup settings" });
+ containerEl.createEl("br");
+ containerEl.createEl("h3", { text: "Automatic" });
+ const commitOrBackup = plugin.settings.differentIntervalCommitAndPush ? "commit" : "backup";
+ new import_obsidian.Setting(containerEl).setName("Split automatic commit and push").setDesc("Enable to use separate timer for commit and push").addToggle((toggle) => toggle.setValue(plugin.settings.differentIntervalCommitAndPush).onChange((value) => {
+ plugin.settings.differentIntervalCommitAndPush = value;
+ plugin.saveSettings();
+ plugin.clearAutoBackup();
+ plugin.clearAutoPush();
+ if (plugin.settings.autoSaveInterval > 0) {
+ plugin.startAutoBackup(plugin.settings.autoSaveInterval);
+ }
+ if (value && plugin.settings.autoPushInterval > 0) {
+ plugin.startAutoPush(plugin.settings.autoPushInterval);
+ }
+ this.display();
+ }));
+ new import_obsidian.Setting(containerEl).setName(`Vault ${commitOrBackup} interval (minutes)`).setDesc(`${plugin.settings.differentIntervalCommitAndPush ? "Commit" : "Commit and push"} changes every X minutes. Set to 0 (default) to disable. (See below setting for further configuration!)`).addText((text2) => text2.setValue(String(plugin.settings.autoSaveInterval)).onChange((value) => {
+ if (!isNaN(Number(value))) {
+ plugin.settings.autoSaveInterval = Number(value);
+ plugin.saveSettings();
+ if (plugin.settings.autoSaveInterval > 0) {
+ plugin.clearAutoBackup();
+ plugin.startAutoBackup(plugin.settings.autoSaveInterval);
+ new import_obsidian.Notice(`Automatic ${commitOrBackup} enabled! Every ${plugin.settings.autoSaveInterval} minutes.`);
+ } else if (plugin.settings.autoSaveInterval <= 0) {
+ plugin.clearAutoBackup() && new import_obsidian.Notice(`Automatic ${commitOrBackup} disabled!`);
+ }
+ } else {
+ new import_obsidian.Notice("Please specify a valid number.");
+ }
+ }));
+ new import_obsidian.Setting(containerEl).setName(`If turned on, do auto ${commitOrBackup} every X minutes after last change. Prevents auto ${commitOrBackup} while editing a file. If turned off, do auto ${commitOrBackup} every X minutes. It's independent from last change.`).addToggle((toggle) => toggle.setValue(plugin.settings.autoBackupAfterFileChange).onChange((value) => {
+ plugin.settings.autoBackupAfterFileChange = value;
+ plugin.saveSettings();
+ plugin.clearAutoBackup();
+ if (plugin.settings.autoSaveInterval > 0) {
+ plugin.startAutoBackup(plugin.settings.autoSaveInterval);
+ }
+ }));
+ if (plugin.settings.differentIntervalCommitAndPush) {
+ new import_obsidian.Setting(containerEl).setName(`Vault push interval (minutes)`).setDesc("Push changes every X minutes. Set to 0 (default) to disable.").addText((text2) => text2.setValue(String(plugin.settings.autoPushInterval)).onChange((value) => {
+ if (!isNaN(Number(value))) {
+ plugin.settings.autoPushInterval = Number(value);
+ plugin.saveSettings();
+ if (plugin.settings.autoPushInterval > 0) {
+ plugin.clearAutoPush();
+ plugin.startAutoPush(plugin.settings.autoPushInterval);
+ new import_obsidian.Notice(`Automatic push enabled! Every ${plugin.settings.autoPushInterval} minutes.`);
+ } else if (plugin.settings.autoPushInterval <= 0) {
+ plugin.clearAutoPush() && new import_obsidian.Notice("Automatic push disabled!");
+ }
+ } else {
+ new import_obsidian.Notice("Please specify a valid number.");
+ }
+ }));
+ }
+ new import_obsidian.Setting(containerEl).setName("Auto pull interval (minutes)").setDesc("Pull changes every X minutes. Set to 0 (default) to disable.").addText((text2) => text2.setValue(String(plugin.settings.autoPullInterval)).onChange((value) => {
+ if (!isNaN(Number(value))) {
+ plugin.settings.autoPullInterval = Number(value);
+ plugin.saveSettings();
+ if (plugin.settings.autoPullInterval > 0) {
+ plugin.clearAutoPull();
+ plugin.startAutoPull(plugin.settings.autoPullInterval);
+ new import_obsidian.Notice(`Automatic pull enabled! Every ${plugin.settings.autoPullInterval} minutes.`);
+ } else if (plugin.settings.autoPullInterval <= 0) {
+ plugin.clearAutoPull() && new import_obsidian.Notice("Automatic pull disabled!");
+ }
+ } else {
+ new import_obsidian.Notice("Please specify a valid number.");
+ }
+ }));
+ new import_obsidian.Setting(containerEl).setName("Commit message on manual backup/commit").setDesc("Available placeholders: {{date}} (see below), {{hostname}} (see below) and {{numFiles}} (number of changed files in the commit)").addText((text2) => text2.setPlaceholder("vault backup: {{date}}").setValue(plugin.settings.commitMessage ? plugin.settings.commitMessage : "").onChange((value) => {
+ plugin.settings.commitMessage = value;
+ plugin.saveSettings();
+ }));
+ new import_obsidian.Setting(containerEl).setName("Specify custom commit message on auto backup").setDesc("You will get a pop up to specify your message").addToggle((toggle) => toggle.setValue(plugin.settings.customMessageOnAutoBackup).onChange((value) => {
+ plugin.settings.customMessageOnAutoBackup = value;
+ plugin.saveSettings();
+ }));
+ new import_obsidian.Setting(containerEl).setName("Commit message on auto backup/commit").setDesc("Available placeholders: {{date}} (see below), {{hostname}} (see below) and {{numFiles}} (number of changed files in the commit)").addText((text2) => text2.setPlaceholder("vault backup: {{date}}").setValue(plugin.settings.autoCommitMessage).onChange((value) => {
+ plugin.settings.autoCommitMessage = value;
+ plugin.saveSettings();
+ }));
+ containerEl.createEl("br");
+ containerEl.createEl("h3", { text: "Commit message" });
+ new import_obsidian.Setting(containerEl).setName("{{date}} placeholder format").setDesc('Specify custom date format. E.g. "YYYY-MM-DD HH:mm:ss"').addText((text2) => text2.setPlaceholder(plugin.settings.commitDateFormat).setValue(plugin.settings.commitDateFormat).onChange((value) => __async(this, null, function* () {
+ plugin.settings.commitDateFormat = value;
+ yield plugin.saveSettings();
+ })));
+ new import_obsidian.Setting(containerEl).setName("{{hostname}} placeholder replacement").setDesc("Specify custom hostname for every device.").addText((text2) => text2.setValue(localStorage.getItem(plugin.manifest.id + ":hostname")).onChange((value) => __async(this, null, function* () {
+ localStorage.setItem(plugin.manifest.id + ":hostname", value);
+ })));
+ new import_obsidian.Setting(containerEl).setName("Preview commit message").addButton((button) => button.setButtonText("Preview").onClick(() => __async(this, null, function* () {
+ let commitMessagePreview = yield plugin.gitManager.formatCommitMessage(plugin.settings.commitMessage);
+ new import_obsidian.Notice(`${commitMessagePreview}`);
+ })));
+ new import_obsidian.Setting(containerEl).setName("List filenames affected by commit in the commit body").addToggle((toggle) => toggle.setValue(plugin.settings.listChangedFilesInMessageBody).onChange((value) => {
+ plugin.settings.listChangedFilesInMessageBody = value;
+ plugin.saveSettings();
+ }));
+ containerEl.createEl("br");
+ containerEl.createEl("h3", { text: "Backup" });
+ new import_obsidian.Setting(containerEl).setName("Sync Method").setDesc("Selects the method used for handling new changes found in your remote git repository.").addDropdown((dropdown) => {
+ const options = {
+ "merge": "Merge",
+ "rebase": "Rebase",
+ "reset": "Other sync service (Only updates the HEAD without touching the working directory)"
+ };
+ dropdown.addOptions(options);
+ dropdown.setValue(plugin.settings.syncMethod);
+ dropdown.onChange((option) => __async(this, null, function* () {
+ plugin.settings.syncMethod = option;
+ plugin.saveSettings();
+ }));
+ });
+ new import_obsidian.Setting(containerEl).setName("Pull updates on startup").setDesc("Automatically pull updates when Obsidian starts").addToggle((toggle) => toggle.setValue(plugin.settings.autoPullOnBoot).onChange((value) => {
+ plugin.settings.autoPullOnBoot = value;
+ plugin.saveSettings();
+ }));
+ new import_obsidian.Setting(containerEl).setName("Push on backup").setDesc("Disable to only commit changes").addToggle((toggle) => toggle.setValue(!plugin.settings.disablePush).onChange((value) => {
+ plugin.settings.disablePush = !value;
+ plugin.saveSettings();
+ }));
+ new import_obsidian.Setting(containerEl).setName("Pull changes before push").setDesc("Commit -> pull -> push (Only if pushing is enabled)").addToggle((toggle) => toggle.setValue(plugin.settings.pullBeforePush).onChange((value) => {
+ plugin.settings.pullBeforePush = value;
+ plugin.saveSettings();
+ }));
+ containerEl.createEl("br");
+ containerEl.createEl("h3", { text: "Miscellaneous" });
+ new import_obsidian.Setting(containerEl).setName("Current branch").setDesc("Switch to a different branch").addDropdown((dropdown) => __async(this, null, function* () {
+ const branchInfo = yield plugin.gitManager.branchInfo();
+ for (const branch of branchInfo.branches) {
+ dropdown.addOption(branch, branch);
+ }
+ dropdown.setValue(branchInfo.current);
+ dropdown.onChange((option) => __async(this, null, function* () {
+ yield plugin.gitManager.checkout(option);
+ new import_obsidian.Notice(`Checked out to ${option}`);
+ }));
+ }));
+ new import_obsidian.Setting(containerEl).setName("Automatically refresh Source Control View on file changes").setDesc("On slower machines this may cause lags. If so, just disable this option").addToggle((toggle) => toggle.setValue(plugin.settings.refreshSourceControl).onChange((value) => {
+ plugin.settings.refreshSourceControl = value;
+ plugin.saveSettings();
+ }));
+ new import_obsidian.Setting(containerEl).setName("Disable notifications").setDesc("Disable notifications for git operations to minimize distraction (refer to status bar for updates). Errors are still shown as notifications even if you enable this setting").addToggle((toggle) => toggle.setValue(plugin.settings.disablePopups).onChange((value) => {
+ plugin.settings.disablePopups = value;
+ plugin.saveSettings();
+ }));
+ new import_obsidian.Setting(containerEl).setName("Show status bar").setDesc("Obsidian must be restarted for the changes to take affect").addToggle((toggle) => toggle.setValue(plugin.settings.showStatusBar).onChange((value) => {
+ plugin.settings.showStatusBar = value;
+ plugin.saveSettings();
+ }));
+ new import_obsidian.Setting(containerEl).setName("Show changes files count in status bar").addToggle((toggle) => toggle.setValue(plugin.settings.changedFilesInStatusBar).onChange((value) => {
+ plugin.settings.changedFilesInStatusBar = value;
+ plugin.saveSettings();
+ }));
+ containerEl.createEl("br");
+ containerEl.createEl("h3", { text: "Advanced" });
+ new import_obsidian.Setting(containerEl).setName("Update submodules").setDesc('"Create backup" and "pull" takes care of submodules. Missing features: Conflicted files, count of pulled/pushed/committed files. Tracking branch needs to be set for each submodule').addToggle((toggle) => toggle.setValue(plugin.settings.updateSubmodules).onChange((value) => {
+ plugin.settings.updateSubmodules = value;
+ plugin.saveSettings();
+ }));
+ new import_obsidian.Setting(containerEl).setName("Custom Git binary path").addText((cb) => {
+ cb.setValue(plugin.settings.gitPath);
+ cb.setPlaceholder("git");
+ cb.onChange((value) => {
+ plugin.settings.gitPath = value;
+ plugin.saveSettings();
+ plugin.gitManager.updateGitPath(value || "git");
+ });
+ });
+ new import_obsidian.Setting(containerEl).setName("Custom base path (Git repository path)").setDesc(`
+ Sets the relative path to the vault from which the Git binary should be executed.
+ Mostly used to set the path to the Git repository, which is only required if the Git repository is below the vault root directory. Use "\\" instead of "/" on Windows.
+ `).addText((cb) => {
+ cb.setValue(plugin.settings.basePath);
+ cb.setPlaceholder("directory/directory-with-git-repo");
+ cb.onChange((value) => {
+ plugin.settings.basePath = value;
+ plugin.saveSettings();
+ plugin.gitManager.updateBasePath(value || "");
+ });
+ });
+ const info = containerEl.createDiv();
+ info.setAttr("align", "center");
+ info.setText("Debugging and logging:\nYou can always see the logs of this and every other plugin by opening the console with");
+ const keys = containerEl.createDiv();
+ keys.setAttr("align", "center");
+ keys.addClass("obsidian-git-shortcuts");
+ if (import_obsidian.Platform.isMacOS === true) {
+ keys.createEl("kbd", { text: "CMD (\u2318) + OPTION (\u2325) + I" });
+ } else {
+ keys.createEl("kbd", { text: "CTRL + SHIFT + I" });
+ }
+ }
+};
+
+// src/statusBar.ts
+var import_obsidian2 = __toModule(require("obsidian"));
+
+// src/types.ts
+var PluginState;
+(function(PluginState2) {
+ PluginState2[PluginState2["idle"] = 0] = "idle";
+ PluginState2[PluginState2["status"] = 1] = "status";
+ PluginState2[PluginState2["pull"] = 2] = "pull";
+ PluginState2[PluginState2["add"] = 3] = "add";
+ PluginState2[PluginState2["commit"] = 4] = "commit";
+ PluginState2[PluginState2["push"] = 5] = "push";
+ PluginState2[PluginState2["conflicted"] = 6] = "conflicted";
+})(PluginState || (PluginState = {}));
+
+// src/statusBar.ts
+var StatusBar = class {
+ constructor(statusBarEl, plugin) {
+ this.statusBarEl = statusBarEl;
+ this.plugin = plugin;
+ this.messages = [];
+ this.base = "obsidian-git-statusbar-";
+ this.statusBarEl.setAttribute("aria-label-position", "top");
+ }
+ displayMessage(message, timeout) {
+ this.messages.push({
+ message: `Git: ${message.slice(0, 100)}`,
+ timeout
+ });
+ this.display();
+ }
+ display() {
+ if (this.messages.length > 0 && !this.currentMessage) {
+ this.currentMessage = this.messages.shift();
+ this.statusBarEl.addClass(this.base + "message");
+ this.statusBarEl.ariaLabel = "";
+ this.statusBarEl.setText(this.currentMessage.message);
+ this.lastMessageTimestamp = Date.now();
+ } else if (this.currentMessage) {
+ const messageAge = Date.now() - this.lastMessageTimestamp;
+ if (messageAge >= this.currentMessage.timeout) {
+ this.currentMessage = null;
+ this.lastMessageTimestamp = null;
+ }
+ } else {
+ this.displayState();
+ }
+ }
+ displayState() {
+ if (this.statusBarEl.getText().length > 3 || !this.statusBarEl.hasChildNodes()) {
+ this.statusBarEl.empty();
+ this.iconEl = this.statusBarEl.createDiv();
+ this.textEl = this.statusBarEl.createDiv();
+ this.textEl.style.float = "right";
+ this.textEl.style.marginLeft = "5px";
+ this.iconEl.style.float = "left";
+ }
+ switch (this.plugin.state) {
+ case PluginState.idle:
+ this.displayFromNow(this.plugin.lastUpdate);
+ break;
+ case PluginState.status:
+ this.statusBarEl.ariaLabel = "Checking repository status...";
+ (0, import_obsidian2.setIcon)(this.iconEl, "refresh-cw");
+ this.statusBarEl.addClass(this.base + "status");
+ break;
+ case PluginState.add:
+ this.statusBarEl.ariaLabel = "Adding files...";
+ (0, import_obsidian2.setIcon)(this.iconEl, "refresh-w");
+ this.statusBarEl.addClass(this.base + "add");
+ break;
+ case PluginState.commit:
+ this.statusBarEl.ariaLabel = "Committing changes...";
+ (0, import_obsidian2.setIcon)(this.iconEl, "git-commit");
+ this.statusBarEl.addClass(this.base + "commit");
+ break;
+ case PluginState.push:
+ this.statusBarEl.ariaLabel = "Pushing changes...";
+ (0, import_obsidian2.setIcon)(this.iconEl, "upload");
+ this.statusBarEl.addClass(this.base + "push");
+ break;
+ case PluginState.pull:
+ this.statusBarEl.ariaLabel = "Pulling changes...";
+ (0, import_obsidian2.setIcon)(this.iconEl, "download");
+ this.statusBarEl.addClass(this.base + "pull");
+ break;
+ case PluginState.conflicted:
+ this.statusBarEl.ariaLabel = "You have conflict files...";
+ (0, import_obsidian2.setIcon)(this.iconEl, "alert-circle");
+ this.statusBarEl.addClass(this.base + "conflict");
+ break;
+ default:
+ this.statusBarEl.ariaLabel = "Failed on initialization!";
+ (0, import_obsidian2.setIcon)(this.iconEl, "alert-triangle");
+ this.statusBarEl.addClass(this.base + "failed-init");
+ break;
+ }
+ }
+ displayFromNow(timestamp) {
+ if (timestamp) {
+ const moment = window.moment;
+ const fromNow = moment(timestamp).fromNow();
+ this.statusBarEl.ariaLabel = `${this.plugin.offlineMode ? "Offline: " : ""}Last Git update: ${fromNow}`;
+ } else {
+ this.statusBarEl.ariaLabel = this.plugin.offlineMode ? "Git is offline" : "Git is ready";
+ }
+ if (this.plugin.offlineMode) {
+ (0, import_obsidian2.setIcon)(this.iconEl, "globe");
+ } else {
+ (0, import_obsidian2.setIcon)(this.iconEl, "check");
+ }
+ if (this.plugin.settings.changedFilesInStatusBar && this.plugin.cachedStatus) {
+ this.textEl.setText(this.plugin.cachedStatus.changed.length.toString());
+ }
+ this.statusBarEl.addClass(this.base + "idle");
+ }
+};
+
+// src/ui/modals/changedFilesModal.ts
+var import_obsidian3 = __toModule(require("obsidian"));
+var ChangedFilesModal = class extends import_obsidian3.FuzzySuggestModal {
+ constructor(plugin, changedFiles) {
+ super(plugin.app);
+ this.plugin = plugin;
+ this.changedFiles = changedFiles;
+ this.setPlaceholder("Not supported files will be opened by default app!");
+ }
+ getItems() {
+ return this.changedFiles;
+ }
+ getItemText(item) {
+ if (item.index == "?" && item.working_dir == "U") {
+ return `Untracked | ${item.vault_path}`;
+ }
+ let working_dir = "";
+ let index = "";
+ if (item.working_dir != " ")
+ working_dir = `Working dir: ${item.working_dir} `;
+ if (item.index != " ")
+ index = `Index: ${item.index}`;
+ return `${working_dir}${index} | ${item.vault_path}`;
+ }
+ onChooseItem(item, _) {
+ if (this.plugin.app.metadataCache.getFirstLinkpathDest(item.vault_path, "") == null) {
+ this.app.openWithDefaultApp(item.vault_path);
+ } else {
+ this.plugin.app.workspace.openLinkText(item.vault_path, "/");
+ }
+ }
+};
+
+// src/ui/modals/customMessageModal.ts
+var import_obsidian4 = __toModule(require("obsidian"));
+var CustomMessageModal = class extends import_obsidian4.SuggestModal {
+ constructor(plugin, fromAutoBackup) {
+ super(plugin.app);
+ this.fromAutoBackup = fromAutoBackup;
+ this.resolve = null;
+ this.plugin = plugin;
+ this.setPlaceholder("Type your message and select optional the version with the added date.");
+ }
+ open() {
+ super.open();
+ return new Promise((resolve) => {
+ this.resolve = resolve;
+ });
+ }
+ onClose() {
+ if (this.resolve)
+ this.resolve(void 0);
+ }
+ selectSuggestion(value, evt) {
+ if (this.resolve)
+ this.resolve(value);
+ super.selectSuggestion(value, evt);
+ }
+ getSuggestions(query) {
+ const date = window.moment().format(this.plugin.settings.commitDateFormat);
+ if (query == "")
+ query = "...";
+ return [query, `${date}: ${query}`, `${query}: ${date}`];
+ }
+ renderSuggestion(value, el) {
+ el.innerText = value;
+ }
+ onChooseSuggestion(item, _) {
+ }
+};
+
+// src/constants.ts
+var DEFAULT_SETTINGS = {
+ commitMessage: "vault backup: {{date}}",
+ autoCommitMessage: void 0,
+ commitDateFormat: "YYYY-MM-DD HH:mm:ss",
+ autoSaveInterval: 0,
+ autoPushInterval: 0,
+ autoPullInterval: 0,
+ autoPullOnBoot: false,
+ disablePush: false,
+ pullBeforePush: true,
+ disablePopups: false,
+ listChangedFilesInMessageBody: false,
+ showStatusBar: true,
+ updateSubmodules: false,
+ syncMethod: "merge",
+ gitPath: "",
+ customMessageOnAutoBackup: false,
+ autoBackupAfterFileChange: false,
+ treeStructure: false,
+ refreshSourceControl: true,
+ basePath: "",
+ differentIntervalCommitAndPush: false,
+ changedFilesInStatusBar: false
+};
+var GIT_VIEW_CONFIG = {
+ type: "git-view",
+ name: "Source Control",
+ icon: "git-pull-request"
+};
+var DIFF_VIEW_CONFIG = {
+ type: "diff-view",
+ name: "Diff View",
+ icon: "git-pull-request"
+};
+
+// src/openInGitHub.ts
+var import_electron = __toModule(require("electron"));
+var import_obsidian5 = __toModule(require("obsidian"));
+function openLineInGitHub(editor, file, manager) {
+ return __async(this, null, function* () {
+ const { isGitHub, branch, repo, user } = yield getData(manager);
+ if (isGitHub) {
+ const from = editor.getCursor("from").line + 1;
+ const to = editor.getCursor("to").line + 1;
+ if (from === to) {
+ yield import_electron.shell.openExternal(`https://github.com/${user}/${repo}/blob/${branch}/${file.path}?plain=1#L${from}`);
+ } else {
+ yield import_electron.shell.openExternal(`https://github.com/${user}/${repo}/blob/${branch}/${file.path}?plain=1#L${from}-L${to}`);
+ }
+ } else {
+ new import_obsidian5.Notice("It seems like you are not using GitHub");
+ }
+ });
+}
+function openHistoryInGitHub(file, manager) {
+ return __async(this, null, function* () {
+ const { isGitHub, branch, repo, user } = yield getData(manager);
+ if (isGitHub) {
+ yield import_electron.shell.openExternal(`https://github.com/${user}/${repo}/commits/${branch}/${file.path}`);
+ } else {
+ new import_obsidian5.Notice("It seems like you are not using GitHub");
+ }
+ });
+}
+function getData(manager) {
+ return __async(this, null, function* () {
+ const branchInfo = yield manager.branchInfo();
+ const remoteBranch = branchInfo.tracking;
+ const branch = branchInfo.current;
+ const remote = remoteBranch.substring(0, remoteBranch.indexOf("/"));
+ const remoteUrl = yield manager.getConfig(`remote.${remote}.url`);
+ const [isGitHub, httpsUser, httpsRepo, sshUser, sshRepo] = remoteUrl.match(/(?:^https:\/\/github\.com\/(.*)\/(.*)\.git$)|(?:^git@github\.com:(.*)\/(.*)\.git$)/);
+ return {
+ isGitHub: !!isGitHub,
+ repo: httpsRepo || sshRepo,
+ user: httpsUser || sshUser,
+ branch
+ };
+ });
+}
+
+// src/simpleGit.ts
+var import_child_process2 = __toModule(require("child_process"));
+var import_obsidian6 = __toModule(require("obsidian"));
+var path = __toModule(require("path"));
+var import_path = __toModule(require("path"));
+
+// node_modules/simple-git/dist/esm/index.js
+var import_file_exists = __toModule(require_dist());
+var import_debug = __toModule(require_src());
+var import_child_process = __toModule(require("child_process"));
+var import_promise_deferred = __toModule(require_dist2());
+var import_promise_deferred2 = __toModule(require_dist2());
+var __defProp2 = Object.defineProperty;
+var __defProps2 = Object.defineProperties;
+var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
+var __getOwnPropDescs2 = Object.getOwnPropertyDescriptors;
+var __getOwnPropNames2 = Object.getOwnPropertyNames;
+var __getOwnPropSymbols2 = Object.getOwnPropertySymbols;
+var __hasOwnProp2 = Object.prototype.hasOwnProperty;
+var __propIsEnum2 = Object.prototype.propertyIsEnumerable;
+var __defNormalProp2 = (obj, key2, value) => key2 in obj ? __defProp2(obj, key2, { enumerable: true, configurable: true, writable: true, value }) : obj[key2] = value;
+var __spreadValues2 = (a, b) => {
+ for (var prop in b || (b = {}))
+ if (__hasOwnProp2.call(b, prop))
+ __defNormalProp2(a, prop, b[prop]);
+ if (__getOwnPropSymbols2)
+ for (var prop of __getOwnPropSymbols2(b)) {
+ if (__propIsEnum2.call(b, prop))
+ __defNormalProp2(a, prop, b[prop]);
+ }
+ return a;
+};
+var __spreadProps2 = (a, b) => __defProps2(a, __getOwnPropDescs2(b));
+var __markAsModule2 = (target) => __defProp2(target, "__esModule", { value: true });
+var __esm = (fn, res) => function __init() {
+ return fn && (res = (0, fn[__getOwnPropNames2(fn)[0]])(fn = 0)), res;
+};
+var __commonJS2 = (cb, mod) => function __require() {
+ return mod || (0, cb[__getOwnPropNames2(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
+};
+var __export2 = (target, all) => {
+ for (var name in all)
+ __defProp2(target, name, { get: all[name], enumerable: true });
+};
+var __reExport2 = (target, module2, copyDefault, desc) => {
+ if (module2 && typeof module2 === "object" || typeof module2 === "function") {
+ for (let key2 of __getOwnPropNames2(module2))
+ if (!__hasOwnProp2.call(target, key2) && (copyDefault || key2 !== "default"))
+ __defProp2(target, key2, { get: () => module2[key2], enumerable: !(desc = __getOwnPropDesc2(module2, key2)) || desc.enumerable });
+ }
+ return target;
+};
+var __toCommonJS = /* @__PURE__ */ ((cache) => {
+ return (module2, temp) => {
+ return cache && cache.get(module2) || (temp = __reExport2(__markAsModule2({}), module2, 1), cache && cache.set(module2, temp), temp);
+ };
+})(typeof WeakMap !== "undefined" ? /* @__PURE__ */ new WeakMap() : 0);
+var __async2 = (__this, __arguments, generator) => {
+ return new Promise((resolve, reject) => {
+ var fulfilled = (value) => {
+ try {
+ step(generator.next(value));
+ } catch (e) {
+ reject(e);
+ }
+ };
+ var rejected = (value) => {
+ try {
+ step(generator.throw(value));
+ } catch (e) {
+ reject(e);
+ }
+ };
+ var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
+ step((generator = generator.apply(__this, __arguments)).next());
+ });
+};
+var GitError;
+var init_git_error = __esm({
+ "src/lib/errors/git-error.ts"() {
+ GitError = class extends Error {
+ constructor(task, message) {
+ super(message);
+ this.task = task;
+ Object.setPrototypeOf(this, new.target.prototype);
+ }
+ };
+ }
+});
+var GitResponseError;
+var init_git_response_error = __esm({
+ "src/lib/errors/git-response-error.ts"() {
+ init_git_error();
+ GitResponseError = class extends GitError {
+ constructor(git, message) {
+ super(void 0, message || String(git));
+ this.git = git;
+ }
+ };
+ }
+});
+var TaskConfigurationError;
+var init_task_configuration_error = __esm({
+ "src/lib/errors/task-configuration-error.ts"() {
+ init_git_error();
+ TaskConfigurationError = class extends GitError {
+ constructor(message) {
+ super(void 0, message);
+ }
+ };
+ }
+});
+function asFunction(source) {
+ return typeof source === "function" ? source : NOOP;
+}
+function isUserFunction(source) {
+ return typeof source === "function" && source !== NOOP;
+}
+function splitOn(input, char) {
+ const index = input.indexOf(char);
+ if (index <= 0) {
+ return [input, ""];
+ }
+ return [
+ input.substr(0, index),
+ input.substr(index + 1)
+ ];
+}
+function first(input, offset = 0) {
+ return isArrayLike(input) && input.length > offset ? input[offset] : void 0;
+}
+function last(input, offset = 0) {
+ if (isArrayLike(input) && input.length > offset) {
+ return input[input.length - 1 - offset];
+ }
+}
+function isArrayLike(input) {
+ return !!(input && typeof input.length === "number");
+}
+function toLinesWithContent(input = "", trimmed2 = true, separator = "\n") {
+ return input.split(separator).reduce((output, line) => {
+ const lineContent = trimmed2 ? line.trim() : line;
+ if (lineContent) {
+ output.push(lineContent);
+ }
+ return output;
+ }, []);
+}
+function forEachLineWithContent(input, callback) {
+ return toLinesWithContent(input, true).map((line) => callback(line));
+}
+function folderExists(path3) {
+ return (0, import_file_exists.exists)(path3, import_file_exists.FOLDER);
+}
+function append(target, item) {
+ if (Array.isArray(target)) {
+ if (!target.includes(item)) {
+ target.push(item);
+ }
+ } else {
+ target.add(item);
+ }
+ return item;
+}
+function including(target, item) {
+ if (Array.isArray(target) && !target.includes(item)) {
+ target.push(item);
+ }
+ return target;
+}
+function remove(target, item) {
+ if (Array.isArray(target)) {
+ const index = target.indexOf(item);
+ if (index >= 0) {
+ target.splice(index, 1);
+ }
+ } else {
+ target.delete(item);
+ }
+ return item;
+}
+function asArray(source) {
+ return Array.isArray(source) ? source : [source];
+}
+function asStringArray(source) {
+ return asArray(source).map(String);
+}
+function asNumber(source, onNaN = 0) {
+ if (source == null) {
+ return onNaN;
+ }
+ const num = parseInt(source, 10);
+ return isNaN(num) ? onNaN : num;
+}
+function prefixedArray(input, prefix) {
+ const output = [];
+ for (let i = 0, max = input.length; i < max; i++) {
+ output.push(prefix, input[i]);
+ }
+ return output;
+}
+function bufferToString(input) {
+ return (Array.isArray(input) ? Buffer.concat(input) : input).toString("utf-8");
+}
+function pick(source, properties) {
+ return Object.assign({}, ...properties.map((property) => property in source ? { [property]: source[property] } : {}));
+}
+function delay(duration = 0) {
+ return new Promise((done) => setTimeout(done, duration));
+}
+var NULL;
+var NOOP;
+var objectToString;
+var init_util = __esm({
+ "src/lib/utils/util.ts"() {
+ NULL = "\0";
+ NOOP = () => {
+ };
+ objectToString = Object.prototype.toString.call.bind(Object.prototype.toString);
+ }
+});
+function filterType(input, filter, def) {
+ if (filter(input)) {
+ return input;
+ }
+ return arguments.length > 2 ? def : void 0;
+}
+function filterPrimitives(input, omit) {
+ return /number|string|boolean/.test(typeof input) && (!omit || !omit.includes(typeof input));
+}
+function filterPlainObject(input) {
+ return !!input && objectToString(input) === "[object Object]";
+}
+function filterFunction(input) {
+ return typeof input === "function";
+}
+var filterArray;
+var filterString;
+var filterStringArray;
+var filterStringOrStringArray;
+var filterHasLength;
+var init_argument_filters = __esm({
+ "src/lib/utils/argument-filters.ts"() {
+ init_util();
+ filterArray = (input) => {
+ return Array.isArray(input);
+ };
+ filterString = (input) => {
+ return typeof input === "string";
+ };
+ filterStringArray = (input) => {
+ return Array.isArray(input) && input.every(filterString);
+ };
+ filterStringOrStringArray = (input) => {
+ return filterString(input) || Array.isArray(input) && input.every(filterString);
+ };
+ filterHasLength = (input) => {
+ if (input == null || "number|boolean|function".includes(typeof input)) {
+ return false;
+ }
+ return Array.isArray(input) || typeof input === "string" || typeof input.length === "number";
+ };
+ }
+});
+var ExitCodes;
+var init_exit_codes = __esm({
+ "src/lib/utils/exit-codes.ts"() {
+ ExitCodes = /* @__PURE__ */ ((ExitCodes2) => {
+ ExitCodes2[ExitCodes2["SUCCESS"] = 0] = "SUCCESS";
+ ExitCodes2[ExitCodes2["ERROR"] = 1] = "ERROR";
+ ExitCodes2[ExitCodes2["UNCLEAN"] = 128] = "UNCLEAN";
+ return ExitCodes2;
+ })(ExitCodes || {});
+ }
+});
+var GitOutputStreams;
+var init_git_output_streams = __esm({
+ "src/lib/utils/git-output-streams.ts"() {
+ GitOutputStreams = class {
+ constructor(stdOut, stdErr) {
+ this.stdOut = stdOut;
+ this.stdErr = stdErr;
+ }
+ asStrings() {
+ return new GitOutputStreams(this.stdOut.toString("utf8"), this.stdErr.toString("utf8"));
+ }
+ };
+ }
+});
+var LineParser;
+var RemoteLineParser;
+var init_line_parser = __esm({
+ "src/lib/utils/line-parser.ts"() {
+ LineParser = class {
+ constructor(regExp, useMatches) {
+ this.matches = [];
+ this.parse = (line, target) => {
+ this.resetMatches();
+ if (!this._regExp.every((reg, index) => this.addMatch(reg, index, line(index)))) {
+ return false;
+ }
+ return this.useMatches(target, this.prepareMatches()) !== false;
+ };
+ this._regExp = Array.isArray(regExp) ? regExp : [regExp];
+ if (useMatches) {
+ this.useMatches = useMatches;
+ }
+ }
+ useMatches(target, match) {
+ throw new Error(`LineParser:useMatches not implemented`);
+ }
+ resetMatches() {
+ this.matches.length = 0;
+ }
+ prepareMatches() {
+ return this.matches;
+ }
+ addMatch(reg, index, line) {
+ const matched = line && reg.exec(line);
+ if (matched) {
+ this.pushMatch(index, matched);
+ }
+ return !!matched;
+ }
+ pushMatch(_index, matched) {
+ this.matches.push(...matched.slice(1));
+ }
+ };
+ RemoteLineParser = class extends LineParser {
+ addMatch(reg, index, line) {
+ return /^remote:\s/.test(String(line)) && super.addMatch(reg, index, line);
+ }
+ pushMatch(index, matched) {
+ if (index > 0 || matched.length > 1) {
+ super.pushMatch(index, matched);
+ }
+ }
+ };
+ }
+});
+function createInstanceConfig(...options) {
+ const baseDir = process.cwd();
+ const config = Object.assign(__spreadValues2({ baseDir }, defaultOptions), ...options.filter((o) => typeof o === "object" && o));
+ config.baseDir = config.baseDir || baseDir;
+ return config;
+}
+var defaultOptions;
+var init_simple_git_options = __esm({
+ "src/lib/utils/simple-git-options.ts"() {
+ defaultOptions = {
+ binary: "git",
+ maxConcurrentProcesses: 5,
+ config: []
+ };
+ }
+});
+function appendTaskOptions(options, commands = []) {
+ if (!filterPlainObject(options)) {
+ return commands;
+ }
+ return Object.keys(options).reduce((commands2, key2) => {
+ const value = options[key2];
+ if (filterPrimitives(value, ["boolean"])) {
+ commands2.push(key2 + "=" + value);
+ } else {
+ commands2.push(key2);
+ }
+ return commands2;
+ }, commands);
+}
+function getTrailingOptions(args, initialPrimitive = 0, objectOnly = false) {
+ const command = [];
+ for (let i = 0, max = initialPrimitive < 0 ? args.length : initialPrimitive; i < max; i++) {
+ if ("string|number".includes(typeof args[i])) {
+ command.push(String(args[i]));
+ }
+ }
+ appendTaskOptions(trailingOptionsArgument(args), command);
+ if (!objectOnly) {
+ command.push(...trailingArrayArgument(args));
+ }
+ return command;
+}
+function trailingArrayArgument(args) {
+ const hasTrailingCallback = typeof last(args) === "function";
+ return filterType(last(args, hasTrailingCallback ? 1 : 0), filterArray, []);
+}
+function trailingOptionsArgument(args) {
+ const hasTrailingCallback = filterFunction(last(args));
+ return filterType(last(args, hasTrailingCallback ? 1 : 0), filterPlainObject);
+}
+function trailingFunctionArgument(args, includeNoop = true) {
+ const callback = asFunction(last(args));
+ return includeNoop || isUserFunction(callback) ? callback : void 0;
+}
+var init_task_options = __esm({
+ "src/lib/utils/task-options.ts"() {
+ init_argument_filters();
+ init_util();
+ }
+});
+function callTaskParser(parser3, streams) {
+ return parser3(streams.stdOut, streams.stdErr);
+}
+function parseStringResponse(result, parsers11, texts, trim = true) {
+ asArray(texts).forEach((text2) => {
+ for (let lines = toLinesWithContent(text2, trim), i = 0, max = lines.length; i < max; i++) {
+ const line = (offset = 0) => {
+ if (i + offset >= max) {
+ return;
+ }
+ return lines[i + offset];
+ };
+ parsers11.some(({ parse }) => parse(line, result));
+ }
+ });
+ return result;
+}
+var init_task_parser = __esm({
+ "src/lib/utils/task-parser.ts"() {
+ init_util();
+ }
+});
+var utils_exports = {};
+__export2(utils_exports, {
+ ExitCodes: () => ExitCodes,
+ GitOutputStreams: () => GitOutputStreams,
+ LineParser: () => LineParser,
+ NOOP: () => NOOP,
+ NULL: () => NULL,
+ RemoteLineParser: () => RemoteLineParser,
+ append: () => append,
+ appendTaskOptions: () => appendTaskOptions,
+ asArray: () => asArray,
+ asFunction: () => asFunction,
+ asNumber: () => asNumber,
+ asStringArray: () => asStringArray,
+ bufferToString: () => bufferToString,
+ callTaskParser: () => callTaskParser,
+ createInstanceConfig: () => createInstanceConfig,
+ delay: () => delay,
+ filterArray: () => filterArray,
+ filterFunction: () => filterFunction,
+ filterHasLength: () => filterHasLength,
+ filterPlainObject: () => filterPlainObject,
+ filterPrimitives: () => filterPrimitives,
+ filterString: () => filterString,
+ filterStringArray: () => filterStringArray,
+ filterStringOrStringArray: () => filterStringOrStringArray,
+ filterType: () => filterType,
+ first: () => first,
+ folderExists: () => folderExists,
+ forEachLineWithContent: () => forEachLineWithContent,
+ getTrailingOptions: () => getTrailingOptions,
+ including: () => including,
+ isUserFunction: () => isUserFunction,
+ last: () => last,
+ objectToString: () => objectToString,
+ parseStringResponse: () => parseStringResponse,
+ pick: () => pick,
+ prefixedArray: () => prefixedArray,
+ remove: () => remove,
+ splitOn: () => splitOn,
+ toLinesWithContent: () => toLinesWithContent,
+ trailingFunctionArgument: () => trailingFunctionArgument,
+ trailingOptionsArgument: () => trailingOptionsArgument
+});
+var init_utils = __esm({
+ "src/lib/utils/index.ts"() {
+ init_argument_filters();
+ init_exit_codes();
+ init_git_output_streams();
+ init_line_parser();
+ init_simple_git_options();
+ init_task_options();
+ init_task_parser();
+ init_util();
+ }
+});
+var check_is_repo_exports = {};
+__export2(check_is_repo_exports, {
+ CheckRepoActions: () => CheckRepoActions,
+ checkIsBareRepoTask: () => checkIsBareRepoTask,
+ checkIsRepoRootTask: () => checkIsRepoRootTask,
+ checkIsRepoTask: () => checkIsRepoTask
+});
+function checkIsRepoTask(action) {
+ switch (action) {
+ case "bare":
+ return checkIsBareRepoTask();
+ case "root":
+ return checkIsRepoRootTask();
+ }
+ const commands = ["rev-parse", "--is-inside-work-tree"];
+ return {
+ commands,
+ format: "utf-8",
+ onError,
+ parser
+ };
+}
+function checkIsRepoRootTask() {
+ const commands = ["rev-parse", "--git-dir"];
+ return {
+ commands,
+ format: "utf-8",
+ onError,
+ parser(path3) {
+ return /^\.(git)?$/.test(path3.trim());
+ }
+ };
+}
+function checkIsBareRepoTask() {
+ const commands = ["rev-parse", "--is-bare-repository"];
+ return {
+ commands,
+ format: "utf-8",
+ onError,
+ parser
+ };
+}
+function isNotRepoMessage(error) {
+ return /(Not a git repository|Kein Git-Repository)/i.test(String(error));
+}
+var CheckRepoActions;
+var onError;
+var parser;
+var init_check_is_repo = __esm({
+ "src/lib/tasks/check-is-repo.ts"() {
+ init_utils();
+ CheckRepoActions = /* @__PURE__ */ ((CheckRepoActions2) => {
+ CheckRepoActions2["BARE"] = "bare";
+ CheckRepoActions2["IN_TREE"] = "tree";
+ CheckRepoActions2["IS_REPO_ROOT"] = "root";
+ return CheckRepoActions2;
+ })(CheckRepoActions || {});
+ onError = ({ exitCode }, error, done, fail) => {
+ if (exitCode === 128 && isNotRepoMessage(error)) {
+ return done(Buffer.from("false"));
+ }
+ fail(error);
+ };
+ parser = (text2) => {
+ return text2.trim() === "true";
+ };
+ }
+});
+function cleanSummaryParser(dryRun, text2) {
+ const summary = new CleanResponse(dryRun);
+ const regexp = dryRun ? dryRunRemovalRegexp : removalRegexp;
+ toLinesWithContent(text2).forEach((line) => {
+ const removed = line.replace(regexp, "");
+ summary.paths.push(removed);
+ (isFolderRegexp.test(removed) ? summary.folders : summary.files).push(removed);
+ });
+ return summary;
+}
+var CleanResponse;
+var removalRegexp;
+var dryRunRemovalRegexp;
+var isFolderRegexp;
+var init_CleanSummary = __esm({
+ "src/lib/responses/CleanSummary.ts"() {
+ init_utils();
+ CleanResponse = class {
+ constructor(dryRun) {
+ this.dryRun = dryRun;
+ this.paths = [];
+ this.files = [];
+ this.folders = [];
+ }
+ };
+ removalRegexp = /^[a-z]+\s*/i;
+ dryRunRemovalRegexp = /^[a-z]+\s+[a-z]+\s*/i;
+ isFolderRegexp = /\/$/;
+ }
+});
+var task_exports = {};
+__export2(task_exports, {
+ EMPTY_COMMANDS: () => EMPTY_COMMANDS,
+ adhocExecTask: () => adhocExecTask,
+ configurationErrorTask: () => configurationErrorTask,
+ isBufferTask: () => isBufferTask,
+ isEmptyTask: () => isEmptyTask,
+ straightThroughBufferTask: () => straightThroughBufferTask,
+ straightThroughStringTask: () => straightThroughStringTask
+});
+function adhocExecTask(parser3) {
+ return {
+ commands: EMPTY_COMMANDS,
+ format: "empty",
+ parser: parser3
+ };
+}
+function configurationErrorTask(error) {
+ return {
+ commands: EMPTY_COMMANDS,
+ format: "empty",
+ parser() {
+ throw typeof error === "string" ? new TaskConfigurationError(error) : error;
+ }
+ };
+}
+function straightThroughStringTask(commands, trimmed2 = false) {
+ return {
+ commands,
+ format: "utf-8",
+ parser(text2) {
+ return trimmed2 ? String(text2).trim() : text2;
+ }
+ };
+}
+function straightThroughBufferTask(commands) {
+ return {
+ commands,
+ format: "buffer",
+ parser(buffer) {
+ return buffer;
+ }
+ };
+}
+function isBufferTask(task) {
+ return task.format === "buffer";
+}
+function isEmptyTask(task) {
+ return task.format === "empty" || !task.commands.length;
+}
+var EMPTY_COMMANDS;
+var init_task = __esm({
+ "src/lib/tasks/task.ts"() {
+ init_task_configuration_error();
+ EMPTY_COMMANDS = [];
+ }
+});
+var clean_exports = {};
+__export2(clean_exports, {
+ CONFIG_ERROR_INTERACTIVE_MODE: () => CONFIG_ERROR_INTERACTIVE_MODE,
+ CONFIG_ERROR_MODE_REQUIRED: () => CONFIG_ERROR_MODE_REQUIRED,
+ CONFIG_ERROR_UNKNOWN_OPTION: () => CONFIG_ERROR_UNKNOWN_OPTION,
+ CleanOptions: () => CleanOptions,
+ cleanTask: () => cleanTask,
+ cleanWithOptionsTask: () => cleanWithOptionsTask,
+ isCleanOptionsArray: () => isCleanOptionsArray
+});
+function cleanWithOptionsTask(mode, customArgs) {
+ const { cleanMode, options, valid } = getCleanOptions(mode);
+ if (!cleanMode) {
+ return configurationErrorTask(CONFIG_ERROR_MODE_REQUIRED);
+ }
+ if (!valid.options) {
+ return configurationErrorTask(CONFIG_ERROR_UNKNOWN_OPTION + JSON.stringify(mode));
+ }
+ options.push(...customArgs);
+ if (options.some(isInteractiveMode)) {
+ return configurationErrorTask(CONFIG_ERROR_INTERACTIVE_MODE);
+ }
+ return cleanTask(cleanMode, options);
+}
+function cleanTask(mode, customArgs) {
+ const commands = ["clean", `-${mode}`, ...customArgs];
+ return {
+ commands,
+ format: "utf-8",
+ parser(text2) {
+ return cleanSummaryParser(mode === "n", text2);
+ }
+ };
+}
+function isCleanOptionsArray(input) {
+ return Array.isArray(input) && input.every((test) => CleanOptionValues.has(test));
+}
+function getCleanOptions(input) {
+ let cleanMode;
+ let options = [];
+ let valid = { cleanMode: false, options: true };
+ input.replace(/[^a-z]i/g, "").split("").forEach((char) => {
+ if (isCleanMode(char)) {
+ cleanMode = char;
+ valid.cleanMode = true;
+ } else {
+ valid.options = valid.options && isKnownOption(options[options.length] = `-${char}`);
+ }
+ });
+ return {
+ cleanMode,
+ options,
+ valid
+ };
+}
+function isCleanMode(cleanMode) {
+ return cleanMode === "f" || cleanMode === "n";
+}
+function isKnownOption(option) {
+ return /^-[a-z]$/i.test(option) && CleanOptionValues.has(option.charAt(1));
+}
+function isInteractiveMode(option) {
+ if (/^-[^\-]/.test(option)) {
+ return option.indexOf("i") > 0;
+ }
+ return option === "--interactive";
+}
+var CONFIG_ERROR_INTERACTIVE_MODE;
+var CONFIG_ERROR_MODE_REQUIRED;
+var CONFIG_ERROR_UNKNOWN_OPTION;
+var CleanOptions;
+var CleanOptionValues;
+var init_clean = __esm({
+ "src/lib/tasks/clean.ts"() {
+ init_CleanSummary();
+ init_utils();
+ init_task();
+ CONFIG_ERROR_INTERACTIVE_MODE = "Git clean interactive mode is not supported";
+ CONFIG_ERROR_MODE_REQUIRED = 'Git clean mode parameter ("n" or "f") is required';
+ CONFIG_ERROR_UNKNOWN_OPTION = "Git clean unknown option found in: ";
+ CleanOptions = /* @__PURE__ */ ((CleanOptions2) => {
+ CleanOptions2["DRY_RUN"] = "n";
+ CleanOptions2["FORCE"] = "f";
+ CleanOptions2["IGNORED_INCLUDED"] = "x";
+ CleanOptions2["IGNORED_ONLY"] = "X";
+ CleanOptions2["EXCLUDING"] = "e";
+ CleanOptions2["QUIET"] = "q";
+ CleanOptions2["RECURSIVE"] = "d";
+ return CleanOptions2;
+ })(CleanOptions || {});
+ CleanOptionValues = /* @__PURE__ */ new Set(["i", ...asStringArray(Object.values(CleanOptions))]);
+ }
+});
+function configListParser(text2) {
+ const config = new ConfigList();
+ for (const item of configParser(text2)) {
+ config.addValue(item.file, String(item.key), item.value);
+ }
+ return config;
+}
+function configGetParser(text2, key2) {
+ let value = null;
+ const values = [];
+ const scopes = /* @__PURE__ */ new Map();
+ for (const item of configParser(text2, key2)) {
+ if (item.key !== key2) {
+ continue;
+ }
+ values.push(value = item.value);
+ if (!scopes.has(item.file)) {
+ scopes.set(item.file, []);
+ }
+ scopes.get(item.file).push(value);
+ }
+ return {
+ key: key2,
+ paths: Array.from(scopes.keys()),
+ scopes,
+ value,
+ values
+ };
+}
+function configFilePath(filePath) {
+ return filePath.replace(/^(file):/, "");
+}
+function* configParser(text2, requestedKey = null) {
+ const lines = text2.split("\0");
+ for (let i = 0, max = lines.length - 1; i < max; ) {
+ const file = configFilePath(lines[i++]);
+ let value = lines[i++];
+ let key2 = requestedKey;
+ if (value.includes("\n")) {
+ const line = splitOn(value, "\n");
+ key2 = line[0];
+ value = line[1];
+ }
+ yield { file, key: key2, value };
+ }
+}
+var ConfigList;
+var init_ConfigList = __esm({
+ "src/lib/responses/ConfigList.ts"() {
+ init_utils();
+ ConfigList = class {
+ constructor() {
+ this.files = [];
+ this.values = /* @__PURE__ */ Object.create(null);
+ }
+ get all() {
+ if (!this._all) {
+ this._all = this.files.reduce((all, file) => {
+ return Object.assign(all, this.values[file]);
+ }, {});
+ }
+ return this._all;
+ }
+ addFile(file) {
+ if (!(file in this.values)) {
+ const latest = last(this.files);
+ this.values[file] = latest ? Object.create(this.values[latest]) : {};
+ this.files.push(file);
+ }
+ return this.values[file];
+ }
+ addValue(file, key2, value) {
+ const values = this.addFile(file);
+ if (!values.hasOwnProperty(key2)) {
+ values[key2] = value;
+ } else if (Array.isArray(values[key2])) {
+ values[key2].push(value);
+ } else {
+ values[key2] = [values[key2], value];
+ }
+ this._all = void 0;
+ }
+ };
+ }
+});
+function asConfigScope(scope, fallback) {
+ if (typeof scope === "string" && GitConfigScope.hasOwnProperty(scope)) {
+ return scope;
+ }
+ return fallback;
+}
+function addConfigTask(key2, value, append22, scope) {
+ const commands = ["config", `--${scope}`];
+ if (append22) {
+ commands.push("--add");
+ }
+ commands.push(key2, value);
+ return {
+ commands,
+ format: "utf-8",
+ parser(text2) {
+ return text2;
+ }
+ };
+}
+function getConfigTask(key2, scope) {
+ const commands = ["config", "--null", "--show-origin", "--get-all", key2];
+ if (scope) {
+ commands.splice(1, 0, `--${scope}`);
+ }
+ return {
+ commands,
+ format: "utf-8",
+ parser(text2) {
+ return configGetParser(text2, key2);
+ }
+ };
+}
+function listConfigTask(scope) {
+ const commands = ["config", "--list", "--show-origin", "--null"];
+ if (scope) {
+ commands.push(`--${scope}`);
+ }
+ return {
+ commands,
+ format: "utf-8",
+ parser(text2) {
+ return configListParser(text2);
+ }
+ };
+}
+function config_default() {
+ return {
+ addConfig(key2, value, ...rest) {
+ return this._runTask(addConfigTask(key2, value, rest[0] === true, asConfigScope(rest[1], "local")), trailingFunctionArgument(arguments));
+ },
+ getConfig(key2, scope) {
+ return this._runTask(getConfigTask(key2, asConfigScope(scope, void 0)), trailingFunctionArgument(arguments));
+ },
+ listConfig(...rest) {
+ return this._runTask(listConfigTask(asConfigScope(rest[0], void 0)), trailingFunctionArgument(arguments));
+ }
+ };
+}
+var GitConfigScope;
+var init_config = __esm({
+ "src/lib/tasks/config.ts"() {
+ init_ConfigList();
+ init_utils();
+ GitConfigScope = /* @__PURE__ */ ((GitConfigScope2) => {
+ GitConfigScope2["system"] = "system";
+ GitConfigScope2["global"] = "global";
+ GitConfigScope2["local"] = "local";
+ GitConfigScope2["worktree"] = "worktree";
+ return GitConfigScope2;
+ })(GitConfigScope || {});
+ }
+});
+function grepQueryBuilder(...params) {
+ return new GrepQuery().param(...params);
+}
+function parseGrep(grep) {
+ const paths = /* @__PURE__ */ new Set();
+ const results = {};
+ forEachLineWithContent(grep, (input) => {
+ const [path3, line, preview] = input.split(NULL);
+ paths.add(path3);
+ (results[path3] = results[path3] || []).push({
+ line: asNumber(line),
+ path: path3,
+ preview
+ });
+ });
+ return {
+ paths,
+ results
+ };
+}
+function grep_default() {
+ return {
+ grep(searchTerm) {
+ const then = trailingFunctionArgument(arguments);
+ const options = getTrailingOptions(arguments);
+ for (const option of disallowedOptions) {
+ if (options.includes(option)) {
+ return this._runTask(configurationErrorTask(`git.grep: use of "${option}" is not supported.`), then);
+ }
+ }
+ if (typeof searchTerm === "string") {
+ searchTerm = grepQueryBuilder().param(searchTerm);
+ }
+ const commands = ["grep", "--null", "-n", "--full-name", ...options, ...searchTerm];
+ return this._runTask({
+ commands,
+ format: "utf-8",
+ parser(stdOut) {
+ return parseGrep(stdOut);
+ }
+ }, then);
+ }
+ };
+}
+var disallowedOptions;
+var Query;
+var _a;
+var GrepQuery;
+var init_grep = __esm({
+ "src/lib/tasks/grep.ts"() {
+ init_utils();
+ init_task();
+ disallowedOptions = ["-h"];
+ Query = Symbol("grepQuery");
+ GrepQuery = class {
+ constructor() {
+ this[_a] = [];
+ }
+ *[(_a = Query, Symbol.iterator)]() {
+ for (const query of this[Query]) {
+ yield query;
+ }
+ }
+ and(...and) {
+ and.length && this[Query].push("--and", "(", ...prefixedArray(and, "-e"), ")");
+ return this;
+ }
+ param(...param) {
+ this[Query].push(...prefixedArray(param, "-e"));
+ return this;
+ }
+ };
+ }
+});
+var reset_exports = {};
+__export2(reset_exports, {
+ ResetMode: () => ResetMode,
+ getResetMode: () => getResetMode,
+ resetTask: () => resetTask
+});
+function resetTask(mode, customArgs) {
+ const commands = ["reset"];
+ if (isValidResetMode(mode)) {
+ commands.push(`--${mode}`);
+ }
+ commands.push(...customArgs);
+ return straightThroughStringTask(commands);
+}
+function getResetMode(mode) {
+ if (isValidResetMode(mode)) {
+ return mode;
+ }
+ switch (typeof mode) {
+ case "string":
+ case "undefined":
+ return "soft";
+ }
+ return;
+}
+function isValidResetMode(mode) {
+ return ResetModes.includes(mode);
+}
+var ResetMode;
+var ResetModes;
+var init_reset = __esm({
+ "src/lib/tasks/reset.ts"() {
+ init_task();
+ ResetMode = /* @__PURE__ */ ((ResetMode2) => {
+ ResetMode2["MIXED"] = "mixed";
+ ResetMode2["SOFT"] = "soft";
+ ResetMode2["HARD"] = "hard";
+ ResetMode2["MERGE"] = "merge";
+ ResetMode2["KEEP"] = "keep";
+ return ResetMode2;
+ })(ResetMode || {});
+ ResetModes = Array.from(Object.values(ResetMode));
+ }
+});
+function createLog() {
+ return (0, import_debug.default)("simple-git");
+}
+function prefixedLogger(to, prefix, forward) {
+ if (!prefix || !String(prefix).replace(/\s*/, "")) {
+ return !forward ? to : (message, ...args) => {
+ to(message, ...args);
+ forward(message, ...args);
+ };
+ }
+ return (message, ...args) => {
+ to(`%s ${message}`, prefix, ...args);
+ if (forward) {
+ forward(message, ...args);
+ }
+ };
+}
+function childLoggerName(name, childDebugger, { namespace: parentNamespace }) {
+ if (typeof name === "string") {
+ return name;
+ }
+ const childNamespace = childDebugger && childDebugger.namespace || "";
+ if (childNamespace.startsWith(parentNamespace)) {
+ return childNamespace.substr(parentNamespace.length + 1);
+ }
+ return childNamespace || parentNamespace;
+}
+function createLogger(label, verbose, initialStep, infoDebugger = createLog()) {
+ const labelPrefix = label && `[${label}]` || "";
+ const spawned = [];
+ const debugDebugger = typeof verbose === "string" ? infoDebugger.extend(verbose) : verbose;
+ const key2 = childLoggerName(filterType(verbose, filterString), debugDebugger, infoDebugger);
+ return step(initialStep);
+ function sibling(name, initial) {
+ return append(spawned, createLogger(label, key2.replace(/^[^:]+/, name), initial, infoDebugger));
+ }
+ function step(phase) {
+ const stepPrefix = phase && `[${phase}]` || "";
+ const debug2 = debugDebugger && prefixedLogger(debugDebugger, stepPrefix) || NOOP;
+ const info = prefixedLogger(infoDebugger, `${labelPrefix} ${stepPrefix}`, debug2);
+ return Object.assign(debugDebugger ? debug2 : info, {
+ label,
+ sibling,
+ info,
+ step
+ });
+ }
+}
+var init_git_logger = __esm({
+ "src/lib/git-logger.ts"() {
+ init_utils();
+ import_debug.default.formatters.L = (value) => String(filterHasLength(value) ? value.length : "-");
+ import_debug.default.formatters.B = (value) => {
+ if (Buffer.isBuffer(value)) {
+ return value.toString("utf8");
+ }
+ return objectToString(value);
+ };
+ }
+});
+var _TasksPendingQueue;
+var TasksPendingQueue;
+var init_tasks_pending_queue = __esm({
+ "src/lib/runners/tasks-pending-queue.ts"() {
+ init_git_error();
+ init_git_logger();
+ _TasksPendingQueue = class {
+ constructor(logLabel = "GitExecutor") {
+ this.logLabel = logLabel;
+ this._queue = /* @__PURE__ */ new Map();
+ }
+ withProgress(task) {
+ return this._queue.get(task);
+ }
+ createProgress(task) {
+ const name = _TasksPendingQueue.getName(task.commands[0]);
+ const logger = createLogger(this.logLabel, name);
+ return {
+ task,
+ logger,
+ name
+ };
+ }
+ push(task) {
+ const progress = this.createProgress(task);
+ progress.logger("Adding task to the queue, commands = %o", task.commands);
+ this._queue.set(task, progress);
+ return progress;
+ }
+ fatal(err) {
+ for (const [task, { logger }] of Array.from(this._queue.entries())) {
+ if (task === err.task) {
+ logger.info(`Failed %o`, err);
+ logger(`Fatal exception, any as-yet un-started tasks run through this executor will not be attempted`);
+ } else {
+ logger.info(`A fatal exception occurred in a previous task, the queue has been purged: %o`, err.message);
+ }
+ this.complete(task);
+ }
+ if (this._queue.size !== 0) {
+ throw new Error(`Queue size should be zero after fatal: ${this._queue.size}`);
+ }
+ }
+ complete(task) {
+ const progress = this.withProgress(task);
+ if (progress) {
+ this._queue.delete(task);
+ }
+ }
+ attempt(task) {
+ const progress = this.withProgress(task);
+ if (!progress) {
+ throw new GitError(void 0, "TasksPendingQueue: attempt called for an unknown task");
+ }
+ progress.logger("Starting task");
+ return progress;
+ }
+ static getName(name = "empty") {
+ return `task:${name}:${++_TasksPendingQueue.counter}`;
+ }
+ };
+ TasksPendingQueue = _TasksPendingQueue;
+ TasksPendingQueue.counter = 0;
+ }
+});
+function pluginContext(task, commands) {
+ return {
+ method: first(task.commands) || "",
+ commands
+ };
+}
+function onErrorReceived(target, logger) {
+ return (err) => {
+ logger(`[ERROR] child process exception %o`, err);
+ target.push(Buffer.from(String(err.stack), "ascii"));
+ };
+}
+function onDataReceived(target, name, logger, output) {
+ return (buffer) => {
+ logger(`%s received %L bytes`, name, buffer);
+ output(`%B`, buffer);
+ target.push(buffer);
+ };
+}
+var GitExecutorChain;
+var init_git_executor_chain = __esm({
+ "src/lib/runners/git-executor-chain.ts"() {
+ init_git_error();
+ init_task();
+ init_utils();
+ init_tasks_pending_queue();
+ GitExecutorChain = class {
+ constructor(_executor, _scheduler, _plugins) {
+ this._executor = _executor;
+ this._scheduler = _scheduler;
+ this._plugins = _plugins;
+ this._chain = Promise.resolve();
+ this._queue = new TasksPendingQueue();
+ }
+ get binary() {
+ return this._executor.binary;
+ }
+ get cwd() {
+ return this._cwd || this._executor.cwd;
+ }
+ set cwd(cwd) {
+ this._cwd = cwd;
+ }
+ get env() {
+ return this._executor.env;
+ }
+ get outputHandler() {
+ return this._executor.outputHandler;
+ }
+ chain() {
+ return this;
+ }
+ push(task) {
+ this._queue.push(task);
+ return this._chain = this._chain.then(() => this.attemptTask(task));
+ }
+ attemptTask(task) {
+ return __async2(this, null, function* () {
+ const onScheduleComplete = yield this._scheduler.next();
+ const onQueueComplete = () => this._queue.complete(task);
+ try {
+ const { logger } = this._queue.attempt(task);
+ return yield isEmptyTask(task) ? this.attemptEmptyTask(task, logger) : this.attemptRemoteTask(task, logger);
+ } catch (e) {
+ throw this.onFatalException(task, e);
+ } finally {
+ onQueueComplete();
+ onScheduleComplete();
+ }
+ });
+ }
+ onFatalException(task, e) {
+ const gitError = e instanceof GitError ? Object.assign(e, { task }) : new GitError(task, e && String(e));
+ this._chain = Promise.resolve();
+ this._queue.fatal(gitError);
+ return gitError;
+ }
+ attemptRemoteTask(task, logger) {
+ return __async2(this, null, function* () {
+ const args = this._plugins.exec("spawn.args", [...task.commands], pluginContext(task, task.commands));
+ const raw = yield this.gitResponse(task, this.binary, args, this.outputHandler, logger.step("SPAWN"));
+ const outputStreams = yield this.handleTaskData(task, args, raw, logger.step("HANDLE"));
+ logger(`passing response to task's parser as a %s`, task.format);
+ if (isBufferTask(task)) {
+ return callTaskParser(task.parser, outputStreams);
+ }
+ return callTaskParser(task.parser, outputStreams.asStrings());
+ });
+ }
+ attemptEmptyTask(task, logger) {
+ return __async2(this, null, function* () {
+ logger(`empty task bypassing child process to call to task's parser`);
+ return task.parser(this);
+ });
+ }
+ handleTaskData(task, args, result, logger) {
+ const { exitCode, rejection, stdOut, stdErr } = result;
+ return new Promise((done, fail) => {
+ logger(`Preparing to handle process response exitCode=%d stdOut=`, exitCode);
+ const { error } = this._plugins.exec("task.error", { error: rejection }, __spreadValues2(__spreadValues2({}, pluginContext(task, args)), result));
+ if (error && task.onError) {
+ logger.info(`exitCode=%s handling with custom error handler`);
+ return task.onError(result, error, (newStdOut) => {
+ logger.info(`custom error handler treated as success`);
+ logger(`custom error returned a %s`, objectToString(newStdOut));
+ done(new GitOutputStreams(Array.isArray(newStdOut) ? Buffer.concat(newStdOut) : newStdOut, Buffer.concat(stdErr)));
+ }, fail);
+ }
+ if (error) {
+ logger.info(`handling as error: exitCode=%s stdErr=%s rejection=%o`, exitCode, stdErr.length, rejection);
+ return fail(error);
+ }
+ logger.info(`retrieving task output complete`);
+ done(new GitOutputStreams(Buffer.concat(stdOut), Buffer.concat(stdErr)));
+ });
+ }
+ gitResponse(task, command, args, outputHandler, logger) {
+ return __async2(this, null, function* () {
+ const outputLogger = logger.sibling("output");
+ const spawnOptions = this._plugins.exec("spawn.options", {
+ cwd: this.cwd,
+ env: this.env,
+ windowsHide: true
+ }, pluginContext(task, task.commands));
+ return new Promise((done) => {
+ const stdOut = [];
+ const stdErr = [];
+ let rejection;
+ logger.info(`%s %o`, command, args);
+ logger("%O", spawnOptions);
+ const spawned = (0, import_child_process.spawn)(command, args, spawnOptions);
+ spawned.stdout.on("data", onDataReceived(stdOut, "stdOut", logger, outputLogger.step("stdOut")));
+ spawned.stderr.on("data", onDataReceived(stdErr, "stdErr", logger, outputLogger.step("stdErr")));
+ spawned.on("error", onErrorReceived(stdErr, logger));
+ if (outputHandler) {
+ logger(`Passing child process stdOut/stdErr to custom outputHandler`);
+ outputHandler(command, spawned.stdout, spawned.stderr, [...args]);
+ }
+ this._plugins.exec("spawn.after", void 0, __spreadProps2(__spreadValues2({}, pluginContext(task, args)), {
+ spawned,
+ close(exitCode, reason) {
+ done({
+ stdOut,
+ stdErr,
+ exitCode,
+ rejection: rejection || reason
+ });
+ },
+ kill(reason) {
+ if (spawned.killed) {
+ return;
+ }
+ rejection = reason;
+ spawned.kill("SIGINT");
+ }
+ }));
+ });
+ });
+ }
+ };
+ }
+});
+var git_executor_exports = {};
+__export2(git_executor_exports, {
+ GitExecutor: () => GitExecutor
+});
+var GitExecutor;
+var init_git_executor = __esm({
+ "src/lib/runners/git-executor.ts"() {
+ init_git_executor_chain();
+ GitExecutor = class {
+ constructor(binary = "git", cwd, _scheduler, _plugins) {
+ this.binary = binary;
+ this.cwd = cwd;
+ this._scheduler = _scheduler;
+ this._plugins = _plugins;
+ this._chain = new GitExecutorChain(this, this._scheduler, this._plugins);
+ }
+ chain() {
+ return new GitExecutorChain(this, this._scheduler, this._plugins);
+ }
+ push(task) {
+ return this._chain.push(task);
+ }
+ };
+ }
+});
+function taskCallback(task, response, callback = NOOP) {
+ const onSuccess = (data) => {
+ callback(null, data);
+ };
+ const onError2 = (err) => {
+ if ((err == null ? void 0 : err.task) === task) {
+ callback(err instanceof GitResponseError ? addDeprecationNoticeToError(err) : err, void 0);
+ }
+ };
+ response.then(onSuccess, onError2);
+}
+function addDeprecationNoticeToError(err) {
+ let log = (name) => {
+ console.warn(`simple-git deprecation notice: accessing GitResponseError.${name} should be GitResponseError.git.${name}, this will no longer be available in version 3`);
+ log = NOOP;
+ };
+ return Object.create(err, Object.getOwnPropertyNames(err.git).reduce(descriptorReducer, {}));
+ function descriptorReducer(all, name) {
+ if (name in err) {
+ return all;
+ }
+ all[name] = {
+ enumerable: false,
+ configurable: false,
+ get() {
+ log(name);
+ return err.git[name];
+ }
+ };
+ return all;
+ }
+}
+var init_task_callback = __esm({
+ "src/lib/task-callback.ts"() {
+ init_git_response_error();
+ init_utils();
+ }
+});
+function changeWorkingDirectoryTask(directory, root) {
+ return adhocExecTask((instance5) => {
+ if (!folderExists(directory)) {
+ throw new Error(`Git.cwd: cannot change to non-directory "${directory}"`);
+ }
+ return (root || instance5).cwd = directory;
+ });
+}
+var init_change_working_directory = __esm({
+ "src/lib/tasks/change-working-directory.ts"() {
+ init_utils();
+ init_task();
+ }
+});
+function parseCommitResult(stdOut) {
+ const result = {
+ author: null,
+ branch: "",
+ commit: "",
+ root: false,
+ summary: {
+ changes: 0,
+ insertions: 0,
+ deletions: 0
+ }
+ };
+ return parseStringResponse(result, parsers, stdOut);
+}
+var parsers;
+var init_parse_commit = __esm({
+ "src/lib/parsers/parse-commit.ts"() {
+ init_utils();
+ parsers = [
+ new LineParser(/^\[([^\s]+)( \([^)]+\))? ([^\]]+)/, (result, [branch, root, commit]) => {
+ result.branch = branch;
+ result.commit = commit;
+ result.root = !!root;
+ }),
+ new LineParser(/\s*Author:\s(.+)/i, (result, [author]) => {
+ const parts = author.split("<");
+ const email = parts.pop();
+ if (!email || !email.includes("@")) {
+ return;
+ }
+ result.author = {
+ email: email.substr(0, email.length - 1),
+ name: parts.join("<").trim()
+ };
+ }),
+ new LineParser(/(\d+)[^,]*(?:,\s*(\d+)[^,]*)(?:,\s*(\d+))/g, (result, [changes, insertions, deletions]) => {
+ result.summary.changes = parseInt(changes, 10) || 0;
+ result.summary.insertions = parseInt(insertions, 10) || 0;
+ result.summary.deletions = parseInt(deletions, 10) || 0;
+ }),
+ new LineParser(/^(\d+)[^,]*(?:,\s*(\d+)[^(]+\(([+-]))?/, (result, [changes, lines, direction]) => {
+ result.summary.changes = parseInt(changes, 10) || 0;
+ const count = parseInt(lines, 10) || 0;
+ if (direction === "-") {
+ result.summary.deletions = count;
+ } else if (direction === "+") {
+ result.summary.insertions = count;
+ }
+ })
+ ];
+ }
+});
+var commit_exports = {};
+__export2(commit_exports, {
+ commitTask: () => commitTask,
+ default: () => commit_default
+});
+function commitTask(message, files, customArgs) {
+ const commands = [
+ "-c",
+ "core.abbrev=40",
+ "commit",
+ ...prefixedArray(message, "-m"),
+ ...files,
+ ...customArgs
+ ];
+ return {
+ commands,
+ format: "utf-8",
+ parser: parseCommitResult
+ };
+}
+function commit_default() {
+ return {
+ commit(message, ...rest) {
+ const next = trailingFunctionArgument(arguments);
+ const task = rejectDeprecatedSignatures(message) || commitTask(asArray(message), asArray(filterType(rest[0], filterStringOrStringArray, [])), [...filterType(rest[1], filterArray, []), ...getTrailingOptions(arguments, 0, true)]);
+ return this._runTask(task, next);
+ }
+ };
+ function rejectDeprecatedSignatures(message) {
+ return !filterStringOrStringArray(message) && configurationErrorTask(`git.commit: requires the commit message to be supplied as a string/string[]`);
+ }
+}
+var init_commit = __esm({
+ "src/lib/tasks/commit.ts"() {
+ init_parse_commit();
+ init_utils();
+ init_task();
+ }
+});
+function hashObjectTask(filePath, write) {
+ const commands = ["hash-object", filePath];
+ if (write) {
+ commands.push("-w");
+ }
+ return straightThroughStringTask(commands, true);
+}
+var init_hash_object = __esm({
+ "src/lib/tasks/hash-object.ts"() {
+ init_task();
+ }
+});
+function parseInit(bare, path3, text2) {
+ const response = String(text2).trim();
+ let result;
+ if (result = initResponseRegex.exec(response)) {
+ return new InitSummary(bare, path3, false, result[1]);
+ }
+ if (result = reInitResponseRegex.exec(response)) {
+ return new InitSummary(bare, path3, true, result[1]);
+ }
+ let gitDir = "";
+ const tokens = response.split(" ");
+ while (tokens.length) {
+ const token = tokens.shift();
+ if (token === "in") {
+ gitDir = tokens.join(" ");
+ break;
+ }
+ }
+ return new InitSummary(bare, path3, /^re/i.test(response), gitDir);
+}
+var InitSummary;
+var initResponseRegex;
+var reInitResponseRegex;
+var init_InitSummary = __esm({
+ "src/lib/responses/InitSummary.ts"() {
+ InitSummary = class {
+ constructor(bare, path3, existing, gitDir) {
+ this.bare = bare;
+ this.path = path3;
+ this.existing = existing;
+ this.gitDir = gitDir;
+ }
+ };
+ initResponseRegex = /^Init.+ repository in (.+)$/;
+ reInitResponseRegex = /^Rein.+ in (.+)$/;
+ }
+});
+function hasBareCommand(command) {
+ return command.includes(bareCommand);
+}
+function initTask(bare = false, path3, customArgs) {
+ const commands = ["init", ...customArgs];
+ if (bare && !hasBareCommand(commands)) {
+ commands.splice(1, 0, bareCommand);
+ }
+ return {
+ commands,
+ format: "utf-8",
+ parser(text2) {
+ return parseInit(commands.includes("--bare"), path3, text2);
+ }
+ };
+}
+var bareCommand;
+var init_init = __esm({
+ "src/lib/tasks/init.ts"() {
+ init_InitSummary();
+ bareCommand = "--bare";
+ }
+});
+function logFormatFromCommand(customArgs) {
+ for (let i = 0; i < customArgs.length; i++) {
+ const format = logFormatRegex.exec(customArgs[i]);
+ if (format) {
+ return `--${format[1]}`;
+ }
+ }
+ return "";
+}
+function isLogFormat(customArg) {
+ return logFormatRegex.test(customArg);
+}
+var logFormatRegex;
+var init_log_format = __esm({
+ "src/lib/args/log-format.ts"() {
+ logFormatRegex = /^--(stat|numstat|name-only|name-status)(=|$)/;
+ }
+});
+var DiffSummary;
+var init_DiffSummary = __esm({
+ "src/lib/responses/DiffSummary.ts"() {
+ DiffSummary = class {
+ constructor() {
+ this.changed = 0;
+ this.deletions = 0;
+ this.insertions = 0;
+ this.files = [];
+ }
+ };
+ }
+});
+function getDiffParser(format = "") {
+ const parser3 = diffSummaryParsers[format];
+ return (stdOut) => parseStringResponse(new DiffSummary(), parser3, stdOut, false);
+}
+var statParser;
+var numStatParser;
+var nameOnlyParser;
+var nameStatusParser;
+var diffSummaryParsers;
+var init_parse_diff_summary = __esm({
+ "src/lib/parsers/parse-diff-summary.ts"() {
+ init_log_format();
+ init_DiffSummary();
+ init_utils();
+ statParser = [
+ new LineParser(/(.+)\s+\|\s+(\d+)(\s+[+\-]+)?$/, (result, [file, changes, alterations = ""]) => {
+ result.files.push({
+ file: file.trim(),
+ changes: asNumber(changes),
+ insertions: alterations.replace(/[^+]/g, "").length,
+ deletions: alterations.replace(/[^-]/g, "").length,
+ binary: false
+ });
+ }),
+ new LineParser(/(.+) \|\s+Bin ([0-9.]+) -> ([0-9.]+) ([a-z]+)/, (result, [file, before, after]) => {
+ result.files.push({
+ file: file.trim(),
+ before: asNumber(before),
+ after: asNumber(after),
+ binary: true
+ });
+ }),
+ new LineParser(/(\d+) files? changed\s*((?:, \d+ [^,]+){0,2})/, (result, [changed, summary]) => {
+ const inserted = /(\d+) i/.exec(summary);
+ const deleted = /(\d+) d/.exec(summary);
+ result.changed = asNumber(changed);
+ result.insertions = asNumber(inserted == null ? void 0 : inserted[1]);
+ result.deletions = asNumber(deleted == null ? void 0 : deleted[1]);
+ })
+ ];
+ numStatParser = [
+ new LineParser(/(\d+)\t(\d+)\t(.+)$/, (result, [changesInsert, changesDelete, file]) => {
+ const insertions = asNumber(changesInsert);
+ const deletions = asNumber(changesDelete);
+ result.changed++;
+ result.insertions += insertions;
+ result.deletions += deletions;
+ result.files.push({
+ file,
+ changes: insertions + deletions,
+ insertions,
+ deletions,
+ binary: false
+ });
+ }),
+ new LineParser(/-\t-\t(.+)$/, (result, [file]) => {
+ result.changed++;
+ result.files.push({
+ file,
+ after: 0,
+ before: 0,
+ binary: true
+ });
+ })
+ ];
+ nameOnlyParser = [
+ new LineParser(/(.+)$/, (result, [file]) => {
+ result.changed++;
+ result.files.push({
+ file,
+ changes: 0,
+ insertions: 0,
+ deletions: 0,
+ binary: false
+ });
+ })
+ ];
+ nameStatusParser = [
+ new LineParser(/([ACDMRTUXB])\s*(.+)$/, (result, [_status, file]) => {
+ result.changed++;
+ result.files.push({
+ file,
+ changes: 0,
+ insertions: 0,
+ deletions: 0,
+ binary: false
+ });
+ })
+ ];
+ diffSummaryParsers = {
+ [""]: statParser,
+ ["--stat"]: statParser,
+ ["--numstat"]: numStatParser,
+ ["--name-status"]: nameStatusParser,
+ ["--name-only"]: nameOnlyParser
+ };
+ }
+});
+function lineBuilder(tokens, fields) {
+ return fields.reduce((line, field, index) => {
+ line[field] = tokens[index] || "";
+ return line;
+ }, /* @__PURE__ */ Object.create({ diff: null }));
+}
+function createListLogSummaryParser(splitter = SPLITTER, fields = defaultFieldNames, logFormat = "") {
+ const parseDiffResult = getDiffParser(logFormat);
+ return function(stdOut) {
+ const all = toLinesWithContent(stdOut, true, START_BOUNDARY).map(function(item) {
+ const lineDetail = item.trim().split(COMMIT_BOUNDARY);
+ const listLogLine = lineBuilder(lineDetail[0].trim().split(splitter), fields);
+ if (lineDetail.length > 1 && !!lineDetail[1].trim()) {
+ listLogLine.diff = parseDiffResult(lineDetail[1]);
+ }
+ return listLogLine;
+ });
+ return {
+ all,
+ latest: all.length && all[0] || null,
+ total: all.length
+ };
+ };
+}
+var START_BOUNDARY;
+var COMMIT_BOUNDARY;
+var SPLITTER;
+var defaultFieldNames;
+var init_parse_list_log_summary = __esm({
+ "src/lib/parsers/parse-list-log-summary.ts"() {
+ init_utils();
+ init_parse_diff_summary();
+ init_log_format();
+ START_BOUNDARY = "\xF2\xF2\xF2\xF2\xF2\xF2 ";
+ COMMIT_BOUNDARY = " \xF2\xF2";
+ SPLITTER = " \xF2 ";
+ defaultFieldNames = ["hash", "date", "message", "refs", "author_name", "author_email"];
+ }
+});
+var diff_exports = {};
+__export2(diff_exports, {
+ diffSummaryTask: () => diffSummaryTask,
+ validateLogFormatConfig: () => validateLogFormatConfig
+});
+function diffSummaryTask(customArgs) {
+ let logFormat = logFormatFromCommand(customArgs);
+ const commands = ["diff"];
+ if (logFormat === "") {
+ logFormat = "--stat";
+ commands.push("--stat=4096");
+ }
+ commands.push(...customArgs);
+ return validateLogFormatConfig(commands) || {
+ commands,
+ format: "utf-8",
+ parser: getDiffParser(logFormat)
+ };
+}
+function validateLogFormatConfig(customArgs) {
+ const flags = customArgs.filter(isLogFormat);
+ if (flags.length > 1) {
+ return configurationErrorTask(`Summary flags are mutually exclusive - pick one of ${flags.join(",")}`);
+ }
+ if (flags.length && customArgs.includes("-z")) {
+ return configurationErrorTask(`Summary flag ${flags} parsing is not compatible with null termination option '-z'`);
+ }
+}
+var init_diff = __esm({
+ "src/lib/tasks/diff.ts"() {
+ init_log_format();
+ init_parse_diff_summary();
+ init_task();
+ }
+});
+function prettyFormat(format, splitter) {
+ const fields = [];
+ const formatStr = [];
+ Object.keys(format).forEach((field) => {
+ fields.push(field);
+ formatStr.push(String(format[field]));
+ });
+ return [
+ fields,
+ formatStr.join(splitter)
+ ];
+}
+function userOptions(input) {
+ return Object.keys(input).reduce((out, key2) => {
+ if (!(key2 in excludeOptions)) {
+ out[key2] = input[key2];
+ }
+ return out;
+ }, {});
+}
+function parseLogOptions(opt = {}, customArgs = []) {
+ const splitter = filterType(opt.splitter, filterString, SPLITTER);
+ const format = !filterPrimitives(opt.format) && opt.format ? opt.format : {
+ hash: "%H",
+ date: opt.strictDate === false ? "%ai" : "%aI",
+ message: "%s",
+ refs: "%D",
+ body: opt.multiLine ? "%B" : "%b",
+ author_name: opt.mailMap !== false ? "%aN" : "%an",
+ author_email: opt.mailMap !== false ? "%aE" : "%ae"
+ };
+ const [fields, formatStr] = prettyFormat(format, splitter);
+ const suffix = [];
+ const command = [
+ `--pretty=format:${START_BOUNDARY}${formatStr}${COMMIT_BOUNDARY}`,
+ ...customArgs
+ ];
+ const maxCount = opt.n || opt["max-count"] || opt.maxCount;
+ if (maxCount) {
+ command.push(`--max-count=${maxCount}`);
+ }
+ if (opt.from && opt.to) {
+ const rangeOperator = opt.symmetric !== false ? "..." : "..";
+ suffix.push(`${opt.from}${rangeOperator}${opt.to}`);
+ }
+ if (filterString(opt.file)) {
+ suffix.push("--follow", opt.file);
+ }
+ appendTaskOptions(userOptions(opt), command);
+ return {
+ fields,
+ splitter,
+ commands: [
+ ...command,
+ ...suffix
+ ]
+ };
+}
+function logTask(splitter, fields, customArgs) {
+ const parser3 = createListLogSummaryParser(splitter, fields, logFormatFromCommand(customArgs));
+ return {
+ commands: ["log", ...customArgs],
+ format: "utf-8",
+ parser: parser3
+ };
+}
+function log_default() {
+ return {
+ log(...rest) {
+ const next = trailingFunctionArgument(arguments);
+ const options = parseLogOptions(trailingOptionsArgument(arguments), filterType(arguments[0], filterArray));
+ const task = rejectDeprecatedSignatures(...rest) || validateLogFormatConfig(options.commands) || createLogTask(options);
+ return this._runTask(task, next);
+ }
+ };
+ function createLogTask(options) {
+ return logTask(options.splitter, options.fields, options.commands);
+ }
+ function rejectDeprecatedSignatures(from, to) {
+ return filterString(from) && filterString(to) && configurationErrorTask(`git.log(string, string) should be replaced with git.log({ from: string, to: string })`);
+ }
+}
+var excludeOptions;
+var init_log = __esm({
+ "src/lib/tasks/log.ts"() {
+ init_log_format();
+ init_parse_list_log_summary();
+ init_utils();
+ init_task();
+ init_diff();
+ excludeOptions = /* @__PURE__ */ ((excludeOptions2) => {
+ excludeOptions2[excludeOptions2["--pretty"] = 0] = "--pretty";
+ excludeOptions2[excludeOptions2["max-count"] = 1] = "max-count";
+ excludeOptions2[excludeOptions2["maxCount"] = 2] = "maxCount";
+ excludeOptions2[excludeOptions2["n"] = 3] = "n";
+ excludeOptions2[excludeOptions2["file"] = 4] = "file";
+ excludeOptions2[excludeOptions2["format"] = 5] = "format";
+ excludeOptions2[excludeOptions2["from"] = 6] = "from";
+ excludeOptions2[excludeOptions2["to"] = 7] = "to";
+ excludeOptions2[excludeOptions2["splitter"] = 8] = "splitter";
+ excludeOptions2[excludeOptions2["symmetric"] = 9] = "symmetric";
+ excludeOptions2[excludeOptions2["mailMap"] = 10] = "mailMap";
+ excludeOptions2[excludeOptions2["multiLine"] = 11] = "multiLine";
+ excludeOptions2[excludeOptions2["strictDate"] = 12] = "strictDate";
+ return excludeOptions2;
+ })(excludeOptions || {});
+ }
+});
+var MergeSummaryConflict;
+var MergeSummaryDetail;
+var init_MergeSummary = __esm({
+ "src/lib/responses/MergeSummary.ts"() {
+ MergeSummaryConflict = class {
+ constructor(reason, file = null, meta) {
+ this.reason = reason;
+ this.file = file;
+ this.meta = meta;
+ }
+ toString() {
+ return `${this.file}:${this.reason}`;
+ }
+ };
+ MergeSummaryDetail = class {
+ constructor() {
+ this.conflicts = [];
+ this.merges = [];
+ this.result = "success";
+ }
+ get failed() {
+ return this.conflicts.length > 0;
+ }
+ get reason() {
+ return this.result;
+ }
+ toString() {
+ if (this.conflicts.length) {
+ return `CONFLICTS: ${this.conflicts.join(", ")}`;
+ }
+ return "OK";
+ }
+ };
+ }
+});
+var PullSummary;
+var PullFailedSummary;
+var init_PullSummary = __esm({
+ "src/lib/responses/PullSummary.ts"() {
+ PullSummary = class {
+ constructor() {
+ this.remoteMessages = {
+ all: []
+ };
+ this.created = [];
+ this.deleted = [];
+ this.files = [];
+ this.deletions = {};
+ this.insertions = {};
+ this.summary = {
+ changes: 0,
+ deletions: 0,
+ insertions: 0
+ };
+ }
+ };
+ PullFailedSummary = class {
+ constructor() {
+ this.remote = "";
+ this.hash = {
+ local: "",
+ remote: ""
+ };
+ this.branch = {
+ local: "",
+ remote: ""
+ };
+ this.message = "";
+ }
+ toString() {
+ return this.message;
+ }
+ };
+ }
+});
+function objectEnumerationResult(remoteMessages) {
+ return remoteMessages.objects = remoteMessages.objects || {
+ compressing: 0,
+ counting: 0,
+ enumerating: 0,
+ packReused: 0,
+ reused: { count: 0, delta: 0 },
+ total: { count: 0, delta: 0 }
+ };
+}
+function asObjectCount(source) {
+ const count = /^\s*(\d+)/.exec(source);
+ const delta = /delta (\d+)/i.exec(source);
+ return {
+ count: asNumber(count && count[1] || "0"),
+ delta: asNumber(delta && delta[1] || "0")
+ };
+}
+var remoteMessagesObjectParsers;
+var init_parse_remote_objects = __esm({
+ "src/lib/parsers/parse-remote-objects.ts"() {
+ init_utils();
+ remoteMessagesObjectParsers = [
+ new RemoteLineParser(/^remote:\s*(enumerating|counting|compressing) objects: (\d+),/i, (result, [action, count]) => {
+ const key2 = action.toLowerCase();
+ const enumeration = objectEnumerationResult(result.remoteMessages);
+ Object.assign(enumeration, { [key2]: asNumber(count) });
+ }),
+ new RemoteLineParser(/^remote:\s*(enumerating|counting|compressing) objects: \d+% \(\d+\/(\d+)\),/i, (result, [action, count]) => {
+ const key2 = action.toLowerCase();
+ const enumeration = objectEnumerationResult(result.remoteMessages);
+ Object.assign(enumeration, { [key2]: asNumber(count) });
+ }),
+ new RemoteLineParser(/total ([^,]+), reused ([^,]+), pack-reused (\d+)/i, (result, [total, reused, packReused]) => {
+ const objects = objectEnumerationResult(result.remoteMessages);
+ objects.total = asObjectCount(total);
+ objects.reused = asObjectCount(reused);
+ objects.packReused = asNumber(packReused);
+ })
+ ];
+ }
+});
+function parseRemoteMessages(_stdOut, stdErr) {
+ return parseStringResponse({ remoteMessages: new RemoteMessageSummary() }, parsers2, stdErr);
+}
+var parsers2;
+var RemoteMessageSummary;
+var init_parse_remote_messages = __esm({
+ "src/lib/parsers/parse-remote-messages.ts"() {
+ init_utils();
+ init_parse_remote_objects();
+ parsers2 = [
+ new RemoteLineParser(/^remote:\s*(.+)$/, (result, [text2]) => {
+ result.remoteMessages.all.push(text2.trim());
+ return false;
+ }),
+ ...remoteMessagesObjectParsers,
+ new RemoteLineParser([/create a (?:pull|merge) request/i, /\s(https?:\/\/\S+)$/], (result, [pullRequestUrl]) => {
+ result.remoteMessages.pullRequestUrl = pullRequestUrl;
+ }),
+ new RemoteLineParser([/found (\d+) vulnerabilities.+\(([^)]+)\)/i, /\s(https?:\/\/\S+)$/], (result, [count, summary, url]) => {
+ result.remoteMessages.vulnerabilities = {
+ count: asNumber(count),
+ summary,
+ url
+ };
+ })
+ ];
+ RemoteMessageSummary = class {
+ constructor() {
+ this.all = [];
+ }
+ };
+ }
+});
+function parsePullErrorResult(stdOut, stdErr) {
+ const pullError = parseStringResponse(new PullFailedSummary(), errorParsers, [stdOut, stdErr]);
+ return pullError.message && pullError;
+}
+var FILE_UPDATE_REGEX;
+var SUMMARY_REGEX;
+var ACTION_REGEX;
+var parsers3;
+var errorParsers;
+var parsePullDetail;
+var parsePullResult;
+var init_parse_pull = __esm({
+ "src/lib/parsers/parse-pull.ts"() {
+ init_PullSummary();
+ init_utils();
+ init_parse_remote_messages();
+ FILE_UPDATE_REGEX = /^\s*(.+?)\s+\|\s+\d+\s*(\+*)(-*)/;
+ SUMMARY_REGEX = /(\d+)\D+((\d+)\D+\(\+\))?(\D+(\d+)\D+\(-\))?/;
+ ACTION_REGEX = /^(create|delete) mode \d+ (.+)/;
+ parsers3 = [
+ new LineParser(FILE_UPDATE_REGEX, (result, [file, insertions, deletions]) => {
+ result.files.push(file);
+ if (insertions) {
+ result.insertions[file] = insertions.length;
+ }
+ if (deletions) {
+ result.deletions[file] = deletions.length;
+ }
+ }),
+ new LineParser(SUMMARY_REGEX, (result, [changes, , insertions, , deletions]) => {
+ if (insertions !== void 0 || deletions !== void 0) {
+ result.summary.changes = +changes || 0;
+ result.summary.insertions = +insertions || 0;
+ result.summary.deletions = +deletions || 0;
+ return true;
+ }
+ return false;
+ }),
+ new LineParser(ACTION_REGEX, (result, [action, file]) => {
+ append(result.files, file);
+ append(action === "create" ? result.created : result.deleted, file);
+ })
+ ];
+ errorParsers = [
+ new LineParser(/^from\s(.+)$/i, (result, [remote]) => void (result.remote = remote)),
+ new LineParser(/^fatal:\s(.+)$/, (result, [message]) => void (result.message = message)),
+ new LineParser(/([a-z0-9]+)\.\.([a-z0-9]+)\s+(\S+)\s+->\s+(\S+)$/, (result, [hashLocal, hashRemote, branchLocal, branchRemote]) => {
+ result.branch.local = branchLocal;
+ result.hash.local = hashLocal;
+ result.branch.remote = branchRemote;
+ result.hash.remote = hashRemote;
+ })
+ ];
+ parsePullDetail = (stdOut, stdErr) => {
+ return parseStringResponse(new PullSummary(), parsers3, [stdOut, stdErr]);
+ };
+ parsePullResult = (stdOut, stdErr) => {
+ return Object.assign(new PullSummary(), parsePullDetail(stdOut, stdErr), parseRemoteMessages(stdOut, stdErr));
+ };
+ }
+});
+var parsers4;
+var parseMergeResult;
+var parseMergeDetail;
+var init_parse_merge = __esm({
+ "src/lib/parsers/parse-merge.ts"() {
+ init_MergeSummary();
+ init_utils();
+ init_parse_pull();
+ parsers4 = [
+ new LineParser(/^Auto-merging\s+(.+)$/, (summary, [autoMerge]) => {
+ summary.merges.push(autoMerge);
+ }),
+ new LineParser(/^CONFLICT\s+\((.+)\): Merge conflict in (.+)$/, (summary, [reason, file]) => {
+ summary.conflicts.push(new MergeSummaryConflict(reason, file));
+ }),
+ new LineParser(/^CONFLICT\s+\((.+\/delete)\): (.+) deleted in (.+) and/, (summary, [reason, file, deleteRef]) => {
+ summary.conflicts.push(new MergeSummaryConflict(reason, file, { deleteRef }));
+ }),
+ new LineParser(/^CONFLICT\s+\((.+)\):/, (summary, [reason]) => {
+ summary.conflicts.push(new MergeSummaryConflict(reason, null));
+ }),
+ new LineParser(/^Automatic merge failed;\s+(.+)$/, (summary, [result]) => {
+ summary.result = result;
+ })
+ ];
+ parseMergeResult = (stdOut, stdErr) => {
+ return Object.assign(parseMergeDetail(stdOut, stdErr), parsePullResult(stdOut, stdErr));
+ };
+ parseMergeDetail = (stdOut) => {
+ return parseStringResponse(new MergeSummaryDetail(), parsers4, stdOut);
+ };
+ }
+});
+function mergeTask(customArgs) {
+ if (!customArgs.length) {
+ return configurationErrorTask("Git.merge requires at least one option");
+ }
+ return {
+ commands: ["merge", ...customArgs],
+ format: "utf-8",
+ parser(stdOut, stdErr) {
+ const merge = parseMergeResult(stdOut, stdErr);
+ if (merge.failed) {
+ throw new GitResponseError(merge);
+ }
+ return merge;
+ }
+ };
+}
+var init_merge = __esm({
+ "src/lib/tasks/merge.ts"() {
+ init_git_response_error();
+ init_parse_merge();
+ init_task();
+ }
+});
+function pushResultPushedItem(local, remote, status) {
+ const deleted = status.includes("deleted");
+ const tag = status.includes("tag") || /^refs\/tags/.test(local);
+ const alreadyUpdated = !status.includes("new");
+ return {
+ deleted,
+ tag,
+ branch: !tag,
+ new: !alreadyUpdated,
+ alreadyUpdated,
+ local,
+ remote
+ };
+}
+var parsers5;
+var parsePushResult;
+var parsePushDetail;
+var init_parse_push = __esm({
+ "src/lib/parsers/parse-push.ts"() {
+ init_utils();
+ init_parse_remote_messages();
+ parsers5 = [
+ new LineParser(/^Pushing to (.+)$/, (result, [repo]) => {
+ result.repo = repo;
+ }),
+ new LineParser(/^updating local tracking ref '(.+)'/, (result, [local]) => {
+ result.ref = __spreadProps2(__spreadValues2({}, result.ref || {}), {
+ local
+ });
+ }),
+ new LineParser(/^[*-=]\s+([^:]+):(\S+)\s+\[(.+)]$/, (result, [local, remote, type]) => {
+ result.pushed.push(pushResultPushedItem(local, remote, type));
+ }),
+ new LineParser(/^Branch '([^']+)' set up to track remote branch '([^']+)' from '([^']+)'/, (result, [local, remote, remoteName]) => {
+ result.branch = __spreadProps2(__spreadValues2({}, result.branch || {}), {
+ local,
+ remote,
+ remoteName
+ });
+ }),
+ new LineParser(/^([^:]+):(\S+)\s+([a-z0-9]+)\.\.([a-z0-9]+)$/, (result, [local, remote, from, to]) => {
+ result.update = {
+ head: {
+ local,
+ remote
+ },
+ hash: {
+ from,
+ to
+ }
+ };
+ })
+ ];
+ parsePushResult = (stdOut, stdErr) => {
+ const pushDetail = parsePushDetail(stdOut, stdErr);
+ const responseDetail = parseRemoteMessages(stdOut, stdErr);
+ return __spreadValues2(__spreadValues2({}, pushDetail), responseDetail);
+ };
+ parsePushDetail = (stdOut, stdErr) => {
+ return parseStringResponse({ pushed: [] }, parsers5, [stdOut, stdErr]);
+ };
+ }
+});
+var push_exports = {};
+__export2(push_exports, {
+ pushTagsTask: () => pushTagsTask,
+ pushTask: () => pushTask
+});
+function pushTagsTask(ref = {}, customArgs) {
+ append(customArgs, "--tags");
+ return pushTask(ref, customArgs);
+}
+function pushTask(ref = {}, customArgs) {
+ const commands = ["push", ...customArgs];
+ if (ref.branch) {
+ commands.splice(1, 0, ref.branch);
+ }
+ if (ref.remote) {
+ commands.splice(1, 0, ref.remote);
+ }
+ remove(commands, "-v");
+ append(commands, "--verbose");
+ append(commands, "--porcelain");
+ return {
+ commands,
+ format: "utf-8",
+ parser: parsePushResult
+ };
+}
+var init_push = __esm({
+ "src/lib/tasks/push.ts"() {
+ init_parse_push();
+ init_utils();
+ }
+});
+var fromPathRegex;
+var FileStatusSummary;
+var init_FileStatusSummary = __esm({
+ "src/lib/responses/FileStatusSummary.ts"() {
+ fromPathRegex = /^(.+) -> (.+)$/;
+ FileStatusSummary = class {
+ constructor(path3, index, working_dir) {
+ this.path = path3;
+ this.index = index;
+ this.working_dir = working_dir;
+ if (index + working_dir === "R") {
+ const detail = fromPathRegex.exec(path3) || [null, path3, path3];
+ this.from = detail[1] || "";
+ this.path = detail[2] || "";
+ }
+ }
+ };
+ }
+});
+function renamedFile(line) {
+ const [to, from] = line.split(NULL);
+ return {
+ from: from || to,
+ to
+ };
+}
+function parser2(indexX, indexY, handler) {
+ return [`${indexX}${indexY}`, handler];
+}
+function conflicts(indexX, ...indexY) {
+ return indexY.map((y) => parser2(indexX, y, (result, file) => append(result.conflicted, file)));
+}
+function splitLine(result, lineStr) {
+ const trimmed2 = lineStr.trim();
+ switch (" ") {
+ case trimmed2.charAt(2):
+ return data(trimmed2.charAt(0), trimmed2.charAt(1), trimmed2.substr(3));
+ case trimmed2.charAt(1):
+ return data(" ", trimmed2.charAt(0), trimmed2.substr(2));
+ default:
+ return;
+ }
+ function data(index, workingDir, path3) {
+ const raw = `${index}${workingDir}`;
+ const handler = parsers6.get(raw);
+ if (handler) {
+ handler(result, path3);
+ }
+ if (raw !== "##" && raw !== "!!") {
+ result.files.push(new FileStatusSummary(path3.replace(/\0.+$/, ""), index, workingDir));
+ }
+ }
+}
+var StatusSummary;
+var parsers6;
+var parseStatusSummary;
+var init_StatusSummary = __esm({
+ "src/lib/responses/StatusSummary.ts"() {
+ init_utils();
+ init_FileStatusSummary();
+ StatusSummary = class {
+ constructor() {
+ this.not_added = [];
+ this.conflicted = [];
+ this.created = [];
+ this.deleted = [];
+ this.ignored = void 0;
+ this.modified = [];
+ this.renamed = [];
+ this.files = [];
+ this.staged = [];
+ this.ahead = 0;
+ this.behind = 0;
+ this.current = null;
+ this.tracking = null;
+ this.detached = false;
+ this.isClean = () => {
+ return !this.files.length;
+ };
+ }
+ };
+ parsers6 = new Map([
+ parser2(" ", "A", (result, file) => append(result.created, file)),
+ parser2(" ", "D", (result, file) => append(result.deleted, file)),
+ parser2(" ", "M", (result, file) => append(result.modified, file)),
+ parser2("A", " ", (result, file) => append(result.created, file) && append(result.staged, file)),
+ parser2("A", "M", (result, file) => append(result.created, file) && append(result.staged, file) && append(result.modified, file)),
+ parser2("D", " ", (result, file) => append(result.deleted, file) && append(result.staged, file)),
+ parser2("M", " ", (result, file) => append(result.modified, file) && append(result.staged, file)),
+ parser2("M", "M", (result, file) => append(result.modified, file) && append(result.staged, file)),
+ parser2("R", " ", (result, file) => {
+ append(result.renamed, renamedFile(file));
+ }),
+ parser2("R", "M", (result, file) => {
+ const renamed = renamedFile(file);
+ append(result.renamed, renamed);
+ append(result.modified, renamed.to);
+ }),
+ parser2("!", "!", (_result, _file) => {
+ append(_result.ignored = _result.ignored || [], _file);
+ }),
+ parser2("?", "?", (result, file) => append(result.not_added, file)),
+ ...conflicts("A", "A", "U"),
+ ...conflicts("D", "D", "U"),
+ ...conflicts("U", "A", "D", "U"),
+ ["##", (result, line) => {
+ const aheadReg = /ahead (\d+)/;
+ const behindReg = /behind (\d+)/;
+ const currentReg = /^(.+?(?=(?:\.{3}|\s|$)))/;
+ const trackingReg = /\.{3}(\S*)/;
+ const onEmptyBranchReg = /\son\s([\S]+)$/;
+ let regexResult;
+ regexResult = aheadReg.exec(line);
+ result.ahead = regexResult && +regexResult[1] || 0;
+ regexResult = behindReg.exec(line);
+ result.behind = regexResult && +regexResult[1] || 0;
+ regexResult = currentReg.exec(line);
+ result.current = regexResult && regexResult[1];
+ regexResult = trackingReg.exec(line);
+ result.tracking = regexResult && regexResult[1];
+ regexResult = onEmptyBranchReg.exec(line);
+ result.current = regexResult && regexResult[1] || result.current;
+ result.detached = /\(no branch\)/.test(line);
+ }]
+ ]);
+ parseStatusSummary = function(text2) {
+ const lines = text2.split(NULL);
+ const status = new StatusSummary();
+ for (let i = 0, l = lines.length; i < l; ) {
+ let line = lines[i++].trim();
+ if (!line) {
+ continue;
+ }
+ if (line.charAt(0) === "R") {
+ line += NULL + (lines[i++] || "");
+ }
+ splitLine(status, line);
+ }
+ return status;
+ };
+ }
+});
+function statusTask(customArgs) {
+ const commands = [
+ "status",
+ "--porcelain",
+ "-b",
+ "-u",
+ "--null",
+ ...customArgs.filter((arg) => !ignoredOptions.includes(arg))
+ ];
+ return {
+ format: "utf-8",
+ commands,
+ parser(text2) {
+ return parseStatusSummary(text2);
+ }
+ };
+}
+var ignoredOptions;
+var init_status = __esm({
+ "src/lib/tasks/status.ts"() {
+ init_StatusSummary();
+ ignoredOptions = ["--null", "-z"];
+ }
+});
+var simple_git_api_exports = {};
+__export2(simple_git_api_exports, {
+ SimpleGitApi: () => SimpleGitApi
+});
+var SimpleGitApi;
+var init_simple_git_api = __esm({
+ "src/lib/simple-git-api.ts"() {
+ init_task_callback();
+ init_change_working_directory();
+ init_commit();
+ init_config();
+ init_grep();
+ init_hash_object();
+ init_init();
+ init_log();
+ init_merge();
+ init_push();
+ init_status();
+ init_task();
+ init_utils();
+ SimpleGitApi = class {
+ constructor(_executor) {
+ this._executor = _executor;
+ }
+ _runTask(task, then) {
+ const chain = this._executor.chain();
+ const promise2 = chain.push(task);
+ if (then) {
+ taskCallback(task, promise2, then);
+ }
+ return Object.create(this, {
+ then: { value: promise2.then.bind(promise2) },
+ catch: { value: promise2.catch.bind(promise2) },
+ _executor: { value: chain }
+ });
+ }
+ add(files) {
+ return this._runTask(straightThroughStringTask(["add", ...asArray(files)]), trailingFunctionArgument(arguments));
+ }
+ cwd(directory) {
+ const next = trailingFunctionArgument(arguments);
+ if (typeof directory === "string") {
+ return this._runTask(changeWorkingDirectoryTask(directory, this._executor), next);
+ }
+ if (typeof (directory == null ? void 0 : directory.path) === "string") {
+ return this._runTask(changeWorkingDirectoryTask(directory.path, directory.root && this._executor || void 0), next);
+ }
+ return this._runTask(configurationErrorTask("Git.cwd: workingDirectory must be supplied as a string"), next);
+ }
+ hashObject(path3, write) {
+ return this._runTask(hashObjectTask(path3, write === true), trailingFunctionArgument(arguments));
+ }
+ init(bare) {
+ return this._runTask(initTask(bare === true, this._executor.cwd, getTrailingOptions(arguments)), trailingFunctionArgument(arguments));
+ }
+ merge() {
+ return this._runTask(mergeTask(getTrailingOptions(arguments)), trailingFunctionArgument(arguments));
+ }
+ mergeFromTo(remote, branch) {
+ if (!(filterString(remote) && filterString(branch))) {
+ return this._runTask(configurationErrorTask(`Git.mergeFromTo requires that the 'remote' and 'branch' arguments are supplied as strings`));
+ }
+ return this._runTask(mergeTask([remote, branch, ...getTrailingOptions(arguments)]), trailingFunctionArgument(arguments, false));
+ }
+ outputHandler(handler) {
+ this._executor.outputHandler = handler;
+ return this;
+ }
+ push() {
+ const task = pushTask({
+ remote: filterType(arguments[0], filterString),
+ branch: filterType(arguments[1], filterString)
+ }, getTrailingOptions(arguments));
+ return this._runTask(task, trailingFunctionArgument(arguments));
+ }
+ stash() {
+ return this._runTask(straightThroughStringTask(["stash", ...getTrailingOptions(arguments)]), trailingFunctionArgument(arguments));
+ }
+ status() {
+ return this._runTask(statusTask(getTrailingOptions(arguments)), trailingFunctionArgument(arguments));
+ }
+ };
+ Object.assign(SimpleGitApi.prototype, commit_default(), config_default(), grep_default(), log_default());
+ }
+});
+var scheduler_exports = {};
+__export2(scheduler_exports, {
+ Scheduler: () => Scheduler
+});
+var createScheduledTask;
+var Scheduler;
+var init_scheduler = __esm({
+ "src/lib/runners/scheduler.ts"() {
+ init_utils();
+ init_git_logger();
+ createScheduledTask = (() => {
+ let id = 0;
+ return () => {
+ id++;
+ const { promise: promise2, done } = (0, import_promise_deferred.createDeferred)();
+ return {
+ promise: promise2,
+ done,
+ id
+ };
+ };
+ })();
+ Scheduler = class {
+ constructor(concurrency = 2) {
+ this.concurrency = concurrency;
+ this.logger = createLogger("", "scheduler");
+ this.pending = [];
+ this.running = [];
+ this.logger(`Constructed, concurrency=%s`, concurrency);
+ }
+ schedule() {
+ if (!this.pending.length || this.running.length >= this.concurrency) {
+ this.logger(`Schedule attempt ignored, pending=%s running=%s concurrency=%s`, this.pending.length, this.running.length, this.concurrency);
+ return;
+ }
+ const task = append(this.running, this.pending.shift());
+ this.logger(`Attempting id=%s`, task.id);
+ task.done(() => {
+ this.logger(`Completing id=`, task.id);
+ remove(this.running, task);
+ this.schedule();
+ });
+ }
+ next() {
+ const { promise: promise2, id } = append(this.pending, createScheduledTask());
+ this.logger(`Scheduling id=%s`, id);
+ this.schedule();
+ return promise2;
+ }
+ };
+ }
+});
+var apply_patch_exports = {};
+__export2(apply_patch_exports, {
+ applyPatchTask: () => applyPatchTask
+});
+function applyPatchTask(patches, customArgs) {
+ return straightThroughStringTask(["apply", ...customArgs, ...patches]);
+}
+var init_apply_patch = __esm({
+ "src/lib/tasks/apply-patch.ts"() {
+ init_task();
+ }
+});
+function branchDeletionSuccess(branch, hash2) {
+ return {
+ branch,
+ hash: hash2,
+ success: true
+ };
+}
+function branchDeletionFailure(branch) {
+ return {
+ branch,
+ hash: null,
+ success: false
+ };
+}
+var BranchDeletionBatch;
+var init_BranchDeleteSummary = __esm({
+ "src/lib/responses/BranchDeleteSummary.ts"() {
+ BranchDeletionBatch = class {
+ constructor() {
+ this.all = [];
+ this.branches = {};
+ this.errors = [];
+ }
+ get success() {
+ return !this.errors.length;
+ }
+ };
+ }
+});
+function hasBranchDeletionError(data, processExitCode) {
+ return processExitCode === 1 && deleteErrorRegex.test(data);
+}
+var deleteSuccessRegex;
+var deleteErrorRegex;
+var parsers7;
+var parseBranchDeletions;
+var init_parse_branch_delete = __esm({
+ "src/lib/parsers/parse-branch-delete.ts"() {
+ init_BranchDeleteSummary();
+ init_utils();
+ deleteSuccessRegex = /(\S+)\s+\(\S+\s([^)]+)\)/;
+ deleteErrorRegex = /^error[^']+'([^']+)'/m;
+ parsers7 = [
+ new LineParser(deleteSuccessRegex, (result, [branch, hash2]) => {
+ const deletion = branchDeletionSuccess(branch, hash2);
+ result.all.push(deletion);
+ result.branches[branch] = deletion;
+ }),
+ new LineParser(deleteErrorRegex, (result, [branch]) => {
+ const deletion = branchDeletionFailure(branch);
+ result.errors.push(deletion);
+ result.all.push(deletion);
+ result.branches[branch] = deletion;
+ })
+ ];
+ parseBranchDeletions = (stdOut, stdErr) => {
+ return parseStringResponse(new BranchDeletionBatch(), parsers7, [stdOut, stdErr]);
+ };
+ }
+});
+var BranchSummaryResult;
+var init_BranchSummary = __esm({
+ "src/lib/responses/BranchSummary.ts"() {
+ BranchSummaryResult = class {
+ constructor() {
+ this.all = [];
+ this.branches = {};
+ this.current = "";
+ this.detached = false;
+ }
+ push(status, detached, name, commit, label) {
+ if (status === "*") {
+ this.detached = detached;
+ this.current = name;
+ }
+ this.all.push(name);
+ this.branches[name] = {
+ current: status === "*",
+ linkedWorkTree: status === "+",
+ name,
+ commit,
+ label
+ };
+ }
+ };
+ }
+});
+function branchStatus(input) {
+ return input ? input.charAt(0) : "";
+}
+function parseBranchSummary(stdOut) {
+ return parseStringResponse(new BranchSummaryResult(), parsers8, stdOut);
+}
+var parsers8;
+var init_parse_branch = __esm({
+ "src/lib/parsers/parse-branch.ts"() {
+ init_BranchSummary();
+ init_utils();
+ parsers8 = [
+ new LineParser(/^([*+]\s)?\((?:HEAD )?detached (?:from|at) (\S+)\)\s+([a-z0-9]+)\s(.*)$/, (result, [current, name, commit, label]) => {
+ result.push(branchStatus(current), true, name, commit, label);
+ }),
+ new LineParser(/^([*+]\s)?(\S+)\s+([a-z0-9]+)\s?(.*)$/s, (result, [current, name, commit, label]) => {
+ result.push(branchStatus(current), false, name, commit, label);
+ })
+ ];
+ }
+});
+var branch_exports = {};
+__export2(branch_exports, {
+ branchLocalTask: () => branchLocalTask,
+ branchTask: () => branchTask,
+ containsDeleteBranchCommand: () => containsDeleteBranchCommand,
+ deleteBranchTask: () => deleteBranchTask,
+ deleteBranchesTask: () => deleteBranchesTask
+});
+function containsDeleteBranchCommand(commands) {
+ const deleteCommands = ["-d", "-D", "--delete"];
+ return commands.some((command) => deleteCommands.includes(command));
+}
+function branchTask(customArgs) {
+ const isDelete = containsDeleteBranchCommand(customArgs);
+ const commands = ["branch", ...customArgs];
+ if (commands.length === 1) {
+ commands.push("-a");
+ }
+ if (!commands.includes("-v")) {
+ commands.splice(1, 0, "-v");
+ }
+ return {
+ format: "utf-8",
+ commands,
+ parser(stdOut, stdErr) {
+ if (isDelete) {
+ return parseBranchDeletions(stdOut, stdErr).all[0];
+ }
+ return parseBranchSummary(stdOut);
+ }
+ };
+}
+function branchLocalTask() {
+ const parser3 = parseBranchSummary;
+ return {
+ format: "utf-8",
+ commands: ["branch", "-v"],
+ parser: parser3
+ };
+}
+function deleteBranchesTask(branches, forceDelete = false) {
+ return {
+ format: "utf-8",
+ commands: ["branch", "-v", forceDelete ? "-D" : "-d", ...branches],
+ parser(stdOut, stdErr) {
+ return parseBranchDeletions(stdOut, stdErr);
+ },
+ onError({ exitCode, stdOut }, error, done, fail) {
+ if (!hasBranchDeletionError(String(error), exitCode)) {
+ return fail(error);
+ }
+ done(stdOut);
+ }
+ };
+}
+function deleteBranchTask(branch, forceDelete = false) {
+ const task = {
+ format: "utf-8",
+ commands: ["branch", "-v", forceDelete ? "-D" : "-d", branch],
+ parser(stdOut, stdErr) {
+ return parseBranchDeletions(stdOut, stdErr).branches[branch];
+ },
+ onError({ exitCode, stdErr, stdOut }, error, _, fail) {
+ if (!hasBranchDeletionError(String(error), exitCode)) {
+ return fail(error);
+ }
+ throw new GitResponseError(task.parser(bufferToString(stdOut), bufferToString(stdErr)), String(error));
+ }
+ };
+ return task;
+}
+var init_branch = __esm({
+ "src/lib/tasks/branch.ts"() {
+ init_git_response_error();
+ init_parse_branch_delete();
+ init_parse_branch();
+ init_utils();
+ }
+});
+var parseCheckIgnore;
+var init_CheckIgnore = __esm({
+ "src/lib/responses/CheckIgnore.ts"() {
+ parseCheckIgnore = (text2) => {
+ return text2.split(/\n/g).map((line) => line.trim()).filter((file) => !!file);
+ };
+ }
+});
+var check_ignore_exports = {};
+__export2(check_ignore_exports, {
+ checkIgnoreTask: () => checkIgnoreTask
+});
+function checkIgnoreTask(paths) {
+ return {
+ commands: ["check-ignore", ...paths],
+ format: "utf-8",
+ parser: parseCheckIgnore
+ };
+}
+var init_check_ignore = __esm({
+ "src/lib/tasks/check-ignore.ts"() {
+ init_CheckIgnore();
+ }
+});
+var clone_exports = {};
+__export2(clone_exports, {
+ cloneMirrorTask: () => cloneMirrorTask,
+ cloneTask: () => cloneTask
+});
+function disallowedCommand(command) {
+ return /^--upload-pack(=|$)/.test(command);
+}
+function cloneTask(repo, directory, customArgs) {
+ const commands = ["clone", ...customArgs];
+ filterString(repo) && commands.push(repo);
+ filterString(directory) && commands.push(directory);
+ const banned = commands.find(disallowedCommand);
+ if (banned) {
+ return configurationErrorTask(`git.fetch: potential exploit argument blocked.`);
+ }
+ return straightThroughStringTask(commands);
+}
+function cloneMirrorTask(repo, directory, customArgs) {
+ append(customArgs, "--mirror");
+ return cloneTask(repo, directory, customArgs);
+}
+var init_clone = __esm({
+ "src/lib/tasks/clone.ts"() {
+ init_task();
+ init_utils();
+ }
+});
+function parseFetchResult(stdOut, stdErr) {
+ const result = {
+ raw: stdOut,
+ remote: null,
+ branches: [],
+ tags: []
+ };
+ return parseStringResponse(result, parsers9, [stdOut, stdErr]);
+}
+var parsers9;
+var init_parse_fetch = __esm({
+ "src/lib/parsers/parse-fetch.ts"() {
+ init_utils();
+ parsers9 = [
+ new LineParser(/From (.+)$/, (result, [remote]) => {
+ result.remote = remote;
+ }),
+ new LineParser(/\* \[new branch]\s+(\S+)\s*-> (.+)$/, (result, [name, tracking]) => {
+ result.branches.push({
+ name,
+ tracking
+ });
+ }),
+ new LineParser(/\* \[new tag]\s+(\S+)\s*-> (.+)$/, (result, [name, tracking]) => {
+ result.tags.push({
+ name,
+ tracking
+ });
+ })
+ ];
+ }
+});
+var fetch_exports = {};
+__export2(fetch_exports, {
+ fetchTask: () => fetchTask
+});
+function disallowedCommand2(command) {
+ return /^--upload-pack(=|$)/.test(command);
+}
+function fetchTask(remote, branch, customArgs) {
+ const commands = ["fetch", ...customArgs];
+ if (remote && branch) {
+ commands.push(remote, branch);
+ }
+ const banned = commands.find(disallowedCommand2);
+ if (banned) {
+ return configurationErrorTask(`git.fetch: potential exploit argument blocked.`);
+ }
+ return {
+ commands,
+ format: "utf-8",
+ parser: parseFetchResult
+ };
+}
+var init_fetch = __esm({
+ "src/lib/tasks/fetch.ts"() {
+ init_parse_fetch();
+ init_task();
+ }
+});
+function parseMoveResult(stdOut) {
+ return parseStringResponse({ moves: [] }, parsers10, stdOut);
+}
+var parsers10;
+var init_parse_move = __esm({
+ "src/lib/parsers/parse-move.ts"() {
+ init_utils();
+ parsers10 = [
+ new LineParser(/^Renaming (.+) to (.+)$/, (result, [from, to]) => {
+ result.moves.push({ from, to });
+ })
+ ];
+ }
+});
+var move_exports = {};
+__export2(move_exports, {
+ moveTask: () => moveTask
+});
+function moveTask(from, to) {
+ return {
+ commands: ["mv", "-v", ...asArray(from), to],
+ format: "utf-8",
+ parser: parseMoveResult
+ };
+}
+var init_move = __esm({
+ "src/lib/tasks/move.ts"() {
+ init_parse_move();
+ init_utils();
+ }
+});
+var pull_exports = {};
+__export2(pull_exports, {
+ pullTask: () => pullTask
+});
+function pullTask(remote, branch, customArgs) {
+ const commands = ["pull", ...customArgs];
+ if (remote && branch) {
+ commands.splice(1, 0, remote, branch);
+ }
+ return {
+ commands,
+ format: "utf-8",
+ parser(stdOut, stdErr) {
+ return parsePullResult(stdOut, stdErr);
+ },
+ onError(result, _error, _done, fail) {
+ const pullError = parsePullErrorResult(bufferToString(result.stdOut), bufferToString(result.stdErr));
+ if (pullError) {
+ return fail(new GitResponseError(pullError));
+ }
+ fail(_error);
+ }
+ };
+}
+var init_pull = __esm({
+ "src/lib/tasks/pull.ts"() {
+ init_git_response_error();
+ init_parse_pull();
+ init_utils();
+ }
+});
+function parseGetRemotes(text2) {
+ const remotes = {};
+ forEach(text2, ([name]) => remotes[name] = { name });
+ return Object.values(remotes);
+}
+function parseGetRemotesVerbose(text2) {
+ const remotes = {};
+ forEach(text2, ([name, url, purpose]) => {
+ if (!remotes.hasOwnProperty(name)) {
+ remotes[name] = {
+ name,
+ refs: { fetch: "", push: "" }
+ };
+ }
+ if (purpose && url) {
+ remotes[name].refs[purpose.replace(/[^a-z]/g, "")] = url;
+ }
+ });
+ return Object.values(remotes);
+}
+function forEach(text2, handler) {
+ forEachLineWithContent(text2, (line) => handler(line.split(/\s+/)));
+}
+var init_GetRemoteSummary = __esm({
+ "src/lib/responses/GetRemoteSummary.ts"() {
+ init_utils();
+ }
+});
+var remote_exports = {};
+__export2(remote_exports, {
+ addRemoteTask: () => addRemoteTask,
+ getRemotesTask: () => getRemotesTask,
+ listRemotesTask: () => listRemotesTask,
+ remoteTask: () => remoteTask,
+ removeRemoteTask: () => removeRemoteTask
+});
+function addRemoteTask(remoteName, remoteRepo, customArgs = []) {
+ return straightThroughStringTask(["remote", "add", ...customArgs, remoteName, remoteRepo]);
+}
+function getRemotesTask(verbose) {
+ const commands = ["remote"];
+ if (verbose) {
+ commands.push("-v");
+ }
+ return {
+ commands,
+ format: "utf-8",
+ parser: verbose ? parseGetRemotesVerbose : parseGetRemotes
+ };
+}
+function listRemotesTask(customArgs = []) {
+ const commands = [...customArgs];
+ if (commands[0] !== "ls-remote") {
+ commands.unshift("ls-remote");
+ }
+ return straightThroughStringTask(commands);
+}
+function remoteTask(customArgs = []) {
+ const commands = [...customArgs];
+ if (commands[0] !== "remote") {
+ commands.unshift("remote");
+ }
+ return straightThroughStringTask(commands);
+}
+function removeRemoteTask(remoteName) {
+ return straightThroughStringTask(["remote", "remove", remoteName]);
+}
+var init_remote = __esm({
+ "src/lib/tasks/remote.ts"() {
+ init_GetRemoteSummary();
+ init_task();
+ }
+});
+var stash_list_exports = {};
+__export2(stash_list_exports, {
+ stashListTask: () => stashListTask
+});
+function stashListTask(opt = {}, customArgs) {
+ const options = parseLogOptions(opt);
+ const commands = ["stash", "list", ...options.commands, ...customArgs];
+ const parser3 = createListLogSummaryParser(options.splitter, options.fields, logFormatFromCommand(commands));
+ return validateLogFormatConfig(commands) || {
+ commands,
+ format: "utf-8",
+ parser: parser3
+ };
+}
+var init_stash_list = __esm({
+ "src/lib/tasks/stash-list.ts"() {
+ init_log_format();
+ init_parse_list_log_summary();
+ init_diff();
+ init_log();
+ }
+});
+var sub_module_exports = {};
+__export2(sub_module_exports, {
+ addSubModuleTask: () => addSubModuleTask,
+ initSubModuleTask: () => initSubModuleTask,
+ subModuleTask: () => subModuleTask,
+ updateSubModuleTask: () => updateSubModuleTask
+});
+function addSubModuleTask(repo, path3) {
+ return subModuleTask(["add", repo, path3]);
+}
+function initSubModuleTask(customArgs) {
+ return subModuleTask(["init", ...customArgs]);
+}
+function subModuleTask(customArgs) {
+ const commands = [...customArgs];
+ if (commands[0] !== "submodule") {
+ commands.unshift("submodule");
+ }
+ return straightThroughStringTask(commands);
+}
+function updateSubModuleTask(customArgs) {
+ return subModuleTask(["update", ...customArgs]);
+}
+var init_sub_module = __esm({
+ "src/lib/tasks/sub-module.ts"() {
+ init_task();
+ }
+});
+function singleSorted(a, b) {
+ const aIsNum = isNaN(a);
+ const bIsNum = isNaN(b);
+ if (aIsNum !== bIsNum) {
+ return aIsNum ? 1 : -1;
+ }
+ return aIsNum ? sorted(a, b) : 0;
+}
+function sorted(a, b) {
+ return a === b ? 0 : a > b ? 1 : -1;
+}
+function trimmed(input) {
+ return input.trim();
+}
+function toNumber(input) {
+ if (typeof input === "string") {
+ return parseInt(input.replace(/^\D+/g, ""), 10) || 0;
+ }
+ return 0;
+}
+var TagList;
+var parseTagList;
+var init_TagList = __esm({
+ "src/lib/responses/TagList.ts"() {
+ TagList = class {
+ constructor(all, latest) {
+ this.all = all;
+ this.latest = latest;
+ }
+ };
+ parseTagList = function(data, customSort = false) {
+ const tags = data.split("\n").map(trimmed).filter(Boolean);
+ if (!customSort) {
+ tags.sort(function(tagA, tagB) {
+ const partsA = tagA.split(".");
+ const partsB = tagB.split(".");
+ if (partsA.length === 1 || partsB.length === 1) {
+ return singleSorted(toNumber(partsA[0]), toNumber(partsB[0]));
+ }
+ for (let i = 0, l = Math.max(partsA.length, partsB.length); i < l; i++) {
+ const diff = sorted(toNumber(partsA[i]), toNumber(partsB[i]));
+ if (diff) {
+ return diff;
+ }
+ }
+ return 0;
+ });
+ }
+ const latest = customSort ? tags[0] : [...tags].reverse().find((tag) => tag.indexOf(".") >= 0);
+ return new TagList(tags, latest);
+ };
+ }
+});
+var tag_exports = {};
+__export2(tag_exports, {
+ addAnnotatedTagTask: () => addAnnotatedTagTask,
+ addTagTask: () => addTagTask,
+ tagListTask: () => tagListTask
+});
+function tagListTask(customArgs = []) {
+ const hasCustomSort = customArgs.some((option) => /^--sort=/.test(option));
+ return {
+ format: "utf-8",
+ commands: ["tag", "-l", ...customArgs],
+ parser(text2) {
+ return parseTagList(text2, hasCustomSort);
+ }
+ };
+}
+function addTagTask(name) {
+ return {
+ format: "utf-8",
+ commands: ["tag", name],
+ parser() {
+ return { name };
+ }
+ };
+}
+function addAnnotatedTagTask(name, tagMessage) {
+ return {
+ format: "utf-8",
+ commands: ["tag", "-a", "-m", tagMessage, name],
+ parser() {
+ return { name };
+ }
+ };
+}
+var init_tag = __esm({
+ "src/lib/tasks/tag.ts"() {
+ init_TagList();
+ }
+});
+var require_git = __commonJS2({
+ "src/git.js"(exports, module2) {
+ var { GitExecutor: GitExecutor2 } = (init_git_executor(), __toCommonJS(git_executor_exports));
+ var { SimpleGitApi: SimpleGitApi2 } = (init_simple_git_api(), __toCommonJS(simple_git_api_exports));
+ var { Scheduler: Scheduler2 } = (init_scheduler(), __toCommonJS(scheduler_exports));
+ var { configurationErrorTask: configurationErrorTask2 } = (init_task(), __toCommonJS(task_exports));
+ var {
+ asArray: asArray2,
+ filterArray: filterArray2,
+ filterPrimitives: filterPrimitives2,
+ filterString: filterString2,
+ filterStringOrStringArray: filterStringOrStringArray2,
+ filterType: filterType2,
+ getTrailingOptions: getTrailingOptions2,
+ trailingFunctionArgument: trailingFunctionArgument2,
+ trailingOptionsArgument: trailingOptionsArgument2
+ } = (init_utils(), __toCommonJS(utils_exports));
+ var { applyPatchTask: applyPatchTask2 } = (init_apply_patch(), __toCommonJS(apply_patch_exports));
+ var { branchTask: branchTask2, branchLocalTask: branchLocalTask2, deleteBranchesTask: deleteBranchesTask2, deleteBranchTask: deleteBranchTask2 } = (init_branch(), __toCommonJS(branch_exports));
+ var { checkIgnoreTask: checkIgnoreTask2 } = (init_check_ignore(), __toCommonJS(check_ignore_exports));
+ var { checkIsRepoTask: checkIsRepoTask2 } = (init_check_is_repo(), __toCommonJS(check_is_repo_exports));
+ var { cloneTask: cloneTask2, cloneMirrorTask: cloneMirrorTask2 } = (init_clone(), __toCommonJS(clone_exports));
+ var { cleanWithOptionsTask: cleanWithOptionsTask2, isCleanOptionsArray: isCleanOptionsArray2 } = (init_clean(), __toCommonJS(clean_exports));
+ var { commitTask: commitTask2 } = (init_commit(), __toCommonJS(commit_exports));
+ var { diffSummaryTask: diffSummaryTask2 } = (init_diff(), __toCommonJS(diff_exports));
+ var { fetchTask: fetchTask2 } = (init_fetch(), __toCommonJS(fetch_exports));
+ var { moveTask: moveTask2 } = (init_move(), __toCommonJS(move_exports));
+ var { pullTask: pullTask2 } = (init_pull(), __toCommonJS(pull_exports));
+ var { pushTagsTask: pushTagsTask2 } = (init_push(), __toCommonJS(push_exports));
+ var { addRemoteTask: addRemoteTask2, getRemotesTask: getRemotesTask2, listRemotesTask: listRemotesTask2, remoteTask: remoteTask2, removeRemoteTask: removeRemoteTask2 } = (init_remote(), __toCommonJS(remote_exports));
+ var { getResetMode: getResetMode2, resetTask: resetTask2 } = (init_reset(), __toCommonJS(reset_exports));
+ var { stashListTask: stashListTask2 } = (init_stash_list(), __toCommonJS(stash_list_exports));
+ var { addSubModuleTask: addSubModuleTask2, initSubModuleTask: initSubModuleTask2, subModuleTask: subModuleTask2, updateSubModuleTask: updateSubModuleTask2 } = (init_sub_module(), __toCommonJS(sub_module_exports));
+ var { addAnnotatedTagTask: addAnnotatedTagTask2, addTagTask: addTagTask2, tagListTask: tagListTask2 } = (init_tag(), __toCommonJS(tag_exports));
+ var { straightThroughBufferTask: straightThroughBufferTask2, straightThroughStringTask: straightThroughStringTask2 } = (init_task(), __toCommonJS(task_exports));
+ function Git2(options, plugins) {
+ this._executor = new GitExecutor2(options.binary, options.baseDir, new Scheduler2(options.maxConcurrentProcesses), plugins);
+ }
+ (Git2.prototype = Object.create(SimpleGitApi2.prototype)).constructor = Git2;
+ Git2.prototype.customBinary = function(command) {
+ this._executor.binary = command;
+ return this;
+ };
+ Git2.prototype.env = function(name, value) {
+ if (arguments.length === 1 && typeof name === "object") {
+ this._executor.env = name;
+ } else {
+ (this._executor.env = this._executor.env || {})[name] = value;
+ }
+ return this;
+ };
+ Git2.prototype.stashList = function(options) {
+ return this._runTask(stashListTask2(trailingOptionsArgument2(arguments) || {}, filterArray2(options) && options || []), trailingFunctionArgument2(arguments));
+ };
+ function createCloneTask(api, task, repoPath, localPath) {
+ if (typeof repoPath !== "string") {
+ return configurationErrorTask2(`git.${api}() requires a string 'repoPath'`);
+ }
+ return task(repoPath, filterType2(localPath, filterString2), getTrailingOptions2(arguments));
+ }
+ Git2.prototype.clone = function() {
+ return this._runTask(createCloneTask("clone", cloneTask2, ...arguments), trailingFunctionArgument2(arguments));
+ };
+ Git2.prototype.mirror = function() {
+ return this._runTask(createCloneTask("mirror", cloneMirrorTask2, ...arguments), trailingFunctionArgument2(arguments));
+ };
+ Git2.prototype.mv = function(from, to) {
+ return this._runTask(moveTask2(from, to), trailingFunctionArgument2(arguments));
+ };
+ Git2.prototype.checkoutLatestTag = function(then) {
+ var git = this;
+ return this.pull(function() {
+ git.tags(function(err, tags) {
+ git.checkout(tags.latest, then);
+ });
+ });
+ };
+ Git2.prototype.pull = function(remote, branch, options, then) {
+ return this._runTask(pullTask2(filterType2(remote, filterString2), filterType2(branch, filterString2), getTrailingOptions2(arguments)), trailingFunctionArgument2(arguments));
+ };
+ Git2.prototype.fetch = function(remote, branch) {
+ return this._runTask(fetchTask2(filterType2(remote, filterString2), filterType2(branch, filterString2), getTrailingOptions2(arguments)), trailingFunctionArgument2(arguments));
+ };
+ Git2.prototype.silent = function(silence) {
+ console.warn("simple-git deprecation notice: git.silent: logging should be configured using the `debug` library / `DEBUG` environment variable, this will be an error in version 3");
+ return this;
+ };
+ Git2.prototype.tags = function(options, then) {
+ return this._runTask(tagListTask2(getTrailingOptions2(arguments)), trailingFunctionArgument2(arguments));
+ };
+ Git2.prototype.rebase = function() {
+ return this._runTask(straightThroughStringTask2(["rebase", ...getTrailingOptions2(arguments)]), trailingFunctionArgument2(arguments));
+ };
+ Git2.prototype.reset = function(mode) {
+ return this._runTask(resetTask2(getResetMode2(mode), getTrailingOptions2(arguments)), trailingFunctionArgument2(arguments));
+ };
+ Git2.prototype.revert = function(commit) {
+ const next = trailingFunctionArgument2(arguments);
+ if (typeof commit !== "string") {
+ return this._runTask(configurationErrorTask2("Commit must be a string"), next);
+ }
+ return this._runTask(straightThroughStringTask2(["revert", ...getTrailingOptions2(arguments, 0, true), commit]), next);
+ };
+ Git2.prototype.addTag = function(name) {
+ const task = typeof name === "string" ? addTagTask2(name) : configurationErrorTask2("Git.addTag requires a tag name");
+ return this._runTask(task, trailingFunctionArgument2(arguments));
+ };
+ Git2.prototype.addAnnotatedTag = function(tagName, tagMessage) {
+ return this._runTask(addAnnotatedTagTask2(tagName, tagMessage), trailingFunctionArgument2(arguments));
+ };
+ Git2.prototype.checkout = function() {
+ const commands = ["checkout", ...getTrailingOptions2(arguments, true)];
+ return this._runTask(straightThroughStringTask2(commands), trailingFunctionArgument2(arguments));
+ };
+ Git2.prototype.checkoutBranch = function(branchName, startPoint, then) {
+ return this.checkout(["-b", branchName, startPoint], trailingFunctionArgument2(arguments));
+ };
+ Git2.prototype.checkoutLocalBranch = function(branchName, then) {
+ return this.checkout(["-b", branchName], trailingFunctionArgument2(arguments));
+ };
+ Git2.prototype.deleteLocalBranch = function(branchName, forceDelete, then) {
+ return this._runTask(deleteBranchTask2(branchName, typeof forceDelete === "boolean" ? forceDelete : false), trailingFunctionArgument2(arguments));
+ };
+ Git2.prototype.deleteLocalBranches = function(branchNames, forceDelete, then) {
+ return this._runTask(deleteBranchesTask2(branchNames, typeof forceDelete === "boolean" ? forceDelete : false), trailingFunctionArgument2(arguments));
+ };
+ Git2.prototype.branch = function(options, then) {
+ return this._runTask(branchTask2(getTrailingOptions2(arguments)), trailingFunctionArgument2(arguments));
+ };
+ Git2.prototype.branchLocal = function(then) {
+ return this._runTask(branchLocalTask2(), trailingFunctionArgument2(arguments));
+ };
+ Git2.prototype.raw = function(commands) {
+ const createRestCommands = !Array.isArray(commands);
+ const command = [].slice.call(createRestCommands ? arguments : commands, 0);
+ for (let i = 0; i < command.length && createRestCommands; i++) {
+ if (!filterPrimitives2(command[i])) {
+ command.splice(i, command.length - i);
+ break;
+ }
+ }
+ command.push(...getTrailingOptions2(arguments, 0, true));
+ var next = trailingFunctionArgument2(arguments);
+ if (!command.length) {
+ return this._runTask(configurationErrorTask2("Raw: must supply one or more command to execute"), next);
+ }
+ return this._runTask(straightThroughStringTask2(command), next);
+ };
+ Git2.prototype.submoduleAdd = function(repo, path3, then) {
+ return this._runTask(addSubModuleTask2(repo, path3), trailingFunctionArgument2(arguments));
+ };
+ Git2.prototype.submoduleUpdate = function(args, then) {
+ return this._runTask(updateSubModuleTask2(getTrailingOptions2(arguments, true)), trailingFunctionArgument2(arguments));
+ };
+ Git2.prototype.submoduleInit = function(args, then) {
+ return this._runTask(initSubModuleTask2(getTrailingOptions2(arguments, true)), trailingFunctionArgument2(arguments));
+ };
+ Git2.prototype.subModule = function(options, then) {
+ return this._runTask(subModuleTask2(getTrailingOptions2(arguments)), trailingFunctionArgument2(arguments));
+ };
+ Git2.prototype.listRemote = function() {
+ return this._runTask(listRemotesTask2(getTrailingOptions2(arguments)), trailingFunctionArgument2(arguments));
+ };
+ Git2.prototype.addRemote = function(remoteName, remoteRepo, then) {
+ return this._runTask(addRemoteTask2(remoteName, remoteRepo, getTrailingOptions2(arguments)), trailingFunctionArgument2(arguments));
+ };
+ Git2.prototype.removeRemote = function(remoteName, then) {
+ return this._runTask(removeRemoteTask2(remoteName), trailingFunctionArgument2(arguments));
+ };
+ Git2.prototype.getRemotes = function(verbose, then) {
+ return this._runTask(getRemotesTask2(verbose === true), trailingFunctionArgument2(arguments));
+ };
+ Git2.prototype.remote = function(options, then) {
+ return this._runTask(remoteTask2(getTrailingOptions2(arguments)), trailingFunctionArgument2(arguments));
+ };
+ Git2.prototype.tag = function(options, then) {
+ const command = getTrailingOptions2(arguments);
+ if (command[0] !== "tag") {
+ command.unshift("tag");
+ }
+ return this._runTask(straightThroughStringTask2(command), trailingFunctionArgument2(arguments));
+ };
+ Git2.prototype.updateServerInfo = function(then) {
+ return this._runTask(straightThroughStringTask2(["update-server-info"]), trailingFunctionArgument2(arguments));
+ };
+ Git2.prototype.pushTags = function(remote, then) {
+ const task = pushTagsTask2({ remote: filterType2(remote, filterString2) }, getTrailingOptions2(arguments));
+ return this._runTask(task, trailingFunctionArgument2(arguments));
+ };
+ Git2.prototype.rm = function(files) {
+ return this._runTask(straightThroughStringTask2(["rm", "-f", ...asArray2(files)]), trailingFunctionArgument2(arguments));
+ };
+ Git2.prototype.rmKeepLocal = function(files) {
+ return this._runTask(straightThroughStringTask2(["rm", "--cached", ...asArray2(files)]), trailingFunctionArgument2(arguments));
+ };
+ Git2.prototype.catFile = function(options, then) {
+ return this._catFile("utf-8", arguments);
+ };
+ Git2.prototype.binaryCatFile = function() {
+ return this._catFile("buffer", arguments);
+ };
+ Git2.prototype._catFile = function(format, args) {
+ var handler = trailingFunctionArgument2(args);
+ var command = ["cat-file"];
+ var options = args[0];
+ if (typeof options === "string") {
+ return this._runTask(configurationErrorTask2("Git.catFile: options must be supplied as an array of strings"), handler);
+ }
+ if (Array.isArray(options)) {
+ command.push.apply(command, options);
+ }
+ const task = format === "buffer" ? straightThroughBufferTask2(command) : straightThroughStringTask2(command);
+ return this._runTask(task, handler);
+ };
+ Git2.prototype.diff = function(options, then) {
+ const task = filterString2(options) ? configurationErrorTask2("git.diff: supplying options as a single string is no longer supported, switch to an array of strings") : straightThroughStringTask2(["diff", ...getTrailingOptions2(arguments)]);
+ return this._runTask(task, trailingFunctionArgument2(arguments));
+ };
+ Git2.prototype.diffSummary = function() {
+ return this._runTask(diffSummaryTask2(getTrailingOptions2(arguments, 1)), trailingFunctionArgument2(arguments));
+ };
+ Git2.prototype.applyPatch = function(patches) {
+ const task = !filterStringOrStringArray2(patches) ? configurationErrorTask2(`git.applyPatch requires one or more string patches as the first argument`) : applyPatchTask2(asArray2(patches), getTrailingOptions2([].slice.call(arguments, 1)));
+ return this._runTask(task, trailingFunctionArgument2(arguments));
+ };
+ Git2.prototype.revparse = function() {
+ const commands = ["rev-parse", ...getTrailingOptions2(arguments, true)];
+ return this._runTask(straightThroughStringTask2(commands, true), trailingFunctionArgument2(arguments));
+ };
+ Git2.prototype.show = function(options, then) {
+ return this._runTask(straightThroughStringTask2(["show", ...getTrailingOptions2(arguments, 1)]), trailingFunctionArgument2(arguments));
+ };
+ Git2.prototype.clean = function(mode, options, then) {
+ const usingCleanOptionsArray = isCleanOptionsArray2(mode);
+ const cleanMode = usingCleanOptionsArray && mode.join("") || filterType2(mode, filterString2) || "";
+ const customArgs = getTrailingOptions2([].slice.call(arguments, usingCleanOptionsArray ? 1 : 0));
+ return this._runTask(cleanWithOptionsTask2(cleanMode, customArgs), trailingFunctionArgument2(arguments));
+ };
+ Git2.prototype.exec = function(then) {
+ const task = {
+ commands: [],
+ format: "utf-8",
+ parser() {
+ if (typeof then === "function") {
+ then();
+ }
+ }
+ };
+ return this._runTask(task);
+ };
+ Git2.prototype.clearQueue = function() {
+ return this;
+ };
+ Git2.prototype.checkIgnore = function(pathnames, then) {
+ return this._runTask(checkIgnoreTask2(asArray2(filterType2(pathnames, filterStringOrStringArray2, []))), trailingFunctionArgument2(arguments));
+ };
+ Git2.prototype.checkIsRepo = function(checkType, then) {
+ return this._runTask(checkIsRepoTask2(filterType2(checkType, filterString2)), trailingFunctionArgument2(arguments));
+ };
+ module2.exports = Git2;
+ }
+});
+init_git_error();
+var GitConstructError = class extends GitError {
+ constructor(config, message) {
+ super(void 0, message);
+ this.config = config;
+ }
+};
+init_git_error();
+init_git_error();
+var GitPluginError = class extends GitError {
+ constructor(task, plugin, message) {
+ super(task, message);
+ this.task = task;
+ this.plugin = plugin;
+ Object.setPrototypeOf(this, new.target.prototype);
+ }
+};
+init_git_response_error();
+init_task_configuration_error();
+init_check_is_repo();
+init_clean();
+init_config();
+init_grep();
+init_reset();
+init_utils();
+function commandConfigPrefixingPlugin(configuration) {
+ const prefix = prefixedArray(configuration, "-c");
+ return {
+ type: "spawn.args",
+ action(data) {
+ return [...prefix, ...data];
+ }
+ };
+}
+init_utils();
+var never = (0, import_promise_deferred2.deferred)().promise;
+function completionDetectionPlugin({
+ onClose = true,
+ onExit = 50
+} = {}) {
+ function createEvents() {
+ let exitCode = -1;
+ const events = {
+ close: (0, import_promise_deferred2.deferred)(),
+ closeTimeout: (0, import_promise_deferred2.deferred)(),
+ exit: (0, import_promise_deferred2.deferred)(),
+ exitTimeout: (0, import_promise_deferred2.deferred)()
+ };
+ const result = Promise.race([
+ onClose === false ? never : events.closeTimeout.promise,
+ onExit === false ? never : events.exitTimeout.promise
+ ]);
+ configureTimeout(onClose, events.close, events.closeTimeout);
+ configureTimeout(onExit, events.exit, events.exitTimeout);
+ return {
+ close(code) {
+ exitCode = code;
+ events.close.done();
+ },
+ exit(code) {
+ exitCode = code;
+ events.exit.done();
+ },
+ get exitCode() {
+ return exitCode;
+ },
+ result
+ };
+ }
+ function configureTimeout(flag, event, timeout) {
+ if (flag === false) {
+ return;
+ }
+ (flag === true ? event.promise : event.promise.then(() => delay(flag))).then(timeout.done);
+ }
+ return {
+ type: "spawn.after",
+ action(_0, _1) {
+ return __async2(this, arguments, function* (_data, { spawned, close }) {
+ var _a2, _b;
+ const events = createEvents();
+ let deferClose = true;
+ let quickClose = () => void (deferClose = false);
+ (_a2 = spawned.stdout) == null ? void 0 : _a2.on("data", quickClose);
+ (_b = spawned.stderr) == null ? void 0 : _b.on("data", quickClose);
+ spawned.on("error", quickClose);
+ spawned.on("close", (code) => events.close(code));
+ spawned.on("exit", (code) => events.exit(code));
+ try {
+ yield events.result;
+ if (deferClose) {
+ yield delay(50);
+ }
+ close(events.exitCode);
+ } catch (err) {
+ close(events.exitCode, err);
+ }
+ });
+ }
+ };
+}
+init_git_error();
+function isTaskError(result) {
+ return !!(result.exitCode && result.stdErr.length);
+}
+function getErrorMessage(result) {
+ return Buffer.concat([...result.stdOut, ...result.stdErr]);
+}
+function errorDetectionHandler(overwrite = false, isError = isTaskError, errorMessage = getErrorMessage) {
+ return (error, result) => {
+ if (!overwrite && error || !isError(result)) {
+ return error;
+ }
+ return errorMessage(result);
+ };
+}
+function errorDetectionPlugin(config) {
+ return {
+ type: "task.error",
+ action(data, context) {
+ const error = config(data.error, {
+ stdErr: context.stdErr,
+ stdOut: context.stdOut,
+ exitCode: context.exitCode
+ });
+ if (Buffer.isBuffer(error)) {
+ return { error: new GitError(void 0, error.toString("utf-8")) };
+ }
+ return {
+ error
+ };
+ }
+ };
+}
+init_utils();
+var PluginStore = class {
+ constructor() {
+ this.plugins = /* @__PURE__ */ new Set();
+ }
+ add(plugin) {
+ const plugins = [];
+ asArray(plugin).forEach((plugin2) => plugin2 && this.plugins.add(append(plugins, plugin2)));
+ return () => {
+ plugins.forEach((plugin2) => this.plugins.delete(plugin2));
+ };
+ }
+ exec(type, data, context) {
+ let output = data;
+ const contextual = Object.freeze(Object.create(context));
+ for (const plugin of this.plugins) {
+ if (plugin.type === type) {
+ output = plugin.action(output, contextual);
+ }
+ }
+ return output;
+ }
+};
+init_utils();
+function progressMonitorPlugin(progress) {
+ const progressCommand = "--progress";
+ const progressMethods = ["checkout", "clone", "fetch", "pull", "push"];
+ const onProgress = {
+ type: "spawn.after",
+ action(_data, context) {
+ var _a2;
+ if (!context.commands.includes(progressCommand)) {
+ return;
+ }
+ (_a2 = context.spawned.stderr) == null ? void 0 : _a2.on("data", (chunk) => {
+ const message = /^([\s\S]+?):\s*(\d+)% \((\d+)\/(\d+)\)/.exec(chunk.toString("utf8"));
+ if (!message) {
+ return;
+ }
+ progress({
+ method: context.method,
+ stage: progressEventStage(message[1]),
+ progress: asNumber(message[2]),
+ processed: asNumber(message[3]),
+ total: asNumber(message[4])
+ });
+ });
+ }
+ };
+ const onArgs = {
+ type: "spawn.args",
+ action(args, context) {
+ if (!progressMethods.includes(context.method)) {
+ return args;
+ }
+ return including(args, progressCommand);
+ }
+ };
+ return [onArgs, onProgress];
+}
+function progressEventStage(input) {
+ return String(input.toLowerCase().split(" ", 1)) || "unknown";
+}
+init_utils();
+function spawnOptionsPlugin(spawnOptions) {
+ const options = pick(spawnOptions, ["uid", "gid"]);
+ return {
+ type: "spawn.options",
+ action(data) {
+ return __spreadValues2(__spreadValues2({}, options), data);
+ }
+ };
+}
+function timeoutPlugin({ block }) {
+ if (block > 0) {
+ return {
+ type: "spawn.after",
+ action(_data, context) {
+ var _a2, _b;
+ let timeout;
+ function wait3() {
+ timeout && clearTimeout(timeout);
+ timeout = setTimeout(kill, block);
+ }
+ function stop() {
+ var _a3, _b2;
+ (_a3 = context.spawned.stdout) == null ? void 0 : _a3.off("data", wait3);
+ (_b2 = context.spawned.stderr) == null ? void 0 : _b2.off("data", wait3);
+ context.spawned.off("exit", stop);
+ context.spawned.off("close", stop);
+ timeout && clearTimeout(timeout);
+ }
+ function kill() {
+ stop();
+ context.kill(new GitPluginError(void 0, "timeout", `block timeout reached`));
+ }
+ (_a2 = context.spawned.stdout) == null ? void 0 : _a2.on("data", wait3);
+ (_b = context.spawned.stderr) == null ? void 0 : _b.on("data", wait3);
+ context.spawned.on("exit", stop);
+ context.spawned.on("close", stop);
+ wait3();
+ }
+ };
+ }
+}
+init_utils();
+var Git = require_git();
+function gitInstanceFactory(baseDir, options) {
+ const plugins = new PluginStore();
+ const config = createInstanceConfig(baseDir && (typeof baseDir === "string" ? { baseDir } : baseDir) || {}, options);
+ if (!folderExists(config.baseDir)) {
+ throw new GitConstructError(config, `Cannot use simple-git on a directory that does not exist`);
+ }
+ if (Array.isArray(config.config)) {
+ plugins.add(commandConfigPrefixingPlugin(config.config));
+ }
+ plugins.add(completionDetectionPlugin(config.completion));
+ config.progress && plugins.add(progressMonitorPlugin(config.progress));
+ config.timeout && plugins.add(timeoutPlugin(config.timeout));
+ config.spawnOptions && plugins.add(spawnOptionsPlugin(config.spawnOptions));
+ plugins.add(errorDetectionPlugin(errorDetectionHandler(true)));
+ config.errors && plugins.add(errorDetectionPlugin(config.errors));
+ return new Git(config, plugins);
+}
+init_git_response_error();
+var esm_default = gitInstanceFactory;
+
+// src/gitManager.ts
+var GitManager = class {
+ constructor(plugin) {
+ this.plugin = plugin;
+ this.app = plugin.app;
+ }
+ getTreeStructure(children2, beginLength = 0) {
+ let list = [];
+ children2 = [...children2];
+ while (children2.length > 0) {
+ const first2 = children2.first();
+ const restPath = first2.path.substring(beginLength);
+ if (restPath.contains("/")) {
+ const title = restPath.substring(0, restPath.indexOf("/"));
+ const childrenWithSameTitle = children2.filter((item) => {
+ return item.path.substring(beginLength).startsWith(title + "/");
+ });
+ childrenWithSameTitle.forEach((item) => children2.remove(item));
+ list.push({
+ title,
+ children: this.getTreeStructure(childrenWithSameTitle, (beginLength > 0 ? beginLength + title.length : title.length) + 1)
+ });
+ } else {
+ list.push({ title: restPath, statusResult: first2 });
+ children2.remove(first2);
+ }
+ }
+ return list;
+ }
+ formatCommitMessage(template) {
+ return __async(this, null, function* () {
+ let status;
+ if (template.includes("{{numFiles}}")) {
+ status = yield this.status();
+ let numFiles = status.staged.length;
+ template = template.replace("{{numFiles}}", String(numFiles));
+ }
+ if (template.includes("{{hostname}}")) {
+ const hostname = localStorage.getItem(this.plugin.manifest.id + ":hostname") || "";
+ template = template.replace("{{hostname}}", hostname);
+ }
+ if (template.includes("{{files}}")) {
+ status = status != null ? status : yield this.status();
+ let changeset = {};
+ status.staged.forEach((value) => {
+ if (value.index in changeset) {
+ changeset[value.index].push(value.path);
+ } else {
+ changeset[value.index] = [value.path];
+ }
+ });
+ let chunks = [];
+ for (let [action, files2] of Object.entries(changeset)) {
+ chunks.push(action + " " + files2.join(" "));
+ }
+ let files = chunks.join(", ");
+ template = template.replace("{{files}}", files);
+ }
+ let moment = window.moment;
+ template = template.replace("{{date}}", moment().format(this.plugin.settings.commitDateFormat));
+ if (this.plugin.settings.listChangedFilesInMessageBody) {
+ template = template + "\n\nAffected files:\n" + (status != null ? status : yield this.status()).staged.map((e) => e.path).join("\n");
+ }
+ return template;
+ });
+ }
+};
+
+// src/simpleGit.ts
+var SimpleGit = class extends GitManager {
+ constructor(plugin) {
+ super(plugin);
+ }
+ setGitInstance(ignoreError = false) {
+ return __async(this, null, function* () {
+ if (this.isGitInstalled()) {
+ const adapter = this.app.vault.adapter;
+ const path3 = adapter.getBasePath();
+ let basePath = path3;
+ if (this.plugin.settings.basePath) {
+ const exists2 = yield adapter.exists((0, import_obsidian6.normalizePath)(this.plugin.settings.basePath));
+ if (exists2) {
+ basePath = path3 + import_path.sep + this.plugin.settings.basePath;
+ } else if (!ignoreError) {
+ new import_obsidian6.Notice("ObsidianGit: Base path does not exist");
+ }
+ }
+ this.git = esm_default({
+ baseDir: basePath,
+ binary: this.plugin.settings.gitPath || void 0,
+ config: ["core.quotepath=off"]
+ });
+ this.git.cwd(yield this.git.revparse("--show-toplevel"));
+ }
+ });
+ }
+ status() {
+ return __async(this, null, function* () {
+ this.plugin.setState(PluginState.status);
+ const status = yield this.git.status((err) => this.onError(err));
+ this.plugin.setState(PluginState.idle);
+ return {
+ changed: status.files.filter((e) => e.working_dir !== " ").map((e) => {
+ const res = this.formatPath(e);
+ return {
+ path: res.path,
+ from: res.from,
+ working_dir: e.working_dir === "?" ? "U" : e.working_dir,
+ vault_path: this.getVaultPath(res.path)
+ };
+ }),
+ staged: status.files.filter((e) => e.index !== " " && e.index != "?").map((e) => {
+ const res = this.formatPath(e, e.index === "R");
+ return {
+ path: res.path,
+ from: res.from,
+ index: e.index,
+ vault_path: this.getVaultPath(res.path)
+ };
+ }),
+ conflicted: status.conflicted.map((e) => this.formatPath({
+ path: e,
+ from: void 0,
+ index: void 0,
+ working_dir: void 0
+ }).path)
+ };
+ });
+ }
+ getVaultPath(path3) {
+ if (this.plugin.settings.basePath) {
+ return this.plugin.settings.basePath + "/" + path3;
+ } else {
+ return path3;
+ }
+ }
+ formatPath(path3, renamed = false) {
+ function format(path4) {
+ if (path4 == void 0)
+ return void 0;
+ if (path4.startsWith('"') && path4.endsWith('"')) {
+ return path4.substring(1, path4.length - 1);
+ } else {
+ return path4;
+ }
+ }
+ if (renamed) {
+ return {
+ from: format(path3.from),
+ path: format(path3.path)
+ };
+ } else {
+ return {
+ path: format(path3.path)
+ };
+ }
+ }
+ commitAll(message) {
+ return __async(this, null, function* () {
+ if (this.plugin.settings.updateSubmodules) {
+ this.plugin.setState(PluginState.commit);
+ yield new Promise((resolve, reject) => __async(this, null, function* () {
+ this.git.outputHandler((cmd, stdout, stderr, args) => __async(this, null, function* () {
+ if (!(args.contains("submodule") && args.contains("foreach")))
+ return;
+ let body = "";
+ let root = this.app.vault.adapter.getBasePath() + (this.plugin.settings.basePath ? "/" + this.plugin.settings.basePath : "");
+ stdout.on("data", (chunk) => {
+ body += chunk.toString("utf8");
+ });
+ stdout.on("end", () => __async(this, null, function* () {
+ let submods = body.split("\n");
+ submods = submods.map((i) => {
+ let submod = i.match(/'([^']*)'/);
+ if (submod != void 0) {
+ return root + "/" + submod[1] + import_path.sep;
+ }
+ });
+ submods.reverse();
+ for (const item of submods) {
+ if (item != void 0) {
+ yield this.git.cwd({ path: item, root: false }).add("-A", (err) => this.onError(err));
+ yield this.git.cwd({ path: item, root: false }).commit(yield this.formatCommitMessage(message), (err) => this.onError(err));
+ }
+ }
+ resolve();
+ }));
+ }));
+ yield this.git.subModule(["foreach", "--recursive", ""]);
+ this.git.outputHandler(() => {
+ });
+ }));
+ }
+ this.plugin.setState(PluginState.add);
+ yield this.git.add("-A", (err) => this.onError(err));
+ this.plugin.setState(PluginState.commit);
+ return (yield this.git.commit(yield this.formatCommitMessage(message), (err) => this.onError(err))).summary.changes;
+ });
+ }
+ commit(message) {
+ return __async(this, null, function* () {
+ this.plugin.setState(PluginState.commit);
+ const res = (yield this.git.commit(yield this.formatCommitMessage(message), (err) => this.onError(err))).summary.changes;
+ this.plugin.setState(PluginState.idle);
+ return res;
+ });
+ }
+ stage(path3, relativeToVault) {
+ return __async(this, null, function* () {
+ this.plugin.setState(PluginState.add);
+ path3 = this.getPath(path3, relativeToVault);
+ yield this.git.add(["--", path3], (err) => this.onError(err));
+ this.plugin.setState(PluginState.idle);
+ });
+ }
+ stageAll() {
+ return __async(this, null, function* () {
+ this.plugin.setState(PluginState.add);
+ yield this.git.add("-A", (err) => this.onError(err));
+ this.plugin.setState(PluginState.idle);
+ });
+ }
+ unstageAll() {
+ return __async(this, null, function* () {
+ this.plugin.setState(PluginState.add);
+ yield this.git.reset([], (err) => this.onError(err));
+ this.plugin.setState(PluginState.idle);
+ });
+ }
+ unstage(path3, relativeToVault) {
+ return __async(this, null, function* () {
+ this.plugin.setState(PluginState.add);
+ path3 = this.getPath(path3, relativeToVault);
+ yield this.git.reset(["--", path3], (err) => this.onError(err));
+ this.plugin.setState(PluginState.idle);
+ });
+ }
+ discard(filepath) {
+ return __async(this, null, function* () {
+ this.plugin.setState(PluginState.add);
+ yield this.git.checkout(["--", filepath], (err) => this.onError(err));
+ this.plugin.setState(PluginState.idle);
+ });
+ }
+ pull() {
+ return __async(this, null, function* () {
+ this.plugin.setState(PluginState.pull);
+ if (this.plugin.settings.updateSubmodules)
+ yield this.git.subModule(["update", "--remote", "--merge", "--recursive"], (err) => this.onError(err));
+ const branchInfo = yield this.branchInfo();
+ const localCommit = yield this.git.revparse([branchInfo.current], (err) => this.onError(err));
+ yield this.git.fetch((err) => this.onError(err));
+ const upstreamCommit = yield this.git.revparse([branchInfo.tracking], (err) => this.onError(err));
+ if (localCommit !== upstreamCommit) {
+ if (this.plugin.settings.syncMethod === "merge" || this.plugin.settings.syncMethod === "rebase") {
+ try {
+ switch (this.plugin.settings.syncMethod) {
+ case "merge":
+ yield this.git.merge([branchInfo.tracking]);
+ break;
+ case "rebase":
+ yield this.git.rebase([branchInfo.tracking]);
+ }
+ } catch (err) {
+ this.plugin.displayError(`Pull failed (${this.plugin.settings.syncMethod}): ${err.message}`);
+ return;
+ }
+ } else if (this.plugin.settings.syncMethod === "reset") {
+ try {
+ yield this.git.raw(["update-ref", `refs/heads/${branchInfo.current}`, upstreamCommit], (err) => this.onError(err));
+ yield this.unstageAll();
+ } catch (err) {
+ this.plugin.displayError(`Sync failed (${this.plugin.settings.syncMethod}): ${err.message}`);
+ }
+ }
+ const afterMergeCommit = yield this.git.revparse([branchInfo.current], (err) => this.onError(err));
+ const filesChanged = yield this.git.diff([`${localCommit}..${afterMergeCommit}`, "--name-only"]);
+ return filesChanged.split(/\r\n|\r|\n/).filter((value) => value.length > 0).length;
+ } else {
+ return 0;
+ }
+ });
+ }
+ push() {
+ return __async(this, null, function* () {
+ this.plugin.setState(PluginState.status);
+ const status = yield this.git.status();
+ const trackingBranch = status.tracking;
+ const currentBranch = status.current;
+ const remoteChangedFiles = (yield this.git.diffSummary([currentBranch, trackingBranch], (err) => this.onError(err))).changed;
+ this.plugin.setState(PluginState.push);
+ if (this.plugin.settings.updateSubmodules) {
+ yield this.git.env(__spreadProps(__spreadValues({}, process.env), { "OBSIDIAN_GIT": 1 })).subModule(["foreach", "--recursive", `tracking=$(git for-each-ref --format='%(upstream:short)' "$(git symbolic-ref -q HEAD)"); echo $tracking; if [ ! -z "$(git diff --shortstat $tracking)" ]; then git push; fi`], (err) => this.onError(err));
+ }
+ yield this.git.env(__spreadProps(__spreadValues({}, process.env), { "OBSIDIAN_GIT": 1 })).push((err) => this.onError(err));
+ return remoteChangedFiles;
+ });
+ }
+ canPush() {
+ return __async(this, null, function* () {
+ if (this.plugin.settings.updateSubmodules === true) {
+ return true;
+ }
+ const status = yield this.git.status((err) => this.onError(err));
+ const trackingBranch = status.tracking;
+ const currentBranch = status.current;
+ const remoteChangedFiles = (yield this.git.diffSummary([currentBranch, trackingBranch])).changed;
+ return remoteChangedFiles !== 0;
+ });
+ }
+ checkRequirements() {
+ return __async(this, null, function* () {
+ if (!this.isGitInstalled()) {
+ return "missing-git";
+ }
+ if (!(yield this.git.checkIsRepo())) {
+ return "missing-repo";
+ }
+ return "valid";
+ });
+ }
+ branchInfo() {
+ return __async(this, null, function* () {
+ const status = yield this.git.status((err) => this.onError(err));
+ const branches = yield this.git.branch(["--no-color"], (err) => this.onError(err));
+ return {
+ current: status.current,
+ tracking: status.tracking,
+ branches: branches.all
+ };
+ });
+ }
+ getRemoteUrl(remote) {
+ return __async(this, null, function* () {
+ return (yield this.git.remote(["get-url", remote], (err, url) => this.onError(err))) || void 0;
+ });
+ }
+ log(file, relativeToVault = true) {
+ return __async(this, null, function* () {
+ const path3 = this.getPath(file, relativeToVault);
+ const res = yield this.git.log({ file: path3 }, (err) => this.onError(err));
+ return res.all;
+ });
+ }
+ show(commitHash, file, relativeToVault = true) {
+ return __async(this, null, function* () {
+ const path3 = this.getPath(file, relativeToVault);
+ return this.git.show([commitHash + ":" + path3], (err) => this.onError(err));
+ });
+ }
+ checkout(branch) {
+ return __async(this, null, function* () {
+ yield this.git.checkout(branch, (err) => this.onError(err));
+ });
+ }
+ init() {
+ return __async(this, null, function* () {
+ yield this.git.init(false, (err) => this.onError(err));
+ });
+ }
+ clone(url, dir) {
+ return __async(this, null, function* () {
+ yield this.git.clone(url, path.join(this.app.vault.adapter.getBasePath(), dir), [], (err) => this.onError(err));
+ });
+ }
+ setConfig(path3, value) {
+ return __async(this, null, function* () {
+ yield this.git.addConfig(path3, value, (err) => this.onError(err));
+ });
+ }
+ getConfig(path3) {
+ return __async(this, null, function* () {
+ const config = yield this.git.listConfig((err) => this.onError(err));
+ return config.all[path3];
+ });
+ }
+ fetch(remote) {
+ return __async(this, null, function* () {
+ yield this.git.fetch(remote != void 0 ? [remote] : [], (err) => this.onError(err));
+ });
+ }
+ setRemote(name, url) {
+ return __async(this, null, function* () {
+ if ((yield this.getRemotes()).includes(name))
+ yield this.git.remote(["set-url", name, url], (err) => this.onError(err));
+ else {
+ yield this.git.remote(["add", name, url], (err) => this.onError(err));
+ }
+ });
+ }
+ getRemoteBranches(remote) {
+ return __async(this, null, function* () {
+ const res = yield this.git.branch(["-r", "--list", `${remote}*`], (err) => this.onError(err));
+ console.log(remote);
+ console.log(res);
+ const list = [];
+ for (var item in res.branches) {
+ list.push(res.branches[item].name);
+ }
+ return list;
+ });
+ }
+ getRemotes() {
+ return __async(this, null, function* () {
+ const res = yield this.git.remote([], (err) => this.onError(err));
+ if (res) {
+ return res.trim().split("\n");
+ } else {
+ return [];
+ }
+ });
+ }
+ removeRemote(remoteName) {
+ return __async(this, null, function* () {
+ yield this.git.removeRemote(remoteName);
+ });
+ }
+ updateUpstreamBranch(remoteBranch) {
+ return __async(this, null, function* () {
+ yield this.git.push(["--set-upstream", ...remoteBranch.split("/")], (err) => this.onError(err));
+ });
+ }
+ updateGitPath(gitPath) {
+ this.setGitInstance();
+ }
+ updateBasePath(basePath) {
+ this.setGitInstance(true);
+ }
+ getPath(path3, relativeToVault) {
+ return relativeToVault && this.plugin.settings.basePath.length > 0 ? path3.substring(this.plugin.settings.basePath.length + 1) : path3;
+ }
+ getDiffString(filePath, stagedChanges = false) {
+ return __async(this, null, function* () {
+ if (stagedChanges)
+ return yield this.git.diff(["--cached", "--", filePath]);
+ else
+ return yield this.git.diff(["--", filePath]);
+ });
+ }
+ diff(file, commit1, commit2) {
+ return __async(this, null, function* () {
+ return yield this.git.diff([`${commit1}..${commit2}`, "--", file]);
+ });
+ }
+ isGitInstalled() {
+ const command = (0, import_child_process2.spawnSync)(this.plugin.settings.gitPath || "git", ["--version"], {
+ stdio: "ignore"
+ });
+ if (command.error) {
+ console.error(command.error);
+ return false;
+ }
+ return true;
+ }
+ onError(error) {
+ if (error) {
+ let networkFailure = error.message.contains("Could not resolve host");
+ if (!networkFailure) {
+ this.plugin.displayError(error.message);
+ this.plugin.setState(PluginState.idle);
+ } else if (!this.plugin.offlineMode) {
+ this.plugin.displayError("Git: Going into offline mode. Future network errors will no longer be displayed.", 2e3);
+ }
+ if (networkFailure) {
+ this.plugin.offlineMode = true;
+ this.plugin.setState(PluginState.idle);
+ }
+ }
+ }
+};
+
+// src/ui/diff/diffView.ts
+var import_diff2html = __toModule(require_diff2html());
+var import_obsidian7 = __toModule(require("obsidian"));
+var DiffView = class extends import_obsidian7.ItemView {
+ constructor(leaf, plugin) {
+ super(leaf);
+ this.plugin = plugin;
+ this.gettingDiff = false;
+ this.parser = new DOMParser();
+ addEventListener("git-refresh", this.refresh.bind(this));
+ }
+ getViewType() {
+ return DIFF_VIEW_CONFIG.type;
+ }
+ getDisplayText() {
+ return DIFF_VIEW_CONFIG.name;
+ }
+ getIcon() {
+ return DIFF_VIEW_CONFIG.icon;
+ }
+ setState(state, result) {
+ return __async(this, null, function* () {
+ this.state = state;
+ yield this.refresh();
+ return;
+ });
+ }
+ getState() {
+ return this.state;
+ }
+ onClose() {
+ removeEventListener("git-refresh", this.refresh.bind(this));
+ return super.onClose();
+ }
+ onOpen() {
+ this.refresh();
+ return super.onOpen();
+ }
+ refresh() {
+ return __async(this, null, function* () {
+ var _a2;
+ if (((_a2 = this.state) == null ? void 0 : _a2.file) && !this.gettingDiff && this.plugin.gitManager) {
+ this.gettingDiff = true;
+ const diff = this.parser.parseFromString((0, import_diff2html.html)(yield this.plugin.gitManager.getDiffString(this.state.file, this.state.staged)), "text/html").querySelector(".d2h-file-diff");
+ this.contentEl.empty();
+ if (diff) {
+ this.contentEl.append(diff);
+ } else {
+ const div = this.contentEl.createDiv({ cls: "diff-err" });
+ div.createSpan({ text: "\u26A0\uFE0F", cls: "diff-err-sign" });
+ div.createEl("br");
+ div.createSpan({ text: "No changes to " + this.state.file });
+ }
+ this.gettingDiff = false;
+ }
+ });
+ }
+};
+
+// src/ui/modals/generalModal.ts
+var import_obsidian8 = __toModule(require("obsidian"));
+var GeneralModal = class extends import_obsidian8.SuggestModal {
+ constructor(app2, remotes, placeholder) {
+ super(app2);
+ this.resolve = null;
+ this.list = remotes;
+ this.setPlaceholder(placeholder);
+ }
+ open() {
+ super.open();
+ return new Promise((resolve) => {
+ this.resolve = resolve;
+ });
+ }
+ selectSuggestion(value, evt) {
+ if (this.resolve)
+ this.resolve(value);
+ super.selectSuggestion(value, evt);
+ }
+ onClose() {
+ if (this.resolve)
+ this.resolve(void 0);
+ }
+ getSuggestions(query) {
+ return [query.length > 0 ? query : "...", ...this.list];
+ }
+ renderSuggestion(value, el) {
+ el.innerText = value;
+ }
+ onChooseSuggestion(item, _) {
+ }
+};
+
+// src/ui/sidebar/sidebarView.ts
+var import_obsidian14 = __toModule(require("obsidian"));
+
+// node_modules/svelte/internal/index.mjs
+function noop() {
+}
+var identity = (x) => x;
+function run(fn) {
+ return fn();
+}
+function blank_object() {
+ return Object.create(null);
+}
+function run_all(fns) {
+ fns.forEach(run);
+}
+function is_function(thing) {
+ return typeof thing === "function";
+}
+function safe_not_equal(a, b) {
+ return a != a ? b == b : a !== b || (a && typeof a === "object" || typeof a === "function");
+}
+function is_empty(obj) {
+ return Object.keys(obj).length === 0;
+}
+var is_client = typeof window !== "undefined";
+var now = is_client ? () => window.performance.now() : () => Date.now();
+var raf = is_client ? (cb) => requestAnimationFrame(cb) : noop;
+var tasks = new Set();
+function run_tasks(now2) {
+ tasks.forEach((task) => {
+ if (!task.c(now2)) {
+ tasks.delete(task);
+ task.f();
+ }
+ });
+ if (tasks.size !== 0)
+ raf(run_tasks);
+}
+function loop(callback) {
+ let task;
+ if (tasks.size === 0)
+ raf(run_tasks);
+ return {
+ promise: new Promise((fulfill) => {
+ tasks.add(task = { c: callback, f: fulfill });
+ }),
+ abort() {
+ tasks.delete(task);
+ }
+ };
+}
+var is_hydrating = false;
+function start_hydrating() {
+ is_hydrating = true;
+}
+function end_hydrating() {
+ is_hydrating = false;
+}
+function append2(target, node) {
+ target.appendChild(node);
+}
+function append_styles(target, style_sheet_id, styles) {
+ const append_styles_to = get_root_for_style(target);
+ if (!append_styles_to.getElementById(style_sheet_id)) {
+ const style = element("style");
+ style.id = style_sheet_id;
+ style.textContent = styles;
+ append_stylesheet(append_styles_to, style);
+ }
+}
+function get_root_for_style(node) {
+ if (!node)
+ return document;
+ const root = node.getRootNode ? node.getRootNode() : node.ownerDocument;
+ if (root && root.host) {
+ return root;
+ }
+ return node.ownerDocument;
+}
+function append_empty_stylesheet(node) {
+ const style_element = element("style");
+ append_stylesheet(get_root_for_style(node), style_element);
+ return style_element.sheet;
+}
+function append_stylesheet(node, style) {
+ append2(node.head || node, style);
+}
+function insert(target, node, anchor) {
+ target.insertBefore(node, anchor || null);
+}
+function detach(node) {
+ node.parentNode.removeChild(node);
+}
+function destroy_each(iterations, detaching) {
+ for (let i = 0; i < iterations.length; i += 1) {
+ if (iterations[i])
+ iterations[i].d(detaching);
+ }
+}
+function element(name) {
+ return document.createElement(name);
+}
+function text(data) {
+ return document.createTextNode(data);
+}
+function space() {
+ return text(" ");
+}
+function empty() {
+ return text("");
+}
+function listen(node, event, handler, options) {
+ node.addEventListener(event, handler, options);
+ return () => node.removeEventListener(event, handler, options);
+}
+function self2(fn) {
+ return function(event) {
+ if (event.target === this)
+ fn.call(this, event);
+ };
+}
+function attr(node, attribute, value) {
+ if (value == null)
+ node.removeAttribute(attribute);
+ else if (node.getAttribute(attribute) !== value)
+ node.setAttribute(attribute, value);
+}
+function children(element2) {
+ return Array.from(element2.childNodes);
+}
+function set_data(text2, data) {
+ data = "" + data;
+ if (text2.wholeText !== data)
+ text2.data = data;
+}
+function set_input_value(input, value) {
+ input.value = value == null ? "" : value;
+}
+function toggle_class(element2, name, toggle) {
+ element2.classList[toggle ? "add" : "remove"](name);
+}
+function custom_event(type, detail, { bubbles = false, cancelable = false } = {}) {
+ const e = document.createEvent("CustomEvent");
+ e.initCustomEvent(type, bubbles, cancelable, detail);
+ return e;
+}
+var managed_styles = new Map();
+var active = 0;
+function hash(str) {
+ let hash2 = 5381;
+ let i = str.length;
+ while (i--)
+ hash2 = (hash2 << 5) - hash2 ^ str.charCodeAt(i);
+ return hash2 >>> 0;
+}
+function create_style_information(doc, node) {
+ const info = { stylesheet: append_empty_stylesheet(node), rules: {} };
+ managed_styles.set(doc, info);
+ return info;
+}
+function create_rule(node, a, b, duration, delay2, ease, fn, uid = 0) {
+ const step = 16.666 / duration;
+ let keyframes = "{\n";
+ for (let p = 0; p <= 1; p += step) {
+ const t = a + (b - a) * ease(p);
+ keyframes += p * 100 + `%{${fn(t, 1 - t)}}
+`;
+ }
+ const rule = keyframes + `100% {${fn(b, 1 - b)}}
+}`;
+ const name = `__svelte_${hash(rule)}_${uid}`;
+ const doc = get_root_for_style(node);
+ const { stylesheet, rules } = managed_styles.get(doc) || create_style_information(doc, node);
+ if (!rules[name]) {
+ rules[name] = true;
+ stylesheet.insertRule(`@keyframes ${name} ${rule}`, stylesheet.cssRules.length);
+ }
+ const animation = node.style.animation || "";
+ node.style.animation = `${animation ? `${animation}, ` : ""}${name} ${duration}ms linear ${delay2}ms 1 both`;
+ active += 1;
+ return name;
+}
+function delete_rule(node, name) {
+ const previous = (node.style.animation || "").split(", ");
+ const next = previous.filter(name ? (anim) => anim.indexOf(name) < 0 : (anim) => anim.indexOf("__svelte") === -1);
+ const deleted = previous.length - next.length;
+ if (deleted) {
+ node.style.animation = next.join(", ");
+ active -= deleted;
+ if (!active)
+ clear_rules();
+ }
+}
+function clear_rules() {
+ raf(() => {
+ if (active)
+ return;
+ managed_styles.forEach((info) => {
+ const { stylesheet } = info;
+ let i = stylesheet.cssRules.length;
+ while (i--)
+ stylesheet.deleteRule(i);
+ info.rules = {};
+ });
+ managed_styles.clear();
+ });
+}
+var current_component;
+function set_current_component(component) {
+ current_component = component;
+}
+function get_current_component() {
+ if (!current_component)
+ throw new Error("Function called outside component initialization");
+ return current_component;
+}
+function onDestroy(fn) {
+ get_current_component().$$.on_destroy.push(fn);
+}
+function bubble(component, event) {
+ const callbacks = component.$$.callbacks[event.type];
+ if (callbacks) {
+ callbacks.slice().forEach((fn) => fn.call(this, event));
+ }
+}
+var dirty_components = [];
+var binding_callbacks = [];
+var render_callbacks = [];
+var flush_callbacks = [];
+var resolved_promise = Promise.resolve();
+var update_scheduled = false;
+function schedule_update() {
+ if (!update_scheduled) {
+ update_scheduled = true;
+ resolved_promise.then(flush);
+ }
+}
+function add_render_callback(fn) {
+ render_callbacks.push(fn);
+}
+var seen_callbacks = new Set();
+var flushidx = 0;
+function flush() {
+ const saved_component = current_component;
+ do {
+ while (flushidx < dirty_components.length) {
+ const component = dirty_components[flushidx];
+ flushidx++;
+ set_current_component(component);
+ update(component.$$);
+ }
+ set_current_component(null);
+ dirty_components.length = 0;
+ flushidx = 0;
+ while (binding_callbacks.length)
+ binding_callbacks.pop()();
+ for (let i = 0; i < render_callbacks.length; i += 1) {
+ const callback = render_callbacks[i];
+ if (!seen_callbacks.has(callback)) {
+ seen_callbacks.add(callback);
+ callback();
+ }
+ }
+ render_callbacks.length = 0;
+ } while (dirty_components.length);
+ while (flush_callbacks.length) {
+ flush_callbacks.pop()();
+ }
+ update_scheduled = false;
+ seen_callbacks.clear();
+ set_current_component(saved_component);
+}
+function update($$) {
+ if ($$.fragment !== null) {
+ $$.update();
+ run_all($$.before_update);
+ const dirty = $$.dirty;
+ $$.dirty = [-1];
+ $$.fragment && $$.fragment.p($$.ctx, dirty);
+ $$.after_update.forEach(add_render_callback);
+ }
+}
+var promise;
+function wait() {
+ if (!promise) {
+ promise = Promise.resolve();
+ promise.then(() => {
+ promise = null;
+ });
+ }
+ return promise;
+}
+function dispatch(node, direction, kind) {
+ node.dispatchEvent(custom_event(`${direction ? "intro" : "outro"}${kind}`));
+}
+var outroing = new Set();
+var outros;
+function group_outros() {
+ outros = {
+ r: 0,
+ c: [],
+ p: outros
+ };
+}
+function check_outros() {
+ if (!outros.r) {
+ run_all(outros.c);
+ }
+ outros = outros.p;
+}
+function transition_in(block, local) {
+ if (block && block.i) {
+ outroing.delete(block);
+ block.i(local);
+ }
+}
+function transition_out(block, local, detach2, callback) {
+ if (block && block.o) {
+ if (outroing.has(block))
+ return;
+ outroing.add(block);
+ outros.c.push(() => {
+ outroing.delete(block);
+ if (callback) {
+ if (detach2)
+ block.d(1);
+ callback();
+ }
+ });
+ block.o(local);
+ } else if (callback) {
+ callback();
+ }
+}
+var null_transition = { duration: 0 };
+function create_bidirectional_transition(node, fn, params, intro) {
+ let config = fn(node, params);
+ let t = intro ? 0 : 1;
+ let running_program = null;
+ let pending_program = null;
+ let animation_name = null;
+ function clear_animation() {
+ if (animation_name)
+ delete_rule(node, animation_name);
+ }
+ function init2(program, duration) {
+ const d = program.b - t;
+ duration *= Math.abs(d);
+ return {
+ a: t,
+ b: program.b,
+ d,
+ duration,
+ start: program.start,
+ end: program.start + duration,
+ group: program.group
+ };
+ }
+ function go(b) {
+ const { delay: delay2 = 0, duration = 300, easing = identity, tick: tick2 = noop, css } = config || null_transition;
+ const program = {
+ start: now() + delay2,
+ b
+ };
+ if (!b) {
+ program.group = outros;
+ outros.r += 1;
+ }
+ if (running_program || pending_program) {
+ pending_program = program;
+ } else {
+ if (css) {
+ clear_animation();
+ animation_name = create_rule(node, t, b, duration, delay2, easing, css);
+ }
+ if (b)
+ tick2(0, 1);
+ running_program = init2(program, duration);
+ add_render_callback(() => dispatch(node, b, "start"));
+ loop((now2) => {
+ if (pending_program && now2 > pending_program.start) {
+ running_program = init2(pending_program, duration);
+ pending_program = null;
+ dispatch(node, running_program.b, "start");
+ if (css) {
+ clear_animation();
+ animation_name = create_rule(node, t, running_program.b, running_program.duration, 0, easing, config.css);
+ }
+ }
+ if (running_program) {
+ if (now2 >= running_program.end) {
+ tick2(t = running_program.b, 1 - t);
+ dispatch(node, running_program.b, "end");
+ if (!pending_program) {
+ if (running_program.b) {
+ clear_animation();
+ } else {
+ if (!--running_program.group.r)
+ run_all(running_program.group.c);
+ }
+ }
+ running_program = null;
+ } else if (now2 >= running_program.start) {
+ const p = now2 - running_program.start;
+ t = running_program.a + running_program.d * easing(p / running_program.duration);
+ tick2(t, 1 - t);
+ }
+ }
+ return !!(running_program || pending_program);
+ });
+ }
+ }
+ return {
+ run(b) {
+ if (is_function(config)) {
+ wait().then(() => {
+ config = config();
+ go(b);
+ });
+ } else {
+ go(b);
+ }
+ },
+ end() {
+ clear_animation();
+ running_program = pending_program = null;
+ }
+ };
+}
+var globals = typeof window !== "undefined" ? window : typeof globalThis !== "undefined" ? globalThis : global;
+var boolean_attributes = new Set([
+ "allowfullscreen",
+ "allowpaymentrequest",
+ "async",
+ "autofocus",
+ "autoplay",
+ "checked",
+ "controls",
+ "default",
+ "defer",
+ "disabled",
+ "formnovalidate",
+ "hidden",
+ "ismap",
+ "loop",
+ "multiple",
+ "muted",
+ "nomodule",
+ "novalidate",
+ "open",
+ "playsinline",
+ "readonly",
+ "required",
+ "reversed",
+ "selected"
+]);
+function create_component(block) {
+ block && block.c();
+}
+function mount_component(component, target, anchor, customElement) {
+ const { fragment, on_mount, on_destroy, after_update } = component.$$;
+ fragment && fragment.m(target, anchor);
+ if (!customElement) {
+ add_render_callback(() => {
+ const new_on_destroy = on_mount.map(run).filter(is_function);
+ if (on_destroy) {
+ on_destroy.push(...new_on_destroy);
+ } else {
+ run_all(new_on_destroy);
+ }
+ component.$$.on_mount = [];
+ });
+ }
+ after_update.forEach(add_render_callback);
+}
+function destroy_component(component, detaching) {
+ const $$ = component.$$;
+ if ($$.fragment !== null) {
+ run_all($$.on_destroy);
+ $$.fragment && $$.fragment.d(detaching);
+ $$.on_destroy = $$.fragment = null;
+ $$.ctx = [];
+ }
+}
+function make_dirty(component, i) {
+ if (component.$$.dirty[0] === -1) {
+ dirty_components.push(component);
+ schedule_update();
+ component.$$.dirty.fill(0);
+ }
+ component.$$.dirty[i / 31 | 0] |= 1 << i % 31;
+}
+function init(component, options, instance5, create_fragment5, not_equal, props, append_styles2, dirty = [-1]) {
+ const parent_component = current_component;
+ set_current_component(component);
+ const $$ = component.$$ = {
+ fragment: null,
+ ctx: null,
+ props,
+ update: noop,
+ not_equal,
+ bound: blank_object(),
+ on_mount: [],
+ on_destroy: [],
+ on_disconnect: [],
+ before_update: [],
+ after_update: [],
+ context: new Map(options.context || (parent_component ? parent_component.$$.context : [])),
+ callbacks: blank_object(),
+ dirty,
+ skip_bound: false,
+ root: options.target || parent_component.$$.root
+ };
+ append_styles2 && append_styles2($$.root);
+ let ready2 = false;
+ $$.ctx = instance5 ? instance5(component, options.props || {}, (i, ret, ...rest) => {
+ const value = rest.length ? rest[0] : ret;
+ if ($$.ctx && not_equal($$.ctx[i], $$.ctx[i] = value)) {
+ if (!$$.skip_bound && $$.bound[i])
+ $$.bound[i](value);
+ if (ready2)
+ make_dirty(component, i);
+ }
+ return ret;
+ }) : [];
+ $$.update();
+ ready2 = true;
+ run_all($$.before_update);
+ $$.fragment = create_fragment5 ? create_fragment5($$.ctx) : false;
+ if (options.target) {
+ if (options.hydrate) {
+ start_hydrating();
+ const nodes = children(options.target);
+ $$.fragment && $$.fragment.l(nodes);
+ nodes.forEach(detach);
+ } else {
+ $$.fragment && $$.fragment.c();
+ }
+ if (options.intro)
+ transition_in(component.$$.fragment);
+ mount_component(component, options.target, options.anchor, options.customElement);
+ end_hydrating();
+ flush();
+ }
+ set_current_component(parent_component);
+}
+var SvelteElement;
+if (typeof HTMLElement === "function") {
+ SvelteElement = class extends HTMLElement {
+ constructor() {
+ super();
+ this.attachShadow({ mode: "open" });
+ }
+ connectedCallback() {
+ const { on_mount } = this.$$;
+ this.$$.on_disconnect = on_mount.map(run).filter(is_function);
+ for (const key2 in this.$$.slotted) {
+ this.appendChild(this.$$.slotted[key2]);
+ }
+ }
+ attributeChangedCallback(attr2, _oldValue, newValue) {
+ this[attr2] = newValue;
+ }
+ disconnectedCallback() {
+ run_all(this.$$.on_disconnect);
+ }
+ $destroy() {
+ destroy_component(this, 1);
+ this.$destroy = noop;
+ }
+ $on(type, callback) {
+ const callbacks = this.$$.callbacks[type] || (this.$$.callbacks[type] = []);
+ callbacks.push(callback);
+ return () => {
+ const index = callbacks.indexOf(callback);
+ if (index !== -1)
+ callbacks.splice(index, 1);
+ };
+ }
+ $set($$props) {
+ if (this.$$set && !is_empty($$props)) {
+ this.$$.skip_bound = true;
+ this.$$set($$props);
+ this.$$.skip_bound = false;
+ }
+ }
+ };
+}
+var SvelteComponent = class {
+ $destroy() {
+ destroy_component(this, 1);
+ this.$destroy = noop;
+ }
+ $on(type, callback) {
+ const callbacks = this.$$.callbacks[type] || (this.$$.callbacks[type] = []);
+ callbacks.push(callback);
+ return () => {
+ const index = callbacks.indexOf(callback);
+ if (index !== -1)
+ callbacks.splice(index, 1);
+ };
+ }
+ $set($$props) {
+ if (this.$$set && !is_empty($$props)) {
+ this.$$.skip_bound = true;
+ this.$$set($$props);
+ this.$$.skip_bound = false;
+ }
+ }
+};
+
+// node_modules/tslib/modules/index.js
+var import_tslib = __toModule(require_tslib());
+var {
+ __extends,
+ __assign,
+ __rest,
+ __decorate,
+ __param,
+ __metadata,
+ __awaiter,
+ __generator,
+ __exportStar,
+ __createBinding,
+ __values,
+ __read,
+ __spread,
+ __spreadArrays,
+ __spreadArray,
+ __await,
+ __asyncGenerator,
+ __asyncDelegator,
+ __asyncValues,
+ __makeTemplateObject,
+ __importStar,
+ __importDefault,
+ __classPrivateFieldGet,
+ __classPrivateFieldSet,
+ __classPrivateFieldIn
+} = import_tslib.default;
+
+// src/ui/sidebar/gitView.svelte
+var import_obsidian13 = __toModule(require("obsidian"));
+
+// node_modules/svelte/easing/index.mjs
+function cubicOut(t) {
+ const f = t - 1;
+ return f * f * f + 1;
+}
+
+// node_modules/svelte/transition/index.mjs
+function slide(node, { delay: delay2 = 0, duration = 400, easing = cubicOut } = {}) {
+ const style = getComputedStyle(node);
+ const opacity = +style.opacity;
+ const height = parseFloat(style.height);
+ const padding_top = parseFloat(style.paddingTop);
+ const padding_bottom = parseFloat(style.paddingBottom);
+ const margin_top = parseFloat(style.marginTop);
+ const margin_bottom = parseFloat(style.marginBottom);
+ const border_top_width = parseFloat(style.borderTopWidth);
+ const border_bottom_width = parseFloat(style.borderBottomWidth);
+ return {
+ delay: delay2,
+ duration,
+ easing,
+ css: (t) => `overflow: hidden;opacity: ${Math.min(t * 20, 1) * opacity};height: ${t * height}px;padding-top: ${t * padding_top}px;padding-bottom: ${t * padding_bottom}px;margin-top: ${t * margin_top}px;margin-bottom: ${t * margin_bottom}px;border-top-width: ${t * border_top_width}px;border-bottom-width: ${t * border_bottom_width}px;`
+ };
+}
+
+// src/ui/sidebar/components/fileComponent.svelte
+var import_obsidian11 = __toModule(require("obsidian"));
+
+// node_modules/obsidian-community-lib/dist/utils.js
+var feather = __toModule(require_feather());
+var import_obsidian9 = __toModule(require("obsidian"));
+function hoverPreview(event, view, to) {
+ const targetEl = event.target;
+ app.workspace.trigger("hover-link", {
+ event,
+ source: view.getViewType(),
+ hoverParent: view,
+ targetEl,
+ linktext: to
+ });
+}
+function createNewMDNote(newName, currFilePath = "") {
+ return __async(this, null, function* () {
+ const newFileFolder = app.fileManager.getNewFileParent(currFilePath).path;
+ const newFilePath = (0, import_obsidian9.normalizePath)(`${newFileFolder}${newFileFolder === "/" ? "" : "/"}${addMD(newName)}`);
+ return yield app.vault.create(newFilePath, "");
+ });
+}
+var addMD = (noteName) => {
+ return noteName.match(/\.MD$|\.md$/m) ? noteName : noteName + ".md";
+};
+function openOrSwitch(_0, _1) {
+ return __async(this, arguments, function* (dest, event, options = { createNewFile: true }) {
+ const { workspace } = app;
+ let destFile = app.metadataCache.getFirstLinkpathDest(dest, "");
+ if (!destFile && options.createNewFile) {
+ destFile = yield createNewMDNote(dest);
+ } else if (!destFile && !options.createNewFile)
+ return;
+ const leavesWithDestAlreadyOpen = [];
+ workspace.iterateAllLeaves((leaf) => {
+ var _a2;
+ if (leaf.view instanceof import_obsidian9.MarkdownView) {
+ const file = (_a2 = leaf.view) === null || _a2 === void 0 ? void 0 : _a2.file;
+ if (file && file.basename + "." + file.extension === dest) {
+ leavesWithDestAlreadyOpen.push(leaf);
+ }
+ }
+ });
+ if (leavesWithDestAlreadyOpen.length > 0) {
+ workspace.setActiveLeaf(leavesWithDestAlreadyOpen[0]);
+ } else {
+ const mode = app.vault.getConfig("defaultViewMode");
+ const leaf = event.ctrlKey || event.getModifierState("Meta") ? workspace.splitActiveLeaf() : workspace.getUnpinnedLeaf();
+ yield leaf.openFile(destFile, { active: true, mode });
+ }
+ });
+}
+
+// src/ui/modals/discardModal.ts
+var import_obsidian10 = __toModule(require("obsidian"));
+var DiscardModal = class extends import_obsidian10.Modal {
+ constructor(app2, deletion, filename) {
+ super(app2);
+ this.deletion = deletion;
+ this.filename = filename;
+ this.resolve = null;
+ }
+ myOpen() {
+ this.open();
+ return new Promise((resolve) => {
+ this.resolve = resolve;
+ });
+ }
+ onOpen() {
+ let { contentEl, titleEl } = this;
+ titleEl.setText(`${this.deletion ? "Delete" : "Discard"} this file?`);
+ contentEl.createEl("h4").setText(`Do you really want to ${this.deletion ? "delete" : "discard the changes of"} "${this.filename}"`);
+ const div = contentEl.createDiv();
+ div.addClass("obsidian-git-center");
+ div.createEl("button", { text: "Cancel" }).addEventListener("click", () => {
+ if (this.resolve)
+ this.resolve(false);
+ return this.close();
+ });
+ div.createEl("button", {
+ cls: "mod-cta",
+ text: "Confirm"
+ }).addEventListener("click", () => __async(this, null, function* () {
+ if (this.resolve)
+ this.resolve(true);
+ this.close();
+ }));
+ }
+ onClose() {
+ let { contentEl } = this;
+ contentEl.empty();
+ }
+};
+
+// src/ui/sidebar/components/fileComponent.svelte
+function add_css(target) {
+ append_styles(target, "svelte-1furf50", "main.svelte-1furf50.svelte-1furf50.svelte-1furf50{cursor:pointer;background-color:var(--background-secondary);border-radius:4px;width:98%;display:flex;justify-content:space-between;font-size:0.8rem;margin-bottom:2px}main.svelte-1furf50 .path.svelte-1furf50.svelte-1furf50{color:var(--text-muted);white-space:nowrap;max-width:75%;overflow:hidden;text-overflow:ellipsis}main.svelte-1furf50:hover .path.svelte-1furf50.svelte-1furf50{color:var(--text-normal);transition:all 200ms}main.svelte-1furf50 .tools.svelte-1furf50.svelte-1furf50{display:flex;align-items:center}main.svelte-1furf50 .tools .type.svelte-1furf50.svelte-1furf50{height:16px;width:16px;margin:0;display:flex;align-items:center;justify-content:center}main.svelte-1furf50 .tools .type[data-type=M].svelte-1furf50.svelte-1furf50{color:orange}main.svelte-1furf50 .tools .type[data-type=D].svelte-1furf50.svelte-1furf50{color:red}main.svelte-1furf50 .tools .buttons.svelte-1furf50.svelte-1furf50{display:flex}main.svelte-1furf50 .tools .buttons.svelte-1furf50>.svelte-1furf50{color:var(--text-faint);height:16px;width:16px;margin:0;transition:all 0.2s;border-radius:2px;margin-right:1px}main.svelte-1furf50 .tools .buttons.svelte-1furf50>.svelte-1furf50:hover{color:var(--text-normal);background-color:var(--interactive-accent)}");
+}
+function create_if_block(ctx) {
+ let div;
+ let mounted;
+ let dispose;
+ return {
+ c() {
+ div = element("div");
+ attr(div, "data-icon", "go-to-file");
+ attr(div, "aria-label", "Open File");
+ attr(div, "class", "svelte-1furf50");
+ },
+ m(target, anchor) {
+ insert(target, div, anchor);
+ ctx[12](div);
+ if (!mounted) {
+ dispose = listen(div, "click", ctx[5]);
+ mounted = true;
+ }
+ },
+ p: noop,
+ d(detaching) {
+ if (detaching)
+ detach(div);
+ ctx[12](null);
+ mounted = false;
+ dispose();
+ }
+ };
+}
+function create_fragment(ctx) {
+ let main;
+ let span0;
+ let t0_value = ctx[0].vault_path.split("/").last().replace(".md", "") + "";
+ let t0;
+ let span0_aria_label_value;
+ let t1;
+ let div3;
+ let div2;
+ let show_if = ctx[1].app.vault.getAbstractFileByPath(ctx[0].vault_path);
+ let t2;
+ let div0;
+ let t3;
+ let div1;
+ let t4;
+ let span1;
+ let t5_value = ctx[0].working_dir + "";
+ let t5;
+ let span1_data_type_value;
+ let mounted;
+ let dispose;
+ let if_block = show_if && create_if_block(ctx);
+ return {
+ c() {
+ main = element("main");
+ span0 = element("span");
+ t0 = text(t0_value);
+ t1 = space();
+ div3 = element("div");
+ div2 = element("div");
+ if (if_block)
+ if_block.c();
+ t2 = space();
+ div0 = element("div");
+ t3 = space();
+ div1 = element("div");
+ t4 = space();
+ span1 = element("span");
+ t5 = text(t5_value);
+ attr(span0, "class", "path svelte-1furf50");
+ attr(span0, "aria-label-position", ctx[3]);
+ attr(span0, "aria-label", span0_aria_label_value = ctx[0].vault_path.split("/").last() != ctx[0].vault_path ? ctx[0].vault_path : "");
+ attr(div0, "data-icon", "skip-back");
+ attr(div0, "aria-label", "Discard");
+ attr(div0, "class", "svelte-1furf50");
+ attr(div1, "data-icon", "plus");
+ attr(div1, "aria-label", "Stage");
+ attr(div1, "class", "svelte-1furf50");
+ attr(div2, "class", "buttons svelte-1furf50");
+ attr(span1, "class", "type svelte-1furf50");
+ attr(span1, "data-type", span1_data_type_value = ctx[0].working_dir);
+ attr(div3, "class", "tools svelte-1furf50");
+ attr(main, "class", "svelte-1furf50");
+ },
+ m(target, anchor) {
+ insert(target, main, anchor);
+ append2(main, span0);
+ append2(span0, t0);
+ append2(main, t1);
+ append2(main, div3);
+ append2(div3, div2);
+ if (if_block)
+ if_block.m(div2, null);
+ append2(div2, t2);
+ append2(div2, div0);
+ ctx[13](div0);
+ append2(div2, t3);
+ append2(div2, div1);
+ ctx[14](div1);
+ append2(div3, t4);
+ append2(div3, span1);
+ append2(span1, t5);
+ if (!mounted) {
+ dispose = [
+ listen(span0, "click", self2(ctx[7])),
+ listen(div0, "click", ctx[8]),
+ listen(div1, "click", ctx[6]),
+ listen(main, "mouseover", ctx[4]),
+ listen(main, "click", self2(ctx[7])),
+ listen(main, "focus", ctx[11])
+ ];
+ mounted = true;
+ }
+ },
+ p(ctx2, [dirty]) {
+ if (dirty & 1 && t0_value !== (t0_value = ctx2[0].vault_path.split("/").last().replace(".md", "") + ""))
+ set_data(t0, t0_value);
+ if (dirty & 8) {
+ attr(span0, "aria-label-position", ctx2[3]);
+ }
+ if (dirty & 1 && span0_aria_label_value !== (span0_aria_label_value = ctx2[0].vault_path.split("/").last() != ctx2[0].vault_path ? ctx2[0].vault_path : "")) {
+ attr(span0, "aria-label", span0_aria_label_value);
+ }
+ if (dirty & 3)
+ show_if = ctx2[1].app.vault.getAbstractFileByPath(ctx2[0].vault_path);
+ if (show_if) {
+ if (if_block) {
+ if_block.p(ctx2, dirty);
+ } else {
+ if_block = create_if_block(ctx2);
+ if_block.c();
+ if_block.m(div2, t2);
+ }
+ } else if (if_block) {
+ if_block.d(1);
+ if_block = null;
+ }
+ if (dirty & 1 && t5_value !== (t5_value = ctx2[0].working_dir + ""))
+ set_data(t5, t5_value);
+ if (dirty & 1 && span1_data_type_value !== (span1_data_type_value = ctx2[0].working_dir)) {
+ attr(span1, "data-type", span1_data_type_value);
+ }
+ },
+ i: noop,
+ o: noop,
+ d(detaching) {
+ if (detaching)
+ detach(main);
+ if (if_block)
+ if_block.d();
+ ctx[13](null);
+ ctx[14](null);
+ mounted = false;
+ run_all(dispose);
+ }
+ };
+}
+function instance($$self, $$props, $$invalidate) {
+ let side;
+ let { change } = $$props;
+ let { view } = $$props;
+ let { manager } = $$props;
+ let { workspace } = $$props;
+ let buttons = [];
+ setImmediate(() => buttons.forEach((b) => (0, import_obsidian11.setIcon)(b, b.getAttr("data-icon"), 16)));
+ function hover(event) {
+ if (!change.path.startsWith(view.app.vault.configDir) || !change.path.startsWith(".")) {
+ hoverPreview(event, view, change.vault_path.split("/").last().replace(".md", ""));
+ }
+ }
+ function open(event) {
+ if (!(change.path.startsWith(view.app.vault.configDir) || change.path.startsWith(".") || change.working_dir === "D")) {
+ openOrSwitch(change.vault_path, event);
+ }
+ }
+ function stage() {
+ manager.stage(change.path, false).finally(() => {
+ dispatchEvent(new CustomEvent("git-refresh"));
+ });
+ }
+ function showDiff(event) {
+ const leaf = workspace.getMostRecentLeaf(workspace.rootSplit);
+ if (leaf && !leaf.getViewState().pinned && !(event.ctrlKey || event.getModifierState("Meta"))) {
+ leaf.setViewState({
+ type: DIFF_VIEW_CONFIG.type,
+ state: { file: change.path, staged: false }
+ });
+ } else {
+ workspace.createLeafInParent(workspace.rootSplit, 0).setViewState({
+ type: DIFF_VIEW_CONFIG.type,
+ active: true,
+ state: { file: change.path, staged: false }
+ });
+ }
+ }
+ function discard() {
+ const deleteFile = change.working_dir == "U";
+ new DiscardModal(view.app, deleteFile, change.vault_path).myOpen().then((shouldDiscard) => {
+ if (shouldDiscard === true) {
+ if (deleteFile) {
+ view.app.vault.adapter.remove(change.vault_path).finally(() => {
+ dispatchEvent(new CustomEvent("git-refresh"));
+ });
+ } else {
+ manager.discard(change.path).finally(() => {
+ dispatchEvent(new CustomEvent("git-refresh"));
+ });
+ }
+ }
+ });
+ }
+ function focus_handler(event) {
+ bubble.call(this, $$self, event);
+ }
+ function div_binding($$value) {
+ binding_callbacks[$$value ? "unshift" : "push"](() => {
+ buttons[1] = $$value;
+ $$invalidate(2, buttons);
+ });
+ }
+ function div0_binding($$value) {
+ binding_callbacks[$$value ? "unshift" : "push"](() => {
+ buttons[0] = $$value;
+ $$invalidate(2, buttons);
+ });
+ }
+ function div1_binding($$value) {
+ binding_callbacks[$$value ? "unshift" : "push"](() => {
+ buttons[2] = $$value;
+ $$invalidate(2, buttons);
+ });
+ }
+ $$self.$$set = ($$props2) => {
+ if ("change" in $$props2)
+ $$invalidate(0, change = $$props2.change);
+ if ("view" in $$props2)
+ $$invalidate(1, view = $$props2.view);
+ if ("manager" in $$props2)
+ $$invalidate(9, manager = $$props2.manager);
+ if ("workspace" in $$props2)
+ $$invalidate(10, workspace = $$props2.workspace);
+ };
+ $$self.$$.update = () => {
+ if ($$self.$$.dirty & 2) {
+ $:
+ $$invalidate(3, side = view.leaf.getRoot().side == "left" ? "right" : "left");
+ }
+ };
+ return [
+ change,
+ view,
+ buttons,
+ side,
+ hover,
+ open,
+ stage,
+ showDiff,
+ discard,
+ manager,
+ workspace,
+ focus_handler,
+ div_binding,
+ div0_binding,
+ div1_binding
+ ];
+}
+var FileComponent = class extends SvelteComponent {
+ constructor(options) {
+ super();
+ init(this, options, instance, create_fragment, safe_not_equal, {
+ change: 0,
+ view: 1,
+ manager: 9,
+ workspace: 10
+ }, add_css);
+ }
+};
+var fileComponent_default = FileComponent;
+
+// src/ui/sidebar/components/stagedFileComponent.svelte
+var import_obsidian12 = __toModule(require("obsidian"));
+var import_path2 = __toModule(require("path"));
+function add_css2(target) {
+ append_styles(target, "svelte-15heedx", "main.svelte-15heedx.svelte-15heedx.svelte-15heedx{cursor:pointer;background-color:var(--background-secondary);border-radius:4px;width:98%;display:flex;justify-content:space-between;font-size:0.8rem;margin-bottom:2px}main.svelte-15heedx .path.svelte-15heedx.svelte-15heedx{color:var(--text-muted);white-space:nowrap;max-width:75%;overflow:hidden;text-overflow:ellipsis}main.svelte-15heedx:hover .path.svelte-15heedx.svelte-15heedx{color:var(--text-normal);transition:all 200ms}main.svelte-15heedx .tools.svelte-15heedx.svelte-15heedx{display:flex;align-items:center}main.svelte-15heedx .tools .type.svelte-15heedx.svelte-15heedx{height:16px;width:16px;margin:0;display:flex;align-items:center;justify-content:center}main.svelte-15heedx .tools .type[data-type=M].svelte-15heedx.svelte-15heedx{color:orange}main.svelte-15heedx .tools .type[data-type=D].svelte-15heedx.svelte-15heedx{color:red}main.svelte-15heedx .tools .type[data-type=A].svelte-15heedx.svelte-15heedx{color:yellowgreen}main.svelte-15heedx .tools .type[data-type=R].svelte-15heedx.svelte-15heedx{color:violet}main.svelte-15heedx .tools .buttons.svelte-15heedx.svelte-15heedx{display:flex}main.svelte-15heedx .tools .buttons.svelte-15heedx>.svelte-15heedx{color:var(--text-faint);height:16px;width:16px;margin:0;transition:all 0.2s;border-radius:2px;margin-right:1px}main.svelte-15heedx .tools .buttons.svelte-15heedx>.svelte-15heedx:hover{color:var(--text-normal);background-color:var(--interactive-accent)}");
+}
+function create_if_block2(ctx) {
+ let div;
+ let mounted;
+ let dispose;
+ return {
+ c() {
+ div = element("div");
+ attr(div, "data-icon", "go-to-file");
+ attr(div, "aria-label", "Open File");
+ attr(div, "class", "svelte-15heedx");
+ },
+ m(target, anchor) {
+ insert(target, div, anchor);
+ ctx[11](div);
+ if (!mounted) {
+ dispose = listen(div, "click", ctx[6]);
+ mounted = true;
+ }
+ },
+ p: noop,
+ d(detaching) {
+ if (detaching)
+ detach(div);
+ ctx[11](null);
+ mounted = false;
+ dispose();
+ }
+ };
+}
+function create_fragment2(ctx) {
+ let main;
+ let span0;
+ let t0_value = ctx[3].split("/").last().replace(".md", "") + "";
+ let t0;
+ let span0_aria_label_value;
+ let t1;
+ let div2;
+ let div1;
+ let show_if = ctx[1].app.vault.getAbstractFileByPath(ctx[3]);
+ let t2;
+ let div0;
+ let t3;
+ let span1;
+ let t4_value = ctx[0].index + "";
+ let t4;
+ let span1_data_type_value;
+ let mounted;
+ let dispose;
+ let if_block = show_if && create_if_block2(ctx);
+ return {
+ c() {
+ main = element("main");
+ span0 = element("span");
+ t0 = text(t0_value);
+ t1 = space();
+ div2 = element("div");
+ div1 = element("div");
+ if (if_block)
+ if_block.c();
+ t2 = space();
+ div0 = element("div");
+ t3 = space();
+ span1 = element("span");
+ t4 = text(t4_value);
+ attr(span0, "class", "path svelte-15heedx");
+ attr(span0, "aria-label-position", ctx[4]);
+ attr(span0, "aria-label", span0_aria_label_value = ctx[3].split("/").last() != ctx[3] ? ctx[3] : "");
+ attr(div0, "data-icon", "minus");
+ attr(div0, "aria-label", "Unstage");
+ attr(div0, "class", "svelte-15heedx");
+ attr(div1, "class", "buttons svelte-15heedx");
+ attr(span1, "class", "type svelte-15heedx");
+ attr(span1, "data-type", span1_data_type_value = ctx[0].index);
+ attr(div2, "class", "tools svelte-15heedx");
+ attr(main, "class", "svelte-15heedx");
+ },
+ m(target, anchor) {
+ insert(target, main, anchor);
+ append2(main, span0);
+ append2(span0, t0);
+ append2(main, t1);
+ append2(main, div2);
+ append2(div2, div1);
+ if (if_block)
+ if_block.m(div1, null);
+ append2(div1, t2);
+ append2(div1, div0);
+ ctx[12](div0);
+ append2(div2, t3);
+ append2(div2, span1);
+ append2(span1, t4);
+ if (!mounted) {
+ dispose = [
+ listen(span0, "click", ctx[7]),
+ listen(div0, "click", ctx[8]),
+ listen(main, "mouseover", ctx[5]),
+ listen(main, "focus", ctx[10]),
+ listen(main, "click", self2(ctx[7]))
+ ];
+ mounted = true;
+ }
+ },
+ p(ctx2, [dirty]) {
+ if (dirty & 8 && t0_value !== (t0_value = ctx2[3].split("/").last().replace(".md", "") + ""))
+ set_data(t0, t0_value);
+ if (dirty & 16) {
+ attr(span0, "aria-label-position", ctx2[4]);
+ }
+ if (dirty & 8 && span0_aria_label_value !== (span0_aria_label_value = ctx2[3].split("/").last() != ctx2[3] ? ctx2[3] : "")) {
+ attr(span0, "aria-label", span0_aria_label_value);
+ }
+ if (dirty & 10)
+ show_if = ctx2[1].app.vault.getAbstractFileByPath(ctx2[3]);
+ if (show_if) {
+ if (if_block) {
+ if_block.p(ctx2, dirty);
+ } else {
+ if_block = create_if_block2(ctx2);
+ if_block.c();
+ if_block.m(div1, t2);
+ }
+ } else if (if_block) {
+ if_block.d(1);
+ if_block = null;
+ }
+ if (dirty & 1 && t4_value !== (t4_value = ctx2[0].index + ""))
+ set_data(t4, t4_value);
+ if (dirty & 1 && span1_data_type_value !== (span1_data_type_value = ctx2[0].index)) {
+ attr(span1, "data-type", span1_data_type_value);
+ }
+ },
+ i: noop,
+ o: noop,
+ d(detaching) {
+ if (detaching)
+ detach(main);
+ if (if_block)
+ if_block.d();
+ ctx[12](null);
+ mounted = false;
+ run_all(dispose);
+ }
+ };
+}
+function instance2($$self, $$props, $$invalidate) {
+ let formattedPath;
+ let side;
+ let { change } = $$props;
+ let { view } = $$props;
+ let { manager } = $$props;
+ let buttons = [];
+ setImmediate(() => buttons.forEach((b) => (0, import_obsidian12.setIcon)(b, b.getAttr("data-icon"), 16)));
+ function hover(event) {
+ if (!change.path.startsWith(view.app.vault.configDir) || !change.path.startsWith(".")) {
+ hoverPreview(event, view, formattedPath.split("/").last().replace(".md", ""));
+ }
+ }
+ function open(event) {
+ if (!(change.path.startsWith(view.app.vault.configDir) || change.path.startsWith(".") || change.index === "D")) {
+ openOrSwitch(formattedPath, event);
+ }
+ }
+ function showDiff(event) {
+ const workspace = view.app.workspace;
+ const leaf = workspace.getMostRecentLeaf(workspace.rootSplit);
+ if (leaf && !leaf.getViewState().pinned && !(event.ctrlKey || event.getModifierState("Meta"))) {
+ leaf.setViewState({
+ type: DIFF_VIEW_CONFIG.type,
+ state: { file: change.path, staged: true }
+ });
+ workspace.setActiveLeaf(leaf, true, true);
+ } else {
+ workspace.createLeafInParent(workspace.rootSplit, 0).setViewState({
+ type: DIFF_VIEW_CONFIG.type,
+ active: true,
+ state: { file: change.path, staged: true }
+ });
+ }
+ }
+ function unstage() {
+ manager.unstage(change.path, false).finally(() => {
+ dispatchEvent(new CustomEvent("git-refresh"));
+ });
+ }
+ function focus_handler(event) {
+ bubble.call(this, $$self, event);
+ }
+ function div_binding($$value) {
+ binding_callbacks[$$value ? "unshift" : "push"](() => {
+ buttons[1] = $$value;
+ $$invalidate(2, buttons);
+ });
+ }
+ function div0_binding($$value) {
+ binding_callbacks[$$value ? "unshift" : "push"](() => {
+ buttons[0] = $$value;
+ $$invalidate(2, buttons);
+ });
+ }
+ $$self.$$set = ($$props2) => {
+ if ("change" in $$props2)
+ $$invalidate(0, change = $$props2.change);
+ if ("view" in $$props2)
+ $$invalidate(1, view = $$props2.view);
+ if ("manager" in $$props2)
+ $$invalidate(9, manager = $$props2.manager);
+ };
+ $$self.$$.update = () => {
+ if ($$self.$$.dirty & 1) {
+ $:
+ $$invalidate(3, formattedPath = change.vault_path);
+ }
+ if ($$self.$$.dirty & 2) {
+ $:
+ $$invalidate(4, side = view.leaf.getRoot().side == "left" ? "right" : "left");
+ }
+ };
+ return [
+ change,
+ view,
+ buttons,
+ formattedPath,
+ side,
+ hover,
+ open,
+ showDiff,
+ unstage,
+ manager,
+ focus_handler,
+ div_binding,
+ div0_binding
+ ];
+}
+var StagedFileComponent = class extends SvelteComponent {
+ constructor(options) {
+ super();
+ init(this, options, instance2, create_fragment2, safe_not_equal, { change: 0, view: 1, manager: 9 }, add_css2);
+ }
+};
+var stagedFileComponent_default = StagedFileComponent;
+
+// src/ui/sidebar/components/treeComponent.svelte
+function add_css3(target) {
+ append_styles(target, "svelte-pgmdei", '@charset "UTF-8";main.svelte-pgmdei.svelte-pgmdei:not(.topLevel){margin-left:5px}.opener.svelte-pgmdei.svelte-pgmdei{display:flex;justify-content:space-between;align-items:center;padding:0 4px}.opener.svelte-pgmdei .collapse-icon.svelte-pgmdei::after{content:"\xA0"}.opener.svelte-pgmdei div.svelte-pgmdei{display:flex}.opener.svelte-pgmdei svg.svelte-pgmdei{transform:rotate(-90deg)}.opener.open.svelte-pgmdei svg.svelte-pgmdei{transform:rotate(0)}.opener.svelte-pgmdei span.svelte-pgmdei{font-size:0.8rem}.file-view.svelte-pgmdei.svelte-pgmdei{margin-left:5px}');
+}
+function get_each_context(ctx, list, i) {
+ const child_ctx = ctx.slice();
+ child_ctx[7] = list[i];
+ return child_ctx;
+}
+function create_else_block_1(ctx) {
+ let div2;
+ let div1;
+ let div0;
+ let t0;
+ let span;
+ let t1_value = ctx[7].title + "";
+ let t1;
+ let t2;
+ let if_block_anchor;
+ let current;
+ let mounted;
+ let dispose;
+ function click_handler() {
+ return ctx[6](ctx[7]);
+ }
+ let if_block = !ctx[5][ctx[7].title] && create_if_block_2(ctx);
+ return {
+ c() {
+ div2 = element("div");
+ div1 = element("div");
+ div0 = element("div");
+ div0.innerHTML = ``;
+ t0 = space();
+ span = element("span");
+ t1 = text(t1_value);
+ t2 = space();
+ if (if_block)
+ if_block.c();
+ if_block_anchor = empty();
+ attr(div0, "class", "tree-item-icon collapse-icon svelte-pgmdei");
+ attr(div0, "style", "");
+ attr(span, "class", "svelte-pgmdei");
+ attr(div1, "class", "svelte-pgmdei");
+ attr(div2, "class", "opener tree-item-self is-clickable svelte-pgmdei");
+ toggle_class(div2, "open", !ctx[5][ctx[7].title]);
+ },
+ m(target, anchor) {
+ insert(target, div2, anchor);
+ append2(div2, div1);
+ append2(div1, div0);
+ append2(div1, t0);
+ append2(div1, span);
+ append2(span, t1);
+ insert(target, t2, anchor);
+ if (if_block)
+ if_block.m(target, anchor);
+ insert(target, if_block_anchor, anchor);
+ current = true;
+ if (!mounted) {
+ dispose = listen(div2, "click", click_handler);
+ mounted = true;
+ }
+ },
+ p(new_ctx, dirty) {
+ ctx = new_ctx;
+ if ((!current || dirty & 1) && t1_value !== (t1_value = ctx[7].title + ""))
+ set_data(t1, t1_value);
+ if (dirty & 33) {
+ toggle_class(div2, "open", !ctx[5][ctx[7].title]);
+ }
+ if (!ctx[5][ctx[7].title]) {
+ if (if_block) {
+ if_block.p(ctx, dirty);
+ if (dirty & 33) {
+ transition_in(if_block, 1);
+ }
+ } else {
+ if_block = create_if_block_2(ctx);
+ if_block.c();
+ transition_in(if_block, 1);
+ if_block.m(if_block_anchor.parentNode, if_block_anchor);
+ }
+ } else if (if_block) {
+ group_outros();
+ transition_out(if_block, 1, 1, () => {
+ if_block = null;
+ });
+ check_outros();
+ }
+ },
+ i(local) {
+ if (current)
+ return;
+ transition_in(if_block);
+ current = true;
+ },
+ o(local) {
+ transition_out(if_block);
+ current = false;
+ },
+ d(detaching) {
+ if (detaching)
+ detach(div2);
+ if (detaching)
+ detach(t2);
+ if (if_block)
+ if_block.d(detaching);
+ if (detaching)
+ detach(if_block_anchor);
+ mounted = false;
+ dispose();
+ }
+ };
+}
+function create_if_block3(ctx) {
+ let div;
+ let current_block_type_index;
+ let if_block;
+ let t;
+ let current;
+ const if_block_creators = [create_if_block_1, create_else_block];
+ const if_blocks = [];
+ function select_block_type_1(ctx2, dirty) {
+ if (ctx2[3])
+ return 0;
+ return 1;
+ }
+ current_block_type_index = select_block_type_1(ctx, -1);
+ if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx);
+ return {
+ c() {
+ div = element("div");
+ if_block.c();
+ t = space();
+ attr(div, "class", "file-view svelte-pgmdei");
+ },
+ m(target, anchor) {
+ insert(target, div, anchor);
+ if_blocks[current_block_type_index].m(div, null);
+ append2(div, t);
+ current = true;
+ },
+ p(ctx2, dirty) {
+ let previous_block_index = current_block_type_index;
+ current_block_type_index = select_block_type_1(ctx2, dirty);
+ if (current_block_type_index === previous_block_index) {
+ if_blocks[current_block_type_index].p(ctx2, dirty);
+ } else {
+ group_outros();
+ transition_out(if_blocks[previous_block_index], 1, 1, () => {
+ if_blocks[previous_block_index] = null;
+ });
+ check_outros();
+ if_block = if_blocks[current_block_type_index];
+ if (!if_block) {
+ if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx2);
+ if_block.c();
+ } else {
+ if_block.p(ctx2, dirty);
+ }
+ transition_in(if_block, 1);
+ if_block.m(div, t);
+ }
+ },
+ i(local) {
+ if (current)
+ return;
+ transition_in(if_block);
+ current = true;
+ },
+ o(local) {
+ transition_out(if_block);
+ current = false;
+ },
+ d(detaching) {
+ if (detaching)
+ detach(div);
+ if_blocks[current_block_type_index].d();
+ }
+ };
+}
+function create_if_block_2(ctx) {
+ let div;
+ let treecomponent;
+ let t;
+ let div_transition;
+ let current;
+ treecomponent = new TreeComponent({
+ props: {
+ hierarchy: ctx[7],
+ plugin: ctx[1],
+ view: ctx[2],
+ staged: ctx[3]
+ }
+ });
+ return {
+ c() {
+ div = element("div");
+ create_component(treecomponent.$$.fragment);
+ t = space();
+ attr(div, "class", "file-view svelte-pgmdei");
+ },
+ m(target, anchor) {
+ insert(target, div, anchor);
+ mount_component(treecomponent, div, null);
+ append2(div, t);
+ current = true;
+ },
+ p(ctx2, dirty) {
+ const treecomponent_changes = {};
+ if (dirty & 1)
+ treecomponent_changes.hierarchy = ctx2[7];
+ if (dirty & 2)
+ treecomponent_changes.plugin = ctx2[1];
+ if (dirty & 4)
+ treecomponent_changes.view = ctx2[2];
+ if (dirty & 8)
+ treecomponent_changes.staged = ctx2[3];
+ treecomponent.$set(treecomponent_changes);
+ },
+ i(local) {
+ if (current)
+ return;
+ transition_in(treecomponent.$$.fragment, local);
+ if (local) {
+ add_render_callback(() => {
+ if (!div_transition)
+ div_transition = create_bidirectional_transition(div, slide, { duration: 75 }, true);
+ div_transition.run(1);
+ });
+ }
+ current = true;
+ },
+ o(local) {
+ transition_out(treecomponent.$$.fragment, local);
+ if (local) {
+ if (!div_transition)
+ div_transition = create_bidirectional_transition(div, slide, { duration: 75 }, false);
+ div_transition.run(0);
+ }
+ current = false;
+ },
+ d(detaching) {
+ if (detaching)
+ detach(div);
+ destroy_component(treecomponent);
+ if (detaching && div_transition)
+ div_transition.end();
+ }
+ };
+}
+function create_else_block(ctx) {
+ let filecomponent;
+ let current;
+ filecomponent = new fileComponent_default({
+ props: {
+ change: ctx[7].statusResult,
+ manager: ctx[1].gitManager,
+ view: ctx[2],
+ workspace: ctx[1].app.workspace
+ }
+ });
+ return {
+ c() {
+ create_component(filecomponent.$$.fragment);
+ },
+ m(target, anchor) {
+ mount_component(filecomponent, target, anchor);
+ current = true;
+ },
+ p(ctx2, dirty) {
+ const filecomponent_changes = {};
+ if (dirty & 1)
+ filecomponent_changes.change = ctx2[7].statusResult;
+ if (dirty & 2)
+ filecomponent_changes.manager = ctx2[1].gitManager;
+ if (dirty & 4)
+ filecomponent_changes.view = ctx2[2];
+ if (dirty & 2)
+ filecomponent_changes.workspace = ctx2[1].app.workspace;
+ filecomponent.$set(filecomponent_changes);
+ },
+ i(local) {
+ if (current)
+ return;
+ transition_in(filecomponent.$$.fragment, local);
+ current = true;
+ },
+ o(local) {
+ transition_out(filecomponent.$$.fragment, local);
+ current = false;
+ },
+ d(detaching) {
+ destroy_component(filecomponent, detaching);
+ }
+ };
+}
+function create_if_block_1(ctx) {
+ let stagedfilecomponent;
+ let current;
+ stagedfilecomponent = new stagedFileComponent_default({
+ props: {
+ change: ctx[7].statusResult,
+ manager: ctx[1].gitManager,
+ view: ctx[2]
+ }
+ });
+ return {
+ c() {
+ create_component(stagedfilecomponent.$$.fragment);
+ },
+ m(target, anchor) {
+ mount_component(stagedfilecomponent, target, anchor);
+ current = true;
+ },
+ p(ctx2, dirty) {
+ const stagedfilecomponent_changes = {};
+ if (dirty & 1)
+ stagedfilecomponent_changes.change = ctx2[7].statusResult;
+ if (dirty & 2)
+ stagedfilecomponent_changes.manager = ctx2[1].gitManager;
+ if (dirty & 4)
+ stagedfilecomponent_changes.view = ctx2[2];
+ stagedfilecomponent.$set(stagedfilecomponent_changes);
+ },
+ i(local) {
+ if (current)
+ return;
+ transition_in(stagedfilecomponent.$$.fragment, local);
+ current = true;
+ },
+ o(local) {
+ transition_out(stagedfilecomponent.$$.fragment, local);
+ current = false;
+ },
+ d(detaching) {
+ destroy_component(stagedfilecomponent, detaching);
+ }
+ };
+}
+function create_each_block(ctx) {
+ let current_block_type_index;
+ let if_block;
+ let if_block_anchor;
+ let current;
+ const if_block_creators = [create_if_block3, create_else_block_1];
+ const if_blocks = [];
+ function select_block_type(ctx2, dirty) {
+ if (ctx2[7].statusResult)
+ return 0;
+ return 1;
+ }
+ current_block_type_index = select_block_type(ctx, -1);
+ if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx);
+ return {
+ c() {
+ if_block.c();
+ if_block_anchor = empty();
+ },
+ m(target, anchor) {
+ if_blocks[current_block_type_index].m(target, anchor);
+ insert(target, if_block_anchor, anchor);
+ current = true;
+ },
+ p(ctx2, dirty) {
+ let previous_block_index = current_block_type_index;
+ current_block_type_index = select_block_type(ctx2, dirty);
+ if (current_block_type_index === previous_block_index) {
+ if_blocks[current_block_type_index].p(ctx2, dirty);
+ } else {
+ group_outros();
+ transition_out(if_blocks[previous_block_index], 1, 1, () => {
+ if_blocks[previous_block_index] = null;
+ });
+ check_outros();
+ if_block = if_blocks[current_block_type_index];
+ if (!if_block) {
+ if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx2);
+ if_block.c();
+ } else {
+ if_block.p(ctx2, dirty);
+ }
+ transition_in(if_block, 1);
+ if_block.m(if_block_anchor.parentNode, if_block_anchor);
+ }
+ },
+ i(local) {
+ if (current)
+ return;
+ transition_in(if_block);
+ current = true;
+ },
+ o(local) {
+ transition_out(if_block);
+ current = false;
+ },
+ d(detaching) {
+ if_blocks[current_block_type_index].d(detaching);
+ if (detaching)
+ detach(if_block_anchor);
+ }
+ };
+}
+function create_fragment3(ctx) {
+ let main;
+ let current;
+ let each_value = ctx[0].children;
+ let each_blocks = [];
+ for (let i = 0; i < each_value.length; i += 1) {
+ each_blocks[i] = create_each_block(get_each_context(ctx, each_value, i));
+ }
+ const out = (i) => transition_out(each_blocks[i], 1, 1, () => {
+ each_blocks[i] = null;
+ });
+ return {
+ c() {
+ main = element("main");
+ for (let i = 0; i < each_blocks.length; i += 1) {
+ each_blocks[i].c();
+ }
+ attr(main, "class", "svelte-pgmdei");
+ toggle_class(main, "topLevel", ctx[4]);
+ },
+ m(target, anchor) {
+ insert(target, main, anchor);
+ for (let i = 0; i < each_blocks.length; i += 1) {
+ each_blocks[i].m(main, null);
+ }
+ current = true;
+ },
+ p(ctx2, [dirty]) {
+ if (dirty & 47) {
+ each_value = ctx2[0].children;
+ let i;
+ for (i = 0; i < each_value.length; i += 1) {
+ const child_ctx = get_each_context(ctx2, each_value, i);
+ if (each_blocks[i]) {
+ each_blocks[i].p(child_ctx, dirty);
+ transition_in(each_blocks[i], 1);
+ } else {
+ each_blocks[i] = create_each_block(child_ctx);
+ each_blocks[i].c();
+ transition_in(each_blocks[i], 1);
+ each_blocks[i].m(main, null);
+ }
+ }
+ group_outros();
+ for (i = each_value.length; i < each_blocks.length; i += 1) {
+ out(i);
+ }
+ check_outros();
+ }
+ if (dirty & 16) {
+ toggle_class(main, "topLevel", ctx2[4]);
+ }
+ },
+ i(local) {
+ if (current)
+ return;
+ for (let i = 0; i < each_value.length; i += 1) {
+ transition_in(each_blocks[i]);
+ }
+ current = true;
+ },
+ o(local) {
+ each_blocks = each_blocks.filter(Boolean);
+ for (let i = 0; i < each_blocks.length; i += 1) {
+ transition_out(each_blocks[i]);
+ }
+ current = false;
+ },
+ d(detaching) {
+ if (detaching)
+ detach(main);
+ destroy_each(each_blocks, detaching);
+ }
+ };
+}
+function instance3($$self, $$props, $$invalidate) {
+ let { hierarchy } = $$props;
+ let { plugin } = $$props;
+ let { view } = $$props;
+ let { staged } = $$props;
+ let { topLevel = false } = $$props;
+ const closed = {};
+ const click_handler = (entity) => {
+ $$invalidate(5, closed[entity.title] = !closed[entity.title], closed);
+ };
+ $$self.$$set = ($$props2) => {
+ if ("hierarchy" in $$props2)
+ $$invalidate(0, hierarchy = $$props2.hierarchy);
+ if ("plugin" in $$props2)
+ $$invalidate(1, plugin = $$props2.plugin);
+ if ("view" in $$props2)
+ $$invalidate(2, view = $$props2.view);
+ if ("staged" in $$props2)
+ $$invalidate(3, staged = $$props2.staged);
+ if ("topLevel" in $$props2)
+ $$invalidate(4, topLevel = $$props2.topLevel);
+ };
+ return [hierarchy, plugin, view, staged, topLevel, closed, click_handler];
+}
+var TreeComponent = class extends SvelteComponent {
+ constructor(options) {
+ super();
+ init(this, options, instance3, create_fragment3, safe_not_equal, {
+ hierarchy: 0,
+ plugin: 1,
+ view: 2,
+ staged: 3,
+ topLevel: 4
+ }, add_css3);
+ }
+};
+var treeComponent_default = TreeComponent;
+
+// src/ui/sidebar/gitView.svelte
+function add_css4(target) {
+ append_styles(target, "svelte-1f0ksxd", '@charset "UTF-8";.commit-msg.svelte-1f0ksxd.svelte-1f0ksxd{width:100%;min-height:1.9em;height:1.9em;resize:vertical;padding:2px 5px;background-color:var(--background-modifier-form-field)}.search-input-container.svelte-1f0ksxd.svelte-1f0ksxd{width:100%}.file-view.svelte-1f0ksxd.svelte-1f0ksxd{margin-left:5px}.opener.svelte-1f0ksxd.svelte-1f0ksxd{display:flex;justify-content:space-between;align-items:center;padding:0 4px}.opener.svelte-1f0ksxd .collapse-icon.svelte-1f0ksxd::after{content:"\xA0"}.opener.svelte-1f0ksxd div.svelte-1f0ksxd{display:flex}.opener.svelte-1f0ksxd svg.svelte-1f0ksxd{transform:rotate(-90deg)}.opener.open.svelte-1f0ksxd svg.svelte-1f0ksxd{transform:rotate(0)}.git-view-body.svelte-1f0ksxd.svelte-1f0ksxd{overflow-y:auto;padding-left:10px}main.svelte-1f0ksxd.svelte-1f0ksxd{display:flex;flex-direction:column;height:100%;overflow-y:hidden}.nav-buttons-container.svelte-1f0ksxd.svelte-1f0ksxd{justify-content:space-between}.group.svelte-1f0ksxd.svelte-1f0ksxd{display:flex}');
+}
+function get_each_context2(ctx, list, i) {
+ const child_ctx = ctx.slice();
+ child_ctx[30] = list[i];
+ return child_ctx;
+}
+function get_each_context_1(ctx, list, i) {
+ const child_ctx = ctx.slice();
+ child_ctx[33] = list[i];
+ return child_ctx;
+}
+function create_if_block_5(ctx) {
+ let div;
+ let div_aria_label_value;
+ let mounted;
+ let dispose;
+ return {
+ c() {
+ div = element("div");
+ attr(div, "class", "search-input-clear-button");
+ attr(div, "aria-label", div_aria_label_value = "Clear");
+ },
+ m(target, anchor) {
+ insert(target, div, anchor);
+ if (!mounted) {
+ dispose = listen(div, "click", ctx[26]);
+ mounted = true;
+ }
+ },
+ p: noop,
+ d(detaching) {
+ if (detaching)
+ detach(div);
+ mounted = false;
+ dispose();
+ }
+ };
+}
+function create_if_block4(ctx) {
+ let div3;
+ let div2;
+ let div1;
+ let t2;
+ let span1;
+ let t3_value = ctx[5].staged.length + "";
+ let t3;
+ let t4;
+ let t5;
+ let div7;
+ let div6;
+ let div5;
+ let t8;
+ let span3;
+ let t9_value = ctx[5].changed.length + "";
+ let t9;
+ let t10;
+ let current;
+ let mounted;
+ let dispose;
+ let if_block0 = ctx[11] && create_if_block_3(ctx);
+ let if_block1 = ctx[10] && create_if_block_12(ctx);
+ return {
+ c() {
+ div3 = element("div");
+ div2 = element("div");
+ div1 = element("div");
+ div1.innerHTML = `
+ Staged Changes`;
+ t2 = space();
+ span1 = element("span");
+ t3 = text(t3_value);
+ t4 = space();
+ if (if_block0)
+ if_block0.c();
+ t5 = space();
+ div7 = element("div");
+ div6 = element("div");
+ div5 = element("div");
+ div5.innerHTML = `
+ Changes`;
+ t8 = space();
+ span3 = element("span");
+ t9 = text(t9_value);
+ t10 = space();
+ if (if_block1)
+ if_block1.c();
+ attr(div1, "class", "svelte-1f0ksxd");
+ attr(span1, "class", "tree-item-flair");
+ attr(div2, "class", "opener tree-item-self is-clickable svelte-1f0ksxd");
+ toggle_class(div2, "open", ctx[11]);
+ attr(div3, "class", "staged");
+ attr(div5, "class", "svelte-1f0ksxd");
+ attr(span3, "class", "tree-item-flair");
+ attr(div6, "class", "opener tree-item-self is-clickable svelte-1f0ksxd");
+ toggle_class(div6, "open", ctx[10]);
+ attr(div7, "class", "changes");
+ },
+ m(target, anchor) {
+ insert(target, div3, anchor);
+ append2(div3, div2);
+ append2(div2, div1);
+ append2(div2, t2);
+ append2(div2, span1);
+ append2(span1, t3);
+ append2(div3, t4);
+ if (if_block0)
+ if_block0.m(div3, null);
+ insert(target, t5, anchor);
+ insert(target, div7, anchor);
+ append2(div7, div6);
+ append2(div6, div5);
+ append2(div6, t8);
+ append2(div6, span3);
+ append2(span3, t9);
+ append2(div7, t10);
+ if (if_block1)
+ if_block1.m(div7, null);
+ current = true;
+ if (!mounted) {
+ dispose = [
+ listen(div2, "click", ctx[27]),
+ listen(div6, "click", ctx[28])
+ ];
+ mounted = true;
+ }
+ },
+ p(ctx2, dirty) {
+ if ((!current || dirty[0] & 32) && t3_value !== (t3_value = ctx2[5].staged.length + ""))
+ set_data(t3, t3_value);
+ if (dirty[0] & 2048) {
+ toggle_class(div2, "open", ctx2[11]);
+ }
+ if (ctx2[11]) {
+ if (if_block0) {
+ if_block0.p(ctx2, dirty);
+ if (dirty[0] & 2048) {
+ transition_in(if_block0, 1);
+ }
+ } else {
+ if_block0 = create_if_block_3(ctx2);
+ if_block0.c();
+ transition_in(if_block0, 1);
+ if_block0.m(div3, null);
+ }
+ } else if (if_block0) {
+ group_outros();
+ transition_out(if_block0, 1, 1, () => {
+ if_block0 = null;
+ });
+ check_outros();
+ }
+ if ((!current || dirty[0] & 32) && t9_value !== (t9_value = ctx2[5].changed.length + ""))
+ set_data(t9, t9_value);
+ if (dirty[0] & 1024) {
+ toggle_class(div6, "open", ctx2[10]);
+ }
+ if (ctx2[10]) {
+ if (if_block1) {
+ if_block1.p(ctx2, dirty);
+ if (dirty[0] & 1024) {
+ transition_in(if_block1, 1);
+ }
+ } else {
+ if_block1 = create_if_block_12(ctx2);
+ if_block1.c();
+ transition_in(if_block1, 1);
+ if_block1.m(div7, null);
+ }
+ } else if (if_block1) {
+ group_outros();
+ transition_out(if_block1, 1, 1, () => {
+ if_block1 = null;
+ });
+ check_outros();
+ }
+ },
+ i(local) {
+ if (current)
+ return;
+ transition_in(if_block0);
+ transition_in(if_block1);
+ current = true;
+ },
+ o(local) {
+ transition_out(if_block0);
+ transition_out(if_block1);
+ current = false;
+ },
+ d(detaching) {
+ if (detaching)
+ detach(div3);
+ if (if_block0)
+ if_block0.d();
+ if (detaching)
+ detach(t5);
+ if (detaching)
+ detach(div7);
+ if (if_block1)
+ if_block1.d();
+ mounted = false;
+ run_all(dispose);
+ }
+ };
+}
+function create_if_block_3(ctx) {
+ let div;
+ let current_block_type_index;
+ let if_block;
+ let div_transition;
+ let current;
+ const if_block_creators = [create_if_block_4, create_else_block_12];
+ const if_blocks = [];
+ function select_block_type(ctx2, dirty) {
+ if (ctx2[2])
+ return 0;
+ return 1;
+ }
+ current_block_type_index = select_block_type(ctx, [-1, -1]);
+ if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx);
+ return {
+ c() {
+ div = element("div");
+ if_block.c();
+ attr(div, "class", "file-view svelte-1f0ksxd");
+ },
+ m(target, anchor) {
+ insert(target, div, anchor);
+ if_blocks[current_block_type_index].m(div, null);
+ current = true;
+ },
+ p(ctx2, dirty) {
+ let previous_block_index = current_block_type_index;
+ current_block_type_index = select_block_type(ctx2, dirty);
+ if (current_block_type_index === previous_block_index) {
+ if_blocks[current_block_type_index].p(ctx2, dirty);
+ } else {
+ group_outros();
+ transition_out(if_blocks[previous_block_index], 1, 1, () => {
+ if_blocks[previous_block_index] = null;
+ });
+ check_outros();
+ if_block = if_blocks[current_block_type_index];
+ if (!if_block) {
+ if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx2);
+ if_block.c();
+ } else {
+ if_block.p(ctx2, dirty);
+ }
+ transition_in(if_block, 1);
+ if_block.m(div, null);
+ }
+ },
+ i(local) {
+ if (current)
+ return;
+ transition_in(if_block);
+ if (local) {
+ add_render_callback(() => {
+ if (!div_transition)
+ div_transition = create_bidirectional_transition(div, slide, { duration: 150 }, true);
+ div_transition.run(1);
+ });
+ }
+ current = true;
+ },
+ o(local) {
+ transition_out(if_block);
+ if (local) {
+ if (!div_transition)
+ div_transition = create_bidirectional_transition(div, slide, { duration: 150 }, false);
+ div_transition.run(0);
+ }
+ current = false;
+ },
+ d(detaching) {
+ if (detaching)
+ detach(div);
+ if_blocks[current_block_type_index].d();
+ if (detaching && div_transition)
+ div_transition.end();
+ }
+ };
+}
+function create_else_block_12(ctx) {
+ let each_1_anchor;
+ let current;
+ let each_value_1 = ctx[5].staged;
+ let each_blocks = [];
+ for (let i = 0; i < each_value_1.length; i += 1) {
+ each_blocks[i] = create_each_block_1(get_each_context_1(ctx, each_value_1, i));
+ }
+ const out = (i) => transition_out(each_blocks[i], 1, 1, () => {
+ each_blocks[i] = null;
+ });
+ return {
+ c() {
+ for (let i = 0; i < each_blocks.length; i += 1) {
+ each_blocks[i].c();
+ }
+ each_1_anchor = empty();
+ },
+ m(target, anchor) {
+ for (let i = 0; i < each_blocks.length; i += 1) {
+ each_blocks[i].m(target, anchor);
+ }
+ insert(target, each_1_anchor, anchor);
+ current = true;
+ },
+ p(ctx2, dirty) {
+ if (dirty[0] & 35) {
+ each_value_1 = ctx2[5].staged;
+ let i;
+ for (i = 0; i < each_value_1.length; i += 1) {
+ const child_ctx = get_each_context_1(ctx2, each_value_1, i);
+ if (each_blocks[i]) {
+ each_blocks[i].p(child_ctx, dirty);
+ transition_in(each_blocks[i], 1);
+ } else {
+ each_blocks[i] = create_each_block_1(child_ctx);
+ each_blocks[i].c();
+ transition_in(each_blocks[i], 1);
+ each_blocks[i].m(each_1_anchor.parentNode, each_1_anchor);
+ }
+ }
+ group_outros();
+ for (i = each_value_1.length; i < each_blocks.length; i += 1) {
+ out(i);
+ }
+ check_outros();
+ }
+ },
+ i(local) {
+ if (current)
+ return;
+ for (let i = 0; i < each_value_1.length; i += 1) {
+ transition_in(each_blocks[i]);
+ }
+ current = true;
+ },
+ o(local) {
+ each_blocks = each_blocks.filter(Boolean);
+ for (let i = 0; i < each_blocks.length; i += 1) {
+ transition_out(each_blocks[i]);
+ }
+ current = false;
+ },
+ d(detaching) {
+ destroy_each(each_blocks, detaching);
+ if (detaching)
+ detach(each_1_anchor);
+ }
+ };
+}
+function create_if_block_4(ctx) {
+ let treecomponent;
+ let current;
+ treecomponent = new treeComponent_default({
+ props: {
+ hierarchy: ctx[9],
+ plugin: ctx[0],
+ view: ctx[1],
+ staged: true,
+ topLevel: true
+ }
+ });
+ return {
+ c() {
+ create_component(treecomponent.$$.fragment);
+ },
+ m(target, anchor) {
+ mount_component(treecomponent, target, anchor);
+ current = true;
+ },
+ p(ctx2, dirty) {
+ const treecomponent_changes = {};
+ if (dirty[0] & 512)
+ treecomponent_changes.hierarchy = ctx2[9];
+ if (dirty[0] & 1)
+ treecomponent_changes.plugin = ctx2[0];
+ if (dirty[0] & 2)
+ treecomponent_changes.view = ctx2[1];
+ treecomponent.$set(treecomponent_changes);
+ },
+ i(local) {
+ if (current)
+ return;
+ transition_in(treecomponent.$$.fragment, local);
+ current = true;
+ },
+ o(local) {
+ transition_out(treecomponent.$$.fragment, local);
+ current = false;
+ },
+ d(detaching) {
+ destroy_component(treecomponent, detaching);
+ }
+ };
+}
+function create_each_block_1(ctx) {
+ let stagedfilecomponent;
+ let current;
+ stagedfilecomponent = new stagedFileComponent_default({
+ props: {
+ change: ctx[33],
+ view: ctx[1],
+ manager: ctx[0].gitManager
+ }
+ });
+ return {
+ c() {
+ create_component(stagedfilecomponent.$$.fragment);
+ },
+ m(target, anchor) {
+ mount_component(stagedfilecomponent, target, anchor);
+ current = true;
+ },
+ p(ctx2, dirty) {
+ const stagedfilecomponent_changes = {};
+ if (dirty[0] & 32)
+ stagedfilecomponent_changes.change = ctx2[33];
+ if (dirty[0] & 2)
+ stagedfilecomponent_changes.view = ctx2[1];
+ if (dirty[0] & 1)
+ stagedfilecomponent_changes.manager = ctx2[0].gitManager;
+ stagedfilecomponent.$set(stagedfilecomponent_changes);
+ },
+ i(local) {
+ if (current)
+ return;
+ transition_in(stagedfilecomponent.$$.fragment, local);
+ current = true;
+ },
+ o(local) {
+ transition_out(stagedfilecomponent.$$.fragment, local);
+ current = false;
+ },
+ d(detaching) {
+ destroy_component(stagedfilecomponent, detaching);
+ }
+ };
+}
+function create_if_block_12(ctx) {
+ let div;
+ let current_block_type_index;
+ let if_block;
+ let div_transition;
+ let current;
+ const if_block_creators = [create_if_block_22, create_else_block2];
+ const if_blocks = [];
+ function select_block_type_1(ctx2, dirty) {
+ if (ctx2[2])
+ return 0;
+ return 1;
+ }
+ current_block_type_index = select_block_type_1(ctx, [-1, -1]);
+ if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx);
+ return {
+ c() {
+ div = element("div");
+ if_block.c();
+ attr(div, "class", "file-view svelte-1f0ksxd");
+ },
+ m(target, anchor) {
+ insert(target, div, anchor);
+ if_blocks[current_block_type_index].m(div, null);
+ current = true;
+ },
+ p(ctx2, dirty) {
+ let previous_block_index = current_block_type_index;
+ current_block_type_index = select_block_type_1(ctx2, dirty);
+ if (current_block_type_index === previous_block_index) {
+ if_blocks[current_block_type_index].p(ctx2, dirty);
+ } else {
+ group_outros();
+ transition_out(if_blocks[previous_block_index], 1, 1, () => {
+ if_blocks[previous_block_index] = null;
+ });
+ check_outros();
+ if_block = if_blocks[current_block_type_index];
+ if (!if_block) {
+ if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx2);
+ if_block.c();
+ } else {
+ if_block.p(ctx2, dirty);
+ }
+ transition_in(if_block, 1);
+ if_block.m(div, null);
+ }
+ },
+ i(local) {
+ if (current)
+ return;
+ transition_in(if_block);
+ if (local) {
+ add_render_callback(() => {
+ if (!div_transition)
+ div_transition = create_bidirectional_transition(div, slide, { duration: 150 }, true);
+ div_transition.run(1);
+ });
+ }
+ current = true;
+ },
+ o(local) {
+ transition_out(if_block);
+ if (local) {
+ if (!div_transition)
+ div_transition = create_bidirectional_transition(div, slide, { duration: 150 }, false);
+ div_transition.run(0);
+ }
+ current = false;
+ },
+ d(detaching) {
+ if (detaching)
+ detach(div);
+ if_blocks[current_block_type_index].d();
+ if (detaching && div_transition)
+ div_transition.end();
+ }
+ };
+}
+function create_else_block2(ctx) {
+ let each_1_anchor;
+ let current;
+ let each_value = ctx[5].changed;
+ let each_blocks = [];
+ for (let i = 0; i < each_value.length; i += 1) {
+ each_blocks[i] = create_each_block2(get_each_context2(ctx, each_value, i));
+ }
+ const out = (i) => transition_out(each_blocks[i], 1, 1, () => {
+ each_blocks[i] = null;
+ });
+ return {
+ c() {
+ for (let i = 0; i < each_blocks.length; i += 1) {
+ each_blocks[i].c();
+ }
+ each_1_anchor = empty();
+ },
+ m(target, anchor) {
+ for (let i = 0; i < each_blocks.length; i += 1) {
+ each_blocks[i].m(target, anchor);
+ }
+ insert(target, each_1_anchor, anchor);
+ current = true;
+ },
+ p(ctx2, dirty) {
+ if (dirty[0] & 35) {
+ each_value = ctx2[5].changed;
+ let i;
+ for (i = 0; i < each_value.length; i += 1) {
+ const child_ctx = get_each_context2(ctx2, each_value, i);
+ if (each_blocks[i]) {
+ each_blocks[i].p(child_ctx, dirty);
+ transition_in(each_blocks[i], 1);
+ } else {
+ each_blocks[i] = create_each_block2(child_ctx);
+ each_blocks[i].c();
+ transition_in(each_blocks[i], 1);
+ each_blocks[i].m(each_1_anchor.parentNode, each_1_anchor);
+ }
+ }
+ group_outros();
+ for (i = each_value.length; i < each_blocks.length; i += 1) {
+ out(i);
+ }
+ check_outros();
+ }
+ },
+ i(local) {
+ if (current)
+ return;
+ for (let i = 0; i < each_value.length; i += 1) {
+ transition_in(each_blocks[i]);
+ }
+ current = true;
+ },
+ o(local) {
+ each_blocks = each_blocks.filter(Boolean);
+ for (let i = 0; i < each_blocks.length; i += 1) {
+ transition_out(each_blocks[i]);
+ }
+ current = false;
+ },
+ d(detaching) {
+ destroy_each(each_blocks, detaching);
+ if (detaching)
+ detach(each_1_anchor);
+ }
+ };
+}
+function create_if_block_22(ctx) {
+ let treecomponent;
+ let current;
+ treecomponent = new treeComponent_default({
+ props: {
+ hierarchy: ctx[8],
+ plugin: ctx[0],
+ view: ctx[1],
+ staged: false,
+ topLevel: true
+ }
+ });
+ return {
+ c() {
+ create_component(treecomponent.$$.fragment);
+ },
+ m(target, anchor) {
+ mount_component(treecomponent, target, anchor);
+ current = true;
+ },
+ p(ctx2, dirty) {
+ const treecomponent_changes = {};
+ if (dirty[0] & 256)
+ treecomponent_changes.hierarchy = ctx2[8];
+ if (dirty[0] & 1)
+ treecomponent_changes.plugin = ctx2[0];
+ if (dirty[0] & 2)
+ treecomponent_changes.view = ctx2[1];
+ treecomponent.$set(treecomponent_changes);
+ },
+ i(local) {
+ if (current)
+ return;
+ transition_in(treecomponent.$$.fragment, local);
+ current = true;
+ },
+ o(local) {
+ transition_out(treecomponent.$$.fragment, local);
+ current = false;
+ },
+ d(detaching) {
+ destroy_component(treecomponent, detaching);
+ }
+ };
+}
+function create_each_block2(ctx) {
+ let filecomponent;
+ let current;
+ filecomponent = new fileComponent_default({
+ props: {
+ change: ctx[30],
+ view: ctx[1],
+ manager: ctx[0].gitManager,
+ workspace: ctx[0].app.workspace
+ }
+ });
+ filecomponent.$on("git-refresh", triggerRefresh);
+ return {
+ c() {
+ create_component(filecomponent.$$.fragment);
+ },
+ m(target, anchor) {
+ mount_component(filecomponent, target, anchor);
+ current = true;
+ },
+ p(ctx2, dirty) {
+ const filecomponent_changes = {};
+ if (dirty[0] & 32)
+ filecomponent_changes.change = ctx2[30];
+ if (dirty[0] & 2)
+ filecomponent_changes.view = ctx2[1];
+ if (dirty[0] & 1)
+ filecomponent_changes.manager = ctx2[0].gitManager;
+ if (dirty[0] & 1)
+ filecomponent_changes.workspace = ctx2[0].app.workspace;
+ filecomponent.$set(filecomponent_changes);
+ },
+ i(local) {
+ if (current)
+ return;
+ transition_in(filecomponent.$$.fragment, local);
+ current = true;
+ },
+ o(local) {
+ transition_out(filecomponent.$$.fragment, local);
+ current = false;
+ },
+ d(detaching) {
+ destroy_component(filecomponent, detaching);
+ }
+ };
+}
+function create_fragment4(ctx) {
+ let main;
+ let div9;
+ let div6;
+ let div0;
+ let t0;
+ let div1;
+ let t1;
+ let div2;
+ let t2;
+ let div3;
+ let t3;
+ let div4;
+ let t4;
+ let div5;
+ let t5;
+ let div7;
+ let t6;
+ let div8;
+ let textarea;
+ let t7;
+ let t8;
+ let div10;
+ let current;
+ let mounted;
+ let dispose;
+ let if_block0 = ctx[6] && create_if_block_5(ctx);
+ let if_block1 = ctx[5] && create_if_block4(ctx);
+ return {
+ c() {
+ main = element("main");
+ div9 = element("div");
+ div6 = element("div");
+ div0 = element("div");
+ t0 = space();
+ div1 = element("div");
+ t1 = space();
+ div2 = element("div");
+ t2 = space();
+ div3 = element("div");
+ t3 = space();
+ div4 = element("div");
+ t4 = space();
+ div5 = element("div");
+ t5 = space();
+ div7 = element("div");
+ t6 = space();
+ div8 = element("div");
+ textarea = element("textarea");
+ t7 = space();
+ if (if_block0)
+ if_block0.c();
+ t8 = space();
+ div10 = element("div");
+ if (if_block1)
+ if_block1.c();
+ attr(div0, "id", "commit-btn");
+ attr(div0, "data-icon", "check");
+ attr(div0, "class", "nav-action-button");
+ attr(div0, "aria-label", "Commit");
+ attr(div1, "id", "stage-all");
+ attr(div1, "class", "nav-action-button");
+ attr(div1, "data-icon", "plus-circle");
+ attr(div1, "aria-label", "Stage all");
+ attr(div2, "id", "unstage-all");
+ attr(div2, "class", "nav-action-button");
+ attr(div2, "data-icon", "minus-circle");
+ attr(div2, "aria-label", "Unstage all");
+ attr(div3, "id", "push");
+ attr(div3, "class", "nav-action-button");
+ attr(div3, "data-icon", "upload");
+ attr(div3, "aria-label", "Push");
+ attr(div4, "id", "pull");
+ attr(div4, "class", "nav-action-button");
+ attr(div4, "data-icon", "download");
+ attr(div4, "aria-label", "Pull");
+ attr(div5, "id", "layoutChange");
+ attr(div5, "class", "nav-action-button");
+ attr(div5, "aria-label", "Change Layout");
+ attr(div6, "class", "group svelte-1f0ksxd");
+ attr(div7, "id", "refresh");
+ attr(div7, "class", "nav-action-button");
+ attr(div7, "data-icon", "refresh-cw");
+ attr(div7, "aria-label", "Refresh");
+ toggle_class(div7, "loading", ctx[4]);
+ attr(textarea, "class", "commit-msg svelte-1f0ksxd");
+ attr(textarea, "type", "text");
+ attr(textarea, "spellcheck", "true");
+ attr(textarea, "placeholder", "Commit Message");
+ attr(div8, "class", "search-input-container svelte-1f0ksxd");
+ attr(div9, "class", "nav-buttons-container svelte-1f0ksxd");
+ attr(div10, "class", "git-view-body svelte-1f0ksxd");
+ attr(main, "class", "svelte-1f0ksxd");
+ },
+ m(target, anchor) {
+ insert(target, main, anchor);
+ append2(main, div9);
+ append2(div9, div6);
+ append2(div6, div0);
+ ctx[17](div0);
+ append2(div6, t0);
+ append2(div6, div1);
+ ctx[18](div1);
+ append2(div6, t1);
+ append2(div6, div2);
+ ctx[19](div2);
+ append2(div6, t2);
+ append2(div6, div3);
+ ctx[20](div3);
+ append2(div6, t3);
+ append2(div6, div4);
+ ctx[21](div4);
+ append2(div6, t4);
+ append2(div6, div5);
+ ctx[22](div5);
+ append2(div9, t5);
+ append2(div9, div7);
+ ctx[24](div7);
+ append2(div9, t6);
+ append2(div9, div8);
+ append2(div8, textarea);
+ set_input_value(textarea, ctx[6]);
+ append2(div8, t7);
+ if (if_block0)
+ if_block0.m(div8, null);
+ append2(main, t8);
+ append2(main, div10);
+ if (if_block1)
+ if_block1.m(div10, null);
+ current = true;
+ if (!mounted) {
+ dispose = [
+ listen(div0, "click", ctx[12]),
+ listen(div1, "click", ctx[13]),
+ listen(div2, "click", ctx[14]),
+ listen(div3, "click", ctx[15]),
+ listen(div4, "click", ctx[16]),
+ listen(div5, "click", ctx[23]),
+ listen(div7, "click", triggerRefresh),
+ listen(textarea, "input", ctx[25])
+ ];
+ mounted = true;
+ }
+ },
+ p(ctx2, dirty) {
+ if (dirty[0] & 16) {
+ toggle_class(div7, "loading", ctx2[4]);
+ }
+ if (dirty[0] & 64) {
+ set_input_value(textarea, ctx2[6]);
+ }
+ if (ctx2[6]) {
+ if (if_block0) {
+ if_block0.p(ctx2, dirty);
+ } else {
+ if_block0 = create_if_block_5(ctx2);
+ if_block0.c();
+ if_block0.m(div8, null);
+ }
+ } else if (if_block0) {
+ if_block0.d(1);
+ if_block0 = null;
+ }
+ if (ctx2[5]) {
+ if (if_block1) {
+ if_block1.p(ctx2, dirty);
+ if (dirty[0] & 32) {
+ transition_in(if_block1, 1);
+ }
+ } else {
+ if_block1 = create_if_block4(ctx2);
+ if_block1.c();
+ transition_in(if_block1, 1);
+ if_block1.m(div10, null);
+ }
+ } else if (if_block1) {
+ group_outros();
+ transition_out(if_block1, 1, 1, () => {
+ if_block1 = null;
+ });
+ check_outros();
+ }
+ },
+ i(local) {
+ if (current)
+ return;
+ transition_in(if_block1);
+ current = true;
+ },
+ o(local) {
+ transition_out(if_block1);
+ current = false;
+ },
+ d(detaching) {
+ if (detaching)
+ detach(main);
+ ctx[17](null);
+ ctx[18](null);
+ ctx[19](null);
+ ctx[20](null);
+ ctx[21](null);
+ ctx[22](null);
+ ctx[24](null);
+ if (if_block0)
+ if_block0.d();
+ if (if_block1)
+ if_block1.d();
+ mounted = false;
+ run_all(dispose);
+ }
+ };
+}
+function triggerRefresh() {
+ dispatchEvent(new CustomEvent("git-refresh"));
+}
+function instance4($$self, $$props, $$invalidate) {
+ let { plugin } = $$props;
+ let { view } = $$props;
+ let loading;
+ let status;
+ let commitMessage = plugin.settings.commitMessage;
+ let buttons = [];
+ let changeHierarchy;
+ let stagedHierarchy;
+ let changesOpen = true;
+ let stagedOpen = true;
+ let showTree = plugin.settings.treeStructure;
+ let layoutBtn;
+ addEventListener("git-view-refresh", refresh);
+ plugin.app.workspace.onLayoutReady(() => setImmediate(() => {
+ buttons.forEach((btn) => (0, import_obsidian13.setIcon)(btn, btn.getAttr("data-icon"), 16));
+ (0, import_obsidian13.setIcon)(layoutBtn, showTree ? "list" : "folder", 16);
+ }));
+ onDestroy(() => {
+ removeEventListener("git-view-refresh", refresh);
+ });
+ function commit() {
+ return __awaiter(this, void 0, void 0, function* () {
+ $$invalidate(4, loading = true);
+ if (yield plugin.hasTooBigFiles(status.staged)) {
+ plugin.setState(PluginState.idle);
+ return false;
+ }
+ plugin.gitManager.commit(commitMessage).then(() => {
+ if (commitMessage !== plugin.settings.commitMessage) {
+ $$invalidate(6, commitMessage = "");
+ }
+ }).finally(triggerRefresh);
+ });
+ }
+ function refresh() {
+ return __awaiter(this, void 0, void 0, function* () {
+ $$invalidate(5, status = plugin.cachedStatus);
+ if (status) {
+ $$invalidate(8, changeHierarchy = {
+ title: "",
+ children: plugin.gitManager.getTreeStructure(status.changed)
+ });
+ $$invalidate(9, stagedHierarchy = {
+ title: "",
+ children: plugin.gitManager.getTreeStructure(status.staged)
+ });
+ }
+ $$invalidate(4, loading = plugin.loading);
+ });
+ }
+ function stageAll() {
+ $$invalidate(4, loading = true);
+ plugin.gitManager.stageAll().finally(triggerRefresh);
+ }
+ function unstageAll() {
+ $$invalidate(4, loading = true);
+ plugin.gitManager.unstageAll().finally(triggerRefresh);
+ }
+ function push() {
+ $$invalidate(4, loading = true);
+ if (ready) {
+ plugin.push().finally(triggerRefresh);
+ }
+ }
+ function pull() {
+ $$invalidate(4, loading = true);
+ plugin.pullChangesFromRemote().finally(triggerRefresh);
+ }
+ function div0_binding($$value) {
+ binding_callbacks[$$value ? "unshift" : "push"](() => {
+ buttons[0] = $$value;
+ $$invalidate(7, buttons);
+ });
+ }
+ function div1_binding($$value) {
+ binding_callbacks[$$value ? "unshift" : "push"](() => {
+ buttons[1] = $$value;
+ $$invalidate(7, buttons);
+ });
+ }
+ function div2_binding($$value) {
+ binding_callbacks[$$value ? "unshift" : "push"](() => {
+ buttons[2] = $$value;
+ $$invalidate(7, buttons);
+ });
+ }
+ function div3_binding($$value) {
+ binding_callbacks[$$value ? "unshift" : "push"](() => {
+ buttons[3] = $$value;
+ $$invalidate(7, buttons);
+ });
+ }
+ function div4_binding($$value) {
+ binding_callbacks[$$value ? "unshift" : "push"](() => {
+ buttons[4] = $$value;
+ $$invalidate(7, buttons);
+ });
+ }
+ function div5_binding($$value) {
+ binding_callbacks[$$value ? "unshift" : "push"](() => {
+ layoutBtn = $$value;
+ $$invalidate(3, layoutBtn);
+ });
+ }
+ const click_handler = () => {
+ $$invalidate(2, showTree = !showTree);
+ $$invalidate(0, plugin.settings.treeStructure = showTree, plugin);
+ plugin.saveSettings();
+ };
+ function div7_binding($$value) {
+ binding_callbacks[$$value ? "unshift" : "push"](() => {
+ buttons[6] = $$value;
+ $$invalidate(7, buttons);
+ });
+ }
+ function textarea_input_handler() {
+ commitMessage = this.value;
+ $$invalidate(6, commitMessage);
+ }
+ const click_handler_1 = () => $$invalidate(6, commitMessage = "");
+ const click_handler_2 = () => $$invalidate(11, stagedOpen = !stagedOpen);
+ const click_handler_3 = () => $$invalidate(10, changesOpen = !changesOpen);
+ $$self.$$set = ($$props2) => {
+ if ("plugin" in $$props2)
+ $$invalidate(0, plugin = $$props2.plugin);
+ if ("view" in $$props2)
+ $$invalidate(1, view = $$props2.view);
+ };
+ $$self.$$.update = () => {
+ if ($$self.$$.dirty[0] & 12) {
+ $: {
+ if (layoutBtn) {
+ layoutBtn.empty();
+ (0, import_obsidian13.setIcon)(layoutBtn, showTree ? "list" : "folder", 16);
+ }
+ }
+ }
+ };
+ return [
+ plugin,
+ view,
+ showTree,
+ layoutBtn,
+ loading,
+ status,
+ commitMessage,
+ buttons,
+ changeHierarchy,
+ stagedHierarchy,
+ changesOpen,
+ stagedOpen,
+ commit,
+ stageAll,
+ unstageAll,
+ push,
+ pull,
+ div0_binding,
+ div1_binding,
+ div2_binding,
+ div3_binding,
+ div4_binding,
+ div5_binding,
+ click_handler,
+ div7_binding,
+ textarea_input_handler,
+ click_handler_1,
+ click_handler_2,
+ click_handler_3
+ ];
+}
+var GitView = class extends SvelteComponent {
+ constructor(options) {
+ super();
+ init(this, options, instance4, create_fragment4, safe_not_equal, { plugin: 0, view: 1 }, add_css4, [-1, -1]);
+ }
+};
+var gitView_default = GitView;
+
+// src/ui/sidebar/sidebarView.ts
+var GitView2 = class extends import_obsidian14.ItemView {
+ constructor(leaf, plugin) {
+ super(leaf);
+ this.plugin = plugin;
+ this.hoverPopover = null;
+ }
+ getViewType() {
+ return GIT_VIEW_CONFIG.type;
+ }
+ getDisplayText() {
+ return GIT_VIEW_CONFIG.name;
+ }
+ getIcon() {
+ return GIT_VIEW_CONFIG.icon;
+ }
+ onClose() {
+ this._view.$destroy();
+ return super.onClose();
+ }
+ onOpen() {
+ this._view = new gitView_default({
+ target: this.contentEl,
+ props: {
+ plugin: this.plugin,
+ view: this
+ }
+ });
+ return super.onOpen();
+ }
+};
+
+// src/main.ts
+var ObsidianGit = class extends import_obsidian15.Plugin {
+ constructor() {
+ super(...arguments);
+ this.gitReady = false;
+ this.promiseQueue = new PromiseQueue();
+ this.conflictOutputFile = "conflict-files-obsidian-git.md";
+ this.offlineMode = false;
+ this.loading = false;
+ this.debRefresh = (0, import_obsidian15.debounce)(() => {
+ if (this.settings.refreshSourceControl) {
+ this.refresh();
+ }
+ }, 7e3, true);
+ }
+ setState(state) {
+ var _a2;
+ this.state = state;
+ (_a2 = this.statusBar) == null ? void 0 : _a2.display();
+ }
+ updateCachedStatus() {
+ return __async(this, null, function* () {
+ this.cachedStatus = yield this.gitManager.status();
+ return this.cachedStatus;
+ });
+ }
+ refresh() {
+ return __async(this, null, function* () {
+ const gitView = this.app.workspace.getLeavesOfType(GIT_VIEW_CONFIG.type);
+ if (this.settings.changedFilesInStatusBar || gitView.length > 0) {
+ this.loading = true;
+ dispatchEvent(new CustomEvent("git-view-refresh"));
+ yield this.updateCachedStatus();
+ this.loading = false;
+ dispatchEvent(new CustomEvent("git-view-refresh"));
+ }
+ });
+ }
+ onload() {
+ return __async(this, null, function* () {
+ console.log("loading " + this.manifest.name + " plugin");
+ yield this.loadSettings();
+ this.migrateSettings();
+ addEventListener("git-refresh", this.refresh.bind(this));
+ this.registerView(GIT_VIEW_CONFIG.type, (leaf) => {
+ return new GitView2(leaf, this);
+ });
+ this.registerView(DIFF_VIEW_CONFIG.type, (leaf) => {
+ return new DiffView(leaf, this);
+ });
+ this.app.workspace.registerHoverLinkSource(GIT_VIEW_CONFIG.type, {
+ display: "Git View",
+ defaultMod: true
+ });
+ this.addSettingTab(new ObsidianGitSettingsTab(this.app, this));
+ this.addCommand({
+ id: "open-git-view",
+ name: "Open source control view",
+ callback: () => __async(this, null, function* () {
+ if (this.app.workspace.getLeavesOfType(GIT_VIEW_CONFIG.type).length === 0) {
+ yield this.app.workspace.getRightLeaf(false).setViewState({
+ type: GIT_VIEW_CONFIG.type
+ });
+ }
+ this.app.workspace.revealLeaf(this.app.workspace.getLeavesOfType(GIT_VIEW_CONFIG.type).first());
+ dispatchEvent(new CustomEvent("git-refresh"));
+ })
+ });
+ this.addCommand({
+ id: "open-diff-view",
+ name: "Open diff view",
+ editorCallback: (editor, view) => __async(this, null, function* () {
+ this.app.workspace.createLeafBySplit(view.leaf).setViewState({ type: DIFF_VIEW_CONFIG.type, state: { staged: false, file: view.file.path } });
+ })
+ });
+ this.addCommand({
+ id: "view-file-on-github",
+ name: "Open file on GitHub",
+ editorCallback: (editor, { file }) => openLineInGitHub(editor, file, this.gitManager)
+ });
+ this.addCommand({
+ id: "view-history-on-github",
+ name: "Open file history on GitHub",
+ editorCallback: (_, { file }) => openHistoryInGitHub(file, this.gitManager)
+ });
+ this.addCommand({
+ id: "pull",
+ name: "Pull",
+ callback: () => this.promiseQueue.addTask(() => this.pullChangesFromRemote())
+ });
+ this.addCommand({
+ id: "push",
+ name: "Create backup",
+ callback: () => this.promiseQueue.addTask(() => this.createBackup(false))
+ });
+ this.addCommand({
+ id: "commit-push-specified-message",
+ name: "Create backup with specific message",
+ callback: () => this.promiseQueue.addTask(() => this.createBackup(false, true))
+ });
+ this.addCommand({
+ id: "commit",
+ name: "Commit all changes",
+ callback: () => this.promiseQueue.addTask(() => this.commit(false))
+ });
+ this.addCommand({
+ id: "commit-specified-message",
+ name: "Commit all changes with specific message",
+ callback: () => this.promiseQueue.addTask(() => this.commit(false, true))
+ });
+ this.addCommand({
+ id: "push2",
+ name: "Push",
+ callback: () => this.promiseQueue.addTask(() => this.push())
+ });
+ this.addCommand({
+ id: "stage-current-file",
+ name: "Stage current file",
+ checkCallback: (checking) => {
+ if (checking) {
+ return this.app.workspace.getActiveFile() !== null;
+ } else {
+ this.promiseQueue.addTask(() => this.stageCurrentFile());
+ }
+ }
+ });
+ this.addCommand({
+ id: "unstage-current-file",
+ name: "Unstage current file",
+ checkCallback: (checking) => {
+ if (checking) {
+ return this.app.workspace.getActiveFile() !== null;
+ } else {
+ this.promiseQueue.addTask(() => this.unstageCurrentFile());
+ }
+ }
+ });
+ this.addCommand({
+ id: "edit-remotes",
+ name: "Edit remotes",
+ callback: () => __async(this, null, function* () {
+ return this.editRemotes();
+ })
+ });
+ this.addCommand({
+ id: "remove-remote",
+ name: "Remove remote",
+ callback: () => __async(this, null, function* () {
+ return this.removeRemote();
+ })
+ });
+ this.addCommand({
+ id: "init-repo",
+ name: "Initialize a new repo",
+ callback: () => __async(this, null, function* () {
+ return this.createNewRepo();
+ })
+ });
+ this.addCommand({
+ id: "clone-repo",
+ name: "Clone an existing remote repo",
+ callback: () => __async(this, null, function* () {
+ return this.cloneNewRepo();
+ })
+ });
+ this.addCommand({
+ id: "list-changed-files",
+ name: "List changed files",
+ callback: () => __async(this, null, function* () {
+ const status = yield this.gitManager.status();
+ this.setState(PluginState.idle);
+ new ChangedFilesModal(this, status.changed).open();
+ })
+ });
+ if (this.settings.showStatusBar) {
+ let statusBarEl = this.addStatusBarItem();
+ this.statusBar = new StatusBar(statusBarEl, this);
+ this.registerInterval(window.setInterval(() => this.statusBar.display(), 1e3));
+ }
+ this.app.workspace.onLayoutReady(() => this.init());
+ });
+ }
+ migrateSettings() {
+ if (this.settings.mergeOnPull != void 0) {
+ this.settings.syncMethod = this.settings.mergeOnPull ? "merge" : "rebase";
+ this.settings.mergeOnPull = void 0;
+ return this.saveSettings();
+ }
+ if (this.settings.autoCommitMessage === void 0) {
+ this.settings.autoCommitMessage = this.settings.commitMessage;
+ this.saveSettings();
+ }
+ }
+ onunload() {
+ return __async(this, null, function* () {
+ this.app.workspace.unregisterHoverLinkSource(GIT_VIEW_CONFIG.type);
+ this.app.workspace.detachLeavesOfType(GIT_VIEW_CONFIG.type);
+ this.app.workspace.detachLeavesOfType(DIFF_VIEW_CONFIG.type);
+ this.clearAutoPull();
+ this.clearAutoBackup();
+ removeEventListener("git-refresh", this.refresh.bind(this));
+ this.app.metadataCache.offref(this.modifyEvent);
+ this.app.metadataCache.offref(this.deleteEvent);
+ this.app.metadataCache.offref(this.createEvent);
+ this.app.metadataCache.offref(this.renameEvent);
+ console.log("unloading " + this.manifest.name + " plugin");
+ });
+ }
+ loadSettings() {
+ return __async(this, null, function* () {
+ this.settings = Object.assign({}, DEFAULT_SETTINGS, yield this.loadData());
+ });
+ }
+ saveSettings() {
+ return __async(this, null, function* () {
+ yield this.saveData(this.settings);
+ });
+ }
+ saveLastAuto(date, mode) {
+ return __async(this, null, function* () {
+ if (mode === "backup") {
+ window.localStorage.setItem(this.manifest.id + ":lastAutoBackup", date.toString());
+ } else if (mode === "pull") {
+ window.localStorage.setItem(this.manifest.id + ":lastAutoPull", date.toString());
+ } else if (mode === "push") {
+ window.localStorage.setItem(this.manifest.id + ":lastAutoPush", date.toString());
+ }
+ });
+ }
+ loadLastAuto() {
+ return __async(this, null, function* () {
+ var _a2, _b, _c;
+ return {
+ "backup": new Date((_a2 = window.localStorage.getItem(this.manifest.id + ":lastAutoBackup")) != null ? _a2 : ""),
+ "pull": new Date((_b = window.localStorage.getItem(this.manifest.id + ":lastAutoPull")) != null ? _b : ""),
+ "push": new Date((_c = window.localStorage.getItem(this.manifest.id + ":lastAutoPush")) != null ? _c : "")
+ };
+ });
+ }
+ init() {
+ return __async(this, null, function* () {
+ try {
+ this.gitManager = new SimpleGit(this);
+ if (this.gitManager instanceof SimpleGit) {
+ yield this.gitManager.setGitInstance();
+ }
+ const result = yield this.gitManager.checkRequirements();
+ switch (result) {
+ case "missing-git":
+ this.displayError("Cannot run git command");
+ break;
+ case "missing-repo":
+ new import_obsidian15.Notice("Can't find a valid git repository. Please create one via the given command.");
+ break;
+ case "valid":
+ this.gitReady = true;
+ this.setState(PluginState.idle);
+ this.modifyEvent = this.app.vault.on("modify", () => {
+ this.debRefresh();
+ });
+ this.deleteEvent = this.app.vault.on("delete", () => {
+ this.debRefresh();
+ });
+ this.createEvent = this.app.vault.on("create", () => {
+ this.debRefresh();
+ });
+ this.renameEvent = this.app.vault.on("rename", () => {
+ this.debRefresh();
+ });
+ this.registerEvent(this.modifyEvent);
+ this.registerEvent(this.deleteEvent);
+ this.registerEvent(this.createEvent);
+ this.registerEvent(this.renameEvent);
+ dispatchEvent(new CustomEvent("git-refresh"));
+ if (this.settings.autoPullOnBoot) {
+ this.promiseQueue.addTask(() => this.pullChangesFromRemote());
+ }
+ const lastAutos = yield this.loadLastAuto();
+ if (this.settings.autoSaveInterval > 0) {
+ const now2 = new Date();
+ const diff = this.settings.autoSaveInterval - Math.round((now2.getTime() - lastAutos.backup.getTime()) / 1e3 / 60);
+ this.startAutoBackup(diff <= 0 ? 0 : diff);
+ }
+ if (this.settings.differentIntervalCommitAndPush && this.settings.autoPushInterval > 0) {
+ const now2 = new Date();
+ const diff = this.settings.autoPushInterval - Math.round((now2.getTime() - lastAutos.push.getTime()) / 1e3 / 60);
+ this.startAutoPush(diff <= 0 ? 0 : diff);
+ }
+ if (this.settings.autoPullInterval > 0) {
+ const now2 = new Date();
+ const diff = this.settings.autoPullInterval - Math.round((now2.getTime() - lastAutos.pull.getTime()) / 1e3 / 60);
+ this.startAutoPull(diff <= 0 ? 0 : diff);
+ }
+ break;
+ default:
+ console.log("Something weird happened. The 'checkRequirements' result is " + result);
+ }
+ } catch (error) {
+ this.displayError(error);
+ console.error(error);
+ }
+ });
+ }
+ createNewRepo() {
+ return __async(this, null, function* () {
+ yield this.gitManager.init();
+ new import_obsidian15.Notice("Initialized new repo");
+ });
+ }
+ cloneNewRepo() {
+ return __async(this, null, function* () {
+ const modal = new GeneralModal(this.app, [], "Enter remote URL");
+ const url = yield modal.open();
+ if (url) {
+ let dir = yield new GeneralModal(this.app, [], "Enter directory for clone. It needs to be empty or not existent.").open();
+ if (dir) {
+ dir = path2.normalize(dir);
+ new import_obsidian15.Notice(`Cloning new repo into "${dir}"`);
+ yield this.gitManager.clone(url, dir);
+ new import_obsidian15.Notice("Cloned new repo");
+ }
+ }
+ });
+ }
+ isAllInitialized() {
+ return __async(this, null, function* () {
+ if (!this.gitReady) {
+ yield this.init();
+ }
+ return this.gitReady;
+ });
+ }
+ pullChangesFromRemote() {
+ return __async(this, null, function* () {
+ if (!(yield this.isAllInitialized()))
+ return;
+ const filesUpdated = yield this.pull();
+ if (!filesUpdated) {
+ this.displayMessage("Everything is up-to-date");
+ }
+ if (this.gitManager instanceof SimpleGit) {
+ const status = yield this.gitManager.status();
+ if (status.conflicted.length > 0) {
+ this.displayError(`You have ${status.conflicted.length} conflict ${status.conflicted.length > 1 ? "files" : "file"}`);
+ this.handleConflict(status.conflicted);
+ }
+ }
+ dispatchEvent(new CustomEvent("git-refresh"));
+ this.lastUpdate = Date.now();
+ this.setState(PluginState.idle);
+ });
+ }
+ createBackup(fromAutoBackup, requestCustomMessage = false) {
+ return __async(this, null, function* () {
+ if (!(yield this.isAllInitialized()))
+ return;
+ if (!(yield this.commit(fromAutoBackup, requestCustomMessage)))
+ return;
+ if (!this.settings.disablePush) {
+ if (yield this.gitManager.canPush()) {
+ if (this.settings.pullBeforePush) {
+ yield this.pull();
+ }
+ yield this.push();
+ } else {
+ this.displayMessage("No changes to push");
+ }
+ }
+ this.setState(PluginState.idle);
+ });
+ }
+ commit(fromAutoBackup, requestCustomMessage = false) {
+ return __async(this, null, function* () {
+ if (!(yield this.isAllInitialized()))
+ return false;
+ const file = this.app.vault.getAbstractFileByPath(this.conflictOutputFile);
+ if (file)
+ yield this.app.vault.delete(file);
+ let status;
+ if (this.gitManager instanceof SimpleGit) {
+ status = yield this.gitManager.status();
+ if (fromAutoBackup && status.conflicted.length > 0) {
+ this.displayError(`Did not commit, because you have ${status.conflicted.length} conflict ${status.conflicted.length > 1 ? "files" : "file"}. Please resolve them and commit per command.`);
+ this.handleConflict(status.conflicted);
+ return;
+ }
+ } else {
+ status = yield this.gitManager.status();
+ }
+ if (yield this.hasTooBigFiles([...status.staged, ...status.changed])) {
+ this.setState(PluginState.idle);
+ return false;
+ }
+ const changedFiles = status.changed.length + status.staged.length;
+ if (changedFiles !== 0) {
+ let commitMessage = fromAutoBackup ? this.settings.autoCommitMessage : this.settings.commitMessage;
+ if (fromAutoBackup && this.settings.customMessageOnAutoBackup || requestCustomMessage) {
+ if (!this.settings.disablePopups && fromAutoBackup) {
+ new import_obsidian15.Notice("Auto backup: Please enter a custom commit message. Leave empty to abort");
+ }
+ const tempMessage = yield new CustomMessageModal(this, true).open();
+ if (tempMessage != void 0 && tempMessage != "" && tempMessage != "...") {
+ commitMessage = tempMessage;
+ } else {
+ this.setState(PluginState.idle);
+ return false;
+ }
+ }
+ const committedFiles = yield this.gitManager.commitAll(commitMessage);
+ this.displayMessage(`Committed ${committedFiles} ${committedFiles > 1 ? "files" : "file"}`);
+ } else {
+ this.displayMessage("No changes to commit");
+ }
+ dispatchEvent(new CustomEvent("git-refresh"));
+ this.setState(PluginState.idle);
+ return true;
+ });
+ }
+ hasTooBigFiles(files) {
+ return __async(this, null, function* () {
+ var _a2;
+ const branchInfo = yield this.gitManager.branchInfo();
+ const remote = (_a2 = branchInfo.tracking) == null ? void 0 : _a2.split("/")[0];
+ if (remote) {
+ const remoteUrl = yield this.gitManager.getRemoteUrl(remote);
+ if (remoteUrl.includes("github.com")) {
+ const tooBigFiles = files.filter((f) => {
+ const file = this.app.vault.getAbstractFileByPath(f.vault_path);
+ if (file instanceof import_obsidian15.TFile) {
+ return file.stat.size >= 1e8;
+ }
+ return false;
+ });
+ if (tooBigFiles.length > 0) {
+ this.displayError(`Did not commit, because following files are too big: ${tooBigFiles.map((e) => e.vault_path)}. Please remove them.`);
+ return true;
+ }
+ }
+ }
+ return false;
+ });
+ }
+ push() {
+ return __async(this, null, function* () {
+ if (!(yield this.isAllInitialized()))
+ return false;
+ if (!this.remotesAreSet()) {
+ return false;
+ }
+ const file = this.app.vault.getAbstractFileByPath(this.conflictOutputFile);
+ if (file)
+ yield this.app.vault.delete(file);
+ let status;
+ if (this.gitManager instanceof SimpleGit && (status = yield this.gitManager.status()).conflicted.length > 0) {
+ this.displayError(`Cannot push. You have ${status.conflicted.length} conflict ${status.conflicted.length > 1 ? "files" : "file"}`);
+ this.handleConflict(status.conflicted);
+ return false;
+ } else {
+ const pushedFiles = yield this.gitManager.push();
+ this.lastUpdate = Date.now();
+ if (pushedFiles > 0) {
+ this.displayMessage(`Pushed ${pushedFiles} ${pushedFiles > 1 ? "files" : "file"} to remote`);
+ } else {
+ this.displayMessage(`No changes to push`);
+ }
+ this.offlineMode = false;
+ this.setState(PluginState.idle);
+ return true;
+ }
+ });
+ }
+ pull() {
+ return __async(this, null, function* () {
+ const pulledFilesLength = yield this.gitManager.pull();
+ this.offlineMode = false;
+ if (pulledFilesLength > 0) {
+ this.displayMessage(`Pulled ${pulledFilesLength} ${pulledFilesLength > 1 ? "files" : "file"} from remote`);
+ }
+ return pulledFilesLength != 0;
+ });
+ }
+ stageCurrentFile() {
+ return __async(this, null, function* () {
+ if (!(yield this.isAllInitialized()))
+ return false;
+ const file = this.app.workspace.getActiveFile();
+ yield this.gitManager.stage(file.path, true);
+ this.displayMessage(`Staged ${file.path}`);
+ dispatchEvent(new CustomEvent("git-refresh"));
+ this.setState(PluginState.idle);
+ return true;
+ });
+ }
+ unstageCurrentFile() {
+ return __async(this, null, function* () {
+ if (!(yield this.isAllInitialized()))
+ return false;
+ const file = this.app.workspace.getActiveFile();
+ yield this.gitManager.unstage(file.path, true);
+ this.displayMessage(`Unstaged ${file.path}`);
+ dispatchEvent(new CustomEvent("git-refresh"));
+ this.setState(PluginState.idle);
+ return true;
+ });
+ }
+ remotesAreSet() {
+ return __async(this, null, function* () {
+ if (!(yield this.gitManager.branchInfo()).tracking) {
+ new import_obsidian15.Notice("No upstream branch is set. Please select one.");
+ const remoteBranch = yield this.selectRemoteBranch();
+ if (remoteBranch == void 0) {
+ this.displayError("Did not push. No upstream-branch is set!", 1e4);
+ this.setState(PluginState.idle);
+ return false;
+ } else {
+ yield this.gitManager.updateUpstreamBranch(remoteBranch);
+ return true;
+ }
+ }
+ return true;
+ });
+ }
+ startAutoBackup(minutes) {
+ const time = (minutes != null ? minutes : this.settings.autoSaveInterval) * 6e4;
+ if (this.settings.autoBackupAfterFileChange) {
+ if (minutes === 0) {
+ this.doAutoBackup();
+ } else {
+ this.onFileModifyEventRef = this.app.vault.on("modify", () => this.autoBackupDebouncer());
+ this.autoBackupDebouncer = (0, import_obsidian15.debounce)(() => this.doAutoBackup(), time, true);
+ }
+ } else {
+ this.timeoutIDBackup = window.setTimeout(() => this.doAutoBackup(), time);
+ }
+ }
+ doAutoBackup() {
+ this.promiseQueue.addTask(() => {
+ if (this.settings.differentIntervalCommitAndPush) {
+ return this.commit(true);
+ } else {
+ return this.createBackup(true);
+ }
+ });
+ this.saveLastAuto(new Date(), "backup");
+ this.saveSettings();
+ this.startAutoBackup();
+ }
+ startAutoPull(minutes) {
+ this.timeoutIDPull = window.setTimeout(() => {
+ this.promiseQueue.addTask(() => this.pullChangesFromRemote());
+ this.saveLastAuto(new Date(), "pull");
+ this.saveSettings();
+ this.startAutoPull();
+ }, (minutes != null ? minutes : this.settings.autoPullInterval) * 6e4);
+ }
+ startAutoPush(minutes) {
+ this.timeoutIDPush = window.setTimeout(() => {
+ this.promiseQueue.addTask(() => this.push());
+ this.saveLastAuto(new Date(), "push");
+ this.saveSettings();
+ this.startAutoPush();
+ }, (minutes != null ? minutes : this.settings.autoPushInterval) * 6e4);
+ }
+ clearAutoBackup() {
+ var _a2;
+ let wasActive = false;
+ if (this.timeoutIDBackup) {
+ window.clearTimeout(this.timeoutIDBackup);
+ this.timeoutIDBackup = void 0;
+ wasActive = true;
+ }
+ if (this.onFileModifyEventRef) {
+ (_a2 = this.autoBackupDebouncer) == null ? void 0 : _a2.cancel();
+ this.app.vault.offref(this.onFileModifyEventRef);
+ this.onFileModifyEventRef = void 0;
+ wasActive = true;
+ }
+ return wasActive;
+ }
+ clearAutoPull() {
+ if (this.timeoutIDPull) {
+ window.clearTimeout(this.timeoutIDPull);
+ this.timeoutIDPull = void 0;
+ return true;
+ }
+ return false;
+ }
+ clearAutoPush() {
+ if (this.timeoutIDPush) {
+ window.clearTimeout(this.timeoutIDPush);
+ this.timeoutIDPush = void 0;
+ return true;
+ }
+ return false;
+ }
+ handleConflict(conflicted) {
+ return __async(this, null, function* () {
+ this.setState(PluginState.conflicted);
+ const lines = [
+ "# Conflict files",
+ "Please resolve them and commit per command (This file will be deleted before the commit).",
+ ...conflicted.map((e) => {
+ const file = this.app.vault.getAbstractFileByPath(e);
+ if (file instanceof import_obsidian15.TFile) {
+ const link = this.app.metadataCache.fileToLinktext(file, "/");
+ return `- [[${link}]]`;
+ } else {
+ return `- Not a file: ${e}`;
+ }
+ })
+ ];
+ this.writeAndOpenFile(lines.join("\n"));
+ });
+ }
+ editRemotes() {
+ return __async(this, null, function* () {
+ if (!(yield this.isAllInitialized()))
+ return;
+ const remotes = yield this.gitManager.getRemotes();
+ const nameModal = new GeneralModal(this.app, remotes, "Select or create a new remote by typing its name and selecting it");
+ const remoteName = yield nameModal.open();
+ if (remoteName) {
+ const urlModal = new GeneralModal(this.app, [], "Enter the remote URL");
+ const remoteURL = yield urlModal.open();
+ yield this.gitManager.setRemote(remoteName, remoteURL);
+ return remoteName;
+ }
+ });
+ }
+ selectRemoteBranch() {
+ return __async(this, null, function* () {
+ let remotes = yield this.gitManager.getRemotes();
+ let selectedRemote;
+ if (remotes.length === 0) {
+ selectedRemote = yield this.editRemotes();
+ if (selectedRemote == void 0) {
+ remotes = yield this.gitManager.getRemotes();
+ }
+ }
+ const nameModal = new GeneralModal(this.app, remotes, "Select or create a new remote by typing its name and selecting it");
+ const remoteName = selectedRemote != null ? selectedRemote : yield nameModal.open();
+ if (remoteName) {
+ this.displayMessage("Fetching remote branches");
+ yield this.gitManager.fetch(remoteName);
+ const branches = yield this.gitManager.getRemoteBranches(remoteName);
+ const branchModal = new GeneralModal(this.app, branches, "Select or create a new remote branch by typing its name and selecting it");
+ return yield branchModal.open();
+ }
+ });
+ }
+ removeRemote() {
+ return __async(this, null, function* () {
+ if (!(yield this.isAllInitialized()))
+ return;
+ const remotes = yield this.gitManager.getRemotes();
+ const nameModal = new GeneralModal(this.app, remotes, "Select a remote");
+ const remoteName = yield nameModal.open();
+ if (remoteName) {
+ this.gitManager.removeRemote(remoteName);
+ }
+ });
+ }
+ writeAndOpenFile(text2) {
+ return __async(this, null, function* () {
+ yield this.app.vault.adapter.write(this.conflictOutputFile, text2);
+ let fileIsAlreadyOpened = false;
+ this.app.workspace.iterateAllLeaves((leaf) => {
+ if (leaf.getDisplayText() != "" && this.conflictOutputFile.startsWith(leaf.getDisplayText())) {
+ fileIsAlreadyOpened = true;
+ }
+ });
+ if (!fileIsAlreadyOpened) {
+ this.app.workspace.openLinkText(this.conflictOutputFile, "/", true);
+ }
+ });
+ }
+ displayMessage(message, timeout = 4 * 1e3) {
+ var _a2;
+ (_a2 = this.statusBar) == null ? void 0 : _a2.displayMessage(message.toLowerCase(), timeout);
+ if (!this.settings.disablePopups) {
+ new import_obsidian15.Notice(message, 5 * 1e3);
+ }
+ console.log(`git obsidian message: ${message}`);
+ }
+ displayError(message, timeout = 10 * 1e3) {
+ var _a2;
+ message = message.toString();
+ new import_obsidian15.Notice(message, timeout);
+ console.log(`git obsidian error: ${message}`);
+ (_a2 = this.statusBar) == null ? void 0 : _a2.displayMessage(message.toLowerCase(), timeout);
+ }
+};
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {});
+/*!
+ Copyright (c) 2016 Jed Watson.
+ Licensed under the MIT License (MIT), see
+ http://jedwatson.github.io/classnames
+*/
+/*! *****************************************************************************
+Copyright (c) Microsoft Corporation.
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THIS SOFTWARE.
+***************************************************************************** */
diff --git a/.obsidian/plugins/obsidian-git/manifest.json b/.obsidian/plugins/obsidian-git/manifest.json
new file mode 100644
index 00000000..48bf9e99
--- /dev/null
+++ b/.obsidian/plugins/obsidian-git/manifest.json
@@ -0,0 +1,8 @@
+{
+ "id": "obsidian-git",
+ "name": "Obsidian Git",
+ "description": "Backup your vault with git.",
+ "isDesktopOnly": true,
+ "js": "main.js",
+ "version": "1.28.0"
+}
diff --git a/.obsidian/plugins/obsidian-git/styles.css b/.obsidian/plugins/obsidian-git/styles.css
new file mode 100644
index 00000000..68a06f02
--- /dev/null
+++ b/.obsidian/plugins/obsidian-git/styles.css
@@ -0,0 +1,413 @@
+@keyframes loading {
+ 0% {
+ transform: rotate(0deg);
+ }
+ 100% {
+ transform: rotate(360deg);
+ }
+}
+.loading > svg {
+ animation: 2s linear infinite loading;
+ transform-origin: 50% 50%;
+ display: inline-block;
+}
+
+.obsidian-git-center {
+ margin: auto;
+ width: 50%;
+}
+
+.tooltip.mod-left {
+ overflow-wrap: break-word;
+}
+
+.tooltip.mod-right {
+ overflow-wrap: break-word;
+}
+
+.obsidian-git-shortcuts {
+ margin: 10px;
+}
+
+.diff-err {
+ height: 100%;
+ display: flex;
+ justify-content: center;
+ flex-direction: column;
+ align-items: center;
+}
+
+.diff-err-sign {
+ font-size: 2em;
+}
+
+.workspace-leaf-content[data-type="diff-view"] .d2h-d-none {
+ display: none;
+}
+.workspace-leaf-content[data-type="diff-view"] .d2h-wrapper {
+ text-align: left;
+}
+.workspace-leaf-content[data-type="diff-view"] .d2h-file-header {
+ background-color: var(--background-primary);
+ border-bottom: 1px solid var(--interactive-accent);
+ font-family: var(--font-monospace);
+ height: 35px;
+ padding: 5px 10px;
+}
+.workspace-leaf-content[data-type="diff-view"] .d2h-file-header,
+.workspace-leaf-content[data-type="diff-view"] .d2h-file-stats {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+}
+.workspace-leaf-content[data-type="diff-view"] .d2h-file-stats {
+ font-size: 14px;
+ margin-left: auto;
+}
+.workspace-leaf-content[data-type="diff-view"] .d2h-lines-added {
+ border: 1px solid #b4e2b4;
+ border-radius: 5px 0 0 5px;
+ color: #399839;
+ padding: 2px;
+ text-align: right;
+ vertical-align: middle;
+}
+.workspace-leaf-content[data-type="diff-view"] .d2h-lines-deleted {
+ border: 1px solid #e9aeae;
+ border-radius: 0 5px 5px 0;
+ color: #c33;
+ margin-left: 1px;
+ padding: 2px;
+ text-align: left;
+ vertical-align: middle;
+}
+.workspace-leaf-content[data-type="diff-view"] .d2h-file-name-wrapper {
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ font-size: 15px;
+ width: 100%;
+}
+.workspace-leaf-content[data-type="diff-view"] .d2h-file-name {
+ overflow-x: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+.workspace-leaf-content[data-type="diff-view"] .d2h-file-wrapper {
+ border: 1px solid var(--background-modifier-border);
+ border-radius: 3px;
+ margin-bottom: 1em;
+}
+.workspace-leaf-content[data-type="diff-view"] .d2h-file-collapse {
+ -webkit-box-pack: end;
+ -ms-flex-pack: end;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ border: 1px solid var(--background-modifier-border);
+ border-radius: 3px;
+ cursor: pointer;
+ display: none;
+ font-size: 12px;
+ justify-content: flex-end;
+ padding: 4px 8px;
+}
+.workspace-leaf-content[data-type="diff-view"] .d2h-file-collapse.d2h-selected {
+ background-color: #c8e1ff;
+}
+.workspace-leaf-content[data-type="diff-view"] .d2h-file-collapse-input {
+ margin: 0 4px 0 0;
+}
+.workspace-leaf-content[data-type="diff-view"] .d2h-diff-table {
+ border-collapse: collapse;
+ font-family: Menlo, Consolas, monospace;
+ font-size: 13px;
+ width: 100%;
+}
+.workspace-leaf-content[data-type="diff-view"] .d2h-files-diff {
+ width: 100%;
+}
+.workspace-leaf-content[data-type="diff-view"] .d2h-file-diff {
+ overflow-y: hidden;
+}
+.workspace-leaf-content[data-type="diff-view"] .d2h-file-side-diff {
+ display: inline-block;
+ margin-bottom: -8px;
+ margin-right: -4px;
+ overflow-x: scroll;
+ overflow-y: hidden;
+ width: 50%;
+}
+.workspace-leaf-content[data-type="diff-view"] .d2h-code-line {
+ padding: 0 8em;
+}
+.workspace-leaf-content[data-type="diff-view"] .d2h-code-line,
+.workspace-leaf-content[data-type="diff-view"] .d2h-code-side-line {
+ display: inline-block;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ white-space: nowrap;
+ width: 100%;
+}
+.workspace-leaf-content[data-type="diff-view"] .d2h-code-side-line {
+ padding: 0 4.5em;
+}
+.workspace-leaf-content[data-type="diff-view"] .d2h-code-line-ctn {
+ word-wrap: normal;
+ background: none;
+ display: inline-block;
+ padding: 0;
+ -webkit-user-select: text;
+ -moz-user-select: text;
+ -ms-user-select: text;
+ user-select: text;
+ vertical-align: middle;
+ white-space: pre;
+ width: 100%;
+}
+.theme-light .workspace-leaf-content[data-type="diff-view"] .d2h-code-line del,
+.theme-light
+ .workspace-leaf-content[data-type="diff-view"]
+ .d2h-code-side-line
+ del {
+ background-color: #ffb6ba;
+}
+.theme-dark .workspace-leaf-content[data-type="diff-view"] .d2h-code-line del,
+.theme-dark
+ .workspace-leaf-content[data-type="diff-view"]
+ .d2h-code-side-line
+ del {
+ background-color: #8d232881;
+}
+.workspace-leaf-content[data-type="diff-view"] .d2h-code-line del,
+.workspace-leaf-content[data-type="diff-view"] .d2h-code-line ins,
+.workspace-leaf-content[data-type="diff-view"] .d2h-code-side-line del,
+.workspace-leaf-content[data-type="diff-view"] .d2h-code-side-line ins {
+ border-radius: 0.2em;
+ display: inline-block;
+ margin-top: -1px;
+ text-decoration: none;
+ vertical-align: middle;
+}
+.theme-light .workspace-leaf-content[data-type="diff-view"] .d2h-code-line ins,
+.theme-light
+ .workspace-leaf-content[data-type="diff-view"]
+ .d2h-code-side-line
+ ins {
+ background-color: #97f295;
+ text-align: left;
+}
+.theme-dark .workspace-leaf-content[data-type="diff-view"] .d2h-code-line ins,
+.theme-dark
+ .workspace-leaf-content[data-type="diff-view"]
+ .d2h-code-side-line
+ ins {
+ background-color: #1d921996;
+ text-align: left;
+}
+.workspace-leaf-content[data-type="diff-view"] .d2h-code-line-prefix {
+ word-wrap: normal;
+ background: none;
+ display: inline;
+ padding: 0;
+ white-space: pre;
+}
+.workspace-leaf-content[data-type="diff-view"] .line-num1 {
+ float: left;
+}
+.workspace-leaf-content[data-type="diff-view"] .line-num1,
+.workspace-leaf-content[data-type="diff-view"] .line-num2 {
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ overflow: hidden;
+ padding: 0 0.5em;
+ text-overflow: ellipsis;
+ width: 3.5em;
+}
+.workspace-leaf-content[data-type="diff-view"] .line-num2 {
+ float: right;
+}
+.workspace-leaf-content[data-type="diff-view"] .d2h-code-linenumber {
+ background-color: var(--background-primary);
+ border: solid var(--background-modifier-border);
+ border-width: 0 1px;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ color: var(--text-muted);
+ cursor: pointer;
+ display: inline-block;
+ position: absolute;
+ text-align: right;
+ width: 7.5em;
+}
+.workspace-leaf-content[data-type="diff-view"] .d2h-code-linenumber:after {
+ content: "\200b";
+}
+.workspace-leaf-content[data-type="diff-view"] .d2h-code-side-linenumber {
+ background-color: var(--background-primary);
+ border: solid var(--background-modifier-border);
+ border-width: 0 1px;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ color: var(--text-muted);
+ cursor: pointer;
+ display: inline-block;
+ overflow: hidden;
+ padding: 0 0.5em;
+ position: absolute;
+ text-align: right;
+ text-overflow: ellipsis;
+ width: 4em;
+}
+.workspace-leaf-content[data-type="diff-view"] .d2h-code-side-linenumber:after {
+ content: "\200b";
+}
+.workspace-leaf-content[data-type="diff-view"] .d2h-code-side-emptyplaceholder,
+.workspace-leaf-content[data-type="diff-view"] .d2h-emptyplaceholder {
+ background-color: var(--background-primary);
+ border-color: var(--background-modifier-border);
+}
+.workspace-leaf-content[data-type="diff-view"] .d2h-code-line-prefix,
+.workspace-leaf-content[data-type="diff-view"] .d2h-code-linenumber,
+.workspace-leaf-content[data-type="diff-view"] .d2h-code-side-linenumber,
+.workspace-leaf-content[data-type="diff-view"] .d2h-emptyplaceholder {
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+.workspace-leaf-content[data-type="diff-view"] .d2h-code-linenumber,
+.workspace-leaf-content[data-type="diff-view"] .d2h-code-side-linenumber {
+ direction: rtl;
+}
+.theme-light .workspace-leaf-content[data-type="diff-view"] .d2h-del {
+ background-color: #fee8e9;
+ border-color: #e9aeae;
+}
+.theme-light .workspace-leaf-content[data-type="diff-view"] .d2h-ins {
+ background-color: #dfd;
+ border-color: #b4e2b4;
+}
+.theme-dark .workspace-leaf-content[data-type="diff-view"] .d2h-del {
+ background-color: #521b1d83;
+ border-color: #691d1d73;
+}
+.theme-dark .workspace-leaf-content[data-type="diff-view"] .d2h-ins {
+ background-color: rgba(30, 71, 30, 0.5);
+ border-color: #13501381;
+}
+.workspace-leaf-content[data-type="diff-view"] .d2h-info {
+ background-color: var(--background-primary);
+ border-color: var(--background-modifier-border);
+ color: var(--text-normal);
+}
+.theme-light
+ .workspace-leaf-content[data-type="diff-view"]
+ .d2h-file-diff
+ .d2h-del.d2h-change {
+ background-color: #fdf2d0;
+}
+.theme-dark
+ .workspace-leaf-content[data-type="diff-view"]
+ .d2h-file-diff
+ .d2h-del.d2h-change {
+ background-color: #55492480;
+}
+.theme-light
+ .workspace-leaf-content[data-type="diff-view"]
+ .d2h-file-diff
+ .d2h-ins.d2h-change {
+ background-color: #ded;
+}
+.theme-dark
+ .workspace-leaf-content[data-type="diff-view"]
+ .d2h-file-diff
+ .d2h-ins.d2h-change {
+ background-color: rgba(37, 78, 37, 0.418);
+}
+.workspace-leaf-content[data-type="diff-view"] .d2h-file-list-wrapper {
+ margin-bottom: 10px;
+}
+.workspace-leaf-content[data-type="diff-view"] .d2h-file-list-wrapper a {
+ color: #3572b0;
+ text-decoration: none;
+}
+.workspace-leaf-content[data-type="diff-view"]
+ .d2h-file-list-wrapper
+ a:visited {
+ color: #3572b0;
+}
+.workspace-leaf-content[data-type="diff-view"] .d2h-file-list-header {
+ text-align: left;
+}
+.workspace-leaf-content[data-type="diff-view"] .d2h-file-list-title {
+ font-weight: 700;
+}
+.workspace-leaf-content[data-type="diff-view"] .d2h-file-list-line {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ text-align: left;
+}
+.workspace-leaf-content[data-type="diff-view"] .d2h-file-list {
+ display: block;
+ list-style: none;
+ margin: 0;
+ padding: 0;
+}
+.workspace-leaf-content[data-type="diff-view"] .d2h-file-list > li {
+ border-bottom: 1px solid var(--background-modifier-border);
+ margin: 0;
+ padding: 5px 10px;
+}
+.workspace-leaf-content[data-type="diff-view"] .d2h-file-list > li:last-child {
+ border-bottom: none;
+}
+.workspace-leaf-content[data-type="diff-view"] .d2h-file-switch {
+ cursor: pointer;
+ display: none;
+ font-size: 10px;
+}
+.workspace-leaf-content[data-type="diff-view"] .d2h-icon {
+ fill: currentColor;
+ margin-right: 10px;
+ vertical-align: middle;
+}
+.workspace-leaf-content[data-type="diff-view"] .d2h-deleted {
+ color: #c33;
+}
+.workspace-leaf-content[data-type="diff-view"] .d2h-added {
+ color: #399839;
+}
+.workspace-leaf-content[data-type="diff-view"] .d2h-changed {
+ color: #d0b44c;
+}
+.workspace-leaf-content[data-type="diff-view"] .d2h-moved {
+ color: #3572b0;
+}
+.workspace-leaf-content[data-type="diff-view"] .d2h-tag {
+ background-color: var(--background-primary);
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ font-size: 10px;
+ margin-left: 5px;
+ padding: 0 2px;
+}
+.workspace-leaf-content[data-type="diff-view"] .d2h-deleted-tag {
+ border: 2px solid #c33;
+}
+.workspace-leaf-content[data-type="diff-view"] .d2h-added-tag {
+ border: 1px solid #399839;
+}
+.workspace-leaf-content[data-type="diff-view"] .d2h-changed-tag {
+ border: 1px solid #d0b44c;
+}
+.workspace-leaf-content[data-type="diff-view"] .d2h-moved-tag {
+ border: 1px solid #3572b0;
+}
diff --git a/.obsidian/plugins/obsidian-hider/data.json b/.obsidian/plugins/obsidian-hider/data.json
new file mode 100644
index 00000000..010f878e
--- /dev/null
+++ b/.obsidian/plugins/obsidian-hider/data.json
@@ -0,0 +1,11 @@
+{
+ "frameless": false,
+ "hideRibbon": false,
+ "hideStatus": false,
+ "hideScroll": false,
+ "hideTooltips": false,
+ "hideSearchSuggestions": false,
+ "hideInstructions": false,
+ "hideMeta": false,
+ "hideVault": true
+}
\ No newline at end of file
diff --git a/.obsidian/plugins/obsidian-hider/main.js b/.obsidian/plugins/obsidian-hider/main.js
new file mode 100644
index 00000000..69e9abd9
--- /dev/null
+++ b/.obsidian/plugins/obsidian-hider/main.js
@@ -0,0 +1,277 @@
+'use strict';
+
+var obsidian = require('obsidian');
+
+/*! *****************************************************************************
+Copyright (c) Microsoft Corporation.
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THIS SOFTWARE.
+***************************************************************************** */
+/* global Reflect, Promise */
+
+var extendStatics = function(d, b) {
+ extendStatics = Object.setPrototypeOf ||
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
+ return extendStatics(d, b);
+};
+
+function __extends(d, b) {
+ extendStatics(d, b);
+ function __() { this.constructor = d; }
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+}
+
+function __awaiter(thisArg, _arguments, P, generator) {
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
+ return new (P || (P = Promise))(function (resolve, reject) {
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
+ });
+}
+
+function __generator(thisArg, body) {
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
+ function verb(n) { return function (v) { return step([n, v]); }; }
+ function step(op) {
+ if (f) throw new TypeError("Generator is already executing.");
+ while (_) try {
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
+ if (y = 0, t) op = [op[0] & 2, t.value];
+ switch (op[0]) {
+ case 0: case 1: t = op; break;
+ case 4: _.label++; return { value: op[1], done: false };
+ case 5: _.label++; y = op[1]; op = [0]; continue;
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
+ default:
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
+ if (t[2]) _.ops.pop();
+ _.trys.pop(); continue;
+ }
+ op = body.call(thisArg, _);
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
+ }
+}
+
+var Hider = /** @class */ (function (_super) {
+ __extends(Hider, _super);
+ function Hider() {
+ var _this = _super !== null && _super.apply(this, arguments) || this;
+ // refresh function for when we change settings
+ _this.refresh = function () {
+ // re-load the style
+ _this.updateStyle();
+ };
+ // update the styles (at the start, or as the result of a settings change)
+ _this.updateStyle = function () {
+ document.body.classList.toggle('hider-ribbon', _this.settings.hideRibbon);
+ document.body.classList.toggle('hider-status', _this.settings.hideStatus);
+ document.body.classList.toggle('hider-frameless', _this.settings.frameless);
+ document.body.classList.toggle('hider-scroll', _this.settings.hideScroll);
+ document.body.classList.toggle('hider-tooltips', _this.settings.hideTooltips);
+ document.body.classList.toggle('hider-search-suggestions', _this.settings.hideSearchSuggestions);
+ document.body.classList.toggle('hider-instructions', _this.settings.hideInstructions);
+ document.body.classList.toggle('hider-meta', _this.settings.hideMeta);
+ document.body.classList.toggle('hider-vault', _this.settings.hideVault);
+ };
+ return _this;
+ }
+ Hider.prototype.onload = function () {
+ return __awaiter(this, void 0, void 0, function () {
+ var _this = this;
+ return __generator(this, function (_a) {
+ switch (_a.label) {
+ case 0:
+ // load settings
+ return [4 /*yield*/, this.loadSettings()];
+ case 1:
+ // load settings
+ _a.sent();
+ // add the settings tab
+ this.addSettingTab(new HiderSettingTab(this.app, this));
+ // add the toggle on/off command
+ this.addCommand({
+ id: 'toggle-app-ribbon',
+ name: 'Toggle App Ribbon',
+ callback: function () {
+ // switch the setting, save and refresh
+ _this.settings.hideRibbon = !_this.settings.hideRibbon;
+ _this.saveData(_this.settings);
+ _this.refresh();
+ }
+ });
+ this.addCommand({
+ id: 'toggle-hider-status',
+ name: 'Toggle Status Bar',
+ callback: function () {
+ // switch the setting, save and refresh
+ _this.settings.hideStatus = !_this.settings.hideStatus;
+ _this.saveData(_this.settings);
+ _this.refresh();
+ }
+ });
+ this.refresh();
+ return [2 /*return*/];
+ }
+ });
+ });
+ };
+ Hider.prototype.onunload = function () {
+ console.log('Unloading Hider plugin');
+ };
+ Hider.prototype.loadSettings = function () {
+ return __awaiter(this, void 0, void 0, function () {
+ var _a, _b, _c, _d;
+ return __generator(this, function (_e) {
+ switch (_e.label) {
+ case 0:
+ _a = this;
+ _c = (_b = Object).assign;
+ _d = [DEFAULT_SETTINGS];
+ return [4 /*yield*/, this.loadData()];
+ case 1:
+ _a.settings = _c.apply(_b, _d.concat([_e.sent()]));
+ return [2 /*return*/];
+ }
+ });
+ });
+ };
+ Hider.prototype.saveSettings = function () {
+ return __awaiter(this, void 0, void 0, function () {
+ return __generator(this, function (_a) {
+ switch (_a.label) {
+ case 0: return [4 /*yield*/, this.saveData(this.settings)];
+ case 1:
+ _a.sent();
+ return [2 /*return*/];
+ }
+ });
+ });
+ };
+ return Hider;
+}(obsidian.Plugin));
+var DEFAULT_SETTINGS = {
+ frameless: false,
+ hideRibbon: false,
+ hideStatus: false,
+ hideScroll: false,
+ hideTooltips: false,
+ hideSearchSuggestions: false,
+ hideInstructions: false,
+ hideMeta: false,
+ hideVault: false
+};
+var HiderSettingTab = /** @class */ (function (_super) {
+ __extends(HiderSettingTab, _super);
+ function HiderSettingTab(app, plugin) {
+ var _this = _super.call(this, app, plugin) || this;
+ _this.plugin = plugin;
+ return _this;
+ }
+ HiderSettingTab.prototype.display = function () {
+ var _this = this;
+ var containerEl = this.containerEl;
+ containerEl.empty();
+ new obsidian.Setting(containerEl)
+ .setName('Hide title bar (frameless mode)')
+ .setDesc('Hides the title bar (best on macOS)')
+ .addToggle(function (toggle) { return toggle.setValue(_this.plugin.settings.frameless)
+ .onChange(function (value) {
+ _this.plugin.settings.frameless = value;
+ _this.plugin.saveData(_this.plugin.settings);
+ _this.plugin.refresh();
+ }); });
+ new obsidian.Setting(containerEl)
+ .setName('Hide app ribbon')
+ .setDesc('Hides the Obsidian menu. Warning: to open Settings you will need use the hotkey (default is CMD + ,)')
+ .addToggle(function (toggle) { return toggle.setValue(_this.plugin.settings.hideRibbon)
+ .onChange(function (value) {
+ _this.plugin.settings.hideRibbon = value;
+ _this.plugin.saveData(_this.plugin.settings);
+ _this.plugin.refresh();
+ }); });
+ new obsidian.Setting(containerEl)
+ .setName('Hide status bar')
+ .setDesc('Hides word count, character count and backlink count')
+ .addToggle(function (toggle) { return toggle.setValue(_this.plugin.settings.hideStatus)
+ .onChange(function (value) {
+ _this.plugin.settings.hideStatus = value;
+ _this.plugin.saveData(_this.plugin.settings);
+ _this.plugin.refresh();
+ }); });
+ new obsidian.Setting(containerEl)
+ .setName('Hide vault name')
+ .setDesc('Hides the root folder name')
+ .addToggle(function (toggle) { return toggle.setValue(_this.plugin.settings.hideVault)
+ .onChange(function (value) {
+ _this.plugin.settings.hideVault = value;
+ _this.plugin.saveData(_this.plugin.settings);
+ _this.plugin.refresh();
+ }); });
+ new obsidian.Setting(containerEl)
+ .setName('Hide scroll bars')
+ .setDesc('Hides all scroll bars')
+ .addToggle(function (toggle) { return toggle.setValue(_this.plugin.settings.hideScroll)
+ .onChange(function (value) {
+ _this.plugin.settings.hideScroll = value;
+ _this.plugin.saveData(_this.plugin.settings);
+ _this.plugin.refresh();
+ }); });
+ new obsidian.Setting(containerEl)
+ .setName('Hide tooltips')
+ .setDesc('Hides all tooltips')
+ .addToggle(function (toggle) { return toggle.setValue(_this.plugin.settings.hideTooltips)
+ .onChange(function (value) {
+ _this.plugin.settings.hideTooltips = value;
+ _this.plugin.saveData(_this.plugin.settings);
+ _this.plugin.refresh();
+ }); });
+ new obsidian.Setting(containerEl)
+ .setName('Hide instructions')
+ .setDesc('Hides instructional tips in modals')
+ .addToggle(function (toggle) { return toggle.setValue(_this.plugin.settings.hideInstructions)
+ .onChange(function (value) {
+ _this.plugin.settings.hideInstructions = value;
+ _this.plugin.saveData(_this.plugin.settings);
+ _this.plugin.refresh();
+ }); });
+ new obsidian.Setting(containerEl)
+ .setName('Hide search suggestions')
+ .setDesc('Hides suggestions in search pane')
+ .addToggle(function (toggle) { return toggle.setValue(_this.plugin.settings.hideSearchSuggestions)
+ .onChange(function (value) {
+ _this.plugin.settings.hideSearchSuggestions = value;
+ _this.plugin.saveData(_this.plugin.settings);
+ _this.plugin.refresh();
+ }); });
+ new obsidian.Setting(containerEl)
+ .setName('Hide metadata block in Reading view')
+ .setDesc('When front matter is turned off in your Editor settings this hides the metadata block')
+ .addToggle(function (toggle) { return toggle.setValue(_this.plugin.settings.hideMeta)
+ .onChange(function (value) {
+ _this.plugin.settings.hideMeta = value;
+ _this.plugin.saveData(_this.plugin.settings);
+ _this.plugin.refresh();
+ }); });
+ };
+ return HiderSettingTab;
+}(obsidian.PluginSettingTab));
+
+module.exports = Hider;
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZXMiOlsibm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIsIm1haW4udHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxyXG5cclxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XHJcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cclxuXHJcblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcclxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXHJcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcclxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXHJcbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXHJcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcclxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cclxuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UgKi9cclxuXHJcbnZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24oZCwgYikge1xyXG4gICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxyXG4gICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcclxuICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xyXG4gICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19leHRlbmRzKGQsIGIpIHtcclxuICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cclxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcclxufVxyXG5cclxuZXhwb3J0IHZhciBfX2Fzc2lnbiA9IGZ1bmN0aW9uKCkge1xyXG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uIF9fYXNzaWduKHQpIHtcclxuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcclxuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKSB0W3BdID0gc1twXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVzdChzLCBlKSB7XHJcbiAgICB2YXIgdCA9IHt9O1xyXG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXHJcbiAgICAgICAgdFtwXSA9IHNbcF07XHJcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXHJcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcclxuICAgICAgICB9XHJcbiAgICByZXR1cm4gdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcclxuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xyXG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcclxuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3BhcmFtKHBhcmFtSW5kZXgsIGRlY29yYXRvcikge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkgeyBkZWNvcmF0b3IodGFyZ2V0LCBrZXksIHBhcmFtSW5kZXgpOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX21ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xyXG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XHJcbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cclxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZ2VuZXJhdG9yKHRoaXNBcmcsIGJvZHkpIHtcclxuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XHJcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xyXG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcclxuICAgICAgICB3aGlsZSAoXykgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xyXG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XHJcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxyXG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgdmFyIF9fY3JlYXRlQmluZGluZyA9IE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcclxuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfSk7XHJcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XHJcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xyXG4gICAgb1trMl0gPSBtW2tdO1xyXG59KTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2V4cG9ydFN0YXIobSwgbykge1xyXG4gICAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBwKSkgX19jcmVhdGVCaW5kaW5nKG8sIG0sIHApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX192YWx1ZXMobykge1xyXG4gICAgdmFyIHMgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCBtID0gcyAmJiBvW3NdLCBpID0gMDtcclxuICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xyXG4gICAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xyXG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcclxuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3JlYWQobywgbikge1xyXG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xyXG4gICAgaWYgKCFtKSByZXR1cm4gbztcclxuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxyXG4gICAgZmluYWxseSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWQoKSB7XHJcbiAgICBmb3IgKHZhciBhciA9IFtdLCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKylcclxuICAgICAgICBhciA9IGFyLmNvbmNhdChfX3JlYWQoYXJndW1lbnRzW2ldKSk7XHJcbiAgICByZXR1cm4gYXI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZEFycmF5cygpIHtcclxuICAgIGZvciAodmFyIHMgPSAwLCBpID0gMCwgaWwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgaWw7IGkrKykgcyArPSBhcmd1bWVudHNbaV0ubGVuZ3RoO1xyXG4gICAgZm9yICh2YXIgciA9IEFycmF5KHMpLCBrID0gMCwgaSA9IDA7IGkgPCBpbDsgaSsrKVxyXG4gICAgICAgIGZvciAodmFyIGEgPSBhcmd1bWVudHNbaV0sIGogPSAwLCBqbCA9IGEubGVuZ3RoOyBqIDwgamw7IGorKywgaysrKVxyXG4gICAgICAgICAgICByW2tdID0gYVtqXTtcclxuICAgIHJldHVybiByO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXQodikge1xyXG4gICAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBfX2F3YWl0ID8gKHRoaXMudiA9IHYsIHRoaXMpIDogbmV3IF9fYXdhaXQodik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jR2VuZXJhdG9yKHRoaXNBcmcsIF9hcmd1bWVudHMsIGdlbmVyYXRvcikge1xyXG4gICAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgIHZhciBnID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pLCBpLCBxID0gW107XHJcbiAgICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgaWYgKGdbbl0pIGlbbl0gPSBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGEsIGIpIHsgcS5wdXNoKFtuLCB2LCBhLCBiXSkgPiAxIHx8IHJlc3VtZShuLCB2KTsgfSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHJlc3VtZShuLCB2KSB7IHRyeSB7IHN0ZXAoZ1tuXSh2KSk7IH0gY2F0Y2ggKGUpIHsgc2V0dGxlKHFbMF1bM10sIGUpOyB9IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAocikgeyByLnZhbHVlIGluc3RhbmNlb2YgX19hd2FpdCA/IFByb21pc2UucmVzb2x2ZShyLnZhbHVlLnYpLnRoZW4oZnVsZmlsbCwgcmVqZWN0KSA6IHNldHRsZShxWzBdWzJdLCByKTsgfVxyXG4gICAgZnVuY3Rpb24gZnVsZmlsbCh2YWx1ZSkgeyByZXN1bWUoXCJuZXh0XCIsIHZhbHVlKTsgfVxyXG4gICAgZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7IHJlc3VtZShcInRocm93XCIsIHZhbHVlKTsgfVxyXG4gICAgZnVuY3Rpb24gc2V0dGxlKGYsIHYpIHsgaWYgKGYodiksIHEuc2hpZnQoKSwgcS5sZW5ndGgpIHJlc3VtZShxWzBdWzBdLCBxWzBdWzFdKTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0RlbGVnYXRvcihvKSB7XHJcbiAgICB2YXIgaSwgcDtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiwgZnVuY3Rpb24gKGUpIHsgdGhyb3cgZTsgfSksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHsgaVtuXSA9IG9bbl0gPyBmdW5jdGlvbiAodikgeyByZXR1cm4gKHAgPSAhcCkgPyB7IHZhbHVlOiBfX2F3YWl0KG9bbl0odikpLCBkb25lOiBuID09PSBcInJldHVyblwiIH0gOiBmID8gZih2KSA6IHY7IH0gOiBmOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jVmFsdWVzKG8pIHtcclxuICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB2YXIgbSA9IG9bU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCBpO1xyXG4gICAgcmV0dXJuIG0gPyBtLmNhbGwobykgOiAobyA9IHR5cGVvZiBfX3ZhbHVlcyA9PT0gXCJmdW5jdGlvblwiID8gX192YWx1ZXMobykgOiBvW1N5bWJvbC5pdGVyYXRvcl0oKSwgaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGkpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IGlbbl0gPSBvW25dICYmIGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHYgPSBvW25dKHYpLCBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCB2LmRvbmUsIHYudmFsdWUpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgZCwgdikgeyBQcm9taXNlLnJlc29sdmUodikudGhlbihmdW5jdGlvbih2KSB7IHJlc29sdmUoeyB2YWx1ZTogdiwgZG9uZTogZCB9KTsgfSwgcmVqZWN0KTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19tYWtlVGVtcGxhdGVPYmplY3QoY29va2VkLCByYXcpIHtcclxuICAgIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvb2tlZCwgXCJyYXdcIiwgeyB2YWx1ZTogcmF3IH0pOyB9IGVsc2UgeyBjb29rZWQucmF3ID0gcmF3OyB9XHJcbiAgICByZXR1cm4gY29va2VkO1xyXG59O1xyXG5cclxudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9IE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xyXG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcclxuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydFN0YXIobW9kKSB7XHJcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xyXG4gICAgdmFyIHJlc3VsdCA9IHt9O1xyXG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xyXG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydERlZmF1bHQobW9kKSB7XHJcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IGRlZmF1bHQ6IG1vZCB9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEdldChyZWNlaXZlciwgcHJpdmF0ZU1hcCkge1xyXG4gICAgaWYgKCFwcml2YXRlTWFwLmhhcyhyZWNlaXZlcikpIHtcclxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiYXR0ZW1wdGVkIHRvIGdldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZVwiKTtcclxuICAgIH1cclxuICAgIHJldHVybiBwcml2YXRlTWFwLmdldChyZWNlaXZlcik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHJlY2VpdmVyLCBwcml2YXRlTWFwLCB2YWx1ZSkge1xyXG4gICAgaWYgKCFwcml2YXRlTWFwLmhhcyhyZWNlaXZlcikpIHtcclxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiYXR0ZW1wdGVkIHRvIHNldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZVwiKTtcclxuICAgIH1cclxuICAgIHByaXZhdGVNYXAuc2V0KHJlY2VpdmVyLCB2YWx1ZSk7XHJcbiAgICByZXR1cm4gdmFsdWU7XHJcbn1cclxuIiwiaW1wb3J0IHsgQXBwLCBNb2RhbCwgTm90aWNlLCBQbHVnaW4sIFBsdWdpblNldHRpbmdUYWIsIFNldHRpbmcgfSBmcm9tICdvYnNpZGlhbic7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBIaWRlciBleHRlbmRzIFBsdWdpbiB7XHJcbiAgc2V0dGluZ3M6IEhpZGVyU2V0dGluZ3M7XHJcblxyXG4gIGFzeW5jIG9ubG9hZCgpIHtcclxuICAgIC8vIGxvYWQgc2V0dGluZ3NcclxuICAgIGF3YWl0IHRoaXMubG9hZFNldHRpbmdzKCk7XHJcblxyXG4gICAgLy8gYWRkIHRoZSBzZXR0aW5ncyB0YWJcclxuICAgIHRoaXMuYWRkU2V0dGluZ1RhYihuZXcgSGlkZXJTZXR0aW5nVGFiKHRoaXMuYXBwLCB0aGlzKSk7XHJcbiAgICAvLyBhZGQgdGhlIHRvZ2dsZSBvbi9vZmYgY29tbWFuZFxyXG5cclxuICAgIHRoaXMuYWRkQ29tbWFuZCh7XHJcbiAgICAgIGlkOiAndG9nZ2xlLWFwcC1yaWJib24nLFxyXG4gICAgICBuYW1lOiAnVG9nZ2xlIEFwcCBSaWJib24nLFxyXG4gICAgICBjYWxsYmFjazogKCkgPT4ge1xyXG4gICAgICAgIC8vIHN3aXRjaCB0aGUgc2V0dGluZywgc2F2ZSBhbmQgcmVmcmVzaFxyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MuaGlkZVJpYmJvbiA9ICF0aGlzLnNldHRpbmdzLmhpZGVSaWJib247XHJcbiAgICAgICAgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICB0aGlzLnJlZnJlc2goKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmFkZENvbW1hbmQoe1xyXG4gICAgICBpZDogJ3RvZ2dsZS1oaWRlci1zdGF0dXMnLFxyXG4gICAgICBuYW1lOiAnVG9nZ2xlIFN0YXR1cyBCYXInLFxyXG4gICAgICBjYWxsYmFjazogKCkgPT4ge1xyXG4gICAgICAgIC8vIHN3aXRjaCB0aGUgc2V0dGluZywgc2F2ZSBhbmQgcmVmcmVzaFxyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MuaGlkZVN0YXR1cyA9ICF0aGlzLnNldHRpbmdzLmhpZGVTdGF0dXM7XHJcbiAgICAgICAgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICB0aGlzLnJlZnJlc2goKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnJlZnJlc2goKVxyXG4gIH1cclxuXHJcbiAgb251bmxvYWQoKSB7XHJcbiAgICBjb25zb2xlLmxvZygnVW5sb2FkaW5nIEhpZGVyIHBsdWdpbicpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgbG9hZFNldHRpbmdzKCkge1xyXG4gICAgdGhpcy5zZXR0aW5ncyA9IE9iamVjdC5hc3NpZ24oREVGQVVMVF9TRVRUSU5HUywgYXdhaXQgdGhpcy5sb2FkRGF0YSgpKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHNhdmVTZXR0aW5ncygpIHtcclxuICAgIGF3YWl0IHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcbiAgfVxyXG5cclxuICAvLyByZWZyZXNoIGZ1bmN0aW9uIGZvciB3aGVuIHdlIGNoYW5nZSBzZXR0aW5nc1xyXG4gIHJlZnJlc2ggPSAoKSA9PiB7XHJcbiAgICAvLyByZS1sb2FkIHRoZSBzdHlsZVxyXG4gICAgdGhpcy51cGRhdGVTdHlsZSgpXHJcbiAgfVxyXG5cclxuICAvLyB1cGRhdGUgdGhlIHN0eWxlcyAoYXQgdGhlIHN0YXJ0LCBvciBhcyB0aGUgcmVzdWx0IG9mIGEgc2V0dGluZ3MgY2hhbmdlKVxyXG4gIHVwZGF0ZVN0eWxlID0gKCkgPT4ge1xyXG4gICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QudG9nZ2xlKCdoaWRlci1yaWJib24nLCB0aGlzLnNldHRpbmdzLmhpZGVSaWJib24pO1xyXG4gICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QudG9nZ2xlKCdoaWRlci1zdGF0dXMnLCB0aGlzLnNldHRpbmdzLmhpZGVTdGF0dXMpO1xyXG4gICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QudG9nZ2xlKCdoaWRlci1mcmFtZWxlc3MnLCB0aGlzLnNldHRpbmdzLmZyYW1lbGVzcyk7XHJcbiAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC50b2dnbGUoJ2hpZGVyLXNjcm9sbCcsIHRoaXMuc2V0dGluZ3MuaGlkZVNjcm9sbCk7XHJcbiAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC50b2dnbGUoJ2hpZGVyLXRvb2x0aXBzJywgdGhpcy5zZXR0aW5ncy5oaWRlVG9vbHRpcHMpO1xyXG4gICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QudG9nZ2xlKCdoaWRlci1zZWFyY2gtc3VnZ2VzdGlvbnMnLCB0aGlzLnNldHRpbmdzLmhpZGVTZWFyY2hTdWdnZXN0aW9ucyk7XHJcbiAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC50b2dnbGUoJ2hpZGVyLWluc3RydWN0aW9ucycsIHRoaXMuc2V0dGluZ3MuaGlkZUluc3RydWN0aW9ucyk7XHJcbiAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC50b2dnbGUoJ2hpZGVyLW1ldGEnLCB0aGlzLnNldHRpbmdzLmhpZGVNZXRhKTtcclxuICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnRvZ2dsZSgnaGlkZXItdmF1bHQnLCB0aGlzLnNldHRpbmdzLmhpZGVWYXVsdCk7XHJcbiAgfVxyXG5cclxufVxyXG5cclxuaW50ZXJmYWNlIEhpZGVyU2V0dGluZ3Mge1xyXG4gIGZyYW1lbGVzczogYm9vbGVhbjtcclxuICBoaWRlUmliYm9uOiBib29sZWFuO1xyXG4gIGhpZGVTdGF0dXM6IGJvb2xlYW47XHJcbiAgaGlkZVNjcm9sbDogYm9vbGVhbjtcclxuICBoaWRlVG9vbHRpcHM6IGJvb2xlYW47XHJcbiAgaGlkZVNlYXJjaFN1Z2dlc3Rpb25zOiBib29sZWFuO1xyXG4gIGhpZGVJbnN0cnVjdGlvbnM6IGJvb2xlYW47XHJcbiAgaGlkZU1ldGE6IGJvb2xlYW47XHJcbiAgaGlkZVZhdWx0OiBib29sZWFuO1xyXG59XHJcbmNvbnN0IERFRkFVTFRfU0VUVElOR1M6IEhpZGVyU2V0dGluZ3MgPSB7XHJcbiAgZnJhbWVsZXNzOiBmYWxzZSxcclxuICBoaWRlUmliYm9uOiBmYWxzZSxcclxuICBoaWRlU3RhdHVzOiBmYWxzZSxcclxuICBoaWRlU2Nyb2xsOiBmYWxzZSxcclxuICBoaWRlVG9vbHRpcHM6IGZhbHNlLFxyXG4gIGhpZGVTZWFyY2hTdWdnZXN0aW9uczogZmFsc2UsXHJcbiAgaGlkZUluc3RydWN0aW9uczogZmFsc2UsXHJcbiAgaGlkZU1ldGE6IGZhbHNlLFxyXG4gIGhpZGVWYXVsdDogZmFsc2VcclxufVxyXG5cclxuY2xhc3MgSGlkZXJTZXR0aW5nVGFiIGV4dGVuZHMgUGx1Z2luU2V0dGluZ1RhYiB7XHJcblxyXG5cclxuICBwbHVnaW46IEhpZGVyO1xyXG4gIGNvbnN0cnVjdG9yKGFwcDogQXBwLCBwbHVnaW46IEhpZGVyKSB7XHJcbiAgICBzdXBlcihhcHAsIHBsdWdpbik7XHJcbiAgICB0aGlzLnBsdWdpbiA9IHBsdWdpbjtcclxuICB9XHJcblxyXG4gIGRpc3BsYXkoKTogdm9pZCB7XHJcbiAgICBsZXQge2NvbnRhaW5lckVsfSA9IHRoaXM7XHJcblxyXG4gICAgY29udGFpbmVyRWwuZW1wdHkoKTtcclxuXHJcbiAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbClcclxuICAgICAgLnNldE5hbWUoJ0hpZGUgdGl0bGUgYmFyIChmcmFtZWxlc3MgbW9kZSknKVxyXG4gICAgICAuc2V0RGVzYygnSGlkZXMgdGhlIHRpdGxlIGJhciAoYmVzdCBvbiBtYWNPUyknKVxyXG4gICAgICAuYWRkVG9nZ2xlKHRvZ2dsZSA9PiB0b2dnbGUuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuZnJhbWVsZXNzKVxyXG4gICAgICAgICAgLm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5mcmFtZWxlc3MgPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2F2ZURhdGEodGhpcy5wbHVnaW4uc2V0dGluZ3MpO1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5yZWZyZXNoKCk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICApO1xyXG5cclxuICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxyXG4gICAgICAuc2V0TmFtZSgnSGlkZSBhcHAgcmliYm9uJylcclxuICAgICAgLnNldERlc2MoJ0hpZGVzIHRoZSBPYnNpZGlhbiBtZW51LiBXYXJuaW5nOiB0byBvcGVuIFNldHRpbmdzIHlvdSB3aWxsIG5lZWQgdXNlIHRoZSBob3RrZXkgKGRlZmF1bHQgaXMgQ01EICsgLCknKVxyXG4gICAgICAuYWRkVG9nZ2xlKHRvZ2dsZSA9PiB0b2dnbGUuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuaGlkZVJpYmJvbilcclxuICAgICAgICAgIC5vbkNoYW5nZSgodmFsdWUpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MuaGlkZVJpYmJvbiA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5zYXZlRGF0YSh0aGlzLnBsdWdpbi5zZXR0aW5ncyk7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnJlZnJlc2goKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICk7XHJcblxyXG4gICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXHJcbiAgICAgIC5zZXROYW1lKCdIaWRlIHN0YXR1cyBiYXInKVxyXG4gICAgICAuc2V0RGVzYygnSGlkZXMgd29yZCBjb3VudCwgY2hhcmFjdGVyIGNvdW50IGFuZCBiYWNrbGluayBjb3VudCcpXHJcbiAgICAgIC5hZGRUb2dnbGUodG9nZ2xlID0+IHRvZ2dsZS5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5oaWRlU3RhdHVzKVxyXG4gICAgICAgICAgLm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5oaWRlU3RhdHVzID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnNhdmVEYXRhKHRoaXMucGx1Z2luLnNldHRpbmdzKTtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW4ucmVmcmVzaCgpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgKTtcclxuXHJcbiAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbClcclxuICAgICAgLnNldE5hbWUoJ0hpZGUgdmF1bHQgbmFtZScpXHJcbiAgICAgIC5zZXREZXNjKCdIaWRlcyB0aGUgcm9vdCBmb2xkZXIgbmFtZScpXHJcbiAgICAgIC5hZGRUb2dnbGUodG9nZ2xlID0+IHRvZ2dsZS5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5oaWRlVmF1bHQpXHJcbiAgICAgICAgICAub25DaGFuZ2UoKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLmhpZGVWYXVsdCA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5zYXZlRGF0YSh0aGlzLnBsdWdpbi5zZXR0aW5ncyk7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnJlZnJlc2goKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICk7XHJcblxyXG4gICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXHJcbiAgICAgIC5zZXROYW1lKCdIaWRlIHNjcm9sbCBiYXJzJylcclxuICAgICAgLnNldERlc2MoJ0hpZGVzIGFsbCBzY3JvbGwgYmFycycpXHJcbiAgICAgIC5hZGRUb2dnbGUodG9nZ2xlID0+IHRvZ2dsZS5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5oaWRlU2Nyb2xsKVxyXG4gICAgICAgICAgLm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5oaWRlU2Nyb2xsID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnNhdmVEYXRhKHRoaXMucGx1Z2luLnNldHRpbmdzKTtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW4ucmVmcmVzaCgpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgKTtcclxuXHJcbiAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbClcclxuICAgICAgLnNldE5hbWUoJ0hpZGUgdG9vbHRpcHMnKVxyXG4gICAgICAuc2V0RGVzYygnSGlkZXMgYWxsIHRvb2x0aXBzJylcclxuICAgICAgLmFkZFRvZ2dsZSh0b2dnbGUgPT4gdG9nZ2xlLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmhpZGVUb29sdGlwcylcclxuICAgICAgICAgIC5vbkNoYW5nZSgodmFsdWUpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MuaGlkZVRvb2x0aXBzID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnNhdmVEYXRhKHRoaXMucGx1Z2luLnNldHRpbmdzKTtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW4ucmVmcmVzaCgpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgKTtcclxuXHJcbiAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbClcclxuICAgICAgLnNldE5hbWUoJ0hpZGUgaW5zdHJ1Y3Rpb25zJylcclxuICAgICAgLnNldERlc2MoJ0hpZGVzIGluc3RydWN0aW9uYWwgdGlwcyBpbiBtb2RhbHMnKVxyXG4gICAgICAuYWRkVG9nZ2xlKHRvZ2dsZSA9PiB0b2dnbGUuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuaGlkZUluc3RydWN0aW9ucylcclxuICAgICAgICAgIC5vbkNoYW5nZSgodmFsdWUpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MuaGlkZUluc3RydWN0aW9ucyA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5zYXZlRGF0YSh0aGlzLnBsdWdpbi5zZXR0aW5ncyk7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnJlZnJlc2goKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICk7XHJcblxyXG4gICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXHJcbiAgICAgIC5zZXROYW1lKCdIaWRlIHNlYXJjaCBzdWdnZXN0aW9ucycpXHJcbiAgICAgIC5zZXREZXNjKCdIaWRlcyBzdWdnZXN0aW9ucyBpbiBzZWFyY2ggcGFuZScpXHJcbiAgICAgIC5hZGRUb2dnbGUodG9nZ2xlID0+IHRvZ2dsZS5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5oaWRlU2VhcmNoU3VnZ2VzdGlvbnMpXHJcbiAgICAgICAgICAub25DaGFuZ2UoKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLmhpZGVTZWFyY2hTdWdnZXN0aW9ucyA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5zYXZlRGF0YSh0aGlzLnBsdWdpbi5zZXR0aW5ncyk7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnJlZnJlc2goKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICk7XHJcblxyXG4gICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXHJcbiAgICAgIC5zZXROYW1lKCdIaWRlIG1ldGFkYXRhIGJsb2NrIGluIFJlYWRpbmcgdmlldycpXHJcbiAgICAgIC5zZXREZXNjKCdXaGVuIGZyb250IG1hdHRlciBpcyB0dXJuZWQgb2ZmIGluIHlvdXIgRWRpdG9yIHNldHRpbmdzIHRoaXMgaGlkZXMgdGhlIG1ldGFkYXRhIGJsb2NrJylcclxuICAgICAgLmFkZFRvZ2dsZSh0b2dnbGUgPT4gdG9nZ2xlLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmhpZGVNZXRhKVxyXG4gICAgICAgICAgLm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5oaWRlTWV0YSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5zYXZlRGF0YSh0aGlzLnBsdWdpbi5zZXR0aW5ncyk7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnJlZnJlc2goKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICk7XHJcblxyXG5cclxuXHJcbiAgfVxyXG59XHJcbiJdLCJuYW1lcyI6WyJQbHVnaW4iLCJTZXR0aW5nIiwiUGx1Z2luU2V0dGluZ1RhYiJdLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxhQUFhLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ25DLElBQUksYUFBYSxHQUFHLE1BQU0sQ0FBQyxjQUFjO0FBQ3pDLFNBQVMsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLFlBQVksS0FBSyxJQUFJLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUNwRixRQUFRLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMxRyxJQUFJLE9BQU8sYUFBYSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMvQixDQUFDLENBQUM7QUFDRjtBQUNPLFNBQVMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDaEMsSUFBSSxhQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLElBQUksU0FBUyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxFQUFFO0FBQzNDLElBQUksQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLEtBQUssSUFBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztBQUN6RixDQUFDO0FBdUNEO0FBQ08sU0FBUyxTQUFTLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFO0FBQzdELElBQUksU0FBUyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsT0FBTyxLQUFLLFlBQVksQ0FBQyxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxVQUFVLE9BQU8sRUFBRSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFO0FBQ2hILElBQUksT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsT0FBTyxDQUFDLEVBQUUsVUFBVSxPQUFPLEVBQUUsTUFBTSxFQUFFO0FBQy9ELFFBQVEsU0FBUyxTQUFTLENBQUMsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtBQUNuRyxRQUFRLFNBQVMsUUFBUSxDQUFDLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtBQUN0RyxRQUFRLFNBQVMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLE1BQU0sQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFBRTtBQUN0SCxRQUFRLElBQUksQ0FBQyxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxVQUFVLElBQUksRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUM5RSxLQUFLLENBQUMsQ0FBQztBQUNQLENBQUM7QUFDRDtBQUNPLFNBQVMsV0FBVyxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUU7QUFDM0MsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3JILElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLE9BQU8sTUFBTSxLQUFLLFVBQVUsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLFdBQVcsRUFBRSxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDN0osSUFBSSxTQUFTLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxPQUFPLFVBQVUsQ0FBQyxFQUFFLEVBQUUsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUN0RSxJQUFJLFNBQVMsSUFBSSxDQUFDLEVBQUUsRUFBRTtBQUN0QixRQUFRLElBQUksQ0FBQyxFQUFFLE1BQU0sSUFBSSxTQUFTLENBQUMsaUNBQWlDLENBQUMsQ0FBQztBQUN0RSxRQUFRLE9BQU8sQ0FBQyxFQUFFLElBQUk7QUFDdEIsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztBQUN6SyxZQUFZLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDcEQsWUFBWSxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDekIsZ0JBQWdCLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLE1BQU07QUFDOUMsZ0JBQWdCLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQztBQUN4RSxnQkFBZ0IsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUztBQUNqRSxnQkFBZ0IsS0FBSyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsU0FBUztBQUNqRSxnQkFBZ0I7QUFDaEIsb0JBQW9CLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUU7QUFDaEksb0JBQW9CLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUU7QUFDMUcsb0JBQW9CLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtBQUN6RixvQkFBb0IsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFO0FBQ3ZGLG9CQUFvQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzFDLG9CQUFvQixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsU0FBUztBQUMzQyxhQUFhO0FBQ2IsWUFBWSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDdkMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO0FBQ2xFLFFBQVEsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUN6RixLQUFLO0FBQ0w7OztJQ3JHbUMseUJBQU07SUFBekM7UUFBQSxxRUFpRUM7O1FBbEJDLGFBQU8sR0FBRzs7WUFFUixLQUFJLENBQUMsV0FBVyxFQUFFLENBQUE7U0FDbkIsQ0FBQTs7UUFHRCxpQkFBVyxHQUFHO1lBQ1osUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLGNBQWMsRUFBRSxLQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3pFLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxjQUFjLEVBQUUsS0FBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUN6RSxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLEVBQUUsS0FBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUMzRSxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsY0FBYyxFQUFFLEtBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDekUsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLGdCQUFnQixFQUFFLEtBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDN0UsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLDBCQUEwQixFQUFFLEtBQUksQ0FBQyxRQUFRLENBQUMscUJBQXFCLENBQUMsQ0FBQztZQUNoRyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsb0JBQW9CLEVBQUUsS0FBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ3JGLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsS0FBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNyRSxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLEtBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDeEUsQ0FBQTs7S0FFRjtJQTlETyxzQkFBTSxHQUFaOzs7Ozs7O29CQUVFLHFCQUFNLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBQTs7O3dCQUF6QixTQUF5QixDQUFDOzt3QkFHMUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7O3dCQUd4RCxJQUFJLENBQUMsVUFBVSxDQUFDOzRCQUNkLEVBQUUsRUFBRSxtQkFBbUI7NEJBQ3ZCLElBQUksRUFBRSxtQkFBbUI7NEJBQ3pCLFFBQVEsRUFBRTs7Z0NBRVIsS0FBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxLQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQztnQ0FDckQsS0FBSSxDQUFDLFFBQVEsQ0FBQyxLQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7Z0NBQzdCLEtBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQzs2QkFDaEI7eUJBQ0YsQ0FBQyxDQUFDO3dCQUNILElBQUksQ0FBQyxVQUFVLENBQUM7NEJBQ2QsRUFBRSxFQUFFLHFCQUFxQjs0QkFDekIsSUFBSSxFQUFFLG1CQUFtQjs0QkFDekIsUUFBUSxFQUFFOztnQ0FFUixLQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsR0FBRyxDQUFDLEtBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDO2dDQUNyRCxLQUFJLENBQUMsUUFBUSxDQUFDLEtBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztnQ0FDN0IsS0FBSSxDQUFDLE9BQU8sRUFBRSxDQUFDOzZCQUNoQjt5QkFDRixDQUFDLENBQUM7d0JBQ0gsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFBOzs7OztLQUNmO0lBRUQsd0JBQVEsR0FBUjtRQUNFLE9BQU8sQ0FBQyxHQUFHLENBQUMsd0JBQXdCLENBQUMsQ0FBQztLQUN2QztJQUVLLDRCQUFZLEdBQWxCOzs7Ozs7d0JBQ0UsS0FBQSxJQUFJLENBQUE7d0JBQVksS0FBQSxDQUFBLEtBQUEsTUFBTSxFQUFDLE1BQU0sQ0FBQTs4QkFBQyxnQkFBZ0I7d0JBQUUscUJBQU0sSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFBOzt3QkFBckUsR0FBSyxRQUFRLEdBQUcsd0JBQWdDLFNBQXFCLEdBQUMsQ0FBQzs7Ozs7S0FDeEU7SUFFSyw0QkFBWSxHQUFsQjs7Ozs0QkFDRSxxQkFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBQTs7d0JBQWxDLFNBQWtDLENBQUM7Ozs7O0tBQ3BDO0lBcUJILFlBQUM7QUFBRCxDQWpFQSxDQUFtQ0EsZUFBTSxHQWlFeEM7QUFhRCxJQUFNLGdCQUFnQixHQUFrQjtJQUN0QyxTQUFTLEVBQUUsS0FBSztJQUNoQixVQUFVLEVBQUUsS0FBSztJQUNqQixVQUFVLEVBQUUsS0FBSztJQUNqQixVQUFVLEVBQUUsS0FBSztJQUNqQixZQUFZLEVBQUUsS0FBSztJQUNuQixxQkFBcUIsRUFBRSxLQUFLO0lBQzVCLGdCQUFnQixFQUFFLEtBQUs7SUFDdkIsUUFBUSxFQUFFLEtBQUs7SUFDZixTQUFTLEVBQUUsS0FBSztDQUNqQixDQUFBO0FBRUQ7SUFBOEIsbUNBQWdCO0lBSTVDLHlCQUFZLEdBQVEsRUFBRSxNQUFhO1FBQW5DLFlBQ0Usa0JBQU0sR0FBRyxFQUFFLE1BQU0sQ0FBQyxTQUVuQjtRQURDLEtBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDOztLQUN0QjtJQUVELGlDQUFPLEdBQVA7UUFBQSxpQkEwR0M7UUF6R00sSUFBQSxXQUFXLEdBQUksSUFBSSxZQUFSLENBQVM7UUFFekIsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBRXBCLElBQUlDLGdCQUFPLENBQUMsV0FBVyxDQUFDO2FBQ3JCLE9BQU8sQ0FBQyxpQ0FBaUMsQ0FBQzthQUMxQyxPQUFPLENBQUMscUNBQXFDLENBQUM7YUFDOUMsU0FBUyxDQUFDLFVBQUEsTUFBTSxJQUFJLE9BQUEsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUM7YUFDL0QsUUFBUSxDQUFDLFVBQUMsS0FBSztZQUNkLEtBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7WUFDdkMsS0FBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUMzQyxLQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO1NBQ3JCLENBQUMsR0FBQSxDQUNILENBQUM7UUFFUixJQUFJQSxnQkFBTyxDQUFDLFdBQVcsQ0FBQzthQUNyQixPQUFPLENBQUMsaUJBQWlCLENBQUM7YUFDMUIsT0FBTyxDQUFDLHNHQUFzRyxDQUFDO2FBQy9HLFNBQVMsQ0FBQyxVQUFBLE1BQU0sSUFBSSxPQUFBLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDO2FBQ2hFLFFBQVEsQ0FBQyxVQUFDLEtBQUs7WUFDZCxLQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1lBQ3hDLEtBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDM0MsS0FBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUNyQixDQUFDLEdBQUEsQ0FDSCxDQUFDO1FBRVIsSUFBSUEsZ0JBQU8sQ0FBQyxXQUFXLENBQUM7YUFDckIsT0FBTyxDQUFDLGlCQUFpQixDQUFDO2FBQzFCLE9BQU8sQ0FBQyxzREFBc0QsQ0FBQzthQUMvRCxTQUFTLENBQUMsVUFBQSxNQUFNLElBQUksT0FBQSxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQzthQUNoRSxRQUFRLENBQUMsVUFBQyxLQUFLO1lBQ2QsS0FBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztZQUN4QyxLQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzNDLEtBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDckIsQ0FBQyxHQUFBLENBQ0gsQ0FBQztRQUVSLElBQUlBLGdCQUFPLENBQUMsV0FBVyxDQUFDO2FBQ3JCLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQzthQUMxQixPQUFPLENBQUMsNEJBQTRCLENBQUM7YUFDckMsU0FBUyxDQUFDLFVBQUEsTUFBTSxJQUFJLE9BQUEsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUM7YUFDL0QsUUFBUSxDQUFDLFVBQUMsS0FBSztZQUNkLEtBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7WUFDdkMsS0FBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUMzQyxLQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO1NBQ3JCLENBQUMsR0FBQSxDQUNILENBQUM7UUFFUixJQUFJQSxnQkFBTyxDQUFDLFdBQVcsQ0FBQzthQUNyQixPQUFPLENBQUMsa0JBQWtCLENBQUM7YUFDM0IsT0FBTyxDQUFDLHVCQUF1QixDQUFDO2FBQ2hDLFNBQVMsQ0FBQyxVQUFBLE1BQU0sSUFBSSxPQUFBLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDO2FBQ2hFLFFBQVEsQ0FBQyxVQUFDLEtBQUs7WUFDZCxLQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1lBQ3hDLEtBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDM0MsS0FBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUNyQixDQUFDLEdBQUEsQ0FDSCxDQUFDO1FBRVIsSUFBSUEsZ0JBQU8sQ0FBQyxXQUFXLENBQUM7YUFDckIsT0FBTyxDQUFDLGVBQWUsQ0FBQzthQUN4QixPQUFPLENBQUMsb0JBQW9CLENBQUM7YUFDN0IsU0FBUyxDQUFDLFVBQUEsTUFBTSxJQUFJLE9BQUEsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUM7YUFDbEUsUUFBUSxDQUFDLFVBQUMsS0FBSztZQUNkLEtBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7WUFDMUMsS0FBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUMzQyxLQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO1NBQ3JCLENBQUMsR0FBQSxDQUNILENBQUM7UUFFUixJQUFJQSxnQkFBTyxDQUFDLFdBQVcsQ0FBQzthQUNyQixPQUFPLENBQUMsbUJBQW1CLENBQUM7YUFDNUIsT0FBTyxDQUFDLG9DQUFvQyxDQUFDO2FBQzdDLFNBQVMsQ0FBQyxVQUFBLE1BQU0sSUFBSSxPQUFBLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUM7YUFDdEUsUUFBUSxDQUFDLFVBQUMsS0FBSztZQUNkLEtBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztZQUM5QyxLQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzNDLEtBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDckIsQ0FBQyxHQUFBLENBQ0gsQ0FBQztRQUVSLElBQUlBLGdCQUFPLENBQUMsV0FBVyxDQUFDO2FBQ3JCLE9BQU8sQ0FBQyx5QkFBeUIsQ0FBQzthQUNsQyxPQUFPLENBQUMsa0NBQWtDLENBQUM7YUFDM0MsU0FBUyxDQUFDLFVBQUEsTUFBTSxJQUFJLE9BQUEsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQzthQUMzRSxRQUFRLENBQUMsVUFBQyxLQUFLO1lBQ2QsS0FBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMscUJBQXFCLEdBQUcsS0FBSyxDQUFDO1lBQ25ELEtBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDM0MsS0FBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUNyQixDQUFDLEdBQUEsQ0FDSCxDQUFDO1FBRVIsSUFBSUEsZ0JBQU8sQ0FBQyxXQUFXLENBQUM7YUFDckIsT0FBTyxDQUFDLHFDQUFxQyxDQUFDO2FBQzlDLE9BQU8sQ0FBQyx1RkFBdUYsQ0FBQzthQUNoRyxTQUFTLENBQUMsVUFBQSxNQUFNLElBQUksT0FBQSxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQzthQUM5RCxRQUFRLENBQUMsVUFBQyxLQUFLO1lBQ2QsS0FBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztZQUN0QyxLQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzNDLEtBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDckIsQ0FBQyxHQUFBLENBQ0gsQ0FBQztLQUlUO0lBQ0gsc0JBQUM7QUFBRCxDQXBIQSxDQUE4QkMseUJBQWdCOzs7OyJ9
diff --git a/.obsidian/plugins/obsidian-hider/manifest.json b/.obsidian/plugins/obsidian-hider/manifest.json
new file mode 100644
index 00000000..7ad0e3b3
--- /dev/null
+++ b/.obsidian/plugins/obsidian-hider/manifest.json
@@ -0,0 +1,10 @@
+{
+ "id": "obsidian-hider",
+ "name": "Hider",
+ "version": "1.1.1",
+ "minAppVersion": "0.12.2",
+ "description": "Hide UI elements such as tooltips, status, titlebar and more",
+ "author": "@kepano",
+ "authorUrl": "https://www.twitter.com/kepano",
+ "isDesktopOnly": false
+}
\ No newline at end of file
diff --git a/.obsidian/plugins/obsidian-hider/styles.css b/.obsidian/plugins/obsidian-hider/styles.css
new file mode 100644
index 00000000..92828a1d
--- /dev/null
+++ b/.obsidian/plugins/obsidian-hider/styles.css
@@ -0,0 +1,67 @@
+/* Hides vault name */
+.hider-vault .nav-folder.mod-root > .nav-folder-title .nav-folder-title-content {
+ display:none;
+}
+
+/* Hide ribbon */
+.hider-ribbon .workspace-ribbon.mod-left {
+ display:none;
+}
+.hider-ribbon .workspace-ribbon.mod-right {
+ visibility:hidden;
+ position:absolute;
+}
+.hider-ribbon .workspace-split.mod-right-split {
+ margin-right:0;
+}
+.hider-ribbon .workspace-split.mod-left-split {
+ margin-left:0;
+}
+
+/* Frameless */
+.hider-frameless .titlebar-button-container {
+ display:none;
+}
+.hider-frameless .titlebar,
+.hider-frameless .titlebar-inner {
+ position:fixed;
+ top:0;
+ height:12px;
+ background:transparent;
+}
+.hider-frameless {
+ padding-top:0 !important;
+}
+.hider-frameless .workspace-split.mod-left-split > .workspace-tabs {
+ padding-top:18px;
+}
+
+/* Hide meta */
+.hider-meta .frontmatter-container {
+ display:none;
+}
+
+/* Hide scrollbars */
+.hider-scroll ::-webkit-scrollbar {
+ display:none;
+}
+
+/* Hide status */
+.hider-status .status-bar {
+ display:none;
+}
+
+/* Hide tooltips */
+.hider-tooltips .tooltip {
+ display:none;
+}
+
+/* Hide search suggestions */
+.hider-search-suggestions .suggestion-container.mod-search-suggestion {
+ display: none;
+}
+
+/* Hide instructions */
+.hider-instructions .prompt-instructions {
+ display:none;
+}
\ No newline at end of file
diff --git a/.obsidian/plugins/obsidian-mind-map/data.json b/.obsidian/plugins/obsidian-mind-map/data.json
new file mode 100644
index 00000000..fdb9875d
--- /dev/null
+++ b/.obsidian/plugins/obsidian-mind-map/data.json
@@ -0,0 +1,8 @@
+{
+ "splitDirection": "vertical",
+ "nodeMinHeight": 16,
+ "lineHeight": "1em",
+ "spacingVertical": 5,
+ "spacingHorizontal": 80,
+ "paddingX": 8
+}
\ No newline at end of file
diff --git a/.obsidian/plugins/obsidian-mind-map/main.js b/.obsidian/plugins/obsidian-mind-map/main.js
new file mode 100644
index 00000000..6bcab4a7
--- /dev/null
+++ b/.obsidian/plugins/obsidian-mind-map/main.js
@@ -0,0 +1,32629 @@
+'use strict';
+
+var obsidian = require('obsidian');
+
+/*! *****************************************************************************
+Copyright (c) Microsoft Corporation.
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THIS SOFTWARE.
+***************************************************************************** */
+/* global Reflect, Promise */
+
+var extendStatics = function(d, b) {
+ extendStatics = Object.setPrototypeOf ||
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
+ return extendStatics(d, b);
+};
+
+function __extends(d, b) {
+ extendStatics(d, b);
+ function __() { this.constructor = d; }
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+}
+
+function __awaiter(thisArg, _arguments, P, generator) {
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
+ return new (P || (P = Promise))(function (resolve, reject) {
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
+ });
+}
+
+function __generator(thisArg, body) {
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
+ function verb(n) { return function (v) { return step([n, v]); }; }
+ function step(op) {
+ if (f) throw new TypeError("Generator is already executing.");
+ while (_) try {
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
+ if (y = 0, t) op = [op[0] & 2, t.value];
+ switch (op[0]) {
+ case 0: case 1: t = op; break;
+ case 4: _.label++; return { value: op[1], done: false };
+ case 5: _.label++; y = op[1]; op = [0]; continue;
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
+ default:
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
+ if (t[2]) _.ops.pop();
+ _.trys.pop(); continue;
+ }
+ op = body.call(thisArg, _);
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
+ }
+}
+
+function _extends() {
+ _extends = Object.assign || function (target) {
+ for (var i = 1; i < arguments.length; i++) {
+ var source = arguments[i];
+
+ for (var key in source) {
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
+ target[key] = source[key];
+ }
+ }
+ }
+
+ return target;
+ };
+
+ return _extends.apply(this, arguments);
+}
+
+/*! markmap-common v0.1.2 | MIT License */
+
+class Hook {
+ constructor() {
+ this.listeners = [];
+ }
+
+ tap(fn) {
+ this.listeners.push(fn);
+ return () => this.revoke(fn);
+ }
+
+ revoke(fn) {
+ const i = this.listeners.indexOf(fn);
+ if (i >= 0) this.listeners.splice(i, 1);
+ }
+
+ revokeAll() {
+ this.listeners.splice(0);
+ }
+
+ call(...args) {
+ for (const fn of this.listeners) {
+ fn(...args);
+ }
+ }
+
+}
+
+const uniqId = Math.random().toString(36).slice(2, 8);
+function wrapFunction(fn, {
+ before,
+ after
+}) {
+ return function wrapped(...args) {
+ const ctx = {
+ args
+ };
+
+ try {
+ if (before) before(ctx);
+ } catch (_unused) {// ignore
+ }
+
+ ctx.result = fn(...args);
+
+ try {
+ if (after) after(ctx);
+ } catch (_unused2) {// ignore
+ }
+
+ return ctx.result;
+ };
+}
+
+var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
+
+function createCommonjsModule(fn, basedir, module) {
+ return module = {
+ path: basedir,
+ exports: {},
+ require: function (path, base) {
+ return commonjsRequire(path, (base === undefined || base === null) ? module.path : base);
+ }
+ }, fn(module, module.exports), module.exports;
+}
+
+function commonjsRequire () {
+ throw new Error('Dynamic requires are not currently supported by @rollup/plugin-commonjs');
+}
+
+var cjs = createCommonjsModule(function (module, exports) {
+
+Object.defineProperty(exports, '__esModule', { value: true });
+
+// List of valid entities
+//
+// Generate with ./support/entities.js script
+//
+
+/*eslint quotes:0*/
+var entities = {
+ "Aacute":"\u00C1",
+ "aacute":"\u00E1",
+ "Abreve":"\u0102",
+ "abreve":"\u0103",
+ "ac":"\u223E",
+ "acd":"\u223F",
+ "acE":"\u223E\u0333",
+ "Acirc":"\u00C2",
+ "acirc":"\u00E2",
+ "acute":"\u00B4",
+ "Acy":"\u0410",
+ "acy":"\u0430",
+ "AElig":"\u00C6",
+ "aelig":"\u00E6",
+ "af":"\u2061",
+ "Afr":"\uD835\uDD04",
+ "afr":"\uD835\uDD1E",
+ "Agrave":"\u00C0",
+ "agrave":"\u00E0",
+ "alefsym":"\u2135",
+ "aleph":"\u2135",
+ "Alpha":"\u0391",
+ "alpha":"\u03B1",
+ "Amacr":"\u0100",
+ "amacr":"\u0101",
+ "amalg":"\u2A3F",
+ "AMP":"\u0026",
+ "amp":"\u0026",
+ "And":"\u2A53",
+ "and":"\u2227",
+ "andand":"\u2A55",
+ "andd":"\u2A5C",
+ "andslope":"\u2A58",
+ "andv":"\u2A5A",
+ "ang":"\u2220",
+ "ange":"\u29A4",
+ "angle":"\u2220",
+ "angmsd":"\u2221",
+ "angmsdaa":"\u29A8",
+ "angmsdab":"\u29A9",
+ "angmsdac":"\u29AA",
+ "angmsdad":"\u29AB",
+ "angmsdae":"\u29AC",
+ "angmsdaf":"\u29AD",
+ "angmsdag":"\u29AE",
+ "angmsdah":"\u29AF",
+ "angrt":"\u221F",
+ "angrtvb":"\u22BE",
+ "angrtvbd":"\u299D",
+ "angsph":"\u2222",
+ "angst":"\u00C5",
+ "angzarr":"\u237C",
+ "Aogon":"\u0104",
+ "aogon":"\u0105",
+ "Aopf":"\uD835\uDD38",
+ "aopf":"\uD835\uDD52",
+ "ap":"\u2248",
+ "apacir":"\u2A6F",
+ "apE":"\u2A70",
+ "ape":"\u224A",
+ "apid":"\u224B",
+ "apos":"\u0027",
+ "ApplyFunction":"\u2061",
+ "approx":"\u2248",
+ "approxeq":"\u224A",
+ "Aring":"\u00C5",
+ "aring":"\u00E5",
+ "Ascr":"\uD835\uDC9C",
+ "ascr":"\uD835\uDCB6",
+ "Assign":"\u2254",
+ "ast":"\u002A",
+ "asymp":"\u2248",
+ "asympeq":"\u224D",
+ "Atilde":"\u00C3",
+ "atilde":"\u00E3",
+ "Auml":"\u00C4",
+ "auml":"\u00E4",
+ "awconint":"\u2233",
+ "awint":"\u2A11",
+ "backcong":"\u224C",
+ "backepsilon":"\u03F6",
+ "backprime":"\u2035",
+ "backsim":"\u223D",
+ "backsimeq":"\u22CD",
+ "Backslash":"\u2216",
+ "Barv":"\u2AE7",
+ "barvee":"\u22BD",
+ "Barwed":"\u2306",
+ "barwed":"\u2305",
+ "barwedge":"\u2305",
+ "bbrk":"\u23B5",
+ "bbrktbrk":"\u23B6",
+ "bcong":"\u224C",
+ "Bcy":"\u0411",
+ "bcy":"\u0431",
+ "bdquo":"\u201E",
+ "becaus":"\u2235",
+ "Because":"\u2235",
+ "because":"\u2235",
+ "bemptyv":"\u29B0",
+ "bepsi":"\u03F6",
+ "bernou":"\u212C",
+ "Bernoullis":"\u212C",
+ "Beta":"\u0392",
+ "beta":"\u03B2",
+ "beth":"\u2136",
+ "between":"\u226C",
+ "Bfr":"\uD835\uDD05",
+ "bfr":"\uD835\uDD1F",
+ "bigcap":"\u22C2",
+ "bigcirc":"\u25EF",
+ "bigcup":"\u22C3",
+ "bigodot":"\u2A00",
+ "bigoplus":"\u2A01",
+ "bigotimes":"\u2A02",
+ "bigsqcup":"\u2A06",
+ "bigstar":"\u2605",
+ "bigtriangledown":"\u25BD",
+ "bigtriangleup":"\u25B3",
+ "biguplus":"\u2A04",
+ "bigvee":"\u22C1",
+ "bigwedge":"\u22C0",
+ "bkarow":"\u290D",
+ "blacklozenge":"\u29EB",
+ "blacksquare":"\u25AA",
+ "blacktriangle":"\u25B4",
+ "blacktriangledown":"\u25BE",
+ "blacktriangleleft":"\u25C2",
+ "blacktriangleright":"\u25B8",
+ "blank":"\u2423",
+ "blk12":"\u2592",
+ "blk14":"\u2591",
+ "blk34":"\u2593",
+ "block":"\u2588",
+ "bne":"\u003D\u20E5",
+ "bnequiv":"\u2261\u20E5",
+ "bNot":"\u2AED",
+ "bnot":"\u2310",
+ "Bopf":"\uD835\uDD39",
+ "bopf":"\uD835\uDD53",
+ "bot":"\u22A5",
+ "bottom":"\u22A5",
+ "bowtie":"\u22C8",
+ "boxbox":"\u29C9",
+ "boxDL":"\u2557",
+ "boxDl":"\u2556",
+ "boxdL":"\u2555",
+ "boxdl":"\u2510",
+ "boxDR":"\u2554",
+ "boxDr":"\u2553",
+ "boxdR":"\u2552",
+ "boxdr":"\u250C",
+ "boxH":"\u2550",
+ "boxh":"\u2500",
+ "boxHD":"\u2566",
+ "boxHd":"\u2564",
+ "boxhD":"\u2565",
+ "boxhd":"\u252C",
+ "boxHU":"\u2569",
+ "boxHu":"\u2567",
+ "boxhU":"\u2568",
+ "boxhu":"\u2534",
+ "boxminus":"\u229F",
+ "boxplus":"\u229E",
+ "boxtimes":"\u22A0",
+ "boxUL":"\u255D",
+ "boxUl":"\u255C",
+ "boxuL":"\u255B",
+ "boxul":"\u2518",
+ "boxUR":"\u255A",
+ "boxUr":"\u2559",
+ "boxuR":"\u2558",
+ "boxur":"\u2514",
+ "boxV":"\u2551",
+ "boxv":"\u2502",
+ "boxVH":"\u256C",
+ "boxVh":"\u256B",
+ "boxvH":"\u256A",
+ "boxvh":"\u253C",
+ "boxVL":"\u2563",
+ "boxVl":"\u2562",
+ "boxvL":"\u2561",
+ "boxvl":"\u2524",
+ "boxVR":"\u2560",
+ "boxVr":"\u255F",
+ "boxvR":"\u255E",
+ "boxvr":"\u251C",
+ "bprime":"\u2035",
+ "Breve":"\u02D8",
+ "breve":"\u02D8",
+ "brvbar":"\u00A6",
+ "Bscr":"\u212C",
+ "bscr":"\uD835\uDCB7",
+ "bsemi":"\u204F",
+ "bsim":"\u223D",
+ "bsime":"\u22CD",
+ "bsol":"\u005C",
+ "bsolb":"\u29C5",
+ "bsolhsub":"\u27C8",
+ "bull":"\u2022",
+ "bullet":"\u2022",
+ "bump":"\u224E",
+ "bumpE":"\u2AAE",
+ "bumpe":"\u224F",
+ "Bumpeq":"\u224E",
+ "bumpeq":"\u224F",
+ "Cacute":"\u0106",
+ "cacute":"\u0107",
+ "Cap":"\u22D2",
+ "cap":"\u2229",
+ "capand":"\u2A44",
+ "capbrcup":"\u2A49",
+ "capcap":"\u2A4B",
+ "capcup":"\u2A47",
+ "capdot":"\u2A40",
+ "CapitalDifferentialD":"\u2145",
+ "caps":"\u2229\uFE00",
+ "caret":"\u2041",
+ "caron":"\u02C7",
+ "Cayleys":"\u212D",
+ "ccaps":"\u2A4D",
+ "Ccaron":"\u010C",
+ "ccaron":"\u010D",
+ "Ccedil":"\u00C7",
+ "ccedil":"\u00E7",
+ "Ccirc":"\u0108",
+ "ccirc":"\u0109",
+ "Cconint":"\u2230",
+ "ccups":"\u2A4C",
+ "ccupssm":"\u2A50",
+ "Cdot":"\u010A",
+ "cdot":"\u010B",
+ "cedil":"\u00B8",
+ "Cedilla":"\u00B8",
+ "cemptyv":"\u29B2",
+ "cent":"\u00A2",
+ "CenterDot":"\u00B7",
+ "centerdot":"\u00B7",
+ "Cfr":"\u212D",
+ "cfr":"\uD835\uDD20",
+ "CHcy":"\u0427",
+ "chcy":"\u0447",
+ "check":"\u2713",
+ "checkmark":"\u2713",
+ "Chi":"\u03A7",
+ "chi":"\u03C7",
+ "cir":"\u25CB",
+ "circ":"\u02C6",
+ "circeq":"\u2257",
+ "circlearrowleft":"\u21BA",
+ "circlearrowright":"\u21BB",
+ "circledast":"\u229B",
+ "circledcirc":"\u229A",
+ "circleddash":"\u229D",
+ "CircleDot":"\u2299",
+ "circledR":"\u00AE",
+ "circledS":"\u24C8",
+ "CircleMinus":"\u2296",
+ "CirclePlus":"\u2295",
+ "CircleTimes":"\u2297",
+ "cirE":"\u29C3",
+ "cire":"\u2257",
+ "cirfnint":"\u2A10",
+ "cirmid":"\u2AEF",
+ "cirscir":"\u29C2",
+ "ClockwiseContourIntegral":"\u2232",
+ "CloseCurlyDoubleQuote":"\u201D",
+ "CloseCurlyQuote":"\u2019",
+ "clubs":"\u2663",
+ "clubsuit":"\u2663",
+ "Colon":"\u2237",
+ "colon":"\u003A",
+ "Colone":"\u2A74",
+ "colone":"\u2254",
+ "coloneq":"\u2254",
+ "comma":"\u002C",
+ "commat":"\u0040",
+ "comp":"\u2201",
+ "compfn":"\u2218",
+ "complement":"\u2201",
+ "complexes":"\u2102",
+ "cong":"\u2245",
+ "congdot":"\u2A6D",
+ "Congruent":"\u2261",
+ "Conint":"\u222F",
+ "conint":"\u222E",
+ "ContourIntegral":"\u222E",
+ "Copf":"\u2102",
+ "copf":"\uD835\uDD54",
+ "coprod":"\u2210",
+ "Coproduct":"\u2210",
+ "COPY":"\u00A9",
+ "copy":"\u00A9",
+ "copysr":"\u2117",
+ "CounterClockwiseContourIntegral":"\u2233",
+ "crarr":"\u21B5",
+ "Cross":"\u2A2F",
+ "cross":"\u2717",
+ "Cscr":"\uD835\uDC9E",
+ "cscr":"\uD835\uDCB8",
+ "csub":"\u2ACF",
+ "csube":"\u2AD1",
+ "csup":"\u2AD0",
+ "csupe":"\u2AD2",
+ "ctdot":"\u22EF",
+ "cudarrl":"\u2938",
+ "cudarrr":"\u2935",
+ "cuepr":"\u22DE",
+ "cuesc":"\u22DF",
+ "cularr":"\u21B6",
+ "cularrp":"\u293D",
+ "Cup":"\u22D3",
+ "cup":"\u222A",
+ "cupbrcap":"\u2A48",
+ "CupCap":"\u224D",
+ "cupcap":"\u2A46",
+ "cupcup":"\u2A4A",
+ "cupdot":"\u228D",
+ "cupor":"\u2A45",
+ "cups":"\u222A\uFE00",
+ "curarr":"\u21B7",
+ "curarrm":"\u293C",
+ "curlyeqprec":"\u22DE",
+ "curlyeqsucc":"\u22DF",
+ "curlyvee":"\u22CE",
+ "curlywedge":"\u22CF",
+ "curren":"\u00A4",
+ "curvearrowleft":"\u21B6",
+ "curvearrowright":"\u21B7",
+ "cuvee":"\u22CE",
+ "cuwed":"\u22CF",
+ "cwconint":"\u2232",
+ "cwint":"\u2231",
+ "cylcty":"\u232D",
+ "Dagger":"\u2021",
+ "dagger":"\u2020",
+ "daleth":"\u2138",
+ "Darr":"\u21A1",
+ "dArr":"\u21D3",
+ "darr":"\u2193",
+ "dash":"\u2010",
+ "Dashv":"\u2AE4",
+ "dashv":"\u22A3",
+ "dbkarow":"\u290F",
+ "dblac":"\u02DD",
+ "Dcaron":"\u010E",
+ "dcaron":"\u010F",
+ "Dcy":"\u0414",
+ "dcy":"\u0434",
+ "DD":"\u2145",
+ "dd":"\u2146",
+ "ddagger":"\u2021",
+ "ddarr":"\u21CA",
+ "DDotrahd":"\u2911",
+ "ddotseq":"\u2A77",
+ "deg":"\u00B0",
+ "Del":"\u2207",
+ "Delta":"\u0394",
+ "delta":"\u03B4",
+ "demptyv":"\u29B1",
+ "dfisht":"\u297F",
+ "Dfr":"\uD835\uDD07",
+ "dfr":"\uD835\uDD21",
+ "dHar":"\u2965",
+ "dharl":"\u21C3",
+ "dharr":"\u21C2",
+ "DiacriticalAcute":"\u00B4",
+ "DiacriticalDot":"\u02D9",
+ "DiacriticalDoubleAcute":"\u02DD",
+ "DiacriticalGrave":"\u0060",
+ "DiacriticalTilde":"\u02DC",
+ "diam":"\u22C4",
+ "Diamond":"\u22C4",
+ "diamond":"\u22C4",
+ "diamondsuit":"\u2666",
+ "diams":"\u2666",
+ "die":"\u00A8",
+ "DifferentialD":"\u2146",
+ "digamma":"\u03DD",
+ "disin":"\u22F2",
+ "div":"\u00F7",
+ "divide":"\u00F7",
+ "divideontimes":"\u22C7",
+ "divonx":"\u22C7",
+ "DJcy":"\u0402",
+ "djcy":"\u0452",
+ "dlcorn":"\u231E",
+ "dlcrop":"\u230D",
+ "dollar":"\u0024",
+ "Dopf":"\uD835\uDD3B",
+ "dopf":"\uD835\uDD55",
+ "Dot":"\u00A8",
+ "dot":"\u02D9",
+ "DotDot":"\u20DC",
+ "doteq":"\u2250",
+ "doteqdot":"\u2251",
+ "DotEqual":"\u2250",
+ "dotminus":"\u2238",
+ "dotplus":"\u2214",
+ "dotsquare":"\u22A1",
+ "doublebarwedge":"\u2306",
+ "DoubleContourIntegral":"\u222F",
+ "DoubleDot":"\u00A8",
+ "DoubleDownArrow":"\u21D3",
+ "DoubleLeftArrow":"\u21D0",
+ "DoubleLeftRightArrow":"\u21D4",
+ "DoubleLeftTee":"\u2AE4",
+ "DoubleLongLeftArrow":"\u27F8",
+ "DoubleLongLeftRightArrow":"\u27FA",
+ "DoubleLongRightArrow":"\u27F9",
+ "DoubleRightArrow":"\u21D2",
+ "DoubleRightTee":"\u22A8",
+ "DoubleUpArrow":"\u21D1",
+ "DoubleUpDownArrow":"\u21D5",
+ "DoubleVerticalBar":"\u2225",
+ "DownArrow":"\u2193",
+ "Downarrow":"\u21D3",
+ "downarrow":"\u2193",
+ "DownArrowBar":"\u2913",
+ "DownArrowUpArrow":"\u21F5",
+ "DownBreve":"\u0311",
+ "downdownarrows":"\u21CA",
+ "downharpoonleft":"\u21C3",
+ "downharpoonright":"\u21C2",
+ "DownLeftRightVector":"\u2950",
+ "DownLeftTeeVector":"\u295E",
+ "DownLeftVector":"\u21BD",
+ "DownLeftVectorBar":"\u2956",
+ "DownRightTeeVector":"\u295F",
+ "DownRightVector":"\u21C1",
+ "DownRightVectorBar":"\u2957",
+ "DownTee":"\u22A4",
+ "DownTeeArrow":"\u21A7",
+ "drbkarow":"\u2910",
+ "drcorn":"\u231F",
+ "drcrop":"\u230C",
+ "Dscr":"\uD835\uDC9F",
+ "dscr":"\uD835\uDCB9",
+ "DScy":"\u0405",
+ "dscy":"\u0455",
+ "dsol":"\u29F6",
+ "Dstrok":"\u0110",
+ "dstrok":"\u0111",
+ "dtdot":"\u22F1",
+ "dtri":"\u25BF",
+ "dtrif":"\u25BE",
+ "duarr":"\u21F5",
+ "duhar":"\u296F",
+ "dwangle":"\u29A6",
+ "DZcy":"\u040F",
+ "dzcy":"\u045F",
+ "dzigrarr":"\u27FF",
+ "Eacute":"\u00C9",
+ "eacute":"\u00E9",
+ "easter":"\u2A6E",
+ "Ecaron":"\u011A",
+ "ecaron":"\u011B",
+ "ecir":"\u2256",
+ "Ecirc":"\u00CA",
+ "ecirc":"\u00EA",
+ "ecolon":"\u2255",
+ "Ecy":"\u042D",
+ "ecy":"\u044D",
+ "eDDot":"\u2A77",
+ "Edot":"\u0116",
+ "eDot":"\u2251",
+ "edot":"\u0117",
+ "ee":"\u2147",
+ "efDot":"\u2252",
+ "Efr":"\uD835\uDD08",
+ "efr":"\uD835\uDD22",
+ "eg":"\u2A9A",
+ "Egrave":"\u00C8",
+ "egrave":"\u00E8",
+ "egs":"\u2A96",
+ "egsdot":"\u2A98",
+ "el":"\u2A99",
+ "Element":"\u2208",
+ "elinters":"\u23E7",
+ "ell":"\u2113",
+ "els":"\u2A95",
+ "elsdot":"\u2A97",
+ "Emacr":"\u0112",
+ "emacr":"\u0113",
+ "empty":"\u2205",
+ "emptyset":"\u2205",
+ "EmptySmallSquare":"\u25FB",
+ "emptyv":"\u2205",
+ "EmptyVerySmallSquare":"\u25AB",
+ "emsp":"\u2003",
+ "emsp13":"\u2004",
+ "emsp14":"\u2005",
+ "ENG":"\u014A",
+ "eng":"\u014B",
+ "ensp":"\u2002",
+ "Eogon":"\u0118",
+ "eogon":"\u0119",
+ "Eopf":"\uD835\uDD3C",
+ "eopf":"\uD835\uDD56",
+ "epar":"\u22D5",
+ "eparsl":"\u29E3",
+ "eplus":"\u2A71",
+ "epsi":"\u03B5",
+ "Epsilon":"\u0395",
+ "epsilon":"\u03B5",
+ "epsiv":"\u03F5",
+ "eqcirc":"\u2256",
+ "eqcolon":"\u2255",
+ "eqsim":"\u2242",
+ "eqslantgtr":"\u2A96",
+ "eqslantless":"\u2A95",
+ "Equal":"\u2A75",
+ "equals":"\u003D",
+ "EqualTilde":"\u2242",
+ "equest":"\u225F",
+ "Equilibrium":"\u21CC",
+ "equiv":"\u2261",
+ "equivDD":"\u2A78",
+ "eqvparsl":"\u29E5",
+ "erarr":"\u2971",
+ "erDot":"\u2253",
+ "Escr":"\u2130",
+ "escr":"\u212F",
+ "esdot":"\u2250",
+ "Esim":"\u2A73",
+ "esim":"\u2242",
+ "Eta":"\u0397",
+ "eta":"\u03B7",
+ "ETH":"\u00D0",
+ "eth":"\u00F0",
+ "Euml":"\u00CB",
+ "euml":"\u00EB",
+ "euro":"\u20AC",
+ "excl":"\u0021",
+ "exist":"\u2203",
+ "Exists":"\u2203",
+ "expectation":"\u2130",
+ "ExponentialE":"\u2147",
+ "exponentiale":"\u2147",
+ "fallingdotseq":"\u2252",
+ "Fcy":"\u0424",
+ "fcy":"\u0444",
+ "female":"\u2640",
+ "ffilig":"\uFB03",
+ "fflig":"\uFB00",
+ "ffllig":"\uFB04",
+ "Ffr":"\uD835\uDD09",
+ "ffr":"\uD835\uDD23",
+ "filig":"\uFB01",
+ "FilledSmallSquare":"\u25FC",
+ "FilledVerySmallSquare":"\u25AA",
+ "fjlig":"\u0066\u006A",
+ "flat":"\u266D",
+ "fllig":"\uFB02",
+ "fltns":"\u25B1",
+ "fnof":"\u0192",
+ "Fopf":"\uD835\uDD3D",
+ "fopf":"\uD835\uDD57",
+ "ForAll":"\u2200",
+ "forall":"\u2200",
+ "fork":"\u22D4",
+ "forkv":"\u2AD9",
+ "Fouriertrf":"\u2131",
+ "fpartint":"\u2A0D",
+ "frac12":"\u00BD",
+ "frac13":"\u2153",
+ "frac14":"\u00BC",
+ "frac15":"\u2155",
+ "frac16":"\u2159",
+ "frac18":"\u215B",
+ "frac23":"\u2154",
+ "frac25":"\u2156",
+ "frac34":"\u00BE",
+ "frac35":"\u2157",
+ "frac38":"\u215C",
+ "frac45":"\u2158",
+ "frac56":"\u215A",
+ "frac58":"\u215D",
+ "frac78":"\u215E",
+ "frasl":"\u2044",
+ "frown":"\u2322",
+ "Fscr":"\u2131",
+ "fscr":"\uD835\uDCBB",
+ "gacute":"\u01F5",
+ "Gamma":"\u0393",
+ "gamma":"\u03B3",
+ "Gammad":"\u03DC",
+ "gammad":"\u03DD",
+ "gap":"\u2A86",
+ "Gbreve":"\u011E",
+ "gbreve":"\u011F",
+ "Gcedil":"\u0122",
+ "Gcirc":"\u011C",
+ "gcirc":"\u011D",
+ "Gcy":"\u0413",
+ "gcy":"\u0433",
+ "Gdot":"\u0120",
+ "gdot":"\u0121",
+ "gE":"\u2267",
+ "ge":"\u2265",
+ "gEl":"\u2A8C",
+ "gel":"\u22DB",
+ "geq":"\u2265",
+ "geqq":"\u2267",
+ "geqslant":"\u2A7E",
+ "ges":"\u2A7E",
+ "gescc":"\u2AA9",
+ "gesdot":"\u2A80",
+ "gesdoto":"\u2A82",
+ "gesdotol":"\u2A84",
+ "gesl":"\u22DB\uFE00",
+ "gesles":"\u2A94",
+ "Gfr":"\uD835\uDD0A",
+ "gfr":"\uD835\uDD24",
+ "Gg":"\u22D9",
+ "gg":"\u226B",
+ "ggg":"\u22D9",
+ "gimel":"\u2137",
+ "GJcy":"\u0403",
+ "gjcy":"\u0453",
+ "gl":"\u2277",
+ "gla":"\u2AA5",
+ "glE":"\u2A92",
+ "glj":"\u2AA4",
+ "gnap":"\u2A8A",
+ "gnapprox":"\u2A8A",
+ "gnE":"\u2269",
+ "gne":"\u2A88",
+ "gneq":"\u2A88",
+ "gneqq":"\u2269",
+ "gnsim":"\u22E7",
+ "Gopf":"\uD835\uDD3E",
+ "gopf":"\uD835\uDD58",
+ "grave":"\u0060",
+ "GreaterEqual":"\u2265",
+ "GreaterEqualLess":"\u22DB",
+ "GreaterFullEqual":"\u2267",
+ "GreaterGreater":"\u2AA2",
+ "GreaterLess":"\u2277",
+ "GreaterSlantEqual":"\u2A7E",
+ "GreaterTilde":"\u2273",
+ "Gscr":"\uD835\uDCA2",
+ "gscr":"\u210A",
+ "gsim":"\u2273",
+ "gsime":"\u2A8E",
+ "gsiml":"\u2A90",
+ "GT":"\u003E",
+ "Gt":"\u226B",
+ "gt":"\u003E",
+ "gtcc":"\u2AA7",
+ "gtcir":"\u2A7A",
+ "gtdot":"\u22D7",
+ "gtlPar":"\u2995",
+ "gtquest":"\u2A7C",
+ "gtrapprox":"\u2A86",
+ "gtrarr":"\u2978",
+ "gtrdot":"\u22D7",
+ "gtreqless":"\u22DB",
+ "gtreqqless":"\u2A8C",
+ "gtrless":"\u2277",
+ "gtrsim":"\u2273",
+ "gvertneqq":"\u2269\uFE00",
+ "gvnE":"\u2269\uFE00",
+ "Hacek":"\u02C7",
+ "hairsp":"\u200A",
+ "half":"\u00BD",
+ "hamilt":"\u210B",
+ "HARDcy":"\u042A",
+ "hardcy":"\u044A",
+ "hArr":"\u21D4",
+ "harr":"\u2194",
+ "harrcir":"\u2948",
+ "harrw":"\u21AD",
+ "Hat":"\u005E",
+ "hbar":"\u210F",
+ "Hcirc":"\u0124",
+ "hcirc":"\u0125",
+ "hearts":"\u2665",
+ "heartsuit":"\u2665",
+ "hellip":"\u2026",
+ "hercon":"\u22B9",
+ "Hfr":"\u210C",
+ "hfr":"\uD835\uDD25",
+ "HilbertSpace":"\u210B",
+ "hksearow":"\u2925",
+ "hkswarow":"\u2926",
+ "hoarr":"\u21FF",
+ "homtht":"\u223B",
+ "hookleftarrow":"\u21A9",
+ "hookrightarrow":"\u21AA",
+ "Hopf":"\u210D",
+ "hopf":"\uD835\uDD59",
+ "horbar":"\u2015",
+ "HorizontalLine":"\u2500",
+ "Hscr":"\u210B",
+ "hscr":"\uD835\uDCBD",
+ "hslash":"\u210F",
+ "Hstrok":"\u0126",
+ "hstrok":"\u0127",
+ "HumpDownHump":"\u224E",
+ "HumpEqual":"\u224F",
+ "hybull":"\u2043",
+ "hyphen":"\u2010",
+ "Iacute":"\u00CD",
+ "iacute":"\u00ED",
+ "ic":"\u2063",
+ "Icirc":"\u00CE",
+ "icirc":"\u00EE",
+ "Icy":"\u0418",
+ "icy":"\u0438",
+ "Idot":"\u0130",
+ "IEcy":"\u0415",
+ "iecy":"\u0435",
+ "iexcl":"\u00A1",
+ "iff":"\u21D4",
+ "Ifr":"\u2111",
+ "ifr":"\uD835\uDD26",
+ "Igrave":"\u00CC",
+ "igrave":"\u00EC",
+ "ii":"\u2148",
+ "iiiint":"\u2A0C",
+ "iiint":"\u222D",
+ "iinfin":"\u29DC",
+ "iiota":"\u2129",
+ "IJlig":"\u0132",
+ "ijlig":"\u0133",
+ "Im":"\u2111",
+ "Imacr":"\u012A",
+ "imacr":"\u012B",
+ "image":"\u2111",
+ "ImaginaryI":"\u2148",
+ "imagline":"\u2110",
+ "imagpart":"\u2111",
+ "imath":"\u0131",
+ "imof":"\u22B7",
+ "imped":"\u01B5",
+ "Implies":"\u21D2",
+ "in":"\u2208",
+ "incare":"\u2105",
+ "infin":"\u221E",
+ "infintie":"\u29DD",
+ "inodot":"\u0131",
+ "Int":"\u222C",
+ "int":"\u222B",
+ "intcal":"\u22BA",
+ "integers":"\u2124",
+ "Integral":"\u222B",
+ "intercal":"\u22BA",
+ "Intersection":"\u22C2",
+ "intlarhk":"\u2A17",
+ "intprod":"\u2A3C",
+ "InvisibleComma":"\u2063",
+ "InvisibleTimes":"\u2062",
+ "IOcy":"\u0401",
+ "iocy":"\u0451",
+ "Iogon":"\u012E",
+ "iogon":"\u012F",
+ "Iopf":"\uD835\uDD40",
+ "iopf":"\uD835\uDD5A",
+ "Iota":"\u0399",
+ "iota":"\u03B9",
+ "iprod":"\u2A3C",
+ "iquest":"\u00BF",
+ "Iscr":"\u2110",
+ "iscr":"\uD835\uDCBE",
+ "isin":"\u2208",
+ "isindot":"\u22F5",
+ "isinE":"\u22F9",
+ "isins":"\u22F4",
+ "isinsv":"\u22F3",
+ "isinv":"\u2208",
+ "it":"\u2062",
+ "Itilde":"\u0128",
+ "itilde":"\u0129",
+ "Iukcy":"\u0406",
+ "iukcy":"\u0456",
+ "Iuml":"\u00CF",
+ "iuml":"\u00EF",
+ "Jcirc":"\u0134",
+ "jcirc":"\u0135",
+ "Jcy":"\u0419",
+ "jcy":"\u0439",
+ "Jfr":"\uD835\uDD0D",
+ "jfr":"\uD835\uDD27",
+ "jmath":"\u0237",
+ "Jopf":"\uD835\uDD41",
+ "jopf":"\uD835\uDD5B",
+ "Jscr":"\uD835\uDCA5",
+ "jscr":"\uD835\uDCBF",
+ "Jsercy":"\u0408",
+ "jsercy":"\u0458",
+ "Jukcy":"\u0404",
+ "jukcy":"\u0454",
+ "Kappa":"\u039A",
+ "kappa":"\u03BA",
+ "kappav":"\u03F0",
+ "Kcedil":"\u0136",
+ "kcedil":"\u0137",
+ "Kcy":"\u041A",
+ "kcy":"\u043A",
+ "Kfr":"\uD835\uDD0E",
+ "kfr":"\uD835\uDD28",
+ "kgreen":"\u0138",
+ "KHcy":"\u0425",
+ "khcy":"\u0445",
+ "KJcy":"\u040C",
+ "kjcy":"\u045C",
+ "Kopf":"\uD835\uDD42",
+ "kopf":"\uD835\uDD5C",
+ "Kscr":"\uD835\uDCA6",
+ "kscr":"\uD835\uDCC0",
+ "lAarr":"\u21DA",
+ "Lacute":"\u0139",
+ "lacute":"\u013A",
+ "laemptyv":"\u29B4",
+ "lagran":"\u2112",
+ "Lambda":"\u039B",
+ "lambda":"\u03BB",
+ "Lang":"\u27EA",
+ "lang":"\u27E8",
+ "langd":"\u2991",
+ "langle":"\u27E8",
+ "lap":"\u2A85",
+ "Laplacetrf":"\u2112",
+ "laquo":"\u00AB",
+ "Larr":"\u219E",
+ "lArr":"\u21D0",
+ "larr":"\u2190",
+ "larrb":"\u21E4",
+ "larrbfs":"\u291F",
+ "larrfs":"\u291D",
+ "larrhk":"\u21A9",
+ "larrlp":"\u21AB",
+ "larrpl":"\u2939",
+ "larrsim":"\u2973",
+ "larrtl":"\u21A2",
+ "lat":"\u2AAB",
+ "lAtail":"\u291B",
+ "latail":"\u2919",
+ "late":"\u2AAD",
+ "lates":"\u2AAD\uFE00",
+ "lBarr":"\u290E",
+ "lbarr":"\u290C",
+ "lbbrk":"\u2772",
+ "lbrace":"\u007B",
+ "lbrack":"\u005B",
+ "lbrke":"\u298B",
+ "lbrksld":"\u298F",
+ "lbrkslu":"\u298D",
+ "Lcaron":"\u013D",
+ "lcaron":"\u013E",
+ "Lcedil":"\u013B",
+ "lcedil":"\u013C",
+ "lceil":"\u2308",
+ "lcub":"\u007B",
+ "Lcy":"\u041B",
+ "lcy":"\u043B",
+ "ldca":"\u2936",
+ "ldquo":"\u201C",
+ "ldquor":"\u201E",
+ "ldrdhar":"\u2967",
+ "ldrushar":"\u294B",
+ "ldsh":"\u21B2",
+ "lE":"\u2266",
+ "le":"\u2264",
+ "LeftAngleBracket":"\u27E8",
+ "LeftArrow":"\u2190",
+ "Leftarrow":"\u21D0",
+ "leftarrow":"\u2190",
+ "LeftArrowBar":"\u21E4",
+ "LeftArrowRightArrow":"\u21C6",
+ "leftarrowtail":"\u21A2",
+ "LeftCeiling":"\u2308",
+ "LeftDoubleBracket":"\u27E6",
+ "LeftDownTeeVector":"\u2961",
+ "LeftDownVector":"\u21C3",
+ "LeftDownVectorBar":"\u2959",
+ "LeftFloor":"\u230A",
+ "leftharpoondown":"\u21BD",
+ "leftharpoonup":"\u21BC",
+ "leftleftarrows":"\u21C7",
+ "LeftRightArrow":"\u2194",
+ "Leftrightarrow":"\u21D4",
+ "leftrightarrow":"\u2194",
+ "leftrightarrows":"\u21C6",
+ "leftrightharpoons":"\u21CB",
+ "leftrightsquigarrow":"\u21AD",
+ "LeftRightVector":"\u294E",
+ "LeftTee":"\u22A3",
+ "LeftTeeArrow":"\u21A4",
+ "LeftTeeVector":"\u295A",
+ "leftthreetimes":"\u22CB",
+ "LeftTriangle":"\u22B2",
+ "LeftTriangleBar":"\u29CF",
+ "LeftTriangleEqual":"\u22B4",
+ "LeftUpDownVector":"\u2951",
+ "LeftUpTeeVector":"\u2960",
+ "LeftUpVector":"\u21BF",
+ "LeftUpVectorBar":"\u2958",
+ "LeftVector":"\u21BC",
+ "LeftVectorBar":"\u2952",
+ "lEg":"\u2A8B",
+ "leg":"\u22DA",
+ "leq":"\u2264",
+ "leqq":"\u2266",
+ "leqslant":"\u2A7D",
+ "les":"\u2A7D",
+ "lescc":"\u2AA8",
+ "lesdot":"\u2A7F",
+ "lesdoto":"\u2A81",
+ "lesdotor":"\u2A83",
+ "lesg":"\u22DA\uFE00",
+ "lesges":"\u2A93",
+ "lessapprox":"\u2A85",
+ "lessdot":"\u22D6",
+ "lesseqgtr":"\u22DA",
+ "lesseqqgtr":"\u2A8B",
+ "LessEqualGreater":"\u22DA",
+ "LessFullEqual":"\u2266",
+ "LessGreater":"\u2276",
+ "lessgtr":"\u2276",
+ "LessLess":"\u2AA1",
+ "lesssim":"\u2272",
+ "LessSlantEqual":"\u2A7D",
+ "LessTilde":"\u2272",
+ "lfisht":"\u297C",
+ "lfloor":"\u230A",
+ "Lfr":"\uD835\uDD0F",
+ "lfr":"\uD835\uDD29",
+ "lg":"\u2276",
+ "lgE":"\u2A91",
+ "lHar":"\u2962",
+ "lhard":"\u21BD",
+ "lharu":"\u21BC",
+ "lharul":"\u296A",
+ "lhblk":"\u2584",
+ "LJcy":"\u0409",
+ "ljcy":"\u0459",
+ "Ll":"\u22D8",
+ "ll":"\u226A",
+ "llarr":"\u21C7",
+ "llcorner":"\u231E",
+ "Lleftarrow":"\u21DA",
+ "llhard":"\u296B",
+ "lltri":"\u25FA",
+ "Lmidot":"\u013F",
+ "lmidot":"\u0140",
+ "lmoust":"\u23B0",
+ "lmoustache":"\u23B0",
+ "lnap":"\u2A89",
+ "lnapprox":"\u2A89",
+ "lnE":"\u2268",
+ "lne":"\u2A87",
+ "lneq":"\u2A87",
+ "lneqq":"\u2268",
+ "lnsim":"\u22E6",
+ "loang":"\u27EC",
+ "loarr":"\u21FD",
+ "lobrk":"\u27E6",
+ "LongLeftArrow":"\u27F5",
+ "Longleftarrow":"\u27F8",
+ "longleftarrow":"\u27F5",
+ "LongLeftRightArrow":"\u27F7",
+ "Longleftrightarrow":"\u27FA",
+ "longleftrightarrow":"\u27F7",
+ "longmapsto":"\u27FC",
+ "LongRightArrow":"\u27F6",
+ "Longrightarrow":"\u27F9",
+ "longrightarrow":"\u27F6",
+ "looparrowleft":"\u21AB",
+ "looparrowright":"\u21AC",
+ "lopar":"\u2985",
+ "Lopf":"\uD835\uDD43",
+ "lopf":"\uD835\uDD5D",
+ "loplus":"\u2A2D",
+ "lotimes":"\u2A34",
+ "lowast":"\u2217",
+ "lowbar":"\u005F",
+ "LowerLeftArrow":"\u2199",
+ "LowerRightArrow":"\u2198",
+ "loz":"\u25CA",
+ "lozenge":"\u25CA",
+ "lozf":"\u29EB",
+ "lpar":"\u0028",
+ "lparlt":"\u2993",
+ "lrarr":"\u21C6",
+ "lrcorner":"\u231F",
+ "lrhar":"\u21CB",
+ "lrhard":"\u296D",
+ "lrm":"\u200E",
+ "lrtri":"\u22BF",
+ "lsaquo":"\u2039",
+ "Lscr":"\u2112",
+ "lscr":"\uD835\uDCC1",
+ "Lsh":"\u21B0",
+ "lsh":"\u21B0",
+ "lsim":"\u2272",
+ "lsime":"\u2A8D",
+ "lsimg":"\u2A8F",
+ "lsqb":"\u005B",
+ "lsquo":"\u2018",
+ "lsquor":"\u201A",
+ "Lstrok":"\u0141",
+ "lstrok":"\u0142",
+ "LT":"\u003C",
+ "Lt":"\u226A",
+ "lt":"\u003C",
+ "ltcc":"\u2AA6",
+ "ltcir":"\u2A79",
+ "ltdot":"\u22D6",
+ "lthree":"\u22CB",
+ "ltimes":"\u22C9",
+ "ltlarr":"\u2976",
+ "ltquest":"\u2A7B",
+ "ltri":"\u25C3",
+ "ltrie":"\u22B4",
+ "ltrif":"\u25C2",
+ "ltrPar":"\u2996",
+ "lurdshar":"\u294A",
+ "luruhar":"\u2966",
+ "lvertneqq":"\u2268\uFE00",
+ "lvnE":"\u2268\uFE00",
+ "macr":"\u00AF",
+ "male":"\u2642",
+ "malt":"\u2720",
+ "maltese":"\u2720",
+ "Map":"\u2905",
+ "map":"\u21A6",
+ "mapsto":"\u21A6",
+ "mapstodown":"\u21A7",
+ "mapstoleft":"\u21A4",
+ "mapstoup":"\u21A5",
+ "marker":"\u25AE",
+ "mcomma":"\u2A29",
+ "Mcy":"\u041C",
+ "mcy":"\u043C",
+ "mdash":"\u2014",
+ "mDDot":"\u223A",
+ "measuredangle":"\u2221",
+ "MediumSpace":"\u205F",
+ "Mellintrf":"\u2133",
+ "Mfr":"\uD835\uDD10",
+ "mfr":"\uD835\uDD2A",
+ "mho":"\u2127",
+ "micro":"\u00B5",
+ "mid":"\u2223",
+ "midast":"\u002A",
+ "midcir":"\u2AF0",
+ "middot":"\u00B7",
+ "minus":"\u2212",
+ "minusb":"\u229F",
+ "minusd":"\u2238",
+ "minusdu":"\u2A2A",
+ "MinusPlus":"\u2213",
+ "mlcp":"\u2ADB",
+ "mldr":"\u2026",
+ "mnplus":"\u2213",
+ "models":"\u22A7",
+ "Mopf":"\uD835\uDD44",
+ "mopf":"\uD835\uDD5E",
+ "mp":"\u2213",
+ "Mscr":"\u2133",
+ "mscr":"\uD835\uDCC2",
+ "mstpos":"\u223E",
+ "Mu":"\u039C",
+ "mu":"\u03BC",
+ "multimap":"\u22B8",
+ "mumap":"\u22B8",
+ "nabla":"\u2207",
+ "Nacute":"\u0143",
+ "nacute":"\u0144",
+ "nang":"\u2220\u20D2",
+ "nap":"\u2249",
+ "napE":"\u2A70\u0338",
+ "napid":"\u224B\u0338",
+ "napos":"\u0149",
+ "napprox":"\u2249",
+ "natur":"\u266E",
+ "natural":"\u266E",
+ "naturals":"\u2115",
+ "nbsp":"\u00A0",
+ "nbump":"\u224E\u0338",
+ "nbumpe":"\u224F\u0338",
+ "ncap":"\u2A43",
+ "Ncaron":"\u0147",
+ "ncaron":"\u0148",
+ "Ncedil":"\u0145",
+ "ncedil":"\u0146",
+ "ncong":"\u2247",
+ "ncongdot":"\u2A6D\u0338",
+ "ncup":"\u2A42",
+ "Ncy":"\u041D",
+ "ncy":"\u043D",
+ "ndash":"\u2013",
+ "ne":"\u2260",
+ "nearhk":"\u2924",
+ "neArr":"\u21D7",
+ "nearr":"\u2197",
+ "nearrow":"\u2197",
+ "nedot":"\u2250\u0338",
+ "NegativeMediumSpace":"\u200B",
+ "NegativeThickSpace":"\u200B",
+ "NegativeThinSpace":"\u200B",
+ "NegativeVeryThinSpace":"\u200B",
+ "nequiv":"\u2262",
+ "nesear":"\u2928",
+ "nesim":"\u2242\u0338",
+ "NestedGreaterGreater":"\u226B",
+ "NestedLessLess":"\u226A",
+ "NewLine":"\u000A",
+ "nexist":"\u2204",
+ "nexists":"\u2204",
+ "Nfr":"\uD835\uDD11",
+ "nfr":"\uD835\uDD2B",
+ "ngE":"\u2267\u0338",
+ "nge":"\u2271",
+ "ngeq":"\u2271",
+ "ngeqq":"\u2267\u0338",
+ "ngeqslant":"\u2A7E\u0338",
+ "nges":"\u2A7E\u0338",
+ "nGg":"\u22D9\u0338",
+ "ngsim":"\u2275",
+ "nGt":"\u226B\u20D2",
+ "ngt":"\u226F",
+ "ngtr":"\u226F",
+ "nGtv":"\u226B\u0338",
+ "nhArr":"\u21CE",
+ "nharr":"\u21AE",
+ "nhpar":"\u2AF2",
+ "ni":"\u220B",
+ "nis":"\u22FC",
+ "nisd":"\u22FA",
+ "niv":"\u220B",
+ "NJcy":"\u040A",
+ "njcy":"\u045A",
+ "nlArr":"\u21CD",
+ "nlarr":"\u219A",
+ "nldr":"\u2025",
+ "nlE":"\u2266\u0338",
+ "nle":"\u2270",
+ "nLeftarrow":"\u21CD",
+ "nleftarrow":"\u219A",
+ "nLeftrightarrow":"\u21CE",
+ "nleftrightarrow":"\u21AE",
+ "nleq":"\u2270",
+ "nleqq":"\u2266\u0338",
+ "nleqslant":"\u2A7D\u0338",
+ "nles":"\u2A7D\u0338",
+ "nless":"\u226E",
+ "nLl":"\u22D8\u0338",
+ "nlsim":"\u2274",
+ "nLt":"\u226A\u20D2",
+ "nlt":"\u226E",
+ "nltri":"\u22EA",
+ "nltrie":"\u22EC",
+ "nLtv":"\u226A\u0338",
+ "nmid":"\u2224",
+ "NoBreak":"\u2060",
+ "NonBreakingSpace":"\u00A0",
+ "Nopf":"\u2115",
+ "nopf":"\uD835\uDD5F",
+ "Not":"\u2AEC",
+ "not":"\u00AC",
+ "NotCongruent":"\u2262",
+ "NotCupCap":"\u226D",
+ "NotDoubleVerticalBar":"\u2226",
+ "NotElement":"\u2209",
+ "NotEqual":"\u2260",
+ "NotEqualTilde":"\u2242\u0338",
+ "NotExists":"\u2204",
+ "NotGreater":"\u226F",
+ "NotGreaterEqual":"\u2271",
+ "NotGreaterFullEqual":"\u2267\u0338",
+ "NotGreaterGreater":"\u226B\u0338",
+ "NotGreaterLess":"\u2279",
+ "NotGreaterSlantEqual":"\u2A7E\u0338",
+ "NotGreaterTilde":"\u2275",
+ "NotHumpDownHump":"\u224E\u0338",
+ "NotHumpEqual":"\u224F\u0338",
+ "notin":"\u2209",
+ "notindot":"\u22F5\u0338",
+ "notinE":"\u22F9\u0338",
+ "notinva":"\u2209",
+ "notinvb":"\u22F7",
+ "notinvc":"\u22F6",
+ "NotLeftTriangle":"\u22EA",
+ "NotLeftTriangleBar":"\u29CF\u0338",
+ "NotLeftTriangleEqual":"\u22EC",
+ "NotLess":"\u226E",
+ "NotLessEqual":"\u2270",
+ "NotLessGreater":"\u2278",
+ "NotLessLess":"\u226A\u0338",
+ "NotLessSlantEqual":"\u2A7D\u0338",
+ "NotLessTilde":"\u2274",
+ "NotNestedGreaterGreater":"\u2AA2\u0338",
+ "NotNestedLessLess":"\u2AA1\u0338",
+ "notni":"\u220C",
+ "notniva":"\u220C",
+ "notnivb":"\u22FE",
+ "notnivc":"\u22FD",
+ "NotPrecedes":"\u2280",
+ "NotPrecedesEqual":"\u2AAF\u0338",
+ "NotPrecedesSlantEqual":"\u22E0",
+ "NotReverseElement":"\u220C",
+ "NotRightTriangle":"\u22EB",
+ "NotRightTriangleBar":"\u29D0\u0338",
+ "NotRightTriangleEqual":"\u22ED",
+ "NotSquareSubset":"\u228F\u0338",
+ "NotSquareSubsetEqual":"\u22E2",
+ "NotSquareSuperset":"\u2290\u0338",
+ "NotSquareSupersetEqual":"\u22E3",
+ "NotSubset":"\u2282\u20D2",
+ "NotSubsetEqual":"\u2288",
+ "NotSucceeds":"\u2281",
+ "NotSucceedsEqual":"\u2AB0\u0338",
+ "NotSucceedsSlantEqual":"\u22E1",
+ "NotSucceedsTilde":"\u227F\u0338",
+ "NotSuperset":"\u2283\u20D2",
+ "NotSupersetEqual":"\u2289",
+ "NotTilde":"\u2241",
+ "NotTildeEqual":"\u2244",
+ "NotTildeFullEqual":"\u2247",
+ "NotTildeTilde":"\u2249",
+ "NotVerticalBar":"\u2224",
+ "npar":"\u2226",
+ "nparallel":"\u2226",
+ "nparsl":"\u2AFD\u20E5",
+ "npart":"\u2202\u0338",
+ "npolint":"\u2A14",
+ "npr":"\u2280",
+ "nprcue":"\u22E0",
+ "npre":"\u2AAF\u0338",
+ "nprec":"\u2280",
+ "npreceq":"\u2AAF\u0338",
+ "nrArr":"\u21CF",
+ "nrarr":"\u219B",
+ "nrarrc":"\u2933\u0338",
+ "nrarrw":"\u219D\u0338",
+ "nRightarrow":"\u21CF",
+ "nrightarrow":"\u219B",
+ "nrtri":"\u22EB",
+ "nrtrie":"\u22ED",
+ "nsc":"\u2281",
+ "nsccue":"\u22E1",
+ "nsce":"\u2AB0\u0338",
+ "Nscr":"\uD835\uDCA9",
+ "nscr":"\uD835\uDCC3",
+ "nshortmid":"\u2224",
+ "nshortparallel":"\u2226",
+ "nsim":"\u2241",
+ "nsime":"\u2244",
+ "nsimeq":"\u2244",
+ "nsmid":"\u2224",
+ "nspar":"\u2226",
+ "nsqsube":"\u22E2",
+ "nsqsupe":"\u22E3",
+ "nsub":"\u2284",
+ "nsubE":"\u2AC5\u0338",
+ "nsube":"\u2288",
+ "nsubset":"\u2282\u20D2",
+ "nsubseteq":"\u2288",
+ "nsubseteqq":"\u2AC5\u0338",
+ "nsucc":"\u2281",
+ "nsucceq":"\u2AB0\u0338",
+ "nsup":"\u2285",
+ "nsupE":"\u2AC6\u0338",
+ "nsupe":"\u2289",
+ "nsupset":"\u2283\u20D2",
+ "nsupseteq":"\u2289",
+ "nsupseteqq":"\u2AC6\u0338",
+ "ntgl":"\u2279",
+ "Ntilde":"\u00D1",
+ "ntilde":"\u00F1",
+ "ntlg":"\u2278",
+ "ntriangleleft":"\u22EA",
+ "ntrianglelefteq":"\u22EC",
+ "ntriangleright":"\u22EB",
+ "ntrianglerighteq":"\u22ED",
+ "Nu":"\u039D",
+ "nu":"\u03BD",
+ "num":"\u0023",
+ "numero":"\u2116",
+ "numsp":"\u2007",
+ "nvap":"\u224D\u20D2",
+ "nVDash":"\u22AF",
+ "nVdash":"\u22AE",
+ "nvDash":"\u22AD",
+ "nvdash":"\u22AC",
+ "nvge":"\u2265\u20D2",
+ "nvgt":"\u003E\u20D2",
+ "nvHarr":"\u2904",
+ "nvinfin":"\u29DE",
+ "nvlArr":"\u2902",
+ "nvle":"\u2264\u20D2",
+ "nvlt":"\u003C\u20D2",
+ "nvltrie":"\u22B4\u20D2",
+ "nvrArr":"\u2903",
+ "nvrtrie":"\u22B5\u20D2",
+ "nvsim":"\u223C\u20D2",
+ "nwarhk":"\u2923",
+ "nwArr":"\u21D6",
+ "nwarr":"\u2196",
+ "nwarrow":"\u2196",
+ "nwnear":"\u2927",
+ "Oacute":"\u00D3",
+ "oacute":"\u00F3",
+ "oast":"\u229B",
+ "ocir":"\u229A",
+ "Ocirc":"\u00D4",
+ "ocirc":"\u00F4",
+ "Ocy":"\u041E",
+ "ocy":"\u043E",
+ "odash":"\u229D",
+ "Odblac":"\u0150",
+ "odblac":"\u0151",
+ "odiv":"\u2A38",
+ "odot":"\u2299",
+ "odsold":"\u29BC",
+ "OElig":"\u0152",
+ "oelig":"\u0153",
+ "ofcir":"\u29BF",
+ "Ofr":"\uD835\uDD12",
+ "ofr":"\uD835\uDD2C",
+ "ogon":"\u02DB",
+ "Ograve":"\u00D2",
+ "ograve":"\u00F2",
+ "ogt":"\u29C1",
+ "ohbar":"\u29B5",
+ "ohm":"\u03A9",
+ "oint":"\u222E",
+ "olarr":"\u21BA",
+ "olcir":"\u29BE",
+ "olcross":"\u29BB",
+ "oline":"\u203E",
+ "olt":"\u29C0",
+ "Omacr":"\u014C",
+ "omacr":"\u014D",
+ "Omega":"\u03A9",
+ "omega":"\u03C9",
+ "Omicron":"\u039F",
+ "omicron":"\u03BF",
+ "omid":"\u29B6",
+ "ominus":"\u2296",
+ "Oopf":"\uD835\uDD46",
+ "oopf":"\uD835\uDD60",
+ "opar":"\u29B7",
+ "OpenCurlyDoubleQuote":"\u201C",
+ "OpenCurlyQuote":"\u2018",
+ "operp":"\u29B9",
+ "oplus":"\u2295",
+ "Or":"\u2A54",
+ "or":"\u2228",
+ "orarr":"\u21BB",
+ "ord":"\u2A5D",
+ "order":"\u2134",
+ "orderof":"\u2134",
+ "ordf":"\u00AA",
+ "ordm":"\u00BA",
+ "origof":"\u22B6",
+ "oror":"\u2A56",
+ "orslope":"\u2A57",
+ "orv":"\u2A5B",
+ "oS":"\u24C8",
+ "Oscr":"\uD835\uDCAA",
+ "oscr":"\u2134",
+ "Oslash":"\u00D8",
+ "oslash":"\u00F8",
+ "osol":"\u2298",
+ "Otilde":"\u00D5",
+ "otilde":"\u00F5",
+ "Otimes":"\u2A37",
+ "otimes":"\u2297",
+ "otimesas":"\u2A36",
+ "Ouml":"\u00D6",
+ "ouml":"\u00F6",
+ "ovbar":"\u233D",
+ "OverBar":"\u203E",
+ "OverBrace":"\u23DE",
+ "OverBracket":"\u23B4",
+ "OverParenthesis":"\u23DC",
+ "par":"\u2225",
+ "para":"\u00B6",
+ "parallel":"\u2225",
+ "parsim":"\u2AF3",
+ "parsl":"\u2AFD",
+ "part":"\u2202",
+ "PartialD":"\u2202",
+ "Pcy":"\u041F",
+ "pcy":"\u043F",
+ "percnt":"\u0025",
+ "period":"\u002E",
+ "permil":"\u2030",
+ "perp":"\u22A5",
+ "pertenk":"\u2031",
+ "Pfr":"\uD835\uDD13",
+ "pfr":"\uD835\uDD2D",
+ "Phi":"\u03A6",
+ "phi":"\u03C6",
+ "phiv":"\u03D5",
+ "phmmat":"\u2133",
+ "phone":"\u260E",
+ "Pi":"\u03A0",
+ "pi":"\u03C0",
+ "pitchfork":"\u22D4",
+ "piv":"\u03D6",
+ "planck":"\u210F",
+ "planckh":"\u210E",
+ "plankv":"\u210F",
+ "plus":"\u002B",
+ "plusacir":"\u2A23",
+ "plusb":"\u229E",
+ "pluscir":"\u2A22",
+ "plusdo":"\u2214",
+ "plusdu":"\u2A25",
+ "pluse":"\u2A72",
+ "PlusMinus":"\u00B1",
+ "plusmn":"\u00B1",
+ "plussim":"\u2A26",
+ "plustwo":"\u2A27",
+ "pm":"\u00B1",
+ "Poincareplane":"\u210C",
+ "pointint":"\u2A15",
+ "Popf":"\u2119",
+ "popf":"\uD835\uDD61",
+ "pound":"\u00A3",
+ "Pr":"\u2ABB",
+ "pr":"\u227A",
+ "prap":"\u2AB7",
+ "prcue":"\u227C",
+ "prE":"\u2AB3",
+ "pre":"\u2AAF",
+ "prec":"\u227A",
+ "precapprox":"\u2AB7",
+ "preccurlyeq":"\u227C",
+ "Precedes":"\u227A",
+ "PrecedesEqual":"\u2AAF",
+ "PrecedesSlantEqual":"\u227C",
+ "PrecedesTilde":"\u227E",
+ "preceq":"\u2AAF",
+ "precnapprox":"\u2AB9",
+ "precneqq":"\u2AB5",
+ "precnsim":"\u22E8",
+ "precsim":"\u227E",
+ "Prime":"\u2033",
+ "prime":"\u2032",
+ "primes":"\u2119",
+ "prnap":"\u2AB9",
+ "prnE":"\u2AB5",
+ "prnsim":"\u22E8",
+ "prod":"\u220F",
+ "Product":"\u220F",
+ "profalar":"\u232E",
+ "profline":"\u2312",
+ "profsurf":"\u2313",
+ "prop":"\u221D",
+ "Proportion":"\u2237",
+ "Proportional":"\u221D",
+ "propto":"\u221D",
+ "prsim":"\u227E",
+ "prurel":"\u22B0",
+ "Pscr":"\uD835\uDCAB",
+ "pscr":"\uD835\uDCC5",
+ "Psi":"\u03A8",
+ "psi":"\u03C8",
+ "puncsp":"\u2008",
+ "Qfr":"\uD835\uDD14",
+ "qfr":"\uD835\uDD2E",
+ "qint":"\u2A0C",
+ "Qopf":"\u211A",
+ "qopf":"\uD835\uDD62",
+ "qprime":"\u2057",
+ "Qscr":"\uD835\uDCAC",
+ "qscr":"\uD835\uDCC6",
+ "quaternions":"\u210D",
+ "quatint":"\u2A16",
+ "quest":"\u003F",
+ "questeq":"\u225F",
+ "QUOT":"\u0022",
+ "quot":"\u0022",
+ "rAarr":"\u21DB",
+ "race":"\u223D\u0331",
+ "Racute":"\u0154",
+ "racute":"\u0155",
+ "radic":"\u221A",
+ "raemptyv":"\u29B3",
+ "Rang":"\u27EB",
+ "rang":"\u27E9",
+ "rangd":"\u2992",
+ "range":"\u29A5",
+ "rangle":"\u27E9",
+ "raquo":"\u00BB",
+ "Rarr":"\u21A0",
+ "rArr":"\u21D2",
+ "rarr":"\u2192",
+ "rarrap":"\u2975",
+ "rarrb":"\u21E5",
+ "rarrbfs":"\u2920",
+ "rarrc":"\u2933",
+ "rarrfs":"\u291E",
+ "rarrhk":"\u21AA",
+ "rarrlp":"\u21AC",
+ "rarrpl":"\u2945",
+ "rarrsim":"\u2974",
+ "Rarrtl":"\u2916",
+ "rarrtl":"\u21A3",
+ "rarrw":"\u219D",
+ "rAtail":"\u291C",
+ "ratail":"\u291A",
+ "ratio":"\u2236",
+ "rationals":"\u211A",
+ "RBarr":"\u2910",
+ "rBarr":"\u290F",
+ "rbarr":"\u290D",
+ "rbbrk":"\u2773",
+ "rbrace":"\u007D",
+ "rbrack":"\u005D",
+ "rbrke":"\u298C",
+ "rbrksld":"\u298E",
+ "rbrkslu":"\u2990",
+ "Rcaron":"\u0158",
+ "rcaron":"\u0159",
+ "Rcedil":"\u0156",
+ "rcedil":"\u0157",
+ "rceil":"\u2309",
+ "rcub":"\u007D",
+ "Rcy":"\u0420",
+ "rcy":"\u0440",
+ "rdca":"\u2937",
+ "rdldhar":"\u2969",
+ "rdquo":"\u201D",
+ "rdquor":"\u201D",
+ "rdsh":"\u21B3",
+ "Re":"\u211C",
+ "real":"\u211C",
+ "realine":"\u211B",
+ "realpart":"\u211C",
+ "reals":"\u211D",
+ "rect":"\u25AD",
+ "REG":"\u00AE",
+ "reg":"\u00AE",
+ "ReverseElement":"\u220B",
+ "ReverseEquilibrium":"\u21CB",
+ "ReverseUpEquilibrium":"\u296F",
+ "rfisht":"\u297D",
+ "rfloor":"\u230B",
+ "Rfr":"\u211C",
+ "rfr":"\uD835\uDD2F",
+ "rHar":"\u2964",
+ "rhard":"\u21C1",
+ "rharu":"\u21C0",
+ "rharul":"\u296C",
+ "Rho":"\u03A1",
+ "rho":"\u03C1",
+ "rhov":"\u03F1",
+ "RightAngleBracket":"\u27E9",
+ "RightArrow":"\u2192",
+ "Rightarrow":"\u21D2",
+ "rightarrow":"\u2192",
+ "RightArrowBar":"\u21E5",
+ "RightArrowLeftArrow":"\u21C4",
+ "rightarrowtail":"\u21A3",
+ "RightCeiling":"\u2309",
+ "RightDoubleBracket":"\u27E7",
+ "RightDownTeeVector":"\u295D",
+ "RightDownVector":"\u21C2",
+ "RightDownVectorBar":"\u2955",
+ "RightFloor":"\u230B",
+ "rightharpoondown":"\u21C1",
+ "rightharpoonup":"\u21C0",
+ "rightleftarrows":"\u21C4",
+ "rightleftharpoons":"\u21CC",
+ "rightrightarrows":"\u21C9",
+ "rightsquigarrow":"\u219D",
+ "RightTee":"\u22A2",
+ "RightTeeArrow":"\u21A6",
+ "RightTeeVector":"\u295B",
+ "rightthreetimes":"\u22CC",
+ "RightTriangle":"\u22B3",
+ "RightTriangleBar":"\u29D0",
+ "RightTriangleEqual":"\u22B5",
+ "RightUpDownVector":"\u294F",
+ "RightUpTeeVector":"\u295C",
+ "RightUpVector":"\u21BE",
+ "RightUpVectorBar":"\u2954",
+ "RightVector":"\u21C0",
+ "RightVectorBar":"\u2953",
+ "ring":"\u02DA",
+ "risingdotseq":"\u2253",
+ "rlarr":"\u21C4",
+ "rlhar":"\u21CC",
+ "rlm":"\u200F",
+ "rmoust":"\u23B1",
+ "rmoustache":"\u23B1",
+ "rnmid":"\u2AEE",
+ "roang":"\u27ED",
+ "roarr":"\u21FE",
+ "robrk":"\u27E7",
+ "ropar":"\u2986",
+ "Ropf":"\u211D",
+ "ropf":"\uD835\uDD63",
+ "roplus":"\u2A2E",
+ "rotimes":"\u2A35",
+ "RoundImplies":"\u2970",
+ "rpar":"\u0029",
+ "rpargt":"\u2994",
+ "rppolint":"\u2A12",
+ "rrarr":"\u21C9",
+ "Rrightarrow":"\u21DB",
+ "rsaquo":"\u203A",
+ "Rscr":"\u211B",
+ "rscr":"\uD835\uDCC7",
+ "Rsh":"\u21B1",
+ "rsh":"\u21B1",
+ "rsqb":"\u005D",
+ "rsquo":"\u2019",
+ "rsquor":"\u2019",
+ "rthree":"\u22CC",
+ "rtimes":"\u22CA",
+ "rtri":"\u25B9",
+ "rtrie":"\u22B5",
+ "rtrif":"\u25B8",
+ "rtriltri":"\u29CE",
+ "RuleDelayed":"\u29F4",
+ "ruluhar":"\u2968",
+ "rx":"\u211E",
+ "Sacute":"\u015A",
+ "sacute":"\u015B",
+ "sbquo":"\u201A",
+ "Sc":"\u2ABC",
+ "sc":"\u227B",
+ "scap":"\u2AB8",
+ "Scaron":"\u0160",
+ "scaron":"\u0161",
+ "sccue":"\u227D",
+ "scE":"\u2AB4",
+ "sce":"\u2AB0",
+ "Scedil":"\u015E",
+ "scedil":"\u015F",
+ "Scirc":"\u015C",
+ "scirc":"\u015D",
+ "scnap":"\u2ABA",
+ "scnE":"\u2AB6",
+ "scnsim":"\u22E9",
+ "scpolint":"\u2A13",
+ "scsim":"\u227F",
+ "Scy":"\u0421",
+ "scy":"\u0441",
+ "sdot":"\u22C5",
+ "sdotb":"\u22A1",
+ "sdote":"\u2A66",
+ "searhk":"\u2925",
+ "seArr":"\u21D8",
+ "searr":"\u2198",
+ "searrow":"\u2198",
+ "sect":"\u00A7",
+ "semi":"\u003B",
+ "seswar":"\u2929",
+ "setminus":"\u2216",
+ "setmn":"\u2216",
+ "sext":"\u2736",
+ "Sfr":"\uD835\uDD16",
+ "sfr":"\uD835\uDD30",
+ "sfrown":"\u2322",
+ "sharp":"\u266F",
+ "SHCHcy":"\u0429",
+ "shchcy":"\u0449",
+ "SHcy":"\u0428",
+ "shcy":"\u0448",
+ "ShortDownArrow":"\u2193",
+ "ShortLeftArrow":"\u2190",
+ "shortmid":"\u2223",
+ "shortparallel":"\u2225",
+ "ShortRightArrow":"\u2192",
+ "ShortUpArrow":"\u2191",
+ "shy":"\u00AD",
+ "Sigma":"\u03A3",
+ "sigma":"\u03C3",
+ "sigmaf":"\u03C2",
+ "sigmav":"\u03C2",
+ "sim":"\u223C",
+ "simdot":"\u2A6A",
+ "sime":"\u2243",
+ "simeq":"\u2243",
+ "simg":"\u2A9E",
+ "simgE":"\u2AA0",
+ "siml":"\u2A9D",
+ "simlE":"\u2A9F",
+ "simne":"\u2246",
+ "simplus":"\u2A24",
+ "simrarr":"\u2972",
+ "slarr":"\u2190",
+ "SmallCircle":"\u2218",
+ "smallsetminus":"\u2216",
+ "smashp":"\u2A33",
+ "smeparsl":"\u29E4",
+ "smid":"\u2223",
+ "smile":"\u2323",
+ "smt":"\u2AAA",
+ "smte":"\u2AAC",
+ "smtes":"\u2AAC\uFE00",
+ "SOFTcy":"\u042C",
+ "softcy":"\u044C",
+ "sol":"\u002F",
+ "solb":"\u29C4",
+ "solbar":"\u233F",
+ "Sopf":"\uD835\uDD4A",
+ "sopf":"\uD835\uDD64",
+ "spades":"\u2660",
+ "spadesuit":"\u2660",
+ "spar":"\u2225",
+ "sqcap":"\u2293",
+ "sqcaps":"\u2293\uFE00",
+ "sqcup":"\u2294",
+ "sqcups":"\u2294\uFE00",
+ "Sqrt":"\u221A",
+ "sqsub":"\u228F",
+ "sqsube":"\u2291",
+ "sqsubset":"\u228F",
+ "sqsubseteq":"\u2291",
+ "sqsup":"\u2290",
+ "sqsupe":"\u2292",
+ "sqsupset":"\u2290",
+ "sqsupseteq":"\u2292",
+ "squ":"\u25A1",
+ "Square":"\u25A1",
+ "square":"\u25A1",
+ "SquareIntersection":"\u2293",
+ "SquareSubset":"\u228F",
+ "SquareSubsetEqual":"\u2291",
+ "SquareSuperset":"\u2290",
+ "SquareSupersetEqual":"\u2292",
+ "SquareUnion":"\u2294",
+ "squarf":"\u25AA",
+ "squf":"\u25AA",
+ "srarr":"\u2192",
+ "Sscr":"\uD835\uDCAE",
+ "sscr":"\uD835\uDCC8",
+ "ssetmn":"\u2216",
+ "ssmile":"\u2323",
+ "sstarf":"\u22C6",
+ "Star":"\u22C6",
+ "star":"\u2606",
+ "starf":"\u2605",
+ "straightepsilon":"\u03F5",
+ "straightphi":"\u03D5",
+ "strns":"\u00AF",
+ "Sub":"\u22D0",
+ "sub":"\u2282",
+ "subdot":"\u2ABD",
+ "subE":"\u2AC5",
+ "sube":"\u2286",
+ "subedot":"\u2AC3",
+ "submult":"\u2AC1",
+ "subnE":"\u2ACB",
+ "subne":"\u228A",
+ "subplus":"\u2ABF",
+ "subrarr":"\u2979",
+ "Subset":"\u22D0",
+ "subset":"\u2282",
+ "subseteq":"\u2286",
+ "subseteqq":"\u2AC5",
+ "SubsetEqual":"\u2286",
+ "subsetneq":"\u228A",
+ "subsetneqq":"\u2ACB",
+ "subsim":"\u2AC7",
+ "subsub":"\u2AD5",
+ "subsup":"\u2AD3",
+ "succ":"\u227B",
+ "succapprox":"\u2AB8",
+ "succcurlyeq":"\u227D",
+ "Succeeds":"\u227B",
+ "SucceedsEqual":"\u2AB0",
+ "SucceedsSlantEqual":"\u227D",
+ "SucceedsTilde":"\u227F",
+ "succeq":"\u2AB0",
+ "succnapprox":"\u2ABA",
+ "succneqq":"\u2AB6",
+ "succnsim":"\u22E9",
+ "succsim":"\u227F",
+ "SuchThat":"\u220B",
+ "Sum":"\u2211",
+ "sum":"\u2211",
+ "sung":"\u266A",
+ "Sup":"\u22D1",
+ "sup":"\u2283",
+ "sup1":"\u00B9",
+ "sup2":"\u00B2",
+ "sup3":"\u00B3",
+ "supdot":"\u2ABE",
+ "supdsub":"\u2AD8",
+ "supE":"\u2AC6",
+ "supe":"\u2287",
+ "supedot":"\u2AC4",
+ "Superset":"\u2283",
+ "SupersetEqual":"\u2287",
+ "suphsol":"\u27C9",
+ "suphsub":"\u2AD7",
+ "suplarr":"\u297B",
+ "supmult":"\u2AC2",
+ "supnE":"\u2ACC",
+ "supne":"\u228B",
+ "supplus":"\u2AC0",
+ "Supset":"\u22D1",
+ "supset":"\u2283",
+ "supseteq":"\u2287",
+ "supseteqq":"\u2AC6",
+ "supsetneq":"\u228B",
+ "supsetneqq":"\u2ACC",
+ "supsim":"\u2AC8",
+ "supsub":"\u2AD4",
+ "supsup":"\u2AD6",
+ "swarhk":"\u2926",
+ "swArr":"\u21D9",
+ "swarr":"\u2199",
+ "swarrow":"\u2199",
+ "swnwar":"\u292A",
+ "szlig":"\u00DF",
+ "Tab":"\u0009",
+ "target":"\u2316",
+ "Tau":"\u03A4",
+ "tau":"\u03C4",
+ "tbrk":"\u23B4",
+ "Tcaron":"\u0164",
+ "tcaron":"\u0165",
+ "Tcedil":"\u0162",
+ "tcedil":"\u0163",
+ "Tcy":"\u0422",
+ "tcy":"\u0442",
+ "tdot":"\u20DB",
+ "telrec":"\u2315",
+ "Tfr":"\uD835\uDD17",
+ "tfr":"\uD835\uDD31",
+ "there4":"\u2234",
+ "Therefore":"\u2234",
+ "therefore":"\u2234",
+ "Theta":"\u0398",
+ "theta":"\u03B8",
+ "thetasym":"\u03D1",
+ "thetav":"\u03D1",
+ "thickapprox":"\u2248",
+ "thicksim":"\u223C",
+ "ThickSpace":"\u205F\u200A",
+ "thinsp":"\u2009",
+ "ThinSpace":"\u2009",
+ "thkap":"\u2248",
+ "thksim":"\u223C",
+ "THORN":"\u00DE",
+ "thorn":"\u00FE",
+ "Tilde":"\u223C",
+ "tilde":"\u02DC",
+ "TildeEqual":"\u2243",
+ "TildeFullEqual":"\u2245",
+ "TildeTilde":"\u2248",
+ "times":"\u00D7",
+ "timesb":"\u22A0",
+ "timesbar":"\u2A31",
+ "timesd":"\u2A30",
+ "tint":"\u222D",
+ "toea":"\u2928",
+ "top":"\u22A4",
+ "topbot":"\u2336",
+ "topcir":"\u2AF1",
+ "Topf":"\uD835\uDD4B",
+ "topf":"\uD835\uDD65",
+ "topfork":"\u2ADA",
+ "tosa":"\u2929",
+ "tprime":"\u2034",
+ "TRADE":"\u2122",
+ "trade":"\u2122",
+ "triangle":"\u25B5",
+ "triangledown":"\u25BF",
+ "triangleleft":"\u25C3",
+ "trianglelefteq":"\u22B4",
+ "triangleq":"\u225C",
+ "triangleright":"\u25B9",
+ "trianglerighteq":"\u22B5",
+ "tridot":"\u25EC",
+ "trie":"\u225C",
+ "triminus":"\u2A3A",
+ "TripleDot":"\u20DB",
+ "triplus":"\u2A39",
+ "trisb":"\u29CD",
+ "tritime":"\u2A3B",
+ "trpezium":"\u23E2",
+ "Tscr":"\uD835\uDCAF",
+ "tscr":"\uD835\uDCC9",
+ "TScy":"\u0426",
+ "tscy":"\u0446",
+ "TSHcy":"\u040B",
+ "tshcy":"\u045B",
+ "Tstrok":"\u0166",
+ "tstrok":"\u0167",
+ "twixt":"\u226C",
+ "twoheadleftarrow":"\u219E",
+ "twoheadrightarrow":"\u21A0",
+ "Uacute":"\u00DA",
+ "uacute":"\u00FA",
+ "Uarr":"\u219F",
+ "uArr":"\u21D1",
+ "uarr":"\u2191",
+ "Uarrocir":"\u2949",
+ "Ubrcy":"\u040E",
+ "ubrcy":"\u045E",
+ "Ubreve":"\u016C",
+ "ubreve":"\u016D",
+ "Ucirc":"\u00DB",
+ "ucirc":"\u00FB",
+ "Ucy":"\u0423",
+ "ucy":"\u0443",
+ "udarr":"\u21C5",
+ "Udblac":"\u0170",
+ "udblac":"\u0171",
+ "udhar":"\u296E",
+ "ufisht":"\u297E",
+ "Ufr":"\uD835\uDD18",
+ "ufr":"\uD835\uDD32",
+ "Ugrave":"\u00D9",
+ "ugrave":"\u00F9",
+ "uHar":"\u2963",
+ "uharl":"\u21BF",
+ "uharr":"\u21BE",
+ "uhblk":"\u2580",
+ "ulcorn":"\u231C",
+ "ulcorner":"\u231C",
+ "ulcrop":"\u230F",
+ "ultri":"\u25F8",
+ "Umacr":"\u016A",
+ "umacr":"\u016B",
+ "uml":"\u00A8",
+ "UnderBar":"\u005F",
+ "UnderBrace":"\u23DF",
+ "UnderBracket":"\u23B5",
+ "UnderParenthesis":"\u23DD",
+ "Union":"\u22C3",
+ "UnionPlus":"\u228E",
+ "Uogon":"\u0172",
+ "uogon":"\u0173",
+ "Uopf":"\uD835\uDD4C",
+ "uopf":"\uD835\uDD66",
+ "UpArrow":"\u2191",
+ "Uparrow":"\u21D1",
+ "uparrow":"\u2191",
+ "UpArrowBar":"\u2912",
+ "UpArrowDownArrow":"\u21C5",
+ "UpDownArrow":"\u2195",
+ "Updownarrow":"\u21D5",
+ "updownarrow":"\u2195",
+ "UpEquilibrium":"\u296E",
+ "upharpoonleft":"\u21BF",
+ "upharpoonright":"\u21BE",
+ "uplus":"\u228E",
+ "UpperLeftArrow":"\u2196",
+ "UpperRightArrow":"\u2197",
+ "Upsi":"\u03D2",
+ "upsi":"\u03C5",
+ "upsih":"\u03D2",
+ "Upsilon":"\u03A5",
+ "upsilon":"\u03C5",
+ "UpTee":"\u22A5",
+ "UpTeeArrow":"\u21A5",
+ "upuparrows":"\u21C8",
+ "urcorn":"\u231D",
+ "urcorner":"\u231D",
+ "urcrop":"\u230E",
+ "Uring":"\u016E",
+ "uring":"\u016F",
+ "urtri":"\u25F9",
+ "Uscr":"\uD835\uDCB0",
+ "uscr":"\uD835\uDCCA",
+ "utdot":"\u22F0",
+ "Utilde":"\u0168",
+ "utilde":"\u0169",
+ "utri":"\u25B5",
+ "utrif":"\u25B4",
+ "uuarr":"\u21C8",
+ "Uuml":"\u00DC",
+ "uuml":"\u00FC",
+ "uwangle":"\u29A7",
+ "vangrt":"\u299C",
+ "varepsilon":"\u03F5",
+ "varkappa":"\u03F0",
+ "varnothing":"\u2205",
+ "varphi":"\u03D5",
+ "varpi":"\u03D6",
+ "varpropto":"\u221D",
+ "vArr":"\u21D5",
+ "varr":"\u2195",
+ "varrho":"\u03F1",
+ "varsigma":"\u03C2",
+ "varsubsetneq":"\u228A\uFE00",
+ "varsubsetneqq":"\u2ACB\uFE00",
+ "varsupsetneq":"\u228B\uFE00",
+ "varsupsetneqq":"\u2ACC\uFE00",
+ "vartheta":"\u03D1",
+ "vartriangleleft":"\u22B2",
+ "vartriangleright":"\u22B3",
+ "Vbar":"\u2AEB",
+ "vBar":"\u2AE8",
+ "vBarv":"\u2AE9",
+ "Vcy":"\u0412",
+ "vcy":"\u0432",
+ "VDash":"\u22AB",
+ "Vdash":"\u22A9",
+ "vDash":"\u22A8",
+ "vdash":"\u22A2",
+ "Vdashl":"\u2AE6",
+ "Vee":"\u22C1",
+ "vee":"\u2228",
+ "veebar":"\u22BB",
+ "veeeq":"\u225A",
+ "vellip":"\u22EE",
+ "Verbar":"\u2016",
+ "verbar":"\u007C",
+ "Vert":"\u2016",
+ "vert":"\u007C",
+ "VerticalBar":"\u2223",
+ "VerticalLine":"\u007C",
+ "VerticalSeparator":"\u2758",
+ "VerticalTilde":"\u2240",
+ "VeryThinSpace":"\u200A",
+ "Vfr":"\uD835\uDD19",
+ "vfr":"\uD835\uDD33",
+ "vltri":"\u22B2",
+ "vnsub":"\u2282\u20D2",
+ "vnsup":"\u2283\u20D2",
+ "Vopf":"\uD835\uDD4D",
+ "vopf":"\uD835\uDD67",
+ "vprop":"\u221D",
+ "vrtri":"\u22B3",
+ "Vscr":"\uD835\uDCB1",
+ "vscr":"\uD835\uDCCB",
+ "vsubnE":"\u2ACB\uFE00",
+ "vsubne":"\u228A\uFE00",
+ "vsupnE":"\u2ACC\uFE00",
+ "vsupne":"\u228B\uFE00",
+ "Vvdash":"\u22AA",
+ "vzigzag":"\u299A",
+ "Wcirc":"\u0174",
+ "wcirc":"\u0175",
+ "wedbar":"\u2A5F",
+ "Wedge":"\u22C0",
+ "wedge":"\u2227",
+ "wedgeq":"\u2259",
+ "weierp":"\u2118",
+ "Wfr":"\uD835\uDD1A",
+ "wfr":"\uD835\uDD34",
+ "Wopf":"\uD835\uDD4E",
+ "wopf":"\uD835\uDD68",
+ "wp":"\u2118",
+ "wr":"\u2240",
+ "wreath":"\u2240",
+ "Wscr":"\uD835\uDCB2",
+ "wscr":"\uD835\uDCCC",
+ "xcap":"\u22C2",
+ "xcirc":"\u25EF",
+ "xcup":"\u22C3",
+ "xdtri":"\u25BD",
+ "Xfr":"\uD835\uDD1B",
+ "xfr":"\uD835\uDD35",
+ "xhArr":"\u27FA",
+ "xharr":"\u27F7",
+ "Xi":"\u039E",
+ "xi":"\u03BE",
+ "xlArr":"\u27F8",
+ "xlarr":"\u27F5",
+ "xmap":"\u27FC",
+ "xnis":"\u22FB",
+ "xodot":"\u2A00",
+ "Xopf":"\uD835\uDD4F",
+ "xopf":"\uD835\uDD69",
+ "xoplus":"\u2A01",
+ "xotime":"\u2A02",
+ "xrArr":"\u27F9",
+ "xrarr":"\u27F6",
+ "Xscr":"\uD835\uDCB3",
+ "xscr":"\uD835\uDCCD",
+ "xsqcup":"\u2A06",
+ "xuplus":"\u2A04",
+ "xutri":"\u25B3",
+ "xvee":"\u22C1",
+ "xwedge":"\u22C0",
+ "Yacute":"\u00DD",
+ "yacute":"\u00FD",
+ "YAcy":"\u042F",
+ "yacy":"\u044F",
+ "Ycirc":"\u0176",
+ "ycirc":"\u0177",
+ "Ycy":"\u042B",
+ "ycy":"\u044B",
+ "yen":"\u00A5",
+ "Yfr":"\uD835\uDD1C",
+ "yfr":"\uD835\uDD36",
+ "YIcy":"\u0407",
+ "yicy":"\u0457",
+ "Yopf":"\uD835\uDD50",
+ "yopf":"\uD835\uDD6A",
+ "Yscr":"\uD835\uDCB4",
+ "yscr":"\uD835\uDCCE",
+ "YUcy":"\u042E",
+ "yucy":"\u044E",
+ "Yuml":"\u0178",
+ "yuml":"\u00FF",
+ "Zacute":"\u0179",
+ "zacute":"\u017A",
+ "Zcaron":"\u017D",
+ "zcaron":"\u017E",
+ "Zcy":"\u0417",
+ "zcy":"\u0437",
+ "Zdot":"\u017B",
+ "zdot":"\u017C",
+ "zeetrf":"\u2128",
+ "ZeroWidthSpace":"\u200B",
+ "Zeta":"\u0396",
+ "zeta":"\u03B6",
+ "Zfr":"\u2128",
+ "zfr":"\uD835\uDD37",
+ "ZHcy":"\u0416",
+ "zhcy":"\u0436",
+ "zigrarr":"\u21DD",
+ "Zopf":"\u2124",
+ "zopf":"\uD835\uDD6B",
+ "Zscr":"\uD835\uDCB5",
+ "zscr":"\uD835\uDCCF",
+ "zwj":"\u200D",
+ "zwnj":"\u200C"
+};
+
+var hasOwn = Object.prototype.hasOwnProperty;
+
+function has(object, key) {
+ return object
+ ? hasOwn.call(object, key)
+ : false;
+}
+
+function decodeEntity(name) {
+ if (has(entities, name)) {
+ return entities[name]
+ } else {
+ return name;
+ }
+}
+
+/**
+ * Utility functions
+ */
+
+function typeOf(obj) {
+ return Object.prototype.toString.call(obj);
+}
+
+function isString(obj) {
+ return typeOf(obj) === '[object String]';
+}
+
+var hasOwn$1 = Object.prototype.hasOwnProperty;
+
+function has$1(object, key) {
+ return object
+ ? hasOwn$1.call(object, key)
+ : false;
+}
+
+// Extend objects
+//
+function assign(obj /*from1, from2, from3, ...*/) {
+ var sources = [].slice.call(arguments, 1);
+
+ sources.forEach(function (source) {
+ if (!source) { return; }
+
+ if (typeof source !== 'object') {
+ throw new TypeError(source + 'must be object');
+ }
+
+ Object.keys(source).forEach(function (key) {
+ obj[key] = source[key];
+ });
+ });
+
+ return obj;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+
+var UNESCAPE_MD_RE = /\\([\\!"#$%&'()*+,.\/:;<=>?@[\]^_`{|}~-])/g;
+
+function unescapeMd(str) {
+ if (str.indexOf('\\') < 0) { return str; }
+ return str.replace(UNESCAPE_MD_RE, '$1');
+}
+
+////////////////////////////////////////////////////////////////////////////////
+
+function isValidEntityCode(c) {
+ /*eslint no-bitwise:0*/
+ // broken sequence
+ if (c >= 0xD800 && c <= 0xDFFF) { return false; }
+ // never used
+ if (c >= 0xFDD0 && c <= 0xFDEF) { return false; }
+ if ((c & 0xFFFF) === 0xFFFF || (c & 0xFFFF) === 0xFFFE) { return false; }
+ // control codes
+ if (c >= 0x00 && c <= 0x08) { return false; }
+ if (c === 0x0B) { return false; }
+ if (c >= 0x0E && c <= 0x1F) { return false; }
+ if (c >= 0x7F && c <= 0x9F) { return false; }
+ // out of range
+ if (c > 0x10FFFF) { return false; }
+ return true;
+}
+
+function fromCodePoint(c) {
+ /*eslint no-bitwise:0*/
+ if (c > 0xffff) {
+ c -= 0x10000;
+ var surrogate1 = 0xd800 + (c >> 10),
+ surrogate2 = 0xdc00 + (c & 0x3ff);
+
+ return String.fromCharCode(surrogate1, surrogate2);
+ }
+ return String.fromCharCode(c);
+}
+
+var NAMED_ENTITY_RE = /&([a-z#][a-z0-9]{1,31});/gi;
+var DIGITAL_ENTITY_TEST_RE = /^#((?:x[a-f0-9]{1,8}|[0-9]{1,8}))/i;
+
+function replaceEntityPattern(match, name) {
+ var code = 0;
+ var decoded = decodeEntity(name);
+
+ if (name !== decoded) {
+ return decoded;
+ } else if (name.charCodeAt(0) === 0x23/* # */ && DIGITAL_ENTITY_TEST_RE.test(name)) {
+ code = name[1].toLowerCase() === 'x' ?
+ parseInt(name.slice(2), 16)
+ :
+ parseInt(name.slice(1), 10);
+ if (isValidEntityCode(code)) {
+ return fromCodePoint(code);
+ }
+ }
+ return match;
+}
+
+function replaceEntities(str) {
+ if (str.indexOf('&') < 0) { return str; }
+
+ return str.replace(NAMED_ENTITY_RE, replaceEntityPattern);
+}
+
+////////////////////////////////////////////////////////////////////////////////
+
+var HTML_ESCAPE_TEST_RE = /[&<>"]/;
+var HTML_ESCAPE_REPLACE_RE = /[&<>"]/g;
+var HTML_REPLACEMENTS = {
+ '&': '&',
+ '<': '<',
+ '>': '>',
+ '"': '"'
+};
+
+function replaceUnsafeChar(ch) {
+ return HTML_REPLACEMENTS[ch];
+}
+
+function escapeHtml(str) {
+ if (HTML_ESCAPE_TEST_RE.test(str)) {
+ return str.replace(HTML_ESCAPE_REPLACE_RE, replaceUnsafeChar);
+ }
+ return str;
+}
+
+var utils = /*#__PURE__*/Object.freeze({
+ isString: isString,
+ has: has$1,
+ assign: assign,
+ unescapeMd: unescapeMd,
+ isValidEntityCode: isValidEntityCode,
+ fromCodePoint: fromCodePoint,
+ replaceEntities: replaceEntities,
+ escapeHtml: escapeHtml
+});
+
+/**
+ * Renderer rules cache
+ */
+
+var rules = {};
+
+/**
+ * Blockquotes
+ */
+
+rules.blockquote_open = function(/* tokens, idx, options, env */) {
+ return '\n';
+};
+
+rules.blockquote_close = function(tokens, idx /*, options, env */) {
+ return '
' + getBreak(tokens, idx);
+};
+
+/**
+ * Code
+ */
+
+rules.code = function(tokens, idx /*, options, env */) {
+ if (tokens[idx].block) {
+ return '' + escapeHtml(tokens[idx].content) + '
' + getBreak(tokens, idx);
+ }
+ return '' + escapeHtml(tokens[idx].content) + '
';
+};
+
+/**
+ * Fenced code blocks
+ */
+
+rules.fence = function(tokens, idx, options, env, instance) {
+ var token = tokens[idx];
+ var langClass = '';
+ var langPrefix = options.langPrefix;
+ var langName = '', fences, fenceName;
+ var highlighted;
+
+ if (token.params) {
+
+ //
+ // ```foo bar
+ //
+ // Try custom renderer "foo" first. That will simplify overwrite
+ // for diagrams, latex, and any other fenced block with custom look
+ //
+
+ fences = token.params.split(/\s+/g);
+ fenceName = fences.join(' ');
+
+ if (has$1(instance.rules.fence_custom, fences[0])) {
+ return instance.rules.fence_custom[fences[0]](tokens, idx, options, env, instance);
+ }
+
+ langName = escapeHtml(replaceEntities(unescapeMd(fenceName)));
+ langClass = ' class="' + langPrefix + langName + '"';
+ }
+
+ if (options.highlight) {
+ highlighted = options.highlight.apply(options.highlight, [ token.content ].concat(fences))
+ || escapeHtml(token.content);
+ } else {
+ highlighted = escapeHtml(token.content);
+ }
+
+ return ''
+ + highlighted
+ + '
'
+ + getBreak(tokens, idx);
+};
+
+rules.fence_custom = {};
+
+/**
+ * Headings
+ */
+
+rules.heading_open = function(tokens, idx /*, options, env */) {
+ return '';
+};
+rules.heading_close = function(tokens, idx /*, options, env */) {
+ return '\n';
+};
+
+/**
+ * Horizontal rules
+ */
+
+rules.hr = function(tokens, idx, options /*, env */) {
+ return (options.xhtmlOut ? '
' : '
') + getBreak(tokens, idx);
+};
+
+/**
+ * Bullets
+ */
+
+rules.bullet_list_open = function(/* tokens, idx, options, env */) {
+ return '\n';
+};
+rules.bullet_list_close = function(tokens, idx /*, options, env */) {
+ return '
' + getBreak(tokens, idx);
+};
+
+/**
+ * List items
+ */
+
+rules.list_item_open = function(/* tokens, idx, options, env */) {
+ return '';
+};
+rules.list_item_close = function(/* tokens, idx, options, env */) {
+ return '\n';
+};
+
+/**
+ * Ordered list items
+ */
+
+rules.ordered_list_open = function(tokens, idx /*, options, env */) {
+ var token = tokens[idx];
+ var order = token.order > 1 ? ' start="' + token.order + '"' : '';
+ return '\n';
+};
+rules.ordered_list_close = function(tokens, idx /*, options, env */) {
+ return '
' + getBreak(tokens, idx);
+};
+
+/**
+ * Paragraphs
+ */
+
+rules.paragraph_open = function(tokens, idx /*, options, env */) {
+ return tokens[idx].tight ? '' : '';
+};
+rules.paragraph_close = function(tokens, idx /*, options, env */) {
+ var addBreak = !(tokens[idx].tight && idx && tokens[idx - 1].type === 'inline' && !tokens[idx - 1].content);
+ return (tokens[idx].tight ? '' : '
') + (addBreak ? getBreak(tokens, idx) : '');
+};
+
+/**
+ * Links
+ */
+
+rules.link_open = function(tokens, idx, options /* env */) {
+ var title = tokens[idx].title ? (' title="' + escapeHtml(replaceEntities(tokens[idx].title)) + '"') : '';
+ var target = options.linkTarget ? (' target="' + options.linkTarget + '"') : '';
+ return '';
+};
+rules.link_close = function(/* tokens, idx, options, env */) {
+ return '';
+};
+
+/**
+ * Images
+ */
+
+rules.image = function(tokens, idx, options /*, env */) {
+ var src = ' src="' + escapeHtml(tokens[idx].src) + '"';
+ var title = tokens[idx].title ? (' title="' + escapeHtml(replaceEntities(tokens[idx].title)) + '"') : '';
+ var alt = ' alt="' + (tokens[idx].alt ? escapeHtml(replaceEntities(unescapeMd(tokens[idx].alt))) : '') + '"';
+ var suffix = options.xhtmlOut ? ' /' : '';
+ return '';
+};
+
+/**
+ * Tables
+ */
+
+rules.table_open = function(/* tokens, idx, options, env */) {
+ return '\n';
+};
+rules.table_close = function(/* tokens, idx, options, env */) {
+ return '
\n';
+};
+rules.thead_open = function(/* tokens, idx, options, env */) {
+ return '\n';
+};
+rules.thead_close = function(/* tokens, idx, options, env */) {
+ return '\n';
+};
+rules.tbody_open = function(/* tokens, idx, options, env */) {
+ return '\n';
+};
+rules.tbody_close = function(/* tokens, idx, options, env */) {
+ return '\n';
+};
+rules.tr_open = function(/* tokens, idx, options, env */) {
+ return '';
+};
+rules.tr_close = function(/* tokens, idx, options, env */) {
+ return '
\n';
+};
+rules.th_open = function(tokens, idx /*, options, env */) {
+ var token = tokens[idx];
+ return '';
+};
+rules.th_close = function(/* tokens, idx, options, env */) {
+ return ' | ';
+};
+rules.td_open = function(tokens, idx /*, options, env */) {
+ var token = tokens[idx];
+ return '';
+};
+rules.td_close = function(/* tokens, idx, options, env */) {
+ return ' | ';
+};
+
+/**
+ * Bold
+ */
+
+rules.strong_open = function(/* tokens, idx, options, env */) {
+ return '';
+};
+rules.strong_close = function(/* tokens, idx, options, env */) {
+ return '';
+};
+
+/**
+ * Italicize
+ */
+
+rules.em_open = function(/* tokens, idx, options, env */) {
+ return '';
+};
+rules.em_close = function(/* tokens, idx, options, env */) {
+ return '';
+};
+
+/**
+ * Strikethrough
+ */
+
+rules.del_open = function(/* tokens, idx, options, env */) {
+ return '';
+};
+rules.del_close = function(/* tokens, idx, options, env */) {
+ return '';
+};
+
+/**
+ * Insert
+ */
+
+rules.ins_open = function(/* tokens, idx, options, env */) {
+ return '';
+};
+rules.ins_close = function(/* tokens, idx, options, env */) {
+ return '';
+};
+
+/**
+ * Highlight
+ */
+
+rules.mark_open = function(/* tokens, idx, options, env */) {
+ return '';
+};
+rules.mark_close = function(/* tokens, idx, options, env */) {
+ return '';
+};
+
+/**
+ * Super- and sub-script
+ */
+
+rules.sub = function(tokens, idx /*, options, env */) {
+ return '' + escapeHtml(tokens[idx].content) + '';
+};
+rules.sup = function(tokens, idx /*, options, env */) {
+ return '' + escapeHtml(tokens[idx].content) + '';
+};
+
+/**
+ * Breaks
+ */
+
+rules.hardbreak = function(tokens, idx, options /*, env */) {
+ return options.xhtmlOut ? '
\n' : '
\n';
+};
+rules.softbreak = function(tokens, idx, options /*, env */) {
+ return options.breaks ? (options.xhtmlOut ? '
\n' : '
\n') : '\n';
+};
+
+/**
+ * Text
+ */
+
+rules.text = function(tokens, idx /*, options, env */) {
+ return escapeHtml(tokens[idx].content);
+};
+
+/**
+ * Content
+ */
+
+rules.htmlblock = function(tokens, idx /*, options, env */) {
+ return tokens[idx].content;
+};
+rules.htmltag = function(tokens, idx /*, options, env */) {
+ return tokens[idx].content;
+};
+
+/**
+ * Abbreviations, initialism
+ */
+
+rules.abbr_open = function(tokens, idx /*, options, env */) {
+ return '';
+};
+rules.abbr_close = function(/* tokens, idx, options, env */) {
+ return '';
+};
+
+/**
+ * Footnotes
+ */
+
+rules.footnote_ref = function(tokens, idx) {
+ var n = Number(tokens[idx].id + 1).toString();
+ var id = 'fnref' + n;
+ if (tokens[idx].subId > 0) {
+ id += ':' + tokens[idx].subId;
+ }
+ return '';
+};
+rules.footnote_block_open = function(tokens, idx, options) {
+ var hr = options.xhtmlOut
+ ? '\n'
+ : '\n';
+ return hr + '\n';
+};
+rules.footnote_open = function(tokens, idx) {
+ var id = Number(tokens[idx].id + 1).toString();
+ return '\n';
+};
+rules.footnote_anchor = function(tokens, idx) {
+ var n = Number(tokens[idx].id + 1).toString();
+ var id = 'fnref' + n;
+ if (tokens[idx].subId > 0) {
+ id += ':' + tokens[idx].subId;
+ }
+ return ' ';
+};
+
+/**
+ * Definition lists
+ */
+
+rules.dl_open = function() {
+ return '\n';
+};
+rules.dt_open = function() {
+ return '- ';
+};
+rules.dd_open = function() {
+ return '
- ';
+};
+rules.dl_close = function() {
+ return '
\n';
+};
+rules.dt_close = function() {
+ return '\n';
+};
+rules.dd_close = function() {
+ return '\n';
+};
+
+/**
+ * Helper functions
+ */
+
+function nextToken(tokens, idx) {
+ if (++idx >= tokens.length - 2) {
+ return idx;
+ }
+ if ((tokens[idx].type === 'paragraph_open' && tokens[idx].tight) &&
+ (tokens[idx + 1].type === 'inline' && tokens[idx + 1].content.length === 0) &&
+ (tokens[idx + 2].type === 'paragraph_close' && tokens[idx + 2].tight)) {
+ return nextToken(tokens, idx + 2);
+ }
+ return idx;
+}
+
+/**
+ * Check to see if `\n` is needed before the next token.
+ *
+ * @param {Array} `tokens`
+ * @param {Number} `idx`
+ * @return {String} Empty string or newline
+ * @api private
+ */
+
+var getBreak = rules.getBreak = function getBreak(tokens, idx) {
+ idx = nextToken(tokens, idx);
+ if (idx < tokens.length && tokens[idx].type === 'list_item_close') {
+ return '';
+ }
+ return '\n';
+};
+
+/**
+ * Renderer class. Renders HTML and exposes `rules` to allow
+ * local modifications.
+ */
+
+function Renderer() {
+ this.rules = assign({}, rules);
+
+ // exported helper, for custom rules only
+ this.getBreak = rules.getBreak;
+}
+
+/**
+ * Render a string of inline HTML with the given `tokens` and
+ * `options`.
+ *
+ * @param {Array} `tokens`
+ * @param {Object} `options`
+ * @param {Object} `env`
+ * @return {String}
+ * @api public
+ */
+
+Renderer.prototype.renderInline = function (tokens, options, env) {
+ var _rules = this.rules;
+ var len = tokens.length, i = 0;
+ var result = '';
+
+ while (len--) {
+ result += _rules[tokens[i].type](tokens, i++, options, env, this);
+ }
+
+ return result;
+};
+
+/**
+ * Render a string of HTML with the given `tokens` and
+ * `options`.
+ *
+ * @param {Array} `tokens`
+ * @param {Object} `options`
+ * @param {Object} `env`
+ * @return {String}
+ * @api public
+ */
+
+Renderer.prototype.render = function (tokens, options, env) {
+ var _rules = this.rules;
+ var len = tokens.length, i = -1;
+ var result = '';
+
+ while (++i < len) {
+ if (tokens[i].type === 'inline') {
+ result += this.renderInline(tokens[i].children, options, env);
+ } else {
+ result += _rules[tokens[i].type](tokens, i, options, env, this);
+ }
+ }
+ return result;
+};
+
+/**
+ * Ruler is a helper class for building responsibility chains from
+ * parse rules. It allows:
+ *
+ * - easy stack rules chains
+ * - getting main chain and named chains content (as arrays of functions)
+ *
+ * Helper methods, should not be used directly.
+ * @api private
+ */
+
+function Ruler() {
+ // List of added rules. Each element is:
+ //
+ // { name: XXX,
+ // enabled: Boolean,
+ // fn: Function(),
+ // alt: [ name2, name3 ] }
+ //
+ this.__rules__ = [];
+
+ // Cached rule chains.
+ //
+ // First level - chain name, '' for default.
+ // Second level - digital anchor for fast filtering by charcodes.
+ //
+ this.__cache__ = null;
+}
+
+/**
+ * Find the index of a rule by `name`.
+ *
+ * @param {String} `name`
+ * @return {Number} Index of the given `name`
+ * @api private
+ */
+
+Ruler.prototype.__find__ = function (name) {
+ var len = this.__rules__.length;
+ var i = -1;
+
+ while (len--) {
+ if (this.__rules__[++i].name === name) {
+ return i;
+ }
+ }
+ return -1;
+};
+
+/**
+ * Build the rules lookup cache
+ *
+ * @api private
+ */
+
+Ruler.prototype.__compile__ = function () {
+ var self = this;
+ var chains = [ '' ];
+
+ // collect unique names
+ self.__rules__.forEach(function (rule) {
+ if (!rule.enabled) {
+ return;
+ }
+
+ rule.alt.forEach(function (altName) {
+ if (chains.indexOf(altName) < 0) {
+ chains.push(altName);
+ }
+ });
+ });
+
+ self.__cache__ = {};
+
+ chains.forEach(function (chain) {
+ self.__cache__[chain] = [];
+ self.__rules__.forEach(function (rule) {
+ if (!rule.enabled) {
+ return;
+ }
+
+ if (chain && rule.alt.indexOf(chain) < 0) {
+ return;
+ }
+ self.__cache__[chain].push(rule.fn);
+ });
+ });
+};
+
+/**
+ * Ruler public methods
+ * ------------------------------------------------
+ */
+
+/**
+ * Replace rule function
+ *
+ * @param {String} `name` Rule name
+ * @param {Function `fn`
+ * @param {Object} `options`
+ * @api private
+ */
+
+Ruler.prototype.at = function (name, fn, options) {
+ var idx = this.__find__(name);
+ var opt = options || {};
+
+ if (idx === -1) {
+ throw new Error('Parser rule not found: ' + name);
+ }
+
+ this.__rules__[idx].fn = fn;
+ this.__rules__[idx].alt = opt.alt || [];
+ this.__cache__ = null;
+};
+
+/**
+ * Add a rule to the chain before given the `ruleName`.
+ *
+ * @param {String} `beforeName`
+ * @param {String} `ruleName`
+ * @param {Function} `fn`
+ * @param {Object} `options`
+ * @api private
+ */
+
+Ruler.prototype.before = function (beforeName, ruleName, fn, options) {
+ var idx = this.__find__(beforeName);
+ var opt = options || {};
+
+ if (idx === -1) {
+ throw new Error('Parser rule not found: ' + beforeName);
+ }
+
+ this.__rules__.splice(idx, 0, {
+ name: ruleName,
+ enabled: true,
+ fn: fn,
+ alt: opt.alt || []
+ });
+
+ this.__cache__ = null;
+};
+
+/**
+ * Add a rule to the chain after the given `ruleName`.
+ *
+ * @param {String} `afterName`
+ * @param {String} `ruleName`
+ * @param {Function} `fn`
+ * @param {Object} `options`
+ * @api private
+ */
+
+Ruler.prototype.after = function (afterName, ruleName, fn, options) {
+ var idx = this.__find__(afterName);
+ var opt = options || {};
+
+ if (idx === -1) {
+ throw new Error('Parser rule not found: ' + afterName);
+ }
+
+ this.__rules__.splice(idx + 1, 0, {
+ name: ruleName,
+ enabled: true,
+ fn: fn,
+ alt: opt.alt || []
+ });
+
+ this.__cache__ = null;
+};
+
+/**
+ * Add a rule to the end of chain.
+ *
+ * @param {String} `ruleName`
+ * @param {Function} `fn`
+ * @param {Object} `options`
+ * @return {String}
+ */
+
+Ruler.prototype.push = function (ruleName, fn, options) {
+ var opt = options || {};
+
+ this.__rules__.push({
+ name: ruleName,
+ enabled: true,
+ fn: fn,
+ alt: opt.alt || []
+ });
+
+ this.__cache__ = null;
+};
+
+/**
+ * Enable a rule or list of rules.
+ *
+ * @param {String|Array} `list` Name or array of rule names to enable
+ * @param {Boolean} `strict` If `true`, all non listed rules will be disabled.
+ * @api private
+ */
+
+Ruler.prototype.enable = function (list, strict) {
+ list = !Array.isArray(list)
+ ? [ list ]
+ : list;
+
+ // In strict mode disable all existing rules first
+ if (strict) {
+ this.__rules__.forEach(function (rule) {
+ rule.enabled = false;
+ });
+ }
+
+ // Search by name and enable
+ list.forEach(function (name) {
+ var idx = this.__find__(name);
+ if (idx < 0) {
+ throw new Error('Rules manager: invalid rule name ' + name);
+ }
+ this.__rules__[idx].enabled = true;
+ }, this);
+
+ this.__cache__ = null;
+};
+
+
+/**
+ * Disable a rule or list of rules.
+ *
+ * @param {String|Array} `list` Name or array of rule names to disable
+ * @api private
+ */
+
+Ruler.prototype.disable = function (list) {
+ list = !Array.isArray(list)
+ ? [ list ]
+ : list;
+
+ // Search by name and disable
+ list.forEach(function (name) {
+ var idx = this.__find__(name);
+ if (idx < 0) {
+ throw new Error('Rules manager: invalid rule name ' + name);
+ }
+ this.__rules__[idx].enabled = false;
+ }, this);
+
+ this.__cache__ = null;
+};
+
+/**
+ * Get a rules list as an array of functions.
+ *
+ * @param {String} `chainName`
+ * @return {Object}
+ * @api private
+ */
+
+Ruler.prototype.getRules = function (chainName) {
+ if (this.__cache__ === null) {
+ this.__compile__();
+ }
+ return this.__cache__[chainName] || [];
+};
+
+function block(state) {
+
+ if (state.inlineMode) {
+ state.tokens.push({
+ type: 'inline',
+ content: state.src.replace(/\n/g, ' ').trim(),
+ level: 0,
+ lines: [ 0, 1 ],
+ children: []
+ });
+
+ } else {
+ state.block.parse(state.src, state.options, state.env, state.tokens);
+ }
+}
+
+// Inline parser state
+
+function StateInline(src, parserInline, options, env, outTokens) {
+ this.src = src;
+ this.env = env;
+ this.options = options;
+ this.parser = parserInline;
+ this.tokens = outTokens;
+ this.pos = 0;
+ this.posMax = this.src.length;
+ this.level = 0;
+ this.pending = '';
+ this.pendingLevel = 0;
+
+ this.cache = []; // Stores { start: end } pairs. Useful for backtrack
+ // optimization of pairs parse (emphasis, strikes).
+
+ // Link parser state vars
+
+ this.isInLabel = false; // Set true when seek link label - we should disable
+ // "paired" rules (emphasis, strikes) to not skip
+ // tailing `]`
+
+ this.linkLevel = 0; // Increment for each nesting link. Used to prevent
+ // nesting in definitions
+
+ this.linkContent = ''; // Temporary storage for link url
+
+ this.labelUnmatchedScopes = 0; // Track unpaired `[` for link labels
+ // (backtrack optimization)
+}
+
+// Flush pending text
+//
+StateInline.prototype.pushPending = function () {
+ this.tokens.push({
+ type: 'text',
+ content: this.pending,
+ level: this.pendingLevel
+ });
+ this.pending = '';
+};
+
+// Push new token to "stream".
+// If pending text exists - flush it as text token
+//
+StateInline.prototype.push = function (token) {
+ if (this.pending) {
+ this.pushPending();
+ }
+
+ this.tokens.push(token);
+ this.pendingLevel = this.level;
+};
+
+// Store value to cache.
+// !!! Implementation has parser-specific optimizations
+// !!! keys MUST be integer, >= 0; values MUST be integer, > 0
+//
+StateInline.prototype.cacheSet = function (key, val) {
+ for (var i = this.cache.length; i <= key; i++) {
+ this.cache.push(0);
+ }
+
+ this.cache[key] = val;
+};
+
+// Get cache value
+//
+StateInline.prototype.cacheGet = function (key) {
+ return key < this.cache.length ? this.cache[key] : 0;
+};
+
+/**
+ * Parse link labels
+ *
+ * This function assumes that first character (`[`) already matches;
+ * returns the end of the label.
+ *
+ * @param {Object} state
+ * @param {Number} start
+ * @api private
+ */
+
+function parseLinkLabel(state, start) {
+ var level, found, marker,
+ labelEnd = -1,
+ max = state.posMax,
+ oldPos = state.pos,
+ oldFlag = state.isInLabel;
+
+ if (state.isInLabel) { return -1; }
+
+ if (state.labelUnmatchedScopes) {
+ state.labelUnmatchedScopes--;
+ return -1;
+ }
+
+ state.pos = start + 1;
+ state.isInLabel = true;
+ level = 1;
+
+ while (state.pos < max) {
+ marker = state.src.charCodeAt(state.pos);
+ if (marker === 0x5B /* [ */) {
+ level++;
+ } else if (marker === 0x5D /* ] */) {
+ level--;
+ if (level === 0) {
+ found = true;
+ break;
+ }
+ }
+
+ state.parser.skipToken(state);
+ }
+
+ if (found) {
+ labelEnd = state.pos;
+ state.labelUnmatchedScopes = 0;
+ } else {
+ state.labelUnmatchedScopes = level - 1;
+ }
+
+ // restore old state
+ state.pos = oldPos;
+ state.isInLabel = oldFlag;
+
+ return labelEnd;
+}
+
+// Parse abbreviation definitions, i.e. `*[abbr]: description`
+
+
+function parseAbbr(str, parserInline, options, env) {
+ var state, labelEnd, pos, max, label, title;
+
+ if (str.charCodeAt(0) !== 0x2A/* * */) { return -1; }
+ if (str.charCodeAt(1) !== 0x5B/* [ */) { return -1; }
+
+ if (str.indexOf(']:') === -1) { return -1; }
+
+ state = new StateInline(str, parserInline, options, env, []);
+ labelEnd = parseLinkLabel(state, 1);
+
+ if (labelEnd < 0 || str.charCodeAt(labelEnd + 1) !== 0x3A/* : */) { return -1; }
+
+ max = state.posMax;
+
+ // abbr title is always one line, so looking for ending "\n" here
+ for (pos = labelEnd + 2; pos < max; pos++) {
+ if (state.src.charCodeAt(pos) === 0x0A) { break; }
+ }
+
+ label = str.slice(2, labelEnd);
+ title = str.slice(labelEnd + 2, pos).trim();
+ if (title.length === 0) { return -1; }
+ if (!env.abbreviations) { env.abbreviations = {}; }
+ // prepend ':' to avoid conflict with Object.prototype members
+ if (typeof env.abbreviations[':' + label] === 'undefined') {
+ env.abbreviations[':' + label] = title;
+ }
+
+ return pos;
+}
+
+function abbr(state) {
+ var tokens = state.tokens, i, l, content, pos;
+
+ if (state.inlineMode) {
+ return;
+ }
+
+ // Parse inlines
+ for (i = 1, l = tokens.length - 1; i < l; i++) {
+ if (tokens[i - 1].type === 'paragraph_open' &&
+ tokens[i].type === 'inline' &&
+ tokens[i + 1].type === 'paragraph_close') {
+
+ content = tokens[i].content;
+ while (content.length) {
+ pos = parseAbbr(content, state.inline, state.options, state.env);
+ if (pos < 0) { break; }
+ content = content.slice(pos).trim();
+ }
+
+ tokens[i].content = content;
+ if (!content.length) {
+ tokens[i - 1].tight = true;
+ tokens[i + 1].tight = true;
+ }
+ }
+ }
+}
+
+function normalizeLink(url) {
+ var normalized = replaceEntities(url);
+ // We shouldn't care about the result of malformed URIs,
+ // and should not throw an exception.
+ try {
+ normalized = decodeURI(normalized);
+ } catch (err) {}
+ return encodeURI(normalized);
+}
+
+/**
+ * Parse link destination
+ *
+ * - on success it returns a string and updates state.pos;
+ * - on failure it returns null
+ *
+ * @param {Object} state
+ * @param {Number} pos
+ * @api private
+ */
+
+function parseLinkDestination(state, pos) {
+ var code, level, link,
+ start = pos,
+ max = state.posMax;
+
+ if (state.src.charCodeAt(pos) === 0x3C /* < */) {
+ pos++;
+ while (pos < max) {
+ code = state.src.charCodeAt(pos);
+ if (code === 0x0A /* \n */) { return false; }
+ if (code === 0x3E /* > */) {
+ link = normalizeLink(unescapeMd(state.src.slice(start + 1, pos)));
+ if (!state.parser.validateLink(link)) { return false; }
+ state.pos = pos + 1;
+ state.linkContent = link;
+ return true;
+ }
+ if (code === 0x5C /* \ */ && pos + 1 < max) {
+ pos += 2;
+ continue;
+ }
+
+ pos++;
+ }
+
+ // no closing '>'
+ return false;
+ }
+
+ // this should be ... } else { ... branch
+
+ level = 0;
+ while (pos < max) {
+ code = state.src.charCodeAt(pos);
+
+ if (code === 0x20) { break; }
+
+ // ascii control chars
+ if (code < 0x20 || code === 0x7F) { break; }
+
+ if (code === 0x5C /* \ */ && pos + 1 < max) {
+ pos += 2;
+ continue;
+ }
+
+ if (code === 0x28 /* ( */) {
+ level++;
+ if (level > 1) { break; }
+ }
+
+ if (code === 0x29 /* ) */) {
+ level--;
+ if (level < 0) { break; }
+ }
+
+ pos++;
+ }
+
+ if (start === pos) { return false; }
+
+ link = unescapeMd(state.src.slice(start, pos));
+ if (!state.parser.validateLink(link)) { return false; }
+
+ state.linkContent = link;
+ state.pos = pos;
+ return true;
+}
+
+/**
+ * Parse link title
+ *
+ * - on success it returns a string and updates state.pos;
+ * - on failure it returns null
+ *
+ * @param {Object} state
+ * @param {Number} pos
+ * @api private
+ */
+
+function parseLinkTitle(state, pos) {
+ var code,
+ start = pos,
+ max = state.posMax,
+ marker = state.src.charCodeAt(pos);
+
+ if (marker !== 0x22 /* " */ && marker !== 0x27 /* ' */ && marker !== 0x28 /* ( */) { return false; }
+
+ pos++;
+
+ // if opening marker is "(", switch it to closing marker ")"
+ if (marker === 0x28) { marker = 0x29; }
+
+ while (pos < max) {
+ code = state.src.charCodeAt(pos);
+ if (code === marker) {
+ state.pos = pos + 1;
+ state.linkContent = unescapeMd(state.src.slice(start + 1, pos));
+ return true;
+ }
+ if (code === 0x5C /* \ */ && pos + 1 < max) {
+ pos += 2;
+ continue;
+ }
+
+ pos++;
+ }
+
+ return false;
+}
+
+function normalizeReference(str) {
+ // use .toUpperCase() instead of .toLowerCase()
+ // here to avoid a conflict with Object.prototype
+ // members (most notably, `__proto__`)
+ return str.trim().replace(/\s+/g, ' ').toUpperCase();
+}
+
+function parseReference(str, parser, options, env) {
+ var state, labelEnd, pos, max, code, start, href, title, label;
+
+ if (str.charCodeAt(0) !== 0x5B/* [ */) { return -1; }
+
+ if (str.indexOf(']:') === -1) { return -1; }
+
+ state = new StateInline(str, parser, options, env, []);
+ labelEnd = parseLinkLabel(state, 0);
+
+ if (labelEnd < 0 || str.charCodeAt(labelEnd + 1) !== 0x3A/* : */) { return -1; }
+
+ max = state.posMax;
+
+ // [label]: destination 'title'
+ // ^^^ skip optional whitespace here
+ for (pos = labelEnd + 2; pos < max; pos++) {
+ code = state.src.charCodeAt(pos);
+ if (code !== 0x20 && code !== 0x0A) { break; }
+ }
+
+ // [label]: destination 'title'
+ // ^^^^^^^^^^^ parse this
+ if (!parseLinkDestination(state, pos)) { return -1; }
+ href = state.linkContent;
+ pos = state.pos;
+
+ // [label]: destination 'title'
+ // ^^^ skipping those spaces
+ start = pos;
+ for (pos = pos + 1; pos < max; pos++) {
+ code = state.src.charCodeAt(pos);
+ if (code !== 0x20 && code !== 0x0A) { break; }
+ }
+
+ // [label]: destination 'title'
+ // ^^^^^^^ parse this
+ if (pos < max && start !== pos && parseLinkTitle(state, pos)) {
+ title = state.linkContent;
+ pos = state.pos;
+ } else {
+ title = '';
+ pos = start;
+ }
+
+ // ensure that the end of the line is empty
+ while (pos < max && state.src.charCodeAt(pos) === 0x20/* space */) { pos++; }
+ if (pos < max && state.src.charCodeAt(pos) !== 0x0A) { return -1; }
+
+ label = normalizeReference(str.slice(1, labelEnd));
+ if (typeof env.references[label] === 'undefined') {
+ env.references[label] = { title: title, href: href };
+ }
+
+ return pos;
+}
+
+
+function references(state) {
+ var tokens = state.tokens, i, l, content, pos;
+
+ state.env.references = state.env.references || {};
+
+ if (state.inlineMode) {
+ return;
+ }
+
+ // Scan definitions in paragraph inlines
+ for (i = 1, l = tokens.length - 1; i < l; i++) {
+ if (tokens[i].type === 'inline' &&
+ tokens[i - 1].type === 'paragraph_open' &&
+ tokens[i + 1].type === 'paragraph_close') {
+
+ content = tokens[i].content;
+ while (content.length) {
+ pos = parseReference(content, state.inline, state.options, state.env);
+ if (pos < 0) { break; }
+ content = content.slice(pos).trim();
+ }
+
+ tokens[i].content = content;
+ if (!content.length) {
+ tokens[i - 1].tight = true;
+ tokens[i + 1].tight = true;
+ }
+ }
+ }
+}
+
+function inline(state) {
+ var tokens = state.tokens, tok, i, l;
+
+ // Parse inlines
+ for (i = 0, l = tokens.length; i < l; i++) {
+ tok = tokens[i];
+ if (tok.type === 'inline') {
+ state.inline.parse(tok.content, state.options, state.env, tok.children);
+ }
+ }
+}
+
+function footnote_block(state) {
+ var i, l, j, t, lastParagraph, list, tokens, current, currentLabel,
+ level = 0,
+ insideRef = false,
+ refTokens = {};
+
+ if (!state.env.footnotes) { return; }
+
+ state.tokens = state.tokens.filter(function(tok) {
+ if (tok.type === 'footnote_reference_open') {
+ insideRef = true;
+ current = [];
+ currentLabel = tok.label;
+ return false;
+ }
+ if (tok.type === 'footnote_reference_close') {
+ insideRef = false;
+ // prepend ':' to avoid conflict with Object.prototype members
+ refTokens[':' + currentLabel] = current;
+ return false;
+ }
+ if (insideRef) { current.push(tok); }
+ return !insideRef;
+ });
+
+ if (!state.env.footnotes.list) { return; }
+ list = state.env.footnotes.list;
+
+ state.tokens.push({
+ type: 'footnote_block_open',
+ level: level++
+ });
+ for (i = 0, l = list.length; i < l; i++) {
+ state.tokens.push({
+ type: 'footnote_open',
+ id: i,
+ level: level++
+ });
+
+ if (list[i].tokens) {
+ tokens = [];
+ tokens.push({
+ type: 'paragraph_open',
+ tight: false,
+ level: level++
+ });
+ tokens.push({
+ type: 'inline',
+ content: '',
+ level: level,
+ children: list[i].tokens
+ });
+ tokens.push({
+ type: 'paragraph_close',
+ tight: false,
+ level: --level
+ });
+ } else if (list[i].label) {
+ tokens = refTokens[':' + list[i].label];
+ }
+
+ state.tokens = state.tokens.concat(tokens);
+ if (state.tokens[state.tokens.length - 1].type === 'paragraph_close') {
+ lastParagraph = state.tokens.pop();
+ } else {
+ lastParagraph = null;
+ }
+
+ t = list[i].count > 0 ? list[i].count : 1;
+ for (j = 0; j < t; j++) {
+ state.tokens.push({
+ type: 'footnote_anchor',
+ id: i,
+ subId: j,
+ level: level
+ });
+ }
+
+ if (lastParagraph) {
+ state.tokens.push(lastParagraph);
+ }
+
+ state.tokens.push({
+ type: 'footnote_close',
+ level: --level
+ });
+ }
+ state.tokens.push({
+ type: 'footnote_block_close',
+ level: --level
+ });
+}
+
+// Enclose abbreviations in tags
+//
+
+var PUNCT_CHARS = ' \n()[]\'".,!?-';
+
+
+// from Google closure library
+// http://closure-library.googlecode.com/git-history/docs/local_closure_goog_string_string.js.source.html#line1021
+function regEscape(s) {
+ return s.replace(/([-()\[\]{}+?*.$\^|,:#= 0; i--) {
+ token = tokens[i];
+ if (token.type !== 'text') { continue; }
+
+ pos = 0;
+ text = token.content;
+ reg.lastIndex = 0;
+ level = token.level;
+ nodes = [];
+
+ while ((m = reg.exec(text))) {
+ if (reg.lastIndex > pos) {
+ nodes.push({
+ type: 'text',
+ content: text.slice(pos, m.index + m[1].length),
+ level: level
+ });
+ }
+
+ nodes.push({
+ type: 'abbr_open',
+ title: state.env.abbreviations[':' + m[2]],
+ level: level++
+ });
+ nodes.push({
+ type: 'text',
+ content: m[2],
+ level: level
+ });
+ nodes.push({
+ type: 'abbr_close',
+ level: --level
+ });
+ pos = reg.lastIndex - m[3].length;
+ }
+
+ if (!nodes.length) { continue; }
+
+ if (pos < text.length) {
+ nodes.push({
+ type: 'text',
+ content: text.slice(pos),
+ level: level
+ });
+ }
+
+ // replace current node
+ blockTokens[j].children = tokens = [].concat(tokens.slice(0, i), nodes, tokens.slice(i + 1));
+ }
+ }
+}
+
+// Simple typographical replacements
+//
+// TODO:
+// - fractionals 1/2, 1/4, 3/4 -> ½, ¼, ¾
+// - miltiplication 2 x 4 -> 2 × 4
+
+var RARE_RE = /\+-|\.\.|\?\?\?\?|!!!!|,,|--/;
+
+var SCOPED_ABBR_RE = /\((c|tm|r|p)\)/ig;
+var SCOPED_ABBR = {
+ 'c': '©',
+ 'r': '®',
+ 'p': '§',
+ 'tm': '™'
+};
+
+function replaceScopedAbbr(str) {
+ if (str.indexOf('(') < 0) { return str; }
+
+ return str.replace(SCOPED_ABBR_RE, function(match, name) {
+ return SCOPED_ABBR[name.toLowerCase()];
+ });
+}
+
+
+function replace(state) {
+ var i, token, text, inlineTokens, blkIdx;
+
+ if (!state.options.typographer) { return; }
+
+ for (blkIdx = state.tokens.length - 1; blkIdx >= 0; blkIdx--) {
+
+ if (state.tokens[blkIdx].type !== 'inline') { continue; }
+
+ inlineTokens = state.tokens[blkIdx].children;
+
+ for (i = inlineTokens.length - 1; i >= 0; i--) {
+ token = inlineTokens[i];
+ if (token.type === 'text') {
+ text = token.content;
+
+ text = replaceScopedAbbr(text);
+
+ if (RARE_RE.test(text)) {
+ text = text
+ .replace(/\+-/g, '±')
+ // .., ..., ....... -> …
+ // but ?..... & !..... -> ?.. & !..
+ .replace(/\.{2,}/g, '…').replace(/([?!])…/g, '$1..')
+ .replace(/([?!]){4,}/g, '$1$1$1').replace(/,{2,}/g, ',')
+ // em-dash
+ .replace(/(^|[^-])---([^-]|$)/mg, '$1\u2014$2')
+ // en-dash
+ .replace(/(^|\s)--(\s|$)/mg, '$1\u2013$2')
+ .replace(/(^|[^-\s])--([^-\s]|$)/mg, '$1\u2013$2');
+ }
+
+ token.content = text;
+ }
+ }
+ }
+}
+
+// Convert straight quotation marks to typographic ones
+//
+
+var QUOTE_TEST_RE = /['"]/;
+var QUOTE_RE = /['"]/g;
+var PUNCT_RE = /[-\s()\[\]]/;
+var APOSTROPHE = '’';
+
+// This function returns true if the character at `pos`
+// could be inside a word.
+function isLetter(str, pos) {
+ if (pos < 0 || pos >= str.length) { return false; }
+ return !PUNCT_RE.test(str[pos]);
+}
+
+
+function replaceAt(str, index, ch) {
+ return str.substr(0, index) + ch + str.substr(index + 1);
+}
+
+
+function smartquotes(state) {
+ /*eslint max-depth:0*/
+ var i, token, text, t, pos, max, thisLevel, lastSpace, nextSpace, item,
+ canOpen, canClose, j, isSingle, blkIdx, tokens,
+ stack;
+
+ if (!state.options.typographer) { return; }
+
+ stack = [];
+
+ for (blkIdx = state.tokens.length - 1; blkIdx >= 0; blkIdx--) {
+
+ if (state.tokens[blkIdx].type !== 'inline') { continue; }
+
+ tokens = state.tokens[blkIdx].children;
+ stack.length = 0;
+
+ for (i = 0; i < tokens.length; i++) {
+ token = tokens[i];
+
+ if (token.type !== 'text' || QUOTE_TEST_RE.test(token.text)) { continue; }
+
+ thisLevel = tokens[i].level;
+
+ for (j = stack.length - 1; j >= 0; j--) {
+ if (stack[j].level <= thisLevel) { break; }
+ }
+ stack.length = j + 1;
+
+ text = token.content;
+ pos = 0;
+ max = text.length;
+
+ /*eslint no-labels:0,block-scoped-var:0*/
+ OUTER:
+ while (pos < max) {
+ QUOTE_RE.lastIndex = pos;
+ t = QUOTE_RE.exec(text);
+ if (!t) { break; }
+
+ lastSpace = !isLetter(text, t.index - 1);
+ pos = t.index + 1;
+ isSingle = (t[0] === "'");
+ nextSpace = !isLetter(text, pos);
+
+ if (!nextSpace && !lastSpace) {
+ // middle of word
+ if (isSingle) {
+ token.content = replaceAt(token.content, t.index, APOSTROPHE);
+ }
+ continue;
+ }
+
+ canOpen = !nextSpace;
+ canClose = !lastSpace;
+
+ if (canClose) {
+ // this could be a closing quote, rewind the stack to get a match
+ for (j = stack.length - 1; j >= 0; j--) {
+ item = stack[j];
+ if (stack[j].level < thisLevel) { break; }
+ if (item.single === isSingle && stack[j].level === thisLevel) {
+ item = stack[j];
+ if (isSingle) {
+ tokens[item.token].content = replaceAt(tokens[item.token].content, item.pos, state.options.quotes[2]);
+ token.content = replaceAt(token.content, t.index, state.options.quotes[3]);
+ } else {
+ tokens[item.token].content = replaceAt(tokens[item.token].content, item.pos, state.options.quotes[0]);
+ token.content = replaceAt(token.content, t.index, state.options.quotes[1]);
+ }
+ stack.length = j;
+ continue OUTER;
+ }
+ }
+ }
+
+ if (canOpen) {
+ stack.push({
+ token: i,
+ pos: t.index,
+ single: isSingle,
+ level: thisLevel
+ });
+ } else if (canClose && isSingle) {
+ token.content = replaceAt(token.content, t.index, APOSTROPHE);
+ }
+ }
+ }
+ }
+}
+
+/**
+ * Core parser `rules`
+ */
+
+var _rules = [
+ [ 'block', block ],
+ [ 'abbr', abbr ],
+ [ 'references', references ],
+ [ 'inline', inline ],
+ [ 'footnote_tail', footnote_block ],
+ [ 'abbr2', abbr2 ],
+ [ 'replacements', replace ],
+ [ 'smartquotes', smartquotes ],
+];
+
+/**
+ * Class for top level (`core`) parser rules
+ *
+ * @api private
+ */
+
+function Core() {
+ this.options = {};
+ this.ruler = new Ruler();
+ for (var i = 0; i < _rules.length; i++) {
+ this.ruler.push(_rules[i][0], _rules[i][1]);
+ }
+}
+
+/**
+ * Process rules with the given `state`
+ *
+ * @param {Object} `state`
+ * @api private
+ */
+
+Core.prototype.process = function (state) {
+ var i, l, rules;
+ rules = this.ruler.getRules('');
+ for (i = 0, l = rules.length; i < l; i++) {
+ rules[i](state);
+ }
+};
+
+// Parser state class
+
+function StateBlock(src, parser, options, env, tokens) {
+ var ch, s, start, pos, len, indent, indent_found;
+
+ this.src = src;
+
+ // Shortcuts to simplify nested calls
+ this.parser = parser;
+
+ this.options = options;
+
+ this.env = env;
+
+ //
+ // Internal state vartiables
+ //
+
+ this.tokens = tokens;
+
+ this.bMarks = []; // line begin offsets for fast jumps
+ this.eMarks = []; // line end offsets for fast jumps
+ this.tShift = []; // indent for each line
+
+ // block parser variables
+ this.blkIndent = 0; // required block content indent
+ // (for example, if we are in list)
+ this.line = 0; // line index in src
+ this.lineMax = 0; // lines count
+ this.tight = false; // loose/tight mode for lists
+ this.parentType = 'root'; // if `list`, block parser stops on two newlines
+ this.ddIndent = -1; // indent of the current dd block (-1 if there isn't any)
+
+ this.level = 0;
+
+ // renderer
+ this.result = '';
+
+ // Create caches
+ // Generate markers.
+ s = this.src;
+ indent = 0;
+ indent_found = false;
+
+ for (start = pos = indent = 0, len = s.length; pos < len; pos++) {
+ ch = s.charCodeAt(pos);
+
+ if (!indent_found) {
+ if (ch === 0x20/* space */) {
+ indent++;
+ continue;
+ } else {
+ indent_found = true;
+ }
+ }
+
+ if (ch === 0x0A || pos === len - 1) {
+ if (ch !== 0x0A) { pos++; }
+ this.bMarks.push(start);
+ this.eMarks.push(pos);
+ this.tShift.push(indent);
+
+ indent_found = false;
+ indent = 0;
+ start = pos + 1;
+ }
+ }
+
+ // Push fake entry to simplify cache bounds checks
+ this.bMarks.push(s.length);
+ this.eMarks.push(s.length);
+ this.tShift.push(0);
+
+ this.lineMax = this.bMarks.length - 1; // don't count last fake line
+}
+
+StateBlock.prototype.isEmpty = function isEmpty(line) {
+ return this.bMarks[line] + this.tShift[line] >= this.eMarks[line];
+};
+
+StateBlock.prototype.skipEmptyLines = function skipEmptyLines(from) {
+ for (var max = this.lineMax; from < max; from++) {
+ if (this.bMarks[from] + this.tShift[from] < this.eMarks[from]) {
+ break;
+ }
+ }
+ return from;
+};
+
+// Skip spaces from given position.
+StateBlock.prototype.skipSpaces = function skipSpaces(pos) {
+ for (var max = this.src.length; pos < max; pos++) {
+ if (this.src.charCodeAt(pos) !== 0x20/* space */) { break; }
+ }
+ return pos;
+};
+
+// Skip char codes from given position
+StateBlock.prototype.skipChars = function skipChars(pos, code) {
+ for (var max = this.src.length; pos < max; pos++) {
+ if (this.src.charCodeAt(pos) !== code) { break; }
+ }
+ return pos;
+};
+
+// Skip char codes reverse from given position - 1
+StateBlock.prototype.skipCharsBack = function skipCharsBack(pos, code, min) {
+ if (pos <= min) { return pos; }
+
+ while (pos > min) {
+ if (code !== this.src.charCodeAt(--pos)) { return pos + 1; }
+ }
+ return pos;
+};
+
+// cut lines range from source.
+StateBlock.prototype.getLines = function getLines(begin, end, indent, keepLastLF) {
+ var i, first, last, queue, shift,
+ line = begin;
+
+ if (begin >= end) {
+ return '';
+ }
+
+ // Opt: don't use push queue for single line;
+ if (line + 1 === end) {
+ first = this.bMarks[line] + Math.min(this.tShift[line], indent);
+ last = keepLastLF ? this.eMarks[line] + 1 : this.eMarks[line];
+ return this.src.slice(first, last);
+ }
+
+ queue = new Array(end - begin);
+
+ for (i = 0; line < end; line++, i++) {
+ shift = this.tShift[line];
+ if (shift > indent) { shift = indent; }
+ if (shift < 0) { shift = 0; }
+
+ first = this.bMarks[line] + shift;
+
+ if (line + 1 < end || keepLastLF) {
+ // No need for bounds check because we have fake entry on tail.
+ last = this.eMarks[line] + 1;
+ } else {
+ last = this.eMarks[line];
+ }
+
+ queue[i] = this.src.slice(first, last);
+ }
+
+ return queue.join('');
+};
+
+// Code block (4 spaces padded)
+
+function code(state, startLine, endLine/*, silent*/) {
+ var nextLine, last;
+
+ if (state.tShift[startLine] - state.blkIndent < 4) { return false; }
+
+ last = nextLine = startLine + 1;
+
+ while (nextLine < endLine) {
+ if (state.isEmpty(nextLine)) {
+ nextLine++;
+ continue;
+ }
+ if (state.tShift[nextLine] - state.blkIndent >= 4) {
+ nextLine++;
+ last = nextLine;
+ continue;
+ }
+ break;
+ }
+
+ state.line = nextLine;
+ state.tokens.push({
+ type: 'code',
+ content: state.getLines(startLine, last, 4 + state.blkIndent, true),
+ block: true,
+ lines: [ startLine, state.line ],
+ level: state.level
+ });
+
+ return true;
+}
+
+// fences (``` lang, ~~~ lang)
+
+function fences(state, startLine, endLine, silent) {
+ var marker, len, params, nextLine, mem,
+ haveEndMarker = false,
+ pos = state.bMarks[startLine] + state.tShift[startLine],
+ max = state.eMarks[startLine];
+
+ if (pos + 3 > max) { return false; }
+
+ marker = state.src.charCodeAt(pos);
+
+ if (marker !== 0x7E/* ~ */ && marker !== 0x60 /* ` */) {
+ return false;
+ }
+
+ // scan marker length
+ mem = pos;
+ pos = state.skipChars(pos, marker);
+
+ len = pos - mem;
+
+ if (len < 3) { return false; }
+
+ params = state.src.slice(pos, max).trim();
+
+ if (params.indexOf('`') >= 0) { return false; }
+
+ // Since start is found, we can report success here in validation mode
+ if (silent) { return true; }
+
+ // search end of block
+ nextLine = startLine;
+
+ for (;;) {
+ nextLine++;
+ if (nextLine >= endLine) {
+ // unclosed block should be autoclosed by end of document.
+ // also block seems to be autoclosed by end of parent
+ break;
+ }
+
+ pos = mem = state.bMarks[nextLine] + state.tShift[nextLine];
+ max = state.eMarks[nextLine];
+
+ if (pos < max && state.tShift[nextLine] < state.blkIndent) {
+ // non-empty line with negative indent should stop the list:
+ // - ```
+ // test
+ break;
+ }
+
+ if (state.src.charCodeAt(pos) !== marker) { continue; }
+
+ if (state.tShift[nextLine] - state.blkIndent >= 4) {
+ // closing fence should be indented less than 4 spaces
+ continue;
+ }
+
+ pos = state.skipChars(pos, marker);
+
+ // closing code fence must be at least as long as the opening one
+ if (pos - mem < len) { continue; }
+
+ // make sure tail has spaces only
+ pos = state.skipSpaces(pos);
+
+ if (pos < max) { continue; }
+
+ haveEndMarker = true;
+ // found!
+ break;
+ }
+
+ // If a fence has heading spaces, they should be removed from its inner block
+ len = state.tShift[startLine];
+
+ state.line = nextLine + (haveEndMarker ? 1 : 0);
+ state.tokens.push({
+ type: 'fence',
+ params: params,
+ content: state.getLines(startLine + 1, nextLine, len, true),
+ lines: [ startLine, state.line ],
+ level: state.level
+ });
+
+ return true;
+}
+
+// Block quotes
+
+function blockquote(state, startLine, endLine, silent) {
+ var nextLine, lastLineEmpty, oldTShift, oldBMarks, oldIndent, oldParentType, lines,
+ terminatorRules,
+ i, l, terminate,
+ pos = state.bMarks[startLine] + state.tShift[startLine],
+ max = state.eMarks[startLine];
+
+ if (pos > max) { return false; }
+
+ // check the block quote marker
+ if (state.src.charCodeAt(pos++) !== 0x3E/* > */) { return false; }
+
+ if (state.level >= state.options.maxNesting) { return false; }
+
+ // we know that it's going to be a valid blockquote,
+ // so no point trying to find the end of it in silent mode
+ if (silent) { return true; }
+
+ // skip one optional space after '>'
+ if (state.src.charCodeAt(pos) === 0x20) { pos++; }
+
+ oldIndent = state.blkIndent;
+ state.blkIndent = 0;
+
+ oldBMarks = [ state.bMarks[startLine] ];
+ state.bMarks[startLine] = pos;
+
+ // check if we have an empty blockquote
+ pos = pos < max ? state.skipSpaces(pos) : pos;
+ lastLineEmpty = pos >= max;
+
+ oldTShift = [ state.tShift[startLine] ];
+ state.tShift[startLine] = pos - state.bMarks[startLine];
+
+ terminatorRules = state.parser.ruler.getRules('blockquote');
+
+ // Search the end of the block
+ //
+ // Block ends with either:
+ // 1. an empty line outside:
+ // ```
+ // > test
+ //
+ // ```
+ // 2. an empty line inside:
+ // ```
+ // >
+ // test
+ // ```
+ // 3. another tag
+ // ```
+ // > test
+ // - - -
+ // ```
+ for (nextLine = startLine + 1; nextLine < endLine; nextLine++) {
+ pos = state.bMarks[nextLine] + state.tShift[nextLine];
+ max = state.eMarks[nextLine];
+
+ if (pos >= max) {
+ // Case 1: line is not inside the blockquote, and this line is empty.
+ break;
+ }
+
+ if (state.src.charCodeAt(pos++) === 0x3E/* > */) {
+ // This line is inside the blockquote.
+
+ // skip one optional space after '>'
+ if (state.src.charCodeAt(pos) === 0x20) { pos++; }
+
+ oldBMarks.push(state.bMarks[nextLine]);
+ state.bMarks[nextLine] = pos;
+
+ pos = pos < max ? state.skipSpaces(pos) : pos;
+ lastLineEmpty = pos >= max;
+
+ oldTShift.push(state.tShift[nextLine]);
+ state.tShift[nextLine] = pos - state.bMarks[nextLine];
+ continue;
+ }
+
+ // Case 2: line is not inside the blockquote, and the last line was empty.
+ if (lastLineEmpty) { break; }
+
+ // Case 3: another tag found.
+ terminate = false;
+ for (i = 0, l = terminatorRules.length; i < l; i++) {
+ if (terminatorRules[i](state, nextLine, endLine, true)) {
+ terminate = true;
+ break;
+ }
+ }
+ if (terminate) { break; }
+
+ oldBMarks.push(state.bMarks[nextLine]);
+ oldTShift.push(state.tShift[nextLine]);
+
+ // A negative number means that this is a paragraph continuation;
+ //
+ // Any negative number will do the job here, but it's better for it
+ // to be large enough to make any bugs obvious.
+ state.tShift[nextLine] = -1337;
+ }
+
+ oldParentType = state.parentType;
+ state.parentType = 'blockquote';
+ state.tokens.push({
+ type: 'blockquote_open',
+ lines: lines = [ startLine, 0 ],
+ level: state.level++
+ });
+ state.parser.tokenize(state, startLine, nextLine);
+ state.tokens.push({
+ type: 'blockquote_close',
+ level: --state.level
+ });
+ state.parentType = oldParentType;
+ lines[1] = state.line;
+
+ // Restore original tShift; this might not be necessary since the parser
+ // has already been here, but just to make sure we can do that.
+ for (i = 0; i < oldTShift.length; i++) {
+ state.bMarks[i + startLine] = oldBMarks[i];
+ state.tShift[i + startLine] = oldTShift[i];
+ }
+ state.blkIndent = oldIndent;
+
+ return true;
+}
+
+// Horizontal rule
+
+function hr(state, startLine, endLine, silent) {
+ var marker, cnt, ch,
+ pos = state.bMarks[startLine],
+ max = state.eMarks[startLine];
+
+ pos += state.tShift[startLine];
+
+ if (pos > max) { return false; }
+
+ marker = state.src.charCodeAt(pos++);
+
+ // Check hr marker
+ if (marker !== 0x2A/* * */ &&
+ marker !== 0x2D/* - */ &&
+ marker !== 0x5F/* _ */) {
+ return false;
+ }
+
+ // markers can be mixed with spaces, but there should be at least 3 one
+
+ cnt = 1;
+ while (pos < max) {
+ ch = state.src.charCodeAt(pos++);
+ if (ch !== marker && ch !== 0x20/* space */) { return false; }
+ if (ch === marker) { cnt++; }
+ }
+
+ if (cnt < 3) { return false; }
+
+ if (silent) { return true; }
+
+ state.line = startLine + 1;
+ state.tokens.push({
+ type: 'hr',
+ lines: [ startLine, state.line ],
+ level: state.level
+ });
+
+ return true;
+}
+
+// Lists
+
+// Search `[-+*][\n ]`, returns next pos arter marker on success
+// or -1 on fail.
+function skipBulletListMarker(state, startLine) {
+ var marker, pos, max;
+
+ pos = state.bMarks[startLine] + state.tShift[startLine];
+ max = state.eMarks[startLine];
+
+ if (pos >= max) { return -1; }
+
+ marker = state.src.charCodeAt(pos++);
+ // Check bullet
+ if (marker !== 0x2A/* * */ &&
+ marker !== 0x2D/* - */ &&
+ marker !== 0x2B/* + */) {
+ return -1;
+ }
+
+ if (pos < max && state.src.charCodeAt(pos) !== 0x20) {
+ // " 1.test " - is not a list item
+ return -1;
+ }
+
+ return pos;
+}
+
+// Search `\d+[.)][\n ]`, returns next pos arter marker on success
+// or -1 on fail.
+function skipOrderedListMarker(state, startLine) {
+ var ch,
+ pos = state.bMarks[startLine] + state.tShift[startLine],
+ max = state.eMarks[startLine];
+
+ if (pos + 1 >= max) { return -1; }
+
+ ch = state.src.charCodeAt(pos++);
+
+ if (ch < 0x30/* 0 */ || ch > 0x39/* 9 */) { return -1; }
+
+ for (;;) {
+ // EOL -> fail
+ if (pos >= max) { return -1; }
+
+ ch = state.src.charCodeAt(pos++);
+
+ if (ch >= 0x30/* 0 */ && ch <= 0x39/* 9 */) {
+ continue;
+ }
+
+ // found valid marker
+ if (ch === 0x29/* ) */ || ch === 0x2e/* . */) {
+ break;
+ }
+
+ return -1;
+ }
+
+
+ if (pos < max && state.src.charCodeAt(pos) !== 0x20/* space */) {
+ // " 1.test " - is not a list item
+ return -1;
+ }
+ return pos;
+}
+
+function markTightParagraphs(state, idx) {
+ var i, l,
+ level = state.level + 2;
+
+ for (i = idx + 2, l = state.tokens.length - 2; i < l; i++) {
+ if (state.tokens[i].level === level && state.tokens[i].type === 'paragraph_open') {
+ state.tokens[i + 2].tight = true;
+ state.tokens[i].tight = true;
+ i += 2;
+ }
+ }
+}
+
+
+function list(state, startLine, endLine, silent) {
+ var nextLine,
+ indent,
+ oldTShift,
+ oldIndent,
+ oldTight,
+ oldParentType,
+ start,
+ posAfterMarker,
+ max,
+ indentAfterMarker,
+ markerValue,
+ markerCharCode,
+ isOrdered,
+ contentStart,
+ listTokIdx,
+ prevEmptyEnd,
+ listLines,
+ itemLines,
+ tight = true,
+ terminatorRules,
+ i, l, terminate;
+
+ // Detect list type and position after marker
+ if ((posAfterMarker = skipOrderedListMarker(state, startLine)) >= 0) {
+ isOrdered = true;
+ } else if ((posAfterMarker = skipBulletListMarker(state, startLine)) >= 0) {
+ isOrdered = false;
+ } else {
+ return false;
+ }
+
+ if (state.level >= state.options.maxNesting) { return false; }
+
+ // We should terminate list on style change. Remember first one to compare.
+ markerCharCode = state.src.charCodeAt(posAfterMarker - 1);
+
+ // For validation mode we can terminate immediately
+ if (silent) { return true; }
+
+ // Start list
+ listTokIdx = state.tokens.length;
+
+ if (isOrdered) {
+ start = state.bMarks[startLine] + state.tShift[startLine];
+ markerValue = Number(state.src.substr(start, posAfterMarker - start - 1));
+
+ state.tokens.push({
+ type: 'ordered_list_open',
+ order: markerValue,
+ lines: listLines = [ startLine, 0 ],
+ level: state.level++
+ });
+
+ } else {
+ state.tokens.push({
+ type: 'bullet_list_open',
+ lines: listLines = [ startLine, 0 ],
+ level: state.level++
+ });
+ }
+
+ //
+ // Iterate list items
+ //
+
+ nextLine = startLine;
+ prevEmptyEnd = false;
+ terminatorRules = state.parser.ruler.getRules('list');
+
+ while (nextLine < endLine) {
+ contentStart = state.skipSpaces(posAfterMarker);
+ max = state.eMarks[nextLine];
+
+ if (contentStart >= max) {
+ // trimming space in "- \n 3" case, indent is 1 here
+ indentAfterMarker = 1;
+ } else {
+ indentAfterMarker = contentStart - posAfterMarker;
+ }
+
+ // If we have more than 4 spaces, the indent is 1
+ // (the rest is just indented code block)
+ if (indentAfterMarker > 4) { indentAfterMarker = 1; }
+
+ // If indent is less than 1, assume that it's one, example:
+ // "-\n test"
+ if (indentAfterMarker < 1) { indentAfterMarker = 1; }
+
+ // " - test"
+ // ^^^^^ - calculating total length of this thing
+ indent = (posAfterMarker - state.bMarks[nextLine]) + indentAfterMarker;
+
+ // Run subparser & write tokens
+ state.tokens.push({
+ type: 'list_item_open',
+ lines: itemLines = [ startLine, 0 ],
+ level: state.level++
+ });
+
+ oldIndent = state.blkIndent;
+ oldTight = state.tight;
+ oldTShift = state.tShift[startLine];
+ oldParentType = state.parentType;
+ state.tShift[startLine] = contentStart - state.bMarks[startLine];
+ state.blkIndent = indent;
+ state.tight = true;
+ state.parentType = 'list';
+
+ state.parser.tokenize(state, startLine, endLine, true);
+
+ // If any of list item is tight, mark list as tight
+ if (!state.tight || prevEmptyEnd) {
+ tight = false;
+ }
+ // Item become loose if finish with empty line,
+ // but we should filter last element, because it means list finish
+ prevEmptyEnd = (state.line - startLine) > 1 && state.isEmpty(state.line - 1);
+
+ state.blkIndent = oldIndent;
+ state.tShift[startLine] = oldTShift;
+ state.tight = oldTight;
+ state.parentType = oldParentType;
+
+ state.tokens.push({
+ type: 'list_item_close',
+ level: --state.level
+ });
+
+ nextLine = startLine = state.line;
+ itemLines[1] = nextLine;
+ contentStart = state.bMarks[startLine];
+
+ if (nextLine >= endLine) { break; }
+
+ if (state.isEmpty(nextLine)) {
+ break;
+ }
+
+ //
+ // Try to check if list is terminated or continued.
+ //
+ if (state.tShift[nextLine] < state.blkIndent) { break; }
+
+ // fail if terminating block found
+ terminate = false;
+ for (i = 0, l = terminatorRules.length; i < l; i++) {
+ if (terminatorRules[i](state, nextLine, endLine, true)) {
+ terminate = true;
+ break;
+ }
+ }
+ if (terminate) { break; }
+
+ // fail if list has another type
+ if (isOrdered) {
+ posAfterMarker = skipOrderedListMarker(state, nextLine);
+ if (posAfterMarker < 0) { break; }
+ } else {
+ posAfterMarker = skipBulletListMarker(state, nextLine);
+ if (posAfterMarker < 0) { break; }
+ }
+
+ if (markerCharCode !== state.src.charCodeAt(posAfterMarker - 1)) { break; }
+ }
+
+ // Finilize list
+ state.tokens.push({
+ type: isOrdered ? 'ordered_list_close' : 'bullet_list_close',
+ level: --state.level
+ });
+ listLines[1] = nextLine;
+
+ state.line = nextLine;
+
+ // mark paragraphs tight if needed
+ if (tight) {
+ markTightParagraphs(state, listTokIdx);
+ }
+
+ return true;
+}
+
+// Process footnote reference list
+
+function footnote(state, startLine, endLine, silent) {
+ var oldBMark, oldTShift, oldParentType, pos, label,
+ start = state.bMarks[startLine] + state.tShift[startLine],
+ max = state.eMarks[startLine];
+
+ // line should be at least 5 chars - "[^x]:"
+ if (start + 4 > max) { return false; }
+
+ if (state.src.charCodeAt(start) !== 0x5B/* [ */) { return false; }
+ if (state.src.charCodeAt(start + 1) !== 0x5E/* ^ */) { return false; }
+ if (state.level >= state.options.maxNesting) { return false; }
+
+ for (pos = start + 2; pos < max; pos++) {
+ if (state.src.charCodeAt(pos) === 0x20) { return false; }
+ if (state.src.charCodeAt(pos) === 0x5D /* ] */) {
+ break;
+ }
+ }
+
+ if (pos === start + 2) { return false; } // no empty footnote labels
+ if (pos + 1 >= max || state.src.charCodeAt(++pos) !== 0x3A /* : */) { return false; }
+ if (silent) { return true; }
+ pos++;
+
+ if (!state.env.footnotes) { state.env.footnotes = {}; }
+ if (!state.env.footnotes.refs) { state.env.footnotes.refs = {}; }
+ label = state.src.slice(start + 2, pos - 2);
+ state.env.footnotes.refs[':' + label] = -1;
+
+ state.tokens.push({
+ type: 'footnote_reference_open',
+ label: label,
+ level: state.level++
+ });
+
+ oldBMark = state.bMarks[startLine];
+ oldTShift = state.tShift[startLine];
+ oldParentType = state.parentType;
+ state.tShift[startLine] = state.skipSpaces(pos) - pos;
+ state.bMarks[startLine] = pos;
+ state.blkIndent += 4;
+ state.parentType = 'footnote';
+
+ if (state.tShift[startLine] < state.blkIndent) {
+ state.tShift[startLine] += state.blkIndent;
+ state.bMarks[startLine] -= state.blkIndent;
+ }
+
+ state.parser.tokenize(state, startLine, endLine, true);
+
+ state.parentType = oldParentType;
+ state.blkIndent -= 4;
+ state.tShift[startLine] = oldTShift;
+ state.bMarks[startLine] = oldBMark;
+
+ state.tokens.push({
+ type: 'footnote_reference_close',
+ level: --state.level
+ });
+
+ return true;
+}
+
+// heading (#, ##, ...)
+
+function heading(state, startLine, endLine, silent) {
+ var ch, level, tmp,
+ pos = state.bMarks[startLine] + state.tShift[startLine],
+ max = state.eMarks[startLine];
+
+ if (pos >= max) { return false; }
+
+ ch = state.src.charCodeAt(pos);
+
+ if (ch !== 0x23/* # */ || pos >= max) { return false; }
+
+ // count heading level
+ level = 1;
+ ch = state.src.charCodeAt(++pos);
+ while (ch === 0x23/* # */ && pos < max && level <= 6) {
+ level++;
+ ch = state.src.charCodeAt(++pos);
+ }
+
+ if (level > 6 || (pos < max && ch !== 0x20/* space */)) { return false; }
+
+ if (silent) { return true; }
+
+ // Let's cut tails like ' ### ' from the end of string
+
+ max = state.skipCharsBack(max, 0x20, pos); // space
+ tmp = state.skipCharsBack(max, 0x23, pos); // #
+ if (tmp > pos && state.src.charCodeAt(tmp - 1) === 0x20/* space */) {
+ max = tmp;
+ }
+
+ state.line = startLine + 1;
+
+ state.tokens.push({ type: 'heading_open',
+ hLevel: level,
+ lines: [ startLine, state.line ],
+ level: state.level
+ });
+
+ // only if header is not empty
+ if (pos < max) {
+ state.tokens.push({
+ type: 'inline',
+ content: state.src.slice(pos, max).trim(),
+ level: state.level + 1,
+ lines: [ startLine, state.line ],
+ children: []
+ });
+ }
+ state.tokens.push({ type: 'heading_close', hLevel: level, level: state.level });
+
+ return true;
+}
+
+// lheading (---, ===)
+
+function lheading(state, startLine, endLine/*, silent*/) {
+ var marker, pos, max,
+ next = startLine + 1;
+
+ if (next >= endLine) { return false; }
+ if (state.tShift[next] < state.blkIndent) { return false; }
+
+ // Scan next line
+
+ if (state.tShift[next] - state.blkIndent > 3) { return false; }
+
+ pos = state.bMarks[next] + state.tShift[next];
+ max = state.eMarks[next];
+
+ if (pos >= max) { return false; }
+
+ marker = state.src.charCodeAt(pos);
+
+ if (marker !== 0x2D/* - */ && marker !== 0x3D/* = */) { return false; }
+
+ pos = state.skipChars(pos, marker);
+
+ pos = state.skipSpaces(pos);
+
+ if (pos < max) { return false; }
+
+ pos = state.bMarks[startLine] + state.tShift[startLine];
+
+ state.line = next + 1;
+ state.tokens.push({
+ type: 'heading_open',
+ hLevel: marker === 0x3D/* = */ ? 1 : 2,
+ lines: [ startLine, state.line ],
+ level: state.level
+ });
+ state.tokens.push({
+ type: 'inline',
+ content: state.src.slice(pos, state.eMarks[startLine]).trim(),
+ level: state.level + 1,
+ lines: [ startLine, state.line - 1 ],
+ children: []
+ });
+ state.tokens.push({
+ type: 'heading_close',
+ hLevel: marker === 0x3D/* = */ ? 1 : 2,
+ level: state.level
+ });
+
+ return true;
+}
+
+// List of valid html blocks names, accorting to commonmark spec
+// http://jgm.github.io/CommonMark/spec.html#html-blocks
+
+var html_blocks = {};
+
+[
+ 'article',
+ 'aside',
+ 'button',
+ 'blockquote',
+ 'body',
+ 'canvas',
+ 'caption',
+ 'col',
+ 'colgroup',
+ 'dd',
+ 'div',
+ 'dl',
+ 'dt',
+ 'embed',
+ 'fieldset',
+ 'figcaption',
+ 'figure',
+ 'footer',
+ 'form',
+ 'h1',
+ 'h2',
+ 'h3',
+ 'h4',
+ 'h5',
+ 'h6',
+ 'header',
+ 'hgroup',
+ 'hr',
+ 'iframe',
+ 'li',
+ 'map',
+ 'object',
+ 'ol',
+ 'output',
+ 'p',
+ 'pre',
+ 'progress',
+ 'script',
+ 'section',
+ 'style',
+ 'table',
+ 'tbody',
+ 'td',
+ 'textarea',
+ 'tfoot',
+ 'th',
+ 'tr',
+ 'thead',
+ 'ul',
+ 'video'
+].forEach(function (name) { html_blocks[name] = true; });
+
+// HTML block
+
+
+var HTML_TAG_OPEN_RE = /^<([a-zA-Z]{1,15})[\s\/>]/;
+var HTML_TAG_CLOSE_RE = /^<\/([a-zA-Z]{1,15})[\s>]/;
+
+function isLetter$1(ch) {
+ /*eslint no-bitwise:0*/
+ var lc = ch | 0x20; // to lower case
+ return (lc >= 0x61/* a */) && (lc <= 0x7a/* z */);
+}
+
+function htmlblock(state, startLine, endLine, silent) {
+ var ch, match, nextLine,
+ pos = state.bMarks[startLine],
+ max = state.eMarks[startLine],
+ shift = state.tShift[startLine];
+
+ pos += shift;
+
+ if (!state.options.html) { return false; }
+
+ if (shift > 3 || pos + 2 >= max) { return false; }
+
+ if (state.src.charCodeAt(pos) !== 0x3C/* < */) { return false; }
+
+ ch = state.src.charCodeAt(pos + 1);
+
+ if (ch === 0x21/* ! */ || ch === 0x3F/* ? */) {
+ // Directive start / comment start / processing instruction start
+ if (silent) { return true; }
+
+ } else if (ch === 0x2F/* / */ || isLetter$1(ch)) {
+
+ // Probably start or end of tag
+ if (ch === 0x2F/* \ */) {
+ // closing tag
+ match = state.src.slice(pos, max).match(HTML_TAG_CLOSE_RE);
+ if (!match) { return false; }
+ } else {
+ // opening tag
+ match = state.src.slice(pos, max).match(HTML_TAG_OPEN_RE);
+ if (!match) { return false; }
+ }
+ // Make sure tag name is valid
+ if (html_blocks[match[1].toLowerCase()] !== true) { return false; }
+ if (silent) { return true; }
+
+ } else {
+ return false;
+ }
+
+ // If we are here - we detected HTML block.
+ // Let's roll down till empty line (block end).
+ nextLine = startLine + 1;
+ while (nextLine < state.lineMax && !state.isEmpty(nextLine)) {
+ nextLine++;
+ }
+
+ state.line = nextLine;
+ state.tokens.push({
+ type: 'htmlblock',
+ level: state.level,
+ lines: [ startLine, state.line ],
+ content: state.getLines(startLine, nextLine, 0, true)
+ });
+
+ return true;
+}
+
+// GFM table, non-standard
+
+function getLine(state, line) {
+ var pos = state.bMarks[line] + state.blkIndent,
+ max = state.eMarks[line];
+
+ return state.src.substr(pos, max - pos);
+}
+
+function table(state, startLine, endLine, silent) {
+ var ch, lineText, pos, i, nextLine, rows, cell,
+ aligns, t, tableLines, tbodyLines;
+
+ // should have at least three lines
+ if (startLine + 2 > endLine) { return false; }
+
+ nextLine = startLine + 1;
+
+ if (state.tShift[nextLine] < state.blkIndent) { return false; }
+
+ // first character of the second line should be '|' or '-'
+
+ pos = state.bMarks[nextLine] + state.tShift[nextLine];
+ if (pos >= state.eMarks[nextLine]) { return false; }
+
+ ch = state.src.charCodeAt(pos);
+ if (ch !== 0x7C/* | */ && ch !== 0x2D/* - */ && ch !== 0x3A/* : */) { return false; }
+
+ lineText = getLine(state, startLine + 1);
+ if (!/^[-:| ]+$/.test(lineText)) { return false; }
+
+ rows = lineText.split('|');
+ if (rows <= 2) { return false; }
+ aligns = [];
+ for (i = 0; i < rows.length; i++) {
+ t = rows[i].trim();
+ if (!t) {
+ // allow empty columns before and after table, but not in between columns;
+ // e.g. allow ` |---| `, disallow ` ---||--- `
+ if (i === 0 || i === rows.length - 1) {
+ continue;
+ } else {
+ return false;
+ }
+ }
+
+ if (!/^:?-+:?$/.test(t)) { return false; }
+ if (t.charCodeAt(t.length - 1) === 0x3A/* : */) {
+ aligns.push(t.charCodeAt(0) === 0x3A/* : */ ? 'center' : 'right');
+ } else if (t.charCodeAt(0) === 0x3A/* : */) {
+ aligns.push('left');
+ } else {
+ aligns.push('');
+ }
+ }
+
+ lineText = getLine(state, startLine).trim();
+ if (lineText.indexOf('|') === -1) { return false; }
+ rows = lineText.replace(/^\||\|$/g, '').split('|');
+ if (aligns.length !== rows.length) { return false; }
+ if (silent) { return true; }
+
+ state.tokens.push({
+ type: 'table_open',
+ lines: tableLines = [ startLine, 0 ],
+ level: state.level++
+ });
+ state.tokens.push({
+ type: 'thead_open',
+ lines: [ startLine, startLine + 1 ],
+ level: state.level++
+ });
+
+ state.tokens.push({
+ type: 'tr_open',
+ lines: [ startLine, startLine + 1 ],
+ level: state.level++
+ });
+ for (i = 0; i < rows.length; i++) {
+ state.tokens.push({
+ type: 'th_open',
+ align: aligns[i],
+ lines: [ startLine, startLine + 1 ],
+ level: state.level++
+ });
+ state.tokens.push({
+ type: 'inline',
+ content: rows[i].trim(),
+ lines: [ startLine, startLine + 1 ],
+ level: state.level,
+ children: []
+ });
+ state.tokens.push({ type: 'th_close', level: --state.level });
+ }
+ state.tokens.push({ type: 'tr_close', level: --state.level });
+ state.tokens.push({ type: 'thead_close', level: --state.level });
+
+ state.tokens.push({
+ type: 'tbody_open',
+ lines: tbodyLines = [ startLine + 2, 0 ],
+ level: state.level++
+ });
+
+ for (nextLine = startLine + 2; nextLine < endLine; nextLine++) {
+ if (state.tShift[nextLine] < state.blkIndent) { break; }
+
+ lineText = getLine(state, nextLine).trim();
+ if (lineText.indexOf('|') === -1) { break; }
+ rows = lineText.replace(/^\||\|$/g, '').split('|');
+
+ state.tokens.push({ type: 'tr_open', level: state.level++ });
+ for (i = 0; i < rows.length; i++) {
+ state.tokens.push({ type: 'td_open', align: aligns[i], level: state.level++ });
+ // 0x7c === '|'
+ cell = rows[i].substring(
+ rows[i].charCodeAt(0) === 0x7c ? 1 : 0,
+ rows[i].charCodeAt(rows[i].length - 1) === 0x7c ? rows[i].length - 1 : rows[i].length
+ ).trim();
+ state.tokens.push({
+ type: 'inline',
+ content: cell,
+ level: state.level,
+ children: []
+ });
+ state.tokens.push({ type: 'td_close', level: --state.level });
+ }
+ state.tokens.push({ type: 'tr_close', level: --state.level });
+ }
+ state.tokens.push({ type: 'tbody_close', level: --state.level });
+ state.tokens.push({ type: 'table_close', level: --state.level });
+
+ tableLines[1] = tbodyLines[1] = nextLine;
+ state.line = nextLine;
+ return true;
+}
+
+// Definition lists
+
+// Search `[:~][\n ]`, returns next pos after marker on success
+// or -1 on fail.
+function skipMarker(state, line) {
+ var pos, marker,
+ start = state.bMarks[line] + state.tShift[line],
+ max = state.eMarks[line];
+
+ if (start >= max) { return -1; }
+
+ // Check bullet
+ marker = state.src.charCodeAt(start++);
+ if (marker !== 0x7E/* ~ */ && marker !== 0x3A/* : */) { return -1; }
+
+ pos = state.skipSpaces(start);
+
+ // require space after ":"
+ if (start === pos) { return -1; }
+
+ // no empty definitions, e.g. " : "
+ if (pos >= max) { return -1; }
+
+ return pos;
+}
+
+function markTightParagraphs$1(state, idx) {
+ var i, l,
+ level = state.level + 2;
+
+ for (i = idx + 2, l = state.tokens.length - 2; i < l; i++) {
+ if (state.tokens[i].level === level && state.tokens[i].type === 'paragraph_open') {
+ state.tokens[i + 2].tight = true;
+ state.tokens[i].tight = true;
+ i += 2;
+ }
+ }
+}
+
+function deflist(state, startLine, endLine, silent) {
+ var contentStart,
+ ddLine,
+ dtLine,
+ itemLines,
+ listLines,
+ listTokIdx,
+ nextLine,
+ oldIndent,
+ oldDDIndent,
+ oldParentType,
+ oldTShift,
+ oldTight,
+ prevEmptyEnd,
+ tight;
+
+ if (silent) {
+ // quirk: validation mode validates a dd block only, not a whole deflist
+ if (state.ddIndent < 0) { return false; }
+ return skipMarker(state, startLine) >= 0;
+ }
+
+ nextLine = startLine + 1;
+ if (state.isEmpty(nextLine)) {
+ if (++nextLine > endLine) { return false; }
+ }
+
+ if (state.tShift[nextLine] < state.blkIndent) { return false; }
+ contentStart = skipMarker(state, nextLine);
+ if (contentStart < 0) { return false; }
+
+ if (state.level >= state.options.maxNesting) { return false; }
+
+ // Start list
+ listTokIdx = state.tokens.length;
+
+ state.tokens.push({
+ type: 'dl_open',
+ lines: listLines = [ startLine, 0 ],
+ level: state.level++
+ });
+
+ //
+ // Iterate list items
+ //
+
+ dtLine = startLine;
+ ddLine = nextLine;
+
+ // One definition list can contain multiple DTs,
+ // and one DT can be followed by multiple DDs.
+ //
+ // Thus, there is two loops here, and label is
+ // needed to break out of the second one
+ //
+ /*eslint no-labels:0,block-scoped-var:0*/
+ OUTER:
+ for (;;) {
+ tight = true;
+ prevEmptyEnd = false;
+
+ state.tokens.push({
+ type: 'dt_open',
+ lines: [ dtLine, dtLine ],
+ level: state.level++
+ });
+ state.tokens.push({
+ type: 'inline',
+ content: state.getLines(dtLine, dtLine + 1, state.blkIndent, false).trim(),
+ level: state.level + 1,
+ lines: [ dtLine, dtLine ],
+ children: []
+ });
+ state.tokens.push({
+ type: 'dt_close',
+ level: --state.level
+ });
+
+ for (;;) {
+ state.tokens.push({
+ type: 'dd_open',
+ lines: itemLines = [ nextLine, 0 ],
+ level: state.level++
+ });
+
+ oldTight = state.tight;
+ oldDDIndent = state.ddIndent;
+ oldIndent = state.blkIndent;
+ oldTShift = state.tShift[ddLine];
+ oldParentType = state.parentType;
+ state.blkIndent = state.ddIndent = state.tShift[ddLine] + 2;
+ state.tShift[ddLine] = contentStart - state.bMarks[ddLine];
+ state.tight = true;
+ state.parentType = 'deflist';
+
+ state.parser.tokenize(state, ddLine, endLine, true);
+
+ // If any of list item is tight, mark list as tight
+ if (!state.tight || prevEmptyEnd) {
+ tight = false;
+ }
+ // Item become loose if finish with empty line,
+ // but we should filter last element, because it means list finish
+ prevEmptyEnd = (state.line - ddLine) > 1 && state.isEmpty(state.line - 1);
+
+ state.tShift[ddLine] = oldTShift;
+ state.tight = oldTight;
+ state.parentType = oldParentType;
+ state.blkIndent = oldIndent;
+ state.ddIndent = oldDDIndent;
+
+ state.tokens.push({
+ type: 'dd_close',
+ level: --state.level
+ });
+
+ itemLines[1] = nextLine = state.line;
+
+ if (nextLine >= endLine) { break OUTER; }
+
+ if (state.tShift[nextLine] < state.blkIndent) { break OUTER; }
+ contentStart = skipMarker(state, nextLine);
+ if (contentStart < 0) { break; }
+
+ ddLine = nextLine;
+
+ // go to the next loop iteration:
+ // insert DD tag and repeat checking
+ }
+
+ if (nextLine >= endLine) { break; }
+ dtLine = nextLine;
+
+ if (state.isEmpty(dtLine)) { break; }
+ if (state.tShift[dtLine] < state.blkIndent) { break; }
+
+ ddLine = dtLine + 1;
+ if (ddLine >= endLine) { break; }
+ if (state.isEmpty(ddLine)) { ddLine++; }
+ if (ddLine >= endLine) { break; }
+
+ if (state.tShift[ddLine] < state.blkIndent) { break; }
+ contentStart = skipMarker(state, ddLine);
+ if (contentStart < 0) { break; }
+
+ // go to the next loop iteration:
+ // insert DT and DD tags and repeat checking
+ }
+
+ // Finilize list
+ state.tokens.push({
+ type: 'dl_close',
+ level: --state.level
+ });
+ listLines[1] = nextLine;
+
+ state.line = nextLine;
+
+ // mark paragraphs tight if needed
+ if (tight) {
+ markTightParagraphs$1(state, listTokIdx);
+ }
+
+ return true;
+}
+
+// Paragraph
+
+function paragraph(state, startLine/*, endLine*/) {
+ var endLine, content, terminate, i, l,
+ nextLine = startLine + 1,
+ terminatorRules;
+
+ endLine = state.lineMax;
+
+ // jump line-by-line until empty one or EOF
+ if (nextLine < endLine && !state.isEmpty(nextLine)) {
+ terminatorRules = state.parser.ruler.getRules('paragraph');
+
+ for (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) {
+ // this would be a code block normally, but after paragraph
+ // it's considered a lazy continuation regardless of what's there
+ if (state.tShift[nextLine] - state.blkIndent > 3) { continue; }
+
+ // Some tags can terminate paragraph without empty line.
+ terminate = false;
+ for (i = 0, l = terminatorRules.length; i < l; i++) {
+ if (terminatorRules[i](state, nextLine, endLine, true)) {
+ terminate = true;
+ break;
+ }
+ }
+ if (terminate) { break; }
+ }
+ }
+
+ content = state.getLines(startLine, nextLine, state.blkIndent, false).trim();
+
+ state.line = nextLine;
+ if (content.length) {
+ state.tokens.push({
+ type: 'paragraph_open',
+ tight: false,
+ lines: [ startLine, state.line ],
+ level: state.level
+ });
+ state.tokens.push({
+ type: 'inline',
+ content: content,
+ level: state.level + 1,
+ lines: [ startLine, state.line ],
+ children: []
+ });
+ state.tokens.push({
+ type: 'paragraph_close',
+ tight: false,
+ level: state.level
+ });
+ }
+
+ return true;
+}
+
+/**
+ * Parser rules
+ */
+
+var _rules$1 = [
+ [ 'code', code ],
+ [ 'fences', fences, [ 'paragraph', 'blockquote', 'list' ] ],
+ [ 'blockquote', blockquote, [ 'paragraph', 'blockquote', 'list' ] ],
+ [ 'hr', hr, [ 'paragraph', 'blockquote', 'list' ] ],
+ [ 'list', list, [ 'paragraph', 'blockquote' ] ],
+ [ 'footnote', footnote, [ 'paragraph' ] ],
+ [ 'heading', heading, [ 'paragraph', 'blockquote' ] ],
+ [ 'lheading', lheading ],
+ [ 'htmlblock', htmlblock, [ 'paragraph', 'blockquote' ] ],
+ [ 'table', table, [ 'paragraph' ] ],
+ [ 'deflist', deflist, [ 'paragraph' ] ],
+ [ 'paragraph', paragraph ]
+];
+
+/**
+ * Block Parser class
+ *
+ * @api private
+ */
+
+function ParserBlock() {
+ this.ruler = new Ruler();
+ for (var i = 0; i < _rules$1.length; i++) {
+ this.ruler.push(_rules$1[i][0], _rules$1[i][1], {
+ alt: (_rules$1[i][2] || []).slice()
+ });
+ }
+}
+
+/**
+ * Generate tokens for the given input range.
+ *
+ * @param {Object} `state` Has properties like `src`, `parser`, `options` etc
+ * @param {Number} `startLine`
+ * @param {Number} `endLine`
+ * @api private
+ */
+
+ParserBlock.prototype.tokenize = function (state, startLine, endLine) {
+ var rules = this.ruler.getRules('');
+ var len = rules.length;
+ var line = startLine;
+ var hasEmptyLines = false;
+ var ok, i;
+
+ while (line < endLine) {
+ state.line = line = state.skipEmptyLines(line);
+ if (line >= endLine) {
+ break;
+ }
+
+ // Termination condition for nested calls.
+ // Nested calls currently used for blockquotes & lists
+ if (state.tShift[line] < state.blkIndent) {
+ break;
+ }
+
+ // Try all possible rules.
+ // On success, rule should:
+ //
+ // - update `state.line`
+ // - update `state.tokens`
+ // - return true
+
+ for (i = 0; i < len; i++) {
+ ok = rules[i](state, line, endLine, false);
+ if (ok) {
+ break;
+ }
+ }
+
+ // set state.tight iff we had an empty line before current tag
+ // i.e. latest empty line should not count
+ state.tight = !hasEmptyLines;
+
+ // paragraph might "eat" one newline after it in nested lists
+ if (state.isEmpty(state.line - 1)) {
+ hasEmptyLines = true;
+ }
+
+ line = state.line;
+
+ if (line < endLine && state.isEmpty(line)) {
+ hasEmptyLines = true;
+ line++;
+
+ // two empty lines should stop the parser in list mode
+ if (line < endLine && state.parentType === 'list' && state.isEmpty(line)) { break; }
+ state.line = line;
+ }
+ }
+};
+
+var TABS_SCAN_RE = /[\n\t]/g;
+var NEWLINES_RE = /\r[\n\u0085]|[\u2424\u2028\u0085]/g;
+var SPACES_RE = /\u00a0/g;
+
+/**
+ * Tokenize the given `str`.
+ *
+ * @param {String} `str` Source string
+ * @param {Object} `options`
+ * @param {Object} `env`
+ * @param {Array} `outTokens`
+ * @api private
+ */
+
+ParserBlock.prototype.parse = function (str, options, env, outTokens) {
+ var state, lineStart = 0, lastTabPos = 0;
+ if (!str) { return []; }
+
+ // Normalize spaces
+ str = str.replace(SPACES_RE, ' ');
+
+ // Normalize newlines
+ str = str.replace(NEWLINES_RE, '\n');
+
+ // Replace tabs with proper number of spaces (1..4)
+ if (str.indexOf('\t') >= 0) {
+ str = str.replace(TABS_SCAN_RE, function (match, offset) {
+ var result;
+ if (str.charCodeAt(offset) === 0x0A) {
+ lineStart = offset + 1;
+ lastTabPos = 0;
+ return match;
+ }
+ result = ' '.slice((offset - lineStart - lastTabPos) % 4);
+ lastTabPos = offset - lineStart + 1;
+ return result;
+ });
+ }
+
+ state = new StateBlock(str, this, options, env, outTokens);
+ this.tokenize(state, state.line, state.lineMax);
+};
+
+// Skip text characters for text token, place those to pending buffer
+// and increment current pos
+
+// Rule to skip pure text
+// '{}$%@~+=:' reserved for extentions
+
+function isTerminatorChar(ch) {
+ switch (ch) {
+ case 0x0A/* \n */:
+ case 0x5C/* \ */:
+ case 0x60/* ` */:
+ case 0x2A/* * */:
+ case 0x5F/* _ */:
+ case 0x5E/* ^ */:
+ case 0x5B/* [ */:
+ case 0x5D/* ] */:
+ case 0x21/* ! */:
+ case 0x26/* & */:
+ case 0x3C/* < */:
+ case 0x3E/* > */:
+ case 0x7B/* { */:
+ case 0x7D/* } */:
+ case 0x24/* $ */:
+ case 0x25/* % */:
+ case 0x40/* @ */:
+ case 0x7E/* ~ */:
+ case 0x2B/* + */:
+ case 0x3D/* = */:
+ case 0x3A/* : */:
+ return true;
+ default:
+ return false;
+ }
+}
+
+function text(state, silent) {
+ var pos = state.pos;
+
+ while (pos < state.posMax && !isTerminatorChar(state.src.charCodeAt(pos))) {
+ pos++;
+ }
+
+ if (pos === state.pos) { return false; }
+
+ if (!silent) { state.pending += state.src.slice(state.pos, pos); }
+
+ state.pos = pos;
+
+ return true;
+}
+
+// Proceess '\n'
+
+function newline(state, silent) {
+ var pmax, max, pos = state.pos;
+
+ if (state.src.charCodeAt(pos) !== 0x0A/* \n */) { return false; }
+
+ pmax = state.pending.length - 1;
+ max = state.posMax;
+
+ // ' \n' -> hardbreak
+ // Lookup in pending chars is bad practice! Don't copy to other rules!
+ // Pending string is stored in concat mode, indexed lookups will cause
+ // convertion to flat mode.
+ if (!silent) {
+ if (pmax >= 0 && state.pending.charCodeAt(pmax) === 0x20) {
+ if (pmax >= 1 && state.pending.charCodeAt(pmax - 1) === 0x20) {
+ // Strip out all trailing spaces on this line.
+ for (var i = pmax - 2; i >= 0; i--) {
+ if (state.pending.charCodeAt(i) !== 0x20) {
+ state.pending = state.pending.substring(0, i + 1);
+ break;
+ }
+ }
+ state.push({
+ type: 'hardbreak',
+ level: state.level
+ });
+ } else {
+ state.pending = state.pending.slice(0, -1);
+ state.push({
+ type: 'softbreak',
+ level: state.level
+ });
+ }
+
+ } else {
+ state.push({
+ type: 'softbreak',
+ level: state.level
+ });
+ }
+ }
+
+ pos++;
+
+ // skip heading spaces for next line
+ while (pos < max && state.src.charCodeAt(pos) === 0x20) { pos++; }
+
+ state.pos = pos;
+ return true;
+}
+
+// Proceess escaped chars and hardbreaks
+
+var ESCAPED = [];
+
+for (var i = 0; i < 256; i++) { ESCAPED.push(0); }
+
+'\\!"#$%&\'()*+,./:;<=>?@[]^_`{|}~-'
+ .split('').forEach(function(ch) { ESCAPED[ch.charCodeAt(0)] = 1; });
+
+
+function escape(state, silent) {
+ var ch, pos = state.pos, max = state.posMax;
+
+ if (state.src.charCodeAt(pos) !== 0x5C/* \ */) { return false; }
+
+ pos++;
+
+ if (pos < max) {
+ ch = state.src.charCodeAt(pos);
+
+ if (ch < 256 && ESCAPED[ch] !== 0) {
+ if (!silent) { state.pending += state.src[pos]; }
+ state.pos += 2;
+ return true;
+ }
+
+ if (ch === 0x0A) {
+ if (!silent) {
+ state.push({
+ type: 'hardbreak',
+ level: state.level
+ });
+ }
+
+ pos++;
+ // skip leading whitespaces from next line
+ while (pos < max && state.src.charCodeAt(pos) === 0x20) { pos++; }
+
+ state.pos = pos;
+ return true;
+ }
+ }
+
+ if (!silent) { state.pending += '\\'; }
+ state.pos++;
+ return true;
+}
+
+// Parse backticks
+
+function backticks(state, silent) {
+ var start, max, marker, matchStart, matchEnd,
+ pos = state.pos,
+ ch = state.src.charCodeAt(pos);
+
+ if (ch !== 0x60/* ` */) { return false; }
+
+ start = pos;
+ pos++;
+ max = state.posMax;
+
+ while (pos < max && state.src.charCodeAt(pos) === 0x60/* ` */) { pos++; }
+
+ marker = state.src.slice(start, pos);
+
+ matchStart = matchEnd = pos;
+
+ while ((matchStart = state.src.indexOf('`', matchEnd)) !== -1) {
+ matchEnd = matchStart + 1;
+
+ while (matchEnd < max && state.src.charCodeAt(matchEnd) === 0x60/* ` */) { matchEnd++; }
+
+ if (matchEnd - matchStart === marker.length) {
+ if (!silent) {
+ state.push({
+ type: 'code',
+ content: state.src.slice(pos, matchStart)
+ .replace(/[ \n]+/g, ' ')
+ .trim(),
+ block: false,
+ level: state.level
+ });
+ }
+ state.pos = matchEnd;
+ return true;
+ }
+ }
+
+ if (!silent) { state.pending += marker; }
+ state.pos += marker.length;
+ return true;
+}
+
+// Process ~~deleted text~~
+
+function del(state, silent) {
+ var found,
+ pos,
+ stack,
+ max = state.posMax,
+ start = state.pos,
+ lastChar,
+ nextChar;
+
+ if (state.src.charCodeAt(start) !== 0x7E/* ~ */) { return false; }
+ if (silent) { return false; } // don't run any pairs in validation mode
+ if (start + 4 >= max) { return false; }
+ if (state.src.charCodeAt(start + 1) !== 0x7E/* ~ */) { return false; }
+ if (state.level >= state.options.maxNesting) { return false; }
+
+ lastChar = start > 0 ? state.src.charCodeAt(start - 1) : -1;
+ nextChar = state.src.charCodeAt(start + 2);
+
+ if (lastChar === 0x7E/* ~ */) { return false; }
+ if (nextChar === 0x7E/* ~ */) { return false; }
+ if (nextChar === 0x20 || nextChar === 0x0A) { return false; }
+
+ pos = start + 2;
+ while (pos < max && state.src.charCodeAt(pos) === 0x7E/* ~ */) { pos++; }
+ if (pos > start + 3) {
+ // sequence of 4+ markers taking as literal, same as in a emphasis
+ state.pos += pos - start;
+ if (!silent) { state.pending += state.src.slice(start, pos); }
+ return true;
+ }
+
+ state.pos = start + 2;
+ stack = 1;
+
+ while (state.pos + 1 < max) {
+ if (state.src.charCodeAt(state.pos) === 0x7E/* ~ */) {
+ if (state.src.charCodeAt(state.pos + 1) === 0x7E/* ~ */) {
+ lastChar = state.src.charCodeAt(state.pos - 1);
+ nextChar = state.pos + 2 < max ? state.src.charCodeAt(state.pos + 2) : -1;
+ if (nextChar !== 0x7E/* ~ */ && lastChar !== 0x7E/* ~ */) {
+ if (lastChar !== 0x20 && lastChar !== 0x0A) {
+ // closing '~~'
+ stack--;
+ } else if (nextChar !== 0x20 && nextChar !== 0x0A) {
+ // opening '~~'
+ stack++;
+ } // else {
+ // // standalone ' ~~ ' indented with spaces
+ // }
+ if (stack <= 0) {
+ found = true;
+ break;
+ }
+ }
+ }
+ }
+
+ state.parser.skipToken(state);
+ }
+
+ if (!found) {
+ // parser failed to find ending tag, so it's not valid emphasis
+ state.pos = start;
+ return false;
+ }
+
+ // found!
+ state.posMax = state.pos;
+ state.pos = start + 2;
+
+ if (!silent) {
+ state.push({ type: 'del_open', level: state.level++ });
+ state.parser.tokenize(state);
+ state.push({ type: 'del_close', level: --state.level });
+ }
+
+ state.pos = state.posMax + 2;
+ state.posMax = max;
+ return true;
+}
+
+// Process ++inserted text++
+
+function ins(state, silent) {
+ var found,
+ pos,
+ stack,
+ max = state.posMax,
+ start = state.pos,
+ lastChar,
+ nextChar;
+
+ if (state.src.charCodeAt(start) !== 0x2B/* + */) { return false; }
+ if (silent) { return false; } // don't run any pairs in validation mode
+ if (start + 4 >= max) { return false; }
+ if (state.src.charCodeAt(start + 1) !== 0x2B/* + */) { return false; }
+ if (state.level >= state.options.maxNesting) { return false; }
+
+ lastChar = start > 0 ? state.src.charCodeAt(start - 1) : -1;
+ nextChar = state.src.charCodeAt(start + 2);
+
+ if (lastChar === 0x2B/* + */) { return false; }
+ if (nextChar === 0x2B/* + */) { return false; }
+ if (nextChar === 0x20 || nextChar === 0x0A) { return false; }
+
+ pos = start + 2;
+ while (pos < max && state.src.charCodeAt(pos) === 0x2B/* + */) { pos++; }
+ if (pos !== start + 2) {
+ // sequence of 3+ markers taking as literal, same as in a emphasis
+ state.pos += pos - start;
+ if (!silent) { state.pending += state.src.slice(start, pos); }
+ return true;
+ }
+
+ state.pos = start + 2;
+ stack = 1;
+
+ while (state.pos + 1 < max) {
+ if (state.src.charCodeAt(state.pos) === 0x2B/* + */) {
+ if (state.src.charCodeAt(state.pos + 1) === 0x2B/* + */) {
+ lastChar = state.src.charCodeAt(state.pos - 1);
+ nextChar = state.pos + 2 < max ? state.src.charCodeAt(state.pos + 2) : -1;
+ if (nextChar !== 0x2B/* + */ && lastChar !== 0x2B/* + */) {
+ if (lastChar !== 0x20 && lastChar !== 0x0A) {
+ // closing '++'
+ stack--;
+ } else if (nextChar !== 0x20 && nextChar !== 0x0A) {
+ // opening '++'
+ stack++;
+ } // else {
+ // // standalone ' ++ ' indented with spaces
+ // }
+ if (stack <= 0) {
+ found = true;
+ break;
+ }
+ }
+ }
+ }
+
+ state.parser.skipToken(state);
+ }
+
+ if (!found) {
+ // parser failed to find ending tag, so it's not valid emphasis
+ state.pos = start;
+ return false;
+ }
+
+ // found!
+ state.posMax = state.pos;
+ state.pos = start + 2;
+
+ if (!silent) {
+ state.push({ type: 'ins_open', level: state.level++ });
+ state.parser.tokenize(state);
+ state.push({ type: 'ins_close', level: --state.level });
+ }
+
+ state.pos = state.posMax + 2;
+ state.posMax = max;
+ return true;
+}
+
+// Process ==highlighted text==
+
+function mark(state, silent) {
+ var found,
+ pos,
+ stack,
+ max = state.posMax,
+ start = state.pos,
+ lastChar,
+ nextChar;
+
+ if (state.src.charCodeAt(start) !== 0x3D/* = */) { return false; }
+ if (silent) { return false; } // don't run any pairs in validation mode
+ if (start + 4 >= max) { return false; }
+ if (state.src.charCodeAt(start + 1) !== 0x3D/* = */) { return false; }
+ if (state.level >= state.options.maxNesting) { return false; }
+
+ lastChar = start > 0 ? state.src.charCodeAt(start - 1) : -1;
+ nextChar = state.src.charCodeAt(start + 2);
+
+ if (lastChar === 0x3D/* = */) { return false; }
+ if (nextChar === 0x3D/* = */) { return false; }
+ if (nextChar === 0x20 || nextChar === 0x0A) { return false; }
+
+ pos = start + 2;
+ while (pos < max && state.src.charCodeAt(pos) === 0x3D/* = */) { pos++; }
+ if (pos !== start + 2) {
+ // sequence of 3+ markers taking as literal, same as in a emphasis
+ state.pos += pos - start;
+ if (!silent) { state.pending += state.src.slice(start, pos); }
+ return true;
+ }
+
+ state.pos = start + 2;
+ stack = 1;
+
+ while (state.pos + 1 < max) {
+ if (state.src.charCodeAt(state.pos) === 0x3D/* = */) {
+ if (state.src.charCodeAt(state.pos + 1) === 0x3D/* = */) {
+ lastChar = state.src.charCodeAt(state.pos - 1);
+ nextChar = state.pos + 2 < max ? state.src.charCodeAt(state.pos + 2) : -1;
+ if (nextChar !== 0x3D/* = */ && lastChar !== 0x3D/* = */) {
+ if (lastChar !== 0x20 && lastChar !== 0x0A) {
+ // closing '=='
+ stack--;
+ } else if (nextChar !== 0x20 && nextChar !== 0x0A) {
+ // opening '=='
+ stack++;
+ } // else {
+ // // standalone ' == ' indented with spaces
+ // }
+ if (stack <= 0) {
+ found = true;
+ break;
+ }
+ }
+ }
+ }
+
+ state.parser.skipToken(state);
+ }
+
+ if (!found) {
+ // parser failed to find ending tag, so it's not valid emphasis
+ state.pos = start;
+ return false;
+ }
+
+ // found!
+ state.posMax = state.pos;
+ state.pos = start + 2;
+
+ if (!silent) {
+ state.push({ type: 'mark_open', level: state.level++ });
+ state.parser.tokenize(state);
+ state.push({ type: 'mark_close', level: --state.level });
+ }
+
+ state.pos = state.posMax + 2;
+ state.posMax = max;
+ return true;
+}
+
+// Process *this* and _that_
+
+function isAlphaNum(code) {
+ return (code >= 0x30 /* 0 */ && code <= 0x39 /* 9 */) ||
+ (code >= 0x41 /* A */ && code <= 0x5A /* Z */) ||
+ (code >= 0x61 /* a */ && code <= 0x7A /* z */);
+}
+
+// parse sequence of emphasis markers,
+// "start" should point at a valid marker
+function scanDelims(state, start) {
+ var pos = start, lastChar, nextChar, count,
+ can_open = true,
+ can_close = true,
+ max = state.posMax,
+ marker = state.src.charCodeAt(start);
+
+ lastChar = start > 0 ? state.src.charCodeAt(start - 1) : -1;
+
+ while (pos < max && state.src.charCodeAt(pos) === marker) { pos++; }
+ if (pos >= max) { can_open = false; }
+ count = pos - start;
+
+ if (count >= 4) {
+ // sequence of four or more unescaped markers can't start/end an emphasis
+ can_open = can_close = false;
+ } else {
+ nextChar = pos < max ? state.src.charCodeAt(pos) : -1;
+
+ // check whitespace conditions
+ if (nextChar === 0x20 || nextChar === 0x0A) { can_open = false; }
+ if (lastChar === 0x20 || lastChar === 0x0A) { can_close = false; }
+
+ if (marker === 0x5F /* _ */) {
+ // check if we aren't inside the word
+ if (isAlphaNum(lastChar)) { can_open = false; }
+ if (isAlphaNum(nextChar)) { can_close = false; }
+ }
+ }
+
+ return {
+ can_open: can_open,
+ can_close: can_close,
+ delims: count
+ };
+}
+
+function emphasis(state, silent) {
+ var startCount,
+ count,
+ found,
+ oldCount,
+ newCount,
+ stack,
+ res,
+ max = state.posMax,
+ start = state.pos,
+ marker = state.src.charCodeAt(start);
+
+ if (marker !== 0x5F/* _ */ && marker !== 0x2A /* * */) { return false; }
+ if (silent) { return false; } // don't run any pairs in validation mode
+
+ res = scanDelims(state, start);
+ startCount = res.delims;
+ if (!res.can_open) {
+ state.pos += startCount;
+ if (!silent) { state.pending += state.src.slice(start, state.pos); }
+ return true;
+ }
+
+ if (state.level >= state.options.maxNesting) { return false; }
+
+ state.pos = start + startCount;
+ stack = [ startCount ];
+
+ while (state.pos < max) {
+ if (state.src.charCodeAt(state.pos) === marker) {
+ res = scanDelims(state, state.pos);
+ count = res.delims;
+ if (res.can_close) {
+ oldCount = stack.pop();
+ newCount = count;
+
+ while (oldCount !== newCount) {
+ if (newCount < oldCount) {
+ stack.push(oldCount - newCount);
+ break;
+ }
+
+ // assert(newCount > oldCount)
+ newCount -= oldCount;
+
+ if (stack.length === 0) { break; }
+ state.pos += oldCount;
+ oldCount = stack.pop();
+ }
+
+ if (stack.length === 0) {
+ startCount = oldCount;
+ found = true;
+ break;
+ }
+ state.pos += count;
+ continue;
+ }
+
+ if (res.can_open) { stack.push(count); }
+ state.pos += count;
+ continue;
+ }
+
+ state.parser.skipToken(state);
+ }
+
+ if (!found) {
+ // parser failed to find ending tag, so it's not valid emphasis
+ state.pos = start;
+ return false;
+ }
+
+ // found!
+ state.posMax = state.pos;
+ state.pos = start + startCount;
+
+ if (!silent) {
+ if (startCount === 2 || startCount === 3) {
+ state.push({ type: 'strong_open', level: state.level++ });
+ }
+ if (startCount === 1 || startCount === 3) {
+ state.push({ type: 'em_open', level: state.level++ });
+ }
+
+ state.parser.tokenize(state);
+
+ if (startCount === 1 || startCount === 3) {
+ state.push({ type: 'em_close', level: --state.level });
+ }
+ if (startCount === 2 || startCount === 3) {
+ state.push({ type: 'strong_close', level: --state.level });
+ }
+ }
+
+ state.pos = state.posMax + startCount;
+ state.posMax = max;
+ return true;
+}
+
+// Process ~subscript~
+
+// same as UNESCAPE_MD_RE plus a space
+var UNESCAPE_RE = /\\([ \\!"#$%&'()*+,.\/:;<=>?@[\]^_`{|}~-])/g;
+
+function sub(state, silent) {
+ var found,
+ content,
+ max = state.posMax,
+ start = state.pos;
+
+ if (state.src.charCodeAt(start) !== 0x7E/* ~ */) { return false; }
+ if (silent) { return false; } // don't run any pairs in validation mode
+ if (start + 2 >= max) { return false; }
+ if (state.level >= state.options.maxNesting) { return false; }
+
+ state.pos = start + 1;
+
+ while (state.pos < max) {
+ if (state.src.charCodeAt(state.pos) === 0x7E/* ~ */) {
+ found = true;
+ break;
+ }
+
+ state.parser.skipToken(state);
+ }
+
+ if (!found || start + 1 === state.pos) {
+ state.pos = start;
+ return false;
+ }
+
+ content = state.src.slice(start + 1, state.pos);
+
+ // don't allow unescaped spaces/newlines inside
+ if (content.match(/(^|[^\\])(\\\\)*\s/)) {
+ state.pos = start;
+ return false;
+ }
+
+ // found!
+ state.posMax = state.pos;
+ state.pos = start + 1;
+
+ if (!silent) {
+ state.push({
+ type: 'sub',
+ level: state.level,
+ content: content.replace(UNESCAPE_RE, '$1')
+ });
+ }
+
+ state.pos = state.posMax + 1;
+ state.posMax = max;
+ return true;
+}
+
+// Process ^superscript^
+
+// same as UNESCAPE_MD_RE plus a space
+var UNESCAPE_RE$1 = /\\([ \\!"#$%&'()*+,.\/:;<=>?@[\]^_`{|}~-])/g;
+
+function sup(state, silent) {
+ var found,
+ content,
+ max = state.posMax,
+ start = state.pos;
+
+ if (state.src.charCodeAt(start) !== 0x5E/* ^ */) { return false; }
+ if (silent) { return false; } // don't run any pairs in validation mode
+ if (start + 2 >= max) { return false; }
+ if (state.level >= state.options.maxNesting) { return false; }
+
+ state.pos = start + 1;
+
+ while (state.pos < max) {
+ if (state.src.charCodeAt(state.pos) === 0x5E/* ^ */) {
+ found = true;
+ break;
+ }
+
+ state.parser.skipToken(state);
+ }
+
+ if (!found || start + 1 === state.pos) {
+ state.pos = start;
+ return false;
+ }
+
+ content = state.src.slice(start + 1, state.pos);
+
+ // don't allow unescaped spaces/newlines inside
+ if (content.match(/(^|[^\\])(\\\\)*\s/)) {
+ state.pos = start;
+ return false;
+ }
+
+ // found!
+ state.posMax = state.pos;
+ state.pos = start + 1;
+
+ if (!silent) {
+ state.push({
+ type: 'sup',
+ level: state.level,
+ content: content.replace(UNESCAPE_RE$1, '$1')
+ });
+ }
+
+ state.pos = state.posMax + 1;
+ state.posMax = max;
+ return true;
+}
+
+// Process [links]( "stuff")
+
+
+function links(state, silent) {
+ var labelStart,
+ labelEnd,
+ label,
+ href,
+ title,
+ pos,
+ ref,
+ code,
+ isImage = false,
+ oldPos = state.pos,
+ max = state.posMax,
+ start = state.pos,
+ marker = state.src.charCodeAt(start);
+
+ if (marker === 0x21/* ! */) {
+ isImage = true;
+ marker = state.src.charCodeAt(++start);
+ }
+
+ if (marker !== 0x5B/* [ */) { return false; }
+ if (state.level >= state.options.maxNesting) { return false; }
+
+ labelStart = start + 1;
+ labelEnd = parseLinkLabel(state, start);
+
+ // parser failed to find ']', so it's not a valid link
+ if (labelEnd < 0) { return false; }
+
+ pos = labelEnd + 1;
+ if (pos < max && state.src.charCodeAt(pos) === 0x28/* ( */) {
+ //
+ // Inline link
+ //
+
+ // [link]( "title" )
+ // ^^ skipping these spaces
+ pos++;
+ for (; pos < max; pos++) {
+ code = state.src.charCodeAt(pos);
+ if (code !== 0x20 && code !== 0x0A) { break; }
+ }
+ if (pos >= max) { return false; }
+
+ // [link]( "title" )
+ // ^^^^^^ parsing link destination
+ start = pos;
+ if (parseLinkDestination(state, pos)) {
+ href = state.linkContent;
+ pos = state.pos;
+ } else {
+ href = '';
+ }
+
+ // [link]( "title" )
+ // ^^ skipping these spaces
+ start = pos;
+ for (; pos < max; pos++) {
+ code = state.src.charCodeAt(pos);
+ if (code !== 0x20 && code !== 0x0A) { break; }
+ }
+
+ // [link]( "title" )
+ // ^^^^^^^ parsing link title
+ if (pos < max && start !== pos && parseLinkTitle(state, pos)) {
+ title = state.linkContent;
+ pos = state.pos;
+
+ // [link]( "title" )
+ // ^^ skipping these spaces
+ for (; pos < max; pos++) {
+ code = state.src.charCodeAt(pos);
+ if (code !== 0x20 && code !== 0x0A) { break; }
+ }
+ } else {
+ title = '';
+ }
+
+ if (pos >= max || state.src.charCodeAt(pos) !== 0x29/* ) */) {
+ state.pos = oldPos;
+ return false;
+ }
+ pos++;
+ } else {
+ //
+ // Link reference
+ //
+
+ // do not allow nested reference links
+ if (state.linkLevel > 0) { return false; }
+
+ // [foo] [bar]
+ // ^^ optional whitespace (can include newlines)
+ for (; pos < max; pos++) {
+ code = state.src.charCodeAt(pos);
+ if (code !== 0x20 && code !== 0x0A) { break; }
+ }
+
+ if (pos < max && state.src.charCodeAt(pos) === 0x5B/* [ */) {
+ start = pos + 1;
+ pos = parseLinkLabel(state, pos);
+ if (pos >= 0) {
+ label = state.src.slice(start, pos++);
+ } else {
+ pos = start - 1;
+ }
+ }
+
+ // covers label === '' and label === undefined
+ // (collapsed reference link and shortcut reference link respectively)
+ if (!label) {
+ if (typeof label === 'undefined') {
+ pos = labelEnd + 1;
+ }
+ label = state.src.slice(labelStart, labelEnd);
+ }
+
+ ref = state.env.references[normalizeReference(label)];
+ if (!ref) {
+ state.pos = oldPos;
+ return false;
+ }
+ href = ref.href;
+ title = ref.title;
+ }
+
+ //
+ // We found the end of the link, and know for a fact it's a valid link;
+ // so all that's left to do is to call tokenizer.
+ //
+ if (!silent) {
+ state.pos = labelStart;
+ state.posMax = labelEnd;
+
+ if (isImage) {
+ state.push({
+ type: 'image',
+ src: href,
+ title: title,
+ alt: state.src.substr(labelStart, labelEnd - labelStart),
+ level: state.level
+ });
+ } else {
+ state.push({
+ type: 'link_open',
+ href: href,
+ title: title,
+ level: state.level++
+ });
+ state.linkLevel++;
+ state.parser.tokenize(state);
+ state.linkLevel--;
+ state.push({ type: 'link_close', level: --state.level });
+ }
+ }
+
+ state.pos = pos;
+ state.posMax = max;
+ return true;
+}
+
+// Process inline footnotes (^[...])
+
+
+function footnote_inline(state, silent) {
+ var labelStart,
+ labelEnd,
+ footnoteId,
+ oldLength,
+ max = state.posMax,
+ start = state.pos;
+
+ if (start + 2 >= max) { return false; }
+ if (state.src.charCodeAt(start) !== 0x5E/* ^ */) { return false; }
+ if (state.src.charCodeAt(start + 1) !== 0x5B/* [ */) { return false; }
+ if (state.level >= state.options.maxNesting) { return false; }
+
+ labelStart = start + 2;
+ labelEnd = parseLinkLabel(state, start + 1);
+
+ // parser failed to find ']', so it's not a valid note
+ if (labelEnd < 0) { return false; }
+
+ // We found the end of the link, and know for a fact it's a valid link;
+ // so all that's left to do is to call tokenizer.
+ //
+ if (!silent) {
+ if (!state.env.footnotes) { state.env.footnotes = {}; }
+ if (!state.env.footnotes.list) { state.env.footnotes.list = []; }
+ footnoteId = state.env.footnotes.list.length;
+
+ state.pos = labelStart;
+ state.posMax = labelEnd;
+
+ state.push({
+ type: 'footnote_ref',
+ id: footnoteId,
+ level: state.level
+ });
+ state.linkLevel++;
+ oldLength = state.tokens.length;
+ state.parser.tokenize(state);
+ state.env.footnotes.list[footnoteId] = { tokens: state.tokens.splice(oldLength) };
+ state.linkLevel--;
+ }
+
+ state.pos = labelEnd + 1;
+ state.posMax = max;
+ return true;
+}
+
+// Process footnote references ([^...])
+
+function footnote_ref(state, silent) {
+ var label,
+ pos,
+ footnoteId,
+ footnoteSubId,
+ max = state.posMax,
+ start = state.pos;
+
+ // should be at least 4 chars - "[^x]"
+ if (start + 3 > max) { return false; }
+
+ if (!state.env.footnotes || !state.env.footnotes.refs) { return false; }
+ if (state.src.charCodeAt(start) !== 0x5B/* [ */) { return false; }
+ if (state.src.charCodeAt(start + 1) !== 0x5E/* ^ */) { return false; }
+ if (state.level >= state.options.maxNesting) { return false; }
+
+ for (pos = start + 2; pos < max; pos++) {
+ if (state.src.charCodeAt(pos) === 0x20) { return false; }
+ if (state.src.charCodeAt(pos) === 0x0A) { return false; }
+ if (state.src.charCodeAt(pos) === 0x5D /* ] */) {
+ break;
+ }
+ }
+
+ if (pos === start + 2) { return false; } // no empty footnote labels
+ if (pos >= max) { return false; }
+ pos++;
+
+ label = state.src.slice(start + 2, pos - 1);
+ if (typeof state.env.footnotes.refs[':' + label] === 'undefined') { return false; }
+
+ if (!silent) {
+ if (!state.env.footnotes.list) { state.env.footnotes.list = []; }
+
+ if (state.env.footnotes.refs[':' + label] < 0) {
+ footnoteId = state.env.footnotes.list.length;
+ state.env.footnotes.list[footnoteId] = { label: label, count: 0 };
+ state.env.footnotes.refs[':' + label] = footnoteId;
+ } else {
+ footnoteId = state.env.footnotes.refs[':' + label];
+ }
+
+ footnoteSubId = state.env.footnotes.list[footnoteId].count;
+ state.env.footnotes.list[footnoteId].count++;
+
+ state.push({
+ type: 'footnote_ref',
+ id: footnoteId,
+ subId: footnoteSubId,
+ level: state.level
+ });
+ }
+
+ state.pos = pos;
+ state.posMax = max;
+ return true;
+}
+
+// List of valid url schemas, accorting to commonmark spec
+// http://jgm.github.io/CommonMark/spec.html#autolinks
+
+var url_schemas = [
+ 'coap',
+ 'doi',
+ 'javascript',
+ 'aaa',
+ 'aaas',
+ 'about',
+ 'acap',
+ 'cap',
+ 'cid',
+ 'crid',
+ 'data',
+ 'dav',
+ 'dict',
+ 'dns',
+ 'file',
+ 'ftp',
+ 'geo',
+ 'go',
+ 'gopher',
+ 'h323',
+ 'http',
+ 'https',
+ 'iax',
+ 'icap',
+ 'im',
+ 'imap',
+ 'info',
+ 'ipp',
+ 'iris',
+ 'iris.beep',
+ 'iris.xpc',
+ 'iris.xpcs',
+ 'iris.lwz',
+ 'ldap',
+ 'mailto',
+ 'mid',
+ 'msrp',
+ 'msrps',
+ 'mtqp',
+ 'mupdate',
+ 'news',
+ 'nfs',
+ 'ni',
+ 'nih',
+ 'nntp',
+ 'opaquelocktoken',
+ 'pop',
+ 'pres',
+ 'rtsp',
+ 'service',
+ 'session',
+ 'shttp',
+ 'sieve',
+ 'sip',
+ 'sips',
+ 'sms',
+ 'snmp',
+ 'soap.beep',
+ 'soap.beeps',
+ 'tag',
+ 'tel',
+ 'telnet',
+ 'tftp',
+ 'thismessage',
+ 'tn3270',
+ 'tip',
+ 'tv',
+ 'urn',
+ 'vemmi',
+ 'ws',
+ 'wss',
+ 'xcon',
+ 'xcon-userid',
+ 'xmlrpc.beep',
+ 'xmlrpc.beeps',
+ 'xmpp',
+ 'z39.50r',
+ 'z39.50s',
+ 'adiumxtra',
+ 'afp',
+ 'afs',
+ 'aim',
+ 'apt',
+ 'attachment',
+ 'aw',
+ 'beshare',
+ 'bitcoin',
+ 'bolo',
+ 'callto',
+ 'chrome',
+ 'chrome-extension',
+ 'com-eventbrite-attendee',
+ 'content',
+ 'cvs',
+ 'dlna-playsingle',
+ 'dlna-playcontainer',
+ 'dtn',
+ 'dvb',
+ 'ed2k',
+ 'facetime',
+ 'feed',
+ 'finger',
+ 'fish',
+ 'gg',
+ 'git',
+ 'gizmoproject',
+ 'gtalk',
+ 'hcp',
+ 'icon',
+ 'ipn',
+ 'irc',
+ 'irc6',
+ 'ircs',
+ 'itms',
+ 'jar',
+ 'jms',
+ 'keyparc',
+ 'lastfm',
+ 'ldaps',
+ 'magnet',
+ 'maps',
+ 'market',
+ 'message',
+ 'mms',
+ 'ms-help',
+ 'msnim',
+ 'mumble',
+ 'mvn',
+ 'notes',
+ 'oid',
+ 'palm',
+ 'paparazzi',
+ 'platform',
+ 'proxy',
+ 'psyc',
+ 'query',
+ 'res',
+ 'resource',
+ 'rmi',
+ 'rsync',
+ 'rtmp',
+ 'secondlife',
+ 'sftp',
+ 'sgn',
+ 'skype',
+ 'smb',
+ 'soldat',
+ 'spotify',
+ 'ssh',
+ 'steam',
+ 'svn',
+ 'teamspeak',
+ 'things',
+ 'udp',
+ 'unreal',
+ 'ut2004',
+ 'ventrilo',
+ 'view-source',
+ 'webcal',
+ 'wtai',
+ 'wyciwyg',
+ 'xfire',
+ 'xri',
+ 'ymsgr'
+];
+
+// Process autolinks ''
+
+
+/*eslint max-len:0*/
+var EMAIL_RE = /^<([a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)>/;
+var AUTOLINK_RE = /^<([a-zA-Z.\-]{1,25}):([^<>\x00-\x20]*)>/;
+
+
+function autolink(state, silent) {
+ var tail, linkMatch, emailMatch, url, fullUrl, pos = state.pos;
+
+ if (state.src.charCodeAt(pos) !== 0x3C/* < */) { return false; }
+
+ tail = state.src.slice(pos);
+
+ if (tail.indexOf('>') < 0) { return false; }
+
+ linkMatch = tail.match(AUTOLINK_RE);
+
+ if (linkMatch) {
+ if (url_schemas.indexOf(linkMatch[1].toLowerCase()) < 0) { return false; }
+
+ url = linkMatch[0].slice(1, -1);
+ fullUrl = normalizeLink(url);
+ if (!state.parser.validateLink(url)) { return false; }
+
+ if (!silent) {
+ state.push({
+ type: 'link_open',
+ href: fullUrl,
+ level: state.level
+ });
+ state.push({
+ type: 'text',
+ content: url,
+ level: state.level + 1
+ });
+ state.push({ type: 'link_close', level: state.level });
+ }
+
+ state.pos += linkMatch[0].length;
+ return true;
+ }
+
+ emailMatch = tail.match(EMAIL_RE);
+
+ if (emailMatch) {
+
+ url = emailMatch[0].slice(1, -1);
+
+ fullUrl = normalizeLink('mailto:' + url);
+ if (!state.parser.validateLink(fullUrl)) { return false; }
+
+ if (!silent) {
+ state.push({
+ type: 'link_open',
+ href: fullUrl,
+ level: state.level
+ });
+ state.push({
+ type: 'text',
+ content: url,
+ level: state.level + 1
+ });
+ state.push({ type: 'link_close', level: state.level });
+ }
+
+ state.pos += emailMatch[0].length;
+ return true;
+ }
+
+ return false;
+}
+
+// Regexps to match html elements
+
+function replace$1(regex, options) {
+ regex = regex.source;
+ options = options || '';
+
+ return function self(name, val) {
+ if (!name) {
+ return new RegExp(regex, options);
+ }
+ val = val.source || val;
+ regex = regex.replace(name, val);
+ return self;
+ };
+}
+
+
+var attr_name = /[a-zA-Z_:][a-zA-Z0-9:._-]*/;
+
+var unquoted = /[^"'=<>`\x00-\x20]+/;
+var single_quoted = /'[^']*'/;
+var double_quoted = /"[^"]*"/;
+
+/*eslint no-spaced-func:0*/
+var attr_value = replace$1(/(?:unquoted|single_quoted|double_quoted)/)
+ ('unquoted', unquoted)
+ ('single_quoted', single_quoted)
+ ('double_quoted', double_quoted)
+ ();
+
+var attribute = replace$1(/(?:\s+attr_name(?:\s*=\s*attr_value)?)/)
+ ('attr_name', attr_name)
+ ('attr_value', attr_value)
+ ();
+
+var open_tag = replace$1(/<[A-Za-z][A-Za-z0-9]*attribute*\s*\/?>/)
+ ('attribute', attribute)
+ ();
+
+var close_tag = /<\/[A-Za-z][A-Za-z0-9]*\s*>/;
+var comment = /|/;
+var processing = /<[?].*?[?]>/;
+var declaration = /]*>/;
+var cdata = //;
+
+var HTML_TAG_RE = replace$1(/^(?:open_tag|close_tag|comment|processing|declaration|cdata)/)
+ ('open_tag', open_tag)
+ ('close_tag', close_tag)
+ ('comment', comment)
+ ('processing', processing)
+ ('declaration', declaration)
+ ('cdata', cdata)
+ ();
+
+// Process html tags
+
+
+function isLetter$2(ch) {
+ /*eslint no-bitwise:0*/
+ var lc = ch | 0x20; // to lower case
+ return (lc >= 0x61/* a */) && (lc <= 0x7a/* z */);
+}
+
+
+function htmltag(state, silent) {
+ var ch, match, max, pos = state.pos;
+
+ if (!state.options.html) { return false; }
+
+ // Check start
+ max = state.posMax;
+ if (state.src.charCodeAt(pos) !== 0x3C/* < */ ||
+ pos + 2 >= max) {
+ return false;
+ }
+
+ // Quick fail on second char
+ ch = state.src.charCodeAt(pos + 1);
+ if (ch !== 0x21/* ! */ &&
+ ch !== 0x3F/* ? */ &&
+ ch !== 0x2F/* / */ &&
+ !isLetter$2(ch)) {
+ return false;
+ }
+
+ match = state.src.slice(pos).match(HTML_TAG_RE);
+ if (!match) { return false; }
+
+ if (!silent) {
+ state.push({
+ type: 'htmltag',
+ content: state.src.slice(pos, pos + match[0].length),
+ level: state.level
+ });
+ }
+ state.pos += match[0].length;
+ return true;
+}
+
+// Process html entity - {, ¯, ", ...
+
+
+var DIGITAL_RE = /^((?:x[a-f0-9]{1,8}|[0-9]{1,8}));/i;
+var NAMED_RE = /^&([a-z][a-z0-9]{1,31});/i;
+
+
+function entity(state, silent) {
+ var ch, code, match, pos = state.pos, max = state.posMax;
+
+ if (state.src.charCodeAt(pos) !== 0x26/* & */) { return false; }
+
+ if (pos + 1 < max) {
+ ch = state.src.charCodeAt(pos + 1);
+
+ if (ch === 0x23 /* # */) {
+ match = state.src.slice(pos).match(DIGITAL_RE);
+ if (match) {
+ if (!silent) {
+ code = match[1][0].toLowerCase() === 'x' ? parseInt(match[1].slice(1), 16) : parseInt(match[1], 10);
+ state.pending += isValidEntityCode(code) ? fromCodePoint(code) : fromCodePoint(0xFFFD);
+ }
+ state.pos += match[0].length;
+ return true;
+ }
+ } else {
+ match = state.src.slice(pos).match(NAMED_RE);
+ if (match) {
+ var decoded = decodeEntity(match[1]);
+ if (match[1] !== decoded) {
+ if (!silent) { state.pending += decoded; }
+ state.pos += match[0].length;
+ return true;
+ }
+ }
+ }
+ }
+
+ if (!silent) { state.pending += '&'; }
+ state.pos++;
+ return true;
+}
+
+/**
+ * Inline Parser `rules`
+ */
+
+var _rules$2 = [
+ [ 'text', text ],
+ [ 'newline', newline ],
+ [ 'escape', escape ],
+ [ 'backticks', backticks ],
+ [ 'del', del ],
+ [ 'ins', ins ],
+ [ 'mark', mark ],
+ [ 'emphasis', emphasis ],
+ [ 'sub', sub ],
+ [ 'sup', sup ],
+ [ 'links', links ],
+ [ 'footnote_inline', footnote_inline ],
+ [ 'footnote_ref', footnote_ref ],
+ [ 'autolink', autolink ],
+ [ 'htmltag', htmltag ],
+ [ 'entity', entity ]
+];
+
+/**
+ * Inline Parser class. Note that link validation is stricter
+ * in Remarkable than what is specified by CommonMark. If you
+ * want to change this you can use a custom validator.
+ *
+ * @api private
+ */
+
+function ParserInline() {
+ this.ruler = new Ruler();
+ for (var i = 0; i < _rules$2.length; i++) {
+ this.ruler.push(_rules$2[i][0], _rules$2[i][1]);
+ }
+
+ // Can be overridden with a custom validator
+ this.validateLink = validateLink;
+}
+
+/**
+ * Skip a single token by running all rules in validation mode.
+ * Returns `true` if any rule reports success.
+ *
+ * @param {Object} `state`
+ * @api privage
+ */
+
+ParserInline.prototype.skipToken = function (state) {
+ var rules = this.ruler.getRules('');
+ var len = rules.length;
+ var pos = state.pos;
+ var i, cached_pos;
+
+ if ((cached_pos = state.cacheGet(pos)) > 0) {
+ state.pos = cached_pos;
+ return;
+ }
+
+ for (i = 0; i < len; i++) {
+ if (rules[i](state, true)) {
+ state.cacheSet(pos, state.pos);
+ return;
+ }
+ }
+
+ state.pos++;
+ state.cacheSet(pos, state.pos);
+};
+
+/**
+ * Generate tokens for the given input range.
+ *
+ * @param {Object} `state`
+ * @api private
+ */
+
+ParserInline.prototype.tokenize = function (state) {
+ var rules = this.ruler.getRules('');
+ var len = rules.length;
+ var end = state.posMax;
+ var ok, i;
+
+ while (state.pos < end) {
+
+ // Try all possible rules.
+ // On success, the rule should:
+ //
+ // - update `state.pos`
+ // - update `state.tokens`
+ // - return true
+ for (i = 0; i < len; i++) {
+ ok = rules[i](state, false);
+
+ if (ok) {
+ break;
+ }
+ }
+
+ if (ok) {
+ if (state.pos >= end) { break; }
+ continue;
+ }
+
+ state.pending += state.src[state.pos++];
+ }
+
+ if (state.pending) {
+ state.pushPending();
+ }
+};
+
+/**
+ * Parse the given input string.
+ *
+ * @param {String} `str`
+ * @param {Object} `options`
+ * @param {Object} `env`
+ * @param {Array} `outTokens`
+ * @api private
+ */
+
+ParserInline.prototype.parse = function (str, options, env, outTokens) {
+ var state = new StateInline(str, this, options, env, outTokens);
+ this.tokenize(state);
+};
+
+/**
+ * Validate the given `url` by checking for bad protocols.
+ *
+ * @param {String} `url`
+ * @return {Boolean}
+ */
+
+function validateLink(url) {
+ var BAD_PROTOCOLS = [ 'vbscript', 'javascript', 'file', 'data' ];
+ var str = url.trim().toLowerCase();
+ // Care about digital entities "javascript:alert(1)"
+ str = replaceEntities(str);
+ if (str.indexOf(':') !== -1 && BAD_PROTOCOLS.indexOf(str.split(':')[0]) !== -1) {
+ return false;
+ }
+ return true;
+}
+
+// Remarkable default options
+
+var defaultConfig = {
+ options: {
+ html: false, // Enable HTML tags in source
+ xhtmlOut: false, // Use '/' to close single tags (
)
+ breaks: false, // Convert '\n' in paragraphs into
+ langPrefix: 'language-', // CSS language prefix for fenced blocks
+ linkTarget: '', // set target to open link in
+
+ // Enable some language-neutral replacements + quotes beautification
+ typographer: false,
+
+ // Double + single quotes replacement pairs, when typographer enabled,
+ // and smartquotes on. Set doubles to '«»' for Russian, '„“' for German.
+ quotes: '“”‘’',
+
+ // Highlighter function. Should return escaped HTML,
+ // or '' if input not changed
+ //
+ // function (/*str, lang*/) { return ''; }
+ //
+ highlight: null,
+
+ maxNesting: 20 // Internal protection, recursion limit
+ },
+
+ components: {
+
+ core: {
+ rules: [
+ 'block',
+ 'inline',
+ 'references',
+ 'replacements',
+ 'smartquotes',
+ 'references',
+ 'abbr2',
+ 'footnote_tail'
+ ]
+ },
+
+ block: {
+ rules: [
+ 'blockquote',
+ 'code',
+ 'fences',
+ 'footnote',
+ 'heading',
+ 'hr',
+ 'htmlblock',
+ 'lheading',
+ 'list',
+ 'paragraph',
+ 'table'
+ ]
+ },
+
+ inline: {
+ rules: [
+ 'autolink',
+ 'backticks',
+ 'del',
+ 'emphasis',
+ 'entity',
+ 'escape',
+ 'footnote_ref',
+ 'htmltag',
+ 'links',
+ 'newline',
+ 'text'
+ ]
+ }
+ }
+};
+
+// Remarkable default options
+
+var fullConfig = {
+ options: {
+ html: false, // Enable HTML tags in source
+ xhtmlOut: false, // Use '/' to close single tags (
)
+ breaks: false, // Convert '\n' in paragraphs into
+ langPrefix: 'language-', // CSS language prefix for fenced blocks
+ linkTarget: '', // set target to open link in
+
+ // Enable some language-neutral replacements + quotes beautification
+ typographer: false,
+
+ // Double + single quotes replacement pairs, when typographer enabled,
+ // and smartquotes on. Set doubles to '«»' for Russian, '„“' for German.
+ quotes: '“”‘’',
+
+ // Highlighter function. Should return escaped HTML,
+ // or '' if input not changed
+ //
+ // function (/*str, lang*/) { return ''; }
+ //
+ highlight: null,
+
+ maxNesting: 20 // Internal protection, recursion limit
+ },
+
+ components: {
+ // Don't restrict core/block/inline rules
+ core: {},
+ block: {},
+ inline: {}
+ }
+};
+
+// Commonmark default options
+
+var commonmarkConfig = {
+ options: {
+ html: true, // Enable HTML tags in source
+ xhtmlOut: true, // Use '/' to close single tags (
)
+ breaks: false, // Convert '\n' in paragraphs into
+ langPrefix: 'language-', // CSS language prefix for fenced blocks
+ linkTarget: '', // set target to open link in
+
+ // Enable some language-neutral replacements + quotes beautification
+ typographer: false,
+
+ // Double + single quotes replacement pairs, when typographer enabled,
+ // and smartquotes on. Set doubles to '«»' for Russian, '„“' for German.
+ quotes: '“”‘’',
+
+ // Highlighter function. Should return escaped HTML,
+ // or '' if input not changed
+ //
+ // function (/*str, lang*/) { return ''; }
+ //
+ highlight: null,
+
+ maxNesting: 20 // Internal protection, recursion limit
+ },
+
+ components: {
+
+ core: {
+ rules: [
+ 'block',
+ 'inline',
+ 'references',
+ 'abbr2'
+ ]
+ },
+
+ block: {
+ rules: [
+ 'blockquote',
+ 'code',
+ 'fences',
+ 'heading',
+ 'hr',
+ 'htmlblock',
+ 'lheading',
+ 'list',
+ 'paragraph'
+ ]
+ },
+
+ inline: {
+ rules: [
+ 'autolink',
+ 'backticks',
+ 'emphasis',
+ 'entity',
+ 'escape',
+ 'htmltag',
+ 'links',
+ 'newline',
+ 'text'
+ ]
+ }
+ }
+};
+
+/**
+ * Preset configs
+ */
+
+var config = {
+ 'default': defaultConfig,
+ 'full': fullConfig,
+ 'commonmark': commonmarkConfig
+};
+
+/**
+ * The `StateCore` class manages state.
+ *
+ * @param {Object} `instance` Remarkable instance
+ * @param {String} `str` Markdown string
+ * @param {Object} `env`
+ */
+
+function StateCore(instance, str, env) {
+ this.src = str;
+ this.env = env;
+ this.options = instance.options;
+ this.tokens = [];
+ this.inlineMode = false;
+
+ this.inline = instance.inline;
+ this.block = instance.block;
+ this.renderer = instance.renderer;
+ this.typographer = instance.typographer;
+}
+
+/**
+ * The main `Remarkable` class. Create an instance of
+ * `Remarkable` with a `preset` and/or `options`.
+ *
+ * @param {String} `preset` If no preset is given, `default` is used.
+ * @param {Object} `options`
+ */
+
+function Remarkable(preset, options) {
+ if (typeof preset !== 'string') {
+ options = preset;
+ preset = 'default';
+ }
+
+ if (options && options.linkify != null) {
+ console.warn(
+ 'linkify option is removed. Use linkify plugin instead:\n\n' +
+ 'import Remarkable from \'remarkable\';\n' +
+ 'import linkify from \'remarkable/linkify\';\n' +
+ 'new Remarkable().use(linkify)\n'
+ );
+ }
+
+ this.inline = new ParserInline();
+ this.block = new ParserBlock();
+ this.core = new Core();
+ this.renderer = new Renderer();
+ this.ruler = new Ruler();
+
+ this.options = {};
+ this.configure(config[preset]);
+ this.set(options || {});
+}
+
+/**
+ * Set options as an alternative to passing them
+ * to the constructor.
+ *
+ * ```js
+ * md.set({typographer: true});
+ * ```
+ * @param {Object} `options`
+ * @api public
+ */
+
+Remarkable.prototype.set = function (options) {
+ assign(this.options, options);
+};
+
+/**
+ * Batch loader for components rules states, and options
+ *
+ * @param {Object} `presets`
+ */
+
+Remarkable.prototype.configure = function (presets) {
+ var self = this;
+
+ if (!presets) { throw new Error('Wrong `remarkable` preset, check name/content'); }
+ if (presets.options) { self.set(presets.options); }
+ if (presets.components) {
+ Object.keys(presets.components).forEach(function (name) {
+ if (presets.components[name].rules) {
+ self[name].ruler.enable(presets.components[name].rules, true);
+ }
+ });
+ }
+};
+
+/**
+ * Use a plugin.
+ *
+ * ```js
+ * var md = new Remarkable();
+ *
+ * md.use(plugin1)
+ * .use(plugin2, opts)
+ * .use(plugin3);
+ * ```
+ *
+ * @param {Function} `plugin`
+ * @param {Object} `options`
+ * @return {Object} `Remarkable` for chaining
+ */
+
+Remarkable.prototype.use = function (plugin, options) {
+ plugin(this, options);
+ return this;
+};
+
+
+/**
+ * Parse the input `string` and return a tokens array.
+ * Modifies `env` with definitions data.
+ *
+ * @param {String} `string`
+ * @param {Object} `env`
+ * @return {Array} Array of tokens
+ */
+
+Remarkable.prototype.parse = function (str, env) {
+ var state = new StateCore(this, str, env);
+ this.core.process(state);
+ return state.tokens;
+};
+
+/**
+ * The main `.render()` method that does all the magic :)
+ *
+ * @param {String} `string`
+ * @param {Object} `env`
+ * @return {String} Rendered HTML.
+ */
+
+Remarkable.prototype.render = function (str, env) {
+ env = env || {};
+ return this.renderer.render(this.parse(str, env), this.options, env);
+};
+
+/**
+ * Parse the given content `string` as a single string.
+ *
+ * @param {String} `string`
+ * @param {Object} `env`
+ * @return {Array} Array of tokens
+ */
+
+Remarkable.prototype.parseInline = function (str, env) {
+ var state = new StateCore(this, str, env);
+ state.inlineMode = true;
+ this.core.process(state);
+ return state.tokens;
+};
+
+/**
+ * Render a single content `string`, without wrapping it
+ * to paragraphs
+ *
+ * @param {String} `str`
+ * @param {Object} `env`
+ * @return {String}
+ */
+
+Remarkable.prototype.renderInline = function (str, env) {
+ env = env || {};
+ return this.renderer.render(this.parseInline(str, env), this.options, env);
+};
+
+exports.Remarkable = Remarkable;
+exports.utils = utils;
+});
+
+var katex = createCommonjsModule(function (module, exports) {
+(function webpackUniversalModuleDefinition(root, factory) {
+ module.exports = factory();
+})((typeof self !== 'undefined' ? self : commonjsGlobal), function() {
+return /******/ (function(modules) { // webpackBootstrap
+/******/ // The module cache
+/******/ var installedModules = {};
+/******/
+/******/ // The require function
+/******/ function __webpack_require__(moduleId) {
+/******/
+/******/ // Check if module is in cache
+/******/ if(installedModules[moduleId]) {
+/******/ return installedModules[moduleId].exports;
+/******/ }
+/******/ // Create a new module (and put it into the cache)
+/******/ var module = installedModules[moduleId] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = true;
+/******/
+/******/ // Return the exports of the module
+/******/ return module.exports;
+/******/ }
+/******/
+/******/
+/******/ // expose the modules object (__webpack_modules__)
+/******/ __webpack_require__.m = modules;
+/******/
+/******/ // expose the module cache
+/******/ __webpack_require__.c = installedModules;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = 1);
+/******/ })
+/************************************************************************/
+/******/ ([
+/* 0 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// extracted by mini-css-extract-plugin
+
+/***/ }),
+/* 1 */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+__webpack_require__.r(__webpack_exports__);
+
+// EXTERNAL MODULE: ./src/katex.less
+var katex = __webpack_require__(0);
+
+// CONCATENATED MODULE: ./src/SourceLocation.js
+/**
+ * Lexing or parsing positional information for error reporting.
+ * This object is immutable.
+ */
+var SourceLocation =
+/*#__PURE__*/
+function () {
+ // The + prefix indicates that these fields aren't writeable
+ // Lexer holding the input string.
+ // Start offset, zero-based inclusive.
+ // End offset, zero-based exclusive.
+ function SourceLocation(lexer, start, end) {
+ this.lexer = void 0;
+ this.start = void 0;
+ this.end = void 0;
+ this.lexer = lexer;
+ this.start = start;
+ this.end = end;
+ }
+ /**
+ * Merges two `SourceLocation`s from location providers, given they are
+ * provided in order of appearance.
+ * - Returns the first one's location if only the first is provided.
+ * - Returns a merged range of the first and the last if both are provided
+ * and their lexers match.
+ * - Otherwise, returns null.
+ */
+
+
+ SourceLocation.range = function range(first, second) {
+ if (!second) {
+ return first && first.loc;
+ } else if (!first || !first.loc || !second.loc || first.loc.lexer !== second.loc.lexer) {
+ return null;
+ } else {
+ return new SourceLocation(first.loc.lexer, first.loc.start, second.loc.end);
+ }
+ };
+
+ return SourceLocation;
+}();
+
+
+// CONCATENATED MODULE: ./src/Token.js
+
+/**
+ * Interface required to break circular dependency between Token, Lexer, and
+ * ParseError.
+ */
+
+/**
+ * The resulting token returned from `lex`.
+ *
+ * It consists of the token text plus some position information.
+ * The position information is essentially a range in an input string,
+ * but instead of referencing the bare input string, we refer to the lexer.
+ * That way it is possible to attach extra metadata to the input string,
+ * like for example a file name or similar.
+ *
+ * The position information is optional, so it is OK to construct synthetic
+ * tokens if appropriate. Not providing available position information may
+ * lead to degraded error reporting, though.
+ */
+var Token_Token =
+/*#__PURE__*/
+function () {
+ // don't expand the token
+ // used in \noexpand
+ function Token(text, // the text of this token
+ loc) {
+ this.text = void 0;
+ this.loc = void 0;
+ this.noexpand = void 0;
+ this.treatAsRelax = void 0;
+ this.text = text;
+ this.loc = loc;
+ }
+ /**
+ * Given a pair of tokens (this and endToken), compute a `Token` encompassing
+ * the whole input range enclosed by these two.
+ */
+
+
+ var _proto = Token.prototype;
+
+ _proto.range = function range(endToken, // last token of the range, inclusive
+ text) // the text of the newly constructed token
+ {
+ return new Token(text, SourceLocation.range(this, endToken));
+ };
+
+ return Token;
+}();
+// CONCATENATED MODULE: ./src/ParseError.js
+
+
+/**
+ * This is the ParseError class, which is the main error thrown by KaTeX
+ * functions when something has gone wrong. This is used to distinguish internal
+ * errors from errors in the expression that the user provided.
+ *
+ * If possible, a caller should provide a Token or ParseNode with information
+ * about where in the source string the problem occurred.
+ */
+var ParseError = // Error position based on passed-in Token or ParseNode.
+function ParseError(message, // The error message
+token) // An object providing position information
+{
+ this.position = void 0;
+ var error = "KaTeX parse error: " + message;
+ var start;
+ var loc = token && token.loc;
+
+ if (loc && loc.start <= loc.end) {
+ // If we have the input and a position, make the error a bit fancier
+ // Get the input
+ var input = loc.lexer.input; // Prepend some information
+
+ start = loc.start;
+ var end = loc.end;
+
+ if (start === input.length) {
+ error += " at end of input: ";
+ } else {
+ error += " at position " + (start + 1) + ": ";
+ } // Underline token in question using combining underscores
+
+
+ var underlined = input.slice(start, end).replace(/[^]/g, "$&\u0332"); // Extract some context from the input and add it to the error
+
+ var left;
+
+ if (start > 15) {
+ left = "…" + input.slice(start - 15, start);
+ } else {
+ left = input.slice(0, start);
+ }
+
+ var right;
+
+ if (end + 15 < input.length) {
+ right = input.slice(end, end + 15) + "…";
+ } else {
+ right = input.slice(end);
+ }
+
+ error += left + underlined + right;
+ } // Some hackery to make ParseError a prototype of Error
+ // See http://stackoverflow.com/a/8460753
+
+
+ var self = new Error(error);
+ self.name = "ParseError"; // $FlowFixMe
+
+ self.__proto__ = ParseError.prototype; // $FlowFixMe
+
+ self.position = start;
+ return self;
+}; // $FlowFixMe More hackery
+
+
+ParseError.prototype.__proto__ = Error.prototype;
+/* harmony default export */ var src_ParseError = (ParseError);
+// CONCATENATED MODULE: ./src/utils.js
+/**
+ * This file contains a list of utility functions which are useful in other
+ * files.
+ */
+
+/**
+ * Return whether an element is contained in a list
+ */
+var contains = function contains(list, elem) {
+ return list.indexOf(elem) !== -1;
+};
+/**
+ * Provide a default value if a setting is undefined
+ * NOTE: Couldn't use `T` as the output type due to facebook/flow#5022.
+ */
+
+
+var deflt = function deflt(setting, defaultIfUndefined) {
+ return setting === undefined ? defaultIfUndefined : setting;
+}; // hyphenate and escape adapted from Facebook's React under Apache 2 license
+
+
+var uppercase = /([A-Z])/g;
+
+var hyphenate = function hyphenate(str) {
+ return str.replace(uppercase, "-$1").toLowerCase();
+};
+
+var ESCAPE_LOOKUP = {
+ "&": "&",
+ ">": ">",
+ "<": "<",
+ "\"": """,
+ "'": "'"
+};
+var ESCAPE_REGEX = /[&><"']/g;
+/**
+ * Escapes text to prevent scripting attacks.
+ */
+
+function utils_escape(text) {
+ return String(text).replace(ESCAPE_REGEX, function (match) {
+ return ESCAPE_LOOKUP[match];
+ });
+}
+/**
+ * Sometimes we want to pull out the innermost element of a group. In most
+ * cases, this will just be the group itself, but when ordgroups and colors have
+ * a single element, we want to pull that out.
+ */
+
+
+var getBaseElem = function getBaseElem(group) {
+ if (group.type === "ordgroup") {
+ if (group.body.length === 1) {
+ return getBaseElem(group.body[0]);
+ } else {
+ return group;
+ }
+ } else if (group.type === "color") {
+ if (group.body.length === 1) {
+ return getBaseElem(group.body[0]);
+ } else {
+ return group;
+ }
+ } else if (group.type === "font") {
+ return getBaseElem(group.body);
+ } else {
+ return group;
+ }
+};
+/**
+ * TeXbook algorithms often reference "character boxes", which are simply groups
+ * with a single character in them. To decide if something is a character box,
+ * we find its innermost group, and see if it is a single character.
+ */
+
+
+var utils_isCharacterBox = function isCharacterBox(group) {
+ var baseElem = getBaseElem(group); // These are all they types of groups which hold single characters
+
+ return baseElem.type === "mathord" || baseElem.type === "textord" || baseElem.type === "atom";
+};
+
+var assert = function assert(value) {
+ if (!value) {
+ throw new Error('Expected non-null, but got ' + String(value));
+ }
+
+ return value;
+};
+/**
+ * Return the protocol of a URL, or "_relative" if the URL does not specify a
+ * protocol (and thus is relative).
+ */
+
+var protocolFromUrl = function protocolFromUrl(url) {
+ var protocol = /^\s*([^\\/#]*?)(?::|*58|*3a)/i.exec(url);
+ return protocol != null ? protocol[1] : "_relative";
+};
+/* harmony default export */ var utils = ({
+ contains: contains,
+ deflt: deflt,
+ escape: utils_escape,
+ hyphenate: hyphenate,
+ getBaseElem: getBaseElem,
+ isCharacterBox: utils_isCharacterBox,
+ protocolFromUrl: protocolFromUrl
+});
+// CONCATENATED MODULE: ./src/Settings.js
+/* eslint no-console:0 */
+
+/**
+ * This is a module for storing settings passed into KaTeX. It correctly handles
+ * default settings.
+ */
+
+
+
+
+/**
+ * The main Settings object
+ *
+ * The current options stored are:
+ * - displayMode: Whether the expression should be typeset as inline math
+ * (false, the default), meaning that the math starts in
+ * \textstyle and is placed in an inline-block); or as display
+ * math (true), meaning that the math starts in \displaystyle
+ * and is placed in a block with vertical margin.
+ */
+var Settings_Settings =
+/*#__PURE__*/
+function () {
+ function Settings(options) {
+ this.displayMode = void 0;
+ this.output = void 0;
+ this.leqno = void 0;
+ this.fleqn = void 0;
+ this.throwOnError = void 0;
+ this.errorColor = void 0;
+ this.macros = void 0;
+ this.minRuleThickness = void 0;
+ this.colorIsTextColor = void 0;
+ this.strict = void 0;
+ this.trust = void 0;
+ this.maxSize = void 0;
+ this.maxExpand = void 0;
+ this.globalGroup = void 0;
+ // allow null options
+ options = options || {};
+ this.displayMode = utils.deflt(options.displayMode, false);
+ this.output = utils.deflt(options.output, "htmlAndMathml");
+ this.leqno = utils.deflt(options.leqno, false);
+ this.fleqn = utils.deflt(options.fleqn, false);
+ this.throwOnError = utils.deflt(options.throwOnError, true);
+ this.errorColor = utils.deflt(options.errorColor, "#cc0000");
+ this.macros = options.macros || {};
+ this.minRuleThickness = Math.max(0, utils.deflt(options.minRuleThickness, 0));
+ this.colorIsTextColor = utils.deflt(options.colorIsTextColor, false);
+ this.strict = utils.deflt(options.strict, "warn");
+ this.trust = utils.deflt(options.trust, false);
+ this.maxSize = Math.max(0, utils.deflt(options.maxSize, Infinity));
+ this.maxExpand = Math.max(0, utils.deflt(options.maxExpand, 1000));
+ this.globalGroup = utils.deflt(options.globalGroup, false);
+ }
+ /**
+ * Report nonstrict (non-LaTeX-compatible) input.
+ * Can safely not be called if `this.strict` is false in JavaScript.
+ */
+
+
+ var _proto = Settings.prototype;
+
+ _proto.reportNonstrict = function reportNonstrict(errorCode, errorMsg, token) {
+ var strict = this.strict;
+
+ if (typeof strict === "function") {
+ // Allow return value of strict function to be boolean or string
+ // (or null/undefined, meaning no further processing).
+ strict = strict(errorCode, errorMsg, token);
+ }
+
+ if (!strict || strict === "ignore") {
+ return;
+ } else if (strict === true || strict === "error") {
+ throw new src_ParseError("LaTeX-incompatible input and strict mode is set to 'error': " + (errorMsg + " [" + errorCode + "]"), token);
+ } else if (strict === "warn") {
+ typeof console !== "undefined" && console.warn("LaTeX-incompatible input and strict mode is set to 'warn': " + (errorMsg + " [" + errorCode + "]"));
+ } else {
+ // won't happen in type-safe code
+ typeof console !== "undefined" && console.warn("LaTeX-incompatible input and strict mode is set to " + ("unrecognized '" + strict + "': " + errorMsg + " [" + errorCode + "]"));
+ }
+ }
+ /**
+ * Check whether to apply strict (LaTeX-adhering) behavior for unusual
+ * input (like `\\`). Unlike `nonstrict`, will not throw an error;
+ * instead, "error" translates to a return value of `true`, while "ignore"
+ * translates to a return value of `false`. May still print a warning:
+ * "warn" prints a warning and returns `false`.
+ * This is for the second category of `errorCode`s listed in the README.
+ */
+ ;
+
+ _proto.useStrictBehavior = function useStrictBehavior(errorCode, errorMsg, token) {
+ var strict = this.strict;
+
+ if (typeof strict === "function") {
+ // Allow return value of strict function to be boolean or string
+ // (or null/undefined, meaning no further processing).
+ // But catch any exceptions thrown by function, treating them
+ // like "error".
+ try {
+ strict = strict(errorCode, errorMsg, token);
+ } catch (error) {
+ strict = "error";
+ }
+ }
+
+ if (!strict || strict === "ignore") {
+ return false;
+ } else if (strict === true || strict === "error") {
+ return true;
+ } else if (strict === "warn") {
+ typeof console !== "undefined" && console.warn("LaTeX-incompatible input and strict mode is set to 'warn': " + (errorMsg + " [" + errorCode + "]"));
+ return false;
+ } else {
+ // won't happen in type-safe code
+ typeof console !== "undefined" && console.warn("LaTeX-incompatible input and strict mode is set to " + ("unrecognized '" + strict + "': " + errorMsg + " [" + errorCode + "]"));
+ return false;
+ }
+ }
+ /**
+ * Check whether to test potentially dangerous input, and return
+ * `true` (trusted) or `false` (untrusted). The sole argument `context`
+ * should be an object with `command` field specifying the relevant LaTeX
+ * command (as a string starting with `\`), and any other arguments, etc.
+ * If `context` has a `url` field, a `protocol` field will automatically
+ * get added by this function (changing the specified object).
+ */
+ ;
+
+ _proto.isTrusted = function isTrusted(context) {
+ if (context.url && !context.protocol) {
+ context.protocol = utils.protocolFromUrl(context.url);
+ }
+
+ var trust = typeof this.trust === "function" ? this.trust(context) : this.trust;
+ return Boolean(trust);
+ };
+
+ return Settings;
+}();
+
+
+// CONCATENATED MODULE: ./src/Style.js
+/**
+ * This file contains information and classes for the various kinds of styles
+ * used in TeX. It provides a generic `Style` class, which holds information
+ * about a specific style. It then provides instances of all the different kinds
+ * of styles possible, and provides functions to move between them and get
+ * information about them.
+ */
+
+/**
+ * The main style class. Contains a unique id for the style, a size (which is
+ * the same for cramped and uncramped version of a style), and a cramped flag.
+ */
+var Style =
+/*#__PURE__*/
+function () {
+ function Style(id, size, cramped) {
+ this.id = void 0;
+ this.size = void 0;
+ this.cramped = void 0;
+ this.id = id;
+ this.size = size;
+ this.cramped = cramped;
+ }
+ /**
+ * Get the style of a superscript given a base in the current style.
+ */
+
+
+ var _proto = Style.prototype;
+
+ _proto.sup = function sup() {
+ return Style_styles[_sup[this.id]];
+ }
+ /**
+ * Get the style of a subscript given a base in the current style.
+ */
+ ;
+
+ _proto.sub = function sub() {
+ return Style_styles[_sub[this.id]];
+ }
+ /**
+ * Get the style of a fraction numerator given the fraction in the current
+ * style.
+ */
+ ;
+
+ _proto.fracNum = function fracNum() {
+ return Style_styles[_fracNum[this.id]];
+ }
+ /**
+ * Get the style of a fraction denominator given the fraction in the current
+ * style.
+ */
+ ;
+
+ _proto.fracDen = function fracDen() {
+ return Style_styles[_fracDen[this.id]];
+ }
+ /**
+ * Get the cramped version of a style (in particular, cramping a cramped style
+ * doesn't change the style).
+ */
+ ;
+
+ _proto.cramp = function cramp() {
+ return Style_styles[_cramp[this.id]];
+ }
+ /**
+ * Get a text or display version of this style.
+ */
+ ;
+
+ _proto.text = function text() {
+ return Style_styles[_text[this.id]];
+ }
+ /**
+ * Return true if this style is tightly spaced (scriptstyle/scriptscriptstyle)
+ */
+ ;
+
+ _proto.isTight = function isTight() {
+ return this.size >= 2;
+ };
+
+ return Style;
+}(); // Export an interface for type checking, but don't expose the implementation.
+// This way, no more styles can be generated.
+
+
+// IDs of the different styles
+var D = 0;
+var Dc = 1;
+var T = 2;
+var Tc = 3;
+var S = 4;
+var Sc = 5;
+var SS = 6;
+var SSc = 7; // Instances of the different styles
+
+var Style_styles = [new Style(D, 0, false), new Style(Dc, 0, true), new Style(T, 1, false), new Style(Tc, 1, true), new Style(S, 2, false), new Style(Sc, 2, true), new Style(SS, 3, false), new Style(SSc, 3, true)]; // Lookup tables for switching from one style to another
+
+var _sup = [S, Sc, S, Sc, SS, SSc, SS, SSc];
+var _sub = [Sc, Sc, Sc, Sc, SSc, SSc, SSc, SSc];
+var _fracNum = [T, Tc, S, Sc, SS, SSc, SS, SSc];
+var _fracDen = [Tc, Tc, Sc, Sc, SSc, SSc, SSc, SSc];
+var _cramp = [Dc, Dc, Tc, Tc, Sc, Sc, SSc, SSc];
+var _text = [D, Dc, T, Tc, T, Tc, T, Tc]; // We only export some of the styles.
+
+/* harmony default export */ var src_Style = ({
+ DISPLAY: Style_styles[D],
+ TEXT: Style_styles[T],
+ SCRIPT: Style_styles[S],
+ SCRIPTSCRIPT: Style_styles[SS]
+});
+// CONCATENATED MODULE: ./src/unicodeScripts.js
+/*
+ * This file defines the Unicode scripts and script families that we
+ * support. To add new scripts or families, just add a new entry to the
+ * scriptData array below. Adding scripts to the scriptData array allows
+ * characters from that script to appear in \text{} environments.
+ */
+
+/**
+ * Each script or script family has a name and an array of blocks.
+ * Each block is an array of two numbers which specify the start and
+ * end points (inclusive) of a block of Unicode codepoints.
+ */
+
+/**
+ * Unicode block data for the families of scripts we support in \text{}.
+ * Scripts only need to appear here if they do not have font metrics.
+ */
+var scriptData = [{
+ // Latin characters beyond the Latin-1 characters we have metrics for.
+ // Needed for Czech, Hungarian and Turkish text, for example.
+ name: 'latin',
+ blocks: [[0x0100, 0x024f], // Latin Extended-A and Latin Extended-B
+ [0x0300, 0x036f]]
+}, {
+ // The Cyrillic script used by Russian and related languages.
+ // A Cyrillic subset used to be supported as explicitly defined
+ // symbols in symbols.js
+ name: 'cyrillic',
+ blocks: [[0x0400, 0x04ff]]
+}, {
+ // The Brahmic scripts of South and Southeast Asia
+ // Devanagari (0900–097F)
+ // Bengali (0980–09FF)
+ // Gurmukhi (0A00–0A7F)
+ // Gujarati (0A80–0AFF)
+ // Oriya (0B00–0B7F)
+ // Tamil (0B80–0BFF)
+ // Telugu (0C00–0C7F)
+ // Kannada (0C80–0CFF)
+ // Malayalam (0D00–0D7F)
+ // Sinhala (0D80–0DFF)
+ // Thai (0E00–0E7F)
+ // Lao (0E80–0EFF)
+ // Tibetan (0F00–0FFF)
+ // Myanmar (1000–109F)
+ name: 'brahmic',
+ blocks: [[0x0900, 0x109F]]
+}, {
+ name: 'georgian',
+ blocks: [[0x10A0, 0x10ff]]
+}, {
+ // Chinese and Japanese.
+ // The "k" in cjk is for Korean, but we've separated Korean out
+ name: "cjk",
+ blocks: [[0x3000, 0x30FF], // CJK symbols and punctuation, Hiragana, Katakana
+ [0x4E00, 0x9FAF], // CJK ideograms
+ [0xFF00, 0xFF60]]
+}, {
+ // Korean
+ name: 'hangul',
+ blocks: [[0xAC00, 0xD7AF]]
+}];
+/**
+ * Given a codepoint, return the name of the script or script family
+ * it is from, or null if it is not part of a known block
+ */
+
+function scriptFromCodepoint(codepoint) {
+ for (var i = 0; i < scriptData.length; i++) {
+ var script = scriptData[i];
+
+ for (var _i = 0; _i < script.blocks.length; _i++) {
+ var block = script.blocks[_i];
+
+ if (codepoint >= block[0] && codepoint <= block[1]) {
+ return script.name;
+ }
+ }
+ }
+
+ return null;
+}
+/**
+ * A flattened version of all the supported blocks in a single array.
+ * This is an optimization to make supportedCodepoint() fast.
+ */
+
+var allBlocks = [];
+scriptData.forEach(function (s) {
+ return s.blocks.forEach(function (b) {
+ return allBlocks.push.apply(allBlocks, b);
+ });
+});
+/**
+ * Given a codepoint, return true if it falls within one of the
+ * scripts or script families defined above and false otherwise.
+ *
+ * Micro benchmarks shows that this is faster than
+ * /[\u3000-\u30FF\u4E00-\u9FAF\uFF00-\uFF60\uAC00-\uD7AF\u0900-\u109F]/.test()
+ * in Firefox, Chrome and Node.
+ */
+
+function supportedCodepoint(codepoint) {
+ for (var i = 0; i < allBlocks.length; i += 2) {
+ if (codepoint >= allBlocks[i] && codepoint <= allBlocks[i + 1]) {
+ return true;
+ }
+ }
+
+ return false;
+}
+// CONCATENATED MODULE: ./src/svgGeometry.js
+/**
+ * This file provides support to domTree.js and delimiter.js.
+ * It's a storehouse of path geometry for SVG images.
+ */
+// In all paths below, the viewBox-to-em scale is 1000:1.
+var hLinePad = 80; // padding above a sqrt viniculum. Prevents image cropping.
+// The viniculum of a \sqrt can be made thicker by a KaTeX rendering option.
+// Think of variable extraViniculum as two detours in the SVG path.
+// The detour begins at the lower left of the area labeled extraViniculum below.
+// The detour proceeds one extraViniculum distance up and slightly to the right,
+// displacing the radiused corner between surd and viniculum. The radius is
+// traversed as usual, then the detour resumes. It goes right, to the end of
+// the very long viniculumn, then down one extraViniculum distance,
+// after which it resumes regular path geometry for the radical.
+
+/* viniculum
+ /
+ /▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒←extraViniculum
+ / █████████████████████←0.04em (40 unit) std viniculum thickness
+ / /
+ / /
+ / /\
+ / / surd
+*/
+
+var sqrtMain = function sqrtMain(extraViniculum, hLinePad) {
+ // sqrtMain path geometry is from glyph U221A in the font KaTeX Main
+ return "M95," + (622 + extraViniculum + hLinePad) + "\nc-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14\nc0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54\nc44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10\ns173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429\nc69,-144,104.5,-217.7,106.5,-221\nl" + extraViniculum / 2.075 + " -" + extraViniculum + "\nc5.3,-9.3,12,-14,20,-14\nH400000v" + (40 + extraViniculum) + "H845.2724\ns-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7\nc-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47z\nM" + (834 + extraViniculum) + " " + hLinePad + "h400000v" + (40 + extraViniculum) + "h-400000z";
+};
+
+var sqrtSize1 = function sqrtSize1(extraViniculum, hLinePad) {
+ // size1 is from glyph U221A in the font KaTeX_Size1-Regular
+ return "M263," + (601 + extraViniculum + hLinePad) + "c0.7,0,18,39.7,52,119\nc34,79.3,68.167,158.7,102.5,238c34.3,79.3,51.8,119.3,52.5,120\nc340,-704.7,510.7,-1060.3,512,-1067\nl" + extraViniculum / 2.084 + " -" + extraViniculum + "\nc4.7,-7.3,11,-11,19,-11\nH40000v" + (40 + extraViniculum) + "H1012.3\ns-271.3,567,-271.3,567c-38.7,80.7,-84,175,-136,283c-52,108,-89.167,185.3,-111.5,232\nc-22.3,46.7,-33.8,70.3,-34.5,71c-4.7,4.7,-12.3,7,-23,7s-12,-1,-12,-1\ns-109,-253,-109,-253c-72.7,-168,-109.3,-252,-110,-252c-10.7,8,-22,16.7,-34,26\nc-22,17.3,-33.3,26,-34,26s-26,-26,-26,-26s76,-59,76,-59s76,-60,76,-60z\nM" + (1001 + extraViniculum) + " " + hLinePad + "h400000v" + (40 + extraViniculum) + "h-400000z";
+};
+
+var sqrtSize2 = function sqrtSize2(extraViniculum, hLinePad) {
+ // size2 is from glyph U221A in the font KaTeX_Size2-Regular
+ return "M983 " + (10 + extraViniculum + hLinePad) + "\nl" + extraViniculum / 3.13 + " -" + extraViniculum + "\nc4,-6.7,10,-10,18,-10 H400000v" + (40 + extraViniculum) + "\nH1013.1s-83.4,268,-264.1,840c-180.7,572,-277,876.3,-289,913c-4.7,4.7,-12.7,7,-24,7\ns-12,0,-12,0c-1.3,-3.3,-3.7,-11.7,-7,-25c-35.3,-125.3,-106.7,-373.3,-214,-744\nc-10,12,-21,25,-33,39s-32,39,-32,39c-6,-5.3,-15,-14,-27,-26s25,-30,25,-30\nc26.7,-32.7,52,-63,76,-91s52,-60,52,-60s208,722,208,722\nc56,-175.3,126.3,-397.3,211,-666c84.7,-268.7,153.8,-488.2,207.5,-658.5\nc53.7,-170.3,84.5,-266.8,92.5,-289.5z\nM" + (1001 + extraViniculum) + " " + hLinePad + "h400000v" + (40 + extraViniculum) + "h-400000z";
+};
+
+var sqrtSize3 = function sqrtSize3(extraViniculum, hLinePad) {
+ // size3 is from glyph U221A in the font KaTeX_Size3-Regular
+ return "M424," + (2398 + extraViniculum + hLinePad) + "\nc-1.3,-0.7,-38.5,-172,-111.5,-514c-73,-342,-109.8,-513.3,-110.5,-514\nc0,-2,-10.7,14.3,-32,49c-4.7,7.3,-9.8,15.7,-15.5,25c-5.7,9.3,-9.8,16,-12.5,20\ns-5,7,-5,7c-4,-3.3,-8.3,-7.7,-13,-13s-13,-13,-13,-13s76,-122,76,-122s77,-121,77,-121\ns209,968,209,968c0,-2,84.7,-361.7,254,-1079c169.3,-717.3,254.7,-1077.7,256,-1081\nl" + extraViniculum / 4.223 + " -" + extraViniculum + "c4,-6.7,10,-10,18,-10 H400000\nv" + (40 + extraViniculum) + "H1014.6\ns-87.3,378.7,-272.6,1166c-185.3,787.3,-279.3,1182.3,-282,1185\nc-2,6,-10,9,-24,9\nc-8,0,-12,-0.7,-12,-2z M" + (1001 + extraViniculum) + " " + hLinePad + "\nh400000v" + (40 + extraViniculum) + "h-400000z";
+};
+
+var sqrtSize4 = function sqrtSize4(extraViniculum, hLinePad) {
+ // size4 is from glyph U221A in the font KaTeX_Size4-Regular
+ return "M473," + (2713 + extraViniculum + hLinePad) + "\nc339.3,-1799.3,509.3,-2700,510,-2702 l" + extraViniculum / 5.298 + " -" + extraViniculum + "\nc3.3,-7.3,9.3,-11,18,-11 H400000v" + (40 + extraViniculum) + "H1017.7\ns-90.5,478,-276.2,1466c-185.7,988,-279.5,1483,-281.5,1485c-2,6,-10,9,-24,9\nc-8,0,-12,-0.7,-12,-2c0,-1.3,-5.3,-32,-16,-92c-50.7,-293.3,-119.7,-693.3,-207,-1200\nc0,-1.3,-5.3,8.7,-16,30c-10.7,21.3,-21.3,42.7,-32,64s-16,33,-16,33s-26,-26,-26,-26\ns76,-153,76,-153s77,-151,77,-151c0.7,0.7,35.7,202,105,604c67.3,400.7,102,602.7,104,\n606zM" + (1001 + extraViniculum) + " " + hLinePad + "h400000v" + (40 + extraViniculum) + "H1017.7z";
+};
+
+var sqrtTall = function sqrtTall(extraViniculum, hLinePad, viewBoxHeight) {
+ // sqrtTall is from glyph U23B7 in the font KaTeX_Size4-Regular
+ // One path edge has a variable length. It runs vertically from the viniculumn
+ // to a point near (14 units) the bottom of the surd. The viniculum
+ // is normally 40 units thick. So the length of the line in question is:
+ var vertSegment = viewBoxHeight - 54 - hLinePad - extraViniculum;
+ return "M702 " + (extraViniculum + hLinePad) + "H400000" + (40 + extraViniculum) + "\nH742v" + vertSegment + "l-4 4-4 4c-.667.7 -2 1.5-4 2.5s-4.167 1.833-6.5 2.5-5.5 1-9.5 1\nh-12l-28-84c-16.667-52-96.667 -294.333-240-727l-212 -643 -85 170\nc-4-3.333-8.333-7.667-13 -13l-13-13l77-155 77-156c66 199.333 139 419.667\n219 661 l218 661zM702 " + hLinePad + "H400000v" + (40 + extraViniculum) + "H742z";
+};
+
+var sqrtPath = function sqrtPath(size, extraViniculum, viewBoxHeight) {
+ extraViniculum = 1000 * extraViniculum; // Convert from document ems to viewBox.
+
+ var path = "";
+
+ switch (size) {
+ case "sqrtMain":
+ path = sqrtMain(extraViniculum, hLinePad);
+ break;
+
+ case "sqrtSize1":
+ path = sqrtSize1(extraViniculum, hLinePad);
+ break;
+
+ case "sqrtSize2":
+ path = sqrtSize2(extraViniculum, hLinePad);
+ break;
+
+ case "sqrtSize3":
+ path = sqrtSize3(extraViniculum, hLinePad);
+ break;
+
+ case "sqrtSize4":
+ path = sqrtSize4(extraViniculum, hLinePad);
+ break;
+
+ case "sqrtTall":
+ path = sqrtTall(extraViniculum, hLinePad, viewBoxHeight);
+ }
+
+ return path;
+};
+var svgGeometry_path = {
+ // Two paths that cover gaps in built-up parentheses.
+ leftParenInner: "M291 0 H417 V300 H291 z",
+ rightParenInner: "M457 0 H583 V300 H457 z",
+ // The doubleleftarrow geometry is from glyph U+21D0 in the font KaTeX Main
+ doubleleftarrow: "M262 157\nl10-10c34-36 62.7-77 86-123 3.3-8 5-13.3 5-16 0-5.3-6.7-8-20-8-7.3\n 0-12.2.5-14.5 1.5-2.3 1-4.8 4.5-7.5 10.5-49.3 97.3-121.7 169.3-217 216-28\n 14-57.3 25-88 33-6.7 2-11 3.8-13 5.5-2 1.7-3 4.2-3 7.5s1 5.8 3 7.5\nc2 1.7 6.3 3.5 13 5.5 68 17.3 128.2 47.8 180.5 91.5 52.3 43.7 93.8 96.2 124.5\n 157.5 9.3 8 15.3 12.3 18 13h6c12-.7 18-4 18-10 0-2-1.7-7-5-15-23.3-46-52-87\n-86-123l-10-10h399738v-40H218c328 0 0 0 0 0l-10-8c-26.7-20-65.7-43-117-69 2.7\n-2 6-3.7 10-5 36.7-16 72.3-37.3 107-64l10-8h399782v-40z\nm8 0v40h399730v-40zm0 194v40h399730v-40z",
+ // doublerightarrow is from glyph U+21D2 in font KaTeX Main
+ doublerightarrow: "M399738 392l\n-10 10c-34 36-62.7 77-86 123-3.3 8-5 13.3-5 16 0 5.3 6.7 8 20 8 7.3 0 12.2-.5\n 14.5-1.5 2.3-1 4.8-4.5 7.5-10.5 49.3-97.3 121.7-169.3 217-216 28-14 57.3-25 88\n-33 6.7-2 11-3.8 13-5.5 2-1.7 3-4.2 3-7.5s-1-5.8-3-7.5c-2-1.7-6.3-3.5-13-5.5-68\n-17.3-128.2-47.8-180.5-91.5-52.3-43.7-93.8-96.2-124.5-157.5-9.3-8-15.3-12.3-18\n-13h-6c-12 .7-18 4-18 10 0 2 1.7 7 5 15 23.3 46 52 87 86 123l10 10H0v40h399782\nc-328 0 0 0 0 0l10 8c26.7 20 65.7 43 117 69-2.7 2-6 3.7-10 5-36.7 16-72.3 37.3\n-107 64l-10 8H0v40zM0 157v40h399730v-40zm0 194v40h399730v-40z",
+ // leftarrow is from glyph U+2190 in font KaTeX Main
+ leftarrow: "M400000 241H110l3-3c68.7-52.7 113.7-120\n 135-202 4-14.7 6-23 6-25 0-7.3-7-11-21-11-8 0-13.2.8-15.5 2.5-2.3 1.7-4.2 5.8\n-5.5 12.5-1.3 4.7-2.7 10.3-4 17-12 48.7-34.8 92-68.5 130S65.3 228.3 18 247\nc-10 4-16 7.7-18 11 0 8.7 6 14.3 18 17 47.3 18.7 87.8 47 121.5 85S196 441.3 208\n 490c.7 2 1.3 5 2 9s1.2 6.7 1.5 8c.3 1.3 1 3.3 2 6s2.2 4.5 3.5 5.5c1.3 1 3.3\n 1.8 6 2.5s6 1 10 1c14 0 21-3.7 21-11 0-2-2-10.3-6-25-20-79.3-65-146.7-135-202\n l-3-3h399890zM100 241v40h399900v-40z",
+ // overbrace is from glyphs U+23A9/23A8/23A7 in font KaTeX_Size4-Regular
+ leftbrace: "M6 548l-6-6v-35l6-11c56-104 135.3-181.3 238-232 57.3-28.7 117\n-45 179-50h399577v120H403c-43.3 7-81 15-113 26-100.7 33-179.7 91-237 174-2.7\n 5-6 9-10 13-.7 1-7.3 1-20 1H6z",
+ leftbraceunder: "M0 6l6-6h17c12.688 0 19.313.3 20 1 4 4 7.313 8.3 10 13\n 35.313 51.3 80.813 93.8 136.5 127.5 55.688 33.7 117.188 55.8 184.5 66.5.688\n 0 2 .3 4 1 18.688 2.7 76 4.3 172 5h399450v120H429l-6-1c-124.688-8-235-61.7\n-331-161C60.687 138.7 32.312 99.3 7 54L0 41V6z",
+ // overgroup is from the MnSymbol package (public domain)
+ leftgroup: "M400000 80\nH435C64 80 168.3 229.4 21 260c-5.9 1.2-18 0-18 0-2 0-3-1-3-3v-38C76 61 257 0\n 435 0h399565z",
+ leftgroupunder: "M400000 262\nH435C64 262 168.3 112.6 21 82c-5.9-1.2-18 0-18 0-2 0-3 1-3 3v38c76 158 257 219\n 435 219h399565z",
+ // Harpoons are from glyph U+21BD in font KaTeX Main
+ leftharpoon: "M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3\n-3.3 10.2-9.5 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5\n-18.3 3-21-1.3-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7\n-196 228-6.7 4.7-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40z",
+ leftharpoonplus: "M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3-3.3 10.2-9.5\n 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5-18.3 3-21-1.3\n-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7-196 228-6.7 4.7\n-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40zM0 435v40h400000v-40z\nm0 0v40h400000v-40z",
+ leftharpoondown: "M7 241c-4 4-6.333 8.667-7 14 0 5.333.667 9 2 11s5.333\n 5.333 12 10c90.667 54 156 130 196 228 3.333 10.667 6.333 16.333 9 17 2 .667 5\n 1 9 1h5c10.667 0 16.667-2 18-6 2-2.667 1-9.667-3-21-32-87.333-82.667-157.667\n-152-211l-3-3h399907v-40zM93 281 H400000 v-40L7 241z",
+ leftharpoondownplus: "M7 435c-4 4-6.3 8.7-7 14 0 5.3.7 9 2 11s5.3 5.3 12\n 10c90.7 54 156 130 196 228 3.3 10.7 6.3 16.3 9 17 2 .7 5 1 9 1h5c10.7 0 16.7\n-2 18-6 2-2.7 1-9.7-3-21-32-87.3-82.7-157.7-152-211l-3-3h399907v-40H7zm93 0\nv40h399900v-40zM0 241v40h399900v-40zm0 0v40h399900v-40z",
+ // hook is from glyph U+21A9 in font KaTeX Main
+ lefthook: "M400000 281 H103s-33-11.2-61-33.5S0 197.3 0 164s14.2-61.2 42.5\n-83.5C70.8 58.2 104 47 142 47 c16.7 0 25 6.7 25 20 0 12-8.7 18.7-26 20-40 3.3\n-68.7 15.7-86 37-10 12-15 25.3-15 40 0 22.7 9.8 40.7 29.5 54 19.7 13.3 43.5 21\n 71.5 23h399859zM103 281v-40h399897v40z",
+ leftlinesegment: "M40 281 V428 H0 V94 H40 V241 H400000 v40z\nM40 281 V428 H0 V94 H40 V241 H400000 v40z",
+ leftmapsto: "M40 281 V448H0V74H40V241H400000v40z\nM40 281 V448H0V74H40V241H400000v40z",
+ // tofrom is from glyph U+21C4 in font KaTeX AMS Regular
+ leftToFrom: "M0 147h400000v40H0zm0 214c68 40 115.7 95.7 143 167h22c15.3 0 23\n-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69-70-101l-7-8h399905v-40H95l7-8\nc28.7-32 52-65.7 70-101 10.7-23.3 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 265.3\n 68 321 0 361zm0-174v-40h399900v40zm100 154v40h399900v-40z",
+ longequal: "M0 50 h400000 v40H0z m0 194h40000v40H0z\nM0 50 h400000 v40H0z m0 194h40000v40H0z",
+ midbrace: "M200428 334\nc-100.7-8.3-195.3-44-280-108-55.3-42-101.7-93-139-153l-9-14c-2.7 4-5.7 8.7-9 14\n-53.3 86.7-123.7 153-211 199-66.7 36-137.3 56.3-212 62H0V214h199568c178.3-11.7\n 311.7-78.3 403-201 6-8 9.7-12 11-12 .7-.7 6.7-1 18-1s17.3.3 18 1c1.3 0 5 4 11\n 12 44.7 59.3 101.3 106.3 170 141s145.3 54.3 229 60h199572v120z",
+ midbraceunder: "M199572 214\nc100.7 8.3 195.3 44 280 108 55.3 42 101.7 93 139 153l9 14c2.7-4 5.7-8.7 9-14\n 53.3-86.7 123.7-153 211-199 66.7-36 137.3-56.3 212-62h199568v120H200432c-178.3\n 11.7-311.7 78.3-403 201-6 8-9.7 12-11 12-.7.7-6.7 1-18 1s-17.3-.3-18-1c-1.3 0\n-5-4-11-12-44.7-59.3-101.3-106.3-170-141s-145.3-54.3-229-60H0V214z",
+ oiintSize1: "M512.6 71.6c272.6 0 320.3 106.8 320.3 178.2 0 70.8-47.7 177.6\n-320.3 177.6S193.1 320.6 193.1 249.8c0-71.4 46.9-178.2 319.5-178.2z\nm368.1 178.2c0-86.4-60.9-215.4-368.1-215.4-306.4 0-367.3 129-367.3 215.4 0 85.8\n60.9 214.8 367.3 214.8 307.2 0 368.1-129 368.1-214.8z",
+ oiintSize2: "M757.8 100.1c384.7 0 451.1 137.6 451.1 230 0 91.3-66.4 228.8\n-451.1 228.8-386.3 0-452.7-137.5-452.7-228.8 0-92.4 66.4-230 452.7-230z\nm502.4 230c0-111.2-82.4-277.2-502.4-277.2s-504 166-504 277.2\nc0 110 84 276 504 276s502.4-166 502.4-276z",
+ oiiintSize1: "M681.4 71.6c408.9 0 480.5 106.8 480.5 178.2 0 70.8-71.6 177.6\n-480.5 177.6S202.1 320.6 202.1 249.8c0-71.4 70.5-178.2 479.3-178.2z\nm525.8 178.2c0-86.4-86.8-215.4-525.7-215.4-437.9 0-524.7 129-524.7 215.4 0\n85.8 86.8 214.8 524.7 214.8 438.9 0 525.7-129 525.7-214.8z",
+ oiiintSize2: "M1021.2 53c603.6 0 707.8 165.8 707.8 277.2 0 110-104.2 275.8\n-707.8 275.8-606 0-710.2-165.8-710.2-275.8C311 218.8 415.2 53 1021.2 53z\nm770.4 277.1c0-131.2-126.4-327.6-770.5-327.6S248.4 198.9 248.4 330.1\nc0 130 128.8 326.4 772.7 326.4s770.5-196.4 770.5-326.4z",
+ rightarrow: "M0 241v40h399891c-47.3 35.3-84 78-110 128\n-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20\n 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7\n 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85\n-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\n 151.7 139 205zm0 0v40h399900v-40z",
+ rightbrace: "M400000 542l\n-6 6h-17c-12.7 0-19.3-.3-20-1-4-4-7.3-8.3-10-13-35.3-51.3-80.8-93.8-136.5-127.5\ns-117.2-55.8-184.5-66.5c-.7 0-2-.3-4-1-18.7-2.7-76-4.3-172-5H0V214h399571l6 1\nc124.7 8 235 61.7 331 161 31.3 33.3 59.7 72.7 85 118l7 13v35z",
+ rightbraceunder: "M399994 0l6 6v35l-6 11c-56 104-135.3 181.3-238 232-57.3\n 28.7-117 45-179 50H-300V214h399897c43.3-7 81-15 113-26 100.7-33 179.7-91 237\n-174 2.7-5 6-9 10-13 .7-1 7.3-1 20-1h17z",
+ rightgroup: "M0 80h399565c371 0 266.7 149.4 414 180 5.9 1.2 18 0 18 0 2 0\n 3-1 3-3v-38c-76-158-257-219-435-219H0z",
+ rightgroupunder: "M0 262h399565c371 0 266.7-149.4 414-180 5.9-1.2 18 0 18\n 0 2 0 3 1 3 3v38c-76 158-257 219-435 219H0z",
+ rightharpoon: "M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3\n-3.7-15.3-11-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2\n-10.7 0-16.7 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58\n 69.2 92 94.5zm0 0v40h399900v-40z",
+ rightharpoonplus: "M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3-3.7-15.3-11\n-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2-10.7 0-16.7\n 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 69.2 92 94.5z\nm0 0v40h399900v-40z m100 194v40h399900v-40zm0 0v40h399900v-40z",
+ rightharpoondown: "M399747 511c0 7.3 6.7 11 20 11 8 0 13-.8 15-2.5s4.7-6.8\n 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 8.5-5.8 9.5\n-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3-64.7 57-92 95\n-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 241v40h399900v-40z",
+ rightharpoondownplus: "M399747 705c0 7.3 6.7 11 20 11 8 0 13-.8\n 15-2.5s4.7-6.8 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3\n 8.5-5.8 9.5-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3\n-64.7 57-92 95-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 435v40h399900v-40z\nm0-194v40h400000v-40zm0 0v40h400000v-40z",
+ righthook: "M399859 241c-764 0 0 0 0 0 40-3.3 68.7-15.7 86-37 10-12 15-25.3\n 15-40 0-22.7-9.8-40.7-29.5-54-19.7-13.3-43.5-21-71.5-23-17.3-1.3-26-8-26-20 0\n-13.3 8.7-20 26-20 38 0 71 11.2 99 33.5 0 0 7 5.6 21 16.7 14 11.2 21 33.5 21\n 66.8s-14 61.2-42 83.5c-28 22.3-61 33.5-99 33.5L0 241z M0 281v-40h399859v40z",
+ rightlinesegment: "M399960 241 V94 h40 V428 h-40 V281 H0 v-40z\nM399960 241 V94 h40 V428 h-40 V281 H0 v-40z",
+ rightToFrom: "M400000 167c-70.7-42-118-97.7-142-167h-23c-15.3 0-23 .3-23\n 1 0 1.3 5.3 13.7 16 37 18 35.3 41.3 69 70 101l7 8H0v40h399905l-7 8c-28.7 32\n-52 65.7-70 101-10.7 23.3-16 35.7-16 37 0 .7 7.7 1 23 1h23c24-69.3 71.3-125 142\n-167z M100 147v40h399900v-40zM0 341v40h399900v-40z",
+ // twoheadleftarrow is from glyph U+219E in font KaTeX AMS Regular
+ twoheadleftarrow: "M0 167c68 40\n 115.7 95.7 143 167h22c15.3 0 23-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69\n-70-101l-7-8h125l9 7c50.7 39.3 85 86 103 140h46c0-4.7-6.3-18.7-19-42-18-35.3\n-40-67.3-66-96l-9-9h399716v-40H284l9-9c26-28.7 48-60.7 66-96 12.7-23.333 19\n-37.333 19-42h-46c-18 54-52.3 100.7-103 140l-9 7H95l7-8c28.7-32 52-65.7 70-101\n 10.7-23.333 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 71.3 68 127 0 167z",
+ twoheadrightarrow: "M400000 167\nc-68-40-115.7-95.7-143-167h-22c-15.3 0-23 .3-23 1 0 1.3 5.3 13.7 16 37 18 35.3\n 41.3 69 70 101l7 8h-125l-9-7c-50.7-39.3-85-86-103-140h-46c0 4.7 6.3 18.7 19 42\n 18 35.3 40 67.3 66 96l9 9H0v40h399716l-9 9c-26 28.7-48 60.7-66 96-12.7 23.333\n-19 37.333-19 42h46c18-54 52.3-100.7 103-140l9-7h125l-7 8c-28.7 32-52 65.7-70\n 101-10.7 23.333-16 35.7-16 37 0 .7 7.7 1 23 1h22c27.3-71.3 75-127 143-167z",
+ // tilde1 is a modified version of a glyph from the MnSymbol package
+ tilde1: "M200 55.538c-77 0-168 73.953-177 73.953-3 0-7\n-2.175-9-5.437L2 97c-1-2-2-4-2-6 0-4 2-7 5-9l20-12C116 12 171 0 207 0c86 0\n 114 68 191 68 78 0 168-68 177-68 4 0 7 2 9 5l12 19c1 2.175 2 4.35 2 6.525 0\n 4.35-2 7.613-5 9.788l-19 13.05c-92 63.077-116.937 75.308-183 76.128\n-68.267.847-113-73.952-191-73.952z",
+ // ditto tilde2, tilde3, & tilde4
+ tilde2: "M344 55.266c-142 0-300.638 81.316-311.5 86.418\n-8.01 3.762-22.5 10.91-23.5 5.562L1 120c-1-2-1-3-1-4 0-5 3-9 8-10l18.4-9C160.9\n 31.9 283 0 358 0c148 0 188 122 331 122s314-97 326-97c4 0 8 2 10 7l7 21.114\nc1 2.14 1 3.21 1 4.28 0 5.347-3 9.626-7 10.696l-22.3 12.622C852.6 158.372 751\n 181.476 676 181.476c-149 0-189-126.21-332-126.21z",
+ tilde3: "M786 59C457 59 32 175.242 13 175.242c-6 0-10-3.457\n-11-10.37L.15 138c-1-7 3-12 10-13l19.2-6.4C378.4 40.7 634.3 0 804.3 0c337 0\n 411.8 157 746.8 157 328 0 754-112 773-112 5 0 10 3 11 9l1 14.075c1 8.066-.697\n 16.595-6.697 17.492l-21.052 7.31c-367.9 98.146-609.15 122.696-778.15 122.696\n -338 0-409-156.573-744-156.573z",
+ tilde4: "M786 58C457 58 32 177.487 13 177.487c-6 0-10-3.345\n-11-10.035L.15 143c-1-7 3-12 10-13l22-6.7C381.2 35 637.15 0 807.15 0c337 0 409\n 177 744 177 328 0 754-127 773-127 5 0 10 3 11 9l1 14.794c1 7.805-3 13.38-9\n 14.495l-20.7 5.574c-366.85 99.79-607.3 139.372-776.3 139.372-338 0-409\n -175.236-744-175.236z",
+ // vec is from glyph U+20D7 in font KaTeX Main
+ vec: "M377 20c0-5.333 1.833-10 5.5-14S391 0 397 0c4.667 0 8.667 1.667 12 5\n3.333 2.667 6.667 9 10 19 6.667 24.667 20.333 43.667 41 57 7.333 4.667 11\n10.667 11 18 0 6-1 10-3 12s-6.667 5-14 9c-28.667 14.667-53.667 35.667-75 63\n-1.333 1.333-3.167 3.5-5.5 6.5s-4 4.833-5 5.5c-1 .667-2.5 1.333-4.5 2s-4.333 1\n-7 1c-4.667 0-9.167-1.833-13.5-5.5S337 184 337 178c0-12.667 15.667-32.333 47-59\nH213l-171-1c-8.667-6-13-12.333-13-19 0-4.667 4.333-11.333 13-20h359\nc-16-25.333-24-45-24-59z",
+ // widehat1 is a modified version of a glyph from the MnSymbol package
+ widehat1: "M529 0h5l519 115c5 1 9 5 9 10 0 1-1 2-1 3l-4 22\nc-1 5-5 9-11 9h-2L532 67 19 159h-2c-5 0-9-4-11-9l-5-22c-1-6 2-12 8-13z",
+ // ditto widehat2, widehat3, & widehat4
+ widehat2: "M1181 0h2l1171 176c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 220h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z",
+ widehat3: "M1181 0h2l1171 236c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 280h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z",
+ widehat4: "M1181 0h2l1171 296c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 340h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z",
+ // widecheck paths are all inverted versions of widehat
+ widecheck1: "M529,159h5l519,-115c5,-1,9,-5,9,-10c0,-1,-1,-2,-1,-3l-4,-22c-1,\n-5,-5,-9,-11,-9h-2l-512,92l-513,-92h-2c-5,0,-9,4,-11,9l-5,22c-1,6,2,12,8,13z",
+ widecheck2: "M1181,220h2l1171,-176c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,153l-1167,-153h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z",
+ widecheck3: "M1181,280h2l1171,-236c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,213l-1167,-213h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z",
+ widecheck4: "M1181,340h2l1171,-296c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,273l-1167,-273h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z",
+ // The next ten paths support reaction arrows from the mhchem package.
+ // Arrows for \ce{<-->} are offset from xAxis by 0.22ex, per mhchem in LaTeX
+ // baraboveleftarrow is mostly from from glyph U+2190 in font KaTeX Main
+ baraboveleftarrow: "M400000 620h-399890l3 -3c68.7 -52.7 113.7 -120 135 -202\nc4 -14.7 6 -23 6 -25c0 -7.3 -7 -11 -21 -11c-8 0 -13.2 0.8 -15.5 2.5\nc-2.3 1.7 -4.2 5.8 -5.5 12.5c-1.3 4.7 -2.7 10.3 -4 17c-12 48.7 -34.8 92 -68.5 130\ns-74.2 66.3 -121.5 85c-10 4 -16 7.7 -18 11c0 8.7 6 14.3 18 17c47.3 18.7 87.8 47\n121.5 85s56.5 81.3 68.5 130c0.7 2 1.3 5 2 9s1.2 6.7 1.5 8c0.3 1.3 1 3.3 2 6\ns2.2 4.5 3.5 5.5c1.3 1 3.3 1.8 6 2.5s6 1 10 1c14 0 21 -3.7 21 -11\nc0 -2 -2 -10.3 -6 -25c-20 -79.3 -65 -146.7 -135 -202l-3 -3h399890z\nM100 620v40h399900v-40z M0 241v40h399900v-40zM0 241v40h399900v-40z",
+ // rightarrowabovebar is mostly from glyph U+2192, KaTeX Main
+ rightarrowabovebar: "M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32\n-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0\n13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39\n-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5\n-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\n151.7 139 205zm96 379h399894v40H0zm0 0h399904v40H0z",
+ // The short left harpoon has 0.5em (i.e. 500 units) kern on the left end.
+ // Ref from mhchem.sty: \rlap{\raisebox{-.22ex}{$\kern0.5em
+ baraboveshortleftharpoon: "M507,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17\nc2,0.7,5,1,9,1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21\nc-32,-87.3,-82.7,-157.7,-152,-211c0,0,-3,-3,-3,-3l399351,0l0,-40\nc-398570,0,-399437,0,-399437,0z M593 435 v40 H399500 v-40z\nM0 281 v-40 H399908 v40z M0 281 v-40 H399908 v40z",
+ rightharpoonaboveshortbar: "M0,241 l0,40c399126,0,399993,0,399993,0\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\nM0 241 v40 H399908 v-40z M0 475 v-40 H399500 v40z M0 475 v-40 H399500 v40z",
+ shortbaraboveleftharpoon: "M7,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17c2,0.7,5,1,9,\n1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21c-32,-87.3,-82.7,-157.7,\n-152,-211c0,0,-3,-3,-3,-3l399907,0l0,-40c-399126,0,-399993,0,-399993,0z\nM93 435 v40 H400000 v-40z M500 241 v40 H400000 v-40z M500 241 v40 H400000 v-40z",
+ shortrightharpoonabovebar: "M53,241l0,40c398570,0,399437,0,399437,0\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\nM500 241 v40 H399408 v-40z M500 435 v40 H400000 v-40z"
+};
+// CONCATENATED MODULE: ./src/tree.js
+
+
+/**
+ * This node represents a document fragment, which contains elements, but when
+ * placed into the DOM doesn't have any representation itself. It only contains
+ * children and doesn't have any DOM node properties.
+ */
+var tree_DocumentFragment =
+/*#__PURE__*/
+function () {
+ // HtmlDomNode
+ // Never used; needed for satisfying interface.
+ function DocumentFragment(children) {
+ this.children = void 0;
+ this.classes = void 0;
+ this.height = void 0;
+ this.depth = void 0;
+ this.maxFontSize = void 0;
+ this.style = void 0;
+ this.children = children;
+ this.classes = [];
+ this.height = 0;
+ this.depth = 0;
+ this.maxFontSize = 0;
+ this.style = {};
+ }
+
+ var _proto = DocumentFragment.prototype;
+
+ _proto.hasClass = function hasClass(className) {
+ return utils.contains(this.classes, className);
+ }
+ /** Convert the fragment into a node. */
+ ;
+
+ _proto.toNode = function toNode() {
+ var frag = document.createDocumentFragment();
+
+ for (var i = 0; i < this.children.length; i++) {
+ frag.appendChild(this.children[i].toNode());
+ }
+
+ return frag;
+ }
+ /** Convert the fragment into HTML markup. */
+ ;
+
+ _proto.toMarkup = function toMarkup() {
+ var markup = ""; // Simply concatenate the markup for the children together.
+
+ for (var i = 0; i < this.children.length; i++) {
+ markup += this.children[i].toMarkup();
+ }
+
+ return markup;
+ }
+ /**
+ * Converts the math node into a string, similar to innerText. Applies to
+ * MathDomNode's only.
+ */
+ ;
+
+ _proto.toText = function toText() {
+ // To avoid this, we would subclass documentFragment separately for
+ // MathML, but polyfills for subclassing is expensive per PR 1469.
+ // $FlowFixMe: Only works for ChildType = MathDomNode.
+ var toText = function toText(child) {
+ return child.toText();
+ };
+
+ return this.children.map(toText).join("");
+ };
+
+ return DocumentFragment;
+}();
+// CONCATENATED MODULE: ./src/domTree.js
+/**
+ * These objects store the data about the DOM nodes we create, as well as some
+ * extra data. They can then be transformed into real DOM nodes with the
+ * `toNode` function or HTML markup using `toMarkup`. They are useful for both
+ * storing extra properties on the nodes, as well as providing a way to easily
+ * work with the DOM.
+ *
+ * Similar functions for working with MathML nodes exist in mathMLTree.js.
+ *
+ * TODO: refactor `span` and `anchor` into common superclass when
+ * target environments support class inheritance
+ */
+
+
+
+
+
+/**
+ * Create an HTML className based on a list of classes. In addition to joining
+ * with spaces, we also remove empty classes.
+ */
+var createClass = function createClass(classes) {
+ return classes.filter(function (cls) {
+ return cls;
+ }).join(" ");
+};
+
+var initNode = function initNode(classes, options, style) {
+ this.classes = classes || [];
+ this.attributes = {};
+ this.height = 0;
+ this.depth = 0;
+ this.maxFontSize = 0;
+ this.style = style || {};
+
+ if (options) {
+ if (options.style.isTight()) {
+ this.classes.push("mtight");
+ }
+
+ var color = options.getColor();
+
+ if (color) {
+ this.style.color = color;
+ }
+ }
+};
+/**
+ * Convert into an HTML node
+ */
+
+
+var _toNode = function toNode(tagName) {
+ var node = document.createElement(tagName); // Apply the class
+
+ node.className = createClass(this.classes); // Apply inline styles
+
+ for (var style in this.style) {
+ if (this.style.hasOwnProperty(style)) {
+ // $FlowFixMe Flow doesn't seem to understand span.style's type.
+ node.style[style] = this.style[style];
+ }
+ } // Apply attributes
+
+
+ for (var attr in this.attributes) {
+ if (this.attributes.hasOwnProperty(attr)) {
+ node.setAttribute(attr, this.attributes[attr]);
+ }
+ } // Append the children, also as HTML nodes
+
+
+ for (var i = 0; i < this.children.length; i++) {
+ node.appendChild(this.children[i].toNode());
+ }
+
+ return node;
+};
+/**
+ * Convert into an HTML markup string
+ */
+
+
+var _toMarkup = function toMarkup(tagName) {
+ var markup = "<" + tagName; // Add the class
+
+ if (this.classes.length) {
+ markup += " class=\"" + utils.escape(createClass(this.classes)) + "\"";
+ }
+
+ var styles = ""; // Add the styles, after hyphenation
+
+ for (var style in this.style) {
+ if (this.style.hasOwnProperty(style)) {
+ styles += utils.hyphenate(style) + ":" + this.style[style] + ";";
+ }
+ }
+
+ if (styles) {
+ markup += " style=\"" + utils.escape(styles) + "\"";
+ } // Add the attributes
+
+
+ for (var attr in this.attributes) {
+ if (this.attributes.hasOwnProperty(attr)) {
+ markup += " " + attr + "=\"" + utils.escape(this.attributes[attr]) + "\"";
+ }
+ }
+
+ markup += ">"; // Add the markup of the children, also as markup
+
+ for (var i = 0; i < this.children.length; i++) {
+ markup += this.children[i].toMarkup();
+ }
+
+ markup += "" + tagName + ">";
+ return markup;
+}; // Making the type below exact with all optional fields doesn't work due to
+// - https://github.com/facebook/flow/issues/4582
+// - https://github.com/facebook/flow/issues/5688
+// However, since *all* fields are optional, $Shape<> works as suggested in 5688
+// above.
+// This type does not include all CSS properties. Additional properties should
+// be added as needed.
+
+
+/**
+ * This node represents a span node, with a className, a list of children, and
+ * an inline style. It also contains information about its height, depth, and
+ * maxFontSize.
+ *
+ * Represents two types with different uses: SvgSpan to wrap an SVG and DomSpan
+ * otherwise. This typesafety is important when HTML builders access a span's
+ * children.
+ */
+var domTree_Span =
+/*#__PURE__*/
+function () {
+ function Span(classes, children, options, style) {
+ this.children = void 0;
+ this.attributes = void 0;
+ this.classes = void 0;
+ this.height = void 0;
+ this.depth = void 0;
+ this.width = void 0;
+ this.maxFontSize = void 0;
+ this.style = void 0;
+ initNode.call(this, classes, options, style);
+ this.children = children || [];
+ }
+ /**
+ * Sets an arbitrary attribute on the span. Warning: use this wisely. Not
+ * all browsers support attributes the same, and having too many custom
+ * attributes is probably bad.
+ */
+
+
+ var _proto = Span.prototype;
+
+ _proto.setAttribute = function setAttribute(attribute, value) {
+ this.attributes[attribute] = value;
+ };
+
+ _proto.hasClass = function hasClass(className) {
+ return utils.contains(this.classes, className);
+ };
+
+ _proto.toNode = function toNode() {
+ return _toNode.call(this, "span");
+ };
+
+ _proto.toMarkup = function toMarkup() {
+ return _toMarkup.call(this, "span");
+ };
+
+ return Span;
+}();
+/**
+ * This node represents an anchor () element with a hyperlink. See `span`
+ * for further details.
+ */
+
+var domTree_Anchor =
+/*#__PURE__*/
+function () {
+ function Anchor(href, classes, children, options) {
+ this.children = void 0;
+ this.attributes = void 0;
+ this.classes = void 0;
+ this.height = void 0;
+ this.depth = void 0;
+ this.maxFontSize = void 0;
+ this.style = void 0;
+ initNode.call(this, classes, options);
+ this.children = children || [];
+ this.setAttribute('href', href);
+ }
+
+ var _proto2 = Anchor.prototype;
+
+ _proto2.setAttribute = function setAttribute(attribute, value) {
+ this.attributes[attribute] = value;
+ };
+
+ _proto2.hasClass = function hasClass(className) {
+ return utils.contains(this.classes, className);
+ };
+
+ _proto2.toNode = function toNode() {
+ return _toNode.call(this, "a");
+ };
+
+ _proto2.toMarkup = function toMarkup() {
+ return _toMarkup.call(this, "a");
+ };
+
+ return Anchor;
+}();
+/**
+ * This node represents an image embed () element.
+ */
+
+var domTree_Img =
+/*#__PURE__*/
+function () {
+ function Img(src, alt, style) {
+ this.src = void 0;
+ this.alt = void 0;
+ this.classes = void 0;
+ this.height = void 0;
+ this.depth = void 0;
+ this.maxFontSize = void 0;
+ this.style = void 0;
+ this.alt = alt;
+ this.src = src;
+ this.classes = ["mord"];
+ this.style = style;
+ }
+
+ var _proto3 = Img.prototype;
+
+ _proto3.hasClass = function hasClass(className) {
+ return utils.contains(this.classes, className);
+ };
+
+ _proto3.toNode = function toNode() {
+ var node = document.createElement("img");
+ node.src = this.src;
+ node.alt = this.alt;
+ node.className = "mord"; // Apply inline styles
+
+ for (var style in this.style) {
+ if (this.style.hasOwnProperty(style)) {
+ // $FlowFixMe
+ node.style[style] = this.style[style];
+ }
+ }
+
+ return node;
+ };
+
+ _proto3.toMarkup = function toMarkup() {
+ var markup = "";
+ return markup;
+ };
+
+ return Img;
+}();
+var iCombinations = {
+ 'î': "\u0131\u0302",
+ 'ï': "\u0131\u0308",
+ 'í': "\u0131\u0301",
+ // 'ī': '\u0131\u0304', // enable when we add Extended Latin
+ 'ì': "\u0131\u0300"
+};
+/**
+ * A symbol node contains information about a single symbol. It either renders
+ * to a single text node, or a span with a single text node in it, depending on
+ * whether it has CSS classes, styles, or needs italic correction.
+ */
+
+var domTree_SymbolNode =
+/*#__PURE__*/
+function () {
+ function SymbolNode(text, height, depth, italic, skew, width, classes, style) {
+ this.text = void 0;
+ this.height = void 0;
+ this.depth = void 0;
+ this.italic = void 0;
+ this.skew = void 0;
+ this.width = void 0;
+ this.maxFontSize = void 0;
+ this.classes = void 0;
+ this.style = void 0;
+ this.text = text;
+ this.height = height || 0;
+ this.depth = depth || 0;
+ this.italic = italic || 0;
+ this.skew = skew || 0;
+ this.width = width || 0;
+ this.classes = classes || [];
+ this.style = style || {};
+ this.maxFontSize = 0; // Mark text from non-Latin scripts with specific classes so that we
+ // can specify which fonts to use. This allows us to render these
+ // characters with a serif font in situations where the browser would
+ // either default to a sans serif or render a placeholder character.
+ // We use CSS class names like cjk_fallback, hangul_fallback and
+ // brahmic_fallback. See ./unicodeScripts.js for the set of possible
+ // script names
+
+ var script = scriptFromCodepoint(this.text.charCodeAt(0));
+
+ if (script) {
+ this.classes.push(script + "_fallback");
+ }
+
+ if (/[îïíì]/.test(this.text)) {
+ // add ī when we add Extended Latin
+ this.text = iCombinations[this.text];
+ }
+ }
+
+ var _proto4 = SymbolNode.prototype;
+
+ _proto4.hasClass = function hasClass(className) {
+ return utils.contains(this.classes, className);
+ }
+ /**
+ * Creates a text node or span from a symbol node. Note that a span is only
+ * created if it is needed.
+ */
+ ;
+
+ _proto4.toNode = function toNode() {
+ var node = document.createTextNode(this.text);
+ var span = null;
+
+ if (this.italic > 0) {
+ span = document.createElement("span");
+ span.style.marginRight = this.italic + "em";
+ }
+
+ if (this.classes.length > 0) {
+ span = span || document.createElement("span");
+ span.className = createClass(this.classes);
+ }
+
+ for (var style in this.style) {
+ if (this.style.hasOwnProperty(style)) {
+ span = span || document.createElement("span"); // $FlowFixMe Flow doesn't seem to understand span.style's type.
+
+ span.style[style] = this.style[style];
+ }
+ }
+
+ if (span) {
+ span.appendChild(node);
+ return span;
+ } else {
+ return node;
+ }
+ }
+ /**
+ * Creates markup for a symbol node.
+ */
+ ;
+
+ _proto4.toMarkup = function toMarkup() {
+ // TODO(alpert): More duplication than I'd like from
+ // span.prototype.toMarkup and symbolNode.prototype.toNode...
+ var needsSpan = false;
+ var markup = " 0) {
+ styles += "margin-right:" + this.italic + "em;";
+ }
+
+ for (var style in this.style) {
+ if (this.style.hasOwnProperty(style)) {
+ styles += utils.hyphenate(style) + ":" + this.style[style] + ";";
+ }
+ }
+
+ if (styles) {
+ needsSpan = true;
+ markup += " style=\"" + utils.escape(styles) + "\"";
+ }
+
+ var escaped = utils.escape(this.text);
+
+ if (needsSpan) {
+ markup += ">";
+ markup += escaped;
+ markup += "";
+ return markup;
+ } else {
+ return escaped;
+ }
+ };
+
+ return SymbolNode;
+}();
+/**
+ * SVG nodes are used to render stretchy wide elements.
+ */
+
+var SvgNode =
+/*#__PURE__*/
+function () {
+ function SvgNode(children, attributes) {
+ this.children = void 0;
+ this.attributes = void 0;
+ this.children = children || [];
+ this.attributes = attributes || {};
+ }
+
+ var _proto5 = SvgNode.prototype;
+
+ _proto5.toNode = function toNode() {
+ var svgNS = "http://www.w3.org/2000/svg";
+ var node = document.createElementNS(svgNS, "svg"); // Apply attributes
+
+ for (var attr in this.attributes) {
+ if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {
+ node.setAttribute(attr, this.attributes[attr]);
+ }
+ }
+
+ for (var i = 0; i < this.children.length; i++) {
+ node.appendChild(this.children[i].toNode());
+ }
+
+ return node;
+ };
+
+ _proto5.toMarkup = function toMarkup() {
+ var markup = "";
+ return markup;
+ };
+
+ return SvgNode;
+}();
+var domTree_PathNode =
+/*#__PURE__*/
+function () {
+ function PathNode(pathName, alternate) {
+ this.pathName = void 0;
+ this.alternate = void 0;
+ this.pathName = pathName;
+ this.alternate = alternate; // Used only for \sqrt
+ }
+
+ var _proto6 = PathNode.prototype;
+
+ _proto6.toNode = function toNode() {
+ var svgNS = "http://www.w3.org/2000/svg";
+ var node = document.createElementNS(svgNS, "path");
+
+ if (this.alternate) {
+ node.setAttribute("d", this.alternate);
+ } else {
+ node.setAttribute("d", svgGeometry_path[this.pathName]);
+ }
+
+ return node;
+ };
+
+ _proto6.toMarkup = function toMarkup() {
+ if (this.alternate) {
+ return "";
+ } else {
+ return "";
+ }
+ };
+
+ return PathNode;
+}();
+var LineNode =
+/*#__PURE__*/
+function () {
+ function LineNode(attributes) {
+ this.attributes = void 0;
+ this.attributes = attributes || {};
+ }
+
+ var _proto7 = LineNode.prototype;
+
+ _proto7.toNode = function toNode() {
+ var svgNS = "http://www.w3.org/2000/svg";
+ var node = document.createElementNS(svgNS, "line"); // Apply attributes
+
+ for (var attr in this.attributes) {
+ if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {
+ node.setAttribute(attr, this.attributes[attr]);
+ }
+ }
+
+ return node;
+ };
+
+ _proto7.toMarkup = function toMarkup() {
+ var markup = "";
+ return markup;
+ };
+
+ return LineNode;
+}();
+function assertSymbolDomNode(group) {
+ if (group instanceof domTree_SymbolNode) {
+ return group;
+ } else {
+ throw new Error("Expected symbolNode but got " + String(group) + ".");
+ }
+}
+function assertSpan(group) {
+ if (group instanceof domTree_Span) {
+ return group;
+ } else {
+ throw new Error("Expected span but got " + String(group) + ".");
+ }
+}
+// CONCATENATED MODULE: ./submodules/katex-fonts/fontMetricsData.js
+// This file is GENERATED by buildMetrics.sh. DO NOT MODIFY.
+/* harmony default export */ var fontMetricsData = ({
+ "AMS-Regular": {
+ "32": [0, 0, 0, 0, 0.25],
+ "65": [0, 0.68889, 0, 0, 0.72222],
+ "66": [0, 0.68889, 0, 0, 0.66667],
+ "67": [0, 0.68889, 0, 0, 0.72222],
+ "68": [0, 0.68889, 0, 0, 0.72222],
+ "69": [0, 0.68889, 0, 0, 0.66667],
+ "70": [0, 0.68889, 0, 0, 0.61111],
+ "71": [0, 0.68889, 0, 0, 0.77778],
+ "72": [0, 0.68889, 0, 0, 0.77778],
+ "73": [0, 0.68889, 0, 0, 0.38889],
+ "74": [0.16667, 0.68889, 0, 0, 0.5],
+ "75": [0, 0.68889, 0, 0, 0.77778],
+ "76": [0, 0.68889, 0, 0, 0.66667],
+ "77": [0, 0.68889, 0, 0, 0.94445],
+ "78": [0, 0.68889, 0, 0, 0.72222],
+ "79": [0.16667, 0.68889, 0, 0, 0.77778],
+ "80": [0, 0.68889, 0, 0, 0.61111],
+ "81": [0.16667, 0.68889, 0, 0, 0.77778],
+ "82": [0, 0.68889, 0, 0, 0.72222],
+ "83": [0, 0.68889, 0, 0, 0.55556],
+ "84": [0, 0.68889, 0, 0, 0.66667],
+ "85": [0, 0.68889, 0, 0, 0.72222],
+ "86": [0, 0.68889, 0, 0, 0.72222],
+ "87": [0, 0.68889, 0, 0, 1.0],
+ "88": [0, 0.68889, 0, 0, 0.72222],
+ "89": [0, 0.68889, 0, 0, 0.72222],
+ "90": [0, 0.68889, 0, 0, 0.66667],
+ "107": [0, 0.68889, 0, 0, 0.55556],
+ "160": [0, 0, 0, 0, 0.25],
+ "165": [0, 0.675, 0.025, 0, 0.75],
+ "174": [0.15559, 0.69224, 0, 0, 0.94666],
+ "240": [0, 0.68889, 0, 0, 0.55556],
+ "295": [0, 0.68889, 0, 0, 0.54028],
+ "710": [0, 0.825, 0, 0, 2.33334],
+ "732": [0, 0.9, 0, 0, 2.33334],
+ "770": [0, 0.825, 0, 0, 2.33334],
+ "771": [0, 0.9, 0, 0, 2.33334],
+ "989": [0.08167, 0.58167, 0, 0, 0.77778],
+ "1008": [0, 0.43056, 0.04028, 0, 0.66667],
+ "8245": [0, 0.54986, 0, 0, 0.275],
+ "8463": [0, 0.68889, 0, 0, 0.54028],
+ "8487": [0, 0.68889, 0, 0, 0.72222],
+ "8498": [0, 0.68889, 0, 0, 0.55556],
+ "8502": [0, 0.68889, 0, 0, 0.66667],
+ "8503": [0, 0.68889, 0, 0, 0.44445],
+ "8504": [0, 0.68889, 0, 0, 0.66667],
+ "8513": [0, 0.68889, 0, 0, 0.63889],
+ "8592": [-0.03598, 0.46402, 0, 0, 0.5],
+ "8594": [-0.03598, 0.46402, 0, 0, 0.5],
+ "8602": [-0.13313, 0.36687, 0, 0, 1.0],
+ "8603": [-0.13313, 0.36687, 0, 0, 1.0],
+ "8606": [0.01354, 0.52239, 0, 0, 1.0],
+ "8608": [0.01354, 0.52239, 0, 0, 1.0],
+ "8610": [0.01354, 0.52239, 0, 0, 1.11111],
+ "8611": [0.01354, 0.52239, 0, 0, 1.11111],
+ "8619": [0, 0.54986, 0, 0, 1.0],
+ "8620": [0, 0.54986, 0, 0, 1.0],
+ "8621": [-0.13313, 0.37788, 0, 0, 1.38889],
+ "8622": [-0.13313, 0.36687, 0, 0, 1.0],
+ "8624": [0, 0.69224, 0, 0, 0.5],
+ "8625": [0, 0.69224, 0, 0, 0.5],
+ "8630": [0, 0.43056, 0, 0, 1.0],
+ "8631": [0, 0.43056, 0, 0, 1.0],
+ "8634": [0.08198, 0.58198, 0, 0, 0.77778],
+ "8635": [0.08198, 0.58198, 0, 0, 0.77778],
+ "8638": [0.19444, 0.69224, 0, 0, 0.41667],
+ "8639": [0.19444, 0.69224, 0, 0, 0.41667],
+ "8642": [0.19444, 0.69224, 0, 0, 0.41667],
+ "8643": [0.19444, 0.69224, 0, 0, 0.41667],
+ "8644": [0.1808, 0.675, 0, 0, 1.0],
+ "8646": [0.1808, 0.675, 0, 0, 1.0],
+ "8647": [0.1808, 0.675, 0, 0, 1.0],
+ "8648": [0.19444, 0.69224, 0, 0, 0.83334],
+ "8649": [0.1808, 0.675, 0, 0, 1.0],
+ "8650": [0.19444, 0.69224, 0, 0, 0.83334],
+ "8651": [0.01354, 0.52239, 0, 0, 1.0],
+ "8652": [0.01354, 0.52239, 0, 0, 1.0],
+ "8653": [-0.13313, 0.36687, 0, 0, 1.0],
+ "8654": [-0.13313, 0.36687, 0, 0, 1.0],
+ "8655": [-0.13313, 0.36687, 0, 0, 1.0],
+ "8666": [0.13667, 0.63667, 0, 0, 1.0],
+ "8667": [0.13667, 0.63667, 0, 0, 1.0],
+ "8669": [-0.13313, 0.37788, 0, 0, 1.0],
+ "8672": [-0.064, 0.437, 0, 0, 1.334],
+ "8674": [-0.064, 0.437, 0, 0, 1.334],
+ "8705": [0, 0.825, 0, 0, 0.5],
+ "8708": [0, 0.68889, 0, 0, 0.55556],
+ "8709": [0.08167, 0.58167, 0, 0, 0.77778],
+ "8717": [0, 0.43056, 0, 0, 0.42917],
+ "8722": [-0.03598, 0.46402, 0, 0, 0.5],
+ "8724": [0.08198, 0.69224, 0, 0, 0.77778],
+ "8726": [0.08167, 0.58167, 0, 0, 0.77778],
+ "8733": [0, 0.69224, 0, 0, 0.77778],
+ "8736": [0, 0.69224, 0, 0, 0.72222],
+ "8737": [0, 0.69224, 0, 0, 0.72222],
+ "8738": [0.03517, 0.52239, 0, 0, 0.72222],
+ "8739": [0.08167, 0.58167, 0, 0, 0.22222],
+ "8740": [0.25142, 0.74111, 0, 0, 0.27778],
+ "8741": [0.08167, 0.58167, 0, 0, 0.38889],
+ "8742": [0.25142, 0.74111, 0, 0, 0.5],
+ "8756": [0, 0.69224, 0, 0, 0.66667],
+ "8757": [0, 0.69224, 0, 0, 0.66667],
+ "8764": [-0.13313, 0.36687, 0, 0, 0.77778],
+ "8765": [-0.13313, 0.37788, 0, 0, 0.77778],
+ "8769": [-0.13313, 0.36687, 0, 0, 0.77778],
+ "8770": [-0.03625, 0.46375, 0, 0, 0.77778],
+ "8774": [0.30274, 0.79383, 0, 0, 0.77778],
+ "8776": [-0.01688, 0.48312, 0, 0, 0.77778],
+ "8778": [0.08167, 0.58167, 0, 0, 0.77778],
+ "8782": [0.06062, 0.54986, 0, 0, 0.77778],
+ "8783": [0.06062, 0.54986, 0, 0, 0.77778],
+ "8785": [0.08198, 0.58198, 0, 0, 0.77778],
+ "8786": [0.08198, 0.58198, 0, 0, 0.77778],
+ "8787": [0.08198, 0.58198, 0, 0, 0.77778],
+ "8790": [0, 0.69224, 0, 0, 0.77778],
+ "8791": [0.22958, 0.72958, 0, 0, 0.77778],
+ "8796": [0.08198, 0.91667, 0, 0, 0.77778],
+ "8806": [0.25583, 0.75583, 0, 0, 0.77778],
+ "8807": [0.25583, 0.75583, 0, 0, 0.77778],
+ "8808": [0.25142, 0.75726, 0, 0, 0.77778],
+ "8809": [0.25142, 0.75726, 0, 0, 0.77778],
+ "8812": [0.25583, 0.75583, 0, 0, 0.5],
+ "8814": [0.20576, 0.70576, 0, 0, 0.77778],
+ "8815": [0.20576, 0.70576, 0, 0, 0.77778],
+ "8816": [0.30274, 0.79383, 0, 0, 0.77778],
+ "8817": [0.30274, 0.79383, 0, 0, 0.77778],
+ "8818": [0.22958, 0.72958, 0, 0, 0.77778],
+ "8819": [0.22958, 0.72958, 0, 0, 0.77778],
+ "8822": [0.1808, 0.675, 0, 0, 0.77778],
+ "8823": [0.1808, 0.675, 0, 0, 0.77778],
+ "8828": [0.13667, 0.63667, 0, 0, 0.77778],
+ "8829": [0.13667, 0.63667, 0, 0, 0.77778],
+ "8830": [0.22958, 0.72958, 0, 0, 0.77778],
+ "8831": [0.22958, 0.72958, 0, 0, 0.77778],
+ "8832": [0.20576, 0.70576, 0, 0, 0.77778],
+ "8833": [0.20576, 0.70576, 0, 0, 0.77778],
+ "8840": [0.30274, 0.79383, 0, 0, 0.77778],
+ "8841": [0.30274, 0.79383, 0, 0, 0.77778],
+ "8842": [0.13597, 0.63597, 0, 0, 0.77778],
+ "8843": [0.13597, 0.63597, 0, 0, 0.77778],
+ "8847": [0.03517, 0.54986, 0, 0, 0.77778],
+ "8848": [0.03517, 0.54986, 0, 0, 0.77778],
+ "8858": [0.08198, 0.58198, 0, 0, 0.77778],
+ "8859": [0.08198, 0.58198, 0, 0, 0.77778],
+ "8861": [0.08198, 0.58198, 0, 0, 0.77778],
+ "8862": [0, 0.675, 0, 0, 0.77778],
+ "8863": [0, 0.675, 0, 0, 0.77778],
+ "8864": [0, 0.675, 0, 0, 0.77778],
+ "8865": [0, 0.675, 0, 0, 0.77778],
+ "8872": [0, 0.69224, 0, 0, 0.61111],
+ "8873": [0, 0.69224, 0, 0, 0.72222],
+ "8874": [0, 0.69224, 0, 0, 0.88889],
+ "8876": [0, 0.68889, 0, 0, 0.61111],
+ "8877": [0, 0.68889, 0, 0, 0.61111],
+ "8878": [0, 0.68889, 0, 0, 0.72222],
+ "8879": [0, 0.68889, 0, 0, 0.72222],
+ "8882": [0.03517, 0.54986, 0, 0, 0.77778],
+ "8883": [0.03517, 0.54986, 0, 0, 0.77778],
+ "8884": [0.13667, 0.63667, 0, 0, 0.77778],
+ "8885": [0.13667, 0.63667, 0, 0, 0.77778],
+ "8888": [0, 0.54986, 0, 0, 1.11111],
+ "8890": [0.19444, 0.43056, 0, 0, 0.55556],
+ "8891": [0.19444, 0.69224, 0, 0, 0.61111],
+ "8892": [0.19444, 0.69224, 0, 0, 0.61111],
+ "8901": [0, 0.54986, 0, 0, 0.27778],
+ "8903": [0.08167, 0.58167, 0, 0, 0.77778],
+ "8905": [0.08167, 0.58167, 0, 0, 0.77778],
+ "8906": [0.08167, 0.58167, 0, 0, 0.77778],
+ "8907": [0, 0.69224, 0, 0, 0.77778],
+ "8908": [0, 0.69224, 0, 0, 0.77778],
+ "8909": [-0.03598, 0.46402, 0, 0, 0.77778],
+ "8910": [0, 0.54986, 0, 0, 0.76042],
+ "8911": [0, 0.54986, 0, 0, 0.76042],
+ "8912": [0.03517, 0.54986, 0, 0, 0.77778],
+ "8913": [0.03517, 0.54986, 0, 0, 0.77778],
+ "8914": [0, 0.54986, 0, 0, 0.66667],
+ "8915": [0, 0.54986, 0, 0, 0.66667],
+ "8916": [0, 0.69224, 0, 0, 0.66667],
+ "8918": [0.0391, 0.5391, 0, 0, 0.77778],
+ "8919": [0.0391, 0.5391, 0, 0, 0.77778],
+ "8920": [0.03517, 0.54986, 0, 0, 1.33334],
+ "8921": [0.03517, 0.54986, 0, 0, 1.33334],
+ "8922": [0.38569, 0.88569, 0, 0, 0.77778],
+ "8923": [0.38569, 0.88569, 0, 0, 0.77778],
+ "8926": [0.13667, 0.63667, 0, 0, 0.77778],
+ "8927": [0.13667, 0.63667, 0, 0, 0.77778],
+ "8928": [0.30274, 0.79383, 0, 0, 0.77778],
+ "8929": [0.30274, 0.79383, 0, 0, 0.77778],
+ "8934": [0.23222, 0.74111, 0, 0, 0.77778],
+ "8935": [0.23222, 0.74111, 0, 0, 0.77778],
+ "8936": [0.23222, 0.74111, 0, 0, 0.77778],
+ "8937": [0.23222, 0.74111, 0, 0, 0.77778],
+ "8938": [0.20576, 0.70576, 0, 0, 0.77778],
+ "8939": [0.20576, 0.70576, 0, 0, 0.77778],
+ "8940": [0.30274, 0.79383, 0, 0, 0.77778],
+ "8941": [0.30274, 0.79383, 0, 0, 0.77778],
+ "8994": [0.19444, 0.69224, 0, 0, 0.77778],
+ "8995": [0.19444, 0.69224, 0, 0, 0.77778],
+ "9416": [0.15559, 0.69224, 0, 0, 0.90222],
+ "9484": [0, 0.69224, 0, 0, 0.5],
+ "9488": [0, 0.69224, 0, 0, 0.5],
+ "9492": [0, 0.37788, 0, 0, 0.5],
+ "9496": [0, 0.37788, 0, 0, 0.5],
+ "9585": [0.19444, 0.68889, 0, 0, 0.88889],
+ "9586": [0.19444, 0.74111, 0, 0, 0.88889],
+ "9632": [0, 0.675, 0, 0, 0.77778],
+ "9633": [0, 0.675, 0, 0, 0.77778],
+ "9650": [0, 0.54986, 0, 0, 0.72222],
+ "9651": [0, 0.54986, 0, 0, 0.72222],
+ "9654": [0.03517, 0.54986, 0, 0, 0.77778],
+ "9660": [0, 0.54986, 0, 0, 0.72222],
+ "9661": [0, 0.54986, 0, 0, 0.72222],
+ "9664": [0.03517, 0.54986, 0, 0, 0.77778],
+ "9674": [0.11111, 0.69224, 0, 0, 0.66667],
+ "9733": [0.19444, 0.69224, 0, 0, 0.94445],
+ "10003": [0, 0.69224, 0, 0, 0.83334],
+ "10016": [0, 0.69224, 0, 0, 0.83334],
+ "10731": [0.11111, 0.69224, 0, 0, 0.66667],
+ "10846": [0.19444, 0.75583, 0, 0, 0.61111],
+ "10877": [0.13667, 0.63667, 0, 0, 0.77778],
+ "10878": [0.13667, 0.63667, 0, 0, 0.77778],
+ "10885": [0.25583, 0.75583, 0, 0, 0.77778],
+ "10886": [0.25583, 0.75583, 0, 0, 0.77778],
+ "10887": [0.13597, 0.63597, 0, 0, 0.77778],
+ "10888": [0.13597, 0.63597, 0, 0, 0.77778],
+ "10889": [0.26167, 0.75726, 0, 0, 0.77778],
+ "10890": [0.26167, 0.75726, 0, 0, 0.77778],
+ "10891": [0.48256, 0.98256, 0, 0, 0.77778],
+ "10892": [0.48256, 0.98256, 0, 0, 0.77778],
+ "10901": [0.13667, 0.63667, 0, 0, 0.77778],
+ "10902": [0.13667, 0.63667, 0, 0, 0.77778],
+ "10933": [0.25142, 0.75726, 0, 0, 0.77778],
+ "10934": [0.25142, 0.75726, 0, 0, 0.77778],
+ "10935": [0.26167, 0.75726, 0, 0, 0.77778],
+ "10936": [0.26167, 0.75726, 0, 0, 0.77778],
+ "10937": [0.26167, 0.75726, 0, 0, 0.77778],
+ "10938": [0.26167, 0.75726, 0, 0, 0.77778],
+ "10949": [0.25583, 0.75583, 0, 0, 0.77778],
+ "10950": [0.25583, 0.75583, 0, 0, 0.77778],
+ "10955": [0.28481, 0.79383, 0, 0, 0.77778],
+ "10956": [0.28481, 0.79383, 0, 0, 0.77778],
+ "57350": [0.08167, 0.58167, 0, 0, 0.22222],
+ "57351": [0.08167, 0.58167, 0, 0, 0.38889],
+ "57352": [0.08167, 0.58167, 0, 0, 0.77778],
+ "57353": [0, 0.43056, 0.04028, 0, 0.66667],
+ "57356": [0.25142, 0.75726, 0, 0, 0.77778],
+ "57357": [0.25142, 0.75726, 0, 0, 0.77778],
+ "57358": [0.41951, 0.91951, 0, 0, 0.77778],
+ "57359": [0.30274, 0.79383, 0, 0, 0.77778],
+ "57360": [0.30274, 0.79383, 0, 0, 0.77778],
+ "57361": [0.41951, 0.91951, 0, 0, 0.77778],
+ "57366": [0.25142, 0.75726, 0, 0, 0.77778],
+ "57367": [0.25142, 0.75726, 0, 0, 0.77778],
+ "57368": [0.25142, 0.75726, 0, 0, 0.77778],
+ "57369": [0.25142, 0.75726, 0, 0, 0.77778],
+ "57370": [0.13597, 0.63597, 0, 0, 0.77778],
+ "57371": [0.13597, 0.63597, 0, 0, 0.77778]
+ },
+ "Caligraphic-Regular": {
+ "32": [0, 0, 0, 0, 0.25],
+ "65": [0, 0.68333, 0, 0.19445, 0.79847],
+ "66": [0, 0.68333, 0.03041, 0.13889, 0.65681],
+ "67": [0, 0.68333, 0.05834, 0.13889, 0.52653],
+ "68": [0, 0.68333, 0.02778, 0.08334, 0.77139],
+ "69": [0, 0.68333, 0.08944, 0.11111, 0.52778],
+ "70": [0, 0.68333, 0.09931, 0.11111, 0.71875],
+ "71": [0.09722, 0.68333, 0.0593, 0.11111, 0.59487],
+ "72": [0, 0.68333, 0.00965, 0.11111, 0.84452],
+ "73": [0, 0.68333, 0.07382, 0, 0.54452],
+ "74": [0.09722, 0.68333, 0.18472, 0.16667, 0.67778],
+ "75": [0, 0.68333, 0.01445, 0.05556, 0.76195],
+ "76": [0, 0.68333, 0, 0.13889, 0.68972],
+ "77": [0, 0.68333, 0, 0.13889, 1.2009],
+ "78": [0, 0.68333, 0.14736, 0.08334, 0.82049],
+ "79": [0, 0.68333, 0.02778, 0.11111, 0.79611],
+ "80": [0, 0.68333, 0.08222, 0.08334, 0.69556],
+ "81": [0.09722, 0.68333, 0, 0.11111, 0.81667],
+ "82": [0, 0.68333, 0, 0.08334, 0.8475],
+ "83": [0, 0.68333, 0.075, 0.13889, 0.60556],
+ "84": [0, 0.68333, 0.25417, 0, 0.54464],
+ "85": [0, 0.68333, 0.09931, 0.08334, 0.62583],
+ "86": [0, 0.68333, 0.08222, 0, 0.61278],
+ "87": [0, 0.68333, 0.08222, 0.08334, 0.98778],
+ "88": [0, 0.68333, 0.14643, 0.13889, 0.7133],
+ "89": [0.09722, 0.68333, 0.08222, 0.08334, 0.66834],
+ "90": [0, 0.68333, 0.07944, 0.13889, 0.72473],
+ "160": [0, 0, 0, 0, 0.25]
+ },
+ "Fraktur-Regular": {
+ "32": [0, 0, 0, 0, 0.25],
+ "33": [0, 0.69141, 0, 0, 0.29574],
+ "34": [0, 0.69141, 0, 0, 0.21471],
+ "38": [0, 0.69141, 0, 0, 0.73786],
+ "39": [0, 0.69141, 0, 0, 0.21201],
+ "40": [0.24982, 0.74947, 0, 0, 0.38865],
+ "41": [0.24982, 0.74947, 0, 0, 0.38865],
+ "42": [0, 0.62119, 0, 0, 0.27764],
+ "43": [0.08319, 0.58283, 0, 0, 0.75623],
+ "44": [0, 0.10803, 0, 0, 0.27764],
+ "45": [0.08319, 0.58283, 0, 0, 0.75623],
+ "46": [0, 0.10803, 0, 0, 0.27764],
+ "47": [0.24982, 0.74947, 0, 0, 0.50181],
+ "48": [0, 0.47534, 0, 0, 0.50181],
+ "49": [0, 0.47534, 0, 0, 0.50181],
+ "50": [0, 0.47534, 0, 0, 0.50181],
+ "51": [0.18906, 0.47534, 0, 0, 0.50181],
+ "52": [0.18906, 0.47534, 0, 0, 0.50181],
+ "53": [0.18906, 0.47534, 0, 0, 0.50181],
+ "54": [0, 0.69141, 0, 0, 0.50181],
+ "55": [0.18906, 0.47534, 0, 0, 0.50181],
+ "56": [0, 0.69141, 0, 0, 0.50181],
+ "57": [0.18906, 0.47534, 0, 0, 0.50181],
+ "58": [0, 0.47534, 0, 0, 0.21606],
+ "59": [0.12604, 0.47534, 0, 0, 0.21606],
+ "61": [-0.13099, 0.36866, 0, 0, 0.75623],
+ "63": [0, 0.69141, 0, 0, 0.36245],
+ "65": [0, 0.69141, 0, 0, 0.7176],
+ "66": [0, 0.69141, 0, 0, 0.88397],
+ "67": [0, 0.69141, 0, 0, 0.61254],
+ "68": [0, 0.69141, 0, 0, 0.83158],
+ "69": [0, 0.69141, 0, 0, 0.66278],
+ "70": [0.12604, 0.69141, 0, 0, 0.61119],
+ "71": [0, 0.69141, 0, 0, 0.78539],
+ "72": [0.06302, 0.69141, 0, 0, 0.7203],
+ "73": [0, 0.69141, 0, 0, 0.55448],
+ "74": [0.12604, 0.69141, 0, 0, 0.55231],
+ "75": [0, 0.69141, 0, 0, 0.66845],
+ "76": [0, 0.69141, 0, 0, 0.66602],
+ "77": [0, 0.69141, 0, 0, 1.04953],
+ "78": [0, 0.69141, 0, 0, 0.83212],
+ "79": [0, 0.69141, 0, 0, 0.82699],
+ "80": [0.18906, 0.69141, 0, 0, 0.82753],
+ "81": [0.03781, 0.69141, 0, 0, 0.82699],
+ "82": [0, 0.69141, 0, 0, 0.82807],
+ "83": [0, 0.69141, 0, 0, 0.82861],
+ "84": [0, 0.69141, 0, 0, 0.66899],
+ "85": [0, 0.69141, 0, 0, 0.64576],
+ "86": [0, 0.69141, 0, 0, 0.83131],
+ "87": [0, 0.69141, 0, 0, 1.04602],
+ "88": [0, 0.69141, 0, 0, 0.71922],
+ "89": [0.18906, 0.69141, 0, 0, 0.83293],
+ "90": [0.12604, 0.69141, 0, 0, 0.60201],
+ "91": [0.24982, 0.74947, 0, 0, 0.27764],
+ "93": [0.24982, 0.74947, 0, 0, 0.27764],
+ "94": [0, 0.69141, 0, 0, 0.49965],
+ "97": [0, 0.47534, 0, 0, 0.50046],
+ "98": [0, 0.69141, 0, 0, 0.51315],
+ "99": [0, 0.47534, 0, 0, 0.38946],
+ "100": [0, 0.62119, 0, 0, 0.49857],
+ "101": [0, 0.47534, 0, 0, 0.40053],
+ "102": [0.18906, 0.69141, 0, 0, 0.32626],
+ "103": [0.18906, 0.47534, 0, 0, 0.5037],
+ "104": [0.18906, 0.69141, 0, 0, 0.52126],
+ "105": [0, 0.69141, 0, 0, 0.27899],
+ "106": [0, 0.69141, 0, 0, 0.28088],
+ "107": [0, 0.69141, 0, 0, 0.38946],
+ "108": [0, 0.69141, 0, 0, 0.27953],
+ "109": [0, 0.47534, 0, 0, 0.76676],
+ "110": [0, 0.47534, 0, 0, 0.52666],
+ "111": [0, 0.47534, 0, 0, 0.48885],
+ "112": [0.18906, 0.52396, 0, 0, 0.50046],
+ "113": [0.18906, 0.47534, 0, 0, 0.48912],
+ "114": [0, 0.47534, 0, 0, 0.38919],
+ "115": [0, 0.47534, 0, 0, 0.44266],
+ "116": [0, 0.62119, 0, 0, 0.33301],
+ "117": [0, 0.47534, 0, 0, 0.5172],
+ "118": [0, 0.52396, 0, 0, 0.5118],
+ "119": [0, 0.52396, 0, 0, 0.77351],
+ "120": [0.18906, 0.47534, 0, 0, 0.38865],
+ "121": [0.18906, 0.47534, 0, 0, 0.49884],
+ "122": [0.18906, 0.47534, 0, 0, 0.39054],
+ "160": [0, 0, 0, 0, 0.25],
+ "8216": [0, 0.69141, 0, 0, 0.21471],
+ "8217": [0, 0.69141, 0, 0, 0.21471],
+ "58112": [0, 0.62119, 0, 0, 0.49749],
+ "58113": [0, 0.62119, 0, 0, 0.4983],
+ "58114": [0.18906, 0.69141, 0, 0, 0.33328],
+ "58115": [0.18906, 0.69141, 0, 0, 0.32923],
+ "58116": [0.18906, 0.47534, 0, 0, 0.50343],
+ "58117": [0, 0.69141, 0, 0, 0.33301],
+ "58118": [0, 0.62119, 0, 0, 0.33409],
+ "58119": [0, 0.47534, 0, 0, 0.50073]
+ },
+ "Main-Bold": {
+ "32": [0, 0, 0, 0, 0.25],
+ "33": [0, 0.69444, 0, 0, 0.35],
+ "34": [0, 0.69444, 0, 0, 0.60278],
+ "35": [0.19444, 0.69444, 0, 0, 0.95833],
+ "36": [0.05556, 0.75, 0, 0, 0.575],
+ "37": [0.05556, 0.75, 0, 0, 0.95833],
+ "38": [0, 0.69444, 0, 0, 0.89444],
+ "39": [0, 0.69444, 0, 0, 0.31944],
+ "40": [0.25, 0.75, 0, 0, 0.44722],
+ "41": [0.25, 0.75, 0, 0, 0.44722],
+ "42": [0, 0.75, 0, 0, 0.575],
+ "43": [0.13333, 0.63333, 0, 0, 0.89444],
+ "44": [0.19444, 0.15556, 0, 0, 0.31944],
+ "45": [0, 0.44444, 0, 0, 0.38333],
+ "46": [0, 0.15556, 0, 0, 0.31944],
+ "47": [0.25, 0.75, 0, 0, 0.575],
+ "48": [0, 0.64444, 0, 0, 0.575],
+ "49": [0, 0.64444, 0, 0, 0.575],
+ "50": [0, 0.64444, 0, 0, 0.575],
+ "51": [0, 0.64444, 0, 0, 0.575],
+ "52": [0, 0.64444, 0, 0, 0.575],
+ "53": [0, 0.64444, 0, 0, 0.575],
+ "54": [0, 0.64444, 0, 0, 0.575],
+ "55": [0, 0.64444, 0, 0, 0.575],
+ "56": [0, 0.64444, 0, 0, 0.575],
+ "57": [0, 0.64444, 0, 0, 0.575],
+ "58": [0, 0.44444, 0, 0, 0.31944],
+ "59": [0.19444, 0.44444, 0, 0, 0.31944],
+ "60": [0.08556, 0.58556, 0, 0, 0.89444],
+ "61": [-0.10889, 0.39111, 0, 0, 0.89444],
+ "62": [0.08556, 0.58556, 0, 0, 0.89444],
+ "63": [0, 0.69444, 0, 0, 0.54305],
+ "64": [0, 0.69444, 0, 0, 0.89444],
+ "65": [0, 0.68611, 0, 0, 0.86944],
+ "66": [0, 0.68611, 0, 0, 0.81805],
+ "67": [0, 0.68611, 0, 0, 0.83055],
+ "68": [0, 0.68611, 0, 0, 0.88194],
+ "69": [0, 0.68611, 0, 0, 0.75555],
+ "70": [0, 0.68611, 0, 0, 0.72361],
+ "71": [0, 0.68611, 0, 0, 0.90416],
+ "72": [0, 0.68611, 0, 0, 0.9],
+ "73": [0, 0.68611, 0, 0, 0.43611],
+ "74": [0, 0.68611, 0, 0, 0.59444],
+ "75": [0, 0.68611, 0, 0, 0.90138],
+ "76": [0, 0.68611, 0, 0, 0.69166],
+ "77": [0, 0.68611, 0, 0, 1.09166],
+ "78": [0, 0.68611, 0, 0, 0.9],
+ "79": [0, 0.68611, 0, 0, 0.86388],
+ "80": [0, 0.68611, 0, 0, 0.78611],
+ "81": [0.19444, 0.68611, 0, 0, 0.86388],
+ "82": [0, 0.68611, 0, 0, 0.8625],
+ "83": [0, 0.68611, 0, 0, 0.63889],
+ "84": [0, 0.68611, 0, 0, 0.8],
+ "85": [0, 0.68611, 0, 0, 0.88472],
+ "86": [0, 0.68611, 0.01597, 0, 0.86944],
+ "87": [0, 0.68611, 0.01597, 0, 1.18888],
+ "88": [0, 0.68611, 0, 0, 0.86944],
+ "89": [0, 0.68611, 0.02875, 0, 0.86944],
+ "90": [0, 0.68611, 0, 0, 0.70277],
+ "91": [0.25, 0.75, 0, 0, 0.31944],
+ "92": [0.25, 0.75, 0, 0, 0.575],
+ "93": [0.25, 0.75, 0, 0, 0.31944],
+ "94": [0, 0.69444, 0, 0, 0.575],
+ "95": [0.31, 0.13444, 0.03194, 0, 0.575],
+ "97": [0, 0.44444, 0, 0, 0.55902],
+ "98": [0, 0.69444, 0, 0, 0.63889],
+ "99": [0, 0.44444, 0, 0, 0.51111],
+ "100": [0, 0.69444, 0, 0, 0.63889],
+ "101": [0, 0.44444, 0, 0, 0.52708],
+ "102": [0, 0.69444, 0.10903, 0, 0.35139],
+ "103": [0.19444, 0.44444, 0.01597, 0, 0.575],
+ "104": [0, 0.69444, 0, 0, 0.63889],
+ "105": [0, 0.69444, 0, 0, 0.31944],
+ "106": [0.19444, 0.69444, 0, 0, 0.35139],
+ "107": [0, 0.69444, 0, 0, 0.60694],
+ "108": [0, 0.69444, 0, 0, 0.31944],
+ "109": [0, 0.44444, 0, 0, 0.95833],
+ "110": [0, 0.44444, 0, 0, 0.63889],
+ "111": [0, 0.44444, 0, 0, 0.575],
+ "112": [0.19444, 0.44444, 0, 0, 0.63889],
+ "113": [0.19444, 0.44444, 0, 0, 0.60694],
+ "114": [0, 0.44444, 0, 0, 0.47361],
+ "115": [0, 0.44444, 0, 0, 0.45361],
+ "116": [0, 0.63492, 0, 0, 0.44722],
+ "117": [0, 0.44444, 0, 0, 0.63889],
+ "118": [0, 0.44444, 0.01597, 0, 0.60694],
+ "119": [0, 0.44444, 0.01597, 0, 0.83055],
+ "120": [0, 0.44444, 0, 0, 0.60694],
+ "121": [0.19444, 0.44444, 0.01597, 0, 0.60694],
+ "122": [0, 0.44444, 0, 0, 0.51111],
+ "123": [0.25, 0.75, 0, 0, 0.575],
+ "124": [0.25, 0.75, 0, 0, 0.31944],
+ "125": [0.25, 0.75, 0, 0, 0.575],
+ "126": [0.35, 0.34444, 0, 0, 0.575],
+ "160": [0, 0, 0, 0, 0.25],
+ "163": [0, 0.69444, 0, 0, 0.86853],
+ "168": [0, 0.69444, 0, 0, 0.575],
+ "172": [0, 0.44444, 0, 0, 0.76666],
+ "176": [0, 0.69444, 0, 0, 0.86944],
+ "177": [0.13333, 0.63333, 0, 0, 0.89444],
+ "184": [0.17014, 0, 0, 0, 0.51111],
+ "198": [0, 0.68611, 0, 0, 1.04166],
+ "215": [0.13333, 0.63333, 0, 0, 0.89444],
+ "216": [0.04861, 0.73472, 0, 0, 0.89444],
+ "223": [0, 0.69444, 0, 0, 0.59722],
+ "230": [0, 0.44444, 0, 0, 0.83055],
+ "247": [0.13333, 0.63333, 0, 0, 0.89444],
+ "248": [0.09722, 0.54167, 0, 0, 0.575],
+ "305": [0, 0.44444, 0, 0, 0.31944],
+ "338": [0, 0.68611, 0, 0, 1.16944],
+ "339": [0, 0.44444, 0, 0, 0.89444],
+ "567": [0.19444, 0.44444, 0, 0, 0.35139],
+ "710": [0, 0.69444, 0, 0, 0.575],
+ "711": [0, 0.63194, 0, 0, 0.575],
+ "713": [0, 0.59611, 0, 0, 0.575],
+ "714": [0, 0.69444, 0, 0, 0.575],
+ "715": [0, 0.69444, 0, 0, 0.575],
+ "728": [0, 0.69444, 0, 0, 0.575],
+ "729": [0, 0.69444, 0, 0, 0.31944],
+ "730": [0, 0.69444, 0, 0, 0.86944],
+ "732": [0, 0.69444, 0, 0, 0.575],
+ "733": [0, 0.69444, 0, 0, 0.575],
+ "915": [0, 0.68611, 0, 0, 0.69166],
+ "916": [0, 0.68611, 0, 0, 0.95833],
+ "920": [0, 0.68611, 0, 0, 0.89444],
+ "923": [0, 0.68611, 0, 0, 0.80555],
+ "926": [0, 0.68611, 0, 0, 0.76666],
+ "928": [0, 0.68611, 0, 0, 0.9],
+ "931": [0, 0.68611, 0, 0, 0.83055],
+ "933": [0, 0.68611, 0, 0, 0.89444],
+ "934": [0, 0.68611, 0, 0, 0.83055],
+ "936": [0, 0.68611, 0, 0, 0.89444],
+ "937": [0, 0.68611, 0, 0, 0.83055],
+ "8211": [0, 0.44444, 0.03194, 0, 0.575],
+ "8212": [0, 0.44444, 0.03194, 0, 1.14999],
+ "8216": [0, 0.69444, 0, 0, 0.31944],
+ "8217": [0, 0.69444, 0, 0, 0.31944],
+ "8220": [0, 0.69444, 0, 0, 0.60278],
+ "8221": [0, 0.69444, 0, 0, 0.60278],
+ "8224": [0.19444, 0.69444, 0, 0, 0.51111],
+ "8225": [0.19444, 0.69444, 0, 0, 0.51111],
+ "8242": [0, 0.55556, 0, 0, 0.34444],
+ "8407": [0, 0.72444, 0.15486, 0, 0.575],
+ "8463": [0, 0.69444, 0, 0, 0.66759],
+ "8465": [0, 0.69444, 0, 0, 0.83055],
+ "8467": [0, 0.69444, 0, 0, 0.47361],
+ "8472": [0.19444, 0.44444, 0, 0, 0.74027],
+ "8476": [0, 0.69444, 0, 0, 0.83055],
+ "8501": [0, 0.69444, 0, 0, 0.70277],
+ "8592": [-0.10889, 0.39111, 0, 0, 1.14999],
+ "8593": [0.19444, 0.69444, 0, 0, 0.575],
+ "8594": [-0.10889, 0.39111, 0, 0, 1.14999],
+ "8595": [0.19444, 0.69444, 0, 0, 0.575],
+ "8596": [-0.10889, 0.39111, 0, 0, 1.14999],
+ "8597": [0.25, 0.75, 0, 0, 0.575],
+ "8598": [0.19444, 0.69444, 0, 0, 1.14999],
+ "8599": [0.19444, 0.69444, 0, 0, 1.14999],
+ "8600": [0.19444, 0.69444, 0, 0, 1.14999],
+ "8601": [0.19444, 0.69444, 0, 0, 1.14999],
+ "8636": [-0.10889, 0.39111, 0, 0, 1.14999],
+ "8637": [-0.10889, 0.39111, 0, 0, 1.14999],
+ "8640": [-0.10889, 0.39111, 0, 0, 1.14999],
+ "8641": [-0.10889, 0.39111, 0, 0, 1.14999],
+ "8656": [-0.10889, 0.39111, 0, 0, 1.14999],
+ "8657": [0.19444, 0.69444, 0, 0, 0.70277],
+ "8658": [-0.10889, 0.39111, 0, 0, 1.14999],
+ "8659": [0.19444, 0.69444, 0, 0, 0.70277],
+ "8660": [-0.10889, 0.39111, 0, 0, 1.14999],
+ "8661": [0.25, 0.75, 0, 0, 0.70277],
+ "8704": [0, 0.69444, 0, 0, 0.63889],
+ "8706": [0, 0.69444, 0.06389, 0, 0.62847],
+ "8707": [0, 0.69444, 0, 0, 0.63889],
+ "8709": [0.05556, 0.75, 0, 0, 0.575],
+ "8711": [0, 0.68611, 0, 0, 0.95833],
+ "8712": [0.08556, 0.58556, 0, 0, 0.76666],
+ "8715": [0.08556, 0.58556, 0, 0, 0.76666],
+ "8722": [0.13333, 0.63333, 0, 0, 0.89444],
+ "8723": [0.13333, 0.63333, 0, 0, 0.89444],
+ "8725": [0.25, 0.75, 0, 0, 0.575],
+ "8726": [0.25, 0.75, 0, 0, 0.575],
+ "8727": [-0.02778, 0.47222, 0, 0, 0.575],
+ "8728": [-0.02639, 0.47361, 0, 0, 0.575],
+ "8729": [-0.02639, 0.47361, 0, 0, 0.575],
+ "8730": [0.18, 0.82, 0, 0, 0.95833],
+ "8733": [0, 0.44444, 0, 0, 0.89444],
+ "8734": [0, 0.44444, 0, 0, 1.14999],
+ "8736": [0, 0.69224, 0, 0, 0.72222],
+ "8739": [0.25, 0.75, 0, 0, 0.31944],
+ "8741": [0.25, 0.75, 0, 0, 0.575],
+ "8743": [0, 0.55556, 0, 0, 0.76666],
+ "8744": [0, 0.55556, 0, 0, 0.76666],
+ "8745": [0, 0.55556, 0, 0, 0.76666],
+ "8746": [0, 0.55556, 0, 0, 0.76666],
+ "8747": [0.19444, 0.69444, 0.12778, 0, 0.56875],
+ "8764": [-0.10889, 0.39111, 0, 0, 0.89444],
+ "8768": [0.19444, 0.69444, 0, 0, 0.31944],
+ "8771": [0.00222, 0.50222, 0, 0, 0.89444],
+ "8776": [0.02444, 0.52444, 0, 0, 0.89444],
+ "8781": [0.00222, 0.50222, 0, 0, 0.89444],
+ "8801": [0.00222, 0.50222, 0, 0, 0.89444],
+ "8804": [0.19667, 0.69667, 0, 0, 0.89444],
+ "8805": [0.19667, 0.69667, 0, 0, 0.89444],
+ "8810": [0.08556, 0.58556, 0, 0, 1.14999],
+ "8811": [0.08556, 0.58556, 0, 0, 1.14999],
+ "8826": [0.08556, 0.58556, 0, 0, 0.89444],
+ "8827": [0.08556, 0.58556, 0, 0, 0.89444],
+ "8834": [0.08556, 0.58556, 0, 0, 0.89444],
+ "8835": [0.08556, 0.58556, 0, 0, 0.89444],
+ "8838": [0.19667, 0.69667, 0, 0, 0.89444],
+ "8839": [0.19667, 0.69667, 0, 0, 0.89444],
+ "8846": [0, 0.55556, 0, 0, 0.76666],
+ "8849": [0.19667, 0.69667, 0, 0, 0.89444],
+ "8850": [0.19667, 0.69667, 0, 0, 0.89444],
+ "8851": [0, 0.55556, 0, 0, 0.76666],
+ "8852": [0, 0.55556, 0, 0, 0.76666],
+ "8853": [0.13333, 0.63333, 0, 0, 0.89444],
+ "8854": [0.13333, 0.63333, 0, 0, 0.89444],
+ "8855": [0.13333, 0.63333, 0, 0, 0.89444],
+ "8856": [0.13333, 0.63333, 0, 0, 0.89444],
+ "8857": [0.13333, 0.63333, 0, 0, 0.89444],
+ "8866": [0, 0.69444, 0, 0, 0.70277],
+ "8867": [0, 0.69444, 0, 0, 0.70277],
+ "8868": [0, 0.69444, 0, 0, 0.89444],
+ "8869": [0, 0.69444, 0, 0, 0.89444],
+ "8900": [-0.02639, 0.47361, 0, 0, 0.575],
+ "8901": [-0.02639, 0.47361, 0, 0, 0.31944],
+ "8902": [-0.02778, 0.47222, 0, 0, 0.575],
+ "8968": [0.25, 0.75, 0, 0, 0.51111],
+ "8969": [0.25, 0.75, 0, 0, 0.51111],
+ "8970": [0.25, 0.75, 0, 0, 0.51111],
+ "8971": [0.25, 0.75, 0, 0, 0.51111],
+ "8994": [-0.13889, 0.36111, 0, 0, 1.14999],
+ "8995": [-0.13889, 0.36111, 0, 0, 1.14999],
+ "9651": [0.19444, 0.69444, 0, 0, 1.02222],
+ "9657": [-0.02778, 0.47222, 0, 0, 0.575],
+ "9661": [0.19444, 0.69444, 0, 0, 1.02222],
+ "9667": [-0.02778, 0.47222, 0, 0, 0.575],
+ "9711": [0.19444, 0.69444, 0, 0, 1.14999],
+ "9824": [0.12963, 0.69444, 0, 0, 0.89444],
+ "9825": [0.12963, 0.69444, 0, 0, 0.89444],
+ "9826": [0.12963, 0.69444, 0, 0, 0.89444],
+ "9827": [0.12963, 0.69444, 0, 0, 0.89444],
+ "9837": [0, 0.75, 0, 0, 0.44722],
+ "9838": [0.19444, 0.69444, 0, 0, 0.44722],
+ "9839": [0.19444, 0.69444, 0, 0, 0.44722],
+ "10216": [0.25, 0.75, 0, 0, 0.44722],
+ "10217": [0.25, 0.75, 0, 0, 0.44722],
+ "10815": [0, 0.68611, 0, 0, 0.9],
+ "10927": [0.19667, 0.69667, 0, 0, 0.89444],
+ "10928": [0.19667, 0.69667, 0, 0, 0.89444],
+ "57376": [0.19444, 0.69444, 0, 0, 0]
+ },
+ "Main-BoldItalic": {
+ "32": [0, 0, 0, 0, 0.25],
+ "33": [0, 0.69444, 0.11417, 0, 0.38611],
+ "34": [0, 0.69444, 0.07939, 0, 0.62055],
+ "35": [0.19444, 0.69444, 0.06833, 0, 0.94444],
+ "37": [0.05556, 0.75, 0.12861, 0, 0.94444],
+ "38": [0, 0.69444, 0.08528, 0, 0.88555],
+ "39": [0, 0.69444, 0.12945, 0, 0.35555],
+ "40": [0.25, 0.75, 0.15806, 0, 0.47333],
+ "41": [0.25, 0.75, 0.03306, 0, 0.47333],
+ "42": [0, 0.75, 0.14333, 0, 0.59111],
+ "43": [0.10333, 0.60333, 0.03306, 0, 0.88555],
+ "44": [0.19444, 0.14722, 0, 0, 0.35555],
+ "45": [0, 0.44444, 0.02611, 0, 0.41444],
+ "46": [0, 0.14722, 0, 0, 0.35555],
+ "47": [0.25, 0.75, 0.15806, 0, 0.59111],
+ "48": [0, 0.64444, 0.13167, 0, 0.59111],
+ "49": [0, 0.64444, 0.13167, 0, 0.59111],
+ "50": [0, 0.64444, 0.13167, 0, 0.59111],
+ "51": [0, 0.64444, 0.13167, 0, 0.59111],
+ "52": [0.19444, 0.64444, 0.13167, 0, 0.59111],
+ "53": [0, 0.64444, 0.13167, 0, 0.59111],
+ "54": [0, 0.64444, 0.13167, 0, 0.59111],
+ "55": [0.19444, 0.64444, 0.13167, 0, 0.59111],
+ "56": [0, 0.64444, 0.13167, 0, 0.59111],
+ "57": [0, 0.64444, 0.13167, 0, 0.59111],
+ "58": [0, 0.44444, 0.06695, 0, 0.35555],
+ "59": [0.19444, 0.44444, 0.06695, 0, 0.35555],
+ "61": [-0.10889, 0.39111, 0.06833, 0, 0.88555],
+ "63": [0, 0.69444, 0.11472, 0, 0.59111],
+ "64": [0, 0.69444, 0.09208, 0, 0.88555],
+ "65": [0, 0.68611, 0, 0, 0.86555],
+ "66": [0, 0.68611, 0.0992, 0, 0.81666],
+ "67": [0, 0.68611, 0.14208, 0, 0.82666],
+ "68": [0, 0.68611, 0.09062, 0, 0.87555],
+ "69": [0, 0.68611, 0.11431, 0, 0.75666],
+ "70": [0, 0.68611, 0.12903, 0, 0.72722],
+ "71": [0, 0.68611, 0.07347, 0, 0.89527],
+ "72": [0, 0.68611, 0.17208, 0, 0.8961],
+ "73": [0, 0.68611, 0.15681, 0, 0.47166],
+ "74": [0, 0.68611, 0.145, 0, 0.61055],
+ "75": [0, 0.68611, 0.14208, 0, 0.89499],
+ "76": [0, 0.68611, 0, 0, 0.69777],
+ "77": [0, 0.68611, 0.17208, 0, 1.07277],
+ "78": [0, 0.68611, 0.17208, 0, 0.8961],
+ "79": [0, 0.68611, 0.09062, 0, 0.85499],
+ "80": [0, 0.68611, 0.0992, 0, 0.78721],
+ "81": [0.19444, 0.68611, 0.09062, 0, 0.85499],
+ "82": [0, 0.68611, 0.02559, 0, 0.85944],
+ "83": [0, 0.68611, 0.11264, 0, 0.64999],
+ "84": [0, 0.68611, 0.12903, 0, 0.7961],
+ "85": [0, 0.68611, 0.17208, 0, 0.88083],
+ "86": [0, 0.68611, 0.18625, 0, 0.86555],
+ "87": [0, 0.68611, 0.18625, 0, 1.15999],
+ "88": [0, 0.68611, 0.15681, 0, 0.86555],
+ "89": [0, 0.68611, 0.19803, 0, 0.86555],
+ "90": [0, 0.68611, 0.14208, 0, 0.70888],
+ "91": [0.25, 0.75, 0.1875, 0, 0.35611],
+ "93": [0.25, 0.75, 0.09972, 0, 0.35611],
+ "94": [0, 0.69444, 0.06709, 0, 0.59111],
+ "95": [0.31, 0.13444, 0.09811, 0, 0.59111],
+ "97": [0, 0.44444, 0.09426, 0, 0.59111],
+ "98": [0, 0.69444, 0.07861, 0, 0.53222],
+ "99": [0, 0.44444, 0.05222, 0, 0.53222],
+ "100": [0, 0.69444, 0.10861, 0, 0.59111],
+ "101": [0, 0.44444, 0.085, 0, 0.53222],
+ "102": [0.19444, 0.69444, 0.21778, 0, 0.4],
+ "103": [0.19444, 0.44444, 0.105, 0, 0.53222],
+ "104": [0, 0.69444, 0.09426, 0, 0.59111],
+ "105": [0, 0.69326, 0.11387, 0, 0.35555],
+ "106": [0.19444, 0.69326, 0.1672, 0, 0.35555],
+ "107": [0, 0.69444, 0.11111, 0, 0.53222],
+ "108": [0, 0.69444, 0.10861, 0, 0.29666],
+ "109": [0, 0.44444, 0.09426, 0, 0.94444],
+ "110": [0, 0.44444, 0.09426, 0, 0.64999],
+ "111": [0, 0.44444, 0.07861, 0, 0.59111],
+ "112": [0.19444, 0.44444, 0.07861, 0, 0.59111],
+ "113": [0.19444, 0.44444, 0.105, 0, 0.53222],
+ "114": [0, 0.44444, 0.11111, 0, 0.50167],
+ "115": [0, 0.44444, 0.08167, 0, 0.48694],
+ "116": [0, 0.63492, 0.09639, 0, 0.385],
+ "117": [0, 0.44444, 0.09426, 0, 0.62055],
+ "118": [0, 0.44444, 0.11111, 0, 0.53222],
+ "119": [0, 0.44444, 0.11111, 0, 0.76777],
+ "120": [0, 0.44444, 0.12583, 0, 0.56055],
+ "121": [0.19444, 0.44444, 0.105, 0, 0.56166],
+ "122": [0, 0.44444, 0.13889, 0, 0.49055],
+ "126": [0.35, 0.34444, 0.11472, 0, 0.59111],
+ "160": [0, 0, 0, 0, 0.25],
+ "168": [0, 0.69444, 0.11473, 0, 0.59111],
+ "176": [0, 0.69444, 0, 0, 0.94888],
+ "184": [0.17014, 0, 0, 0, 0.53222],
+ "198": [0, 0.68611, 0.11431, 0, 1.02277],
+ "216": [0.04861, 0.73472, 0.09062, 0, 0.88555],
+ "223": [0.19444, 0.69444, 0.09736, 0, 0.665],
+ "230": [0, 0.44444, 0.085, 0, 0.82666],
+ "248": [0.09722, 0.54167, 0.09458, 0, 0.59111],
+ "305": [0, 0.44444, 0.09426, 0, 0.35555],
+ "338": [0, 0.68611, 0.11431, 0, 1.14054],
+ "339": [0, 0.44444, 0.085, 0, 0.82666],
+ "567": [0.19444, 0.44444, 0.04611, 0, 0.385],
+ "710": [0, 0.69444, 0.06709, 0, 0.59111],
+ "711": [0, 0.63194, 0.08271, 0, 0.59111],
+ "713": [0, 0.59444, 0.10444, 0, 0.59111],
+ "714": [0, 0.69444, 0.08528, 0, 0.59111],
+ "715": [0, 0.69444, 0, 0, 0.59111],
+ "728": [0, 0.69444, 0.10333, 0, 0.59111],
+ "729": [0, 0.69444, 0.12945, 0, 0.35555],
+ "730": [0, 0.69444, 0, 0, 0.94888],
+ "732": [0, 0.69444, 0.11472, 0, 0.59111],
+ "733": [0, 0.69444, 0.11472, 0, 0.59111],
+ "915": [0, 0.68611, 0.12903, 0, 0.69777],
+ "916": [0, 0.68611, 0, 0, 0.94444],
+ "920": [0, 0.68611, 0.09062, 0, 0.88555],
+ "923": [0, 0.68611, 0, 0, 0.80666],
+ "926": [0, 0.68611, 0.15092, 0, 0.76777],
+ "928": [0, 0.68611, 0.17208, 0, 0.8961],
+ "931": [0, 0.68611, 0.11431, 0, 0.82666],
+ "933": [0, 0.68611, 0.10778, 0, 0.88555],
+ "934": [0, 0.68611, 0.05632, 0, 0.82666],
+ "936": [0, 0.68611, 0.10778, 0, 0.88555],
+ "937": [0, 0.68611, 0.0992, 0, 0.82666],
+ "8211": [0, 0.44444, 0.09811, 0, 0.59111],
+ "8212": [0, 0.44444, 0.09811, 0, 1.18221],
+ "8216": [0, 0.69444, 0.12945, 0, 0.35555],
+ "8217": [0, 0.69444, 0.12945, 0, 0.35555],
+ "8220": [0, 0.69444, 0.16772, 0, 0.62055],
+ "8221": [0, 0.69444, 0.07939, 0, 0.62055]
+ },
+ "Main-Italic": {
+ "32": [0, 0, 0, 0, 0.25],
+ "33": [0, 0.69444, 0.12417, 0, 0.30667],
+ "34": [0, 0.69444, 0.06961, 0, 0.51444],
+ "35": [0.19444, 0.69444, 0.06616, 0, 0.81777],
+ "37": [0.05556, 0.75, 0.13639, 0, 0.81777],
+ "38": [0, 0.69444, 0.09694, 0, 0.76666],
+ "39": [0, 0.69444, 0.12417, 0, 0.30667],
+ "40": [0.25, 0.75, 0.16194, 0, 0.40889],
+ "41": [0.25, 0.75, 0.03694, 0, 0.40889],
+ "42": [0, 0.75, 0.14917, 0, 0.51111],
+ "43": [0.05667, 0.56167, 0.03694, 0, 0.76666],
+ "44": [0.19444, 0.10556, 0, 0, 0.30667],
+ "45": [0, 0.43056, 0.02826, 0, 0.35778],
+ "46": [0, 0.10556, 0, 0, 0.30667],
+ "47": [0.25, 0.75, 0.16194, 0, 0.51111],
+ "48": [0, 0.64444, 0.13556, 0, 0.51111],
+ "49": [0, 0.64444, 0.13556, 0, 0.51111],
+ "50": [0, 0.64444, 0.13556, 0, 0.51111],
+ "51": [0, 0.64444, 0.13556, 0, 0.51111],
+ "52": [0.19444, 0.64444, 0.13556, 0, 0.51111],
+ "53": [0, 0.64444, 0.13556, 0, 0.51111],
+ "54": [0, 0.64444, 0.13556, 0, 0.51111],
+ "55": [0.19444, 0.64444, 0.13556, 0, 0.51111],
+ "56": [0, 0.64444, 0.13556, 0, 0.51111],
+ "57": [0, 0.64444, 0.13556, 0, 0.51111],
+ "58": [0, 0.43056, 0.0582, 0, 0.30667],
+ "59": [0.19444, 0.43056, 0.0582, 0, 0.30667],
+ "61": [-0.13313, 0.36687, 0.06616, 0, 0.76666],
+ "63": [0, 0.69444, 0.1225, 0, 0.51111],
+ "64": [0, 0.69444, 0.09597, 0, 0.76666],
+ "65": [0, 0.68333, 0, 0, 0.74333],
+ "66": [0, 0.68333, 0.10257, 0, 0.70389],
+ "67": [0, 0.68333, 0.14528, 0, 0.71555],
+ "68": [0, 0.68333, 0.09403, 0, 0.755],
+ "69": [0, 0.68333, 0.12028, 0, 0.67833],
+ "70": [0, 0.68333, 0.13305, 0, 0.65277],
+ "71": [0, 0.68333, 0.08722, 0, 0.77361],
+ "72": [0, 0.68333, 0.16389, 0, 0.74333],
+ "73": [0, 0.68333, 0.15806, 0, 0.38555],
+ "74": [0, 0.68333, 0.14028, 0, 0.525],
+ "75": [0, 0.68333, 0.14528, 0, 0.76888],
+ "76": [0, 0.68333, 0, 0, 0.62722],
+ "77": [0, 0.68333, 0.16389, 0, 0.89666],
+ "78": [0, 0.68333, 0.16389, 0, 0.74333],
+ "79": [0, 0.68333, 0.09403, 0, 0.76666],
+ "80": [0, 0.68333, 0.10257, 0, 0.67833],
+ "81": [0.19444, 0.68333, 0.09403, 0, 0.76666],
+ "82": [0, 0.68333, 0.03868, 0, 0.72944],
+ "83": [0, 0.68333, 0.11972, 0, 0.56222],
+ "84": [0, 0.68333, 0.13305, 0, 0.71555],
+ "85": [0, 0.68333, 0.16389, 0, 0.74333],
+ "86": [0, 0.68333, 0.18361, 0, 0.74333],
+ "87": [0, 0.68333, 0.18361, 0, 0.99888],
+ "88": [0, 0.68333, 0.15806, 0, 0.74333],
+ "89": [0, 0.68333, 0.19383, 0, 0.74333],
+ "90": [0, 0.68333, 0.14528, 0, 0.61333],
+ "91": [0.25, 0.75, 0.1875, 0, 0.30667],
+ "93": [0.25, 0.75, 0.10528, 0, 0.30667],
+ "94": [0, 0.69444, 0.06646, 0, 0.51111],
+ "95": [0.31, 0.12056, 0.09208, 0, 0.51111],
+ "97": [0, 0.43056, 0.07671, 0, 0.51111],
+ "98": [0, 0.69444, 0.06312, 0, 0.46],
+ "99": [0, 0.43056, 0.05653, 0, 0.46],
+ "100": [0, 0.69444, 0.10333, 0, 0.51111],
+ "101": [0, 0.43056, 0.07514, 0, 0.46],
+ "102": [0.19444, 0.69444, 0.21194, 0, 0.30667],
+ "103": [0.19444, 0.43056, 0.08847, 0, 0.46],
+ "104": [0, 0.69444, 0.07671, 0, 0.51111],
+ "105": [0, 0.65536, 0.1019, 0, 0.30667],
+ "106": [0.19444, 0.65536, 0.14467, 0, 0.30667],
+ "107": [0, 0.69444, 0.10764, 0, 0.46],
+ "108": [0, 0.69444, 0.10333, 0, 0.25555],
+ "109": [0, 0.43056, 0.07671, 0, 0.81777],
+ "110": [0, 0.43056, 0.07671, 0, 0.56222],
+ "111": [0, 0.43056, 0.06312, 0, 0.51111],
+ "112": [0.19444, 0.43056, 0.06312, 0, 0.51111],
+ "113": [0.19444, 0.43056, 0.08847, 0, 0.46],
+ "114": [0, 0.43056, 0.10764, 0, 0.42166],
+ "115": [0, 0.43056, 0.08208, 0, 0.40889],
+ "116": [0, 0.61508, 0.09486, 0, 0.33222],
+ "117": [0, 0.43056, 0.07671, 0, 0.53666],
+ "118": [0, 0.43056, 0.10764, 0, 0.46],
+ "119": [0, 0.43056, 0.10764, 0, 0.66444],
+ "120": [0, 0.43056, 0.12042, 0, 0.46389],
+ "121": [0.19444, 0.43056, 0.08847, 0, 0.48555],
+ "122": [0, 0.43056, 0.12292, 0, 0.40889],
+ "126": [0.35, 0.31786, 0.11585, 0, 0.51111],
+ "160": [0, 0, 0, 0, 0.25],
+ "168": [0, 0.66786, 0.10474, 0, 0.51111],
+ "176": [0, 0.69444, 0, 0, 0.83129],
+ "184": [0.17014, 0, 0, 0, 0.46],
+ "198": [0, 0.68333, 0.12028, 0, 0.88277],
+ "216": [0.04861, 0.73194, 0.09403, 0, 0.76666],
+ "223": [0.19444, 0.69444, 0.10514, 0, 0.53666],
+ "230": [0, 0.43056, 0.07514, 0, 0.71555],
+ "248": [0.09722, 0.52778, 0.09194, 0, 0.51111],
+ "338": [0, 0.68333, 0.12028, 0, 0.98499],
+ "339": [0, 0.43056, 0.07514, 0, 0.71555],
+ "710": [0, 0.69444, 0.06646, 0, 0.51111],
+ "711": [0, 0.62847, 0.08295, 0, 0.51111],
+ "713": [0, 0.56167, 0.10333, 0, 0.51111],
+ "714": [0, 0.69444, 0.09694, 0, 0.51111],
+ "715": [0, 0.69444, 0, 0, 0.51111],
+ "728": [0, 0.69444, 0.10806, 0, 0.51111],
+ "729": [0, 0.66786, 0.11752, 0, 0.30667],
+ "730": [0, 0.69444, 0, 0, 0.83129],
+ "732": [0, 0.66786, 0.11585, 0, 0.51111],
+ "733": [0, 0.69444, 0.1225, 0, 0.51111],
+ "915": [0, 0.68333, 0.13305, 0, 0.62722],
+ "916": [0, 0.68333, 0, 0, 0.81777],
+ "920": [0, 0.68333, 0.09403, 0, 0.76666],
+ "923": [0, 0.68333, 0, 0, 0.69222],
+ "926": [0, 0.68333, 0.15294, 0, 0.66444],
+ "928": [0, 0.68333, 0.16389, 0, 0.74333],
+ "931": [0, 0.68333, 0.12028, 0, 0.71555],
+ "933": [0, 0.68333, 0.11111, 0, 0.76666],
+ "934": [0, 0.68333, 0.05986, 0, 0.71555],
+ "936": [0, 0.68333, 0.11111, 0, 0.76666],
+ "937": [0, 0.68333, 0.10257, 0, 0.71555],
+ "8211": [0, 0.43056, 0.09208, 0, 0.51111],
+ "8212": [0, 0.43056, 0.09208, 0, 1.02222],
+ "8216": [0, 0.69444, 0.12417, 0, 0.30667],
+ "8217": [0, 0.69444, 0.12417, 0, 0.30667],
+ "8220": [0, 0.69444, 0.1685, 0, 0.51444],
+ "8221": [0, 0.69444, 0.06961, 0, 0.51444],
+ "8463": [0, 0.68889, 0, 0, 0.54028]
+ },
+ "Main-Regular": {
+ "32": [0, 0, 0, 0, 0.25],
+ "33": [0, 0.69444, 0, 0, 0.27778],
+ "34": [0, 0.69444, 0, 0, 0.5],
+ "35": [0.19444, 0.69444, 0, 0, 0.83334],
+ "36": [0.05556, 0.75, 0, 0, 0.5],
+ "37": [0.05556, 0.75, 0, 0, 0.83334],
+ "38": [0, 0.69444, 0, 0, 0.77778],
+ "39": [0, 0.69444, 0, 0, 0.27778],
+ "40": [0.25, 0.75, 0, 0, 0.38889],
+ "41": [0.25, 0.75, 0, 0, 0.38889],
+ "42": [0, 0.75, 0, 0, 0.5],
+ "43": [0.08333, 0.58333, 0, 0, 0.77778],
+ "44": [0.19444, 0.10556, 0, 0, 0.27778],
+ "45": [0, 0.43056, 0, 0, 0.33333],
+ "46": [0, 0.10556, 0, 0, 0.27778],
+ "47": [0.25, 0.75, 0, 0, 0.5],
+ "48": [0, 0.64444, 0, 0, 0.5],
+ "49": [0, 0.64444, 0, 0, 0.5],
+ "50": [0, 0.64444, 0, 0, 0.5],
+ "51": [0, 0.64444, 0, 0, 0.5],
+ "52": [0, 0.64444, 0, 0, 0.5],
+ "53": [0, 0.64444, 0, 0, 0.5],
+ "54": [0, 0.64444, 0, 0, 0.5],
+ "55": [0, 0.64444, 0, 0, 0.5],
+ "56": [0, 0.64444, 0, 0, 0.5],
+ "57": [0, 0.64444, 0, 0, 0.5],
+ "58": [0, 0.43056, 0, 0, 0.27778],
+ "59": [0.19444, 0.43056, 0, 0, 0.27778],
+ "60": [0.0391, 0.5391, 0, 0, 0.77778],
+ "61": [-0.13313, 0.36687, 0, 0, 0.77778],
+ "62": [0.0391, 0.5391, 0, 0, 0.77778],
+ "63": [0, 0.69444, 0, 0, 0.47222],
+ "64": [0, 0.69444, 0, 0, 0.77778],
+ "65": [0, 0.68333, 0, 0, 0.75],
+ "66": [0, 0.68333, 0, 0, 0.70834],
+ "67": [0, 0.68333, 0, 0, 0.72222],
+ "68": [0, 0.68333, 0, 0, 0.76389],
+ "69": [0, 0.68333, 0, 0, 0.68056],
+ "70": [0, 0.68333, 0, 0, 0.65278],
+ "71": [0, 0.68333, 0, 0, 0.78472],
+ "72": [0, 0.68333, 0, 0, 0.75],
+ "73": [0, 0.68333, 0, 0, 0.36111],
+ "74": [0, 0.68333, 0, 0, 0.51389],
+ "75": [0, 0.68333, 0, 0, 0.77778],
+ "76": [0, 0.68333, 0, 0, 0.625],
+ "77": [0, 0.68333, 0, 0, 0.91667],
+ "78": [0, 0.68333, 0, 0, 0.75],
+ "79": [0, 0.68333, 0, 0, 0.77778],
+ "80": [0, 0.68333, 0, 0, 0.68056],
+ "81": [0.19444, 0.68333, 0, 0, 0.77778],
+ "82": [0, 0.68333, 0, 0, 0.73611],
+ "83": [0, 0.68333, 0, 0, 0.55556],
+ "84": [0, 0.68333, 0, 0, 0.72222],
+ "85": [0, 0.68333, 0, 0, 0.75],
+ "86": [0, 0.68333, 0.01389, 0, 0.75],
+ "87": [0, 0.68333, 0.01389, 0, 1.02778],
+ "88": [0, 0.68333, 0, 0, 0.75],
+ "89": [0, 0.68333, 0.025, 0, 0.75],
+ "90": [0, 0.68333, 0, 0, 0.61111],
+ "91": [0.25, 0.75, 0, 0, 0.27778],
+ "92": [0.25, 0.75, 0, 0, 0.5],
+ "93": [0.25, 0.75, 0, 0, 0.27778],
+ "94": [0, 0.69444, 0, 0, 0.5],
+ "95": [0.31, 0.12056, 0.02778, 0, 0.5],
+ "97": [0, 0.43056, 0, 0, 0.5],
+ "98": [0, 0.69444, 0, 0, 0.55556],
+ "99": [0, 0.43056, 0, 0, 0.44445],
+ "100": [0, 0.69444, 0, 0, 0.55556],
+ "101": [0, 0.43056, 0, 0, 0.44445],
+ "102": [0, 0.69444, 0.07778, 0, 0.30556],
+ "103": [0.19444, 0.43056, 0.01389, 0, 0.5],
+ "104": [0, 0.69444, 0, 0, 0.55556],
+ "105": [0, 0.66786, 0, 0, 0.27778],
+ "106": [0.19444, 0.66786, 0, 0, 0.30556],
+ "107": [0, 0.69444, 0, 0, 0.52778],
+ "108": [0, 0.69444, 0, 0, 0.27778],
+ "109": [0, 0.43056, 0, 0, 0.83334],
+ "110": [0, 0.43056, 0, 0, 0.55556],
+ "111": [0, 0.43056, 0, 0, 0.5],
+ "112": [0.19444, 0.43056, 0, 0, 0.55556],
+ "113": [0.19444, 0.43056, 0, 0, 0.52778],
+ "114": [0, 0.43056, 0, 0, 0.39167],
+ "115": [0, 0.43056, 0, 0, 0.39445],
+ "116": [0, 0.61508, 0, 0, 0.38889],
+ "117": [0, 0.43056, 0, 0, 0.55556],
+ "118": [0, 0.43056, 0.01389, 0, 0.52778],
+ "119": [0, 0.43056, 0.01389, 0, 0.72222],
+ "120": [0, 0.43056, 0, 0, 0.52778],
+ "121": [0.19444, 0.43056, 0.01389, 0, 0.52778],
+ "122": [0, 0.43056, 0, 0, 0.44445],
+ "123": [0.25, 0.75, 0, 0, 0.5],
+ "124": [0.25, 0.75, 0, 0, 0.27778],
+ "125": [0.25, 0.75, 0, 0, 0.5],
+ "126": [0.35, 0.31786, 0, 0, 0.5],
+ "160": [0, 0, 0, 0, 0.25],
+ "163": [0, 0.69444, 0, 0, 0.76909],
+ "167": [0.19444, 0.69444, 0, 0, 0.44445],
+ "168": [0, 0.66786, 0, 0, 0.5],
+ "172": [0, 0.43056, 0, 0, 0.66667],
+ "176": [0, 0.69444, 0, 0, 0.75],
+ "177": [0.08333, 0.58333, 0, 0, 0.77778],
+ "182": [0.19444, 0.69444, 0, 0, 0.61111],
+ "184": [0.17014, 0, 0, 0, 0.44445],
+ "198": [0, 0.68333, 0, 0, 0.90278],
+ "215": [0.08333, 0.58333, 0, 0, 0.77778],
+ "216": [0.04861, 0.73194, 0, 0, 0.77778],
+ "223": [0, 0.69444, 0, 0, 0.5],
+ "230": [0, 0.43056, 0, 0, 0.72222],
+ "247": [0.08333, 0.58333, 0, 0, 0.77778],
+ "248": [0.09722, 0.52778, 0, 0, 0.5],
+ "305": [0, 0.43056, 0, 0, 0.27778],
+ "338": [0, 0.68333, 0, 0, 1.01389],
+ "339": [0, 0.43056, 0, 0, 0.77778],
+ "567": [0.19444, 0.43056, 0, 0, 0.30556],
+ "710": [0, 0.69444, 0, 0, 0.5],
+ "711": [0, 0.62847, 0, 0, 0.5],
+ "713": [0, 0.56778, 0, 0, 0.5],
+ "714": [0, 0.69444, 0, 0, 0.5],
+ "715": [0, 0.69444, 0, 0, 0.5],
+ "728": [0, 0.69444, 0, 0, 0.5],
+ "729": [0, 0.66786, 0, 0, 0.27778],
+ "730": [0, 0.69444, 0, 0, 0.75],
+ "732": [0, 0.66786, 0, 0, 0.5],
+ "733": [0, 0.69444, 0, 0, 0.5],
+ "915": [0, 0.68333, 0, 0, 0.625],
+ "916": [0, 0.68333, 0, 0, 0.83334],
+ "920": [0, 0.68333, 0, 0, 0.77778],
+ "923": [0, 0.68333, 0, 0, 0.69445],
+ "926": [0, 0.68333, 0, 0, 0.66667],
+ "928": [0, 0.68333, 0, 0, 0.75],
+ "931": [0, 0.68333, 0, 0, 0.72222],
+ "933": [0, 0.68333, 0, 0, 0.77778],
+ "934": [0, 0.68333, 0, 0, 0.72222],
+ "936": [0, 0.68333, 0, 0, 0.77778],
+ "937": [0, 0.68333, 0, 0, 0.72222],
+ "8211": [0, 0.43056, 0.02778, 0, 0.5],
+ "8212": [0, 0.43056, 0.02778, 0, 1.0],
+ "8216": [0, 0.69444, 0, 0, 0.27778],
+ "8217": [0, 0.69444, 0, 0, 0.27778],
+ "8220": [0, 0.69444, 0, 0, 0.5],
+ "8221": [0, 0.69444, 0, 0, 0.5],
+ "8224": [0.19444, 0.69444, 0, 0, 0.44445],
+ "8225": [0.19444, 0.69444, 0, 0, 0.44445],
+ "8230": [0, 0.12, 0, 0, 1.172],
+ "8242": [0, 0.55556, 0, 0, 0.275],
+ "8407": [0, 0.71444, 0.15382, 0, 0.5],
+ "8463": [0, 0.68889, 0, 0, 0.54028],
+ "8465": [0, 0.69444, 0, 0, 0.72222],
+ "8467": [0, 0.69444, 0, 0.11111, 0.41667],
+ "8472": [0.19444, 0.43056, 0, 0.11111, 0.63646],
+ "8476": [0, 0.69444, 0, 0, 0.72222],
+ "8501": [0, 0.69444, 0, 0, 0.61111],
+ "8592": [-0.13313, 0.36687, 0, 0, 1.0],
+ "8593": [0.19444, 0.69444, 0, 0, 0.5],
+ "8594": [-0.13313, 0.36687, 0, 0, 1.0],
+ "8595": [0.19444, 0.69444, 0, 0, 0.5],
+ "8596": [-0.13313, 0.36687, 0, 0, 1.0],
+ "8597": [0.25, 0.75, 0, 0, 0.5],
+ "8598": [0.19444, 0.69444, 0, 0, 1.0],
+ "8599": [0.19444, 0.69444, 0, 0, 1.0],
+ "8600": [0.19444, 0.69444, 0, 0, 1.0],
+ "8601": [0.19444, 0.69444, 0, 0, 1.0],
+ "8614": [0.011, 0.511, 0, 0, 1.0],
+ "8617": [0.011, 0.511, 0, 0, 1.126],
+ "8618": [0.011, 0.511, 0, 0, 1.126],
+ "8636": [-0.13313, 0.36687, 0, 0, 1.0],
+ "8637": [-0.13313, 0.36687, 0, 0, 1.0],
+ "8640": [-0.13313, 0.36687, 0, 0, 1.0],
+ "8641": [-0.13313, 0.36687, 0, 0, 1.0],
+ "8652": [0.011, 0.671, 0, 0, 1.0],
+ "8656": [-0.13313, 0.36687, 0, 0, 1.0],
+ "8657": [0.19444, 0.69444, 0, 0, 0.61111],
+ "8658": [-0.13313, 0.36687, 0, 0, 1.0],
+ "8659": [0.19444, 0.69444, 0, 0, 0.61111],
+ "8660": [-0.13313, 0.36687, 0, 0, 1.0],
+ "8661": [0.25, 0.75, 0, 0, 0.61111],
+ "8704": [0, 0.69444, 0, 0, 0.55556],
+ "8706": [0, 0.69444, 0.05556, 0.08334, 0.5309],
+ "8707": [0, 0.69444, 0, 0, 0.55556],
+ "8709": [0.05556, 0.75, 0, 0, 0.5],
+ "8711": [0, 0.68333, 0, 0, 0.83334],
+ "8712": [0.0391, 0.5391, 0, 0, 0.66667],
+ "8715": [0.0391, 0.5391, 0, 0, 0.66667],
+ "8722": [0.08333, 0.58333, 0, 0, 0.77778],
+ "8723": [0.08333, 0.58333, 0, 0, 0.77778],
+ "8725": [0.25, 0.75, 0, 0, 0.5],
+ "8726": [0.25, 0.75, 0, 0, 0.5],
+ "8727": [-0.03472, 0.46528, 0, 0, 0.5],
+ "8728": [-0.05555, 0.44445, 0, 0, 0.5],
+ "8729": [-0.05555, 0.44445, 0, 0, 0.5],
+ "8730": [0.2, 0.8, 0, 0, 0.83334],
+ "8733": [0, 0.43056, 0, 0, 0.77778],
+ "8734": [0, 0.43056, 0, 0, 1.0],
+ "8736": [0, 0.69224, 0, 0, 0.72222],
+ "8739": [0.25, 0.75, 0, 0, 0.27778],
+ "8741": [0.25, 0.75, 0, 0, 0.5],
+ "8743": [0, 0.55556, 0, 0, 0.66667],
+ "8744": [0, 0.55556, 0, 0, 0.66667],
+ "8745": [0, 0.55556, 0, 0, 0.66667],
+ "8746": [0, 0.55556, 0, 0, 0.66667],
+ "8747": [0.19444, 0.69444, 0.11111, 0, 0.41667],
+ "8764": [-0.13313, 0.36687, 0, 0, 0.77778],
+ "8768": [0.19444, 0.69444, 0, 0, 0.27778],
+ "8771": [-0.03625, 0.46375, 0, 0, 0.77778],
+ "8773": [-0.022, 0.589, 0, 0, 1.0],
+ "8776": [-0.01688, 0.48312, 0, 0, 0.77778],
+ "8781": [-0.03625, 0.46375, 0, 0, 0.77778],
+ "8784": [-0.133, 0.67, 0, 0, 0.778],
+ "8801": [-0.03625, 0.46375, 0, 0, 0.77778],
+ "8804": [0.13597, 0.63597, 0, 0, 0.77778],
+ "8805": [0.13597, 0.63597, 0, 0, 0.77778],
+ "8810": [0.0391, 0.5391, 0, 0, 1.0],
+ "8811": [0.0391, 0.5391, 0, 0, 1.0],
+ "8826": [0.0391, 0.5391, 0, 0, 0.77778],
+ "8827": [0.0391, 0.5391, 0, 0, 0.77778],
+ "8834": [0.0391, 0.5391, 0, 0, 0.77778],
+ "8835": [0.0391, 0.5391, 0, 0, 0.77778],
+ "8838": [0.13597, 0.63597, 0, 0, 0.77778],
+ "8839": [0.13597, 0.63597, 0, 0, 0.77778],
+ "8846": [0, 0.55556, 0, 0, 0.66667],
+ "8849": [0.13597, 0.63597, 0, 0, 0.77778],
+ "8850": [0.13597, 0.63597, 0, 0, 0.77778],
+ "8851": [0, 0.55556, 0, 0, 0.66667],
+ "8852": [0, 0.55556, 0, 0, 0.66667],
+ "8853": [0.08333, 0.58333, 0, 0, 0.77778],
+ "8854": [0.08333, 0.58333, 0, 0, 0.77778],
+ "8855": [0.08333, 0.58333, 0, 0, 0.77778],
+ "8856": [0.08333, 0.58333, 0, 0, 0.77778],
+ "8857": [0.08333, 0.58333, 0, 0, 0.77778],
+ "8866": [0, 0.69444, 0, 0, 0.61111],
+ "8867": [0, 0.69444, 0, 0, 0.61111],
+ "8868": [0, 0.69444, 0, 0, 0.77778],
+ "8869": [0, 0.69444, 0, 0, 0.77778],
+ "8872": [0.249, 0.75, 0, 0, 0.867],
+ "8900": [-0.05555, 0.44445, 0, 0, 0.5],
+ "8901": [-0.05555, 0.44445, 0, 0, 0.27778],
+ "8902": [-0.03472, 0.46528, 0, 0, 0.5],
+ "8904": [0.005, 0.505, 0, 0, 0.9],
+ "8942": [0.03, 0.9, 0, 0, 0.278],
+ "8943": [-0.19, 0.31, 0, 0, 1.172],
+ "8945": [-0.1, 0.82, 0, 0, 1.282],
+ "8968": [0.25, 0.75, 0, 0, 0.44445],
+ "8969": [0.25, 0.75, 0, 0, 0.44445],
+ "8970": [0.25, 0.75, 0, 0, 0.44445],
+ "8971": [0.25, 0.75, 0, 0, 0.44445],
+ "8994": [-0.14236, 0.35764, 0, 0, 1.0],
+ "8995": [-0.14236, 0.35764, 0, 0, 1.0],
+ "9136": [0.244, 0.744, 0, 0, 0.412],
+ "9137": [0.244, 0.744, 0, 0, 0.412],
+ "9651": [0.19444, 0.69444, 0, 0, 0.88889],
+ "9657": [-0.03472, 0.46528, 0, 0, 0.5],
+ "9661": [0.19444, 0.69444, 0, 0, 0.88889],
+ "9667": [-0.03472, 0.46528, 0, 0, 0.5],
+ "9711": [0.19444, 0.69444, 0, 0, 1.0],
+ "9824": [0.12963, 0.69444, 0, 0, 0.77778],
+ "9825": [0.12963, 0.69444, 0, 0, 0.77778],
+ "9826": [0.12963, 0.69444, 0, 0, 0.77778],
+ "9827": [0.12963, 0.69444, 0, 0, 0.77778],
+ "9837": [0, 0.75, 0, 0, 0.38889],
+ "9838": [0.19444, 0.69444, 0, 0, 0.38889],
+ "9839": [0.19444, 0.69444, 0, 0, 0.38889],
+ "10216": [0.25, 0.75, 0, 0, 0.38889],
+ "10217": [0.25, 0.75, 0, 0, 0.38889],
+ "10222": [0.244, 0.744, 0, 0, 0.412],
+ "10223": [0.244, 0.744, 0, 0, 0.412],
+ "10229": [0.011, 0.511, 0, 0, 1.609],
+ "10230": [0.011, 0.511, 0, 0, 1.638],
+ "10231": [0.011, 0.511, 0, 0, 1.859],
+ "10232": [0.024, 0.525, 0, 0, 1.609],
+ "10233": [0.024, 0.525, 0, 0, 1.638],
+ "10234": [0.024, 0.525, 0, 0, 1.858],
+ "10236": [0.011, 0.511, 0, 0, 1.638],
+ "10815": [0, 0.68333, 0, 0, 0.75],
+ "10927": [0.13597, 0.63597, 0, 0, 0.77778],
+ "10928": [0.13597, 0.63597, 0, 0, 0.77778],
+ "57376": [0.19444, 0.69444, 0, 0, 0]
+ },
+ "Math-BoldItalic": {
+ "32": [0, 0, 0, 0, 0.25],
+ "48": [0, 0.44444, 0, 0, 0.575],
+ "49": [0, 0.44444, 0, 0, 0.575],
+ "50": [0, 0.44444, 0, 0, 0.575],
+ "51": [0.19444, 0.44444, 0, 0, 0.575],
+ "52": [0.19444, 0.44444, 0, 0, 0.575],
+ "53": [0.19444, 0.44444, 0, 0, 0.575],
+ "54": [0, 0.64444, 0, 0, 0.575],
+ "55": [0.19444, 0.44444, 0, 0, 0.575],
+ "56": [0, 0.64444, 0, 0, 0.575],
+ "57": [0.19444, 0.44444, 0, 0, 0.575],
+ "65": [0, 0.68611, 0, 0, 0.86944],
+ "66": [0, 0.68611, 0.04835, 0, 0.8664],
+ "67": [0, 0.68611, 0.06979, 0, 0.81694],
+ "68": [0, 0.68611, 0.03194, 0, 0.93812],
+ "69": [0, 0.68611, 0.05451, 0, 0.81007],
+ "70": [0, 0.68611, 0.15972, 0, 0.68889],
+ "71": [0, 0.68611, 0, 0, 0.88673],
+ "72": [0, 0.68611, 0.08229, 0, 0.98229],
+ "73": [0, 0.68611, 0.07778, 0, 0.51111],
+ "74": [0, 0.68611, 0.10069, 0, 0.63125],
+ "75": [0, 0.68611, 0.06979, 0, 0.97118],
+ "76": [0, 0.68611, 0, 0, 0.75555],
+ "77": [0, 0.68611, 0.11424, 0, 1.14201],
+ "78": [0, 0.68611, 0.11424, 0, 0.95034],
+ "79": [0, 0.68611, 0.03194, 0, 0.83666],
+ "80": [0, 0.68611, 0.15972, 0, 0.72309],
+ "81": [0.19444, 0.68611, 0, 0, 0.86861],
+ "82": [0, 0.68611, 0.00421, 0, 0.87235],
+ "83": [0, 0.68611, 0.05382, 0, 0.69271],
+ "84": [0, 0.68611, 0.15972, 0, 0.63663],
+ "85": [0, 0.68611, 0.11424, 0, 0.80027],
+ "86": [0, 0.68611, 0.25555, 0, 0.67778],
+ "87": [0, 0.68611, 0.15972, 0, 1.09305],
+ "88": [0, 0.68611, 0.07778, 0, 0.94722],
+ "89": [0, 0.68611, 0.25555, 0, 0.67458],
+ "90": [0, 0.68611, 0.06979, 0, 0.77257],
+ "97": [0, 0.44444, 0, 0, 0.63287],
+ "98": [0, 0.69444, 0, 0, 0.52083],
+ "99": [0, 0.44444, 0, 0, 0.51342],
+ "100": [0, 0.69444, 0, 0, 0.60972],
+ "101": [0, 0.44444, 0, 0, 0.55361],
+ "102": [0.19444, 0.69444, 0.11042, 0, 0.56806],
+ "103": [0.19444, 0.44444, 0.03704, 0, 0.5449],
+ "104": [0, 0.69444, 0, 0, 0.66759],
+ "105": [0, 0.69326, 0, 0, 0.4048],
+ "106": [0.19444, 0.69326, 0.0622, 0, 0.47083],
+ "107": [0, 0.69444, 0.01852, 0, 0.6037],
+ "108": [0, 0.69444, 0.0088, 0, 0.34815],
+ "109": [0, 0.44444, 0, 0, 1.0324],
+ "110": [0, 0.44444, 0, 0, 0.71296],
+ "111": [0, 0.44444, 0, 0, 0.58472],
+ "112": [0.19444, 0.44444, 0, 0, 0.60092],
+ "113": [0.19444, 0.44444, 0.03704, 0, 0.54213],
+ "114": [0, 0.44444, 0.03194, 0, 0.5287],
+ "115": [0, 0.44444, 0, 0, 0.53125],
+ "116": [0, 0.63492, 0, 0, 0.41528],
+ "117": [0, 0.44444, 0, 0, 0.68102],
+ "118": [0, 0.44444, 0.03704, 0, 0.56666],
+ "119": [0, 0.44444, 0.02778, 0, 0.83148],
+ "120": [0, 0.44444, 0, 0, 0.65903],
+ "121": [0.19444, 0.44444, 0.03704, 0, 0.59028],
+ "122": [0, 0.44444, 0.04213, 0, 0.55509],
+ "160": [0, 0, 0, 0, 0.25],
+ "915": [0, 0.68611, 0.15972, 0, 0.65694],
+ "916": [0, 0.68611, 0, 0, 0.95833],
+ "920": [0, 0.68611, 0.03194, 0, 0.86722],
+ "923": [0, 0.68611, 0, 0, 0.80555],
+ "926": [0, 0.68611, 0.07458, 0, 0.84125],
+ "928": [0, 0.68611, 0.08229, 0, 0.98229],
+ "931": [0, 0.68611, 0.05451, 0, 0.88507],
+ "933": [0, 0.68611, 0.15972, 0, 0.67083],
+ "934": [0, 0.68611, 0, 0, 0.76666],
+ "936": [0, 0.68611, 0.11653, 0, 0.71402],
+ "937": [0, 0.68611, 0.04835, 0, 0.8789],
+ "945": [0, 0.44444, 0, 0, 0.76064],
+ "946": [0.19444, 0.69444, 0.03403, 0, 0.65972],
+ "947": [0.19444, 0.44444, 0.06389, 0, 0.59003],
+ "948": [0, 0.69444, 0.03819, 0, 0.52222],
+ "949": [0, 0.44444, 0, 0, 0.52882],
+ "950": [0.19444, 0.69444, 0.06215, 0, 0.50833],
+ "951": [0.19444, 0.44444, 0.03704, 0, 0.6],
+ "952": [0, 0.69444, 0.03194, 0, 0.5618],
+ "953": [0, 0.44444, 0, 0, 0.41204],
+ "954": [0, 0.44444, 0, 0, 0.66759],
+ "955": [0, 0.69444, 0, 0, 0.67083],
+ "956": [0.19444, 0.44444, 0, 0, 0.70787],
+ "957": [0, 0.44444, 0.06898, 0, 0.57685],
+ "958": [0.19444, 0.69444, 0.03021, 0, 0.50833],
+ "959": [0, 0.44444, 0, 0, 0.58472],
+ "960": [0, 0.44444, 0.03704, 0, 0.68241],
+ "961": [0.19444, 0.44444, 0, 0, 0.6118],
+ "962": [0.09722, 0.44444, 0.07917, 0, 0.42361],
+ "963": [0, 0.44444, 0.03704, 0, 0.68588],
+ "964": [0, 0.44444, 0.13472, 0, 0.52083],
+ "965": [0, 0.44444, 0.03704, 0, 0.63055],
+ "966": [0.19444, 0.44444, 0, 0, 0.74722],
+ "967": [0.19444, 0.44444, 0, 0, 0.71805],
+ "968": [0.19444, 0.69444, 0.03704, 0, 0.75833],
+ "969": [0, 0.44444, 0.03704, 0, 0.71782],
+ "977": [0, 0.69444, 0, 0, 0.69155],
+ "981": [0.19444, 0.69444, 0, 0, 0.7125],
+ "982": [0, 0.44444, 0.03194, 0, 0.975],
+ "1009": [0.19444, 0.44444, 0, 0, 0.6118],
+ "1013": [0, 0.44444, 0, 0, 0.48333],
+ "57649": [0, 0.44444, 0, 0, 0.39352],
+ "57911": [0.19444, 0.44444, 0, 0, 0.43889]
+ },
+ "Math-Italic": {
+ "32": [0, 0, 0, 0, 0.25],
+ "48": [0, 0.43056, 0, 0, 0.5],
+ "49": [0, 0.43056, 0, 0, 0.5],
+ "50": [0, 0.43056, 0, 0, 0.5],
+ "51": [0.19444, 0.43056, 0, 0, 0.5],
+ "52": [0.19444, 0.43056, 0, 0, 0.5],
+ "53": [0.19444, 0.43056, 0, 0, 0.5],
+ "54": [0, 0.64444, 0, 0, 0.5],
+ "55": [0.19444, 0.43056, 0, 0, 0.5],
+ "56": [0, 0.64444, 0, 0, 0.5],
+ "57": [0.19444, 0.43056, 0, 0, 0.5],
+ "65": [0, 0.68333, 0, 0.13889, 0.75],
+ "66": [0, 0.68333, 0.05017, 0.08334, 0.75851],
+ "67": [0, 0.68333, 0.07153, 0.08334, 0.71472],
+ "68": [0, 0.68333, 0.02778, 0.05556, 0.82792],
+ "69": [0, 0.68333, 0.05764, 0.08334, 0.7382],
+ "70": [0, 0.68333, 0.13889, 0.08334, 0.64306],
+ "71": [0, 0.68333, 0, 0.08334, 0.78625],
+ "72": [0, 0.68333, 0.08125, 0.05556, 0.83125],
+ "73": [0, 0.68333, 0.07847, 0.11111, 0.43958],
+ "74": [0, 0.68333, 0.09618, 0.16667, 0.55451],
+ "75": [0, 0.68333, 0.07153, 0.05556, 0.84931],
+ "76": [0, 0.68333, 0, 0.02778, 0.68056],
+ "77": [0, 0.68333, 0.10903, 0.08334, 0.97014],
+ "78": [0, 0.68333, 0.10903, 0.08334, 0.80347],
+ "79": [0, 0.68333, 0.02778, 0.08334, 0.76278],
+ "80": [0, 0.68333, 0.13889, 0.08334, 0.64201],
+ "81": [0.19444, 0.68333, 0, 0.08334, 0.79056],
+ "82": [0, 0.68333, 0.00773, 0.08334, 0.75929],
+ "83": [0, 0.68333, 0.05764, 0.08334, 0.6132],
+ "84": [0, 0.68333, 0.13889, 0.08334, 0.58438],
+ "85": [0, 0.68333, 0.10903, 0.02778, 0.68278],
+ "86": [0, 0.68333, 0.22222, 0, 0.58333],
+ "87": [0, 0.68333, 0.13889, 0, 0.94445],
+ "88": [0, 0.68333, 0.07847, 0.08334, 0.82847],
+ "89": [0, 0.68333, 0.22222, 0, 0.58056],
+ "90": [0, 0.68333, 0.07153, 0.08334, 0.68264],
+ "97": [0, 0.43056, 0, 0, 0.52859],
+ "98": [0, 0.69444, 0, 0, 0.42917],
+ "99": [0, 0.43056, 0, 0.05556, 0.43276],
+ "100": [0, 0.69444, 0, 0.16667, 0.52049],
+ "101": [0, 0.43056, 0, 0.05556, 0.46563],
+ "102": [0.19444, 0.69444, 0.10764, 0.16667, 0.48959],
+ "103": [0.19444, 0.43056, 0.03588, 0.02778, 0.47697],
+ "104": [0, 0.69444, 0, 0, 0.57616],
+ "105": [0, 0.65952, 0, 0, 0.34451],
+ "106": [0.19444, 0.65952, 0.05724, 0, 0.41181],
+ "107": [0, 0.69444, 0.03148, 0, 0.5206],
+ "108": [0, 0.69444, 0.01968, 0.08334, 0.29838],
+ "109": [0, 0.43056, 0, 0, 0.87801],
+ "110": [0, 0.43056, 0, 0, 0.60023],
+ "111": [0, 0.43056, 0, 0.05556, 0.48472],
+ "112": [0.19444, 0.43056, 0, 0.08334, 0.50313],
+ "113": [0.19444, 0.43056, 0.03588, 0.08334, 0.44641],
+ "114": [0, 0.43056, 0.02778, 0.05556, 0.45116],
+ "115": [0, 0.43056, 0, 0.05556, 0.46875],
+ "116": [0, 0.61508, 0, 0.08334, 0.36111],
+ "117": [0, 0.43056, 0, 0.02778, 0.57246],
+ "118": [0, 0.43056, 0.03588, 0.02778, 0.48472],
+ "119": [0, 0.43056, 0.02691, 0.08334, 0.71592],
+ "120": [0, 0.43056, 0, 0.02778, 0.57153],
+ "121": [0.19444, 0.43056, 0.03588, 0.05556, 0.49028],
+ "122": [0, 0.43056, 0.04398, 0.05556, 0.46505],
+ "160": [0, 0, 0, 0, 0.25],
+ "915": [0, 0.68333, 0.13889, 0.08334, 0.61528],
+ "916": [0, 0.68333, 0, 0.16667, 0.83334],
+ "920": [0, 0.68333, 0.02778, 0.08334, 0.76278],
+ "923": [0, 0.68333, 0, 0.16667, 0.69445],
+ "926": [0, 0.68333, 0.07569, 0.08334, 0.74236],
+ "928": [0, 0.68333, 0.08125, 0.05556, 0.83125],
+ "931": [0, 0.68333, 0.05764, 0.08334, 0.77986],
+ "933": [0, 0.68333, 0.13889, 0.05556, 0.58333],
+ "934": [0, 0.68333, 0, 0.08334, 0.66667],
+ "936": [0, 0.68333, 0.11, 0.05556, 0.61222],
+ "937": [0, 0.68333, 0.05017, 0.08334, 0.7724],
+ "945": [0, 0.43056, 0.0037, 0.02778, 0.6397],
+ "946": [0.19444, 0.69444, 0.05278, 0.08334, 0.56563],
+ "947": [0.19444, 0.43056, 0.05556, 0, 0.51773],
+ "948": [0, 0.69444, 0.03785, 0.05556, 0.44444],
+ "949": [0, 0.43056, 0, 0.08334, 0.46632],
+ "950": [0.19444, 0.69444, 0.07378, 0.08334, 0.4375],
+ "951": [0.19444, 0.43056, 0.03588, 0.05556, 0.49653],
+ "952": [0, 0.69444, 0.02778, 0.08334, 0.46944],
+ "953": [0, 0.43056, 0, 0.05556, 0.35394],
+ "954": [0, 0.43056, 0, 0, 0.57616],
+ "955": [0, 0.69444, 0, 0, 0.58334],
+ "956": [0.19444, 0.43056, 0, 0.02778, 0.60255],
+ "957": [0, 0.43056, 0.06366, 0.02778, 0.49398],
+ "958": [0.19444, 0.69444, 0.04601, 0.11111, 0.4375],
+ "959": [0, 0.43056, 0, 0.05556, 0.48472],
+ "960": [0, 0.43056, 0.03588, 0, 0.57003],
+ "961": [0.19444, 0.43056, 0, 0.08334, 0.51702],
+ "962": [0.09722, 0.43056, 0.07986, 0.08334, 0.36285],
+ "963": [0, 0.43056, 0.03588, 0, 0.57141],
+ "964": [0, 0.43056, 0.1132, 0.02778, 0.43715],
+ "965": [0, 0.43056, 0.03588, 0.02778, 0.54028],
+ "966": [0.19444, 0.43056, 0, 0.08334, 0.65417],
+ "967": [0.19444, 0.43056, 0, 0.05556, 0.62569],
+ "968": [0.19444, 0.69444, 0.03588, 0.11111, 0.65139],
+ "969": [0, 0.43056, 0.03588, 0, 0.62245],
+ "977": [0, 0.69444, 0, 0.08334, 0.59144],
+ "981": [0.19444, 0.69444, 0, 0.08334, 0.59583],
+ "982": [0, 0.43056, 0.02778, 0, 0.82813],
+ "1009": [0.19444, 0.43056, 0, 0.08334, 0.51702],
+ "1013": [0, 0.43056, 0, 0.05556, 0.4059],
+ "57649": [0, 0.43056, 0, 0.02778, 0.32246],
+ "57911": [0.19444, 0.43056, 0, 0.08334, 0.38403]
+ },
+ "SansSerif-Bold": {
+ "32": [0, 0, 0, 0, 0.25],
+ "33": [0, 0.69444, 0, 0, 0.36667],
+ "34": [0, 0.69444, 0, 0, 0.55834],
+ "35": [0.19444, 0.69444, 0, 0, 0.91667],
+ "36": [0.05556, 0.75, 0, 0, 0.55],
+ "37": [0.05556, 0.75, 0, 0, 1.02912],
+ "38": [0, 0.69444, 0, 0, 0.83056],
+ "39": [0, 0.69444, 0, 0, 0.30556],
+ "40": [0.25, 0.75, 0, 0, 0.42778],
+ "41": [0.25, 0.75, 0, 0, 0.42778],
+ "42": [0, 0.75, 0, 0, 0.55],
+ "43": [0.11667, 0.61667, 0, 0, 0.85556],
+ "44": [0.10556, 0.13056, 0, 0, 0.30556],
+ "45": [0, 0.45833, 0, 0, 0.36667],
+ "46": [0, 0.13056, 0, 0, 0.30556],
+ "47": [0.25, 0.75, 0, 0, 0.55],
+ "48": [0, 0.69444, 0, 0, 0.55],
+ "49": [0, 0.69444, 0, 0, 0.55],
+ "50": [0, 0.69444, 0, 0, 0.55],
+ "51": [0, 0.69444, 0, 0, 0.55],
+ "52": [0, 0.69444, 0, 0, 0.55],
+ "53": [0, 0.69444, 0, 0, 0.55],
+ "54": [0, 0.69444, 0, 0, 0.55],
+ "55": [0, 0.69444, 0, 0, 0.55],
+ "56": [0, 0.69444, 0, 0, 0.55],
+ "57": [0, 0.69444, 0, 0, 0.55],
+ "58": [0, 0.45833, 0, 0, 0.30556],
+ "59": [0.10556, 0.45833, 0, 0, 0.30556],
+ "61": [-0.09375, 0.40625, 0, 0, 0.85556],
+ "63": [0, 0.69444, 0, 0, 0.51945],
+ "64": [0, 0.69444, 0, 0, 0.73334],
+ "65": [0, 0.69444, 0, 0, 0.73334],
+ "66": [0, 0.69444, 0, 0, 0.73334],
+ "67": [0, 0.69444, 0, 0, 0.70278],
+ "68": [0, 0.69444, 0, 0, 0.79445],
+ "69": [0, 0.69444, 0, 0, 0.64167],
+ "70": [0, 0.69444, 0, 0, 0.61111],
+ "71": [0, 0.69444, 0, 0, 0.73334],
+ "72": [0, 0.69444, 0, 0, 0.79445],
+ "73": [0, 0.69444, 0, 0, 0.33056],
+ "74": [0, 0.69444, 0, 0, 0.51945],
+ "75": [0, 0.69444, 0, 0, 0.76389],
+ "76": [0, 0.69444, 0, 0, 0.58056],
+ "77": [0, 0.69444, 0, 0, 0.97778],
+ "78": [0, 0.69444, 0, 0, 0.79445],
+ "79": [0, 0.69444, 0, 0, 0.79445],
+ "80": [0, 0.69444, 0, 0, 0.70278],
+ "81": [0.10556, 0.69444, 0, 0, 0.79445],
+ "82": [0, 0.69444, 0, 0, 0.70278],
+ "83": [0, 0.69444, 0, 0, 0.61111],
+ "84": [0, 0.69444, 0, 0, 0.73334],
+ "85": [0, 0.69444, 0, 0, 0.76389],
+ "86": [0, 0.69444, 0.01528, 0, 0.73334],
+ "87": [0, 0.69444, 0.01528, 0, 1.03889],
+ "88": [0, 0.69444, 0, 0, 0.73334],
+ "89": [0, 0.69444, 0.0275, 0, 0.73334],
+ "90": [0, 0.69444, 0, 0, 0.67223],
+ "91": [0.25, 0.75, 0, 0, 0.34306],
+ "93": [0.25, 0.75, 0, 0, 0.34306],
+ "94": [0, 0.69444, 0, 0, 0.55],
+ "95": [0.35, 0.10833, 0.03056, 0, 0.55],
+ "97": [0, 0.45833, 0, 0, 0.525],
+ "98": [0, 0.69444, 0, 0, 0.56111],
+ "99": [0, 0.45833, 0, 0, 0.48889],
+ "100": [0, 0.69444, 0, 0, 0.56111],
+ "101": [0, 0.45833, 0, 0, 0.51111],
+ "102": [0, 0.69444, 0.07639, 0, 0.33611],
+ "103": [0.19444, 0.45833, 0.01528, 0, 0.55],
+ "104": [0, 0.69444, 0, 0, 0.56111],
+ "105": [0, 0.69444, 0, 0, 0.25556],
+ "106": [0.19444, 0.69444, 0, 0, 0.28611],
+ "107": [0, 0.69444, 0, 0, 0.53056],
+ "108": [0, 0.69444, 0, 0, 0.25556],
+ "109": [0, 0.45833, 0, 0, 0.86667],
+ "110": [0, 0.45833, 0, 0, 0.56111],
+ "111": [0, 0.45833, 0, 0, 0.55],
+ "112": [0.19444, 0.45833, 0, 0, 0.56111],
+ "113": [0.19444, 0.45833, 0, 0, 0.56111],
+ "114": [0, 0.45833, 0.01528, 0, 0.37222],
+ "115": [0, 0.45833, 0, 0, 0.42167],
+ "116": [0, 0.58929, 0, 0, 0.40417],
+ "117": [0, 0.45833, 0, 0, 0.56111],
+ "118": [0, 0.45833, 0.01528, 0, 0.5],
+ "119": [0, 0.45833, 0.01528, 0, 0.74445],
+ "120": [0, 0.45833, 0, 0, 0.5],
+ "121": [0.19444, 0.45833, 0.01528, 0, 0.5],
+ "122": [0, 0.45833, 0, 0, 0.47639],
+ "126": [0.35, 0.34444, 0, 0, 0.55],
+ "160": [0, 0, 0, 0, 0.25],
+ "168": [0, 0.69444, 0, 0, 0.55],
+ "176": [0, 0.69444, 0, 0, 0.73334],
+ "180": [0, 0.69444, 0, 0, 0.55],
+ "184": [0.17014, 0, 0, 0, 0.48889],
+ "305": [0, 0.45833, 0, 0, 0.25556],
+ "567": [0.19444, 0.45833, 0, 0, 0.28611],
+ "710": [0, 0.69444, 0, 0, 0.55],
+ "711": [0, 0.63542, 0, 0, 0.55],
+ "713": [0, 0.63778, 0, 0, 0.55],
+ "728": [0, 0.69444, 0, 0, 0.55],
+ "729": [0, 0.69444, 0, 0, 0.30556],
+ "730": [0, 0.69444, 0, 0, 0.73334],
+ "732": [0, 0.69444, 0, 0, 0.55],
+ "733": [0, 0.69444, 0, 0, 0.55],
+ "915": [0, 0.69444, 0, 0, 0.58056],
+ "916": [0, 0.69444, 0, 0, 0.91667],
+ "920": [0, 0.69444, 0, 0, 0.85556],
+ "923": [0, 0.69444, 0, 0, 0.67223],
+ "926": [0, 0.69444, 0, 0, 0.73334],
+ "928": [0, 0.69444, 0, 0, 0.79445],
+ "931": [0, 0.69444, 0, 0, 0.79445],
+ "933": [0, 0.69444, 0, 0, 0.85556],
+ "934": [0, 0.69444, 0, 0, 0.79445],
+ "936": [0, 0.69444, 0, 0, 0.85556],
+ "937": [0, 0.69444, 0, 0, 0.79445],
+ "8211": [0, 0.45833, 0.03056, 0, 0.55],
+ "8212": [0, 0.45833, 0.03056, 0, 1.10001],
+ "8216": [0, 0.69444, 0, 0, 0.30556],
+ "8217": [0, 0.69444, 0, 0, 0.30556],
+ "8220": [0, 0.69444, 0, 0, 0.55834],
+ "8221": [0, 0.69444, 0, 0, 0.55834]
+ },
+ "SansSerif-Italic": {
+ "32": [0, 0, 0, 0, 0.25],
+ "33": [0, 0.69444, 0.05733, 0, 0.31945],
+ "34": [0, 0.69444, 0.00316, 0, 0.5],
+ "35": [0.19444, 0.69444, 0.05087, 0, 0.83334],
+ "36": [0.05556, 0.75, 0.11156, 0, 0.5],
+ "37": [0.05556, 0.75, 0.03126, 0, 0.83334],
+ "38": [0, 0.69444, 0.03058, 0, 0.75834],
+ "39": [0, 0.69444, 0.07816, 0, 0.27778],
+ "40": [0.25, 0.75, 0.13164, 0, 0.38889],
+ "41": [0.25, 0.75, 0.02536, 0, 0.38889],
+ "42": [0, 0.75, 0.11775, 0, 0.5],
+ "43": [0.08333, 0.58333, 0.02536, 0, 0.77778],
+ "44": [0.125, 0.08333, 0, 0, 0.27778],
+ "45": [0, 0.44444, 0.01946, 0, 0.33333],
+ "46": [0, 0.08333, 0, 0, 0.27778],
+ "47": [0.25, 0.75, 0.13164, 0, 0.5],
+ "48": [0, 0.65556, 0.11156, 0, 0.5],
+ "49": [0, 0.65556, 0.11156, 0, 0.5],
+ "50": [0, 0.65556, 0.11156, 0, 0.5],
+ "51": [0, 0.65556, 0.11156, 0, 0.5],
+ "52": [0, 0.65556, 0.11156, 0, 0.5],
+ "53": [0, 0.65556, 0.11156, 0, 0.5],
+ "54": [0, 0.65556, 0.11156, 0, 0.5],
+ "55": [0, 0.65556, 0.11156, 0, 0.5],
+ "56": [0, 0.65556, 0.11156, 0, 0.5],
+ "57": [0, 0.65556, 0.11156, 0, 0.5],
+ "58": [0, 0.44444, 0.02502, 0, 0.27778],
+ "59": [0.125, 0.44444, 0.02502, 0, 0.27778],
+ "61": [-0.13, 0.37, 0.05087, 0, 0.77778],
+ "63": [0, 0.69444, 0.11809, 0, 0.47222],
+ "64": [0, 0.69444, 0.07555, 0, 0.66667],
+ "65": [0, 0.69444, 0, 0, 0.66667],
+ "66": [0, 0.69444, 0.08293, 0, 0.66667],
+ "67": [0, 0.69444, 0.11983, 0, 0.63889],
+ "68": [0, 0.69444, 0.07555, 0, 0.72223],
+ "69": [0, 0.69444, 0.11983, 0, 0.59722],
+ "70": [0, 0.69444, 0.13372, 0, 0.56945],
+ "71": [0, 0.69444, 0.11983, 0, 0.66667],
+ "72": [0, 0.69444, 0.08094, 0, 0.70834],
+ "73": [0, 0.69444, 0.13372, 0, 0.27778],
+ "74": [0, 0.69444, 0.08094, 0, 0.47222],
+ "75": [0, 0.69444, 0.11983, 0, 0.69445],
+ "76": [0, 0.69444, 0, 0, 0.54167],
+ "77": [0, 0.69444, 0.08094, 0, 0.875],
+ "78": [0, 0.69444, 0.08094, 0, 0.70834],
+ "79": [0, 0.69444, 0.07555, 0, 0.73611],
+ "80": [0, 0.69444, 0.08293, 0, 0.63889],
+ "81": [0.125, 0.69444, 0.07555, 0, 0.73611],
+ "82": [0, 0.69444, 0.08293, 0, 0.64584],
+ "83": [0, 0.69444, 0.09205, 0, 0.55556],
+ "84": [0, 0.69444, 0.13372, 0, 0.68056],
+ "85": [0, 0.69444, 0.08094, 0, 0.6875],
+ "86": [0, 0.69444, 0.1615, 0, 0.66667],
+ "87": [0, 0.69444, 0.1615, 0, 0.94445],
+ "88": [0, 0.69444, 0.13372, 0, 0.66667],
+ "89": [0, 0.69444, 0.17261, 0, 0.66667],
+ "90": [0, 0.69444, 0.11983, 0, 0.61111],
+ "91": [0.25, 0.75, 0.15942, 0, 0.28889],
+ "93": [0.25, 0.75, 0.08719, 0, 0.28889],
+ "94": [0, 0.69444, 0.0799, 0, 0.5],
+ "95": [0.35, 0.09444, 0.08616, 0, 0.5],
+ "97": [0, 0.44444, 0.00981, 0, 0.48056],
+ "98": [0, 0.69444, 0.03057, 0, 0.51667],
+ "99": [0, 0.44444, 0.08336, 0, 0.44445],
+ "100": [0, 0.69444, 0.09483, 0, 0.51667],
+ "101": [0, 0.44444, 0.06778, 0, 0.44445],
+ "102": [0, 0.69444, 0.21705, 0, 0.30556],
+ "103": [0.19444, 0.44444, 0.10836, 0, 0.5],
+ "104": [0, 0.69444, 0.01778, 0, 0.51667],
+ "105": [0, 0.67937, 0.09718, 0, 0.23889],
+ "106": [0.19444, 0.67937, 0.09162, 0, 0.26667],
+ "107": [0, 0.69444, 0.08336, 0, 0.48889],
+ "108": [0, 0.69444, 0.09483, 0, 0.23889],
+ "109": [0, 0.44444, 0.01778, 0, 0.79445],
+ "110": [0, 0.44444, 0.01778, 0, 0.51667],
+ "111": [0, 0.44444, 0.06613, 0, 0.5],
+ "112": [0.19444, 0.44444, 0.0389, 0, 0.51667],
+ "113": [0.19444, 0.44444, 0.04169, 0, 0.51667],
+ "114": [0, 0.44444, 0.10836, 0, 0.34167],
+ "115": [0, 0.44444, 0.0778, 0, 0.38333],
+ "116": [0, 0.57143, 0.07225, 0, 0.36111],
+ "117": [0, 0.44444, 0.04169, 0, 0.51667],
+ "118": [0, 0.44444, 0.10836, 0, 0.46111],
+ "119": [0, 0.44444, 0.10836, 0, 0.68334],
+ "120": [0, 0.44444, 0.09169, 0, 0.46111],
+ "121": [0.19444, 0.44444, 0.10836, 0, 0.46111],
+ "122": [0, 0.44444, 0.08752, 0, 0.43472],
+ "126": [0.35, 0.32659, 0.08826, 0, 0.5],
+ "160": [0, 0, 0, 0, 0.25],
+ "168": [0, 0.67937, 0.06385, 0, 0.5],
+ "176": [0, 0.69444, 0, 0, 0.73752],
+ "184": [0.17014, 0, 0, 0, 0.44445],
+ "305": [0, 0.44444, 0.04169, 0, 0.23889],
+ "567": [0.19444, 0.44444, 0.04169, 0, 0.26667],
+ "710": [0, 0.69444, 0.0799, 0, 0.5],
+ "711": [0, 0.63194, 0.08432, 0, 0.5],
+ "713": [0, 0.60889, 0.08776, 0, 0.5],
+ "714": [0, 0.69444, 0.09205, 0, 0.5],
+ "715": [0, 0.69444, 0, 0, 0.5],
+ "728": [0, 0.69444, 0.09483, 0, 0.5],
+ "729": [0, 0.67937, 0.07774, 0, 0.27778],
+ "730": [0, 0.69444, 0, 0, 0.73752],
+ "732": [0, 0.67659, 0.08826, 0, 0.5],
+ "733": [0, 0.69444, 0.09205, 0, 0.5],
+ "915": [0, 0.69444, 0.13372, 0, 0.54167],
+ "916": [0, 0.69444, 0, 0, 0.83334],
+ "920": [0, 0.69444, 0.07555, 0, 0.77778],
+ "923": [0, 0.69444, 0, 0, 0.61111],
+ "926": [0, 0.69444, 0.12816, 0, 0.66667],
+ "928": [0, 0.69444, 0.08094, 0, 0.70834],
+ "931": [0, 0.69444, 0.11983, 0, 0.72222],
+ "933": [0, 0.69444, 0.09031, 0, 0.77778],
+ "934": [0, 0.69444, 0.04603, 0, 0.72222],
+ "936": [0, 0.69444, 0.09031, 0, 0.77778],
+ "937": [0, 0.69444, 0.08293, 0, 0.72222],
+ "8211": [0, 0.44444, 0.08616, 0, 0.5],
+ "8212": [0, 0.44444, 0.08616, 0, 1.0],
+ "8216": [0, 0.69444, 0.07816, 0, 0.27778],
+ "8217": [0, 0.69444, 0.07816, 0, 0.27778],
+ "8220": [0, 0.69444, 0.14205, 0, 0.5],
+ "8221": [0, 0.69444, 0.00316, 0, 0.5]
+ },
+ "SansSerif-Regular": {
+ "32": [0, 0, 0, 0, 0.25],
+ "33": [0, 0.69444, 0, 0, 0.31945],
+ "34": [0, 0.69444, 0, 0, 0.5],
+ "35": [0.19444, 0.69444, 0, 0, 0.83334],
+ "36": [0.05556, 0.75, 0, 0, 0.5],
+ "37": [0.05556, 0.75, 0, 0, 0.83334],
+ "38": [0, 0.69444, 0, 0, 0.75834],
+ "39": [0, 0.69444, 0, 0, 0.27778],
+ "40": [0.25, 0.75, 0, 0, 0.38889],
+ "41": [0.25, 0.75, 0, 0, 0.38889],
+ "42": [0, 0.75, 0, 0, 0.5],
+ "43": [0.08333, 0.58333, 0, 0, 0.77778],
+ "44": [0.125, 0.08333, 0, 0, 0.27778],
+ "45": [0, 0.44444, 0, 0, 0.33333],
+ "46": [0, 0.08333, 0, 0, 0.27778],
+ "47": [0.25, 0.75, 0, 0, 0.5],
+ "48": [0, 0.65556, 0, 0, 0.5],
+ "49": [0, 0.65556, 0, 0, 0.5],
+ "50": [0, 0.65556, 0, 0, 0.5],
+ "51": [0, 0.65556, 0, 0, 0.5],
+ "52": [0, 0.65556, 0, 0, 0.5],
+ "53": [0, 0.65556, 0, 0, 0.5],
+ "54": [0, 0.65556, 0, 0, 0.5],
+ "55": [0, 0.65556, 0, 0, 0.5],
+ "56": [0, 0.65556, 0, 0, 0.5],
+ "57": [0, 0.65556, 0, 0, 0.5],
+ "58": [0, 0.44444, 0, 0, 0.27778],
+ "59": [0.125, 0.44444, 0, 0, 0.27778],
+ "61": [-0.13, 0.37, 0, 0, 0.77778],
+ "63": [0, 0.69444, 0, 0, 0.47222],
+ "64": [0, 0.69444, 0, 0, 0.66667],
+ "65": [0, 0.69444, 0, 0, 0.66667],
+ "66": [0, 0.69444, 0, 0, 0.66667],
+ "67": [0, 0.69444, 0, 0, 0.63889],
+ "68": [0, 0.69444, 0, 0, 0.72223],
+ "69": [0, 0.69444, 0, 0, 0.59722],
+ "70": [0, 0.69444, 0, 0, 0.56945],
+ "71": [0, 0.69444, 0, 0, 0.66667],
+ "72": [0, 0.69444, 0, 0, 0.70834],
+ "73": [0, 0.69444, 0, 0, 0.27778],
+ "74": [0, 0.69444, 0, 0, 0.47222],
+ "75": [0, 0.69444, 0, 0, 0.69445],
+ "76": [0, 0.69444, 0, 0, 0.54167],
+ "77": [0, 0.69444, 0, 0, 0.875],
+ "78": [0, 0.69444, 0, 0, 0.70834],
+ "79": [0, 0.69444, 0, 0, 0.73611],
+ "80": [0, 0.69444, 0, 0, 0.63889],
+ "81": [0.125, 0.69444, 0, 0, 0.73611],
+ "82": [0, 0.69444, 0, 0, 0.64584],
+ "83": [0, 0.69444, 0, 0, 0.55556],
+ "84": [0, 0.69444, 0, 0, 0.68056],
+ "85": [0, 0.69444, 0, 0, 0.6875],
+ "86": [0, 0.69444, 0.01389, 0, 0.66667],
+ "87": [0, 0.69444, 0.01389, 0, 0.94445],
+ "88": [0, 0.69444, 0, 0, 0.66667],
+ "89": [0, 0.69444, 0.025, 0, 0.66667],
+ "90": [0, 0.69444, 0, 0, 0.61111],
+ "91": [0.25, 0.75, 0, 0, 0.28889],
+ "93": [0.25, 0.75, 0, 0, 0.28889],
+ "94": [0, 0.69444, 0, 0, 0.5],
+ "95": [0.35, 0.09444, 0.02778, 0, 0.5],
+ "97": [0, 0.44444, 0, 0, 0.48056],
+ "98": [0, 0.69444, 0, 0, 0.51667],
+ "99": [0, 0.44444, 0, 0, 0.44445],
+ "100": [0, 0.69444, 0, 0, 0.51667],
+ "101": [0, 0.44444, 0, 0, 0.44445],
+ "102": [0, 0.69444, 0.06944, 0, 0.30556],
+ "103": [0.19444, 0.44444, 0.01389, 0, 0.5],
+ "104": [0, 0.69444, 0, 0, 0.51667],
+ "105": [0, 0.67937, 0, 0, 0.23889],
+ "106": [0.19444, 0.67937, 0, 0, 0.26667],
+ "107": [0, 0.69444, 0, 0, 0.48889],
+ "108": [0, 0.69444, 0, 0, 0.23889],
+ "109": [0, 0.44444, 0, 0, 0.79445],
+ "110": [0, 0.44444, 0, 0, 0.51667],
+ "111": [0, 0.44444, 0, 0, 0.5],
+ "112": [0.19444, 0.44444, 0, 0, 0.51667],
+ "113": [0.19444, 0.44444, 0, 0, 0.51667],
+ "114": [0, 0.44444, 0.01389, 0, 0.34167],
+ "115": [0, 0.44444, 0, 0, 0.38333],
+ "116": [0, 0.57143, 0, 0, 0.36111],
+ "117": [0, 0.44444, 0, 0, 0.51667],
+ "118": [0, 0.44444, 0.01389, 0, 0.46111],
+ "119": [0, 0.44444, 0.01389, 0, 0.68334],
+ "120": [0, 0.44444, 0, 0, 0.46111],
+ "121": [0.19444, 0.44444, 0.01389, 0, 0.46111],
+ "122": [0, 0.44444, 0, 0, 0.43472],
+ "126": [0.35, 0.32659, 0, 0, 0.5],
+ "160": [0, 0, 0, 0, 0.25],
+ "168": [0, 0.67937, 0, 0, 0.5],
+ "176": [0, 0.69444, 0, 0, 0.66667],
+ "184": [0.17014, 0, 0, 0, 0.44445],
+ "305": [0, 0.44444, 0, 0, 0.23889],
+ "567": [0.19444, 0.44444, 0, 0, 0.26667],
+ "710": [0, 0.69444, 0, 0, 0.5],
+ "711": [0, 0.63194, 0, 0, 0.5],
+ "713": [0, 0.60889, 0, 0, 0.5],
+ "714": [0, 0.69444, 0, 0, 0.5],
+ "715": [0, 0.69444, 0, 0, 0.5],
+ "728": [0, 0.69444, 0, 0, 0.5],
+ "729": [0, 0.67937, 0, 0, 0.27778],
+ "730": [0, 0.69444, 0, 0, 0.66667],
+ "732": [0, 0.67659, 0, 0, 0.5],
+ "733": [0, 0.69444, 0, 0, 0.5],
+ "915": [0, 0.69444, 0, 0, 0.54167],
+ "916": [0, 0.69444, 0, 0, 0.83334],
+ "920": [0, 0.69444, 0, 0, 0.77778],
+ "923": [0, 0.69444, 0, 0, 0.61111],
+ "926": [0, 0.69444, 0, 0, 0.66667],
+ "928": [0, 0.69444, 0, 0, 0.70834],
+ "931": [0, 0.69444, 0, 0, 0.72222],
+ "933": [0, 0.69444, 0, 0, 0.77778],
+ "934": [0, 0.69444, 0, 0, 0.72222],
+ "936": [0, 0.69444, 0, 0, 0.77778],
+ "937": [0, 0.69444, 0, 0, 0.72222],
+ "8211": [0, 0.44444, 0.02778, 0, 0.5],
+ "8212": [0, 0.44444, 0.02778, 0, 1.0],
+ "8216": [0, 0.69444, 0, 0, 0.27778],
+ "8217": [0, 0.69444, 0, 0, 0.27778],
+ "8220": [0, 0.69444, 0, 0, 0.5],
+ "8221": [0, 0.69444, 0, 0, 0.5]
+ },
+ "Script-Regular": {
+ "32": [0, 0, 0, 0, 0.25],
+ "65": [0, 0.7, 0.22925, 0, 0.80253],
+ "66": [0, 0.7, 0.04087, 0, 0.90757],
+ "67": [0, 0.7, 0.1689, 0, 0.66619],
+ "68": [0, 0.7, 0.09371, 0, 0.77443],
+ "69": [0, 0.7, 0.18583, 0, 0.56162],
+ "70": [0, 0.7, 0.13634, 0, 0.89544],
+ "71": [0, 0.7, 0.17322, 0, 0.60961],
+ "72": [0, 0.7, 0.29694, 0, 0.96919],
+ "73": [0, 0.7, 0.19189, 0, 0.80907],
+ "74": [0.27778, 0.7, 0.19189, 0, 1.05159],
+ "75": [0, 0.7, 0.31259, 0, 0.91364],
+ "76": [0, 0.7, 0.19189, 0, 0.87373],
+ "77": [0, 0.7, 0.15981, 0, 1.08031],
+ "78": [0, 0.7, 0.3525, 0, 0.9015],
+ "79": [0, 0.7, 0.08078, 0, 0.73787],
+ "80": [0, 0.7, 0.08078, 0, 1.01262],
+ "81": [0, 0.7, 0.03305, 0, 0.88282],
+ "82": [0, 0.7, 0.06259, 0, 0.85],
+ "83": [0, 0.7, 0.19189, 0, 0.86767],
+ "84": [0, 0.7, 0.29087, 0, 0.74697],
+ "85": [0, 0.7, 0.25815, 0, 0.79996],
+ "86": [0, 0.7, 0.27523, 0, 0.62204],
+ "87": [0, 0.7, 0.27523, 0, 0.80532],
+ "88": [0, 0.7, 0.26006, 0, 0.94445],
+ "89": [0, 0.7, 0.2939, 0, 0.70961],
+ "90": [0, 0.7, 0.24037, 0, 0.8212],
+ "160": [0, 0, 0, 0, 0.25]
+ },
+ "Size1-Regular": {
+ "32": [0, 0, 0, 0, 0.25],
+ "40": [0.35001, 0.85, 0, 0, 0.45834],
+ "41": [0.35001, 0.85, 0, 0, 0.45834],
+ "47": [0.35001, 0.85, 0, 0, 0.57778],
+ "91": [0.35001, 0.85, 0, 0, 0.41667],
+ "92": [0.35001, 0.85, 0, 0, 0.57778],
+ "93": [0.35001, 0.85, 0, 0, 0.41667],
+ "123": [0.35001, 0.85, 0, 0, 0.58334],
+ "125": [0.35001, 0.85, 0, 0, 0.58334],
+ "160": [0, 0, 0, 0, 0.25],
+ "710": [0, 0.72222, 0, 0, 0.55556],
+ "732": [0, 0.72222, 0, 0, 0.55556],
+ "770": [0, 0.72222, 0, 0, 0.55556],
+ "771": [0, 0.72222, 0, 0, 0.55556],
+ "8214": [-0.00099, 0.601, 0, 0, 0.77778],
+ "8593": [1e-05, 0.6, 0, 0, 0.66667],
+ "8595": [1e-05, 0.6, 0, 0, 0.66667],
+ "8657": [1e-05, 0.6, 0, 0, 0.77778],
+ "8659": [1e-05, 0.6, 0, 0, 0.77778],
+ "8719": [0.25001, 0.75, 0, 0, 0.94445],
+ "8720": [0.25001, 0.75, 0, 0, 0.94445],
+ "8721": [0.25001, 0.75, 0, 0, 1.05556],
+ "8730": [0.35001, 0.85, 0, 0, 1.0],
+ "8739": [-0.00599, 0.606, 0, 0, 0.33333],
+ "8741": [-0.00599, 0.606, 0, 0, 0.55556],
+ "8747": [0.30612, 0.805, 0.19445, 0, 0.47222],
+ "8748": [0.306, 0.805, 0.19445, 0, 0.47222],
+ "8749": [0.306, 0.805, 0.19445, 0, 0.47222],
+ "8750": [0.30612, 0.805, 0.19445, 0, 0.47222],
+ "8896": [0.25001, 0.75, 0, 0, 0.83334],
+ "8897": [0.25001, 0.75, 0, 0, 0.83334],
+ "8898": [0.25001, 0.75, 0, 0, 0.83334],
+ "8899": [0.25001, 0.75, 0, 0, 0.83334],
+ "8968": [0.35001, 0.85, 0, 0, 0.47222],
+ "8969": [0.35001, 0.85, 0, 0, 0.47222],
+ "8970": [0.35001, 0.85, 0, 0, 0.47222],
+ "8971": [0.35001, 0.85, 0, 0, 0.47222],
+ "9168": [-0.00099, 0.601, 0, 0, 0.66667],
+ "10216": [0.35001, 0.85, 0, 0, 0.47222],
+ "10217": [0.35001, 0.85, 0, 0, 0.47222],
+ "10752": [0.25001, 0.75, 0, 0, 1.11111],
+ "10753": [0.25001, 0.75, 0, 0, 1.11111],
+ "10754": [0.25001, 0.75, 0, 0, 1.11111],
+ "10756": [0.25001, 0.75, 0, 0, 0.83334],
+ "10758": [0.25001, 0.75, 0, 0, 0.83334]
+ },
+ "Size2-Regular": {
+ "32": [0, 0, 0, 0, 0.25],
+ "40": [0.65002, 1.15, 0, 0, 0.59722],
+ "41": [0.65002, 1.15, 0, 0, 0.59722],
+ "47": [0.65002, 1.15, 0, 0, 0.81111],
+ "91": [0.65002, 1.15, 0, 0, 0.47222],
+ "92": [0.65002, 1.15, 0, 0, 0.81111],
+ "93": [0.65002, 1.15, 0, 0, 0.47222],
+ "123": [0.65002, 1.15, 0, 0, 0.66667],
+ "125": [0.65002, 1.15, 0, 0, 0.66667],
+ "160": [0, 0, 0, 0, 0.25],
+ "710": [0, 0.75, 0, 0, 1.0],
+ "732": [0, 0.75, 0, 0, 1.0],
+ "770": [0, 0.75, 0, 0, 1.0],
+ "771": [0, 0.75, 0, 0, 1.0],
+ "8719": [0.55001, 1.05, 0, 0, 1.27778],
+ "8720": [0.55001, 1.05, 0, 0, 1.27778],
+ "8721": [0.55001, 1.05, 0, 0, 1.44445],
+ "8730": [0.65002, 1.15, 0, 0, 1.0],
+ "8747": [0.86225, 1.36, 0.44445, 0, 0.55556],
+ "8748": [0.862, 1.36, 0.44445, 0, 0.55556],
+ "8749": [0.862, 1.36, 0.44445, 0, 0.55556],
+ "8750": [0.86225, 1.36, 0.44445, 0, 0.55556],
+ "8896": [0.55001, 1.05, 0, 0, 1.11111],
+ "8897": [0.55001, 1.05, 0, 0, 1.11111],
+ "8898": [0.55001, 1.05, 0, 0, 1.11111],
+ "8899": [0.55001, 1.05, 0, 0, 1.11111],
+ "8968": [0.65002, 1.15, 0, 0, 0.52778],
+ "8969": [0.65002, 1.15, 0, 0, 0.52778],
+ "8970": [0.65002, 1.15, 0, 0, 0.52778],
+ "8971": [0.65002, 1.15, 0, 0, 0.52778],
+ "10216": [0.65002, 1.15, 0, 0, 0.61111],
+ "10217": [0.65002, 1.15, 0, 0, 0.61111],
+ "10752": [0.55001, 1.05, 0, 0, 1.51112],
+ "10753": [0.55001, 1.05, 0, 0, 1.51112],
+ "10754": [0.55001, 1.05, 0, 0, 1.51112],
+ "10756": [0.55001, 1.05, 0, 0, 1.11111],
+ "10758": [0.55001, 1.05, 0, 0, 1.11111]
+ },
+ "Size3-Regular": {
+ "32": [0, 0, 0, 0, 0.25],
+ "40": [0.95003, 1.45, 0, 0, 0.73611],
+ "41": [0.95003, 1.45, 0, 0, 0.73611],
+ "47": [0.95003, 1.45, 0, 0, 1.04445],
+ "91": [0.95003, 1.45, 0, 0, 0.52778],
+ "92": [0.95003, 1.45, 0, 0, 1.04445],
+ "93": [0.95003, 1.45, 0, 0, 0.52778],
+ "123": [0.95003, 1.45, 0, 0, 0.75],
+ "125": [0.95003, 1.45, 0, 0, 0.75],
+ "160": [0, 0, 0, 0, 0.25],
+ "710": [0, 0.75, 0, 0, 1.44445],
+ "732": [0, 0.75, 0, 0, 1.44445],
+ "770": [0, 0.75, 0, 0, 1.44445],
+ "771": [0, 0.75, 0, 0, 1.44445],
+ "8730": [0.95003, 1.45, 0, 0, 1.0],
+ "8968": [0.95003, 1.45, 0, 0, 0.58334],
+ "8969": [0.95003, 1.45, 0, 0, 0.58334],
+ "8970": [0.95003, 1.45, 0, 0, 0.58334],
+ "8971": [0.95003, 1.45, 0, 0, 0.58334],
+ "10216": [0.95003, 1.45, 0, 0, 0.75],
+ "10217": [0.95003, 1.45, 0, 0, 0.75]
+ },
+ "Size4-Regular": {
+ "32": [0, 0, 0, 0, 0.25],
+ "40": [1.25003, 1.75, 0, 0, 0.79167],
+ "41": [1.25003, 1.75, 0, 0, 0.79167],
+ "47": [1.25003, 1.75, 0, 0, 1.27778],
+ "91": [1.25003, 1.75, 0, 0, 0.58334],
+ "92": [1.25003, 1.75, 0, 0, 1.27778],
+ "93": [1.25003, 1.75, 0, 0, 0.58334],
+ "123": [1.25003, 1.75, 0, 0, 0.80556],
+ "125": [1.25003, 1.75, 0, 0, 0.80556],
+ "160": [0, 0, 0, 0, 0.25],
+ "710": [0, 0.825, 0, 0, 1.8889],
+ "732": [0, 0.825, 0, 0, 1.8889],
+ "770": [0, 0.825, 0, 0, 1.8889],
+ "771": [0, 0.825, 0, 0, 1.8889],
+ "8730": [1.25003, 1.75, 0, 0, 1.0],
+ "8968": [1.25003, 1.75, 0, 0, 0.63889],
+ "8969": [1.25003, 1.75, 0, 0, 0.63889],
+ "8970": [1.25003, 1.75, 0, 0, 0.63889],
+ "8971": [1.25003, 1.75, 0, 0, 0.63889],
+ "9115": [0.64502, 1.155, 0, 0, 0.875],
+ "9116": [1e-05, 0.6, 0, 0, 0.875],
+ "9117": [0.64502, 1.155, 0, 0, 0.875],
+ "9118": [0.64502, 1.155, 0, 0, 0.875],
+ "9119": [1e-05, 0.6, 0, 0, 0.875],
+ "9120": [0.64502, 1.155, 0, 0, 0.875],
+ "9121": [0.64502, 1.155, 0, 0, 0.66667],
+ "9122": [-0.00099, 0.601, 0, 0, 0.66667],
+ "9123": [0.64502, 1.155, 0, 0, 0.66667],
+ "9124": [0.64502, 1.155, 0, 0, 0.66667],
+ "9125": [-0.00099, 0.601, 0, 0, 0.66667],
+ "9126": [0.64502, 1.155, 0, 0, 0.66667],
+ "9127": [1e-05, 0.9, 0, 0, 0.88889],
+ "9128": [0.65002, 1.15, 0, 0, 0.88889],
+ "9129": [0.90001, 0, 0, 0, 0.88889],
+ "9130": [0, 0.3, 0, 0, 0.88889],
+ "9131": [1e-05, 0.9, 0, 0, 0.88889],
+ "9132": [0.65002, 1.15, 0, 0, 0.88889],
+ "9133": [0.90001, 0, 0, 0, 0.88889],
+ "9143": [0.88502, 0.915, 0, 0, 1.05556],
+ "10216": [1.25003, 1.75, 0, 0, 0.80556],
+ "10217": [1.25003, 1.75, 0, 0, 0.80556],
+ "57344": [-0.00499, 0.605, 0, 0, 1.05556],
+ "57345": [-0.00499, 0.605, 0, 0, 1.05556],
+ "57680": [0, 0.12, 0, 0, 0.45],
+ "57681": [0, 0.12, 0, 0, 0.45],
+ "57682": [0, 0.12, 0, 0, 0.45],
+ "57683": [0, 0.12, 0, 0, 0.45]
+ },
+ "Typewriter-Regular": {
+ "32": [0, 0, 0, 0, 0.525],
+ "33": [0, 0.61111, 0, 0, 0.525],
+ "34": [0, 0.61111, 0, 0, 0.525],
+ "35": [0, 0.61111, 0, 0, 0.525],
+ "36": [0.08333, 0.69444, 0, 0, 0.525],
+ "37": [0.08333, 0.69444, 0, 0, 0.525],
+ "38": [0, 0.61111, 0, 0, 0.525],
+ "39": [0, 0.61111, 0, 0, 0.525],
+ "40": [0.08333, 0.69444, 0, 0, 0.525],
+ "41": [0.08333, 0.69444, 0, 0, 0.525],
+ "42": [0, 0.52083, 0, 0, 0.525],
+ "43": [-0.08056, 0.53055, 0, 0, 0.525],
+ "44": [0.13889, 0.125, 0, 0, 0.525],
+ "45": [-0.08056, 0.53055, 0, 0, 0.525],
+ "46": [0, 0.125, 0, 0, 0.525],
+ "47": [0.08333, 0.69444, 0, 0, 0.525],
+ "48": [0, 0.61111, 0, 0, 0.525],
+ "49": [0, 0.61111, 0, 0, 0.525],
+ "50": [0, 0.61111, 0, 0, 0.525],
+ "51": [0, 0.61111, 0, 0, 0.525],
+ "52": [0, 0.61111, 0, 0, 0.525],
+ "53": [0, 0.61111, 0, 0, 0.525],
+ "54": [0, 0.61111, 0, 0, 0.525],
+ "55": [0, 0.61111, 0, 0, 0.525],
+ "56": [0, 0.61111, 0, 0, 0.525],
+ "57": [0, 0.61111, 0, 0, 0.525],
+ "58": [0, 0.43056, 0, 0, 0.525],
+ "59": [0.13889, 0.43056, 0, 0, 0.525],
+ "60": [-0.05556, 0.55556, 0, 0, 0.525],
+ "61": [-0.19549, 0.41562, 0, 0, 0.525],
+ "62": [-0.05556, 0.55556, 0, 0, 0.525],
+ "63": [0, 0.61111, 0, 0, 0.525],
+ "64": [0, 0.61111, 0, 0, 0.525],
+ "65": [0, 0.61111, 0, 0, 0.525],
+ "66": [0, 0.61111, 0, 0, 0.525],
+ "67": [0, 0.61111, 0, 0, 0.525],
+ "68": [0, 0.61111, 0, 0, 0.525],
+ "69": [0, 0.61111, 0, 0, 0.525],
+ "70": [0, 0.61111, 0, 0, 0.525],
+ "71": [0, 0.61111, 0, 0, 0.525],
+ "72": [0, 0.61111, 0, 0, 0.525],
+ "73": [0, 0.61111, 0, 0, 0.525],
+ "74": [0, 0.61111, 0, 0, 0.525],
+ "75": [0, 0.61111, 0, 0, 0.525],
+ "76": [0, 0.61111, 0, 0, 0.525],
+ "77": [0, 0.61111, 0, 0, 0.525],
+ "78": [0, 0.61111, 0, 0, 0.525],
+ "79": [0, 0.61111, 0, 0, 0.525],
+ "80": [0, 0.61111, 0, 0, 0.525],
+ "81": [0.13889, 0.61111, 0, 0, 0.525],
+ "82": [0, 0.61111, 0, 0, 0.525],
+ "83": [0, 0.61111, 0, 0, 0.525],
+ "84": [0, 0.61111, 0, 0, 0.525],
+ "85": [0, 0.61111, 0, 0, 0.525],
+ "86": [0, 0.61111, 0, 0, 0.525],
+ "87": [0, 0.61111, 0, 0, 0.525],
+ "88": [0, 0.61111, 0, 0, 0.525],
+ "89": [0, 0.61111, 0, 0, 0.525],
+ "90": [0, 0.61111, 0, 0, 0.525],
+ "91": [0.08333, 0.69444, 0, 0, 0.525],
+ "92": [0.08333, 0.69444, 0, 0, 0.525],
+ "93": [0.08333, 0.69444, 0, 0, 0.525],
+ "94": [0, 0.61111, 0, 0, 0.525],
+ "95": [0.09514, 0, 0, 0, 0.525],
+ "96": [0, 0.61111, 0, 0, 0.525],
+ "97": [0, 0.43056, 0, 0, 0.525],
+ "98": [0, 0.61111, 0, 0, 0.525],
+ "99": [0, 0.43056, 0, 0, 0.525],
+ "100": [0, 0.61111, 0, 0, 0.525],
+ "101": [0, 0.43056, 0, 0, 0.525],
+ "102": [0, 0.61111, 0, 0, 0.525],
+ "103": [0.22222, 0.43056, 0, 0, 0.525],
+ "104": [0, 0.61111, 0, 0, 0.525],
+ "105": [0, 0.61111, 0, 0, 0.525],
+ "106": [0.22222, 0.61111, 0, 0, 0.525],
+ "107": [0, 0.61111, 0, 0, 0.525],
+ "108": [0, 0.61111, 0, 0, 0.525],
+ "109": [0, 0.43056, 0, 0, 0.525],
+ "110": [0, 0.43056, 0, 0, 0.525],
+ "111": [0, 0.43056, 0, 0, 0.525],
+ "112": [0.22222, 0.43056, 0, 0, 0.525],
+ "113": [0.22222, 0.43056, 0, 0, 0.525],
+ "114": [0, 0.43056, 0, 0, 0.525],
+ "115": [0, 0.43056, 0, 0, 0.525],
+ "116": [0, 0.55358, 0, 0, 0.525],
+ "117": [0, 0.43056, 0, 0, 0.525],
+ "118": [0, 0.43056, 0, 0, 0.525],
+ "119": [0, 0.43056, 0, 0, 0.525],
+ "120": [0, 0.43056, 0, 0, 0.525],
+ "121": [0.22222, 0.43056, 0, 0, 0.525],
+ "122": [0, 0.43056, 0, 0, 0.525],
+ "123": [0.08333, 0.69444, 0, 0, 0.525],
+ "124": [0.08333, 0.69444, 0, 0, 0.525],
+ "125": [0.08333, 0.69444, 0, 0, 0.525],
+ "126": [0, 0.61111, 0, 0, 0.525],
+ "127": [0, 0.61111, 0, 0, 0.525],
+ "160": [0, 0, 0, 0, 0.525],
+ "176": [0, 0.61111, 0, 0, 0.525],
+ "184": [0.19445, 0, 0, 0, 0.525],
+ "305": [0, 0.43056, 0, 0, 0.525],
+ "567": [0.22222, 0.43056, 0, 0, 0.525],
+ "711": [0, 0.56597, 0, 0, 0.525],
+ "713": [0, 0.56555, 0, 0, 0.525],
+ "714": [0, 0.61111, 0, 0, 0.525],
+ "715": [0, 0.61111, 0, 0, 0.525],
+ "728": [0, 0.61111, 0, 0, 0.525],
+ "730": [0, 0.61111, 0, 0, 0.525],
+ "770": [0, 0.61111, 0, 0, 0.525],
+ "771": [0, 0.61111, 0, 0, 0.525],
+ "776": [0, 0.61111, 0, 0, 0.525],
+ "915": [0, 0.61111, 0, 0, 0.525],
+ "916": [0, 0.61111, 0, 0, 0.525],
+ "920": [0, 0.61111, 0, 0, 0.525],
+ "923": [0, 0.61111, 0, 0, 0.525],
+ "926": [0, 0.61111, 0, 0, 0.525],
+ "928": [0, 0.61111, 0, 0, 0.525],
+ "931": [0, 0.61111, 0, 0, 0.525],
+ "933": [0, 0.61111, 0, 0, 0.525],
+ "934": [0, 0.61111, 0, 0, 0.525],
+ "936": [0, 0.61111, 0, 0, 0.525],
+ "937": [0, 0.61111, 0, 0, 0.525],
+ "8216": [0, 0.61111, 0, 0, 0.525],
+ "8217": [0, 0.61111, 0, 0, 0.525],
+ "8242": [0, 0.61111, 0, 0, 0.525],
+ "9251": [0.11111, 0.21944, 0, 0, 0.525]
+ }
+});
+// CONCATENATED MODULE: ./src/fontMetrics.js
+
+
+/**
+ * This file contains metrics regarding fonts and individual symbols. The sigma
+ * and xi variables, as well as the metricMap map contain data extracted from
+ * TeX, TeX font metrics, and the TTF files. These data are then exposed via the
+ * `metrics` variable and the getCharacterMetrics function.
+ */
+// In TeX, there are actually three sets of dimensions, one for each of
+// textstyle (size index 5 and higher: >=9pt), scriptstyle (size index 3 and 4:
+// 7-8pt), and scriptscriptstyle (size index 1 and 2: 5-6pt). These are
+// provided in the the arrays below, in that order.
+//
+// The font metrics are stored in fonts cmsy10, cmsy7, and cmsy5 respsectively.
+// This was determined by running the following script:
+//
+// latex -interaction=nonstopmode \
+// '\documentclass{article}\usepackage{amsmath}\begin{document}' \
+// '$a$ \expandafter\show\the\textfont2' \
+// '\expandafter\show\the\scriptfont2' \
+// '\expandafter\show\the\scriptscriptfont2' \
+// '\stop'
+//
+// The metrics themselves were retreived using the following commands:
+//
+// tftopl cmsy10
+// tftopl cmsy7
+// tftopl cmsy5
+//
+// The output of each of these commands is quite lengthy. The only part we
+// care about is the FONTDIMEN section. Each value is measured in EMs.
+var sigmasAndXis = {
+ slant: [0.250, 0.250, 0.250],
+ // sigma1
+ space: [0.000, 0.000, 0.000],
+ // sigma2
+ stretch: [0.000, 0.000, 0.000],
+ // sigma3
+ shrink: [0.000, 0.000, 0.000],
+ // sigma4
+ xHeight: [0.431, 0.431, 0.431],
+ // sigma5
+ quad: [1.000, 1.171, 1.472],
+ // sigma6
+ extraSpace: [0.000, 0.000, 0.000],
+ // sigma7
+ num1: [0.677, 0.732, 0.925],
+ // sigma8
+ num2: [0.394, 0.384, 0.387],
+ // sigma9
+ num3: [0.444, 0.471, 0.504],
+ // sigma10
+ denom1: [0.686, 0.752, 1.025],
+ // sigma11
+ denom2: [0.345, 0.344, 0.532],
+ // sigma12
+ sup1: [0.413, 0.503, 0.504],
+ // sigma13
+ sup2: [0.363, 0.431, 0.404],
+ // sigma14
+ sup3: [0.289, 0.286, 0.294],
+ // sigma15
+ sub1: [0.150, 0.143, 0.200],
+ // sigma16
+ sub2: [0.247, 0.286, 0.400],
+ // sigma17
+ supDrop: [0.386, 0.353, 0.494],
+ // sigma18
+ subDrop: [0.050, 0.071, 0.100],
+ // sigma19
+ delim1: [2.390, 1.700, 1.980],
+ // sigma20
+ delim2: [1.010, 1.157, 1.420],
+ // sigma21
+ axisHeight: [0.250, 0.250, 0.250],
+ // sigma22
+ // These font metrics are extracted from TeX by using tftopl on cmex10.tfm;
+ // they correspond to the font parameters of the extension fonts (family 3).
+ // See the TeXbook, page 441. In AMSTeX, the extension fonts scale; to
+ // match cmex7, we'd use cmex7.tfm values for script and scriptscript
+ // values.
+ defaultRuleThickness: [0.04, 0.049, 0.049],
+ // xi8; cmex7: 0.049
+ bigOpSpacing1: [0.111, 0.111, 0.111],
+ // xi9
+ bigOpSpacing2: [0.166, 0.166, 0.166],
+ // xi10
+ bigOpSpacing3: [0.2, 0.2, 0.2],
+ // xi11
+ bigOpSpacing4: [0.6, 0.611, 0.611],
+ // xi12; cmex7: 0.611
+ bigOpSpacing5: [0.1, 0.143, 0.143],
+ // xi13; cmex7: 0.143
+ // The \sqrt rule width is taken from the height of the surd character.
+ // Since we use the same font at all sizes, this thickness doesn't scale.
+ sqrtRuleThickness: [0.04, 0.04, 0.04],
+ // This value determines how large a pt is, for metrics which are defined
+ // in terms of pts.
+ // This value is also used in katex.less; if you change it make sure the
+ // values match.
+ ptPerEm: [10.0, 10.0, 10.0],
+ // The space between adjacent `|` columns in an array definition. From
+ // `\showthe\doublerulesep` in LaTeX. Equals 2.0 / ptPerEm.
+ doubleRuleSep: [0.2, 0.2, 0.2],
+ // The width of separator lines in {array} environments. From
+ // `\showthe\arrayrulewidth` in LaTeX. Equals 0.4 / ptPerEm.
+ arrayRuleWidth: [0.04, 0.04, 0.04],
+ // Two values from LaTeX source2e:
+ fboxsep: [0.3, 0.3, 0.3],
+ // 3 pt / ptPerEm
+ fboxrule: [0.04, 0.04, 0.04] // 0.4 pt / ptPerEm
+
+}; // This map contains a mapping from font name and character code to character
+// metrics, including height, depth, italic correction, and skew (kern from the
+// character to the corresponding \skewchar)
+// This map is generated via `make metrics`. It should not be changed manually.
+
+ // These are very rough approximations. We default to Times New Roman which
+// should have Latin-1 and Cyrillic characters, but may not depending on the
+// operating system. The metrics do not account for extra height from the
+// accents. In the case of Cyrillic characters which have both ascenders and
+// descenders we prefer approximations with ascenders, primarily to prevent
+// the fraction bar or root line from intersecting the glyph.
+// TODO(kevinb) allow union of multiple glyph metrics for better accuracy.
+
+var extraCharacterMap = {
+ // Latin-1
+ 'Å': 'A',
+ 'Ç': 'C',
+ 'Ð': 'D',
+ 'Þ': 'o',
+ 'å': 'a',
+ 'ç': 'c',
+ 'ð': 'd',
+ 'þ': 'o',
+ // Cyrillic
+ 'А': 'A',
+ 'Б': 'B',
+ 'В': 'B',
+ 'Г': 'F',
+ 'Д': 'A',
+ 'Е': 'E',
+ 'Ж': 'K',
+ 'З': '3',
+ 'И': 'N',
+ 'Й': 'N',
+ 'К': 'K',
+ 'Л': 'N',
+ 'М': 'M',
+ 'Н': 'H',
+ 'О': 'O',
+ 'П': 'N',
+ 'Р': 'P',
+ 'С': 'C',
+ 'Т': 'T',
+ 'У': 'y',
+ 'Ф': 'O',
+ 'Х': 'X',
+ 'Ц': 'U',
+ 'Ч': 'h',
+ 'Ш': 'W',
+ 'Щ': 'W',
+ 'Ъ': 'B',
+ 'Ы': 'X',
+ 'Ь': 'B',
+ 'Э': '3',
+ 'Ю': 'X',
+ 'Я': 'R',
+ 'а': 'a',
+ 'б': 'b',
+ 'в': 'a',
+ 'г': 'r',
+ 'д': 'y',
+ 'е': 'e',
+ 'ж': 'm',
+ 'з': 'e',
+ 'и': 'n',
+ 'й': 'n',
+ 'к': 'n',
+ 'л': 'n',
+ 'м': 'm',
+ 'н': 'n',
+ 'о': 'o',
+ 'п': 'n',
+ 'р': 'p',
+ 'с': 'c',
+ 'т': 'o',
+ 'у': 'y',
+ 'ф': 'b',
+ 'х': 'x',
+ 'ц': 'n',
+ 'ч': 'n',
+ 'ш': 'w',
+ 'щ': 'w',
+ 'ъ': 'a',
+ 'ы': 'm',
+ 'ь': 'a',
+ 'э': 'e',
+ 'ю': 'm',
+ 'я': 'r'
+};
+
+/**
+ * This function adds new font metrics to default metricMap
+ * It can also override existing metrics
+ */
+function setFontMetrics(fontName, metrics) {
+ fontMetricsData[fontName] = metrics;
+}
+/**
+ * This function is a convenience function for looking up information in the
+ * metricMap table. It takes a character as a string, and a font.
+ *
+ * Note: the `width` property may be undefined if fontMetricsData.js wasn't
+ * built using `Make extended_metrics`.
+ */
+
+function getCharacterMetrics(character, font, mode) {
+ if (!fontMetricsData[font]) {
+ throw new Error("Font metrics not found for font: " + font + ".");
+ }
+
+ var ch = character.charCodeAt(0);
+ var metrics = fontMetricsData[font][ch];
+
+ if (!metrics && character[0] in extraCharacterMap) {
+ ch = extraCharacterMap[character[0]].charCodeAt(0);
+ metrics = fontMetricsData[font][ch];
+ }
+
+ if (!metrics && mode === 'text') {
+ // We don't typically have font metrics for Asian scripts.
+ // But since we support them in text mode, we need to return
+ // some sort of metrics.
+ // So if the character is in a script we support but we
+ // don't have metrics for it, just use the metrics for
+ // the Latin capital letter M. This is close enough because
+ // we (currently) only care about the height of the glpyh
+ // not its width.
+ if (supportedCodepoint(ch)) {
+ metrics = fontMetricsData[font][77]; // 77 is the charcode for 'M'
+ }
+ }
+
+ if (metrics) {
+ return {
+ depth: metrics[0],
+ height: metrics[1],
+ italic: metrics[2],
+ skew: metrics[3],
+ width: metrics[4]
+ };
+ }
+}
+var fontMetricsBySizeIndex = {};
+/**
+ * Get the font metrics for a given size.
+ */
+
+function getGlobalMetrics(size) {
+ var sizeIndex;
+
+ if (size >= 5) {
+ sizeIndex = 0;
+ } else if (size >= 3) {
+ sizeIndex = 1;
+ } else {
+ sizeIndex = 2;
+ }
+
+ if (!fontMetricsBySizeIndex[sizeIndex]) {
+ var metrics = fontMetricsBySizeIndex[sizeIndex] = {
+ cssEmPerMu: sigmasAndXis.quad[sizeIndex] / 18
+ };
+
+ for (var key in sigmasAndXis) {
+ if (sigmasAndXis.hasOwnProperty(key)) {
+ metrics[key] = sigmasAndXis[key][sizeIndex];
+ }
+ }
+ }
+
+ return fontMetricsBySizeIndex[sizeIndex];
+}
+// CONCATENATED MODULE: ./src/symbols.js
+/**
+ * This file holds a list of all no-argument functions and single-character
+ * symbols (like 'a' or ';').
+ *
+ * For each of the symbols, there are three properties they can have:
+ * - font (required): the font to be used for this symbol. Either "main" (the
+ normal font), or "ams" (the ams fonts).
+ * - group (required): the ParseNode group type the symbol should have (i.e.
+ "textord", "mathord", etc).
+ See https://github.com/KaTeX/KaTeX/wiki/Examining-TeX#group-types
+ * - replace: the character that this symbol or function should be
+ * replaced with (i.e. "\phi" has a replace value of "\u03d5", the phi
+ * character in the main font).
+ *
+ * The outermost map in the table indicates what mode the symbols should be
+ * accepted in (e.g. "math" or "text").
+ */
+// Some of these have a "-token" suffix since these are also used as `ParseNode`
+// types for raw text tokens, and we want to avoid conflicts with higher-level
+// `ParseNode` types. These `ParseNode`s are constructed within `Parser` by
+// looking up the `symbols` map.
+var ATOMS = {
+ "bin": 1,
+ "close": 1,
+ "inner": 1,
+ "open": 1,
+ "punct": 1,
+ "rel": 1
+};
+var NON_ATOMS = {
+ "accent-token": 1,
+ "mathord": 1,
+ "op-token": 1,
+ "spacing": 1,
+ "textord": 1
+};
+var symbols = {
+ "math": {},
+ "text": {}
+};
+/* harmony default export */ var src_symbols = (symbols);
+/** `acceptUnicodeChar = true` is only applicable if `replace` is set. */
+
+function defineSymbol(mode, font, group, replace, name, acceptUnicodeChar) {
+ symbols[mode][name] = {
+ font: font,
+ group: group,
+ replace: replace
+ };
+
+ if (acceptUnicodeChar && replace) {
+ symbols[mode][replace] = symbols[mode][name];
+ }
+} // Some abbreviations for commonly used strings.
+// This helps minify the code, and also spotting typos using jshint.
+// modes:
+
+var symbols_math = "math";
+var symbols_text = "text"; // fonts:
+
+var main = "main";
+var ams = "ams"; // groups:
+
+var symbols_accent = "accent-token";
+var bin = "bin";
+var symbols_close = "close";
+var symbols_inner = "inner";
+var mathord = "mathord";
+var op = "op-token";
+var symbols_open = "open";
+var punct = "punct";
+var rel = "rel";
+var symbols_spacing = "spacing";
+var symbols_textord = "textord"; // Now comes the symbol table
+// Relation Symbols
+
+defineSymbol(symbols_math, main, rel, "\u2261", "\\equiv", true);
+defineSymbol(symbols_math, main, rel, "\u227A", "\\prec", true);
+defineSymbol(symbols_math, main, rel, "\u227B", "\\succ", true);
+defineSymbol(symbols_math, main, rel, "\u223C", "\\sim", true);
+defineSymbol(symbols_math, main, rel, "\u22A5", "\\perp");
+defineSymbol(symbols_math, main, rel, "\u2AAF", "\\preceq", true);
+defineSymbol(symbols_math, main, rel, "\u2AB0", "\\succeq", true);
+defineSymbol(symbols_math, main, rel, "\u2243", "\\simeq", true);
+defineSymbol(symbols_math, main, rel, "\u2223", "\\mid", true);
+defineSymbol(symbols_math, main, rel, "\u226A", "\\ll", true);
+defineSymbol(symbols_math, main, rel, "\u226B", "\\gg", true);
+defineSymbol(symbols_math, main, rel, "\u224D", "\\asymp", true);
+defineSymbol(symbols_math, main, rel, "\u2225", "\\parallel");
+defineSymbol(symbols_math, main, rel, "\u22C8", "\\bowtie", true);
+defineSymbol(symbols_math, main, rel, "\u2323", "\\smile", true);
+defineSymbol(symbols_math, main, rel, "\u2291", "\\sqsubseteq", true);
+defineSymbol(symbols_math, main, rel, "\u2292", "\\sqsupseteq", true);
+defineSymbol(symbols_math, main, rel, "\u2250", "\\doteq", true);
+defineSymbol(symbols_math, main, rel, "\u2322", "\\frown", true);
+defineSymbol(symbols_math, main, rel, "\u220B", "\\ni", true);
+defineSymbol(symbols_math, main, rel, "\u221D", "\\propto", true);
+defineSymbol(symbols_math, main, rel, "\u22A2", "\\vdash", true);
+defineSymbol(symbols_math, main, rel, "\u22A3", "\\dashv", true);
+defineSymbol(symbols_math, main, rel, "\u220B", "\\owns"); // Punctuation
+
+defineSymbol(symbols_math, main, punct, ".", "\\ldotp");
+defineSymbol(symbols_math, main, punct, "\u22C5", "\\cdotp"); // Misc Symbols
+
+defineSymbol(symbols_math, main, symbols_textord, "#", "\\#");
+defineSymbol(symbols_text, main, symbols_textord, "#", "\\#");
+defineSymbol(symbols_math, main, symbols_textord, "&", "\\&");
+defineSymbol(symbols_text, main, symbols_textord, "&", "\\&");
+defineSymbol(symbols_math, main, symbols_textord, "\u2135", "\\aleph", true);
+defineSymbol(symbols_math, main, symbols_textord, "\u2200", "\\forall", true);
+defineSymbol(symbols_math, main, symbols_textord, "\u210F", "\\hbar", true);
+defineSymbol(symbols_math, main, symbols_textord, "\u2203", "\\exists", true);
+defineSymbol(symbols_math, main, symbols_textord, "\u2207", "\\nabla", true);
+defineSymbol(symbols_math, main, symbols_textord, "\u266D", "\\flat", true);
+defineSymbol(symbols_math, main, symbols_textord, "\u2113", "\\ell", true);
+defineSymbol(symbols_math, main, symbols_textord, "\u266E", "\\natural", true);
+defineSymbol(symbols_math, main, symbols_textord, "\u2663", "\\clubsuit", true);
+defineSymbol(symbols_math, main, symbols_textord, "\u2118", "\\wp", true);
+defineSymbol(symbols_math, main, symbols_textord, "\u266F", "\\sharp", true);
+defineSymbol(symbols_math, main, symbols_textord, "\u2662", "\\diamondsuit", true);
+defineSymbol(symbols_math, main, symbols_textord, "\u211C", "\\Re", true);
+defineSymbol(symbols_math, main, symbols_textord, "\u2661", "\\heartsuit", true);
+defineSymbol(symbols_math, main, symbols_textord, "\u2111", "\\Im", true);
+defineSymbol(symbols_math, main, symbols_textord, "\u2660", "\\spadesuit", true);
+defineSymbol(symbols_text, main, symbols_textord, "\xA7", "\\S", true);
+defineSymbol(symbols_text, main, symbols_textord, "\xB6", "\\P", true); // Math and Text
+
+defineSymbol(symbols_math, main, symbols_textord, "\u2020", "\\dag");
+defineSymbol(symbols_text, main, symbols_textord, "\u2020", "\\dag");
+defineSymbol(symbols_text, main, symbols_textord, "\u2020", "\\textdagger");
+defineSymbol(symbols_math, main, symbols_textord, "\u2021", "\\ddag");
+defineSymbol(symbols_text, main, symbols_textord, "\u2021", "\\ddag");
+defineSymbol(symbols_text, main, symbols_textord, "\u2021", "\\textdaggerdbl"); // Large Delimiters
+
+defineSymbol(symbols_math, main, symbols_close, "\u23B1", "\\rmoustache", true);
+defineSymbol(symbols_math, main, symbols_open, "\u23B0", "\\lmoustache", true);
+defineSymbol(symbols_math, main, symbols_close, "\u27EF", "\\rgroup", true);
+defineSymbol(symbols_math, main, symbols_open, "\u27EE", "\\lgroup", true); // Binary Operators
+
+defineSymbol(symbols_math, main, bin, "\u2213", "\\mp", true);
+defineSymbol(symbols_math, main, bin, "\u2296", "\\ominus", true);
+defineSymbol(symbols_math, main, bin, "\u228E", "\\uplus", true);
+defineSymbol(symbols_math, main, bin, "\u2293", "\\sqcap", true);
+defineSymbol(symbols_math, main, bin, "\u2217", "\\ast");
+defineSymbol(symbols_math, main, bin, "\u2294", "\\sqcup", true);
+defineSymbol(symbols_math, main, bin, "\u25EF", "\\bigcirc");
+defineSymbol(symbols_math, main, bin, "\u2219", "\\bullet");
+defineSymbol(symbols_math, main, bin, "\u2021", "\\ddagger");
+defineSymbol(symbols_math, main, bin, "\u2240", "\\wr", true);
+defineSymbol(symbols_math, main, bin, "\u2A3F", "\\amalg");
+defineSymbol(symbols_math, main, bin, "&", "\\And"); // from amsmath
+// Arrow Symbols
+
+defineSymbol(symbols_math, main, rel, "\u27F5", "\\longleftarrow", true);
+defineSymbol(symbols_math, main, rel, "\u21D0", "\\Leftarrow", true);
+defineSymbol(symbols_math, main, rel, "\u27F8", "\\Longleftarrow", true);
+defineSymbol(symbols_math, main, rel, "\u27F6", "\\longrightarrow", true);
+defineSymbol(symbols_math, main, rel, "\u21D2", "\\Rightarrow", true);
+defineSymbol(symbols_math, main, rel, "\u27F9", "\\Longrightarrow", true);
+defineSymbol(symbols_math, main, rel, "\u2194", "\\leftrightarrow", true);
+defineSymbol(symbols_math, main, rel, "\u27F7", "\\longleftrightarrow", true);
+defineSymbol(symbols_math, main, rel, "\u21D4", "\\Leftrightarrow", true);
+defineSymbol(symbols_math, main, rel, "\u27FA", "\\Longleftrightarrow", true);
+defineSymbol(symbols_math, main, rel, "\u21A6", "\\mapsto", true);
+defineSymbol(symbols_math, main, rel, "\u27FC", "\\longmapsto", true);
+defineSymbol(symbols_math, main, rel, "\u2197", "\\nearrow", true);
+defineSymbol(symbols_math, main, rel, "\u21A9", "\\hookleftarrow", true);
+defineSymbol(symbols_math, main, rel, "\u21AA", "\\hookrightarrow", true);
+defineSymbol(symbols_math, main, rel, "\u2198", "\\searrow", true);
+defineSymbol(symbols_math, main, rel, "\u21BC", "\\leftharpoonup", true);
+defineSymbol(symbols_math, main, rel, "\u21C0", "\\rightharpoonup", true);
+defineSymbol(symbols_math, main, rel, "\u2199", "\\swarrow", true);
+defineSymbol(symbols_math, main, rel, "\u21BD", "\\leftharpoondown", true);
+defineSymbol(symbols_math, main, rel, "\u21C1", "\\rightharpoondown", true);
+defineSymbol(symbols_math, main, rel, "\u2196", "\\nwarrow", true);
+defineSymbol(symbols_math, main, rel, "\u21CC", "\\rightleftharpoons", true); // AMS Negated Binary Relations
+
+defineSymbol(symbols_math, ams, rel, "\u226E", "\\nless", true); // Symbol names preceeded by "@" each have a corresponding macro.
+
+defineSymbol(symbols_math, ams, rel, "\uE010", "\\@nleqslant");
+defineSymbol(symbols_math, ams, rel, "\uE011", "\\@nleqq");
+defineSymbol(symbols_math, ams, rel, "\u2A87", "\\lneq", true);
+defineSymbol(symbols_math, ams, rel, "\u2268", "\\lneqq", true);
+defineSymbol(symbols_math, ams, rel, "\uE00C", "\\@lvertneqq");
+defineSymbol(symbols_math, ams, rel, "\u22E6", "\\lnsim", true);
+defineSymbol(symbols_math, ams, rel, "\u2A89", "\\lnapprox", true);
+defineSymbol(symbols_math, ams, rel, "\u2280", "\\nprec", true); // unicode-math maps \u22e0 to \npreccurlyeq. We'll use the AMS synonym.
+
+defineSymbol(symbols_math, ams, rel, "\u22E0", "\\npreceq", true);
+defineSymbol(symbols_math, ams, rel, "\u22E8", "\\precnsim", true);
+defineSymbol(symbols_math, ams, rel, "\u2AB9", "\\precnapprox", true);
+defineSymbol(symbols_math, ams, rel, "\u2241", "\\nsim", true);
+defineSymbol(symbols_math, ams, rel, "\uE006", "\\@nshortmid");
+defineSymbol(symbols_math, ams, rel, "\u2224", "\\nmid", true);
+defineSymbol(symbols_math, ams, rel, "\u22AC", "\\nvdash", true);
+defineSymbol(symbols_math, ams, rel, "\u22AD", "\\nvDash", true);
+defineSymbol(symbols_math, ams, rel, "\u22EA", "\\ntriangleleft");
+defineSymbol(symbols_math, ams, rel, "\u22EC", "\\ntrianglelefteq", true);
+defineSymbol(symbols_math, ams, rel, "\u228A", "\\subsetneq", true);
+defineSymbol(symbols_math, ams, rel, "\uE01A", "\\@varsubsetneq");
+defineSymbol(symbols_math, ams, rel, "\u2ACB", "\\subsetneqq", true);
+defineSymbol(symbols_math, ams, rel, "\uE017", "\\@varsubsetneqq");
+defineSymbol(symbols_math, ams, rel, "\u226F", "\\ngtr", true);
+defineSymbol(symbols_math, ams, rel, "\uE00F", "\\@ngeqslant");
+defineSymbol(symbols_math, ams, rel, "\uE00E", "\\@ngeqq");
+defineSymbol(symbols_math, ams, rel, "\u2A88", "\\gneq", true);
+defineSymbol(symbols_math, ams, rel, "\u2269", "\\gneqq", true);
+defineSymbol(symbols_math, ams, rel, "\uE00D", "\\@gvertneqq");
+defineSymbol(symbols_math, ams, rel, "\u22E7", "\\gnsim", true);
+defineSymbol(symbols_math, ams, rel, "\u2A8A", "\\gnapprox", true);
+defineSymbol(symbols_math, ams, rel, "\u2281", "\\nsucc", true); // unicode-math maps \u22e1 to \nsucccurlyeq. We'll use the AMS synonym.
+
+defineSymbol(symbols_math, ams, rel, "\u22E1", "\\nsucceq", true);
+defineSymbol(symbols_math, ams, rel, "\u22E9", "\\succnsim", true);
+defineSymbol(symbols_math, ams, rel, "\u2ABA", "\\succnapprox", true); // unicode-math maps \u2246 to \simneqq. We'll use the AMS synonym.
+
+defineSymbol(symbols_math, ams, rel, "\u2246", "\\ncong", true);
+defineSymbol(symbols_math, ams, rel, "\uE007", "\\@nshortparallel");
+defineSymbol(symbols_math, ams, rel, "\u2226", "\\nparallel", true);
+defineSymbol(symbols_math, ams, rel, "\u22AF", "\\nVDash", true);
+defineSymbol(symbols_math, ams, rel, "\u22EB", "\\ntriangleright");
+defineSymbol(symbols_math, ams, rel, "\u22ED", "\\ntrianglerighteq", true);
+defineSymbol(symbols_math, ams, rel, "\uE018", "\\@nsupseteqq");
+defineSymbol(symbols_math, ams, rel, "\u228B", "\\supsetneq", true);
+defineSymbol(symbols_math, ams, rel, "\uE01B", "\\@varsupsetneq");
+defineSymbol(symbols_math, ams, rel, "\u2ACC", "\\supsetneqq", true);
+defineSymbol(symbols_math, ams, rel, "\uE019", "\\@varsupsetneqq");
+defineSymbol(symbols_math, ams, rel, "\u22AE", "\\nVdash", true);
+defineSymbol(symbols_math, ams, rel, "\u2AB5", "\\precneqq", true);
+defineSymbol(symbols_math, ams, rel, "\u2AB6", "\\succneqq", true);
+defineSymbol(symbols_math, ams, rel, "\uE016", "\\@nsubseteqq");
+defineSymbol(symbols_math, ams, bin, "\u22B4", "\\unlhd");
+defineSymbol(symbols_math, ams, bin, "\u22B5", "\\unrhd"); // AMS Negated Arrows
+
+defineSymbol(symbols_math, ams, rel, "\u219A", "\\nleftarrow", true);
+defineSymbol(symbols_math, ams, rel, "\u219B", "\\nrightarrow", true);
+defineSymbol(symbols_math, ams, rel, "\u21CD", "\\nLeftarrow", true);
+defineSymbol(symbols_math, ams, rel, "\u21CF", "\\nRightarrow", true);
+defineSymbol(symbols_math, ams, rel, "\u21AE", "\\nleftrightarrow", true);
+defineSymbol(symbols_math, ams, rel, "\u21CE", "\\nLeftrightarrow", true); // AMS Misc
+
+defineSymbol(symbols_math, ams, rel, "\u25B3", "\\vartriangle");
+defineSymbol(symbols_math, ams, symbols_textord, "\u210F", "\\hslash");
+defineSymbol(symbols_math, ams, symbols_textord, "\u25BD", "\\triangledown");
+defineSymbol(symbols_math, ams, symbols_textord, "\u25CA", "\\lozenge");
+defineSymbol(symbols_math, ams, symbols_textord, "\u24C8", "\\circledS");
+defineSymbol(symbols_math, ams, symbols_textord, "\xAE", "\\circledR");
+defineSymbol(symbols_text, ams, symbols_textord, "\xAE", "\\circledR");
+defineSymbol(symbols_math, ams, symbols_textord, "\u2221", "\\measuredangle", true);
+defineSymbol(symbols_math, ams, symbols_textord, "\u2204", "\\nexists");
+defineSymbol(symbols_math, ams, symbols_textord, "\u2127", "\\mho");
+defineSymbol(symbols_math, ams, symbols_textord, "\u2132", "\\Finv", true);
+defineSymbol(symbols_math, ams, symbols_textord, "\u2141", "\\Game", true);
+defineSymbol(symbols_math, ams, symbols_textord, "\u2035", "\\backprime");
+defineSymbol(symbols_math, ams, symbols_textord, "\u25B2", "\\blacktriangle");
+defineSymbol(symbols_math, ams, symbols_textord, "\u25BC", "\\blacktriangledown");
+defineSymbol(symbols_math, ams, symbols_textord, "\u25A0", "\\blacksquare");
+defineSymbol(symbols_math, ams, symbols_textord, "\u29EB", "\\blacklozenge");
+defineSymbol(symbols_math, ams, symbols_textord, "\u2605", "\\bigstar");
+defineSymbol(symbols_math, ams, symbols_textord, "\u2222", "\\sphericalangle", true);
+defineSymbol(symbols_math, ams, symbols_textord, "\u2201", "\\complement", true); // unicode-math maps U+F0 to \matheth. We map to AMS function \eth
+
+defineSymbol(symbols_math, ams, symbols_textord, "\xF0", "\\eth", true);
+defineSymbol(symbols_text, main, symbols_textord, "\xF0", "\xF0");
+defineSymbol(symbols_math, ams, symbols_textord, "\u2571", "\\diagup");
+defineSymbol(symbols_math, ams, symbols_textord, "\u2572", "\\diagdown");
+defineSymbol(symbols_math, ams, symbols_textord, "\u25A1", "\\square");
+defineSymbol(symbols_math, ams, symbols_textord, "\u25A1", "\\Box");
+defineSymbol(symbols_math, ams, symbols_textord, "\u25CA", "\\Diamond"); // unicode-math maps U+A5 to \mathyen. We map to AMS function \yen
+
+defineSymbol(symbols_math, ams, symbols_textord, "\xA5", "\\yen", true);
+defineSymbol(symbols_text, ams, symbols_textord, "\xA5", "\\yen", true);
+defineSymbol(symbols_math, ams, symbols_textord, "\u2713", "\\checkmark", true);
+defineSymbol(symbols_text, ams, symbols_textord, "\u2713", "\\checkmark"); // AMS Hebrew
+
+defineSymbol(symbols_math, ams, symbols_textord, "\u2136", "\\beth", true);
+defineSymbol(symbols_math, ams, symbols_textord, "\u2138", "\\daleth", true);
+defineSymbol(symbols_math, ams, symbols_textord, "\u2137", "\\gimel", true); // AMS Greek
+
+defineSymbol(symbols_math, ams, symbols_textord, "\u03DD", "\\digamma", true);
+defineSymbol(symbols_math, ams, symbols_textord, "\u03F0", "\\varkappa"); // AMS Delimiters
+
+defineSymbol(symbols_math, ams, symbols_open, "\u250C", "\\@ulcorner", true);
+defineSymbol(symbols_math, ams, symbols_close, "\u2510", "\\@urcorner", true);
+defineSymbol(symbols_math, ams, symbols_open, "\u2514", "\\@llcorner", true);
+defineSymbol(symbols_math, ams, symbols_close, "\u2518", "\\@lrcorner", true); // AMS Binary Relations
+
+defineSymbol(symbols_math, ams, rel, "\u2266", "\\leqq", true);
+defineSymbol(symbols_math, ams, rel, "\u2A7D", "\\leqslant", true);
+defineSymbol(symbols_math, ams, rel, "\u2A95", "\\eqslantless", true);
+defineSymbol(symbols_math, ams, rel, "\u2272", "\\lesssim", true);
+defineSymbol(symbols_math, ams, rel, "\u2A85", "\\lessapprox", true);
+defineSymbol(symbols_math, ams, rel, "\u224A", "\\approxeq", true);
+defineSymbol(symbols_math, ams, bin, "\u22D6", "\\lessdot");
+defineSymbol(symbols_math, ams, rel, "\u22D8", "\\lll", true);
+defineSymbol(symbols_math, ams, rel, "\u2276", "\\lessgtr", true);
+defineSymbol(symbols_math, ams, rel, "\u22DA", "\\lesseqgtr", true);
+defineSymbol(symbols_math, ams, rel, "\u2A8B", "\\lesseqqgtr", true);
+defineSymbol(symbols_math, ams, rel, "\u2251", "\\doteqdot");
+defineSymbol(symbols_math, ams, rel, "\u2253", "\\risingdotseq", true);
+defineSymbol(symbols_math, ams, rel, "\u2252", "\\fallingdotseq", true);
+defineSymbol(symbols_math, ams, rel, "\u223D", "\\backsim", true);
+defineSymbol(symbols_math, ams, rel, "\u22CD", "\\backsimeq", true);
+defineSymbol(symbols_math, ams, rel, "\u2AC5", "\\subseteqq", true);
+defineSymbol(symbols_math, ams, rel, "\u22D0", "\\Subset", true);
+defineSymbol(symbols_math, ams, rel, "\u228F", "\\sqsubset", true);
+defineSymbol(symbols_math, ams, rel, "\u227C", "\\preccurlyeq", true);
+defineSymbol(symbols_math, ams, rel, "\u22DE", "\\curlyeqprec", true);
+defineSymbol(symbols_math, ams, rel, "\u227E", "\\precsim", true);
+defineSymbol(symbols_math, ams, rel, "\u2AB7", "\\precapprox", true);
+defineSymbol(symbols_math, ams, rel, "\u22B2", "\\vartriangleleft");
+defineSymbol(symbols_math, ams, rel, "\u22B4", "\\trianglelefteq");
+defineSymbol(symbols_math, ams, rel, "\u22A8", "\\vDash", true);
+defineSymbol(symbols_math, ams, rel, "\u22AA", "\\Vvdash", true);
+defineSymbol(symbols_math, ams, rel, "\u2323", "\\smallsmile");
+defineSymbol(symbols_math, ams, rel, "\u2322", "\\smallfrown");
+defineSymbol(symbols_math, ams, rel, "\u224F", "\\bumpeq", true);
+defineSymbol(symbols_math, ams, rel, "\u224E", "\\Bumpeq", true);
+defineSymbol(symbols_math, ams, rel, "\u2267", "\\geqq", true);
+defineSymbol(symbols_math, ams, rel, "\u2A7E", "\\geqslant", true);
+defineSymbol(symbols_math, ams, rel, "\u2A96", "\\eqslantgtr", true);
+defineSymbol(symbols_math, ams, rel, "\u2273", "\\gtrsim", true);
+defineSymbol(symbols_math, ams, rel, "\u2A86", "\\gtrapprox", true);
+defineSymbol(symbols_math, ams, bin, "\u22D7", "\\gtrdot");
+defineSymbol(symbols_math, ams, rel, "\u22D9", "\\ggg", true);
+defineSymbol(symbols_math, ams, rel, "\u2277", "\\gtrless", true);
+defineSymbol(symbols_math, ams, rel, "\u22DB", "\\gtreqless", true);
+defineSymbol(symbols_math, ams, rel, "\u2A8C", "\\gtreqqless", true);
+defineSymbol(symbols_math, ams, rel, "\u2256", "\\eqcirc", true);
+defineSymbol(symbols_math, ams, rel, "\u2257", "\\circeq", true);
+defineSymbol(symbols_math, ams, rel, "\u225C", "\\triangleq", true);
+defineSymbol(symbols_math, ams, rel, "\u223C", "\\thicksim");
+defineSymbol(symbols_math, ams, rel, "\u2248", "\\thickapprox");
+defineSymbol(symbols_math, ams, rel, "\u2AC6", "\\supseteqq", true);
+defineSymbol(symbols_math, ams, rel, "\u22D1", "\\Supset", true);
+defineSymbol(symbols_math, ams, rel, "\u2290", "\\sqsupset", true);
+defineSymbol(symbols_math, ams, rel, "\u227D", "\\succcurlyeq", true);
+defineSymbol(symbols_math, ams, rel, "\u22DF", "\\curlyeqsucc", true);
+defineSymbol(symbols_math, ams, rel, "\u227F", "\\succsim", true);
+defineSymbol(symbols_math, ams, rel, "\u2AB8", "\\succapprox", true);
+defineSymbol(symbols_math, ams, rel, "\u22B3", "\\vartriangleright");
+defineSymbol(symbols_math, ams, rel, "\u22B5", "\\trianglerighteq");
+defineSymbol(symbols_math, ams, rel, "\u22A9", "\\Vdash", true);
+defineSymbol(symbols_math, ams, rel, "\u2223", "\\shortmid");
+defineSymbol(symbols_math, ams, rel, "\u2225", "\\shortparallel");
+defineSymbol(symbols_math, ams, rel, "\u226C", "\\between", true);
+defineSymbol(symbols_math, ams, rel, "\u22D4", "\\pitchfork", true);
+defineSymbol(symbols_math, ams, rel, "\u221D", "\\varpropto");
+defineSymbol(symbols_math, ams, rel, "\u25C0", "\\blacktriangleleft"); // unicode-math says that \therefore is a mathord atom.
+// We kept the amssymb atom type, which is rel.
+
+defineSymbol(symbols_math, ams, rel, "\u2234", "\\therefore", true);
+defineSymbol(symbols_math, ams, rel, "\u220D", "\\backepsilon");
+defineSymbol(symbols_math, ams, rel, "\u25B6", "\\blacktriangleright"); // unicode-math says that \because is a mathord atom.
+// We kept the amssymb atom type, which is rel.
+
+defineSymbol(symbols_math, ams, rel, "\u2235", "\\because", true);
+defineSymbol(symbols_math, ams, rel, "\u22D8", "\\llless");
+defineSymbol(symbols_math, ams, rel, "\u22D9", "\\gggtr");
+defineSymbol(symbols_math, ams, bin, "\u22B2", "\\lhd");
+defineSymbol(symbols_math, ams, bin, "\u22B3", "\\rhd");
+defineSymbol(symbols_math, ams, rel, "\u2242", "\\eqsim", true);
+defineSymbol(symbols_math, main, rel, "\u22C8", "\\Join");
+defineSymbol(symbols_math, ams, rel, "\u2251", "\\Doteq", true); // AMS Binary Operators
+
+defineSymbol(symbols_math, ams, bin, "\u2214", "\\dotplus", true);
+defineSymbol(symbols_math, ams, bin, "\u2216", "\\smallsetminus");
+defineSymbol(symbols_math, ams, bin, "\u22D2", "\\Cap", true);
+defineSymbol(symbols_math, ams, bin, "\u22D3", "\\Cup", true);
+defineSymbol(symbols_math, ams, bin, "\u2A5E", "\\doublebarwedge", true);
+defineSymbol(symbols_math, ams, bin, "\u229F", "\\boxminus", true);
+defineSymbol(symbols_math, ams, bin, "\u229E", "\\boxplus", true);
+defineSymbol(symbols_math, ams, bin, "\u22C7", "\\divideontimes", true);
+defineSymbol(symbols_math, ams, bin, "\u22C9", "\\ltimes", true);
+defineSymbol(symbols_math, ams, bin, "\u22CA", "\\rtimes", true);
+defineSymbol(symbols_math, ams, bin, "\u22CB", "\\leftthreetimes", true);
+defineSymbol(symbols_math, ams, bin, "\u22CC", "\\rightthreetimes", true);
+defineSymbol(symbols_math, ams, bin, "\u22CF", "\\curlywedge", true);
+defineSymbol(symbols_math, ams, bin, "\u22CE", "\\curlyvee", true);
+defineSymbol(symbols_math, ams, bin, "\u229D", "\\circleddash", true);
+defineSymbol(symbols_math, ams, bin, "\u229B", "\\circledast", true);
+defineSymbol(symbols_math, ams, bin, "\u22C5", "\\centerdot");
+defineSymbol(symbols_math, ams, bin, "\u22BA", "\\intercal", true);
+defineSymbol(symbols_math, ams, bin, "\u22D2", "\\doublecap");
+defineSymbol(symbols_math, ams, bin, "\u22D3", "\\doublecup");
+defineSymbol(symbols_math, ams, bin, "\u22A0", "\\boxtimes", true); // AMS Arrows
+// Note: unicode-math maps \u21e2 to their own function \rightdasharrow.
+// We'll map it to AMS function \dashrightarrow. It produces the same atom.
+
+defineSymbol(symbols_math, ams, rel, "\u21E2", "\\dashrightarrow", true); // unicode-math maps \u21e0 to \leftdasharrow. We'll use the AMS synonym.
+
+defineSymbol(symbols_math, ams, rel, "\u21E0", "\\dashleftarrow", true);
+defineSymbol(symbols_math, ams, rel, "\u21C7", "\\leftleftarrows", true);
+defineSymbol(symbols_math, ams, rel, "\u21C6", "\\leftrightarrows", true);
+defineSymbol(symbols_math, ams, rel, "\u21DA", "\\Lleftarrow", true);
+defineSymbol(symbols_math, ams, rel, "\u219E", "\\twoheadleftarrow", true);
+defineSymbol(symbols_math, ams, rel, "\u21A2", "\\leftarrowtail", true);
+defineSymbol(symbols_math, ams, rel, "\u21AB", "\\looparrowleft", true);
+defineSymbol(symbols_math, ams, rel, "\u21CB", "\\leftrightharpoons", true);
+defineSymbol(symbols_math, ams, rel, "\u21B6", "\\curvearrowleft", true); // unicode-math maps \u21ba to \acwopencirclearrow. We'll use the AMS synonym.
+
+defineSymbol(symbols_math, ams, rel, "\u21BA", "\\circlearrowleft", true);
+defineSymbol(symbols_math, ams, rel, "\u21B0", "\\Lsh", true);
+defineSymbol(symbols_math, ams, rel, "\u21C8", "\\upuparrows", true);
+defineSymbol(symbols_math, ams, rel, "\u21BF", "\\upharpoonleft", true);
+defineSymbol(symbols_math, ams, rel, "\u21C3", "\\downharpoonleft", true);
+defineSymbol(symbols_math, ams, rel, "\u22B8", "\\multimap", true);
+defineSymbol(symbols_math, ams, rel, "\u21AD", "\\leftrightsquigarrow", true);
+defineSymbol(symbols_math, ams, rel, "\u21C9", "\\rightrightarrows", true);
+defineSymbol(symbols_math, ams, rel, "\u21C4", "\\rightleftarrows", true);
+defineSymbol(symbols_math, ams, rel, "\u21A0", "\\twoheadrightarrow", true);
+defineSymbol(symbols_math, ams, rel, "\u21A3", "\\rightarrowtail", true);
+defineSymbol(symbols_math, ams, rel, "\u21AC", "\\looparrowright", true);
+defineSymbol(symbols_math, ams, rel, "\u21B7", "\\curvearrowright", true); // unicode-math maps \u21bb to \cwopencirclearrow. We'll use the AMS synonym.
+
+defineSymbol(symbols_math, ams, rel, "\u21BB", "\\circlearrowright", true);
+defineSymbol(symbols_math, ams, rel, "\u21B1", "\\Rsh", true);
+defineSymbol(symbols_math, ams, rel, "\u21CA", "\\downdownarrows", true);
+defineSymbol(symbols_math, ams, rel, "\u21BE", "\\upharpoonright", true);
+defineSymbol(symbols_math, ams, rel, "\u21C2", "\\downharpoonright", true);
+defineSymbol(symbols_math, ams, rel, "\u21DD", "\\rightsquigarrow", true);
+defineSymbol(symbols_math, ams, rel, "\u21DD", "\\leadsto");
+defineSymbol(symbols_math, ams, rel, "\u21DB", "\\Rrightarrow", true);
+defineSymbol(symbols_math, ams, rel, "\u21BE", "\\restriction");
+defineSymbol(symbols_math, main, symbols_textord, "\u2018", "`");
+defineSymbol(symbols_math, main, symbols_textord, "$", "\\$");
+defineSymbol(symbols_text, main, symbols_textord, "$", "\\$");
+defineSymbol(symbols_text, main, symbols_textord, "$", "\\textdollar");
+defineSymbol(symbols_math, main, symbols_textord, "%", "\\%");
+defineSymbol(symbols_text, main, symbols_textord, "%", "\\%");
+defineSymbol(symbols_math, main, symbols_textord, "_", "\\_");
+defineSymbol(symbols_text, main, symbols_textord, "_", "\\_");
+defineSymbol(symbols_text, main, symbols_textord, "_", "\\textunderscore");
+defineSymbol(symbols_math, main, symbols_textord, "\u2220", "\\angle", true);
+defineSymbol(symbols_math, main, symbols_textord, "\u221E", "\\infty", true);
+defineSymbol(symbols_math, main, symbols_textord, "\u2032", "\\prime");
+defineSymbol(symbols_math, main, symbols_textord, "\u25B3", "\\triangle");
+defineSymbol(symbols_math, main, symbols_textord, "\u0393", "\\Gamma", true);
+defineSymbol(symbols_math, main, symbols_textord, "\u0394", "\\Delta", true);
+defineSymbol(symbols_math, main, symbols_textord, "\u0398", "\\Theta", true);
+defineSymbol(symbols_math, main, symbols_textord, "\u039B", "\\Lambda", true);
+defineSymbol(symbols_math, main, symbols_textord, "\u039E", "\\Xi", true);
+defineSymbol(symbols_math, main, symbols_textord, "\u03A0", "\\Pi", true);
+defineSymbol(symbols_math, main, symbols_textord, "\u03A3", "\\Sigma", true);
+defineSymbol(symbols_math, main, symbols_textord, "\u03A5", "\\Upsilon", true);
+defineSymbol(symbols_math, main, symbols_textord, "\u03A6", "\\Phi", true);
+defineSymbol(symbols_math, main, symbols_textord, "\u03A8", "\\Psi", true);
+defineSymbol(symbols_math, main, symbols_textord, "\u03A9", "\\Omega", true);
+defineSymbol(symbols_math, main, symbols_textord, "A", "\u0391");
+defineSymbol(symbols_math, main, symbols_textord, "B", "\u0392");
+defineSymbol(symbols_math, main, symbols_textord, "E", "\u0395");
+defineSymbol(symbols_math, main, symbols_textord, "Z", "\u0396");
+defineSymbol(symbols_math, main, symbols_textord, "H", "\u0397");
+defineSymbol(symbols_math, main, symbols_textord, "I", "\u0399");
+defineSymbol(symbols_math, main, symbols_textord, "K", "\u039A");
+defineSymbol(symbols_math, main, symbols_textord, "M", "\u039C");
+defineSymbol(symbols_math, main, symbols_textord, "N", "\u039D");
+defineSymbol(symbols_math, main, symbols_textord, "O", "\u039F");
+defineSymbol(symbols_math, main, symbols_textord, "P", "\u03A1");
+defineSymbol(symbols_math, main, symbols_textord, "T", "\u03A4");
+defineSymbol(symbols_math, main, symbols_textord, "X", "\u03A7");
+defineSymbol(symbols_math, main, symbols_textord, "\xAC", "\\neg", true);
+defineSymbol(symbols_math, main, symbols_textord, "\xAC", "\\lnot");
+defineSymbol(symbols_math, main, symbols_textord, "\u22A4", "\\top");
+defineSymbol(symbols_math, main, symbols_textord, "\u22A5", "\\bot");
+defineSymbol(symbols_math, main, symbols_textord, "\u2205", "\\emptyset");
+defineSymbol(symbols_math, ams, symbols_textord, "\u2205", "\\varnothing");
+defineSymbol(symbols_math, main, mathord, "\u03B1", "\\alpha", true);
+defineSymbol(symbols_math, main, mathord, "\u03B2", "\\beta", true);
+defineSymbol(symbols_math, main, mathord, "\u03B3", "\\gamma", true);
+defineSymbol(symbols_math, main, mathord, "\u03B4", "\\delta", true);
+defineSymbol(symbols_math, main, mathord, "\u03F5", "\\epsilon", true);
+defineSymbol(symbols_math, main, mathord, "\u03B6", "\\zeta", true);
+defineSymbol(symbols_math, main, mathord, "\u03B7", "\\eta", true);
+defineSymbol(symbols_math, main, mathord, "\u03B8", "\\theta", true);
+defineSymbol(symbols_math, main, mathord, "\u03B9", "\\iota", true);
+defineSymbol(symbols_math, main, mathord, "\u03BA", "\\kappa", true);
+defineSymbol(symbols_math, main, mathord, "\u03BB", "\\lambda", true);
+defineSymbol(symbols_math, main, mathord, "\u03BC", "\\mu", true);
+defineSymbol(symbols_math, main, mathord, "\u03BD", "\\nu", true);
+defineSymbol(symbols_math, main, mathord, "\u03BE", "\\xi", true);
+defineSymbol(symbols_math, main, mathord, "\u03BF", "\\omicron", true);
+defineSymbol(symbols_math, main, mathord, "\u03C0", "\\pi", true);
+defineSymbol(symbols_math, main, mathord, "\u03C1", "\\rho", true);
+defineSymbol(symbols_math, main, mathord, "\u03C3", "\\sigma", true);
+defineSymbol(symbols_math, main, mathord, "\u03C4", "\\tau", true);
+defineSymbol(symbols_math, main, mathord, "\u03C5", "\\upsilon", true);
+defineSymbol(symbols_math, main, mathord, "\u03D5", "\\phi", true);
+defineSymbol(symbols_math, main, mathord, "\u03C7", "\\chi", true);
+defineSymbol(symbols_math, main, mathord, "\u03C8", "\\psi", true);
+defineSymbol(symbols_math, main, mathord, "\u03C9", "\\omega", true);
+defineSymbol(symbols_math, main, mathord, "\u03B5", "\\varepsilon", true);
+defineSymbol(symbols_math, main, mathord, "\u03D1", "\\vartheta", true);
+defineSymbol(symbols_math, main, mathord, "\u03D6", "\\varpi", true);
+defineSymbol(symbols_math, main, mathord, "\u03F1", "\\varrho", true);
+defineSymbol(symbols_math, main, mathord, "\u03C2", "\\varsigma", true);
+defineSymbol(symbols_math, main, mathord, "\u03C6", "\\varphi", true);
+defineSymbol(symbols_math, main, bin, "\u2217", "*");
+defineSymbol(symbols_math, main, bin, "+", "+");
+defineSymbol(symbols_math, main, bin, "\u2212", "-");
+defineSymbol(symbols_math, main, bin, "\u22C5", "\\cdot", true);
+defineSymbol(symbols_math, main, bin, "\u2218", "\\circ");
+defineSymbol(symbols_math, main, bin, "\xF7", "\\div", true);
+defineSymbol(symbols_math, main, bin, "\xB1", "\\pm", true);
+defineSymbol(symbols_math, main, bin, "\xD7", "\\times", true);
+defineSymbol(symbols_math, main, bin, "\u2229", "\\cap", true);
+defineSymbol(symbols_math, main, bin, "\u222A", "\\cup", true);
+defineSymbol(symbols_math, main, bin, "\u2216", "\\setminus");
+defineSymbol(symbols_math, main, bin, "\u2227", "\\land");
+defineSymbol(symbols_math, main, bin, "\u2228", "\\lor");
+defineSymbol(symbols_math, main, bin, "\u2227", "\\wedge", true);
+defineSymbol(symbols_math, main, bin, "\u2228", "\\vee", true);
+defineSymbol(symbols_math, main, symbols_textord, "\u221A", "\\surd");
+defineSymbol(symbols_math, main, symbols_open, "\u27E8", "\\langle", true);
+defineSymbol(symbols_math, main, symbols_open, "\u2223", "\\lvert");
+defineSymbol(symbols_math, main, symbols_open, "\u2225", "\\lVert");
+defineSymbol(symbols_math, main, symbols_close, "?", "?");
+defineSymbol(symbols_math, main, symbols_close, "!", "!");
+defineSymbol(symbols_math, main, symbols_close, "\u27E9", "\\rangle", true);
+defineSymbol(symbols_math, main, symbols_close, "\u2223", "\\rvert");
+defineSymbol(symbols_math, main, symbols_close, "\u2225", "\\rVert");
+defineSymbol(symbols_math, main, rel, "=", "=");
+defineSymbol(symbols_math, main, rel, ":", ":");
+defineSymbol(symbols_math, main, rel, "\u2248", "\\approx", true);
+defineSymbol(symbols_math, main, rel, "\u2245", "\\cong", true);
+defineSymbol(symbols_math, main, rel, "\u2265", "\\ge");
+defineSymbol(symbols_math, main, rel, "\u2265", "\\geq", true);
+defineSymbol(symbols_math, main, rel, "\u2190", "\\gets");
+defineSymbol(symbols_math, main, rel, ">", "\\gt", true);
+defineSymbol(symbols_math, main, rel, "\u2208", "\\in", true);
+defineSymbol(symbols_math, main, rel, "\uE020", "\\@not");
+defineSymbol(symbols_math, main, rel, "\u2282", "\\subset", true);
+defineSymbol(symbols_math, main, rel, "\u2283", "\\supset", true);
+defineSymbol(symbols_math, main, rel, "\u2286", "\\subseteq", true);
+defineSymbol(symbols_math, main, rel, "\u2287", "\\supseteq", true);
+defineSymbol(symbols_math, ams, rel, "\u2288", "\\nsubseteq", true);
+defineSymbol(symbols_math, ams, rel, "\u2289", "\\nsupseteq", true);
+defineSymbol(symbols_math, main, rel, "\u22A8", "\\models");
+defineSymbol(symbols_math, main, rel, "\u2190", "\\leftarrow", true);
+defineSymbol(symbols_math, main, rel, "\u2264", "\\le");
+defineSymbol(symbols_math, main, rel, "\u2264", "\\leq", true);
+defineSymbol(symbols_math, main, rel, "<", "\\lt", true);
+defineSymbol(symbols_math, main, rel, "\u2192", "\\rightarrow", true);
+defineSymbol(symbols_math, main, rel, "\u2192", "\\to");
+defineSymbol(symbols_math, ams, rel, "\u2271", "\\ngeq", true);
+defineSymbol(symbols_math, ams, rel, "\u2270", "\\nleq", true);
+defineSymbol(symbols_math, main, symbols_spacing, "\xA0", "\\ ");
+defineSymbol(symbols_math, main, symbols_spacing, "\xA0", "~");
+defineSymbol(symbols_math, main, symbols_spacing, "\xA0", "\\space"); // Ref: LaTeX Source 2e: \DeclareRobustCommand{\nobreakspace}{%
+
+defineSymbol(symbols_math, main, symbols_spacing, "\xA0", "\\nobreakspace");
+defineSymbol(symbols_text, main, symbols_spacing, "\xA0", "\\ ");
+defineSymbol(symbols_text, main, symbols_spacing, "\xA0", " ");
+defineSymbol(symbols_text, main, symbols_spacing, "\xA0", "~");
+defineSymbol(symbols_text, main, symbols_spacing, "\xA0", "\\space");
+defineSymbol(symbols_text, main, symbols_spacing, "\xA0", "\\nobreakspace");
+defineSymbol(symbols_math, main, symbols_spacing, null, "\\nobreak");
+defineSymbol(symbols_math, main, symbols_spacing, null, "\\allowbreak");
+defineSymbol(symbols_math, main, punct, ",", ",");
+defineSymbol(symbols_math, main, punct, ";", ";");
+defineSymbol(symbols_math, ams, bin, "\u22BC", "\\barwedge", true);
+defineSymbol(symbols_math, ams, bin, "\u22BB", "\\veebar", true);
+defineSymbol(symbols_math, main, bin, "\u2299", "\\odot", true);
+defineSymbol(symbols_math, main, bin, "\u2295", "\\oplus", true);
+defineSymbol(symbols_math, main, bin, "\u2297", "\\otimes", true);
+defineSymbol(symbols_math, main, symbols_textord, "\u2202", "\\partial", true);
+defineSymbol(symbols_math, main, bin, "\u2298", "\\oslash", true);
+defineSymbol(symbols_math, ams, bin, "\u229A", "\\circledcirc", true);
+defineSymbol(symbols_math, ams, bin, "\u22A1", "\\boxdot", true);
+defineSymbol(symbols_math, main, bin, "\u25B3", "\\bigtriangleup");
+defineSymbol(symbols_math, main, bin, "\u25BD", "\\bigtriangledown");
+defineSymbol(symbols_math, main, bin, "\u2020", "\\dagger");
+defineSymbol(symbols_math, main, bin, "\u22C4", "\\diamond");
+defineSymbol(symbols_math, main, bin, "\u22C6", "\\star");
+defineSymbol(symbols_math, main, bin, "\u25C3", "\\triangleleft");
+defineSymbol(symbols_math, main, bin, "\u25B9", "\\triangleright");
+defineSymbol(symbols_math, main, symbols_open, "{", "\\{");
+defineSymbol(symbols_text, main, symbols_textord, "{", "\\{");
+defineSymbol(symbols_text, main, symbols_textord, "{", "\\textbraceleft");
+defineSymbol(symbols_math, main, symbols_close, "}", "\\}");
+defineSymbol(symbols_text, main, symbols_textord, "}", "\\}");
+defineSymbol(symbols_text, main, symbols_textord, "}", "\\textbraceright");
+defineSymbol(symbols_math, main, symbols_open, "{", "\\lbrace");
+defineSymbol(symbols_math, main, symbols_close, "}", "\\rbrace");
+defineSymbol(symbols_math, main, symbols_open, "[", "\\lbrack", true);
+defineSymbol(symbols_text, main, symbols_textord, "[", "\\lbrack", true);
+defineSymbol(symbols_math, main, symbols_close, "]", "\\rbrack", true);
+defineSymbol(symbols_text, main, symbols_textord, "]", "\\rbrack", true);
+defineSymbol(symbols_math, main, symbols_open, "(", "\\lparen", true);
+defineSymbol(symbols_math, main, symbols_close, ")", "\\rparen", true);
+defineSymbol(symbols_text, main, symbols_textord, "<", "\\textless", true); // in T1 fontenc
+
+defineSymbol(symbols_text, main, symbols_textord, ">", "\\textgreater", true); // in T1 fontenc
+
+defineSymbol(symbols_math, main, symbols_open, "\u230A", "\\lfloor", true);
+defineSymbol(symbols_math, main, symbols_close, "\u230B", "\\rfloor", true);
+defineSymbol(symbols_math, main, symbols_open, "\u2308", "\\lceil", true);
+defineSymbol(symbols_math, main, symbols_close, "\u2309", "\\rceil", true);
+defineSymbol(symbols_math, main, symbols_textord, "\\", "\\backslash");
+defineSymbol(symbols_math, main, symbols_textord, "\u2223", "|");
+defineSymbol(symbols_math, main, symbols_textord, "\u2223", "\\vert");
+defineSymbol(symbols_text, main, symbols_textord, "|", "\\textbar", true); // in T1 fontenc
+
+defineSymbol(symbols_math, main, symbols_textord, "\u2225", "\\|");
+defineSymbol(symbols_math, main, symbols_textord, "\u2225", "\\Vert");
+defineSymbol(symbols_text, main, symbols_textord, "\u2225", "\\textbardbl");
+defineSymbol(symbols_text, main, symbols_textord, "~", "\\textasciitilde");
+defineSymbol(symbols_text, main, symbols_textord, "\\", "\\textbackslash");
+defineSymbol(symbols_text, main, symbols_textord, "^", "\\textasciicircum");
+defineSymbol(symbols_math, main, rel, "\u2191", "\\uparrow", true);
+defineSymbol(symbols_math, main, rel, "\u21D1", "\\Uparrow", true);
+defineSymbol(symbols_math, main, rel, "\u2193", "\\downarrow", true);
+defineSymbol(symbols_math, main, rel, "\u21D3", "\\Downarrow", true);
+defineSymbol(symbols_math, main, rel, "\u2195", "\\updownarrow", true);
+defineSymbol(symbols_math, main, rel, "\u21D5", "\\Updownarrow", true);
+defineSymbol(symbols_math, main, op, "\u2210", "\\coprod");
+defineSymbol(symbols_math, main, op, "\u22C1", "\\bigvee");
+defineSymbol(symbols_math, main, op, "\u22C0", "\\bigwedge");
+defineSymbol(symbols_math, main, op, "\u2A04", "\\biguplus");
+defineSymbol(symbols_math, main, op, "\u22C2", "\\bigcap");
+defineSymbol(symbols_math, main, op, "\u22C3", "\\bigcup");
+defineSymbol(symbols_math, main, op, "\u222B", "\\int");
+defineSymbol(symbols_math, main, op, "\u222B", "\\intop");
+defineSymbol(symbols_math, main, op, "\u222C", "\\iint");
+defineSymbol(symbols_math, main, op, "\u222D", "\\iiint");
+defineSymbol(symbols_math, main, op, "\u220F", "\\prod");
+defineSymbol(symbols_math, main, op, "\u2211", "\\sum");
+defineSymbol(symbols_math, main, op, "\u2A02", "\\bigotimes");
+defineSymbol(symbols_math, main, op, "\u2A01", "\\bigoplus");
+defineSymbol(symbols_math, main, op, "\u2A00", "\\bigodot");
+defineSymbol(symbols_math, main, op, "\u222E", "\\oint");
+defineSymbol(symbols_math, main, op, "\u2A06", "\\bigsqcup");
+defineSymbol(symbols_math, main, op, "\u222B", "\\smallint");
+defineSymbol(symbols_text, main, symbols_inner, "\u2026", "\\textellipsis");
+defineSymbol(symbols_math, main, symbols_inner, "\u2026", "\\mathellipsis");
+defineSymbol(symbols_text, main, symbols_inner, "\u2026", "\\ldots", true);
+defineSymbol(symbols_math, main, symbols_inner, "\u2026", "\\ldots", true);
+defineSymbol(symbols_math, main, symbols_inner, "\u22EF", "\\@cdots", true);
+defineSymbol(symbols_math, main, symbols_inner, "\u22F1", "\\ddots", true);
+defineSymbol(symbols_math, main, symbols_textord, "\u22EE", "\\varvdots"); // \vdots is a macro
+
+defineSymbol(symbols_math, main, symbols_accent, "\u02CA", "\\acute");
+defineSymbol(symbols_math, main, symbols_accent, "\u02CB", "\\grave");
+defineSymbol(symbols_math, main, symbols_accent, "\xA8", "\\ddot");
+defineSymbol(symbols_math, main, symbols_accent, "~", "\\tilde");
+defineSymbol(symbols_math, main, symbols_accent, "\u02C9", "\\bar");
+defineSymbol(symbols_math, main, symbols_accent, "\u02D8", "\\breve");
+defineSymbol(symbols_math, main, symbols_accent, "\u02C7", "\\check");
+defineSymbol(symbols_math, main, symbols_accent, "^", "\\hat");
+defineSymbol(symbols_math, main, symbols_accent, "\u20D7", "\\vec");
+defineSymbol(symbols_math, main, symbols_accent, "\u02D9", "\\dot");
+defineSymbol(symbols_math, main, symbols_accent, "\u02DA", "\\mathring"); // \imath and \jmath should be invariant to \mathrm, \mathbf, etc., so use PUA
+
+defineSymbol(symbols_math, main, mathord, "\uE131", "\\@imath");
+defineSymbol(symbols_math, main, mathord, "\uE237", "\\@jmath");
+defineSymbol(symbols_math, main, symbols_textord, "\u0131", "\u0131");
+defineSymbol(symbols_math, main, symbols_textord, "\u0237", "\u0237");
+defineSymbol(symbols_text, main, symbols_textord, "\u0131", "\\i", true);
+defineSymbol(symbols_text, main, symbols_textord, "\u0237", "\\j", true);
+defineSymbol(symbols_text, main, symbols_textord, "\xDF", "\\ss", true);
+defineSymbol(symbols_text, main, symbols_textord, "\xE6", "\\ae", true);
+defineSymbol(symbols_text, main, symbols_textord, "\u0153", "\\oe", true);
+defineSymbol(symbols_text, main, symbols_textord, "\xF8", "\\o", true);
+defineSymbol(symbols_text, main, symbols_textord, "\xC6", "\\AE", true);
+defineSymbol(symbols_text, main, symbols_textord, "\u0152", "\\OE", true);
+defineSymbol(symbols_text, main, symbols_textord, "\xD8", "\\O", true);
+defineSymbol(symbols_text, main, symbols_accent, "\u02CA", "\\'"); // acute
+
+defineSymbol(symbols_text, main, symbols_accent, "\u02CB", "\\`"); // grave
+
+defineSymbol(symbols_text, main, symbols_accent, "\u02C6", "\\^"); // circumflex
+
+defineSymbol(symbols_text, main, symbols_accent, "\u02DC", "\\~"); // tilde
+
+defineSymbol(symbols_text, main, symbols_accent, "\u02C9", "\\="); // macron
+
+defineSymbol(symbols_text, main, symbols_accent, "\u02D8", "\\u"); // breve
+
+defineSymbol(symbols_text, main, symbols_accent, "\u02D9", "\\."); // dot above
+
+defineSymbol(symbols_text, main, symbols_accent, "\u02DA", "\\r"); // ring above
+
+defineSymbol(symbols_text, main, symbols_accent, "\u02C7", "\\v"); // caron
+
+defineSymbol(symbols_text, main, symbols_accent, "\xA8", '\\"'); // diaresis
+
+defineSymbol(symbols_text, main, symbols_accent, "\u02DD", "\\H"); // double acute
+
+defineSymbol(symbols_text, main, symbols_accent, "\u25EF", "\\textcircled"); // \bigcirc glyph
+// These ligatures are detected and created in Parser.js's `formLigatures`.
+
+var ligatures = {
+ "--": true,
+ "---": true,
+ "``": true,
+ "''": true
+};
+defineSymbol(symbols_text, main, symbols_textord, "\u2013", "--", true);
+defineSymbol(symbols_text, main, symbols_textord, "\u2013", "\\textendash");
+defineSymbol(symbols_text, main, symbols_textord, "\u2014", "---", true);
+defineSymbol(symbols_text, main, symbols_textord, "\u2014", "\\textemdash");
+defineSymbol(symbols_text, main, symbols_textord, "\u2018", "`", true);
+defineSymbol(symbols_text, main, symbols_textord, "\u2018", "\\textquoteleft");
+defineSymbol(symbols_text, main, symbols_textord, "\u2019", "'", true);
+defineSymbol(symbols_text, main, symbols_textord, "\u2019", "\\textquoteright");
+defineSymbol(symbols_text, main, symbols_textord, "\u201C", "``", true);
+defineSymbol(symbols_text, main, symbols_textord, "\u201C", "\\textquotedblleft");
+defineSymbol(symbols_text, main, symbols_textord, "\u201D", "''", true);
+defineSymbol(symbols_text, main, symbols_textord, "\u201D", "\\textquotedblright"); // \degree from gensymb package
+
+defineSymbol(symbols_math, main, symbols_textord, "\xB0", "\\degree", true);
+defineSymbol(symbols_text, main, symbols_textord, "\xB0", "\\degree"); // \textdegree from inputenc package
+
+defineSymbol(symbols_text, main, symbols_textord, "\xB0", "\\textdegree", true); // TODO: In LaTeX, \pounds can generate a different character in text and math
+// mode, but among our fonts, only Main-Regular defines this character "163".
+
+defineSymbol(symbols_math, main, symbols_textord, "\xA3", "\\pounds");
+defineSymbol(symbols_math, main, symbols_textord, "\xA3", "\\mathsterling", true);
+defineSymbol(symbols_text, main, symbols_textord, "\xA3", "\\pounds");
+defineSymbol(symbols_text, main, symbols_textord, "\xA3", "\\textsterling", true);
+defineSymbol(symbols_math, ams, symbols_textord, "\u2720", "\\maltese");
+defineSymbol(symbols_text, ams, symbols_textord, "\u2720", "\\maltese"); // There are lots of symbols which are the same, so we add them in afterwards.
+// All of these are textords in math mode
+
+var mathTextSymbols = "0123456789/@.\"";
+
+for (var symbols_i = 0; symbols_i < mathTextSymbols.length; symbols_i++) {
+ var symbols_ch = mathTextSymbols.charAt(symbols_i);
+ defineSymbol(symbols_math, main, symbols_textord, symbols_ch, symbols_ch);
+} // All of these are textords in text mode
+
+
+var textSymbols = "0123456789!@*()-=+\";:?/.,";
+
+for (var src_symbols_i = 0; src_symbols_i < textSymbols.length; src_symbols_i++) {
+ var _ch = textSymbols.charAt(src_symbols_i);
+
+ defineSymbol(symbols_text, main, symbols_textord, _ch, _ch);
+} // All of these are textords in text mode, and mathords in math mode
+
+
+var letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
+
+for (var symbols_i2 = 0; symbols_i2 < letters.length; symbols_i2++) {
+ var _ch2 = letters.charAt(symbols_i2);
+
+ defineSymbol(symbols_math, main, mathord, _ch2, _ch2);
+ defineSymbol(symbols_text, main, symbols_textord, _ch2, _ch2);
+} // Blackboard bold and script letters in Unicode range
+
+
+defineSymbol(symbols_math, ams, symbols_textord, "C", "\u2102"); // blackboard bold
+
+defineSymbol(symbols_text, ams, symbols_textord, "C", "\u2102");
+defineSymbol(symbols_math, ams, symbols_textord, "H", "\u210D");
+defineSymbol(symbols_text, ams, symbols_textord, "H", "\u210D");
+defineSymbol(symbols_math, ams, symbols_textord, "N", "\u2115");
+defineSymbol(symbols_text, ams, symbols_textord, "N", "\u2115");
+defineSymbol(symbols_math, ams, symbols_textord, "P", "\u2119");
+defineSymbol(symbols_text, ams, symbols_textord, "P", "\u2119");
+defineSymbol(symbols_math, ams, symbols_textord, "Q", "\u211A");
+defineSymbol(symbols_text, ams, symbols_textord, "Q", "\u211A");
+defineSymbol(symbols_math, ams, symbols_textord, "R", "\u211D");
+defineSymbol(symbols_text, ams, symbols_textord, "R", "\u211D");
+defineSymbol(symbols_math, ams, symbols_textord, "Z", "\u2124");
+defineSymbol(symbols_text, ams, symbols_textord, "Z", "\u2124");
+defineSymbol(symbols_math, main, mathord, "h", "\u210E"); // italic h, Planck constant
+
+defineSymbol(symbols_text, main, mathord, "h", "\u210E"); // The next loop loads wide (surrogate pair) characters.
+// We support some letters in the Unicode range U+1D400 to U+1D7FF,
+// Mathematical Alphanumeric Symbols.
+// Some editors do not deal well with wide characters. So don't write the
+// string into this file. Instead, create the string from the surrogate pair.
+
+var symbols_wideChar = "";
+
+for (var symbols_i3 = 0; symbols_i3 < letters.length; symbols_i3++) {
+ var _ch3 = letters.charAt(symbols_i3); // The hex numbers in the next line are a surrogate pair.
+ // 0xD835 is the high surrogate for all letters in the range we support.
+ // 0xDC00 is the low surrogate for bold A.
+
+
+ symbols_wideChar = String.fromCharCode(0xD835, 0xDC00 + symbols_i3); // A-Z a-z bold
+
+ defineSymbol(symbols_math, main, mathord, _ch3, symbols_wideChar);
+ defineSymbol(symbols_text, main, symbols_textord, _ch3, symbols_wideChar);
+ symbols_wideChar = String.fromCharCode(0xD835, 0xDC34 + symbols_i3); // A-Z a-z italic
+
+ defineSymbol(symbols_math, main, mathord, _ch3, symbols_wideChar);
+ defineSymbol(symbols_text, main, symbols_textord, _ch3, symbols_wideChar);
+ symbols_wideChar = String.fromCharCode(0xD835, 0xDC68 + symbols_i3); // A-Z a-z bold italic
+
+ defineSymbol(symbols_math, main, mathord, _ch3, symbols_wideChar);
+ defineSymbol(symbols_text, main, symbols_textord, _ch3, symbols_wideChar);
+ symbols_wideChar = String.fromCharCode(0xD835, 0xDD04 + symbols_i3); // A-Z a-z Fractur
+
+ defineSymbol(symbols_math, main, mathord, _ch3, symbols_wideChar);
+ defineSymbol(symbols_text, main, symbols_textord, _ch3, symbols_wideChar);
+ symbols_wideChar = String.fromCharCode(0xD835, 0xDDA0 + symbols_i3); // A-Z a-z sans-serif
+
+ defineSymbol(symbols_math, main, mathord, _ch3, symbols_wideChar);
+ defineSymbol(symbols_text, main, symbols_textord, _ch3, symbols_wideChar);
+ symbols_wideChar = String.fromCharCode(0xD835, 0xDDD4 + symbols_i3); // A-Z a-z sans bold
+
+ defineSymbol(symbols_math, main, mathord, _ch3, symbols_wideChar);
+ defineSymbol(symbols_text, main, symbols_textord, _ch3, symbols_wideChar);
+ symbols_wideChar = String.fromCharCode(0xD835, 0xDE08 + symbols_i3); // A-Z a-z sans italic
+
+ defineSymbol(symbols_math, main, mathord, _ch3, symbols_wideChar);
+ defineSymbol(symbols_text, main, symbols_textord, _ch3, symbols_wideChar);
+ symbols_wideChar = String.fromCharCode(0xD835, 0xDE70 + symbols_i3); // A-Z a-z monospace
+
+ defineSymbol(symbols_math, main, mathord, _ch3, symbols_wideChar);
+ defineSymbol(symbols_text, main, symbols_textord, _ch3, symbols_wideChar);
+
+ if (symbols_i3 < 26) {
+ // KaTeX fonts have only capital letters for blackboard bold and script.
+ // See exception for k below.
+ symbols_wideChar = String.fromCharCode(0xD835, 0xDD38 + symbols_i3); // A-Z double struck
+
+ defineSymbol(symbols_math, main, mathord, _ch3, symbols_wideChar);
+ defineSymbol(symbols_text, main, symbols_textord, _ch3, symbols_wideChar);
+ symbols_wideChar = String.fromCharCode(0xD835, 0xDC9C + symbols_i3); // A-Z script
+
+ defineSymbol(symbols_math, main, mathord, _ch3, symbols_wideChar);
+ defineSymbol(symbols_text, main, symbols_textord, _ch3, symbols_wideChar);
+ } // TODO: Add bold script when it is supported by a KaTeX font.
+
+} // "k" is the only double struck lower case letter in the KaTeX fonts.
+
+
+symbols_wideChar = String.fromCharCode(0xD835, 0xDD5C); // k double struck
+
+defineSymbol(symbols_math, main, mathord, "k", symbols_wideChar);
+defineSymbol(symbols_text, main, symbols_textord, "k", symbols_wideChar); // Next, some wide character numerals
+
+for (var symbols_i4 = 0; symbols_i4 < 10; symbols_i4++) {
+ var _ch4 = symbols_i4.toString();
+
+ symbols_wideChar = String.fromCharCode(0xD835, 0xDFCE + symbols_i4); // 0-9 bold
+
+ defineSymbol(symbols_math, main, mathord, _ch4, symbols_wideChar);
+ defineSymbol(symbols_text, main, symbols_textord, _ch4, symbols_wideChar);
+ symbols_wideChar = String.fromCharCode(0xD835, 0xDFE2 + symbols_i4); // 0-9 sans serif
+
+ defineSymbol(symbols_math, main, mathord, _ch4, symbols_wideChar);
+ defineSymbol(symbols_text, main, symbols_textord, _ch4, symbols_wideChar);
+ symbols_wideChar = String.fromCharCode(0xD835, 0xDFEC + symbols_i4); // 0-9 bold sans
+
+ defineSymbol(symbols_math, main, mathord, _ch4, symbols_wideChar);
+ defineSymbol(symbols_text, main, symbols_textord, _ch4, symbols_wideChar);
+ symbols_wideChar = String.fromCharCode(0xD835, 0xDFF6 + symbols_i4); // 0-9 monospace
+
+ defineSymbol(symbols_math, main, mathord, _ch4, symbols_wideChar);
+ defineSymbol(symbols_text, main, symbols_textord, _ch4, symbols_wideChar);
+} // We add these Latin-1 letters as symbols for backwards-compatibility,
+// but they are not actually in the font, nor are they supported by the
+// Unicode accent mechanism, so they fall back to Times font and look ugly.
+// TODO(edemaine): Fix this.
+
+
+var extraLatin = "\xC7\xD0\xDE\xE7\xFE";
+
+for (var _i5 = 0; _i5 < extraLatin.length; _i5++) {
+ var _ch5 = extraLatin.charAt(_i5);
+
+ defineSymbol(symbols_math, main, mathord, _ch5, _ch5);
+ defineSymbol(symbols_text, main, symbols_textord, _ch5, _ch5);
+}
+// CONCATENATED MODULE: ./src/wide-character.js
+/**
+ * This file provides support for Unicode range U+1D400 to U+1D7FF,
+ * Mathematical Alphanumeric Symbols.
+ *
+ * Function wideCharacterFont takes a wide character as input and returns
+ * the font information necessary to render it properly.
+ */
+
+/**
+ * Data below is from https://www.unicode.org/charts/PDF/U1D400.pdf
+ * That document sorts characters into groups by font type, say bold or italic.
+ *
+ * In the arrays below, each subarray consists three elements:
+ * * The CSS class of that group when in math mode.
+ * * The CSS class of that group when in text mode.
+ * * The font name, so that KaTeX can get font metrics.
+ */
+
+var wideLatinLetterData = [["mathbf", "textbf", "Main-Bold"], // A-Z bold upright
+["mathbf", "textbf", "Main-Bold"], // a-z bold upright
+["mathnormal", "textit", "Math-Italic"], // A-Z italic
+["mathnormal", "textit", "Math-Italic"], // a-z italic
+["boldsymbol", "boldsymbol", "Main-BoldItalic"], // A-Z bold italic
+["boldsymbol", "boldsymbol", "Main-BoldItalic"], // a-z bold italic
+// Map fancy A-Z letters to script, not calligraphic.
+// This aligns with unicode-math and math fonts (except Cambria Math).
+["mathscr", "textscr", "Script-Regular"], // A-Z script
+["", "", ""], // a-z script. No font
+["", "", ""], // A-Z bold script. No font
+["", "", ""], // a-z bold script. No font
+["mathfrak", "textfrak", "Fraktur-Regular"], // A-Z Fraktur
+["mathfrak", "textfrak", "Fraktur-Regular"], // a-z Fraktur
+["mathbb", "textbb", "AMS-Regular"], // A-Z double-struck
+["mathbb", "textbb", "AMS-Regular"], // k double-struck
+["", "", ""], // A-Z bold Fraktur No font metrics
+["", "", ""], // a-z bold Fraktur. No font.
+["mathsf", "textsf", "SansSerif-Regular"], // A-Z sans-serif
+["mathsf", "textsf", "SansSerif-Regular"], // a-z sans-serif
+["mathboldsf", "textboldsf", "SansSerif-Bold"], // A-Z bold sans-serif
+["mathboldsf", "textboldsf", "SansSerif-Bold"], // a-z bold sans-serif
+["mathitsf", "textitsf", "SansSerif-Italic"], // A-Z italic sans-serif
+["mathitsf", "textitsf", "SansSerif-Italic"], // a-z italic sans-serif
+["", "", ""], // A-Z bold italic sans. No font
+["", "", ""], // a-z bold italic sans. No font
+["mathtt", "texttt", "Typewriter-Regular"], // A-Z monospace
+["mathtt", "texttt", "Typewriter-Regular"]];
+var wideNumeralData = [["mathbf", "textbf", "Main-Bold"], // 0-9 bold
+["", "", ""], // 0-9 double-struck. No KaTeX font.
+["mathsf", "textsf", "SansSerif-Regular"], // 0-9 sans-serif
+["mathboldsf", "textboldsf", "SansSerif-Bold"], // 0-9 bold sans-serif
+["mathtt", "texttt", "Typewriter-Regular"]];
+var wide_character_wideCharacterFont = function wideCharacterFont(wideChar, mode) {
+ // IE doesn't support codePointAt(). So work with the surrogate pair.
+ var H = wideChar.charCodeAt(0); // high surrogate
+
+ var L = wideChar.charCodeAt(1); // low surrogate
+
+ var codePoint = (H - 0xD800) * 0x400 + (L - 0xDC00) + 0x10000;
+ var j = mode === "math" ? 0 : 1; // column index for CSS class.
+
+ if (0x1D400 <= codePoint && codePoint < 0x1D6A4) {
+ // wideLatinLetterData contains exactly 26 chars on each row.
+ // So we can calculate the relevant row. No traverse necessary.
+ var i = Math.floor((codePoint - 0x1D400) / 26);
+ return [wideLatinLetterData[i][2], wideLatinLetterData[i][j]];
+ } else if (0x1D7CE <= codePoint && codePoint <= 0x1D7FF) {
+ // Numerals, ten per row.
+ var _i = Math.floor((codePoint - 0x1D7CE) / 10);
+
+ return [wideNumeralData[_i][2], wideNumeralData[_i][j]];
+ } else if (codePoint === 0x1D6A5 || codePoint === 0x1D6A6) {
+ // dotless i or j
+ return [wideLatinLetterData[0][2], wideLatinLetterData[0][j]];
+ } else if (0x1D6A6 < codePoint && codePoint < 0x1D7CE) {
+ // Greek letters. Not supported, yet.
+ return ["", ""];
+ } else {
+ // We don't support any wide characters outside 1D400–1D7FF.
+ throw new src_ParseError("Unsupported character: " + wideChar);
+ }
+};
+// CONCATENATED MODULE: ./src/Options.js
+/**
+ * This file contains information about the options that the Parser carries
+ * around with it while parsing. Data is held in an `Options` object, and when
+ * recursing, a new `Options` object can be created with the `.with*` and
+ * `.reset` functions.
+ */
+
+var sizeStyleMap = [// Each element contains [textsize, scriptsize, scriptscriptsize].
+// The size mappings are taken from TeX with \normalsize=10pt.
+[1, 1, 1], // size1: [5, 5, 5] \tiny
+[2, 1, 1], // size2: [6, 5, 5]
+[3, 1, 1], // size3: [7, 5, 5] \scriptsize
+[4, 2, 1], // size4: [8, 6, 5] \footnotesize
+[5, 2, 1], // size5: [9, 6, 5] \small
+[6, 3, 1], // size6: [10, 7, 5] \normalsize
+[7, 4, 2], // size7: [12, 8, 6] \large
+[8, 6, 3], // size8: [14.4, 10, 7] \Large
+[9, 7, 6], // size9: [17.28, 12, 10] \LARGE
+[10, 8, 7], // size10: [20.74, 14.4, 12] \huge
+[11, 10, 9]];
+var sizeMultipliers = [// fontMetrics.js:getGlobalMetrics also uses size indexes, so if
+// you change size indexes, change that function.
+0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.2, 1.44, 1.728, 2.074, 2.488];
+
+var sizeAtStyle = function sizeAtStyle(size, style) {
+ return style.size < 2 ? size : sizeStyleMap[size - 1][style.size - 1];
+}; // In these types, "" (empty string) means "no change".
+
+
+/**
+ * This is the main options class. It contains the current style, size, color,
+ * and font.
+ *
+ * Options objects should not be modified. To create a new Options with
+ * different properties, call a `.having*` method.
+ */
+var Options_Options =
+/*#__PURE__*/
+function () {
+ // A font family applies to a group of fonts (i.e. SansSerif), while a font
+ // represents a specific font (i.e. SansSerif Bold).
+ // See: https://tex.stackexchange.com/questions/22350/difference-between-textrm-and-mathrm
+
+ /**
+ * The base size index.
+ */
+ function Options(data) {
+ this.style = void 0;
+ this.color = void 0;
+ this.size = void 0;
+ this.textSize = void 0;
+ this.phantom = void 0;
+ this.font = void 0;
+ this.fontFamily = void 0;
+ this.fontWeight = void 0;
+ this.fontShape = void 0;
+ this.sizeMultiplier = void 0;
+ this.maxSize = void 0;
+ this.minRuleThickness = void 0;
+ this._fontMetrics = void 0;
+ this.style = data.style;
+ this.color = data.color;
+ this.size = data.size || Options.BASESIZE;
+ this.textSize = data.textSize || this.size;
+ this.phantom = !!data.phantom;
+ this.font = data.font || "";
+ this.fontFamily = data.fontFamily || "";
+ this.fontWeight = data.fontWeight || '';
+ this.fontShape = data.fontShape || '';
+ this.sizeMultiplier = sizeMultipliers[this.size - 1];
+ this.maxSize = data.maxSize;
+ this.minRuleThickness = data.minRuleThickness;
+ this._fontMetrics = undefined;
+ }
+ /**
+ * Returns a new options object with the same properties as "this". Properties
+ * from "extension" will be copied to the new options object.
+ */
+
+
+ var _proto = Options.prototype;
+
+ _proto.extend = function extend(extension) {
+ var data = {
+ style: this.style,
+ size: this.size,
+ textSize: this.textSize,
+ color: this.color,
+ phantom: this.phantom,
+ font: this.font,
+ fontFamily: this.fontFamily,
+ fontWeight: this.fontWeight,
+ fontShape: this.fontShape,
+ maxSize: this.maxSize,
+ minRuleThickness: this.minRuleThickness
+ };
+
+ for (var key in extension) {
+ if (extension.hasOwnProperty(key)) {
+ data[key] = extension[key];
+ }
+ }
+
+ return new Options(data);
+ }
+ /**
+ * Return an options object with the given style. If `this.style === style`,
+ * returns `this`.
+ */
+ ;
+
+ _proto.havingStyle = function havingStyle(style) {
+ if (this.style === style) {
+ return this;
+ } else {
+ return this.extend({
+ style: style,
+ size: sizeAtStyle(this.textSize, style)
+ });
+ }
+ }
+ /**
+ * Return an options object with a cramped version of the current style. If
+ * the current style is cramped, returns `this`.
+ */
+ ;
+
+ _proto.havingCrampedStyle = function havingCrampedStyle() {
+ return this.havingStyle(this.style.cramp());
+ }
+ /**
+ * Return an options object with the given size and in at least `\textstyle`.
+ * Returns `this` if appropriate.
+ */
+ ;
+
+ _proto.havingSize = function havingSize(size) {
+ if (this.size === size && this.textSize === size) {
+ return this;
+ } else {
+ return this.extend({
+ style: this.style.text(),
+ size: size,
+ textSize: size,
+ sizeMultiplier: sizeMultipliers[size - 1]
+ });
+ }
+ }
+ /**
+ * Like `this.havingSize(BASESIZE).havingStyle(style)`. If `style` is omitted,
+ * changes to at least `\textstyle`.
+ */
+ ;
+
+ _proto.havingBaseStyle = function havingBaseStyle(style) {
+ style = style || this.style.text();
+ var wantSize = sizeAtStyle(Options.BASESIZE, style);
+
+ if (this.size === wantSize && this.textSize === Options.BASESIZE && this.style === style) {
+ return this;
+ } else {
+ return this.extend({
+ style: style,
+ size: wantSize
+ });
+ }
+ }
+ /**
+ * Remove the effect of sizing changes such as \Huge.
+ * Keep the effect of the current style, such as \scriptstyle.
+ */
+ ;
+
+ _proto.havingBaseSizing = function havingBaseSizing() {
+ var size;
+
+ switch (this.style.id) {
+ case 4:
+ case 5:
+ size = 3; // normalsize in scriptstyle
+
+ break;
+
+ case 6:
+ case 7:
+ size = 1; // normalsize in scriptscriptstyle
+
+ break;
+
+ default:
+ size = 6;
+ // normalsize in textstyle or displaystyle
+ }
+
+ return this.extend({
+ style: this.style.text(),
+ size: size
+ });
+ }
+ /**
+ * Create a new options object with the given color.
+ */
+ ;
+
+ _proto.withColor = function withColor(color) {
+ return this.extend({
+ color: color
+ });
+ }
+ /**
+ * Create a new options object with "phantom" set to true.
+ */
+ ;
+
+ _proto.withPhantom = function withPhantom() {
+ return this.extend({
+ phantom: true
+ });
+ }
+ /**
+ * Creates a new options object with the given math font or old text font.
+ * @type {[type]}
+ */
+ ;
+
+ _proto.withFont = function withFont(font) {
+ return this.extend({
+ font: font
+ });
+ }
+ /**
+ * Create a new options objects with the given fontFamily.
+ */
+ ;
+
+ _proto.withTextFontFamily = function withTextFontFamily(fontFamily) {
+ return this.extend({
+ fontFamily: fontFamily,
+ font: ""
+ });
+ }
+ /**
+ * Creates a new options object with the given font weight
+ */
+ ;
+
+ _proto.withTextFontWeight = function withTextFontWeight(fontWeight) {
+ return this.extend({
+ fontWeight: fontWeight,
+ font: ""
+ });
+ }
+ /**
+ * Creates a new options object with the given font weight
+ */
+ ;
+
+ _proto.withTextFontShape = function withTextFontShape(fontShape) {
+ return this.extend({
+ fontShape: fontShape,
+ font: ""
+ });
+ }
+ /**
+ * Return the CSS sizing classes required to switch from enclosing options
+ * `oldOptions` to `this`. Returns an array of classes.
+ */
+ ;
+
+ _proto.sizingClasses = function sizingClasses(oldOptions) {
+ if (oldOptions.size !== this.size) {
+ return ["sizing", "reset-size" + oldOptions.size, "size" + this.size];
+ } else {
+ return [];
+ }
+ }
+ /**
+ * Return the CSS sizing classes required to switch to the base size. Like
+ * `this.havingSize(BASESIZE).sizingClasses(this)`.
+ */
+ ;
+
+ _proto.baseSizingClasses = function baseSizingClasses() {
+ if (this.size !== Options.BASESIZE) {
+ return ["sizing", "reset-size" + this.size, "size" + Options.BASESIZE];
+ } else {
+ return [];
+ }
+ }
+ /**
+ * Return the font metrics for this size.
+ */
+ ;
+
+ _proto.fontMetrics = function fontMetrics() {
+ if (!this._fontMetrics) {
+ this._fontMetrics = getGlobalMetrics(this.size);
+ }
+
+ return this._fontMetrics;
+ }
+ /**
+ * Gets the CSS color of the current options object
+ */
+ ;
+
+ _proto.getColor = function getColor() {
+ if (this.phantom) {
+ return "transparent";
+ } else {
+ return this.color;
+ }
+ };
+
+ return Options;
+}();
+
+Options_Options.BASESIZE = 6;
+/* harmony default export */ var src_Options = (Options_Options);
+// CONCATENATED MODULE: ./src/units.js
+/**
+ * This file does conversion between units. In particular, it provides
+ * calculateSize to convert other units into ems.
+ */
+
+ // This table gives the number of TeX pts in one of each *absolute* TeX unit.
+// Thus, multiplying a length by this number converts the length from units
+// into pts. Dividing the result by ptPerEm gives the number of ems
+// *assuming* a font size of ptPerEm (normal size, normal style).
+
+var ptPerUnit = {
+ // https://en.wikibooks.org/wiki/LaTeX/Lengths and
+ // https://tex.stackexchange.com/a/8263
+ "pt": 1,
+ // TeX point
+ "mm": 7227 / 2540,
+ // millimeter
+ "cm": 7227 / 254,
+ // centimeter
+ "in": 72.27,
+ // inch
+ "bp": 803 / 800,
+ // big (PostScript) points
+ "pc": 12,
+ // pica
+ "dd": 1238 / 1157,
+ // didot
+ "cc": 14856 / 1157,
+ // cicero (12 didot)
+ "nd": 685 / 642,
+ // new didot
+ "nc": 1370 / 107,
+ // new cicero (12 new didot)
+ "sp": 1 / 65536,
+ // scaled point (TeX's internal smallest unit)
+ // https://tex.stackexchange.com/a/41371
+ "px": 803 / 800 // \pdfpxdimen defaults to 1 bp in pdfTeX and LuaTeX
+
+}; // Dictionary of relative units, for fast validity testing.
+
+var relativeUnit = {
+ "ex": true,
+ "em": true,
+ "mu": true
+};
+
+/**
+ * Determine whether the specified unit (either a string defining the unit
+ * or a "size" parse node containing a unit field) is valid.
+ */
+var validUnit = function validUnit(unit) {
+ if (typeof unit !== "string") {
+ unit = unit.unit;
+ }
+
+ return unit in ptPerUnit || unit in relativeUnit || unit === "ex";
+};
+/*
+ * Convert a "size" parse node (with numeric "number" and string "unit" fields,
+ * as parsed by functions.js argType "size") into a CSS em value for the
+ * current style/scale. `options` gives the current options.
+ */
+
+var units_calculateSize = function calculateSize(sizeValue, options) {
+ var scale;
+
+ if (sizeValue.unit in ptPerUnit) {
+ // Absolute units
+ scale = ptPerUnit[sizeValue.unit] // Convert unit to pt
+ / options.fontMetrics().ptPerEm // Convert pt to CSS em
+ / options.sizeMultiplier; // Unscale to make absolute units
+ } else if (sizeValue.unit === "mu") {
+ // `mu` units scale with scriptstyle/scriptscriptstyle.
+ scale = options.fontMetrics().cssEmPerMu;
+ } else {
+ // Other relative units always refer to the *textstyle* font
+ // in the current size.
+ var unitOptions;
+
+ if (options.style.isTight()) {
+ // isTight() means current style is script/scriptscript.
+ unitOptions = options.havingStyle(options.style.text());
+ } else {
+ unitOptions = options;
+ } // TODO: In TeX these units are relative to the quad of the current
+ // *text* font, e.g. cmr10. KaTeX instead uses values from the
+ // comparably-sized *Computer Modern symbol* font. At 10pt, these
+ // match. At 7pt and 5pt, they differ: cmr7=1.138894, cmsy7=1.170641;
+ // cmr5=1.361133, cmsy5=1.472241. Consider $\scriptsize a\kern1emb$.
+ // TeX \showlists shows a kern of 1.13889 * fontsize;
+ // KaTeX shows a kern of 1.171 * fontsize.
+
+
+ if (sizeValue.unit === "ex") {
+ scale = unitOptions.fontMetrics().xHeight;
+ } else if (sizeValue.unit === "em") {
+ scale = unitOptions.fontMetrics().quad;
+ } else {
+ throw new src_ParseError("Invalid unit: '" + sizeValue.unit + "'");
+ }
+
+ if (unitOptions !== options) {
+ scale *= unitOptions.sizeMultiplier / options.sizeMultiplier;
+ }
+ }
+
+ return Math.min(sizeValue.number * scale, options.maxSize);
+};
+// CONCATENATED MODULE: ./src/buildCommon.js
+/* eslint no-console:0 */
+
+/**
+ * This module contains general functions that can be used for building
+ * different kinds of domTree nodes in a consistent manner.
+ */
+
+
+
+
+
+
+
+/**
+ * Looks up the given symbol in fontMetrics, after applying any symbol
+ * replacements defined in symbol.js
+ */
+var buildCommon_lookupSymbol = function lookupSymbol(value, // TODO(#963): Use a union type for this.
+fontName, mode) {
+ // Replace the value with its replaced value from symbol.js
+ if (src_symbols[mode][value] && src_symbols[mode][value].replace) {
+ value = src_symbols[mode][value].replace;
+ }
+
+ return {
+ value: value,
+ metrics: getCharacterMetrics(value, fontName, mode)
+ };
+};
+/**
+ * Makes a symbolNode after translation via the list of symbols in symbols.js.
+ * Correctly pulls out metrics for the character, and optionally takes a list of
+ * classes to be attached to the node.
+ *
+ * TODO: make argument order closer to makeSpan
+ * TODO: add a separate argument for math class (e.g. `mop`, `mbin`), which
+ * should if present come first in `classes`.
+ * TODO(#953): Make `options` mandatory and always pass it in.
+ */
+
+
+var buildCommon_makeSymbol = function makeSymbol(value, fontName, mode, options, classes) {
+ var lookup = buildCommon_lookupSymbol(value, fontName, mode);
+ var metrics = lookup.metrics;
+ value = lookup.value;
+ var symbolNode;
+
+ if (metrics) {
+ var italic = metrics.italic;
+
+ if (mode === "text" || options && options.font === "mathit") {
+ italic = 0;
+ }
+
+ symbolNode = new domTree_SymbolNode(value, metrics.height, metrics.depth, italic, metrics.skew, metrics.width, classes);
+ } else {
+ // TODO(emily): Figure out a good way to only print this in development
+ typeof console !== "undefined" && console.warn("No character metrics " + ("for '" + value + "' in style '" + fontName + "' and mode '" + mode + "'"));
+ symbolNode = new domTree_SymbolNode(value, 0, 0, 0, 0, 0, classes);
+ }
+
+ if (options) {
+ symbolNode.maxFontSize = options.sizeMultiplier;
+
+ if (options.style.isTight()) {
+ symbolNode.classes.push("mtight");
+ }
+
+ var color = options.getColor();
+
+ if (color) {
+ symbolNode.style.color = color;
+ }
+ }
+
+ return symbolNode;
+};
+/**
+ * Makes a symbol in Main-Regular or AMS-Regular.
+ * Used for rel, bin, open, close, inner, and punct.
+ */
+
+
+var buildCommon_mathsym = function mathsym(value, mode, options, classes) {
+ if (classes === void 0) {
+ classes = [];
+ }
+
+ // Decide what font to render the symbol in by its entry in the symbols
+ // table.
+ // Have a special case for when the value = \ because the \ is used as a
+ // textord in unsupported command errors but cannot be parsed as a regular
+ // text ordinal and is therefore not present as a symbol in the symbols
+ // table for text, as well as a special case for boldsymbol because it
+ // can be used for bold + and -
+ if (options.font === "boldsymbol" && buildCommon_lookupSymbol(value, "Main-Bold", mode).metrics) {
+ return buildCommon_makeSymbol(value, "Main-Bold", mode, options, classes.concat(["mathbf"]));
+ } else if (value === "\\" || src_symbols[mode][value].font === "main") {
+ return buildCommon_makeSymbol(value, "Main-Regular", mode, options, classes);
+ } else {
+ return buildCommon_makeSymbol(value, "AMS-Regular", mode, options, classes.concat(["amsrm"]));
+ }
+};
+/**
+ * Determines which of the two font names (Main-Bold and Math-BoldItalic) and
+ * corresponding style tags (mathbf or boldsymbol) to use for font "boldsymbol",
+ * depending on the symbol. Use this function instead of fontMap for font
+ * "boldsymbol".
+ */
+
+
+var boldsymbol = function boldsymbol(value, mode, options, classes, type) {
+ if (type !== "textord" && buildCommon_lookupSymbol(value, "Math-BoldItalic", mode).metrics) {
+ return {
+ fontName: "Math-BoldItalic",
+ fontClass: "boldsymbol"
+ };
+ } else {
+ // Some glyphs do not exist in Math-BoldItalic so we need to use
+ // Main-Bold instead.
+ return {
+ fontName: "Main-Bold",
+ fontClass: "mathbf"
+ };
+ }
+};
+/**
+ * Makes either a mathord or textord in the correct font and color.
+ */
+
+
+var buildCommon_makeOrd = function makeOrd(group, options, type) {
+ var mode = group.mode;
+ var text = group.text;
+ var classes = ["mord"]; // Math mode or Old font (i.e. \rm)
+
+ var isFont = mode === "math" || mode === "text" && options.font;
+ var fontOrFamily = isFont ? options.font : options.fontFamily;
+
+ if (text.charCodeAt(0) === 0xD835) {
+ // surrogate pairs get special treatment
+ var _wideCharacterFont = wide_character_wideCharacterFont(text, mode),
+ wideFontName = _wideCharacterFont[0],
+ wideFontClass = _wideCharacterFont[1];
+
+ return buildCommon_makeSymbol(text, wideFontName, mode, options, classes.concat(wideFontClass));
+ } else if (fontOrFamily) {
+ var fontName;
+ var fontClasses;
+
+ if (fontOrFamily === "boldsymbol") {
+ var fontData = boldsymbol(text, mode, options, classes, type);
+ fontName = fontData.fontName;
+ fontClasses = [fontData.fontClass];
+ } else if (isFont) {
+ fontName = fontMap[fontOrFamily].fontName;
+ fontClasses = [fontOrFamily];
+ } else {
+ fontName = retrieveTextFontName(fontOrFamily, options.fontWeight, options.fontShape);
+ fontClasses = [fontOrFamily, options.fontWeight, options.fontShape];
+ }
+
+ if (buildCommon_lookupSymbol(text, fontName, mode).metrics) {
+ return buildCommon_makeSymbol(text, fontName, mode, options, classes.concat(fontClasses));
+ } else if (ligatures.hasOwnProperty(text) && fontName.substr(0, 10) === "Typewriter") {
+ // Deconstruct ligatures in monospace fonts (\texttt, \tt).
+ var parts = [];
+
+ for (var i = 0; i < text.length; i++) {
+ parts.push(buildCommon_makeSymbol(text[i], fontName, mode, options, classes.concat(fontClasses)));
+ }
+
+ return buildCommon_makeFragment(parts);
+ }
+ } // Makes a symbol in the default font for mathords and textords.
+
+
+ if (type === "mathord") {
+ return buildCommon_makeSymbol(text, "Math-Italic", mode, options, classes.concat(["mathnormal"]));
+ } else if (type === "textord") {
+ var font = src_symbols[mode][text] && src_symbols[mode][text].font;
+
+ if (font === "ams") {
+ var _fontName = retrieveTextFontName("amsrm", options.fontWeight, options.fontShape);
+
+ return buildCommon_makeSymbol(text, _fontName, mode, options, classes.concat("amsrm", options.fontWeight, options.fontShape));
+ } else if (font === "main" || !font) {
+ var _fontName2 = retrieveTextFontName("textrm", options.fontWeight, options.fontShape);
+
+ return buildCommon_makeSymbol(text, _fontName2, mode, options, classes.concat(options.fontWeight, options.fontShape));
+ } else {
+ // fonts added by plugins
+ var _fontName3 = retrieveTextFontName(font, options.fontWeight, options.fontShape); // We add font name as a css class
+
+
+ return buildCommon_makeSymbol(text, _fontName3, mode, options, classes.concat(_fontName3, options.fontWeight, options.fontShape));
+ }
+ } else {
+ throw new Error("unexpected type: " + type + " in makeOrd");
+ }
+};
+/**
+ * Returns true if subsequent symbolNodes have the same classes, skew, maxFont,
+ * and styles.
+ */
+
+
+var buildCommon_canCombine = function canCombine(prev, next) {
+ if (createClass(prev.classes) !== createClass(next.classes) || prev.skew !== next.skew || prev.maxFontSize !== next.maxFontSize) {
+ return false;
+ }
+
+ for (var style in prev.style) {
+ if (prev.style.hasOwnProperty(style) && prev.style[style] !== next.style[style]) {
+ return false;
+ }
+ }
+
+ for (var _style in next.style) {
+ if (next.style.hasOwnProperty(_style) && prev.style[_style] !== next.style[_style]) {
+ return false;
+ }
+ }
+
+ return true;
+};
+/**
+ * Combine consequetive domTree.symbolNodes into a single symbolNode.
+ * Note: this function mutates the argument.
+ */
+
+
+var buildCommon_tryCombineChars = function tryCombineChars(chars) {
+ for (var i = 0; i < chars.length - 1; i++) {
+ var prev = chars[i];
+ var next = chars[i + 1];
+
+ if (prev instanceof domTree_SymbolNode && next instanceof domTree_SymbolNode && buildCommon_canCombine(prev, next)) {
+ prev.text += next.text;
+ prev.height = Math.max(prev.height, next.height);
+ prev.depth = Math.max(prev.depth, next.depth); // Use the last character's italic correction since we use
+ // it to add padding to the right of the span created from
+ // the combined characters.
+
+ prev.italic = next.italic;
+ chars.splice(i + 1, 1);
+ i--;
+ }
+ }
+
+ return chars;
+};
+/**
+ * Calculate the height, depth, and maxFontSize of an element based on its
+ * children.
+ */
+
+
+var sizeElementFromChildren = function sizeElementFromChildren(elem) {
+ var height = 0;
+ var depth = 0;
+ var maxFontSize = 0;
+
+ for (var i = 0; i < elem.children.length; i++) {
+ var child = elem.children[i];
+
+ if (child.height > height) {
+ height = child.height;
+ }
+
+ if (child.depth > depth) {
+ depth = child.depth;
+ }
+
+ if (child.maxFontSize > maxFontSize) {
+ maxFontSize = child.maxFontSize;
+ }
+ }
+
+ elem.height = height;
+ elem.depth = depth;
+ elem.maxFontSize = maxFontSize;
+};
+/**
+ * Makes a span with the given list of classes, list of children, and options.
+ *
+ * TODO(#953): Ensure that `options` is always provided (currently some call
+ * sites don't pass it) and make the type below mandatory.
+ * TODO: add a separate argument for math class (e.g. `mop`, `mbin`), which
+ * should if present come first in `classes`.
+ */
+
+
+var buildCommon_makeSpan = function makeSpan(classes, children, options, style) {
+ var span = new domTree_Span(classes, children, options, style);
+ sizeElementFromChildren(span);
+ return span;
+}; // SVG one is simpler -- doesn't require height, depth, max-font setting.
+// This is also a separate method for typesafety.
+
+
+var buildCommon_makeSvgSpan = function makeSvgSpan(classes, children, options, style) {
+ return new domTree_Span(classes, children, options, style);
+};
+
+var makeLineSpan = function makeLineSpan(className, options, thickness) {
+ var line = buildCommon_makeSpan([className], [], options);
+ line.height = Math.max(thickness || options.fontMetrics().defaultRuleThickness, options.minRuleThickness);
+ line.style.borderBottomWidth = line.height + "em";
+ line.maxFontSize = 1.0;
+ return line;
+};
+/**
+ * Makes an anchor with the given href, list of classes, list of children,
+ * and options.
+ */
+
+
+var buildCommon_makeAnchor = function makeAnchor(href, classes, children, options) {
+ var anchor = new domTree_Anchor(href, classes, children, options);
+ sizeElementFromChildren(anchor);
+ return anchor;
+};
+/**
+ * Makes a document fragment with the given list of children.
+ */
+
+
+var buildCommon_makeFragment = function makeFragment(children) {
+ var fragment = new tree_DocumentFragment(children);
+ sizeElementFromChildren(fragment);
+ return fragment;
+};
+/**
+ * Wraps group in a span if it's a document fragment, allowing to apply classes
+ * and styles
+ */
+
+
+var buildCommon_wrapFragment = function wrapFragment(group, options) {
+ if (group instanceof tree_DocumentFragment) {
+ return buildCommon_makeSpan([], [group], options);
+ }
+
+ return group;
+}; // These are exact object types to catch typos in the names of the optional fields.
+
+
+// Computes the updated `children` list and the overall depth.
+//
+// This helper function for makeVList makes it easier to enforce type safety by
+// allowing early exits (returns) in the logic.
+var getVListChildrenAndDepth = function getVListChildrenAndDepth(params) {
+ if (params.positionType === "individualShift") {
+ var oldChildren = params.children;
+ var children = [oldChildren[0]]; // Add in kerns to the list of params.children to get each element to be
+ // shifted to the correct specified shift
+
+ var _depth = -oldChildren[0].shift - oldChildren[0].elem.depth;
+
+ var currPos = _depth;
+
+ for (var i = 1; i < oldChildren.length; i++) {
+ var diff = -oldChildren[i].shift - currPos - oldChildren[i].elem.depth;
+ var size = diff - (oldChildren[i - 1].elem.height + oldChildren[i - 1].elem.depth);
+ currPos = currPos + diff;
+ children.push({
+ type: "kern",
+ size: size
+ });
+ children.push(oldChildren[i]);
+ }
+
+ return {
+ children: children,
+ depth: _depth
+ };
+ }
+
+ var depth;
+
+ if (params.positionType === "top") {
+ // We always start at the bottom, so calculate the bottom by adding up
+ // all the sizes
+ var bottom = params.positionData;
+
+ for (var _i = 0; _i < params.children.length; _i++) {
+ var child = params.children[_i];
+ bottom -= child.type === "kern" ? child.size : child.elem.height + child.elem.depth;
+ }
+
+ depth = bottom;
+ } else if (params.positionType === "bottom") {
+ depth = -params.positionData;
+ } else {
+ var firstChild = params.children[0];
+
+ if (firstChild.type !== "elem") {
+ throw new Error('First child must have type "elem".');
+ }
+
+ if (params.positionType === "shift") {
+ depth = -firstChild.elem.depth - params.positionData;
+ } else if (params.positionType === "firstBaseline") {
+ depth = -firstChild.elem.depth;
+ } else {
+ throw new Error("Invalid positionType " + params.positionType + ".");
+ }
+ }
+
+ return {
+ children: params.children,
+ depth: depth
+ };
+};
+/**
+ * Makes a vertical list by stacking elements and kerns on top of each other.
+ * Allows for many different ways of specifying the positioning method.
+ *
+ * See VListParam documentation above.
+ */
+
+
+var buildCommon_makeVList = function makeVList(params, options) {
+ var _getVListChildrenAndD = getVListChildrenAndDepth(params),
+ children = _getVListChildrenAndD.children,
+ depth = _getVListChildrenAndD.depth; // Create a strut that is taller than any list item. The strut is added to
+ // each item, where it will determine the item's baseline. Since it has
+ // `overflow:hidden`, the strut's top edge will sit on the item's line box's
+ // top edge and the strut's bottom edge will sit on the item's baseline,
+ // with no additional line-height spacing. This allows the item baseline to
+ // be positioned precisely without worrying about font ascent and
+ // line-height.
+
+
+ var pstrutSize = 0;
+
+ for (var i = 0; i < children.length; i++) {
+ var child = children[i];
+
+ if (child.type === "elem") {
+ var elem = child.elem;
+ pstrutSize = Math.max(pstrutSize, elem.maxFontSize, elem.height);
+ }
+ }
+
+ pstrutSize += 2;
+ var pstrut = buildCommon_makeSpan(["pstrut"], []);
+ pstrut.style.height = pstrutSize + "em"; // Create a new list of actual children at the correct offsets
+
+ var realChildren = [];
+ var minPos = depth;
+ var maxPos = depth;
+ var currPos = depth;
+
+ for (var _i2 = 0; _i2 < children.length; _i2++) {
+ var _child = children[_i2];
+
+ if (_child.type === "kern") {
+ currPos += _child.size;
+ } else {
+ var _elem = _child.elem;
+ var classes = _child.wrapperClasses || [];
+ var style = _child.wrapperStyle || {};
+ var childWrap = buildCommon_makeSpan(classes, [pstrut, _elem], undefined, style);
+ childWrap.style.top = -pstrutSize - currPos - _elem.depth + "em";
+
+ if (_child.marginLeft) {
+ childWrap.style.marginLeft = _child.marginLeft;
+ }
+
+ if (_child.marginRight) {
+ childWrap.style.marginRight = _child.marginRight;
+ }
+
+ realChildren.push(childWrap);
+ currPos += _elem.height + _elem.depth;
+ }
+
+ minPos = Math.min(minPos, currPos);
+ maxPos = Math.max(maxPos, currPos);
+ } // The vlist contents go in a table-cell with `vertical-align:bottom`.
+ // This cell's bottom edge will determine the containing table's baseline
+ // without overly expanding the containing line-box.
+
+
+ var vlist = buildCommon_makeSpan(["vlist"], realChildren);
+ vlist.style.height = maxPos + "em"; // A second row is used if necessary to represent the vlist's depth.
+
+ var rows;
+
+ if (minPos < 0) {
+ // We will define depth in an empty span with display: table-cell.
+ // It should render with the height that we define. But Chrome, in
+ // contenteditable mode only, treats that span as if it contains some
+ // text content. And that min-height over-rides our desired height.
+ // So we put another empty span inside the depth strut span.
+ var emptySpan = buildCommon_makeSpan([], []);
+ var depthStrut = buildCommon_makeSpan(["vlist"], [emptySpan]);
+ depthStrut.style.height = -minPos + "em"; // Safari wants the first row to have inline content; otherwise it
+ // puts the bottom of the *second* row on the baseline.
+
+ var topStrut = buildCommon_makeSpan(["vlist-s"], [new domTree_SymbolNode("\u200B")]);
+ rows = [buildCommon_makeSpan(["vlist-r"], [vlist, topStrut]), buildCommon_makeSpan(["vlist-r"], [depthStrut])];
+ } else {
+ rows = [buildCommon_makeSpan(["vlist-r"], [vlist])];
+ }
+
+ var vtable = buildCommon_makeSpan(["vlist-t"], rows);
+
+ if (rows.length === 2) {
+ vtable.classes.push("vlist-t2");
+ }
+
+ vtable.height = maxPos;
+ vtable.depth = -minPos;
+ return vtable;
+}; // Glue is a concept from TeX which is a flexible space between elements in
+// either a vertical or horizontal list. In KaTeX, at least for now, it's
+// static space between elements in a horizontal layout.
+
+
+var buildCommon_makeGlue = function makeGlue(measurement, options) {
+ // Make an empty span for the space
+ var rule = buildCommon_makeSpan(["mspace"], [], options);
+ var size = units_calculateSize(measurement, options);
+ rule.style.marginRight = size + "em";
+ return rule;
+}; // Takes font options, and returns the appropriate fontLookup name
+
+
+var retrieveTextFontName = function retrieveTextFontName(fontFamily, fontWeight, fontShape) {
+ var baseFontName = "";
+
+ switch (fontFamily) {
+ case "amsrm":
+ baseFontName = "AMS";
+ break;
+
+ case "textrm":
+ baseFontName = "Main";
+ break;
+
+ case "textsf":
+ baseFontName = "SansSerif";
+ break;
+
+ case "texttt":
+ baseFontName = "Typewriter";
+ break;
+
+ default:
+ baseFontName = fontFamily;
+ // use fonts added by a plugin
+ }
+
+ var fontStylesName;
+
+ if (fontWeight === "textbf" && fontShape === "textit") {
+ fontStylesName = "BoldItalic";
+ } else if (fontWeight === "textbf") {
+ fontStylesName = "Bold";
+ } else if (fontWeight === "textit") {
+ fontStylesName = "Italic";
+ } else {
+ fontStylesName = "Regular";
+ }
+
+ return baseFontName + "-" + fontStylesName;
+};
+/**
+ * Maps TeX font commands to objects containing:
+ * - variant: string used for "mathvariant" attribute in buildMathML.js
+ * - fontName: the "style" parameter to fontMetrics.getCharacterMetrics
+ */
+// A map between tex font commands an MathML mathvariant attribute values
+
+
+var fontMap = {
+ // styles
+ "mathbf": {
+ variant: "bold",
+ fontName: "Main-Bold"
+ },
+ "mathrm": {
+ variant: "normal",
+ fontName: "Main-Regular"
+ },
+ "textit": {
+ variant: "italic",
+ fontName: "Main-Italic"
+ },
+ "mathit": {
+ variant: "italic",
+ fontName: "Main-Italic"
+ },
+ "mathnormal": {
+ variant: "italic",
+ fontName: "Math-Italic"
+ },
+ // "boldsymbol" is missing because they require the use of multiple fonts:
+ // Math-BoldItalic and Main-Bold. This is handled by a special case in
+ // makeOrd which ends up calling boldsymbol.
+ // families
+ "mathbb": {
+ variant: "double-struck",
+ fontName: "AMS-Regular"
+ },
+ "mathcal": {
+ variant: "script",
+ fontName: "Caligraphic-Regular"
+ },
+ "mathfrak": {
+ variant: "fraktur",
+ fontName: "Fraktur-Regular"
+ },
+ "mathscr": {
+ variant: "script",
+ fontName: "Script-Regular"
+ },
+ "mathsf": {
+ variant: "sans-serif",
+ fontName: "SansSerif-Regular"
+ },
+ "mathtt": {
+ variant: "monospace",
+ fontName: "Typewriter-Regular"
+ }
+};
+var svgData = {
+ // path, width, height
+ vec: ["vec", 0.471, 0.714],
+ // values from the font glyph
+ oiintSize1: ["oiintSize1", 0.957, 0.499],
+ // oval to overlay the integrand
+ oiintSize2: ["oiintSize2", 1.472, 0.659],
+ oiiintSize1: ["oiiintSize1", 1.304, 0.499],
+ oiiintSize2: ["oiiintSize2", 1.98, 0.659],
+ leftParenInner: ["leftParenInner", 0.875, 0.3],
+ rightParenInner: ["rightParenInner", 0.875, 0.3]
+};
+
+var buildCommon_staticSvg = function staticSvg(value, options) {
+ // Create a span with inline SVG for the element.
+ var _svgData$value = svgData[value],
+ pathName = _svgData$value[0],
+ width = _svgData$value[1],
+ height = _svgData$value[2];
+ var path = new domTree_PathNode(pathName);
+ var svgNode = new SvgNode([path], {
+ "width": width + "em",
+ "height": height + "em",
+ // Override CSS rule `.katex svg { width: 100% }`
+ "style": "width:" + width + "em",
+ "viewBox": "0 0 " + 1000 * width + " " + 1000 * height,
+ "preserveAspectRatio": "xMinYMin"
+ });
+ var span = buildCommon_makeSvgSpan(["overlay"], [svgNode], options);
+ span.height = height;
+ span.style.height = height + "em";
+ span.style.width = width + "em";
+ return span;
+};
+
+/* harmony default export */ var buildCommon = ({
+ fontMap: fontMap,
+ makeSymbol: buildCommon_makeSymbol,
+ mathsym: buildCommon_mathsym,
+ makeSpan: buildCommon_makeSpan,
+ makeSvgSpan: buildCommon_makeSvgSpan,
+ makeLineSpan: makeLineSpan,
+ makeAnchor: buildCommon_makeAnchor,
+ makeFragment: buildCommon_makeFragment,
+ wrapFragment: buildCommon_wrapFragment,
+ makeVList: buildCommon_makeVList,
+ makeOrd: buildCommon_makeOrd,
+ makeGlue: buildCommon_makeGlue,
+ staticSvg: buildCommon_staticSvg,
+ svgData: svgData,
+ tryCombineChars: buildCommon_tryCombineChars
+});
+// CONCATENATED MODULE: ./src/spacingData.js
+/**
+ * Describes spaces between different classes of atoms.
+ */
+var thinspace = {
+ number: 3,
+ unit: "mu"
+};
+var mediumspace = {
+ number: 4,
+ unit: "mu"
+};
+var thickspace = {
+ number: 5,
+ unit: "mu"
+}; // Making the type below exact with all optional fields doesn't work due to
+// - https://github.com/facebook/flow/issues/4582
+// - https://github.com/facebook/flow/issues/5688
+// However, since *all* fields are optional, $Shape<> works as suggested in 5688
+// above.
+
+// Spacing relationships for display and text styles
+var spacings = {
+ mord: {
+ mop: thinspace,
+ mbin: mediumspace,
+ mrel: thickspace,
+ minner: thinspace
+ },
+ mop: {
+ mord: thinspace,
+ mop: thinspace,
+ mrel: thickspace,
+ minner: thinspace
+ },
+ mbin: {
+ mord: mediumspace,
+ mop: mediumspace,
+ mopen: mediumspace,
+ minner: mediumspace
+ },
+ mrel: {
+ mord: thickspace,
+ mop: thickspace,
+ mopen: thickspace,
+ minner: thickspace
+ },
+ mopen: {},
+ mclose: {
+ mop: thinspace,
+ mbin: mediumspace,
+ mrel: thickspace,
+ minner: thinspace
+ },
+ mpunct: {
+ mord: thinspace,
+ mop: thinspace,
+ mrel: thickspace,
+ mopen: thinspace,
+ mclose: thinspace,
+ mpunct: thinspace,
+ minner: thinspace
+ },
+ minner: {
+ mord: thinspace,
+ mop: thinspace,
+ mbin: mediumspace,
+ mrel: thickspace,
+ mopen: thinspace,
+ mpunct: thinspace,
+ minner: thinspace
+ }
+}; // Spacing relationships for script and scriptscript styles
+
+var tightSpacings = {
+ mord: {
+ mop: thinspace
+ },
+ mop: {
+ mord: thinspace,
+ mop: thinspace
+ },
+ mbin: {},
+ mrel: {},
+ mopen: {},
+ mclose: {
+ mop: thinspace
+ },
+ mpunct: {},
+ minner: {
+ mop: thinspace
+ }
+};
+// CONCATENATED MODULE: ./src/defineFunction.js
+/** Context provided to function handlers for error messages. */
+// Note: reverse the order of the return type union will cause a flow error.
+// See https://github.com/facebook/flow/issues/3663.
+// More general version of `HtmlBuilder` for nodes (e.g. \sum, accent types)
+// whose presence impacts super/subscripting. In this case, ParseNode<"supsub">
+// delegates its HTML building to the HtmlBuilder corresponding to these nodes.
+
+/**
+ * Final function spec for use at parse time.
+ * This is almost identical to `FunctionPropSpec`, except it
+ * 1. includes the function handler, and
+ * 2. requires all arguments except argTypes.
+ * It is generated by `defineFunction()` below.
+ */
+
+/**
+ * All registered functions.
+ * `functions.js` just exports this same dictionary again and makes it public.
+ * `Parser.js` requires this dictionary.
+ */
+var _functions = {};
+/**
+ * All HTML builders. Should be only used in the `define*` and the `build*ML`
+ * functions.
+ */
+
+var _htmlGroupBuilders = {};
+/**
+ * All MathML builders. Should be only used in the `define*` and the `build*ML`
+ * functions.
+ */
+
+var _mathmlGroupBuilders = {};
+function defineFunction(_ref) {
+ var type = _ref.type,
+ names = _ref.names,
+ props = _ref.props,
+ handler = _ref.handler,
+ htmlBuilder = _ref.htmlBuilder,
+ mathmlBuilder = _ref.mathmlBuilder;
+ // Set default values of functions
+ var data = {
+ type: type,
+ numArgs: props.numArgs,
+ argTypes: props.argTypes,
+ greediness: props.greediness === undefined ? 1 : props.greediness,
+ allowedInText: !!props.allowedInText,
+ allowedInMath: props.allowedInMath === undefined ? true : props.allowedInMath,
+ numOptionalArgs: props.numOptionalArgs || 0,
+ infix: !!props.infix,
+ handler: handler
+ };
+
+ for (var i = 0; i < names.length; ++i) {
+ _functions[names[i]] = data;
+ }
+
+ if (type) {
+ if (htmlBuilder) {
+ _htmlGroupBuilders[type] = htmlBuilder;
+ }
+
+ if (mathmlBuilder) {
+ _mathmlGroupBuilders[type] = mathmlBuilder;
+ }
+ }
+}
+/**
+ * Use this to register only the HTML and MathML builders for a function (e.g.
+ * if the function's ParseNode is generated in Parser.js rather than via a
+ * stand-alone handler provided to `defineFunction`).
+ */
+
+function defineFunctionBuilders(_ref2) {
+ var type = _ref2.type,
+ htmlBuilder = _ref2.htmlBuilder,
+ mathmlBuilder = _ref2.mathmlBuilder;
+ defineFunction({
+ type: type,
+ names: [],
+ props: {
+ numArgs: 0
+ },
+ handler: function handler() {
+ throw new Error('Should never be called.');
+ },
+ htmlBuilder: htmlBuilder,
+ mathmlBuilder: mathmlBuilder
+ });
+} // Since the corresponding buildHTML/buildMathML function expects a
+// list of elements, we normalize for different kinds of arguments
+
+var ordargument = function ordargument(arg) {
+ return arg.type === "ordgroup" ? arg.body : [arg];
+};
+// CONCATENATED MODULE: ./src/buildHTML.js
+/**
+ * This file does the main work of building a domTree structure from a parse
+ * tree. The entry point is the `buildHTML` function, which takes a parse tree.
+ * Then, the buildExpression, buildGroup, and various groupBuilders functions
+ * are called, to produce a final HTML tree.
+ */
+
+
+
+
+
+
+
+
+var buildHTML_makeSpan = buildCommon.makeSpan; // Binary atoms (first class `mbin`) change into ordinary atoms (`mord`)
+// depending on their surroundings. See TeXbook pg. 442-446, Rules 5 and 6,
+// and the text before Rule 19.
+
+var binLeftCanceller = ["leftmost", "mbin", "mopen", "mrel", "mop", "mpunct"];
+var binRightCanceller = ["rightmost", "mrel", "mclose", "mpunct"];
+var styleMap = {
+ "display": src_Style.DISPLAY,
+ "text": src_Style.TEXT,
+ "script": src_Style.SCRIPT,
+ "scriptscript": src_Style.SCRIPTSCRIPT
+};
+var DomEnum = {
+ mord: "mord",
+ mop: "mop",
+ mbin: "mbin",
+ mrel: "mrel",
+ mopen: "mopen",
+ mclose: "mclose",
+ mpunct: "mpunct",
+ minner: "minner"
+};
+
+/**
+ * Take a list of nodes, build them in order, and return a list of the built
+ * nodes. documentFragments are flattened into their contents, so the
+ * returned list contains no fragments. `isRealGroup` is true if `expression`
+ * is a real group (no atoms will be added on either side), as opposed to
+ * a partial group (e.g. one created by \color). `surrounding` is an array
+ * consisting type of nodes that will be added to the left and right.
+ */
+var buildHTML_buildExpression = function buildExpression(expression, options, isRealGroup, surrounding) {
+ if (surrounding === void 0) {
+ surrounding = [null, null];
+ }
+
+ // Parse expressions into `groups`.
+ var groups = [];
+
+ for (var i = 0; i < expression.length; i++) {
+ var output = buildHTML_buildGroup(expression[i], options);
+
+ if (output instanceof tree_DocumentFragment) {
+ var children = output.children;
+ groups.push.apply(groups, children);
+ } else {
+ groups.push(output);
+ }
+ } // If `expression` is a partial group, let the parent handle spacings
+ // to avoid processing groups multiple times.
+
+
+ if (!isRealGroup) {
+ return groups;
+ }
+
+ var glueOptions = options;
+
+ if (expression.length === 1) {
+ var node = expression[0];
+
+ if (node.type === "sizing") {
+ glueOptions = options.havingSize(node.size);
+ } else if (node.type === "styling") {
+ glueOptions = options.havingStyle(styleMap[node.style]);
+ }
+ } // Dummy spans for determining spacings between surrounding atoms.
+ // If `expression` has no atoms on the left or right, class "leftmost"
+ // or "rightmost", respectively, is used to indicate it.
+
+
+ var dummyPrev = buildHTML_makeSpan([surrounding[0] || "leftmost"], [], options);
+ var dummyNext = buildHTML_makeSpan([surrounding[1] || "rightmost"], [], options); // TODO: These code assumes that a node's math class is the first element
+ // of its `classes` array. A later cleanup should ensure this, for
+ // instance by changing the signature of `makeSpan`.
+ // Before determining what spaces to insert, perform bin cancellation.
+ // Binary operators change to ordinary symbols in some contexts.
+
+ var isRoot = isRealGroup === "root";
+ traverseNonSpaceNodes(groups, function (node, prev) {
+ var prevType = prev.classes[0];
+ var type = node.classes[0];
+
+ if (prevType === "mbin" && utils.contains(binRightCanceller, type)) {
+ prev.classes[0] = "mord";
+ } else if (type === "mbin" && utils.contains(binLeftCanceller, prevType)) {
+ node.classes[0] = "mord";
+ }
+ }, {
+ node: dummyPrev
+ }, dummyNext, isRoot);
+ traverseNonSpaceNodes(groups, function (node, prev) {
+ var prevType = getTypeOfDomTree(prev);
+ var type = getTypeOfDomTree(node); // 'mtight' indicates that the node is script or scriptscript style.
+
+ var space = prevType && type ? node.hasClass("mtight") ? tightSpacings[prevType][type] : spacings[prevType][type] : null;
+
+ if (space) {
+ // Insert glue (spacing) after the `prev`.
+ return buildCommon.makeGlue(space, glueOptions);
+ }
+ }, {
+ node: dummyPrev
+ }, dummyNext, isRoot);
+ return groups;
+}; // Depth-first traverse non-space `nodes`, calling `callback` with the current and
+// previous node as arguments, optionally returning a node to insert after the
+// previous node. `prev` is an object with the previous node and `insertAfter`
+// function to insert after it. `next` is a node that will be added to the right.
+// Used for bin cancellation and inserting spacings.
+
+var traverseNonSpaceNodes = function traverseNonSpaceNodes(nodes, callback, prev, next, isRoot) {
+ if (next) {
+ // temporarily append the right node, if exists
+ nodes.push(next);
+ }
+
+ var i = 0;
+
+ for (; i < nodes.length; i++) {
+ var node = nodes[i];
+ var partialGroup = buildHTML_checkPartialGroup(node);
+
+ if (partialGroup) {
+ // Recursive DFS
+ // $FlowFixMe: make nodes a $ReadOnlyArray by returning a new array
+ traverseNonSpaceNodes(partialGroup.children, callback, prev, null, isRoot);
+ continue;
+ } // Ignore explicit spaces (e.g., \;, \,) when determining what implicit
+ // spacing should go between atoms of different classes
+
+
+ var nonspace = !node.hasClass("mspace");
+
+ if (nonspace) {
+ var result = callback(node, prev.node);
+
+ if (result) {
+ if (prev.insertAfter) {
+ prev.insertAfter(result);
+ } else {
+ // insert at front
+ nodes.unshift(result);
+ i++;
+ }
+ }
+ }
+
+ if (nonspace) {
+ prev.node = node;
+ } else if (isRoot && node.hasClass("newline")) {
+ prev.node = buildHTML_makeSpan(["leftmost"]); // treat like beginning of line
+ }
+
+ prev.insertAfter = function (index) {
+ return function (n) {
+ nodes.splice(index + 1, 0, n);
+ i++;
+ };
+ }(i);
+ }
+
+ if (next) {
+ nodes.pop();
+ }
+}; // Check if given node is a partial group, i.e., does not affect spacing around.
+
+
+var buildHTML_checkPartialGroup = function checkPartialGroup(node) {
+ if (node instanceof tree_DocumentFragment || node instanceof domTree_Anchor || node instanceof domTree_Span && node.hasClass("enclosing")) {
+ return node;
+ }
+
+ return null;
+}; // Return the outermost node of a domTree.
+
+
+var getOutermostNode = function getOutermostNode(node, side) {
+ var partialGroup = buildHTML_checkPartialGroup(node);
+
+ if (partialGroup) {
+ var children = partialGroup.children;
+
+ if (children.length) {
+ if (side === "right") {
+ return getOutermostNode(children[children.length - 1], "right");
+ } else if (side === "left") {
+ return getOutermostNode(children[0], "left");
+ }
+ }
+ }
+
+ return node;
+}; // Return math atom class (mclass) of a domTree.
+// If `side` is given, it will get the type of the outermost node at given side.
+
+
+var getTypeOfDomTree = function getTypeOfDomTree(node, side) {
+ if (!node) {
+ return null;
+ }
+
+ if (side) {
+ node = getOutermostNode(node, side);
+ } // This makes a lot of assumptions as to where the type of atom
+ // appears. We should do a better job of enforcing this.
+
+
+ return DomEnum[node.classes[0]] || null;
+};
+var makeNullDelimiter = function makeNullDelimiter(options, classes) {
+ var moreClasses = ["nulldelimiter"].concat(options.baseSizingClasses());
+ return buildHTML_makeSpan(classes.concat(moreClasses));
+};
+/**
+ * buildGroup is the function that takes a group and calls the correct groupType
+ * function for it. It also handles the interaction of size and style changes
+ * between parents and children.
+ */
+
+var buildHTML_buildGroup = function buildGroup(group, options, baseOptions) {
+ if (!group) {
+ return buildHTML_makeSpan();
+ }
+
+ if (_htmlGroupBuilders[group.type]) {
+ // Call the groupBuilders function
+ var groupNode = _htmlGroupBuilders[group.type](group, options); // If the size changed between the parent and the current group, account
+ // for that size difference.
+
+ if (baseOptions && options.size !== baseOptions.size) {
+ groupNode = buildHTML_makeSpan(options.sizingClasses(baseOptions), [groupNode], options);
+ var multiplier = options.sizeMultiplier / baseOptions.sizeMultiplier;
+ groupNode.height *= multiplier;
+ groupNode.depth *= multiplier;
+ }
+
+ return groupNode;
+ } else {
+ throw new src_ParseError("Got group of unknown type: '" + group.type + "'");
+ }
+};
+/**
+ * Combine an array of HTML DOM nodes (e.g., the output of `buildExpression`)
+ * into an unbreakable HTML node of class .base, with proper struts to
+ * guarantee correct vertical extent. `buildHTML` calls this repeatedly to
+ * make up the entire expression as a sequence of unbreakable units.
+ */
+
+function buildHTMLUnbreakable(children, options) {
+ // Compute height and depth of this chunk.
+ var body = buildHTML_makeSpan(["base"], children, options); // Add strut, which ensures that the top of the HTML element falls at
+ // the height of the expression, and the bottom of the HTML element
+ // falls at the depth of the expression.
+
+ var strut = buildHTML_makeSpan(["strut"]);
+ strut.style.height = body.height + body.depth + "em";
+ strut.style.verticalAlign = -body.depth + "em";
+ body.children.unshift(strut);
+ return body;
+}
+/**
+ * Take an entire parse tree, and build it into an appropriate set of HTML
+ * nodes.
+ */
+
+
+function buildHTML(tree, options) {
+ // Strip off outer tag wrapper for processing below.
+ var tag = null;
+
+ if (tree.length === 1 && tree[0].type === "tag") {
+ tag = tree[0].tag;
+ tree = tree[0].body;
+ } // Build the expression contained in the tree
+
+
+ var expression = buildHTML_buildExpression(tree, options, "root");
+ var children = []; // Create one base node for each chunk between potential line breaks.
+ // The TeXBook [p.173] says "A formula will be broken only after a
+ // relation symbol like $=$ or $<$ or $\rightarrow$, or after a binary
+ // operation symbol like $+$ or $-$ or $\times$, where the relation or
+ // binary operation is on the ``outer level'' of the formula (i.e., not
+ // enclosed in {...} and not part of an \over construction)."
+
+ var parts = [];
+
+ for (var i = 0; i < expression.length; i++) {
+ parts.push(expression[i]);
+
+ if (expression[i].hasClass("mbin") || expression[i].hasClass("mrel") || expression[i].hasClass("allowbreak")) {
+ // Put any post-operator glue on same line as operator.
+ // Watch for \nobreak along the way, and stop at \newline.
+ var nobreak = false;
+
+ while (i < expression.length - 1 && expression[i + 1].hasClass("mspace") && !expression[i + 1].hasClass("newline")) {
+ i++;
+ parts.push(expression[i]);
+
+ if (expression[i].hasClass("nobreak")) {
+ nobreak = true;
+ }
+ } // Don't allow break if \nobreak among the post-operator glue.
+
+
+ if (!nobreak) {
+ children.push(buildHTMLUnbreakable(parts, options));
+ parts = [];
+ }
+ } else if (expression[i].hasClass("newline")) {
+ // Write the line except the newline
+ parts.pop();
+
+ if (parts.length > 0) {
+ children.push(buildHTMLUnbreakable(parts, options));
+ parts = [];
+ } // Put the newline at the top level
+
+
+ children.push(expression[i]);
+ }
+ }
+
+ if (parts.length > 0) {
+ children.push(buildHTMLUnbreakable(parts, options));
+ } // Now, if there was a tag, build it too and append it as a final child.
+
+
+ var tagChild;
+
+ if (tag) {
+ tagChild = buildHTMLUnbreakable(buildHTML_buildExpression(tag, options, true));
+ tagChild.classes = ["tag"];
+ children.push(tagChild);
+ }
+
+ var htmlNode = buildHTML_makeSpan(["katex-html"], children);
+ htmlNode.setAttribute("aria-hidden", "true"); // Adjust the strut of the tag to be the maximum height of all children
+ // (the height of the enclosing htmlNode) for proper vertical alignment.
+
+ if (tagChild) {
+ var strut = tagChild.children[0];
+ strut.style.height = htmlNode.height + htmlNode.depth + "em";
+ strut.style.verticalAlign = -htmlNode.depth + "em";
+ }
+
+ return htmlNode;
+}
+// CONCATENATED MODULE: ./src/mathMLTree.js
+/**
+ * These objects store data about MathML nodes. This is the MathML equivalent
+ * of the types in domTree.js. Since MathML handles its own rendering, and
+ * since we're mainly using MathML to improve accessibility, we don't manage
+ * any of the styling state that the plain DOM nodes do.
+ *
+ * The `toNode` and `toMarkup` functions work simlarly to how they do in
+ * domTree.js, creating namespaced DOM nodes and HTML text markup respectively.
+ */
+
+
+function newDocumentFragment(children) {
+ return new tree_DocumentFragment(children);
+}
+/**
+ * This node represents a general purpose MathML node of any type. The
+ * constructor requires the type of node to create (for example, `"mo"` or
+ * `"mspace"`, corresponding to `` and `` tags).
+ */
+
+var mathMLTree_MathNode =
+/*#__PURE__*/
+function () {
+ function MathNode(type, children) {
+ this.type = void 0;
+ this.attributes = void 0;
+ this.children = void 0;
+ this.type = type;
+ this.attributes = {};
+ this.children = children || [];
+ }
+ /**
+ * Sets an attribute on a MathML node. MathML depends on attributes to convey a
+ * semantic content, so this is used heavily.
+ */
+
+
+ var _proto = MathNode.prototype;
+
+ _proto.setAttribute = function setAttribute(name, value) {
+ this.attributes[name] = value;
+ }
+ /**
+ * Gets an attribute on a MathML node.
+ */
+ ;
+
+ _proto.getAttribute = function getAttribute(name) {
+ return this.attributes[name];
+ }
+ /**
+ * Converts the math node into a MathML-namespaced DOM element.
+ */
+ ;
+
+ _proto.toNode = function toNode() {
+ var node = document.createElementNS("http://www.w3.org/1998/Math/MathML", this.type);
+
+ for (var attr in this.attributes) {
+ if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {
+ node.setAttribute(attr, this.attributes[attr]);
+ }
+ }
+
+ for (var i = 0; i < this.children.length; i++) {
+ node.appendChild(this.children[i].toNode());
+ }
+
+ return node;
+ }
+ /**
+ * Converts the math node into an HTML markup string.
+ */
+ ;
+
+ _proto.toMarkup = function toMarkup() {
+ var markup = "<" + this.type; // Add the attributes
+
+ for (var attr in this.attributes) {
+ if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {
+ markup += " " + attr + "=\"";
+ markup += utils.escape(this.attributes[attr]);
+ markup += "\"";
+ }
+ }
+
+ markup += ">";
+
+ for (var i = 0; i < this.children.length; i++) {
+ markup += this.children[i].toMarkup();
+ }
+
+ markup += "" + this.type + ">";
+ return markup;
+ }
+ /**
+ * Converts the math node into a string, similar to innerText, but escaped.
+ */
+ ;
+
+ _proto.toText = function toText() {
+ return this.children.map(function (child) {
+ return child.toText();
+ }).join("");
+ };
+
+ return MathNode;
+}();
+/**
+ * This node represents a piece of text.
+ */
+
+var mathMLTree_TextNode =
+/*#__PURE__*/
+function () {
+ function TextNode(text) {
+ this.text = void 0;
+ this.text = text;
+ }
+ /**
+ * Converts the text node into a DOM text node.
+ */
+
+
+ var _proto2 = TextNode.prototype;
+
+ _proto2.toNode = function toNode() {
+ return document.createTextNode(this.text);
+ }
+ /**
+ * Converts the text node into escaped HTML markup
+ * (representing the text itself).
+ */
+ ;
+
+ _proto2.toMarkup = function toMarkup() {
+ return utils.escape(this.toText());
+ }
+ /**
+ * Converts the text node into a string
+ * (representing the text iteself).
+ */
+ ;
+
+ _proto2.toText = function toText() {
+ return this.text;
+ };
+
+ return TextNode;
+}();
+/**
+ * This node represents a space, but may render as or as text,
+ * depending on the width.
+ */
+
+var SpaceNode =
+/*#__PURE__*/
+function () {
+ /**
+ * Create a Space node with width given in CSS ems.
+ */
+ function SpaceNode(width) {
+ this.width = void 0;
+ this.character = void 0;
+ this.width = width; // See https://www.w3.org/TR/2000/WD-MathML2-20000328/chapter6.html
+ // for a table of space-like characters. We use Unicode
+ // representations instead of &LongNames; as it's not clear how to
+ // make the latter via document.createTextNode.
+
+ if (width >= 0.05555 && width <= 0.05556) {
+ this.character = "\u200A"; //  
+ } else if (width >= 0.1666 && width <= 0.1667) {
+ this.character = "\u2009"; //  
+ } else if (width >= 0.2222 && width <= 0.2223) {
+ this.character = "\u2005"; //  
+ } else if (width >= 0.2777 && width <= 0.2778) {
+ this.character = "\u2005\u200A"; //   
+ } else if (width >= -0.05556 && width <= -0.05555) {
+ this.character = "\u200A\u2063"; // ​
+ } else if (width >= -0.1667 && width <= -0.1666) {
+ this.character = "\u2009\u2063"; // ​
+ } else if (width >= -0.2223 && width <= -0.2222) {
+ this.character = "\u205F\u2063"; // ​
+ } else if (width >= -0.2778 && width <= -0.2777) {
+ this.character = "\u2005\u2063"; // ​
+ } else {
+ this.character = null;
+ }
+ }
+ /**
+ * Converts the math node into a MathML-namespaced DOM element.
+ */
+
+
+ var _proto3 = SpaceNode.prototype;
+
+ _proto3.toNode = function toNode() {
+ if (this.character) {
+ return document.createTextNode(this.character);
+ } else {
+ var node = document.createElementNS("http://www.w3.org/1998/Math/MathML", "mspace");
+ node.setAttribute("width", this.width + "em");
+ return node;
+ }
+ }
+ /**
+ * Converts the math node into an HTML markup string.
+ */
+ ;
+
+ _proto3.toMarkup = function toMarkup() {
+ if (this.character) {
+ return "" + this.character + "";
+ } else {
+ return "";
+ }
+ }
+ /**
+ * Converts the math node into a string, similar to innerText.
+ */
+ ;
+
+ _proto3.toText = function toText() {
+ if (this.character) {
+ return this.character;
+ } else {
+ return " ";
+ }
+ };
+
+ return SpaceNode;
+}();
+
+/* harmony default export */ var mathMLTree = ({
+ MathNode: mathMLTree_MathNode,
+ TextNode: mathMLTree_TextNode,
+ SpaceNode: SpaceNode,
+ newDocumentFragment: newDocumentFragment
+});
+// CONCATENATED MODULE: ./src/buildMathML.js
+/**
+ * This file converts a parse tree into a cooresponding MathML tree. The main
+ * entry point is the `buildMathML` function, which takes a parse tree from the
+ * parser.
+ */
+
+
+
+
+
+
+
+
+
+/**
+ * Takes a symbol and converts it into a MathML text node after performing
+ * optional replacement from symbols.js.
+ */
+var buildMathML_makeText = function makeText(text, mode, options) {
+ if (src_symbols[mode][text] && src_symbols[mode][text].replace && text.charCodeAt(0) !== 0xD835 && !(ligatures.hasOwnProperty(text) && options && (options.fontFamily && options.fontFamily.substr(4, 2) === "tt" || options.font && options.font.substr(4, 2) === "tt"))) {
+ text = src_symbols[mode][text].replace;
+ }
+
+ return new mathMLTree.TextNode(text);
+};
+/**
+ * Wrap the given array of nodes in an node if needed, i.e.,
+ * unless the array has length 1. Always returns a single node.
+ */
+
+var buildMathML_makeRow = function makeRow(body) {
+ if (body.length === 1) {
+ return body[0];
+ } else {
+ return new mathMLTree.MathNode("mrow", body);
+ }
+};
+/**
+ * Returns the math variant as a string or null if none is required.
+ */
+
+var buildMathML_getVariant = function getVariant(group, options) {
+ // Handle \text... font specifiers as best we can.
+ // MathML has a limited list of allowable mathvariant specifiers; see
+ // https://www.w3.org/TR/MathML3/chapter3.html#presm.commatt
+ if (options.fontFamily === "texttt") {
+ return "monospace";
+ } else if (options.fontFamily === "textsf") {
+ if (options.fontShape === "textit" && options.fontWeight === "textbf") {
+ return "sans-serif-bold-italic";
+ } else if (options.fontShape === "textit") {
+ return "sans-serif-italic";
+ } else if (options.fontWeight === "textbf") {
+ return "bold-sans-serif";
+ } else {
+ return "sans-serif";
+ }
+ } else if (options.fontShape === "textit" && options.fontWeight === "textbf") {
+ return "bold-italic";
+ } else if (options.fontShape === "textit") {
+ return "italic";
+ } else if (options.fontWeight === "textbf") {
+ return "bold";
+ }
+
+ var font = options.font;
+
+ if (!font || font === "mathnormal") {
+ return null;
+ }
+
+ var mode = group.mode;
+
+ if (font === "mathit") {
+ return "italic";
+ } else if (font === "boldsymbol") {
+ return group.type === "textord" ? "bold" : "bold-italic";
+ } else if (font === "mathbf") {
+ return "bold";
+ } else if (font === "mathbb") {
+ return "double-struck";
+ } else if (font === "mathfrak") {
+ return "fraktur";
+ } else if (font === "mathscr" || font === "mathcal") {
+ // MathML makes no distinction between script and caligrahpic
+ return "script";
+ } else if (font === "mathsf") {
+ return "sans-serif";
+ } else if (font === "mathtt") {
+ return "monospace";
+ }
+
+ var text = group.text;
+
+ if (utils.contains(["\\imath", "\\jmath"], text)) {
+ return null;
+ }
+
+ if (src_symbols[mode][text] && src_symbols[mode][text].replace) {
+ text = src_symbols[mode][text].replace;
+ }
+
+ var fontName = buildCommon.fontMap[font].fontName;
+
+ if (getCharacterMetrics(text, fontName, mode)) {
+ return buildCommon.fontMap[font].variant;
+ }
+
+ return null;
+};
+/**
+ * Takes a list of nodes, builds them, and returns a list of the generated
+ * MathML nodes. Also combine consecutive outputs into a single
+ * tag.
+ */
+
+var buildMathML_buildExpression = function buildExpression(expression, options, isOrdgroup) {
+ if (expression.length === 1) {
+ var group = buildMathML_buildGroup(expression[0], options);
+
+ if (isOrdgroup && group instanceof mathMLTree_MathNode && group.type === "mo") {
+ // When TeX writers want to suppress spacing on an operator,
+ // they often put the operator by itself inside braces.
+ group.setAttribute("lspace", "0em");
+ group.setAttribute("rspace", "0em");
+ }
+
+ return [group];
+ }
+
+ var groups = [];
+ var lastGroup;
+
+ for (var i = 0; i < expression.length; i++) {
+ var _group = buildMathML_buildGroup(expression[i], options);
+
+ if (_group instanceof mathMLTree_MathNode && lastGroup instanceof mathMLTree_MathNode) {
+ // Concatenate adjacent s
+ if (_group.type === 'mtext' && lastGroup.type === 'mtext' && _group.getAttribute('mathvariant') === lastGroup.getAttribute('mathvariant')) {
+ var _lastGroup$children;
+
+ (_lastGroup$children = lastGroup.children).push.apply(_lastGroup$children, _group.children);
+
+ continue; // Concatenate adjacent s
+ } else if (_group.type === 'mn' && lastGroup.type === 'mn') {
+ var _lastGroup$children2;
+
+ (_lastGroup$children2 = lastGroup.children).push.apply(_lastGroup$children2, _group.children);
+
+ continue; // Concatenate ... followed by .
+ } else if (_group.type === 'mi' && _group.children.length === 1 && lastGroup.type === 'mn') {
+ var child = _group.children[0];
+
+ if (child instanceof mathMLTree_TextNode && child.text === '.') {
+ var _lastGroup$children3;
+
+ (_lastGroup$children3 = lastGroup.children).push.apply(_lastGroup$children3, _group.children);
+
+ continue;
+ }
+ } else if (lastGroup.type === 'mi' && lastGroup.children.length === 1) {
+ var lastChild = lastGroup.children[0];
+
+ if (lastChild instanceof mathMLTree_TextNode && lastChild.text === "\u0338" && (_group.type === 'mo' || _group.type === 'mi' || _group.type === 'mn')) {
+ var _child = _group.children[0];
+
+ if (_child instanceof mathMLTree_TextNode && _child.text.length > 0) {
+ // Overlay with combining character long solidus
+ _child.text = _child.text.slice(0, 1) + "\u0338" + _child.text.slice(1);
+ groups.pop();
+ }
+ }
+ }
+ }
+
+ groups.push(_group);
+ lastGroup = _group;
+ }
+
+ return groups;
+};
+/**
+ * Equivalent to buildExpression, but wraps the elements in an
+ * if there's more than one. Returns a single node instead of an array.
+ */
+
+var buildExpressionRow = function buildExpressionRow(expression, options, isOrdgroup) {
+ return buildMathML_makeRow(buildMathML_buildExpression(expression, options, isOrdgroup));
+};
+/**
+ * Takes a group from the parser and calls the appropriate groupBuilders function
+ * on it to produce a MathML node.
+ */
+
+var buildMathML_buildGroup = function buildGroup(group, options) {
+ if (!group) {
+ return new mathMLTree.MathNode("mrow");
+ }
+
+ if (_mathmlGroupBuilders[group.type]) {
+ // Call the groupBuilders function
+ var result = _mathmlGroupBuilders[group.type](group, options);
+ return result;
+ } else {
+ throw new src_ParseError("Got group of unknown type: '" + group.type + "'");
+ }
+};
+/**
+ * Takes a full parse tree and settings and builds a MathML representation of
+ * it. In particular, we put the elements from building the parse tree into a
+ * tag so we can also include that TeX source as an annotation.
+ *
+ * Note that we actually return a domTree element with a `