highmark-markdown 1.2.70 → 1.2.72

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (245) hide show
  1. package/.aiignore +7 -9
  2. package/.swcrc +4 -3
  3. package/example.js +11655 -33035
  4. package/lib/attributeNames.js +7 -7
  5. package/lib/constants.js +19 -19
  6. package/lib/example/constants.js +7 -7
  7. package/lib/example/customEventTypes.js +9 -9
  8. package/lib/example/importer.js +72 -28
  9. package/lib/example/indexOptions.js +3 -3
  10. package/lib/example/view/button/page.js +34 -135
  11. package/lib/example/view/button/tab/css.js +14 -114
  12. package/lib/example/view/button/tab/html.js +14 -114
  13. package/lib/example/view/button/tab/markdown.js +14 -114
  14. package/lib/example/view/button/tab/markdownStyle.js +14 -114
  15. package/lib/example/view/button/tab/plainText.js +14 -114
  16. package/lib/example/view/button/tab/preview.js +14 -114
  17. package/lib/example/view/button/tab.js +36 -136
  18. package/lib/example/view/div/container/css.js +15 -153
  19. package/lib/example/view/div/container/html.js +19 -157
  20. package/lib/example/view/div/container/markdown.js +38 -190
  21. package/lib/example/view/div/container/markdownStyle.js +39 -191
  22. package/lib/example/view/div/container/plainText.js +15 -153
  23. package/lib/example/view/div/container/preview.js +25 -177
  24. package/lib/example/view/div/container.js +20 -156
  25. package/lib/example/view/div/html.js +18 -173
  26. package/lib/example/view/div/pageButtons.js +63 -236
  27. package/lib/example/view/div/preview.js +58 -268
  28. package/lib/example/view/div/sizeable/left.js +13 -104
  29. package/lib/example/view/div/tabButtons/left.js +42 -161
  30. package/lib/example/view/div/tabButtons/right.js +75 -198
  31. package/lib/example/view/div/tabButtons.js +15 -172
  32. package/lib/example/view/textarea/css.js +29 -147
  33. package/lib/example/view/textarea/markdown.js +29 -145
  34. package/lib/example/view/textarea/markdownStyle.js +29 -145
  35. package/lib/example/view/textarea/parseTree/css.js +21 -132
  36. package/lib/example/view/textarea/parseTree/html.js +21 -132
  37. package/lib/example/view/textarea/parseTree/markdown.js +17 -129
  38. package/lib/example/view/textarea/parseTree/markdownStyle.js +17 -129
  39. package/lib/example/view/textarea/parseTree.js +20 -135
  40. package/lib/example/view/textarea/plainText.js +32 -153
  41. package/lib/example/view/textarea.js +16 -23
  42. package/lib/example/view/xmp.js +30 -187
  43. package/lib/example/view.js +281 -518
  44. package/lib/example.js +10 -10
  45. package/lib/index/item.js +25 -87
  46. package/lib/index/list.js +29 -62
  47. package/lib/index/match.js +23 -62
  48. package/lib/index.js +34 -34
  49. package/lib/letters.js +3 -3
  50. package/lib/map/className.js +6 -6
  51. package/lib/map/node/css.js +50 -42
  52. package/lib/map/node/html.js +108 -71
  53. package/lib/map/nonTerminalNode/markdown.js +49 -40
  54. package/lib/map/nonTerminalNode/markdownStyle.js +49 -40
  55. package/lib/map/tagName.js +6 -6
  56. package/lib/markdown/bnf.js +300 -3
  57. package/lib/markdown/entries.js +3 -3
  58. package/lib/markdown/lexer.js +23 -126
  59. package/lib/markdown/parser.js +18 -121
  60. package/lib/markdownStyle/bnf.js +80 -3
  61. package/lib/markdownStyle/entries.js +8 -8
  62. package/lib/markdownStyle/lexer.js +23 -126
  63. package/lib/markdownStyle/parser.js +18 -121
  64. package/lib/mixins/node.js +53 -53
  65. package/lib/mixins/token.js +13 -13
  66. package/lib/node/css/amount.js +16 -110
  67. package/lib/node/css/argument.js +8 -95
  68. package/lib/node/css/arguments.js +13 -127
  69. package/lib/node/css/class.js +13 -127
  70. package/lib/node/css/colour.js +16 -110
  71. package/lib/node/css/content.js +12 -103
  72. package/lib/node/css/declaration.js +19 -109
  73. package/lib/node/css/identifier.js +16 -110
  74. package/lib/node/css/name.js +13 -127
  75. package/lib/node/css/pseudoClass.js +13 -127
  76. package/lib/node/css/ruleName.js +43 -137
  77. package/lib/node/css/ruleSet.js +45 -139
  78. package/lib/node/css/selector.js +8 -95
  79. package/lib/node/css/selectors.js +19 -110
  80. package/lib/node/css/selectorsList.js +22 -115
  81. package/lib/node/css/string.js +16 -110
  82. package/lib/node/css/target.js +12 -103
  83. package/lib/node/css/topmost.js +70 -182
  84. package/lib/node/css/value.js +12 -126
  85. package/lib/node/css/values.js +16 -107
  86. package/lib/node/css/verbatim.js +35 -132
  87. package/lib/node/css.js +66 -275
  88. package/lib/node/html/anchor/contents.js +8 -92
  89. package/lib/node/html/anchor/footnote.js +8 -92
  90. package/lib/node/html/anchor/index.js +8 -92
  91. package/lib/node/html/anchor.js +38 -157
  92. package/lib/node/html/container.js +24 -154
  93. package/lib/node/html/directive/contents.js +8 -95
  94. package/lib/node/html/directive/footnotes.js +8 -95
  95. package/lib/node/html/directive/index.js +8 -95
  96. package/lib/node/html/directive/pageNumber.js +8 -95
  97. package/lib/node/html/directive.js +23 -123
  98. package/lib/node/html/division.js +127 -273
  99. package/lib/node/html/error.js +41 -179
  100. package/lib/node/html/footnote.js +40 -149
  101. package/lib/node/html/heading/index.js +61 -183
  102. package/lib/node/html/heading/primary.js +12 -112
  103. package/lib/node/html/heading/quaternary.js +12 -112
  104. package/lib/node/html/heading/secondary.js +12 -112
  105. package/lib/node/html/heading/tertiary.js +12 -112
  106. package/lib/node/html/heading.js +30 -147
  107. package/lib/node/html/image.js +76 -207
  108. package/lib/node/html/item/contents.js +20 -124
  109. package/lib/node/html/item/footnote.js +21 -125
  110. package/lib/node/html/item/index.js +39 -145
  111. package/lib/node/html/item/ordered.js +23 -133
  112. package/lib/node/html/item/unordered.js +10 -110
  113. package/lib/node/html/line/block.js +15 -119
  114. package/lib/node/html/line.js +89 -242
  115. package/lib/node/html/link/contents.js +36 -153
  116. package/lib/node/html/link/email.js +89 -243
  117. package/lib/node/html/link/footnote.js +94 -238
  118. package/lib/node/html/link/hyper.js +89 -243
  119. package/lib/node/html/link/index.js +67 -222
  120. package/lib/node/html/list/contents.js +20 -124
  121. package/lib/node/html/list/footnotes.js +40 -160
  122. package/lib/node/html/list/index.js +20 -124
  123. package/lib/node/html/list/ordered.js +10 -110
  124. package/lib/node/html/list/unordered.js +10 -110
  125. package/lib/node/html/listing/block.js +33 -177
  126. package/lib/node/html/listing/inline.js +35 -174
  127. package/lib/node/html/pageNumber.js +65 -216
  128. package/lib/node/html/paragraph.js +10 -110
  129. package/lib/node/html/reference.js +10 -110
  130. package/lib/node/html/table.js +10 -110
  131. package/lib/node/html/tableBody.js +10 -110
  132. package/lib/node/html/tableBodyCell.js +10 -110
  133. package/lib/node/html/tableBodyRow.js +10 -110
  134. package/lib/node/html/tableHead.js +10 -110
  135. package/lib/node/html/tableHeadCell.js +10 -110
  136. package/lib/node/html/tableHeadRow.js +10 -110
  137. package/lib/node/html/text/block.js +10 -110
  138. package/lib/node/html/text/comma.js +21 -128
  139. package/lib/node/html/text/emphasised.js +14 -118
  140. package/lib/node/html/text/index.js +28 -143
  141. package/lib/node/html/text/inline.js +34 -147
  142. package/lib/node/html/text/plain.js +10 -110
  143. package/lib/node/html/text/strong.js +14 -118
  144. package/lib/node/html/text/stronglyEmphasised.js +66 -208
  145. package/lib/node/html/text.js +24 -162
  146. package/lib/node/html/topmost.js +100 -240
  147. package/lib/node/html.js +256 -554
  148. package/lib/node/markdown/blockEnd.js +5 -89
  149. package/lib/node/markdown/blockStart.js +18 -113
  150. package/lib/node/markdown/className.js +12 -100
  151. package/lib/node/markdown/container.js +18 -113
  152. package/lib/node/markdown/directive/embed.js +39 -137
  153. package/lib/node/markdown/directive/include.js +39 -137
  154. package/lib/node/markdown/division.js +70 -216
  155. package/lib/node/markdown/document.js +44 -147
  156. package/lib/node/markdown/error.js +12 -100
  157. package/lib/node/markdown/footnote.js +12 -100
  158. package/lib/node/markdown/hyperlink.js +34 -131
  159. package/lib/node/markdown/image.js +12 -100
  160. package/lib/node/markdown/item/ordered.js +15 -103
  161. package/lib/node/markdown/link/email.js +34 -131
  162. package/lib/node/markdown/link/footnote.js +14 -102
  163. package/lib/node/markdown/listng/block.js +12 -100
  164. package/lib/node/markdown/listng/inline.js +18 -106
  165. package/lib/node/markdown/path.js +12 -100
  166. package/lib/node/markdown/reference.js +15 -103
  167. package/lib/node/markdown/subDivision.js +35 -126
  168. package/lib/node/markdown/text/block.js +5 -89
  169. package/lib/node/markdown/text/plain.js +5 -89
  170. package/lib/node/markdown/text.js +46 -134
  171. package/lib/node/markdown.js +34 -169
  172. package/lib/node/markdownStyle/amount.js +13 -101
  173. package/lib/node/markdownStyle/argument.js +5 -89
  174. package/lib/node/markdownStyle/arguments.js +5 -89
  175. package/lib/node/markdownStyle/colour.js +12 -100
  176. package/lib/node/markdownStyle/content.js +21 -109
  177. package/lib/node/markdownStyle/declaration.js +5 -89
  178. package/lib/node/markdownStyle/document.js +5 -89
  179. package/lib/node/markdownStyle/error.js +5 -89
  180. package/lib/node/markdownStyle/identifier.js +13 -101
  181. package/lib/node/markdownStyle/name.js +5 -89
  182. package/lib/node/markdownStyle/nonsense.js +5 -89
  183. package/lib/node/markdownStyle/pseudoClass.js +5 -89
  184. package/lib/node/markdownStyle/ruleName.js +12 -100
  185. package/lib/node/markdownStyle/ruleSet.js +5 -89
  186. package/lib/node/markdownStyle/selector.js +5 -89
  187. package/lib/node/markdownStyle/selectors.js +5 -89
  188. package/lib/node/markdownStyle/selectorsList.js +5 -89
  189. package/lib/node/markdownStyle/string.js +12 -100
  190. package/lib/node/markdownStyle/target.js +12 -100
  191. package/lib/node/markdownStyle/value.js +5 -89
  192. package/lib/node/markdownStyle/values.js +5 -89
  193. package/lib/node/markdownStyle/verbatim.js +5 -89
  194. package/lib/node/markdownStyle.js +16 -135
  195. package/lib/prepends.js +4 -4
  196. package/lib/queries/markdown.js +7 -7
  197. package/lib/queries/markdownStyle.js +7 -7
  198. package/lib/ruleNames/markdown.js +145 -145
  199. package/lib/ruleNames/markdownStyle.js +51 -51
  200. package/lib/style/defaultMarkdown.js +247 -3
  201. package/lib/style/font.js +54 -3
  202. package/lib/styleElement/markdown/default.js +17 -131
  203. package/lib/styleElement/markdown.js +30 -151
  204. package/lib/styleElement.js +30 -69
  205. package/lib/targets.js +3 -3
  206. package/lib/tokenTypes.js +39 -39
  207. package/lib/transform/css/ruleSet.js +15 -106
  208. package/lib/transform/css/selectors.js +17 -108
  209. package/lib/transform/css/selectorsList.js +28 -121
  210. package/lib/transform/css.js +35 -139
  211. package/lib/transform/html/anchor/index.js +11 -99
  212. package/lib/transform/html/division.js +18 -112
  213. package/lib/transform/html/footnote.js +25 -122
  214. package/lib/transform/html/heading/index.js +7 -91
  215. package/lib/transform/html/index.js +44 -139
  216. package/lib/transform/html/item/contents.js +23 -111
  217. package/lib/transform/html/item/footnote.js +11 -99
  218. package/lib/transform/html/item/index.js +11 -99
  219. package/lib/transform/html/line.js +10 -98
  220. package/lib/transform/html/link/contents.js +20 -111
  221. package/lib/transform/html/link/footnote.js +36 -140
  222. package/lib/transform/html/list/contents.js +37 -151
  223. package/lib/transform/html/list/footnotes.js +19 -110
  224. package/lib/transform/html/list/index.js +16 -100
  225. package/lib/transform/html/pageNumber.js +15 -106
  226. package/lib/transform/html.js +28 -132
  227. package/lib/transform/markdown/directive/embed.js +9 -120
  228. package/lib/transform/markdown/directive/ignore.js +6 -90
  229. package/lib/transform/markdown/directive/include.js +15 -129
  230. package/lib/transform/markdown/subDivision.js +6 -90
  231. package/lib/transform/markdown.js +7 -134
  232. package/lib/utilities/contents.js +74 -145
  233. package/lib/utilities/css.js +12 -16
  234. package/lib/utilities/dom.js +11 -11
  235. package/lib/utilities/entities.js +2 -2
  236. package/lib/utilities/entries.js +5 -5
  237. package/lib/utilities/grammar.js +57 -86
  238. package/lib/utilities/html.js +21 -25
  239. package/lib/utilities/index.js +76 -89
  240. package/lib/utilities/markdown.js +14 -17
  241. package/lib/utilities/markdownStyle.js +2 -2
  242. package/lib/utilities/object.js +16 -16
  243. package/lib/utilities/query.js +13 -14
  244. package/lib/utilities/string.js +2 -2
  245. package/package.json +3 -3
@@ -8,539 +8,302 @@ Object.defineProperty(exports, "default", {
8
8
  return _default;
9
9
  }
10
10
  });
11
- var _easywithstyle = /*#__PURE__*/ _interop_require_default(require("easy-with-style"));
12
- var _easy = require("easy");
13
- var _index = require("../index");
14
- var _easylayout = require("easy-layout");
15
- var _indexOptions = /*#__PURE__*/ _interop_require_default(require("./indexOptions"));
16
- var _pageButtons = /*#__PURE__*/ _interop_require_default(require("./view/div/pageButtons"));
17
- var _left = /*#__PURE__*/ _interop_require_default(require("./view/div/sizeable/left"));
18
- var _css = /*#__PURE__*/ _interop_require_default(require("./view/div/container/css"));
19
- var _html = /*#__PURE__*/ _interop_require_default(require("./view/div/container/html"));
20
- var _left1 = /*#__PURE__*/ _interop_require_default(require("./view/div/tabButtons/left"));
21
- var _right = /*#__PURE__*/ _interop_require_default(require("./view/div/tabButtons/right"));
22
- var _preview = /*#__PURE__*/ _interop_require_default(require("./view/div/container/preview"));
23
- var _markdown = /*#__PURE__*/ _interop_require_default(require("./view/div/container/markdown"));
24
- var _css1 = /*#__PURE__*/ _interop_require_default(require("./view/textarea/parseTree/css"));
25
- var _html1 = /*#__PURE__*/ _interop_require_default(require("./view/textarea/parseTree/html"));
26
- var _plainText = /*#__PURE__*/ _interop_require_default(require("./view/div/container/plainText"));
27
- var _markdownStyle = /*#__PURE__*/ _interop_require_default(require("./view/div/container/markdownStyle"));
28
- var _targets = require("../targets");
29
- var _importer = require("./importer");
30
- var _constants = require("./constants");
31
- function _assert_this_initialized(self) {
32
- if (self === void 0) {
33
- throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
34
- }
35
- return self;
36
- }
37
- function _call_super(_this, derived, args) {
38
- derived = _get_prototype_of(derived);
39
- return _possible_constructor_return(_this, _is_native_reflect_construct() ? Reflect.construct(derived, args || [], _get_prototype_of(_this).constructor) : derived.apply(_this, args));
40
- }
41
- function _class_call_check(instance, Constructor) {
42
- if (!(instance instanceof Constructor)) {
43
- throw new TypeError("Cannot call a class as a function");
44
- }
45
- }
46
- function _construct(Parent, args, Class) {
47
- if (_is_native_reflect_construct()) {
48
- _construct = Reflect.construct;
49
- } else {
50
- _construct = function construct(Parent, args, Class) {
51
- var a = [
52
- null
53
- ];
54
- a.push.apply(a, args);
55
- var Constructor = Function.bind.apply(Parent, a);
56
- var instance = new Constructor();
57
- if (Class) _set_prototype_of(instance, Class.prototype);
58
- return instance;
59
- };
60
- }
61
- return _construct.apply(null, arguments);
62
- }
63
- function _defineProperties(target, props) {
64
- for(var i = 0; i < props.length; i++){
65
- var descriptor = props[i];
66
- descriptor.enumerable = descriptor.enumerable || false;
67
- descriptor.configurable = true;
68
- if ("value" in descriptor) descriptor.writable = true;
69
- Object.defineProperty(target, descriptor.key, descriptor);
70
- }
71
- }
72
- function _create_class(Constructor, protoProps, staticProps) {
73
- if (protoProps) _defineProperties(Constructor.prototype, protoProps);
74
- if (staticProps) _defineProperties(Constructor, staticProps);
75
- return Constructor;
76
- }
77
- function _define_property(obj, key, value) {
78
- if (key in obj) {
79
- Object.defineProperty(obj, key, {
80
- value: value,
81
- enumerable: true,
82
- configurable: true,
83
- writable: true
84
- });
85
- } else {
86
- obj[key] = value;
87
- }
88
- return obj;
89
- }
90
- function _get_prototype_of(o) {
91
- _get_prototype_of = Object.setPrototypeOf ? Object.getPrototypeOf : function getPrototypeOf(o) {
92
- return o.__proto__ || Object.getPrototypeOf(o);
93
- };
94
- return _get_prototype_of(o);
95
- }
96
- function _inherits(subClass, superClass) {
97
- if (typeof superClass !== "function" && superClass !== null) {
98
- throw new TypeError("Super expression must either be null or a function");
99
- }
100
- subClass.prototype = Object.create(superClass && superClass.prototype, {
101
- constructor: {
102
- value: subClass,
103
- writable: true,
104
- configurable: true
105
- }
106
- });
107
- if (superClass) _set_prototype_of(subClass, superClass);
108
- }
11
+ const _easywithstyle = /*#__PURE__*/ _interop_require_default(require("easy-with-style"));
12
+ const _easy = require("easy");
13
+ const _index = require("../index");
14
+ const _easylayout = require("easy-layout");
15
+ const _indexOptions = /*#__PURE__*/ _interop_require_default(require("./indexOptions"));
16
+ const _pageButtons = /*#__PURE__*/ _interop_require_default(require("./view/div/pageButtons"));
17
+ const _left = /*#__PURE__*/ _interop_require_default(require("./view/div/sizeable/left"));
18
+ const _css = /*#__PURE__*/ _interop_require_default(require("./view/div/container/css"));
19
+ const _html = /*#__PURE__*/ _interop_require_default(require("./view/div/container/html"));
20
+ const _left1 = /*#__PURE__*/ _interop_require_default(require("./view/div/tabButtons/left"));
21
+ const _right = /*#__PURE__*/ _interop_require_default(require("./view/div/tabButtons/right"));
22
+ const _preview = /*#__PURE__*/ _interop_require_default(require("./view/div/container/preview"));
23
+ const _markdown = /*#__PURE__*/ _interop_require_default(require("./view/div/container/markdown"));
24
+ const _css1 = /*#__PURE__*/ _interop_require_default(require("./view/textarea/parseTree/css"));
25
+ const _html1 = /*#__PURE__*/ _interop_require_default(require("./view/textarea/parseTree/html"));
26
+ const _plainText = /*#__PURE__*/ _interop_require_default(require("./view/div/container/plainText"));
27
+ const _markdownStyle = /*#__PURE__*/ _interop_require_default(require("./view/div/container/markdownStyle"));
28
+ const _targets = require("../targets");
29
+ const _importer = require("./importer");
30
+ const _constants = require("./constants");
109
31
  function _interop_require_default(obj) {
110
32
  return obj && obj.__esModule ? obj : {
111
33
  default: obj
112
34
  };
113
35
  }
