@jscrpt/common 1.2.0 → 2.0.0-beta.20211108120022

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 (238) hide show
  1. package/changelog.md +24 -0
  2. package/dist/es2015/decorators/bindThis.decorator.js +24 -24
  3. package/dist/es2015/decorators/bindThis.decorator.js.map +1 -0
  4. package/dist/es2015/decorators/callOnce.decorator.js +29 -28
  5. package/dist/es2015/decorators/callOnce.decorator.js.map +1 -0
  6. package/dist/es2015/decorators/debounceCall.decorator.js +25 -26
  7. package/dist/es2015/decorators/debounceCall.decorator.js.map +1 -0
  8. package/dist/es2015/decorators/index.js +4 -4
  9. package/dist/es2015/decorators/index.js.map +1 -0
  10. package/dist/es2015/encoder/encoder.js +220 -231
  11. package/dist/es2015/encoder/encoder.js.map +1 -0
  12. package/dist/es2015/enums/index.js +2 -2
  13. package/dist/es2015/enums/index.js.map +1 -0
  14. package/dist/es2015/enums/orderByDirection.js +15 -15
  15. package/dist/es2015/enums/orderByDirection.js.map +1 -0
  16. package/dist/es2015/index.js +10 -24
  17. package/dist/es2015/index.js.map +1 -0
  18. package/dist/es2015/indexNode.js +2 -2
  19. package/dist/es2015/indexNode.js.map +1 -0
  20. package/dist/es2015/initJsDevMode.js +8 -0
  21. package/dist/es2015/initJsDevMode.js.map +1 -0
  22. package/dist/es2015/jsDevMode.js +8 -8
  23. package/dist/es2015/jsDevMode.js.map +1 -0
  24. package/dist/es2015/normalizer/charMaps.js +20 -27
  25. package/dist/es2015/normalizer/charMaps.js.map +1 -0
  26. package/dist/es2015/normalizer/index.js +3 -3
  27. package/dist/es2015/normalizer/index.js.map +1 -0
  28. package/dist/es2015/normalizer/normalizer.js +14 -14
  29. package/dist/es2015/normalizer/normalizer.js.map +1 -0
  30. package/dist/es2015/paginator/paginator.js +230 -224
  31. package/dist/es2015/paginator/paginator.js.map +1 -0
  32. package/dist/es2015/types/dictionaries.js +2 -1
  33. package/dist/es2015/types/dictionaries.js.map +1 -0
  34. package/dist/es2015/types/enums.js +2 -0
  35. package/dist/es2015/types/enums.js.map +1 -0
  36. package/dist/es2015/types/functions.js +2 -0
  37. package/dist/es2015/types/functions.js.map +1 -0
  38. package/dist/es2015/types/index.js +5 -3
  39. package/dist/es2015/types/index.js.map +1 -0
  40. package/dist/es2015/types/valueNamePair.js +2 -1
  41. package/dist/es2015/types/valueNamePair.js.map +1 -0
  42. package/dist/es2015/utils/common.js +209 -215
  43. package/dist/es2015/utils/common.js.map +1 -0
  44. package/dist/es2015/utils/index.js +4 -4
  45. package/dist/es2015/utils/index.js.map +1 -0
  46. package/dist/es2015/utils/lang.js +79 -79
  47. package/dist/es2015/utils/lang.js.map +1 -0
  48. package/dist/es2015/utils/nameof.js +6 -6
  49. package/dist/es2015/utils/nameof.js.map +1 -0
  50. package/dist/es2020/decorators/bindThis.decorator.js +23 -0
  51. package/dist/es2020/decorators/bindThis.decorator.js.map +1 -0
  52. package/dist/es2020/decorators/callOnce.decorator.js +28 -0
  53. package/dist/es2020/decorators/callOnce.decorator.js.map +1 -0
  54. package/dist/es2020/decorators/debounceCall.decorator.js +24 -0
  55. package/dist/es2020/decorators/debounceCall.decorator.js.map +1 -0
  56. package/dist/es2020/decorators/index.js +4 -0
  57. package/dist/es2020/decorators/index.js.map +1 -0
  58. package/dist/es2020/encoder/encoder.js +220 -0
  59. package/dist/es2020/encoder/encoder.js.map +1 -0
  60. package/dist/es2020/enums/index.js +2 -0
  61. package/dist/es2020/enums/index.js.map +1 -0
  62. package/dist/es2020/enums/orderByDirection.js +15 -0
  63. package/dist/es2020/enums/orderByDirection.js.map +1 -0
  64. package/dist/es2020/index.js +10 -0
  65. package/dist/es2020/index.js.map +1 -0
  66. package/dist/es2020/indexNode.js +2 -0
  67. package/dist/es2020/indexNode.js.map +1 -0
  68. package/dist/es2020/initJsDevMode.js +8 -0
  69. package/dist/es2020/initJsDevMode.js.map +1 -0
  70. package/dist/es2020/jsDevMode.js +8 -0
  71. package/dist/es2020/jsDevMode.js.map +1 -0
  72. package/dist/es2020/normalizer/charMaps.js +20 -0
  73. package/dist/es2020/normalizer/charMaps.js.map +1 -0
  74. package/dist/es2020/normalizer/index.js +3 -0
  75. package/dist/es2020/normalizer/index.js.map +1 -0
  76. package/dist/es2020/normalizer/normalizer.js +14 -0
  77. package/dist/es2020/normalizer/normalizer.js.map +1 -0
  78. package/dist/es2020/paginator/paginator.js +230 -0
  79. package/dist/es2020/paginator/paginator.js.map +1 -0
  80. package/dist/es2020/types/dictionaries.js +2 -0
  81. package/dist/es2020/types/dictionaries.js.map +1 -0
  82. package/dist/es2020/types/enums.js +2 -0
  83. package/dist/es2020/types/enums.js.map +1 -0
  84. package/dist/es2020/types/functions.js +2 -0
  85. package/dist/es2020/types/functions.js.map +1 -0
  86. package/dist/es2020/types/index.js +5 -0
  87. package/dist/es2020/types/index.js.map +1 -0
  88. package/dist/es2020/types/valueNamePair.js +2 -0
  89. package/dist/es2020/types/valueNamePair.js.map +1 -0
  90. package/dist/es2020/utils/common.js +208 -0
  91. package/dist/es2020/utils/common.js.map +1 -0
  92. package/dist/es2020/utils/index.js +4 -0
  93. package/dist/es2020/utils/index.js.map +1 -0
  94. package/dist/es2020/utils/lang.js +79 -0
  95. package/dist/es2020/utils/lang.js.map +1 -0
  96. package/dist/es2020/utils/nameof.js +6 -0
  97. package/dist/es2020/utils/nameof.js.map +1 -0
  98. package/dist/es5/decorators/bindThis.decorator.js +24 -24
  99. package/dist/es5/decorators/bindThis.decorator.js.map +1 -0
  100. package/dist/es5/decorators/callOnce.decorator.js +33 -28
  101. package/dist/es5/decorators/callOnce.decorator.js.map +1 -0
  102. package/dist/es5/decorators/debounceCall.decorator.js +30 -27
  103. package/dist/es5/decorators/debounceCall.decorator.js.map +1 -0
  104. package/dist/es5/decorators/index.js +4 -4
  105. package/dist/es5/decorators/index.js.map +1 -0
  106. package/dist/es5/encoder/encoder.js +222 -233
  107. package/dist/es5/encoder/encoder.js.map +1 -0
  108. package/dist/es5/enums/index.js +2 -2
  109. package/dist/es5/enums/index.js.map +1 -0
  110. package/dist/es5/enums/orderByDirection.js +15 -15
  111. package/dist/es5/enums/orderByDirection.js.map +1 -0
  112. package/dist/es5/index.js +10 -24
  113. package/dist/es5/index.js.map +1 -0
  114. package/dist/es5/indexNode.js +2 -2
  115. package/dist/es5/indexNode.js.map +1 -0
  116. package/dist/es5/initJsDevMode.js +8 -0
  117. package/dist/es5/initJsDevMode.js.map +1 -0
  118. package/dist/es5/jsDevMode.js +8 -8
  119. package/dist/es5/jsDevMode.js.map +1 -0
  120. package/dist/es5/normalizer/charMaps.js +20 -35
  121. package/dist/es5/normalizer/charMaps.js.map +1 -0
  122. package/dist/es5/normalizer/index.js +3 -3
  123. package/dist/es5/normalizer/index.js.map +1 -0
  124. package/dist/es5/normalizer/normalizer.js +14 -14
  125. package/dist/es5/normalizer/normalizer.js.map +1 -0
  126. package/dist/es5/paginator/paginator.js +232 -226
  127. package/dist/es5/paginator/paginator.js.map +1 -0
  128. package/dist/es5/types/dictionaries.js +2 -1
  129. package/dist/es5/types/dictionaries.js.map +1 -0
  130. package/dist/es5/types/enums.js +2 -0
  131. package/dist/es5/types/enums.js.map +1 -0
  132. package/dist/es5/types/functions.js +2 -0
  133. package/dist/es5/types/functions.js.map +1 -0
  134. package/dist/es5/types/index.js +5 -3
  135. package/dist/es5/types/index.js.map +1 -0
  136. package/dist/es5/types/valueNamePair.js +2 -1
  137. package/dist/es5/types/valueNamePair.js.map +1 -0
  138. package/dist/es5/utils/common.js +220 -232
  139. package/dist/es5/utils/common.js.map +1 -0
  140. package/dist/es5/utils/index.js +4 -4
  141. package/dist/es5/utils/index.js.map +1 -0
  142. package/dist/es5/utils/lang.js +79 -79
  143. package/dist/es5/utils/lang.js.map +1 -0
  144. package/dist/es5/utils/nameof.js +6 -6
  145. package/dist/es5/utils/nameof.js.map +1 -0
  146. package/dist/module/decorators/bindThis.decorator.js +28 -28
  147. package/dist/module/decorators/bindThis.decorator.js.map +1 -0
  148. package/dist/module/decorators/callOnce.decorator.js +33 -32
  149. package/dist/module/decorators/callOnce.decorator.js.map +1 -0
  150. package/dist/module/decorators/debounceCall.decorator.js +29 -30
  151. package/dist/module/decorators/debounceCall.decorator.js.map +1 -0
  152. package/dist/module/decorators/index.js +7 -16
  153. package/dist/module/decorators/index.js.map +1 -0
  154. package/dist/module/encoder/encoder.js +224 -235
  155. package/dist/module/encoder/encoder.js.map +1 -0
  156. package/dist/module/enums/index.js +5 -14
  157. package/dist/module/enums/index.js.map +1 -0
  158. package/dist/module/enums/orderByDirection.js +18 -18
  159. package/dist/module/enums/orderByDirection.js.map +1 -0
  160. package/dist/module/index.js +13 -37
  161. package/dist/module/index.js.map +1 -0
  162. package/dist/module/indexNode.js +5 -14
  163. package/dist/module/indexNode.js.map +1 -0
  164. package/dist/module/initJsDevMode.js +10 -0
  165. package/dist/module/initJsDevMode.js.map +1 -0
  166. package/dist/module/jsDevMode.js +12 -12
  167. package/dist/module/jsDevMode.js.map +1 -0
  168. package/dist/module/normalizer/charMaps.js +23 -31
  169. package/dist/module/normalizer/charMaps.js.map +1 -0
  170. package/dist/module/normalizer/index.js +6 -15
  171. package/dist/module/normalizer/index.js.map +1 -0
  172. package/dist/module/normalizer/normalizer.js +18 -18
  173. package/dist/module/normalizer/normalizer.js.map +1 -0
  174. package/dist/module/paginator/paginator.js +234 -228
  175. package/dist/module/paginator/paginator.js.map +1 -0
  176. package/dist/module/types/dictionaries.js +3 -3
  177. package/dist/module/types/dictionaries.js.map +1 -0
  178. package/dist/module/types/enums.js +3 -0
  179. package/dist/module/types/enums.js.map +1 -0
  180. package/dist/module/types/functions.js +3 -0
  181. package/dist/module/types/functions.js.map +1 -0
  182. package/dist/module/types/index.js +8 -15
  183. package/dist/module/types/index.js.map +1 -0
  184. package/dist/module/types/valueNamePair.js +3 -3
  185. package/dist/module/types/valueNamePair.js.map +1 -0
  186. package/dist/module/utils/common.js +232 -240
  187. package/dist/module/utils/common.js.map +1 -0
  188. package/dist/module/utils/index.js +7 -16
  189. package/dist/module/utils/index.js.map +1 -0
  190. package/dist/module/utils/lang.js +99 -99
  191. package/dist/module/utils/lang.js.map +1 -0
  192. package/dist/module/utils/nameof.js +10 -9
  193. package/dist/module/utils/nameof.js.map +1 -0
  194. package/package.json +45 -16
  195. package/src/decorators/bindThis.decorator.d.ts +5 -7
  196. package/src/decorators/bindThis.decorator.d.ts.map +1 -1
  197. package/src/decorators/callOnce.decorator.d.ts +5 -5
  198. package/src/decorators/callOnce.decorator.d.ts.map +1 -1
  199. package/src/decorators/debounceCall.decorator.d.ts +5 -5
  200. package/src/decorators/debounceCall.decorator.d.ts.map +1 -1
  201. package/src/decorators/index.d.ts +3 -3
  202. package/src/encoder/encoder.d.ts +45 -45
  203. package/src/encoder/encoder.d.ts.map +1 -1
  204. package/src/enums/index.d.ts +1 -1
  205. package/src/enums/orderByDirection.d.ts +13 -13
  206. package/src/index.d.ts +9 -17
  207. package/src/index.d.ts.map +1 -1
  208. package/src/indexNode.d.ts +1 -1
  209. package/src/initJsDevMode.d.ts +2 -0
  210. package/src/initJsDevMode.d.ts.map +1 -0
  211. package/src/jsDevMode.d.ts +8 -8
  212. package/src/jsDevMode.d.ts.map +1 -1
  213. package/src/normalizer/charMaps.d.ts +5 -9
  214. package/src/normalizer/charMaps.d.ts.map +1 -1
  215. package/src/normalizer/index.d.ts +2 -2
  216. package/src/normalizer/normalizer.d.ts +7 -6
  217. package/src/normalizer/normalizer.d.ts.map +1 -1
  218. package/src/paginator/paginator.d.ts +129 -129
  219. package/src/paginator/paginator.d.ts.map +1 -1
  220. package/src/types/dictionaries.d.ts +15 -6
  221. package/src/types/dictionaries.d.ts.map +1 -1
  222. package/src/types/enums.d.ts +7 -0
  223. package/src/types/enums.d.ts.map +1 -0
  224. package/src/types/functions.d.ts +14 -0
  225. package/src/types/functions.d.ts.map +1 -0
  226. package/src/types/index.d.ts +4 -2
  227. package/src/types/index.d.ts.map +1 -1
  228. package/src/types/valueNamePair.d.ts +13 -13
  229. package/src/utils/common.d.ts +181 -122
  230. package/src/utils/common.d.ts.map +1 -1
  231. package/src/utils/index.d.ts +3 -3
  232. package/src/utils/lang.d.ts +41 -41
  233. package/src/utils/lang.d.ts.map +1 -1
  234. package/src/utils/nameof.d.ts +5 -5
  235. package/src/utils/nameof.d.ts.map +1 -1
  236. package/version.bak +1 -1
  237. package/.jsbeautifyrc +0 -7
  238. package/appveyor.yml +0 -67
