@kepler.gl/deckgl-layers 3.3.0-alpha.5 → 3.3.0-alpha.6

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 (184) hide show
  1. package/dist/cjs/3d-building-layer/3d-building-layer.js +66 -0
  2. package/dist/cjs/3d-building-layer/3d-building-utils.js +166 -0
  3. package/dist/cjs/3d-building-layer/types.js +6 -0
  4. package/dist/cjs/cluster-layer/cluster-layer.js +292 -0
  5. package/dist/cjs/column-layer/enhanced-column-layer.js +160 -0
  6. package/dist/{deckgl-extensions → cjs/deckgl-extensions}/filter-arrow-layer.js +1 -1
  7. package/dist/cjs/deckgl-extensions/filter-shader-module.js +26 -0
  8. package/dist/cjs/globe/atmosphere-layer.js +220 -0
  9. package/dist/cjs/globe/enhanced-multi-icon-layer.js +63 -0
  10. package/dist/cjs/globe/globe-depth-disk-layer.js +145 -0
  11. package/dist/cjs/globe/globe-layers.js +569 -0
  12. package/dist/cjs/globe/globe-stars-layer.js +69 -0
  13. package/dist/cjs/globe/globe-view.js +407 -0
  14. package/dist/{globe → cjs/globe}/index.js +1 -1
  15. package/dist/cjs/globe/mvt-label-layer.js +190 -0
  16. package/dist/cjs/grid-layer/enhanced-cpu-grid-layer.js +116 -0
  17. package/dist/cjs/hexagon-layer/enhanced-hexagon-layer.js +134 -0
  18. package/dist/{index.js → cjs/index.js} +1 -1
  19. package/dist/cjs/layer-utils/aggregation-utils.js +181 -0
  20. package/dist/cjs/layer-utils/cluster-utils.js +93 -0
  21. package/dist/cjs/layer-utils/cpu-aggregator.js +798 -0
  22. package/dist/cjs/layer-utils/globe-cell-utils.js +173 -0
  23. package/dist/cjs/layer-utils/shader-utils.js +38 -0
  24. package/dist/cjs/line-layer/line-layer.js +95 -0
  25. package/dist/cjs/raster/images.js +271 -0
  26. package/dist/cjs/raster/pipeline-validation-patch.js +101 -0
  27. package/dist/cjs/raster/raster-layer/raster-layer-shaders.js +163 -0
  28. package/dist/cjs/raster/raster-layer/raster-layer-webgl1.fs.js +10 -0
  29. package/dist/cjs/raster/raster-layer/raster-layer-webgl1.vs.js +10 -0
  30. package/dist/cjs/raster/raster-layer/raster-layer-webgl2.fs.js +10 -0
  31. package/dist/cjs/raster/raster-layer/raster-layer-webgl2.vs.js +10 -0
  32. package/dist/cjs/raster/raster-layer/raster-layer.js +287 -0
  33. package/dist/cjs/raster/raster-mesh-layer/matrix.js +18 -0
  34. package/dist/cjs/raster/raster-mesh-layer/raster-mesh-layer-shaders.js +38 -0
  35. package/dist/cjs/raster/raster-mesh-layer/raster-mesh-layer-webgl1.fs.js +10 -0
  36. package/dist/cjs/raster/raster-mesh-layer/raster-mesh-layer-webgl1.vs.js +10 -0
  37. package/dist/cjs/raster/raster-mesh-layer/raster-mesh-layer-webgl2.fs.js +10 -0
  38. package/dist/cjs/raster/raster-mesh-layer/raster-mesh-layer-webgl2.vs.js +10 -0
  39. package/dist/cjs/raster/raster-mesh-layer/raster-mesh-layer.js +321 -0
  40. package/dist/cjs/raster/raster-processing-uniforms.js +124 -0
  41. package/dist/cjs/raster/types.js +6 -0
  42. package/dist/cjs/raster/util.js +139 -0
  43. package/dist/cjs/raster/webgl/color/colormap.js +45 -0
  44. package/dist/cjs/raster/webgl/color/filter.js +58 -0
  45. package/dist/cjs/raster/webgl/color/gamma-contrast.js +68 -0
  46. package/dist/cjs/raster/webgl/color/linear-rescale.js +35 -0
  47. package/dist/cjs/raster/webgl/color/saturation.js +42 -0
  48. package/dist/cjs/raster/webgl/color/sigmoidal-contrast.js +68 -0
  49. package/dist/{raster → cjs/raster}/webgl/index.js +1 -1
  50. package/dist/cjs/raster/webgl/pansharpen/pansharpen-brovey.js +46 -0
  51. package/dist/cjs/raster/webgl/spectral-indices/evi.js +26 -0
  52. package/dist/cjs/raster/webgl/spectral-indices/msavi.js +25 -0
  53. package/dist/cjs/raster/webgl/spectral-indices/normalized-difference.js +19 -0
  54. package/dist/cjs/raster/webgl/spectral-indices/savi.js +21 -0
  55. package/dist/cjs/raster/webgl/texture/combine-bands.js +65 -0
  56. package/dist/cjs/raster/webgl/texture/mask.js +50 -0
  57. package/dist/cjs/raster/webgl/texture/reorder-bands.js +72 -0
  58. package/dist/cjs/raster/webgl/texture/rgba-image.js +34 -0
  59. package/dist/cjs/raster/webgl/types.js +6 -0
  60. package/dist/cjs/svg-icon-layer/scatterplot-icon-layer.js +88 -0
  61. package/dist/cjs/svg-icon-layer/svg-icon-layer.js +104 -0
  62. package/dist/cjs/wms/wms-layer.js +624 -0
  63. package/dist/esm/3d-building-layer/3d-building-layer.js +62 -0
  64. package/dist/esm/3d-building-layer/3d-building-utils.js +157 -0
  65. package/dist/esm/3d-building-layer/types.js +3 -0
  66. package/dist/esm/cluster-layer/cluster-layer.js +286 -0
  67. package/dist/esm/column-layer/enhanced-column-layer.js +156 -0
  68. package/dist/esm/deckgl-extensions/filter-arrow-layer.js +64 -0
  69. package/dist/esm/deckgl-extensions/filter-shader-module.js +20 -0
  70. package/dist/esm/globe/atmosphere-layer.js +214 -0
  71. package/dist/esm/globe/enhanced-multi-icon-layer.js +60 -0
  72. package/dist/esm/globe/globe-depth-disk-layer.js +140 -0
  73. package/dist/esm/globe/globe-layers.js +561 -0
  74. package/dist/esm/globe/globe-stars-layer.js +63 -0
  75. package/dist/esm/globe/globe-view.js +401 -0
  76. package/dist/esm/globe/index.js +26 -0
  77. package/dist/esm/globe/mvt-label-layer.js +187 -0
  78. package/dist/esm/grid-layer/enhanced-cpu-grid-layer.js +112 -0
  79. package/dist/esm/hexagon-layer/enhanced-hexagon-layer.js +130 -0
  80. package/dist/esm/index.js +22 -0
  81. package/dist/esm/layer-utils/aggregation-utils.js +172 -0
  82. package/dist/esm/layer-utils/cluster-utils.js +86 -0
  83. package/dist/esm/layer-utils/cpu-aggregator.js +788 -0
  84. package/dist/esm/layer-utils/globe-cell-utils.js +167 -0
  85. package/dist/esm/layer-utils/shader-utils.js +32 -0
  86. package/dist/esm/line-layer/line-layer.js +91 -0
  87. package/dist/esm/raster/images.js +267 -0
  88. package/dist/esm/raster/pipeline-validation-patch.js +94 -0
  89. package/dist/esm/raster/raster-layer/raster-layer-shaders.js +153 -0
  90. package/dist/esm/raster/raster-layer/raster-layer-webgl1.fs.js +5 -0
  91. package/dist/esm/raster/raster-layer/raster-layer-webgl1.vs.js +5 -0
  92. package/dist/esm/raster/raster-layer/raster-layer-webgl2.fs.js +5 -0
  93. package/dist/esm/raster/raster-layer/raster-layer-webgl2.vs.js +5 -0
  94. package/dist/esm/raster/raster-layer/raster-layer.js +283 -0
  95. package/dist/esm/raster/raster-mesh-layer/matrix.js +12 -0
  96. package/dist/esm/raster/raster-mesh-layer/raster-mesh-layer-shaders.js +30 -0
  97. package/dist/esm/raster/raster-mesh-layer/raster-mesh-layer-webgl1.fs.js +5 -0
  98. package/dist/esm/raster/raster-mesh-layer/raster-mesh-layer-webgl1.vs.js +5 -0
  99. package/dist/esm/raster/raster-mesh-layer/raster-mesh-layer-webgl2.fs.js +5 -0
  100. package/dist/esm/raster/raster-mesh-layer/raster-mesh-layer-webgl2.vs.js +5 -0
  101. package/dist/esm/raster/raster-mesh-layer/raster-mesh-layer.js +318 -0
  102. package/dist/esm/raster/raster-processing-uniforms.js +118 -0
  103. package/dist/esm/raster/types.js +3 -0
  104. package/dist/esm/raster/util.js +134 -0
  105. package/dist/esm/raster/webgl/color/colormap.js +39 -0
  106. package/dist/esm/raster/webgl/color/filter.js +52 -0
  107. package/dist/esm/raster/webgl/color/gamma-contrast.js +62 -0
  108. package/dist/esm/raster/webgl/color/linear-rescale.js +29 -0
  109. package/dist/esm/raster/webgl/color/saturation.js +36 -0
  110. package/dist/esm/raster/webgl/color/sigmoidal-contrast.js +62 -0
  111. package/dist/esm/raster/webgl/index.js +26 -0
  112. package/dist/esm/raster/webgl/pansharpen/pansharpen-brovey.js +40 -0
  113. package/dist/esm/raster/webgl/spectral-indices/evi.js +20 -0
  114. package/dist/esm/raster/webgl/spectral-indices/msavi.js +19 -0
  115. package/dist/esm/raster/webgl/spectral-indices/normalized-difference.js +13 -0
  116. package/dist/esm/raster/webgl/spectral-indices/savi.js +15 -0
  117. package/dist/esm/raster/webgl/texture/combine-bands.js +58 -0
  118. package/dist/esm/raster/webgl/texture/mask.js +44 -0
  119. package/dist/esm/raster/webgl/texture/reorder-bands.js +65 -0
  120. package/dist/esm/raster/webgl/texture/rgba-image.js +28 -0
  121. package/dist/esm/raster/webgl/types.js +3 -0
  122. package/dist/esm/svg-icon-layer/scatterplot-icon-layer.js +84 -0
  123. package/dist/esm/svg-icon-layer/svg-icon-layer.js +101 -0
  124. package/dist/esm/wms/wms-layer.js +619 -0
  125. package/dist/wms/wms-layer.d.ts +8 -0
  126. package/package.json +17 -8
  127. package/dist/3d-building-layer/3d-building-layer.js +0 -66
  128. package/dist/3d-building-layer/3d-building-utils.js +0 -166
  129. package/dist/3d-building-layer/types.js +0 -6
  130. package/dist/cluster-layer/cluster-layer.js +0 -292
  131. package/dist/column-layer/enhanced-column-layer.js +0 -160
  132. package/dist/deckgl-extensions/filter-shader-module.js +0 -26
  133. package/dist/globe/atmosphere-layer.js +0 -220
  134. package/dist/globe/enhanced-multi-icon-layer.js +0 -63
  135. package/dist/globe/globe-depth-disk-layer.js +0 -145
  136. package/dist/globe/globe-layers.js +0 -569
  137. package/dist/globe/globe-stars-layer.js +0 -69
  138. package/dist/globe/globe-view.js +0 -404
  139. package/dist/globe/mvt-label-layer.js +0 -190
  140. package/dist/grid-layer/enhanced-cpu-grid-layer.js +0 -116
  141. package/dist/hexagon-layer/enhanced-hexagon-layer.js +0 -134
  142. package/dist/layer-utils/aggregation-utils.js +0 -181
  143. package/dist/layer-utils/cluster-utils.js +0 -93
  144. package/dist/layer-utils/cpu-aggregator.js +0 -798
  145. package/dist/layer-utils/globe-cell-utils.js +0 -173
  146. package/dist/layer-utils/shader-utils.js +0 -38
  147. package/dist/line-layer/line-layer.js +0 -95
  148. package/dist/raster/images.js +0 -271
  149. package/dist/raster/pipeline-validation-patch.js +0 -101
  150. package/dist/raster/raster-layer/raster-layer-shaders.js +0 -163
  151. package/dist/raster/raster-layer/raster-layer-webgl1.fs.js +0 -10
  152. package/dist/raster/raster-layer/raster-layer-webgl1.vs.js +0 -10
  153. package/dist/raster/raster-layer/raster-layer-webgl2.fs.js +0 -10
  154. package/dist/raster/raster-layer/raster-layer-webgl2.vs.js +0 -10
  155. package/dist/raster/raster-layer/raster-layer.js +0 -287
  156. package/dist/raster/raster-mesh-layer/matrix.js +0 -18
  157. package/dist/raster/raster-mesh-layer/raster-mesh-layer-shaders.js +0 -38
  158. package/dist/raster/raster-mesh-layer/raster-mesh-layer-webgl1.fs.js +0 -10
  159. package/dist/raster/raster-mesh-layer/raster-mesh-layer-webgl1.vs.js +0 -10
  160. package/dist/raster/raster-mesh-layer/raster-mesh-layer-webgl2.fs.js +0 -10
  161. package/dist/raster/raster-mesh-layer/raster-mesh-layer-webgl2.vs.js +0 -10
  162. package/dist/raster/raster-mesh-layer/raster-mesh-layer.js +0 -321
  163. package/dist/raster/raster-processing-uniforms.js +0 -124
  164. package/dist/raster/types.js +0 -6
  165. package/dist/raster/util.js +0 -139
  166. package/dist/raster/webgl/color/colormap.js +0 -45
  167. package/dist/raster/webgl/color/filter.js +0 -58
  168. package/dist/raster/webgl/color/gamma-contrast.js +0 -68
  169. package/dist/raster/webgl/color/linear-rescale.js +0 -35
  170. package/dist/raster/webgl/color/saturation.js +0 -42
  171. package/dist/raster/webgl/color/sigmoidal-contrast.js +0 -68
  172. package/dist/raster/webgl/pansharpen/pansharpen-brovey.js +0 -46
  173. package/dist/raster/webgl/spectral-indices/evi.js +0 -26
  174. package/dist/raster/webgl/spectral-indices/msavi.js +0 -25
  175. package/dist/raster/webgl/spectral-indices/normalized-difference.js +0 -19
  176. package/dist/raster/webgl/spectral-indices/savi.js +0 -21
  177. package/dist/raster/webgl/texture/combine-bands.js +0 -65
  178. package/dist/raster/webgl/texture/mask.js +0 -50
  179. package/dist/raster/webgl/texture/reorder-bands.js +0 -72
  180. package/dist/raster/webgl/texture/rgba-image.js +0 -34
  181. package/dist/raster/webgl/types.js +0 -6
  182. package/dist/svg-icon-layer/scatterplot-icon-layer.js +0 -88
  183. package/dist/svg-icon-layer/svg-icon-layer.js +0 -104
  184. package/dist/wms/wms-layer.js +0 -594