114
- function _is_native_function(fn) {
115
- return Function.toString.call(fn).indexOf("[native code]") !== -1;
116
- }
117
- function _possible_constructor_return(self, call) {
118
- if (call && (_type_of(call) === "object" || typeof call === "function")) {
119
- return call;
120
- }
121
- return _assert_this_initialized(self);
122
- }
123
- function _set_prototype_of(o, p) {
124
- _set_prototype_of = Object.setPrototypeOf || function setPrototypeOf(o, p) {
125
- o.__proto__ = p;
126
- return o;
36
+ const { tokensFromMarkdown, tokensFromMarkdownStyle, documentMarkdownNodeFromTokens, htmlFromMarkdownOptionsAndImporter, documentMarkdownStyleNodeFromTokens, topmostHTMLNodeFromDocumentMarkdownNode, cssFromMarkdownStyleAndCSSSelectorsString, topmostCSSNodeFromDocumentMarkdownStyleNode } = _index.grammarUtilities;
37
+ class View extends _easy.Element {
38
+ pageUpdateCustomHandler = (event, element, index)=>{
39
+ this.updateHTML(index);
127
40
  };
128
- return _set_prototype_of(o, p);
129
- }
130
- function _tagged_template_literal(strings, raw) {
131
- if (!raw) {
132
- raw = strings.slice(0);
41
+ markdownStyleCustomHandler = (event, element)=>{
42
+ this.markdownStyle();
43
+ };
44
+ markdownCustomHandler = (event, element)=>{
45
+ this.markdown();
46
+ };
47
+ plainTextCustomHandler = (event, element)=>{
48
+ this.plainText();
49
+ };
50
+ previewCustomHandler = (event, element)=>{
51
+ this.preview();
52
+ };
53
+ keyUpCustomHandler = (event, element)=>{
54
+ this.update();
55
+ };
56
+ htmlCustomHandler = (event, element)=>{
57
+ this.html();
58
+ };
59
+ cssCustomHandler = (event, element)=>{
60
+ this.css();
61
+ };
62
+ update() {
63
+ this.updateMarkdownStyle();
64
+ this.updateMarkdown();
65
+ this.updateHTML();
66
+ this.updateCSS();
133
67
  }
134
- return Object.freeze(Object.defineProperties(strings, {
135
- raw: {
136
- value: Object.freeze(raw)
68
+ updateMarkdownStyle() {
69
+ const markdownStyle = this.getMarkdownStyle(), tokens = tokensFromMarkdownStyle(markdownStyle), documentMarkdownStyleNode = documentMarkdownStyleNodeFromTokens(tokens);
70
+ if (documentMarkdownStyleNode === null) {
71
+ this.resetMarkdownStyleTokens();
72
+ this.resetDocumentMarkdownStyleNode();
73
+ this.clearMarkdownStyleParseTreeTextarea();
74
+ return;
137
75
  }
138
- }));
139
- }
140
- function _type_of(obj) {
141
- "@swc/helpers - typeof";
142
- return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
143
- }
144
- function _wrap_native_super(Class) {
145
- var _cache = typeof Map === "function" ? new Map() : undefined;
146
- _wrap_native_super = function wrapNativeSuper(Class) {
147
- if (Class === null || !_is_native_function(Class)) return Class;
148
- if (typeof Class !== "function") {
149
- throw new TypeError("Super expression must either be null or a function");
76
+ const node = documentMarkdownStyleNode, parseTree = node.asParseTree(tokens), markdownStyleTokens = tokens; ///
77
+ this.setMarkdownStyleTokens(markdownStyleTokens);
78
+ this.setDocumentMarkdownStyleNode(documentMarkdownStyleNode);
79
+ this.updateMarkdownStyleParseTreeTextarea(parseTree);
80
+ }
81
+ updateMarkdown() {
82
+ const markdown = this.getMarkdown(), tokens = tokensFromMarkdown(markdown), documentMarkdownNode = documentMarkdownNodeFromTokens(tokens);
83
+ if (documentMarkdownNode === null) {
84
+ this.resetMarkdownTokens();
85
+ this.resetDocumentMarkdownNode();
86
+ this.clearMarkdownParseTreeTextarea();
87
+ return;
150
88
  }
151
- if (typeof _cache !== "undefined") {
152
- if (_cache.has(Class)) return _cache.get(Class);
153
- _cache.set(Class, Wrapper);
89
+ let context;
90
+ context = {
91
+ tokens,
92
+ importer: _importer.importer
93
+ };
94
+ documentMarkdownNode.resolve(context);
95
+ const documentMarkdownNodeParseTree = documentMarkdownNode.asParseTree(tokens), markdownParseTree = documentMarkdownNodeParseTree, markdownTokens = tokens; ///
96
+ this.setMarkdownTokens(markdownTokens);
97
+ this.setDocumentMarkdownNode(documentMarkdownNode);
98
+ this.updateMarkdownParseTreeTextarea(markdownParseTree);
99
+ }
100
+ updateHTML(index = 0) {
101
+ this.clearXMP();
102
+ this.clearPreviewDiv();
103
+ this.clearPlainTextTextarea();
104
+ this.clearHTMLParseTreeTextarea();
105
+ this.clearPageButtonsDiv();
106
+ const documentMarkdownNode = this.getDocumentMarkdownNode(), topmostHTMLNode = topmostHTMLNodeFromDocumentMarkdownNode(documentMarkdownNode);
107
+ if (topmostHTMLNode === null) {
108
+ return;
154
109
  }
155
- function Wrapper() {
156
- return _construct(Class, arguments, _get_prototype_of(this).constructor);
110
+ let context;
111
+ const markdownTokens = this.getMarkdownTokens(), tokens = markdownTokens; ///
112
+ context = {
113
+ tokens
114
+ };
115
+ topmostHTMLNode.resolve(context);
116
+ const divisionHTMLNode = topmostHTMLNode.getDivisionHTMLNodeAt(index);
117
+ if (divisionHTMLNode === null) {
118
+ return;
119
+ }
120
+ const divisionHTMLNOdeParseTree = divisionHTMLNode.asParseTree(), htmlParseTree = divisionHTMLNOdeParseTree, divisionHTMLNodes = topmostHTMLNode.getDivisionHTMLNodes(), length = divisionHTMLNodes.length; ///
121
+ context = {
122
+ tokens,
123
+ pathToURL
124
+ };
125
+ this.updatePreviewDiv(divisionHTMLNode, context);
126
+ this.updatePlainTextTextarea(divisionHTMLNode, context);
127
+ this.updateHTMLParseTreeTextarea(htmlParseTree);
128
+ this.updatePageButtonsDiv(length, index);
129
+ const markdown = this.getMarkdown(), options = _indexOptions.default, html = htmlFromMarkdownOptionsAndImporter(markdown, options, _importer.importer);
130
+ this.updateXMP(html, context);
131
+ }
132
+ updateCSS() {
133
+ const markdownStyleTokens = this.getMarkdownStyleTokens(), markdownStyleElement = this.getMarkdownStyleElement(), documentMarkdownStyleNode = this.getDocumentMarkdownStyleNode();
134
+ if (documentMarkdownStyleNode === null) {
135
+ const css = _constants.EMPTY_STRING;
136
+ markdownStyleElement.setCSS(css);
137
+ this.clearCSSParseTreeTextarea();
138
+ this.clearCSS();
139
+ return;
157
140
  }
158
- Wrapper.prototype = Object.create(Class.prototype, {
159
- constructor: {
160
- value: Wrapper,
161
- enumerable: false,
162
- writable: true,
163
- configurable: true
164
- }
141
+ const topmostCSSNode = topmostCSSNodeFromDocumentMarkdownStyleNode(documentMarkdownStyleNode), target = _targets.WEB_TARGET, tokens = markdownStyleTokens, context = {
142
+ target,
143
+ tokens
144
+ };
145
+ topmostCSSNode.resolve(context);
146
+ const topmostCSSNodeParseTree = topmostCSSNode.asParseTree(tokens), cssParseTree = topmostCSSNodeParseTree; ///
147
+ this.updateCSSParseTreeTextarea(cssParseTree);
148
+ const cssSelectorsString = _constants.CSS_SELECTORS_STRING, markdownStyle = this.getMarkdownStyle(), css = cssFromMarkdownStyleAndCSSSelectorsString(markdownStyle, cssSelectorsString);
149
+ markdownStyleElement.setCSS(css);
150
+ this.setCSS(css);
151
+ }
152
+ markdownStyle() {
153
+ this.hideMarkdownContainerDiv();
154
+ this.showMarkdownStyleContainerDiv();
155
+ }
156
+ markdown() {
157
+ this.showMarkdownContainerDiv();
158
+ this.hideMarkdownStyleContainerDiv();
159
+ }
160
+ plainText() {
161
+ this.hideCSSContainerDiv();
162
+ this.hideHTMLContainerDiv();
163
+ this.hidePreviewContainerDiv();
164
+ this.showPlainTextContainerDiv();
165
+ this.hideCSSParseTreeTextarea();
166
+ this.showHTMLParseTreeTextarea();
167
+ }
168
+ preview() {
169
+ this.hideCSSContainerDiv();
170
+ this.hideHTMLContainerDiv();
171
+ this.showPreviewContainerDiv();
172
+ this.hidePlainTextContainerDiv();
173
+ this.hideCSSParseTreeTextarea();
174
+ this.showHTMLParseTreeTextarea();
175
+ }
176
+ html() {
177
+ this.hideCSSContainerDiv();
178
+ this.showHTMLContainerDiv();
179
+ this.hidePreviewContainerDiv();
180
+ this.hidePlainTextContainerDiv();
181
+ this.hideCSSParseTreeTextarea();
182
+ this.showHTMLParseTreeTextarea();
183
+ }
184
+ css() {
185
+ this.showCSSContainerDiv();
186
+ this.hideHTMLContainerDiv();
187
+ this.hidePreviewContainerDiv();
188
+ this.hidePlainTextContainerDiv();
189
+ this.showCSSParseTreeTextarea();
190
+ this.hideHTMLParseTreeTextarea();
191
+ }
192
+ resetMarkdownTokens() {
193
+ const markdownTokens = null;
194
+ this.setMarkdownTokens(markdownTokens);
195
+ }
196
+ resetMarkdownStyleTokens() {
197
+ const markdownStyleTokens = null;
198
+ this.setMarkdownStyleTokens(markdownStyleTokens);
199
+ }
200
+ resetDocumentMarkdownNode() {
201
+ const documentMarkdownNode = null;
202
+ this.setDocumentMarkdownNode(documentMarkdownNode);
203
+ }
204
+ resetDocumentMarkdownStyleNode() {
205
+ const documentMarkdownStyleNode = null;
206
+ this.setDocumentMarkdownStyleNode(documentMarkdownStyleNode);
207
+ }
208
+ getMarkdownStyleElement() {
209
+ const { markdownStyleElement } = this.properties;
210
+ return markdownStyleElement;
211
+ }
212
+ getMarkdownTokens() {
213
+ const { markdownTokens } = this.getState();
214
+ return markdownTokens;
215
+ }
216
+ getMarkdownStyleTokens() {
217
+ const { markdownStyleTokens } = this.getState();
218
+ return markdownStyleTokens;
219
+ }
220
+ getDocumentMarkdownNode() {
221
+ const { topmostMMarkdownNode } = this.getState();
222
+ return topmostMMarkdownNode;
223
+ }
224
+ getDocumentMarkdownStyleNode() {
225
+ const { topmostMMarkdownStyleNode } = this.getState();
226
+ return topmostMMarkdownStyleNode;
227
+ }
228
+ setMarkdownTokens(markdownTokens) {
229
+ this.updateState({
230
+ markdownTokens
165
231
  });
166
- return _set_prototype_of(Wrapper, Class);
167
- };
168
- return _wrap_native_super(Class);
169
- }
170
- function _is_native_reflect_construct() {
171
- try {
172
- var result = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() {}));
173
- } catch (_) {}
174
- return (_is_native_reflect_construct = function() {
175
- return !!result;
176
- })();
177
- }
178
- function _templateObject() {
179
- var data = _tagged_template_literal([
180
- "\n\n padding: 1rem;\n \n"
181
- ]);
182
- _templateObject = function _templateObject() {
183
- return data;
184
- };
185
- return data;
186
- }
187
- var tokensFromMarkdown = _index.grammarUtilities.tokensFromMarkdown, tokensFromMarkdownStyle = _index.grammarUtilities.tokensFromMarkdownStyle, documentMarkdownNodeFromTokens = _index.grammarUtilities.documentMarkdownNodeFromTokens, htmlFromMarkdownOptionsAndImporter = _index.grammarUtilities.htmlFromMarkdownOptionsAndImporter, documentMarkdownStyleNodeFromTokens = _index.grammarUtilities.documentMarkdownStyleNodeFromTokens, topmostHTMLNodeFromDocumentMarkdownNode = _index.grammarUtilities.topmostHTMLNodeFromDocumentMarkdownNode, cssFromMarkdownStyleAndCSSSelectorsString = _index.grammarUtilities.cssFromMarkdownStyleAndCSSSelectorsString, topmostCSSNodeFromDocumentMarkdownStyleNode = _index.grammarUtilities.topmostCSSNodeFromDocumentMarkdownStyleNode;
188
- var View = /*#__PURE__*/ function(Element) {
189
- _inherits(View, Element);
190
- function View() {
191
- _class_call_check(this, View);
192
- var _this;
193
- _this = _call_super(this, View, arguments), _define_property(_this, "pageUpdateCustomHandler", function(event, element, index) {
194
- _this.updateHTML(index);
195
- }), _define_property(_this, "markdownStyleCustomHandler", function(event, element) {
196
- _this.markdownStyle();
197
- }), _define_property(_this, "markdownCustomHandler", function(event, element) {
198
- _this.markdown();
199
- }), _define_property(_this, "plainTextCustomHandler", function(event, element) {
200
- _this.plainText();
201
- }), _define_property(_this, "previewCustomHandler", function(event, element) {
202
- _this.preview();
203
- }), _define_property(_this, "keyUpCustomHandler", function(event, element) {
204
- _this.update();
205
- }), _define_property(_this, "htmlCustomHandler", function(event, element) {
206
- _this.html();
207
- }), _define_property(_this, "cssCustomHandler", function(event, element) {
208
- _this.css();
232
+ }
233
+ setMarkdownStyleTokens(markdownStyleTokens) {
234
+ this.updateState({
235
+ markdownStyleTokens
209
236
  });
210
- return _this;
211
237
  }
212
- _create_class(View, [
213
- {
214
- key: "update",
215
- value: function update() {
216
- this.updateMarkdownStyle();
217
- this.updateMarkdown();
218
- this.updateHTML();
219
- this.updateCSS();
220
- }
221
- },
222
- {
223
- key: "updateMarkdownStyle",
224
- value: function updateMarkdownStyle() {
225
- var markdownStyle = this.getMarkdownStyle(), tokens = tokensFromMarkdownStyle(markdownStyle), documentMarkdownStyleNode = documentMarkdownStyleNodeFromTokens(tokens);
226
- if (documentMarkdownStyleNode === null) {
227
- this.resetMarkdownStyleTokens();
228
- this.resetDocumentMarkdownStyleNode();
229
- this.clearMarkdownStyleParseTreeTextarea();
230
- return;
231
- }
232
- var node = documentMarkdownStyleNode, parseTree = node.asParseTree(tokens), markdownStyleTokens = tokens; ///
233
- this.setMarkdownStyleTokens(markdownStyleTokens);
234
- this.setDocumentMarkdownStyleNode(documentMarkdownStyleNode);
235
- this.updateMarkdownStyleParseTreeTextarea(parseTree);
236
- }
237
- },
238
- {
239
- key: "updateMarkdown",
240
- value: function updateMarkdown() {
241
- var markdown = this.getMarkdown(), tokens = tokensFromMarkdown(markdown), documentMarkdownNode = documentMarkdownNodeFromTokens(tokens);
242
- if (documentMarkdownNode === null) {
243
- this.resetMarkdownTokens();
244
- this.resetDocumentMarkdownNode();
245
- this.clearMarkdownParseTreeTextarea();
246
- return;
247
- }
248
- var context;
249
- context = {
250
- tokens: tokens,
251
- importer: _importer.importer
252
- };
253
- documentMarkdownNode.resolve(context);
254
- var documentMarkdownNodeParseTree = documentMarkdownNode.asParseTree(tokens), markdownParseTree = documentMarkdownNodeParseTree, markdownTokens = tokens; ///
255
- this.setMarkdownTokens(markdownTokens);
256
- this.setDocumentMarkdownNode(documentMarkdownNode);
257
- this.updateMarkdownParseTreeTextarea(markdownParseTree);
258
- }
259
- },
260
- {
261
- key: "updateHTML",
262
- value: function updateHTML() {
263
- var index = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : 0;
264
- this.clearXMP();
265
- this.clearPreviewDiv();
266
- this.clearPlainTextTextarea();
267
- this.clearHTMLParseTreeTextarea();
268
- this.clearPageButtonsDiv();
269
- var documentMarkdownNode = this.getDocumentMarkdownNode(), topmostHTMLNode = topmostHTMLNodeFromDocumentMarkdownNode(documentMarkdownNode);
270
- if (topmostHTMLNode === null) {
271
- return;
272
- }
273
- var context;
274
- var markdownTokens = this.getMarkdownTokens(), tokens = markdownTokens; ///
275
- context = {
276
- tokens: tokens
277
- };
278
- topmostHTMLNode.resolve(context);
279
- var divisionHTMLNode = topmostHTMLNode.getDivisionHTMLNodeAt(index);
280
- if (divisionHTMLNode === null) {
281
- return;
282
- }
283
- var divisionHTMLNOdeParseTree = divisionHTMLNode.asParseTree(), htmlParseTree = divisionHTMLNOdeParseTree, divisionHTMLNodes = topmostHTMLNode.getDivisionHTMLNodes(), length = divisionHTMLNodes.length; ///
284
- context = {
285
- tokens: tokens,
286
- pathToURL: pathToURL
287
- };
288
- this.updatePreviewDiv(divisionHTMLNode, context);
289
- this.updatePlainTextTextarea(divisionHTMLNode, context);
290
- this.updateHTMLParseTreeTextarea(htmlParseTree);
291
- this.updatePageButtonsDiv(length, index);
292
- var markdown = this.getMarkdown(), options = _indexOptions.default, html = htmlFromMarkdownOptionsAndImporter(markdown, options, _importer.importer);
293
- this.updateXMP(html, context);
294
- }
295
- },
296
- {
297
- key: "updateCSS",
298
- value: function updateCSS() {
299
- var markdownStyleTokens = this.getMarkdownStyleTokens(), markdownStyleElement = this.getMarkdownStyleElement(), documentMarkdownStyleNode = this.getDocumentMarkdownStyleNode();
300
- if (documentMarkdownStyleNode === null) {
301
- var css = _constants.EMPTY_STRING;
302
- markdownStyleElement.setCSS(css);
303
- this.clearCSSParseTreeTextarea();
304
- this.clearCSS();
305
- return;
306
- }
307
- var topmostCSSNode = topmostCSSNodeFromDocumentMarkdownStyleNode(documentMarkdownStyleNode), target = _targets.WEB_TARGET, tokens = markdownStyleTokens, context = {
308
- target: target,
309
- tokens: tokens
310
- };
311
- topmostCSSNode.resolve(context);
312
- var topmostCSSNodeParseTree = topmostCSSNode.asParseTree(tokens), cssParseTree = topmostCSSNodeParseTree; ///
313
- this.updateCSSParseTreeTextarea(cssParseTree);
314
- var cssSelectorsString = _constants.CSS_SELECTORS_STRING, markdownStyle = this.getMarkdownStyle(), css1 = cssFromMarkdownStyleAndCSSSelectorsString(markdownStyle, cssSelectorsString);
315
- markdownStyleElement.setCSS(css1);
316
- this.setCSS(css1);
317
- }
318
- },
319
- {
320
- key: "markdownStyle",
321
- value: function markdownStyle() {
322
- this.hideMarkdownContainerDiv();
323
- this.showMarkdownStyleContainerDiv();
324
- }
325
- },
326
- {
327
- key: "markdown",
328
- value: function markdown() {
329
- this.showMarkdownContainerDiv();
330
- this.hideMarkdownStyleContainerDiv();
331
- }
332
- },
333
- {
334
- key: "plainText",
335
- value: function plainText() {
336
- this.hideCSSContainerDiv();
337
- this.hideHTMLContainerDiv();
338
- this.hidePreviewContainerDiv();
339
- this.showPlainTextContainerDiv();
340
- this.hideCSSParseTreeTextarea();
341
- this.showHTMLParseTreeTextarea();
342
- }
343
- },
344
- {
345
- key: "preview",
346
- value: function preview() {
347
- this.hideCSSContainerDiv();
348
- this.hideHTMLContainerDiv();
349
- this.showPreviewContainerDiv();
350
- this.hidePlainTextContainerDiv();
351
- this.hideCSSParseTreeTextarea();
352
- this.showHTMLParseTreeTextarea();
353
- }
354
- },
355
- {
356
- key: "html",
357
- value: function html() {
358
- this.hideCSSContainerDiv();
359
- this.showHTMLContainerDiv();
360
- this.hidePreviewContainerDiv();
361
- this.hidePlainTextContainerDiv();
362
- this.hideCSSParseTreeTextarea();
363
- this.showHTMLParseTreeTextarea();
364
- }
365
- },
366
- {
367
- key: "css",
368
- value: function css() {
369
- this.showCSSContainerDiv();
370
- this.hideHTMLContainerDiv();
371
- this.hidePreviewContainerDiv();
372
- this.hidePlainTextContainerDiv();
373
- this.showCSSParseTreeTextarea();
374
- this.hideHTMLParseTreeTextarea();
375
- }
376
- },
377
- {
378
- key: "resetMarkdownTokens",
379
- value: function resetMarkdownTokens() {
380
- var markdownTokens = null;
381
- this.setMarkdownTokens(markdownTokens);
382
- }
383
- },
384
- {
385
- key: "resetMarkdownStyleTokens",
386
- value: function resetMarkdownStyleTokens() {
387
- var markdownStyleTokens = null;
388
- this.setMarkdownStyleTokens(markdownStyleTokens);
389
- }
390
- },
391
- {
392
- key: "resetDocumentMarkdownNode",
393
- value: function resetDocumentMarkdownNode() {
394
- var documentMarkdownNode = null;
395
- this.setDocumentMarkdownNode(documentMarkdownNode);
396
- }
397
- },
398
- {
399
- key: "resetDocumentMarkdownStyleNode",
400
- value: function resetDocumentMarkdownStyleNode() {
401
- var documentMarkdownStyleNode = null;
402
- this.setDocumentMarkdownStyleNode(documentMarkdownStyleNode);
403
- }
404
- },
405
- {
406
- key: "getMarkdownStyleElement",
407
- value: function getMarkdownStyleElement() {
408
- var markdownStyleElement = this.properties.markdownStyleElement;
409
- return markdownStyleElement;
410
- }
411
- },
412
- {
413
- key: "getMarkdownTokens",
414
- value: function getMarkdownTokens() {
415
- var markdownTokens = this.getState().markdownTokens;
416
- return markdownTokens;
417
- }
418
- },
419
- {
420
- key: "getMarkdownStyleTokens",
421
- value: function getMarkdownStyleTokens() {
422
- var markdownStyleTokens = this.getState().markdownStyleTokens;
423
- return markdownStyleTokens;
424
- }
425
- },
426
- {
427
- key: "getDocumentMarkdownNode",
428
- value: function getDocumentMarkdownNode() {
429
- var topmostMMarkdownNode = this.getState().topmostMMarkdownNode;
430
- return topmostMMarkdownNode;
431
- }
432
- },
433
- {
434
- key: "getDocumentMarkdownStyleNode",
435
- value: function getDocumentMarkdownStyleNode() {
436
- var topmostMMarkdownStyleNode = this.getState().topmostMMarkdownStyleNode;
437
- return topmostMMarkdownStyleNode;
438
- }
439
- },
440
- {
441
- key: "setMarkdownTokens",
442
- value: function setMarkdownTokens(markdownTokens) {
443
- this.updateState({
444
- markdownTokens: markdownTokens
445
- });
446
- }
447
- },
448
- {
449
- key: "setMarkdownStyleTokens",
450
- value: function setMarkdownStyleTokens(markdownStyleTokens) {
451
- this.updateState({
452
- markdownStyleTokens: markdownStyleTokens
453
- });
454
- }
455
- },
456
- {
457
- key: "setDocumentMarkdownNode",
458
- value: function setDocumentMarkdownNode(topmostMMarkdownNode) {
459
- this.updateState({
460
- topmostMMarkdownNode: topmostMMarkdownNode
461
- });
462
- }
463
- },
464
- {
465
- key: "setDocumentMarkdownStyleNode",
466
- value: function setDocumentMarkdownStyleNode(topmostMMarkdownStyleNode) {
467
- this.updateState({
468
- topmostMMarkdownStyleNode: topmostMMarkdownStyleNode
469
- });
470
- }
471
- },
472
- {
473
- key: "setInitialState",
474
- value: function setInitialState() {
475
- var markdownTokens = null, markdownStyleTokens = null, documentMarkdownNode = null, documentMarkdownStyleNode = null;
476
- this.setState({
477
- markdownTokens: markdownTokens,
478
- markdownStyleTokens: markdownStyleTokens,
479
- documentMarkdownNode: documentMarkdownNode,
480
- documentMarkdownStyleNode: documentMarkdownStyleNode
481
- });
482
- }
483
- },
484
- {
485
- key: "didMount",
486
- value: function didMount() {
487
- this.markdown();
488
- this.preview();
489
- this.update();
490
- }
491
- },
492
- {
493
- key: "willUnmount",
494
- value: function willUnmount() {
495
- ///
496
- }
497
- },
498
- {
499
- key: "childElements",
500
- value: function childElements() {
501
- return /*#__PURE__*/ React.createElement(_easylayout.ColumnsDiv, null, /*#__PURE__*/ React.createElement(_left.default, null, /*#__PURE__*/ React.createElement(_left1.default, {
502
- onCustomMarkdown: this.markdownCustomHandler,
503
- onCustomMarkdownStyle: this.markdownStyleCustomHandler
504
- }), /*#__PURE__*/ React.createElement(_markdown.default, {
505
- onCustomKeyUp: this.keyUpCustomHandler
506
- }), /*#__PURE__*/ React.createElement(_markdownStyle.default, {
507
- onCustomKeyUp: this.keyUpCustomHandler
508
- })), /*#__PURE__*/ React.createElement(_easylayout.VerticalSplitterDiv, null), /*#__PURE__*/ React.createElement(_easylayout.ColumnDiv, null, /*#__PURE__*/ React.createElement(_easylayout.RowsDiv, null, /*#__PURE__*/ React.createElement(_right.default, {
509
- onCustomCSS: this.cssCustomHandler,
510
- onCustomHTML: this.htmlCustomHandler,
511
- onCustomPreview: this.previewCustomHandler,
512
- onCustomPlainText: this.plainTextCustomHandler
513
- }), /*#__PURE__*/ React.createElement(_pageButtons.default, {
514
- onCustomPageUpdate: this.pageUpdateCustomHandler
515
- }), /*#__PURE__*/ React.createElement(_css.default, null), /*#__PURE__*/ React.createElement(_html.default, null), /*#__PURE__*/ React.createElement(_preview.default, null), /*#__PURE__*/ React.createElement(_plainText.default, null), /*#__PURE__*/ React.createElement(_html1.default, null), /*#__PURE__*/ React.createElement(_css1.default, null))));
516
- }
517
- },
518
- {
519
- key: "initialise",
520
- value: function initialise() {
521
- this.assignContext();
522
- this.setInitialState();
523
- var _this_constructor = this.constructor, _$initialMarkdown = _this_constructor.initialMarkdown, initialMarkdownStyle = _this_constructor.initialMarkdownStyle, markdownStyle = initialMarkdownStyle, markdown = _$initialMarkdown; ///
524
- this.setMarkdownStyle(markdownStyle);
525
- this.setMarkdown(markdown);
526
- }
527
- }
528
- ]);
529
- return View;
530
- }(_wrap_native_super(_easy.Element));
531
- _define_property(View, "initialMarkdown", _importer.initialMarkdown);
532
- _define_property(View, "initialMarkdownStyle", "");
533
- _define_property(View, "tagName", "div");
534
- _define_property(View, "ignoredProperties", [
535
- "markdownStyleElement"
536
- ]);
537
- _define_property(View, "defaultProperties", {
538
- className: "view"
539
- });
540
- var _default = (0, _easywithstyle.default)(View)(_templateObject());
238
+ setDocumentMarkdownNode(topmostMMarkdownNode) {
239
+ this.updateState({
240
+ topmostMMarkdownNode
241
+ });
242
+ }
243
+ setDocumentMarkdownStyleNode(topmostMMarkdownStyleNode) {
244
+ this.updateState({
245
+ topmostMMarkdownStyleNode
246
+ });
247
+ }
248
+ setInitialState() {
249
+ const markdownTokens = null, markdownStyleTokens = null, documentMarkdownNode = null, documentMarkdownStyleNode = null;
250
+ this.setState({
251
+ markdownTokens,
252
+ markdownStyleTokens,
253
+ documentMarkdownNode,
254
+ documentMarkdownStyleNode
255
+ });
256
+ }
257
+ didMount() {
258
+ this.markdown();
259
+ this.preview();
260
+ this.update();
261
+ }
262
+ willUnmount() {
263
+ ///
264
+ }
265
+ childElements() {
266
+ return /*#__PURE__*/ React.createElement(_easylayout.ColumnsDiv, null, /*#__PURE__*/ React.createElement(_left.default, null, /*#__PURE__*/ React.createElement(_left1.default, {
267
+ onCustomMarkdown: this.markdownCustomHandler,
268
+ onCustomMarkdownStyle: this.markdownStyleCustomHandler
269
+ }), /*#__PURE__*/ React.createElement(_markdown.default, {
270
+ onCustomKeyUp: this.keyUpCustomHandler
271
+ }), /*#__PURE__*/ React.createElement(_markdownStyle.default, {
272
+ onCustomKeyUp: this.keyUpCustomHandler
273
+ })), /*#__PURE__*/ React.createElement(_easylayout.VerticalSplitterDiv, null), /*#__PURE__*/ React.createElement(_easylayout.ColumnDiv, null, /*#__PURE__*/ React.createElement(_easylayout.RowsDiv, null, /*#__PURE__*/ React.createElement(_right.default, {
274
+ onCustomCSS: this.cssCustomHandler,
275
+ onCustomHTML: this.htmlCustomHandler,
276
+ onCustomPreview: this.previewCustomHandler,
277
+ onCustomPlainText: this.plainTextCustomHandler
278
+ }), /*#__PURE__*/ React.createElement(_pageButtons.default, {
279
+ onCustomPageUpdate: this.pageUpdateCustomHandler
280
+ }), /*#__PURE__*/ React.createElement(_css.default, null), /*#__PURE__*/ React.createElement(_html.default, null), /*#__PURE__*/ React.createElement(_preview.default, null), /*#__PURE__*/ React.createElement(_plainText.default, null), /*#__PURE__*/ React.createElement(_html1.default, null), /*#__PURE__*/ React.createElement(_css1.default, null))));
281
+ }
282
+ initialise() {
283
+ this.assignContext();
284
+ this.setInitialState();
285
+ const { initialMarkdown, initialMarkdownStyle } = this.constructor, markdownStyle = initialMarkdownStyle, markdown = initialMarkdown; ///
286
+ this.setMarkdownStyle(markdownStyle);
287
+ this.setMarkdown(markdown);
288
+ }
289
+ static initialMarkdown = _importer.initialMarkdown;
290
+ static initialMarkdownStyle = "";
291
+ static tagName = "div";
292
+ static ignoredProperties = [
293
+ "markdownStyleElement"
294
+ ];
295
+ static defaultProperties = {
296
+ className: "view"
297
+ };
298
+ }
299
+ const _default = (0, _easywithstyle.default)(View)`
300
+
301
+ padding: 1rem;
302
+
303
+ `;
541
304
  function pathToURL(path) {
542
- var url = "https://djalbat.com/".concat(path);
305
+ const url = `https://djalbat.com/${path}`;
543
306
  return url;
544
307
  }
545
308
 
546
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9leGFtcGxlL3ZpZXcuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB3aXRoU3R5bGUgZnJvbSBcImVhc3ktd2l0aC1zdHlsZVwiOyAgLy8vXG5cbmltcG9ydCB7IEVsZW1lbnQgfSBmcm9tIFwiZWFzeVwiO1xuaW1wb3J0IHsgZ3JhbW1hclV0aWxpdGllcyB9IGZyb20gXCIuLi9pbmRleFwiOyAgLy8vXG5pbXBvcnQgeyBSb3dzRGl2LCBDb2x1bW5EaXYsIENvbHVtbnNEaXYsIFZlcnRpY2FsU3BsaXR0ZXJEaXYgfSBmcm9tIFwiZWFzeS1sYXlvdXRcIjtcblxuaW1wb3J0IGluZGV4T3B0aW9ucyBmcm9tIFwiLi9pbmRleE9wdGlvbnNcIjtcbmltcG9ydCBQYWdlQnV0dG9uc0RpdiBmcm9tIFwiLi92aWV3L2Rpdi9wYWdlQnV0dG9uc1wiO1xuaW1wb3J0IExlZnRTaXplYWJsZURpdiBmcm9tIFwiLi92aWV3L2Rpdi9zaXplYWJsZS9sZWZ0XCI7XG5pbXBvcnQgQ1NTQ29udGFpbmVyRGl2IGZyb20gXCIuL3ZpZXcvZGl2L2NvbnRhaW5lci9jc3NcIjtcbmltcG9ydCBIVE1MQ29udGFpbmVyRGl2IGZyb20gXCIuL3ZpZXcvZGl2L2NvbnRhaW5lci9odG1sXCI7XG5pbXBvcnQgTGVmdFRhYkJ1dHRvbnNEaXYgZnJvbSBcIi4vdmlldy9kaXYvdGFiQnV0dG9ucy9sZWZ0XCI7XG5pbXBvcnQgUmlnaHRUYWJCdXR0b25zRGl2IGZyb20gXCIuL3ZpZXcvZGl2L3RhYkJ1dHRvbnMvcmlnaHRcIjtcbmltcG9ydCBQcmV2aWV3Q29udGFpbmVyRGl2IGZyb20gXCIuL3ZpZXcvZGl2L2NvbnRhaW5lci9wcmV2aWV3XCI7XG5pbXBvcnQgTWFya2Rvd25Db250YWluZXJEaXYgZnJvbSBcIi4vdmlldy9kaXYvY29udGFpbmVyL21hcmtkb3duXCI7XG5pbXBvcnQgQ1NTUGFyc2VUcmVlVGV4dGFyZWEgZnJvbSBcIi4vdmlldy90ZXh0YXJlYS9wYXJzZVRyZWUvY3NzXCI7XG5pbXBvcnQgSFRNTFBhcnNlVHJlZVRleHRhcmVhIGZyb20gXCIuL3ZpZXcvdGV4dGFyZWEvcGFyc2VUcmVlL2h0bWxcIjtcbmltcG9ydCBQbGFpblRleHRDb250YWluZXJEaXYgZnJvbSBcIi4vdmlldy9kaXYvY29udGFpbmVyL3BsYWluVGV4dFwiO1xuaW1wb3J0IE1hcmtkb3duU3R5bGVDb250YWluZXJEaXYgZnJvbSBcIi4vdmlldy9kaXYvY29udGFpbmVyL21hcmtkb3duU3R5bGVcIjtcblxuaW1wb3J0IHsgV0VCX1RBUkdFVCB9IGZyb20gXCIuLi90YXJnZXRzXCI7XG5pbXBvcnQgeyBpbml0aWFsTWFya2Rvd24sIGltcG9ydGVyIH0gZnJvbSBcIi4vaW1wb3J0ZXJcIjtcbmltcG9ydCB7IEVNUFRZX1NUUklORywgQ1NTX1NFTEVDVE9SU19TVFJJTkcgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcblxuY29uc3QgeyB0b2tlbnNGcm9tTWFya2Rvd24sXG4gICAgICAgIHRva2Vuc0Zyb21NYXJrZG93blN0eWxlLFxuICAgICAgICBkb2N1bWVudE1hcmtkb3duTm9kZUZyb21Ub2tlbnMsXG4gICAgICAgIGh0bWxGcm9tTWFya2Rvd25PcHRpb25zQW5kSW1wb3J0ZXIsXG4gICAgICAgIGRvY3VtZW50TWFya2Rvd25TdHlsZU5vZGVGcm9tVG9rZW5zLFxuICAgICAgICB0b3Btb3N0SFRNTE5vZGVGcm9tRG9jdW1lbnRNYXJrZG93bk5vZGUsXG4gICAgICAgIGNzc0Zyb21NYXJrZG93blN0eWxlQW5kQ1NTU2VsZWN0b3JzU3RyaW5nLFxuICAgICAgICB0b3Btb3N0Q1NTTm9kZUZyb21Eb2N1bWVudE1hcmtkb3duU3R5bGVOb2RlIH0gPSBncmFtbWFyVXRpbGl0aWVzO1xuXG5jbGFzcyBWaWV3IGV4dGVuZHMgRWxlbWVudCB7XG4gIHBhZ2VVcGRhdGVDdXN0b21IYW5kbGVyID0gKGV2ZW50LCBlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIHRoaXMudXBkYXRlSFRNTChpbmRleCk7XG4gIH1cblxuICBtYXJrZG93blN0eWxlQ3VzdG9tSGFuZGxlciA9IChldmVudCwgZWxlbWVudCkgPT4ge1xuICAgIHRoaXMubWFya2Rvd25TdHlsZSgpO1xuICB9XG5cbiAgbWFya2Rvd25DdXN0b21IYW5kbGVyID0gKGV2ZW50LCBlbGVtZW50KSA9PiB7XG4gICAgdGhpcy5tYXJrZG93bigpO1xuICB9XG5cbiAgcGxhaW5UZXh0Q3VzdG9tSGFuZGxlciA9IChldmVudCwgZWxlbWVudCkgPT4ge1xuICAgIHRoaXMucGxhaW5UZXh0KCk7XG4gIH1cblxuICBwcmV2aWV3Q3VzdG9tSGFuZGxlciA9IChldmVudCwgZWxlbWVudCkgPT4ge1xuICAgIHRoaXMucHJldmlldygpO1xuICB9XG5cbiAga2V5VXBDdXN0b21IYW5kbGVyID0gKGV2ZW50LCBlbGVtZW50KSA9PiB7XG4gICAgdGhpcy51cGRhdGUoKTtcbiAgfVxuXG4gIGh0bWxDdXN0b21IYW5kbGVyID0gKGV2ZW50LCBlbGVtZW50KSA9PiB7XG4gICAgdGhpcy5odG1sKCk7XG4gIH1cblxuICBjc3NDdXN0b21IYW5kbGVyID0gKGV2ZW50LCBlbGVtZW50KSA9PiB7XG4gICAgdGhpcy5jc3MoKTtcbiAgfVxuXG4gIHVwZGF0ZSgpIHtcbiAgICB0aGlzLnVwZGF0ZU1hcmtkb3duU3R5bGUoKTtcblxuICAgIHRoaXMudXBkYXRlTWFya2Rvd24oKTtcblxuICAgIHRoaXMudXBkYXRlSFRNTCgpO1xuXG4gICAgdGhpcy51cGRhdGVDU1MoKTtcbiAgfVxuXG4gIHVwZGF0ZU1hcmtkb3duU3R5bGUoKSB7XG4gICAgY29uc3QgbWFya2Rvd25TdHlsZSA9IHRoaXMuZ2V0TWFya2Rvd25TdHlsZSgpLFxuICAgICAgICAgIHRva2VucyA9IHRva2Vuc0Zyb21NYXJrZG93blN0eWxlKG1hcmtkb3duU3R5bGUpLFxuICAgICAgICAgIGRvY3VtZW50TWFya2Rvd25TdHlsZU5vZGUgPSBkb2N1bWVudE1hcmtkb3duU3R5bGVOb2RlRnJvbVRva2Vucyh0b2tlbnMpO1xuXG4gICAgaWYgKGRvY3VtZW50TWFya2Rvd25TdHlsZU5vZGUgPT09IG51bGwpIHtcbiAgICAgIHRoaXMucmVzZXRNYXJrZG93blN0eWxlVG9rZW5zKCk7XG5cbiAgICAgIHRoaXMucmVzZXREb2N1bWVudE1hcmtkb3duU3R5bGVOb2RlKCk7XG5cbiAgICAgIHRoaXMuY2xlYXJNYXJrZG93blN0eWxlUGFyc2VUcmVlVGV4dGFyZWEoKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG5vZGUgPSBkb2N1bWVudE1hcmtkb3duU3R5bGVOb2RlLCAvLy9cbiAgICAgICAgICBwYXJzZVRyZWUgPSBub2RlLmFzUGFyc2VUcmVlKHRva2VucyksXG4gICAgICAgICAgbWFya2Rvd25TdHlsZVRva2VucyA9IHRva2VuczsgLy8vXG5cbiAgICB0aGlzLnNldE1hcmtkb3duU3R5bGVUb2tlbnMobWFya2Rvd25TdHlsZVRva2Vucyk7XG5cbiAgICB0aGlzLnNldERvY3VtZW50TWFya2Rvd25TdHlsZU5vZGUoZG9jdW1lbnRNYXJrZG93blN0eWxlTm9kZSk7XG5cbiAgICB0aGlzLnVwZGF0ZU1hcmtkb3duU3R5bGVQYXJzZVRyZWVUZXh0YXJlYShwYXJzZVRyZWUpO1xuICB9XG5cbiAgdXBkYXRlTWFya2Rvd24oKSB7XG4gICAgY29uc3QgbWFya2Rvd24gPSB0aGlzLmdldE1hcmtkb3duKCksXG4gICAgICAgICAgdG9rZW5zID0gdG9rZW5zRnJvbU1hcmtkb3duKG1hcmtkb3duKSxcbiAgICAgICAgICBkb2N1bWVudE1hcmtkb3duTm9kZSA9IGRvY3VtZW50TWFya2Rvd25Ob2RlRnJvbVRva2Vucyh0b2tlbnMpO1xuXG4gICAgaWYgKGRvY3VtZW50TWFya2Rvd25Ob2RlID09PSBudWxsKSB7XG4gICAgICB0aGlzLnJlc2V0TWFya2Rvd25Ub2tlbnMoKTtcblxuICAgICAgdGhpcy5yZXNldERvY3VtZW50TWFya2Rvd25Ob2RlKCk7XG5cbiAgICAgIHRoaXMuY2xlYXJNYXJrZG93blBhcnNlVHJlZVRleHRhcmVhKCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgY29udGV4dDtcblxuICAgIGNvbnRleHQgPSB7XG4gICAgICB0b2tlbnMsXG4gICAgICBpbXBvcnRlclxuICAgIH07XG5cbiAgICBkb2N1bWVudE1hcmtkb3duTm9kZS5yZXNvbHZlKGNvbnRleHQpO1xuXG4gICAgY29uc3QgZG9jdW1lbnRNYXJrZG93bk5vZGVQYXJzZVRyZWUgPSBkb2N1bWVudE1hcmtkb3duTm9kZS5hc1BhcnNlVHJlZSh0b2tlbnMpLFxuICAgICAgICAgIG1hcmtkb3duUGFyc2VUcmVlID0gZG9jdW1lbnRNYXJrZG93bk5vZGVQYXJzZVRyZWUsIC8vL1xuICAgICAgICAgIG1hcmtkb3duVG9rZW5zID0gdG9rZW5zOyAgLy8vXG5cbiAgICB0aGlzLnNldE1hcmtkb3duVG9rZW5zKG1hcmtkb3duVG9rZW5zKTtcblxuICAgIHRoaXMuc2V0RG9jdW1lbnRNYXJrZG93bk5vZGUoZG9jdW1lbnRNYXJrZG93bk5vZGUpO1xuXG4gICAgdGhpcy51cGRhdGVNYXJrZG93blBhcnNlVHJlZVRleHRhcmVhKG1hcmtkb3duUGFyc2VUcmVlKTtcbiAgfVxuXG4gIHVwZGF0ZUhUTUwoaW5kZXggPSAwKSB7XG4gICAgdGhpcy5jbGVhclhNUCgpO1xuXG4gICAgdGhpcy5jbGVhclByZXZpZXdEaXYoKTtcblxuICAgIHRoaXMuY2xlYXJQbGFpblRleHRUZXh0YXJlYSgpO1xuXG4gICAgdGhpcy5jbGVhckhUTUxQYXJzZVRyZWVUZXh0YXJlYSgpO1xuXG4gICAgdGhpcy5jbGVhclBhZ2VCdXR0b25zRGl2KCk7XG5cbiAgICBjb25zdCBkb2N1bWVudE1hcmtkb3duTm9kZSA9IHRoaXMuZ2V0RG9jdW1lbnRNYXJrZG93bk5vZGUoKSxcbiAgICAgICAgICB0b3Btb3N0SFRNTE5vZGUgPSB0b3Btb3N0SFRNTE5vZGVGcm9tRG9jdW1lbnRNYXJrZG93bk5vZGUoZG9jdW1lbnRNYXJrZG93bk5vZGUpO1xuXG4gICAgaWYgKHRvcG1vc3RIVE1MTm9kZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBjb250ZXh0O1xuXG4gICAgY29uc3QgbWFya2Rvd25Ub2tlbnMgPSB0aGlzLmdldE1hcmtkb3duVG9rZW5zKCksXG4gICAgICAgICAgdG9rZW5zID0gbWFya2Rvd25Ub2tlbnM7ICAvLy9cblxuICAgIGNvbnRleHQgPSB7XG4gICAgICB0b2tlbnNcbiAgICB9O1xuXG4gICAgdG9wbW9zdEhUTUxOb2RlLnJlc29sdmUoY29udGV4dCk7XG5cbiAgICBjb25zdCBkaXZpc2lvbkhUTUxOb2RlID0gdG9wbW9zdEhUTUxOb2RlLmdldERpdmlzaW9uSFRNTE5vZGVBdChpbmRleCk7XG5cbiAgICBpZiAoZGl2aXNpb25IVE1MTm9kZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGRpdmlzaW9uSFRNTE5PZGVQYXJzZVRyZWUgPSBkaXZpc2lvbkhUTUxOb2RlLmFzUGFyc2VUcmVlKCksXG4gICAgICAgICAgaHRtbFBhcnNlVHJlZSA9IGRpdmlzaW9uSFRNTE5PZGVQYXJzZVRyZWUsICAvLy9cbiAgICAgICAgICBkaXZpc2lvbkhUTUxOb2RlcyA9IHRvcG1vc3RIVE1MTm9kZS5nZXREaXZpc2lvbkhUTUxOb2RlcygpLFxuICAgICAgICAgIGxlbmd0aCA9IGRpdmlzaW9uSFRNTE5vZGVzLmxlbmd0aDsgIC8vL1xuXG4gICAgY29udGV4dCA9IHtcbiAgICAgIHRva2VucyxcbiAgICAgIHBhdGhUb1VSTFxuICAgIH07XG5cbiAgICB0aGlzLnVwZGF0ZVByZXZpZXdEaXYoZGl2aXNpb25IVE1MTm9kZSwgY29udGV4dCk7XG5cbiAgICB0aGlzLnVwZGF0ZVBsYWluVGV4dFRleHRhcmVhKGRpdmlzaW9uSFRNTE5vZGUsIGNvbnRleHQpO1xuXG4gICAgdGhpcy51cGRhdGVIVE1MUGFyc2VUcmVlVGV4dGFyZWEoaHRtbFBhcnNlVHJlZSk7XG5cbiAgICB0aGlzLnVwZGF0ZVBhZ2VCdXR0b25zRGl2KGxlbmd0aCwgaW5kZXgpO1xuXG4gICAgY29uc3QgbWFya2Rvd24gPSB0aGlzLmdldE1hcmtkb3duKCksXG4gICAgICAgICAgb3B0aW9ucyA9IGluZGV4T3B0aW9ucywgLy8vXG4gICAgICAgICAgaHRtbCA9IGh0bWxGcm9tTWFya2Rvd25PcHRpb25zQW5kSW1wb3J0ZXIobWFya2Rvd24sIG9wdGlvbnMsIGltcG9ydGVyKTtcblxuICAgIHRoaXMudXBkYXRlWE1QKGh0bWwsIGNvbnRleHQpO1xuICB9XG5cbiAgdXBkYXRlQ1NTKCkge1xuICAgIGNvbnN0IG1hcmtkb3duU3R5bGVUb2tlbnMgPSB0aGlzLmdldE1hcmtkb3duU3R5bGVUb2tlbnMoKSxcbiAgICAgICAgICBtYXJrZG93blN0eWxlRWxlbWVudCA9IHRoaXMuZ2V0TWFya2Rvd25TdHlsZUVsZW1lbnQoKSxcbiAgICAgICAgICBkb2N1bWVudE1hcmtkb3duU3R5bGVOb2RlID0gdGhpcy5nZXREb2N1bWVudE1hcmtkb3duU3R5bGVOb2RlKCk7XG5cbiAgICBpZiAoZG9jdW1lbnRNYXJrZG93blN0eWxlTm9kZSA9PT0gbnVsbCkge1xuICAgICAgY29uc3QgY3NzID0gRU1QVFlfU1RSSU5HO1xuXG4gICAgICBtYXJrZG93blN0eWxlRWxlbWVudC5zZXRDU1MoY3NzKTtcblxuICAgICAgdGhpcy5jbGVhckNTU1BhcnNlVHJlZVRleHRhcmVhKCk7XG5cbiAgICAgIHRoaXMuY2xlYXJDU1MoKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHRvcG1vc3RDU1NOb2RlID0gdG9wbW9zdENTU05vZGVGcm9tRG9jdW1lbnRNYXJrZG93blN0eWxlTm9kZShkb2N1bWVudE1hcmtkb3duU3R5bGVOb2RlKSxcbiAgICAgICAgICB0YXJnZXQgPSBXRUJfVEFSR0VULFxuICAgICAgICAgIHRva2VucyA9IG1hcmtkb3duU3R5bGVUb2tlbnMsIC8vL1xuICAgICAgICAgIGNvbnRleHQgPSB7XG4gICAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgICB0b2tlbnNcbiAgICAgICAgICB9O1xuXG4gICAgdG9wbW9zdENTU05vZGUucmVzb2x2ZShjb250ZXh0KTtcblxuICAgIGNvbnN0IHRvcG1vc3RDU1NOb2RlUGFyc2VUcmVlID0gdG9wbW9zdENTU05vZGUuYXNQYXJzZVRyZWUodG9rZW5zKSxcbiAgICAgICAgICBjc3NQYXJzZVRyZWUgPSB0b3Btb3N0Q1NTTm9kZVBhcnNlVHJlZTsgLy8vXG5cbiAgICB0aGlzLnVwZGF0ZUNTU1BhcnNlVHJlZVRleHRhcmVhKGNzc1BhcnNlVHJlZSk7XG5cbiAgICBjb25zdCBjc3NTZWxlY3RvcnNTdHJpbmcgPSBDU1NfU0VMRUNUT1JTX1NUUklORyxcbiAgICAgICAgICBtYXJrZG93blN0eWxlID0gdGhpcy5nZXRNYXJrZG93blN0eWxlKCksXG4gICAgICAgICAgY3NzID0gY3NzRnJvbU1hcmtkb3duU3R5bGVBbmRDU1NTZWxlY3RvcnNTdHJpbmcobWFya2Rvd25TdHlsZSwgY3NzU2VsZWN0b3JzU3RyaW5nKTtcblxuICAgIG1hcmtkb3duU3R5bGVFbGVtZW50LnNldENTUyhjc3MpO1xuXG4gICAgdGhpcy5zZXRDU1MoY3NzKTtcbiAgfVxuXG4gIG1hcmtkb3duU3R5bGUoKSB7XG4gICAgdGhpcy5oaWRlTWFya2Rvd25Db250YWluZXJEaXYoKTtcbiAgICB0aGlzLnNob3dNYXJrZG93blN0eWxlQ29udGFpbmVyRGl2KCk7XG4gIH1cblxuICBtYXJrZG93bigpIHtcbiAgICB0aGlzLnNob3dNYXJrZG93bkNvbnRhaW5lckRpdigpO1xuICAgIHRoaXMuaGlkZU1hcmtkb3duU3R5bGVDb250YWluZXJEaXYoKTtcbiAgfVxuXG4gIHBsYWluVGV4dCgpIHtcbiAgICB0aGlzLmhpZGVDU1NDb250YWluZXJEaXYoKTtcbiAgICB0aGlzLmhpZGVIVE1MQ29udGFpbmVyRGl2KCk7XG4gICAgdGhpcy5oaWRlUHJldmlld0NvbnRhaW5lckRpdigpO1xuICAgIHRoaXMuc2hvd1BsYWluVGV4dENvbnRhaW5lckRpdigpO1xuXG4gICAgdGhpcy5oaWRlQ1NTUGFyc2VUcmVlVGV4dGFyZWEoKTtcbiAgICB0aGlzLnNob3dIVE1MUGFyc2VUcmVlVGV4dGFyZWEoKTtcbiAgfVxuXG4gIHByZXZpZXcoKSB7XG4gICAgdGhpcy5oaWRlQ1NTQ29udGFpbmVyRGl2KCk7XG4gICAgdGhpcy5oaWRlSFRNTENvbnRhaW5lckRpdigpO1xuICAgIHRoaXMuc2hvd1ByZXZpZXdDb250YWluZXJEaXYoKTtcbiAgICB0aGlzLmhpZGVQbGFpblRleHRDb250YWluZXJEaXYoKTtcblxuICAgIHRoaXMuaGlkZUNTU1BhcnNlVHJlZVRleHRhcmVhKCk7XG4gICAgdGhpcy5zaG93SFRNTFBhcnNlVHJlZVRleHRhcmVhKCk7XG4gIH1cblxuICBodG1sKCkge1xuICAgIHRoaXMuaGlkZUNTU0NvbnRhaW5lckRpdigpO1xuICAgIHRoaXMuc2hvd0hUTUxDb250YWluZXJEaXYoKTtcbiAgICB0aGlzLmhpZGVQcmV2aWV3Q29udGFpbmVyRGl2KCk7XG4gICAgdGhpcy5oaWRlUGxhaW5UZXh0Q29udGFpbmVyRGl2KCk7XG5cbiAgICB0aGlzLmhpZGVDU1NQYXJzZVRyZWVUZXh0YXJlYSgpO1xuICAgIHRoaXMuc2hvd0hUTUxQYXJzZVRyZWVUZXh0YXJlYSgpO1xuICB9XG5cbiAgY3NzKCkge1xuICAgIHRoaXMuc2hvd0NTU0NvbnRhaW5lckRpdigpO1xuICAgIHRoaXMuaGlkZUhUTUxDb250YWluZXJEaXYoKTtcbiAgICB0aGlzLmhpZGVQcmV2aWV3Q29udGFpbmVyRGl2KCk7XG4gICAgdGhpcy5oaWRlUGxhaW5UZXh0Q29udGFpbmVyRGl2KCk7XG5cbiAgICB0aGlzLnNob3dDU1NQYXJzZVRyZWVUZXh0YXJlYSgpO1xuICAgIHRoaXMuaGlkZUhUTUxQYXJzZVRyZWVUZXh0YXJlYSgpO1xuICB9XG5cbiAgcmVzZXRNYXJrZG93blRva2VucygpIHtcbiAgICBjb25zdCBtYXJrZG93blRva2VucyA9IG51bGw7XG5cbiAgICB0aGlzLnNldE1hcmtkb3duVG9rZW5zKG1hcmtkb3duVG9rZW5zKTtcbiAgfVxuXG4gIHJlc2V0TWFya2Rvd25TdHlsZVRva2VucygpIHtcbiAgICBjb25zdCBtYXJrZG93blN0eWxlVG9rZW5zID0gbnVsbDtcblxuICAgIHRoaXMuc2V0TWFya2Rvd25TdHlsZVRva2VucyhtYXJrZG93blN0eWxlVG9rZW5zKTtcbiAgfVxuXG4gIHJlc2V0RG9jdW1lbnRNYXJrZG93bk5vZGUoKSB7XG4gICAgY29uc3QgZG9jdW1lbnRNYXJrZG93bk5vZGUgPSBudWxsO1xuXG4gICAgdGhpcy5zZXREb2N1bWVudE1hcmtkb3duTm9kZShkb2N1bWVudE1hcmtkb3duTm9kZSk7XG4gIH1cblxuICByZXNldERvY3VtZW50TWFya2Rvd25TdHlsZU5vZGUoKSB7XG4gICAgY29uc3QgZG9jdW1lbnRNYXJrZG93blN0eWxlTm9kZSA9IG51bGw7XG5cbiAgICB0aGlzLnNldERvY3VtZW50TWFya2Rvd25TdHlsZU5vZGUoZG9jdW1lbnRNYXJrZG93blN0eWxlTm9kZSk7XG4gIH1cblxuICBnZXRNYXJrZG93blN0eWxlRWxlbWVudCgpIHtcbiAgICBjb25zdCB7IG1hcmtkb3duU3R5bGVFbGVtZW50IH0gPSB0aGlzLnByb3BlcnRpZXM7XG5cbiAgICByZXR1cm4gbWFya2Rvd25TdHlsZUVsZW1lbnQ7XG4gIH1cblxuICBnZXRNYXJrZG93blRva2VucygpIHtcbiAgICBjb25zdCB7IG1hcmtkb3duVG9rZW5zIH0gPSB0aGlzLmdldFN0YXRlKCk7XG5cbiAgICByZXR1cm4gbWFya2Rvd25Ub2tlbnM7XG4gIH1cblxuICBnZXRNYXJrZG93blN0eWxlVG9rZW5zKCkge1xuICAgIGNvbnN0IHsgbWFya2Rvd25TdHlsZVRva2VucyB9ID0gdGhpcy5nZXRTdGF0ZSgpO1xuXG4gICAgcmV0dXJuIG1hcmtkb3duU3R5bGVUb2tlbnM7XG4gIH1cblxuICBnZXREb2N1bWVudE1hcmtkb3duTm9kZSgpIHtcbiAgICBjb25zdCB7IHRvcG1vc3RNTWFya2Rvd25Ob2RlIH0gPSB0aGlzLmdldFN0YXRlKCk7XG5cbiAgICByZXR1cm4gdG9wbW9zdE1NYXJrZG93bk5vZGU7XG4gIH1cblxuICBnZXREb2N1bWVudE1hcmtkb3duU3R5bGVOb2RlKCkge1xuICAgIGNvbnN0IHsgdG9wbW9zdE1NYXJrZG93blN0eWxlTm9kZSB9ID0gdGhpcy5nZXRTdGF0ZSgpO1xuXG4gICAgcmV0dXJuIHRvcG1vc3RNTWFya2Rvd25TdHlsZU5vZGU7XG4gIH1cblxuICBzZXRNYXJrZG93blRva2VucyhtYXJrZG93blRva2Vucykge1xuICAgIHRoaXMudXBkYXRlU3RhdGUoe1xuICAgICAgbWFya2Rvd25Ub2tlbnNcbiAgICB9KTtcbiAgfVxuXG4gIHNldE1hcmtkb3duU3R5bGVUb2tlbnMobWFya2Rvd25TdHlsZVRva2Vucykge1xuICAgIHRoaXMudXBkYXRlU3RhdGUoe1xuICAgICAgbWFya2Rvd25TdHlsZVRva2Vuc1xuICAgIH0pO1xuICB9XG5cbiAgc2V0RG9jdW1lbnRNYXJrZG93bk5vZGUodG9wbW9zdE1NYXJrZG93bk5vZGUpIHtcbiAgICB0aGlzLnVwZGF0ZVN0YXRlKHtcbiAgICAgIHRvcG1vc3RNTWFya2Rvd25Ob2RlXG4gICAgfSk7XG4gIH1cblxuICBzZXREb2N1bWVudE1hcmtkb3duU3R5bGVOb2RlKHRvcG1vc3RNTWFya2Rvd25TdHlsZU5vZGUpIHtcbiAgICB0aGlzLnVwZGF0ZVN0YXRlKHtcbiAgICAgIHRvcG1vc3RNTWFya2Rvd25TdHlsZU5vZGVcbiAgICB9KTtcbiAgfVxuXG4gIHNldEluaXRpYWxTdGF0ZSgpIHtcbiAgICBjb25zdCBtYXJrZG93blRva2VucyA9IG51bGwsXG4gICAgICAgICAgbWFya2Rvd25TdHlsZVRva2VucyA9IG51bGwsXG4gICAgICAgICAgZG9jdW1lbnRNYXJrZG93bk5vZGUgPSBudWxsLFxuICAgICAgICAgIGRvY3VtZW50TWFya2Rvd25TdHlsZU5vZGUgPSBudWxsO1xuXG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBtYXJrZG93blRva2VucyxcbiAgICAgIG1hcmtkb3duU3R5bGVUb2tlbnMsXG4gICAgICBkb2N1bWVudE1hcmtkb3duTm9kZSxcbiAgICAgIGRvY3VtZW50TWFya2Rvd25TdHlsZU5vZGVcbiAgICB9KTtcbiAgfVxuXG4gIGRpZE1vdW50KCkge1xuICAgIHRoaXMubWFya2Rvd24oKTtcblxuICAgIHRoaXMucHJldmlldygpO1xuXG4gICAgdGhpcy51cGRhdGUoKTtcbiAgfVxuXG4gIHdpbGxVbm1vdW50KCkge1xuICAgIC8vL1xuICB9XG5cbiAgY2hpbGRFbGVtZW50cygpIHtcbiAgICByZXR1cm4gKFxuXG4gICAgICA8Q29sdW1uc0Rpdj5cbiAgICAgICAgPExlZnRTaXplYWJsZURpdj5cbiAgICAgICAgICA8TGVmdFRhYkJ1dHRvbnNEaXYgb25DdXN0b21NYXJrZG93bj17dGhpcy5tYXJrZG93bkN1c3RvbUhhbmRsZXJ9IG9uQ3VzdG9tTWFya2Rvd25TdHlsZT17dGhpcy5tYXJrZG93blN0eWxlQ3VzdG9tSGFuZGxlcn0gLz5cbiAgICAgICAgICA8TWFya2Rvd25Db250YWluZXJEaXYgb25DdXN0b21LZXlVcD17dGhpcy5rZXlVcEN1c3RvbUhhbmRsZXJ9IC8+XG4gICAgICAgICAgPE1hcmtkb3duU3R5bGVDb250YWluZXJEaXYgb25DdXN0b21LZXlVcD17dGhpcy5rZXlVcEN1c3RvbUhhbmRsZXJ9IC8+XG4gICAgICAgIDwvTGVmdFNpemVhYmxlRGl2PlxuICAgICAgICA8VmVydGljYWxTcGxpdHRlckRpdi8+XG4gICAgICAgIDxDb2x1bW5EaXY+XG4gICAgICAgICAgPFJvd3NEaXY+XG4gICAgICAgICAgICA8UmlnaHRUYWJCdXR0b25zRGl2IG9uQ3VzdG9tQ1NTPXt0aGlzLmNzc0N1c3RvbUhhbmRsZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ3VzdG9tSFRNTD17dGhpcy5odG1sQ3VzdG9tSGFuZGxlcn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DdXN0b21QcmV2aWV3PXt0aGlzLnByZXZpZXdDdXN0b21IYW5kbGVyfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkN1c3RvbVBsYWluVGV4dD17dGhpcy5wbGFpblRleHRDdXN0b21IYW5kbGVyfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxQYWdlQnV0dG9uc0RpdiBvbkN1c3RvbVBhZ2VVcGRhdGU9e3RoaXMucGFnZVVwZGF0ZUN1c3RvbUhhbmRsZXJ9IC8+XG4gICAgICAgICAgICA8Q1NTQ29udGFpbmVyRGl2Lz5cbiAgICAgICAgICAgIDxIVE1MQ29udGFpbmVyRGl2Lz5cbiAgICAgICAgICAgIDxQcmV2aWV3Q29udGFpbmVyRGl2Lz5cbiAgICAgICAgICAgIDxQbGFpblRleHRDb250YWluZXJEaXYvPlxuICAgICAgICAgICAgPEhUTUxQYXJzZVRyZWVUZXh0YXJlYS8+XG4gICAgICAgICAgICA8Q1NTUGFyc2VUcmVlVGV4dGFyZWEvPlxuICAgICAgICAgIDwvUm93c0Rpdj5cbiAgICAgICAgPC9Db2x1bW5EaXY+XG4gICAgICA8L0NvbHVtbnNEaXY+XG5cbiAgICApO1xuICB9XG5cbiAgaW5pdGlhbGlzZSgpIHtcbiAgICB0aGlzLmFzc2lnbkNvbnRleHQoKTtcblxuICAgIHRoaXMuc2V0SW5pdGlhbFN0YXRlKCk7XG5cbiAgICBjb25zdCB7IGluaXRpYWxNYXJrZG93biwgaW5pdGlhbE1hcmtkb3duU3R5bGUgfSA9IHRoaXMuY29uc3RydWN0b3IsXG4gICAgICAgICAgbWFya2Rvd25TdHlsZSA9IGluaXRpYWxNYXJrZG93blN0eWxlLCAvLy9cbiAgICAgICAgICBtYXJrZG93biA9IGluaXRpYWxNYXJrZG93bjsgLy8vXG5cbiAgICB0aGlzLnNldE1hcmtkb3duU3R5bGUobWFya2Rvd25TdHlsZSk7XG5cbiAgICB0aGlzLnNldE1hcmtkb3duKG1hcmtkb3duKTtcbiAgfVxuXG4gIHN0YXRpYyBpbml0aWFsTWFya2Rvd24gPSBpbml0aWFsTWFya2Rvd247XG5cbiAgc3RhdGljIGluaXRpYWxNYXJrZG93blN0eWxlID0gXCJcIjtcblxuICBzdGF0aWMgdGFnTmFtZSA9IFwiZGl2XCI7XG5cbiAgc3RhdGljIGlnbm9yZWRQcm9wZXJ0aWVzID0gW1xuICAgIFwibWFya2Rvd25TdHlsZUVsZW1lbnRcIlxuICBdO1xuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICBjbGFzc05hbWU6IFwidmlld1wiXG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTdHlsZShWaWV3KWBcblxuICBwYWRkaW5nOiAxcmVtO1xuICBcbmA7XG5cbmZ1bmN0aW9uIHBhdGhUb1VSTChwYXRoKSB7XG4gIGNvbnN0IHVybCA9IGBodHRwczovL2RqYWxiYXQuY29tLyR7cGF0aH1gO1xuXG4gIHJldHVybiB1cmw7XG59XG4iXSwibmFtZXMiOlsidG9rZW5zRnJvbU1hcmtkb3duIiwiZ3JhbW1hclV0aWxpdGllcyIsInRva2Vuc0Zyb21NYXJrZG93blN0eWxlIiwiZG9jdW1lbnRNYXJrZG93bk5vZGVGcm9tVG9rZW5zIiwiaHRtbEZyb21NYXJrZG93bk9wdGlvbnNBbmRJbXBvcnRlciIsImRvY3VtZW50TWFya2Rvd25TdHlsZU5vZGVGcm9tVG9rZW5zIiwidG9wbW9zdEhUTUxOb2RlRnJvbURvY3VtZW50TWFya2Rvd25Ob2RlIiwiY3NzRnJvbU1hcmtkb3duU3R5bGVBbmRDU1NTZWxlY3RvcnNTdHJpbmciLCJ0b3Btb3N0Q1NTTm9kZUZyb21Eb2N1bWVudE1hcmtkb3duU3R5bGVOb2RlIiwiVmlldyIsInBhZ2VVcGRhdGVDdXN0b21IYW5kbGVyIiwiZXZlbnQiLCJlbGVtZW50IiwiaW5kZXgiLCJ1cGRhdGVIVE1MIiwibWFya2Rvd25TdHlsZUN1c3RvbUhhbmRsZXIiLCJtYXJrZG93blN0eWxlIiwibWFya2Rvd25DdXN0b21IYW5kbGVyIiwibWFya2Rvd24iLCJwbGFpblRleHRDdXN0b21IYW5kbGVyIiwicGxhaW5UZXh0IiwicHJldmlld0N1c3RvbUhhbmRsZXIiLCJwcmV2aWV3Iiwia2V5VXBDdXN0b21IYW5kbGVyIiwidXBkYXRlIiwiaHRtbEN1c3RvbUhhbmRsZXIiLCJodG1sIiwiY3NzQ3VzdG9tSGFuZGxlciIsImNzcyIsInVwZGF0ZU1hcmtkb3duU3R5bGUiLCJ1cGRhdGVNYXJrZG93biIsInVwZGF0ZUNTUyIsImdldE1hcmtkb3duU3R5bGUiLCJ0b2tlbnMiLCJkb2N1bWVudE1hcmtkb3duU3R5bGVOb2RlIiwicmVzZXRNYXJrZG93blN0eWxlVG9rZW5zIiwicmVzZXREb2N1bWVudE1hcmtkb3duU3R5bGVOb2RlIiwiY2xlYXJNYXJrZG93blN0eWxlUGFyc2VUcmVlVGV4dGFyZWEiLCJub2RlIiwicGFyc2VUcmVlIiwiYXNQYXJzZVRyZWUiLCJtYXJrZG93blN0eWxlVG9rZW5zIiwic2V0TWFya2Rvd25TdHlsZVRva2VucyIsInNldERvY3VtZW50TWFya2Rvd25TdHlsZU5vZGUiLCJ1cGRhdGVNYXJrZG93blN0eWxlUGFyc2VUcmVlVGV4dGFyZWEiLCJnZXRNYXJrZG93biIsImRvY3VtZW50TWFya2Rvd25Ob2RlIiwicmVzZXRNYXJrZG93blRva2VucyIsInJlc2V0RG9jdW1lbnRNYXJrZG93bk5vZGUiLCJjbGVhck1hcmtkb3duUGFyc2VUcmVlVGV4dGFyZWEiLCJjb250ZXh0IiwiaW1wb3J0ZXIiLCJyZXNvbHZlIiwiZG9jdW1lbnRNYXJrZG93bk5vZGVQYXJzZVRyZWUiLCJtYXJrZG93blBhcnNlVHJlZSIsIm1hcmtkb3duVG9rZW5zIiwic2V0TWFya2Rvd25Ub2tlbnMiLCJzZXREb2N1bWVudE1hcmtkb3duTm9kZSIsInVwZGF0ZU1hcmtkb3duUGFyc2VUcmVlVGV4dGFyZWEiLCJjbGVhclhNUCIsImNsZWFyUHJldmlld0RpdiIsImNsZWFyUGxhaW5UZXh0VGV4dGFyZWEiLCJjbGVhckhUTUxQYXJzZVRyZWVUZXh0YXJlYSIsImNsZWFyUGFnZUJ1dHRvbnNEaXYiLCJnZXREb2N1bWVudE1hcmtkb3duTm9kZSIsInRvcG1vc3RIVE1MTm9kZSIsImdldE1hcmtkb3duVG9rZW5zIiwiZGl2aXNpb25IVE1MTm9kZSIsImdldERpdmlzaW9uSFRNTE5vZGVBdCIsImRpdmlzaW9uSFRNTE5PZGVQYXJzZVRyZWUiLCJodG1sUGFyc2VUcmVlIiwiZGl2aXNpb25IVE1MTm9kZXMiLCJnZXREaXZpc2lvbkhUTUxOb2RlcyIsImxlbmd0aCIsInBhdGhUb1VSTCIsInVwZGF0ZVByZXZpZXdEaXYiLCJ1cGRhdGVQbGFpblRleHRUZXh0YXJlYSIsInVwZGF0ZUhUTUxQYXJzZVRyZWVUZXh0YXJlYSIsInVwZGF0ZVBhZ2VCdXR0b25zRGl2Iiwib3B0aW9ucyIsImluZGV4T3B0aW9ucyIsInVwZGF0ZVhNUCIsImdldE1hcmtkb3duU3R5bGVUb2tlbnMiLCJtYXJrZG93blN0eWxlRWxlbWVudCIsImdldE1hcmtkb3duU3R5bGVFbGVtZW50IiwiZ2V0RG9jdW1lbnRNYXJrZG93blN0eWxlTm9kZSIsIkVNUFRZX1NUUklORyIsInNldENTUyIsImNsZWFyQ1NTUGFyc2VUcmVlVGV4dGFyZWEiLCJjbGVhckNTUyIsInRvcG1vc3RDU1NOb2RlIiwidGFyZ2V0IiwiV0VCX1RBUkdFVCIsInRvcG1vc3RDU1NOb2RlUGFyc2VUcmVlIiwiY3NzUGFyc2VUcmVlIiwidXBkYXRlQ1NTUGFyc2VUcmVlVGV4dGFyZWEiLCJjc3NTZWxlY3RvcnNTdHJpbmciLCJDU1NfU0VMRUNUT1JTX1NUUklORyIsImhpZGVNYXJrZG93bkNvbnRhaW5lckRpdiIsInNob3dNYXJrZG93blN0eWxlQ29udGFpbmVyRGl2Iiwic2hvd01hcmtkb3duQ29udGFpbmVyRGl2IiwiaGlkZU1hcmtkb3duU3R5bGVDb250YWluZXJEaXYiLCJoaWRlQ1NTQ29udGFpbmVyRGl2IiwiaGlkZUhUTUxDb250YWluZXJEaXYiLCJoaWRlUHJldmlld0NvbnRhaW5lckRpdiIsInNob3dQbGFpblRleHRDb250YWluZXJEaXYiLCJoaWRlQ1NTUGFyc2VUcmVlVGV4dGFyZWEiLCJzaG93SFRNTFBhcnNlVHJlZVRleHRhcmVhIiwic2hvd1ByZXZpZXdDb250YWluZXJEaXYiLCJoaWRlUGxhaW5UZXh0Q29udGFpbmVyRGl2Iiwic2hvd0hUTUxDb250YWluZXJEaXYiLCJzaG93Q1NTQ29udGFpbmVyRGl2Iiwic2hvd0NTU1BhcnNlVHJlZVRleHRhcmVhIiwiaGlkZUhUTUxQYXJzZVRyZWVUZXh0YXJlYSIsInByb3BlcnRpZXMiLCJnZXRTdGF0ZSIsInRvcG1vc3RNTWFya2Rvd25Ob2RlIiwidG9wbW9zdE1NYXJrZG93blN0eWxlTm9kZSIsInVwZGF0ZVN0YXRlIiwic2V0SW5pdGlhbFN0YXRlIiwic2V0U3RhdGUiLCJkaWRNb3VudCIsIndpbGxVbm1vdW50IiwiY2hpbGRFbGVtZW50cyIsIkNvbHVtbnNEaXYiLCJMZWZ0U2l6ZWFibGVEaXYiLCJMZWZ0VGFiQnV0dG9uc0RpdiIsIm9uQ3VzdG9tTWFya2Rvd24iLCJvbkN1c3RvbU1hcmtkb3duU3R5bGUiLCJNYXJrZG93bkNvbnRhaW5lckRpdiIsIm9uQ3VzdG9tS2V5VXAiLCJNYXJrZG93blN0eWxlQ29udGFpbmVyRGl2IiwiVmVydGljYWxTcGxpdHRlckRpdiIsIkNvbHVtbkRpdiIsIlJvd3NEaXYiLCJSaWdodFRhYkJ1dHRvbnNEaXYiLCJvbkN1c3RvbUNTUyIsIm9uQ3VzdG9tSFRNTCIsIm9uQ3VzdG9tUHJldmlldyIsIm9uQ3VzdG9tUGxhaW5UZXh0IiwiUGFnZUJ1dHRvbnNEaXYiLCJvbkN1c3RvbVBhZ2VVcGRhdGUiLCJDU1NDb250YWluZXJEaXYiLCJIVE1MQ29udGFpbmVyRGl2IiwiUHJldmlld0NvbnRhaW5lckRpdiIsIlBsYWluVGV4dENvbnRhaW5lckRpdiIsIkhUTUxQYXJzZVRyZWVUZXh0YXJlYSIsIkNTU1BhcnNlVHJlZVRleHRhcmVhIiwiaW5pdGlhbGlzZSIsImFzc2lnbkNvbnRleHQiLCJpbml0aWFsTWFya2Rvd24iLCJpbml0aWFsTWFya2Rvd25TdHlsZSIsInNldE1hcmtkb3duU3R5bGUiLCJzZXRNYXJrZG93biIsIkVsZW1lbnQiLCJ0YWdOYW1lIiwiaWdub3JlZFByb3BlcnRpZXMiLCJkZWZhdWx0UHJvcGVydGllcyIsImNsYXNzTmFtZSIsIndpdGhTdHlsZSIsInBhdGgiLCJ1cmwiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQXNjQTs7O2VBQUE7OztvRUFwY3NCO29CQUVFO3FCQUNTOzBCQUNtQzttRUFFM0M7a0VBQ0U7MkRBQ0M7MERBQ0E7MkRBQ0M7NERBQ0M7NERBQ0M7OERBQ0M7K0RBQ0M7MkRBQ0E7NERBQ0M7Z0VBQ0E7b0VBQ0k7dUJBRVg7d0JBQ2U7eUJBQ1M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFbkQsSUFBUUEscUJBT2dEQyx1QkFBZ0IsQ0FQaEVELG9CQUNBRSwwQkFNZ0RELHVCQUFnQixDQU5oRUMseUJBQ0FDLGlDQUtnREYsdUJBQWdCLENBTGhFRSxnQ0FDQUMscUNBSWdESCx1QkFBZ0IsQ0FKaEVHLG9DQUNBQyxzQ0FHZ0RKLHVCQUFnQixDQUhoRUkscUNBQ0FDLDBDQUVnREwsdUJBQWdCLENBRmhFSyx5Q0FDQUMsNENBQ2dETix1QkFBZ0IsQ0FEaEVNLDJDQUNBQyw4Q0FBZ0RQLHVCQUFnQixDQUFoRU87QUFFUixJQUFBLEFBQU1DLHFCQUFOO2NBQU1BO2FBQUFBO2dDQUFBQTs7Z0JBQU4sa0JBQU1BLGtCQUNKQyx3QkFBQUEsMkJBQTBCLFNBQUNDLE9BQU9DLFNBQVNDO1lBQ3pDLE1BQUtDLFVBQVUsQ0FBQ0Q7UUFDbEIsSUFFQUUsd0JBQUFBLDhCQUE2QixTQUFDSixPQUFPQztZQUNuQyxNQUFLSSxhQUFhO1FBQ3BCLElBRUFDLHdCQUFBQSx5QkFBd0IsU0FBQ04sT0FBT0M7WUFDOUIsTUFBS00sUUFBUTtRQUNmLElBRUFDLHdCQUFBQSwwQkFBeUIsU0FBQ1IsT0FBT0M7WUFDL0IsTUFBS1EsU0FBUztRQUNoQixJQUVBQyx3QkFBQUEsd0JBQXVCLFNBQUNWLE9BQU9DO1lBQzdCLE1BQUtVLE9BQU87UUFDZCxJQUVBQyx3QkFBQUEsc0JBQXFCLFNBQUNaLE9BQU9DO1lBQzNCLE1BQUtZLE1BQU07UUFDYixJQUVBQyx3QkFBQUEscUJBQW9CLFNBQUNkLE9BQU9DO1lBQzFCLE1BQUtjLElBQUk7UUFDWCxJQUVBQyx3QkFBQUEsb0JBQW1CLFNBQUNoQixPQUFPQztZQUN6QixNQUFLZ0IsR0FBRztRQUNWOzs7a0JBL0JJbkI7O1lBaUNKZSxLQUFBQTttQkFBQUEsU0FBQUE7Z0JBQ0UsSUFBSSxDQUFDSyxtQkFBbUI7Z0JBRXhCLElBQUksQ0FBQ0MsY0FBYztnQkFFbkIsSUFBSSxDQUFDaEIsVUFBVTtnQkFFZixJQUFJLENBQUNpQixTQUFTO1lBQ2hCOzs7WUFFQUYsS0FBQUE7bUJBQUFBLFNBQUFBO2dCQUNFLElBQU1iLGdCQUFnQixJQUFJLENBQUNnQixnQkFBZ0IsSUFDckNDLFNBQVMvQix3QkFBd0JjLGdCQUNqQ2tCLDRCQUE0QjdCLG9DQUFvQzRCO2dCQUV0RSxJQUFJQyw4QkFBOEIsTUFBTTtvQkFDdEMsSUFBSSxDQUFDQyx3QkFBd0I7b0JBRTdCLElBQUksQ0FBQ0MsOEJBQThCO29CQUVuQyxJQUFJLENBQUNDLG1DQUFtQztvQkFFeEM7Z0JBQ0Y7Z0JBRUEsSUFBTUMsT0FBT0osMkJBQ1BLLFlBQVlELEtBQUtFLFdBQVcsQ0FBQ1AsU0FDN0JRLHNCQUFzQlIsUUFBUSxHQUFHO2dCQUV2QyxJQUFJLENBQUNTLHNCQUFzQixDQUFDRDtnQkFFNUIsSUFBSSxDQUFDRSw0QkFBNEIsQ0FBQ1Q7Z0JBRWxDLElBQUksQ0FBQ1Usb0NBQW9DLENBQUNMO1lBQzVDOzs7WUFFQVQsS0FBQUE7bUJBQUFBLFNBQUFBO2dCQUNFLElBQU1aLFdBQVcsSUFBSSxDQUFDMkIsV0FBVyxJQUMzQlosU0FBU2pDLG1CQUFtQmtCLFdBQzVCNEIsdUJBQXVCM0MsK0JBQStCOEI7Z0JBRTVELElBQUlhLHlCQUF5QixNQUFNO29CQUNqQyxJQUFJLENBQUNDLG1CQUFtQjtvQkFFeEIsSUFBSSxDQUFDQyx5QkFBeUI7b0JBRTlCLElBQUksQ0FBQ0MsOEJBQThCO29CQUVuQztnQkFDRjtnQkFFQSxJQUFJQztnQkFFSkEsVUFBVTtvQkFDUmpCLFFBQUFBO29CQUNBa0IsVUFBQUEsa0JBQVE7Z0JBQ1Y7Z0JBRUFMLHFCQUFxQk0sT0FBTyxDQUFDRjtnQkFFN0IsSUFBTUcsZ0NBQWdDUCxxQkFBcUJOLFdBQVcsQ0FBQ1AsU0FDakVxQixvQkFBb0JELCtCQUNwQkUsaUJBQWlCdEIsUUFBUyxHQUFHO2dCQUVuQyxJQUFJLENBQUN1QixpQkFBaUIsQ0FBQ0Q7Z0JBRXZCLElBQUksQ0FBQ0UsdUJBQXVCLENBQUNYO2dCQUU3QixJQUFJLENBQUNZLCtCQUErQixDQUFDSjtZQUN2Qzs7O1lBRUF4QyxLQUFBQTttQkFBQUEsU0FBQUE7b0JBQVdELFFBQUFBLGlFQUFRO2dCQUNqQixJQUFJLENBQUM4QyxRQUFRO2dCQUViLElBQUksQ0FBQ0MsZUFBZTtnQkFFcEIsSUFBSSxDQUFDQyxzQkFBc0I7Z0JBRTNCLElBQUksQ0FBQ0MsMEJBQTBCO2dCQUUvQixJQUFJLENBQUNDLG1CQUFtQjtnQkFFeEIsSUFBTWpCLHVCQUF1QixJQUFJLENBQUNrQix1QkFBdUIsSUFDbkRDLGtCQUFrQjNELHdDQUF3Q3dDO2dCQUVoRSxJQUFJbUIsb0JBQW9CLE1BQU07b0JBQzVCO2dCQUNGO2dCQUVBLElBQUlmO2dCQUVKLElBQU1LLGlCQUFpQixJQUFJLENBQUNXLGlCQUFpQixJQUN2Q2pDLFNBQVNzQixnQkFBaUIsR0FBRztnQkFFbkNMLFVBQVU7b0JBQ1JqQixRQUFBQTtnQkFDRjtnQkFFQWdDLGdCQUFnQmIsT0FBTyxDQUFDRjtnQkFFeEIsSUFBTWlCLG1CQUFtQkYsZ0JBQWdCRyxxQkFBcUIsQ0FBQ3ZEO2dCQUUvRCxJQUFJc0QscUJBQXFCLE1BQU07b0JBQzdCO2dCQUNGO2dCQUVBLElBQU1FLDRCQUE0QkYsaUJBQWlCM0IsV0FBVyxJQUN4RDhCLGdCQUFnQkQsMkJBQ2hCRSxvQkFBb0JOLGdCQUFnQk8sb0JBQW9CLElBQ3hEQyxTQUFTRixrQkFBa0JFLE1BQU0sRUFBRyxHQUFHO2dCQUU3Q3ZCLFVBQVU7b0JBQ1JqQixRQUFBQTtvQkFDQXlDLFdBQUFBO2dCQUNGO2dCQUVBLElBQUksQ0FBQ0MsZ0JBQWdCLENBQUNSLGtCQUFrQmpCO2dCQUV4QyxJQUFJLENBQUMwQix1QkFBdUIsQ0FBQ1Qsa0JBQWtCakI7Z0JBRS9DLElBQUksQ0FBQzJCLDJCQUEyQixDQUFDUDtnQkFFakMsSUFBSSxDQUFDUSxvQkFBb0IsQ0FBQ0wsUUFBUTVEO2dCQUVsQyxJQUFNSyxXQUFXLElBQUksQ0FBQzJCLFdBQVcsSUFDM0JrQyxVQUFVQyxxQkFBWSxFQUN0QnRELE9BQU90QixtQ0FBbUNjLFVBQVU2RCxTQUFTNUIsa0JBQVE7Z0JBRTNFLElBQUksQ0FBQzhCLFNBQVMsQ0FBQ3ZELE1BQU13QjtZQUN2Qjs7O1lBRUFuQixLQUFBQTttQkFBQUEsU0FBQUE7Z0JBQ0UsSUFBTVUsc0JBQXNCLElBQUksQ0FBQ3lDLHNCQUFzQixJQUNqREMsdUJBQXVCLElBQUksQ0FBQ0MsdUJBQXVCLElBQ25EbEQsNEJBQTRCLElBQUksQ0FBQ21ELDRCQUE0QjtnQkFFbkUsSUFBSW5ELDhCQUE4QixNQUFNO29CQUN0QyxJQUFNTixNQUFNMEQsdUJBQVk7b0JBRXhCSCxxQkFBcUJJLE1BQU0sQ0FBQzNEO29CQUU1QixJQUFJLENBQUM0RCx5QkFBeUI7b0JBRTlCLElBQUksQ0FBQ0MsUUFBUTtvQkFFYjtnQkFDRjtnQkFFQSxJQUFNQyxpQkFBaUJsRiw0Q0FBNEMwQiw0QkFDN0R5RCxTQUFTQyxtQkFBVSxFQUNuQjNELFNBQVNRLHFCQUNUUyxVQUFVO29CQUNSeUMsUUFBQUE7b0JBQ0ExRCxRQUFBQTtnQkFDRjtnQkFFTnlELGVBQWV0QyxPQUFPLENBQUNGO2dCQUV2QixJQUFNMkMsMEJBQTBCSCxlQUFlbEQsV0FBVyxDQUFDUCxTQUNyRDZELGVBQWVELHlCQUF5QixHQUFHO2dCQUVqRCxJQUFJLENBQUNFLDBCQUEwQixDQUFDRDtnQkFFaEMsSUFBTUUscUJBQXFCQywrQkFBb0IsRUFDekNqRixnQkFBZ0IsSUFBSSxDQUFDZ0IsZ0JBQWdCLElBQ3JDSixPQUFNckIsMENBQTBDUyxlQUFlZ0Y7Z0JBRXJFYixxQkFBcUJJLE1BQU0sQ0FBQzNEO2dCQUU1QixJQUFJLENBQUMyRCxNQUFNLENBQUMzRDtZQUNkOzs7WUFFQVosS0FBQUE7bUJBQUFBLFNBQUFBO2dCQUNFLElBQUksQ0FBQ2tGLHdCQUF3QjtnQkFDN0IsSUFBSSxDQUFDQyw2QkFBNkI7WUFDcEM7OztZQUVBakYsS0FBQUE7bUJBQUFBLFNBQUFBO2dCQUNFLElBQUksQ0FBQ2tGLHdCQUF3QjtnQkFDN0IsSUFBSSxDQUFDQyw2QkFBNkI7WUFDcEM7OztZQUVBakYsS0FBQUE7bUJBQUFBLFNBQUFBO2dCQUNFLElBQUksQ0FBQ2tGLG1CQUFtQjtnQkFDeEIsSUFBSSxDQUFDQyxvQkFBb0I7Z0JBQ3pCLElBQUksQ0FBQ0MsdUJBQXVCO2dCQUM1QixJQUFJLENBQUNDLHlCQUF5QjtnQkFFOUIsSUFBSSxDQUFDQyx3QkFBd0I7Z0JBQzdCLElBQUksQ0FBQ0MseUJBQXlCO1lBQ2hDOzs7WUFFQXJGLEtBQUFBO21CQUFBQSxTQUFBQTtnQkFDRSxJQUFJLENBQUNnRixtQkFBbUI7Z0JBQ3hCLElBQUksQ0FBQ0Msb0JBQW9CO2dCQUN6QixJQUFJLENBQUNLLHVCQUF1QjtnQkFDNUIsSUFBSSxDQUFDQyx5QkFBeUI7Z0JBRTlCLElBQUksQ0FBQ0gsd0JBQXdCO2dCQUM3QixJQUFJLENBQUNDLHlCQUF5QjtZQUNoQzs7O1lBRUFqRixLQUFBQTttQkFBQUEsU0FBQUE7Z0JBQ0UsSUFBSSxDQUFDNEUsbUJBQW1CO2dCQUN4QixJQUFJLENBQUNRLG9CQUFvQjtnQkFDekIsSUFBSSxDQUFDTix1QkFBdUI7Z0JBQzVCLElBQUksQ0FBQ0sseUJBQXlCO2dCQUU5QixJQUFJLENBQUNILHdCQUF3QjtnQkFDN0IsSUFBSSxDQUFDQyx5QkFBeUI7WUFDaEM7OztZQUVBL0UsS0FBQUE7bUJBQUFBLFNBQUFBO2dCQUNFLElBQUksQ0FBQ21GLG1CQUFtQjtnQkFDeEIsSUFBSSxDQUFDUixvQkFBb0I7Z0JBQ3pCLElBQUksQ0FBQ0MsdUJBQXVCO2dCQUM1QixJQUFJLENBQUNLLHlCQUF5QjtnQkFFOUIsSUFBSSxDQUFDRyx3QkFBd0I7Z0JBQzdCLElBQUksQ0FBQ0MseUJBQXlCO1lBQ2hDOzs7WUFFQWxFLEtBQUFBO21CQUFBQSxTQUFBQTtnQkFDRSxJQUFNUSxpQkFBaUI7Z0JBRXZCLElBQUksQ0FBQ0MsaUJBQWlCLENBQUNEO1lBQ3pCOzs7WUFFQXBCLEtBQUFBO21CQUFBQSxTQUFBQTtnQkFDRSxJQUFNTSxzQkFBc0I7Z0JBRTVCLElBQUksQ0FBQ0Msc0JBQXNCLENBQUNEO1lBQzlCOzs7WUFFQU8sS0FBQUE7bUJBQUFBLFNBQUFBO2dCQUNFLElBQU1GLHVCQUF1QjtnQkFFN0IsSUFBSSxDQUFDVyx1QkFBdUIsQ0FBQ1g7WUFDL0I7OztZQUVBVixLQUFBQTttQkFBQUEsU0FBQUE7Z0JBQ0UsSUFBTUYsNEJBQTRCO2dCQUVsQyxJQUFJLENBQUNTLDRCQUE0QixDQUFDVDtZQUNwQzs7O1lBRUFrRCxLQUFBQTttQkFBQUEsU0FBQUE7Z0JBQ0UsSUFBTSxBQUFFRCx1QkFBeUIsSUFBSSxDQUFDK0IsVUFBVSxDQUF4Qy9CO2dCQUVSLE9BQU9BO1lBQ1Q7OztZQUVBakIsS0FBQUE7bUJBQUFBLFNBQUFBO2dCQUNFLElBQU0sQUFBRVgsaUJBQW1CLElBQUksQ0FBQzRELFFBQVEsR0FBaEM1RDtnQkFFUixPQUFPQTtZQUNUOzs7WUFFQTJCLEtBQUFBO21CQUFBQSxTQUFBQTtnQkFDRSxJQUFNLEFBQUV6QyxzQkFBd0IsSUFBSSxDQUFDMEUsUUFBUSxHQUFyQzFFO2dCQUVSLE9BQU9BO1lBQ1Q7OztZQUVBdUIsS0FBQUE7bUJBQUFBLFNBQUFBO2dCQUNFLElBQU0sQUFBRW9ELHVCQUF5QixJQUFJLENBQUNELFFBQVEsR0FBdENDO2dCQUVSLE9BQU9BO1lBQ1Q7OztZQUVBL0IsS0FBQUE7bUJBQUFBLFNBQUFBO2dCQUNFLElBQU0sQUFBRWdDLDRCQUE4QixJQUFJLENBQUNGLFFBQVEsR0FBM0NFO2dCQUVSLE9BQU9BO1lBQ1Q7OztZQUVBN0QsS0FBQUE7bUJBQUFBLFNBQUFBLGtCQUFrQkQsY0FBYztnQkFDOUIsSUFBSSxDQUFDK0QsV0FBVyxDQUFDO29CQUNmL0QsZ0JBQUFBO2dCQUNGO1lBQ0Y7OztZQUVBYixLQUFBQTttQkFBQUEsU0FBQUEsdUJBQXVCRCxtQkFBbUI7Z0JBQ3hDLElBQUksQ0FBQzZFLFdBQVcsQ0FBQztvQkFDZjdFLHFCQUFBQTtnQkFDRjtZQUNGOzs7WUFFQWdCLEtBQUFBO21CQUFBQSxTQUFBQSx3QkFBd0IyRCxvQkFBb0I7Z0JBQzFDLElBQUksQ0FBQ0UsV0FBVyxDQUFDO29CQUNmRixzQkFBQUE7Z0JBQ0Y7WUFDRjs7O1lBRUF6RSxLQUFBQTttQkFBQUEsU0FBQUEsNkJBQTZCMEUseUJBQXlCO2dCQUNwRCxJQUFJLENBQUNDLFdBQVcsQ0FBQztvQkFDZkQsMkJBQUFBO2dCQUNGO1lBQ0Y7OztZQUVBRSxLQUFBQTttQkFBQUEsU0FBQUE7Z0JBQ0UsSUFBTWhFLGlCQUFpQixNQUNqQmQsc0JBQXNCLE1BQ3RCSyx1QkFBdUIsTUFDdkJaLDRCQUE0QjtnQkFFbEMsSUFBSSxDQUFDc0YsUUFBUSxDQUFDO29CQUNaakUsZ0JBQUFBO29CQUNBZCxxQkFBQUE7b0JBQ0FLLHNCQUFBQTtvQkFDQVosMkJBQUFBO2dCQUNGO1lBQ0Y7OztZQUVBdUYsS0FBQUE7bUJBQUFBLFNBQUFBO2dCQUNFLElBQUksQ0FBQ3ZHLFFBQVE7Z0JBRWIsSUFBSSxDQUFDSSxPQUFPO2dCQUVaLElBQUksQ0FBQ0UsTUFBTTtZQUNiOzs7WUFFQWtHLEtBQUFBO21CQUFBQSxTQUFBQTtZQUNFLEdBQUc7WUFDTDs7O1lBRUFDLEtBQUFBO21CQUFBQSxTQUFBQTtnQkFDRSxxQkFFRSxvQkFBQ0Msc0JBQVUsc0JBQ1Qsb0JBQUNDLGFBQWUsc0JBQ2Qsb0JBQUNDLGNBQWlCO29CQUFDQyxrQkFBa0IsSUFBSSxDQUFDOUcscUJBQXFCO29CQUFFK0csdUJBQXVCLElBQUksQ0FBQ2pILDBCQUEwQjtrQ0FDdkgsb0JBQUNrSCxpQkFBb0I7b0JBQUNDLGVBQWUsSUFBSSxDQUFDM0csa0JBQWtCO2tDQUM1RCxvQkFBQzRHLHNCQUF5QjtvQkFBQ0QsZUFBZSxJQUFJLENBQUMzRyxrQkFBa0I7bUNBRW5FLG9CQUFDNkcsK0JBQW1CLHVCQUNwQixvQkFBQ0MscUJBQVMsc0JBQ1Isb0JBQUNDLG1CQUFPLHNCQUNOLG9CQUFDQyxjQUFrQjtvQkFBQ0MsYUFBYSxJQUFJLENBQUM3RyxnQkFBZ0I7b0JBQ2xDOEcsY0FBYyxJQUFJLENBQUNoSCxpQkFBaUI7b0JBQ3BDaUgsaUJBQWlCLElBQUksQ0FBQ3JILG9CQUFvQjtvQkFDMUNzSCxtQkFBbUIsSUFBSSxDQUFDeEgsc0JBQXNCO2tDQUVsRSxvQkFBQ3lILG9CQUFjO29CQUFDQyxvQkFBb0IsSUFBSSxDQUFDbkksdUJBQXVCO2tDQUNoRSxvQkFBQ29JLFlBQWUsdUJBQ2hCLG9CQUFDQyxhQUFnQix1QkFDakIsb0JBQUNDLGdCQUFtQix1QkFDcEIsb0JBQUNDLGtCQUFxQix1QkFDdEIsb0JBQUNDLGNBQXFCLHVCQUN0QixvQkFBQ0MsYUFBb0I7WUFNL0I7OztZQUVBQyxLQUFBQTttQkFBQUEsU0FBQUE7Z0JBQ0UsSUFBSSxDQUFDQyxhQUFhO2dCQUVsQixJQUFJLENBQUM5QixlQUFlO2dCQUVwQixJQUFrRCxvQkFBQSxJQUFJLENBQUMsV0FBVyxFQUExRCtCLG9CQUEwQyxrQkFBMUNBLGlCQUFpQkMsdUJBQXlCLGtCQUF6QkEsc0JBQ25CdkksZ0JBQWdCdUksc0JBQ2hCckksV0FBV29JLG1CQUFpQixHQUFHO2dCQUVyQyxJQUFJLENBQUNFLGdCQUFnQixDQUFDeEk7Z0JBRXRCLElBQUksQ0FBQ3lJLFdBQVcsQ0FBQ3ZJO1lBQ25COzs7V0FsWklUO3FCQUFhaUosYUFBTztBQW9aeEIsaUJBcFpJakosTUFvWkc2SSxtQkFBa0JBLHlCQUFlO0FBRXhDLGlCQXRaSTdJLE1Bc1pHOEksd0JBQXVCO0FBRTlCLGlCQXhaSTlJLE1Bd1pHa0osV0FBVTtBQUVqQixpQkExWklsSixNQTBaR21KLHFCQUFvQjtJQUN6QjtDQUNEO0FBRUQsaUJBOVpJbkosTUE4WkdvSixxQkFBb0I7SUFDekJDLFdBQVc7QUFDYjtJQUdGLFdBQWVDLElBQUFBLHNCQUFTLEVBQUN0SjtBQU16QixTQUFTaUUsVUFBVXNGLElBQUk7SUFDckIsSUFBTUMsTUFBTSxBQUFDLHVCQUEyQixPQUFMRDtJQUVuQyxPQUFPQztBQUNUIn0=
309
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9leGFtcGxlL3ZpZXcuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB3aXRoU3R5bGUgZnJvbSBcImVhc3ktd2l0aC1zdHlsZVwiOyAgLy8vXG5cbmltcG9ydCB7IEVsZW1lbnQgfSBmcm9tIFwiZWFzeVwiO1xuaW1wb3J0IHsgZ3JhbW1hclV0aWxpdGllcyB9IGZyb20gXCIuLi9pbmRleFwiOyAgLy8vXG5pbXBvcnQgeyBSb3dzRGl2LCBDb2x1bW5EaXYsIENvbHVtbnNEaXYsIFZlcnRpY2FsU3BsaXR0ZXJEaXYgfSBmcm9tIFwiZWFzeS1sYXlvdXRcIjtcblxuaW1wb3J0IGluZGV4T3B0aW9ucyBmcm9tIFwiLi9pbmRleE9wdGlvbnNcIjtcbmltcG9ydCBQYWdlQnV0dG9uc0RpdiBmcm9tIFwiLi92aWV3L2Rpdi9wYWdlQnV0dG9uc1wiO1xuaW1wb3J0IExlZnRTaXplYWJsZURpdiBmcm9tIFwiLi92aWV3L2Rpdi9zaXplYWJsZS9sZWZ0XCI7XG5pbXBvcnQgQ1NTQ29udGFpbmVyRGl2IGZyb20gXCIuL3ZpZXcvZGl2L2NvbnRhaW5lci9jc3NcIjtcbmltcG9ydCBIVE1MQ29udGFpbmVyRGl2IGZyb20gXCIuL3ZpZXcvZGl2L2NvbnRhaW5lci9odG1sXCI7XG5pbXBvcnQgTGVmdFRhYkJ1dHRvbnNEaXYgZnJvbSBcIi4vdmlldy9kaXYvdGFiQnV0dG9ucy9sZWZ0XCI7XG5pbXBvcnQgUmlnaHRUYWJCdXR0b25zRGl2IGZyb20gXCIuL3ZpZXcvZGl2L3RhYkJ1dHRvbnMvcmlnaHRcIjtcbmltcG9ydCBQcmV2aWV3Q29udGFpbmVyRGl2IGZyb20gXCIuL3ZpZXcvZGl2L2NvbnRhaW5lci9wcmV2aWV3XCI7XG5pbXBvcnQgTWFya2Rvd25Db250YWluZXJEaXYgZnJvbSBcIi4vdmlldy9kaXYvY29udGFpbmVyL21hcmtkb3duXCI7XG5pbXBvcnQgQ1NTUGFyc2VUcmVlVGV4dGFyZWEgZnJvbSBcIi4vdmlldy90ZXh0YXJlYS9wYXJzZVRyZWUvY3NzXCI7XG5pbXBvcnQgSFRNTFBhcnNlVHJlZVRleHRhcmVhIGZyb20gXCIuL3ZpZXcvdGV4dGFyZWEvcGFyc2VUcmVlL2h0bWxcIjtcbmltcG9ydCBQbGFpblRleHRDb250YWluZXJEaXYgZnJvbSBcIi4vdmlldy9kaXYvY29udGFpbmVyL3BsYWluVGV4dFwiO1xuaW1wb3J0IE1hcmtkb3duU3R5bGVDb250YWluZXJEaXYgZnJvbSBcIi4vdmlldy9kaXYvY29udGFpbmVyL21hcmtkb3duU3R5bGVcIjtcblxuaW1wb3J0IHsgV0VCX1RBUkdFVCB9IGZyb20gXCIuLi90YXJnZXRzXCI7XG5pbXBvcnQgeyBpbml0aWFsTWFya2Rvd24sIGltcG9ydGVyIH0gZnJvbSBcIi4vaW1wb3J0ZXJcIjtcbmltcG9ydCB7IEVNUFRZX1NUUklORywgQ1NTX1NFTEVDVE9SU19TVFJJTkcgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcblxuY29uc3QgeyB0b2tlbnNGcm9tTWFya2Rvd24sXG4gICAgICAgIHRva2Vuc0Zyb21NYXJrZG93blN0eWxlLFxuICAgICAgICBkb2N1bWVudE1hcmtkb3duTm9kZUZyb21Ub2tlbnMsXG4gICAgICAgIGh0bWxGcm9tTWFya2Rvd25PcHRpb25zQW5kSW1wb3J0ZXIsXG4gICAgICAgIGRvY3VtZW50TWFya2Rvd25TdHlsZU5vZGVGcm9tVG9rZW5zLFxuICAgICAgICB0b3Btb3N0SFRNTE5vZGVGcm9tRG9jdW1lbnRNYXJrZG93bk5vZGUsXG4gICAgICAgIGNzc0Zyb21NYXJrZG93blN0eWxlQW5kQ1NTU2VsZWN0b3JzU3RyaW5nLFxuICAgICAgICB0b3Btb3N0Q1NTTm9kZUZyb21Eb2N1bWVudE1hcmtkb3duU3R5bGVOb2RlIH0gPSBncmFtbWFyVXRpbGl0aWVzO1xuXG5jbGFzcyBWaWV3IGV4dGVuZHMgRWxlbWVudCB7XG4gIHBhZ2VVcGRhdGVDdXN0b21IYW5kbGVyID0gKGV2ZW50LCBlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIHRoaXMudXBkYXRlSFRNTChpbmRleCk7XG4gIH1cblxuICBtYXJrZG93blN0eWxlQ3VzdG9tSGFuZGxlciA9IChldmVudCwgZWxlbWVudCkgPT4ge1xuICAgIHRoaXMubWFya2Rvd25TdHlsZSgpO1xuICB9XG5cbiAgbWFya2Rvd25DdXN0b21IYW5kbGVyID0gKGV2ZW50LCBlbGVtZW50KSA9PiB7XG4gICAgdGhpcy5tYXJrZG93bigpO1xuICB9XG5cbiAgcGxhaW5UZXh0Q3VzdG9tSGFuZGxlciA9IChldmVudCwgZWxlbWVudCkgPT4ge1xuICAgIHRoaXMucGxhaW5UZXh0KCk7XG4gIH1cblxuICBwcmV2aWV3Q3VzdG9tSGFuZGxlciA9IChldmVudCwgZWxlbWVudCkgPT4ge1xuICAgIHRoaXMucHJldmlldygpO1xuICB9XG5cbiAga2V5VXBDdXN0b21IYW5kbGVyID0gKGV2ZW50LCBlbGVtZW50KSA9PiB7XG4gICAgdGhpcy51cGRhdGUoKTtcbiAgfVxuXG4gIGh0bWxDdXN0b21IYW5kbGVyID0gKGV2ZW50LCBlbGVtZW50KSA9PiB7XG4gICAgdGhpcy5odG1sKCk7XG4gIH1cblxuICBjc3NDdXN0b21IYW5kbGVyID0gKGV2ZW50LCBlbGVtZW50KSA9PiB7XG4gICAgdGhpcy5jc3MoKTtcbiAgfVxuXG4gIHVwZGF0ZSgpIHtcbiAgICB0aGlzLnVwZGF0ZU1hcmtkb3duU3R5bGUoKTtcblxuICAgIHRoaXMudXBkYXRlTWFya2Rvd24oKTtcblxuICAgIHRoaXMudXBkYXRlSFRNTCgpO1xuXG4gICAgdGhpcy51cGRhdGVDU1MoKTtcbiAgfVxuXG4gIHVwZGF0ZU1hcmtkb3duU3R5bGUoKSB7XG4gICAgY29uc3QgbWFya2Rvd25TdHlsZSA9IHRoaXMuZ2V0TWFya2Rvd25TdHlsZSgpLFxuICAgICAgICAgIHRva2VucyA9IHRva2Vuc0Zyb21NYXJrZG93blN0eWxlKG1hcmtkb3duU3R5bGUpLFxuICAgICAgICAgIGRvY3VtZW50TWFya2Rvd25TdHlsZU5vZGUgPSBkb2N1bWVudE1hcmtkb3duU3R5bGVOb2RlRnJvbVRva2Vucyh0b2tlbnMpO1xuXG4gICAgaWYgKGRvY3VtZW50TWFya2Rvd25TdHlsZU5vZGUgPT09IG51bGwpIHtcbiAgICAgIHRoaXMucmVzZXRNYXJrZG93blN0eWxlVG9rZW5zKCk7XG5cbiAgICAgIHRoaXMucmVzZXREb2N1bWVudE1hcmtkb3duU3R5bGVOb2RlKCk7XG5cbiAgICAgIHRoaXMuY2xlYXJNYXJrZG93blN0eWxlUGFyc2VUcmVlVGV4dGFyZWEoKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG5vZGUgPSBkb2N1bWVudE1hcmtkb3duU3R5bGVOb2RlLCAvLy9cbiAgICAgICAgICBwYXJzZVRyZWUgPSBub2RlLmFzUGFyc2VUcmVlKHRva2VucyksXG4gICAgICAgICAgbWFya2Rvd25TdHlsZVRva2VucyA9IHRva2VuczsgLy8vXG5cbiAgICB0aGlzLnNldE1hcmtkb3duU3R5bGVUb2tlbnMobWFya2Rvd25TdHlsZVRva2Vucyk7XG5cbiAgICB0aGlzLnNldERvY3VtZW50TWFya2Rvd25TdHlsZU5vZGUoZG9jdW1lbnRNYXJrZG93blN0eWxlTm9kZSk7XG5cbiAgICB0aGlzLnVwZGF0ZU1hcmtkb3duU3R5bGVQYXJzZVRyZWVUZXh0YXJlYShwYXJzZVRyZWUpO1xuICB9XG5cbiAgdXBkYXRlTWFya2Rvd24oKSB7XG4gICAgY29uc3QgbWFya2Rvd24gPSB0aGlzLmdldE1hcmtkb3duKCksXG4gICAgICAgICAgdG9rZW5zID0gdG9rZW5zRnJvbU1hcmtkb3duKG1hcmtkb3duKSxcbiAgICAgICAgICBkb2N1bWVudE1hcmtkb3duTm9kZSA9IGRvY3VtZW50TWFya2Rvd25Ob2RlRnJvbVRva2Vucyh0b2tlbnMpO1xuXG4gICAgaWYgKGRvY3VtZW50TWFya2Rvd25Ob2RlID09PSBudWxsKSB7XG4gICAgICB0aGlzLnJlc2V0TWFya2Rvd25Ub2tlbnMoKTtcblxuICAgICAgdGhpcy5yZXNldERvY3VtZW50TWFya2Rvd25Ob2RlKCk7XG5cbiAgICAgIHRoaXMuY2xlYXJNYXJrZG93blBhcnNlVHJlZVRleHRhcmVhKCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgY29udGV4dDtcblxuICAgIGNvbnRleHQgPSB7XG4gICAgICB0b2tlbnMsXG4gICAgICBpbXBvcnRlclxuICAgIH07XG5cbiAgICBkb2N1bWVudE1hcmtkb3duTm9kZS5yZXNvbHZlKGNvbnRleHQpO1xuXG4gICAgY29uc3QgZG9jdW1lbnRNYXJrZG93bk5vZGVQYXJzZVRyZWUgPSBkb2N1bWVudE1hcmtkb3duTm9kZS5hc1BhcnNlVHJlZSh0b2tlbnMpLFxuICAgICAgICAgIG1hcmtkb3duUGFyc2VUcmVlID0gZG9jdW1lbnRNYXJrZG93bk5vZGVQYXJzZVRyZWUsIC8vL1xuICAgICAgICAgIG1hcmtkb3duVG9rZW5zID0gdG9rZW5zOyAgLy8vXG5cbiAgICB0aGlzLnNldE1hcmtkb3duVG9rZW5zKG1hcmtkb3duVG9rZW5zKTtcblxuICAgIHRoaXMuc2V0RG9jdW1lbnRNYXJrZG93bk5vZGUoZG9jdW1lbnRNYXJrZG93bk5vZGUpO1xuXG4gICAgdGhpcy51cGRhdGVNYXJrZG93blBhcnNlVHJlZVRleHRhcmVhKG1hcmtkb3duUGFyc2VUcmVlKTtcbiAgfVxuXG4gIHVwZGF0ZUhUTUwoaW5kZXggPSAwKSB7XG4gICAgdGhpcy5jbGVhclhNUCgpO1xuXG4gICAgdGhpcy5jbGVhclByZXZpZXdEaXYoKTtcblxuICAgIHRoaXMuY2xlYXJQbGFpblRleHRUZXh0YXJlYSgpO1xuXG4gICAgdGhpcy5jbGVhckhUTUxQYXJzZVRyZWVUZXh0YXJlYSgpO1xuXG4gICAgdGhpcy5jbGVhclBhZ2VCdXR0b25zRGl2KCk7XG5cbiAgICBjb25zdCBkb2N1bWVudE1hcmtkb3duTm9kZSA9IHRoaXMuZ2V0RG9jdW1lbnRNYXJrZG93bk5vZGUoKSxcbiAgICAgICAgICB0b3Btb3N0SFRNTE5vZGUgPSB0b3Btb3N0SFRNTE5vZGVGcm9tRG9jdW1lbnRNYXJrZG93bk5vZGUoZG9jdW1lbnRNYXJrZG93bk5vZGUpO1xuXG4gICAgaWYgKHRvcG1vc3RIVE1MTm9kZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBjb250ZXh0O1xuXG4gICAgY29uc3QgbWFya2Rvd25Ub2tlbnMgPSB0aGlzLmdldE1hcmtkb3duVG9rZW5zKCksXG4gICAgICAgICAgdG9rZW5zID0gbWFya2Rvd25Ub2tlbnM7ICAvLy9cblxuICAgIGNvbnRleHQgPSB7XG4gICAgICB0b2tlbnNcbiAgICB9O1xuXG4gICAgdG9wbW9zdEhUTUxOb2RlLnJlc29sdmUoY29udGV4dCk7XG5cbiAgICBjb25zdCBkaXZpc2lvbkhUTUxOb2RlID0gdG9wbW9zdEhUTUxOb2RlLmdldERpdmlzaW9uSFRNTE5vZGVBdChpbmRleCk7XG5cbiAgICBpZiAoZGl2aXNpb25IVE1MTm9kZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGRpdmlzaW9uSFRNTE5PZGVQYXJzZVRyZWUgPSBkaXZpc2lvbkhUTUxOb2RlLmFzUGFyc2VUcmVlKCksXG4gICAgICAgICAgaHRtbFBhcnNlVHJlZSA9IGRpdmlzaW9uSFRNTE5PZGVQYXJzZVRyZWUsICAvLy9cbiAgICAgICAgICBkaXZpc2lvbkhUTUxOb2RlcyA9IHRvcG1vc3RIVE1MTm9kZS5nZXREaXZpc2lvbkhUTUxOb2RlcygpLFxuICAgICAgICAgIGxlbmd0aCA9IGRpdmlzaW9uSFRNTE5vZGVzLmxlbmd0aDsgIC8vL1xuXG4gICAgY29udGV4dCA9IHtcbiAgICAgIHRva2VucyxcbiAgICAgIHBhdGhUb1VSTFxuICAgIH07XG5cbiAgICB0aGlzLnVwZGF0ZVByZXZpZXdEaXYoZGl2aXNpb25IVE1MTm9kZSwgY29udGV4dCk7XG5cbiAgICB0aGlzLnVwZGF0ZVBsYWluVGV4dFRleHRhcmVhKGRpdmlzaW9uSFRNTE5vZGUsIGNvbnRleHQpO1xuXG4gICAgdGhpcy51cGRhdGVIVE1MUGFyc2VUcmVlVGV4dGFyZWEoaHRtbFBhcnNlVHJlZSk7XG5cbiAgICB0aGlzLnVwZGF0ZVBhZ2VCdXR0b25zRGl2KGxlbmd0aCwgaW5kZXgpO1xuXG4gICAgY29uc3QgbWFya2Rvd24gPSB0aGlzLmdldE1hcmtkb3duKCksXG4gICAgICAgICAgb3B0aW9ucyA9IGluZGV4T3B0aW9ucywgLy8vXG4gICAgICAgICAgaHRtbCA9IGh0bWxGcm9tTWFya2Rvd25PcHRpb25zQW5kSW1wb3J0ZXIobWFya2Rvd24sIG9wdGlvbnMsIGltcG9ydGVyKTtcblxuICAgIHRoaXMudXBkYXRlWE1QKGh0bWwsIGNvbnRleHQpO1xuICB9XG5cbiAgdXBkYXRlQ1NTKCkge1xuICAgIGNvbnN0IG1hcmtkb3duU3R5bGVUb2tlbnMgPSB0aGlzLmdldE1hcmtkb3duU3R5bGVUb2tlbnMoKSxcbiAgICAgICAgICBtYXJrZG93blN0eWxlRWxlbWVudCA9IHRoaXMuZ2V0TWFya2Rvd25TdHlsZUVsZW1lbnQoKSxcbiAgICAgICAgICBkb2N1bWVudE1hcmtkb3duU3R5bGVOb2RlID0gdGhpcy5nZXREb2N1bWVudE1hcmtkb3duU3R5bGVOb2RlKCk7XG5cbiAgICBpZiAoZG9jdW1lbnRNYXJrZG93blN0eWxlTm9kZSA9PT0gbnVsbCkge1xuICAgICAgY29uc3QgY3NzID0gRU1QVFlfU1RSSU5HO1xuXG4gICAgICBtYXJrZG93blN0eWxlRWxlbWVudC5zZXRDU1MoY3NzKTtcblxuICAgICAgdGhpcy5jbGVhckNTU1BhcnNlVHJlZVRleHRhcmVhKCk7XG5cbiAgICAgIHRoaXMuY2xlYXJDU1MoKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHRvcG1vc3RDU1NOb2RlID0gdG9wbW9zdENTU05vZGVGcm9tRG9jdW1lbnRNYXJrZG93blN0eWxlTm9kZShkb2N1bWVudE1hcmtkb3duU3R5bGVOb2RlKSxcbiAgICAgICAgICB0YXJnZXQgPSBXRUJfVEFSR0VULFxuICAgICAgICAgIHRva2VucyA9IG1hcmtkb3duU3R5bGVUb2tlbnMsIC8vL1xuICAgICAgICAgIGNvbnRleHQgPSB7XG4gICAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgICB0b2tlbnNcbiAgICAgICAgICB9O1xuXG4gICAgdG9wbW9zdENTU05vZGUucmVzb2x2ZShjb250ZXh0KTtcblxuICAgIGNvbnN0IHRvcG1vc3RDU1NOb2RlUGFyc2VUcmVlID0gdG9wbW9zdENTU05vZGUuYXNQYXJzZVRyZWUodG9rZW5zKSxcbiAgICAgICAgICBjc3NQYXJzZVRyZWUgPSB0b3Btb3N0Q1NTTm9kZVBhcnNlVHJlZTsgLy8vXG5cbiAgICB0aGlzLnVwZGF0ZUNTU1BhcnNlVHJlZVRleHRhcmVhKGNzc1BhcnNlVHJlZSk7XG5cbiAgICBjb25zdCBjc3NTZWxlY3RvcnNTdHJpbmcgPSBDU1NfU0VMRUNUT1JTX1NUUklORyxcbiAgICAgICAgICBtYXJrZG93blN0eWxlID0gdGhpcy5nZXRNYXJrZG93blN0eWxlKCksXG4gICAgICAgICAgY3NzID0gY3NzRnJvbU1hcmtkb3duU3R5bGVBbmRDU1NTZWxlY3RvcnNTdHJpbmcobWFya2Rvd25TdHlsZSwgY3NzU2VsZWN0b3JzU3RyaW5nKTtcblxuICAgIG1hcmtkb3duU3R5bGVFbGVtZW50LnNldENTUyhjc3MpO1xuXG4gICAgdGhpcy5zZXRDU1MoY3NzKTtcbiAgfVxuXG4gIG1hcmtkb3duU3R5bGUoKSB7XG4gICAgdGhpcy5oaWRlTWFya2Rvd25Db250YWluZXJEaXYoKTtcbiAgICB0aGlzLnNob3dNYXJrZG93blN0eWxlQ29udGFpbmVyRGl2KCk7XG4gIH1cblxuICBtYXJrZG93bigpIHtcbiAgICB0aGlzLnNob3dNYXJrZG93bkNvbnRhaW5lckRpdigpO1xuICAgIHRoaXMuaGlkZU1hcmtkb3duU3R5bGVDb250YWluZXJEaXYoKTtcbiAgfVxuXG4gIHBsYWluVGV4dCgpIHtcbiAgICB0aGlzLmhpZGVDU1NDb250YWluZXJEaXYoKTtcbiAgICB0aGlzLmhpZGVIVE1MQ29udGFpbmVyRGl2KCk7XG4gICAgdGhpcy5oaWRlUHJldmlld0NvbnRhaW5lckRpdigpO1xuICAgIHRoaXMuc2hvd1BsYWluVGV4dENvbnRhaW5lckRpdigpO1xuXG4gICAgdGhpcy5oaWRlQ1NTUGFyc2VUcmVlVGV4dGFyZWEoKTtcbiAgICB0aGlzLnNob3dIVE1MUGFyc2VUcmVlVGV4dGFyZWEoKTtcbiAgfVxuXG4gIHByZXZpZXcoKSB7XG4gICAgdGhpcy5oaWRlQ1NTQ29udGFpbmVyRGl2KCk7XG4gICAgdGhpcy5oaWRlSFRNTENvbnRhaW5lckRpdigpO1xuICAgIHRoaXMuc2hvd1ByZXZpZXdDb250YWluZXJEaXYoKTtcbiAgICB0aGlzLmhpZGVQbGFpblRleHRDb250YWluZXJEaXYoKTtcblxuICAgIHRoaXMuaGlkZUNTU1BhcnNlVHJlZVRleHRhcmVhKCk7XG4gICAgdGhpcy5zaG93SFRNTFBhcnNlVHJlZVRleHRhcmVhKCk7XG4gIH1cblxuICBodG1sKCkge1xuICAgIHRoaXMuaGlkZUNTU0NvbnRhaW5lckRpdigpO1xuICAgIHRoaXMuc2hvd0hUTUxDb250YWluZXJEaXYoKTtcbiAgICB0aGlzLmhpZGVQcmV2aWV3Q29udGFpbmVyRGl2KCk7XG4gICAgdGhpcy5oaWRlUGxhaW5UZXh0Q29udGFpbmVyRGl2KCk7XG5cbiAgICB0aGlzLmhpZGVDU1NQYXJzZVRyZWVUZXh0YXJlYSgpO1xuICAgIHRoaXMuc2hvd0hUTUxQYXJzZVRyZWVUZXh0YXJlYSgpO1xuICB9XG5cbiAgY3NzKCkge1xuICAgIHRoaXMuc2hvd0NTU0NvbnRhaW5lckRpdigpO1xuICAgIHRoaXMuaGlkZUhUTUxDb250YWluZXJEaXYoKTtcbiAgICB0aGlzLmhpZGVQcmV2aWV3Q29udGFpbmVyRGl2KCk7XG4gICAgdGhpcy5oaWRlUGxhaW5UZXh0Q29udGFpbmVyRGl2KCk7XG5cbiAgICB0aGlzLnNob3dDU1NQYXJzZVRyZWVUZXh0YXJlYSgpO1xuICAgIHRoaXMuaGlkZUhUTUxQYXJzZVRyZWVUZXh0YXJlYSgpO1xuICB9XG5cbiAgcmVzZXRNYXJrZG93blRva2VucygpIHtcbiAgICBjb25zdCBtYXJrZG93blRva2VucyA9IG51bGw7XG5cbiAgICB0aGlzLnNldE1hcmtkb3duVG9rZW5zKG1hcmtkb3duVG9rZW5zKTtcbiAgfVxuXG4gIHJlc2V0TWFya2Rvd25TdHlsZVRva2VucygpIHtcbiAgICBjb25zdCBtYXJrZG93blN0eWxlVG9rZW5zID0gbnVsbDtcblxuICAgIHRoaXMuc2V0TWFya2Rvd25TdHlsZVRva2VucyhtYXJrZG93blN0eWxlVG9rZW5zKTtcbiAgfVxuXG4gIHJlc2V0RG9jdW1lbnRNYXJrZG93bk5vZGUoKSB7XG4gICAgY29uc3QgZG9jdW1lbnRNYXJrZG93bk5vZGUgPSBudWxsO1xuXG4gICAgdGhpcy5zZXREb2N1bWVudE1hcmtkb3duTm9kZShkb2N1bWVudE1hcmtkb3duTm9kZSk7XG4gIH1cblxuICByZXNldERvY3VtZW50TWFya2Rvd25TdHlsZU5vZGUoKSB7XG4gICAgY29uc3QgZG9jdW1lbnRNYXJrZG93blN0eWxlTm9kZSA9IG51bGw7XG5cbiAgICB0aGlzLnNldERvY3VtZW50TWFya2Rvd25TdHlsZU5vZGUoZG9jdW1lbnRNYXJrZG93blN0eWxlTm9kZSk7XG4gIH1cblxuICBnZXRNYXJrZG93blN0eWxlRWxlbWVudCgpIHtcbiAgICBjb25zdCB7IG1hcmtkb3duU3R5bGVFbGVtZW50IH0gPSB0aGlzLnByb3BlcnRpZXM7XG5cbiAgICByZXR1cm4gbWFya2Rvd25TdHlsZUVsZW1lbnQ7XG4gIH1cblxuICBnZXRNYXJrZG93blRva2VucygpIHtcbiAgICBjb25zdCB7IG1hcmtkb3duVG9rZW5zIH0gPSB0aGlzLmdldFN0YXRlKCk7XG5cbiAgICByZXR1cm4gbWFya2Rvd25Ub2tlbnM7XG4gIH1cblxuICBnZXRNYXJrZG93blN0eWxlVG9rZW5zKCkge1xuICAgIGNvbnN0IHsgbWFya2Rvd25TdHlsZVRva2VucyB9ID0gdGhpcy5nZXRTdGF0ZSgpO1xuXG4gICAgcmV0dXJuIG1hcmtkb3duU3R5bGVUb2tlbnM7XG4gIH1cblxuICBnZXREb2N1bWVudE1hcmtkb3duTm9kZSgpIHtcbiAgICBjb25zdCB7IHRvcG1vc3RNTWFya2Rvd25Ob2RlIH0gPSB0aGlzLmdldFN0YXRlKCk7XG5cbiAgICByZXR1cm4gdG9wbW9zdE1NYXJrZG93bk5vZGU7XG4gIH1cblxuICBnZXREb2N1bWVudE1hcmtkb3duU3R5bGVOb2RlKCkge1xuICAgIGNvbnN0IHsgdG9wbW9zdE1NYXJrZG93blN0eWxlTm9kZSB9ID0gdGhpcy5nZXRTdGF0ZSgpO1xuXG4gICAgcmV0dXJuIHRvcG1vc3RNTWFya2Rvd25TdHlsZU5vZGU7XG4gIH1cblxuICBzZXRNYXJrZG93blRva2VucyhtYXJrZG93blRva2Vucykge1xuICAgIHRoaXMudXBkYXRlU3RhdGUoe1xuICAgICAgbWFya2Rvd25Ub2tlbnNcbiAgICB9KTtcbiAgfVxuXG4gIHNldE1hcmtkb3duU3R5bGVUb2tlbnMobWFya2Rvd25TdHlsZVRva2Vucykge1xuICAgIHRoaXMudXBkYXRlU3RhdGUoe1xuICAgICAgbWFya2Rvd25TdHlsZVRva2Vuc1xuICAgIH0pO1xuICB9XG5cbiAgc2V0RG9jdW1lbnRNYXJrZG93bk5vZGUodG9wbW9zdE1NYXJrZG93bk5vZGUpIHtcbiAgICB0aGlzLnVwZGF0ZVN0YXRlKHtcbiAgICAgIHRvcG1vc3RNTWFya2Rvd25Ob2RlXG4gICAgfSk7XG4gIH1cblxuICBzZXREb2N1bWVudE1hcmtkb3duU3R5bGVOb2RlKHRvcG1vc3RNTWFya2Rvd25TdHlsZU5vZGUpIHtcbiAgICB0aGlzLnVwZGF0ZVN0YXRlKHtcbiAgICAgIHRvcG1vc3RNTWFya2Rvd25TdHlsZU5vZGVcbiAgICB9KTtcbiAgfVxuXG4gIHNldEluaXRpYWxTdGF0ZSgpIHtcbiAgICBjb25zdCBtYXJrZG93blRva2VucyA9IG51bGwsXG4gICAgICAgICAgbWFya2Rvd25TdHlsZVRva2VucyA9IG51bGwsXG4gICAgICAgICAgZG9jdW1lbnRNYXJrZG93bk5vZGUgPSBudWxsLFxuICAgICAgICAgIGRvY3VtZW50TWFya2Rvd25TdHlsZU5vZGUgPSBudWxsO1xuXG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBtYXJrZG93blRva2VucyxcbiAgICAgIG1hcmtkb3duU3R5bGVUb2tlbnMsXG4gICAgICBkb2N1bWVudE1hcmtkb3duTm9kZSxcbiAgICAgIGRvY3VtZW50TWFya2Rvd25TdHlsZU5vZGVcbiAgICB9KTtcbiAgfVxuXG4gIGRpZE1vdW50KCkge1xuICAgIHRoaXMubWFya2Rvd24oKTtcblxuICAgIHRoaXMucHJldmlldygpO1xuXG4gICAgdGhpcy51cGRhdGUoKTtcbiAgfVxuXG4gIHdpbGxVbm1vdW50KCkge1xuICAgIC8vL1xuICB9XG5cbiAgY2hpbGRFbGVtZW50cygpIHtcbiAgICByZXR1cm4gKFxuXG4gICAgICA8Q29sdW1uc0Rpdj5cbiAgICAgICAgPExlZnRTaXplYWJsZURpdj5cbiAgICAgICAgICA8TGVmdFRhYkJ1dHRvbnNEaXYgb25DdXN0b21NYXJrZG93bj17dGhpcy5tYXJrZG93bkN1c3RvbUhhbmRsZXJ9IG9uQ3VzdG9tTWFya2Rvd25TdHlsZT17dGhpcy5tYXJrZG93blN0eWxlQ3VzdG9tSGFuZGxlcn0gLz5cbiAgICAgICAgICA8TWFya2Rvd25Db250YWluZXJEaXYgb25DdXN0b21LZXlVcD17dGhpcy5rZXlVcEN1c3RvbUhhbmRsZXJ9IC8+XG4gICAgICAgICAgPE1hcmtkb3duU3R5bGVDb250YWluZXJEaXYgb25DdXN0b21LZXlVcD17dGhpcy5rZXlVcEN1c3RvbUhhbmRsZXJ9IC8+XG4gICAgICAgIDwvTGVmdFNpemVhYmxlRGl2PlxuICAgICAgICA8VmVydGljYWxTcGxpdHRlckRpdi8+XG4gICAgICAgIDxDb2x1bW5EaXY+XG4gICAgICAgICAgPFJvd3NEaXY+XG4gICAgICAgICAgICA8UmlnaHRUYWJCdXR0b25zRGl2IG9uQ3VzdG9tQ1NTPXt0aGlzLmNzc0N1c3RvbUhhbmRsZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ3VzdG9tSFRNTD17dGhpcy5odG1sQ3VzdG9tSGFuZGxlcn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DdXN0b21QcmV2aWV3PXt0aGlzLnByZXZpZXdDdXN0b21IYW5kbGVyfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkN1c3RvbVBsYWluVGV4dD17dGhpcy5wbGFpblRleHRDdXN0b21IYW5kbGVyfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxQYWdlQnV0dG9uc0RpdiBvbkN1c3RvbVBhZ2VVcGRhdGU9e3RoaXMucGFnZVVwZGF0ZUN1c3RvbUhhbmRsZXJ9IC8+XG4gICAgICAgICAgICA8Q1NTQ29udGFpbmVyRGl2Lz5cbiAgICAgICAgICAgIDxIVE1MQ29udGFpbmVyRGl2Lz5cbiAgICAgICAgICAgIDxQcmV2aWV3Q29udGFpbmVyRGl2Lz5cbiAgICAgICAgICAgIDxQbGFpblRleHRDb250YWluZXJEaXYvPlxuICAgICAgICAgICAgPEhUTUxQYXJzZVRyZWVUZXh0YXJlYS8+XG4gICAgICAgICAgICA8Q1NTUGFyc2VUcmVlVGV4dGFyZWEvPlxuICAgICAgICAgIDwvUm93c0Rpdj5cbiAgICAgICAgPC9Db2x1bW5EaXY+XG4gICAgICA8L0NvbHVtbnNEaXY+XG5cbiAgICApO1xuICB9XG5cbiAgaW5pdGlhbGlzZSgpIHtcbiAgICB0aGlzLmFzc2lnbkNvbnRleHQoKTtcblxuICAgIHRoaXMuc2V0SW5pdGlhbFN0YXRlKCk7XG5cbiAgICBjb25zdCB7IGluaXRpYWxNYXJrZG93biwgaW5pdGlhbE1hcmtkb3duU3R5bGUgfSA9IHRoaXMuY29uc3RydWN0b3IsXG4gICAgICAgICAgbWFya2Rvd25TdHlsZSA9IGluaXRpYWxNYXJrZG93blN0eWxlLCAvLy9cbiAgICAgICAgICBtYXJrZG93biA9IGluaXRpYWxNYXJrZG93bjsgLy8vXG5cbiAgICB0aGlzLnNldE1hcmtkb3duU3R5bGUobWFya2Rvd25TdHlsZSk7XG5cbiAgICB0aGlzLnNldE1hcmtkb3duKG1hcmtkb3duKTtcbiAgfVxuXG4gIHN0YXRpYyBpbml0aWFsTWFya2Rvd24gPSBpbml0aWFsTWFya2Rvd247XG5cbiAgc3RhdGljIGluaXRpYWxNYXJrZG93blN0eWxlID0gXCJcIjtcblxuICBzdGF0aWMgdGFnTmFtZSA9IFwiZGl2XCI7XG5cbiAgc3RhdGljIGlnbm9yZWRQcm9wZXJ0aWVzID0gW1xuICAgIFwibWFya2Rvd25TdHlsZUVsZW1lbnRcIlxuICBdO1xuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICBjbGFzc05hbWU6IFwidmlld1wiXG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTdHlsZShWaWV3KWBcblxuICBwYWRkaW5nOiAxcmVtO1xuICBcbmA7XG5cbmZ1bmN0aW9uIHBhdGhUb1VSTChwYXRoKSB7XG4gIGNvbnN0IHVybCA9IGBodHRwczovL2RqYWxiYXQuY29tLyR7cGF0aH1gO1xuXG4gIHJldHVybiB1cmw7XG59XG4iXSwibmFtZXMiOlsidG9rZW5zRnJvbU1hcmtkb3duIiwidG9rZW5zRnJvbU1hcmtkb3duU3R5bGUiLCJkb2N1bWVudE1hcmtkb3duTm9kZUZyb21Ub2tlbnMiLCJodG1sRnJvbU1hcmtkb3duT3B0aW9uc0FuZEltcG9ydGVyIiwiZG9jdW1lbnRNYXJrZG93blN0eWxlTm9kZUZyb21Ub2tlbnMiLCJ0b3Btb3N0SFRNTE5vZGVGcm9tRG9jdW1lbnRNYXJrZG93bk5vZGUiLCJjc3NGcm9tTWFya2Rvd25TdHlsZUFuZENTU1NlbGVjdG9yc1N0cmluZyIsInRvcG1vc3RDU1NOb2RlRnJvbURvY3VtZW50TWFya2Rvd25TdHlsZU5vZGUiLCJncmFtbWFyVXRpbGl0aWVzIiwiVmlldyIsIkVsZW1lbnQiLCJwYWdlVXBkYXRlQ3VzdG9tSGFuZGxlciIsImV2ZW50IiwiZWxlbWVudCIsImluZGV4IiwidXBkYXRlSFRNTCIsIm1hcmtkb3duU3R5bGVDdXN0b21IYW5kbGVyIiwibWFya2Rvd25TdHlsZSIsIm1hcmtkb3duQ3VzdG9tSGFuZGxlciIsIm1hcmtkb3duIiwicGxhaW5UZXh0Q3VzdG9tSGFuZGxlciIsInBsYWluVGV4dCIsInByZXZpZXdDdXN0b21IYW5kbGVyIiwicHJldmlldyIsImtleVVwQ3VzdG9tSGFuZGxlciIsInVwZGF0ZSIsImh0bWxDdXN0b21IYW5kbGVyIiwiaHRtbCIsImNzc0N1c3RvbUhhbmRsZXIiLCJjc3MiLCJ1cGRhdGVNYXJrZG93blN0eWxlIiwidXBkYXRlTWFya2Rvd24iLCJ1cGRhdGVDU1MiLCJnZXRNYXJrZG93blN0eWxlIiwidG9rZW5zIiwiZG9jdW1lbnRNYXJrZG93blN0eWxlTm9kZSIsInJlc2V0TWFya2Rvd25TdHlsZVRva2VucyIsInJlc2V0RG9jdW1lbnRNYXJrZG93blN0eWxlTm9kZSIsImNsZWFyTWFya2Rvd25TdHlsZVBhcnNlVHJlZVRleHRhcmVhIiwibm9kZSIsInBhcnNlVHJlZSIsImFzUGFyc2VUcmVlIiwibWFya2Rvd25TdHlsZVRva2VucyIsInNldE1hcmtkb3duU3R5bGVUb2tlbnMiLCJzZXREb2N1bWVudE1hcmtkb3duU3R5bGVOb2RlIiwidXBkYXRlTWFya2Rvd25TdHlsZVBhcnNlVHJlZVRleHRhcmVhIiwiZ2V0TWFya2Rvd24iLCJkb2N1bWVudE1hcmtkb3duTm9kZSIsInJlc2V0TWFya2Rvd25Ub2tlbnMiLCJyZXNldERvY3VtZW50TWFya2Rvd25Ob2RlIiwiY2xlYXJNYXJrZG93blBhcnNlVHJlZVRleHRhcmVhIiwiY29udGV4dCIsImltcG9ydGVyIiwicmVzb2x2ZSIsImRvY3VtZW50TWFya2Rvd25Ob2RlUGFyc2VUcmVlIiwibWFya2Rvd25QYXJzZVRyZWUiLCJtYXJrZG93blRva2VucyIsInNldE1hcmtkb3duVG9rZW5zIiwic2V0RG9jdW1lbnRNYXJrZG93bk5vZGUiLCJ1cGRhdGVNYXJrZG93blBhcnNlVHJlZVRleHRhcmVhIiwiY2xlYXJYTVAiLCJjbGVhclByZXZpZXdEaXYiLCJjbGVhclBsYWluVGV4dFRleHRhcmVhIiwiY2xlYXJIVE1MUGFyc2VUcmVlVGV4dGFyZWEiLCJjbGVhclBhZ2VCdXR0b25zRGl2IiwiZ2V0RG9jdW1lbnRNYXJrZG93bk5vZGUiLCJ0b3Btb3N0SFRNTE5vZGUiLCJnZXRNYXJrZG93blRva2VucyIsImRpdmlzaW9uSFRNTE5vZGUiLCJnZXREaXZpc2lvbkhUTUxOb2RlQXQiLCJkaXZpc2lvbkhUTUxOT2RlUGFyc2VUcmVlIiwiaHRtbFBhcnNlVHJlZSIsImRpdmlzaW9uSFRNTE5vZGVzIiwiZ2V0RGl2aXNpb25IVE1MTm9kZXMiLCJsZW5ndGgiLCJwYXRoVG9VUkwiLCJ1cGRhdGVQcmV2aWV3RGl2IiwidXBkYXRlUGxhaW5UZXh0VGV4dGFyZWEiLCJ1cGRhdGVIVE1MUGFyc2VUcmVlVGV4dGFyZWEiLCJ1cGRhdGVQYWdlQnV0dG9uc0RpdiIsIm9wdGlvbnMiLCJpbmRleE9wdGlvbnMiLCJ1cGRhdGVYTVAiLCJnZXRNYXJrZG93blN0eWxlVG9rZW5zIiwibWFya2Rvd25TdHlsZUVsZW1lbnQiLCJnZXRNYXJrZG93blN0eWxlRWxlbWVudCIsImdldERvY3VtZW50TWFya2Rvd25TdHlsZU5vZGUiLCJFTVBUWV9TVFJJTkciLCJzZXRDU1MiLCJjbGVhckNTU1BhcnNlVHJlZVRleHRhcmVhIiwiY2xlYXJDU1MiLCJ0b3Btb3N0Q1NTTm9kZSIsInRhcmdldCIsIldFQl9UQVJHRVQiLCJ0b3Btb3N0Q1NTTm9kZVBhcnNlVHJlZSIsImNzc1BhcnNlVHJlZSIsInVwZGF0ZUNTU1BhcnNlVHJlZVRleHRhcmVhIiwiY3NzU2VsZWN0b3JzU3RyaW5nIiwiQ1NTX1NFTEVDVE9SU19TVFJJTkciLCJoaWRlTWFya2Rvd25Db250YWluZXJEaXYiLCJzaG93TWFya2Rvd25TdHlsZUNvbnRhaW5lckRpdiIsInNob3dNYXJrZG93bkNvbnRhaW5lckRpdiIsImhpZGVNYXJrZG93blN0eWxlQ29udGFpbmVyRGl2IiwiaGlkZUNTU0NvbnRhaW5lckRpdiIsImhpZGVIVE1MQ29udGFpbmVyRGl2IiwiaGlkZVByZXZpZXdDb250YWluZXJEaXYiLCJzaG93UGxhaW5UZXh0Q29udGFpbmVyRGl2IiwiaGlkZUNTU1BhcnNlVHJlZVRleHRhcmVhIiwic2hvd0hUTUxQYXJzZVRyZWVUZXh0YXJlYSIsInNob3dQcmV2aWV3Q29udGFpbmVyRGl2IiwiaGlkZVBsYWluVGV4dENvbnRhaW5lckRpdiIsInNob3dIVE1MQ29udGFpbmVyRGl2Iiwic2hvd0NTU0NvbnRhaW5lckRpdiIsInNob3dDU1NQYXJzZVRyZWVUZXh0YXJlYSIsImhpZGVIVE1MUGFyc2VUcmVlVGV4dGFyZWEiLCJwcm9wZXJ0aWVzIiwiZ2V0U3RhdGUiLCJ0b3Btb3N0TU1hcmtkb3duTm9kZSIsInRvcG1vc3RNTWFya2Rvd25TdHlsZU5vZGUiLCJ1cGRhdGVTdGF0ZSIsInNldEluaXRpYWxTdGF0ZSIsInNldFN0YXRlIiwiZGlkTW91bnQiLCJ3aWxsVW5tb3VudCIsImNoaWxkRWxlbWVudHMiLCJDb2x1bW5zRGl2IiwiTGVmdFNpemVhYmxlRGl2IiwiTGVmdFRhYkJ1dHRvbnNEaXYiLCJvbkN1c3RvbU1hcmtkb3duIiwib25DdXN0b21NYXJrZG93blN0eWxlIiwiTWFya2Rvd25Db250YWluZXJEaXYiLCJvbkN1c3RvbUtleVVwIiwiTWFya2Rvd25TdHlsZUNvbnRhaW5lckRpdiIsIlZlcnRpY2FsU3BsaXR0ZXJEaXYiLCJDb2x1bW5EaXYiLCJSb3dzRGl2IiwiUmlnaHRUYWJCdXR0b25zRGl2Iiwib25DdXN0b21DU1MiLCJvbkN1c3RvbUhUTUwiLCJvbkN1c3RvbVByZXZpZXciLCJvbkN1c3RvbVBsYWluVGV4dCIsIlBhZ2VCdXR0b25zRGl2Iiwib25DdXN0b21QYWdlVXBkYXRlIiwiQ1NTQ29udGFpbmVyRGl2IiwiSFRNTENvbnRhaW5lckRpdiIsIlByZXZpZXdDb250YWluZXJEaXYiLCJQbGFpblRleHRDb250YWluZXJEaXYiLCJIVE1MUGFyc2VUcmVlVGV4dGFyZWEiLCJDU1NQYXJzZVRyZWVUZXh0YXJlYSIsImluaXRpYWxpc2UiLCJhc3NpZ25Db250ZXh0IiwiaW5pdGlhbE1hcmtkb3duIiwiaW5pdGlhbE1hcmtkb3duU3R5bGUiLCJzZXRNYXJrZG93blN0eWxlIiwic2V0TWFya2Rvd24iLCJ0YWdOYW1lIiwiaWdub3JlZFByb3BlcnRpZXMiLCJkZWZhdWx0UHJvcGVydGllcyIsImNsYXNzTmFtZSIsIndpdGhTdHlsZSIsInBhdGgiLCJ1cmwiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQXNjQTs7O2VBQUE7OztzRUFwY3NCO3NCQUVFO3VCQUNTOzRCQUNtQztxRUFFM0M7b0VBQ0U7NkRBQ0M7NERBQ0E7NkRBQ0M7OERBQ0M7OERBQ0M7Z0VBQ0M7aUVBQ0M7NkRBQ0E7OERBQ0M7a0VBQ0E7c0VBQ0k7eUJBRVg7MEJBQ2U7MkJBQ1M7Ozs7OztBQUVuRCxNQUFNLEVBQUVBLGtCQUFrQixFQUNsQkMsdUJBQXVCLEVBQ3ZCQyw4QkFBOEIsRUFDOUJDLGtDQUFrQyxFQUNsQ0MsbUNBQW1DLEVBQ25DQyx1Q0FBdUMsRUFDdkNDLHlDQUF5QyxFQUN6Q0MsMkNBQTJDLEVBQUUsR0FBR0MsdUJBQWdCO0FBRXhFLE1BQU1DLGFBQWFDLGFBQU87SUFDeEJDLDBCQUEwQixDQUFDQyxPQUFPQyxTQUFTQztRQUN6QyxJQUFJLENBQUNDLFVBQVUsQ0FBQ0Q7SUFDbEIsRUFBQztJQUVERSw2QkFBNkIsQ0FBQ0osT0FBT0M7UUFDbkMsSUFBSSxDQUFDSSxhQUFhO0lBQ3BCLEVBQUM7SUFFREMsd0JBQXdCLENBQUNOLE9BQU9DO1FBQzlCLElBQUksQ0FBQ00sUUFBUTtJQUNmLEVBQUM7SUFFREMseUJBQXlCLENBQUNSLE9BQU9DO1FBQy9CLElBQUksQ0FBQ1EsU0FBUztJQUNoQixFQUFDO0lBRURDLHVCQUF1QixDQUFDVixPQUFPQztRQUM3QixJQUFJLENBQUNVLE9BQU87SUFDZCxFQUFDO0lBRURDLHFCQUFxQixDQUFDWixPQUFPQztRQUMzQixJQUFJLENBQUNZLE1BQU07SUFDYixFQUFDO0lBRURDLG9CQUFvQixDQUFDZCxPQUFPQztRQUMxQixJQUFJLENBQUNjLElBQUk7SUFDWCxFQUFDO0lBRURDLG1CQUFtQixDQUFDaEIsT0FBT0M7UUFDekIsSUFBSSxDQUFDZ0IsR0FBRztJQUNWLEVBQUM7SUFFREosU0FBUztRQUNQLElBQUksQ0FBQ0ssbUJB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