@@ -1,235 +1,224 @@
1
- "use strict";
2
- /**
3
- * A Javascript object to encode and/or decode html characters using HTML or Numeric entities that handles double or partial encoding
4
- * Author: R Reid
5
- * source: http://www.strictly-software.com/htmlencode
6
- * Licences: GPL, The MIT License (MIT)
7
- * Copyright: (c) 2011 Robert Reid - Strictly-Software.com
8
- *
9
- * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
10
- * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
11
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
12
- *
13
- * Revision:
14
- * 2011-07-14, Jacques-Yves Bleau:
15
- * - fixed conversion error with capitalized accentuated characters
16
- * + converted arr1 and arr2 to object property to remove redundancy
17
- *
18
- * Revision:
19
- * 2011-11-10, Ce-Yi Hio:
20
- * - fixed conversion error with a number of capitalized entity characters
21
- *
22
- * Revision:
23
- * 2011-11-10, Rob Reid:
24
- * - changed array format
25
- *
26
- * Revision:
27
- * 2012-09-23, Alex Oss:
28
- * - replaced string concatonation in numEncode with string builder, push and join for peformance with ammendments by Rob Reid
29
- */
30
- Object.defineProperty(exports, "__esModule", { value: true });
31
- exports.Encoder = void 0;
32
- class Encoder {
33
- constructor() {
34
- // When encoding do we convert characters into html or numerical entities
35
- this.EncodeType = "entity"; // entity OR numerical
36
- // arrays for conversion from HTML Entities to Numerical values
37
- this.arr1 = [' ', '¡', '¢', '£', '¤', '¥', '¦', '§', '¨', '©', 'ª', '«', '¬', '­', '®', '¯', '°', '±', '²', '³', '´', 'µ', '¶', '·', '¸', '¹', 'º', '»', '¼', '½', '¾', '¿', 'À', 'Á', 'Â', 'Ã', 'Ä', 'Å', 'Æ', 'Ç', 'È', 'É', 'Ê', 'Ë', 'Ì', 'Í', 'Î', 'Ï', 'Ð', 'Ñ', 'Ò', 'Ó', 'Ô', 'Õ', 'Ö', '×', 'Ø', 'Ù', 'Ú', 'Û', 'Ü', 'Ý', 'Þ', 'ß', 'à', 'á', 'â', 'ã', 'ä', 'å', 'æ', 'ç', 'è', 'é', 'ê', 'ë', 'ì', 'í', 'î', 'ï', 'ð', 'ñ', 'ò', 'ó', 'ô', 'õ', 'ö', '÷', 'ø', 'ù', 'ú', 'û', 'ü', 'ý', 'þ', 'ÿ', '"', '&', '<', '>', 'Œ', 'œ', 'Š', 'š', 'Ÿ', 'ˆ', '˜', ' ', ' ', ' ', '‌', '‍', '‎', '‏', '–', '—', '‘', '’', '‚', '“', '”', '„', '†', '‡', '‰', '‹', '›', '€', 'ƒ', 'Α', 'Β', 'Γ', 'Δ', 'Ε', 'Ζ', 'Η', 'Θ', 'Ι', 'Κ', 'Λ', 'Μ', 'Ν', 'Ξ', 'Ο', 'Π', 'Ρ', 'Σ', 'Τ', 'Υ', 'Φ', 'Χ', 'Ψ', 'Ω', 'α', 'β', 'γ', 'δ', 'ε', 'ζ', 'η', 'θ', 'ι', 'κ', 'λ', 'μ', 'ν', 'ξ', 'ο', 'π', 'ρ', 'ς', 'σ', 'τ', 'υ', 'φ', 'χ', 'ψ', 'ω', 'ϑ', 'ϒ', 'ϖ', '•', '…', '′', '″', '‾', '⁄', '℘', 'ℑ', 'ℜ', '™', 'ℵ', '←', '↑', '→', '↓', '↔', '↵', '⇐', '⇑', '⇒', '⇓', '⇔', '∀', '∂', '∃', '∅', '∇', '∈', '∉', '∋', '∏', '∑', '−', '∗', '√', '∝', '∞', '∠', '∧', '∨', '∩', '∪', '∫', '∴', '∼', '≅', '≈', '≠', '≡', '≤', '≥', '⊂', '⊃', '⊄', '⊆', '⊇', '⊕', '⊗', '⊥', '⋅', '⌈', '⌉', '⌊', '⌋', '⟨', '⟩', '◊', '♠', '♣', '♥', '♦'];
38
- this.arr2 = [' ', '¡', '¢', '£', '¤', '¥', '¦', '§', '¨', '©', 'ª', '«', '¬', '­', '®', '¯', '°', '±', '²', '³', '´', 'µ', '¶', '·', '¸', '¹', 'º', '»', '¼', '½', '¾', '¿', 'À', 'Á', 'Â', 'Ã', 'Ä', 'Å', 'Æ', 'Ç', 'È', 'É', 'Ê', 'Ë', 'Ì', 'Í', 'Î', 'Ï', 'Ð', 'Ñ', 'Ò', 'Ó', 'Ô', 'Õ', 'Ö', '×', 'Ø', 'Ù', 'Ú', 'Û', 'Ü', 'Ý', 'Þ', 'ß', 'à', 'á', 'â', 'ã', 'ä', 'å', 'æ', 'ç', 'è', 'é', 'ê', 'ë', 'ì', 'í', 'î', 'ï', 'ð', 'ñ', 'ò', 'ó', 'ô', 'õ', 'ö', '÷', 'ø', 'ù', 'ú', 'û', 'ü', 'ý', 'þ', 'ÿ', '"', '&', '<', '>', 'Œ', 'œ', 'Š', 'š', 'Ÿ', 'ˆ', '˜', ' ', ' ', ' ', '‌', '‍', '‎', '‏', '–', '—', '‘', '’', '‚', '“', '”', '„', '†', '‡', '‰', '‹', '›', '€', 'ƒ', 'Α', 'Β', 'Γ', 'Δ', 'Ε', 'Ζ', 'Η', 'Θ', 'Ι', 'Κ', 'Λ', 'Μ', 'Ν', 'Ξ', 'Ο', 'Π', 'Ρ', 'Σ', 'Τ', 'Υ', 'Φ', 'Χ', 'Ψ', 'Ω', 'α', 'β', 'γ', 'δ', 'ε', 'ζ', 'η', 'θ', 'ι', 'κ', 'λ', 'μ', 'ν', 'ξ', 'ο', 'π', 'ρ', 'ς', 'σ', 'τ', 'υ', 'φ', 'χ', 'ψ', 'ω', 'ϑ', 'ϒ', 'ϖ', '•', '…', '′', '″', '‾', '⁄', '℘', 'ℑ', 'ℜ', '™', 'ℵ', '←', '↑', '→', '↓', '↔', '↵', '⇐', '⇑', '⇒', '⇓', '⇔', '∀', '∂', '∃', '∅', '∇', '∈', '∉', '∋', '∏', '∑', '−', '∗', '√', '∝', '∞', '∠', '∧', '∨', '∩', '∪', '∫', '∴', '∼', '≅', '≈', '≠', '≡', '≤', '≥', '⊂', '⊃', '⊄', '⊆', '⊇', '⊕', '⊗', '⊥', '⋅', '⌈', '⌉', '⌊', '⌋', '〈', '〉', '◊', '♠', '♣', '♥', '♦'];
39
- }
40
- isEmpty(val) {
41
- if (val) {
42
- return ((val === null) || val.length == 0 || /^\s+$/.test(val));
43
- }
44
- else {
45
- return true;
46
- }
47
- }
48
- ;
49
- // Convert HTML entities into numerical entities
50
- HTML2Numerical(s) {
51
- return this.swapArrayVals(s, this.arr1, this.arr2);
52
- }
53
- ;
54
- // Convert Numerical entities into HTML entities
55
- NumericalToHTML(s) {
56
- return this.swapArrayVals(s, this.arr2, this.arr1);
57
- }
58
- ;
59
- // Numerically encodes all unicode characters
60
- numEncode(s) {
61
- if (this.isEmpty(s)) {
62
- return "";
63
- }
64
- var a = [], l = s.length;
65
- for (var i = 0; i < l; i++) {
66
- var c = s.charAt(i);
67
- if (c < " " || c > "~") {
68
- a.push("&#");
69
- a.push(c.charCodeAt()); //numeric value of code point
70
- a.push(";");
71
- }
72
- else {
73
- a.push(c);
74
- }
75
- }
76
- return a.join("");
77
- }
78
- ;
79
- // HTML Decode numerical and HTML entities back to original values
80
- htmlDecode(s) {
81
- var c, m, d = s;
82
- if (this.isEmpty(d)) {
83
- return "";
84
- }
85
- // convert HTML entites back to numerical entites first
86
- d = this.HTML2Numerical(d);
87
- // look for numerical entities &#34;
88
- var arr = d.match(/&#[0-9]{1,5};/g);
89
- // if no matches found in string then skip
90
- if (arr != null) {
91
- for (var x = 0; x < arr.length; x++) {
92
- m = arr[x];
93
- c = m.substring(2, m.length - 1); //get numeric part which is refernce to unicode character
94
- // if its a valid number we can decode
95
- if (c >= -32768 && c <= 65535) {
96
- // decode every single match within string
97
- d = d.replace(m, String.fromCharCode(c));
98
- }
99
- else {
100
- d = d.replace(m, ""); //invalid so replace with nada
101
- }
102
- }
103
- }
104
- return d;
105
- }
106
- ;
107
- // encode an input string into either numerical or HTML entities
108
- htmlEncode(s, dbl) {
109
- if (this.isEmpty(s)) {
110
- return "";
111
- }
112
- // do we allow double encoding? E.g will &amp; be turned into &amp;amp;
113
- dbl = dbl || false; //default to prevent double encoding
114
- // if allowing double encoding we do ampersands first
115
- if (dbl) {
116
- if (this.EncodeType == "numerical") {
117
- s = s.replace(/&/g, "&#38;");
118
- }
119
- else {
120
- s = s.replace(/&/g, "&amp;");
121
- }
122
- }
123
- // convert the xss chars to numerical entities ' " < >
124
- s = this.XSSEncode(s, false);
125
- if (this.EncodeType == "numerical" || !dbl) {
126
- // Now call function that will convert any HTML entities to numerical codes
127
- s = this.HTML2Numerical(s);
128
- }
129
- // Now encode all chars above 127 e.g unicode
130
- s = this.numEncode(s);
131
- // now we know anything that needs to be encoded has been converted to numerical entities we
132
- // can encode any ampersands & that are not part of encoded entities
133
- // to handle the fact that I need to do a negative check and handle multiple ampersands &&&
134
- // I am going to use a placeholder
135
- // if we don't want double encoded entities we ignore the & in existing entities
136
- if (!dbl) {
137
- s = s.replace(/&#/g, "##AMPHASH##");
138
- if (this.EncodeType == "numerical") {
139
- s = s.replace(/&/g, "&#38;");
140
- }
141
- else {
142
- s = s.replace(/&/g, "&amp;");
143
- }
144
- s = s.replace(/##AMPHASH##/g, "&#");
145
- }
146
- // replace any malformed entities
147
- s = s.replace(/&#\d*([^\d;]|$)/g, "$1");
148
- if (!dbl) {
149
- // safety check to correct any double encoded &amp;
150
- s = this.correctEncoding(s);
151
- }
152
- // now do we need to convert our numerical encoded string into entities
153
- if (this.EncodeType == "entity") {
154
- s = this.NumericalToHTML(s);
155
- }
156
- return s;
157
- }
158
- ;
159
- // Encodes the basic 4 characters used to malform HTML in XSS hacks
160
- XSSEncode(s, en) {
161
- if (!this.isEmpty(s)) {
162
- en = en || true;
163
- // do we convert to numerical or html entity?
164
- if (en) {
165
- s = s.replace(/\'/g, "&#39;"); //no HTML equivalent as &apos is not cross browser supported
166
- s = s.replace(/\"/g, "&quot;");
167
- s = s.replace(/</g, "&lt;");
168
- s = s.replace(/>/g, "&gt;");
169
- }
170
- else {
171
- s = s.replace(/\'/g, "&#39;"); //no HTML equivalent as &apos is not cross browser supported
172
- s = s.replace(/\"/g, "&#34;");
173
- s = s.replace(/</g, "&#60;");
174
- s = s.replace(/>/g, "&#62;");
175
- }
176
- return s;
177
- }
178
- else {
179
- return "";
180
- }
181
- }
182
- ;
183
- // returns true if a string contains html or numerical encoded entities
184
- hasEncoded(s) {
185
- if (/&#[0-9]{1,5};/g.test(s)) {
186
- return true;
187
- }
188
- else if (/&[A-Z]{2,6};/gi.test(s)) {
189
- return true;
190
- }
191
- else {
192
- return false;
193
- }
194
- }
195
- ;
196
- // will remove any unicode characters
197
- stripUnicode(s) {
198
- return s.replace(/[^\x20-\x7E]/g, "");
199
- }
200
- ;
201
- // corrects any double encoded &amp; entities e.g &amp;amp;
202
- correctEncoding(s) {
203
- return s.replace(/(&amp;)(amp;)+/, "$1");
204
- }
205
- ;
206
- // Function to loop through an array swaping each item with the value from another array e.g swap HTML entities with Numericals
207
- swapArrayVals(s, arr1, arr2) {
208
- if (this.isEmpty(s)) {
209
- return "";
210
- }
211
- var re;
212
- if (arr1 && arr2) {
213
- //ShowDebug("in swapArrayVals arr1.length = " + arr1.length + " arr2.length = " + arr2.length)
214
- // array lengths must match
215
- if (arr1.length == arr2.length) {
216
- for (var x = 0, i = arr1.length; x < i; x++) {
217
- re = new RegExp(arr1[x], 'g');
218
- s = s.replace(re, arr2[x]); //swap arr1 item with matching item from arr2
219
- }
220
- }
221
- }
222
- return s;
223
- }
224
- ;
225
- inArray(item, arr) {
226
- for (var i = 0, x = arr.length; i < x; i++) {
227
- if (arr[i] === item) {
228
- return i;
229
- }
230
- }
231
- return -1;
232
- }
233
- }
234
- exports.Encoder = Encoder;
235
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5jb2Rlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbmNvZGVyL2VuY29kZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EyQkc7OztBQUVILE1BQWEsT0FBTztJQUFwQjtRQUVDLHlFQUF5RTtRQUN6RSxlQUFVLEdBQVcsUUFBUSxDQUFDLENBQUUsc0JBQXNCO1FBY3RELCtEQUErRDtRQUMvRCxTQUFJLEdBQWEsQ0FBQyxRQUFRLEVBQUMsU0FBUyxFQUFDLFFBQVEsRUFBQyxTQUFTLEVBQUMsVUFBVSxFQUFDLE9BQU8sRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLE9BQU8sRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFNBQVMsRUFBQyxPQUFPLEVBQUMsT0FBTyxFQUFDLE9BQU8sRUFBQyxRQUFRLEVBQUMsT0FBTyxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxTQUFTLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxTQUFTLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsU0FBUyxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxTQUFTLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsU0FBUyxFQUFDLFFBQVEsRUFBQyxPQUFPLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsU0FBUyxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsU0FBUyxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFNBQVMsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxTQUFTLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFNBQVMsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxTQUFTLEVBQUMsUUFBUSxFQUFDLE9BQU8sRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxTQUFTLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsU0FBUyxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsU0FBUyxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsU0FBUyxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxPQUFPLEVBQUMsT0FBTyxFQUFDLE9BQU8sRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxTQUFTLEVBQUMsUUFBUSxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsV0FBVyxFQUFDLFFBQVEsRUFBQyxPQUFPLEVBQUMsU0FBUyxFQUFDLFFBQVEsRUFBQyxTQUFTLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsT0FBTyxFQUFDLFNBQVMsRUFBQyxPQUFPLEVBQUMsV0FBVyxFQUFDLE9BQU8sRUFBQyxPQUFPLEVBQUMsT0FBTyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsUUFBUSxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsV0FBVyxFQUFDLFFBQVEsRUFBQyxPQUFPLEVBQUMsU0FBUyxFQUFDLFFBQVEsRUFBQyxTQUFTLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsT0FBTyxFQUFDLFVBQVUsRUFBQyxTQUFTLEVBQUMsT0FBTyxFQUFDLFdBQVcsRUFBQyxPQUFPLEVBQUMsT0FBTyxFQUFDLE9BQU8sRUFBQyxTQUFTLEVBQUMsWUFBWSxFQUFDLFNBQVMsRUFBQyxPQUFPLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsVUFBVSxFQUFDLFNBQVMsRUFBQyxRQUFRLEVBQUMsU0FBUyxFQUFDLFdBQVcsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFNBQVMsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsUUFBUSxFQUFDLFNBQVMsRUFBQyxNQUFNLEVBQUMsUUFBUSxFQUFDLE9BQU8sRUFBQyxTQUFTLEVBQUMsVUFBVSxFQUFDLFNBQVMsRUFBQyxRQUFRLEVBQUMsU0FBUyxFQUFDLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxFQUFDLE9BQU8sRUFBQyxPQUFPLEVBQUMsT0FBTyxFQUFDLFVBQVUsRUFBQyxPQUFPLEVBQUMsUUFBUSxFQUFDLFNBQVMsRUFBQyxNQUFNLEVBQUMsU0FBUyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsT0FBTyxFQUFDLE9BQU8sRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxTQUFTLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsT0FBTyxFQUFDLFVBQVUsRUFBQyxTQUFTLEVBQUMsVUFBVSxFQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzM0RSxTQUFJLEdBQWEsQ0FBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxPQUFPLEVBQUMsT0FBTyxFQUFDLE9BQU8sRUFBQyxPQUFPLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLFNBQVMsQ0FBQyxDQUFDO0lBbVF4MEUsQ0FBQztJQWpSQSxPQUFPLENBQUMsR0FBTztRQUVkLElBQUcsR0FBRyxFQUNBO1lBQ0wsT0FBTyxDQUFDLENBQUMsR0FBRyxLQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxNQUFNLElBQUUsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUM1RDthQUVLO1lBQ0wsT0FBTyxJQUFJLENBQUM7U0FDWjtJQUNGLENBQUM7SUFBQSxDQUFDO0lBTUYsZ0RBQWdEO0lBQ2hELGNBQWMsQ0FBQyxDQUFLO1FBRW5CLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUFBLENBQUM7SUFFRixnREFBZ0Q7SUFDaEQsZUFBZSxDQUFDLENBQUs7UUFFcEIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBQUEsQ0FBQztJQUdGLDZDQUE2QztJQUM3QyxTQUFTLENBQUMsQ0FBSztRQUVkLElBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFDWjtZQUNJLE9BQU8sRUFBRSxDQUFDO1NBQ2I7UUFFUCxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQ1QsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFFZCxLQUFLLElBQUksQ0FBQyxHQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUNsQjtZQUNMLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFWCxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFDdEI7Z0JBQ1IsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDYixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsNkJBQTZCO2dCQUNyRCxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ1o7aUJBRVE7Z0JBQ1IsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNWO1NBQ0Q7UUFFRCxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbkIsQ0FBQztJQUFBLENBQUM7SUFFRixrRUFBa0U7SUFDbEUsVUFBVSxDQUFDLENBQUs7UUFFZixJQUFJLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVkLElBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFDWjtZQUNJLE9BQU8sRUFBRSxDQUFDO1NBQ2I7UUFFUCx1REFBdUQ7UUFDdkQsQ0FBQyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFM0Isb0NBQW9DO1FBQ3BDLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUVwQywwQ0FBMEM7UUFDMUMsSUFBRyxHQUFHLElBQUUsSUFBSSxFQUNOO1lBQ0wsS0FBSSxJQUFJLENBQUMsR0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQ3ZCO2dCQUNSLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ1gsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyx5REFBeUQ7Z0JBQ3hGLHNDQUFzQztnQkFDdEMsSUFBRyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLEtBQUssRUFDaEI7b0JBQ1gsMENBQTBDO29CQUMxQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUN6QztxQkFFVztvQkFDWCxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyw4QkFBOEI7aUJBQ3BEO2FBQ0Q7U0FDRDtRQUVELE9BQU8sQ0FBQyxDQUFDO0lBQ1YsQ0FBQztJQUFBLENBQUM7SUFFRixnRUFBZ0U7SUFDaEUsVUFBVSxDQUFDLENBQUssRUFBRSxHQUFPO1FBRXhCLElBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFDWjtZQUNJLE9BQU8sRUFBRSxDQUFDO1NBQ2I7UUFFUCx1RUFBdUU7UUFDdkUsR0FBRyxHQUFHLEdBQUcsSUFBSSxLQUFLLENBQUMsQ0FBQyxvQ0FBb0M7UUFFeEQscURBQXFEO1FBQ3JELElBQUcsR0FBRyxFQUNBO1lBQ0wsSUFBRyxJQUFJLENBQUMsVUFBVSxJQUFFLFdBQVcsRUFDdEI7Z0JBQ1IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2FBQzdCO2lCQUVRO2dCQUNSLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQzthQUM3QjtTQUNEO1FBRUQsc0RBQXNEO1FBQ3RELENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBQyxLQUFLLENBQUMsQ0FBQztRQUU1QixJQUFHLElBQUksQ0FBQyxVQUFVLElBQUUsV0FBVyxJQUFJLENBQUMsR0FBRyxFQUNqQztZQUNMLDJFQUEyRTtZQUMzRSxDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUMzQjtRQUVELDZDQUE2QztRQUM3QyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUV0Qiw0RkFBNEY7UUFDNUYsb0VBQW9FO1FBQ3BFLDJGQUEyRjtRQUMzRixrQ0FBa0M7UUFFbEMsZ0ZBQWdGO1FBQ2hGLElBQUcsQ0FBQyxHQUFHLEVBQ0Q7WUFDTCxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUMsYUFBYSxDQUFDLENBQUM7WUFFbkMsSUFBRyxJQUFJLENBQUMsVUFBVSxJQUFFLFdBQVcsRUFDdEI7Z0JBQ1IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2FBQzdCO2lCQUVRO2dCQUNSLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQzthQUM3QjtZQUVELENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBQyxJQUFJLENBQUMsQ0FBQztTQUNuQztRQUVELGlDQUFpQztRQUNqQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUV4QyxJQUFHLENBQUMsR0FBRyxFQUNEO1lBQ0wsbURBQW1EO1lBQ25ELENBQUMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzVCO1FBRUQsdUVBQXVFO1FBQ3ZFLElBQUcsSUFBSSxDQUFDLFVBQVUsSUFBRSxRQUFRLEVBQ3RCO1lBQ0wsQ0FBQyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDNUI7UUFFRCxPQUFPLENBQUMsQ0FBQztJQUNWLENBQUM7SUFBQSxDQUFDO0lBRUYsbUVBQW1FO0lBQ25FLFNBQVMsQ0FBQyxDQUFLLEVBQUMsRUFBTTtRQUVyQixJQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFDYjtZQUNMLEVBQUUsR0FBRyxFQUFFLElBQUksSUFBSSxDQUFDO1lBQ2hCLDZDQUE2QztZQUM3QyxJQUFHLEVBQUUsRUFDSTtnQkFDUixDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyw0REFBNEQ7Z0JBQzFGLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBQyxRQUFRLENBQUMsQ0FBQztnQkFDOUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUMzQixDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUMsTUFBTSxDQUFDLENBQUM7YUFDM0I7aUJBRVE7Z0JBQ1IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsNERBQTREO2dCQUMxRixDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQzdCLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksRUFBQyxPQUFPLENBQUMsQ0FBQztnQkFDNUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQzVCO1lBRUQsT0FBTyxDQUFDLENBQUM7U0FDVDthQUVLO1lBQ0wsT0FBTyxFQUFFLENBQUM7U0FDVjtJQUNGLENBQUM7SUFBQSxDQUFDO0lBRUYsdUVBQXVFO0lBQ3ZFLFVBQVUsQ0FBQyxDQUFLO1FBRWYsSUFBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQ3JCO1lBQ0wsT0FBTyxJQUFJLENBQUM7U0FDWjthQUNVLElBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUNoQztZQUNMLE9BQU8sSUFBSSxDQUFDO1NBQ1o7YUFFSztZQUNMLE9BQU8sS0FBSyxDQUFDO1NBQ2I7SUFDRixDQUFDO0lBQUEsQ0FBQztJQUVGLHFDQUFxQztJQUNyQyxZQUFZLENBQUMsQ0FBSztRQUVqQixPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsZUFBZSxFQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFBQSxDQUFDO0lBRUYsMkRBQTJEO0lBQzNELGVBQWUsQ0FBQyxDQUFLO1FBRXBCLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBQyxJQUFJLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBQUEsQ0FBQztJQUVGLCtIQUErSDtJQUMvSCxhQUFhLENBQUMsQ0FBSyxFQUFDLElBQVEsRUFBQyxJQUFRO1FBRXBDLElBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFDWjtZQUNJLE9BQU8sRUFBRSxDQUFDO1NBQ2I7UUFFUCxJQUFJLEVBQUUsQ0FBQztRQUVQLElBQUcsSUFBSSxJQUFJLElBQUksRUFDVDtZQUNMLDhGQUE4RjtZQUM5RiwyQkFBMkI7WUFDM0IsSUFBRyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQ3BCO2dCQUNSLEtBQUksSUFBSSxDQUFDLEdBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQzVCO29CQUNYLEVBQUUsR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7b0JBQzlCLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLDZDQUE2QztpQkFDeEU7YUFDRDtTQUNEO1FBRUQsT0FBTyxDQUFDLENBQUM7SUFDVixDQUFDO0lBQUEsQ0FBQztJQUVGLE9BQU8sQ0FBRSxJQUFRLEVBQUUsR0FBTztRQUV6QixLQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUNyQztZQUNMLElBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksRUFDWDtnQkFDUixPQUFPLENBQUMsQ0FBQzthQUNUO1NBQ0Q7UUFFRCxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ1gsQ0FBQztDQUVEO0FBdFJELDBCQXNSQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBBIEphdmFzY3JpcHQgb2JqZWN0IHRvIGVuY29kZSBhbmQvb3IgZGVjb2RlIGh0bWwgY2hhcmFjdGVycyB1c2luZyBIVE1MIG9yIE51bWVyaWMgZW50aXRpZXMgdGhhdCBoYW5kbGVzIGRvdWJsZSBvciBwYXJ0aWFsIGVuY29kaW5nXHJcbiAqIEF1dGhvcjogUiBSZWlkXHJcbiAqIHNvdXJjZTogaHR0cDovL3d3dy5zdHJpY3RseS1zb2Z0d2FyZS5jb20vaHRtbGVuY29kZVxyXG4gKiBMaWNlbmNlczogR1BMLCBUaGUgTUlUIExpY2Vuc2UgKE1JVClcclxuICogQ29weXJpZ2h0OiAoYykgMjAxMSBSb2JlcnQgUmVpZCAtIFN0cmljdGx5LVNvZnR3YXJlLmNvbVxyXG4gKlxyXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxyXG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cclxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXHJcbiAqXHJcbiAqIFJldmlzaW9uOlxyXG4gKiAgMjAxMS0wNy0xNCwgSmFjcXVlcy1ZdmVzIEJsZWF1OlxyXG4gKiAgICAgICAtIGZpeGVkIGNvbnZlcnNpb24gZXJyb3Igd2l0aCBjYXBpdGFsaXplZCBhY2NlbnR1YXRlZCBjaGFyYWN0ZXJzXHJcbiAqICAgICAgICsgY29udmVydGVkIGFycjEgYW5kIGFycjIgdG8gb2JqZWN0IHByb3BlcnR5IHRvIHJlbW92ZSByZWR1bmRhbmN5XHJcbiAqXHJcbiAqIFJldmlzaW9uOlxyXG4gKiAgMjAxMS0xMS0xMCwgQ2UtWWkgSGlvOlxyXG4gKiAgICAgICAtIGZpeGVkIGNvbnZlcnNpb24gZXJyb3Igd2l0aCBhIG51bWJlciBvZiBjYXBpdGFsaXplZCBlbnRpdHkgY2hhcmFjdGVyc1xyXG4gKlxyXG4gKiBSZXZpc2lvbjpcclxuICogIDIwMTEtMTEtMTAsIFJvYiBSZWlkOlxyXG4gKlx0XHQgLSBjaGFuZ2VkIGFycmF5IGZvcm1hdFxyXG4gKlxyXG4gKiBSZXZpc2lvbjpcclxuICogIDIwMTItMDktMjMsIEFsZXggT3NzOlxyXG4gKlx0XHQgLSByZXBsYWNlZCBzdHJpbmcgY29uY2F0b25hdGlvbiBpbiBudW1FbmNvZGUgd2l0aCBzdHJpbmcgYnVpbGRlciwgcHVzaCBhbmQgam9pbiBmb3IgcGVmb3JtYW5jZSB3aXRoIGFtbWVuZG1lbnRzIGJ5IFJvYiBSZWlkXHJcbiAqL1xyXG5cclxuZXhwb3J0IGNsYXNzIEVuY29kZXJcclxue1xyXG5cdC8vIFdoZW4gZW5jb2RpbmcgZG8gd2UgY29udmVydCBjaGFyYWN0ZXJzIGludG8gaHRtbCBvciBudW1lcmljYWwgZW50aXRpZXNcclxuXHRFbmNvZGVUeXBlOiBzdHJpbmcgPSBcImVudGl0eVwiOyAgLy8gZW50aXR5IE9SIG51bWVyaWNhbFxyXG5cclxuXHRpc0VtcHR5KHZhbDphbnkpXHJcbiAgICB7XHJcblx0XHRpZih2YWwpXHJcbiAgICAgICAge1xyXG5cdFx0XHRyZXR1cm4gKCh2YWw9PT1udWxsKSB8fCB2YWwubGVuZ3RoPT0wIHx8IC9eXFxzKyQvLnRlc3QodmFsKSk7XHJcblx0XHR9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9XHJcblx0fTtcclxuXHJcblx0Ly8gYXJyYXlzIGZvciBjb252ZXJzaW9uIGZyb20gSFRNTCBFbnRpdGllcyB0byBOdW1lcmljYWwgdmFsdWVzXHJcblx0YXJyMTogc3RyaW5nW10gPSBbJyZuYnNwOycsJyZpZXhjbDsnLCcmY2VudDsnLCcmcG91bmQ7JywnJmN1cnJlbjsnLCcmeWVuOycsJyZicnZiYXI7JywnJnNlY3Q7JywnJnVtbDsnLCcmY29weTsnLCcmb3JkZjsnLCcmbGFxdW87JywnJm5vdDsnLCcmc2h5OycsJyZyZWc7JywnJm1hY3I7JywnJmRlZzsnLCcmcGx1c21uOycsJyZzdXAyOycsJyZzdXAzOycsJyZhY3V0ZTsnLCcmbWljcm87JywnJnBhcmE7JywnJm1pZGRvdDsnLCcmY2VkaWw7JywnJnN1cDE7JywnJm9yZG07JywnJnJhcXVvOycsJyZmcmFjMTQ7JywnJmZyYWMxMjsnLCcmZnJhYzM0OycsJyZpcXVlc3Q7JywnJkFncmF2ZTsnLCcmQWFjdXRlOycsJyZBY2lyYzsnLCcmQXRpbGRlOycsJyZBdW1sOycsJyZBcmluZzsnLCcmQUVsaWc7JywnJkNjZWRpbDsnLCcmRWdyYXZlOycsJyZFYWN1dGU7JywnJkVjaXJjOycsJyZFdW1sOycsJyZJZ3JhdmU7JywnJklhY3V0ZTsnLCcmSWNpcmM7JywnJkl1bWw7JywnJkVUSDsnLCcmTnRpbGRlOycsJyZPZ3JhdmU7JywnJk9hY3V0ZTsnLCcmT2NpcmM7JywnJk90aWxkZTsnLCcmT3VtbDsnLCcmdGltZXM7JywnJk9zbGFzaDsnLCcmVWdyYXZlOycsJyZVYWN1dGU7JywnJlVjaXJjOycsJyZVdW1sOycsJyZZYWN1dGU7JywnJlRIT1JOOycsJyZzemxpZzsnLCcmYWdyYXZlOycsJyZhYWN1dGU7JywnJmFjaXJjOycsJyZhdGlsZGU7JywnJmF1bWw7JywnJmFyaW5nOycsJyZhZWxpZzsnLCcmY2NlZGlsOycsJyZlZ3JhdmU7JywnJmVhY3V0ZTsnLCcmZWNpcmM7JywnJmV1bWw7JywnJmlncmF2ZTsnLCcmaWFjdXRlOycsJyZpY2lyYzsnLCcmaXVtbDsnLCcmZXRoOycsJyZudGlsZGU7JywnJm9ncmF2ZTsnLCcmb2FjdXRlOycsJyZvY2lyYzsnLCcmb3RpbGRlOycsJyZvdW1sOycsJyZkaXZpZGU7JywnJm9zbGFzaDsnLCcmdWdyYXZlOycsJyZ1YWN1dGU7JywnJnVjaXJjOycsJyZ1dW1sOycsJyZ5YWN1dGU7JywnJnRob3JuOycsJyZ5dW1sOycsJyZxdW90OycsJyZhbXA7JywnJmx0OycsJyZndDsnLCcmT0VsaWc7JywnJm9lbGlnOycsJyZTY2Fyb247JywnJnNjYXJvbjsnLCcmWXVtbDsnLCcmY2lyYzsnLCcmdGlsZGU7JywnJmVuc3A7JywnJmVtc3A7JywnJnRoaW5zcDsnLCcmenduajsnLCcmendqOycsJyZscm07JywnJnJsbTsnLCcmbmRhc2g7JywnJm1kYXNoOycsJyZsc3F1bzsnLCcmcnNxdW87JywnJnNicXVvOycsJyZsZHF1bzsnLCcmcmRxdW87JywnJmJkcXVvOycsJyZkYWdnZXI7JywnJkRhZ2dlcjsnLCcmcGVybWlsOycsJyZsc2FxdW87JywnJnJzYXF1bzsnLCcmZXVybzsnLCcmZm5vZjsnLCcmQWxwaGE7JywnJkJldGE7JywnJkdhbW1hOycsJyZEZWx0YTsnLCcmRXBzaWxvbjsnLCcmWmV0YTsnLCcmRXRhOycsJyZUaGV0YTsnLCcmSW90YTsnLCcmS2FwcGE7JywnJkxhbWJkYTsnLCcmTXU7JywnJk51OycsJyZYaTsnLCcmT21pY3JvbjsnLCcmUGk7JywnJlJobzsnLCcmU2lnbWE7JywnJlRhdTsnLCcmVXBzaWxvbjsnLCcmUGhpOycsJyZDaGk7JywnJlBzaTsnLCcmT21lZ2E7JywnJmFscGhhOycsJyZiZXRhOycsJyZnYW1tYTsnLCcmZGVsdGE7JywnJmVwc2lsb247JywnJnpldGE7JywnJmV0YTsnLCcmdGhldGE7JywnJmlvdGE7JywnJmthcHBhOycsJyZsYW1iZGE7JywnJm11OycsJyZudTsnLCcmeGk7JywnJm9taWNyb247JywnJnBpOycsJyZyaG87JywnJnNpZ21hZjsnLCcmc2lnbWE7JywnJnRhdTsnLCcmdXBzaWxvbjsnLCcmcGhpOycsJyZjaGk7JywnJnBzaTsnLCcmb21lZ2E7JywnJnRoZXRhc3ltOycsJyZ1cHNpaDsnLCcmcGl2OycsJyZidWxsOycsJyZoZWxsaXA7JywnJnByaW1lOycsJyZQcmltZTsnLCcmb2xpbmU7JywnJmZyYXNsOycsJyZ3ZWllcnA7JywnJmltYWdlOycsJyZyZWFsOycsJyZ0cmFkZTsnLCcmYWxlZnN5bTsnLCcmbGFycjsnLCcmdWFycjsnLCcmcmFycjsnLCcmZGFycjsnLCcmaGFycjsnLCcmY3JhcnI7JywnJmxBcnI7JywnJnVBcnI7JywnJnJBcnI7JywnJmRBcnI7JywnJmhBcnI7JywnJmZvcmFsbDsnLCcmcGFydDsnLCcmZXhpc3Q7JywnJmVtcHR5OycsJyZuYWJsYTsnLCcmaXNpbjsnLCcmbm90aW47JywnJm5pOycsJyZwcm9kOycsJyZzdW07JywnJm1pbnVzOycsJyZsb3dhc3Q7JywnJnJhZGljOycsJyZwcm9wOycsJyZpbmZpbjsnLCcmYW5nOycsJyZhbmQ7JywnJm9yOycsJyZjYXA7JywnJmN1cDsnLCcmaW50OycsJyZ0aGVyZTQ7JywnJnNpbTsnLCcmY29uZzsnLCcmYXN5bXA7JywnJm5lOycsJyZlcXVpdjsnLCcmbGU7JywnJmdlOycsJyZzdWI7JywnJnN1cDsnLCcmbnN1YjsnLCcmc3ViZTsnLCcmc3VwZTsnLCcmb3BsdXM7JywnJm90aW1lczsnLCcmcGVycDsnLCcmc2RvdDsnLCcmbGNlaWw7JywnJnJjZWlsOycsJyZsZmxvb3I7JywnJnJmbG9vcjsnLCcmbGFuZzsnLCcmcmFuZzsnLCcmbG96OycsJyZzcGFkZXM7JywnJmNsdWJzOycsJyZoZWFydHM7JywnJmRpYW1zOyddO1xyXG5cdGFycjI6IHN0cmluZ1tdID0gWycmIzE2MDsnLCcmIzE2MTsnLCcmIzE2MjsnLCcmIzE2MzsnLCcmIzE2NDsnLCcmIzE2NTsnLCcmIzE2NjsnLCcmIzE2NzsnLCcmIzE2ODsnLCcmIzE2OTsnLCcmIzE3MDsnLCcmIzE3MTsnLCcmIzE3MjsnLCcmIzE3MzsnLCcmIzE3NDsnLCcmIzE3NTsnLCcmIzE3NjsnLCcmIzE3NzsnLCcmIzE3ODsnLCcmIzE3OTsnLCcmIzE4MDsnLCcmIzE4MTsnLCcmIzE4MjsnLCcmIzE4MzsnLCcmIzE4NDsnLCcmIzE4NTsnLCcmIzE4NjsnLCcmIzE4NzsnLCcmIzE4ODsnLCcmIzE4OTsnLCcmIzE5MDsnLCcmIzE5MTsnLCcmIzE5MjsnLCcmIzE5MzsnLCcmIzE5NDsnLCcmIzE5NTsnLCcmIzE5NjsnLCcmIzE5NzsnLCcmIzE5ODsnLCcmIzE5OTsnLCcmIzIwMDsnLCcmIzIwMTsnLCcmIzIwMjsnLCcmIzIwMzsnLCcmIzIwNDsnLCcmIzIwNTsnLCcmIzIwNjsnLCcmIzIwNzsnLCcmIzIwODsnLCcmIzIwOTsnLCcmIzIxMDsnLCcmIzIxMTsnLCcmIzIxMjsnLCcmIzIxMzsnLCcmIzIxNDsnLCcmIzIxNTsnLCcmIzIxNjsnLCcmIzIxNzsnLCcmIzIxODsnLCcmIzIxOTsnLCcmIzIyMDsnLCcmIzIyMTsnLCcmIzIyMjsnLCcmIzIyMzsnLCcmIzIyNDsnLCcmIzIyNTsnLCcmIzIyNjsnLCcmIzIyNzsnLCcmIzIyODsnLCcmIzIyOTsnLCcmIzIzMDsnLCcmIzIzMTsnLCcmIzIzMjsnLCcmIzIzMzsnLCcmIzIzNDsnLCcmIzIzNTsnLCcmIzIzNjsnLCcmIzIzNzsnLCcmIzIzODsnLCcmIzIzOTsnLCcmIzI0MDsnLCcmIzI0MTsnLCcmIzI0MjsnLCcmIzI0MzsnLCcmIzI0NDsnLCcmIzI0NTsnLCcmIzI0NjsnLCcmIzI0NzsnLCcmIzI0ODsnLCcmIzI0OTsnLCcmIzI1MDsnLCcmIzI1MTsnLCcmIzI1MjsnLCcmIzI1MzsnLCcmIzI1NDsnLCcmIzI1NTsnLCcmIzM0OycsJyYjMzg7JywnJiM2MDsnLCcmIzYyOycsJyYjMzM4OycsJyYjMzM5OycsJyYjMzUyOycsJyYjMzUzOycsJyYjMzc2OycsJyYjNzEwOycsJyYjNzMyOycsJyYjODE5NDsnLCcmIzgxOTU7JywnJiM4MjAxOycsJyYjODIwNDsnLCcmIzgyMDU7JywnJiM4MjA2OycsJyYjODIwNzsnLCcmIzgyMTE7JywnJiM4MjEyOycsJyYjODIxNjsnLCcmIzgyMTc7JywnJiM4MjE4OycsJyYjODIyMDsnLCcmIzgyMjE7JywnJiM4MjIyOycsJyYjODIyNDsnLCcmIzgyMjU7JywnJiM4MjQwOycsJyYjODI0OTsnLCcmIzgyNTA7JywnJiM4MzY0OycsJyYjNDAyOycsJyYjOTEzOycsJyYjOTE0OycsJyYjOTE1OycsJyYjOTE2OycsJyYjOTE3OycsJyYjOTE4OycsJyYjOTE5OycsJyYjOTIwOycsJyYjOTIxOycsJyYjOTIyOycsJyYjOTIzOycsJyYjOTI0OycsJyYjOTI1OycsJyYjOTI2OycsJyYjOTI3OycsJyYjOTI4OycsJyYjOTI5OycsJyYjOTMxOycsJyYjOTMyOycsJyYjOTMzOycsJyYjOTM0OycsJyYjOTM1OycsJyYjOTM2OycsJyYjOTM3OycsJyYjOTQ1OycsJyYjOTQ2OycsJyYjOTQ3OycsJyYjOTQ4OycsJyYjOTQ5OycsJyYjOTUwOycsJyYjOTUxOycsJyYjOTUyOycsJyYjOTUzOycsJyYjOTU0OycsJyYjOTU1OycsJyYjOTU2OycsJyYjOTU3OycsJyYjOTU4OycsJyYjOTU5OycsJyYjOTYwOycsJyYjOTYxOycsJyYjOTYyOycsJyYjOTYzOycsJyYjOTY0OycsJyYjOTY1OycsJyYjOTY2OycsJyYjOTY3OycsJyYjOTY4OycsJyYjOTY5OycsJyYjOTc3OycsJyYjOTc4OycsJyYjOTgyOycsJyYjODIyNjsnLCcmIzgyMzA7JywnJiM4MjQyOycsJyYjODI0MzsnLCcmIzgyNTQ7JywnJiM4MjYwOycsJyYjODQ3MjsnLCcmIzg0NjU7JywnJiM4NDc2OycsJyYjODQ4MjsnLCcmIzg1MDE7JywnJiM4NTkyOycsJyYjODU5MzsnLCcmIzg1OTQ7JywnJiM4NTk1OycsJyYjODU5NjsnLCcmIzg2Mjk7JywnJiM4NjU2OycsJyYjODY1NzsnLCcmIzg2NTg7JywnJiM4NjU5OycsJyYjODY2MDsnLCcmIzg3MDQ7JywnJiM4NzA2OycsJyYjODcwNzsnLCcmIzg3MDk7JywnJiM4NzExOycsJyYjODcxMjsnLCcmIzg3MTM7JywnJiM4NzE1OycsJyYjODcxOTsnLCcmIzg3MjE7JywnJiM4NzIyOycsJyYjODcyNzsnLCcmIzg3MzA7JywnJiM4NzMzOycsJyYjODczNDsnLCcmIzg3MzY7JywnJiM4NzQzOycsJyYjODc0NDsnLCcmIzg3NDU7JywnJiM4NzQ2OycsJyYjODc0NzsnLCcmIzg3NTY7JywnJiM4NzY0OycsJyYjODc3MzsnLCcmIzg3NzY7JywnJiM4ODAwOycsJyYjODgwMTsnLCcmIzg4MDQ7JywnJiM4ODA1OycsJyYjODgzNDsnLCcmIzg4MzU7JywnJiM4ODM2OycsJyYjODgzODsnLCcmIzg4Mzk7JywnJiM4ODUzOycsJyYjODg1NTsnLCcmIzg4Njk7JywnJiM4OTAxOycsJyYjODk2ODsnLCcmIzg5Njk7JywnJiM4OTcwOycsJyYjODk3MTsnLCcmIzkwMDE7JywnJiM5MDAyOycsJyYjOTY3NDsnLCcmIzk4MjQ7JywnJiM5ODI3OycsJyYjOTgyOTsnLCcmIzk4MzA7J107XHJcblxyXG5cdC8vIENvbnZlcnQgSFRNTCBlbnRpdGllcyBpbnRvIG51bWVyaWNhbCBlbnRpdGllc1xyXG5cdEhUTUwyTnVtZXJpY2FsKHM6YW55KVxyXG4gICAge1xyXG5cdFx0cmV0dXJuIHRoaXMuc3dhcEFycmF5VmFscyhzLCB0aGlzLmFycjEsIHRoaXMuYXJyMik7XHJcblx0fTtcclxuXHJcblx0Ly8gQ29udmVydCBOdW1lcmljYWwgZW50aXRpZXMgaW50byBIVE1MIGVudGl0aWVzXHJcblx0TnVtZXJpY2FsVG9IVE1MKHM6YW55KVxyXG4gICAge1xyXG5cdFx0cmV0dXJuIHRoaXMuc3dhcEFycmF5VmFscyhzLCB0aGlzLmFycjIsIHRoaXMuYXJyMSk7XHJcblx0fTtcclxuXHJcblxyXG5cdC8vIE51bWVyaWNhbGx5IGVuY29kZXMgYWxsIHVuaWNvZGUgY2hhcmFjdGVyc1xyXG5cdG51bUVuY29kZShzOmFueSlcclxuICAgIHtcclxuXHRcdGlmKHRoaXMuaXNFbXB0eShzKSlcclxuICAgICAgICB7IFxyXG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcclxuICAgICAgICB9XHJcblxyXG5cdFx0dmFyIGEgPSBbXSxcclxuXHRcdFx0bCA9IHMubGVuZ3RoO1xyXG5cclxuXHRcdGZvciAodmFyIGk9MDsgaSA8IGw7IGkrKylcclxuICAgICAgICB7XHJcblx0XHRcdHZhciBjID0gcy5jaGFyQXQoaSk7XHJcblx0XHRcdFxyXG4gICAgICAgICAgICBpZiAoYyA8IFwiIFwiIHx8IGMgPiBcIn5cIilcclxuICAgICAgICAgICAge1xyXG5cdFx0XHRcdGEucHVzaChcIiYjXCIpO1xyXG5cdFx0XHRcdGEucHVzaChjLmNoYXJDb2RlQXQoKSk7IC8vbnVtZXJpYyB2YWx1ZSBvZiBjb2RlIHBvaW50XHJcblx0XHRcdFx0YS5wdXNoKFwiO1wiKTtcclxuXHRcdFx0fVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuXHRcdFx0XHRhLnB1c2goYyk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gYS5qb2luKFwiXCIpO1xyXG5cdH07XHJcblxyXG5cdC8vIEhUTUwgRGVjb2RlIG51bWVyaWNhbCBhbmQgSFRNTCBlbnRpdGllcyBiYWNrIHRvIG9yaWdpbmFsIHZhbHVlc1xyXG5cdGh0bWxEZWNvZGUoczphbnkpXHJcbiAgICB7XHJcblx0XHR2YXIgYyxtLGQgPSBzO1xyXG5cclxuXHRcdGlmKHRoaXMuaXNFbXB0eShkKSkgXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcclxuICAgICAgICB9XHJcblxyXG5cdFx0Ly8gY29udmVydCBIVE1MIGVudGl0ZXMgYmFjayB0byBudW1lcmljYWwgZW50aXRlcyBmaXJzdFxyXG5cdFx0ZCA9IHRoaXMuSFRNTDJOdW1lcmljYWwoZCk7XHJcblxyXG5cdFx0Ly8gbG9vayBmb3IgbnVtZXJpY2FsIGVudGl0aWVzICYjMzQ7XHJcblx0XHR2YXIgYXJyID0gZC5tYXRjaCgvJiNbMC05XXsxLDV9Oy9nKTtcclxuXHJcblx0XHQvLyBpZiBubyBtYXRjaGVzIGZvdW5kIGluIHN0cmluZyB0aGVuIHNraXBcclxuXHRcdGlmKGFyciE9bnVsbClcclxuICAgICAgICB7XHJcblx0XHRcdGZvcih2YXIgeD0wOyB4IDwgYXJyLmxlbmd0aDsgeCsrKVxyXG4gICAgICAgICAgICB7XHJcblx0XHRcdFx0bSA9IGFyclt4XTtcclxuXHRcdFx0XHRjID0gbS5zdWJzdHJpbmcoMixtLmxlbmd0aC0xKTsgLy9nZXQgbnVtZXJpYyBwYXJ0IHdoaWNoIGlzIHJlZmVybmNlIHRvIHVuaWNvZGUgY2hhcmFjdGVyXHJcblx0XHRcdFx0Ly8gaWYgaXRzIGEgdmFsaWQgbnVtYmVyIHdlIGNhbiBkZWNvZGVcclxuXHRcdFx0XHRpZihjID49IC0zMjc2OCAmJiBjIDw9IDY1NTM1KVxyXG4gICAgICAgICAgICAgICAge1xyXG5cdFx0XHRcdFx0Ly8gZGVjb2RlIGV2ZXJ5IHNpbmdsZSBtYXRjaCB3aXRoaW4gc3RyaW5nXHJcblx0XHRcdFx0XHRkID0gZC5yZXBsYWNlKG0sIFN0cmluZy5mcm9tQ2hhckNvZGUoYykpO1xyXG5cdFx0XHRcdH1cclxuICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHtcclxuXHRcdFx0XHRcdGQgPSBkLnJlcGxhY2UobSwgXCJcIik7IC8vaW52YWxpZCBzbyByZXBsYWNlIHdpdGggbmFkYVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBkO1xyXG5cdH07XHJcblxyXG5cdC8vIGVuY29kZSBhbiBpbnB1dCBzdHJpbmcgaW50byBlaXRoZXIgbnVtZXJpY2FsIG9yIEhUTUwgZW50aXRpZXNcclxuXHRodG1sRW5jb2RlKHM6YW55LCBkYmw6YW55KVxyXG4gICAge1xyXG5cdFx0aWYodGhpcy5pc0VtcHR5KHMpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICAgICAgfVxyXG5cclxuXHRcdC8vIGRvIHdlIGFsbG93IGRvdWJsZSBlbmNvZGluZz8gRS5nIHdpbGwgJmFtcDsgYmUgdHVybmVkIGludG8gJmFtcDthbXA7XHJcblx0XHRkYmwgPSBkYmwgfHwgZmFsc2U7IC8vZGVmYXVsdCB0byBwcmV2ZW50IGRvdWJsZSBlbmNvZGluZ1xyXG5cclxuXHRcdC8vIGlmIGFsbG93aW5nIGRvdWJsZSBlbmNvZGluZyB3ZSBkbyBhbXBlcnNhbmRzIGZpcnN0XHJcblx0XHRpZihkYmwpXHJcbiAgICAgICAge1xyXG5cdFx0XHRpZih0aGlzLkVuY29kZVR5cGU9PVwibnVtZXJpY2FsXCIpXHJcbiAgICAgICAgICAgIHtcclxuXHRcdFx0XHRzID0gcy5yZXBsYWNlKC8mL2csIFwiJiMzODtcIik7XHJcblx0XHRcdH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB7XHJcblx0XHRcdFx0cyA9IHMucmVwbGFjZSgvJi9nLCBcIiZhbXA7XCIpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gY29udmVydCB0aGUgeHNzIGNoYXJzIHRvIG51bWVyaWNhbCBlbnRpdGllcyAnIFwiIDwgPlxyXG5cdFx0cyA9IHRoaXMuWFNTRW5jb2RlKHMsZmFsc2UpO1xyXG5cclxuXHRcdGlmKHRoaXMuRW5jb2RlVHlwZT09XCJudW1lcmljYWxcIiB8fCAhZGJsKVxyXG4gICAgICAgIHtcclxuXHRcdFx0Ly8gTm93IGNhbGwgZnVuY3Rpb24gdGhhdCB3aWxsIGNvbnZlcnQgYW55IEhUTUwgZW50aXRpZXMgdG8gbnVtZXJpY2FsIGNvZGVzXHJcblx0XHRcdHMgPSB0aGlzLkhUTUwyTnVtZXJpY2FsKHMpO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIE5vdyBlbmNvZGUgYWxsIGNoYXJzIGFib3ZlIDEyNyBlLmcgdW5pY29kZVxyXG5cdFx0cyA9IHRoaXMubnVtRW5jb2RlKHMpO1xyXG5cclxuXHRcdC8vIG5vdyB3ZSBrbm93IGFueXRoaW5nIHRoYXQgbmVlZHMgdG8gYmUgZW5jb2RlZCBoYXMgYmVlbiBjb252ZXJ0ZWQgdG8gbnVtZXJpY2FsIGVudGl0aWVzIHdlXHJcblx0XHQvLyBjYW4gZW5jb2RlIGFueSBhbXBlcnNhbmRzICYgdGhhdCBhcmUgbm90IHBhcnQgb2YgZW5jb2RlZCBlbnRpdGllc1xyXG5cdFx0Ly8gdG8gaGFuZGxlIHRoZSBmYWN0IHRoYXQgSSBuZWVkIHRvIGRvIGEgbmVnYXRpdmUgY2hlY2sgYW5kIGhhbmRsZSBtdWx0aXBsZSBhbXBlcnNhbmRzICYmJlxyXG5cdFx0Ly8gSSBhbSBnb2luZyB0byB1c2UgYSBwbGFjZWhvbGRlclxyXG5cclxuXHRcdC8vIGlmIHdlIGRvbid0IHdhbnQgZG91YmxlIGVuY29kZWQgZW50aXRpZXMgd2UgaWdub3JlIHRoZSAmIGluIGV4aXN0aW5nIGVudGl0aWVzXHJcblx0XHRpZighZGJsKVxyXG4gICAgICAgIHtcclxuXHRcdFx0cyA9IHMucmVwbGFjZSgvJiMvZyxcIiMjQU1QSEFTSCMjXCIpO1xyXG5cclxuXHRcdFx0aWYodGhpcy5FbmNvZGVUeXBlPT1cIm51bWVyaWNhbFwiKVxyXG4gICAgICAgICAgICB7XHJcblx0XHRcdFx0cyA9IHMucmVwbGFjZSgvJi9nLCBcIiYjMzg7XCIpO1xyXG5cdFx0XHR9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAge1xyXG5cdFx0XHRcdHMgPSBzLnJlcGxhY2UoLyYvZywgXCImYW1wO1wiKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0cyA9IHMucmVwbGFjZSgvIyNBTVBIQVNIIyMvZyxcIiYjXCIpO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIHJlcGxhY2UgYW55IG1hbGZvcm1lZCBlbnRpdGllc1xyXG5cdFx0cyA9IHMucmVwbGFjZSgvJiNcXGQqKFteXFxkO118JCkvZywgXCIkMVwiKTtcclxuXHJcblx0XHRpZighZGJsKVxyXG4gICAgICAgIHtcclxuXHRcdFx0Ly8gc2FmZXR5IGNoZWNrIHRvIGNvcnJlY3QgYW55IGRvdWJsZSBlbmNvZGVkICZhbXA7XHJcblx0XHRcdHMgPSB0aGlzLmNvcnJlY3RFbmNvZGluZyhzKTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBub3cgZG8gd2UgbmVlZCB0byBjb252ZXJ0IG91ciBudW1lcmljYWwgZW5jb2RlZCBzdHJpbmcgaW50byBlbnRpdGllc1xyXG5cdFx0aWYodGhpcy5FbmNvZGVUeXBlPT1cImVudGl0eVwiKVxyXG4gICAgICAgIHtcclxuXHRcdFx0cyA9IHRoaXMuTnVtZXJpY2FsVG9IVE1MKHMpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBzO1xyXG5cdH07XHJcblxyXG5cdC8vIEVuY29kZXMgdGhlIGJhc2ljIDQgY2hhcmFjdGVycyB1c2VkIHRvIG1hbGZvcm0gSFRNTCBpbiBYU1MgaGFja3NcclxuXHRYU1NFbmNvZGUoczphbnksZW46YW55KVxyXG4gICAge1xyXG5cdFx0aWYoIXRoaXMuaXNFbXB0eShzKSlcclxuICAgICAgICB7XHJcblx0XHRcdGVuID0gZW4gfHwgdHJ1ZTtcclxuXHRcdFx0Ly8gZG8gd2UgY29udmVydCB0byBudW1lcmljYWwgb3IgaHRtbCBlbnRpdHk/XHJcblx0XHRcdGlmKGVuKVxyXG4gICAgICAgICAgICB7XHJcblx0XHRcdFx0cyA9IHMucmVwbGFjZSgvXFwnL2csXCImIzM5O1wiKTsgLy9ubyBIVE1MIGVxdWl2YWxlbnQgYXMgJmFwb3MgaXMgbm90IGNyb3NzIGJyb3dzZXIgc3VwcG9ydGVkXHJcblx0XHRcdFx0cyA9IHMucmVwbGFjZSgvXFxcIi9nLFwiJnF1b3Q7XCIpO1xyXG5cdFx0XHRcdHMgPSBzLnJlcGxhY2UoLzwvZyxcIiZsdDtcIik7XHJcblx0XHRcdFx0cyA9IHMucmVwbGFjZSgvPi9nLFwiJmd0O1wiKTtcclxuXHRcdFx0fVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuXHRcdFx0XHRzID0gcy5yZXBsYWNlKC9cXCcvZyxcIiYjMzk7XCIpOyAvL25vIEhUTUwgZXF1aXZhbGVudCBhcyAmYXBvcyBpcyBub3QgY3Jvc3MgYnJvd3NlciBzdXBwb3J0ZWRcclxuXHRcdFx0XHRzID0gcy5yZXBsYWNlKC9cXFwiL2csXCImIzM0O1wiKTtcclxuXHRcdFx0XHRzID0gcy5yZXBsYWNlKC88L2csXCImIzYwO1wiKTtcclxuXHRcdFx0XHRzID0gcy5yZXBsYWNlKC8+L2csXCImIzYyO1wiKTtcclxuXHRcdFx0fVxyXG4gICAgICAgICAgICBcclxuXHRcdFx0cmV0dXJuIHM7XHJcblx0XHR9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuXHRcdFx0cmV0dXJuIFwiXCI7XHJcblx0XHR9XHJcblx0fTtcclxuXHJcblx0Ly8gcmV0dXJucyB0cnVlIGlmIGEgc3RyaW5nIGNvbnRhaW5zIGh0bWwgb3IgbnVtZXJpY2FsIGVuY29kZWQgZW50aXRpZXNcclxuXHRoYXNFbmNvZGVkKHM6YW55KVxyXG4gICAge1xyXG5cdFx0aWYoLyYjWzAtOV17MSw1fTsvZy50ZXN0KHMpKVxyXG4gICAgICAgIHtcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9XHJcbiAgICAgICAgZWxzZSBpZigvJltBLVpdezIsNn07L2dpLnRlc3QocykpXHJcbiAgICAgICAge1xyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblx0fTtcclxuXHJcblx0Ly8gd2lsbCByZW1vdmUgYW55IHVuaWNvZGUgY2hhcmFjdGVyc1xyXG5cdHN0cmlwVW5pY29kZShzOmFueSlcclxuICAgIHtcclxuXHRcdHJldHVybiBzLnJlcGxhY2UoL1teXFx4MjAtXFx4N0VdL2csXCJcIik7XHJcblx0fTtcclxuXHJcblx0Ly8gY29ycmVjdHMgYW55IGRvdWJsZSBlbmNvZGVkICZhbXA7IGVudGl0aWVzIGUuZyAmYW1wO2FtcDtcclxuXHRjb3JyZWN0RW5jb2RpbmcoczphbnkpXHJcbiAgICB7XHJcblx0XHRyZXR1cm4gcy5yZXBsYWNlKC8oJmFtcDspKGFtcDspKy8sXCIkMVwiKTtcclxuXHR9O1xyXG5cclxuXHQvLyBGdW5jdGlvbiB0byBsb29wIHRocm91Z2ggYW4gYXJyYXkgc3dhcGluZyBlYWNoIGl0ZW0gd2l0aCB0aGUgdmFsdWUgZnJvbSBhbm90aGVyIGFycmF5IGUuZyBzd2FwIEhUTUwgZW50aXRpZXMgd2l0aCBOdW1lcmljYWxzXHJcblx0c3dhcEFycmF5VmFscyhzOmFueSxhcnIxOmFueSxhcnIyOmFueSlcclxuICAgIHtcclxuXHRcdGlmKHRoaXMuaXNFbXB0eShzKSlcclxuICAgICAgICB7IFxyXG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcblx0XHR2YXIgcmU7XHJcbiAgICAgICAgXHJcblx0XHRpZihhcnIxICYmIGFycjIpXHJcbiAgICAgICAge1xyXG5cdFx0XHQvL1Nob3dEZWJ1ZyhcImluIHN3YXBBcnJheVZhbHMgYXJyMS5sZW5ndGggPSBcIiArIGFycjEubGVuZ3RoICsgXCIgYXJyMi5sZW5ndGggPSBcIiArIGFycjIubGVuZ3RoKVxyXG5cdFx0XHQvLyBhcnJheSBsZW5ndGhzIG11c3QgbWF0Y2hcclxuXHRcdFx0aWYoYXJyMS5sZW5ndGggPT0gYXJyMi5sZW5ndGgpXHJcbiAgICAgICAgICAgIHtcclxuXHRcdFx0XHRmb3IodmFyIHg9MCwgaSA9IGFycjEubGVuZ3RoOyB4IDwgaTsgeCsrKVxyXG4gICAgICAgICAgICAgICAge1xyXG5cdFx0XHRcdFx0cmUgPSBuZXcgUmVnRXhwKGFycjFbeF0sICdnJyk7XHJcblx0XHRcdFx0XHRzID0gcy5yZXBsYWNlKHJlLGFycjJbeF0pOyAvL3N3YXAgYXJyMSBpdGVtIHdpdGggbWF0Y2hpbmcgaXRlbSBmcm9tIGFycjJcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuICAgICAgICBcclxuXHRcdHJldHVybiBzO1xyXG5cdH07XHJcblxyXG5cdGluQXJyYXkoIGl0ZW06YW55LCBhcnI6YW55ICkgXHJcbiAgICB7XHJcblx0XHRmb3IgKCB2YXIgaSA9IDAsIHggPSBhcnIubGVuZ3RoOyBpIDwgeDsgaSsrIClcclxuICAgICAgICB7XHJcblx0XHRcdGlmICggYXJyW2ldID09PSBpdGVtIClcclxuICAgICAgICAgICAge1xyXG5cdFx0XHRcdHJldHVybiBpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcbiAgICAgICAgXHJcblx0XHRyZXR1cm4gLTE7XHJcblx0fVxyXG5cclxufVxyXG4iXX0=
1
+ "use strict";
2
+ /**
3
+ * A Javascript object to encode and/or decode html characters using HTML or Numeric entities that handles double or partial encoding
4
+ * Author: R Reid
5
+ * source: http://www.strictly-software.com/htmlencode
6
+ * Licences: GPL, The MIT License (MIT)
7
+ * Copyright: (c) 2011 Robert Reid - Strictly-Software.com
8
+ *
9
+ * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
10
+ * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
11
+ * THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
12
+ *
13
+ * Revision:
14
+ * 2011-07-14, Jacques-Yves Bleau:
15
+ * - fixed conversion error with capitalized accentuated characters
16
+ * + converted arr1 and arr2 to object property to remove redundancy
17
+ *
18
+ * Revision:
19
+ * 2011-11-10, Ce-Yi Hio:
20
+ * - fixed conversion error with a number of capitalized entity characters
21
+ *
22
+ * Revision:
23
+ * 2011-11-10, Rob Reid:
24
+ * - changed array format
25
+ *
26
+ * Revision:
27
+ * 2012-09-23, Alex Oss:
28
+ * - replaced string concatonation in numEncode with string builder, push and join for peformance with ammendments by Rob Reid
29
+ */
30
+ Object.defineProperty(exports, "__esModule", { value: true });
31
+ exports.Encoder = void 0;
32
+ class Encoder {
33
+ constructor() {
34
+ // When encoding do we convert characters into html or numerical entities
35
+ this.EncodeType = 'entity'; // entity OR numerical
36
+ // arrays for conversion from HTML Entities to Numerical values
37
+ this.arr1 = ['&nbsp;', '&iexcl;', '&cent;', '&pound;', '&curren;', '&yen;', '&brvbar;', '&sect;', '&uml;', '&copy;', '&ordf;', '&laquo;', '&not;', '&shy;', '&reg;', '&macr;', '&deg;', '&plusmn;', '&sup2;', '&sup3;', '&acute;', '&micro;', '&para;', '&middot;', '&cedil;', '&sup1;', '&ordm;', '&raquo;', '&frac14;', '&frac12;', '&frac34;', '&iquest;', '&Agrave;', '&Aacute;', '&Acirc;', '&Atilde;', '&Auml;', '&Aring;', '&AElig;', '&Ccedil;', '&Egrave;', '&Eacute;', '&Ecirc;', '&Euml;', '&Igrave;', '&Iacute;', '&Icirc;', '&Iuml;', '&ETH;', '&Ntilde;', '&Ograve;', '&Oacute;', '&Ocirc;', '&Otilde;', '&Ouml;', '&times;', '&Oslash;', '&Ugrave;', '&Uacute;', '&Ucirc;', '&Uuml;', '&Yacute;', '&THORN;', '&szlig;', '&agrave;', '&aacute;', '&acirc;', '&atilde;', '&auml;', '&aring;', '&aelig;', '&ccedil;', '&egrave;', '&eacute;', '&ecirc;', '&euml;', '&igrave;', '&iacute;', '&icirc;', '&iuml;', '&eth;', '&ntilde;', '&ograve;', '&oacute;', '&ocirc;', '&otilde;', '&ouml;', '&divide;', '&oslash;', '&ugrave;', '&uacute;', '&ucirc;', '&uuml;', '&yacute;', '&thorn;', '&yuml;', '&quot;', '&amp;', '&lt;', '&gt;', '&OElig;', '&oelig;', '&Scaron;', '&scaron;', '&Yuml;', '&circ;', '&tilde;', '&ensp;', '&emsp;', '&thinsp;', '&zwnj;', '&zwj;', '&lrm;', '&rlm;', '&ndash;', '&mdash;', '&lsquo;', '&rsquo;', '&sbquo;', '&ldquo;', '&rdquo;', '&bdquo;', '&dagger;', '&Dagger;', '&permil;', '&lsaquo;', '&rsaquo;', '&euro;', '&fnof;', '&Alpha;', '&Beta;', '&Gamma;', '&Delta;', '&Epsilon;', '&Zeta;', '&Eta;', '&Theta;', '&Iota;', '&Kappa;', '&Lambda;', '&Mu;', '&Nu;', '&Xi;', '&Omicron;', '&Pi;', '&Rho;', '&Sigma;', '&Tau;', '&Upsilon;', '&Phi;', '&Chi;', '&Psi;', '&Omega;', '&alpha;', '&beta;', '&gamma;', '&delta;', '&epsilon;', '&zeta;', '&eta;', '&theta;', '&iota;', '&kappa;', '&lambda;', '&mu;', '&nu;', '&xi;', '&omicron;', '&pi;', '&rho;', '&sigmaf;', '&sigma;', '&tau;', '&upsilon;', '&phi;', '&chi;', '&psi;', '&omega;', '&thetasym;', '&upsih;', '&piv;', '&bull;', '&hellip;', '&prime;', '&Prime;', '&oline;', '&frasl;', '&weierp;', '&image;', '&real;', '&trade;', '&alefsym;', '&larr;', '&uarr;', '&rarr;', '&darr;', '&harr;', '&crarr;', '&lArr;', '&uArr;', '&rArr;', '&dArr;', '&hArr;', '&forall;', '&part;', '&exist;', '&empty;', '&nabla;', '&isin;', '&notin;', '&ni;', '&prod;', '&sum;', '&minus;', '&lowast;', '&radic;', '&prop;', '&infin;', '&ang;', '&and;', '&or;', '&cap;', '&cup;', '&int;', '&there4;', '&sim;', '&cong;', '&asymp;', '&ne;', '&equiv;', '&le;', '&ge;', '&sub;', '&sup;', '&nsub;', '&sube;', '&supe;', '&oplus;', '&otimes;', '&perp;', '&sdot;', '&lceil;', '&rceil;', '&lfloor;', '&rfloor;', '&lang;', '&rang;', '&loz;', '&spades;', '&clubs;', '&hearts;', '&diams;'];
38
+ this.arr2 = ['&#160;', '&#161;', '&#162;', '&#163;', '&#164;', '&#165;', '&#166;', '&#167;', '&#168;', '&#169;', '&#170;', '&#171;', '&#172;', '&#173;', '&#174;', '&#175;', '&#176;', '&#177;', '&#178;', '&#179;', '&#180;', '&#181;', '&#182;', '&#183;', '&#184;', '&#185;', '&#186;', '&#187;', '&#188;', '&#189;', '&#190;', '&#191;', '&#192;', '&#193;', '&#194;', '&#195;', '&#196;', '&#197;', '&#198;', '&#199;', '&#200;', '&#201;', '&#202;', '&#203;', '&#204;', '&#205;', '&#206;', '&#207;', '&#208;', '&#209;', '&#210;', '&#211;', '&#212;', '&#213;', '&#214;', '&#215;', '&#216;', '&#217;', '&#218;', '&#219;', '&#220;', '&#221;', '&#222;', '&#223;', '&#224;', '&#225;', '&#226;', '&#227;', '&#228;', '&#229;', '&#230;', '&#231;', '&#232;', '&#233;', '&#234;', '&#235;', '&#236;', '&#237;', '&#238;', '&#239;', '&#240;', '&#241;', '&#242;', '&#243;', '&#244;', '&#245;', '&#246;', '&#247;', '&#248;', '&#249;', '&#250;', '&#251;', '&#252;', '&#253;', '&#254;', '&#255;', '&#34;', '&#38;', '&#60;', '&#62;', '&#338;', '&#339;', '&#352;', '&#353;', '&#376;', '&#710;', '&#732;', '&#8194;', '&#8195;', '&#8201;', '&#8204;', '&#8205;', '&#8206;', '&#8207;', '&#8211;', '&#8212;', '&#8216;', '&#8217;', '&#8218;', '&#8220;', '&#8221;', '&#8222;', '&#8224;', '&#8225;', '&#8240;', '&#8249;', '&#8250;', '&#8364;', '&#402;', '&#913;', '&#914;', '&#915;', '&#916;', '&#917;', '&#918;', '&#919;', '&#920;', '&#921;', '&#922;', '&#923;', '&#924;', '&#925;', '&#926;', '&#927;', '&#928;', '&#929;', '&#931;', '&#932;', '&#933;', '&#934;', '&#935;', '&#936;', '&#937;', '&#945;', '&#946;', '&#947;', '&#948;', '&#949;', '&#950;', '&#951;', '&#952;', '&#953;', '&#954;', '&#955;', '&#956;', '&#957;', '&#958;', '&#959;', '&#960;', '&#961;', '&#962;', '&#963;', '&#964;', '&#965;', '&#966;', '&#967;', '&#968;', '&#969;', '&#977;', '&#978;', '&#982;', '&#8226;', '&#8230;', '&#8242;', '&#8243;', '&#8254;', '&#8260;', '&#8472;', '&#8465;', '&#8476;', '&#8482;', '&#8501;', '&#8592;', '&#8593;', '&#8594;', '&#8595;', '&#8596;', '&#8629;', '&#8656;', '&#8657;', '&#8658;', '&#8659;', '&#8660;', '&#8704;', '&#8706;', '&#8707;', '&#8709;', '&#8711;', '&#8712;', '&#8713;', '&#8715;', '&#8719;', '&#8721;', '&#8722;', '&#8727;', '&#8730;', '&#8733;', '&#8734;', '&#8736;', '&#8743;', '&#8744;', '&#8745;', '&#8746;', '&#8747;', '&#8756;', '&#8764;', '&#8773;', '&#8776;', '&#8800;', '&#8801;', '&#8804;', '&#8805;', '&#8834;', '&#8835;', '&#8836;', '&#8838;', '&#8839;', '&#8853;', '&#8855;', '&#8869;', '&#8901;', '&#8968;', '&#8969;', '&#8970;', '&#8971;', '&#9001;', '&#9002;', '&#9674;', '&#9824;', '&#9827;', '&#9829;', '&#9830;'];
39
+ }
40
+ isEmpty(val) {
41
+ if (val) {
42
+ return ((val === null) || val.length == 0 || /^\s+$/.test(val));
43
+ }
44
+ else {
45
+ return true;
46
+ }
47
+ }
48
+ // Convert HTML entities into numerical entities
49
+ HTML2Numerical(s) {
50
+ return this.swapArrayVals(s, this.arr1, this.arr2);
51
+ }
52
+ // Convert Numerical entities into HTML entities
53
+ NumericalToHTML(s) {
54
+ return this.swapArrayVals(s, this.arr2, this.arr1);
55
+ }
56
+ // Numerically encodes all unicode characters
57
+ numEncode(s) {
58
+ if (this.isEmpty(s)) {
59
+ return '';
60
+ }
61
+ const a = [], l = s.length;
62
+ for (let i = 0; i < l; i++) {
63
+ const c = s.charAt(i);
64
+ if (c < ' ' || c > '~') {
65
+ a.push('&#');
66
+ a.push(c.charCodeAt()); //numeric value of code point
67
+ a.push(';');
68
+ }
69
+ else {
70
+ a.push(c);
71
+ }
72
+ }
73
+ return a.join('');
74
+ }
75
+ // HTML Decode numerical and HTML entities back to original values
76
+ htmlDecode(s) {
77
+ let c, m, d = s;
78
+ if (this.isEmpty(d)) {
79
+ return '';
80
+ }
81
+ // convert HTML entites back to numerical entites first
82
+ d = this.HTML2Numerical(d);
83
+ // look for numerical entities &#34;
84
+ const arr = d.match(/&#[0-9]{1,5};/g);
85
+ // if no matches found in string then skip
86
+ if (arr != null) {
87
+ for (let x = 0; x < arr.length; x++) {
88
+ m = arr[x];
89
+ c = m.substring(2, m.length - 1); //get numeric part which is refernce to unicode character
90
+ // if its a valid number we can decode
91
+ if (c >= -32768 && c <= 65535) {
92
+ // decode every single match within string
93
+ d = d.replace(m, String.fromCharCode(c));
94
+ }
95
+ else {
96
+ d = d.replace(m, ''); //invalid so replace with nada
97
+ }
98
+ }
99
+ }
100
+ return d;
101
+ }
102
+ // encode an input string into either numerical or HTML entities
103
+ htmlEncode(s, dbl) {
104
+ if (this.isEmpty(s)) {
105
+ return '';
106
+ }
107
+ // do we allow double encoding? E.g will &amp; be turned into &amp;amp;
108
+ dbl = dbl || false; //default to prevent double encoding
109
+ // if allowing double encoding we do ampersands first
110
+ if (dbl) {
111
+ if (this.EncodeType == 'numerical') {
112
+ s = s.replace(/&/g, '&#38;');
113
+ }
114
+ else {
115
+ s = s.replace(/&/g, '&amp;');
116
+ }
117
+ }
118
+ // convert the xss chars to numerical entities ' ' < >
119
+ s = this.XSSEncode(s, false);
120
+ if (this.EncodeType == 'numerical' || !dbl) {
121
+ // Now call function that will convert any HTML entities to numerical codes
122
+ s = this.HTML2Numerical(s);
123
+ }
124
+ // Now encode all chars above 127 e.g unicode
125
+ s = this.numEncode(s);
126
+ // now we know anything that needs to be encoded has been converted to numerical entities we
127
+ // can encode any ampersands & that are not part of encoded entities
128
+ // to handle the fact that I need to do a negative check and handle multiple ampersands &&&
129
+ // I am going to use a placeholder
130
+ // if we don't want double encoded entities we ignore the & in existing entities
131
+ if (!dbl) {
132
+ s = s.replace(/&#/g, '##AMPHASH##');
133
+ if (this.EncodeType == 'numerical') {
134
+ s = s.replace(/&/g, '&#38;');
135
+ }
136
+ else {
137
+ s = s.replace(/&/g, '&amp;');
138
+ }
139
+ s = s.replace(/##AMPHASH##/g, '&#');
140
+ }
141
+ // replace any malformed entities
142
+ s = s.replace(/&#\d*([^\d;]|$)/g, '$1');
143
+ if (!dbl) {
144
+ // safety check to correct any double encoded &amp;
145
+ s = this.correctEncoding(s);
146
+ }
147
+ // now do we need to convert our numerical encoded string into entities
148
+ if (this.EncodeType == 'entity') {
149
+ s = this.NumericalToHTML(s);
150
+ }
151
+ return s;
152
+ }
153
+ // Encodes the basic 4 characters used to malform HTML in XSS hacks
154
+ XSSEncode(s, en) {
155
+ if (!this.isEmpty(s)) {
156
+ en = en || true;
157
+ // do we convert to numerical or html entity?
158
+ if (en) {
159
+ s = s.replace(/'/g, '&#39;'); //no HTML equivalent as &apos is not cross browser supported
160
+ s = s.replace(/"/g, '&quot;');
161
+ s = s.replace(/</g, '&lt;');
162
+ s = s.replace(/>/g, '&gt;');
163
+ }
164
+ else {
165
+ s = s.replace(/'/g, '&#39;'); //no HTML equivalent as &apos is not cross browser supported
166
+ s = s.replace(/"/g, '&#34;');
167
+ s = s.replace(/</g, '&#60;');
168
+ s = s.replace(/>/g, '&#62;');
169
+ }
170
+ return s;
171
+ }
172
+ else {
173
+ return '';
174
+ }
175
+ }
176
+ // returns true if a string contains html or numerical encoded entities
177
+ hasEncoded(s) {
178
+ if (/&#[0-9]{1,5};/g.test(s)) {
179
+ return true;
180
+ }
181
+ else if (/&[A-Z]{2,6};/gi.test(s)) {
182
+ return true;
183
+ }
184
+ else {
185
+ return false;
186
+ }
187
+ }
188
+ // will remove any unicode characters
189
+ stripUnicode(s) {
190
+ return s.replace(/[^\x20-\x7E]/g, '');
191
+ }
192
+ // corrects any double encoded &amp; entities e.g &amp;amp;
193
+ correctEncoding(s) {
194
+ return s.replace(/(&amp;)(amp;)+/, '$1');
195
+ }
196
+ // Function to loop through an array swaping each item with the value from another array e.g swap HTML entities with Numericals
197
+ swapArrayVals(s, arr1, arr2) {
198
+ if (this.isEmpty(s)) {
199
+ return '';
200
+ }
201
+ let re;
202
+ if (arr1 && arr2) {
203
+ //ShowDebug('in swapArrayVals arr1.length = ' + arr1.length + ' arr2.length = ' + arr2.length)
204
+ // array lengths must match
205
+ if (arr1.length == arr2.length) {
206
+ for (let x = 0, i = arr1.length; x < i; x++) {
207
+ re = new RegExp(arr1[x], 'g');
208
+ s = s.replace(re, arr2[x]); //swap arr1 item with matching item from arr2
209
+ }
210
+ }
211
+ }
212
+ return s;
213
+ }
214
+ inArray(item, arr) {
215
+ for (let i = 0, x = arr.length; i < x; i++) {
216
+ if (arr[i] === item) {
217
+ return i;
218
+ }
219
+ }
220
+ return -1;
221
+ }
222
+ }
223
+ exports.Encoder = Encoder;
224
+ //# sourceMappingURL=encoder.js.map