@@ -0,0 +1,160 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports["default"] = void 0;
8
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
9
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
10
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
11
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
12
+ var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
13
+ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
14
+ var _get2 = _interopRequireDefault(require("@babel/runtime/helpers/get"));
15
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
16
+ var _layers = require("@deck.gl/layers");
17
+ var _core = require("@deck.gl/core");
18
+ var _ = require("../");
19
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
20
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
21
+ function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2["default"])(o), (0, _possibleConstructorReturn2["default"])(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2["default"])(t).constructor) : o.apply(t, e)); }
22
+ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
23
+ function _superPropGet(t, o, e, r) { var p = (0, _get2["default"])((0, _getPrototypeOf2["default"])(1 & r ? t.prototype : t), o, e); return 2 & r && "function" == typeof p ? function (t) { return p.apply(e, t); } : p; } // SPDX-License-Identifier: MIT
24
+ // Copyright contributors to the kepler.gl project
25
+ // deck.gl 9 / luma 9 sets custom uniforms via UBO-backed shader modules (Model has
26
+ // no setUniforms). This module exposes the globe-mode flag to the shader.
27
+ var globeModeUniforms = {
28
+ name: 'globeMode',
29
+ vs: "layout(std140) uniform globeModeUniforms {\n float globeMode;\n} globeModeProps;\n",
30
+ uniformTypes: {
31
+ globeMode: 'f32'
32
+ }
33
+ };
34
+ function addInstanceCoverage(vs) {
35
+ var addDecl = (0, _.editShader)(vs, 'hexagon cell vs add instance 1', 'in vec3 instancePickingColors;', "in vec3 instancePickingColors;\n in float instanceCoverage;");
36
+ return (0, _.editShader)(addDecl, 'hexagon cell vs add instance 2', 'float dotRadius = column.radius * column.coverage * shouldRender;', 'float dotRadius = column.radius * column.coverage * instanceCoverage * shouldRender;');
37
+ }
38
+ function addGlobeScaling(vs) {
39
+ return (0, _.editShader)(vs, 'hexagon cell vs globe scale mod', 'vec2 offset = (rotationMatrix * positions.xy * strokeOffsetRatio + column.offset) * dotRadius;', "float radiusGlobeMod = globeModeProps.globeMode > 0.5 ? sin((90.0 - abs(geometry.worldPosition.y)) * PI / 180.0) * PI : 1.0;\n vec2 offset = (rotationMatrix * positions.xy * strokeOffsetRatio + column.offset) * dotRadius * radiusGlobeMod;");
40
+ }
41
+ var EnhancedColumnLayer = /*#__PURE__*/function (_ColumnLayer) {
42
+ function EnhancedColumnLayer() {
43
+ (0, _classCallCheck2["default"])(this, EnhancedColumnLayer);
44
+ return _callSuper(this, EnhancedColumnLayer, arguments);
45
+ }
46
+ (0, _inherits2["default"])(EnhancedColumnLayer, _ColumnLayer);
47
+ return (0, _createClass2["default"])(EnhancedColumnLayer, [{
48
+ key: "getShaders",
49
+ value: function getShaders() {
50
+ var shaders = _superPropGet(EnhancedColumnLayer, "getShaders", this, 3)([]);
51
+ var vs = addGlobeScaling(addInstanceCoverage(shaders.vs));
52
+ return _objectSpread(_objectSpread({}, shaders), {}, {
53
+ vs: vs,
54
+ modules: [].concat((0, _toConsumableArray2["default"])(shaders.modules || []), [globeModeUniforms])
55
+ });
56
+ }
57
+ }, {
58
+ key: "initializeState",
59
+ value: function initializeState() {
60
+ var _this$getAttributeMan;
61
+ _superPropGet(EnhancedColumnLayer, "initializeState", this, 3)([]);
62
+ (_this$getAttributeMan = this.getAttributeManager()) === null || _this$getAttributeMan === void 0 || _this$getAttributeMan.addInstanced({
63
+ instanceCoverage: {
64
+ size: 1,
65
+ accessor: 'getCoverage'
66
+ }
67
+ });
68
+ }
69
+ }, {
70
+ key: "draw",
71
+ value: function draw(_ref) {
72
+ var _uniforms = _ref.uniforms;
73
+ var _this$props = this.props,
74
+ lineWidthUnits = _this$props.lineWidthUnits,
75
+ lineWidthScale = _this$props.lineWidthScale,
76
+ lineWidthMinPixels = _this$props.lineWidthMinPixels,
77
+ lineWidthMaxPixels = _this$props.lineWidthMaxPixels,
78
+ radiusUnits = _this$props.radiusUnits,
79
+ elevationScale = _this$props.elevationScale,
80
+ extruded = _this$props.extruded,
81
+ filled = _this$props.filled,
82
+ stroked = _this$props.stroked,
83
+ strokeOpacity = _this$props.strokeOpacity,
84
+ wireframe = _this$props.wireframe,
85
+ offset = _this$props.offset,
86
+ coverage = _this$props.coverage,
87
+ radius = _this$props.radius,
88
+ angle = _this$props.angle;
89
+ var fillModel = this.state.fillModel;
90
+ var wireframeModel = this.state.wireframeModel;
91
+ var _this$state = this.state,
92
+ fillVertexCount = _this$state.fillVertexCount,
93
+ edgeDistance = _this$state.edgeDistance;
94
+ var globeMode = this.context.viewport.resolution ? 1.0 : 0.0;
95
+ var columnProps = {
96
+ radius: radius,
97
+ angle: angle / 180 * Math.PI,
98
+ offset: offset,
99
+ extruded: extruded,
100
+ stroked: stroked,
101
+ coverage: coverage,
102
+ elevationScale: elevationScale,
103
+ edgeDistance: edgeDistance,
104
+ radiusUnits: _core.UNIT[radiusUnits],
105
+ widthUnits: _core.UNIT[lineWidthUnits],
106
+ widthScale: lineWidthScale,
107
+ widthMinPixels: lineWidthMinPixels,
108
+ widthMaxPixels: lineWidthMaxPixels
109
+ };
110
+ if (extruded && wireframe && wireframeModel) {
111
+ wireframeModel.shaderInputs.setProps({
112
+ column: _objectSpread(_objectSpread({}, columnProps), {}, {
113
+ isStroke: true
114
+ }),
115
+ globeMode: {
116
+ globeMode: globeMode
117
+ }
118
+ });
119
+ wireframeModel.draw(this.context.renderPass);
120
+ }
121
+ if (filled && fillModel) {
122
+ fillModel.setVertexCount(fillVertexCount);
123
+ fillModel.shaderInputs.setProps({
124
+ column: _objectSpread(_objectSpread({}, columnProps), {}, {
125
+ isStroke: false
126
+ }),
127
+ globeMode: {
128
+ globeMode: globeMode
129
+ }
130
+ });
131
+ fillModel.draw(this.context.renderPass);
132
+ }
133
+ if (!extruded && stroked && fillModel) {
134
+ fillModel.setVertexCount(fillVertexCount * 2 / 3);
135
+ fillModel.shaderInputs.setProps({
136
+ column: _objectSpread(_objectSpread({}, columnProps), {}, {
137
+ isStroke: true
138
+ }),
139
+ layer: {
140
+ opacity: strokeOpacity !== null && strokeOpacity !== void 0 ? strokeOpacity : this.props.opacity
141
+ },
142
+ globeMode: {
143
+ globeMode: globeMode
144
+ }
145
+ });
146
+ fillModel.draw(this.context.renderPass);
147
+ // Restore original vertex count and opacity so subsequent passes are unaffected
148
+ fillModel.setVertexCount(fillVertexCount);
149
+ fillModel.shaderInputs.setProps({
150
+ layer: {
151
+ opacity: this.props.opacity
152
+ }
153
+ });
154
+ }
155
+ }
156
+ }]);
157
+ }(_layers.ColumnLayer);
158
+ EnhancedColumnLayer.layerName = 'EnhancedColumnLayer';
159
+ var _default = exports["default"] = EnhancedColumnLayer;
160
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbGF5ZXJzIiwicmVxdWlyZSIsIl9jb3JlIiwiXyIsIm93bktleXMiLCJlIiwiciIsInQiLCJPYmplY3QiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwibyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiX2NhbGxTdXBlciIsIl9nZXRQcm90b3R5cGVPZjIiLCJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjIiLCJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwiUmVmbGVjdCIsImNvbnN0cnVjdCIsImNvbnN0cnVjdG9yIiwiQm9vbGVhbiIsInByb3RvdHlwZSIsInZhbHVlT2YiLCJjYWxsIiwiX3N1cGVyUHJvcEdldCIsInAiLCJfZ2V0MiIsImdsb2JlTW9kZVVuaWZvcm1zIiwibmFtZSIsInZzIiwidW5pZm9ybVR5cGVzIiwiZ2xvYmVNb2RlIiwiYWRkSW5zdGFuY2VDb3ZlcmFnZSIsImFkZERlY2wiLCJlZGl0U2hhZGVyIiwiYWRkR2xvYmVTY2FsaW5nIiwiRW5oYW5jZWRDb2x1bW5MYXllciIsIl9Db2x1bW5MYXllciIsIl9jbGFzc0NhbGxDaGVjazIiLCJfaW5oZXJpdHMyIiwiX2NyZWF0ZUNsYXNzMiIsImtleSIsInZhbHVlIiwiZ2V0U2hhZGVycyIsInNoYWRlcnMiLCJtb2R1bGVzIiwiY29uY2F0IiwiX3RvQ29uc3VtYWJsZUFycmF5MiIsImluaXRpYWxpemVTdGF0ZSIsIl90aGlzJGdldEF0dHJpYnV0ZU1hbiIsImdldEF0dHJpYnV0ZU1hbmFnZXIiLCJhZGRJbnN0YW5jZWQiLCJpbnN0YW5jZUNvdmVyYWdlIiwic2l6ZSIsImFjY2Vzc29yIiwiZHJhdyIsIl9yZWYiLCJfdW5pZm9ybXMiLCJ1bmlmb3JtcyIsIl90aGlzJHByb3BzIiwicHJvcHMiLCJsaW5lV2lkdGhVbml0cyIsImxpbmVXaWR0aFNjYWxlIiwibGluZVdpZHRoTWluUGl4ZWxzIiwibGluZVdpZHRoTWF4UGl4ZWxzIiwicmFkaXVzVW5pdHMiLCJlbGV2YXRpb25TY2FsZSIsImV4dHJ1ZGVkIiwiZmlsbGVkIiwic3Ryb2tlZCIsInN0cm9rZU9wYWNpdHkiLCJ3aXJlZnJhbWUiLCJvZmZzZXQiLCJjb3ZlcmFnZSIsInJhZGl1cyIsImFuZ2xlIiwiZmlsbE1vZGVsIiwic3RhdGUiLCJ3aXJlZnJhbWVNb2RlbCIsIl90aGlzJHN0YXRlIiwiZmlsbFZlcnRleENvdW50IiwiZWRnZURpc3RhbmNlIiwiY29udGV4dCIsInZpZXdwb3J0IiwicmVzb2x1dGlvbiIsImNvbHVtblByb3BzIiwiTWF0aCIsIlBJIiwiVU5JVCIsIndpZHRoVW5pdHMiLCJ3aWR0aFNjYWxlIiwid2lkdGhNaW5QaXhlbHMiLCJ3aWR0aE1heFBpeGVscyIsInNoYWRlcklucHV0cyIsInNldFByb3BzIiwiY29sdW1uIiwiaXNTdHJva2UiLCJyZW5kZXJQYXNzIiwic2V0VmVydGV4Q291bnQiLCJsYXllciIsIm9wYWNpdHkiLCJDb2x1bW5MYXllciIsImxheWVyTmFtZSIsIl9kZWZhdWx0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb2x1bW4tbGF5ZXIvZW5oYW5jZWQtY29sdW1uLWxheWVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCB7Q29sdW1uTGF5ZXIsIENvbHVtbkxheWVyUHJvcHN9IGZyb20gJ0BkZWNrLmdsL2xheWVycyc7XG5pbXBvcnQge1VOSVR9IGZyb20gJ0BkZWNrLmdsL2NvcmUnO1xuXG5pbXBvcnQge2VkaXRTaGFkZXJ9IGZyb20gJy4uLyc7XG5cbi8vIGRlY2suZ2wgOSAvIGx1bWEgOSBzZXRzIGN1c3RvbSB1bmlmb3JtcyB2aWEgVUJPLWJhY2tlZCBzaGFkZXIgbW9kdWxlcyAoTW9kZWwgaGFzXG4vLyBubyBzZXRVbmlmb3JtcykuIFRoaXMgbW9kdWxlIGV4cG9zZXMgdGhlIGdsb2JlLW1vZGUgZmxhZyB0byB0aGUgc2hhZGVyLlxuY29uc3QgZ2xvYmVNb2RlVW5pZm9ybXMgPSB7XG4gIG5hbWU6ICdnbG9iZU1vZGUnLFxuICB2czogYGxheW91dChzdGQxNDApIHVuaWZvcm0gZ2xvYmVNb2RlVW5pZm9ybXMge1xuICBmbG9hdCBnbG9iZU1vZGU7XG59IGdsb2JlTW9kZVByb3BzO1xuYCxcbiAgdW5pZm9ybVR5cGVzOiB7XG4gICAgZ2xvYmVNb2RlOiAnZjMyJ1xuICB9XG59IGFzIGNvbnN0O1xuXG5mdW5jdGlvbiBhZGRJbnN0YW5jZUNvdmVyYWdlKHZzOiBzdHJpbmcpIHtcbiAgY29uc3QgYWRkRGVjbCA9IGVkaXRTaGFkZXIoXG4gICAgdnMsXG4gICAgJ2hleGFnb24gY2VsbCB2cyBhZGQgaW5zdGFuY2UgMScsXG4gICAgJ2luIHZlYzMgaW5zdGFuY2VQaWNraW5nQ29sb3JzOycsXG4gICAgYGluIHZlYzMgaW5zdGFuY2VQaWNraW5nQ29sb3JzO1xuICAgICBpbiBmbG9hdCBpbnN0YW5jZUNvdmVyYWdlO2BcbiAgKTtcblxuICByZXR1cm4gZWRpdFNoYWRlcihcbiAgICBhZGREZWNsLFxuICAgICdoZXhhZ29uIGNlbGwgdnMgYWRkIGluc3RhbmNlIDInLFxuICAgICdmbG9hdCBkb3RSYWRpdXMgPSBjb2x1bW4ucmFkaXVzICogY29sdW1uLmNvdmVyYWdlICogc2hvdWxkUmVuZGVyOycsXG4gICAgJ2Zsb2F0IGRvdFJhZGl1cyA9IGNvbHVtbi5yYWRpdXMgKiBjb2x1bW4uY292ZXJhZ2UgKiBpbnN0YW5jZUNvdmVyYWdlICogc2hvdWxkUmVuZGVyOydcbiAgKTtcbn1cblxuZnVuY3Rpb24gYWRkR2xvYmVTY2FsaW5nKHZzOiBzdHJpbmcpIHtcbiAgcmV0dXJuIGVkaXRTaGFkZXIoXG4gICAgdnMsXG4gICAgJ2hleGFnb24gY2VsbCB2cyBnbG9iZSBzY2FsZSBtb2QnLFxuICAgICd2ZWMyIG9mZnNldCA9IChyb3RhdGlvbk1hdHJpeCAqIHBvc2l0aW9ucy54eSAqIHN0cm9rZU9mZnNldFJhdGlvICsgY29sdW1uLm9mZnNldCkgKiBkb3RSYWRpdXM7JyxcbiAgICBgZmxvYXQgcmFkaXVzR2xvYmVNb2QgPSBnbG9iZU1vZGVQcm9wcy5nbG9iZU1vZGUgPiAwLjUgPyBzaW4oKDkwLjAgLSBhYnMoZ2VvbWV0cnkud29ybGRQb3NpdGlvbi55KSkgKiBQSSAvIDE4MC4wKSAqIFBJIDogMS4wO1xuICAgICAgdmVjMiBvZmZzZXQgPSAocm90YXRpb25NYXRyaXggKiBwb3NpdGlvbnMueHkgKiBzdHJva2VPZmZzZXRSYXRpbyArIGNvbHVtbi5vZmZzZXQpICogZG90UmFkaXVzICogcmFkaXVzR2xvYmVNb2Q7YFxuICApO1xufVxuXG50eXBlIEVuaGFuY2VkQ29sdW1uTGF5ZXJQcm9wcyA9IENvbHVtbkxheWVyUHJvcHM8YW55PiAmIHtcbiAgc3Ryb2tlT3BhY2l0eTogbnVtYmVyO1xufTtcblxuY2xhc3MgRW5oYW5jZWRDb2x1bW5MYXllciBleHRlbmRzIENvbHVtbkxheWVyPGFueSwgRW5oYW5jZWRDb2x1bW5MYXllclByb3BzPiB7XG4gIGdldFNoYWRlcnMoKSB7XG4gICAgY29uc3Qgc2hhZGVycyA9IHN1cGVyLmdldFNoYWRlcnMoKTtcblxuICAgIGNvbnN0IHZzID0gYWRkR2xvYmVTY2FsaW5nKGFkZEluc3RhbmNlQ292ZXJhZ2Uoc2hhZGVycy52cykpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnNoYWRlcnMsXG4gICAgICB2cyxcbiAgICAgIG1vZHVsZXM6IFsuLi4oc2hhZGVycy5tb2R1bGVzIHx8IFtdKSwgZ2xvYmVNb2RlVW5pZm9ybXNdXG4gICAgfTtcbiAgfVxuXG4gIGluaXRpYWxpemVTdGF0ZSgpIHtcbiAgICBzdXBlci5pbml0aWFsaXplU3RhdGUoKTtcblxuICAgIHRoaXMuZ2V0QXR0cmlidXRlTWFuYWdlcigpPy5hZGRJbnN0YW5jZWQoe1xuICAgICAgaW5zdGFuY2VDb3ZlcmFnZToge3NpemU6IDEsIGFjY2Vzc29yOiAnZ2V0Q292ZXJhZ2UnfVxuICAgIH0pO1xuICB9XG5cbiAgZHJhdyh7dW5pZm9ybXM6IF91bmlmb3Jtc30pIHtcbiAgICBjb25zdCB7XG4gICAgICBsaW5lV2lkdGhVbml0cyxcbiAgICAgIGxpbmVXaWR0aFNjYWxlLFxuICAgICAgbGluZVdpZHRoTWluUGl4ZWxzLFxuICAgICAgbGluZVdpZHRoTWF4UGl4ZWxzLFxuICAgICAgcmFkaXVzVW5pdHMsXG4gICAgICBlbGV2YXRpb25TY2FsZSxcbiAgICAgIGV4dHJ1ZGVkLFxuICAgICAgZmlsbGVkLFxuICAgICAgc3Ryb2tlZCxcbiAgICAgIHN0cm9rZU9wYWNpdHksXG4gICAgICB3aXJlZnJhbWUsXG4gICAgICBvZmZzZXQsXG4gICAgICBjb3ZlcmFnZSxcbiAgICAgIHJhZGl1cyxcbiAgICAgIGFuZ2xlXG4gICAgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgZmlsbE1vZGVsID0gdGhpcy5zdGF0ZS5maWxsTW9kZWw7XG4gICAgY29uc3Qgd2lyZWZyYW1lTW9kZWwgPSB0aGlzLnN0YXRlLndpcmVmcmFtZU1vZGVsO1xuICAgIGNvbnN0IHtmaWxsVmVydGV4Q291bnQsIGVkZ2VEaXN0YW5jZX0gPSB0aGlzLnN0YXRlO1xuXG4gICAgY29uc3QgZ2xvYmVNb2RlID0gKHRoaXMuY29udGV4dC52aWV3cG9ydCBhcyBhbnkpLnJlc29sdXRpb24gPyAxLjAgOiAwLjA7XG5cbiAgICBjb25zdCBjb2x1bW5Qcm9wcyA9IHtcbiAgICAgIHJhZGl1cyxcbiAgICAgIGFuZ2xlOiAoYW5nbGUgLyAxODApICogTWF0aC5QSSxcbiAgICAgIG9mZnNldCxcbiAgICAgIGV4dHJ1ZGVkLFxuICAgICAgc3Ryb2tlZCxcbiAgICAgIGNvdmVyYWdlLFxuICAgICAgZWxldmF0aW9uU2NhbGUsXG4gICAgICBlZGdlRGlzdGFuY2UsXG4gICAgICByYWRpdXNVbml0czogVU5JVFtyYWRpdXNVbml0c10sXG4gICAgICB3aWR0aFVuaXRzOiBVTklUW2xpbmVXaWR0aFVuaXRzXSxcbiAgICAgIHdpZHRoU2NhbGU6IGxpbmVXaWR0aFNjYWxlLFxuICAgICAgd2lkdGhNaW5QaXhlbHM6IGxpbmVXaWR0aE1pblBpeGVscyxcbiAgICAgIHdpZHRoTWF4UGl4ZWxzOiBsaW5lV2lkdGhNYXhQaXhlbHNcbiAgICB9O1xuXG4gICAgaWYgKGV4dHJ1ZGVkICYmIHdpcmVmcmFtZSAmJiB3aXJlZnJhbWVNb2RlbCkge1xuICAgICAgd2lyZWZyYW1lTW9kZWwuc2hhZGVySW5wdXRzLnNldFByb3BzKHtcbiAgICAgICAgY29sdW1uOiB7Li4uY29sdW1uUHJvcHMsIGlzU3Ryb2tlOiB0cnVlfSxcbiAgICAgICAgZ2xvYmVNb2RlOiB7Z2xvYmVNb2RlfVxuICAgICAgfSk7XG4gICAgICB3aXJlZnJhbWVNb2RlbC5kcmF3KHRoaXMuY29udGV4dC5yZW5kZXJQYXNzKTtcbiAgICB9XG4gICAgaWYgKGZpbGxlZCAmJiBmaWxsTW9kZWwpIHtcbiAgICAgIGZpbGxNb2RlbC5zZXRWZXJ0ZXhDb3VudChmaWxsVmVydGV4Q291bnQpO1xuICAgICAgZmlsbE1vZGVsLnNoYWRlcklucHV0cy5zZXRQcm9wcyh7XG4gICAgICAgIGNvbHVtbjogey4uLmNvbHVtblByb3BzLCBpc1N0cm9rZTogZmFsc2V9LFxuICAgICAgICBnbG9iZU1vZGU6IHtnbG9iZU1vZGV9XG4gICAgICB9KTtcbiAgICAgIGZpbGxNb2RlbC5kcmF3KHRoaXMuY29udGV4dC5yZW5kZXJQYXNzKTtcbiAgICB9XG4gICAgaWYgKCFleHRydWRlZCAmJiBzdHJva2VkICYmIGZpbGxNb2RlbCkge1xuICAgICAgZmlsbE1vZGVsLnNldFZlcnRleENvdW50KChmaWxsVmVydGV4Q291bnQgKiAyKSAvIDMpO1xuICAgICAgZmlsbE1vZGVsLnNoYWRlcklucHV0cy5zZXRQcm9wcyh7XG4gICAgICAgIGNvbHVtbjogey4uLmNvbHVtblByb3BzLCBpc1N0cm9rZTogdHJ1ZX0sXG4gICAgICAgIGxheWVyOiB7b3BhY2l0eTogc3Ryb2tlT3BhY2l0eSA/PyB0aGlzLnByb3BzLm9wYWNpdHl9LFxuICAgICAgICBnbG9iZU1vZGU6IHtnbG9iZU1vZGV9XG4gICAgICB9KTtcbiAgICAgIGZpbGxNb2RlbC5kcmF3KHRoaXMuY29udGV4dC5yZW5kZXJQYXNzKTtcbiAgICAgIC8vIFJlc3RvcmUgb3JpZ2luYWwgdmVydGV4IGNvdW50IGFuZCBvcGFjaXR5IHNvIHN1YnNlcXVlbnQgcGFzc2VzIGFyZSB1bmFmZmVjdGVkXG4gICAgICBmaWxsTW9kZWwuc2V0VmVydGV4Q291bnQoZmlsbFZlcnRleENvdW50KTtcbiAgICAgIGZpbGxNb2RlbC5zaGFkZXJJbnB1dHMuc2V0UHJvcHMoe1xuICAgICAgICBsYXllcjoge29wYWNpdHk6IHRoaXMucHJvcHMub3BhY2l0eX1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuXG5FbmhhbmNlZENvbHVtbkxheWVyLmxheWVyTmFtZSA9ICdFbmhhbmNlZENvbHVtbkxheWVyJztcblxuZXhwb3J0IGRlZmF1bHQgRW5oYW5jZWRDb2x1bW5MYXllcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBR0EsSUFBQUEsT0FBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsS0FBQSxHQUFBRCxPQUFBO0FBRUEsSUFBQUUsQ0FBQSxHQUFBRixPQUFBO0FBQStCLFNBQUFHLFFBQUFDLENBQUEsRUFBQUMsQ0FBQSxRQUFBQyxDQUFBLEdBQUFDLE1BQUEsQ0FBQUMsSUFBQSxDQUFBSixDQUFBLE9BQUFHLE1BQUEsQ0FBQUUscUJBQUEsUUFBQUMsQ0FBQSxHQUFBSCxNQUFBLENBQUFFLHFCQUFBLENBQUFMLENBQUEsR0FBQUMsQ0FBQSxLQUFBSyxDQUFBLEdBQUFBLENBQUEsQ0FBQUMsTUFBQSxXQUFBTixDQUFBLFdBQUFFLE1BQUEsQ0FBQUssd0JBQUEsQ0FBQVIsQ0FBQSxFQUFBQyxDQUFBLEVBQUFRLFVBQUEsT0FBQVAsQ0FBQSxDQUFBUSxJQUFBLENBQUFDLEtBQUEsQ0FBQVQsQ0FBQSxFQUFBSSxDQUFBLFlBQUFKLENBQUE7QUFBQSxTQUFBVSxjQUFBWixDQUFBLGFBQUFDLENBQUEsTUFBQUEsQ0FBQSxHQUFBWSxTQUFBLENBQUFDLE1BQUEsRUFBQWIsQ0FBQSxVQUFBQyxDQUFBLFdBQUFXLFNBQUEsQ0FBQVosQ0FBQSxJQUFBWSxTQUFBLENBQUFaLENBQUEsUUFBQUEsQ0FBQSxPQUFBRixPQUFBLENBQUFJLE1BQUEsQ0FBQUQsQ0FBQSxPQUFBYSxPQUFBLFdBQUFkLENBQUEsUUFBQWUsZ0JBQUEsYUFBQWhCLENBQUEsRUFBQUMsQ0FBQSxFQUFBQyxDQUFBLENBQUFELENBQUEsU0FBQUUsTUFBQSxDQUFBYyx5QkFBQSxHQUFBZCxNQUFBLENBQUFlLGdCQUFBLENBQUFsQixDQUFBLEVBQUFHLE1BQUEsQ0FBQWMseUJBQUEsQ0FBQWYsQ0FBQSxLQUFBSCxPQUFBLENBQUFJLE1BQUEsQ0FBQUQsQ0FBQSxHQUFBYSxPQUFBLFdBQUFkLENBQUEsSUFBQUUsTUFBQSxDQUFBZ0IsY0FBQSxDQUFBbkIsQ0FBQSxFQUFBQyxDQUFBLEVBQUFFLE1BQUEsQ0FBQUssd0JBQUEsQ0FBQU4sQ0FBQSxFQUFBRCxDQUFBLGlCQUFBRCxDQUFBO0FBQUEsU0FBQW9CLFdBQUFsQixDQUFBLEVBQUFJLENBQUEsRUFBQU4sQ0FBQSxXQUFBTSxDQUFBLE9BQUFlLGdCQUFBLGFBQUFmLENBQUEsT0FBQWdCLDJCQUFBLGFBQUFwQixDQUFBLEVBQUFxQix5QkFBQSxLQUFBQyxPQUFBLENBQUFDLFNBQUEsQ0FBQW5CLENBQUEsRUFBQU4sQ0FBQSxZQUFBcUIsZ0JBQUEsYUFBQW5CLENBQUEsRUFBQXdCLFdBQUEsSUFBQXBCLENBQUEsQ0FBQUssS0FBQSxDQUFBVCxDQUFBLEVBQUFGLENBQUE7QUFBQSxTQUFBdUIsMEJBQUEsY0FBQXJCLENBQUEsSUFBQXlCLE9BQUEsQ0FBQUMsU0FBQSxDQUFBQyxPQUFBLENBQUFDLElBQUEsQ0FBQU4sT0FBQSxDQUFBQyxTQUFBLENBQUFFLE9BQUEsaUNBQUF6QixDQUFBLGFBQUFxQix5QkFBQSxZQUFBQSwwQkFBQSxhQUFBckIsQ0FBQTtBQUFBLFNBQUE2QixjQUFBN0IsQ0FBQSxFQUFBSSxDQUFBLEVBQUFOLENBQUEsRUFBQUMsQ0FBQSxRQUFBK0IsQ0FBQSxPQUFBQyxLQUFBLGlCQUFBWixnQkFBQSxpQkFBQXBCLENBQUEsR0FBQUMsQ0FBQSxDQUFBMEIsU0FBQSxHQUFBMUIsQ0FBQSxHQUFBSSxDQUFBLEVBQUFOLENBQUEsY0FBQUMsQ0FBQSx5QkFBQStCLENBQUEsYUFBQTlCLENBQUEsV0FBQThCLENBQUEsQ0FBQXJCLEtBQUEsQ0FBQVgsQ0FBQSxFQUFBRSxDQUFBLE9BQUE4QixDQUFBLElBTi9CO0FBQ0E7QUFPQTtBQUNBO0FBQ0EsSUFBTUUsaUJBQWlCLEdBQUc7RUFDeEJDLElBQUksRUFBRSxXQUFXO0VBQ2pCQyxFQUFFLHVGQUdIO0VBQ0NDLFlBQVksRUFBRTtJQUNaQyxTQUFTLEVBQUU7RUFDYjtBQUNGLENBQVU7QUFFVixTQUFTQyxtQkFBbUJBLENBQUNILEVBQVUsRUFBRTtFQUN2QyxJQUFNSSxPQUFPLEdBQUcsSUFBQUMsWUFBVSxFQUN4QkwsRUFBRSxFQUNGLGdDQUFnQyxFQUNoQyxnQ0FBZ0MsbUVBR2xDLENBQUM7RUFFRCxPQUFPLElBQUFLLFlBQVUsRUFDZkQsT0FBTyxFQUNQLGdDQUFnQyxFQUNoQyxtRUFBbUUsRUFDbkUsc0ZBQ0YsQ0FBQztBQUNIO0FBRUEsU0FBU0UsZUFBZUEsQ0FBQ04sRUFBVSxFQUFFO0VBQ25DLE9BQU8sSUFBQUssWUFBVSxFQUNmTCxFQUFFLEVBQ0YsaUNBQWlDLEVBQ2pDLGdHQUFnRyx1UEFHbEcsQ0FBQztBQUNIO0FBQUMsSUFNS08sbUJBQW1CLDBCQUFBQyxZQUFBO0VBQUEsU0FBQUQsb0JBQUE7SUFBQSxJQUFBRSxnQkFBQSxtQkFBQUYsbUJBQUE7SUFBQSxPQUFBdkIsVUFBQSxPQUFBdUIsbUJBQUEsRUFBQTlCLFNBQUE7RUFBQTtFQUFBLElBQUFpQyxVQUFBLGFBQUFILG1CQUFBLEVBQUFDLFlBQUE7RUFBQSxXQUFBRyxhQUFBLGFBQUFKLG1CQUFBO0lBQUFLLEdBQUE7SUFBQUMsS0FBQSxFQUN2QixTQUFBQyxVQUFVQSxDQUFBLEVBQUc7TUFDWCxJQUFNQyxPQUFPLEdBQUFwQixhQUFBLENBQUFZLG1CQUFBLDRCQUFxQjtNQUVsQyxJQUFNUCxFQUFFLEdBQUdNLGVBQWUsQ0FBQ0gsbUJBQW1CLENBQUNZLE9BQU8sQ0FBQ2YsRUFBRSxDQUFDLENBQUM7TUFFM0QsT0FBQXhCLGFBQUEsQ0FBQUEsYUFBQSxLQUNLdUMsT0FBTztRQUNWZixFQUFFLEVBQUZBLEVBQUU7UUFDRmdCLE9BQU8sS0FBQUMsTUFBQSxLQUFBQyxtQkFBQSxhQUFPSCxPQUFPLENBQUNDLE9BQU8sSUFBSSxFQUFFLElBQUdsQixpQkFBaUI7TUFBQztJQUU1RDtFQUFDO0lBQUFjLEdBQUE7SUFBQUMsS0FBQSxFQUVELFNBQUFNLGVBQWVBLENBQUEsRUFBRztNQUFBLElBQUFDLHFCQUFBO01BQ2hCekIsYUFBQSxDQUFBWSxtQkFBQTtNQUVBLENBQUFhLHFCQUFBLE9BQUksQ0FBQ0MsbUJBQW1CLENBQUMsQ0FBQyxjQUFBRCxxQkFBQSxlQUExQkEscUJBQUEsQ0FBNEJFLFlBQVksQ0FBQztRQUN2Q0MsZ0JBQWdCLEVBQUU7VUFBQ0MsSUFBSSxFQUFFLENBQUM7VUFBRUMsUUFBUSxFQUFFO1FBQWE7TUFDckQsQ0FBQyxDQUFDO0lBQ0o7RUFBQztJQUFBYixHQUFBO0lBQUFDLEtBQUEsRUFFRCxTQUFBYSxJQUFJQSxDQUFBQyxJQUFBLEVBQXdCO01BQUEsSUFBWkMsU0FBUyxHQUFBRCxJQUFBLENBQW5CRSxRQUFRO01BQ1osSUFBQUMsV0FBQSxHQWdCSSxJQUFJLENBQUNDLEtBQUs7UUFmWkMsY0FBYyxHQUFBRixXQUFBLENBQWRFLGNBQWM7UUFDZEMsY0FBYyxHQUFBSCxXQUFBLENBQWRHLGNBQWM7UUFDZEMsa0JBQWtCLEdBQUFKLFdBQUEsQ0FBbEJJLGtCQUFrQjtRQUNsQkMsa0JBQWtCLEdBQUFMLFdBQUEsQ0FBbEJLLGtCQUFrQjtRQUNsQkMsV0FBVyxHQUFBTixXQUFBLENBQVhNLFdBQVc7UUFDWEMsY0FBYyxHQUFBUCxXQUFBLENBQWRPLGNBQWM7UUFDZEMsUUFBUSxHQUFBUixXQUFBLENBQVJRLFFBQVE7UUFDUkMsTUFBTSxHQUFBVCxXQUFBLENBQU5TLE1BQU07UUFDTkMsT0FBTyxHQUFBVixXQUFBLENBQVBVLE9BQU87UUFDUEMsYUFBYSxHQUFBWCxXQUFBLENBQWJXLGFBQWE7UUFDYkMsU0FBUyxHQUFBWixXQUFBLENBQVRZLFNBQVM7UUFDVEMsTUFBTSxHQUFBYixXQUFBLENBQU5hLE1BQU07UUFDTkMsUUFBUSxHQUFBZCxXQUFBLENBQVJjLFFBQVE7UUFDUkMsTUFBTSxHQUFBZixXQUFBLENBQU5lLE1BQU07UUFDTkMsS0FBSyxHQUFBaEIsV0FBQSxDQUFMZ0IsS0FBSztNQUVQLElBQU1DLFNBQVMsR0FBRyxJQUFJLENBQUNDLEtBQUssQ0FBQ0QsU0FBUztNQUN0QyxJQUFNRSxjQUFjLEdBQUcsSUFBSSxDQUFDRCxLQUFLLENBQUNDLGNBQWM7TUFDaEQsSUFBQUMsV0FBQSxHQUF3QyxJQUFJLENBQUNGLEtBQUs7UUFBM0NHLGVBQWUsR0FBQUQsV0FBQSxDQUFmQyxlQUFlO1FBQUVDLFlBQVksR0FBQUYsV0FBQSxDQUFaRSxZQUFZO01BRXBDLElBQU1sRCxTQUFTLEdBQUksSUFBSSxDQUFDbUQsT0FBTyxDQUFDQyxRQUFRLENBQVNDLFVBQVUsR0FBRyxHQUFHLEdBQUcsR0FBRztNQUV2RSxJQUFNQyxXQUFXLEdBQUc7UUFDbEJYLE1BQU0sRUFBTkEsTUFBTTtRQUNOQyxLQUFLLEVBQUdBLEtBQUssR0FBRyxHQUFHLEdBQUlXLElBQUksQ0FBQ0MsRUFBRTtRQUM5QmYsTUFBTSxFQUFOQSxNQUFNO1FBQ05MLFFBQVEsRUFBUkEsUUFBUTtRQUNSRSxPQUFPLEVBQVBBLE9BQU87UUFDUEksUUFBUSxFQUFSQSxRQUFRO1FBQ1JQLGNBQWMsRUFBZEEsY0FBYztRQUNkZSxZQUFZLEVBQVpBLFlBQVk7UUFDWmhCLFdBQVcsRUFBRXVCLFVBQUksQ0FBQ3ZCLFdBQVcsQ0FBQztRQUM5QndCLFVBQVUsRUFBRUQsVUFBSSxDQUFDM0IsY0FBYyxDQUFDO1FBQ2hDNkIsVUFBVSxFQUFFNUIsY0FBYztRQUMxQjZCLGNBQWMsRUFBRTVCLGtCQUFrQjtRQUNsQzZCLGNBQWMsRUFBRTVCO01BQ2xCLENBQUM7TUFFRCxJQUFJRyxRQUFRLElBQUlJLFNBQVMsSUFBSU8sY0FBYyxFQUFFO1FBQzNDQSxjQUFjLENBQUNlLFlBQVksQ0FBQ0MsUUFBUSxDQUFDO1VBQ25DQyxNQUFNLEVBQUExRixhQUFBLENBQUFBLGFBQUEsS0FBTWdGLFdBQVc7WUFBRVcsUUFBUSxFQUFFO1VBQUksRUFBQztVQUN4Q2pFLFNBQVMsRUFBRTtZQUFDQSxTQUFTLEVBQVRBO1VBQVM7UUFDdkIsQ0FBQyxDQUFDO1FBQ0YrQyxjQUFjLENBQUN2QixJQUFJLENBQUMsSUFBSSxDQUFDMkIsT0FBTyxDQUFDZSxVQUFVLENBQUM7TUFDOUM7TUFDQSxJQUFJN0IsTUFBTSxJQUFJUSxTQUFTLEVBQUU7UUFDdkJBLFNBQVMsQ0FBQ3NCLGNBQWMsQ0FBQ2xCLGVBQWUsQ0FBQztRQUN6Q0osU0FBUyxDQUFDaUIsWUFBWSxDQUFDQyxRQUFRLENBQUM7VUFDOUJDLE1BQU0sRUFBQTFGLGFBQUEsQ0FBQUEsYUFBQSxLQUFNZ0YsV0FBVztZQUFFVyxRQUFRLEVBQUU7VUFBSyxFQUFDO1VBQ3pDakUsU0FBUyxFQUFFO1lBQUNBLFNBQVMsRUFBVEE7VUFBUztRQUN2QixDQUFDLENBQUM7UUFDRjZDLFNBQVMsQ0FBQ3JCLElBQUksQ0FBQyxJQUFJLENBQUMyQixPQUFPLENBQUNlLFVBQVUsQ0FBQztNQUN6QztNQUNBLElBQUksQ0FBQzlCLFFBQVEsSUFBSUUsT0FBTyxJQUFJTyxTQUFTLEVBQUU7UUFDckNBLFNBQVMsQ0FBQ3NCLGNBQWMsQ0FBRWxCLGVBQWUsR0FBRyxDQUFDLEdBQUksQ0FBQyxDQUFDO1FBQ25ESixTQUFTLENBQUNpQixZQUFZLENBQUNDLFFBQVEsQ0FBQztVQUM5QkMsTUFBTSxFQUFBMUYsYUFBQSxDQUFBQSxhQUFBLEtBQU1nRixXQUFXO1lBQUVXLFFBQVEsRUFBRTtVQUFJLEVBQUM7VUFDeENHLEtBQUssRUFBRTtZQUFDQyxPQUFPLEVBQUU5QixhQUFhLGFBQWJBLGFBQWEsY0FBYkEsYUFBYSxHQUFJLElBQUksQ0FBQ1YsS0FBSyxDQUFDd0M7VUFBTyxDQUFDO1VBQ3JEckUsU0FBUyxFQUFFO1lBQUNBLFNBQVMsRUFBVEE7VUFBUztRQUN2QixDQUFDLENBQUM7UUFDRjZDLFNBQVMsQ0FBQ3JCLElBQUksQ0FBQyxJQUFJLENBQUMyQixPQUFPLENBQUNlLFVBQVUsQ0FBQztRQUN2QztRQUNBckIsU0FBUyxDQUFDc0IsY0FBYyxDQUFDbEIsZUFBZSxDQUFDO1FBQ3pDSixTQUFTLENBQUNpQixZQUFZLENBQUNDLFFBQVEsQ0FBQztVQUM5QkssS0FBSyxFQUFFO1lBQUNDLE9BQU8sRUFBRSxJQUFJLENBQUN4QyxLQUFLLENBQUN3QztVQUFPO1FBQ3JDLENBQUMsQ0FBQztNQUNKO0lBQ0Y7RUFBQztBQUFBLEVBMUYrQkMsbUJBQVc7QUE2RjdDakUsbUJBQW1CLENBQUNrRSxTQUFTLEdBQUcscUJBQXFCO0FBQUMsSUFBQUMsUUFBQSxHQUFBQyxPQUFBLGNBRXZDcEUsbUJBQW1CIiwiaWdub3JlTGlzdCI6W119
@@ -65,4 +65,4 @@ var FilterArrowExtension = exports["default"] = /*#__PURE__*/function (_LayerExt
65
65
  }(_core.LayerExtension);
