kepler.gl 3.1.0 → 3.1.1

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 (234) hide show
  1. package/README.md +27 -132
  2. package/dist/src/common-utils/src/data-type.d.ts +9 -1
  3. package/dist/src/components/src/common/data-table/header-cell.d.ts +1 -0
  4. package/dist/src/components/src/common/data-table/index.d.ts +1 -0
  5. package/dist/src/components/src/common/file-uploader/file-drop.d.ts +1 -32
  6. package/dist/src/components/src/common/item-selector/dropdown-list.d.ts +2 -2
  7. package/dist/src/components/src/common/item-selector/item-selector.d.ts +1 -1
  8. package/dist/src/components/src/common/item-selector/typeahead.d.ts +1 -1
  9. package/dist/src/components/src/geocoder/geocoder.d.ts +7 -0
  10. package/dist/src/components/src/geocoder-panel.d.ts +2 -2
  11. package/dist/src/components/src/hooks/use-fetch-vector-tile-metadata.d.ts +4 -3
  12. package/dist/src/constants/src/default-settings.d.ts +14 -1
  13. package/dist/src/deckgl-arrow-layers/src/constants.d.ts +0 -12
  14. package/dist/src/deckgl-arrow-layers/src/index.d.ts +0 -1
  15. package/dist/src/deckgl-arrow-layers/src/utils/utils.d.ts +12 -1
  16. package/dist/src/duckdb/src/components/preview-data-panel.d.ts +7 -2
  17. package/dist/src/duckdb/src/components/schema-panel.d.ts +12 -3
  18. package/dist/src/duckdb/src/processors/data-processor.d.ts +1 -0
  19. package/dist/src/duckdb/src/table/duckdb-table-utils.d.ts +106 -0
  20. package/dist/src/duckdb/src/table/duckdb-table.d.ts +5 -3
  21. package/dist/src/processors/src/data-processor.d.ts +15 -1
  22. package/dist/src/reducers/src/provider-state-updaters.d.ts +1 -0
  23. package/dist/src/reducers/src/vis-state-updaters.d.ts +1 -1
  24. package/dist/src/table/src/dataset-utils.d.ts +1 -1
  25. package/dist/src/table/src/tileset/vector-tile-utils.d.ts +17 -1
  26. package/dist/src/utils/src/application-config.d.ts +4 -3
  27. package/dist/src/utils/src/data-utils.d.ts +9 -3
  28. package/dist/src/utils/src/indexed-data-container.d.ts +2 -2
  29. package/dist/src/utils/src/map-style-utils/mapbox-utils.d.ts +1 -1
  30. package/dist/src/utils/src/map-utils.d.ts +1 -1
  31. package/dist/src/utils/src/plot.d.ts +2 -2
  32. package/package.json +5 -5
  33. package/src/actions/package.json +8 -8
  34. package/src/ai-assistant/dist/components/ai-assistant-component.js +2 -1
  35. package/src/ai-assistant/package.json +7 -7
  36. package/src/ai-assistant/src/components/ai-assistant-component.tsx +1 -0
  37. package/src/cloud-providers/package.json +2 -2
  38. package/src/common-utils/dist/data-type.d.ts +9 -1
  39. package/src/common-utils/dist/data-type.js +50 -1
  40. package/src/common-utils/package.json +3 -3
  41. package/src/common-utils/src/data-type.ts +49 -1
  42. package/src/components/dist/common/data-table/header-cell.d.ts +1 -0
  43. package/src/components/dist/common/data-table/header-cell.js +2 -2
  44. package/src/components/dist/common/data-table/index.d.ts +1 -0
  45. package/src/components/dist/common/data-table/index.js +5 -1
  46. package/src/components/dist/common/file-uploader/file-drop.d.ts +1 -32
  47. package/src/components/dist/common/file-uploader/file-drop.js +152 -167
  48. package/src/components/dist/common/item-selector/dropdown-list.d.ts +2 -2
  49. package/src/components/dist/common/item-selector/dropdown-list.js +2 -3
  50. package/src/components/dist/common/item-selector/item-selector.d.ts +1 -1
  51. package/src/components/dist/common/item-selector/typeahead.d.ts +1 -1
  52. package/src/components/dist/common/range-brush.js +3 -3
  53. package/src/components/dist/geocoder/geocoder.d.ts +7 -0
  54. package/src/components/dist/geocoder/geocoder.js +19 -11
  55. package/src/components/dist/geocoder-panel.d.ts +2 -2
  56. package/src/components/dist/geocoder-panel.js +64 -91
  57. package/src/components/dist/hooks/use-fetch-vector-tile-metadata.d.ts +4 -3
  58. package/src/components/dist/hooks/use-fetch-vector-tile-metadata.js +35 -26
  59. package/src/components/dist/hooks/use-legend-position.js +8 -4
  60. package/src/components/dist/map/map-legend-panel.js +2 -3
  61. package/src/components/dist/modal-container.js +8 -8
  62. package/src/components/dist/modals/tilesets-modals/tileset-vector-form.js +31 -12
  63. package/src/components/dist/side-panel/layer-panel/color-palette-preset.js +2 -2
  64. package/src/components/dist/side-panel/layer-panel/color-range-selector.js +10 -11
  65. package/src/components/dist/side-panel/layer-panel/color-selector.js +3 -3
  66. package/src/components/dist/side-panel/layer-panel/custom-palette.js +1 -2
  67. package/src/components/dist/side-panel/layer-panel/layer-configurator.js +6 -8
  68. package/src/components/dist/side-panel/layer-panel/vector-tile-layer-configurator.js +1 -2
  69. package/src/components/package.json +16 -16
  70. package/src/components/src/common/data-table/header-cell.tsx +2 -1
  71. package/src/components/src/common/data-table/index.tsx +4 -0
  72. package/src/components/src/common/file-uploader/file-drop.tsx +186 -161
  73. package/src/components/src/common/item-selector/dropdown-list.tsx +1 -6
  74. package/src/components/src/common/range-brush.tsx +2 -2
  75. package/src/components/src/geocoder/geocoder.tsx +16 -8
  76. package/src/components/src/geocoder-panel.tsx +95 -85
  77. package/src/components/src/hooks/use-fetch-vector-tile-metadata.ts +27 -25
  78. package/src/components/src/hooks/use-legend-position.ts +5 -2
  79. package/src/components/src/map/map-legend-panel.tsx +1 -2
  80. package/src/components/src/modal-container.tsx +7 -7
  81. package/src/components/src/modals/tilesets-modals/tileset-vector-form.tsx +12 -3
  82. package/src/components/src/side-panel/layer-panel/color-palette-preset.tsx +1 -1
  83. package/src/components/src/side-panel/layer-panel/color-range-selector.tsx +6 -11
  84. package/src/components/src/side-panel/layer-panel/color-selector.tsx +2 -2
  85. package/src/components/src/side-panel/layer-panel/custom-palette.tsx +0 -1
  86. package/src/components/src/side-panel/layer-panel/layer-configurator.tsx +23 -33
  87. package/src/components/src/side-panel/layer-panel/vector-tile-layer-configurator.tsx +0 -1
  88. package/src/constants/dist/default-settings.d.ts +14 -1
  89. package/src/constants/dist/default-settings.js +20 -5
  90. package/src/constants/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/91/4f/6c65f3a1eba584ffd2d892cabc25ab5804d4a9ef53694c98707372a83e56343a274bec04f15927a6fe7602615f0f23f73ccf599f524ef97ad6c77c8832ea +1 -0
  91. package/src/constants/node_modules/.cache/terser-webpack-plugin/index-v5/a6/b2/5424aa4477192fb44cc90fd80892efdc96731f2ff0f48e8f28abf64243cc +2 -0
  92. package/src/constants/package.json +2 -2
  93. package/src/constants/src/default-settings.ts +16 -1
  94. package/src/constants/umd/keplergl.min.js +2 -2
  95. package/src/deckgl-arrow-layers/dist/constants.d.ts +0 -12
  96. package/src/deckgl-arrow-layers/dist/constants.js +4 -15
  97. package/src/deckgl-arrow-layers/dist/index.d.ts +0 -1
  98. package/src/deckgl-arrow-layers/dist/index.js +1 -8
  99. package/src/deckgl-arrow-layers/dist/layers/geo-arrow-scatterplot-layer.js +4 -4
  100. package/src/deckgl-arrow-layers/dist/layers/geo-arrow-text-layer.js +5 -5
  101. package/src/deckgl-arrow-layers/dist/utils/utils.d.ts +12 -1
  102. package/src/deckgl-arrow-layers/dist/utils/utils.js +7 -5
  103. package/src/deckgl-arrow-layers/package.json +2 -1
  104. package/src/deckgl-arrow-layers/src/constants.ts +0 -13
  105. package/src/deckgl-arrow-layers/src/index.ts +0 -2
  106. package/src/deckgl-arrow-layers/src/layers/geo-arrow-scatterplot-layer.ts +5 -3
  107. package/src/deckgl-arrow-layers/src/layers/geo-arrow-text-layer.ts +8 -4
  108. package/src/deckgl-arrow-layers/src/utils/utils.ts +7 -5
  109. package/src/deckgl-layers/dist/deckgl-extensions/filter-arrow-layer.d.ts +1 -1
  110. package/src/deckgl-layers/dist/deckgl-extensions/filter-shader-module.d.ts +1 -1
  111. package/src/deckgl-layers/dist/deckgl-extensions/filter-shader-module.js +3 -3
  112. package/src/deckgl-layers/package.json +5 -5
  113. package/src/deckgl-layers/src/deckgl-extensions/filter-shader-module.ts +4 -3
  114. package/src/duckdb/dist/components/monaco-editor.js +4 -5
  115. package/src/duckdb/dist/components/preview-data-panel.d.ts +7 -2
  116. package/src/duckdb/dist/components/preview-data-panel.js +7 -8
  117. package/src/duckdb/dist/components/schema-panel.d.ts +12 -3
  118. package/src/duckdb/dist/components/schema-panel.js +41 -24
  119. package/src/duckdb/dist/components/sql-panel.js +245 -56
  120. package/src/duckdb/dist/init.js +20 -14
  121. package/src/duckdb/dist/processors/data-processor.d.ts +1 -0
  122. package/src/duckdb/dist/processors/data-processor.js +4 -4
  123. package/src/duckdb/dist/table/duckdb-table-utils.d.ts +106 -0
  124. package/src/duckdb/dist/table/duckdb-table-utils.js +493 -2
  125. package/src/duckdb/dist/table/duckdb-table.d.ts +5 -3
  126. package/src/duckdb/dist/table/duckdb-table.js +153 -261
  127. package/src/duckdb/package.json +6 -6
  128. package/src/duckdb/src/components/monaco-editor.tsx +3 -3
  129. package/src/duckdb/src/components/preview-data-panel.tsx +15 -8
  130. package/src/duckdb/src/components/schema-panel.tsx +92 -21
  131. package/src/duckdb/src/components/sql-panel.tsx +160 -22
  132. package/src/duckdb/src/init.ts +4 -1
  133. package/src/duckdb/src/processors/data-processor.ts +2 -2
  134. package/src/duckdb/src/table/duckdb-table-utils.ts +407 -1
  135. package/src/duckdb/src/table/duckdb-table.ts +61 -92
  136. package/src/effects/package.json +5 -5
  137. package/src/layers/dist/arc-layer/arc-layer.d.ts +1 -1
  138. package/src/layers/dist/arc-layer/arc-layer.js +2 -3
  139. package/src/layers/dist/base-layer.d.ts +7 -6
  140. package/src/layers/dist/base-layer.js +36 -19
  141. package/src/layers/dist/geojson-layer/geojson-layer.js +4 -2
  142. package/src/layers/dist/geojson-layer/geojson-utils.js +10 -3
  143. package/src/layers/dist/heatmap-layer/heatmap-layer.d.ts +2 -0
  144. package/src/layers/dist/heatmap-layer/heatmap-layer.js +16 -9
  145. package/src/layers/dist/icon-layer/icon-layer.d.ts +6 -3
  146. package/src/layers/dist/icon-layer/icon-layer.js +19 -11
  147. package/src/layers/dist/index.d.ts +1 -1
  148. package/src/layers/dist/index.js +1 -1
  149. package/src/layers/dist/layer-text-label.d.ts +9 -0
  150. package/src/layers/dist/layer-text-label.js +51 -6
  151. package/src/layers/dist/layer-utils.d.ts +39 -30
  152. package/src/layers/dist/layer-utils.js +69 -9
  153. package/src/layers/dist/line-layer/line-layer.d.ts +1 -1
  154. package/src/layers/dist/line-layer/line-layer.js +2 -3
  155. package/src/layers/dist/point-layer/point-layer.d.ts +10 -7
  156. package/src/layers/dist/point-layer/point-layer.js +16 -8
  157. package/src/layers/dist/trip-layer/trip-layer.d.ts +2 -2
  158. package/src/layers/dist/trip-layer/trip-layer.js +4 -2
  159. package/src/layers/dist/vector-tile/abstract-tile-layer.d.ts +3 -7
  160. package/src/layers/dist/vector-tile/abstract-tile-layer.js +7 -6
  161. package/src/layers/dist/vector-tile/vector-tile-layer.d.ts +5 -7
  162. package/src/layers/dist/vector-tile/vector-tile-layer.js +23 -2
  163. package/src/layers/package.json +11 -10
  164. package/src/layers/src/arc-layer/arc-layer.ts +1 -1
  165. package/src/layers/src/base-layer.ts +50 -9
  166. package/src/layers/src/geojson-layer/geojson-layer.ts +3 -1
  167. package/src/layers/src/geojson-layer/geojson-utils.ts +4 -1
  168. package/src/layers/src/heatmap-layer/heatmap-layer.ts +17 -12
  169. package/src/layers/src/icon-layer/icon-layer.ts +7 -3
  170. package/src/layers/src/index.ts +1 -2
  171. package/src/layers/src/layer-text-label.ts +53 -4
  172. package/src/layers/src/layer-utils.ts +88 -9
  173. package/src/layers/src/line-layer/line-layer.ts +1 -1
  174. package/src/layers/src/point-layer/point-layer.ts +15 -11
  175. package/src/layers/src/trip-layer/trip-layer.ts +4 -2
  176. package/src/layers/src/vector-tile/abstract-tile-layer.ts +11 -5
  177. package/src/layers/src/vector-tile/vector-tile-layer.ts +33 -4
  178. package/src/localization/package.json +1 -1
  179. package/src/processors/dist/data-processor.d.ts +15 -1
  180. package/src/processors/dist/data-processor.js +104 -11
  181. package/src/processors/package.json +8 -7
  182. package/src/processors/src/data-processor.ts +116 -13
  183. package/src/reducers/dist/export-utils.js +2 -2
  184. package/src/reducers/dist/layer-utils.js +1 -1
  185. package/src/reducers/dist/provider-state-updaters.d.ts +1 -0
  186. package/src/reducers/dist/provider-state-updaters.js +5 -2
  187. package/src/reducers/dist/vis-state-updaters.d.ts +1 -1
  188. package/src/reducers/dist/vis-state-updaters.js +23 -12
  189. package/src/reducers/package.json +16 -16
  190. package/src/reducers/src/export-utils.ts +1 -1
  191. package/src/reducers/src/layer-utils.ts +2 -1
  192. package/src/reducers/src/provider-state-updaters.ts +4 -1
  193. package/src/reducers/src/vis-state-updaters.ts +45 -10
  194. package/src/schemas/dist/dataset-schema.js +35 -6
  195. package/src/schemas/package.json +7 -7
  196. package/src/schemas/src/dataset-schema.ts +36 -8
  197. package/src/styles/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/a3/a9/7f26bbc52905b0e21e9366a30ef0ba98f4ccf9aa8dd8326d90ba90191ba2e305323f505bf134c825356156c793bf9386ed2cef2aeb48eb327c26d106f69a +1 -0
  198. package/src/styles/node_modules/.cache/terser-webpack-plugin/index-v5/7e/51/b8756555a0e2e696d944445ac23f7febf769006013fbc8419f39a701649d +2 -0
  199. package/src/styles/package.json +2 -2
  200. package/src/styles/umd/keplergl.min.js +2 -2
  201. package/src/table/dist/dataset-utils.js +23 -14
  202. package/src/table/dist/src/table/src/dataset-utils.d.ts +1 -1
  203. package/src/table/dist/src/table/src/tileset/vector-tile-utils.d.ts +17 -1
  204. package/src/table/dist/tileset/vector-tile-utils.js +122 -2
  205. package/src/table/package.json +5 -5
  206. package/src/table/src/dataset-utils.ts +16 -6
  207. package/src/table/src/tileset/vector-tile-utils.ts +131 -8
  208. package/src/tasks/package.json +2 -2
  209. package/src/types/actions.d.ts +1 -0
  210. package/src/types/layers.d.ts +1 -0
  211. package/src/types/package.json +1 -1
  212. package/src/types/types.d.ts +17 -0
  213. package/src/utils/dist/application-config.d.ts +4 -3
  214. package/src/utils/dist/application-config.js +3 -2
  215. package/src/utils/dist/data-scale-utils.js +4 -4
  216. package/src/utils/dist/data-utils.d.ts +9 -3
  217. package/src/utils/dist/data-utils.js +40 -7
  218. package/src/utils/dist/dataset-utils.js +23 -8
  219. package/src/utils/dist/indexed-data-container.d.ts +2 -2
  220. package/src/utils/dist/indexed-data-container.js +1 -1
  221. package/src/utils/dist/map-style-utils/mapbox-utils.d.ts +1 -1
  222. package/src/utils/dist/map-style-utils/mapbox-utils.js +3 -3
  223. package/src/utils/dist/plot.d.ts +2 -2
  224. package/src/utils/dist/plot.js +6 -6
  225. package/src/utils/map-utils.spec.js +1 -2
  226. package/src/utils/package.json +5 -4
  227. package/src/utils/src/application-config.ts +11 -8
  228. package/src/utils/src/data-scale-utils.ts +3 -3
  229. package/src/utils/src/data-utils.ts +36 -7
  230. package/src/utils/src/dataset-utils.ts +41 -9
  231. package/src/utils/src/indexed-data-container.ts +1 -1
  232. package/src/utils/src/map-style-utils/mapbox-utils.ts +2 -2
  233. package/src/utils/src/plot.ts +5 -5
  234. package/umd/keplergl.min.js +1279 -1295
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@kepler.gl/effects",
3
3
  "author": "Shan He <shan@uber.com>",
4
- "version": "3.1.0",
4
+ "version": "3.1.1",
5
5
  "description": "kepler.gl viaual effects",
6
6
  "license": "MIT",
7
7
  "main": "dist/index.js",
@@ -31,10 +31,10 @@
31
31
  ],