66
66
  (0, _defineProperty2["default"])(FilterArrowExtension, "defaultProps", defaultProps);
67
67
  (0, _defineProperty2["default"])(FilterArrowExtension, "extensionName", 'FilterArrowExtension');
68
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29yZSIsInJlcXVpcmUiLCJfZmlsdGVyU2hhZGVyTW9kdWxlIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9jYWxsU3VwZXIiLCJ0IiwibyIsImUiLCJfZ2V0UHJvdG90eXBlT2YyIiwiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4yIiwiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIlJlZmxlY3QiLCJjb25zdHJ1Y3QiLCJjb25zdHJ1Y3RvciIsImFwcGx5IiwiQm9vbGVhbiIsInByb3RvdHlwZSIsInZhbHVlT2YiLCJjYWxsIiwiVkFMVUVfRklMVEVSRUQiLCJkZWZhdWx0UHJvcHMiLCJnZXRGaWx0ZXJlZCIsInR5cGUiLCJ2YWx1ZSIsIkZpbHRlckFycm93RXh0ZW5zaW9uIiwiZXhwb3J0cyIsIl9MYXllckV4dGVuc2lvbiIsIl9jbGFzc0NhbGxDaGVjazIiLCJhcmd1bWVudHMiLCJfaW5oZXJpdHMyIiwiX2NyZWF0ZUNsYXNzMiIsImtleSIsImdldFNoYWRlcnMiLCJtb2R1bGVzIiwic2hhZGVyTW9kdWxlIiwiZGVmaW5lcyIsImluaXRpYWxpemVTdGF0ZSIsImF0dHJpYnV0ZU1hbmFnZXIiLCJnZXRBdHRyaWJ1dGVNYW5hZ2VyIiwiYWRkIiwiZmlsdGVyZWQiLCJzaXplIiwic3RlcE1vZGUiLCJhY2Nlc3NvciIsIkxheWVyRXh0ZW5zaW9uIiwiX2RlZmluZVByb3BlcnR5MiJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kZWNrZ2wtZXh0ZW5zaW9ucy9maWx0ZXItYXJyb3ctbGF5ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IHtMYXllciwgTGF5ZXJFeHRlbnNpb259IGZyb20gJ0BkZWNrLmdsL2NvcmUnO1xuXG5pbXBvcnQgc2hhZGVyTW9kdWxlIGZyb20gJy4vZmlsdGVyLXNoYWRlci1tb2R1bGUnO1xuXG5jb25zdCBWQUxVRV9GSUxURVJFRCA9IDE7XG5cbmNvbnN0IGRlZmF1bHRQcm9wcyA9IHtcbiAgZ2V0RmlsdGVyZWQ6IHt0eXBlOiAnYWNjZXNzb3InLCB2YWx1ZTogVkFMVUVfRklMVEVSRUR9XG59O1xuXG5leHBvcnQgdHlwZSBGaWx0ZXJBcnJvd0V4dGVuc2lvblByb3BzID0ge1xuICBnZXRGaWx0ZXJlZD86ICgpID0+IG51bWJlcjtcbn07XG5cbi8qKlxuICogRmlsdGVyQXJyb3dFeHRlbnNpb24gLSBhIGRlY2suZ2wgZXh0ZW5zaW9uIHRvIGZpbHRlciBhcnJvdyBsYXllclxuICpcbiAqIEEgc2ltcGxlIGV4dGVuc2lvbiB0byBmaWx0ZXIgYXJyb3cgbGF5ZXIgYmFzZWQgb24gdGhlIHJlc3VsdCBvZiBDUFUgZmlsdGVyZWRJbmRleCxcbiAqIHNvIHdlIGNhbiBhdm9pZCBmaWx0ZXJpbmcgb24gdGhlIHJhdyBBcnJvdyB0YWJsZSBhbmQgcmVjcmVhdGluZyBnZW9tZXRyeSBhdHRyaWJ1dGVzLlxuICogU3BlY2lmaWNhbGx5LCBhbiBhdHRyaWJ1dGUgYGZpbHRlcmVkYCBpcyBhZGRlZCB0byB0aGUgbGF5ZXIgdG8gaW5kaWNhdGUgd2hldGhlciB0aGUgZmVhdHVyZSBoYXMgYmVlbiBGaWx0ZXJlZFxuICogdGhlIHNoYWRlciBtb2R1bGUgaXMgbW9kaWZpZWQgdG8gZGlzY2FyZCB0aGUgZmVhdHVyZSBpZiBmaWx0ZXJlZCB2YWx1ZSBpcyAwXG4gKiB0aGUgYWNjZXNzb3IgZ2V0RmlsdGVyZWQgaXMgdXNlZCB0byBnZXQgdGhlIHZhbHVlIG9mIGBmaWx0ZXJlZGAgYmFzZWQgb24gdGhlIHZhbHVlIGBmaWx0ZXJlZEluZGV4YCBpbiBBcnJvd2xheWVyXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZpbHRlckFycm93RXh0ZW5zaW9uIGV4dGVuZHMgTGF5ZXJFeHRlbnNpb24ge1xuICBzdGF0aWMgZGVmYXVsdFByb3BzID0gZGVmYXVsdFByb3BzO1xuICBzdGF0aWMgZXh0ZW5zaW9uTmFtZSA9ICdGaWx0ZXJBcnJvd0V4dGVuc2lvbic7XG5cbiAgZ2V0U2hhZGVycygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbW9kdWxlczogW3NoYWRlck1vZHVsZV0sXG4gICAgICBkZWZpbmVzOiB7fVxuICAgIH07XG4gIH1cblxuICBpbml0aWFsaXplU3RhdGUodGhpczogTGF5ZXI8RmlsdGVyQXJyb3dFeHRlbnNpb25Qcm9wcz4pIHtcbiAgICBjb25zdCBhdHRyaWJ1dGVNYW5hZ2VyID0gdGhpcy5nZXRBdHRyaWJ1dGVNYW5hZ2VyKCk7XG4gICAgaWYgKGF0dHJpYnV0ZU1hbmFnZXIpIHtcbiAgICAgIGF0dHJpYnV0ZU1hbmFnZXIuYWRkKHtcbiAgICAgICAgZmlsdGVyZWQ6IHtcbiAgICAgICAgICBzaXplOiAxLFxuICAgICAgICAgIHR5cGU6ICdmbG9hdDMyJyxcbiAgICAgICAgICBzdGVwTW9kZTogJ2R5bmFtaWMnLFxuICAgICAgICAgIGFjY2Vzc29yOiAnZ2V0RmlsdGVyZWQnXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBR0EsSUFBQUEsS0FBQSxHQUFBQyxPQUFBO0FBRUEsSUFBQUMsbUJBQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUFrRCxTQUFBRyxXQUFBQyxDQUFBLEVBQUFDLENBQUEsRUFBQUMsQ0FBQSxXQUFBRCxDQUFBLE9BQUFFLGdCQUFBLGFBQUFGLENBQUEsT0FBQUcsMkJBQUEsYUFBQUosQ0FBQSxFQUFBSyx5QkFBQSxLQUFBQyxPQUFBLENBQUFDLFNBQUEsQ0FBQU4sQ0FBQSxFQUFBQyxDQUFBLFlBQUFDLGdCQUFBLGFBQUFILENBQUEsRUFBQVEsV0FBQSxJQUFBUCxDQUFBLENBQUFRLEtBQUEsQ0FBQVQsQ0FBQSxFQUFBRSxDQUFBO0FBQUEsU0FBQUcsMEJBQUEsY0FBQUwsQ0FBQSxJQUFBVSxPQUFBLENBQUFDLFNBQUEsQ0FBQUMsT0FBQSxDQUFBQyxJQUFBLENBQUFQLE9BQUEsQ0FBQUMsU0FBQSxDQUFBRyxPQUFBLGlDQUFBVixDQUFBLGFBQUFLLHlCQUFBLFlBQUFBLDBCQUFBLGFBQUFMLENBQUEsVUFMbEQ7QUFDQTtBQU1BLElBQU1jLGNBQWMsR0FBRyxDQUFDO0FBRXhCLElBQU1DLFlBQVksR0FBRztFQUNuQkMsV0FBVyxFQUFFO0lBQUNDLElBQUksRUFBRSxVQUFVO0lBQUVDLEtBQUssRUFBRUo7RUFBYztBQUN2RCxDQUFDO0FBTUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUkEsSUFTcUJLLG9CQUFvQixHQUFBQyxPQUFBLHFDQUFBQyxlQUFBO0VBQUEsU0FBQUYscUJBQUE7SUFBQSxJQUFBRyxnQkFBQSxtQkFBQUgsb0JBQUE7SUFBQSxPQUFBcEIsVUFBQSxPQUFBb0Isb0JBQUEsRUFBQUksU0FBQTtFQUFBO0VBQUEsSUFBQUMsVUFBQSxhQUFBTCxvQkFBQSxFQUFBRSxlQUFBO0VBQUEsV0FBQUksYUFBQSxhQUFBTixvQkFBQTtJQUFBTyxHQUFBO0lBQUFSLEtBQUEsRUFJdkMsU0FBQVMsVUFBVUEsQ0FBQSxFQUFHO01BQ1gsT0FBTztRQUNMQyxPQUFPLEVBQUUsQ0FBQ0MsOEJBQVksQ0FBQztRQUN2QkMsT0FBTyxFQUFFLENBQUM7TUFDWixDQUFDO0lBQ0g7RUFBQztJQUFBSixHQUFBO0lBQUFSLEtBQUEsRUFFRCxTQUFBYSxlQUFlQSxDQUFBLEVBQXlDO01BQ3RELElBQU1DLGdCQUFnQixHQUFHLElBQUksQ0FBQ0MsbUJBQW1CLENBQUMsQ0FBQztNQUNuRCxJQUFJRCxnQkFBZ0IsRUFBRTtRQUNwQkEsZ0JBQWdCLENBQUNFLEdBQUcsQ0FBQztVQUNuQkMsUUFBUSxFQUFFO1lBQ1JDLElBQUksRUFBRSxDQUFDO1lBQ1BuQixJQUFJLEVBQUUsU0FBUztZQUNmb0IsUUFBUSxFQUFFLFNBQVM7WUFDbkJDLFFBQVEsRUFBRTtVQUNaO1FBQ0YsQ0FBQyxDQUFDO01BQ0o7SUFDRjtFQUFDO0FBQUEsRUF2QitDQyxvQkFBYztBQUFBLElBQUFDLGdCQUFBLGFBQTNDckIsb0JBQW9CLGtCQUNqQkosWUFBWTtBQUFBLElBQUF5QixnQkFBQSxhQURmckIsb0JBQW9CLG1CQUVoQixzQkFBc0IiLCJpZ25vcmVMaXN0IjpbXX0=
68
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29yZSIsInJlcXVpcmUiLCJfZmlsdGVyU2hhZGVyTW9kdWxlIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9jYWxsU3VwZXIiLCJ0IiwibyIsImUiLCJfZ2V0UHJvdG90eXBlT2YyIiwiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4yIiwiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIlJlZmxlY3QiLCJjb25zdHJ1Y3QiLCJjb25zdHJ1Y3RvciIsImFwcGx5IiwiQm9vbGVhbiIsInByb3RvdHlwZSIsInZhbHVlT2YiLCJjYWxsIiwiVkFMVUVfRklMVEVSRUQiLCJkZWZhdWx0UHJvcHMiLCJnZXRGaWx0ZXJlZCIsInR5cGUiLCJ2YWx1ZSIsIkZpbHRlckFycm93RXh0ZW5zaW9uIiwiZXhwb3J0cyIsIl9MYXllckV4dGVuc2lvbiIsIl9jbGFzc0NhbGxDaGVjazIiLCJhcmd1bWVudHMiLCJfaW5oZXJpdHMyIiwiX2NyZWF0ZUNsYXNzMiIsImtleSIsImdldFNoYWRlcnMiLCJtb2R1bGVzIiwic2hhZGVyTW9kdWxlIiwiZGVmaW5lcyIsImluaXRpYWxpemVTdGF0ZSIsImF0dHJpYnV0ZU1hbmFnZXIiLCJnZXRBdHRyaWJ1dGVNYW5hZ2VyIiwiYWRkIiwiZmlsdGVyZWQiLCJzaXplIiwic3RlcE1vZGUiLCJhY2Nlc3NvciIsIkxheWVyRXh0ZW5zaW9uIiwiX2RlZmluZVByb3BlcnR5MiJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kZWNrZ2wtZXh0ZW5zaW9ucy9maWx0ZXItYXJyb3ctbGF5ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IHtMYXllciwgTGF5ZXJFeHRlbnNpb259IGZyb20gJ0BkZWNrLmdsL2NvcmUnO1xuXG5pbXBvcnQgc2hhZGVyTW9kdWxlIGZyb20gJy4vZmlsdGVyLXNoYWRlci1tb2R1bGUnO1xuXG5jb25zdCBWQUxVRV9GSUxURVJFRCA9IDE7XG5cbmNvbnN0IGRlZmF1bHRQcm9wcyA9IHtcbiAgZ2V0RmlsdGVyZWQ6IHt0eXBlOiAnYWNjZXNzb3InLCB2YWx1ZTogVkFMVUVfRklMVEVSRUR9XG59O1xuXG5leHBvcnQgdHlwZSBGaWx0ZXJBcnJvd0V4dGVuc2lvblByb3BzID0ge1xuICBnZXRGaWx0ZXJlZD86ICgpID0+IG51bWJlcjtcbn07XG5cbi8qKlxuICogRmlsdGVyQXJyb3dFeHRlbnNpb24gLSBhIGRlY2suZ2wgZXh0ZW5zaW9uIHRvIGZpbHRlciBhcnJvdyBsYXllclxuICpcbiAqIEEgc2ltcGxlIGV4dGVuc2lvbiB0byBmaWx0ZXIgYXJyb3cgbGF5ZXIgYmFzZWQgb24gdGhlIHJlc3VsdCBvZiBDUFUgZmlsdGVyZWRJbmRleCxcbiAqIHNvIHdlIGNhbiBhdm9pZCBmaWx0ZXJpbmcgb24gdGhlIHJhdyBBcnJvdyB0YWJsZSBhbmQgcmVjcmVhdGluZyBnZW9tZXRyeSBhdHRyaWJ1dGVzLlxuICogU3BlY2lmaWNhbGx5LCBhbiBhdHRyaWJ1dGUgYGZpbHRlcmVkYCBpcyBhZGRlZCB0byB0aGUgbGF5ZXIgdG8gaW5kaWNhdGUgd2hldGhlciB0aGUgZmVhdHVyZSBoYXMgYmVlbiBGaWx0ZXJlZFxuICogdGhlIHNoYWRlciBtb2R1bGUgaXMgbW9kaWZpZWQgdG8gZGlzY2FyZCB0aGUgZmVhdHVyZSBpZiBmaWx0ZXJlZCB2YWx1ZSBpcyAwXG4gKiB0aGUgYWNjZXNzb3IgZ2V0RmlsdGVyZWQgaXMgdXNlZCB0byBnZXQgdGhlIHZhbHVlIG9mIGBmaWx0ZXJlZGAgYmFzZWQgb24gdGhlIHZhbHVlIGBmaWx0ZXJlZEluZGV4YCBpbiBBcnJvd2xheWVyXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZpbHRlckFycm93RXh0ZW5zaW9uIGV4dGVuZHMgTGF5ZXJFeHRlbnNpb24ge1xuICBzdGF0aWMgZGVmYXVsdFByb3BzID0gZGVmYXVsdFByb3BzO1xuICBzdGF0aWMgZXh0ZW5zaW9uTmFtZSA9ICdGaWx0ZXJBcnJvd0V4dGVuc2lvbic7XG5cbiAgZ2V0U2hhZGVycygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbW9kdWxlczogW3NoYWRlck1vZHVsZV0sXG4gICAgICBkZWZpbmVzOiB7fVxuICAgIH07XG4gIH1cblxuICBpbml0aWFsaXplU3RhdGUodGhpczogTGF5ZXI8RmlsdGVyQXJyb3dFeHRlbnNpb25Qcm9wcz4pIHtcbiAgICBjb25zdCBhdHRyaWJ1dGVNYW5hZ2VyID0gdGhpcy5nZXRBdHRyaWJ1dGVNYW5hZ2VyKCk7XG4gICAgaWYgKGF0dHJpYnV0ZU1hbmFnZXIpIHtcbiAgICAgIGF0dHJpYnV0ZU1hbmFnZXIuYWRkKHtcbiAgICAgICAgZmlsdGVyZWQ6IHtcbiAgICAgICAgICBzaXplOiAxLFxuICAgICAgICAgIHR5cGU6ICdmbG9hdDMyJyxcbiAgICAgICAgICBzdGVwTW9kZTogJ2R5bmFtaWMnLFxuICAgICAgICAgIGFjY2Vzc29yOiAnZ2V0RmlsdGVyZWQnXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBR0EsSUFBQUEsS0FBQSxHQUFBQyxPQUFBO0FBRUEsSUFBQUMsbUJBQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUFrRCxTQUFBRyxXQUFBQyxDQUFBLEVBQUFDLENBQUEsRUFBQUMsQ0FBQSxXQUFBRCxDQUFBLE9BQUFFLGdCQUFBLGFBQUFGLENBQUEsT0FBQUcsMkJBQUEsYUFBQUosQ0FBQSxFQUFBSyx5QkFBQSxLQUFBQyxPQUFBLENBQUFDLFNBQUEsQ0FBQU4sQ0FBQSxFQUFBQyxDQUFBLFlBQUFDLGdCQUFBLGFBQUFILENBQUEsRUFBQVEsV0FBQSxJQUFBUCxDQUFBLENBQUFRLEtBQUEsQ0FBQVQsQ0FBQSxFQUFBRSxDQUFBO0FBQUEsU0FBQUcsMEJBQUEsY0FBQUwsQ0FBQSxJQUFBVSxPQUFBLENBQUFDLFNBQUEsQ0FBQUMsT0FBQSxDQUFBQyxJQUFBLENBQUFQLE9BQUEsQ0FBQUMsU0FBQSxDQUFBRyxPQUFBLGlDQUFBVixDQUFBLGFBQUFLLHlCQUFBLFlBQUFBLDBCQUFBLGFBQUFMLENBQUEsVUFMbEQ7QUFDQTtBQU1BLElBQU1jLGNBQWMsR0FBRyxDQUFDO0FBRXhCLElBQU1DLFlBQVksR0FBRztFQUNuQkMsV0FBVyxFQUFFO0lBQUNDLElBQUksRUFBRSxVQUFVO0lBQUVDLEtBQUssRUFBRUo7RUFBYztBQUN2RCxDQUFDO0FBTUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUkEsSUFTcUJLLG9CQUFvQixHQUFBQyxPQUFBLHFDQUFBQyxlQUFBO0VBQUEsU0FBQUYscUJBQUE7SUFBQSxJQUFBRyxnQkFBQSxtQkFBQUgsb0JBQUE7SUFBQSxPQUFBcEIsVUFBQSxPQUFBb0Isb0JBQUEsRUFBQUksU0FBQTtFQUFBO0VBQUEsSUFBQUMsVUFBQSxhQUFBTCxvQkFBQSxFQUFBRSxlQUFBO0VBQUEsV0FBQUksYUFBQSxhQUFBTixvQkFBQTtJQUFBTyxHQUFBO0lBQUFSLEtBQUEsRUFJdkMsU0FBQVMsVUFBVUEsQ0FBQSxFQUFHO01BQ1gsT0FBTztRQUNMQyxPQUFPLEVBQUUsQ0FBQ0MsOEJBQVksQ0FBQztRQUN2QkMsT0FBTyxFQUFFLENBQUM7TUFDWixDQUFDO0lBQ0g7RUFBQztJQUFBSixHQUFBO0lBQUFSLEtBQUEsRUFFRCxTQUFBYSxlQUFlQSxDQUFBLEVBQXlDO01BQ3RELElBQU1DLGdCQUFnQixHQUFHLElBQUksQ0FBQ0MsbUJBQW1CLENBQUMsQ0FBQztNQUNuRCxJQUFJRCxnQkFBZ0IsRUFBRTtRQUNwQkEsZ0JBQWdCLENBQUNFLEdBQUcsQ0FBQztVQUNuQkMsUUFBUSxFQUFFO1lBQ1JDLElBQUksRUFBRSxDQUFDO1lBQ1BuQixJQUFJLEVBQUUsU0FBUztZQUNmb0IsUUFBUSxFQUFFLFNBQVM7WUFDbkJDLFFBQVEsRUFBRTtVQUNaO1FBQ0YsQ0FBQyxDQUFDO01BQ0o7SUFDRjtFQUFDO0FBQUEsRUF2QitDQyxvQkFBYztBQUFBLElBQUFDLGdCQUFBLGFBQTNDckIsb0JBQW9CLGtCQUNqQkosWUFBWTtBQUFBLElBQUF5QixnQkFBQSxhQURmckIsb0JBQW9CLG1CQUVoQixzQkFBc0IiLCJpZ25vcmVMaXN0IjpbXX0=
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports["default"] = void 0;
7
+ var _core = require("@deck.gl/core");
8
+ // SPDX-License-Identifier: MIT
9
+ // Copyright contributors to the kepler.gl project
10
+
11
+ var vs = "\n in float filtered;\n";
12
+ var fs = "";
13
+ var inject = {
14
+ 'vs:#main-start': "\n if (filtered == 0.) {\n gl_Position = vec4(0.0, 0.0, 0.0, 1.0);\n return;\n }\n "
15
+ };
16
+ var _default = exports["default"] = {
17
+ name: 'filter-arrow',
18
+ dependencies: [_core.project],
19
+ vs: vs,
20
+ fs: fs,
21
+ inject: inject,
22
+ getUniforms: function getUniforms() {
23
+ return;
24
+ }
25
+ };
26
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29yZSIsInJlcXVpcmUiLCJ2cyIsImZzIiwiaW5qZWN0IiwiX2RlZmF1bHQiLCJleHBvcnRzIiwibmFtZSIsImRlcGVuZGVuY2llcyIsInByb2plY3QiLCJnZXRVbmlmb3JtcyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kZWNrZ2wtZXh0ZW5zaW9ucy9maWx0ZXItc2hhZGVyLW1vZHVsZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQge3Byb2plY3R9IGZyb20gJ0BkZWNrLmdsL2NvcmUnO1xuXG5jb25zdCB2cyA9IGBcbiAgaW4gZmxvYXQgZmlsdGVyZWQ7XG5gO1xuXG5jb25zdCBmcyA9IGBgO1xuXG5jb25zdCBpbmplY3QgPSB7XG4gICd2czojbWFpbi1zdGFydCc6IGBcbiAgICBpZiAoZmlsdGVyZWQgPT0gMC4pIHtcbiAgICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAxLjApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgYFxufTtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnZmlsdGVyLWFycm93JyxcbiAgZGVwZW5kZW5jaWVzOiBbcHJvamVjdF0sXG4gIHZzLFxuICBmcyxcbiAgaW5qZWN0LFxuICBnZXRVbmlmb3JtczogKCkgPT4ge1xuICAgIHJldHVybjtcbiAgfVxufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBR0EsSUFBQUEsS0FBQSxHQUFBQyxPQUFBO0FBSEE7QUFDQTs7QUFJQSxJQUFNQyxFQUFFLDZCQUVQO0FBRUQsSUFBTUMsRUFBRSxLQUFLO0FBRWIsSUFBTUMsTUFBTSxHQUFHO0VBQ2IsZ0JBQWdCO0FBTWxCLENBQUM7QUFBQyxJQUFBQyxRQUFBLEdBQUFDLE9BQUEsY0FFYTtFQUNiQyxJQUFJLEVBQUUsY0FBYztFQUNwQkMsWUFBWSxFQUFFLENBQUNDLGFBQU8sQ0FBQztFQUN2QlAsRUFBRSxFQUFGQSxFQUFFO0VBQ0ZDLEVBQUUsRUFBRkEsRUFBRTtFQUNGQyxNQUFNLEVBQU5BLE1BQU07RUFDTk0sV0FBVyxFQUFFLFNBQWJBLFdBQVdBLENBQUEsRUFBUTtJQUNqQjtFQUNGO0FBQ0YsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==
@@ -0,0 +1,220 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.AtmosphereSkyLayerRealistic = exports.AtmosphereLayerRealistic = void 0;
8
+ exports.atmosphereZoomFade = atmosphereZoomFade;
9
+ exports.getGlobeAtmosphereSkyLayer = exports.getGlobeAtmosphereLayer = void 0;
10
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
11
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
12
+ var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
13
+ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
14
+ var _get2 = _interopRequireDefault(require("@babel/runtime/helpers/get"));
15
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
16
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
17
+ var _core = require("@deck.gl/core");
18
+ var _meshLayers = require("@deck.gl/mesh-layers");
19
+ var _engine = require("@luma.gl/engine");
20
+ var _core2 = require("@math.gl/core");
21
+ var _sun = require("@math.gl/sun");
22
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
23
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
24
+ function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2["default"])(o), (0, _possibleConstructorReturn2["default"])(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2["default"])(t).constructor) : o.apply(t, e)); }
25
+ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
26
+ function _superPropGet(t, o, e, r) { var p = (0, _get2["default"])((0, _getPrototypeOf2["default"])(1 & r ? t.prototype : t), o, e); return 2 & r && "function" == typeof p ? function (t) { return p.apply(e, t); } : p; } // SPDX-License-Identifier: MIT
27
+ // Copyright contributors to the kepler.gl project
28
+ // Shaders ported from iTowns, based on Sean O'Neil's approach in GPU Gems 2
29
+ // SEE: https://github.com/iTowns/itowns/blob/master/src/Core/Prefab/Globe/Atmosphere.js
30
+ // SEE: https://developer.nvidia.com/gpugems/gpugems2/part-ii-shading-lighting-and-shadows/chapter-16-accurate-atmospheric-scattering
31
+ var toRadians = function toRadians(degrees) {
32
+ return degrees * Math.PI / 180;
33
+ };
34
+ var angleToVec = function angleToVec(angle) {
35
+ return [Math.sin(angle), Math.cos(angle), 0];
36
+ };
37
+ var angleToSunPos = function angleToSunPos(angle) {
38
+ return new _core2.Vector3(angleToVec(angle)).normalize();
39
+ };
40
+ var GLOBE_MESH_INNER = new _engine.SphereGeometry({
41
+ radius: 6.4e6,
42
+ nlat: 100,
43
+ nlong: 100
44
+ });
45
+ var GLOBE_MESH_OUTER = new _engine.SphereGeometry({
46
+ radius: 6.7e6,
47
+ nlat: 100,
48
+ nlong: 100
49
+ });
50
+ var lon = 0,
51
+ lat = 90;
52
+ var sunPosNow = (0, _sun.getSunPosition)(Date.now(), lat, lon);
53
+ var v3SunPosNow = angleToSunPos(sunPosNow.azimuth + Math.PI);
54
+ var NUM_SAMPLE_RAYS = 3;
55
+
56
+ /**
57
+ * Zoom range over which the atmosphere effect fades out.
58
+ * Below ATMOSPHERE_FADE_ZOOM_START the effect is fully visible.
59
+ * Above ATMOSPHERE_FADE_ZOOM_END the effect is completely hidden.
60
+ */
61
+ var ATMOSPHERE_FADE_ZOOM_START = 3.5;
62
+ var ATMOSPHERE_FADE_ZOOM_END = 6;
63
+
64
+ /**
65
+ * Convert a mapState zoom level to a [0, 1] atmosphere opacity multiplier.
66
+ * Returns 1 (fully visible) below ATMOSPHERE_FADE_ZOOM_START, smoothly
67
+ * interpolates to 0 between the two thresholds, and returns 0 above
68
+ * ATMOSPHERE_FADE_ZOOM_END.
69
+ */
70
+ function atmosphereZoomFade(zoom) {
71
+ if (zoom <= ATMOSPHERE_FADE_ZOOM_START) return 1;
72
+ if (zoom >= ATMOSPHERE_FADE_ZOOM_END) return 0;
73
+ var t = (zoom - ATMOSPHERE_FADE_ZOOM_START) / (ATMOSPHERE_FADE_ZOOM_END - ATMOSPHERE_FADE_ZOOM_START);
74
+ // Smooth-step for a perceptually gentle transition.
75
+ return 1 - t * t * (3 - 2 * t);
76
+ }
77
+ var ATMOSPHERE_UNIFORMS = {
78
+ v3SunPos: v3SunPosNow,
79
+ exposure: 2,
80
+ fSamples: 3,
81
+ g: -0.65,
82
+ fKrESun: 0.00025 * 20,
83
+ fKmESun: 0.0001 * 20,
84
+ fKr4PI: 0.00025 * 4 * Math.PI,
85
+ fKm4PI: 0.0001 * 4 * Math.PI,
86
+ fScaleDepth: 0.25,
87
+ fInnerRadius: 258,
88
+ fOuterRadius: 265,
89
+ fTerminatorAttenuateFactor: 0.8,
90
+ fTerminatorOpacityFactor: 1
91
+ };
92
+ var AtmosphereLayerRealistic = exports.AtmosphereLayerRealistic = /*#__PURE__*/function (_SimpleMeshLayer) {
93
+ function AtmosphereLayerRealistic() {
94
+ (0, _classCallCheck2["default"])(this, AtmosphereLayerRealistic);
95
+ return _callSuper(this, AtmosphereLayerRealistic, arguments);
96
+ }
97
+ (0, _inherits2["default"])(AtmosphereLayerRealistic, _SimpleMeshLayer);
98
+ return (0, _createClass2["default"])(AtmosphereLayerRealistic, [{
99
+ key: "draw",
100
+ value: function draw(_ref) {
101
+ var uniforms = _ref.uniforms;
102
+ var _this$props = this.props,
103
+ config = _this$props.config,
104
+ zoomFade = _this$props.zoomFade;
105
+ var model = this.state.model;
106
+ if (model) {
107
+ model.props.uniforms = _objectSpread(_objectSpread(_objectSpread({}, model.props.uniforms), ATMOSPHERE_UNIFORMS), {}, {
108
+ fTerminatorOpacityFactor: config.terminator ? config.terminatorOpacity : 0,
109
+ v3SunPos: config.azimuth ? angleToSunPos(toRadians(config.azimuthAngle)) : v3SunPosNow,
110
+ fAtmosphereZoomFade: zoomFade
111
+ });
112
+ }
113
+ _superPropGet(AtmosphereLayerRealistic, "draw", this, 3)([{
114
+ uniforms: uniforms
115
+ }]);
116
+ }
117
+ }, {
118
+ key: "getShaders",
119
+ value: function getShaders() {
120
+ return _objectSpread(_objectSpread({}, _superPropGet(AtmosphereLayerRealistic, "getShaders", this, 3)([])), {}, {
121
+ inject: {
122
+ 'fs:#decl': "\n uniform vec3 v3SunPos;\n\n uniform float g;\n uniform float exposure;\n\n uniform float fSamples;\n\n uniform float fInnerRadius;\n uniform float fOuterRadius;\n uniform float fKrESun;\n uniform float fKmESun;\n uniform float fKr4PI;\n uniform float fKm4PI;\n uniform float fScaleDepth;\n\n uniform float fTerminatorAttenuateFactor;\n uniform float fTerminatorOpacityFactor;\n uniform float fAtmosphereZoomFade;\n\n const int nSamples = ".concat(NUM_SAMPLE_RAYS, ";\n\n float scale(float fCos) {\n float x = 1.0 - fCos;\n return fScaleDepth * exp(-0.00287 + x*(0.459 + x*(3.83 + x*(-6.8 + x*5.25))));\n }\n "),
123
+ 'fs:#main-end': "\n vec3 v3CameraPos = cameraPosition;\n vec3 v3Pos = position_commonspace.xyz;\n\n float g2 = g * g;\n\n vec3 v3InvWavelength = vec3(1.0 / pow(0.650, 4.0), 1.0 / pow(0.570, 4.0), 1.0 / pow(0.475, 4.0));\n\n float fInnerRadius2 = fInnerRadius * fInnerRadius;\n float fOuterRadius2 = fOuterRadius * fOuterRadius;\n float fScale = 1.0 / (fOuterRadius - fInnerRadius);\n float fScaleOverScaleDepth = 1.0 / (fOuterRadius - fInnerRadius) / fScaleDepth;\n\n float cameraHeight2 = length(v3CameraPos) * length(v3CameraPos);\n\n vec3 v3Ray = v3Pos - v3CameraPos;\n float fFar = length(v3Ray);\n v3Ray /= fFar;\n\n float B = 2.0 * dot(v3CameraPos, v3Ray);\n float C = cameraHeight2 - fOuterRadius2;\n float fDet = max(0.0, B*B - 4.0 * C);\n float fNear = 0.5 * (-B - sqrt(fDet));\n\n vec3 v3Start = v3CameraPos + v3Ray * fNear;\n fFar -= fNear;\n\n float fDepth = exp((fInnerRadius - fOuterRadius) / fScaleDepth);\n float fCameraAngle = dot(-v3Ray, v3Pos) / length(v3Pos);\n float fLightAngle = dot(v3SunPos, v3Pos) / length(v3Pos);\n float fCameraScale = scale(fCameraAngle);\n float fLightScale = scale(fLightAngle);\n float fCameraOffset = fDepth*fCameraScale;\n float fTemp = (fLightScale + fCameraScale);\n\n float fSampleLength = fFar / fSamples;\n float fScaledLength = fSampleLength * fScale;\n vec3 v3SampleRay = v3Ray * fSampleLength;\n vec3 v3SamplePoint = v3Start + v3SampleRay * 0.5;\n\n vec3 v3FrontColor = vec3(0.0, 0.0, 0.0);\n vec3 v3Attenuate = vec3(0.0, 0.0, 0.0);\n for(int i=0; i<nSamples; i++)\n {\n float fHeight = length(v3SamplePoint);\n float fDepth = exp(fScaleOverScaleDepth * (fInnerRadius - fHeight));\n float fScatter = fDepth*fTemp - fCameraOffset;\n v3Attenuate = exp(-fScatter * (v3InvWavelength * fKr4PI + fKm4PI));\n v3FrontColor += v3Attenuate * (fDepth * fScaledLength);\n v3SamplePoint += v3SampleRay;\n }\n\n vec3 c0 = v3Attenuate;\n vec3 c1 = v3FrontColor * (v3InvWavelength * fKrESun + fKmESun);\n\n fragColor = vec4(c1, 1.0 - c0 * fTerminatorAttenuateFactor);\n fragColor.a *= fTerminatorOpacityFactor;\n\n // Keep the day hemisphere completely unshaded \u2014 the attenuation-based\n // alpha above is non-zero even at noon, which slightly darkens the lit\n // side. Gate it with a day/night mask so darkening only appears across\n // the terminator and onto the night side.\n // fLightAngle = dot(sunDir, surfaceNormal): +1 at the subsolar point\n // (noon), 0 at the terminator, -1 at midnight. smoothstep maps the day\n // side (>= 0.2) to 0 (no darkening), ramps through the terminator, and\n // reaches full darkening on the night side (<= -0.2).\n float fNightMask = smoothstep(0.2, -0.2, fLightAngle);\n fragColor.a *= fNightMask;\n\n // Fade out the entire day/night shading effect as the user zooms in.\n // At zoom levels above ATMOSPHERE_FADE_ZOOM_END the effect is invisible,\n // so it doesn't obscure map detail at street/city scale.\n fragColor.a *= fAtmosphereZoomFade;\n ",
124
+ 'fs:DECKGL_FILTER_COLOR': ""
125
+ }
126
+ });
127
+ }
128
+ }]);
129
+ }(_meshLayers.SimpleMeshLayer);
130
+ (0, _defineProperty2["default"])(AtmosphereLayerRealistic, "layerName", 'AtmosphereLayerRealistic');
131
+ var AtmosphereSkyLayerRealistic = exports.AtmosphereSkyLayerRealistic = /*#__PURE__*/function (_SimpleMeshLayer2) {
132
+ function AtmosphereSkyLayerRealistic() {
133
+ (0, _classCallCheck2["default"])(this, AtmosphereSkyLayerRealistic);
134
+ return _callSuper(this, AtmosphereSkyLayerRealistic, arguments);
135
+ }
136
+ (0, _inherits2["default"])(AtmosphereSkyLayerRealistic, _SimpleMeshLayer2);
137
+ return (0, _createClass2["default"])(AtmosphereSkyLayerRealistic, [{
138
+ key: "draw",
139
+ value: function draw(_ref2) {
140
+ var uniforms = _ref2.uniforms;
141
+ var _this$props2 = this.props,
142
+ config = _this$props2.config,
143
+ zoomFade = _this$props2.zoomFade;
144
+ var model = this.state.model;
145
+ if (model) {
146
+ model.props.uniforms = _objectSpread(_objectSpread(_objectSpread({}, model.props.uniforms), ATMOSPHERE_UNIFORMS), {}, {
147
+ v3SunPos: config.azimuth ? angleToSunPos(toRadians(config.azimuthAngle)) : v3SunPosNow,
148
+ fAtmosphereZoomFade: zoomFade
149
+ });
150
+ }
151
+ _superPropGet(AtmosphereSkyLayerRealistic, "draw", this, 3)([{
152
+ uniforms: uniforms
153
+ }]);
154
+ }
155
+ }, {
156
+ key: "getShaders",
157
+ value: function getShaders() {
158
+ return _objectSpread(_objectSpread({}, _superPropGet(AtmosphereSkyLayerRealistic, "getShaders", this, 3)([])), {}, {
159
+ inject: {
160
+ 'fs:#decl': "\n uniform vec3 v3SunPos;\n\n uniform float g;\n uniform float exposure;\n\n uniform float fSamples;\n\n uniform float fInnerRadius;\n uniform float fOuterRadius;\n uniform float fKrESun;\n uniform float fKmESun;\n uniform float fKr4PI;\n uniform float fKm4PI;\n uniform float fScaleDepth;\n uniform float fAtmosphereZoomFade;\n\n const int nSamples = ".concat(NUM_SAMPLE_RAYS, ";\n\n float scale(float fCos) {\n float x = 1.0 - fCos;\n return fScaleDepth * exp(-0.00287 + x*(0.459 + x*(3.83 + x*(-6.8 + x*5.25))));\n }\n\n float getMiePhase(float fCos, float fCos2, float g, float g2) {\n return 1.5 * ((1.0 - g2) / (2.0 + g2)) * (1.0 + fCos2) / pow(1.0 + g2 - 2.0 * g * fCos, 1.5);\n }\n\n float getRayleighPhase(float fCos2) {\n return 0.75 + 0.75 * fCos2;\n }\n "),
161
+ 'fs:#main-end': "\n vec3 v3CameraPos = cameraPosition;\n vec3 v3Pos = position_commonspace.xyz;\n\n float g2 = g * g;\n\n vec3 v3InvWavelength = vec3(1.0 / pow(0.650, 4.0), 1.0 / pow(0.570, 4.0), 1.0 / pow(0.475, 4.0));\n\n float fInnerRadius2 = fInnerRadius * fInnerRadius;\n float fOuterRadius2 = fOuterRadius * fOuterRadius;\n float fScale = 1.0 / (fOuterRadius - fInnerRadius);\n float fScaleOverScaleDepth = 1.0 / (fOuterRadius - fInnerRadius) / fScaleDepth;\n\n float cameraHeight2 = length(v3CameraPos) * length(v3CameraPos);\n\n vec3 v3Ray = v3Pos - v3CameraPos;\n float fFar = length(v3Ray);\n v3Ray /= fFar;\n\n float B = 2.0 * dot(v3CameraPos, v3Ray);\n float C = cameraHeight2 - fOuterRadius2;\n float fDet = max(0.0, B*B - 4.0 * C);\n float fNear = 0.5 * (-B - sqrt(fDet));\n\n vec3 v3Start = v3CameraPos + v3Ray * fNear;\n fFar -= fNear;\n float fStartAngle = dot(v3Ray, v3Start) / fOuterRadius;\n float fStartDepth = exp(-1.0 / fScaleDepth);\n float fStartOffset = fStartDepth * scale(fStartAngle);\n\n float fSampleLength = fFar / fSamples;\n float fScaledLength = fSampleLength * fScale;\n vec3 v3SampleRay = v3Ray * fSampleLength;\n vec3 v3SamplePoint = v3Start + v3SampleRay * 0.5;\n\n vec3 v3FrontColor = vec3(0.0, 0.0, 0.0);\n for(int i=0; i<nSamples; i++)\n {\n float fHeight = length(v3SamplePoint);\n float fDepth = exp(fScaleOverScaleDepth * (fInnerRadius - fHeight));\n float fLightAngle = dot(v3SunPos, v3SamplePoint) / fHeight;\n float fCameraAngle = dot(v3Ray, v3SamplePoint) / fHeight;\n float fScatter = (fStartOffset + fDepth * (scale(fLightAngle) - scale(fCameraAngle)));\n vec3 v3Attenuate = exp(-fScatter * (v3InvWavelength * fKr4PI + fKm4PI));\n\n v3FrontColor += v3Attenuate * (fDepth * fScaledLength);\n v3SamplePoint += v3SampleRay;\n }\n\n vec3 c0 = v3FrontColor * (v3InvWavelength * fKrESun);\n vec3 c1 = v3FrontColor * fKmESun;\n\n vec3 v3Direction = v3CameraPos - v3Pos;\n\n float fCos = dot(v3SunPos, v3Direction) / length(v3Direction);\n float fCos2 = fCos * fCos;\n\n vec3 skyColor = getRayleighPhase(fCos2) * c0 + getMiePhase(fCos, fCos2, g, g2) * c1;\n\n fragColor = vec4(skyColor, 1.0);\n fragColor.a = fragColor.b;\n\n // Fade the sky halo out as the user zooms in past continent scale.\n fragColor.a *= fAtmosphereZoomFade;\n ",
162
+ 'fs:DECKGL_FILTER_COLOR': ""
163
+ }
164
+ });
165
+ }
166
+ }]);
167
+ }(_meshLayers.SimpleMeshLayer);
168
+ (0, _defineProperty2["default"])(AtmosphereSkyLayerRealistic, "layerName", 'AtmosphereSkyLayerRealistic');
169
+ var ATMOSPHERE_PARAMETERS = {
170
+ depthTest: false,
171
+ blendFunc: [0x0302, 0x0303, 1, 0x0303],
172
+ // SRC_ALPHA, ONE_MINUS_SRC_ALPHA, ONE, ONE_MINUS_SRC_ALPHA
173
+ blendEquation: [0x8006, 0x8006] // FUNC_ADD
174
+ };
175
+ var ATMOSPHERE_SKY_PARAMETERS = {
176
+ cullFace: 0x0404,
177
+ // GL.FRONT
178
+ depthMask: false,
179
+ blendFunc: [0x0302, 0x0303, 1, 0x0303],
180
+ blendEquation: [0x8006, 0x8006]
181
+ };
182
+ var getGlobeAtmosphereLayer = exports.getGlobeAtmosphereLayer = function getGlobeAtmosphereLayer(_ref3) {
183
+ var config = _ref3.config,
184
+ zoom = _ref3.zoom;
185
+ var zoomFade = atmosphereZoomFade(zoom !== null && zoom !== void 0 ? zoom : 0);
186
+ return new AtmosphereLayerRealistic({
187
+ id: 'atmosphere',
188
+ data: [[0, 0, 0]],
189
+ config: config,
190
+ zoomFade: zoomFade,
191
+ coordinateOrigin: [0, 0, 0],
192
+ coordinateSystem: _core.COORDINATE_SYSTEM.CARTESIAN,
193
+ getPosition: function getPosition(d) {
194
+ return d;
195
+ },
196
+ getColor: [0, 0, 0],
197
+ mesh: GLOBE_MESH_INNER,
198
+ parameters: ATMOSPHERE_PARAMETERS
199
+ });
200
+ };
201
+ var getGlobeAtmosphereSkyLayer = exports.getGlobeAtmosphereSkyLayer = function getGlobeAtmosphereSkyLayer(_ref4) {
202
+ var config = _ref4.config,
203
+ zoom = _ref4.zoom;
204
+ var zoomFade = atmosphereZoomFade(zoom !== null && zoom !== void 0 ? zoom : 0);
205
+ return new AtmosphereSkyLayerRealistic({
206
+ id: 'atmosphere-sky',
207
+ data: [[0, 0, 0]],
208
+ config: config,
209
+ zoomFade: zoomFade,
210
+ coordinateOrigin: [0, 0, 0],
211
+ coordinateSystem: _core.COORDINATE_SYSTEM.CARTESIAN,
212
+ getPosition: function getPosition(d) {
213
+ return d;
214
+ },
215
+ getColor: [0, 0, 0],
216
+ mesh: GLOBE_MESH_OUTER,
217
+ parameters: ATMOSPHERE_SKY_PARAMETERS
218
+ });
219
+ };
220
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29yZSIsInJlcXVpcmUiLCJfbWVzaExheWVycyIsIl9lbmdpbmUiLCJfY29yZTIiLCJfc3VuIiwib3duS2V5cyIsImUiLCJyIiwidCIsIk9iamVjdCIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJvIiwiZmlsdGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJfY2FsbFN1cGVyIiwiX2dldFByb3RvdHlwZU9mMiIsIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMiIsIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCJSZWZsZWN0IiwiY29uc3RydWN0IiwiY29uc3RydWN0b3IiLCJCb29sZWFuIiwicHJvdG90eXBlIiwidmFsdWVPZiIsImNhbGwiLCJfc3VwZXJQcm9wR2V0IiwicCIsIl9nZXQyIiwidG9SYWRpYW5zIiwiZGVncmVlcyIsIk1hdGgiLCJQSSIsImFuZ2xlVG9WZWMiLCJhbmdsZSIsInNpbiIsImNvcyIsImFuZ2xlVG9TdW5Qb3MiLCJWZWN0b3IzIiwibm9ybWFsaXplIiwiR0xPQkVfTUVTSF9JTk5FUiIsIlNwaGVyZUdlb21ldHJ5IiwicmFkaXVzIiwibmxhdCIsIm5sb25nIiwiR0xPQkVfTUVTSF9PVVRFUiIsImxvbiIsImxhdCIsInN1blBvc05vdyIsImdldFN1blBvc2l0aW9uIiwiRGF0ZSIsIm5vdyIsInYzU3VuUG9zTm93IiwiYXppbXV0aCIsIk5VTV9TQU1QTEVfUkFZUyIsIkFUTU9TUEhFUkVfRkFERV9aT09NX1NUQVJUIiwiQVRNT1NQSEVSRV9GQURFX1pPT01fRU5EIiwiYXRtb3NwaGVyZVpvb21GYWRlIiwiem9vbSIsIkFUTU9TUEhFUkVfVU5JRk9STVMiLCJ2M1N1blBvcyIsImV4cG9zdXJlIiwiZlNhbXBsZXMiLCJnIiwiZktyRVN1biIsImZLbUVTdW4iLCJmS3I0UEkiLCJmS200UEkiLCJmU2NhbGVEZXB0aCIsImZJbm5lclJhZGl1cyIsImZPdXRlclJhZGl1cyIsImZUZXJtaW5hdG9yQXR0ZW51YXRlRmFjdG9yIiwiZlRlcm1pbmF0b3JPcGFjaXR5RmFjdG9yIiwiQXRtb3NwaGVyZUxheWVyUmVhbGlzdGljIiwiZXhwb3J0cyIsIl9TaW1wbGVNZXNoTGF5ZXIiLCJfY2xhc3NDYWxsQ2hlY2syIiwiX2luaGVyaXRzMiIsIl9jcmVhdGVDbGFzczIiLCJrZXkiLCJ2YWx1ZSIsImRyYXciLCJfcmVmIiwidW5pZm9ybXMiLCJfdGhpcyRwcm9wcyIsInByb3BzIiwiY29uZmlnIiwiem9vbUZhZGUiLCJtb2RlbCIsInN0YXRlIiwidGVybWluYXRvciIsInRlcm1pbmF0b3JPcGFjaXR5IiwiYXppbXV0aEFuZ2xlIiwiZkF0bW9zcGhlcmVab29tRmFkZSIsImdldFNoYWRlcnMiLCJpbmplY3QiLCJjb25jYXQiLCJTaW1wbGVNZXNoTGF5ZXIiLCJBdG1vc3BoZXJlU2t5TGF5ZXJSZWFsaXN0aWMiLCJfU2ltcGxlTWVzaExheWVyMiIsIl9yZWYyIiwiX3RoaXMkcHJvcHMyIiwiQVRNT1NQSEVSRV9QQVJBTUVURVJTIiwiZGVwdGhUZXN0IiwiYmxlbmRGdW5jIiwiYmxlbmRFcXVhdGlvbiIsIkFUTU9TUEhFUkVfU0tZX1BBUkFNRVRFUlMiLCJjdWxsRmFjZSIsImRlcHRoTWFzayIsImdldEdsb2JlQXRtb3NwaGVyZUxheWVyIiwiX3JlZjMiLCJpZCIsImRhdGEiLCJjb29yZGluYXRlT3JpZ2luIiwiY29vcmRpbmF0ZVN5c3RlbSIsIkNPT1JESU5BVEVfU1lTVEVNIiwiQ0FSVEVTSUFOIiwiZ2V0UG9zaXRpb24iLCJkIiwiZ2V0Q29sb3IiLCJtZXNoIiwicGFyYW1ldGVycyIsImdldEdsb2JlQXRtb3NwaGVyZVNreUxheWVyIiwiX3JlZjQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZ2xvYmUvYXRtb3NwaGVyZS1sYXllci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG4vLyBTaGFkZXJzIHBvcnRlZCBmcm9tIGlUb3ducywgYmFzZWQgb24gU2VhbiBPJ05laWwncyBhcHByb2FjaCBpbiBHUFUgR2VtcyAyXG4vLyBTRUU6IGh0dHBzOi8vZ2l0aHViLmNvbS9pVG93bnMvaXRvd25zL2Jsb2IvbWFzdGVyL3NyYy9Db3JlL1ByZWZhYi9HbG9iZS9BdG1vc3BoZXJlLmpzXG4vLyBTRUU6IGh0dHBzOi8vZGV2ZWxvcGVyLm52aWRpYS5jb20vZ3B1Z2Vtcy9ncHVnZW1zMi9wYXJ0LWlpLXNoYWRpbmctbGlnaHRpbmctYW5kLXNoYWRvd3MvY2hhcHRlci0xNi1hY2N1cmF0ZS1hdG1vc3BoZXJpYy1zY2F0dGVyaW5nXG5cbmltcG9ydCB7Q09PUkRJTkFURV9TWVNURU19IGZyb20gJ0BkZWNrLmdsL2NvcmUnO1xuaW1wb3J0IHtTaW1wbGVNZXNoTGF5ZXJ9IGZyb20gJ0BkZWNrLmdsL21lc2gtbGF5ZXJzJztcbmltcG9ydCB7U3BoZXJlR2VvbWV0cnl9IGZyb20gJ0BsdW1hLmdsL2VuZ2luZSc7XG5pbXBvcnQge1ZlY3RvcjN9IGZyb20gJ0BtYXRoLmdsL2NvcmUnO1xuaW1wb3J0IHtnZXRTdW5Qb3NpdGlvbn0gZnJvbSAnQG1hdGguZ2wvc3VuJztcblxuaW1wb3J0IHR5cGUge0dsb2JlQ29uZmlnfSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5cbmNvbnN0IHRvUmFkaWFucyA9IChkZWdyZWVzOiBudW1iZXIpOiBudW1iZXIgPT4gKGRlZ3JlZXMgKiBNYXRoLlBJKSAvIDE4MDtcblxuY29uc3QgYW5nbGVUb1ZlYyA9IChhbmdsZTogbnVtYmVyKTogW251bWJlciwgbnVtYmVyLCBudW1iZXJdID0+IHtcbiAgcmV0dXJuIFtNYXRoLnNpbihhbmdsZSksIE1hdGguY29zKGFuZ2xlKSwgMF07XG59O1xuXG5jb25zdCBhbmdsZVRvU3VuUG9zID0gKGFuZ2xlOiBudW1iZXIpOiBudW1iZXJbXSA9PiB7XG4gIHJldHVybiBuZXcgVmVjdG9yMyhhbmdsZVRvVmVjKGFuZ2xlKSkubm9ybWFsaXplKCkgYXMgdW5rbm93biBhcyBudW1iZXJbXTtcbn07XG5cbmNvbnN0IEdMT0JFX01FU0hfSU5ORVIgPSBuZXcgU3BoZXJlR2VvbWV0cnkoe1xuICByYWRpdXM6IDYuNGU2LFxuICBubGF0OiAxMDAsXG4gIG5sb25nOiAxMDBcbn0pO1xuXG5jb25zdCBHTE9CRV9NRVNIX09VVEVSID0gbmV3IFNwaGVyZUdlb21ldHJ5KHtcbiAgcmFkaXVzOiA2LjdlNixcbiAgbmxhdDogMTAwLFxuICBubG9uZzogMTAwXG59KTtcblxuY29uc3QgW2xvbiwgbGF0XSA9IFswLCA5MF07XG5jb25zdCBzdW5Qb3NOb3cgPSBnZXRTdW5Qb3NpdGlvbihEYXRlLm5vdygpLCBsYXQsIGxvbik7XG5jb25zdCB2M1N1blBvc05vdyA9IGFuZ2xlVG9TdW5Qb3Moc3VuUG9zTm93LmF6aW11dGggKyBNYXRoLlBJKTtcblxuY29uc3QgTlVNX1NBTVBMRV9SQVlTID0gMztcblxuLyoqXG4gKiBab29tIHJhbmdlIG92ZXIgd2hpY2ggdGhlIGF0bW9zcGhlcmUgZWZmZWN0IGZhZGVzIG91dC5cbiAqIEJlbG93IEFUTU9TUEhFUkVfRkFERV9aT09NX1NUQVJUIHRoZSBlZmZlY3QgaXMgZnVsbHkgdmlzaWJsZS5cbiAqIEFib3ZlIEFUTU9TUEhFUkVfRkFERV9aT09NX0VORCB0aGUgZWZmZWN0IGlzIGNvbXBsZXRlbHkgaGlkZGVuLlxuICovXG5jb25zdCBBVE1PU1BIRVJFX0ZBREVfWk9PTV9TVEFSVCA9IDMuNTtcbmNvbnN0IEFUTU9TUEhFUkVfRkFERV9aT09NX0VORCA9IDY7XG5cbi8qKlxuICogQ29udmVydCBhIG1hcFN0YXRlIHpvb20gbGV2ZWwgdG8gYSBbMCwgMV0gYXRtb3NwaGVyZSBvcGFjaXR5IG11bHRpcGxpZXIuXG4gKiBSZXR1cm5zIDEgKGZ1bGx5IHZpc2libGUpIGJlbG93IEFUTU9TUEhFUkVfRkFERV9aT09NX1NUQVJULCBzbW9vdGhseVxuICogaW50ZXJwb2xhdGVzIHRvIDAgYmV0d2VlbiB0aGUgdHdvIHRocmVzaG9sZHMsIGFuZCByZXR1cm5zIDAgYWJvdmVcbiAqIEFUTU9TUEhFUkVfRkFERV9aT09NX0VORC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGF0bW9zcGhlcmVab29tRmFkZSh6b29tOiBudW1iZXIpOiBudW1iZXIge1xuICBpZiAoem9vbSA8PSBBVE1PU1BIRVJFX0ZBREVfWk9PTV9TVEFSVCkgcmV0dXJuIDE7XG4gIGlmICh6b29tID49IEFUTU9TUEhFUkVfRkFERV9aT09NX0VORCkgcmV0dXJuIDA7XG4gIGNvbnN0IHQgPSAoem9vbSAtIEFUTU9TUEhFUkVfRkFERV9aT09NX1NUQVJUKSAvIChBVE1PU1BIRVJFX0ZBREVfWk9PTV9FTkQgLSBBVE1PU1BIRVJFX0ZBREVfWk9PTV9TVEFSVCk7XG4gIC8vIFNtb290aC1zdGVwIGZvciBhIHBlcmNlcHR1YWxseSBnZW50bGUgdHJhbnNpdGlvbi5cbiAgcmV0dXJuIDEgLSB0ICogdCAqICgzIC0gMiAqIHQpO1xufVxuXG5jb25zdCBBVE1PU1BIRVJFX1VOSUZPUk1TID0ge1xuICB2M1N1blBvczogdjNTdW5Qb3NOb3csXG4gIGV4cG9zdXJlOiAyLFxuICBmU2FtcGxlczogMyxcbiAgZzogLTAuNjUsXG4gIGZLckVTdW46IDAuMDAwMjUgKiAyMCxcbiAgZkttRVN1bjogMC4wMDAxICogMjAsXG4gIGZLcjRQSTogMC4wMDAyNSAqIDQgKiBNYXRoLlBJLFxuICBmS200UEk6IDAuMDAwMSAqIDQgKiBNYXRoLlBJLFxuICBmU2NhbGVEZXB0aDogMC4yNSxcbiAgZklubmVyUmFkaXVzOiAyNTgsXG4gIGZPdXRlclJhZGl1czogMjY1LFxuICBmVGVybWluYXRvckF0dGVudWF0ZUZhY3RvcjogMC44LFxuICBmVGVybWluYXRvck9wYWNpdHlGYWN0b3I6IDFcbn07XG5cbnR5cGUgQXRtb3NwaGVyZUxheWVyUHJvcHMgPSB7XG4gIGNvbmZpZzogR2xvYmVDb25maWc7XG4gIC8qKiBQcmUtY29tcHV0ZWQgWzAsIDFdIHpvb20tZmFkZSBtdWx0aXBsaWVyOyAxID0gZnVsbHkgdmlzaWJsZSwgMCA9IGhpZGRlbi4gKi9cbiAgem9vbUZhZGU6IG51bWJlcjtcbn07XG5cbmV4cG9ydCBjbGFzcyBBdG1vc3BoZXJlTGF5ZXJSZWFsaXN0aWMgZXh0ZW5kcyBTaW1wbGVNZXNoTGF5ZXI8YW55LCBBdG1vc3BoZXJlTGF5ZXJQcm9wcz4ge1xuICBzdGF0aWMgbGF5ZXJOYW1lID0gJ0F0bW9zcGhlcmVMYXllclJlYWxpc3RpYyc7XG5cbiAgZHJhdyh7dW5pZm9ybXN9OiB7dW5pZm9ybXM6IG9iamVjdH0pOiB2b2lkIHtcbiAgICBjb25zdCB7Y29uZmlnLCB6b29tRmFkZX0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IG1vZGVsID0gdGhpcy5zdGF0ZS5tb2RlbDtcbiAgICBpZiAobW9kZWwpIHtcbiAgICAgIChtb2RlbCBhcyBhbnkpLnByb3BzLnVuaWZvcm1zID0ge1xuICAgICAgICAuLi4obW9kZWwgYXMgYW55KS5wcm9wcy51bmlmb3JtcyxcbiAgICAgICAgLi4uQVRNT1NQSEVSRV9VTklGT1JNUyxcbiAgICAgICAgZlRlcm1pbmF0b3JPcGFjaXR5RmFjdG9yOiBjb25maWcudGVybWluYXRvciA/IGNvbmZpZy50ZXJtaW5hdG9yT3BhY2l0eSA6IDAsXG4gICAgICAgIHYzU3VuUG9zOiBjb25maWcuYXppbXV0aCA/IGFuZ2xlVG9TdW5Qb3ModG9SYWRpYW5zKGNvbmZpZy5hemltdXRoQW5nbGUpKSA6IHYzU3VuUG9zTm93LFxuICAgICAgICBmQXRtb3NwaGVyZVpvb21GYWRlOiB6b29tRmFkZVxuICAgICAgfTtcbiAgICB9XG4gICAgc3VwZXIuZHJhdyh7dW5pZm9ybXN9KTtcbiAgfVxuXG4gIGdldFNoYWRlcnMoKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3VwZXIuZ2V0U2hhZGVycygpLFxuICAgICAgaW5qZWN0OiB7XG4gICAgICAgICdmczojZGVjbCc6IGBcbiAgICAgICAgICB1bmlmb3JtIHZlYzMgdjNTdW5Qb3M7XG5cbiAgICAgICAgICB1bmlmb3JtIGZsb2F0IGc7XG4gICAgICAgICAgdW5pZm9ybSBmbG9hdCBleHBvc3VyZTtcblxuICAgICAgICAgIHVuaWZvcm0gZmxvYXQgZlNhbXBsZXM7XG5cbiAgICAgICAgICB1bmlmb3JtIGZsb2F0IGZJbm5lclJhZGl1cztcbiAgICAgICAgICB1bmlmb3JtIGZsb2F0IGZPdXRlclJhZGl1cztcbiAgICAgICAgICB1bmlmb3JtIGZsb2F0IGZLckVTdW47XG4gICAgICAgICAgdW5pZm9ybSBmbG9hdCBmS21FU3VuO1xuICAgICAgICAgIHVuaWZvcm0gZmxvYXQgZktyNFBJO1xuICAgICAgICAgIHVuaWZvcm0gZmxvYXQgZkttNFBJO1xuICAgICAgICAgIHVuaWZvcm0gZmxvYXQgZlNjYWxlRGVwdGg7XG5cbiAgICAgICAgICB1bmlmb3JtIGZsb2F0IGZUZXJtaW5hdG9yQXR0ZW51YXRlRmFjdG9yO1xuICAgICAgICAgIHVuaWZvcm0gZmxvYXQgZlRlcm1pbmF0b3JPcGFjaXR5RmFjdG9yO1xuICAgICAgICAgIHVuaWZvcm0gZmxvYXQgZkF0bW9zcGhlcmVab29tRmFkZTtcblxuICAgICAgICAgIGNvbnN0IGludCBuU2FtcGxlcyA9ICR7TlVNX1NBTVBMRV9SQVlTfTtcblxuICAgICAgICAgIGZsb2F0IHNjYWxlKGZsb2F0IGZDb3MpIHtcbiAgICAgICAgICAgIGZsb2F0IHggPSAxLjAgLSBmQ29zO1xuICAgICAgICAgICAgcmV0dXJuIGZTY2FsZURlcHRoICogZXhwKC0wLjAwMjg3ICsgeCooMC40NTkgKyB4KigzLjgzICsgeCooLTYuOCArIHgqNS4yNSkpKSk7XG4gICAgICAgICAgfVxuICAgICAgICBgLFxuICAgICAgICAnZnM6I21haW4tZW5kJzogYFxuICAgICAgICAgIHZlYzMgdjNDYW1lcmFQb3MgPSBjYW1lcmFQb3NpdGlvbjtcbiAgICAgICAgICB2ZWMzIHYzUG9zID0gcG9zaXRpb25fY29tbW9uc3BhY2UueHl6O1xuXG4gICAgICAgICAgZmxvYXQgZzIgPSBnICogZztcblxuICAgICAgICAgIHZlYzMgdjNJbnZXYXZlbGVuZ3RoID0gdmVjMygxLjAgLyBwb3coMC42NTAsIDQuMCksIDEuMCAvIHBvdygwLjU3MCwgNC4wKSwgMS4wIC8gcG93KDAuNDc1LCA0LjApKTtcblxuICAgICAgICAgIGZsb2F0IGZJbm5lclJhZGl1czIgPSBmSW5uZXJSYWRpdXMgKiBmSW5uZXJSYWRpdXM7XG4gICAgICAgICAgZmxvYXQgZk91dGVyUmFkaXVzMiA9IGZPdXRlclJhZGl1cyAqIGZPdXRlclJhZGl1cztcbiAgICAgICAgICBmbG9hdCBmU2NhbGUgPSAxLjAgLyAoZk91dGVyUmFkaXVzIC0gZklubmVyUmFkaXVzKTtcbiAgICAgICAgICBmbG9hdCBmU2NhbGVPdmVyU2NhbGVEZXB0aCA9IDEuMCAvIChmT3V0ZXJSYWRpdXMgLSBmSW5uZXJSYWRpdXMpIC8gZlNjYWxlRGVwdGg7XG5cbiAgICAgICAgICBmbG9hdCBjYW1lcmFIZWlnaHQyID0gbGVuZ3RoKHYzQ2FtZXJhUG9zKSAqIGxlbmd0aCh2M0NhbWVyYVBvcyk7XG5cbiAgICAgICAgICB2ZWMzIHYzUmF5ID0gdjNQb3MgLSB2M0NhbWVyYVBvcztcbiAgICAgICAgICBmbG9hdCBmRmFyID0gbGVuZ3RoKHYzUmF5KTtcbiAgICAgICAgICB2M1JheSAvPSBmRmFyO1xuXG4gICAgICAgICAgZmxvYXQgQiA9IDIuMCAqIGRvdCh2M0NhbWVyYVBvcywgdjNSYXkpO1xuICAgICAgICAgIGZsb2F0IEMgPSBjYW1lcmFIZWlnaHQyIC0gZk91dGVyUmFkaXVzMjtcbiAgICAgICAgICBmbG9hdCBmRGV0ID0gbWF4KDAuMCwgQipCIC0gNC4wICogQyk7XG4gICAgICAgICAgZmxvYXQgZk5lYXIgPSAwLjUgKiAoLUIgLSBzcXJ0KGZEZXQpKTtcblxuICAgICAgICAgIHZlYzMgdjNTdGFydCA9IHYzQ2FtZXJhUG9zICsgdjNSYXkgKiBmTmVhcjtcbiAgICAgICAgICBmRmFyIC09IGZOZWFyO1xuXG4gICAgICAgICAgZmxvYXQgZkRlcHRoID0gZXhwKChmSW5uZXJSYWRpdXMgLSBmT3V0ZXJSYWRpdXMpIC8gZlNjYWxlRGVwdGgpO1xuICAgICAgICAgIGZsb2F0IGZDYW1lcmFBbmdsZSA9IGRvdCgtdjNSYXksIHYzUG9zKSAvIGxlbmd0aCh2M1Bvcyk7XG4gICAgICAgICAgZmxvYXQgZkxpZ2h0QW5nbGUgPSBkb3QodjNTdW5Qb3MsIHYzUG9zKSAvIGxlbmd0aCh2M1Bvcyk7XG4gICAgICAgICAgZmxvYXQgZkNhbWVyYVNjYWxlID0gc2NhbGUoZkNhbWVyYUFuZ2xlKTtcbiAgICAgICAgICBmbG9hdCBmTGlnaHRTY2FsZSA9IHNjYWxlKGZMaWdodEFuZ2xlKTtcbiAgICAgICAgICBmbG9hdCBmQ2FtZXJhT2Zmc2V0ID0gZkRlcHRoKmZDYW1lcmFTY2FsZTtcbiAgICAgICAgICBmbG9hdCBmVGVtcCA9IChmTGlnaHRTY2FsZSArIGZDYW1lcmFTY2FsZSk7XG5cbiAgICAgICAgICBmbG9hdCBmU2FtcGxlTGVuZ3RoID0gZkZhciAvIGZTYW1wbGVzO1xuICAgICAgICAgIGZsb2F0IGZTY2FsZWRMZW5ndGggPSBmU2FtcGxlTGVuZ3RoICogZlNjYWxlO1xuICAgICAgICAgIHZlYzMgdjNTYW1wbGVSYXkgPSB2M1JheSAqIGZTYW1wbGVMZW5ndGg7XG4gICAgICAgICAgdmVjMyB2M1NhbXBsZVBvaW50ID0gdjNTdGFydCArIHYzU2FtcGxlUmF5ICogMC41O1xuXG4gICAgICAgICAgdmVjMyB2M0Zyb250Q29sb3IgPSB2ZWMzKDAuMCwgMC4wLCAwLjApO1xuICAgICAgICAgIHZlYzMgdjNBdHRlbnVhdGUgPSB2ZWMzKDAuMCwgMC4wLCAwLjApO1xuICAgICAgICAgIGZvcihpbnQgaT0wOyBpPG5TYW1wbGVzOyBpKyspXG4gICAgICAgICAge1xuICAgICAgICAgICAgICBmbG9hdCBmSGVpZ2h0ID0gbGVuZ3RoKHYzU2FtcGxlUG9pbnQpO1xuICAgICAgICAgICAgICBmbG9hdCBmRGVwdGggPSBleHAoZlNjYWxlT3ZlclNjYWxlRGVwdGggKiAoZklubmVyUmFkaXVzIC0gZkhlaWdodCkpO1xuICAgICAgICAgICAgICBmbG9hdCBmU2NhdHRlciA9IGZEZXB0aCpmVGVtcCAtIGZDYW1lcmFPZmZzZXQ7XG4gICAgICAgICAgICAgIHYzQXR0ZW51YXRlID0gZXhwKC1mU2NhdHRlciAqICh2M0ludldhdmVsZW5ndGggKiBmS3I0UEkgKyBmS200UEkpKTtcbiAgICAgICAgICAgICAgdjNGcm9udENvbG9yICs9IHYzQXR0ZW51YXRlICogKGZEZXB0aCAqIGZTY2FsZWRMZW5ndGgpO1xuICAgICAgICAgICAgICB2M1NhbXBsZVBvaW50ICs9IHYzU2FtcGxlUmF5O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZlYzMgYzAgPSB2M0F0dGVudWF0ZTtcbiAgICAgICAgICB2ZWMzIGMxID0gdjNGcm9udENvbG9yICogKHYzSW52V2F2ZWxlbmd0aCAqIGZLckVTdW4gKyBmS21FU3VuKTtcblxuICAgICAgICAgIGZyYWdDb2xvciA9IHZlYzQoYzEsIDEuMCAtIGMwICogZlRlcm1pbmF0b3JBdHRlbnVhdGVGYWN0b3IpO1xuICAgICAgICAgIGZyYWdDb2xvci5hICo9IGZUZXJtaW5hdG9yT3BhY2l0eUZhY3RvcjtcblxuICAgICAgICAgIC8vIEtlZXAgdGhlIGRheSBoZW1pc3BoZXJlIGNvbXBsZXRlbHkgdW5zaGFkZWQg4oCUIHRoZSBhdHRlbnVhdGlvbi1iYXNlZFxuICAgICAgICAgIC8vIGFscGhhIGFib3ZlIGlzIG5vbi16ZXJvIGV2ZW4gYXQgbm9vbiwgd2hpY2ggc2xpZ2h0bHkgZGFya2VucyB0aGUgbGl0XG4gICAgICAgICAgLy8gc2lkZS4gR2F0ZSBpdCB3aXRoIGEgZGF5L25pZ2h0IG1hc2sgc28gZGFya2VuaW5nIG9ubHkgYXBwZWFycyBhY3Jvc3NcbiAgICAgICAgICAvLyB0aGUgdGVybWluYXRvciBhbmQgb250byB0aGUgbmlnaHQgc2lkZS5cbiAgICAgICAgICAvLyBmTGlnaHRBbmdsZSA9IGRvdChzdW5EaXIsIHN1cmZhY2VOb3JtYWwpOiArMSBhdCB0aGUgc3Vic29sYXIgcG9pbnRcbiAgICAgICAgICAvLyAobm9vbiksIDAgYXQgdGhlIHRlcm1pbmF0b3IsIC0xIGF0IG1pZG5pZ2h0LiBzbW9vdGhzdGVwIG1hcHMgdGhlIGRheVxuICAgICAgICAgIC8vIHNpZGUgKD49IDAuMikgdG8gMCAobm8gZGFya2VuaW5nKSwgcmFtcHMgdGhyb3VnaCB0aGUgdGVybWluYXRvciwgYW5kXG4gICAgICAgICAgLy8gcmVhY2hlcyBmdWxsIGRhcmtlbmluZyBvbiB0aGUgbmlnaHQgc2lkZSAoPD0gLTAuMikuXG4gICAgICAgICAgZmxvYXQgZk5pZ2h0TWFzayA9IHNtb290aHN0ZXAoMC4yLCAtMC4yLCBmTGlnaHRBbmdsZSk7XG4gICAgICAgICAgZnJhZ0NvbG9yLmEgKj0gZk5pZ2h0TWFzaztcblxuICAgICAgICAgIC8vIEZhZGUgb3V0IHRoZSBlbnRpcmUgZGF5L25pZ2h0IHNoYWRpbmcgZWZmZWN0IGFzIHRoZSB1c2VyIHpvb21zIGluLlxuICAgICAgICAgIC8vIEF0IHpvb20gbGV2ZWxzIGFib3ZlIEFUTU9TUEhFUkVfRkFERV9aT09NX0VORCB0aGUgZWZmZWN0IGlzIGludmlzaWJsZSxcbiAgICAgICAgICAvLyBzbyBpdCBkb2Vzbid0IG9ic2N1cmUgbWFwIGRldGFpbCBhdCBzdHJlZXQvY2l0eSBzY2FsZS5cbiAgICAgICAgICBmcmFnQ29sb3IuYSAqPSBmQXRtb3NwaGVyZVpvb21GYWRlO1xuICAgICAgICBgLFxuICAgICAgICAnZnM6REVDS0dMX0ZJTFRFUl9DT0xPUic6IGBgXG4gICAgICB9XG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQXRtb3NwaGVyZVNreUxheWVyUmVhbGlzdGljIGV4dGVuZHMgU2ltcGxlTWVzaExheWVyPGFueSwgQXRtb3NwaGVyZUxheWVyUHJvcHM+IHtcbiAgc3RhdGljIGxheWVyTmFtZSA9ICdBdG1vc3BoZXJlU2t5TGF5ZXJSZWFsaXN0aWMnO1xuXG4gIGRyYXcoe3VuaWZvcm1zfToge3VuaWZvcm1zOiBvYmplY3R9KTogdm9pZCB7XG4gICAgY29uc3Qge2NvbmZpZywgem9vbUZhZGV9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBtb2RlbCA9IHRoaXMuc3RhdGUubW9kZWw7XG4gICAgaWYgKG1vZGVsKSB7XG4gICAgICAobW9kZWwgYXMgYW55KS5wcm9wcy51bmlmb3JtcyA9IHtcbiAgICAgICAgLi4uKG1vZGVsIGFzIGFueSkucHJvcHMudW5pZm9ybXMsXG4gICAgICAgIC4uLkFUTU9TUEhFUkVfVU5JRk9STVMsXG4gICAgICAgIHYzU3VuUG9zOiBjb25maWcuYXppbXV0aCA/IGFuZ2xlVG9TdW5Qb3ModG9SYWRpYW5zKGNvbmZpZy5hemltdXRoQW5nbGUpKSA6IHYzU3VuUG9zTm93LFxuICAgICAgICBmQXRtb3NwaGVyZVpvb21GYWRlOiB6b29tRmFkZVxuICAgICAgfTtcbiAgICB9XG4gICAgc3VwZXIuZHJhdyh7dW5pZm9ybXN9KTtcbiAgfVxuXG4gIGdldFNoYWRlcnMoKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3VwZXIuZ2V0U2hhZGVycygpLFxuICAgICAgaW5qZWN0OiB7XG4gICAgICAgICdmczojZGVjbCc6IGBcbiAgICAgICAgICB1bmlmb3JtIHZlYzMgdjNTdW5Qb3M7XG5cbiAgICAgICAgICB1bmlmb3JtIGZsb2F0IGc7XG4gICAgICAgICAgdW5pZm9ybSBmbG9hdCBleHBvc3VyZTtcblxuICAgICAgICAgIHVuaWZvcm0gZmxvYXQgZlNhbXBsZXM7XG5cbiAgICAgICAgICB1bmlmb3JtIGZsb2F0IGZJbm5lclJhZGl1cztcbiAgICAgICAgICB1bmlmb3JtIGZsb2F0IGZPdXRlclJhZGl1cztcbiAgICAgICAgICB1bmlmb3JtIGZsb2F0IGZLckVTdW47XG4gICAgICAgICAgdW5pZm9ybSBmbG9hdCBmS21FU3VuO1xuICAgICAgICAgIHVuaWZvcm0gZmxvYXQgZktyNFBJO1xuICAgICAgICAgIHVuaWZvcm0gZmxvYXQgZkttNFBJO1xuICAgICAgICAgIHVuaWZvcm0gZmxvYXQgZlNjYWxlRGVwdGg7XG4gICAgICAgICAgdW5pZm9ybSBmbG9hdCBmQXRtb3NwaGVyZVpvb21GYWRlO1xuXG4gICAgICAgICAgY29uc3QgaW50IG5TYW1wbGVzID0gJHtOVU1fU0FNUExFX1JBWVN9O1xuXG4gICAgICAgICAgZmxvYXQgc2NhbGUoZmxvYXQgZkNvcykge1xuICAgICAgICAgICAgZmxvYXQgeCA9IDEuMCAtIGZDb3M7XG4gICAgICAgICAgICByZXR1cm4gZlNjYWxlRGVwdGggKiBleHAoLTAuMDAyODcgKyB4KigwLjQ1OSArIHgqKDMuODMgKyB4KigtNi44ICsgeCo1LjI1KSkpKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBmbG9hdCBnZXRNaWVQaGFzZShmbG9hdCBmQ29zLCBmbG9hdCBmQ29zMiwgZmxvYXQgZywgZmxvYXQgZzIpIHtcbiAgICAgICAgICAgIHJldHVybiAxLjUgKiAoKDEuMCAtIGcyKSAvICgyLjAgKyBnMikpICogKDEuMCArIGZDb3MyKSAvIHBvdygxLjAgKyBnMiAtIDIuMCAqIGcgKiBmQ29zLCAxLjUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGZsb2F0IGdldFJheWxlaWdoUGhhc2UoZmxvYXQgZkNvczIpIHtcbiAgICAgICAgICAgIHJldHVybiAwLjc1ICsgMC43NSAqIGZDb3MyO1xuICAgICAgICAgIH1cbiAgICAgICAgYCxcbiAgICAgICAgJ2ZzOiNtYWluLWVuZCc6IGBcbiAgICAgICAgICB2ZWMzIHYzQ2FtZXJhUG9zID0gY2FtZXJhUG9zaXRpb247XG4gICAgICAgICAgdmVjMyB2M1BvcyA9IHBvc2l0aW9uX2NvbW1vbnNwYWNlLnh5ejtcblxuICAgICAgICAgIGZsb2F0IGcyID0gZyAqIGc7XG5cbiAgICAgICAgICB2ZWMzIHYzSW52V2F2ZWxlbmd0aCA9IHZlYzMoMS4wIC8gcG93KDAuNjUwLCA0LjApLCAxLjAgLyBwb3coMC41NzAsIDQuMCksIDEuMCAvIHBvdygwLjQ3NSwgNC4wKSk7XG5cbiAgICAgICAgICBmbG9hdCBmSW5uZXJSYWRpdXMyID0gZklubmVyUmFkaXVzICogZklubmVyUmFkaXVzO1xuICAgICAgICAgIGZsb2F0IGZPdXRlclJhZGl1czIgPSBmT3V0ZXJSYWRpdXMgKiBmT3V0ZXJSYWRpdXM7XG4gICAgICAgICAgZmxvYXQgZlNjYWxlID0gMS4wIC8gKGZPdXRlclJhZGl1cyAtIGZJbm5lclJhZGl1cyk7XG4gICAgICAgICAgZmxvYXQgZlNjYWxlT3ZlclNjYWxlRGVwdGggPSAxLjAgLyAoZk91dGVyUmFkaXVzIC0gZklubmVyUmFkaXVzKSAvIGZTY2FsZURlcHRoO1xuXG4gICAgICAgICAgZmxvYXQgY2FtZXJhSGVpZ2h0MiA9IGxlbmd0aCh2M0NhbWVyYVBvcykgKiBsZW5ndGgodjNDYW1lcmFQb3MpO1xuXG4gICAgICAgICAgdmVjMyB2M1JheSA9IHYzUG9zIC0gdjNDYW1lcmFQb3M7XG4gICAgICAgICAgZmxvYXQgZkZhciA9IGxlbmd0aCh2M1JheSk7XG4gICAgICAgICAgdjNSYXkgLz0gZkZhcjtcblxuICAgICAgICAgIGZsb2F0IEIgPSAyLjAgKiBkb3QodjNDYW1lcmFQb3MsIHYzUmF5KTtcbiAgICAgICAgICBmbG9hdCBDID0gY2FtZXJhSGVpZ2h0MiAtIGZPdXRlclJhZGl1czI7XG4gICAgICAgICAgZmxvYXQgZkRldCA9IG1heCgwLjAsIEIqQiAtIDQuMCAqIEMpO1xuICAgICAgICAgIGZsb2F0IGZOZWFyID0gMC41ICogKC1CIC0gc3FydChmRGV0KSk7XG5cbiAgICAgICAgICB2ZWMzIHYzU3RhcnQgPSB2M0NhbWVyYVBvcyArIHYzUmF5ICogZk5lYXI7XG4gICAgICAgICAgZkZhciAtPSBmTmVhcjtcbiAgICAgICAgICBmbG9hdCBmU3RhcnRBbmdsZSA9IGRvdCh2M1JheSwgdjNTdGFydCkgLyBmT3V0ZXJSYWRpdXM7XG4gICAgICAgICAgZmxvYXQgZlN0YXJ0RGVwdGggPSBleHAoLTEuMCAvIGZTY2FsZURlcHRoKTtcbiAgICAgICAgICBmbG9hdCBmU3RhcnRPZmZzZXQgPSBmU3RhcnREZXB0aCAqIHNjYWxlKGZTdGFydEFuZ2xlKTtcblxuICAgICAgICAgIGZsb2F0IGZTYW1wbGVMZW5ndGggPSBmRmFyIC8gZlNhbXBsZXM7XG4gICAgICAgICAgZmxvYXQgZlNjYWxlZExlbmd0aCA9IGZTYW1wbGVMZW5ndGggKiBmU2NhbGU7XG4gICAgICAgICAgdmVjMyB2M1NhbXBsZVJheSA9IHYzUmF5ICogZlNhbXBsZUxlbmd0aDtcbiAgICAgICAgICB2ZWMzIHYzU2FtcGxlUG9pbnQgPSB2M1N0YXJ0ICsgdjNTYW1wbGVSYXkgKiAwLjU7XG5cbiAgICAgICAgICB2ZWMzIHYzRnJvbnRDb2xvciA9IHZlYzMoMC4wLCAwLjAsIDAuMCk7XG4gICAgICAgICAgZm9yKGludCBpPTA7IGk8blNhbXBsZXM7IGkrKylcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmbG9hdCBmSGVpZ2h0ID0gbGVuZ3RoKHYzU2FtcGxlUG9pbnQpO1xuICAgICAgICAgICAgZmxvYXQgZkRlcHRoID0gZXhwKGZTY2FsZU92ZXJTY2FsZURlcHRoICogKGZJbm5lclJhZGl1cyAtIGZIZWlnaHQpKTtcbiAgICAgICAgICAgIGZsb2F0IGZMaWdodEFuZ2xlID0gZG90KHYzU3VuUG9zLCB2M1NhbXBsZVBvaW50KSAvIGZIZWlnaHQ7XG4gICAgICAgICAgICBmbG9hdCBmQ2FtZXJhQW5nbGUgPSBkb3QodjNSYXksIHYzU2FtcGxlUG9pbnQpIC8gZkhlaWdodDtcbiAgICAgICAgICAgIGZsb2F0IGZTY2F0dGVyID0gKGZTdGFydE9mZnNldCArIGZEZXB0aCAqIChzY2FsZShmTGlnaHRBbmdsZSkgLSBzY2FsZShmQ2FtZXJhQW5nbGUpKSk7XG4gICAgICAgICAgICB2ZWMzIHYzQXR0ZW51YXRlID0gZXhwKC1mU2NhdHRlciAqICh2M0ludldhdmVsZW5ndGggKiBmS3I0UEkgKyBmS200UEkpKTtcblxuICAgICAgICAgICAgdjNGcm9udENvbG9yICs9IHYzQXR0ZW51YXRlICogKGZEZXB0aCAqIGZTY2FsZWRMZW5ndGgpO1xuICAgICAgICAgICAgdjNTYW1wbGVQb2ludCArPSB2M1NhbXBsZVJheTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2ZWMzIGMwID0gdjNGcm9udENvbG9yICogKHYzSW52V2F2ZWxlbmd0aCAqIGZLckVTdW4pO1xuICAgICAgICAgIHZlYzMgYzEgPSB2M0Zyb250Q29sb3IgKiBmS21FU3VuO1xuXG4gICAgICAgICAgdmVjMyB2M0RpcmVjdGlvbiA9IHYzQ2FtZXJhUG9zIC0gdjNQb3M7XG5cbiAgICAgICAgICBmbG9hdCBmQ29zID0gZG90KHYzU3VuUG9zLCB2M0RpcmVjdGlvbikgLyBsZW5ndGgodjNEaXJlY3Rpb24pO1xuICAgICAgICAgIGZsb2F0IGZDb3MyID0gZkNvcyAqIGZDb3M7XG5cbiAgICAgICAgICB2ZWMzIHNreUNvbG9yID0gZ2V0UmF5bGVpZ2hQaGFzZShmQ29zMikgKiBjMCArIGdldE1pZVBoYXNlKGZDb3MsIGZDb3MyLCBnLCBnMikgKiBjMTtcblxuICAgICAgICAgIGZyYWdDb2xvciA9IHZlYzQoc2t5Q29sb3IsIDEuMCk7XG4gICAgICAgICAgZnJhZ0NvbG9yLmEgPSBmcmFnQ29sb3IuYjtcblxuICAgICAgICAgIC8vIEZhZGUgdGhlIHNreSBoYWxvIG91dCBhcyB0aGUgdXNlciB6b29tcyBpbiBwYXN0IGNvbnRpbmVudCBzY2FsZS5cbiAgICAgICAgICBmcmFnQ29sb3IuYSAqPSBmQXRtb3NwaGVyZVpvb21GYWRlO1xuICAgICAgICBgLFxuICAgICAgICAnZnM6REVDS0dMX0ZJTFRFUl9DT0xPUic6IGBgXG4gICAgICB9XG4gICAgfTtcbiAgfVxufVxuXG5jb25zdCBBVE1PU1BIRVJFX1BBUkFNRVRFUlMgPSB7XG4gIGRlcHRoVGVzdDogZmFsc2UsXG4gIGJsZW5kRnVuYzogWzB4MDMwMiwgMHgwMzAzLCAxLCAweDAzMDNdLCAvLyBTUkNfQUxQSEEsIE9ORV9NSU5VU19TUkNfQUxQSEEsIE9ORSwgT05FX01JTlVTX1NSQ19BTFBIQVxuICBibGVuZEVxdWF0aW9uOiBbMHg4MDA2LCAweDgwMDZdIC8vIEZVTkNfQUREXG59O1xuXG5jb25zdCBBVE1PU1BIRVJFX1NLWV9QQVJBTUVURVJTID0ge1xuICBjdWxsRmFjZTogMHgwNDA0LCAvLyBHTC5GUk9OVFxuICBkZXB0aE1hc2s6IGZhbHNlLFxuICBibGVuZEZ1bmM6IFsweDAzMDIsIDB4MDMwMywgMSwgMHgwMzAzXSxcbiAgYmxlbmRFcXVhdGlvbjogWzB4ODAwNiwgMHg4MDA2XVxufTtcblxuZXhwb3J0IGNvbnN0IGdldEdsb2JlQXRtb3NwaGVyZUxheWVyID0gKHtjb25maWcsIHpvb219OiB7Y29uZmlnOiBHbG9iZUNvbmZpZzsgem9vbT86IG51bWJlcn0pID0+IHtcbiAgY29uc3Qgem9vbUZhZGUgPSBhdG1vc3BoZXJlWm9vbUZhZGUoem9vbSA/PyAwKTtcbiAgcmV0dXJuIG5ldyBBdG1vc3BoZXJlTGF5ZXJSZWFsaXN0aWMoe1xuICAgIGlkOiAnYXRtb3NwaGVyZScsXG4gICAgZGF0YTogW1swLCAwLCAwXV0sXG4gICAgY29uZmlnLFxuICAgIHpvb21GYWRlLFxuICAgIGNvb3JkaW5hdGVPcmlnaW46IFswLCAwLCAwXSxcbiAgICBjb29yZGluYXRlU3lzdGVtOiBDT09SRElOQVRFX1NZU1RFTS5DQVJURVNJQU4sXG4gICAgZ2V0UG9zaXRpb246ICgoZDogbnVtYmVyW10pID0+IGQpIGFzIGFueSxcbiAgICBnZXRDb2xvcjogWzAsIDAsIDBdLFxuICAgIG1lc2g6IEdMT0JFX01FU0hfSU5ORVIsXG4gICAgcGFyYW1ldGVyczogQVRNT1NQSEVSRV9QQVJBTUVURVJTXG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEdsb2JlQXRtb3NwaGVyZVNreUxheWVyID0gKHtjb25maWcsIHpvb219OiB7Y29uZmlnOiBHbG9iZUNvbmZpZzsgem9vbT86IG51bWJlcn0pID0+IHtcbiAgY29uc3Qgem9vbUZhZGUgPSBhdG1vc3BoZXJlWm9vbUZhZGUoem9vbSA/PyAwKTtcbiAgcmV0dXJuIG5ldyBBdG1vc3BoZXJlU2t5TGF5ZXJSZWFsaXN0aWMoe1xuICAgIGlkOiAnYXRtb3NwaGVyZS1za3knLFxuICAgIGRhdGE6IFtbMCwgMCwgMF1dLFxuICAgIGNvbmZpZyxcbiAgICB6b29tRmFkZSxcbiAgICBjb29yZGluYXRlT3JpZ2luOiBbMCwgMCwgMF0sXG4gICAgY29vcmRpbmF0ZVN5c3RlbTogQ09PUkRJTkFURV9TWVNURU0uQ0FSVEVTSUFOLFxuICAgIGdldFBvc2l0aW9uOiAoKGQ6IG51bWJlcltdKSA9PiBkKSBhcyBhbnksXG4gICAgZ2V0Q29sb3I6IFswLCAwLCAwXSxcbiAgICBtZXNoOiBHTE9CRV9NRVNIX09VVEVSLFxuICAgIHBhcmFtZXRlcnM6IEFUTU9TUEhFUkVfU0tZX1BBUkFNRVRFUlNcbiAgfSk7XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBT0EsSUFBQUEsS0FBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsV0FBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsT0FBQSxHQUFBRixPQUFBO0FBQ0EsSUFBQUcsTUFBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksSUFBQSxHQUFBSixPQUFBO0FBQTRDLFNBQUFLLFFBQUFDLENBQUEsRUFBQUMsQ0FBQSxRQUFBQyxDQUFBLEdBQUFDLE1BQUEsQ0FBQUMsSUFBQSxDQUFBSixDQUFBLE9BQUFHLE1BQUEsQ0FBQUUscUJBQUEsUUFBQUMsQ0FBQSxHQUFBSCxNQUFBLENBQUFFLHFCQUFBLENBQUFMLENBQUEsR0FBQUMsQ0FBQSxLQUFBSyxDQUFBLEdBQUFBLENBQUEsQ0FBQUMsTUFBQSxXQUFBTixDQUFBLFdBQUFFLE1BQUEsQ0FBQUssd0JBQUEsQ0FBQVIsQ0FBQSxFQUFBQyxDQUFBLEVBQUFRLFVBQUEsT0FBQVAsQ0FBQSxD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