32
32
  "dependencies": {
33
33
  "@deck.gl/core": "^8.9.27",
34
- "@kepler.gl/common-utils": "3.1.0",
35
- "@kepler.gl/constants": "3.1.0",
36
- "@kepler.gl/types": "3.1.0",
37
- "@kepler.gl/utils": "3.1.0",
34
+ "@kepler.gl/common-utils": "3.1.1",
35
+ "@kepler.gl/constants": "3.1.1",
36
+ "@kepler.gl/types": "3.1.1",
37
+ "@kepler.gl/utils": "3.1.1",
38
38
  "@luma.gl/core": "^8.5.20",
39
39
  "@luma.gl/shadertools": "^8.5.20",
40
40
  "moment-timezone": "^0.5.35",
@@ -148,7 +148,7 @@ export default class ArcLayer extends Layer {
148
148
  lng: (column: any, columns: any, allFields: any) => boolean;
149
149
  };
150
150
  hasAllColumns(): boolean;
151
- static findDefaultLayerProps({ fields, fieldPairs }: KeplerTable): {
151
+ static findDefaultLayerProps({ fieldPairs }: KeplerTable): {
152
152
  props: {
153
153
  color?: RGBColor;
154
154
  columns: ArcLayerColumnsConfig;
@@ -487,8 +487,7 @@ var ArcLayer = exports["default"] = /*#__PURE__*/function (_Layer) {
487
487
  }], [{
488
488
  key: "findDefaultLayerProps",
489
489
  value: function findDefaultLayerProps(_ref6) {
490
- var fields = _ref6.fields,
491
- _ref6$fieldPairs = _ref6.fieldPairs,
490
+ var _ref6$fieldPairs = _ref6.fieldPairs,
492
491
  fieldPairs = _ref6$fieldPairs === void 0 ? [] : _ref6$fieldPairs;
493
492
  if (fieldPairs.length < 2) {
494
493
  return {
@@ -513,4 +512,4 @@ var ArcLayer = exports["default"] = /*#__PURE__*/function (_Layer) {
513
512
  }
514
513
  }]);
515
514
  }(_baseLayer["default"]);
516
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYmFzZUxheWVyIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfZXh0ZW5zaW9ucyIsIl9kZWNrZ2xBcnJvd0xheWVycyIsIl9kZWNrZ2xMYXllcnMiLCJfbGF5ZXJzIiwiX3V0aWxzIiwiX2FyY0xheWVySWNvbiIsIl9sYXllclV0aWxzIiwiX2NvbnN0YW50cyIsIm93bktleXMiLCJlIiwiciIsInQiLCJPYmplY3QiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwibyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiX2NhbGxTdXBlciIsIl9nZXRQcm90b3R5cGVPZjIiLCJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjIiLCJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwiUmVmbGVjdCIsImNvbnN0cnVjdCIsImNvbnN0cnVjdG9yIiwiQm9vbGVhbiIsInByb3RvdHlwZSIsInZhbHVlT2YiLCJjYWxsIiwiX3N1cGVyUHJvcEdldCIsInAiLCJfZ2V0MiIsImFyY1JlcXVpcmVkQ29sdW1ucyIsImV4cG9ydHMiLCJuZWlnaGJvclJlcXVpcmVkQ29sdW1ucyIsImdlb2Fycm93UmVxdWlyZWRDb2x1bW5zIiwiYXJjQ29sdW1uTGFiZWxzIiwibGF0MCIsImxuZzAiLCJsYXQxIiwibG5nMSIsIm5laWdoYm9ycyIsImFyY1Zpc0NvbmZpZ3MiLCJvcGFjaXR5IiwidGhpY2tuZXNzIiwiY29sb3JSYW5nZSIsInNpemVSYW5nZSIsInRhcmdldENvbG9yIiwiQ09MVU1OX01PREVfUE9JTlRTIiwiQ09MVU1OX01PREVfTkVJR0hCT1JTIiwiQ09MVU1OX01PREVfR0VPQVJST1ciLCJTVVBQT1JURURfQ09MVU1OX01PREVTIiwia2V5IiwibGFiZWwiLCJyZXF1aXJlZENvbHVtbnMiLCJERUZBVUxUX0NPTFVNTl9NT0RFIiwiYnJ1c2hpbmdFeHRlbnNpb24iLCJCcnVzaGluZ0V4dGVuc2lvbiIsImFycm93Q1BVRmlsdGVyRXh0ZW5zaW9uIiwiRmlsdGVyQXJyb3dFeHRlbnNpb24iLCJpc0gzRmllbGQiLCJjb2x1bW5zIiwiYWxsRmllbGRzIiwiZmllbGQiLCJmaWVsZElkeCIsInR5cGUiLCJBTExfRklFTERfVFlQRVMiLCJoMyIsImFyY1Bvc0FjY2Vzc29yIiwiX3JlZiIsImNvbHVtbk1vZGUiLCJsYXQiLCJsbmciLCJnZW9hcnJvdzAiLCJnZW9hcnJvdzEiLCJkYyIsImQiLCJzdGFydCIsInZhbHVlQXQiLCJpbmRleCIsImVuZCIsImdldCIsInN0YXJ0UG9zIiwibWF5YmVIZXhUb0dlbyIsImVuZFBvcyIsIkFyY0xheWVyIiwiX0xheWVyIiwicHJvcHMiLCJfdGhpcyIsIl9jbGFzc0NhbGxDaGVjazIiLCJ1bmRlZmluZWQiLCJyZWdpc3RlclZpc0NvbmZpZyIsImdldFBvc2l0aW9uQWNjZXNzb3IiLCJkYXRhQ29udGFpbmVyIiwiY29uZmlnIiwiX2luaGVyaXRzMiIsIl9jcmVhdGVDbGFzczIiLCJBcmNMYXllckljb24iLCJkZWZhdWx0TGlua0NvbHVtblBhaXJzIiwic291cmNlQ29sb3IiLCJjb2xvciIsInByb3BlcnR5IiwiYWNjZXNzb3IiLCJkZWZhdWx0VmFsdWUiLCJ2aXNDb25maWciLCJzaXplIiwiY29sdW1uIiwidmFsdWUiLCJoYXNBbGxDb2x1bW5zIiwiaGFzQ29sdW1uVmFsdWUiLCJoYXNTdGFydCIsImhhc0VuZCIsImhhc05laWJvcnMiLCJnZXREZWZhdWx0TGF5ZXJDb25maWciLCJfcHJvcHMkY29sdW1uTW9kZSIsImRlZmF1bHRMYXllckNvbmZpZyIsImNhbGN1bGF0ZURhdGFBdHRyaWJ1dGVGb3JHZW9BcnJvdyIsIl9yZWYyIiwiZ2V0UG9zaXRpb24iLCJmaWx0ZXJlZEluZGV4IiwiZ2V0RmlsdGVyZWRJbmRleCIsIm51bVJvd3MiLCJmaWx0ZXJlZEluZGV4VHJpZ2dlciIsImdlb0Fycm93VmVjdG9yMCIsImdldENvbHVtbiIsImdlb0Fycm93VmVjdG9yMSIsImNyZWF0ZUdlb0Fycm93UG9pbnRWZWN0b3IiLCJzbGljZSIsImdldFRhYmxlIiwiY2FsY3VsYXRlRGF0YUF0dHJpYnV0ZUZvclBvaW50cyIsIl9yZWYzIiwiZGF0YSIsImkiLCJwb3MiLCJldmVyeSIsIk51bWJlciIsImlzRmluaXRlIiwic291cmNlUG9zaXRpb24iLCJ0YXJnZXRQb3NpdGlvbiIsImNhbGN1bGF0ZURhdGFBdHRyaWJ1dGVGb3JQb2ludE5OZWlnaGJvcnMiLCJfcmVmNCIsIl90aGlzMiIsIl9sb29wIiwibmVpZ2hib3JJZHgiLCJBcnJheSIsImlzQXJyYXkiLCJpZHgiLCJ0UG9zIiwicm93QXNBcnJheSIsImNhbGN1bGF0ZURhdGFBdHRyaWJ1dGUiLCJfcmVmNSIsIkFycm93RGF0YUNvbnRhaW5lciIsImZvcm1hdExheWVyRGF0YSIsImRhdGFzZXRzIiwib2xkTGF5ZXJEYXRhIiwiX3RoaXMzIiwiZGF0YUlkIiwiX2RhdGFzZXRzJHRoaXMkY29uZmlnIiwiZ3B1RmlsdGVyIiwiX3RoaXMkdXBkYXRlRGF0YSIsInVwZGF0ZURhdGEiLCJhY2Nlc3NvcnMiLCJnZXRBdHRyaWJ1dGVBY2Nlc3NvcnMiLCJpc0ZpbHRlcmVkQWNjZXNzb3IiLCJnZXRGaWx0ZXJWYWx1ZSIsImZpbHRlclZhbHVlQWNjZXNzb3IiLCJnZXRGaWx0ZXJlZCIsInVwZGF0ZUxheWVyTWV0YSIsImRhdGFzZXQiLCJzQm91bmRzIiwiZ2V0UG9pbnRzQm91bmRzIiwidEJvdW5kcyIsImJvdW5kcyIsIk1hdGgiLCJtaW4iLCJtYXgiLCJ1cGRhdGVNZXRhIiwicmVuZGVyTGF5ZXIiLCJvcHRzIiwib2JqZWN0SG92ZXJlZCIsImludGVyYWN0aW9uQ29uZmlnIiwidXBkYXRlVHJpZ2dlcnMiLCJmaWx0ZXJWYWx1ZVVwZGF0ZVRyaWdnZXJzIiwiZ2V0VmlzdWFsQ2hhbm5lbFVwZGF0ZVRyaWdnZXJzIiwid2lkdGhTY2FsZSIsIlBST0pFQ1RFRF9QSVhFTF9TSVpFX01VTFRJUExJRVIiLCJkZWZhdWx0TGF5ZXJQcm9wcyIsImdldERlZmF1bHREZWNrTGF5ZXJQcm9wcyIsImhvdmVyZWRPYmplY3QiLCJoYXNIb3ZlcmVkT2JqZWN0IiwidXNlQXJyb3dMYXllciIsIkFyY0xheWVyQ2xhc3MiLCJEZWNrQXJjTGF5ZXIiLCJleHBlcmltZW50YWxQcm9wT3ZlcnJpZGVzIiwiR2VvQXJyb3dBcmNMYXllciIsImdldFNvdXJjZVBvc2l0aW9uIiwiZ2V0VGFyZ2V0UG9zaXRpb24iLCJnZXRCcnVzaGluZ0V4dGVuc2lvblByb3BzIiwiZXh0ZW5zaW9ucyIsImNvbmNhdCIsIl90b0NvbnN1bWFibGVBcnJheTIiLCJnZXREZWZhdWx0SG92ZXJMYXllclByb3BzIiwidmlzaWJsZSIsImdldFNvdXJjZUNvbG9yIiwiaGlnaGxpZ2h0Q29sb3IiLCJnZXRUYXJnZXRDb2xvciIsImdldFdpZHRoIiwib2JqZWN0SW5mbyIsImlzTGF5ZXJIb3ZlcmVkRnJvbUFycm93IiwiaWQiLCJwb3NpdGlvbiIsImdldEhvdmVyRGF0YSIsIm9iamVjdCIsImZpZWxkcyIsImFuaW1hdGlvbkNvbmZpZyIsImhvdmVySW5mbyIsInJvdyIsImdldExlZ2VuZFZpc3VhbENoYW5uZWxzIiwiX2NoYW5uZWxzJHNvdXJjZUNvbG9yIiwiY2hhbm5lbHMiLCJ2aXN1YWxDaGFubmVscyIsImZpbmREZWZhdWx0TGF5ZXJQcm9wcyIsIl9yZWY2IiwiX3JlZjYkZmllbGRQYWlycyIsImZpZWxkUGFpcnMiLCJoZXhUb1JnYiIsIkRFRkFVTFRfTEFZRVJfQ09MT1IiLCJ0cmlwQXJjIiwicGFpciIsImRlZmF1bHROYW1lIiwiTGF5ZXIiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvYXJjLWxheWVyL2FyYy1sYXllci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgKiBhcyBhcnJvdyBmcm9tICdhcGFjaGUtYXJyb3cnO1xuXG5pbXBvcnQgTGF5ZXIsIHtcbiAgTGF5ZXJCYXNlQ29uZmlnLFxuICBMYXllckNvbG9yQ29uZmlnLFxuICBMYXllclNpemVDb25maWcsXG4gIExheWVyQm91bmRzLFxuICBMYXllckJhc2VDb25maWdQYXJ0aWFsLFxuICBWaXN1YWxDaGFubmVsXG59IGZyb20gJy4uL2Jhc2UtbGF5ZXInO1xuaW1wb3J0IHtCcnVzaGluZ0V4dGVuc2lvbn0gZnJvbSAnQGRlY2suZ2wvZXh0ZW5zaW9ucyc7XG5pbXBvcnQge0dlb0Fycm93QXJjTGF5ZXJ9IGZyb20gJ0BrZXBsZXIuZ2wvZGVja2dsLWFycm93LWxheWVycyc7XG5pbXBvcnQge0ZpbHRlckFycm93RXh0ZW5zaW9ufSBmcm9tICdAa2VwbGVyLmdsL2RlY2tnbC1sYXllcnMnO1xuaW1wb3J0IHtBcmNMYXllciBhcyBEZWNrQXJjTGF5ZXJ9IGZyb20gJ0BkZWNrLmdsL2xheWVycyc7XG5cbmltcG9ydCB7XG4gIGhleFRvUmdiLFxuICBEYXRhQ29udGFpbmVySW50ZXJmYWNlLFxuICBtYXliZUhleFRvR2VvLFxuICBBcnJvd0RhdGFDb250YWluZXJcbn0gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5pbXBvcnQgQXJjTGF5ZXJJY29uIGZyb20gJy4vYXJjLWxheWVyLWljb24nO1xuaW1wb3J0IHtpc0xheWVySG92ZXJlZEZyb21BcnJvdywgY3JlYXRlR2VvQXJyb3dQb2ludFZlY3RvciwgZ2V0RmlsdGVyZWRJbmRleH0gZnJvbSAnLi4vbGF5ZXItdXRpbHMnO1xuaW1wb3J0IHtcbiAgREVGQVVMVF9MQVlFUl9DT0xPUixcbiAgUFJPSkVDVEVEX1BJWEVMX1NJWkVfTVVMVElQTElFUixcbiAgQUxMX0ZJRUxEX1RZUEVTXG59IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcblxuaW1wb3J0IHtcbiAgQ29sb3JSYW5nZSxcbiAgUkdCQ29sb3IsXG4gIE1lcmdlLFxuICBWaXNDb25maWdDb2xvclJhbmdlLFxuICBWaXNDb25maWdDb2xvclNlbGVjdCxcbiAgVmlzQ29uZmlnTnVtYmVyLFxuICBWaXNDb25maWdSYW5nZSxcbiAgTGF5ZXJDb2x1bW4sXG4gIEZpZWxkLFxuICBBbmltYXRpb25Db25maWdcbn0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5pbXBvcnQge0tlcGxlclRhYmxlfSBmcm9tICdAa2VwbGVyLmdsL3RhYmxlJztcblxuZXhwb3J0IHR5cGUgQXJjTGF5ZXJWaXNDb25maWdTZXR0aW5ncyA9IHtcbiAgb3BhY2l0eTogVmlzQ29uZmlnTnVtYmVyO1xuICB0aGlja25lc3M6IFZpc0NvbmZpZ051bWJlcjtcbiAgY29sb3JSYW5nZTogVmlzQ29uZmlnQ29sb3JSYW5nZTtcbiAgc2l6ZVJhbmdlOiBWaXNDb25maWdSYW5nZTtcbiAgdGFyZ2V0Q29sb3I6IFZpc0NvbmZpZ0NvbG9yU2VsZWN0O1xufTtcblxuZXhwb3J0IHR5cGUgQXJjTGF5ZXJDb2x1bW5zQ29uZmlnID0ge1xuICAvLyBDT0xVTU5fTU9ERV9QT0lOVFMgcmVxdWlyZWQgY29sdW1uc1xuICBsYXQwOiBMYXllckNvbHVtbjtcbiAgbGF0MTogTGF5ZXJDb2x1bW47XG4gIGxuZzA6IExheWVyQ29sdW1uO1xuICBsbmcxOiBMYXllckNvbHVtbjtcblxuICAvLyBDT0xVTU5fTU9ERV9ORUlHSEJPUlMgcmVxdWlyZWQgY29sdW1uc1xuICBsYXQ6IExheWVyQ29sdW1uO1xuICBsbmc6IExheWVyQ29sdW1uO1xuICBuZWlnaGJvcnM6IExheWVyQ29sdW1uO1xuXG4gIC8vIENPTFVNTl9NT0RFX0dFT0FSUk9XXG4gIGdlb2Fycm93MDogTGF5ZXJDb2x1bW47XG4gIGdlb2Fycm93MTogTGF5ZXJDb2x1bW47XG59O1xuXG5leHBvcnQgdHlwZSBBcmNMYXllclZpc0NvbmZpZyA9IHtcbiAgY29sb3JSYW5nZTogQ29sb3JSYW5nZTtcbiAgb3BhY2l0eTogbnVtYmVyO1xuICBzaXplUmFuZ2U6IFtudW1iZXIsIG51bWJlcl07XG4gIHRhcmdldENvbG9yOiBSR0JDb2xvcjtcbiAgdGhpY2tuZXNzOiBudW1iZXI7XG59O1xuXG5leHBvcnQgdHlwZSBBcmNMYXllclZpc3VhbENoYW5uZWxDb25maWcgPSBMYXllckNvbG9yQ29uZmlnICYgTGF5ZXJTaXplQ29uZmlnO1xuZXhwb3J0IHR5cGUgQXJjTGF5ZXJDb25maWcgPSBNZXJnZTxcbiAgTGF5ZXJCYXNlQ29uZmlnLFxuICB7Y29sdW1uczogQXJjTGF5ZXJDb2x1bW5zQ29uZmlnOyB2aXNDb25maWc6IEFyY0xheWVyVmlzQ29uZmlnfVxuPiAmXG4gIEFyY0xheWVyVmlzdWFsQ2hhbm5lbENvbmZpZztcblxuZXhwb3J0IHR5cGUgQXJjTGF5ZXJEYXRhID0ge1xuICBpbmRleDogbnVtYmVyO1xuICBzb3VyY2VQb3NpdGlvbjogW251bWJlciwgbnVtYmVyLCBudW1iZXJdO1xuICB0YXJnZXRQb3NpdGlvbjogW251bWJlciwgbnVtYmVyLCBudW1iZXJdO1xufTtcblxuZXhwb3J0IHR5cGUgQXJjTGF5ZXJNZXRhID0ge1xuICBib3VuZHM6IExheWVyQm91bmRzO1xufTtcblxuZXhwb3J0IGNvbnN0IGFyY1JlcXVpcmVkQ29sdW1ucyA9IFsnbGF0MCcsICdsbmcwJywgJ2xhdDEnLCAnbG5nMSddO1xuZXhwb3J0IGNvbnN0IG5laWdoYm9yUmVxdWlyZWRDb2x1bW5zID0gWydsYXQnLCAnbG5nJywgJ25laWdoYm9ycyddO1xuZXhwb3J0IGNvbnN0IGdlb2Fycm93UmVxdWlyZWRDb2x1bW5zID0gWydnZW9hcnJvdzAnLCAnZ2VvYXJyb3cxJ107XG5cbmV4cG9ydCBjb25zdCBhcmNDb2x1bW5MYWJlbHMgPSB7XG4gIGxhdDA6ICdhcmMubGF0MCcsXG4gIGxuZzA6ICdhcmMubG5nMCcsXG4gIGxhdDE6ICdhcmMubGF0MScsXG4gIGxuZzE6ICdhcmMubG5nMScsXG4gIG5laWdoYm9yczogJ25laWdoYm9ycydcbn07XG5cbmV4cG9ydCBjb25zdCBhcmNWaXNDb25maWdzOiB7XG4gIG9wYWNpdHk6ICdvcGFjaXR5JztcbiAgdGhpY2tuZXNzOiAndGhpY2tuZXNzJztcbiAgY29sb3JSYW5nZTogJ2NvbG9yUmFuZ2UnO1xuICBzaXplUmFuZ2U6ICdzdHJva2VXaWR0aFJhbmdlJztcbiAgdGFyZ2V0Q29sb3I6ICd0YXJnZXRDb2xvcic7XG59ID0ge1xuICBvcGFjaXR5OiAnb3BhY2l0eScsXG4gIHRoaWNrbmVzczogJ3RoaWNrbmVzcycsXG4gIGNvbG9yUmFuZ2U6ICdjb2xvclJhbmdlJyxcbiAgc2l6ZVJhbmdlOiAnc3Ryb2tlV2lkdGhSYW5nZScsXG4gIHRhcmdldENvbG9yOiAndGFyZ2V0Q29sb3InXG59O1xuXG5leHBvcnQgY29uc3QgQ09MVU1OX01PREVfUE9JTlRTID0gJ3BvaW50cyc7XG5leHBvcnQgY29uc3QgQ09MVU1OX01PREVfTkVJR0hCT1JTID0gJ25laWdoYm9ycyc7XG5leHBvcnQgY29uc3QgQ09MVU1OX01PREVfR0VPQVJST1cgPSAnZ2VvYXJyb3cnO1xuY29uc3QgU1VQUE9SVEVEX0NPTFVNTl9NT0RFUyA9IFtcbiAge1xuICAgIGtleTogQ09MVU1OX01PREVfUE9JTlRTLFxuICAgIGxhYmVsOiAnUG9pbnRzJyxcbiAgICByZXF1aXJlZENvbHVtbnM6IGFyY1JlcXVpcmVkQ29sdW1uc1xuICB9LFxuICB7XG4gICAga2V5OiBDT0xVTU5fTU9ERV9ORUlHSEJPUlMsXG4gICAgbGFiZWw6ICdQb2ludCBhbmQgTmVpZ2hib3JzJyxcbiAgICByZXF1aXJlZENvbHVtbnM6IG5laWdoYm9yUmVxdWlyZWRDb2x1bW5zXG4gIH0sXG4gIHtcbiAgICBrZXk6IENPTFVNTl9NT0RFX0dFT0FSUk9XLFxuICAgIGxhYmVsOiAnR2VvYXJyb3cgUG9pbnRzJyxcbiAgICByZXF1aXJlZENvbHVtbnM6IGdlb2Fycm93UmVxdWlyZWRDb2x1bW5zXG4gIH1cbl07XG5jb25zdCBERUZBVUxUX0NPTFVNTl9NT0RFID0gQ09MVU1OX01PREVfUE9JTlRTO1xuXG5jb25zdCBicnVzaGluZ0V4dGVuc2lvbiA9IG5ldyBCcnVzaGluZ0V4dGVuc2lvbigpO1xuY29uc3QgYXJyb3dDUFVGaWx0ZXJFeHRlbnNpb24gPSBuZXcgRmlsdGVyQXJyb3dFeHRlbnNpb24oKTtcblxuZnVuY3Rpb24gaXNIM0ZpZWxkKGNvbHVtbnMsIGFsbEZpZWxkcywga2V5KSB7XG4gIGNvbnN0IGZpZWxkID0gYWxsRmllbGRzW2NvbHVtbnNba2V5XS5maWVsZElkeF07XG4gIHJldHVybiBmaWVsZD8udHlwZSA9PT0gQUxMX0ZJRUxEX1RZUEVTLmgzO1xufVxuXG5leHBvcnQgY29uc3QgYXJjUG9zQWNjZXNzb3IgPVxuICAoe2xhdDAsIGxuZzAsIGxhdDEsIGxuZzEsIGxhdCwgbG5nLCBnZW9hcnJvdzAsIGdlb2Fycm93MX06IEFyY0xheWVyQ29sdW1uc0NvbmZpZywgY29sdW1uTW9kZSkgPT5cbiAgKGRjOiBEYXRhQ29udGFpbmVySW50ZXJmYWNlKSA9PiB7XG4gICAgc3dpdGNoIChjb2x1bW5Nb2RlKSB7XG4gICAgICBjYXNlIENPTFVNTl9NT0RFX0dFT0FSUk9XOlxuICAgICAgICByZXR1cm4gZCA9PiB7XG4gICAgICAgICAgY29uc3Qgc3RhcnQgPSBkYy52YWx1ZUF0KGQuaW5kZXgsIGdlb2Fycm93MC5maWVsZElkeCk7XG4gICAgICAgICAgY29uc3QgZW5kID0gZGMudmFsdWVBdChkLmluZGV4LCBnZW9hcnJvdzEuZmllbGRJZHgpO1xuICAgICAgICAgIHJldHVybiBbc3RhcnQuZ2V0KDApLCBzdGFydC5nZXQoMSksIDAsIGVuZC5nZXQoMiksIGVuZC5nZXQoMyksIDBdO1xuICAgICAgICB9O1xuICAgICAgY2FzZSBDT0xVTU5fTU9ERV9ORUlHSEJPUlM6XG4gICAgICAgIHJldHVybiBkID0+IHtcbiAgICAgICAgICBjb25zdCBzdGFydFBvcyA9IG1heWJlSGV4VG9HZW8oZGMsIGQsIGxhdCwgbG5nKTtcbiAgICAgICAgICAvLyBvbmx5IHJldHVybiBzb3VyY2UgcG9pbnQgaWYgY29sdW1uTW9kZSBpcyBDT0xVTU5fTU9ERV9ORUlHSEJPUlNcblxuICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBzdGFydFBvcyA/IHN0YXJ0UG9zWzBdIDogZGMudmFsdWVBdChkLmluZGV4LCBsbmcuZmllbGRJZHgpLFxuICAgICAgICAgICAgc3RhcnRQb3MgPyBzdGFydFBvc1sxXSA6IGRjLnZhbHVlQXQoZC5pbmRleCwgbGF0LmZpZWxkSWR4KSxcbiAgICAgICAgICAgIDBcbiAgICAgICAgICBdO1xuICAgICAgICB9O1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgLy8gQ09MVU1OX01PREVfUE9JTlRTXG4gICAgICAgIHJldHVybiBkID0+IHtcbiAgICAgICAgICAvLyBsYXQgb3IgbG5nIGNvbHVtbiBjb3VsZCBiZSBoZXggY29sdW1uXG4gICAgICAgICAgLy8gd2UgYXNzdW1lIHN0cmluZyB2YWx1ZSBpcyBoZXggYW5kIHRyeSB0byBjb252ZXJ0IGl0IHRvIGdlbyBsYXQgbG5nXG4gICAgICAgICAgY29uc3Qgc3RhcnRQb3MgPSBtYXliZUhleFRvR2VvKGRjLCBkLCBsYXQwLCBsbmcwKTtcbiAgICAgICAgICBjb25zdCBlbmRQb3MgPSBtYXliZUhleFRvR2VvKGRjLCBkLCBsYXQxLCBsbmcxKTtcbiAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgc3RhcnRQb3MgPyBzdGFydFBvc1swXSA6IGRjLnZhbHVlQXQoZC5pbmRleCwgbG5nMC5maWVsZElkeCksXG4gICAgICAgICAgICBzdGFydFBvcyA/IHN0YXJ0UG9zWzFdIDogZGMudmFsdWVBdChkLmluZGV4LCBsYXQwLmZpZWxkSWR4KSxcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICBlbmRQb3MgPyBlbmRQb3NbMF0gOiBkYy52YWx1ZUF0KGQuaW5kZXgsIGxuZzEuZmllbGRJZHgpLFxuICAgICAgICAgICAgZW5kUG9zID8gZW5kUG9zWzFdIDogZGMudmFsdWVBdChkLmluZGV4LCBsYXQxLmZpZWxkSWR4KSxcbiAgICAgICAgICAgIDBcbiAgICAgICAgICBdO1xuICAgICAgICB9O1xuICAgIH1cbiAgfTtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFyY0xheWVyIGV4dGVuZHMgTGF5ZXIge1xuICBkZWNsYXJlIHZpc0NvbmZpZ1NldHRpbmdzOiBBcmNMYXllclZpc0NvbmZpZ1NldHRpbmdzO1xuICBkZWNsYXJlIGNvbmZpZzogQXJjTGF5ZXJDb25maWc7XG4gIGRlY2xhcmUgbWV0YTogQXJjTGF5ZXJNZXRhO1xuXG4gIGRhdGFDb250YWluZXI6IERhdGFDb250YWluZXJJbnRlcmZhY2UgfCBudWxsID0gbnVsbDtcbiAgZ2VvQXJyb3dWZWN0b3IwOiBhcnJvdy5WZWN0b3IgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gIGdlb0Fycm93VmVjdG9yMTogYXJyb3cuVmVjdG9yIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG4gIC8qXG4gICAqIENQVSBmaWx0ZXJpbmcgYW4gYXJyb3cgdGFibGUgYnkgdmFsdWVzIGFuZCBhc3NlbWJsaW5nIGEgcGFydGlhbCBjb3B5IG9mIHRoZSByYXcgdGFibGUgaXMgZXhwZW5zaXZlXG4gICAqIHNvIHdlIHdpbGwgdXNlIGZpbHRlcmVkSW5kZXggdG8gY3JlYXRlIGFuIGF0dHJpYnV0ZSBlLmcuIGZpbHRlcmVkSW5kZXggWzB8MV0gZm9yIEdQVSBmaWx0ZXJpbmdcbiAgICogaW4gZGVjay5nbCBsYXllciwgc2VlOiBGaWx0ZXJBcnJvd0V4dGVuc2lvbiBpbiBAa2VwbGVyLmdsL2RlY2tnbC1sYXllcnMuXG4gICAqIE5vdGUgdGhhdCB0aGlzIGFwcHJvYWNoIGNhbiBjcmVhdGUgdmlzaWJsZSBsYWdzIGluIGNhc2Ugb2YgYSBsb3Qgb2YgZGlzY2FydGVkIGdlb21ldHJ5LlxuICAgKi9cbiAgZmlsdGVyZWRJbmRleDogVWludDhDbGFtcGVkQXJyYXkgfCBudWxsID0gbnVsbDtcbiAgZmlsdGVyZWRJbmRleFRyaWdnZXI6IG51bWJlcltdID0gW107XG5cbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG5cbiAgICB0aGlzLnJlZ2lzdGVyVmlzQ29uZmlnKGFyY1Zpc0NvbmZpZ3MpO1xuICAgIHRoaXMuZ2V0UG9zaXRpb25BY2Nlc3NvciA9IChkYXRhQ29udGFpbmVyOiBEYXRhQ29udGFpbmVySW50ZXJmYWNlKSA9PlxuICAgICAgYXJjUG9zQWNjZXNzb3IodGhpcy5jb25maWcuY29sdW1ucywgdGhpcy5jb25maWcuY29sdW1uTW9kZSkoZGF0YUNvbnRhaW5lcik7XG4gIH1cblxuICBnZXQgdHlwZSgpIHtcbiAgICByZXR1cm4gJ2FyYyc7XG4gIH1cblxuICBnZXQgaXNBZ2dyZWdhdGVkKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGdldCBsYXllckljb24oKSB7XG4gICAgcmV0dXJuIEFyY0xheWVySWNvbjtcbiAgfVxuXG4gIGdldCBjb2x1bW5MYWJlbHMoKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gICAgcmV0dXJuIGFyY0NvbHVtbkxhYmVscztcbiAgfVxuXG4gIGdldCBjb2x1bW5QYWlycygpIHtcbiAgICByZXR1cm4gdGhpcy5kZWZhdWx0TGlua0NvbHVtblBhaXJzO1xuICB9XG5cbiAgZ2V0IHN1cHBvcnRlZENvbHVtbk1vZGVzKCkge1xuICAgIHJldHVybiBTVVBQT1JURURfQ09MVU1OX01PREVTO1xuICB9XG5cbiAgZ2V0IHZpc3VhbENoYW5uZWxzKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzb3VyY2VDb2xvcjoge1xuICAgICAgICAuLi5zdXBlci52aXN1YWxDaGFubmVscy5jb2xvcixcbiAgICAgICAgcHJvcGVydHk6ICdjb2xvcicsXG4gICAgICAgIGtleTogJ3NvdXJjZUNvbG9yJyxcbiAgICAgICAgYWNjZXNzb3I6ICdnZXRTb3VyY2VDb2xvcicsXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogY29uZmlnID0+IGNvbmZpZy5jb2xvclxuICAgICAgfSxcbiAgICAgIHRhcmdldENvbG9yOiB7XG4gICAgICAgIC4uLnN1cGVyLnZpc3VhbENoYW5uZWxzLmNvbG9yLFxuICAgICAgICBwcm9wZXJ0eTogJ3RhcmdldENvbG9yJyxcbiAgICAgICAga2V5OiAndGFyZ2V0Q29sb3InLFxuICAgICAgICBhY2Nlc3NvcjogJ2dldFRhcmdldENvbG9yJyxcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBjb25maWcgPT4gY29uZmlnLnZpc0NvbmZpZy50YXJnZXRDb2xvciB8fCBjb25maWcuY29sb3JcbiAgICAgIH0sXG4gICAgICBzaXplOiB7XG4gICAgICAgIC4uLnN1cGVyLnZpc3VhbENoYW5uZWxzLnNpemUsXG4gICAgICAgIGFjY2Vzc29yOiAnZ2V0V2lkdGgnLFxuICAgICAgICBwcm9wZXJ0eTogJ3N0cm9rZSdcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgZ2V0IGNvbHVtblZhbGlkYXRvcnMoKSB7XG4gICAgLy8gaWYgb25lIG9mIHRoZSBsYXQgb3IgbG5nIGNvbHVtbiBpcyBzdHJpbmcgdHlwZSwgd2UgYWxsb3cgaXRcbiAgICAvLyB3aWxsIHRyeSB0byBwYXNzIGl0IGFzIGhleFxuICAgIHJldHVybiB7XG4gICAgICBsYXQwOiAoY29sdW1uLCBjb2x1bW5zLCBhbGxGaWVsZHMpID0+IGlzSDNGaWVsZChjb2x1bW5zLCBhbGxGaWVsZHMsICdsbmcwJyksXG4gICAgICBsbmcwOiAoY29sdW1uLCBjb2x1bW5zLCBhbGxGaWVsZHMpID0+IGlzSDNGaWVsZChjb2x1bW5zLCBhbGxGaWVsZHMsICdsYXQwJyksXG4gICAgICBsYXQxOiAoY29sdW1uLCBjb2x1bW5zLCBhbGxGaWVsZHMpID0+IGlzSDNGaWVsZChjb2x1bW5zLCBhbGxGaWVsZHMsICdsbmcxJyksXG4gICAgICBsbmcxOiAoY29sdW1uLCBjb2x1bW5zLCBhbGxGaWVsZHMpID0+IGlzSDNGaWVsZChjb2x1bW5zLCBhbGxGaWVsZHMsICdsYXQxJyksXG4gICAgICBsYXQ6IChjb2x1bW4sIGNvbHVtbnMsIGFsbEZpZWxkcykgPT4gaXNIM0ZpZWxkKGNvbHVtbnMsIGFsbEZpZWxkcywgJ2xuZycpLFxuICAgICAgbG5nOiAoY29sdW1uLCBjb2x1bW5zLCBhbGxGaWVsZHMpID0+IGlzSDNGaWVsZChjb2x1bW5zLCBhbGxGaWVsZHMsICdsYXQnKVxuICAgIH07XG4gIH1cblxuICBoYXNBbGxDb2x1bW5zKCkge1xuICAgIGNvbnN0IHtjb2x1bW5zfSA9IHRoaXMuY29uZmlnO1xuICAgIGlmICh0aGlzLmNvbmZpZy5jb2x1bW5Nb2RlID09PSBDT0xVTU5fTU9ERV9HRU9BUlJPVykge1xuICAgICAgcmV0dXJuIHRoaXMuaGFzQ29sdW1uVmFsdWUoY29sdW1ucy5nZW9hcnJvdzApICYmIHRoaXMuaGFzQ29sdW1uVmFsdWUoY29sdW1ucy5nZW9hcnJvdzEpO1xuICAgIH1cbiAgICBpZiAodGhpcy5jb25maWcuY29sdW1uTW9kZSA9PT0gQ09MVU1OX01PREVfUE9JTlRTKSB7XG4gICAgICAvLyBUT0RPIC0gdGhpcyBkb2VzIG5vdCBoYXZlIGFjY2VzcyB0byBhbGxGaWVsZHMuLi5cbiAgICAgIC8vIFNvIHdlIGNhbid0IGRvIHRoZSBzYW1lIHZhbGlkYXRpb24gYXMgZm9yIHRoZSBmaWVsZCBlcnJvcnNcbiAgICAgIGNvbnN0IGhhc1N0YXJ0ID0gdGhpcy5oYXNDb2x1bW5WYWx1ZShjb2x1bW5zLmxhdDApIHx8IHRoaXMuaGFzQ29sdW1uVmFsdWUoY29sdW1ucy5sbmcwKTtcbiAgICAgIGNvbnN0IGhhc0VuZCA9IHRoaXMuaGFzQ29sdW1uVmFsdWUoY29sdW1ucy5sYXQxKSB8fCB0aGlzLmhhc0NvbHVtblZhbHVlKGNvbHVtbnMubG5nMSk7XG4gICAgICByZXR1cm4gaGFzU3RhcnQgJiYgaGFzRW5kO1xuICAgIH1cbiAgICBjb25zdCBoYXNTdGFydCA9IHRoaXMuaGFzQ29sdW1uVmFsdWUoY29sdW1ucy5sYXQpIHx8IHRoaXMuaGFzQ29sdW1uVmFsdWUoY29sdW1ucy5sbmcpO1xuICAgIGNvbnN0IGhhc05laWJvcnMgPSB0aGlzLmhhc0NvbHVtblZhbHVlKGNvbHVtbnMubmVpZ2hib3JzKTtcbiAgICByZXR1cm4gaGFzU3RhcnQgJiYgaGFzTmVpYm9ycztcbiAgfVxuXG4gIHN0YXRpYyBmaW5kRGVmYXVsdExheWVyUHJvcHMoe2ZpZWxkcywgZmllbGRQYWlycyA9IFtdfTogS2VwbGVyVGFibGUpOiB7XG4gICAgcHJvcHM6IHtjb2xvcj86IFJHQkNvbG9yOyBjb2x1bW5zOiBBcmNMYXllckNvbHVtbnNDb25maWc7IGxhYmVsOiBzdHJpbmd9W107XG4gIH0ge1xuICAgIGlmIChmaWVsZFBhaXJzLmxlbmd0aCA8IDIpIHtcbiAgICAgIHJldHVybiB7cHJvcHM6IFtdfTtcbiAgICB9XG5cbiAgICBjb25zdCBwcm9wczoge1xuICAgICAgY29sb3I6IFJHQkNvbG9yO1xuICAgICAgY29sdW1uczogQXJjTGF5ZXJDb2x1bW5zQ29uZmlnO1xuICAgICAgbGFiZWw6IHN0cmluZztcbiAgICB9ID0ge1xuICAgICAgY29sb3I6IGhleFRvUmdiKERFRkFVTFRfTEFZRVJfQ09MT1IudHJpcEFyYyksXG4gICAgICAvLyBjb25uZWN0IHRoZSBmaXJzdCB0d28gcG9pbnQgbGF5ZXIgd2l0aCBhcmNcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3Igc2VwYXJhdGUgdHlwZXMgZm9yIHBvaW50IC8gbmVpZ2hib3IgY29sdW1uc1xuICAgICAgY29sdW1uczoge1xuICAgICAgICBsYXQwOiBmaWVsZFBhaXJzWzBdLnBhaXIubGF0LFxuICAgICAgICBsbmcwOiBmaWVsZFBhaXJzWzBdLnBhaXIubG5nLFxuICAgICAgICBsYXQxOiBmaWVsZFBhaXJzWzFdLnBhaXIubGF0LFxuICAgICAgICBsbmcxOiBmaWVsZFBhaXJzWzFdLnBhaXIubG5nXG4gICAgICB9LFxuICAgICAgbGFiZWw6IGAke2ZpZWxkUGFpcnNbMF0uZGVmYXVsdE5hbWV9IC0+ICR7ZmllbGRQYWlyc1sxXS5kZWZhdWx0TmFtZX0gYXJjYFxuICAgIH07XG5cbiAgICByZXR1cm4ge3Byb3BzOiBbcHJvcHNdfTtcbiAgfVxuXG4gIGdldERlZmF1bHRMYXllckNvbmZpZyhwcm9wczogTGF5ZXJCYXNlQ29uZmlnUGFydGlhbCkge1xuICAgIGNvbnN0IGRlZmF1bHRMYXllckNvbmZpZyA9IHN1cGVyLmdldERlZmF1bHRMYXllckNvbmZpZyhwcm9wcyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uZGVmYXVsdExheWVyQ29uZmlnLFxuICAgICAgY29sdW1uTW9kZTogcHJvcHM/LmNvbHVtbk1vZGUgPz8gREVGQVVMVF9DT0xVTU5fTU9ERVxuICAgIH07XG4gIH1cblxuICBjYWxjdWxhdGVEYXRhQXR0cmlidXRlRm9yR2VvQXJyb3coXG4gICAge2RhdGFDb250YWluZXIsIGZpbHRlcmVkSW5kZXh9OiB7ZGF0YUNvbnRhaW5lcjogQXJyb3dEYXRhQ29udGFpbmVyOyBmaWx0ZXJlZEluZGV4OiBudW1iZXJbXX0sXG4gICAgZ2V0UG9zaXRpb25cbiAgKSB7XG4gICAgdGhpcy5maWx0ZXJlZEluZGV4ID0gZ2V0RmlsdGVyZWRJbmRleChcbiAgICAgIGRhdGFDb250YWluZXIubnVtUm93cygpLFxuICAgICAgZmlsdGVyZWRJbmRleCxcbiAgICAgIHRoaXMuZmlsdGVyZWRJbmRleFxuICAgICk7XG4gICAgdGhpcy5maWx0ZXJlZEluZGV4VHJpZ2dlciA9IGZpbHRlcmVkSW5kZXg7XG5cbiAgICBpZiAodGhpcy5jb25maWcuY29sdW1uTW9kZSA9PT0gQ09MVU1OX01PREVfR0VPQVJST1cpIHtcbiAgICAgIHRoaXMuZ2VvQXJyb3dWZWN0b3IwID0gZGF0YUNvbnRhaW5lci5nZXRDb2x1bW4odGhpcy5jb25maWcuY29sdW1ucy5nZW9hcnJvdzAuZmllbGRJZHgpO1xuICAgICAgdGhpcy5nZW9BcnJvd1ZlY3RvcjEgPSBkYXRhQ29udGFpbmVyLmdldENvbHVtbih0aGlzLmNvbmZpZy5jb2x1bW5zLmdlb2Fycm93MS5maWVsZElkeCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGdlbmVyYXRlIGNvbHVtbnMgY29tcGF0aWJsZSB3aXRoIGdlb2Fycm93IHBvaW50IGV4dGVuc2lvblxuICAgICAgLy8gVE9ETyByZW1vdmUgZXhjZXNzaXZlIGludGVybWVkaWF0ZSBhbGxvY2F0aW9uc1xuICAgICAgdGhpcy5nZW9BcnJvd1ZlY3RvcjAgPSBjcmVhdGVHZW9BcnJvd1BvaW50VmVjdG9yKGRhdGFDb250YWluZXIsIGQgPT4ge1xuICAgICAgICByZXR1cm4gZ2V0UG9zaXRpb24oZCkuc2xpY2UoMCwgMyk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuZ2VvQXJyb3dWZWN0b3IxID0gY3JlYXRlR2VvQXJyb3dQb2ludFZlY3RvcihkYXRhQ29udGFpbmVyLCBkID0+IHtcbiAgICAgICAgcmV0dXJuIGdldFBvc2l0aW9uKGQpLnNsaWNlKDMsIDYpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGFDb250YWluZXIuZ2V0VGFibGUoKTtcbiAgfVxuXG4gIGNhbGN1bGF0ZURhdGFBdHRyaWJ1dGVGb3JQb2ludHMoXG4gICAge2ZpbHRlcmVkSW5kZXh9OiB7ZGF0YUNvbnRhaW5lcjogRGF0YUNvbnRhaW5lckludGVyZmFjZTsgZmlsdGVyZWRJbmRleDogbnVtYmVyW119LFxuICAgIGdldFBvc2l0aW9uXG4gICkge1xuICAgIGNvbnN0IGRhdGE6IEFyY0xheWVyRGF0YVtdID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWx0ZXJlZEluZGV4Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBpbmRleCA9IGZpbHRlcmVkSW5kZXhbaV07XG4gICAgICBjb25zdCBwb3MgPSBnZXRQb3NpdGlvbih7aW5kZXh9KTtcblxuICAgICAgLy8gaWYgZG9lc24ndCBoYXZlIHBvaW50IGxhdCBvciBsbmcsIGRvIG5vdCBhZGQgdGhlIHBvaW50XG4gICAgICAvLyBkZWNrLmdsIGNhbid0IGhhbmRsZSBwb3NpdGlvbiA9IG51bGxcbiAgICAgIGlmIChwb3MuZXZlcnkoTnVtYmVyLmlzRmluaXRlKSkge1xuICAgICAgICBkYXRhLnB1c2goe1xuICAgICAgICAgIGluZGV4LFxuICAgICAgICAgIHNvdXJjZVBvc2l0aW9uOiBbcG9zWzBdLCBwb3NbMV0sIHBvc1syXV0sXG4gICAgICAgICAgdGFyZ2V0UG9zaXRpb246IFtwb3NbM10sIHBvc1s0XSwgcG9zWzVdXVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBjYWxjdWxhdGVEYXRhQXR0cmlidXRlRm9yUG9pbnROTmVpZ2hib3JzKFxuICAgIHtcbiAgICAgIGRhdGFDb250YWluZXIsXG4gICAgICBmaWx0ZXJlZEluZGV4XG4gICAgfToge2RhdGFDb250YWluZXI6IERhdGFDb250YWluZXJJbnRlcmZhY2U7IGZpbHRlcmVkSW5kZXg6IG51bWJlcltdfSxcbiAgICBnZXRQb3NpdGlvblxuICApIHtcbiAgICBjb25zdCBkYXRhOiB7aW5kZXg6IG51bWJlcjsgc291cmNlUG9zaXRpb246IG51bWJlcltdOyB0YXJnZXRQb3NpdGlvbjogbnVtYmVyW119W10gPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpbHRlcmVkSW5kZXgubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGluZGV4ID0gZmlsdGVyZWRJbmRleFtpXTtcbiAgICAgIGNvbnN0IHBvcyA9IGdldFBvc2l0aW9uKHtpbmRleH0pO1xuICAgICAgLy8gaWYgZG9lc24ndCBoYXZlIHBvaW50IGxhdCBvciBsbmcsIGRvIG5vdCBhZGQgdGhlIHBvaW50XG4gICAgICAvLyBkZWNrLmdsIGNhbid0IGhhbmRsZSBwb3NpdGlvbiA9IG51bGxcbiAgICAgIGlmIChwb3MuZXZlcnkoTnVtYmVyLmlzRmluaXRlKSkge1xuICAgICAgICAvLyBwdXNoIGFsbCBuZWlib3JzXG4gICAgICAgIGNvbnN0IG5laWdoYm9ySWR4ID0gdGhpcy5jb25maWcuY29sdW1ucy5uZWlnaGJvcnMudmFsdWVcbiAgICAgICAgICA/IGRhdGFDb250YWluZXIudmFsdWVBdChpbmRleCwgdGhpcy5jb25maWcuY29sdW1ucy5uZWlnaGJvcnMuZmllbGRJZHgpXG4gICAgICAgICAgOiBbXTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobmVpZ2hib3JJZHgpKSB7XG4gICAgICAgICAgbmVpZ2hib3JJZHguZm9yRWFjaChpZHggPT4ge1xuICAgICAgICAgICAgLy8gVE9ETyBwcmV2ZW50IHJvdyBtYXRlcmlhbGl6YXRpb24gaGVyZVxuICAgICAgICAgICAgY29uc3QgdFBvcyA9IGRhdGFDb250YWluZXIucm93QXNBcnJheShpZHgpID8gZ2V0UG9zaXRpb24oe2luZGV4OiBpZHh9KSA6IG51bGw7XG4gICAgICAgICAgICBpZiAodFBvcyAmJiB0UG9zLmV2ZXJ5KE51bWJlci5pc0Zpbml0ZSkpIHtcbiAgICAgICAgICAgICAgZGF0YS5wdXNoKHtcbiAgICAgICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgICAgICBzb3VyY2VQb3NpdGlvbjogW3Bvc1swXSwgcG9zWzFdLCBwb3NbMl1dLFxuICAgICAgICAgICAgICAgIHRhcmdldFBvc2l0aW9uOiBbdFBvc1swXSwgdFBvc1sxXSwgdFBvc1syXV1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIGNhbGN1bGF0ZURhdGFBdHRyaWJ1dGUoe2RhdGFDb250YWluZXIsIGZpbHRlcmVkSW5kZXh9OiBLZXBsZXJUYWJsZSwgZ2V0UG9zaXRpb24pIHtcbiAgICBjb25zdCB7Y29sdW1uTW9kZX0gPSB0aGlzLmNvbmZpZztcblxuICAgIC8vIDEpIENPTFVNTl9NT0RFX0dFT0FSUk9XIC0gd2hlbiB3ZSBoYXZlIGEgZ2VvYXJyb3cgcG9pbnQgY29sdW1uXG4gICAgLy8gMikgQ09MVU1OX01PREVfUE9JTlRTICsgQXJyb3dEYXRhQ29udGFpbmVyID4gY3JlYXRlIGdlb2Fycm93IHBvaW50IGNvbHVtbiBvbiB0aGUgZmx5XG4gICAgaWYgKFxuICAgICAgZGF0YUNvbnRhaW5lciBpbnN0YW5jZW9mIEFycm93RGF0YUNvbnRhaW5lciAmJlxuICAgICAgKGNvbHVtbk1vZGUgPT09IENPTFVNTl9NT0RFX0dFT0FSUk9XIHx8IGNvbHVtbk1vZGUgPT09IENPTFVNTl9NT0RFX1BPSU5UUylcbiAgICApIHtcbiAgICAgIHJldHVybiB0aGlzLmNhbGN1bGF0ZURhdGFBdHRyaWJ1dGVGb3JHZW9BcnJvdyh7ZGF0YUNvbnRhaW5lciwgZmlsdGVyZWRJbmRleH0sIGdldFBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICAvLyB3ZSBkb24ndCBuZWVkIHRoZXNlIGluIG5vbi1BcnJvdyBtb2RlcyBhdG0uXG4gICAgdGhpcy5nZW9BcnJvd1ZlY3RvcjAgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5nZW9BcnJvd1ZlY3RvcjEgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5maWx0ZXJlZEluZGV4ID0gbnVsbDtcblxuICAgIGlmICh0aGlzLmNvbmZpZy5jb2x1bW5Nb2RlID09PSBDT0xVTU5fTU9ERV9QT0lOVFMpIHtcbiAgICAgIHJldHVybiB0aGlzLmNhbGN1bGF0ZURhdGFBdHRyaWJ1dGVGb3JQb2ludHMoe2RhdGFDb250YWluZXIsIGZpbHRlcmVkSW5kZXh9LCBnZXRQb3NpdGlvbik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNhbGN1bGF0ZURhdGFBdHRyaWJ1dGVGb3JQb2ludE5OZWlnaGJvcnMoXG4gICAgICB7ZGF0YUNvbnRhaW5lciwgZmlsdGVyZWRJbmRleH0sXG4gICAgICBnZXRQb3NpdGlvblxuICAgICk7XG4gIH1cblxuICBmb3JtYXRMYXllckRhdGEoZGF0YXNldHMsIG9sZExheWVyRGF0YSkge1xuICAgIGlmICh0aGlzLmNvbmZpZy5kYXRhSWQgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgY29uc3Qge2dwdUZpbHRlciwgZGF0YUNvbnRhaW5lcn0gPSBkYXRhc2V0c1t0aGlzLmNvbmZpZy5kYXRhSWRdO1xuICAgIGNvbnN0IHtkYXRhfSA9IHRoaXMudXBkYXRlRGF0YShkYXRhc2V0cywgb2xkTGF5ZXJEYXRhKTtcbiAgICBjb25zdCBhY2Nlc3NvcnMgPSB0aGlzLmdldEF0dHJpYnV0ZUFjY2Vzc29ycyh7ZGF0YUNvbnRhaW5lcn0pO1xuICAgIGNvbnN0IGlzRmlsdGVyZWRBY2Nlc3NvciA9IChkYXRhOiB7aW5kZXg6IG51bWJlcn0pID0+IHtcbiAgICAgIC8vIGZvciBHZW9BcnJvdyBkYXRhIGlzIGEgYnVmZmVyLCBzbyB1c2Ugb2JqZWN0SW5mb1xuICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyZWRJbmRleCA/IHRoaXMuZmlsdGVyZWRJbmRleFtkYXRhLmluZGV4XSA6IDE7XG4gICAgfTtcblxuICAgIHJldHVybiB7XG4gICAgICBkYXRhLFxuICAgICAgZ2V0RmlsdGVyVmFsdWU6IGdwdUZpbHRlci5maWx0ZXJWYWx1ZUFjY2Vzc29yKGRhdGFDb250YWluZXIpKCksXG4gICAgICBnZXRGaWx0ZXJlZDogaXNGaWx0ZXJlZEFjY2Vzc29yLFxuICAgICAgLi4uYWNjZXNzb3JzXG4gICAgfTtcbiAgfVxuICAvKiBlc2xpbnQtZW5hYmxlIGNvbXBsZXhpdHkgKi9cblxuICB1cGRhdGVMYXllck1ldGEoZGF0YXNldDogS2VwbGVyVGFibGUpIHtcbiAgICBjb25zdCB7ZGF0YUNvbnRhaW5lcn0gPSBkYXRhc2V0O1xuXG4gICAgdGhpcy5kYXRhQ29udGFpbmVyID0gZGF0YUNvbnRhaW5lcjtcblxuICAgIC8vIGdldCBib3VuZHMgZnJvbSBhcmNzXG4gICAgY29uc3QgZ2V0UG9zaXRpb24gPSB0aGlzLmdldFBvc2l0aW9uQWNjZXNzb3IoZGF0YUNvbnRhaW5lcik7XG5cbiAgICBjb25zdCBzQm91bmRzID0gdGhpcy5nZXRQb2ludHNCb3VuZHMoZGF0YUNvbnRhaW5lciwgZCA9PiB7XG4gICAgICBjb25zdCBwb3MgPSBnZXRQb3NpdGlvbihkKTtcbiAgICAgIHJldHVybiBbcG9zWzBdLCBwb3NbMV1dO1xuICAgIH0pO1xuXG4gICAgbGV0IHRCb3VuZHM6IG51bWJlcltdIHwgbnVsbCA9IFtdO1xuICAgIGlmICh0aGlzLmNvbmZpZy5jb2x1bW5Nb2RlID09PSBDT0xVTU5fTU9ERV9QT0lOVFMpIHtcbiAgICAgIHRCb3VuZHMgPSB0aGlzLmdldFBvaW50c0JvdW5kcyhkYXRhQ29udGFpbmVyLCBkID0+IHtcbiAgICAgICAgY29uc3QgcG9zID0gZ2V0UG9zaXRpb24oZCk7XG4gICAgICAgIHJldHVybiBbcG9zWzNdLCBwb3NbNF1dO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHdoZW4gY29sdW1uTW9kZSBpcyBuZWlnaGJvcnMsIGl0IHJlZmVyZW5jZSB0aGUgc2FtZSBjb2xsZWN0aW9uIG9mIHBvaW50c1xuICAgICAgdEJvdW5kcyA9IHNCb3VuZHM7XG4gICAgfVxuXG4gICAgY29uc3QgYm91bmRzID1cbiAgICAgIHRCb3VuZHMgJiYgc0JvdW5kc1xuICAgICAgICA/IFtcbiAgICAgICAgICAgIE1hdGgubWluKHNCb3VuZHNbMF0sIHRCb3VuZHNbMF0pLFxuICAgICAgICAgICAgTWF0aC5taW4oc0JvdW5kc1sxXSwgdEJvdW5kc1sxXSksXG4gICAgICAgICAgICBNYXRoLm1heChzQm91bmRzWzJdLCB0Qm91bmRzWzJdKSxcbiAgICAgICAgICAgIE1hdGgubWF4KHNCb3VuZHNbM10sIHRCb3VuZHNbM10pXG4gICAgICAgICAgXVxuICAgICAgICA6IHNCb3VuZHMgfHwgdEJvdW5kcztcblxuICAgIHRoaXMudXBkYXRlTWV0YSh7Ym91bmRzfSk7XG4gIH1cblxuICByZW5kZXJMYXllcihvcHRzKSB7XG4gICAgY29uc3Qge2RhdGEsIGdwdUZpbHRlciwgb2JqZWN0SG92ZXJlZCwgaW50ZXJhY3Rpb25Db25maWcsIGRhdGFzZXR9ID0gb3B0cztcbiAgICBjb25zdCB1cGRhdGVUcmlnZ2VycyA9IHtcbiAgICAgIGdldFBvc2l0aW9uOiB0aGlzLmNvbmZpZy5jb2x1bW5zLFxuICAgICAgZ2V0RmlsdGVyVmFsdWU6IGdwdUZpbHRlci5maWx0ZXJWYWx1ZVVwZGF0ZVRyaWdnZXJzLFxuICAgICAgZ2V0RmlsdGVyZWQ6IHRoaXMuZmlsdGVyZWRJbmRleFRyaWdnZXIsXG4gICAgICAuLi50aGlzLmdldFZpc3VhbENoYW5uZWxVcGRhdGVUcmlnZ2VycygpXG4gICAgfTtcbiAgICBjb25zdCB3aWR0aFNjYWxlID0gdGhpcy5jb25maWcudmlzQ29uZmlnLnRoaWNrbmVzcyAqIFBST0pFQ1RFRF9QSVhFTF9TSVpFX01VTFRJUExJRVI7XG4gICAgY29uc3QgZGVmYXVsdExheWVyUHJvcHMgPSB0aGlzLmdldERlZmF1bHREZWNrTGF5ZXJQcm9wcyhvcHRzKTtcbiAgICBjb25zdCBob3ZlcmVkT2JqZWN0ID0gdGhpcy5oYXNIb3ZlcmVkT2JqZWN0KG9iamVjdEhvdmVyZWQpO1xuXG4gICAgY29uc3QgdXNlQXJyb3dMYXllciA9IEJvb2xlYW4odGhpcy5nZW9BcnJvd1ZlY3RvcjApO1xuXG4gICAgbGV0IEFyY0xheWVyQ2xhc3M6IHR5cGVvZiBEZWNrQXJjTGF5ZXIgfCB0eXBlb2YgR2VvQXJyb3dBcmNMYXllciA9IERlY2tBcmNMYXllcjtcbiAgICBsZXQgZXhwZXJpbWVudGFsUHJvcE92ZXJyaWRlczoge1xuICAgICAgZGF0YT86IGFycm93LlRhYmxlO1xuICAgICAgZ2V0U291cmNlUG9zaXRpb24/OiBhcnJvdy5WZWN0b3I7XG4gICAgICBnZXRUYXJnZXRQb3NpdGlvbj86IGFycm93LlZlY3RvcjtcbiAgICB9ID0ge307XG5cbiAgICBpZiAodXNlQXJyb3dMYXllcikge1xuICAgICAgQXJjTGF5ZXJDbGFzcyA9IEdlb0Fycm93QXJjTGF5ZXI7XG4gICAgICBleHBlcmltZW50YWxQcm9wT3ZlcnJpZGVzID0ge1xuICAgICAgICBkYXRhOiBkYXRhc2V0LmRhdGFDb250YWluZXIuZ2V0VGFibGUoKSxcbiAgICAgICAgZ2V0U291cmNlUG9zaXRpb246IHRoaXMuZ2VvQXJyb3dWZWN0b3IwLFxuICAgICAgICBnZXRUYXJnZXRQb3NpdGlvbjogdGhpcy5nZW9BcnJvd1ZlY3RvcjFcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIFtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgIG5ldyBBcmNMYXllckNsYXNzKHtcbiAgICAgICAgLi4uZGVmYXVsdExheWVyUHJvcHMsXG4gICAgICAgIC4uLnRoaXMuZ2V0QnJ1c2hpbmdFeHRlbnNpb25Qcm9wcyhpbnRlcmFjdGlvbkNvbmZpZywgJ3NvdXJjZV90YXJnZXQnKSxcbiAgICAgICAgLi4uZGF0YSxcbiAgICAgICAgLi4uZXhwZXJpbWVudGFsUHJvcE92ZXJyaWRlcyxcbiAgICAgICAgd2lkdGhTY2FsZSxcbiAgICAgICAgdXBkYXRlVHJpZ2dlcnMsXG4gICAgICAgIGV4dGVuc2lvbnM6IFtcbiAgICAgICAgICAuLi5kZWZhdWx0TGF5ZXJQcm9wcy5leHRlbnNpb25zLFxuICAgICAgICAgIGJydXNoaW5nRXh0ZW5zaW9uLFxuICAgICAgICAgIC4uLih1c2VBcnJvd0xheWVyID8gW2Fycm93Q1BVRmlsdGVyRXh0ZW5zaW9uXSA6IFtdKVxuICAgICAgICBdXG4gICAgICB9KSxcbiAgICAgIC8vIGhvdmVyIGxheWVyXG4gICAgICAuLi4oaG92ZXJlZE9iamVjdFxuICAgICAgICA/IFtcbiAgICAgICAgICAgIG5ldyBEZWNrQXJjTGF5ZXIoe1xuICAgICAgICAgICAgICAuLi50aGlzLmdldERlZmF1bHRIb3ZlckxheWVyUHJvcHMoKSxcbiAgICAgICAgICAgICAgdmlzaWJsZTogZGVmYXVsdExheWVyUHJvcHMudmlzaWJsZSxcbiAgICAgICAgICAgICAgZGF0YTogW2hvdmVyZWRPYmplY3RdLFxuICAgICAgICAgICAgICB3aWR0aFNjYWxlLFxuICAgICAgICAgICAgICBnZXRTb3VyY2VDb2xvcjogdGhpcy5jb25maWcuaGlnaGxpZ2h0Q29sb3IsXG4gICAgICAgICAgICAgIGdldFRhcmdldENvbG9yOiB0aGlzLmNvbmZpZy5oaWdobGlnaHRDb2xvcixcbiAgICAgICAgICAgICAgZ2V0V2lkdGg6IGRhdGEuZ2V0V2lkdGhcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgXVxuICAgICAgICA6IFtdKVxuICAgIF07XG4gIH1cblxuICBoYXNIb3ZlcmVkT2JqZWN0KG9iamVjdEluZm86IHtpbmRleDogbnVtYmVyfSkge1xuICAgIGlmIChcbiAgICAgIGlzTGF5ZXJIb3ZlcmVkRnJvbUFycm93KG9iamVjdEluZm8sIHRoaXMuaWQpICYmXG4gICAgICBvYmplY3RJbmZvLmluZGV4ID49IDAgJiZcbiAgICAgIHRoaXMuZGF0YUNvbnRhaW5lclxuICAgICkge1xuICAgICAgLy8gb2JqZWN0SW5mby5pbmRleCBjYW4gcG9pbnQgdG8gZGF0YSBvZiBhcmNzIGNyZWF0ZWQgaW4gbmVpZ2hib3IgbW9kZSwgc28gZ2V0IGluZGV4IHRvIHNvdXJjZSBkYXRhLlxuICAgICAgY29uc3QgaG92ZXJlZE9iamVjdCA9IHN1cGVyLmhhc0hvdmVyZWRPYmplY3Qob2JqZWN0SW5mbyk7XG4gICAgICByZXR1cm4gaG92ZXJlZE9iamVjdFxuICAgICAgICA/IHtcbiAgICAgICAgICAgIGluZGV4OiBob3ZlcmVkT2JqZWN0LmluZGV4LFxuICAgICAgICAgICAgcG9zaXRpb246IHRoaXMuZ2V0UG9zaXRpb25BY2Nlc3Nvcih0aGlzLmRhdGFDb250YWluZXIpKHtpbmRleDogaG92ZXJlZE9iamVjdC5pbmRleH0pXG4gICAgICAgICAgfVxuICAgICAgICA6IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1cGVyLmhhc0hvdmVyZWRPYmplY3Qob2JqZWN0SW5mbyk7XG4gIH1cblxuICBnZXRIb3ZlckRhdGEoXG4gICAgb2JqZWN0OiB7aW5kZXg6IG51bWJlcn0gfCBhcnJvdy5TdHJ1Y3RSb3cgfCB1bmRlZmluZWQsXG4gICAgZGF0YUNvbnRhaW5lcjogRGF0YUNvbnRhaW5lckludGVyZmFjZSxcbiAgICBmaWVsZHM6IEZpZWxkW10sXG4gICAgYW5pbWF0aW9uQ29uZmlnOiBBbmltYXRpb25Db25maWcsXG4gICAgaG92ZXJJbmZvOiB7aW5kZXg6IG51bWJlcn1cbiAgKSB7XG4gICAgLy8gZm9yIGFycm93IGZvcm1hdCwgYG9iamVjdGAgaXMgdGhlIEFycm93IHJvdyBvYmplY3QgUHJveHksXG4gICAgLy8gYW5kIGluZGV4IGlzIHBhc3NlZCBpbiBgaG92ZXJJbmZvYC5cbiAgICBjb25zdCBpbmRleCA9IHRoaXMuZ2VvQXJyb3dWZWN0b3IwID8gaG92ZXJJbmZvPy5pbmRleCA6IChvYmplY3QgYXMge2luZGV4OiBudW1iZXJ9KS5pbmRleDtcbiAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgcmV0dXJuIGRhdGFDb250YWluZXIucm93KGluZGV4KTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBnZXRMZWdlbmRWaXN1YWxDaGFubmVscygpIHtcbiAgICBsZXQgY2hhbm5lbHM6IHtba2V5OiBzdHJpbmddOiBWaXN1YWxDaGFubmVsfSA9IHRoaXMudmlzdWFsQ2hhbm5lbHM7XG4gICAgaWYgKGNoYW5uZWxzLnNvdXJjZUNvbG9yPy5maWVsZCAmJiB0aGlzLmNvbmZpZ1tjaGFubmVscy5zb3VyY2VDb2xvci5maWVsZF0pIHtcbiAgICAgIC8vIFJlbW92ZSB0YXJnZXRDb2xvciB0byBhdm9pZCBkdXBsaWNhdGUgbGVnZW5kXG4gICAgICBjaGFubmVscyA9IHsuLi5jaGFubmVsc307XG4gICAgICBkZWxldGUgY2hhbm5lbHMudGFyZ2V0Q29sb3I7XG4gICAgfVxuICAgIHJldHVybiBjaGFubmVscztcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFLQSxJQUFBQSxVQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFRQSxJQUFBQyxXQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxrQkFBQSxHQUFBRixPQUFBO0FBQ0EsSUFBQUcsYUFBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksT0FBQSxHQUFBSixPQUFBO0FBRUEsSUFBQUss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LElBQUlDLFFBQXdDLEdBQUcsSUFBSSxDQUFDQyxjQUFjO01BQ2xFLElBQUksQ0FBQUYscUJBQUEsR0FBQUMsUUFBUSxDQUFDeEgsV0FBVyxjQUFBdUgscUJBQUEsZUFBcEJBLHFCQUFBLENBQXNCM0osS0FBSyxJQUFJLElBQUksQ0FBQytCLE1BQU0sQ0FBQzZILFFBQVEsQ0FBQ3hILFdBQVcsQ0FBQ3BDLEtBQUssQ0FBQyxFQUFFO1FBQzFFO1FBQ0E0SixRQUFRLEdBQUFqTixhQUFBLEtBQU9pTixRQUFRLENBQUM7UUFDeEIsT0FBT0EsUUFBUSxDQUFDNUssV0FBVztNQUM3QjtNQUNBLE9BQU80SyxRQUFRO0lBQ2pCO0VBQUM7SUFBQXZLLEdBQUE7SUFBQXVELEtBQUEsRUF4VEQsU0FBT2tILHFCQUFxQkEsQ0FBQUMsS0FBQSxFQUUxQjtNQUFBLElBRjRCVCxNQUFNLEdBQUFTLEtBQUEsQ0FBTlQsTUFBTTtRQUFBVSxnQkFBQSxHQUFBRCxLQUFBLENBQUVFLFVBQVU7UUFBVkEsVUFBVSxHQUFBRCxnQkFBQSxjQUFHLEVBQUUsR0FBQUEsZ0JBQUE7TUFHbkQsSUFBSUMsVUFBVSxDQUFDcE4sTUFBTSxHQUFHLENBQUMsRUFBRTtRQUN6QixPQUFPO1VBQUMyRSxLQUFLLEVBQUU7UUFBRSxDQUFDO01BQ3BCO01BRUEsSUFBTUEsS0FJTCxHQUFHO1FBQ0ZhLEtBQUssRUFBRSxJQUFBNkgsZUFBUSxFQUFDQyw4QkFBbUIsQ0FBQ0MsT0FBTyxDQUFDO1FBQzVDO1FBQ0E7UUFDQXRLLE9BQU8sRUFBRTtVQUNQeEIsSUFBSSxFQUFFMkwsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDSSxJQUFJLENBQUM3SixHQUFHO1VBQzVCakMsSUFBSSxFQUFFMEwsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDSSxJQUFJLENBQUM1SixHQUFHO1VBQzVCakMsSUFBSSxFQUFFeUwsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDSSxJQUFJLENBQUM3SixHQUFHO1VBQzVCL0IsSUFBSSxFQUFFd0wsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDSSxJQUFJLENBQUM1SjtRQUMzQixDQUFDO1FBQ0RuQixLQUFLLEtBQUFrSixNQUFBLENBQUt5QixVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUNLLFdBQVcsVUFBQTlCLE1BQUEsQ0FBT3lCLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQ0ssV0FBVztNQUNyRSxDQUFDO01BRUQsT0FBTztRQUFDOUksS0FBSyxFQUFFLENBQUNBLEtBQUs7TUFBQyxDQUFDO0lBQ3pCO0VBQUM7QUFBQSxFQWpJbUMrSSxxQkFBSyIsImlnbm9yZUxpc3QiOltdfQ==
515
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYmFzZUxheWVyIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfZXh0ZW5zaW9ucyIsIl9kZWNrZ2xBcnJvd0xheWVycyIsIl9kZWNrZ2xMYXllcnMiLCJfbGF5ZXJzIiwiX3V0aWxzIiwiX2FyY0xheWVySWNvbiIsIl9sYXllclV0aWxzIiwiX2NvbnN0YW50cyIsIm93bktleXMiLCJlIiwiciIsInQiLCJPYmplY3QiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwibyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiX2NhbGxTdXBlciIsIl9nZXRQcm90b3R5cGVPZjIiLCJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjIiLCJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwiUmVmbGVjdCIsImNvbnN0cnVjdCIsImNvbnN0cnVjdG9yIiwiQm9vbGVhbiIsInByb3RvdHlwZSIsInZhbHVlT2YiLCJjYWxsIiwiX3N1cGVyUHJvcEdldCIsInAiLCJfZ2V0MiIsImFyY1JlcXVpcmVkQ29sdW1ucyIsImV4cG9ydHMiLCJuZWlnaGJvclJlcXVpcmVkQ29sdW1ucyIsImdlb2Fycm93UmVxdWlyZWRDb2x1bW5zIiwiYXJjQ29sdW1uTGFiZWxzIiwibGF0MCIsImxuZzAiLCJsYXQxIiwibG5nMSIsIm5laWdoYm9ycyIsImFyY1Zpc0NvbmZpZ3MiLCJvcGFjaXR5IiwidGhpY2tuZXNzIiwiY29sb3JSYW5nZSIsInNpemVSYW5nZSIsInRhcmdldENvbG9yIiwiQ09MVU1OX01PREVfUE9JTlRTIiwiQ09MVU1OX01PREVfTkVJR0hCT1JTIiwiQ09MVU1OX01PREVfR0VPQVJST1ciLCJTVVBQT1JURURfQ09MVU1OX01PREVTIiwia2V5IiwibGFiZWwiLCJyZXF1aXJlZENvbHVtbnMiLCJERUZBVUxUX0NPTFVNTl9NT0RFIiwiYnJ1c2hpbmdFeHRlbnNpb24iLCJCcnVzaGluZ0V4dGVuc2lvbiIsImFycm93Q1BVRmlsdGVyRXh0ZW5zaW9uIiwiRmlsdGVyQXJyb3dFeHRlbnNpb24iLCJpc0gzRmllbGQiLCJjb2x1bW5zIiwiYWxsRmllbGRzIiwiZmllbGQiLCJmaWVsZElkeCIsInR5cGUiLCJBTExfRklFTERfVFlQRVMiLCJoMyIsImFyY1Bvc0FjY2Vzc29yIiwiX3JlZiIsImNvbHVtbk1vZGUiLCJsYXQiLCJsbmciLCJnZW9hcnJvdzAiLCJnZW9hcnJvdzEiLCJkYyIsImQiLCJzdGFydCIsInZhbHVlQXQiLCJpbmRleCIsImVuZCIsImdldCIsInN0YXJ0UG9zIiwibWF5YmVIZXhUb0dlbyIsImVuZFBvcyIsIkFyY0xheWVyIiwiX0xheWVyIiwicHJvcHMiLCJfdGhpcyIsIl9jbGFzc0NhbGxDaGVjazIiLCJ1bmRlZmluZWQiLCJyZWdpc3RlclZpc0NvbmZpZyIsImdldFBvc2l0aW9uQWNjZXNzb3IiLCJkYXRhQ29udGFpbmVyIiwiY29uZmlnIiwiX2luaGVyaXRzMiIsIl9jcmVhdGVDbGFzczIiLCJBcmNMYXllckljb24iLCJkZWZhdWx0TGlua0NvbHVtblBhaXJzIiwic291cmNlQ29sb3IiLCJjb2xvciIsInByb3BlcnR5IiwiYWNjZXNzb3IiLCJkZWZhdWx0VmFsdWUiLCJ2aXNDb25maWciLCJzaXplIiwiY29sdW1uIiwidmFsdWUiLCJoYXNBbGxDb2x1bW5zIiwiaGFzQ29sdW1uVmFsdWUiLCJoYXNTdGFydCIsImhhc0VuZCIsImhhc05laWJvcnMiLCJnZXREZWZhdWx0TGF5ZXJDb25maWciLCJfcHJvcHMkY29sdW1uTW9kZSIsImRlZmF1bHRMYXllckNvbmZpZyIsImNhbGN1bGF0ZURhdGFBdHRyaWJ1dGVGb3JHZW9BcnJvdyIsIl9yZWYyIiwiZ2V0UG9zaXRpb24iLCJmaWx0ZXJlZEluZGV4IiwiZ2V0RmlsdGVyZWRJbmRleCIsIm51bVJvd3MiLCJmaWx0ZXJlZEluZGV4VHJpZ2dlciIsImdlb0Fycm93VmVjdG9yMCIsImdldENvbHVtbiIsImdlb0Fycm93VmVjdG9yMSIsImNyZWF0ZUdlb0Fycm93UG9pbnRWZWN0b3IiLCJzbGljZSIsImdldFRhYmxlIiwiY2FsY3VsYXRlRGF0YUF0dHJpYnV0ZUZvclBvaW50cyIsIl9yZWYzIiwiZGF0YSIsImkiLCJwb3MiLCJldmVyeSIsIk51bWJlciIsImlzRmluaXRlIiwic291cmNlUG9zaXRpb24iLCJ0YXJnZXRQb3NpdGlvbiIsImNhbGN1bGF0ZURhdGFBdHRyaWJ1dGVGb3JQb2ludE5OZWlnaGJvcnMiLCJfcmVmNCIsIl90aGlzMiIsIl9sb29wIiwibmVpZ2hib3JJZHgiLCJBcnJheSIsImlzQXJyYXkiLCJpZHgiLCJ0UG9zIiwicm93QXNBcnJheSIsImNhbGN1bGF0ZURhdGFBdHRyaWJ1dGUiLCJfcmVmNSIsIkFycm93RGF0YUNvbnRhaW5lciIsImZvcm1hdExheWVyRGF0YSIsImRhdGFzZXRzIiwib2xkTGF5ZXJEYXRhIiwiX3RoaXMzIiwiZGF0YUlkIiwiX2RhdGFzZXRzJHRoaXMkY29uZmlnIiwiZ3B1RmlsdGVyIiwiX3RoaXMkdXBkYXRlRGF0YSIsInVwZGF0ZURhdGEiLCJhY2Nlc3NvcnMiLCJnZXRBdHRyaWJ1dGVBY2Nlc3NvcnMiLCJpc0ZpbHRlcmVkQWNjZXNzb3IiLCJnZXRGaWx0ZXJWYWx1ZSIsImZpbHRlclZhbHVlQWNjZXNzb3IiLCJnZXRGaWx0ZXJlZCIsInVwZGF0ZUxheWVyTWV0YSIsImRhdGFzZXQiLCJzQm91bmRzIiwiZ2V0UG9pbnRzQm91bmRzIiwidEJvdW5kcyIsImJvdW5kcyIsIk1hdGgiLCJtaW4iLCJtYXgiLCJ1cGRhdGVNZXRhIiwicmVuZGVyTGF5ZXIiLCJvcHRzIiwib2JqZWN0SG92ZXJlZCIsImludGVyYWN0aW9uQ29uZmlnIiwidXBkYXRlVHJpZ2dlcnMiLCJmaWx0ZXJWYWx1ZVVwZGF0ZVRyaWdnZXJzIiwiZ2V0VmlzdWFsQ2hhbm5lbFVwZGF0ZVRyaWdnZXJzIiwid2lkdGhTY2FsZSIsIlBST0pFQ1RFRF9QSVhFTF9TSVpFX01VTFRJUExJRVIiLCJkZWZhdWx0TGF5ZXJQcm9wcyIsImdldERlZmF1bHREZWNrTGF5ZXJQcm9wcyIsImhvdmVyZWRPYmplY3QiLCJoYXNIb3ZlcmVkT2JqZWN0IiwidXNlQXJyb3dMYXllciIsIkFyY0xheWVyQ2xhc3MiLCJEZWNrQXJjTGF5ZXIiLCJleHBlcmltZW50YWxQcm9wT3ZlcnJpZGVzIiwiR2VvQXJyb3dBcmNMYXllciIsImdldFNvdXJjZVBvc2l0aW9uIiwiZ2V0VGFyZ2V0UG9zaXRpb24iLCJnZXRCcnVzaGluZ0V4dGVuc2lvblByb3BzIiwiZXh0ZW5zaW9ucyIsImNvbmNhdCIsIl90b0NvbnN1bWFibGVBcnJheTIiLCJnZXREZWZhdWx0SG92ZXJMYXllclByb3BzIiwidmlzaWJsZSIsImdldFNvdXJjZUNvbG9yIiwiaGlnaGxpZ2h0Q29sb3IiLCJnZXRUYXJnZXRDb2xvciIsImdldFdpZHRoIiwib2JqZWN0SW5mbyIsImlzTGF5ZXJIb3ZlcmVkRnJvbUFycm93IiwiaWQiLCJwb3NpdGlvbiIsImdldEhvdmVyRGF0YSIsIm9iamVjdCIsImZpZWxkcyIsImFuaW1hdGlvbkNvbmZpZyIsImhvdmVySW5mbyIsInJvdyIsImdldExlZ2VuZFZpc3VhbENoYW5uZWxzIiwiX2NoYW5uZWxzJHNvdXJjZUNvbG9yIiwiY2hhbm5lbHMiLCJ2aXN1YWxDaGFubmVscyIsImZpbmREZWZhdWx0TGF5ZXJQcm9wcyIsIl9yZWY2IiwiX3JlZjYkZmllbGRQYWlycyIsImZpZWxkUGFpcnMiLCJoZXhUb1JnYiIsIkRFRkFVTFRfTEFZRVJfQ09MT1IiLCJ0cmlwQXJjIiwicGFpciIsImRlZmF1bHROYW1lIiwiTGF5ZXIiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvYXJjLWxheWVyL2FyYy1sYXllci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgKiBhcyBhcnJvdyBmcm9tICdhcGFjaGUtYXJyb3cnO1xuXG5pbXBvcnQgTGF5ZXIsIHtcbiAgTGF5ZXJCYXNlQ29uZmlnLFxuICBMYXllckNvbG9yQ29uZmlnLFxuICBMYXllclNpemVDb25maWcsXG4gIExheWVyQm91bmRzLFxuICBMYXllckJhc2VDb25maWdQYXJ0aWFsLFxuICBWaXN1YWxDaGFubmVsXG59IGZyb20gJy4uL2Jhc2UtbGF5ZXInO1xuaW1wb3J0IHtCcnVzaGluZ0V4dGVuc2lvbn0gZnJvbSAnQGRlY2suZ2wvZXh0ZW5zaW9ucyc7XG5pbXBvcnQge0dlb0Fycm93QXJjTGF5ZXJ9IGZyb20gJ0BrZXBsZXIuZ2wvZGVja2dsLWFycm93LWxheWVycyc7XG5pbXBvcnQge0ZpbHRlckFycm93RXh0ZW5zaW9ufSBmcm9tICdAa2VwbGVyLmdsL2RlY2tnbC1sYXllcnMnO1xuaW1wb3J0IHtBcmNMYXllciBhcyBEZWNrQXJjTGF5ZXJ9IGZyb20gJ0BkZWNrLmdsL2xheWVycyc7XG5cbmltcG9ydCB7XG4gIGhleFRvUmdiLFxuICBEYXRhQ29udGFpbmVySW50ZXJmYWNlLFxuICBtYXliZUhleFRvR2VvLFxuICBBcnJvd0RhdGFDb250YWluZXJcbn0gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5pbXBvcnQgQXJjTGF5ZXJJY29uIGZyb20gJy4vYXJjLWxheWVyLWljb24nO1xuaW1wb3J0IHtpc0xheWVySG92ZXJlZEZyb21BcnJvdywgY3JlYXRlR2VvQXJyb3dQb2ludFZlY3RvciwgZ2V0RmlsdGVyZWRJbmRleH0gZnJvbSAnLi4vbGF5ZXItdXRpbHMnO1xuaW1wb3J0IHtcbiAgREVGQVVMVF9MQVlFUl9DT0xPUixcbiAgUFJPSkVDVEVEX1BJWEVMX1NJWkVfTVVMVElQTElFUixcbiAgQUxMX0ZJRUxEX1RZUEVTXG59IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcblxuaW1wb3J0IHtcbiAgQ29sb3JSYW5nZSxcbiAgUkdCQ29sb3IsXG4gIE1lcmdlLFxuICBWaXNDb25maWdDb2xvclJhbmdlLFxuICBWaXNDb25maWdDb2xvclNlbGVjdCxcbiAgVmlzQ29uZmlnTnVtYmVyLFxuICBWaXNDb25maWdSYW5nZSxcbiAgTGF5ZXJDb2x1bW4sXG4gIEZpZWxkLFxuICBBbmltYXRpb25Db25maWdcbn0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5pbXBvcnQge0tlcGxlclRhYmxlfSBmcm9tICdAa2VwbGVyLmdsL3RhYmxlJztcblxuZXhwb3J0IHR5cGUgQXJjTGF5ZXJWaXNDb25maWdTZXR0aW5ncyA9IHtcbiAgb3BhY2l0eTogVmlzQ29uZmlnTnVtYmVyO1xuICB0aGlja25lc3M6IFZpc0NvbmZpZ051bWJlcjtcbiAgY29sb3JSYW5nZTogVmlzQ29uZmlnQ29sb3JSYW5nZTtcbiAgc2l6ZVJhbmdlOiBWaXNDb25maWdSYW5nZTtcbiAgdGFyZ2V0Q29sb3I6IFZpc0NvbmZpZ0NvbG9yU2VsZWN0O1xufTtcblxuZXhwb3J0IHR5cGUgQXJjTGF5ZXJDb2x1bW5zQ29uZmlnID0ge1xuICAvLyBDT0xVTU5fTU9ERV9QT0lOVFMgcmVxdWlyZWQgY29sdW1uc1xuICBsYXQwOiBMYXllckNvbHVtbjtcbiAgbGF0MTogTGF5ZXJDb2x1bW47XG4gIGxuZzA6IExheWVyQ29sdW1uO1xuICBsbmcxOiBMYXllckNvbHVtbjtcblxuICAvLyBDT0xVTU5fTU9ERV9ORUlHSEJPUlMgcmVxdWlyZWQgY29sdW1uc1xuICBsYXQ6IExheWVyQ29sdW1uO1xuICBsbmc6IExheWVyQ29sdW1uO1xuICBuZWlnaGJvcnM6IExheWVyQ29sdW1uO1xuXG4gIC8vIENPTFVNTl9NT0RFX0dFT0FSUk9XXG4gIGdlb2Fycm93MDogTGF5ZXJDb2x1bW47XG4gIGdlb2Fycm93MTogTGF5ZXJDb2x1bW47XG59O1xuXG5leHBvcnQgdHlwZSBBcmNMYXllclZpc0NvbmZpZyA9IHtcbiAgY29sb3JSYW5nZTogQ29sb3JSYW5nZTtcbiAgb3BhY2l0eTogbnVtYmVyO1xuICBzaXplUmFuZ2U6IFtudW1iZXIsIG51bWJlcl07XG4gIHRhcmdldENvbG9yOiBSR0JDb2xvcjtcbiAgdGhpY2tuZXNzOiBudW1iZXI7XG59O1xuXG5leHBvcnQgdHlwZSBBcmNMYXllclZpc3VhbENoYW5uZWxDb25maWcgPSBMYXllckNvbG9yQ29uZmlnICYgTGF5ZXJTaXplQ29uZmlnO1xuZXhwb3J0IHR5cGUgQXJjTGF5ZXJDb25maWcgPSBNZXJnZTxcbiAgTGF5ZXJCYXNlQ29uZmlnLFxuICB7Y29sdW1uczogQXJjTGF5ZXJDb2x1bW5zQ29uZmlnOyB2aXNDb25maWc6IEFyY0xheWVyVmlzQ29uZmlnfVxuPiAmXG4gIEFyY0xheWVyVmlzdWFsQ2hhbm5lbENvbmZpZztcblxuZXhwb3J0IHR5cGUgQXJjTGF5ZXJEYXRhID0ge1xuICBpbmRleDogbnVtYmVyO1xuICBzb3VyY2VQb3NpdGlvbjogW251bWJlciwgbnVtYmVyLCBudW1iZXJdO1xuICB0YXJnZXRQb3NpdGlvbjogW251bWJlciwgbnVtYmVyLCBudW1iZXJdO1xufTtcblxuZXhwb3J0IHR5cGUgQXJjTGF5ZXJNZXRhID0ge1xuICBib3VuZHM6IExheWVyQm91bmRzO1xufTtcblxuZXhwb3J0IGNvbnN0IGFyY1JlcXVpcmVkQ29sdW1ucyA9IFsnbGF0MCcsICdsbmcwJywgJ2xhdDEnLCAnbG5nMSddO1xuZXhwb3J0IGNvbnN0IG5laWdoYm9yUmVxdWlyZWRDb2x1bW5zID0gWydsYXQnLCAnbG5nJywgJ25laWdoYm9ycyddO1xuZXhwb3J0IGNvbnN0IGdlb2Fycm93UmVxdWlyZWRDb2x1bW5zID0gWydnZW9hcnJvdzAnLCAnZ2VvYXJyb3cxJ107XG5cbmV4cG9ydCBjb25zdCBhcmNDb2x1bW5MYWJlbHMgPSB7XG4gIGxhdDA6ICdhcmMubGF0MCcsXG4gIGxuZzA6ICdhcmMubG5nMCcsXG4gIGxhdDE6ICdhcmMubGF0MScsXG4gIGxuZzE6ICdhcmMubG5nMScsXG4gIG5laWdoYm9yczogJ25laWdoYm9ycydcbn07XG5cbmV4cG9ydCBjb25zdCBhcmNWaXNDb25maWdzOiB7XG4gIG9wYWNpdHk6ICdvcGFjaXR5JztcbiAgdGhpY2tuZXNzOiAndGhpY2tuZXNzJztcbiAgY29sb3JSYW5nZTogJ2NvbG9yUmFuZ2UnO1xuICBzaXplUmFuZ2U6ICdzdHJva2VXaWR0aFJhbmdlJztcbiAgdGFyZ2V0Q29sb3I6ICd0YXJnZXRDb2xvcic7XG59ID0ge1xuICBvcGFjaXR5OiAnb3BhY2l0eScsXG4gIHRoaWNrbmVzczogJ3RoaWNrbmVzcycsXG4gIGNvbG9yUmFuZ2U6ICdjb2xvclJhbmdlJyxcbiAgc2l6ZVJhbmdlOiAnc3Ryb2tlV2lkdGhSYW5nZScsXG4gIHRhcmdldENvbG9yOiAndGFyZ2V0Q29sb3InXG59O1xuXG5leHBvcnQgY29uc3QgQ09MVU1OX01PREVfUE9JTlRTID0gJ3BvaW50cyc7XG5leHBvcnQgY29uc3QgQ09MVU1OX01PREVfTkVJR0hCT1JTID0gJ25laWdoYm9ycyc7XG5leHBvcnQgY29uc3QgQ09MVU1OX01PREVfR0VPQVJST1cgPSAnZ2VvYXJyb3cnO1xuY29uc3QgU1VQUE9SVEVEX0NPTFVNTl9NT0RFUyA9IFtcbiAge1xuICAgIGtleTogQ09MVU1OX01PREVfUE9JTlRTLFxuICAgIGxhYmVsOiAnUG9pbnRzJyxcbiAgICByZXF1aXJlZENvbHVtbnM6IGFyY1JlcXVpcmVkQ29sdW1uc1xuICB9LFxuICB7XG4gICAga2V5OiBDT0xVTU5fTU9ERV9ORUlHSEJPUlMsXG4gICAgbGFiZWw6ICdQb2ludCBhbmQgTmVpZ2hib3JzJyxcbiAgICByZXF1aXJlZENvbHVtbnM6IG5laWdoYm9yUmVxdWlyZWRDb2x1bW5zXG4gIH0sXG4gIHtcbiAgICBrZXk6IENPTFVNTl9NT0RFX0dFT0FSUk9XLFxuICAgIGxhYmVsOiAnR2VvYXJyb3cgUG9pbnRzJyxcbiAgICByZXF1aXJlZENvbHVtbnM6IGdlb2Fycm93UmVxdWlyZWRDb2x1bW5zXG4gIH1cbl07XG5jb25zdCBERUZBVUxUX0NPTFVNTl9NT0RFID0gQ09MVU1OX01PREVfUE9JTlRTO1xuXG5jb25zdCBicnVzaGluZ0V4dGVuc2lvbiA9IG5ldyBCcnVzaGluZ0V4dGVuc2lvbigpO1xuY29uc3QgYXJyb3dDUFVGaWx0ZXJFeHRlbnNpb24gPSBuZXcgRmlsdGVyQXJyb3dFeHRlbnNpb24oKTtcblxuZnVuY3Rpb24gaXNIM0ZpZWxkKGNvbHVtbnMsIGFsbEZpZWxkcywga2V5KSB7XG4gIGNvbnN0IGZpZWxkID0gYWxsRmllbGRzW2NvbHVtbnNba2V5XS5maWVsZElkeF07XG4gIHJldHVybiBmaWVsZD8udHlwZSA9PT0gQUxMX0ZJRUxEX1RZUEVTLmgzO1xufVxuXG5leHBvcnQgY29uc3QgYXJjUG9zQWNjZXNzb3IgPVxuICAoe2xhdDAsIGxuZzAsIGxhdDEsIGxuZzEsIGxhdCwgbG5nLCBnZW9hcnJvdzAsIGdlb2Fycm93MX06IEFyY0xheWVyQ29sdW1uc0NvbmZpZywgY29sdW1uTW9kZSkgPT5cbiAgKGRjOiBEYXRhQ29udGFpbmVySW50ZXJmYWNlKSA9PiB7XG4gICAgc3dpdGNoIChjb2x1bW5Nb2RlKSB7XG4gICAgICBjYXNlIENPTFVNTl9NT0RFX0dFT0FSUk9XOlxuICAgICAgICByZXR1cm4gZCA9PiB7XG4gICAgICAgICAgY29uc3Qgc3RhcnQgPSBkYy52YWx1ZUF0KGQuaW5kZXgsIGdlb2Fycm93MC5maWVsZElkeCk7XG4gICAgICAgICAgY29uc3QgZW5kID0gZGMudmFsdWVBdChkLmluZGV4LCBnZW9hcnJvdzEuZmllbGRJZHgpO1xuICAgICAgICAgIHJldHVybiBbc3RhcnQuZ2V0KDApLCBzdGFydC5nZXQoMSksIDAsIGVuZC5nZXQoMiksIGVuZC5nZXQoMyksIDBdO1xuICAgICAgICB9O1xuICAgICAgY2FzZSBDT0xVTU5fTU9ERV9ORUlHSEJPUlM6XG4gICAgICAgIHJldHVybiBkID0+IHtcbiAgICAgICAgICBjb25zdCBzdGFydFBvcyA9IG1heWJlSGV4VG9HZW8oZGMsIGQsIGxhdCwgbG5nKTtcbiAgICAgICAgICAvLyBvbmx5IHJldHVybiBzb3VyY2UgcG9pbnQgaWYgY29sdW1uTW9kZSBpcyBDT0xVTU5fTU9ERV9ORUlHSEJPUlNcblxuICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBzdGFydFBvcyA/IHN0YXJ0UG9zWzBdIDogZGMudmFsdWVBdChkLmluZGV4LCBsbmcuZmllbGRJZHgpLFxuICAgICAgICAgICAgc3RhcnRQb3MgPyBzdGFydFBvc1sxXSA6IGRjLnZhbHVlQXQoZC5pbmRleCwgbGF0LmZpZWxkSWR4KSxcbiAgICAgICAgICAgIDBcbiAgICAgICAgICBdO1xuICAgICAgICB9O1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgLy8gQ09MVU1OX01PREVfUE9JTlRTXG4gICAgICAgIHJldHVybiBkID0+IHtcbiAgICAgICAgICAvLyBsYXQgb3IgbG5nIGNvbHVtbiBjb3VsZCBiZSBoZXggY29sdW1uXG4gICAgICAgICAgLy8gd2UgYXNzdW1lIHN0cmluZyB2YWx1ZSBpcyBoZXggYW5kIHRyeSB0byBjb252ZXJ0IGl0IHRvIGdlbyBsYXQgbG5nXG4gICAgICAgICAgY29uc3Qgc3RhcnRQb3MgPSBtYXliZUhleFRvR2VvKGRjLCBkLCBsYXQwLCBsbmcwKTtcbiAgICAgICAgICBjb25zdCBlbmRQb3MgPSBtYXliZUhleFRvR2VvKGRjLCBkLCBsYXQxLCBsbmcxKTtcbiAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgc3RhcnRQb3MgPyBzdGFydFBvc1swXSA6IGRjLnZhbHVlQXQoZC5pbmRleCwgbG5nMC5maWVsZElkeCksXG4gICAgICAgICAgICBzdGFydFBvcyA/IHN0YXJ0UG9zWzFdIDogZGMudmFsdWVBdChkLmluZGV4LCBsYXQwLmZpZWxkSWR4KSxcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICBlbmRQb3MgPyBlbmRQb3NbMF0gOiBkYy52YWx1ZUF0KGQuaW5kZXgsIGxuZzEuZmllbGRJZHgpLFxuICAgICAgICAgICAgZW5kUG9zID8gZW5kUG9zWzFdIDogZGMudmFsdWVBdChkLmluZGV4LCBsYXQxLmZpZWxkSWR4KSxcbiAgICAgICAgICAgIDBcbiAgICAgICAgICBdO1xuICAgICAgICB9O1xuICAgIH1cbiAgfTtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFyY0xheWVyIGV4dGVuZHMgTGF5ZXIge1xuICBkZWNsYXJlIHZpc0NvbmZpZ1NldHRpbmdzOiBBcmNMYXllclZpc0NvbmZpZ1NldHRpbmdzO1xuICBkZWNsYXJlIGNvbmZpZzogQXJjTGF5ZXJDb25maWc7XG4gIGRlY2xhcmUgbWV0YTogQXJjTGF5ZXJNZXRhO1xuXG4gIGRhdGFDb250YWluZXI6IERhdGFDb250YWluZXJJbnRlcmZhY2UgfCBudWxsID0gbnVsbDtcbiAgZ2VvQXJyb3dWZWN0b3IwOiBhcnJvdy5WZWN0b3IgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gIGdlb0Fycm93VmVjdG9yMTogYXJyb3cuVmVjdG9yIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG4gIC8qXG4gICAqIENQVSBmaWx0ZXJpbmcgYW4gYXJyb3cgdGFibGUgYnkgdmFsdWVzIGFuZCBhc3NlbWJsaW5nIGEgcGFydGlhbCBjb3B5IG9mIHRoZSByYXcgdGFibGUgaXMgZXhwZW5zaXZlXG4gICAqIHNvIHdlIHdpbGwgdXNlIGZpbHRlcmVkSW5kZXggdG8gY3JlYXRlIGFuIGF0dHJpYnV0ZSBlLmcuIGZpbHRlcmVkSW5kZXggWzB8MV0gZm9yIEdQVSBmaWx0ZXJpbmdcbiAgICogaW4gZGVjay5nbCBsYXllciwgc2VlOiBGaWx0ZXJBcnJvd0V4dGVuc2lvbiBpbiBAa2VwbGVyLmdsL2RlY2tnbC1sYXllcnMuXG4gICAqIE5vdGUgdGhhdCB0aGlzIGFwcHJvYWNoIGNhbiBjcmVhdGUgdmlzaWJsZSBsYWdzIGluIGNhc2Ugb2YgYSBsb3Qgb2YgZGlzY2FydGVkIGdlb21ldHJ5LlxuICAgKi9cbiAgZmlsdGVyZWRJbmRleDogVWludDhDbGFtcGVkQXJyYXkgfCBudWxsID0gbnVsbDtcbiAgZmlsdGVyZWRJbmRleFRyaWdnZXI6IG51bWJlcltdID0gW107XG5cbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG5cbiAgICB0aGlzLnJlZ2lzdGVyVmlzQ29uZmlnKGFyY1Zpc0NvbmZpZ3MpO1xuICAgIHRoaXMuZ2V0UG9zaXRpb25BY2Nlc3NvciA9IChkYXRhQ29udGFpbmVyOiBEYXRhQ29udGFpbmVySW50ZXJmYWNlKSA9PlxuICAgICAgYXJjUG9zQWNjZXNzb3IodGhpcy5jb25maWcuY29sdW1ucywgdGhpcy5jb25maWcuY29sdW1uTW9kZSkoZGF0YUNvbnRhaW5lcik7XG4gIH1cblxuICBnZXQgdHlwZSgpIHtcbiAgICByZXR1cm4gJ2FyYyc7XG4gIH1cblxuICBnZXQgaXNBZ2dyZWdhdGVkKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGdldCBsYXllckljb24oKSB7XG4gICAgcmV0dXJuIEFyY0xheWVySWNvbjtcbiAgfVxuXG4gIGdldCBjb2x1bW5MYWJlbHMoKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gICAgcmV0dXJuIGFyY0NvbHVtbkxhYmVscztcbiAgfVxuXG4gIGdldCBjb2x1bW5QYWlycygpIHtcbiAgICByZXR1cm4gdGhpcy5kZWZhdWx0TGlua0NvbHVtblBhaXJzO1xuICB9XG5cbiAgZ2V0IHN1cHBvcnRlZENvbHVtbk1vZGVzKCkge1xuICAgIHJldHVybiBTVVBQT1JURURfQ09MVU1OX01PREVTO1xuICB9XG5cbiAgZ2V0IHZpc3VhbENoYW5uZWxzKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzb3VyY2VDb2xvcjoge1xuICAgICAgICAuLi5zdXBlci52aXN1YWxDaGFubmVscy5jb2xvcixcbiAgICAgICAgcHJvcGVydHk6ICdjb2xvcicsXG4gICAgICAgIGtleTogJ3NvdXJjZUNvbG9yJyxcbiAgICAgICAgYWNjZXNzb3I6ICdnZXRTb3VyY2VDb2xvcicsXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogY29uZmlnID0+IGNvbmZpZy5jb2xvclxuICAgICAgfSxcbiAgICAgIHRhcmdldENvbG9yOiB7XG4gICAgICAgIC4uLnN1cGVyLnZpc3VhbENoYW5uZWxzLmNvbG9yLFxuICAgICAgICBwcm9wZXJ0eTogJ3RhcmdldENvbG9yJyxcbiAgICAgICAga2V5OiAndGFyZ2V0Q29sb3InLFxuICAgICAgICBhY2Nlc3NvcjogJ2dldFRhcmdldENvbG9yJyxcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBjb25maWcgPT4gY29uZmlnLnZpc0NvbmZpZy50YXJnZXRDb2xvciB8fCBjb25maWcuY29sb3JcbiAgICAgIH0sXG4gICAgICBzaXplOiB7XG4gICAgICAgIC4uLnN1cGVyLnZpc3VhbENoYW5uZWxzLnNpemUsXG4gICAgICAgIGFjY2Vzc29yOiAnZ2V0V2lkdGgnLFxuICAgICAgICBwcm9wZXJ0eTogJ3N0cm9rZSdcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgZ2V0IGNvbHVtblZhbGlkYXRvcnMoKSB7XG4gICAgLy8gaWYgb25lIG9mIHRoZSBsYXQgb3IgbG5nIGNvbHVtbiBpcyBzdHJpbmcgdHlwZSwgd2UgYWxsb3cgaXRcbiAgICAvLyB3aWxsIHRyeSB0byBwYXNzIGl0IGFzIGhleFxuICAgIHJldHVybiB7XG4gICAgICBsYXQwOiAoY29sdW1uLCBjb2x1bW5zLCBhbGxGaWVsZHMpID0+IGlzSDNGaWVsZChjb2x1bW5zLCBhbGxGaWVsZHMsICdsbmcwJyksXG4gICAgICBsbmcwOiAoY29sdW1uLCBjb2x1bW5zLCBhbGxGaWVsZHMpID0+IGlzSDNGaWVsZChjb2x1bW5zLCBhbGxGaWVsZHMsICdsYXQwJyksXG4gICAgICBsYXQxOiAoY29sdW1uLCBjb2x1bW5zLCBhbGxGaWVsZHMpID0+IGlzSDNGaWVsZChjb2x1bW5zLCBhbGxGaWVsZHMsICdsbmcxJyksXG4gICAgICBsbmcxOiAoY29sdW1uLCBjb2x1bW5zLCBhbGxGaWVsZHMpID0+IGlzSDNGaWVsZChjb2x1bW5zLCBhbGxGaWVsZHMsICdsYXQxJyksXG4gICAgICBsYXQ6IChjb2x1bW4sIGNvbHVtbnMsIGFsbEZpZWxkcykgPT4gaXNIM0ZpZWxkKGNvbHVtbnMsIGFsbEZpZWxkcywgJ2xuZycpLFxuICAgICAgbG5nOiAoY29sdW1uLCBjb2x1bW5zLCBhbGxGaWVsZHMpID0+IGlzSDNGaWVsZChjb2x1bW5zLCBhbGxGaWVsZHMsICdsYXQnKVxuICAgIH07XG4gIH1cblxuICBoYXNBbGxDb2x1bW5zKCkge1xuICAgIGNvbnN0IHtjb2x1bW5zfSA9IHRoaXMuY29uZmlnO1xuICAgIGlmICh0aGlzLmNvbmZpZy5jb2x1bW5Nb2RlID09PSBDT0xVTU5fTU9ERV9HRU9BUlJPVykge1xuICAgICAgcmV0dXJuIHRoaXMuaGFzQ29sdW1uVmFsdWUoY29sdW1ucy5nZW9hcnJvdzApICYmIHRoaXMuaGFzQ29sdW1uVmFsdWUoY29sdW1ucy5nZW9hcnJvdzEpO1xuICAgIH1cbiAgICBpZiAodGhpcy5jb25maWcuY29sdW1uTW9kZSA9PT0gQ09MVU1OX01PREVfUE9JTlRTKSB7XG4gICAgICAvLyBUT0RPIC0gdGhpcyBkb2VzIG5vdCBoYXZlIGFjY2VzcyB0byBhbGxGaWVsZHMuLi5cbiAgICAgIC8vIFNvIHdlIGNhbid0IGRvIHRoZSBzYW1lIHZhbGlkYXRpb24gYXMgZm9yIHRoZSBmaWVsZCBlcnJvcnNcbiAgICAgIGNvbnN0IGhhc1N0YXJ0ID0gdGhpcy5oYXNDb2x1bW5WYWx1ZShjb2x1bW5zLmxhdDApIHx8IHRoaXMuaGFzQ29sdW1uVmFsdWUoY29sdW1ucy5sbmcwKTtcbiAgICAgIGNvbnN0IGhhc0VuZCA9IHRoaXMuaGFzQ29sdW1uVmFsdWUoY29sdW1ucy5sYXQxKSB8fCB0aGlzLmhhc0NvbHVtblZhbHVlKGNvbHVtbnMubG5nMSk7XG4gICAgICByZXR1cm4gaGFzU3RhcnQgJiYgaGFzRW5kO1xuICAgIH1cbiAgICBjb25zdCBoYXNTdGFydCA9IHRoaXMuaGFzQ29sdW1uVmFsdWUoY29sdW1ucy5sYXQpIHx8IHRoaXMuaGFzQ29sdW1uVmFsdWUoY29sdW1ucy5sbmcpO1xuICAgIGNvbnN0IGhhc05laWJvcnMgPSB0aGlzLmhhc0NvbHVtblZhbHVlKGNvbHVtbnMubmVpZ2hib3JzKTtcbiAgICByZXR1cm4gaGFzU3RhcnQgJiYgaGFzTmVpYm9ycztcbiAgfVxuXG4gIHN0YXRpYyBmaW5kRGVmYXVsdExheWVyUHJvcHMoe2ZpZWxkUGFpcnMgPSBbXX06IEtlcGxlclRhYmxlKToge1xuICAgIHByb3BzOiB7Y29sb3I/OiBSR0JDb2xvcjsgY29sdW1uczogQXJjTGF5ZXJDb2x1bW5zQ29uZmlnOyBsYWJlbDogc3RyaW5nfVtdO1xuICB9IHtcbiAgICBpZiAoZmllbGRQYWlycy5sZW5ndGggPCAyKSB7XG4gICAgICByZXR1cm4ge3Byb3BzOiBbXX07XG4gICAgfVxuXG4gICAgY29uc3QgcHJvcHM6IHtcbiAgICAgIGNvbG9yOiBSR0JDb2xvcjtcbiAgICAgIGNvbHVtbnM6IEFyY0xheWVyQ29sdW1uc0NvbmZpZztcbiAgICAgIGxhYmVsOiBzdHJpbmc7XG4gICAgfSA9IHtcbiAgICAgIGNvbG9yOiBoZXhUb1JnYihERUZBVUxUX0xBWUVSX0NPTE9SLnRyaXBBcmMpLFxuICAgICAgLy8gY29ubmVjdCB0aGUgZmlyc3QgdHdvIHBvaW50IGxheWVyIHdpdGggYXJjXG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIHNlcGFyYXRlIHR5cGVzIGZvciBwb2ludCAvIG5laWdoYm9yIGNvbHVtbnNcbiAgICAgIGNvbHVtbnM6IHtcbiAgICAgICAgbGF0MDogZmllbGRQYWlyc1swXS5wYWlyLmxhdCxcbiAgICAgICAgbG5nMDogZmllbGRQYWlyc1swXS5wYWlyLmxuZyxcbiAgICAgICAgbGF0MTogZmllbGRQYWlyc1sxXS5wYWlyLmxhdCxcbiAgICAgICAgbG5nMTogZmllbGRQYWlyc1sxXS5wYWlyLmxuZ1xuICAgICAgfSxcbiAgICAgIGxhYmVsOiBgJHtmaWVsZFBhaXJzWzBdLmRlZmF1bHROYW1lfSAtPiAke2ZpZWxkUGFpcnNbMV0uZGVmYXVsdE5hbWV9IGFyY2BcbiAgICB9O1xuXG4gICAgcmV0dXJuIHtwcm9wczogW3Byb3BzXX07XG4gIH1cblxuICBnZXREZWZhdWx0TGF5ZXJDb25maWcocHJvcHM6IExheWVyQmFzZUNvbmZpZ1BhcnRpYWwpIHtcbiAgICBjb25zdCBkZWZhdWx0TGF5ZXJDb25maWcgPSBzdXBlci5nZXREZWZhdWx0TGF5ZXJDb25maWcocHJvcHMpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmRlZmF1bHRMYXllckNvbmZpZyxcbiAgICAgIGNvbHVtbk1vZGU6IHByb3BzPy5jb2x1bW5Nb2RlID8/IERFRkFVTFRfQ09MVU1OX01PREVcbiAgICB9O1xuICB9XG5cbiAgY2FsY3VsYXRlRGF0YUF0dHJpYnV0ZUZvckdlb0Fycm93KFxuICAgIHtkYXRhQ29udGFpbmVyLCBmaWx0ZXJlZEluZGV4fToge2RhdGFDb250YWluZXI6IEFycm93RGF0YUNvbnRhaW5lcjsgZmlsdGVyZWRJbmRleDogbnVtYmVyW119LFxuICAgIGdldFBvc2l0aW9uXG4gICkge1xuICAgIHRoaXMuZmlsdGVyZWRJbmRleCA9IGdldEZpbHRlcmVkSW5kZXgoXG4gICAgICBkYXRhQ29udGFpbmVyLm51bVJvd3MoKSxcbiAgICAgIGZpbHRlcmVkSW5kZXgsXG4gICAgICB0aGlzLmZpbHRlcmVkSW5kZXhcbiAgICApO1xuICAgIHRoaXMuZmlsdGVyZWRJbmRleFRyaWdnZXIgPSBmaWx0ZXJlZEluZGV4O1xuXG4gICAgaWYgKHRoaXMuY29uZmlnLmNvbHVtbk1vZGUgPT09IENPTFVNTl9NT0RFX0dFT0FSUk9XKSB7XG4gICAgICB0aGlzLmdlb0Fycm93VmVjdG9yMCA9IGRhdGFDb250YWluZXIuZ2V0Q29sdW1uKHRoaXMuY29uZmlnLmNvbHVtbnMuZ2VvYXJyb3cwLmZpZWxkSWR4KTtcbiAgICAgIHRoaXMuZ2VvQXJyb3dWZWN0b3IxID0gZGF0YUNvbnRhaW5lci5nZXRDb2x1bW4odGhpcy5jb25maWcuY29sdW1ucy5nZW9hcnJvdzEuZmllbGRJZHgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBnZW5lcmF0ZSBjb2x1bW5zIGNvbXBhdGlibGUgd2l0aCBnZW9hcnJvdyBwb2ludCBleHRlbnNpb25cbiAgICAgIC8vIFRPRE8gcmVtb3ZlIGV4Y2Vzc2l2ZSBpbnRlcm1lZGlhdGUgYWxsb2NhdGlvbnNcbiAgICAgIHRoaXMuZ2VvQXJyb3dWZWN0b3IwID0gY3JlYXRlR2VvQXJyb3dQb2ludFZlY3RvcihkYXRhQ29udGFpbmVyLCBkID0+IHtcbiAgICAgICAgcmV0dXJuIGdldFBvc2l0aW9uKGQpLnNsaWNlKDAsIDMpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLmdlb0Fycm93VmVjdG9yMSA9IGNyZWF0ZUdlb0Fycm93UG9pbnRWZWN0b3IoZGF0YUNvbnRhaW5lciwgZCA9PiB7XG4gICAgICAgIHJldHVybiBnZXRQb3NpdGlvbihkKS5zbGljZSgzLCA2KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBkYXRhQ29udGFpbmVyLmdldFRhYmxlKCk7XG4gIH1cblxuICBjYWxjdWxhdGVEYXRhQXR0cmlidXRlRm9yUG9pbnRzKFxuICAgIHtmaWx0ZXJlZEluZGV4fToge2RhdGFDb250YWluZXI6IERhdGFDb250YWluZXJJbnRlcmZhY2U7IGZpbHRlcmVkSW5kZXg6IG51bWJlcltdfSxcbiAgICBnZXRQb3NpdGlvblxuICApIHtcbiAgICBjb25zdCBkYXRhOiBBcmNMYXllckRhdGFbXSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmlsdGVyZWRJbmRleC5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgaW5kZXggPSBmaWx0ZXJlZEluZGV4W2ldO1xuICAgICAgY29uc3QgcG9zID0gZ2V0UG9zaXRpb24oe2luZGV4fSk7XG5cbiAgICAgIC8vIGlmIGRvZXNuJ3QgaGF2ZSBwb2ludCBsYXQgb3IgbG5nLCBkbyBub3QgYWRkIHRoZSBwb2ludFxuICAgICAgLy8gZGVjay5nbCBjYW4ndCBoYW5kbGUgcG9zaXRpb24gPSBudWxsXG4gICAgICBpZiAocG9zLmV2ZXJ5KE51bWJlci5pc0Zpbml0ZSkpIHtcbiAgICAgICAgZGF0YS5wdXNoKHtcbiAgICAgICAgICBpbmRleCxcbiAgICAgICAgICBzb3VyY2VQb3NpdGlvbjogW3Bvc1swXSwgcG9zWzFdLCBwb3NbMl1dLFxuICAgICAgICAgIHRhcmdldFBvc2l0aW9uOiBbcG9zWzNdLCBwb3NbNF0sIHBvc1s1XV1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgY2FsY3VsYXRlRGF0YUF0dHJpYnV0ZUZvclBvaW50Tk5laWdoYm9ycyhcbiAgICB7XG4gICAgICBkYXRhQ29udGFpbmVyLFxuICAgICAgZmlsdGVyZWRJbmRleFxuICAgIH06IHtkYXRhQ29udGFpbmVyOiBEYXRhQ29udGFpbmVySW50ZXJmYWNlOyBmaWx0ZXJlZEluZGV4OiBudW1iZXJbXX0sXG4gICAgZ2V0UG9zaXRpb25cbiAgKSB7XG4gICAgY29uc3QgZGF0YToge2luZGV4OiBudW1iZXI7IHNvdXJjZVBvc2l0aW9uOiBudW1iZXJbXTsgdGFyZ2V0UG9zaXRpb246IG51bWJlcltdfVtdID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWx0ZXJlZEluZGV4Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBpbmRleCA9IGZpbHRlcmVkSW5kZXhbaV07XG4gICAgICBjb25zdCBwb3MgPSBnZXRQb3NpdGlvbih7aW5kZXh9KTtcbiAgICAgIC8vIGlmIGRvZXNuJ3QgaGF2ZSBwb2ludCBsYXQgb3IgbG5nLCBkbyBub3QgYWRkIHRoZSBwb2ludFxuICAgICAgLy8gZGVjay5nbCBjYW4ndCBoYW5kbGUgcG9zaXRpb24gPSBudWxsXG4gICAgICBpZiAocG9zLmV2ZXJ5KE51bWJlci5pc0Zpbml0ZSkpIHtcbiAgICAgICAgLy8gcHVzaCBhbGwgbmVpYm9yc1xuICAgICAgICBjb25zdCBuZWlnaGJvcklkeCA9IHRoaXMuY29uZmlnLmNvbHVtbnMubmVpZ2hib3JzLnZhbHVlXG4gICAgICAgICAgPyBkYXRhQ29udGFpbmVyLnZhbHVlQXQoaW5kZXgsIHRoaXMuY29uZmlnLmNvbHVtbnMubmVpZ2hib3JzLmZpZWxkSWR4KVxuICAgICAgICAgIDogW107XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG5laWdoYm9ySWR4KSkge1xuICAgICAgICAgIG5laWdoYm9ySWR4LmZvckVhY2goaWR4ID0+IHtcbiAgICAgICAgICAgIC8vIFRPRE8gcHJldmVudCByb3cgbWF0ZXJpYWxpemF0aW9uIGhlcmVcbiAgICAgICAgICAgIGNvbnN0IHRQb3MgPSBkYXRhQ29udGFpbmVyLnJvd0FzQXJyYXkoaWR4KSA/IGdldFBvc2l0aW9uKHtpbmRleDogaWR4fSkgOiBudWxsO1xuICAgICAgICAgICAgaWYgKHRQb3MgJiYgdFBvcy5ldmVyeShOdW1iZXIuaXNGaW5pdGUpKSB7XG4gICAgICAgICAgICAgIGRhdGEucHVzaCh7XG4gICAgICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICAgICAgc291cmNlUG9zaXRpb246IFtwb3NbMF0sIHBvc1sxXSwgcG9zWzJdXSxcbiAgICAgICAgICAgICAgICB0YXJnZXRQb3NpdGlvbjogW3RQb3NbMF0sIHRQb3NbMV0sIHRQb3NbMl1dXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBjYWxjdWxhdGVEYXRhQXR0cmlidXRlKHtkYXRhQ29udGFpbmVyLCBmaWx0ZXJlZEluZGV4fTogS2VwbGVyVGFibGUsIGdldFBvc2l0aW9uKSB7XG4gICAgY29uc3Qge2NvbHVtbk1vZGV9ID0gdGhpcy5jb25maWc7XG5cbiAgICAvLyAxKSBDT0xVTU5fTU9ERV9HRU9BUlJPVyAtIHdoZW4gd2UgaGF2ZSBhIGdlb2Fycm93IHBvaW50IGNvbHVtblxuICAgIC8vIDIpIENPTFVNTl9NT0RFX1BPSU5UUyArIEFycm93RGF0YUNvbnRhaW5lciA+IGNyZWF0ZSBnZW9hcnJvdyBwb2ludCBjb2x1bW4gb24gdGhlIGZseVxuICAgIGlmIChcbiAgICAgIGRhdGFDb250YWluZXIgaW5zdGFuY2VvZiBBcnJvd0RhdGFDb250YWluZXIgJiZcbiAgICAgIChjb2x1bW5Nb2RlID09PSBDT0xVTU5fTU9ERV9HRU9BUlJPVyB8fCBjb2x1bW5Nb2RlID09PSBDT0xVTU5fTU9ERV9QT0lOVFMpXG4gICAgKSB7XG4gICAgICByZXR1cm4gdGhpcy5jYWxjdWxhdGVEYXRhQXR0cmlidXRlRm9yR2VvQXJyb3coe2RhdGFDb250YWluZXIsIGZpbHRlcmVkSW5kZXh9LCBnZXRQb3NpdGlvbik7XG4gICAgfVxuXG4gICAgLy8gd2UgZG9uJ3QgbmVlZCB0aGVzZSBpbiBub24tQXJyb3cgbW9kZXMgYXRtLlxuICAgIHRoaXMuZ2VvQXJyb3dWZWN0b3IwID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuZ2VvQXJyb3dWZWN0b3IxID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuZmlsdGVyZWRJbmRleCA9IG51bGw7XG5cbiAgICBpZiAodGhpcy5jb25maWcuY29sdW1uTW9kZSA9PT0gQ09MVU1OX01PREVfUE9JTlRTKSB7XG4gICAgICByZXR1cm4gdGhpcy5jYWxjdWxhdGVEYXRhQXR0cmlidXRlRm9yUG9pbnRzKHtkYXRhQ29udGFpbmVyLCBmaWx0ZXJlZEluZGV4fSwgZ2V0UG9zaXRpb24pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jYWxjdWxhdGVEYXRhQXR0cmlidXRlRm9yUG9pbnROTmVpZ2hib3JzKFxuICAgICAge2RhdGFDb250YWluZXIsIGZpbHRlcmVkSW5kZXh9LFxuICAgICAgZ2V0UG9zaXRpb25cbiAgICApO1xuICB9XG5cbiAgZm9ybWF0TGF5ZXJEYXRhKGRhdGFzZXRzLCBvbGRMYXllckRhdGEpIHtcbiAgICBpZiAodGhpcy5jb25maWcuZGF0YUlkID09PSBudWxsKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGNvbnN0IHtncHVGaWx0ZXIsIGRhdGFDb250YWluZXJ9ID0gZGF0YXNldHNbdGhpcy5jb25maWcuZGF0YUlkXTtcbiAgICBjb25zdCB7ZGF0YX0gPSB0aGlzLnVwZGF0ZURhdGEoZGF0YXNldHMsIG9sZExheWVyRGF0YSk7XG4gICAgY29uc3QgYWNjZXNzb3JzID0gdGhpcy5nZXRBdHRyaWJ1dGVBY2Nlc3NvcnMoe2RhdGFDb250YWluZXJ9KTtcbiAgICBjb25zdCBpc0ZpbHRlcmVkQWNjZXNzb3IgPSAoZGF0YToge2luZGV4OiBudW1iZXJ9KSA9PiB7XG4gICAgICAvLyBmb3IgR2VvQXJyb3cgZGF0YSBpcyBhIGJ1ZmZlciwgc28gdXNlIG9iamVjdEluZm9cbiAgICAgIHJldHVybiB0aGlzLmZpbHRlcmVkSW5kZXggPyB0aGlzLmZpbHRlcmVkSW5kZXhbZGF0YS5pbmRleF0gOiAxO1xuICAgIH07XG5cbiAgICByZXR1cm4ge1xuICAgICAgZGF0YSxcbiAgICAgIGdldEZpbHRlclZhbHVlOiBncHVGaWx0ZXIuZmlsdGVyVmFsdWVBY2Nlc3NvcihkYXRhQ29udGFpbmVyKSgpLFxuICAgICAgZ2V0RmlsdGVyZWQ6IGlzRmlsdGVyZWRBY2Nlc3NvcixcbiAgICAgIC4uLmFjY2Vzc29yc1xuICAgIH07XG4gIH1cbiAgLyogZXNsaW50LWVuYWJsZSBjb21wbGV4aXR5ICovXG5cbiAgdXBkYXRlTGF5ZXJNZXRhKGRhdGFzZXQ6IEtlcGxlclRhYmxlKSB7XG4gICAgY29uc3Qge2RhdGFDb250YWluZXJ9ID0gZGF0YXNldDtcblxuICAgIHRoaXMuZGF0YUNvbnRhaW5lciA9IGRhdGFDb250YWluZXI7XG5cbiAgICAvLyBnZXQgYm91bmRzIGZyb20gYXJjc1xuICAgIGNvbnN0IGdldFBvc2l0aW9uID0gdGhpcy5nZXRQb3NpdGlvbkFjY2Vzc29yKGRhdGFDb250YWluZXIpO1xuXG4gICAgY29uc3Qgc0JvdW5kcyA9IHRoaXMuZ2V0UG9pbnRzQm91bmRzKGRhdGFDb250YWluZXIsIGQgPT4ge1xuICAgICAgY29uc3QgcG9zID0gZ2V0UG9zaXRpb24oZCk7XG4gICAgICByZXR1cm4gW3Bvc1swXSwgcG9zWzFdXTtcbiAgICB9KTtcblxuICAgIGxldCB0Qm91bmRzOiBudW1iZXJbXSB8IG51bGwgPSBbXTtcbiAgICBpZiAodGhpcy5jb25maWcuY29sdW1uTW9kZSA9PT0gQ09MVU1OX01PREVfUE9JTlRTKSB7XG4gICAgICB0Qm91bmRzID0gdGhpcy5nZXRQb2ludHNCb3VuZHMoZGF0YUNvbnRhaW5lciwgZCA9PiB7XG4gICAgICAgIGNvbnN0IHBvcyA9IGdldFBvc2l0aW9uKGQpO1xuICAgICAgICByZXR1cm4gW3Bvc1szXSwgcG9zWzRdXTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB3aGVuIGNvbHVtbk1vZGUgaXMgbmVpZ2hib3JzLCBpdCByZWZlcmVuY2UgdGhlIHNhbWUgY29sbGVjdGlvbiBvZiBwb2ludHNcbiAgICAgIHRCb3VuZHMgPSBzQm91bmRzO1xuICAgIH1cblxuICAgIGNvbnN0IGJvdW5kcyA9XG4gICAgICB0Qm91bmRzICYmIHNCb3VuZHNcbiAgICAgICAgPyBbXG4gICAgICAgICAgICBNYXRoLm1pbihzQm91bmRzWzBdLCB0Qm91bmRzWzBdKSxcbiAgICAgICAgICAgIE1hdGgubWluKHNCb3VuZHNbMV0sIHRCb3VuZHNbMV0pLFxuICAgICAgICAgICAgTWF0aC5tYXgoc0JvdW5kc1syXSwgdEJvdW5kc1syXSksXG4gICAgICAgICAgICBNYXRoLm1heChzQm91bmRzWzNdLCB0Qm91bmRzWzNdKVxuICAgICAgICAgIF1cbiAgICAgICAgOiBzQm91bmRzIHx8IHRCb3VuZHM7XG5cbiAgICB0aGlzLnVwZGF0ZU1ldGEoe2JvdW5kc30pO1xuICB9XG5cbiAgcmVuZGVyTGF5ZXIob3B0cykge1xuICAgIGNvbnN0IHtkYXRhLCBncHVGaWx0ZXIsIG9iamVjdEhvdmVyZWQsIGludGVyYWN0aW9uQ29uZmlnLCBkYXRhc2V0fSA9IG9wdHM7XG4gICAgY29uc3QgdXBkYXRlVHJpZ2dlcnMgPSB7XG4gICAgICBnZXRQb3NpdGlvbjogdGhpcy5jb25maWcuY29sdW1ucyxcbiAgICAgIGdldEZpbHRlclZhbHVlOiBncHVGaWx0ZXIuZmlsdGVyVmFsdWVVcGRhdGVUcmlnZ2VycyxcbiAgICAgIGdldEZpbHRlcmVkOiB0aGlzLmZpbHRlcmVkSW5kZXhUcmlnZ2VyLFxuICAgICAgLi4udGhpcy5nZXRWaXN1YWxDaGFubmVsVXBkYXRlVHJpZ2dlcnMoKVxuICAgIH07XG4gICAgY29uc3Qgd2lkdGhTY2FsZSA9IHRoaXMuY29uZmlnLnZpc0NvbmZpZy50aGlja25lc3MgKiBQUk9KRUNURURfUElYRUxfU0laRV9NVUxUSVBMSUVSO1xuICAgIGNvbnN0IGRlZmF1bHRMYXllclByb3BzID0gdGhpcy5nZXREZWZhdWx0RGVja0xheWVyUHJvcHMob3B0cyk7XG4gICAgY29uc3QgaG92ZXJlZE9iamVjdCA9IHRoaXMuaGFzSG92ZXJlZE9iamVjdChvYmplY3RIb3ZlcmVkKTtcblxuICAgIGNvbnN0IHVzZUFycm93TGF5ZXIgPSBCb29sZWFuKHRoaXMuZ2VvQXJyb3dWZWN0b3IwKTtcblxuICAgIGxldCBBcmNMYXllckNsYXNzOiB0eXBlb2YgRGVja0FyY0xheWVyIHwgdHlwZW9mIEdlb0Fycm93QXJjTGF5ZXIgPSBEZWNrQXJjTGF5ZXI7XG4gICAgbGV0IGV4cGVyaW1lbnRhbFByb3BPdmVycmlkZXM6IHtcbiAgICAgIGRhdGE/OiBhcnJvdy5UYWJsZTtcbiAgICAgIGdldFNvdXJjZVBvc2l0aW9uPzogYXJyb3cuVmVjdG9yO1xuICAgICAgZ2V0VGFyZ2V0UG9zaXRpb24/OiBhcnJvdy5WZWN0b3I7XG4gICAgfSA9IHt9O1xuXG4gICAgaWYgKHVzZUFycm93TGF5ZXIpIHtcbiAgICAgIEFyY0xheWVyQ2xhc3MgPSBHZW9BcnJvd0FyY0xheWVyO1xuICAgICAgZXhwZXJpbWVudGFsUHJvcE92ZXJyaWRlcyA9IHtcbiAgICAgICAgZGF0YTogZGF0YXNldC5kYXRhQ29udGFpbmVyLmdldFRhYmxlKCksXG4gICAgICAgIGdldFNvdXJjZVBvc2l0aW9uOiB0aGlzLmdlb0Fycm93VmVjdG9yMCxcbiAgICAgICAgZ2V0VGFyZ2V0UG9zaXRpb246IHRoaXMuZ2VvQXJyb3dWZWN0b3IxXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBbXG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICBuZXcgQXJjTGF5ZXJDbGFzcyh7XG4gICAgICAgIC4uLmRlZmF1bHRMYXllclByb3BzLFxuICAgICAgICAuLi50aGlzLmdldEJydXNoaW5nRXh0ZW5zaW9uUHJvcHMoaW50ZXJhY3Rpb25Db25maWcsICdzb3VyY2VfdGFyZ2V0JyksXG4gICAgICAgIC4uLmRhdGEsXG4gICAgICAgIC4uLmV4cGVyaW1lbnRhbFByb3BPdmVycmlkZXMsXG4gICAgICAgIHdpZHRoU2NhbGUsXG4gICAgICAgIHVwZGF0ZVRyaWdnZXJzLFxuICAgICAgICBleHRlbnNpb25zOiBbXG4gICAgICAgICAgLi4uZGVmYXVsdExheWVyUHJvcHMuZXh0ZW5zaW9ucyxcbiAgICAgICAgICBicnVzaGluZ0V4dGVuc2lvbixcbiAgICAgICAgICAuLi4odXNlQXJyb3dMYXllciA/IFthcnJvd0NQVUZpbHRlckV4dGVuc2lvbl0gOiBbXSlcbiAgICAgICAgXVxuICAgICAgfSksXG4gICAgICAvLyBob3ZlciBsYXllclxuICAgICAgLi4uKGhvdmVyZWRPYmplY3RcbiAgICAgICAgPyBbXG4gICAgICAgICAgICBuZXcgRGVja0FyY0xheWVyKHtcbiAgICAgICAgICAgICAgLi4udGhpcy5nZXREZWZhdWx0SG92ZXJMYXllclByb3BzKCksXG4gICAgICAgICAgICAgIHZpc2libGU6IGRlZmF1bHRMYXllclByb3BzLnZpc2libGUsXG4gICAgICAgICAgICAgIGRhdGE6IFtob3ZlcmVkT2JqZWN0XSxcbiAgICAgICAgICAgICAgd2lkdGhTY2FsZSxcbiAgICAgICAgICAgICAgZ2V0U291cmNlQ29sb3I6IHRoaXMuY29uZmlnLmhpZ2hsaWdodENvbG9yLFxuICAgICAgICAgICAgICBnZXRUYXJnZXRDb2xvcjogdGhpcy5jb25maWcuaGlnaGxpZ2h0Q29sb3IsXG4gICAgICAgICAgICAgIGdldFdpZHRoOiBkYXRhLmdldFdpZHRoXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIF1cbiAgICAgICAgOiBbXSlcbiAgICBdO1xuICB9XG5cbiAgaGFzSG92ZXJlZE9iamVjdChvYmplY3RJbmZvOiB7aW5kZXg6IG51bWJlcn0pIHtcbiAgICBpZiAoXG4gICAgICBpc0xheWVySG92ZXJlZEZyb21BcnJvdyhvYmplY3RJbmZvLCB0aGlzLmlkKSAmJlxuICAgICAgb2JqZWN0SW5mby5pbmRleCA+PSAwICYmXG4gICAgICB0aGlzLmRhdGFDb250YWluZXJcbiAgICApIHtcbiAgICAgIC8vIG9iamVjdEluZm8uaW5kZXggY2FuIHBvaW50IHRvIGRhdGEgb2YgYXJjcyBjcmVhdGVkIGluIG5laWdoYm9yIG1vZGUsIHNvIGdldCBpbmRleCB0byBzb3VyY2UgZGF0YS5cbiAgICAgIGNvbnN0IGhvdmVyZWRPYmplY3QgPSBzdXBlci5oYXNIb3ZlcmVkT2JqZWN0KG9iamVjdEluZm8pO1xuICAgICAgcmV0dXJuIGhvdmVyZWRPYmplY3RcbiAgICAgICAgPyB7XG4gICAgICAgICAgICBpbmRleDogaG92ZXJlZE9iamVjdC5pbmRleCxcbiAgICAgICAgICAgIHBvc2l0aW9uOiB0aGlzLmdldFBvc2l0aW9uQWNjZXNzb3IodGhpcy5kYXRhQ29udGFpbmVyKSh7aW5kZXg6IGhvdmVyZWRPYmplY3QuaW5kZXh9KVxuICAgICAgICAgIH1cbiAgICAgICAgOiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBzdXBlci5oYXNIb3ZlcmVkT2JqZWN0KG9iamVjdEluZm8pO1xuICB9XG5cbiAgZ2V0SG92ZXJEYXRhKFxuICAgIG9iamVjdDoge2luZGV4OiBudW1iZXJ9IHwgYXJyb3cuU3RydWN0Um93IHwgdW5kZWZpbmVkLFxuICAgIGRhdGFDb250YWluZXI6IERhdGFDb250YWluZXJJbnRlcmZhY2UsXG4gICAgZmllbGRzOiBGaWVsZFtdLFxuICAgIGFuaW1hdGlvbkNvbmZpZzogQW5pbWF0aW9uQ29uZmlnLFxuICAgIGhvdmVySW5mbzoge2luZGV4OiBudW1iZXJ9XG4gICkge1xuICAgIC8vIGZvciBhcnJvdyBmb3JtYXQsIGBvYmplY3RgIGlzIHRoZSBBcnJvdyByb3cgb2JqZWN0IFByb3h5LFxuICAgIC8vIGFuZCBpbmRleCBpcyBwYXNzZWQgaW4gYGhvdmVySW5mb2AuXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmdlb0Fycm93VmVjdG9yMCA/IGhvdmVySW5mbz8uaW5kZXggOiAob2JqZWN0IGFzIHtpbmRleDogbnVtYmVyfSkuaW5kZXg7XG4gICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgIHJldHVybiBkYXRhQ29udGFpbmVyLnJvdyhpbmRleCk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZ2V0TGVnZW5kVmlzdWFsQ2hhbm5lbHMoKSB7XG4gICAgbGV0IGNoYW5uZWxzOiB7W2tleTogc3RyaW5nXTogVmlzdWFsQ2hhbm5lbH0gPSB0aGlzLnZpc3VhbENoYW5uZWxzO1xuICAgIGlmIChjaGFubmVscy5zb3VyY2VDb2xvcj8uZmllbGQgJiYgdGhpcy5jb25maWdbY2hhbm5lbHMuc291cmNlQ29sb3IuZmllbGRdKSB7XG4gICAgICAvLyBSZW1vdmUgdGFyZ2V0Q29sb3IgdG8gYXZvaWQgZHVwbGljYXRlIGxlZ2VuZFxuICAgICAgY2hhbm5lbHMgPSB7Li4uY2hhbm5lbHN9O1xuICAgICAgZGVsZXRlIGNoYW5uZWxzLnRhcmdldENvbG9yO1xuICAgIH1cbiAgICByZXR1cm4gY2hhbm5lbHM7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBS0EsSUFBQUEsVUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBUUEsSUFBQUMsV0FBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsa0JBQUEsR0FBQUYsT0FBQTtBQUNBLElBQUFHLGFBQUEsR0FBQUgsT0FBQTtBQUNBLElBQUFJLE9BQUEsR0FBQUosT0FBQTtBQUVBLElBQUFLLE1BQUEsR0FBQUwsT0FBQTtBQU1BLElBQUFNLGFBQUEsR0FBQVAsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFPLFdBQUEsR0FBQVAsT0FBQTtBQUNBLElBQUFRLFVBQUEsR0FBQVIsT0FBQTtBQUk4QixTQUFBUyxRQUFBQyxDQUFBLEVBQUFDLENBQUEsUUFBQUMsQ0FBQSxHQUFBQyxNQUFBLENBQUFDLElBQUEsQ0FBQUosQ0FBQSxPQUFBRyxNQUFBLENBQUFFLHFCQUFBLFFBQUFDLENBQUEsR0FBQUgsTUFBQSxDQUFBRSxxQkFBQSxDQUFBTCxDQUFBLEdBQUFDLENBQUEsS0FBQUssQ0FBQSxHQUFBQSxDQUFBLENBQUFDLE1BQUEsV0FBQU4sQ0FBQSxXQUFBRSxNQUFBLENBQUFLLHdCQUFBLENBQUFSLENBQUEsRUFBQUMsQ0FBQSxFQUFBUSxVQUFBLE9BQUFQLENBQUEsQ0FBQVEsSUFBQSxDQUFBQyxLQUFBLENBQUFULENBQUEsRUFBQUksQ0FBQSxZQUFBSixDQUFBO0FBQUEsU0FBQVUsY0FBQVosQ0FBQSxhQUFBQyxDQUFBLE1BQUFBLENBQUEsR0FBQVksU0FBQSxDQUFBQyxNQUFBLEVBQUFiLENBQUEsVUFBQUMsQ0FBQSxXQUFBVyxTQUFBLENBQUFaLENBQUEsSUFBQVksU0FBQSxDQUFBWixDQUFBLFFBQUFBLENBQUEsT0FBQUYsT0FBQSxDQUFBSSxNQUFBLENBQUFELENBQUEsT0FBQWEsT0FBQSxXQUFBZCxDQUFBLFFBQUFlLGdCQUFBLGFBQUFoQixDQUFBLEVBQUFDLENBQUEsRUFBQUMsQ0FBQSxDQUFBRCxDQUFBLFNBQUFFLE1BQUEsQ0FBQWMseUJBQUEsR0FBQWQsTUFBQSxDQUFBZSxnQkFBQSxDQUFBbEIsQ0FBQSxFQUFBRyxNQUFBLENBQUFjLHlCQUFBLENBQUFmLENBQUEsS0FBQUgsT0FBQSxDQUFBSSxNQUFBLENBQUFELENBQUEsR0FBQWEsT0FBQSxXQUFBZCxDQUFBLElBQUFFLE1BQUEsQ0FBQWdCLGNBQUEsQ0FBQW5CLENBQUEsRUFBQUMsQ0FBQSxFQUFBRSxNQUFBLENBQUFLLHdCQUFBLENBQUFOLENBQUEsRUFBQUQsQ0FBQSxpQkFBQUQsQ0FBQTtBQUFBLFNBQUFvQixXQUFBbEIsQ0FBQSxFQUFBSSxDQUFBLEVBQUFOLENBQUEsV0FBQU0sQ0FBQSxPQUFBZSxnQkFBQSxhQUFBZixDQUFBLE9BQUFnQiwyQkFBQSxhQUFBcEIsQ0FBQSxFQUFBcUIseUJBQUEsS0FBQUMsT0FBQSxDQUFBQyxTQUFBLENBQUFuQixDQUFBLEVBQUFOLENBQUEsWUFBQXFCLGdCQUFBLGFBQUFuQixDQUFBLEVBQUF3QixXQUFBLElBQUFwQixDQUFBLENBQUFLLEtBQUEsQ0FBQVQsQ0FBQSxFQUFBRixDQUFBO0FBQUEsU0FBQXVCLDBCQUFBLGNBQUFyQixDQUFBLElBQUF5QixPQUFBLENBQUFDLFNBQUEsQ0FBQUMsT0FBQSxDQUFBQyxJQUFBLENBQUFOLE9BQUEsQ0FBQUMsU0FBQSxDQUFBRSxPQUFBLGlDQUFBekIsQ0FBQSxhQUFBcUIseUJBQUEsWUFBQUEsMEJBQUEsYUFBQXJCLENBQUE7QUFBQSxTQUFBNkIsY0FBQTdCLENBQUEsRUFBQUYsQ0FBQSxFQUFBQyxDQUFBLEVBQUFLLENBQUEsUUFBQTBCLENBQUEsT0FBQUMsS0FBQSxpQkFBQVosZ0JBQUEsaUJBQUFmLENBQUEsR0FBQUosQ0FBQSxDQUFBMEIsU0FBQSxHQUFBMUIsQ0FBQSxHQUFBRixDQUFBLEVBQUFDLENBQUEsY0FBQUssQ0FBQSxhQUFBSixDQUFBLFdBQUE4QixDQUFBLENBQUFyQixLQUFBLENBQUFWLENBQUEsRUFBQUMsQ0FBQSxPQUFBOEIsQ0FBQSxJQTlCOUI7QUFDQTtBQStGTyxJQUFNRSxrQkFBa0IsR0FBQUMsT0FBQSxDQUFBRCxrQkFBQSxHQUFHLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDO0FBQzNELElBQU1FLHVCQUF1QixHQUFBRCxPQUFBLENBQUFDLHVCQUFBLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLFdBQVcsQ0FBQztBQUMzRCxJQUFNQyx1QkFBdUIsR0FBQUYsT0FBQSxDQUFBRSx1QkFBQSxHQUFHLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQztBQUUxRCxJQUFNQyxlQUFlLEdBQUFILE9BQUEsQ0FBQUcsZUFBQSxHQUFHO0VBQzdCQyxJQUFJLEVBQUUsVUFBVTtFQUNoQkMsSUFBSSxFQUFFLFVBQVU7RUFDaEJDLElBQUksRUFBRSxVQUFVO0VBQ2hCQyxJQUFJLEVBQUUsVUFBVTtFQUNoQkMsU0FBUyxFQUFFO0FBQ2IsQ0FBQztBQUVNLElBQU1DLGFBTVosR0FBQVQsT0FBQSxDQUFBUyxhQUFBLEdBQUc7RUFDRkMsT0FBTyxFQUFFLFNBQVM7RUFDbEJDLFNBQVMsRUFBRSxXQUFXO0VBQ3RCQyxVQUFVLEVBQUUsWUFBWTtFQUN4QkMsU0FBUyxFQUFFLGtCQUFrQjtFQUM3QkMsV0FBVyxFQUFFO0FBQ2YsQ0FBQztBQUVNLElBQU1DLGtCQUFrQixHQUFBZixPQUFBLENBQUFlLGtCQUFBLEdBQUcsUUFBUTtBQUNuQyxJQUFNQyxxQkFBcUIsR0FBQWhCLE9BQUEsQ0FBQWdCLHFCQUFBLEdBQUcsV0FBVztBQUN6QyxJQUFNQyxvQkFBb0IsR0FBQWpCLE9BQUEsQ0FBQWlCLG9CQUFBLEdBQUcsVUFBVTtBQUM5QyxJQUFNQyxzQkFBc0IsR0FBRyxDQUM3QjtFQUNFQyxHQUFHLEVBQUVKLGtCQUFrQjtFQUN2QkssS0FBSyxFQUFFLFFBQVE7RUFDZkMsZUFBZSxFQUFFdEI7QUFDbkIsQ0FBQyxFQUNEO0VBQ0VvQixHQUFHLEVBQUVILHFCQUFxQjtFQUMxQkksS0FBSyxFQUFFLHFCQUFxQjtFQUM1QkMsZUFBZSxFQUFFcEI7QUFDbkIsQ0FBQyxFQUNEO0VBQ0VrQixHQUFHLEVBQUVGLG9CQUFvQjtFQUN6QkcsS0FBSyxFQUFFLGlCQUFpQjtFQUN4QkMsZUFBZSxFQUFFbkI7QUFDbkIsQ0FBQyxDQUNGO0FBQ0QsSUFBTW9CLG1CQUFtQixHQUFHUCxrQkFBa0I7QUFFOUMsSUFBTVEsaUJBQWlCLEdBQUcsSUFBSUMsNkJBQWlCLENBQUMsQ0FBQztBQUNqRCxJQUFNQyx1QkFBdUIsR0FBRyxJQUFJQyxrQ0FBb0IsQ0FBQyxDQUFDO0FBRTFELFNBQVNDLFNBQVNBLENBQUNDLE9BQU8sRUFBRUMsU0FBUyxFQUFFVixHQUFHLEVBQUU7RUFDMUMsSUFBTVcsS0FBSyxHQUFHRCxTQUFTLENBQUNELE9BQU8sQ0FBQ1QsR0FBRyxDQUFDLENBQUNZLFFBQVEsQ0FBQztFQUM5QyxPQUFPLENBQUFELEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFRSxJQUFJLE1BQUtDLDBCQUFlLENBQUNDLEVBQUU7QUFDM0M7QUFFTyxJQUFNQyxjQUFjLEdBQUFuQyxPQUFBLENBQUFtQyxjQUFBLEdBQ3pCLFNBRFdBLGNBQWNBLENBQUFDLElBQUEsRUFDeURDLFVBQVU7RUFBQSxJQUExRmpDLElBQUksR0FBQWdDLElBQUEsQ0FBSmhDLElBQUk7SUFBRUMsSUFBSSxHQUFBK0IsSUFBQSxDQUFKL0IsSUFBSTtJQUFFQyxJQUFJLEdBQUE4QixJQUFBLENBQUo5QixJQUFJO0lBQUVDLElBQUksR0FBQTZCLElBQUEsQ0FBSjdCLElBQUk7SUFBRStCLEdBQUcsR0FBQUYsSUFBQSxDQUFIRSxHQUFHO0lBQUVDLEdBQUcsR0FBQUgsSUFBQSxDQUFIRyxHQUFHO0lBQUVDLFNBQVMsR0FBQUosSUFBQSxDQUFUSSxTQUFTO0lBQUVDLFNBQVMsR0FBQUwsSUFBQSxDQUFUSyxTQUFTO0VBQUEsT0FDeEQsVUFBQ0MsRUFBMEIsRUFBSztJQUM5QixRQUFRTCxVQUFVO01BQ2hCLEtBQUtwQixvQkFBb0I7UUFDdkIsT0FBTyxVQUFBMEIsQ0FBQyxFQUFJO1VBQ1YsSUFBTUMsS0FBSyxHQUFHRixFQUFFLENBQUNHLE9BQU8sQ0FBQ0YsQ0FBQyxDQUFDRyxLQUFLLEVBQUVOLFNBQVMsQ0FBQ1QsUUFBUSxDQUFDO1VBQ3JELElBQU1nQixHQUFHLEdBQUdMLEVBQUUsQ0FBQ0csT0FBTyxDQUFDRixDQUFDLENBQUNHLEtBQUssRUFBRUwsU0FBUyxDQUFDVixRQUFRLENBQUM7VUFDbkQsT0FBTyxDQUFDYSxLQUFLLENBQUNJLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRUosS0FBSyxDQUFDSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFRCxHQUFHLENBQUNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRUQsR0FBRyxDQUFDQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ25FLENBQUM7TUFDSCxLQUFLaEMscUJBQXFCO1FBQ3hCLE9BQU8sVUFBQTJCLENBQUMsRUFBSTtVQUNWLElBQU1NLFFBQVEsR0FBRyxJQUFBQyxvQkFBYSxFQUFDUixFQUFFLEVBQUVDLENBQUMsRUFBRUwsR0FBRyxFQUFFQyxHQUFHLENBQUM7VUFDL0M7O1VBRUEsT0FBTyxDQUNMVSxRQUFRLEdBQUdBLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBR1AsRUFBRSxDQUFDRyxPQUFPLENBQUNGLENBQUMsQ0FBQ0csS0FBSyxFQUFFUCxHQUFHLENBQUNSLFFBQVEsQ0FBQyxFQUMxRGtCLFFBQVEsR0FBR0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHUCxFQUFFLENBQUNHLE9BQU8sQ0FBQ0YsQ0FBQyxDQUFDRyxLQUFLLEVBQUVSLEdBQUcsQ0FBQ1AsUUFBUSxDQUFDLEVBQzFELENBQUMsQ0FDRjtRQUNILENBQUM7TUFDSDtRQUNFO1FBQ0EsT0FBTyxVQUFBWSxDQUFDLEVBQUk7VUFDVjtVQUNBO1VBQ0EsSUFBTU0sUUFBUSxHQUFHLElBQUFDLG9CQUFhLEVBQUNSLEVBQUUsRUFBRUMsQ0FBQyxFQUFFdkMsSUFBSSxFQUFFQyxJQUFJLENBQUM7VUFDakQsSUFBTThDLE1BQU0sR0FBRyxJQUFBRCxvQkFBYSxFQUFDUixFQUFFLEVBQUVDLENBQUMsRUFBRXJDLElBQUksRUFBRUMsSUFBSSxDQUFDO1VBQy9DLE9BQU8sQ0FDTDBDLFFBQVEsR0FBR0EsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHUCxFQUFFLENBQUNHLE9BQU8sQ0FBQ0YsQ0FBQyxDQUFDRyxLQUFLLEVBQUV6QyxJQUFJLENBQUMwQixRQUFRLENBQUMsRUFDM0RrQixRQUFRLEdBQUdBLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBR1AsRUFBRSxDQUFDRyxPQUFPLENBQUNGLENBQUMsQ0FBQ0csS0FBSyxFQUFFMUMsSUFBSSxDQUFDMkIsUUFBUSxDQUFDLEVBQzNELENBQUMsRUFDRG9CLE1BQU0sR0FBR0EsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHVCxFQUFFLENBQUNHLE9BQU8sQ0FBQ0YsQ0FBQyxDQUFDRyxLQUFLLEVBQUV2QyxJQUFJLENBQUN3QixRQUFRLENBQUMsRUFDdkRvQixNQUFNLEdBQUdBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBR1QsRUFBRSxDQUFDRyxPQUFPLENBQUNGLENBQUMsQ0FBQ0csS0FBSyxFQUFFeEMsSUFBSSxDQUFDeUIsUUFBUSxDQUFDLEVBQ3ZELENBQUMsQ0FDRjtRQUNILENBQUM7SUFDTDtFQUNGLENBQUM7QUFBQTtBQUFDLElBQ2lCcUIsUUFBUSxHQUFBcEQsT0FBQSxxQ0FBQXFELE1BQUE7RUFrQjNCLFNBQUFELFNBQVlFLEtBQUssRUFBRTtJQUFBLElBQUFDLEtBQUE7SUFBQSxJQUFBQyxnQkFBQSxtQkFBQUosUUFBQTtJQUNqQkcsS0FBQSxHQUFBdEUsVUFBQSxPQUFBbUUsUUFBQSxHQUFNRSxLQUFLO0lBQUUsSUFBQXpFLGdCQUFBLGFBQUEwRSxLQUFBLG1CQWRnQyxJQUFJO0lBQUEsSUFBQTFFLGdCQUFBLGFBQUEwRSxLQUFBLHFCQUNQRSxTQUFTO0lBQUEsSUFBQTVFLGdCQUFBLGFBQUEwRSxLQUFBLHFCQUNURSxTQUFTO0lBRXJEO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUxFLElBQUE1RSxnQkFBQSxhQUFBMEUsS0FBQSxtQkFNMEMsSUFBSTtJQUFBLElBQUExRSxnQkFBQSxhQUFBMEUsS0FBQSwwQkFDYixFQUFFO0lBS2pDQSxLQUFBLENBQUtHLGlCQUFpQixDQUFDakQsYUFBYSxDQUFDO0lBQ3JDOEMsS0FBQSxDQUFLSSxtQkFBbUIsR0FBRyxVQUFDQyxhQUFxQztNQUFBLE9BQy9EekIsY0FBYyxDQUFDb0IsS0FBQSxDQUFLTSxNQUFNLENBQUNqQyxPQUFPLEVBQUUyQixLQUFBLENBQUtNLE1BQU0sQ0FBQ3hCLFVBQVUsQ0FBQyxDQUFDdUIsYUFBYSxDQUFDO0lBQUE7SUFBQyxPQUFBTCxLQUFBO0VBQy9FO0VBQUMsSUFBQU8sVUFBQSxhQUFBVixRQUFBLEVBQUFDLE1BQUE7RUFBQSxXQUFBVSxhQUFBLGFBQUFYLFFBQUE7SUFBQWpDLEdBQUE7SUFBQTZCLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQVc7TUFDVCxPQUFPLEtBQUs7SUFDZDtFQUFDO0lBQUE3QixHQUFBO0lBQUE2QixHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUFtQjtNQUNqQixPQUFPLEtBQUs7SUFDZDtFQUFDO0lBQUE3QixHQUFBO0lBQUE2QixHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUFnQjtNQUNkLE9BQU9nQix3QkFBWTtJQUNyQjtFQUFDO0lBQUE3QyxHQUFBO0lBQUE2QixHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUEyQztNQUN6QyxPQUFPN0MsZUFBZTtJQUN4QjtFQUFDO0lBQUFnQixHQUFBO0lBQUE2QixHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUFrQjtNQUNoQixPQUFPLElBQUksQ0FBQ2lCLHNCQUFzQjtJQUNwQztFQUFDO0lBQUE5QyxHQUFBO0lBQUE2QixHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUEyQjtNQUN6QixPQUFPOUIsc0JBQXNCO0lBQy9CO0VBQUM7SUFBQUMsR0FBQTtJQUFBNkIsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBcUI7TUFDbkIsT0FBTztRQUNMa0IsV0FBVyxFQUFBekYsYUFBQSxDQUFBQSxhQUFBLEtBQ05tQixhQUFBLENBQUF3RCxRQUFBLDZCQUFxQmUsS0FBSztVQUM3QkMsUUFBUSxFQUFFLE9BQU87VUFDakJqRCxHQUFHLEVBQUUsYUFBYTtVQUNsQmtELFFBQVEsRUFBRSxnQkFBZ0I7VUFDMUJDLFlBQVksRUFBRSxTQUFkQSxZQUFZQSxDQUFFVCxNQUFNO1lBQUEsT0FBSUEsTUFBTSxDQUFDTSxLQUFLO1VBQUE7UUFBQSxFQUNyQztRQUNEckQsV0FBVyxFQUFBckMsYUFBQSxDQUFBQSxhQUFBLEtBQ05tQixhQUFBLENBQUF3RCxRQUFBLDZCQUFxQmUsS0FBSztVQUM3QkMsUUFBUSxFQUFFLGFBQWE7VUFDdkJqRCxHQUFHLEVBQUUsYUFBYTtVQUNsQmtELFFBQVEsRUFBRSxnQkFBZ0I7VUFDMUJDLFlBQVksRUFBRSxTQUFkQSxZQUFZQSxDQUFFVCxNQUFNO1lBQUEsT0FBSUEsTUFBTSxDQUFDVSxTQUFTLENBQUN6RCxXQUFXLElBQUkrQyxNQUFNLENBQUNNLEtBQUs7VUFBQTtRQUFBLEVBQ3JFO1FBQ0RLLElBQUksRUFBQS9GLGFBQUEsQ0FBQUEsYUFBQSxLQUNDbUIsYUFBQSxDQUFBd0QsUUFBQSw2QkFBcUJvQixJQUFJO1VBQzVCSCxRQUFRLEVBQUUsVUFBVTtVQUNwQkQsUUFBUSxFQUFFO1FBQVE7TUFFdEIsQ0FBQztJQUNIO0VBQUM7SUFBQWpELEdBQUE7SUFBQTZCLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQXVCO01BQ3JCO01BQ0E7TUFDQSxPQUFPO1FBQ0w1QyxJQUFJLEVBQUUsU0FBTkEsSUFBSUEsQ0FBR3FFLE1BQU0sRUFBRTdDLE9BQU8sRUFBRUMsU0FBUztVQUFBLE9BQUtGLFNBQVMsQ0FBQ0MsT0FBTyxFQUFFQyxTQUFTLEVBQUUsTUFBTSxDQUFDO1FBQUE7UUFDM0V4QixJQUFJLEVBQUUsU0FBTkEsSUFBSUEsQ0FBR29FLE1BQU0sRUFBRTdDLE9BQU8sRUFBRUMsU0FBUztVQUFBLE9BQUtGLFNBQVMsQ0FBQ0MsT0FBTyxFQUFFQyxTQUFTLEVBQUUsTUFBTSxDQUFDO1FBQUE7UUFDM0V2QixJQUFJLEVBQUUsU0FBTkEsSUFBSUEsQ0FBR21FLE1BQU0sRUFBRTdDLE9BQU8sRUFBRUMsU0FBUztVQUFBLE9BQUtGLFNBQVMsQ0FBQ0MsT0FBTyxFQUFFQyxTQUFTLEVBQUUsTUFBTSxDQUFDO1FBQUE7UUFDM0V0QixJQUFJLEVBQUUsU0FBTkEsSUFBSUEsQ0FBR2tFLE1BQU0sRUFBRTdDLE9BQU8sRUFBRUMsU0FBUztVQUFBLE9BQUtGLFNBQVMsQ0FBQ0MsT0FBTyxFQUFFQyxTQUFTLEVBQUUsTUFBTSxDQUFDO1FBQUE7UUFDM0VTLEdBQUcsRUFBRSxTQUFMQSxHQUFHQSxDQUFHbUMsTUFBTSxFQUFFN0MsT0FBTyxFQUFFQyxTQUFTO1VBQUEsT0FBS0YsU0FBUyxDQUFDQyxPQUFPLEVBQUVDLFNBQVMsRUFBRSxLQUFLLENBQUM7UUFBQTtRQUN6RVUsR0FBRyxFQUFFLFNBQUxBLEdBQUdBLENBQUdrQyxNQUFNLEVBQUU3QyxPQUFPLEVBQUVDLFNBQVM7VUFBQSxPQUFLRixTQUFTLENBQUNDLE9BQU8sRUFBRUMsU0FBUyxFQUFFLEtBQUssQ0FBQztRQUFBO01BQzNFLENBQUM7SUFDSDtFQUFDO0lBQUFWLEdBQUE7SUFBQXVELEtBQUEsRUFFRCxTQUFBQyxhQUFhQSxDQUFBLEVBQUc7TUFDZCxJQUFPL0MsT0FBTyxHQUFJLElBQUksQ0FBQ2lDLE1BQU0sQ0FBdEJqQyxPQUFPO01BQ2QsSUFBSSxJQUFJLENBQUNpQyxNQUFNLENBQUN4QixVQUFVLEtBQUtwQixvQkFBb0IsRUFBRTtRQUNuRCxPQUFPLElBQUksQ0FBQzJELGNBQWMsQ0FBQ2hELE9BQU8sQ0FBQ1ksU0FBUyxDQUFDLElBQUksSUFBSSxDQUFDb0MsY0FBYyxDQUFDaEQsT0FBTyxDQUFDYSxTQUFTLENBQUM7TUFDekY7TUFDQSxJQUFJLElBQUksQ0FBQ29CLE1BQU0sQ0FBQ3hCLFVBQVUsS0FBS3RCLGtCQUFrQixFQUFFO1FBQ2pEO1FBQ0E7UUFDQSxJQUFNOEQsU0FBUSxHQUFHLElBQUksQ0FBQ0QsY0FBYyxDQUFDaEQsT0FBTyxDQUFDeEIsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDd0UsY0FBYyxDQUFDaEQsT0FBTyxDQUFDdkIsSUFBSSxDQUFDO1FBQ3ZGLElBQU15RSxNQUFNLEdBQUcsSUFBSSxDQUFDRixjQUFjLENBQUNoRCxPQUFPLENBQUN0QixJQUFJLENBQUMsSUFBSSxJQUFJLENBQUNzRSxjQUFjLENBQUNoRCxPQUFPLENBQUNyQixJQUFJLENBQUM7UUFDckYsT0FBT3NFLFNBQVEsSUFBSUMsTUFBTTtNQUMzQjtNQUNBLElBQU1ELFFBQVEsR0FBRyxJQUFJLENBQUNELGNBQWMsQ0FBQ2hELE9BQU8sQ0FBQ1UsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDc0MsY0FBYyxDQUFDaEQsT0FBTyxDQUFDVyxHQUFHLENBQUM7TUFDckYsSUFBTXdDLFVBQVUsR0FBRyxJQUFJLENBQUNILGNBQWMsQ0FBQ2hELE9BQU8sQ0FBQ3BCLFNBQVMsQ0FBQztNQUN6RCxPQUFPcUUsUUFBUSxJQUFJRSxVQUFVO0lBQy9CO0VBQUM7SUFBQTVELEdBQUE7SUFBQXVELEtBQUEsRUE2QkQsU0FBQU0scUJBQXFCQSxDQUFDMUIsS0FBNkIsRUFBRTtNQUFBLElBQUEyQixpQkFBQTtNQUNuRCxJQUFNQyxrQkFBa0IsR0FBQXRGLGFBQUEsQ0FBQXdELFFBQUEscUNBQStCRSxLQUFLLEVBQUM7TUFFN0QsT0FBQTdFLGFBQUEsQ0FBQUEsYUFBQSxLQUNLeUcsa0JBQWtCO1FBQ3JCN0MsVUFBVSxHQUFBNEMsaUJBQUEsR0FBRTNCLEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFakIsVUFBVSxjQUFBNEMsaUJBQUEsY0FBQUEsaUJBQUEsR0FBSTNEO01BQW1CO0lBRXhEO0VBQUM7SUFBQUgsR0FBQTtJQUFBdUQsS0FBQSxFQUVELFNBQUFTLGlDQUFpQ0EsQ0FBQUMsS0FBQSxFQUUvQkMsV0FBVyxFQUNYO01BQUEsSUFGQ3pCLGFBQWEsR0FBQXdCLEtBQUEsQ0FBYnhCLGFBQWE7UUFBRTBCLGFBQWEsR0FBQUYsS0FBQSxDQUFiRSxhQUFhO01BRzdCLElBQUksQ0FBQ0EsYUFBYSxHQUFHLElBQUFDLDRCQUFnQixFQUNuQzNCLGFBQWEsQ0FBQzRCLE9BQU8sQ0FBQyxDQUFDLEVBQ3ZCRixhQUFhLEVBQ2IsSUFBSSxDQUFDQSxhQUNQLENBQUM7TUFDRCxJQUFJLENBQUNHLG9CQUFvQixHQUFHSCxhQUFhO01BRXpDLElBQUksSUFBSSxDQUFDekIsTUFBTSxDQUFDeEIsVUFBVSxLQUFLcEIsb0JBQW9CLEVBQUU7UUFDbkQsSUFBSSxDQUFDeUUsZUFBZSxHQUFHOUIsYUFBYSxDQUFDK0IsU0FBUyxDQUFDLElBQUksQ0FBQzlCLE1BQU0sQ0FBQ2pDLE9BQU8sQ0FBQ1ksU0FBUyxDQUFDVCxRQUFRLENBQUM7UUFDdEYsSUFBSSxDQUFDNkQsZUFBZSxHQUFHaEMsYUFBYSxDQUFDK0IsU0FBUyxDQUFDLElBQUksQ0FBQzlCLE1BQU0sQ0FBQ2pDLE9BQU8sQ0FBQ2EsU0FBUyxDQUFDVixRQUFRLENBQUM7TUFDeEYsQ0FBQyxNQUFNO1FBQ0w7UUFDQTtRQUNBLElBQUksQ0FBQzJELGVBQWUsR0FBRyxJQUFBRyxxQ0FBeUIsRUFBQ2pDLGFBQWEsRUFBRSxVQUFBakIsQ0FBQyxFQUFJO1VBQ25FLE9BQU8wQyxXQUFXLENBQUMxQyxDQUFDLENBQUMsQ0FBQ21ELEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ25DLENBQUMsQ0FBQztRQUNGLElBQUksQ0FBQ0YsZUFBZSxHQUFHLElBQUFDLHFDQUF5QixFQUFDakMsYUFBYSxFQUFFLFVBQUFqQixDQUFDLEVBQUk7VUFDbkUsT0FBTzBDLFdBQVcsQ0FBQzFDLENBQUMsQ0FBQyxDQUFDbUQsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbkMsQ0FBQyxDQUFDO01BQ0o7TUFFQSxPQUFPbEMsYUFBYSxDQUFDbUMsUUFBUSxDQUFDLENBQUM7SUFDakM7RUFBQztJQUFBNUUsR0FBQTtJQUFBdUQsS0FBQSxFQUVELFNBQUFzQiwrQkFBK0JBLENBQUFDLEtBQUEsRUFFN0JaLFdBQVcsRUFDWDtNQUFBLElBRkNDLGFBQWEsR0FBQVcsS0FBQSxDQUFiWCxhQUFhO01BR2QsSUFBTVksSUFBb0IsR0FBRyxFQUFFO01BQy9CLEtBQUssSUFBSUMsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHYixhQUFhLENBQUMzRyxNQUFNLEVBQUV3SCxDQUFDLEVBQUUsRUFBRTtRQUM3QyxJQUFNckQsS0FBSyxHQUFHd0MsYUFBYSxDQUFDYSxDQUFDLENBQUM7UUFDOUIsSUFBTUMsR0FBRyxHQUFHZixXQUFXLENBQUM7VUFBQ3ZDLEtBQUssRUFBTEE7UUFBSyxDQUFDLENBQUM7O1FBRWhDO1FBQ0E7UUFDQSxJQUFJc0QsR0FBRyxDQUFDQyxLQUFLLENBQUNDLE1BQU0sQ0FBQ0MsUUFBUSxDQUFDLEVBQUU7VUFDOUJMLElBQUksQ0FBQzNILElBQUksQ0FBQztZQUNSdUUsS0FBSyxFQUFMQSxLQUFLO1lBQ0wwRCxjQUFjLEVBQUUsQ0FBQ0osR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFQSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUVBLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN4Q0ssY0FBYyxFQUFFLENBQUNMLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRUEsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFQSxHQUFHLENBQUMsQ0FBQyxDQUFDO1VBQ3pDLENBQUMsQ0FBQztRQUNKO01BQ0Y7TUFDQSxPQUFPRixJQUFJO0lBQ2I7RUFBQztJQUFBL0UsR0FBQTtJQUFBdUQsS0FBQSxFQUVELFNBQUFnQyx3Q0FBd0NBLENBQUFDLEtBQUEsRUFLdEN0QixXQUFXLEVBQ1g7TUFBQSxJQUFBdUIsTUFBQTtNQUFBLElBSkVoRCxhQUFhLEdBQUErQyxLQUFBLENBQWIvQyxhQUFhO1FBQ2IwQixhQUFhLEdBQUFxQixLQUFBLENBQWJyQixhQUFhO01BSWYsSUFBTVksSUFBMkUsR0FBRyxFQUFFO01BQUMsSUFBQVcsS0FBQSxZQUFBQSxNQUFBLEVBQ3hDO1FBQzdDLElBQU0vRCxLQUFLLEdBQUd3QyxhQUFhLENBQUNhLENBQUMsQ0FBQztRQUM5QixJQUFNQyxHQUFHLEdBQUdmLFdBQVcsQ0FBQztVQUFDdkMsS0FBSyxFQUFMQTtRQUFLLENBQUMsQ0FBQztRQUNoQztRQUNBO1FBQ0EsSUFBSXNELEdBQUcsQ0FBQ0MsS0FBSyxDQUFDQyxNQUFNLENBQUNDLFFBQVEsQ0FBQyxFQUFFO1VBQzlCO1VBQ0EsSUFBTU8sV0FBVyxHQUFHRixNQUFJLENBQUMvQyxNQUFNLENBQUNqQyxPQUFPLENBQUNwQixTQUFTLENBQUNrRSxLQUFLLEdBQ25EZCxhQUFhLENBQUNmLE9BQU8sQ0FBQ0MsS0FBSyxFQUFFOEQsTUFBSSxDQUFDL0MsTUFBTSxDQUFDakMsT0FBTyxDQUFDcEIsU0FBUyxDQUFDdUIsUUFBUSxDQUFDLEdBQ3BFLEVBQUU7VUFDTixJQUFJZ0YsS0FBSyxDQUFDQyxPQUFPLENBQUNGLFdBQVcsQ0FBQyxFQUFFO1lBQzlCQSxXQUFXLENBQUNsSSxPQUFPLENBQUMsVUFBQXFJLEdBQUcsRUFBSTtjQUN6QjtjQUNBLElBQU1DLElBQUksR0FBR3RELGFBQWEsQ0FBQ3VELFVBQVUsQ0FBQ0YsR0FBRyxDQUFDLEdBQUc1QixXQUFXLENBQUM7Z0JBQUN2QyxLQUFLLEVBQUVtRTtjQUFHLENBQUMsQ0FBQyxHQUFHLElBQUk7Y0FDN0UsSUFBSUMsSUFBSSxJQUFJQSxJQUFJLENBQUNiLEtBQUssQ0FBQ0MsTUFBTSxDQUFDQyxRQUFRLENBQUMsRUFBRTtnQkFDdkNMLElBQUksQ0FBQzNILElBQUksQ0FBQztrQkFDUnVFLEtBQUssRUFBTEEsS0FBSztrQkFDTDBELGNBQWMsRUFBRSxDQUFDSixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUVBLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRUEsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2tCQUN4Q0ssY0FBYyxFQUFFLENBQUNTLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRUEsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFQSxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUM1QyxDQUFDLENBQUM7Y0FDSjtZQUNGLENBQUMsQ0FBQztVQUNKO1FBQ0Y7TUFDRixDQUFDO01BeEJELEtBQUssSUFBSWYsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHYixhQUFhLENBQUMzRyxNQUFNLEVBQUV3SCxDQUFDLEVBQUU7UUFBQVUsS0FBQTtNQUFBO01BMEI3QyxPQUFPWCxJQUFJO0lBQ2I7RUFBQztJQUFBL0UsR0FBQTtJQUFBdUQsS0FBQSxFQUVELFNBQUEwQyxzQkFBc0JBLENBQUFDLEtBQUEsRUFBOENoQyxXQUFXLEVBQUU7TUFBQSxJQUF6RHpCLGFBQWEsR0FBQXlELEtBQUEsQ0FBYnpELGFBQWE7UUFBRTBCLGFBQWEsR0FBQStCLEtBQUEsQ0FBYi9CLGFBQWE7TUFDbEQsSUFBT2pELFVBQVUsR0FBSSxJQUFJLENBQUN3QixNQUFNLENBQXpCeEIsVUFBVTs7TUFFakI7TUFDQTtNQUNBLElBQ0V1QixhQUFhLFlBQVkwRCx5QkFBa0IsS0FDMUNqRixVQUFVLEtBQUtwQixvQkFBb0IsSUFBSW9CLFVBQVUsS0FBS3RCLGtCQUFrQixDQUFDLEVBQzFFO1FBQ0EsT0FBTyxJQUFJLENBQUNvRSxpQ0FBaUMsQ0FBQztVQUFDdkIsYUFBYSxFQUFiQSxhQUFhO1VBQUUwQixhQUFhLEVBQWJBO1FBQWEsQ0FBQyxFQUFFRCxXQUFXLENBQUM7TUFDNUY7O01BRUE7TUFDQSxJQUFJLENBQUNLLGVBQWUsR0FBR2pDLFNBQVM7TUFDaEMsSUFBSSxDQUFDbUMsZUFBZSxHQUFHbkMsU0FBUztNQUNoQyxJQUFJLENBQUM2QixhQUFhLEdBQUcsSUFBSTtNQUV6QixJQUFJLElBQUksQ0FBQ3pCLE1BQU0sQ0FBQ3hCLFVBQVUsS0FBS3RCLGtCQUFrQixFQUFFO1FBQ2pELE9BQU8sSUFBSSxDQUFDaUYsK0JBQStCLENBQUM7VUFBQ3BDLGFBQWEsRUFBYkEsYUFBYTtVQUFFMEIsYUFBYSxFQUFiQTtRQUFhLENBQUMsRUFBRUQsV0FBVyxDQUFDO01BQzFGO01BQ0EsT0FBTyxJQUFJLENBQUNxQix3Q0FBd0MsQ0FDbEQ7UUFBQzlDLGFBQWEsRUFBYkEsYUFBYTtRQUFFMEIsYUFBYSxFQUFiQTtNQUFhLENBQUMsRUFDOUJELFdBQ0YsQ0FBQztJQUNIO0VBQUM7SUFBQWxFLEdBQUE7SUFBQXVELEtBQUEsRUFFRCxTQUFBNkMsZUFBZUEsQ0FBQ0MsUUFBUSxFQUFFQyxZQUFZLEVBQUU7TUFBQSxJQUFBQyxNQUFBO01BQ3RDLElBQUksSUFBSSxDQUFDN0QsTUFBTSxDQUFDOEQsTUFBTSxLQUFLLElBQUksRUFBRTtRQUMvQixPQUFPLENBQUMsQ0FBQztNQUNYO01BQ0EsSUFBQUMscUJBQUEsR0FBbUNKLFFBQVEsQ0FBQyxJQUFJLENBQUMzRCxNQUFNLENBQUM4RCxNQUFNLENBQUM7UUFBeERFLFNBQVMsR0FBQUQscUJBQUEsQ0FBVEMsU0FBUztRQUFFakUsYUFBYSxHQUFBZ0UscUJBQUEsQ0FBYmhFLGFBQWE7TUFDL0IsSUFBQWtFLGdCQUFBLEdBQWUsSUFBSSxDQUFDQyxVQUFVLENBQUNQLFFBQVEsRUFBRUMsWUFBWSxDQUFDO1FBQS9DdkIsSUFBSSxHQUFBNEIsZ0JBQUEsQ0FBSjVCLElBQUk7TUFDWCxJQUFNOEIsU0FBUyxHQUFHLElBQUksQ0FBQ0MscUJBQXFCLENBQUM7UUFBQ3JFLGFBQWEsRUFBYkE7TUFBYSxDQUFDLENBQUM7TUFDN0QsSUFBTXNFLGtCQUFrQixHQUFHLFNBQXJCQSxrQkFBa0JBLENBQUloQyxJQUFxQixFQUFLO1FBQ3BEO1FBQ0EsT0FBT3dCLE1BQUksQ0FBQ3BDLGFBQWEsR0FBR29DLE1BQUksQ0FBQ3BDLGFBQWEsQ0FBQ1ksSUFBSSxDQUFDcEQsS0FBSyxDQUFDLEdBQUcsQ0FBQztNQUNoRSxDQUFDO01BRUQsT0FBQXJFLGFBQUE7UUFDRXlILElBQUksRUFBSkEsSUFBSTtRQUNKaUMsY0FBYyxFQUFFTixTQUFTLENBQUNPLG1CQUFtQixDQUFDeEUsYUFBYSxDQUFDLENBQUMsQ0FBQztRQUM5RHlFLFdBQVcsRUFBRUg7TUFBa0IsR0FDNUJGLFNBQVM7SUFFaEI7SUFDQTtFQUFBO0lBQUE3RyxHQUFBO0lBQUF1RCxLQUFBLEVBRUEsU0FBQTRELGVBQWVBLENBQUNDLE9BQW9CLEVBQUU7TUFDcEMsSUFBTzNFLGFBQWEsR0FBSTJFLE9BQU8sQ0FBeEIzRSxhQUFhO01BRXBCLElBQUksQ0FBQ0EsYUFBYSxHQUFHQSxhQUFhOztNQUVsQztNQUNBLElBQU15QixXQUFXLEdBQUcsSUFBSSxDQUFDMUIsbUJBQW1CLENBQUNDLGFBQWEsQ0FBQztNQUUzRCxJQUFNNEUsT0FBTyxHQUFHLElBQUksQ0FBQ0MsZUFBZSxDQUFDN0UsYUFBYSxFQUFFLFVBQUFqQixDQUFDLEVBQUk7UUFDdkQsSUFBTXlELEdBQUcsR0FBR2YsV0FBVyxDQUFDMUMsQ0FBQyxDQUFDO1FBQzFCLE9BQU8sQ0FBQ3lELEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRUEsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ3pCLENBQUMsQ0FBQztNQUVGLElBQUlzQyxPQUF3QixHQUFHLEVBQUU7TUFDakMsSUFBSSxJQUFJLENBQUM3RSxNQUFNLENBQUN4QixVQUFVLEtBQUt0QixrQkFBa0IsRUFBRTtRQUNqRDJILE9BQU8sR0FBRyxJQUFJLENBQUNELGVBQWUsQ0FBQzdFLGFBQWEsRUFBRSxVQUFBakIsQ0FBQyxFQUFJO1VBQ2pELElBQU15RCxHQUFHLEdBQUdmLFdBQVcsQ0FBQzFDLENBQUMsQ0FBQztVQUMxQixPQUFPLENBQUN5RCxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUVBLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN6QixDQUFDLENBQUM7TUFDSixDQUFDLE1BQU07UUFDTDtRQUNBc0MsT0FBTyxHQUFHRixPQUFPO01BQ25CO01BRUEsSUFBTUcsTUFBTSxHQUNWRCxPQUFPLElBQUlGLE9BQU8sR0FDZCxDQUNFSSxJQUFJLENBQUNDLEdBQUcsQ0FBQ0wsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDaENFLElBQUksQ0FBQ0MsR0FBRyxDQUFDTCxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUVFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUNoQ0UsSUFBSSxDQUFDRSxHQUFHLENBQUNOLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQ2hDRSxJQUFJLENBQUNFLEdBQUcsQ0FBQ04sT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDakMsR0FDREYsT0FBTyxJQUFJRSxPQUFPO01BRXhCLElBQUksQ0FBQ0ssVUFBVSxDQUFDO1FBQUNKLE1BQU0sRUFBTkE7TUFBTSxDQUFDLENBQUM7SUFDM0I7RUFBQztJQUFBeEgsR0FBQTtJQUFBdUQsS0FBQSxFQUVELFNBQUFzRSxXQUFXQSxDQUFDQyxJQUFJLEVBQUU7TUFDaEIsSUFBTy9DLElBQUksR0FBMEQrQyxJQUFJLENBQWxFL0MsSUFBSTtRQUFFMkIsU0FBUyxHQUErQ29CLElBQUksQ0FBNURwQixTQUFTO1FBQUVxQixhQUFhLEdBQWdDRCxJQUFJLENBQWpEQyxhQUFhO1FBQUVDLGlCQUFpQixHQUFhRixJQUFJLENBQWxDRSxpQkFBaUI7UUFBRVosT0FBTyxHQUFJVSxJQUFJLENBQWZWLE9BQU87TUFDakUsSUFBTWEsY0FBYyxHQUFBM0ssYUFBQTtRQUNsQjRHLFdBQVcsRUFBRSxJQUFJLENBQUN4QixNQUFNLENBQUNqQyxPQUFPO1FBQ2hDdUcsY0FBYyxFQUFFTixTQUFTLENBQUN3Qix5QkFBeUI7UUFDbkRoQixXQUFXLEVBQUUsSUFBSSxDQUFDNUM7TUFBb0IsR0FDbkMsSUFBSSxDQUFDNkQsOEJBQThCLENBQUMsQ0FBQyxDQUN6QztNQUNELElBQU1DLFVBQVUsR0FBRyxJQUFJLENBQUMxRixNQUFNLENBQUNVLFNBQVMsQ0FBQzVELFNBQVMsR0FBRzZJLDBDQUErQjtNQUNwRixJQUFNQyxpQkFBaUIsR0FBRyxJQUFJLENBQUNDLHdCQUF3QixDQUFDVCxJQUFJLENBQUM7TUFDN0QsSUFBTVUsYUFBYSxHQUFHLElBQUksQ0FBQ0MsZ0JBQWdCLENBQUNWLGFBQWEsQ0FBQztNQUUxRCxJQUFNVyxhQUFhLEdBQUdySyxPQUFPLENBQUMsSUFBSSxDQUFDa0csZUFBZSxDQUFDO01BRW5ELElBQUlvRSxhQUE0RCxHQUFHQyxnQkFBWTtNQUMvRSxJQUFJQyx5QkFJSCxHQUFHLENBQUMsQ0FBQztNQUVOLElBQUlILGFBQWEsRUFBRTtRQUNqQkMsYUFBYSxHQUFHRyxtQ0FBZ0I7UUFDaENELHlCQUF5QixHQUFHO1VBQzFCOUQsSUFBSSxFQUFFcUMsT0FBTyxDQUFDM0UsYUFBYSxDQUFDbUMsUUFBUSxDQUFDLENBQUM7VUFDdENtRSxpQkFBaUIsRUFBRSxJQUFJLENBQUN4RSxlQUFlO1VBQ3ZDeUUsaUJBQWlCLEVBQUUsSUFBSSxDQUFDdkU7UUFDMUIsQ0FBQztNQUNIO01BRUE7TUFDRTtNQUNBLElBQUlrRSxhQUFhLENBQUFyTCxhQUFBLENBQUFBLGFBQUEsQ0FBQUEsYUFBQSxDQUFBQSxhQUFBLENBQUFBLGFBQUEsS0FDWmdMLGlCQUFpQixHQUNqQixJQUFJLENBQUNXLHlCQUF5QixDQUFDakIsaUJBQWlCLEVBQUUsZUFBZSxDQUFDLEdBQ2xFakQsSUFBSSxHQUNKOEQseUJBQXlCO1FBQzVCVCxVQUFVLEVBQVZBLFVBQVU7UUFDVkgsY0FBYyxFQUFkQSxjQUFjO1FBQ2RpQixVQUFVLEtBQUFDLE1BQUEsS0FBQUMsbUJBQUEsYUFDTGQsaUJBQWlCLENBQUNZLFVBQVUsSUFDL0I5SSxpQkFBaUIsT0FBQWdKLG1CQUFBLGFBQ2JWLGFBQWEsR0FBRyxDQUFDcEksdUJBQXVCLENBQUMsR0FBRyxFQUFFO01BQ25ELEVBQ0YsQ0FBQyxFQUFBNkksTUFBQSxLQUFBQyxtQkFBQSxhQUVFWixhQUFhLEdBQ2IsQ0FDRSxJQUFJSSxnQkFBWSxDQUFBdEwsYUFBQSxDQUFBQSxhQUFBLEtBQ1gsSUFBSSxDQUFDK0wseUJBQXlCLENBQUMsQ0FBQztRQUNuQ0MsT0FBTyxFQUFFaEIsaUJBQWlCLENBQUNnQixPQUFPO1FBQ2xDdkUsSUFBSSxFQUFFLENBQUN5RCxhQUFhLENBQUM7UUFDckJKLFVBQVUsRUFBVkEsVUFBVTtRQUNWbUIsY0FBYyxFQUFFLElBQUksQ0FBQzdHLE1BQU0sQ0FBQzhHLGNBQWM7UUFDMUNDLGNBQWMsRUFBRSxJQUFJLENBQUMvRyxNQUFNLENBQUM4RyxjQUFjO1FBQzFDRSxRQUFRLEVBQUUzRSxJQUFJLENBQUMyRTtNQUFRLEVBQ3hCLENBQUMsQ0FDSCxHQUNELEVBQUU7SUFFVjtFQUFDO0lBQUExSixHQUFBO0lBQUF1RCxLQUFBLEVBRUQsU0FBQWtGLGdCQUFnQkEsQ0FBQ2tCLFVBQTJCLEVBQUU7TUFDNUMsSUFDRSxJQUFBQyxtQ0FBdUIsRUFBQ0QsVUFBVSxFQUFFLElBQUksQ0FBQ0UsRUFBRSxDQUFDLElBQzVDRixVQUFVLENBQUNoSSxLQUFLLElBQUksQ0FBQyxJQUNyQixJQUFJLENBQUNjLGFBQWEsRUFDbEI7UUFDQTtRQUNBLElBQU0rRixhQUFhLEdBQUEvSixhQUFBLENBQUF3RCxRQUFBLGdDQUEwQjBILFVBQVUsRUFBQztRQUN4RCxPQUFPbkIsYUFBYSxHQUNoQjtVQUNFN0csS0FBSyxFQUFFNkcsYUFBYSxDQUFDN0csS0FBSztVQUMxQm1JLFFBQVEsRUFBRSxJQUFJLENBQUN0SCxtQkFBbUIsQ0FBQyxJQUFJLENBQUNDLGFBQWEsQ0FBQyxDQUFDO1lBQUNkLEtBQUssRUFBRTZHLGFBQWEsQ0FBQzdHO1VBQUssQ0FBQztRQUNyRixDQUFDLEdBQ0QsSUFBSTtNQUNWO01BRUEsT0FBQWxELGFBQUEsQ0FBQXdELFFBQUEsZ0NBQThCMEgsVUFBVTtJQUMxQztFQUFDO0lBQUEzSixHQUFBO0lBQUF1RCxLQUFBLEVBRUQsU0FBQXdHLFlBQVlBLENBQ1ZDLE1BQXFELEVBQ3JEdkgsYUFBcUMsRUFDckN3SCxNQUFlLEVBQ2ZDLGVBQWdDLEVBQ2hDQyxTQUEwQixFQUMxQjtNQUNBO01BQ0E7TUFDQSxJQUFNeEksS0FBSyxHQUFHLElBQUksQ0FBQzRDLGVBQWUsR0FBRzRGLFNBQVMsYUFBVEEsU0FBUyx1QkFBVEEsU0FBUyxDQUFFeEksS0FBSyxHQUFJcUksTUFBTSxDQUFxQnJJLEtBQUs7TUFDekYsSUFBSUEsS0FBSyxJQUFJLENBQUMsRUFBRTtRQUNkLE9BQU9jLGFBQWEsQ0FBQzJILEdBQUcsQ0FBQ3pJLEtBQUssQ0FBQztNQUNqQztNQUNBLE9BQU8sSUFBSTtJQUNiO0VBQUM7SUFBQTNCLEdBQUE7SUFBQXVELEtBQUEsRUFFRCxTQUFBOEcsdUJBQXVCQSxDQUFBLEVBQUc7TUFBQSxJQUFBQyxxQkFBQTtNQUN4QixJQUFJQyxRQUF3QyxHQUFHLElBQUksQ0FBQ0MsY0FBYztNQUNsRSxJQUFJLENBQUFGLHFCQUFBLEdBQUFDLFFBQVEsQ0FBQ3hILFdBQVcsY0FBQXVILHFCQUFBLGVBQXBCQSxxQkFBQSxDQUFzQjNKLEtBQUssSUFBSSxJQUFJLENBQUMrQixNQUFNLENBQUM2SCxRQUFRLENBQUN4SCxXQUFXLENBQUNwQyxLQUFLLENBQUMsRUFBRTtRQUMxRTtRQUNBNEosUUFBUSxHQUFBak4sYUFBQSxLQUFPaU4sUUFBUSxDQUFDO1FBQ3hCLE9BQU9BLFFBQVEsQ0FBQzVLLFdBQVc7TUFDN0I7TUFDQSxPQUFPNEssUUFBUTtJQUNqQjtFQUFDO0lBQUF2SyxHQUFBO0lBQUF1RCxLQUFBLEVBeFRELFNBQU9rSCxxQkFBcUJBLENBQUFDLEtBQUEsRUFFMUI7TUFBQSxJQUFBQyxnQkFBQSxHQUFBRCxLQUFBLENBRjRCRSxVQUFVO1FBQVZBLFVBQVUsR0FBQUQsZ0JBQUEsY0FBRyxFQUFFLEdBQUFBLGdCQUFBO01BRzNDLElBQUlDLFVBQVUsQ0FBQ3BOLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDekIsT0FBTztVQUFDMkUsS0FBSyxFQUFFO1FBQUUsQ0FBQztNQUNwQjtNQUVBLElBQU1BLEtBSUwsR0FBRztRQUNGYSxLQUFLLEVBQUUsSUFBQTZILGVBQVEsRUFBQ0MsOEJBQW1CLENBQUNDLE9BQU8sQ0FBQztRQUM1QztRQUNBO1FBQ0F0SyxPQUFPLEVBQUU7VUFDUHhCLElBQUksRUFBRTJMLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQ0ksSUFBSSxDQUFDN0osR0FBRztVQUM1QmpDLElBQUksRUFBRTBMLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQ0ksSUFBSSxDQUFDNUosR0FBRztVQUM1QmpDLElBQUksRUFBRXlMLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQ0ksSUFBSSxDQUFDN0osR0FBRztVQUM1Qi9CLElBQUksRUFBRXdMLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQ0ksSUFBSSxDQUFDNUo7UUFDM0IsQ0FBQztRQUNEbkIsS0FBSyxLQUFBa0osTUFBQSxDQUFLeUIsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDSyxXQUFXLFVBQUE5QixNQUFBLENBQU95QixVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUNLLFdBQVc7TUFDckUsQ0FBQztNQUVELE9BQU87UUFBQzlJLEtBQUssRUFBRSxDQUFDQSxLQUFLO01BQUMsQ0FBQztJQUN6QjtFQUFDO0FBQUEsRUFqSW1DK0kscUJBQUsiLCJpZ25vcmVMaXN0IjpbXX0=
@@ -2,6 +2,7 @@
2
2
  import { DataFilterExtension } from '@deck.gl/extensions';
3
3
  import React from 'react';
4
4
  import * as arrow from 'apache-arrow';
5
+ import { FindDefaultLayerPropsReturnValue } from './layer-utils';
5
6
  import { DataContainerInterface, DomainQuantiles } from '@kepler.gl/utils';
6
7
  import { Datasets, GpuFilter, KeplerTable } from '@kepler.gl/table';
7
8
  import { AggregatedBin, ColorRange, ColorUI, Field, Filter, GetVisChannelScaleReturnType, LayerVisConfigSettings, MapState, AnimationConfig, KeplerLayer, LayerBaseConfig, LayerColumns, LayerColumn, ColumnPairs, ColumnLabels, SupportedColumnMode, FieldPair, NestedPartial, RGBColor, ValueOf, VisualChannel, VisualChannels, VisualChannelDomain, VisualChannelField, VisualChannelScale } from '@kepler.gl/types';
@@ -54,10 +55,6 @@ export declare type UpdateTrigger = {
54
55
  [key: string]: any;
55
56
  };
56
57
  export declare type LayerBounds = [number, number, number, number];
57
- export declare type FindDefaultLayerPropsReturnValue = {
58
- props: any[];
59
- foundLayers?: any[];
60
- };
61
58
  /**
62
59
  * Approx. number of points to sample in a large data set
63
60
  */
@@ -193,8 +190,12 @@ declare class Layer implements KeplerLayer {
193
190
  * When change layer type, try to copy over layer configs as much as possible
194
191
  * @param configToCopy - config to copy over
195
192
  * @param visConfigSettings - visConfig settings of config to copy
193
+ * @param datasets - current datasets.
194
+ * @param defaultLayerProps - default layer creation configurations for current layer and datasets.
196
195
  */
197
- assignConfigToLayer(configToCopy: any, visConfigSettings: any): void;
196
+ assignConfigToLayer(configToCopy: LayerBaseConfig & Partial<LayerColorConfig & LayerSizeConfig>, visConfigSettings: {
197
+ [key: string]: ValueOf<LayerVisConfigSettings>;
198
+ }, datasets?: Datasets, defaultLayerProps?: FindDefaultLayerPropsReturnValue | null): void;
198
199
  copyLayerConfig(currentConfig: any, configToCopy: any, { shallowCopy, notToCopy }?: {
199
200
  shallowCopy?: string[];
200
201
  notToCopy?: string[];
@@ -237,7 +238,7 @@ declare class Layer implements KeplerLayer {
237
238
  isValidToSave(): boolean;
238
239
  shouldRenderLayer(data: any): boolean;
239
240
  getColorScale(colorScale: string, colorDomain: VisualChannelDomain, colorRange: ColorRange): GetVisChannelScaleReturnType;
240
- accessVSFieldValue(field: any, indexKey: any): (field: any, d: any) => any;
241
+ accessVSFieldValue(_field: any, _indexKey: any): (field: any, d: any) => any;
241
242
  /**
242
243
  * Mapping from visual channels to deck.gl accesors
243
244
  * @param param Parameters