diff --git a/dist/tangram.debug.js b/dist/tangram.debug.js index dd3c015bf..83c1ce36e 100644 --- a/dist/tangram.debug.js +++ b/dist/tangram.debug.js @@ -23783,7 +23783,7 @@ function buildPolylines(lines, width, vertex_data, vertex_template, _ref) { buildPolyline(lines[index], context, extra_lines); } - // Process extra lines + // Process extra lines (which are created above if lines need to be mutated for easier processing) for (var _index = 0; _index < extra_lines.length; _index++) { buildPolyline(extra_lines[_index], context, extra_lines); } @@ -23806,6 +23806,8 @@ function buildPolyline(line, context, extra_lines) { miter_len_sq = context.miter_len_sq; // Loop backwards through line to a tile boundary if found + // since you need to draw lines that are only partially inside the tile, + // so we start at the first index where it is safe to loop through to the last index within the tile if (closed_polygon && join_type === JOIN_TYPE.miter) { var boundaryIndex = getTileBoundaryIndex(line); @@ -27241,7 +27243,7 @@ exports.default = VertexData; VertexData.array_pool = []; // pool of currently available (previously used) buffers (uint8) },{"../utils/log":259,"./constants":202,"./vertex_elements":212}],212:[function(_dereq_,module,exports){ -'use strict'; +"use strict"; Object.defineProperty(exports, "__esModule", { value: true @@ -27249,16 +27251,10 @@ Object.defineProperty(exports, "__esModule", { var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); -var _worker_broker = _dereq_('../utils/worker_broker'); - -var _worker_broker2 = _interopRequireDefault(_worker_broker); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var MAX_VALUE = Math.pow(2, 16) - 1; -var Uint32_flag = false; +var has_element_index_uint = false; var VertexElements = function () { function VertexElements() { @@ -27269,17 +27265,17 @@ var VertexElements = function () { } _createClass(VertexElements, [{ - key: 'push', + key: "push", value: function push(value) { // If values have overflown and no Uint32 option is available, do not push values - if (this.has_overflown && !Uint32_flag) { + if (this.has_overflown && !has_element_index_uint) { return; } // Trigger overflow if value is greater than Uint16 max if (value > MAX_VALUE) { this.has_overflown = true; - if (!Uint32_flag) { + if (!has_element_index_uint) { return; } } @@ -27287,7 +27283,7 @@ var VertexElements = function () { this.array.push(value); } }, { - key: 'end', + key: "end", value: function end() { if (this.array.length) { var buffer = createBuffer(this.array, this.has_overflown); @@ -27306,18 +27302,16 @@ var VertexElements = function () { exports.default = VertexElements; -VertexElements.setUint32Flag = function (flag) { - Uint32_flag = flag; +VertexElements.setElementIndexUint = function (flag) { + has_element_index_uint = flag; }; function createBuffer(array, overflown) { - var typedArray = overflown && Uint32_flag ? Uint32Array : Uint16Array; + var typedArray = overflown && has_element_index_uint ? Uint32Array : Uint16Array; return new typedArray(array); } -_worker_broker2.default.addTarget('VertexElements', VertexElements); - -},{"../utils/worker_broker":269}],213:[function(_dereq_,module,exports){ +},{}],213:[function(_dereq_,module,exports){ 'use strict'; Object.defineProperty(exports, "__esModule", { @@ -27483,7 +27477,7 @@ var VertexLayout = function () { var last_type = void 0; var components = [].concat(_toConsumableArray(this.components)); components.sort(function (a, b) { - return a[0] !== b[0] ? a[0] - b[0] : a[4] - b[4]; + return a.type !== b.type ? a.type - b.type : a.index - b.index; }); for (var c = 0; c < components.length; c++) { @@ -27906,20 +27900,21 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var STOPS = [0, 0.33, 0.66, 0.99]; // zoom levels for curved label snapshot data (offsets and angles) var LINE_EXCEED_STRAIGHT = 1.5; // minimal ratio for straight labels (label length) / (line length) -var LINE_EXCEED_STRAIGHT_NO_CURVE = 1.8; // minimal ratio for straight labels that have no curved option +var LINE_EXCEED_STRAIGHT_NO_CURVE = 1.8; // minimal ratio for straight labels that have no curved option (like Arabic) var LINE_EXCEED_STAIGHT_LOOSE = 2.3; // 2nd pass minimal ratio for straight labels -var STRAIGHT_ANGLE_TOLERANCE = 0.1; // multiple "almost straight" segments within this angle tolerance can be considered one straight segment -var CURVE_MIN_TOTAL_COST = 1.3; // curved line total curvature tolerance (sum) +var STRAIGHT_ANGLE_TOLERANCE = 0.1; // multiple "almost straight" segments within this angle tolerance can be considered one straight segment (in radians) +var CURVE_MIN_TOTAL_COST = 1.3; // curved line total curvature tolerance (sum in radians) var CURVE_MIN_AVG_COST = 0.4; // curved line average curvature tolerance (mean) -var CURVE_MAX_ANGLE = 1; // curved line singular curvature tolerance (value) +var CURVE_MAX_ANGLE = 1; // curved line singular curvature tolerance (value in radians) var ORIENTED_LABEL_OFFSET_FACTOR = 1.2; // multiply offset by this amount to avoid linked label collision var VERTICAL_ANGLE_TOLERANCE = 0.01; // nearly vertical lines considered vertical within this angle tolerance var LabelLine = { - // Given a label's bounding box size and size broken up into individual segments - // return a label that fits along a line geometry + // Given a label's bounding box size and size of broken up individual segments + // return a label that fits along the line geometry that is either straight (preferred) or curved (if straight tolerances aren't met) create: function create(segment_size, total_size, line, layout) { // The passes done for fitting a label, and provided tolerances for each pass + // First straight is chosen with a low tolerance. Then curved. Then straight with a higher tolerance. var passes = [{ type: 'straight', tolerance: layout.no_curving ? LINE_EXCEED_STRAIGHT_NO_CURVE : LINE_EXCEED_STRAIGHT }, { type: 'curved' }, { type: 'straight', tolerance: LINE_EXCEED_STAIGHT_LOOSE }]; // loop through passes. first label found wins. @@ -27943,7 +27938,7 @@ var LabelLine = { exports.default = LabelLine; -// Base class for a LabelLine +// Base class for a labels. var LabelLineBase = function () { function LabelLineBase(layout) { @@ -27956,18 +27951,19 @@ var LabelLineBase = function () { this.obbs = []; this.aabbs = []; this.type = ''; // "curved" or "straight" to be set by parent class + this.throw_away = false; // boolean that determines if label should be discarded } // Given a line, find the longest series of segments that maintains a constant orientation in the x-direction. // This assures us that the line has no orientation flip, so text would not appear upside-down. + // If the line's orientation is reversed, the flip return value will be true, otherwise false _createClass(LabelLineBase, [{ key: 'add', - // Adds each segment to the collision pass as its own bounding box - // TODO: label group + // Add each bounding box to the collision pass value: function add(bboxes) { this.placed = true; for (var i = 0; i < this.aabbs.length; i++) { @@ -27979,7 +27975,6 @@ var LabelLineBase = function () { } // Checks each segment to see if it should be discarded (via collision). If any segment fails this test, they all fail. - // TODO: label group }, { key: 'discard', @@ -28004,7 +27999,6 @@ var LabelLineBase = function () { } // Checks each segment to see if it is within the tile. If any segment fails this test, they all fail. - // TODO: label group }, { key: 'inTileBounds', @@ -28021,6 +28015,8 @@ var LabelLineBase = function () { } // Method to calculate oriented bounding box + // "angle" is the angle of the text, "angle_offset" is the angle applied to the offset. + // This distinction is necessary for labels with "left" (inner) or "right" (outer) offsets }], [{ key: 'splitLineByOrientation', @@ -28068,7 +28064,7 @@ var LabelLineBase = function () { flip = true; } } else { - // add lines is reverse order + // prepend points (reverse order) current_line = [pt, prev_pt]; current_length = length; if (current_length > max_length) { @@ -28120,7 +28116,8 @@ var LabelLineBase = function () { return LabelLineBase; }(); -// Class for straight labels +// Class for straight labels. +// Extends base LabelLine class. var LabelLineStraight = function (_LabelLineBase) { @@ -28136,27 +28133,30 @@ var LabelLineStraight = function (_LabelLineBase) { return _this; } - // Determine if the label can fit the geometry within provided tolerances - // A straight label will "look ahead" to future segments if they are within an angle bound given by STRAIGHT_ANGLE_TOLERANCE + // Determine if the label can fit the geometry within provided tolerance + // A straight label is generally placed at segment midpoints, but can "look ahead" to further segments + // if they are within an angle bound given by STRAIGHT_ANGLE_TOLERANCE and place at the midpoint between non-consecutive segments _createClass(LabelLineStraight, [{ key: 'fit', value: function fit(size, line, layout, tolerance) { var upp = layout.units_per_pixel; - var flipped = void 0; + var flipped = void 0; // boolean indicating if orientation of line is changed + // Make new copy of line, with consistent orientation + + // matches for "left" or "right" labels where the offset angle is dependent on the geometry var _LabelLineBase$splitL = LabelLineBase.splitLineByOrientation(line); var _LabelLineBase$splitL2 = _slicedToArray(_LabelLineBase$splitL, 2); line = _LabelLineBase$splitL2[0]; flipped = _LabelLineBase$splitL2[1]; - - if (typeof layout.orientation === 'number') { this.offset[1] += ORIENTED_LABEL_OFFSET_FACTOR * (size[1] - layout.vertical_buffer); + // if line is flipped, or the orientation is "left" (-1), flip the offset's y-axis if (flipped) { this.offset[1] *= -1; } @@ -28169,6 +28169,7 @@ var LabelLineStraight = function (_LabelLineBase) { var line_lengths = getLineLengths(line); var label_length = size[0] * upp; + // loop through line looking for a placement for the label for (var i = 0; i < line.length - 1; i++) { var curr = line[i]; @@ -28177,7 +28178,7 @@ var LabelLineStraight = function (_LabelLineBase) { var ahead_index = i + 1; var prev_angle = void 0; - // Look ahead to further line segments within an angle tolerance + // look ahead to further line segments within an angle tolerance while (ahead_index < line.length) { var ahead_curr = line[ahead_index - 1]; var ahead_next = line[ahead_index]; @@ -28188,19 +28189,23 @@ var LabelLineStraight = function (_LabelLineBase) { curve_tolerance += getAbsAngleDiff(next_angle, prev_angle); } + // if curve tolerance is exceeded, break out of loop if (Math.abs(curve_tolerance) > STRAIGHT_ANGLE_TOLERANCE) { break; } length += line_lengths[ahead_index - 1]; + // check if label fits geometry if (calcFitness(length, label_length) < tolerance) { - var currMid = _vector2.default.mult(_vector2.default.add(curr, ahead_next), 0.5); + var curr_midpt = _vector2.default.mult(_vector2.default.add(curr, ahead_next), 0.5); // TODO: modify angle if line chosen within curve_angle_tolerance + // Currently line angle is the same as the starting angle, perhaps it should average across segments? this.angle = -next_angle; var angle_offset = this.angle; + // if line is flipped, or the orientation is "left" (-1), rotate the angle of the offset 180 deg if (typeof layout.orientation === 'number') { if (flipped) { angle_offset += Math.PI; @@ -28211,7 +28216,7 @@ var LabelLineStraight = function (_LabelLineBase) { } } - // all vertical labels point up (not down) + // ensure that all vertical labels point up (not down) by snapping angles close to pi/2 to -pi/2 if (Math.abs(this.angle - Math.PI / 2) < VERTICAL_ANGLE_TOLERANCE) { // flip angle and offset this.angle = -Math.PI / 2; @@ -28221,7 +28226,7 @@ var LabelLineStraight = function (_LabelLineBase) { } } - this.position = currMid; + this.position = curr_midpt; this.updateBBoxes(this.position, size, this.angle, this.angle, this.offset); @@ -28263,6 +28268,10 @@ var LabelLineStraight = function (_LabelLineBase) { return LabelLineStraight; }(LabelLineBase); +// Class for curved labels +// Extends base LabelLine class to support angles, pre_angles, offsets as arrays for each segment + + var LabelLineCurved = function (_LabelLineBase2) { _inherits(LabelLineCurved, _LabelLineBase2); @@ -28283,23 +28292,29 @@ var LabelLineCurved = function (_LabelLineBase2) { return _this2; } + // Determine if the curved label can fit the geometry. + // No tolerance is provided because the label must fit entirely within the line geometry. + + _createClass(LabelLineCurved, [{ key: 'fit', value: function fit(size, line, layout) { var upp = layout.units_per_pixel; - var flipped = void 0; + var flipped = void 0; // boolean determining if the line orientation is reversed + + // Make new copy of line, with consistent orientation + // matches for "left" or "right" labels where the offset angle is dependent on the geometry var _LabelLineBase$splitL3 = LabelLineBase.splitLineByOrientation(line); var _LabelLineBase$splitL4 = _slicedToArray(_LabelLineBase$splitL3, 2); line = _LabelLineBase$splitL4[0]; flipped = _LabelLineBase$splitL4[1]; - - if (typeof layout.orientation === 'number') { this.offset[1] += ORIENTED_LABEL_OFFSET_FACTOR * (size[1] - layout.vertical_buffer); + // if line is flipped, or the orientation is "left" (-1), flip the offset's y-axis if (flipped) { this.offset[1] *= -1; } @@ -28321,13 +28336,17 @@ var LabelLineCurved = function (_LabelLineBase2) { return prev + next; }, 0); + // if label displacement is longer than the line, no fit can be possible if (total_label_length > total_line_length) { return false; } - // starting position var height = size[0][1] * upp; + // find start and end indices that the label can fit on without overlapping tile boundaries + // TODO: there is a small probability of a tile boundary crossing on an internal line segment + // another option is to create a buffer around the line and check if it overlaps a tile boundary + var _LabelLineCurved$chec = LabelLineCurved.checkTileBoundary(line, line_lengths, height, this.offset, upp), _LabelLineCurved$chec2 = _slicedToArray(_LabelLineCurved$chec, 2), start_index = _LabelLineCurved$chec2[0], @@ -28340,25 +28359,32 @@ var LabelLineCurved = function (_LabelLineBase2) { return false; } + // all positional offsets of the label are relative to the anchor var anchor_index = LabelLineCurved.curvaturePlacement(line, total_line_length, line_lengths, total_label_length, start_index, end_index); + var anchor = line[anchor_index]; + // if anchor not found, or greater than the end_index, no fit possible if (anchor_index === -1 || end_index - anchor_index < 2) { return false; } - var anchor = line[anchor_index]; + // set start position at anchor position this.position = anchor; - // Can be made faster since we are computing every segment for every zoom stop + // Loop through labels at each zoom level stop + // TODO: Can be made faster since we are computing every segment for every zoom stop // We can skip a segment's calculation once a segment's angle equals its fully zoomed angle for (var i = 0; i < label_lengths.length; i++) { this.offsets[i] = []; this.angles[i] = []; this.pre_angles[i] = []; + // loop through stops (z = [0, .33, .66, .99] + base zoom) for (var j = 0; j < STOPS.length; j++) { var stop = STOPS[j]; + // scale the line geometry by the zoom magnification + var _LabelLineCurved$scal = LabelLineCurved.scaleLine(stop, line), _LabelLineCurved$scal2 = _slicedToArray(_LabelLineCurved$scal, 2), new_line = _LabelLineCurved$scal2[0], @@ -28366,22 +28392,29 @@ var LabelLineCurved = function (_LabelLineBase2) { anchor = new_line[anchor_index]; + // calculate label data relative to anchor position + var _LabelLineCurved$plac = LabelLineCurved.placeAtIndex(anchor_index, new_line, _line_lengths, label_lengths), positions = _LabelLineCurved$plac.positions, offsets = _LabelLineCurved$plac.offsets, angles = _LabelLineCurved$plac.angles, pre_angles = _LabelLineCurved$plac.pre_angles; + // translate 2D offsets into "polar coordinates"" (1D distances with angles) + + var offsets1d = offsets.map(function (offset) { return Math.sqrt(offset[0] * offset[0] + offset[1] * offset[1]) / upp; }); - // use average angle for offsets (if offset is used) - this.angle = 1 / angles.length * angles.reduce(function (prev, next) { - return prev + next; - }); - + // Calculate everything that is independent of zoom level (angle for offset, bounding boxes, etc) if (stop === 0) { + // use average angle for a global label offset (if offset is specified) + this.angle = 1 / angles.length * angles.reduce(function (prev, next) { + return prev + next; + }); + + // calculate bounding boxes for zollision at zoom level 0 for (var _i2 = 0; _i2 < positions.length; _i2++) { var position = positions[_i2]; var pre_angle = pre_angles[_i2]; @@ -28407,6 +28440,7 @@ var LabelLineCurved = function (_LabelLineBase2) { } } + // push offsets/angles/pre_angles for each zoom and for each label segment this.offsets[i].push(offsets1d[i]); this.angles[i].push(angles[i]); this.pre_angles[i].push(pre_angles[i]); @@ -28488,6 +28522,7 @@ var LabelLineCurved = function (_LabelLineBase2) { var curvature = _vector2.default.angleBetween(norm_1, norm_2); // If curvature at a vertex is greater than the tolerance, remove it from consideration + // by giving it an infinite penalty if (curvature > CURVE_MAX_ANGLE) { curvature = Infinity; } @@ -28546,6 +28581,7 @@ var LabelLineCurved = function (_LabelLineBase2) { return -1; } + // calculate min cost and avg cost to determine if label can fit within curvatures tolerances var min_total_cost = Math.min.apply(null, total_costs); var min_index = total_costs.indexOf(min_total_cost); var min_avg_cost = avg_costs[min_index]; @@ -28560,6 +28596,7 @@ var LabelLineCurved = function (_LabelLineBase2) { } // Scale the line by a scale factor (used for computing the angles and offsets are fractional zoom levels) + // Return the new line positions and their lengths }, { key: 'scaleLine', @@ -28581,7 +28618,7 @@ var LabelLineCurved = function (_LabelLineBase2) { return [new_line, line_lengths]; } - // Place a label at a given index + // Place a label at a given line index }, { key: 'placeAtIndex', @@ -29212,6 +29249,8 @@ function norm(p, q) { return Math.sqrt(Math.pow(p[0] - q[0], 2) + Math.pow(p[1] - q[1], 2)); } +// TODO: can be optimized. +// you don't have to start from the first index every time for placement function interpolateLine(line, distance, min_length, options) { var sum = 0; var position = void 0, @@ -30876,7 +30915,7 @@ var Scene = function () { // which need to be serialized, while one loaded only from a URL does not. var serialize_funcs = _typeof(_this.config_source) === 'object' || _this.hasSubscribersFor('load'); - var updating = _this.updateConfig({ serialize_funcs: serialize_funcs, load_event: true, fade_in: true }); + var updating = _this.updateConfig({ serialize_funcs: serialize_funcs, normalize: false, load_event: true, fade_in: true }); if (options.blocking === true) { return updating; } @@ -31074,8 +31113,10 @@ var Scene = function () { value: function makeWorkers(url) { var _this3 = this; - var queue = []; + // Let VertexElements know if 32 bit indices for element arrays are available + var has_element_index_uint = this.gl.getExtension("OES_element_index_uint") ? true : false; + var queue = []; this.workers = []; var _loop = function _loop() { @@ -31087,7 +31128,7 @@ var Scene = function () { (0, _log2.default)('debug', 'Scene.makeWorkers: initializing worker ' + id); var _id = id; - queue.push(_worker_broker2.default.postMessage(worker, 'self.init', _this3.id, id, _this3.num_workers, _this3.log_level, _utils2.default.device_pixel_ratio).then(function (id) { + queue.push(_worker_broker2.default.postMessage(worker, 'self.init', _this3.id, id, _this3.num_workers, _this3.log_level, _utils2.default.device_pixel_ratio, has_element_index_uint).then(function (id) { (0, _log2.default)('debug', 'Scene.makeWorkers: initialized worker ' + id); return id; }, function (error) { @@ -31106,10 +31147,6 @@ var Scene = function () { return Promise.all(queue).then(function () { _log2.default.setWorkers(_this3.workers); - // Let VertexElements know if 32 bit indices for element arrays are available - var Uint32_flag = _this3.gl.getExtension("OES_element_index_uint") ? true : false; - _worker_broker2.default.postMessage(_this3.workers, 'VertexElements.setUint32Flag', Uint32_flag); - // Free memory after worker initialization URLs.revokeObjectURL(url); }); @@ -31731,9 +31768,6 @@ var Scene = function () { delete source.data; } - // Resolve paths relative to root scene bundle - _scene_loader2.default.normalizeDataSource(source, this.config_bundle); - if (load) { return this.updateConfig({ rebuild: { sources: [name] } }); } else { @@ -31910,7 +31944,7 @@ var Scene = function () { this.introspection = val || false; this.updating++; - return this.updateConfig().then(function () { + return this.updateConfig({ normalize: false }).then(function () { return _this13.updating--; }); } @@ -31927,6 +31961,8 @@ var Scene = function () { _ref8$rebuild = _ref8.rebuild, rebuild = _ref8$rebuild === undefined ? true : _ref8$rebuild, serialize_funcs = _ref8.serialize_funcs, + _ref8$normalize = _ref8.normalize, + normalize = _ref8$normalize === undefined ? true : _ref8$normalize, _ref8$fade_in = _ref8.fade_in, fade_in = _ref8$fade_in === undefined ? false : _ref8$fade_in; @@ -31934,6 +31970,9 @@ var Scene = function () { this.updating++; this.config = _scene_loader2.default.applyGlobalProperties(this.config, this.config_globals_applied); + if (normalize) { + _scene_loader2.default.normalize(this.config, this.config_bundle); + } this.trigger(load_event ? 'load' : 'update', { config: this.config }); _scene_loader2.default.hoistTextures(this.config); // move inline textures into global texture set @@ -33034,6 +33073,10 @@ var _texture = _dereq_('./gl/texture'); var _texture2 = _interopRequireDefault(_texture); +var _vertex_elements = _dereq_('./gl/vertex_elements'); + +var _vertex_elements2 = _interopRequireDefault(_vertex_elements); + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } /*jshint worker: true*/ @@ -33055,12 +33098,13 @@ if (_thread2.default.is_worker) { tiles: {}, // Initialize worker - init: function init(scene_id, worker_id, num_workers, log_level, device_pixel_ratio) { + init: function init(scene_id, worker_id, num_workers, log_level, device_pixel_ratio, has_element_index_unit) { self.scene_id = scene_id; self._worker_id = worker_id; self.num_workers = num_workers; _log2.default.setLevel(log_level); _utils2.default.device_pixel_ratio = device_pixel_ratio; + _vertex_elements2.default.setElementIndexUint(has_element_index_unit); _selection2.default.setPrefix(self._worker_id); self.style_manager = new _style_manager.StyleManager(); return worker_id; @@ -33321,7 +33365,7 @@ if (_thread2.default.is_worker) { _worker_broker2.default.addTarget('self', self); } -},{"./gl/texture":208,"./selection":230,"./sources/data_source":231,"./styles/layer":237,"./styles/style_manager":244,"./styles/style_parser":245,"./tile":251,"./utils/debug_settings":255,"./utils/log":259,"./utils/thread":265,"./utils/utils":267,"./utils/worker_broker":269}],230:[function(_dereq_,module,exports){ +},{"./gl/texture":208,"./gl/vertex_elements":212,"./selection":230,"./sources/data_source":231,"./styles/layer":237,"./styles/style_manager":244,"./styles/style_parser":245,"./tile":251,"./utils/debug_settings":255,"./utils/log":259,"./utils/thread":265,"./utils/utils":267,"./utils/worker_broker":269}],230:[function(_dereq_,module,exports){ 'use strict'; Object.defineProperty(exports, "__esModule", { @@ -36137,7 +36181,7 @@ var _debug_settings2 = _interopRequireDefault(_debug_settings); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } -var shaderSrc_pointsVertex = "uniform vec2 u_resolution;\nuniform float u_time;\nuniform vec3 u_map_position;\nuniform vec4 u_tile_origin;\nuniform float u_tile_proxy_depth;\nuniform bool u_tile_fade_in;\nuniform float u_meters_per_pixel;\nuniform float u_device_pixel_ratio;\nuniform float u_visible_time;\nuniform bool u_view_panning;\nuniform float u_view_pan_snap_timer;\n\nuniform mat4 u_model;\nuniform mat4 u_modelView;\nuniform mat3 u_normalMatrix;\nuniform mat3 u_inverseNormalMatrix;\n\nattribute vec4 a_position;\nattribute vec4 a_shape;\nattribute vec4 a_color;\nattribute float a_outline_edge;\nattribute vec4 a_outline_color;\nattribute vec2 a_texcoord;\nattribute vec2 a_offset;\n\n#ifdef TANGRAM_CURVED_LABEL\n attribute vec4 a_offsets;\n attribute vec4 a_pre_angles;\n attribute vec4 a_angles;\n#endif\n\nvarying vec4 v_color;\nvarying vec2 v_texcoord;\nvarying vec4 v_world_position;\nvarying float v_alpha_factor;\n\n#ifdef TANGRAM_SHADER_POINT\n varying float v_outline_edge;\n varying vec4 v_outline_color;\n varying float v_aa_factor;\n#endif\n\n#ifdef TANGRAM_MULTI_SAMPLER\n varying float v_sampler;\n#endif\n\n#define PI 3.14159265359\n#define TANGRAM_NORMAL vec3(0., 0., 1.)\n#define TANGRAM_PX_FADE_RANGE 2.\n\n#pragma tangram: camera\n#pragma tangram: material\n#pragma tangram: lighting\n#pragma tangram: raster\n#pragma tangram: global\n\nvec2 rotate2D(vec2 _st, float _angle) {\n return mat2(cos(_angle),-sin(_angle),\n sin(_angle),cos(_angle)) * _st;\n}\n\n// Assumes stops are [0, 0.33, 0.66, 0.99];\nfloat mix4linear(float a, float b, float c, float d, float x) {\n return mix(mix(a, b, 3. * x),\n mix(b,\n mix(c, d, 3. * (max(x, .66) - .66)),\n 3. * (clamp(x, .33, .66) - .33)),\n step(0.33, x)\n );\n}\n\n// Determines if a shader-drawn point is being rendered (vs. a sprite or text label)\nbool isShaderPoint() {\n #ifdef TANGRAM_SHADER_POINT\n #ifdef TANGRAM_MULTI_SAMPLER\n if (v_sampler == 0.) { // sprite sampler\n return true;\n }\n #else\n return true;\n #endif\n #endif\n return false;\n}\n\nvoid main() {\n // Initialize globals\n #pragma tangram: setup\n\n v_alpha_factor = 1.0;\n v_color = a_color;\n v_texcoord = a_texcoord;\n\n #ifdef TANGRAM_SHADER_POINT\n v_outline_color = a_outline_color;\n v_outline_edge = a_outline_edge;\n v_aa_factor = 1. / length(a_shape.xy / 256.) * TANGRAM_PX_FADE_RANGE;\n #endif\n\n // Position\n vec4 position = u_modelView * vec4(a_position.xyz, 1.);\n\n // Apply positioning and scaling in screen space\n vec2 shape = a_shape.xy / 256.; // values have an 8-bit fraction\n vec2 offset = vec2(a_offset.x, -a_offset.y); // flip y to make it point down\n\n float zoom = clamp(u_map_position.z - u_tile_origin.z, 0., 1.); //fract(u_map_position.z);\n float theta = a_shape.z / 4096.;\n\n #ifdef TANGRAM_CURVED_LABEL\n if (a_offsets[0] != 0.){\n #ifdef TANGRAM_FADE_ON_ZOOM_IN\n v_alpha_factor *= clamp(1. + TANGRAM_FADE_ON_ZOOM_IN_RATE - TANGRAM_FADE_ON_ZOOM_IN_RATE * (u_map_position.z - u_tile_origin.z), 0., 1.);\n #endif\n\n vec4 angles_scaled = (PI / 16384.) * a_angles;\n vec4 pre_angles_scaled = (PI / 128.) * a_pre_angles;\n vec4 offsets_scaled = (1. / 64.) * a_offsets;\n\n float pre_angle = mix4linear(pre_angles_scaled[0], pre_angles_scaled[1], pre_angles_scaled[2], pre_angles_scaled[3], zoom);\n float angle = mix4linear(angles_scaled[0], angles_scaled[1], angles_scaled[2], angles_scaled[3], zoom);\n float offset_curve = mix4linear(offsets_scaled[0], offsets_scaled[1], offsets_scaled[2], offsets_scaled[3], zoom);\n\n shape = rotate2D(shape, pre_angle); // rotate in place\n shape.x += offset_curve; // offset for curved label segment\n shape = rotate2D(shape, angle); // rotate relative to curved label anchor\n shape += rotate2D(offset, theta); // offset if specified in the scene file\n }\n else {\n shape = rotate2D(shape + offset, theta);\n }\n #else\n shape = rotate2D(shape + offset, theta);\n #endif\n\n #ifdef TANGRAM_MULTI_SAMPLER\n v_sampler = a_shape.w; // texture sampler\n #endif\n\n // Fade in (if requested) based on time mesh has been visible.\n // Value passed to fragment shader in the v_alpha_factor varying\n #ifdef TANGRAM_FADE_IN_RATE\n if (u_tile_fade_in) {\n v_alpha_factor *= clamp(u_visible_time * TANGRAM_FADE_IN_RATE, 0., 1.);\n }\n #endif\n\n // Fade out when tile is zooming out, e.g. acting as proxy tiles\n // NB: this is mostly done to compensate for text label collision happening at the label's 1x zoom. As labels\n // in proxy tiles are scaled down, they begin to overlap, and the fade is a simple way to ease the transition.\n // Value passed to fragment shader in the v_alpha_factor varying\n #ifdef TANGRAM_FADE_ON_ZOOM_OUT\n v_alpha_factor *= clamp(1. + TANGRAM_FADE_ON_ZOOM_OUT_RATE * (u_map_position.z - u_tile_origin.z), 0., 1.);\n #endif\n\n // World coordinates for 3d procedural textures\n v_world_position = u_model * position;\n v_world_position.xy += shape * u_meters_per_pixel;\n v_world_position = wrapWorldPosition(v_world_position);\n\n // Modify position before camera projection\n #pragma tangram: position\n\n cameraProjection(position);\n\n #ifdef TANGRAM_LAYER_ORDER\n // +1 is to keep all layers including proxies > 0\n applyLayerOrder(a_position.w + u_tile_proxy_depth + 1., position);\n #endif\n\n // Apply pixel offset in screen-space\n // Multiply by 2 is because screen is 2 units wide Normalized Device Coords (and u_resolution device pixels wide)\n // Device pixel ratio adjustment is because shape is in logical pixels\n position.xy += shape * position.w * 2. * u_device_pixel_ratio / u_resolution;\n\n // Snap to pixel grid\n // Only applied to fully upright sprites/labels (not shader-drawn points), while panning is not active\n if (!u_view_panning && (abs(theta) < TANGRAM_EPSILON) && !isShaderPoint()) {\n vec2 position_fract = fract((((position.xy / position.w) + 1.) * .5) * u_resolution);\n vec2 position_snap = position.xy + ((step(0.5, position_fract) - position_fract) * position.w * 2. / u_resolution);\n\n // Animate the snapping to smooth the transition and make it less noticeable\n #ifdef TANGRAM_VIEW_PAN_SNAP_RATE\n position.xy = mix(position.xy, position_snap, clamp(u_view_pan_snap_timer * TANGRAM_VIEW_PAN_SNAP_RATE, 0., 1.));\n #else\n position.xy = position_snap;\n #endif\n }\n\n gl_Position = position;\n}\n"; +var shaderSrc_pointsVertex = "uniform vec2 u_resolution;\nuniform float u_time;\nuniform vec3 u_map_position;\nuniform vec4 u_tile_origin;\nuniform float u_tile_proxy_depth;\nuniform bool u_tile_fade_in;\nuniform float u_meters_per_pixel;\nuniform float u_device_pixel_ratio;\nuniform float u_visible_time;\nuniform bool u_view_panning;\nuniform float u_view_pan_snap_timer;\n\nuniform mat4 u_model;\nuniform mat4 u_modelView;\nuniform mat3 u_normalMatrix;\nuniform mat3 u_inverseNormalMatrix;\n\nattribute vec4 a_position;\nattribute vec4 a_shape;\nattribute vec4 a_color;\nattribute float a_outline_edge;\nattribute vec4 a_outline_color;\nattribute vec2 a_texcoord;\nattribute vec2 a_offset;\n\n#ifdef TANGRAM_CURVED_LABEL\n attribute vec4 a_offsets;\n attribute vec4 a_pre_angles;\n attribute vec4 a_angles;\n#endif\n\nvarying vec4 v_color;\nvarying vec2 v_texcoord;\nvarying vec4 v_world_position;\nvarying float v_alpha_factor;\n\n#ifdef TANGRAM_SHADER_POINT\n varying float v_outline_edge;\n varying vec4 v_outline_color;\n varying float v_aa_factor;\n#endif\n\n#ifdef TANGRAM_MULTI_SAMPLER\n varying float v_sampler;\n#endif\n\n#define PI 3.14159265359\n#define TANGRAM_NORMAL vec3(0., 0., 1.)\n#define TANGRAM_PX_FADE_RANGE 2.\n\n#pragma tangram: camera\n#pragma tangram: material\n#pragma tangram: lighting\n#pragma tangram: raster\n#pragma tangram: global\n\nvec2 rotate2D(vec2 _st, float _angle) {\n return mat2(cos(_angle),-sin(_angle),\n sin(_angle),cos(_angle)) * _st;\n}\n\n// Assumes stops are [0, 0.33, 0.66, 0.99];\nfloat mix4linear(float a, float b, float c, float d, float x) {\n return mix(mix(a, b, 3. * x),\n mix(b,\n mix(c, d, 3. * (max(x, .66) - .66)),\n 3. * (clamp(x, .33, .66) - .33)),\n step(0.33, x)\n );\n}\n\n// Determines if a shader-drawn point is being rendered (vs. a sprite or text label)\nbool isShaderPoint() {\n #ifdef TANGRAM_SHADER_POINT\n #ifdef TANGRAM_MULTI_SAMPLER\n if (v_sampler == 0.) { // sprite sampler\n return true;\n }\n #else\n return true;\n #endif\n #endif\n return false;\n}\n\nvoid main() {\n // Initialize globals\n #pragma tangram: setup\n\n v_alpha_factor = 1.0;\n v_color = a_color;\n v_texcoord = a_texcoord;\n\n #ifdef TANGRAM_SHADER_POINT\n v_outline_color = a_outline_color;\n v_outline_edge = a_outline_edge;\n v_aa_factor = 1. / length(a_shape.xy / 256.) * TANGRAM_PX_FADE_RANGE;\n #endif\n\n // Position\n vec4 position = u_modelView * vec4(a_position.xyz, 1.);\n\n // Apply positioning and scaling in screen space\n vec2 shape = a_shape.xy / 256.; // values have an 8-bit fraction\n vec2 offset = vec2(a_offset.x, -a_offset.y); // flip y to make it point down\n\n float zoom = clamp(u_map_position.z - u_tile_origin.z, 0., 1.); //fract(u_map_position.z);\n float theta = a_shape.z / 4096.;\n\n #ifdef TANGRAM_CURVED_LABEL\n //TODO: potential bug? null is passed in for non-curved labels, otherwise the first offset will be 0\n if (a_offsets[0] != 0.){\n #ifdef TANGRAM_FADE_ON_ZOOM_IN\n v_alpha_factor *= clamp(1. + TANGRAM_FADE_ON_ZOOM_IN_RATE - TANGRAM_FADE_ON_ZOOM_IN_RATE * (u_map_position.z - u_tile_origin.z), 0., 1.);\n #endif\n\n vec4 angles_scaled = (PI / 16384.) * a_angles;\n vec4 pre_angles_scaled = (PI / 128.) * a_pre_angles;\n vec4 offsets_scaled = (1. / 64.) * a_offsets;\n\n float pre_angle = mix4linear(pre_angles_scaled[0], pre_angles_scaled[1], pre_angles_scaled[2], pre_angles_scaled[3], zoom);\n float angle = mix4linear(angles_scaled[0], angles_scaled[1], angles_scaled[2], angles_scaled[3], zoom);\n float offset_curve = mix4linear(offsets_scaled[0], offsets_scaled[1], offsets_scaled[2], offsets_scaled[3], zoom);\n\n shape = rotate2D(shape, pre_angle); // rotate in place\n shape.x += offset_curve; // offset for curved label segment\n shape = rotate2D(shape, angle); // rotate relative to curved label anchor\n shape += rotate2D(offset, theta); // offset if specified in the scene file\n }\n else {\n shape = rotate2D(shape + offset, theta);\n }\n #else\n shape = rotate2D(shape + offset, theta);\n #endif\n\n #ifdef TANGRAM_MULTI_SAMPLER\n v_sampler = a_shape.w; // texture sampler\n #endif\n\n // Fade in (if requested) based on time mesh has been visible.\n // Value passed to fragment shader in the v_alpha_factor varying\n #ifdef TANGRAM_FADE_IN_RATE\n if (u_tile_fade_in) {\n v_alpha_factor *= clamp(u_visible_time * TANGRAM_FADE_IN_RATE, 0., 1.);\n }\n #endif\n\n // Fade out when tile is zooming out, e.g. acting as proxy tiles\n // NB: this is mostly done to compensate for text label collision happening at the label's 1x zoom. As labels\n // in proxy tiles are scaled down, they begin to overlap, and the fade is a simple way to ease the transition.\n // Value passed to fragment shader in the v_alpha_factor varying\n #ifdef TANGRAM_FADE_ON_ZOOM_OUT\n v_alpha_factor *= clamp(1. + TANGRAM_FADE_ON_ZOOM_OUT_RATE * (u_map_position.z - u_tile_origin.z), 0., 1.);\n #endif\n\n // World coordinates for 3d procedural textures\n v_world_position = u_model * position;\n v_world_position.xy += shape * u_meters_per_pixel;\n v_world_position = wrapWorldPosition(v_world_position);\n\n // Modify position before camera projection\n #pragma tangram: position\n\n cameraProjection(position);\n\n #ifdef TANGRAM_LAYER_ORDER\n // +1 is to keep all layers including proxies > 0\n applyLayerOrder(a_position.w + u_tile_proxy_depth + 1., position);\n #endif\n\n // Apply pixel offset in screen-space\n // Multiply by 2 is because screen is 2 units wide Normalized Device Coords (and u_resolution device pixels wide)\n // Device pixel ratio adjustment is because shape is in logical pixels\n position.xy += shape * position.w * 2. * u_device_pixel_ratio / u_resolution;\n\n // Snap to pixel grid\n // Only applied to fully upright sprites/labels (not shader-drawn points), while panning is not active\n if (!u_view_panning && (abs(theta) < TANGRAM_EPSILON) && !isShaderPoint()) {\n vec2 position_fract = fract((((position.xy / position.w) + 1.) * .5) * u_resolution);\n vec2 position_snap = position.xy + ((step(0.5, position_fract) - position_fract) * position.w * 2. / u_resolution);\n\n // Animate the snapping to smooth the transition and make it less noticeable\n #ifdef TANGRAM_VIEW_PAN_SNAP_RATE\n position.xy = mix(position.xy, position_snap, clamp(u_view_pan_snap_timer * TANGRAM_VIEW_PAN_SNAP_RATE, 0., 1.));\n #else\n position.xy = position_snap;\n #endif\n }\n\n gl_Position = position;\n}\n"; var shaderSrc_pointsFragment = "uniform vec2 u_resolution;\nuniform float u_time;\nuniform vec3 u_map_position;\nuniform vec4 u_tile_origin;\nuniform float u_meters_per_pixel;\nuniform float u_device_pixel_ratio;\nuniform float u_visible_time;\n\nuniform mat3 u_normalMatrix;\nuniform mat3 u_inverseNormalMatrix;\n\nuniform sampler2D u_texture;\n\nuniform sampler2D u_label_texture;\nvarying float v_sampler;\n\nvarying vec4 v_color;\nvarying vec2 v_texcoord;\nvarying vec4 v_world_position;\nvarying float v_alpha_factor;\n\n#ifdef TANGRAM_SHADER_POINT\n varying vec4 v_outline_color;\n varying float v_outline_edge;\n varying float v_aa_factor;\n#endif\n\n#define TANGRAM_NORMAL vec3(0., 0., 1.)\n\n#pragma tangram: camera\n#pragma tangram: material\n#pragma tangram: lighting\n#pragma tangram: raster\n#pragma tangram: global\n\n#ifdef TANGRAM_SHADER_POINT\n // Draw an SDF-style point\n void drawPoint (inout vec4 color) {\n vec2 uv = v_texcoord * 2. - 1.; // fade alpha near circle edge\n float point_dist = length(uv);\n color = mix(\n color,\n v_outline_color,\n (1. - smoothstep(v_outline_edge - v_aa_factor, v_outline_edge + v_aa_factor, 1.-point_dist)) * step(.000001, v_outline_edge)\n );\n color.a = mix(color.a, 0., (smoothstep(1. - v_aa_factor, 1., point_dist)));\n }\n#endif\n\nvoid main (void) {\n // Initialize globals\n #pragma tangram: setup\n\n vec4 color = v_color;\n\n if (v_sampler == 0.) { // sprite sampler\n #ifdef TANGRAM_TEXTURE_POINT\n color *= texture2D(u_texture, v_texcoord); // draw sprite\n #else\n drawPoint(color); // draw a point\n #endif\n\n // Only apply shader blocks to point, not to attached text (N.B.: for compatibility with ES)\n #pragma tangram: color\n #pragma tangram: filter\n }\n else { // label sampler\n color = texture2D(u_label_texture, v_texcoord);\n color.rgb /= max(color.a, 0.001); // un-multiply canvas texture\n }\n\n color.a *= v_alpha_factor;\n\n // If blending is off, use alpha discard as a lower-quality substitute\n #if !defined(TANGRAM_BLEND_OVERLAY) && !defined(TANGRAM_BLEND_INLAY)\n if (color.a < TANGRAM_ALPHA_TEST) {\n discard;\n }\n #endif\n\n gl_FragColor = color;\n}\n"; var PLACEMENT = _label_point2.default.PLACEMENT; @@ -36780,6 +36824,8 @@ Object.assign(Points, { var offset = label.offset; + // TODO: instead of passing null, pass arrays with fingerprintable values + // This value is checked in the shader to determine whether to apply curving logic return this.buildQuad([label.position], // position size, // size in pixels angle, // angle in radians @@ -36789,7 +36835,7 @@ Object.assign(Points, { offset, // offset from center in pixels null, // placeholder for multiple offsets texcoords, // texture UVs - false, // if curved + false, // if curved boolean vertex_data, vertex_template // VBO and data for current vertex ); }, @@ -36798,6 +36844,9 @@ Object.assign(Points, { var angle = label.angle; var geom_count = 0; + // two passes for stroke and fill, where stroke needs to be drawn first (painter's algorithm) + // this ensures strokes don't overlap on other fills + // pass for stroke for (var i = 0; i < label.num_segments; i++) { var size = style.size[label.type][i]; @@ -38914,7 +38963,7 @@ var CanvasText = function () { var shaped = isTextShaped(text); text_info.isRTL = rtl; - text_info.no_curving = bidi || shaped; + text_info.no_curving = bidi || shaped; // used in LabelLine to prevent curved labels text_info.vertical_buffer = _this.vertical_text_buffer; var segments = splitLabelText(text, rtl); @@ -39101,6 +39150,7 @@ var CanvasText = function () { // 0.75 buffer produces a better approximate vertical centering of text var ty = y + vertical_buffer * 0.75 + line_height; + // Draw stroke and fill separately for curved text. Offset stroke in texture atlas by shift. if (stroke && stroke_width > 0) { var shift = type === 'curved' ? texture_size[0] : 0; this.context.strokeText(str, tx + shift, ty); @@ -39462,6 +39512,8 @@ function isTextNeutral(s) { return neutralDirCheck.test(s); } +var markRTL = '\u200F'; // explicit right-to-left marker + // Splitting strategy for chopping a label into segments function splitLabelText(text, rtl) { if (text.length < codon_length) { @@ -39476,11 +39528,11 @@ function splitLabelText(text, rtl) { if (segment.length <= Math.floor(0.5 * codon_length)) { segments[segments.length - 1] += segment; } else { - // if RTL, check to see if segment ends on a neutral character + // if RTL, check to see if segment starts or ends on a neutral character // in which case we need to add the neutral segments separately (codon_length = 1) in reverse order if (rtl) { var neutral_segment = []; - while (segment.length > 0 && isTextNeutral(segment[segment.length - 1])) { + while (segment.length > 0 && isTextNeutral(segment[0] || isTextNeutral(segment[segment.length - 1]))) { neutral_segment.unshift(segment[segment.length - 1]); segment = segment.substring(0, segment.length - 1); } @@ -39611,11 +39663,11 @@ var MultiLine = function () { break; } - // let word = breaks[n].trim(); var word = breaks[n]; - if (!word) { - continue; + // force punctuation (neutral chars) at the end of a RTL line, so they stay attached to original word + if (isTextRTL(word) && isTextNeutral(word[word.length - 1])) { + word += markRTL; } var spaced_word = new_line ? word : ' ' + word; @@ -40455,8 +40507,7 @@ var TextLabels = exports.TextLabels = { // Called on main thread from worker, to create atlas of labels for a tile rasterizeTexts: function rasterizeTexts(tile_key, texts) { - var canvas = new _canvas_text2.default(); - + var canvas = this.canvas; var texture_size = canvas.setTextureTextPositions(texts, this.max_texture_size, tile_key); (0, _log2.default)('trace', 'text summary for tile ' + tile_key + ': fits in ' + texture_size[0] + 'x' + texture_size[1] + 'px'); @@ -43432,7 +43483,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); -var pkg = JSON.parse("{\n \"name\": \"tangram\",\n \"version\": \"0.12.3\",\n \"description\": \"WebGL Maps for Vector Tiles\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git://github.com/tangrams/tangram.git\"\n },\n \"main\": \"dist/tangram.min.js\",\n \"homepage\": \"https://github.com/tangrams/tangram\",\n \"keywords\": [\n \"maps\",\n \"graphics\",\n \"rendering\",\n \"visualization\",\n \"WebGL\",\n \"OpenStreetMap\"\n ],\n \"config\": {\n \"output\": \"\",\n \"output_map\": \"\"\n },\n \"scripts\": {\n \"start\": \"npm run watch\",\n \"test\": \"npm run lint && npm run build-bundle && npm run test-local\",\n \"test-ci\": \"npm run lint && npm run build-bundle && npm run test-remote\",\n \"test-remote\": \"./node_modules/karma/bin/karma start --browsers SL_Firefox --single-run\",\n \"test-local\": \"./node_modules/karma/bin/karma start --browsers Chrome --single-run\",\n \"karma-start\": \"./node_modules/karma/bin/karma start --browsers Chrome --no-watch\",\n \"karma-run\": \"./node_modules/karma/bin/karma run --browsers Chrome\",\n \"lint\": \"$(npm bin)/jshint src/ && jshint test/\",\n \"build\": \"npm run build-bundle && npm run build-minify\",\n \"build-bundle\": \"$(npm bin)/browserify src/module.js -t [ babelify --presets [ es2015 ] ] -t brfs --debug -s Tangram -p browserify-derequire -p [ './build/quine.js' 'tangram.debug.js.map' ] -p [ mapstraction 'dist/tangram.debug.js.map' ] -o dist/tangram.debug.js\",\n \"build-minify\": \"$(npm bin)/uglifyjs dist/tangram.debug.js -c warnings=false -m -o dist/tangram.min.js && npm run build-size\",\n \"build-size\": \"gzip dist/tangram.min.js -c | wc -c | awk '{kb=$1/1024; print kb}' OFMT='%.0fk minified+gzipped'\",\n \"watch\": \"$(npm bin)/budo src/module.js:dist/tangram.debug.js --port 8000 --cors --live -- -t [ babelify --presets [ es2015 ] ] -t brfs -s Tangram -p [ './build/quine.js' 'tangram.debug.temp.js.map' ] -p [ mapstraction 'dist/tangram.debug.temp.js.map' ]\"\n },\n \"author\": {\n \"name\": \"Mapzen\",\n \"email\": \"tangram@mapzen.com\"\n },\n \"contributors\": [\n {\n \"name\": \"Brett Camper\"\n },\n {\n \"name\": \"Peter Richardson\"\n },\n {\n \"name\": \"Patricio Gonzalez Vivo\"\n },\n {\n \"name\": \"Karim Naaji\"\n },\n {\n \"name\": \"Ivan Willig\"\n },\n {\n \"name\": \"Lou Huang\"\n },\n {\n \"name\": \"David Valdman\"\n }\n ],\n \"license\": \"MIT\",\n \"dependencies\": {\n \"brfs\": \"1.4.3\",\n \"csscolorparser\": \"1.0.3\",\n \"earcut\": \"2.1.1\",\n \"fontfaceobserver\": \"2.0.7\",\n \"geojson-vt\": \"2.4.0\",\n \"gl-mat3\": \"1.0.0\",\n \"gl-mat4\": \"1.1.4\",\n \"gl-shader-errors\": \"1.0.3\",\n \"js-yaml\": \"tangrams/js-yaml#read-only\",\n \"jszip\": \"tangrams/jszip#read-only\",\n \"pbf\": \"1.3.7\",\n \"strip-comments\": \"0.3.2\",\n \"topojson-client\": \"tangrams/topojson-client#read-only\",\n \"vector-tile\": \"1.3.0\"\n },\n \"devDependencies\": {\n \"babelify\": \"7.3.0\",\n \"babel-preset-es2015\": \"6.16.0\",\n \"browserify\": \"13.0.1\",\n \"browserify-derequire\": \"0.9.4\",\n \"budo\": \"10.0.3\",\n \"chai\": \"1.9.2\",\n \"chai-as-promised\": \"4.1.1\",\n \"core-js\": \"2.4.1\",\n \"glob\": \"4.0.6\",\n \"jshint\": \"jshint/jshint#3a8efa979dbb157bfb5c10b5826603a55a33b9ad\",\n \"karma\": \"1.5.0\",\n \"karma-browserify\": \"5.1.0\",\n \"karma-chrome-launcher\": \"2.0.0\",\n \"karma-mocha\": \"0.1.9\",\n \"karma-mocha-reporter\": \"1.0.0\",\n \"karma-sauce-launcher\": \"tangrams/karma-sauce-launcher#firefox-profiles2\",\n \"karma-sinon\": \"1.0.4\",\n \"mapstraction\": \"1.0.1\",\n \"mocha\": \"1.21.4\",\n \"sinon\": \"1.10.3\",\n \"through2\": \"2.0.3\",\n \"uglify-js\": \"2.4.14\",\n \"yargs\": \"1.3.2\"\n }\n}\n"); +var pkg = JSON.parse("{\n \"name\": \"tangram\",\n \"version\": \"0.12.4\",\n \"description\": \"WebGL Maps for Vector Tiles\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git://github.com/tangrams/tangram.git\"\n },\n \"main\": \"dist/tangram.min.js\",\n \"homepage\": \"https://github.com/tangrams/tangram\",\n \"keywords\": [\n \"maps\",\n \"graphics\",\n \"rendering\",\n \"visualization\",\n \"WebGL\",\n \"OpenStreetMap\"\n ],\n \"config\": {\n \"output\": \"\",\n \"output_map\": \"\"\n },\n \"scripts\": {\n \"start\": \"npm run watch\",\n \"test\": \"npm run lint && npm run build-bundle && npm run test-local\",\n \"test-ci\": \"npm run lint && npm run build-bundle && npm run test-remote\",\n \"test-remote\": \"./node_modules/karma/bin/karma start --browsers SL_Firefox --single-run\",\n \"test-local\": \"./node_modules/karma/bin/karma start --browsers Chrome --single-run\",\n \"karma-start\": \"./node_modules/karma/bin/karma start --browsers Chrome --no-watch\",\n \"karma-run\": \"./node_modules/karma/bin/karma run --browsers Chrome\",\n \"lint\": \"$(npm bin)/jshint src/ && jshint test/\",\n \"build\": \"npm run build-bundle && npm run build-minify\",\n \"build-bundle\": \"$(npm bin)/browserify src/module.js -t [ babelify --presets [ es2015 ] ] -t brfs --debug -s Tangram -p browserify-derequire -p [ './build/quine.js' 'tangram.debug.js.map' ] -p [ mapstraction 'dist/tangram.debug.js.map' ] -o dist/tangram.debug.js\",\n \"build-minify\": \"$(npm bin)/uglifyjs dist/tangram.debug.js -c warnings=false -m -o dist/tangram.min.js && npm run build-size\",\n \"build-size\": \"gzip dist/tangram.min.js -c | wc -c | awk '{kb=$1/1024; print kb}' OFMT='%.0fk minified+gzipped'\",\n \"watch\": \"$(npm bin)/budo src/module.js:dist/tangram.debug.js --port 8000 --cors --live -- -t [ babelify --presets [ es2015 ] ] -t brfs -s Tangram -p [ './build/quine.js' 'tangram.debug.temp.js.map' ] -p [ mapstraction 'dist/tangram.debug.temp.js.map' ]\"\n },\n \"author\": {\n \"name\": \"Mapzen\",\n \"email\": \"tangram@mapzen.com\"\n },\n \"contributors\": [\n {\n \"name\": \"Brett Camper\"\n },\n {\n \"name\": \"Peter Richardson\"\n },\n {\n \"name\": \"Patricio Gonzalez Vivo\"\n },\n {\n \"name\": \"Karim Naaji\"\n },\n {\n \"name\": \"Ivan Willig\"\n },\n {\n \"name\": \"Lou Huang\"\n },\n {\n \"name\": \"David Valdman\"\n }\n ],\n \"license\": \"MIT\",\n \"dependencies\": {\n \"brfs\": \"1.4.3\",\n \"csscolorparser\": \"1.0.3\",\n \"earcut\": \"2.1.1\",\n \"fontfaceobserver\": \"2.0.7\",\n \"geojson-vt\": \"2.4.0\",\n \"gl-mat3\": \"1.0.0\",\n \"gl-mat4\": \"1.1.4\",\n \"gl-shader-errors\": \"1.0.3\",\n \"js-yaml\": \"tangrams/js-yaml#read-only\",\n \"jszip\": \"tangrams/jszip#read-only\",\n \"pbf\": \"1.3.7\",\n \"strip-comments\": \"0.3.2\",\n \"topojson-client\": \"tangrams/topojson-client#read-only\",\n \"vector-tile\": \"1.3.0\"\n },\n \"devDependencies\": {\n \"babelify\": \"7.3.0\",\n \"babel-preset-es2015\": \"6.16.0\",\n \"browserify\": \"13.0.1\",\n \"browserify-derequire\": \"0.9.4\",\n \"budo\": \"10.0.3\",\n \"chai\": \"1.9.2\",\n \"chai-as-promised\": \"4.1.1\",\n \"core-js\": \"2.4.1\",\n \"glob\": \"4.0.6\",\n \"jshint\": \"jshint/jshint#3a8efa979dbb157bfb5c10b5826603a55a33b9ad\",\n \"karma\": \"1.5.0\",\n \"karma-browserify\": \"5.1.0\",\n \"karma-chrome-launcher\": \"2.0.0\",\n \"karma-mocha\": \"0.1.9\",\n \"karma-mocha-reporter\": \"1.0.0\",\n \"karma-sauce-launcher\": \"tangrams/karma-sauce-launcher#firefox-profiles2\",\n \"karma-sinon\": \"1.0.4\",\n \"mapstraction\": \"1.0.1\",\n \"mocha\": \"1.21.4\",\n \"sinon\": \"1.10.3\",\n \"through2\": \"2.0.3\",\n \"uglify-js\": \"2.4.14\",\n \"yargs\": \"1.3.2\"\n }\n}\n"); var version = void 0; exports.default = version = 'v' + pkg.version; @@ -44338,7 +44389,7 @@ var View = function () { } } - this.scene.updateConfig({ rebuild: false }); + this.scene.updateConfig({ rebuild: false, normalize: false }); return this.getActiveCamera(); } diff --git a/dist/tangram.debug.js.map b/dist/tangram.debug.js.map index 0b77170b4..38f14f898 100644 --- a/dist/tangram.debug.js.map +++ b/dist/tangram.debug.js.map @@ -274,7 +274,7 @@ "src/view.js" ], "names": [], - "mappings": "AAAA;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AClEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC/NA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClHA;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC7vDA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtBA;AACA;AACA;AACA;AACA;;ACJA;AACA;;ACDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnBA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1CA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxBA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;;ACAA;AACA;AACA;;ACFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;;ACFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpBA;AACA;AACA;;ACFA;;ACAA;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1EA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1SA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC3GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpoBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9SA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrBA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACljDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AC1CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnYA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;ACvQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;AC7MA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpSA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC/2BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;ACnLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACngBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClaA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/zDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClgDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AC/JA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACtaA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;ACnIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7NA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AClHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACnEA;AACA;AACA;AACA;AACA;AACA;;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC1kBA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC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", + "mappings": "AAAA;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AClEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC/NA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClHA;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC7vDA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtBA;AACA;AACA;AACA;AACA;;ACJA;AACA;;ACDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnBA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1CA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxBA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;;ACAA;AACA;AACA;;ACFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;;ACFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpBA;AACA;AACA;;ACFA;;ACAA;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1EA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1SA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC3GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpoBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9SA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrBA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACljDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AC1CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnYA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;ACvQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;AC7MA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpSA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC/2BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;ACnLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACngBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClaA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/zDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClgDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AC/JA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACtaA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;ACnIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7NA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AClHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACnEA;AACA;AACA;AACA;AACA;AACA;;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC1kBA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC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", "file": "generated.js", "sourceRoot": "", "sourcesContent": [ @@ -476,7 +476,7 @@ "// Geometry building functions\nimport Geo from '../geo';\n\nexport const tile_bounds = [\n { x: 0, y: 0},\n { x: Geo.tile_scale, y: -Geo.tile_scale } // TODO: correct for flipped y-axis?\n];\n\nexport const default_uvs = [0, 0, 1, 1];\n\n// Tests if a line segment (from point A to B) is outside the tile bounds\n// (within a certain tolerance to account for geometry nearly on tile edges)\nexport function outsideTile (_a, _b, tolerance) {\n let tile_min = tile_bounds[0];\n let tile_max = tile_bounds[1];\n\n // TODO: fix flipped Y coords here, confusing with 'max' reference\n if ((_a[0] <= tile_min.x + tolerance && _b[0] <= tile_min.x + tolerance) ||\n (_a[0] >= tile_max.x - tolerance && _b[0] >= tile_max.x - tolerance) ||\n (_a[1] >= tile_min.y - tolerance && _b[1] >= tile_min.y - tolerance) ||\n (_a[1] <= tile_max.y + tolerance && _b[1] <= tile_max.y + tolerance)) {\n return true;\n }\n\n return false;\n}\n\nexport function isCoordOutsideTile (coord, tolerance) {\n tolerance = tolerance || 0;\n let tile_min = tile_bounds[0];\n let tile_max = tile_bounds[1];\n\n return coord[0] <= tile_min.x + tolerance ||\n coord[0] >= tile_max.x - tolerance ||\n coord[1] >= tile_min.y - tolerance ||\n coord[1] <= tile_max.y + tolerance;\n}\n", "// Point builders\nimport { default_uvs } from './common';\n\n// Build a billboard sprite quad centered on a point. Sprites are intended to be drawn in screenspace, and have\n// properties for width, height, angle, and a scale factor that can be used to interpolate the screenspace size\n// of a sprite between two zoom levels.\nexport function buildQuadsForPoints (points, vertex_data, vertex_template,\n { texcoord_index, position_index, shape_index, offset_index, offsets_index, pre_angles_index, angles_index },\n { quad, quad_normalize, offset, offsets, pre_angles, angle, angles, shape_w, curve, texcoord_scale, texcoord_normalize, pre_angles_normalize, angles_normalize, offsets_normalize }) {\n quad_normalize = quad_normalize || 1;\n let w2 = quad[0] / 2 * quad_normalize;\n let h2 = quad[1] / 2 * quad_normalize;\n let scaling = [\n [-w2, -h2],\n [w2, -h2],\n [w2, h2],\n [-w2, h2]\n ];\n\n let vertex_elements = vertex_data.vertex_elements;\n let element_offset = vertex_data.vertex_count;\n\n let texcoords;\n if (texcoord_index) {\n texcoord_normalize = texcoord_normalize || 1;\n\n var [min_u, min_v, max_u, max_v] = texcoord_scale || default_uvs;\n\n texcoords = [\n [min_u, min_v],\n [max_u, min_v],\n [max_u, max_v],\n [min_u, max_v]\n ];\n }\n\n var geom_count = 0;\n let num_points = points.length;\n for (let p=0; p < num_points; p++) {\n let point = points[p];\n\n for (let pos=0; pos < 4; pos++) {\n // Add texcoords\n if (texcoord_index) {\n vertex_template[texcoord_index + 0] = texcoords[pos][0] * texcoord_normalize;\n vertex_template[texcoord_index + 1] = texcoords[pos][1] * texcoord_normalize;\n }\n\n vertex_template[position_index + 0] = point[0];\n vertex_template[position_index + 1] = point[1];\n\n vertex_template[shape_index + 0] = scaling[pos][0];\n vertex_template[shape_index + 1] = scaling[pos][1];\n vertex_template[shape_index + 2] = angle;\n vertex_template[shape_index + 3] = shape_w;\n\n vertex_template[offset_index + 0] = offset[0];\n vertex_template[offset_index + 1] = offset[1];\n\n if (curve){\n // 1 byte (signed) range: [-127, 128]\n // actual range: [-2pi, 2pi]\n // total: multiply by 128 / (2 PI)\n vertex_template[pre_angles_index + 0] = pre_angles_normalize * pre_angles[0];\n vertex_template[pre_angles_index + 1] = pre_angles_normalize * pre_angles[1];\n vertex_template[pre_angles_index + 2] = pre_angles_normalize * pre_angles[2];\n vertex_template[pre_angles_index + 3] = pre_angles_normalize * pre_angles[3];\n\n // 2 byte (signed) of resolution [-32767, 32768]\n // actual range: [-2pi, 2pi]\n // total: multiply by 32768 / (2 PI) = 16384 / PI\n vertex_template[angles_index + 0] = angles_normalize * angles[0];\n vertex_template[angles_index + 1] = angles_normalize * angles[1];\n vertex_template[angles_index + 2] = angles_normalize * angles[2];\n vertex_template[angles_index + 3] = angles_normalize * angles[3];\n\n // offset range can be [0, 65535]\n // actual range: [0, 1024]\n vertex_template[offsets_index + 0] = offsets_normalize * offsets[0];\n vertex_template[offsets_index + 1] = offsets_normalize * offsets[1];\n vertex_template[offsets_index + 2] = offsets_normalize * offsets[2];\n vertex_template[offsets_index + 3] = offsets_normalize * offsets[3];\n }\n\n vertex_data.addVertex(vertex_template);\n }\n\n vertex_elements.push(element_offset + 0);\n vertex_elements.push(element_offset + 1);\n vertex_elements.push(element_offset + 2);\n vertex_elements.push(element_offset + 2);\n vertex_elements.push(element_offset + 3);\n vertex_elements.push(element_offset + 0);\n\n element_offset += 4;\n geom_count += 2;\n }\n\n return geom_count;\n}\n", "// Polygon builders\nimport Geo from '../geo';\nimport Vector from '../vector';\nimport { default_uvs, outsideTile } from './common';\n\nimport earcut from 'earcut';\n\nconst up_vec3 = [0, 0, 1];\n\n// Tesselate a flat 2D polygon\n// x & y coordinates will be set as first two elements of provided vertex_template\nexport function buildPolygons (\n polygons,\n vertex_data, vertex_template,\n { texcoord_index, texcoord_scale, texcoord_normalize }) {\n\n var vertex_elements = vertex_data.vertex_elements;\n\n if (texcoord_index) {\n texcoord_normalize = texcoord_normalize || 1;\n var [min_u, min_v, max_u, max_v] = texcoord_scale || default_uvs;\n }\n\n var geom_count = 0;\n var num_polygons = polygons.length;\n for (var p=0; p < num_polygons; p++) {\n var element_offset = vertex_data.vertex_count;\n\n var polygon = polygons[p];\n\n // Find polygon extents to calculate UVs, fit them to the axis-aligned bounding box\n if (texcoord_index) {\n var [min_x, min_y, max_x, max_y] = Geo.findBoundingBox(polygon);\n var span_x = max_x - min_x;\n var span_y = max_y - min_y;\n var scale_u = (max_u - min_u) / span_x;\n var scale_v = (max_v - min_v) / span_y;\n }\n\n for (var ring_index = 0; ring_index < polygon.length; ring_index++){\n // Add vertex data\n var polygon_ring = polygon[ring_index];\n for (let i = 0; i < polygon_ring.length; i++) {\n var vertex = polygon_ring[i];\n vertex_template[0] = vertex[0];\n vertex_template[1] = vertex[1];\n\n // Add UVs\n if (texcoord_index) {\n vertex_template[texcoord_index + 0] = ((vertex[0] - min_x) * scale_u + min_u) * texcoord_normalize;\n vertex_template[texcoord_index + 1] = ((vertex[1] - min_y) * scale_v + min_v) * texcoord_normalize;\n }\n\n vertex_data.addVertex(vertex_template);\n }\n }\n\n // Add element indices\n var indices = triangulatePolygon(earcut.flatten(polygon));\n for (let i = 0; i < indices.length; i++){\n vertex_elements.push(element_offset + indices[i]);\n }\n geom_count += indices.length/3;\n }\n return geom_count;\n}\n\n// Tesselate and extrude a flat 2D polygon into a simple 3D model with fixed height and add to GL vertex buffer\nexport function buildExtrudedPolygons (\n polygons,\n z, height, min_height,\n vertex_data, vertex_template,\n normal_index,\n normal_normalize,\n {\n remove_tile_edges,\n tile_edge_tolerance,\n texcoord_index,\n texcoord_scale,\n texcoord_normalize,\n winding\n }) {\n\n // Top\n var min_z = z + (min_height || 0);\n var max_z = z + height;\n vertex_template[2] = max_z;\n var geom_count = buildPolygons(polygons, vertex_data, vertex_template, { texcoord_index, texcoord_scale, texcoord_normalize });\n\n var vertex_elements = vertex_data.vertex_elements;\n var element_offset = vertex_data.vertex_count;\n\n // Walls\n // Fit UVs to wall quad\n if (texcoord_index) {\n texcoord_normalize = texcoord_normalize || 1;\n var [min_u, min_v, max_u, max_v] = texcoord_scale || default_uvs;\n var texcoords = [\n [min_u, max_v],\n [min_u, min_v],\n [max_u, min_v],\n [max_u, max_v]\n ];\n }\n\n var num_polygons = polygons.length;\n for (var p=0; p < num_polygons; p++) {\n var polygon = polygons[p];\n\n for (var q=0; q < polygon.length; q++) {\n var contour = polygon[q];\n\n for (var w=0; w < contour.length - 1; w++) {\n if (remove_tile_edges && outsideTile(contour[w], contour[w+1], tile_edge_tolerance)) {\n continue; // don't extrude tile edges\n }\n\n // Wall order is dependent on winding order, so that normals face outward\n let w0, w1;\n if (winding === 'CCW') {\n w0 = w;\n w1 = w+1;\n }\n else {\n w0 = w+1;\n w1 = w;\n }\n\n // Two triangles for the quad formed by each vertex pair, going from bottom to top height\n var wall_vertices = [\n [contour[w1][0], contour[w1][1], max_z],\n [contour[w1][0], contour[w1][1], min_z],\n [contour[w0][0], contour[w0][1], min_z],\n [contour[w0][0], contour[w0][1], max_z]\n ];\n\n // Calc the normal of the wall from up vector and one segment of the wall triangles\n let wall_vec = Vector.normalize([contour[w1][0] - contour[w0][0], contour[w1][1] - contour[w0][1], 0]);\n let normal = Vector.cross(up_vec3, wall_vec);\n\n // Update vertex template with current surface normal\n vertex_template[normal_index + 0] = normal[0] * normal_normalize;\n vertex_template[normal_index + 1] = normal[1] * normal_normalize;\n vertex_template[normal_index + 2] = normal[2] * normal_normalize;\n\n for (var wv=0; wv < wall_vertices.length; wv++) {\n vertex_template[0] = wall_vertices[wv][0];\n vertex_template[1] = wall_vertices[wv][1];\n vertex_template[2] = wall_vertices[wv][2];\n\n if (texcoord_index) {\n vertex_template[texcoord_index + 0] = texcoords[wv][0] * texcoord_normalize;\n vertex_template[texcoord_index + 1] = texcoords[wv][1] * texcoord_normalize;\n }\n\n vertex_data.addVertex(vertex_template);\n }\n\n vertex_elements.push(element_offset + 0);\n vertex_elements.push(element_offset + 1);\n vertex_elements.push(element_offset + 2);\n vertex_elements.push(element_offset + 2);\n vertex_elements.push(element_offset + 3);\n vertex_elements.push(element_offset + 0);\n\n element_offset += 4;\n geom_count += 2;\n }\n }\n }\n return geom_count;\n}\n\n// Triangulation using earcut\n// https://github.com/mapbox/earcut\nexport function triangulatePolygon (data) {\n return earcut(data.vertices, data.holes, data.dimensions);\n}\n", - "// Geometry building functions\n\nimport Vector from '../vector';\nimport Geo from '../geo';\nimport {outsideTile, isCoordOutsideTile} from './common';\n\nconst zero_vec2 = [0, 0];\n\n// Build tessellated triangles for a polyline\nconst CAP_TYPE = {\n butt: 0,\n square: 1,\n round: 2\n};\n\nconst JOIN_TYPE = {\n miter: 0,\n bevel: 1,\n round: 2\n};\n\nconst DEFAULT = {\n MITER_LIMIT: 3,\n TEXCOORD_NORMALIZE: 1,\n TEXCOORD_RATIO: 1,\n MIN_FAN_WIDTH: 5 // Width of line in tile units to place 1 triangle per fan\n};\n\n// Scaling factor to add precision to line texture V coordinate packed as normalized short\nconst v_scale_adjust = Geo.tile_scale;\n\nexport function buildPolylines (lines, width, vertex_data, vertex_template,\n {\n closed_polygon,\n remove_tile_edges,\n tile_edge_tolerance,\n texcoord_index,\n texcoord_scale,\n texcoord_width,\n texcoord_ratio,\n texcoord_normalize,\n scaling_index,\n scaling_normalize,\n join, cap,\n miter_limit\n }) {\n\n var cap_type = cap ? CAP_TYPE[cap] : CAP_TYPE.butt;\n var join_type = join ? JOIN_TYPE[join] : JOIN_TYPE.miter;\n\n // Configure miter limit\n if (join_type === JOIN_TYPE.miter) {\n miter_limit = miter_limit || DEFAULT.MITER_LIMIT; // default miter limit\n var miter_len_sq = miter_limit * miter_limit;\n }\n\n // Texture Variables\n var v_scale;\n if (texcoord_index) {\n texcoord_normalize = texcoord_normalize || DEFAULT.TEXCOORD_NORMALIZE;\n texcoord_ratio = texcoord_ratio || DEFAULT.TEXCOORD_RATIO;\n v_scale = 1 / (texcoord_width * texcoord_ratio * v_scale_adjust); // scales line texture as a ratio of the line's width\n }\n\n // Values that are constant for each line and are passed to helper functions\n var context = {\n closed_polygon,\n remove_tile_edges,\n tile_edge_tolerance,\n miter_len_sq,\n join_type,\n cap_type,\n vertex_data,\n vertex_template,\n half_width: width / 2,\n scaling_index,\n scaling_normalize,\n v_scale,\n texcoord_index,\n texcoord_width,\n texcoord_normalize,\n geom_count: 0\n };\n\n // Buffer for extra lines to process\n var extra_lines = [];\n\n // Process lines\n for (let index = 0; index < lines.length; index++) {\n buildPolyline(lines[index], context, extra_lines);\n }\n\n // Process extra lines\n for (let index = 0; index < extra_lines.length; index++) {\n buildPolyline(extra_lines[index], context, extra_lines);\n }\n\n return context.geom_count;\n}\n\nfunction buildPolyline(line, context, extra_lines){\n // Skip if line is not valid\n if (line.length < 2) {\n return;\n }\n\n var {join_type, cap_type, closed_polygon, remove_tile_edges, tile_edge_tolerance, v_scale, miter_len_sq} = context;\n\n // Loop backwards through line to a tile boundary if found\n if (closed_polygon && join_type === JOIN_TYPE.miter) {\n var boundaryIndex = getTileBoundaryIndex(line);\n if (boundaryIndex !== 0) {\n // create new line that is a cyclic permutation of the original\n var permutedLine = permuteLine(line, boundaryIndex);\n extra_lines.push(permutedLine);\n return;\n }\n }\n\n var coordCurr, coordNext, normPrev, normNext;\n var v = 0; // Texture v-coordinate\n\n var index_start = 0;\n var index_end = line.length - 1;\n var ignored_indices_count = 0;\n\n // FIRST POINT\n // loop through beginning points if duplicates\n coordCurr = line[index_start];\n coordNext = line[index_start + 1];\n while (Vector.isEqual(coordCurr, coordNext)) {\n index_start++;\n coordCurr = coordNext;\n coordNext = line[index_start + 1];\n ignored_indices_count++;\n if (index_start === line.length - 1) {\n return;\n }\n }\n\n // loop through ending points to check for duplicates\n while (Vector.isEqual(line[index_end], line[index_end - 1])) {\n index_end--;\n ignored_indices_count++;\n if (index_end === 0) {\n return;\n }\n }\n\n if (line.length < 2 + ignored_indices_count) {\n return;\n }\n\n normNext = Vector.normalize(Vector.perp(coordCurr, coordNext));\n\n // Skip tile boundary lines and append a new line if needed\n if (remove_tile_edges && outsideTile(coordCurr, coordNext, tile_edge_tolerance)) {\n var nonBoundarySegment = getNextNonBoundarySegment(line, index_start, tile_edge_tolerance);\n if (nonBoundarySegment) {\n extra_lines.push(nonBoundarySegment);\n }\n return;\n }\n\n if (closed_polygon){\n // Begin the polygon with a join (connecting the first and last segments)\n normPrev = Vector.normalize(Vector.perp(line[index_end - 1], coordCurr));\n startPolygon(coordCurr, normPrev, normNext, join_type, context);\n }\n else {\n // If line begins at edge, don't add a cap\n if (!isCoordOutsideTile(coordCurr)) {\n addCap(coordCurr, v, normNext, cap_type, true, context);\n if (cap_type !== CAP_TYPE.butt) {\n v += 0.5 * v_scale * context.texcoord_width;\n }\n }\n\n // Add first pair of points for the line strip\n addVertex(coordCurr, normNext, [1, v], context);\n addVertex(coordCurr, Vector.neg(normNext), [0, v], context);\n }\n\n // INTERMEDIARY POINTS\n v += v_scale * Vector.length(Vector.sub(coordNext, coordCurr));\n for (var i = index_start + 1; i < index_end; i++) {\n var currIndex = i;\n var nextIndex = i + 1;\n coordCurr = line[currIndex];\n coordNext = line[nextIndex];\n\n // Skip redundant vertices\n if (Vector.isEqual(coordCurr, coordNext)) {\n continue;\n }\n\n // Remove tile boundaries\n if (remove_tile_edges && outsideTile(coordCurr, coordNext, tile_edge_tolerance)) {\n addVertex(coordCurr, normNext, [1, v], context);\n addVertex(coordCurr, Vector.neg(normNext), [0, v], context);\n indexPairs(1, context);\n\n var nonBoundaryLines = getNextNonBoundarySegment(line, currIndex + 1, tile_edge_tolerance);\n if (nonBoundaryLines) {\n extra_lines.push(nonBoundaryLines);\n }\n return;\n }\n\n normPrev = normNext;\n normNext = Vector.normalize(Vector.perp(coordCurr, coordNext));\n\n // Add join\n if (join_type === JOIN_TYPE.miter) {\n addMiter(v, coordCurr, normPrev, normNext, miter_len_sq, false, context);\n }\n else {\n addJoin(join_type, v, coordCurr, normPrev, normNext, false, context);\n }\n\n v += v_scale * Vector.length(Vector.sub(coordNext, coordCurr));\n }\n\n // LAST POINT\n coordCurr = coordNext;\n normPrev = normNext;\n\n if (closed_polygon) {\n // Close the polygon with a miter joint or butt cap if on a tile boundary\n normNext = Vector.normalize(Vector.perp(coordCurr, line[1]));\n endPolygon(coordCurr, normPrev, normNext, join_type, v, context);\n }\n else {\n // Finish the line strip\n addVertex(coordCurr, normPrev, [1, v], context);\n addVertex(coordCurr, Vector.neg(normPrev), [0, v], context);\n indexPairs(1, context);\n\n // If line ends at edge, don't add a cap\n if (!isCoordOutsideTile(coordCurr)) {\n addCap(coordCurr, v, normPrev, cap_type, false, context);\n }\n }\n}\n\nfunction getTileBoundaryIndex(line){\n if (isCoordOutsideTile(line[0])) {\n return 0;\n }\n\n for (var backIndex = 0; backIndex < line.length; backIndex++) {\n var coordCurr = line[line.length - 1 - backIndex];\n if (isCoordOutsideTile(coordCurr)) {\n return line.length - 1 - backIndex;\n }\n }\n\n return 0;\n}\n\n// Iterate through line from startIndex to find a segment not on a tile boundary, if any.\nfunction getNextNonBoundarySegment (line, startIndex, tolerance) {\n var endIndex = startIndex;\n while (line[endIndex + 1] && outsideTile(line[endIndex], line[endIndex + 1], tolerance)) {\n endIndex++;\n }\n\n // If there is a line segment remaining that is within the tile, push it to the lines array\n return (line.length - endIndex >= 2) ? line.slice(endIndex) : false;\n}\n\n// Begin a polygon with a join connecting to the last segment (if valid join-type specified)\nfunction startPolygon(coordCurr, normPrev, normNext, join_type, context){\n // If polygon starts on a tile boundary, don't add a join\n if (join_type === undefined || isCoordOutsideTile(coordCurr)) {\n addVertex(coordCurr, normNext, [1, 0], context);\n addVertex(coordCurr, Vector.neg(normNext), [0, 0], context);\n }\n else {\n // If polygon starts within a tile, add a join\n var v = 0;\n if (join_type === JOIN_TYPE.miter) {\n addMiter(v, coordCurr, normPrev, normNext, context.miter_len_sq, true, context);\n }\n else {\n addJoin(join_type, v, coordCurr, normPrev, normNext, true, context);\n }\n }\n}\n\n// End a polygon appropriately\nfunction endPolygon(coordCurr, normPrev, normNext, join_type, v, context) {\n // If polygon ends on a tile boundary, don't add a join\n if (isCoordOutsideTile(coordCurr)) {\n addVertex(coordCurr, normPrev, [1, v], context);\n addVertex(coordCurr, Vector.neg(normPrev), [0, v], context);\n indexPairs(1, context);\n }\n else {\n // If polygon ends within a tile, add Miter or no joint (join added on startPolygon)\n var miterVec = createMiterVec(normPrev, normNext);\n\n if (join_type === JOIN_TYPE.miter && Vector.lengthSq(miterVec) > context.miter_len_sq) {\n join_type = JOIN_TYPE.bevel; // switch to bevel\n }\n\n if (join_type === JOIN_TYPE.miter) {\n addVertex(coordCurr, miterVec, [1, v], context);\n addVertex(coordCurr, Vector.neg(miterVec), [0, v], context);\n indexPairs(1, context);\n }\n else {\n addVertex(coordCurr, normPrev, [1, v], context);\n addVertex(coordCurr, Vector.neg(normPrev), [0, v], context);\n indexPairs(1, context);\n }\n }\n}\n\nfunction createMiterVec(normPrev, normNext) {\n var miterVec = Vector.normalize(Vector.add(normPrev, normNext));\n var scale = 2 / (1 + Math.abs(Vector.dot(normPrev, miterVec)));\n return Vector.mult(miterVec, scale * scale);\n}\n\n// Add a miter vector or a join if the miter is too sharp\nfunction addMiter (v, coordCurr, normPrev, normNext, miter_len_sq, isBeginning, context) {\n var miterVec = createMiterVec(normPrev, normNext);\n\n // Miter limit: if miter join is too sharp, convert to bevel instead\n if (Vector.lengthSq(miterVec) > miter_len_sq) {\n addJoin(JOIN_TYPE.bevel, v, coordCurr, normPrev, normNext, isBeginning, context);\n }\n else {\n addVertex(coordCurr, miterVec, [1, v], context);\n addVertex(coordCurr, Vector.neg(miterVec), [0, v], context);\n if (!isBeginning) {\n indexPairs(1, context);\n }\n }\n}\n\n// Add a bevel or round join\nfunction addJoin(join_type, v, coordCurr, normPrev, normNext, isBeginning, context) {\n var miterVec = createMiterVec(normPrev, normNext);\n var isClockwise = (normNext[0] * normPrev[1] - normNext[1] * normPrev[0] > 0);\n\n if (isClockwise){\n addVertex(coordCurr, miterVec, [1, v], context);\n addVertex(coordCurr, Vector.neg(normPrev), [0, v], context);\n\n if (!isBeginning) {\n indexPairs(1, context);\n }\n\n if (join_type === JOIN_TYPE.bevel) {\n addBevel(coordCurr,\n Vector.neg(normPrev), miterVec, Vector.neg(normNext),\n [0, v], [1, v], [0, v],\n context\n );\n }\n else if (join_type === JOIN_TYPE.round) {\n addFan(coordCurr,\n Vector.neg(normPrev), miterVec, Vector.neg(normNext),\n [0, v], [1, v], [0, v],\n false, context\n );\n }\n\n addVertex(coordCurr, miterVec, [1, v], context);\n addVertex(coordCurr, Vector.neg(normNext), [0, v], context);\n }\n else {\n addVertex(coordCurr, normPrev, [1, v], context);\n addVertex(coordCurr, Vector.neg(miterVec), [0, v], context);\n\n if (!isBeginning) {\n indexPairs(1, context);\n }\n\n if (join_type === JOIN_TYPE.bevel) {\n addBevel(coordCurr,\n normPrev, Vector.neg(miterVec), normNext,\n [1, v], [0, v], [1, v],\n context\n );\n }\n else if (join_type === JOIN_TYPE.round) {\n addFan(coordCurr,\n normPrev, Vector.neg(miterVec), normNext,\n [1, v], [0, v], [1, v],\n false, context\n );\n }\n\n addVertex(coordCurr, normNext, [1, v], context);\n addVertex(coordCurr, Vector.neg(miterVec), [0, v], context);\n }\n}\n\n// Add indices to vertex_elements\nfunction indexPairs(num_pairs, context){\n var vertex_elements = context.vertex_data.vertex_elements;\n var num_vertices = context.vertex_data.vertex_count;\n var offset = num_vertices - 2 * num_pairs - 2;\n\n for (var i = 0; i < num_pairs; i++){\n vertex_elements.push(offset + 2 * i + 2);\n vertex_elements.push(offset + 2 * i + 1);\n vertex_elements.push(offset + 2 * i + 0);\n vertex_elements.push(offset + 2 * i + 2);\n vertex_elements.push(offset + 2 * i + 3);\n vertex_elements.push(offset + 2 * i + 1);\n context.geom_count += 2;\n }\n}\n\nfunction addVertex(coordinate, normal, uv, context) {\n var vertex_template = context.vertex_template;\n var vertex_data = context.vertex_data;\n\n buildVertexTemplate(vertex_template, coordinate, uv, normal, context);\n vertex_data.addVertex(vertex_template);\n}\n\nfunction buildVertexTemplate (vertex_template, vertex, texture_coord, scale, context) {\n // set vertex position\n vertex_template[0] = vertex[0];\n vertex_template[1] = vertex[1];\n\n // set UVs\n if (context.texcoord_index && texture_coord) {\n vertex_template[context.texcoord_index + 0] = texture_coord[0] * context.texcoord_normalize;\n vertex_template[context.texcoord_index + 1] = texture_coord[1] * context.texcoord_normalize;\n }\n\n // set Scaling vertex (X, Y normal direction + Z half_width as attribute)\n if (context.scaling_index) {\n vertex_template[context.scaling_index + 0] = scale[0] * context.scaling_normalize;\n vertex_template[context.scaling_index + 1] = scale[1] * context.scaling_normalize;\n vertex_template[context.scaling_index + 2] = context.half_width;\n }\n}\n\n// Tessalate a FAN geometry between points A B\n// using their normals from a center \\ . . /\n// and interpolating their UVs \\ p /\n// \\./\nfunction addFan (coord, nA, nC, nB, uvA, uvC, uvB, isCap, context) {\n var cross = nA[0] * nB[1] - nA[1] * nB[0];\n var dot = Vector.dot(nA, nB);\n\n var angle = Math.atan2(cross, dot);\n while (angle >= Math.PI) {\n angle -= 2*Math.PI;\n }\n\n var numTriangles = trianglesPerArc(angle, context.half_width);\n if (numTriangles < 1) {\n return;\n }\n\n var pivotIndex = context.vertex_data.vertex_count;\n var vertex_elements = context.vertex_data.vertex_elements;\n\n addVertex(coord, nC, uvC, context);\n addVertex(coord, nA, uvA, context);\n\n var blade = nA;\n\n if (context.texcoord_index !== undefined) {\n var uvCurr;\n if (isCap){\n uvCurr = [];\n var affine_uvCurr = Vector.sub(uvA, uvC);\n }\n else {\n uvCurr = Vector.set(uvA);\n var uv_delta = Vector.div(Vector.sub(uvB, uvA), numTriangles);\n }\n }\n\n var angle_step = angle / numTriangles;\n for (var i = 0; i < numTriangles; i++) {\n blade = Vector.rot(blade, angle_step);\n\n if (context.texcoord_index !== undefined) {\n if (isCap){\n // UV textures go \"through\" the cap\n affine_uvCurr = Vector.rot(affine_uvCurr, angle_step);\n uvCurr[0] = affine_uvCurr[0] + uvC[0];\n uvCurr[1] = affine_uvCurr[1] * context.texcoord_width * context.v_scale + uvC[1]; // scale the v-coordinate\n }\n else {\n // UV textures go \"around\" the join\n uvCurr = Vector.add(uvCurr, uv_delta);\n }\n }\n\n addVertex(coord, blade, uvCurr, context);\n\n vertex_elements.push(pivotIndex + i + ((cross > 0) ? 2 : 1));\n vertex_elements.push(pivotIndex);\n vertex_elements.push(pivotIndex + i + ((cross > 0) ? 1 : 2));\n }\n}\n\n// addBevel A ----- B\n// / \\ / \\\n// / /\\ /\\ \\\n// / \\ / \\ \\\n// / C \\\nfunction addBevel (coord, nA, nC, nB, uA, uC, uB, context) {\n var pivotIndex = context.vertex_data.vertex_count;\n\n addVertex(coord, nC, uC, context);\n addVertex(coord, nA, uA, context);\n addVertex(coord, nB, uB, context);\n\n var orientation = nA[0] * nB[1] - nA[1] * nB[0] > 0;\n\n var vertex_elements = context.vertex_data.vertex_elements;\n\n if (orientation) {\n vertex_elements.push(pivotIndex + 2);\n vertex_elements.push(pivotIndex + 0);\n vertex_elements.push(pivotIndex + 1);\n } else {\n vertex_elements.push(pivotIndex + 1);\n vertex_elements.push(pivotIndex + 0);\n vertex_elements.push(pivotIndex + 2);\n }\n}\n\n// Function to add the vertex need for line caps,\n// because re-use the buffers needs to be at the end\nfunction addCap (coord, v, normal, type, isBeginning, context) {\n var neg_normal = Vector.neg(normal);\n\n switch (type){\n case CAP_TYPE.square:\n var tangent;\n if (isBeginning){\n tangent = [normal[1], -normal[0]];\n\n addVertex(coord, Vector.add(normal, tangent), [1, v], context);\n addVertex(coord, Vector.add(neg_normal, tangent), [0, v], context);\n\n // Add length of square cap to texture coordinate\n v += 0.5 * context.texcoord_width * context.v_scale;\n\n addVertex(coord, normal, [1, v], context);\n addVertex(coord, neg_normal, [0, v], context);\n }\n else {\n tangent = [-normal[1], normal[0]];\n\n addVertex(coord, normal, [1, v], context);\n addVertex(coord, neg_normal, [0, v], context);\n\n // Add length of square cap to texture coordinate\n v += 0.5 * context.texcoord_width * context.v_scale;\n\n addVertex(coord, Vector.add(normal, tangent), [1, v], context);\n addVertex(coord, Vector.add(neg_normal, tangent), [0, v], context);\n }\n\n indexPairs(1, context);\n break;\n case CAP_TYPE.round:\n var nA, nB, uvA, uvB, uvC;\n if (isBeginning) {\n nA = normal;\n nB = neg_normal;\n\n if (context.texcoord_index !== undefined){\n v += 0.5 * context.texcoord_width * context.v_scale;\n uvA = [1, v];\n uvB = [0, v];\n uvC = [0.5, v];\n }\n }\n else {\n nA = neg_normal;\n nB = normal;\n\n if (context.texcoord_index !== undefined){\n uvA = [0, v];\n uvB = [1, v];\n uvC = [0.5, v];\n }\n }\n\n addFan(coord,\n nA, zero_vec2, nB,\n uvA, uvC, uvB,\n true, context\n );\n\n break;\n case CAP_TYPE.butt:\n return;\n }\n}\n\n// For IE Math.log2 support\nlet log2 = Math.log2 || function(x){ return Math.log(x) * Math.LOG2E; };\n\n// Calculate number of triangles for a fan given an angle and line width\nfunction trianglesPerArc (angle, width) {\n if (angle < 0) {\n angle = -angle;\n }\n\n var numTriangles = (width > 2 * DEFAULT.MIN_FAN_WIDTH) ? log2(width / DEFAULT.MIN_FAN_WIDTH) : 1;\n return Math.ceil(angle / Math.PI * numTriangles);\n}\n\n// Cyclically permute closed line starting at an index\nfunction permuteLine(line, startIndex){\n var newLine = [];\n for (let i = 0; i < line.length; i++){\n var index = (i + startIndex) % line.length;\n // skip the first (repeated) index\n if (index !== 0) {\n newLine.push(line[index]);\n }\n }\n newLine.push(newLine[0]);\n return newLine;\n}", + "// Geometry building functions\n\nimport Vector from '../vector';\nimport Geo from '../geo';\nimport {outsideTile, isCoordOutsideTile} from './common';\n\nconst zero_vec2 = [0, 0];\n\n// Build tessellated triangles for a polyline\nconst CAP_TYPE = {\n butt: 0,\n square: 1,\n round: 2\n};\n\nconst JOIN_TYPE = {\n miter: 0,\n bevel: 1,\n round: 2\n};\n\nconst DEFAULT = {\n MITER_LIMIT: 3,\n TEXCOORD_NORMALIZE: 1,\n TEXCOORD_RATIO: 1,\n MIN_FAN_WIDTH: 5 // Width of line in tile units to place 1 triangle per fan\n};\n\n// Scaling factor to add precision to line texture V coordinate packed as normalized short\nconst v_scale_adjust = Geo.tile_scale;\n\nexport function buildPolylines (lines, width, vertex_data, vertex_template,\n {\n closed_polygon,\n remove_tile_edges,\n tile_edge_tolerance,\n texcoord_index,\n texcoord_scale,\n texcoord_width,\n texcoord_ratio,\n texcoord_normalize,\n scaling_index,\n scaling_normalize,\n join, cap,\n miter_limit\n }) {\n\n var cap_type = cap ? CAP_TYPE[cap] : CAP_TYPE.butt;\n var join_type = join ? JOIN_TYPE[join] : JOIN_TYPE.miter;\n\n // Configure miter limit\n if (join_type === JOIN_TYPE.miter) {\n miter_limit = miter_limit || DEFAULT.MITER_LIMIT; // default miter limit\n var miter_len_sq = miter_limit * miter_limit;\n }\n\n // Texture Variables\n var v_scale;\n if (texcoord_index) {\n texcoord_normalize = texcoord_normalize || DEFAULT.TEXCOORD_NORMALIZE;\n texcoord_ratio = texcoord_ratio || DEFAULT.TEXCOORD_RATIO;\n v_scale = 1 / (texcoord_width * texcoord_ratio * v_scale_adjust); // scales line texture as a ratio of the line's width\n }\n\n // Values that are constant for each line and are passed to helper functions\n var context = {\n closed_polygon,\n remove_tile_edges,\n tile_edge_tolerance,\n miter_len_sq,\n join_type,\n cap_type,\n vertex_data,\n vertex_template,\n half_width: width / 2,\n scaling_index,\n scaling_normalize,\n v_scale,\n texcoord_index,\n texcoord_width,\n texcoord_normalize,\n geom_count: 0\n };\n\n // Buffer for extra lines to process\n var extra_lines = [];\n\n // Process lines\n for (let index = 0; index < lines.length; index++) {\n buildPolyline(lines[index], context, extra_lines);\n }\n\n // Process extra lines (which are created above if lines need to be mutated for easier processing)\n for (let index = 0; index < extra_lines.length; index++) {\n buildPolyline(extra_lines[index], context, extra_lines);\n }\n\n return context.geom_count;\n}\n\nfunction buildPolyline(line, context, extra_lines){\n // Skip if line is not valid\n if (line.length < 2) {\n return;\n }\n\n var {join_type, cap_type, closed_polygon, remove_tile_edges, tile_edge_tolerance, v_scale, miter_len_sq} = context;\n\n // Loop backwards through line to a tile boundary if found\n // since you need to draw lines that are only partially inside the tile,\n // so we start at the first index where it is safe to loop through to the last index within the tile\n if (closed_polygon && join_type === JOIN_TYPE.miter) {\n var boundaryIndex = getTileBoundaryIndex(line);\n if (boundaryIndex !== 0) {\n // create new line that is a cyclic permutation of the original\n var permutedLine = permuteLine(line, boundaryIndex);\n extra_lines.push(permutedLine);\n return;\n }\n }\n\n var coordCurr, coordNext, normPrev, normNext;\n var v = 0; // Texture v-coordinate\n\n var index_start = 0;\n var index_end = line.length - 1;\n var ignored_indices_count = 0;\n\n // FIRST POINT\n // loop through beginning points if duplicates\n coordCurr = line[index_start];\n coordNext = line[index_start + 1];\n while (Vector.isEqual(coordCurr, coordNext)) {\n index_start++;\n coordCurr = coordNext;\n coordNext = line[index_start + 1];\n ignored_indices_count++;\n if (index_start === line.length - 1) {\n return;\n }\n }\n\n // loop through ending points to check for duplicates\n while (Vector.isEqual(line[index_end], line[index_end - 1])) {\n index_end--;\n ignored_indices_count++;\n if (index_end === 0) {\n return;\n }\n }\n\n if (line.length < 2 + ignored_indices_count) {\n return;\n }\n\n normNext = Vector.normalize(Vector.perp(coordCurr, coordNext));\n\n // Skip tile boundary lines and append a new line if needed\n if (remove_tile_edges && outsideTile(coordCurr, coordNext, tile_edge_tolerance)) {\n var nonBoundarySegment = getNextNonBoundarySegment(line, index_start, tile_edge_tolerance);\n if (nonBoundarySegment) {\n extra_lines.push(nonBoundarySegment);\n }\n return;\n }\n\n if (closed_polygon){\n // Begin the polygon with a join (connecting the first and last segments)\n normPrev = Vector.normalize(Vector.perp(line[index_end - 1], coordCurr));\n startPolygon(coordCurr, normPrev, normNext, join_type, context);\n }\n else {\n // If line begins at edge, don't add a cap\n if (!isCoordOutsideTile(coordCurr)) {\n addCap(coordCurr, v, normNext, cap_type, true, context);\n if (cap_type !== CAP_TYPE.butt) {\n v += 0.5 * v_scale * context.texcoord_width;\n }\n }\n\n // Add first pair of points for the line strip\n addVertex(coordCurr, normNext, [1, v], context);\n addVertex(coordCurr, Vector.neg(normNext), [0, v], context);\n }\n\n // INTERMEDIARY POINTS\n v += v_scale * Vector.length(Vector.sub(coordNext, coordCurr));\n for (var i = index_start + 1; i < index_end; i++) {\n var currIndex = i;\n var nextIndex = i + 1;\n coordCurr = line[currIndex];\n coordNext = line[nextIndex];\n\n // Skip redundant vertices\n if (Vector.isEqual(coordCurr, coordNext)) {\n continue;\n }\n\n // Remove tile boundaries\n if (remove_tile_edges && outsideTile(coordCurr, coordNext, tile_edge_tolerance)) {\n addVertex(coordCurr, normNext, [1, v], context);\n addVertex(coordCurr, Vector.neg(normNext), [0, v], context);\n indexPairs(1, context);\n\n var nonBoundaryLines = getNextNonBoundarySegment(line, currIndex + 1, tile_edge_tolerance);\n if (nonBoundaryLines) {\n extra_lines.push(nonBoundaryLines);\n }\n return;\n }\n\n normPrev = normNext;\n normNext = Vector.normalize(Vector.perp(coordCurr, coordNext));\n\n // Add join\n if (join_type === JOIN_TYPE.miter) {\n addMiter(v, coordCurr, normPrev, normNext, miter_len_sq, false, context);\n }\n else {\n addJoin(join_type, v, coordCurr, normPrev, normNext, false, context);\n }\n\n v += v_scale * Vector.length(Vector.sub(coordNext, coordCurr));\n }\n\n // LAST POINT\n coordCurr = coordNext;\n normPrev = normNext;\n\n if (closed_polygon) {\n // Close the polygon with a miter joint or butt cap if on a tile boundary\n normNext = Vector.normalize(Vector.perp(coordCurr, line[1]));\n endPolygon(coordCurr, normPrev, normNext, join_type, v, context);\n }\n else {\n // Finish the line strip\n addVertex(coordCurr, normPrev, [1, v], context);\n addVertex(coordCurr, Vector.neg(normPrev), [0, v], context);\n indexPairs(1, context);\n\n // If line ends at edge, don't add a cap\n if (!isCoordOutsideTile(coordCurr)) {\n addCap(coordCurr, v, normPrev, cap_type, false, context);\n }\n }\n}\n\nfunction getTileBoundaryIndex(line){\n if (isCoordOutsideTile(line[0])) {\n return 0;\n }\n\n for (var backIndex = 0; backIndex < line.length; backIndex++) {\n var coordCurr = line[line.length - 1 - backIndex];\n if (isCoordOutsideTile(coordCurr)) {\n return line.length - 1 - backIndex;\n }\n }\n\n return 0;\n}\n\n// Iterate through line from startIndex to find a segment not on a tile boundary, if any.\nfunction getNextNonBoundarySegment (line, startIndex, tolerance) {\n var endIndex = startIndex;\n while (line[endIndex + 1] && outsideTile(line[endIndex], line[endIndex + 1], tolerance)) {\n endIndex++;\n }\n\n // If there is a line segment remaining that is within the tile, push it to the lines array\n return (line.length - endIndex >= 2) ? line.slice(endIndex) : false;\n}\n\n// Begin a polygon with a join connecting to the last segment (if valid join-type specified)\nfunction startPolygon(coordCurr, normPrev, normNext, join_type, context){\n // If polygon starts on a tile boundary, don't add a join\n if (join_type === undefined || isCoordOutsideTile(coordCurr)) {\n addVertex(coordCurr, normNext, [1, 0], context);\n addVertex(coordCurr, Vector.neg(normNext), [0, 0], context);\n }\n else {\n // If polygon starts within a tile, add a join\n var v = 0;\n if (join_type === JOIN_TYPE.miter) {\n addMiter(v, coordCurr, normPrev, normNext, context.miter_len_sq, true, context);\n }\n else {\n addJoin(join_type, v, coordCurr, normPrev, normNext, true, context);\n }\n }\n}\n\n// End a polygon appropriately\nfunction endPolygon(coordCurr, normPrev, normNext, join_type, v, context) {\n // If polygon ends on a tile boundary, don't add a join\n if (isCoordOutsideTile(coordCurr)) {\n addVertex(coordCurr, normPrev, [1, v], context);\n addVertex(coordCurr, Vector.neg(normPrev), [0, v], context);\n indexPairs(1, context);\n }\n else {\n // If polygon ends within a tile, add Miter or no joint (join added on startPolygon)\n var miterVec = createMiterVec(normPrev, normNext);\n\n if (join_type === JOIN_TYPE.miter && Vector.lengthSq(miterVec) > context.miter_len_sq) {\n join_type = JOIN_TYPE.bevel; // switch to bevel\n }\n\n if (join_type === JOIN_TYPE.miter) {\n addVertex(coordCurr, miterVec, [1, v], context);\n addVertex(coordCurr, Vector.neg(miterVec), [0, v], context);\n indexPairs(1, context);\n }\n else {\n addVertex(coordCurr, normPrev, [1, v], context);\n addVertex(coordCurr, Vector.neg(normPrev), [0, v], context);\n indexPairs(1, context);\n }\n }\n}\n\nfunction createMiterVec(normPrev, normNext) {\n var miterVec = Vector.normalize(Vector.add(normPrev, normNext));\n var scale = 2 / (1 + Math.abs(Vector.dot(normPrev, miterVec)));\n return Vector.mult(miterVec, scale * scale);\n}\n\n// Add a miter vector or a join if the miter is too sharp\nfunction addMiter (v, coordCurr, normPrev, normNext, miter_len_sq, isBeginning, context) {\n var miterVec = createMiterVec(normPrev, normNext);\n\n // Miter limit: if miter join is too sharp, convert to bevel instead\n if (Vector.lengthSq(miterVec) > miter_len_sq) {\n addJoin(JOIN_TYPE.bevel, v, coordCurr, normPrev, normNext, isBeginning, context);\n }\n else {\n addVertex(coordCurr, miterVec, [1, v], context);\n addVertex(coordCurr, Vector.neg(miterVec), [0, v], context);\n if (!isBeginning) {\n indexPairs(1, context);\n }\n }\n}\n\n// Add a bevel or round join\nfunction addJoin(join_type, v, coordCurr, normPrev, normNext, isBeginning, context) {\n var miterVec = createMiterVec(normPrev, normNext);\n var isClockwise = (normNext[0] * normPrev[1] - normNext[1] * normPrev[0] > 0);\n\n if (isClockwise){\n addVertex(coordCurr, miterVec, [1, v], context);\n addVertex(coordCurr, Vector.neg(normPrev), [0, v], context);\n\n if (!isBeginning) {\n indexPairs(1, context);\n }\n\n if (join_type === JOIN_TYPE.bevel) {\n addBevel(coordCurr,\n Vector.neg(normPrev), miterVec, Vector.neg(normNext),\n [0, v], [1, v], [0, v],\n context\n );\n }\n else if (join_type === JOIN_TYPE.round) {\n addFan(coordCurr,\n Vector.neg(normPrev), miterVec, Vector.neg(normNext),\n [0, v], [1, v], [0, v],\n false, context\n );\n }\n\n addVertex(coordCurr, miterVec, [1, v], context);\n addVertex(coordCurr, Vector.neg(normNext), [0, v], context);\n }\n else {\n addVertex(coordCurr, normPrev, [1, v], context);\n addVertex(coordCurr, Vector.neg(miterVec), [0, v], context);\n\n if (!isBeginning) {\n indexPairs(1, context);\n }\n\n if (join_type === JOIN_TYPE.bevel) {\n addBevel(coordCurr,\n normPrev, Vector.neg(miterVec), normNext,\n [1, v], [0, v], [1, v],\n context\n );\n }\n else if (join_type === JOIN_TYPE.round) {\n addFan(coordCurr,\n normPrev, Vector.neg(miterVec), normNext,\n [1, v], [0, v], [1, v],\n false, context\n );\n }\n\n addVertex(coordCurr, normNext, [1, v], context);\n addVertex(coordCurr, Vector.neg(miterVec), [0, v], context);\n }\n}\n\n// Add indices to vertex_elements\nfunction indexPairs(num_pairs, context){\n var vertex_elements = context.vertex_data.vertex_elements;\n var num_vertices = context.vertex_data.vertex_count;\n var offset = num_vertices - 2 * num_pairs - 2;\n\n for (var i = 0; i < num_pairs; i++){\n vertex_elements.push(offset + 2 * i + 2);\n vertex_elements.push(offset + 2 * i + 1);\n vertex_elements.push(offset + 2 * i + 0);\n vertex_elements.push(offset + 2 * i + 2);\n vertex_elements.push(offset + 2 * i + 3);\n vertex_elements.push(offset + 2 * i + 1);\n context.geom_count += 2;\n }\n}\n\nfunction addVertex(coordinate, normal, uv, context) {\n var vertex_template = context.vertex_template;\n var vertex_data = context.vertex_data;\n\n buildVertexTemplate(vertex_template, coordinate, uv, normal, context);\n vertex_data.addVertex(vertex_template);\n}\n\nfunction buildVertexTemplate (vertex_template, vertex, texture_coord, scale, context) {\n // set vertex position\n vertex_template[0] = vertex[0];\n vertex_template[1] = vertex[1];\n\n // set UVs\n if (context.texcoord_index && texture_coord) {\n vertex_template[context.texcoord_index + 0] = texture_coord[0] * context.texcoord_normalize;\n vertex_template[context.texcoord_index + 1] = texture_coord[1] * context.texcoord_normalize;\n }\n\n // set Scaling vertex (X, Y normal direction + Z half_width as attribute)\n if (context.scaling_index) {\n vertex_template[context.scaling_index + 0] = scale[0] * context.scaling_normalize;\n vertex_template[context.scaling_index + 1] = scale[1] * context.scaling_normalize;\n vertex_template[context.scaling_index + 2] = context.half_width;\n }\n}\n\n// Tessalate a FAN geometry between points A B\n// using their normals from a center \\ . . /\n// and interpolating their UVs \\ p /\n// \\./\nfunction addFan (coord, nA, nC, nB, uvA, uvC, uvB, isCap, context) {\n var cross = nA[0] * nB[1] - nA[1] * nB[0];\n var dot = Vector.dot(nA, nB);\n\n var angle = Math.atan2(cross, dot);\n while (angle >= Math.PI) {\n angle -= 2*Math.PI;\n }\n\n var numTriangles = trianglesPerArc(angle, context.half_width);\n if (numTriangles < 1) {\n return;\n }\n\n var pivotIndex = context.vertex_data.vertex_count;\n var vertex_elements = context.vertex_data.vertex_elements;\n\n addVertex(coord, nC, uvC, context);\n addVertex(coord, nA, uvA, context);\n\n var blade = nA;\n\n if (context.texcoord_index !== undefined) {\n var uvCurr;\n if (isCap){\n uvCurr = [];\n var affine_uvCurr = Vector.sub(uvA, uvC);\n }\n else {\n uvCurr = Vector.set(uvA);\n var uv_delta = Vector.div(Vector.sub(uvB, uvA), numTriangles);\n }\n }\n\n var angle_step = angle / numTriangles;\n for (var i = 0; i < numTriangles; i++) {\n blade = Vector.rot(blade, angle_step);\n\n if (context.texcoord_index !== undefined) {\n if (isCap){\n // UV textures go \"through\" the cap\n affine_uvCurr = Vector.rot(affine_uvCurr, angle_step);\n uvCurr[0] = affine_uvCurr[0] + uvC[0];\n uvCurr[1] = affine_uvCurr[1] * context.texcoord_width * context.v_scale + uvC[1]; // scale the v-coordinate\n }\n else {\n // UV textures go \"around\" the join\n uvCurr = Vector.add(uvCurr, uv_delta);\n }\n }\n\n addVertex(coord, blade, uvCurr, context);\n\n vertex_elements.push(pivotIndex + i + ((cross > 0) ? 2 : 1));\n vertex_elements.push(pivotIndex);\n vertex_elements.push(pivotIndex + i + ((cross > 0) ? 1 : 2));\n }\n}\n\n// addBevel A ----- B\n// / \\ / \\\n// / /\\ /\\ \\\n// / \\ / \\ \\\n// / C \\\nfunction addBevel (coord, nA, nC, nB, uA, uC, uB, context) {\n var pivotIndex = context.vertex_data.vertex_count;\n\n addVertex(coord, nC, uC, context);\n addVertex(coord, nA, uA, context);\n addVertex(coord, nB, uB, context);\n\n var orientation = nA[0] * nB[1] - nA[1] * nB[0] > 0;\n\n var vertex_elements = context.vertex_data.vertex_elements;\n\n if (orientation) {\n vertex_elements.push(pivotIndex + 2);\n vertex_elements.push(pivotIndex + 0);\n vertex_elements.push(pivotIndex + 1);\n } else {\n vertex_elements.push(pivotIndex + 1);\n vertex_elements.push(pivotIndex + 0);\n vertex_elements.push(pivotIndex + 2);\n }\n}\n\n// Function to add the vertex need for line caps,\n// because re-use the buffers needs to be at the end\nfunction addCap (coord, v, normal, type, isBeginning, context) {\n var neg_normal = Vector.neg(normal);\n\n switch (type){\n case CAP_TYPE.square:\n var tangent;\n if (isBeginning){\n tangent = [normal[1], -normal[0]];\n\n addVertex(coord, Vector.add(normal, tangent), [1, v], context);\n addVertex(coord, Vector.add(neg_normal, tangent), [0, v], context);\n\n // Add length of square cap to texture coordinate\n v += 0.5 * context.texcoord_width * context.v_scale;\n\n addVertex(coord, normal, [1, v], context);\n addVertex(coord, neg_normal, [0, v], context);\n }\n else {\n tangent = [-normal[1], normal[0]];\n\n addVertex(coord, normal, [1, v], context);\n addVertex(coord, neg_normal, [0, v], context);\n\n // Add length of square cap to texture coordinate\n v += 0.5 * context.texcoord_width * context.v_scale;\n\n addVertex(coord, Vector.add(normal, tangent), [1, v], context);\n addVertex(coord, Vector.add(neg_normal, tangent), [0, v], context);\n }\n\n indexPairs(1, context);\n break;\n case CAP_TYPE.round:\n var nA, nB, uvA, uvB, uvC;\n if (isBeginning) {\n nA = normal;\n nB = neg_normal;\n\n if (context.texcoord_index !== undefined){\n v += 0.5 * context.texcoord_width * context.v_scale;\n uvA = [1, v];\n uvB = [0, v];\n uvC = [0.5, v];\n }\n }\n else {\n nA = neg_normal;\n nB = normal;\n\n if (context.texcoord_index !== undefined){\n uvA = [0, v];\n uvB = [1, v];\n uvC = [0.5, v];\n }\n }\n\n addFan(coord,\n nA, zero_vec2, nB,\n uvA, uvC, uvB,\n true, context\n );\n\n break;\n case CAP_TYPE.butt:\n return;\n }\n}\n\n// For IE Math.log2 support\nlet log2 = Math.log2 || function(x){ return Math.log(x) * Math.LOG2E; };\n\n// Calculate number of triangles for a fan given an angle and line width\nfunction trianglesPerArc (angle, width) {\n if (angle < 0) {\n angle = -angle;\n }\n\n var numTriangles = (width > 2 * DEFAULT.MIN_FAN_WIDTH) ? log2(width / DEFAULT.MIN_FAN_WIDTH) : 1;\n return Math.ceil(angle / Math.PI * numTriangles);\n}\n\n// Cyclically permute closed line starting at an index\nfunction permuteLine(line, startIndex){\n var newLine = [];\n for (let i = 0; i < line.length; i++){\n var index = (i + startIndex) % line.length;\n // skip the first (repeated) index\n if (index !== 0) {\n newLine.push(line[index]);\n }\n }\n newLine.push(newLine[0]);\n return newLine;\n}", "import Utils from './utils/utils';\nimport ShaderProgram from './gl/shader_program';\nimport {mat4, mat3, vec3} from './utils/gl-matrix';\n\n// Abstract base class\nexport default class Camera {\n\n constructor(name, view, options = {}) {\n this.view = view;\n this.position = options.position;\n this.zoom = options.zoom;\n }\n\n // Create a camera by type name, factory-style\n static create(name, view, config) {\n switch (config.type) {\n case 'isometric':\n return new IsometricCamera(name, view, config);\n case 'flat':\n return new FlatCamera(name, view, config);\n case 'perspective':\n /* falls through */\n default:\n return new PerspectiveCamera(name, view, config);\n }\n }\n\n // Update method called once per frame\n update() {\n }\n\n // Called once per frame per program (e.g. for main render pass, then for each additional pass for feature selection, etc.)\n setupProgram(program) {\n }\n\n // Sync camera position/zoom to scene view\n updateView () {\n if (this.position || this.zoom) {\n var view = {};\n if (this.position) {\n view = { lng: this.position[0], lat: this.position[1], zoom: this.position[2] };\n }\n if (this.zoom) {\n view.zoom = this.zoom;\n }\n this.view.setView(view);\n }\n }\n\n // Set model-view and normal matrices\n setupMatrices (matrices, program) {\n // Model view matrix - transform tile space into view space (meters, relative to camera)\n mat4.multiply(matrices.model_view32, this.view_matrix, matrices.model);\n program.uniform('Matrix4fv', 'u_modelView', matrices.model_view32);\n\n // Normal matrices - transforms surface normals into view space\n mat3.normalFromMat4(matrices.normal32, matrices.model_view32);\n mat3.invert(matrices.inverse_normal32, matrices.normal32);\n program.uniform('Matrix3fv', 'u_normalMatrix', matrices.normal32);\n program.uniform('Matrix3fv', 'u_inverseNormalMatrix', matrices.inverse_normal32);\n }\n\n}\n\n/**\n Perspective matrix projection\n\n This is a specialized perspective camera that, given a desired camera focal length (which can also vary by zoom level),\n constrains the camera height above the ground plane such that the displayed ground area of the map matches that of\n a traditional web mercator map. This means you can set the camera location by [lat, lng, zoom] as you would a typical\n web mercator map, then adjust the focal length as needed.\n\n Vanishing point can also be adjusted to achieve different \"viewing angles\", e.g. instead of looking straight down into\n the center of the viewport, the camera appears to be tilted at an angle. For example:\n\n [0, 0] = looking towards center of viewport\n [-250, -250] = looking 250 pixels from the viewport center to the lower-left corner\n [400, 0] = looking 400 pixels to the right of the viewport center\n*/\nclass PerspectiveCamera extends Camera {\n\n constructor(name, view, options = {}) {\n super(name, view, options);\n this.type = 'perspective';\n\n // a single scalar, or pairs of stops mapping zoom levels, e.g. [zoom, focal length]\n this.focal_length = options.focal_length;\n this.fov = options.fov;\n if (!this.focal_length && !this.fov) {\n // Default focal length ranges by zoom\n this.focal_length = [[16, 2], [17, 2.5], [18, 3], [19, 4], [20, 6]];\n }\n\n this.vanishing_point = options.vanishing_point || [0, 0]; // [x, y]\n this.vanishing_point = this.vanishing_point.map(parseFloat); // we implicitly only support px units here\n this.vanishing_point_skew = [];\n\n this.position_meters = null;\n this.view_matrix = new Float64Array(16);\n this.projection_matrix = new Float32Array(16);\n\n // 'camera' is the name of the shader block, e.g. determines where in the shader this code is injected\n ShaderProgram.replaceBlock('camera', `\n uniform mat4 u_projection;\n uniform vec3 u_eye;\n uniform vec2 u_vanishing_point;\n\n void cameraProjection (inout vec4 position) {\n position = u_projection * position;\n }`\n );\n }\n\n // Constrains the camera so that the viewable area matches given the viewport height\n // (in world space, e.g. meters), given either a camera focal length or field-of-view\n // (focal length is used if both are passed).\n constrainCamera({ view_height, height, focal_length, fov }) {\n // Solve for camera height\n if (!height) {\n // We have focal length, calculate FOV\n if (focal_length) {\n fov = Math.atan(1 / focal_length) * 2;\n }\n // We have FOV, calculate focal length\n else if (fov) {\n fov = fov * Math.PI / 180; // convert FOV degrees to radians\n focal_length = 1 / Math.tan(fov / 2);\n }\n\n // Distance that camera should be from ground such that it fits the field of view expected\n // for a conventional web mercator map at the current zoom level and camera focal length\n height = view_height / 2 * focal_length;\n }\n // Solve for camera focal length / field-of-view\n else {\n focal_length = 2 * height / view_height;\n fov = Math.atan(1 / focal_length) * 2;\n }\n\n return { view_height, height, focal_length, fov };\n }\n\n updateMatrices() {\n // TODO: only re-calculate these vars when necessary\n\n // Height of the viewport in meters at current zoom\n var viewport_height = this.view.size.css.height * this.view.meters_per_pixel;\n\n // Compute camera properties to fit desired view\n var { height, fov } = this.constrainCamera({\n view_height: viewport_height,\n focal_length: Utils.interpolate(this.view.zoom, this.focal_length),\n fov: Utils.interpolate(this.view.zoom, this.fov)\n });\n\n // View matrix\n var position = [this.view.center.meters.x, this.view.center.meters.y, height];\n this.position_meters = position;\n\n // mat4.lookAt(this.view_matrix,\n // vec3.fromValues(...position),\n // vec3.fromValues(position[0], position[1], height - 1),\n // vec3.fromValues(0, 1, 0));\n // Exclude camera height from view matrix\n mat4.lookAt(this.view_matrix,\n vec3.fromValues(position[0], position[1], 0),\n vec3.fromValues(position[0], position[1], -1),\n vec3.fromValues(0, 1, 0));\n\n // Projection matrix\n mat4.perspective(this.projection_matrix, fov, this.view.aspect, 1, height * 2);\n\n // Convert vanishing point from pixels to viewport space\n this.vanishing_point_skew[0] = this.vanishing_point[0] / this.view.size.css.width;\n this.vanishing_point_skew[1] = this.vanishing_point[1] / this.view.size.css.height;\n\n // Adjust projection matrix to include vanishing point skew\n this.projection_matrix[8] = -this.vanishing_point_skew[0] * 2; // z column of x row, e.g. amount z skews x\n this.projection_matrix[9] = -this.vanishing_point_skew[1] * 2; // z column of y row, e.g. amount z skews y\n\n // Translate geometry into the distance so that camera is appropriate height above ground\n // Additionally, adjust xy to compensate for any vanishing point skew, e.g. move geometry so that the displayed g\n // plane of the map matches that expected by a traditional web mercator map at this [lat, lng, zoom].\n mat4.translate(this.projection_matrix, this.projection_matrix,\n vec3.fromValues(\n viewport_height/2 * this.view.aspect * (-this.vanishing_point_skew[0] * 2),\n viewport_height/2 * (-this.vanishing_point_skew[1] * 2),\n 0\n )\n );\n\n // Include camera height in projection matrix\n mat4.translate(this.projection_matrix, this.projection_matrix, vec3.fromValues(0, 0, -height));\n }\n\n update() {\n super.update();\n this.updateMatrices();\n }\n\n setupProgram(program) {\n program.uniform('Matrix4fv', 'u_projection', this.projection_matrix);\n program.uniform('3f', 'u_eye', [0, 0, this.position_meters[2]]);\n program.uniform('2fv', 'u_vanishing_point', this.vanishing_point_skew);\n }\n\n}\n\n// Isometric-style projection\n// Note: this is actually an \"axonometric\" projection, but I'm using the colloquial term isometric because it is more recognizable.\n// An isometric projection is a specific subset of axonometric projections.\n// 'axis' determines the xy skew applied to a vertex based on its z coordinate, e.g. [0, 1] axis causes buildings to be drawn\n// straight upwards on screen at their true height, [0, .5] would draw them up at half-height, [1, 0] would be sideways, etc.\nclass IsometricCamera extends Camera {\n\n constructor(name, view, options = {}) {\n super(name, view, options);\n this.type = 'isometric';\n this.axis = options.axis || { x: 0, y: 1 };\n if (this.axis.length === 2) {\n this.axis = { x: this.axis[0], y: this.axis[1] }; // allow axis to also be passed as 2-elem array\n }\n\n this.position_meters = null;\n this.viewport_height = null;\n\n this.view_matrix = new Float64Array(16);\n this.projection_matrix = new Float32Array(16);\n\n // 'camera' is the name of the shader block, e.g. determines where in the shader this code is injected\n ShaderProgram.replaceBlock('camera', `\n uniform mat4 u_projection;\n uniform vec3 u_eye;\n uniform vec2 u_vanishing_point;\n\n void cameraProjection (inout vec4 position) {\n position = u_projection * position;\n // position.xy += position.z * u_isometric_axis;\n\n // Reverse z for depth buffer so up is negative,\n // and scale down values so objects higher than one screen height will not get clipped\n // pull forward slightly to avoid going past far clipping plane\n position.z = -position.z / 100. + 1. - 0.001;\n }`\n );\n }\n\n update() {\n super.update();\n\n this.viewport_height = this.view.size.css.height * this.view.meters_per_pixel;\n var position = [this.view.center.meters.x, this.view.center.meters.y, this.viewport_height];\n this.position_meters = position;\n\n // View\n mat4.identity(this.view_matrix);\n mat4.translate(this.view_matrix, this.view_matrix, vec3.fromValues(-position[0], -position[1], 0));\n\n // Projection\n mat4.identity(this.projection_matrix);\n\n // apply isometric skew\n this.projection_matrix[8] = this.axis.x / this.view.aspect; // z column of x row, e.g. amount z skews x\n this.projection_matrix[9] = this.axis.y; // z column of x row, e.g. amount z skews y\n\n // convert meters to viewport\n mat4.scale(this.projection_matrix, this.projection_matrix,\n vec3.fromValues(\n 2 / this.view.size.meters.x,\n 2 / this.view.size.meters.y,\n 2 / this.view.size.meters.y\n )\n );\n }\n\n setupProgram(program) {\n program.uniform('Matrix4fv', 'u_projection', this.projection_matrix);\n\n program.uniform('3fv', 'u_eye', [0, 0, this.viewport_height]);\n // program.uniform('3f', 'u_eye', this.viewport_height * this.axis.x, this.viewport_height * this.axis.y, this.viewport_height);\n program.uniform('2fv', 'u_vanishing_point', [0, 0]);\n }\n\n}\n\n// Flat projection (e.g. just top-down, no perspective) - a degenerate isometric camera\nclass FlatCamera extends IsometricCamera {\n\n constructor(name, view, options = {}) {\n super(name, view, options);\n this.type = 'flat';\n }\n\n update() {\n // Axis is fixed to (0, 0) for flat camera\n this.axis.x = 0;\n this.axis.y = 0;\n\n super.update();\n }\n\n}\n", "// Miscellaneous geo functions\n\nvar Geo;\nexport default Geo = {};\n\n// Projection constants\nGeo.default_source_max_zoom = 18;\nGeo.default_view_max_zoom = 20;\nGeo.tile_size = 256;\nGeo.half_circumference_meters = 20037508.342789244;\nGeo.circumference_meters = Geo.half_circumference_meters * 2;\nGeo.min_zoom_meters_per_pixel = Geo.circumference_meters / Geo.tile_size; // min zoom draws world as 2 tiles wide\n\nlet meters_per_pixel = [];\nGeo.metersPerPixel = function (z) {\n meters_per_pixel[z] = meters_per_pixel[z] || Geo.min_zoom_meters_per_pixel / Math.pow(2, z);\n return meters_per_pixel[z];\n};\n\nlet meters_per_tile = [];\nGeo.metersPerTile = function (z) {\n meters_per_tile[z] = meters_per_tile[z] || Geo.circumference_meters / Math.pow(2, z);\n return meters_per_tile[z];\n};\n\n// Conversion functions based on an defined tile scale\nGeo.tile_scale = 4096; // coordinates are locally scaled to the range [0, tile_scale]\nGeo.units_per_pixel = Geo.tile_scale / Geo.tile_size;\nGeo.height_scale = 16; // provides sub-meter precision for height values (16ths of a meters)\n\nlet units_per_meter = [];\nGeo.unitsPerMeter = function (z) {\n units_per_meter[z] = units_per_meter[z] || Geo.tile_scale / (Geo.tile_size * Geo.metersPerPixel(z));\n return units_per_meter[z];\n};\n\n// Convert tile location to mercator meters - multiply by pixels per tile, then by meters per pixel, adjust for map origin\nGeo.metersForTile = function (tile) {\n return {\n x: tile.x * Geo.circumference_meters / Math.pow(2, tile.z) - Geo.half_circumference_meters,\n y: -(tile.y * Geo.circumference_meters / Math.pow(2, tile.z) - Geo.half_circumference_meters)\n };\n};\n\n/**\n Given a point in mercator meters and a zoom level, return the tile X/Y/Z that the point lies in\n*/\nGeo.tileForMeters = function ([x, y], zoom) {\n return {\n x: Math.floor((x + Geo.half_circumference_meters) / (Geo.circumference_meters / Math.pow(2, zoom))),\n y: Math.floor((-y + Geo.half_circumference_meters) / (Geo.circumference_meters / Math.pow(2, zoom))),\n z: zoom\n };\n};\n\n// Wrap a tile to positive #s for zoom\n// Optionally specify the axes to wrap\nGeo.wrapTile = function({ x, y, z }, mask = { x: true, y: false }) {\n var m = (1 << z) - 1;\n if (mask.x) {\n x = x & m;\n }\n if (mask.y) {\n y = y & m;\n }\n return { x, y, z };\n};\n\n/**\n Convert mercator meters to lat-lng\n*/\nGeo.metersToLatLng = function ([x, y]) {\n\n x /= Geo.half_circumference_meters;\n y /= Geo.half_circumference_meters;\n\n y = (2 * Math.atan(Math.exp(y * Math.PI)) - (Math.PI / 2)) / Math.PI;\n\n x *= 180;\n y *= 180;\n\n return [x, y];\n};\n\n/**\n Convert lat-lng to mercator meters\n*/\nGeo.latLngToMeters = function([x, y]) {\n\n // Latitude\n y = Math.log(Math.tan(y*Math.PI/360 + Math.PI/4)) / Math.PI;\n y *= Geo.half_circumference_meters;\n\n // Longitude\n x *= Geo.half_circumference_meters / 180;\n\n return [x, y];\n};\n\n// Run an in-place transform function on each cooordinate in a GeoJSON geometry\nGeo.transformGeometry = function (geometry, transform) {\n if (geometry == null) {\n return; // skip if missing geometry (valid GeoJSON)\n }\n\n if (geometry.type === 'Point') {\n transform(geometry.coordinates);\n }\n else if (geometry.type === 'LineString' || geometry.type === 'MultiPoint') {\n geometry.coordinates.forEach(transform);\n }\n else if (geometry.type === 'Polygon' || geometry.type === 'MultiLineString') {\n geometry.coordinates.forEach(coordinates => coordinates.forEach(transform));\n }\n else if (geometry.type === 'MultiPolygon') {\n geometry.coordinates.forEach(polygon => {\n polygon.forEach(coordinates => coordinates.forEach(transform));\n });\n }\n // TODO: support GeometryCollection\n};\n\nGeo.boxIntersect = function (b1, b2) {\n return !(\n b2.sw.x > b1.ne.x ||\n b2.ne.x < b1.sw.x ||\n b2.sw.y > b1.ne.y ||\n b2.ne.y < b1.sw.y\n );\n};\n\n// Finds the axis-aligned bounding box for a polygon\nGeo.findBoundingBox = function (polygon) {\n var min_x = Infinity,\n max_x = -Infinity,\n min_y = Infinity,\n max_y = -Infinity;\n\n // Only need to examine outer ring (polygon[0])\n var num_coords = polygon[0].length;\n for (var c=0; c < num_coords; c++) {\n var coord = polygon[0][c];\n\n if (coord[0] < min_x) {\n min_x = coord[0];\n }\n if (coord[1] < min_y) {\n min_y = coord[1];\n }\n if (coord[0] > max_x) {\n max_x = coord[0];\n }\n if (coord[1] > max_y) {\n max_y = coord[1];\n }\n }\n\n return [min_x, min_y, max_x, max_y];\n};\n\n// Convert geometry type to one of: 'point', 'line', 'polygon'\nGeo.geometryType = function(type) {\n if (type === 'Polygon' || type === 'MultiPolygon') {\n return 'polygon';\n }\n else if (type === 'LineString' || type === 'MultiLineString') {\n return 'line';\n }\n if (type === 'Point' || type === 'MultiPoint') {\n return 'point';\n }\n};\n\n// Geometric / weighted centroid of polygon\n// Adapted from https://github.com/Leaflet/Leaflet/blob/c10f405a112142b19785967ce0e142132a6095ad/src/layer/vector/Polygon.js#L57\nGeo.centroid = function (polygon, relative = true) {\n if (!polygon || polygon.length === 0) {\n return;\n }\n\n let x = 0, y = 0, area = 0;\n let ring = polygon[0]; // only use first ring for now\n let len = ring.length;\n\n // optionally calculate relative to first coordinate to avoid precision issues w/small polygons\n let origin;\n if (relative) {\n origin = ring[0];\n ring = ring.map(v => [v[0] - origin[0], v[1] - origin[1]]);\n }\n\n for (let i = 0, j = len - 1; i < len; j = i, i++) {\n let p0 = ring[i];\n let p1 = ring[j];\n let f = p0[1] * p1[0] - p1[1] * p0[0];\n\n x += (p0[0] + p1[0]) * f;\n y += (p0[1] + p1[1]) * f;\n area += f * 3;\n }\n\n let c = [x / area, y / area];\n if (relative) {\n c[0] += origin[0];\n c[1] += origin[1];\n }\n return c;\n};\n\nGeo.multiCentroid = function (polygons) {\n let n = polygons.length;\n let centroid = [0, 0];\n\n for (let p=0; p < polygons.length; p++) {\n let c = Geo.centroid(polygons[p]);\n centroid[0] += c[0];\n centroid[1] += c[1];\n }\n\n centroid[0] /= n;\n centroid[1] /= n;\n\n return centroid;\n};\n\nGeo.signedPolygonRingAreaSum = function (ring) {\n let area = 0;\n let n = ring.length;\n\n for (let i = 0; i < n - 1; i++) {\n let p0 = ring[i];\n let p1 = ring[i+1];\n\n area += p0[0] * p1[1] - p1[0] * p0[1];\n }\n\n area += ring[n - 1][0] * ring[0][1] - ring[0][0] * ring[n - 1][1];\n return area;\n};\n\nGeo.polygonRingArea = function (ring) {\n return Math.abs(Geo.signedPolygonRingAreaSum(ring)) / 2;\n};\n\n// TODO: subtract inner rings\nGeo.polygonArea = function (polygon) {\n if (!polygon) {\n return;\n }\n return Geo.polygonRingArea(polygon[0]);\n};\n\nGeo.multiPolygonArea = function (polygons) {\n let area = 0;\n\n for (let p=0; p < polygons.length; p++) {\n area += Geo.polygonArea(polygons[p]);\n }\n\n return area;\n};\n\nGeo.ringWinding = function (ring) {\n let area = Geo.signedPolygonRingAreaSum(ring);\n if (area > 0) {\n return 'CW';\n }\n else if (area < 0) {\n return 'CCW';\n }\n // return undefined on zero area polygon\n};\n", "// WebGL constants - need to import these separately to make them available in the web worker\n\nvar gl;\nexport default gl = {};\n\n/* DataType */\ngl.BYTE = 0x1400;\ngl.UNSIGNED_BYTE = 0x1401;\ngl.SHORT = 0x1402;\ngl.UNSIGNED_SHORT = 0x1403;\ngl.INT = 0x1404;\ngl.UNSIGNED_INT = 0x1405;\ngl.FLOAT = 0x1406;\n", @@ -489,24 +489,24 @@ "// Creates a Vertex Array Object if the extension is available, or falls back on standard attribute calls\n\nimport getExtension from './extensions';\nimport log from '../utils/log';\n\nexport default {\n\n disabled: false, // set to true to disable VAOs even if extension is available\n bound_vao: [], // currently bound VAO, by GL context\n\n init (gl) {\n let ext;\n if (this.disabled !== true) {\n ext = getExtension(gl, 'OES_vertex_array_object');\n }\n\n if (ext != null) {\n log('info', 'Vertex Array Object extension available');\n }\n else if (this.disabled !== true) {\n log('warn', 'Vertex Array Object extension NOT available');\n }\n else {\n log('warn', 'Vertex Array Object extension force disabled');\n }\n },\n\n create (gl, setup, teardown) {\n let vao = {};\n vao.setup = setup;\n vao.teardown = teardown;\n\n let ext = getExtension(gl, 'OES_vertex_array_object');\n if (ext != null) {\n vao._vao = ext.createVertexArrayOES();\n ext.bindVertexArrayOES(vao._vao);\n }\n\n vao.setup(true);\n\n return vao;\n },\n\n getCurrentBinding (gl) {\n let bound = this.bound_vao.filter(e => e[0] === gl)[0];\n return bound && bound[1];\n },\n\n setCurrentBinding (gl, vao) {\n let bound_vao = this.bound_vao;\n let binding = bound_vao.filter(e => e[0] === gl)[0];\n if (binding == null) {\n bound_vao.push([gl, vao]);\n }\n else {\n binding[1] = vao;\n }\n },\n\n bind (gl, vao) {\n let ext = getExtension(gl, 'OES_vertex_array_object');\n if (vao != null) {\n if (ext != null && vao._vao != null) {\n ext.bindVertexArrayOES(vao._vao);\n this.setCurrentBinding(gl, vao);\n }\n else {\n vao.setup(false);\n }\n }\n else {\n let bound_vao = this.getCurrentBinding(gl);\n if (ext != null) {\n ext.bindVertexArrayOES(null);\n }\n else if (bound_vao != null && typeof bound_vao.teardown === 'function') {\n bound_vao.teardown();\n }\n this.setCurrentBinding(gl, null);\n }\n },\n\n destroy (gl, vao) {\n let ext = getExtension(gl, 'OES_vertex_array_object');\n if (ext != null && vao != null && vao._vao != null) {\n ext.deleteVertexArrayOES(vao._vao);\n vao._vao = null;\n }\n // destroy is a no-op if VAO extension isn't available\n }\n\n};\n", "// Manage rendering for primitives\nimport ShaderProgram from './shader_program';\nimport VertexArrayObject from './vao';\n\n// A single mesh/VBO, described by a vertex layout, that can be drawn with one or more programs\nexport default class VBOMesh {\n\n constructor(gl, vertex_data, element_data, vertex_layout, options) {\n options = options || {};\n\n this.gl = gl;\n this.vertex_data = vertex_data; // typed array\n this.element_data = element_data; // typed array\n this.vertex_layout = vertex_layout;\n this.vertex_buffer = this.gl.createBuffer();\n this.buffer_size = this.vertex_data.byteLength;\n this.draw_mode = options.draw_mode || this.gl.TRIANGLES;\n this.data_usage = options.data_usage || this.gl.STATIC_DRAW;\n this.vertices_per_geometry = 3; // TODO: support lines, strip, fan, etc.\n this.uniforms = options.uniforms;\n this.retain = options.retain || false; // whether to retain mesh data in CPU after uploading to GPU\n this.created_at = +new Date();\n this.fade_in_time = options.fade_in_time || 0; // optional time to fade in mesh\n\n this.vertex_count = this.vertex_data.byteLength / this.vertex_layout.stride;\n this.element_count = 0;\n this.vaos = {}; // map of VertexArrayObjects, keyed by program\n\n this.toggle_element_array = false;\n if (this.element_data) {\n this.toggle_element_array = true;\n this.element_count = this.element_data.length;\n this.geometry_count = this.element_count / this.vertices_per_geometry;\n this.element_type = (this.element_data.constructor === Uint16Array) ? this.gl.UNSIGNED_SHORT: this.gl.UNSIGNED_INT;\n this.element_buffer = this.gl.createBuffer();\n this.buffer_size += this.element_data.byteLength;\n this.gl.bindBuffer(this.gl.ELEMENT_ARRAY_BUFFER, this.element_buffer);\n this.gl.bufferData(this.gl.ELEMENT_ARRAY_BUFFER, this.element_data, this.data_usage);\n }\n else {\n this.geometry_count = this.vertex_count / this.vertices_per_geometry;\n }\n\n this.gl.bindBuffer(this.gl.ARRAY_BUFFER, this.vertex_buffer);\n this.gl.bufferData(this.gl.ARRAY_BUFFER, this.vertex_data, this.data_usage);\n\n if (!this.retain) {\n delete this.vertex_data;\n delete this.element_data;\n }\n this.valid = true;\n }\n\n // Render, by default with currently bound program, or otherwise with optionally provided one\n // Returns true if mesh requests a render on next frame (e.g. for fade animations)\n render(options = {}) {\n if (!this.valid) {\n return false;\n }\n\n var program = options.program || ShaderProgram.current;\n program.use();\n\n if (this.uniforms) {\n program.saveUniforms(this.uniforms);\n program.setUniforms(this.uniforms, false); // don't reset texture unit\n }\n\n let visible_time = (+new Date() - this.created_at) / 1000;\n program.uniform('1f', 'u_visible_time', visible_time);\n\n this.bind(program);\n\n if (this.toggle_element_array){\n this.gl.drawElements(this.draw_mode, this.element_count, this.element_type, 0);\n }\n else {\n this.gl.drawArrays(this.draw_mode, 0, this.vertex_count);\n }\n\n VertexArrayObject.bind(this.gl, null);\n\n if (this.uniforms) {\n program.restoreUniforms(this.uniforms);\n }\n\n // Request next render if mesh is fading in\n return (visible_time < this.fade_in_time);\n }\n\n // Bind buffers and vertex attributes to prepare for rendering\n bind(program) {\n // Bind VAO for this progam, or create one\n let vao = this.vaos[program.id];\n if (vao) {\n VertexArrayObject.bind(this.gl, vao);\n }\n else {\n this.vaos[program.id] = VertexArrayObject.create(this.gl, (force) => {\n this.gl.bindBuffer(this.gl.ARRAY_BUFFER, this.vertex_buffer);\n if (this.toggle_element_array) {\n this.gl.bindBuffer(this.gl.ELEMENT_ARRAY_BUFFER, this.element_buffer);\n }\n this.vertex_layout.enable(this.gl, program, force);\n });\n }\n }\n\n destroy() {\n if (!this.valid) {\n return false;\n }\n this.valid = false;\n\n for (let v in this.vaos) {\n VertexArrayObject.destroy(this.gl, this.vaos[v]);\n }\n\n\n this.gl.deleteBuffer(this.vertex_buffer);\n this.vertex_buffer = null;\n\n if (this.element_buffer) {\n this.gl.deleteBuffer(this.element_buffer);\n this.element_buffer = null;\n }\n\n delete this.vertex_data;\n delete this.element_data;\n\n return true;\n }\n\n}\n", "import gl from './constants'; // web workers don't have access to GL context, so import all GL constants\nimport log from '../utils/log';\nimport VertexElements from './vertex_elements';\n\n// Maps GL types to JS array types\nlet array_types = {\n [gl.FLOAT]: Float32Array,\n [gl.BYTE]: Int8Array,\n [gl.UNSIGNED_BYTE]: Uint8Array,\n [gl.INT]: Int32Array,\n [gl.UNSIGNED_INT]: Uint32Array,\n [gl.SHORT]: Int16Array,\n [gl.UNSIGNED_SHORT]: Uint16Array\n};\n\n// An intermediary object that holds vertex data in typed arrays, according to a given vertex layout\n// Used to construct a mesh/VBO for rendering\nexport default class VertexData {\n\n constructor (vertex_layout, { prealloc = 500 } = {}) {\n this.vertex_layout = vertex_layout;\n this.vertex_elements = new VertexElements();\n this.stride = this.vertex_layout.stride;\n\n if (VertexData.array_pool.length > 0) {\n this.vertex_buffer = VertexData.array_pool.pop();\n this.byte_length = this.vertex_buffer.byteLength;\n this.size = Math.floor(this.byte_length / this.stride);\n log('trace', `VertexData: reused buffer of bytes ${this.byte_length}, ${this.size} vertices`);\n }\n else {\n this.size = prealloc; // # of vertices to allocate\n this.byte_length = this.stride * this.size;\n this.vertex_buffer = new Uint8Array(this.byte_length);\n }\n this.offset = 0; // byte offset into currently allocated buffer\n\n this.vertex_count = 0;\n this.realloc_count = 0;\n this.setBufferViews();\n this.setAddVertexFunction();\n }\n\n // (Re-)allocate typed views into the main buffer - only create the types we need for this layout\n setBufferViews () {\n this.views = {};\n this.views[gl.UNSIGNED_BYTE] = this.vertex_buffer;\n for (let a=0; a < this.vertex_layout.attribs.length; a++) {\n const attrib = this.vertex_layout.attribs[a];\n\n // Need view for this type?\n if (this.views[attrib.type] == null) {\n var array_type = array_types[attrib.type];\n this.views[attrib.type] = new array_type(this.vertex_buffer.buffer);\n }\n }\n }\n\n // Check allocated buffer size, expand/realloc buffer if needed\n checkBufferSize () {\n if ((this.offset + this.stride) > this.byte_length) {\n this.size = Math.floor(this.size * 1.5);\n this.size -= this.size % 4;\n this.byte_length = this.stride * this.size;\n var new_view = new Uint8Array(this.byte_length);\n new_view.set(this.vertex_buffer); // copy existing data to new buffer\n VertexData.array_pool.push(this.vertex_buffer); // save previous buffer for use by next tile\n this.vertex_buffer = new_view;\n this.setBufferViews();\n this.realloc_count++;\n // log('info', `VertexData: expanded vertex block to ${this.size} vertices`);\n }\n }\n\n // Initialize the add vertex function (lazily compiled by vertex layout)\n setAddVertexFunction () {\n this.vertexLayoutAddVertex = this.vertex_layout.getAddVertexFunction();\n }\n\n // Add a vertex, copied from a plain JS array of elements matching the order of the vertex layout\n addVertex (vertex) {\n this.checkBufferSize();\n this.vertexLayoutAddVertex(vertex, this.views, this.offset);\n this.offset += this.stride;\n this.vertex_count++;\n }\n\n // Finalize vertex buffer for use in constructing a mesh\n end () {\n // Clip the buffer to size used for this VBO\n this.vertex_buffer = this.vertex_buffer.subarray(0, this.offset);\n this.element_buffer = this.vertex_elements.end();\n\n log('trace', `VertexData: ${this.size} vertices total, realloc count ${this.realloc_count}`);\n\n return this;\n }\n\n}\n\nVertexData.array_pool = []; // pool of currently available (previously used) buffers (uint8)\n", - "import WorkerBroker from '../utils/worker_broker';\n\nlet MAX_VALUE = Math.pow(2, 16) - 1;\nlet Uint32_flag = false;\n\nexport default class VertexElements {\n constructor () {\n this.array = [];\n this.has_overflown = false;\n }\n push (value) {\n // If values have overflown and no Uint32 option is available, do not push values\n if (this.has_overflown && !Uint32_flag) {\n return;\n }\n\n // Trigger overflow if value is greater than Uint16 max\n if (value > MAX_VALUE) {\n this.has_overflown = true;\n if (!Uint32_flag) {\n return;\n }\n }\n\n this.array.push(value);\n }\n end () {\n if (this.array.length){\n let buffer = createBuffer(this.array, this.has_overflown);\n this.array = [];\n this.has_overflown = false;\n return buffer;\n }\n else {\n return false;\n }\n }\n}\n\nVertexElements.setUint32Flag = function(flag) {\n Uint32_flag = flag;\n};\n\nfunction createBuffer(array, overflown) {\n var typedArray = (overflown && Uint32_flag) ? Uint32Array : Uint16Array;\n return new typedArray(array);\n}\n\nWorkerBroker.addTarget('VertexElements', VertexElements);\n", - "import gl from './constants'; // web workers don't have access to GL context, so import all GL constants\nimport VertexData from './vertex_data';\nimport hashString from '../utils/hash';\n\n// Describes a vertex layout that can be used with many different GL programs.\nexport default class VertexLayout {\n // Attribs are an array, in layout order, of: name, size, type, normalized\n // ex: { name: 'position', size: 3, type: gl.FLOAT, normalized: false }\n constructor (attribs) {\n this.attribs = attribs; // array of attributes, specified as standard GL attrib options\n this.components = []; // list of type and offset info about each attribute component\n this.index = {}; // linear buffer index of each attribute component, e.g. this.index.position.x\n\n // Calc vertex stride\n this.stride = 0;\n\n var index = 0, count = 0;\n for (let a=0; a < this.attribs.length; a++) {\n let attrib = this.attribs[a];\n attrib.offset = this.stride;\n attrib.byte_size = attrib.size;\n var shift = 0;\n\n switch (attrib.type) {\n case gl.FLOAT:\n case gl.INT:\n case gl.UNSIGNED_INT:\n attrib.byte_size *= 4;\n shift = 2;\n break;\n case gl.SHORT:\n case gl.UNSIGNED_SHORT:\n attrib.byte_size *= 2;\n shift = 1;\n break;\n }\n\n // Force 4-byte alignment on attributes\n if (attrib.byte_size & 3) { // pad to multiple of 4 bytes\n attrib.byte_size += 4 - (attrib.byte_size & 3);\n }\n this.stride += attrib.byte_size;\n\n // Add info to list of attribute components (e.g. float is 1 component, vec3 is 3 separate components)\n // Used to map plain JS array to typed arrays\n var offset_typed = attrib.offset >> shift;\n for (let s=0; s < attrib.size; s++) {\n this.components.push({\n type: attrib.type,\n shift,\n offset: offset_typed++,\n index: count++\n });\n }\n\n // Provide an index into the vertex data buffer for each attribute component\n this.index[attrib.name] = index;\n index += attrib.size;\n }\n }\n\n // Setup a vertex layout for a specific GL program\n // Assumes that the desired vertex buffer (VBO) is already bound\n // If a given program doesn't include all attributes, it can still use the vertex layout\n // to read those attribs that it does recognize, using the attrib offsets to skip others.\n enable (gl, program, force) {\n var attrib, location;\n\n // Enable all attributes for this layout\n for (var a=0; a < this.attribs.length; a++) {\n attrib = this.attribs[a];\n location = program.attribute(attrib.name).location;\n\n if (location !== -1) {\n if (!VertexLayout.enabled_attribs[location] || force) {\n gl.enableVertexAttribArray(location);\n }\n gl.vertexAttribPointer(location, attrib.size, attrib.type, attrib.normalized, this.stride, attrib.offset);\n VertexLayout.enabled_attribs[location] = program;\n }\n }\n\n // Disable any previously bound attributes that aren't for this layout\n for (location in VertexLayout.enabled_attribs) {\n this.disableUnusedAttribute(gl, location, program);\n }\n }\n\n // Disable an attribute if it was not enabled for the specified program\n // NOTE: this was moved out of the inner loop in enable() to assist w/VM optimization\n disableUnusedAttribute (gl, location, program) {\n if (VertexLayout.enabled_attribs[location] !== program) {\n gl.disableVertexAttribArray(location);\n delete VertexLayout.enabled_attribs[location];\n }\n }\n\n createVertexData () {\n return new VertexData(this);\n }\n\n // Lazily create the add vertex function\n getAddVertexFunction () {\n if (this.addVertex == null) {\n this.createAddVertexFunction();\n }\n return this.addVertex;\n }\n\n // Dynamically compile a function to add a plain JS vertex array to this layout's typed VBO arrays\n createAddVertexFunction () {\n let key = hashString(JSON.stringify(this.attribs));\n if (VertexLayout.add_vertex_funcs[key] == null) {\n // `t` = current typed array to write to\n // `o` = current offset into VBO, in current type size (e.g. divide 2 for shorts, divide by 4 for floats, etc.)\n // `v` = plain JS array containing vertex data\n // `vs` = typed arrays (one per GL type needed for this vertex layout)\n // `off` = current offset into VBO, in bytes\n let src = [`var t, o;`];\n\n // Sort by array type to reduce redundant array look-up and offset calculation\n let last_type;\n let components = [...this.components];\n components.sort((a, b) => (a[0] !== b[0]) ? (a[0] - b[0]) : (a[4] - b[4]));\n\n for (let c=0; c < components.length; c++) {\n let component = components[c];\n\n if (last_type !== component.type) {\n src.push(`t = vs[${component.type}];`);\n src.push(`o = off${component.shift ? ' >> ' + component.shift : ''};`);\n last_type = component.type;\n }\n\n src.push(`t[o + ${component.offset}] = v[${component.index}];`);\n }\n\n src = src.join('\\n');\n let func = new Function('v', 'vs', 'off', src); // jshint ignore:line\n VertexLayout.add_vertex_funcs[key] = func;\n }\n\n this.addVertex = VertexLayout.add_vertex_funcs[key];\n }\n\n}\n\n// Track currently enabled attribs, by the program they are bound to\n// Static class property to reflect global GL state\nVertexLayout.enabled_attribs = {};\n\n// Functions to add plain JS vertex array to typed VBO arrays\nVertexLayout.add_vertex_funcs = {}; // keyed by unique set of attributes\n", + "let MAX_VALUE = Math.pow(2, 16) - 1;\nlet has_element_index_uint = false;\n\nexport default class VertexElements {\n constructor () {\n this.array = [];\n this.has_overflown = false;\n }\n push (value) {\n // If values have overflown and no Uint32 option is available, do not push values\n if (this.has_overflown && !has_element_index_uint) {\n return;\n }\n\n // Trigger overflow if value is greater than Uint16 max\n if (value > MAX_VALUE) {\n this.has_overflown = true;\n if (!has_element_index_uint) {\n return;\n }\n }\n\n this.array.push(value);\n }\n end () {\n if (this.array.length){\n let buffer = createBuffer(this.array, this.has_overflown);\n this.array = [];\n this.has_overflown = false;\n return buffer;\n }\n else {\n return false;\n }\n }\n}\n\nVertexElements.setElementIndexUint = function(flag) {\n has_element_index_uint = flag;\n};\n\nfunction createBuffer(array, overflown) {\n var typedArray = (overflown && has_element_index_uint) ? Uint32Array : Uint16Array;\n return new typedArray(array);\n}\n", + "import gl from './constants'; // web workers don't have access to GL context, so import all GL constants\nimport VertexData from './vertex_data';\nimport hashString from '../utils/hash';\n\n// Describes a vertex layout that can be used with many different GL programs.\nexport default class VertexLayout {\n // Attribs are an array, in layout order, of: name, size, type, normalized\n // ex: { name: 'position', size: 3, type: gl.FLOAT, normalized: false }\n constructor (attribs) {\n this.attribs = attribs; // array of attributes, specified as standard GL attrib options\n this.components = []; // list of type and offset info about each attribute component\n this.index = {}; // linear buffer index of each attribute component, e.g. this.index.position.x\n\n // Calc vertex stride\n this.stride = 0;\n\n var index = 0, count = 0;\n for (let a=0; a < this.attribs.length; a++) {\n let attrib = this.attribs[a];\n attrib.offset = this.stride;\n attrib.byte_size = attrib.size;\n var shift = 0;\n\n switch (attrib.type) {\n case gl.FLOAT:\n case gl.INT:\n case gl.UNSIGNED_INT:\n attrib.byte_size *= 4;\n shift = 2;\n break;\n case gl.SHORT:\n case gl.UNSIGNED_SHORT:\n attrib.byte_size *= 2;\n shift = 1;\n break;\n }\n\n // Force 4-byte alignment on attributes\n if (attrib.byte_size & 3) { // pad to multiple of 4 bytes\n attrib.byte_size += 4 - (attrib.byte_size & 3);\n }\n this.stride += attrib.byte_size;\n\n // Add info to list of attribute components (e.g. float is 1 component, vec3 is 3 separate components)\n // Used to map plain JS array to typed arrays\n var offset_typed = attrib.offset >> shift;\n for (let s=0; s < attrib.size; s++) {\n this.components.push({\n type: attrib.type,\n shift,\n offset: offset_typed++,\n index: count++\n });\n }\n\n // Provide an index into the vertex data buffer for each attribute component\n this.index[attrib.name] = index;\n index += attrib.size;\n }\n }\n\n // Setup a vertex layout for a specific GL program\n // Assumes that the desired vertex buffer (VBO) is already bound\n // If a given program doesn't include all attributes, it can still use the vertex layout\n // to read those attribs that it does recognize, using the attrib offsets to skip others.\n enable (gl, program, force) {\n var attrib, location;\n\n // Enable all attributes for this layout\n for (var a=0; a < this.attribs.length; a++) {\n attrib = this.attribs[a];\n location = program.attribute(attrib.name).location;\n\n if (location !== -1) {\n if (!VertexLayout.enabled_attribs[location] || force) {\n gl.enableVertexAttribArray(location);\n }\n gl.vertexAttribPointer(location, attrib.size, attrib.type, attrib.normalized, this.stride, attrib.offset);\n VertexLayout.enabled_attribs[location] = program;\n }\n }\n\n // Disable any previously bound attributes that aren't for this layout\n for (location in VertexLayout.enabled_attribs) {\n this.disableUnusedAttribute(gl, location, program);\n }\n }\n\n // Disable an attribute if it was not enabled for the specified program\n // NOTE: this was moved out of the inner loop in enable() to assist w/VM optimization\n disableUnusedAttribute (gl, location, program) {\n if (VertexLayout.enabled_attribs[location] !== program) {\n gl.disableVertexAttribArray(location);\n delete VertexLayout.enabled_attribs[location];\n }\n }\n\n createVertexData () {\n return new VertexData(this);\n }\n\n // Lazily create the add vertex function\n getAddVertexFunction () {\n if (this.addVertex == null) {\n this.createAddVertexFunction();\n }\n return this.addVertex;\n }\n\n // Dynamically compile a function to add a plain JS vertex array to this layout's typed VBO arrays\n createAddVertexFunction () {\n let key = hashString(JSON.stringify(this.attribs));\n if (VertexLayout.add_vertex_funcs[key] == null) {\n // `t` = current typed array to write to\n // `o` = current offset into VBO, in current type size (e.g. divide 2 for shorts, divide by 4 for floats, etc.)\n // `v` = plain JS array containing vertex data\n // `vs` = typed arrays (one per GL type needed for this vertex layout)\n // `off` = current offset into VBO, in bytes\n let src = [`var t, o;`];\n\n // Sort by array type to reduce redundant array look-up and offset calculation\n let last_type;\n let components = [...this.components];\n components.sort((a, b) => (a.type !== b.type) ? (a.type - b.type) : (a.index - b.index));\n\n for (let c=0; c < components.length; c++) {\n let component = components[c];\n\n if (last_type !== component.type) {\n src.push(`t = vs[${component.type}];`);\n src.push(`o = off${component.shift ? ' >> ' + component.shift : ''};`);\n last_type = component.type;\n }\n\n src.push(`t[o + ${component.offset}] = v[${component.index}];`);\n }\n\n src = src.join('\\n');\n let func = new Function('v', 'vs', 'off', src); // jshint ignore:line\n VertexLayout.add_vertex_funcs[key] = func;\n }\n\n this.addVertex = VertexLayout.add_vertex_funcs[key];\n }\n\n}\n\n// Track currently enabled attribs, by the program they are bound to\n// Static class property to reflect global GL state\nVertexLayout.enabled_attribs = {};\n\n// Functions to add plain JS vertex array to typed VBO arrays\nVertexLayout.add_vertex_funcs = {}; // keyed by unique set of attributes\n", "import RepeatGroup from './repeat_group';\nimport log from '../utils/log';\n\nvar Collision;\n\nexport default Collision = {\n\n tiles: {},\n\n startTile (tile) {\n let state = this.tiles[tile] = {\n bboxes: { // current set of placed bounding boxes\n aabb: [],\n obb: []\n },\n objects: {}, // objects to collide, grouped by priority, then by style\n keep: {}, // objects that were kept after collision, grouped by style\n styles: {} // styles contributing collision objects\n };\n\n // Promise resolved when all registered styles have added objects\n state.complete = new Promise((resolve, reject) => {\n state.resolve = resolve;\n state.reject = reject;\n });\n },\n\n resetTile (tile) {\n delete this.tiles[tile];\n },\n\n // Add a style to the pending set, collision will block on all styles submitting to collision set\n addStyle (style, tile) {\n this.tiles[tile].styles[style] = true;\n },\n\n // Add collision objects for a style\n collide (objects, style, tile) {\n let state = this.tiles[tile];\n if (!state) {\n log('trace', 'Collision.collide() called with null tile', tile, this.tiles, style, objects);\n return Promise.resolve([]);\n }\n\n // Group by priority and style\n let tile_objects = state.objects;\n for (let i=0; i < objects.length; i++) {\n let obj = objects[i];\n let priority = obj.label.layout.priority;\n tile_objects[priority] = tile_objects[priority] || {};\n tile_objects[priority][style] = tile_objects[priority][style] || [];\n tile_objects[priority][style].push(obj);\n }\n\n // Remove from pending style set, if no more styles, do collision & finish tile\n delete state.styles[style];\n if (Object.keys(state.styles).length === 0) {\n this.endTile(tile);\n }\n\n // Wait for objects to be added from all styles\n return state.complete.then(() => {\n return state.keep[style] || [];\n });\n },\n\n // Test labels for collisions, higher to lower priority\n // When two collide, discard the lower-priority label\n endTile (tile) {\n let state = this.tiles[tile];\n let keep = state.keep;\n\n RepeatGroup.clear(tile);\n\n // Process labels by priority, then by style\n let priorities = Object.keys(state.objects).sort((a, b) => a - b);\n for (let p=0; p < priorities.length; p++) {\n let style_objects = state.objects[priorities[p]];\n if (!style_objects) { // no labels at this priority, skip to next\n continue;\n }\n\n // For each style\n for (let style in style_objects) {\n let objects = style_objects[style];\n keep[style] = keep[style] || [];\n\n for (let i = 0; i < objects.length; i++) {\n let object = objects[i];\n if (this.canBePlaced(object, tile, object.linked)) {\n // Keep object if it isn't dependent on a parent object\n if (!object.linked) {\n keep[style].push(object);\n this.place(object, tile);\n }\n // If object is dependent on a parent, only keep if both can be placed\n else if (this.canBePlaced(object.linked, tile, object)) {\n keep[style].push(object);\n this.place(object, tile);\n this.place(object.linked, tile);\n }\n }\n }\n }\n }\n\n delete this.tiles[tile];\n state.resolve();\n },\n\n // Run collision and repeat check to see if label can currently be placed\n canBePlaced (object, tile, exclude = null) {\n let label = object.label;\n let layout = object.label.layout;\n\n // Skip if already processed (e.g. by parent object)\n if (label.placed != null) {\n return label.placed;\n }\n\n // Test the label for intersections with other labels in the tile\n let bboxes = this.tiles[tile].bboxes;\n if (!layout.collide || !label.discard(bboxes, exclude && exclude.label)) {\n // check for repeats\n let repeat = RepeatGroup.check(label, layout, tile);\n if (repeat) {\n // log('trace', `discard label '${label.text}', (one_per_group: ${repeat.one_per_group}), dist ${Math.sqrt(repeat.dist_sq)/layout.units_per_pixel} < ${Math.sqrt(repeat.repeat_dist_sq)/layout.units_per_pixel}`);\n label.placed = false;\n }\n else {\n return true;\n }\n }\n else if (layout.collide) {\n // log('trace', `discard label '${label.text}' due to collision`);\n label.placed = false;\n }\n return label.placed;\n },\n\n // Place label\n place ({ label }, tile) {\n // Skip if already processed (e.g. by parent object)\n if (label.placed != null) {\n return;\n }\n\n // Register as placed for future collision and repeat culling\n RepeatGroup.add(label, label.layout, tile);\n label.add(this.tiles[tile].bboxes);\n }\n\n};\n", "\n// Do AABB `a` and `b` intersect?\nexport function boxIntersectsBox (a, b) {\n if (a[2] < b[0] || // a is left of b\n a[0] > b[2] || // a is right of b\n a[3] < b[1] || // a is above b\n a[1] > b[3]) { // a is below b\n return false;\n }\n return true; // boxes overlap\n}\n\n// Does AABB `a` intersect any of the AABBs in array `boxes`?\n// Invokes `callback` with index of intersecting box\n// Stops intersecting if `callback` returns non-null value (continues otherwise)\nexport function boxIntersectsList (a, boxes, callback) {\n for (let i=0; i < boxes.length; i++) {\n if (boxIntersectsBox(a, boxes[i])) {\n if (callback(i) != null) {\n break;\n }\n }\n }\n}\n", "import PointAnchor from './point_anchor';\nimport {boxIntersectsList} from './intersect';\nimport Utils from '../utils/utils';\nimport OBB from '../utils/obb';\n// import log from '../utils/log';\n\nexport default class Label {\n\n constructor (size, layout = {}) {\n this.size = size;\n this.layout = layout;\n this.position = null;\n this.anchor = Array.isArray(this.layout.anchor) ? this.layout.anchor[0] : this.layout.anchor; // initial anchor\n this.placed = null;\n this.offset = layout.offset;\n this.aabb = null;\n this.obb = null;\n this.align = 'center';\n this.throw_away = false; // if label does not fit (exceeds tile boundary, etc) this boolean will be true\n }\n\n update () {\n this.align = this.layout.align || PointAnchor.alignForAnchor(this.anchor);\n }\n\n // check for overlaps with other labels in the tile\n occluded (bboxes, exclude = null) {\n let intersect = false;\n let aabbs = bboxes.aabb;\n let obbs = bboxes.obb;\n\n // Broad phase\n if (aabbs.length > 0) {\n boxIntersectsList(this.aabb, aabbs, (j) => {\n // log('trace', 'collision: broad phase collide', this.layout.id, this, this.aabb, aabbs[j]);\n\n // Skip if colliding with excluded label\n if (exclude && aabbs[j] === exclude.aabb) {\n // log('trace', 'collision: skipping due to explicit exclusion', this, exclude);\n return;\n }\n\n // Skip narrow phase collision if no rotation\n if (this.obb.angle === 0 && obbs[j].angle === 0) {\n // log('trace', 'collision: skip narrow phase collide because neither is rotated', this.layout.id, this, this.obb, obbs[j]);\n intersect = true;\n return true;\n }\n\n // Narrow phase\n if (OBB.intersect(this.obb, obbs[j])) {\n // log('trace', 'collision: narrow phase collide', this.layout.id, this, this.obb, obbs[j]);\n intersect = true;\n return true;\n }\n });\n }\n return intersect;\n }\n\n // Add this label's bounding box to the provided set\n add (bboxes) {\n this.placed = true;\n bboxes.aabb.push(this.aabb);\n bboxes.obb.push(this.obb);\n }\n\n // checks whether the label is within the tile boundaries\n inTileBounds () {\n let min = [ this.aabb[0], this.aabb[1] ];\n let max = [ this.aabb[2], this.aabb[3] ];\n\n if (!Utils.pointInTile(min) || !Utils.pointInTile(max)) {\n return false;\n }\n\n return true;\n }\n\n // Whether the label should be discarded\n // Depends on whether label must fit in the tile bounds, and if so, can it be moved to fit there\n discard(bboxes, exclude = null) {\n if (this.throw_away) {\n return true;\n }\n return this.occluded(bboxes, exclude);\n }\n}\n\nLabel.epsilon = 0.9999; // tolerance around collision boxes, prevent perfectly adjacent objects from colliding\n", - "import Label from './label';\nimport Vector from '../vector';\nimport OBB from '../utils/obb';\n\nconst STOPS = [0, 0.33, 0.66, 0.99]; // zoom levels for curved label snapshot data (offsets and angles)\nconst LINE_EXCEED_STRAIGHT = 1.5; // minimal ratio for straight labels (label length) / (line length)\nconst LINE_EXCEED_STRAIGHT_NO_CURVE = 1.8; // minimal ratio for straight labels that have no curved option\nconst LINE_EXCEED_STAIGHT_LOOSE = 2.3; // 2nd pass minimal ratio for straight labels\nconst STRAIGHT_ANGLE_TOLERANCE = 0.1; // multiple \"almost straight\" segments within this angle tolerance can be considered one straight segment\nconst CURVE_MIN_TOTAL_COST = 1.3; // curved line total curvature tolerance (sum)\nconst CURVE_MIN_AVG_COST = 0.4; // curved line average curvature tolerance (mean)\nconst CURVE_MAX_ANGLE = 1; // curved line singular curvature tolerance (value)\nconst ORIENTED_LABEL_OFFSET_FACTOR = 1.2; // multiply offset by this amount to avoid linked label collision\nconst VERTICAL_ANGLE_TOLERANCE = 0.01; // nearly vertical lines considered vertical within this angle tolerance\n\nlet LabelLine = {\n // Given a label's bounding box size and size broken up into individual segments\n // return a label that fits along a line geometry\n create : function(segment_size, total_size, line, layout){\n // The passes done for fitting a label, and provided tolerances for each pass\n const passes = [\n { type: 'straight', tolerance : (layout.no_curving) ? LINE_EXCEED_STRAIGHT_NO_CURVE : LINE_EXCEED_STRAIGHT },\n { type: 'curved' },\n { type: 'straight', tolerance : LINE_EXCEED_STAIGHT_LOOSE }\n ];\n\n // loop through passes. first label found wins.\n for (let i = 0; i < passes.length; i++){\n let check = passes[i];\n let label;\n if (check.type === 'straight'){\n label = new LabelLineStraight(total_size, line, layout, check.tolerance);\n }\n else if (check.type === 'curved' && !layout.no_curving && line.length > 2){\n label = new LabelLineCurved(segment_size, line, layout);\n }\n\n if (label && !label.throw_away) {\n return label;\n }\n }\n\n return false;\n }\n};\n\nexport default LabelLine;\n\n// Base class for a LabelLine\nclass LabelLineBase {\n constructor (layout) {\n this.layout = layout;\n this.position = [];\n this.angle = 0;\n this.offset = layout.offset.slice();\n this.obbs = [];\n this.aabbs = [];\n this.type = ''; // \"curved\" or \"straight\" to be set by parent class\n }\n\n // Given a line, find the longest series of segments that maintains a constant orientation in the x-direction.\n // This assures us that the line has no orientation flip, so text would not appear upside-down.\n static splitLineByOrientation(line){\n let current_line = [line[0]];\n let current_length = 0;\n let max_length = 0;\n let orientation = 0;\n let longest_line = current_line;\n let flip = false;\n\n for (let i = 1; i < line.length; i++) {\n let pt = line[i];\n let prev_pt = line[i - 1];\n let length = Vector.length(Vector.sub(pt, prev_pt));\n\n if (pt[0] > prev_pt[0]){\n // positive orientation\n if (orientation === 1){\n current_line.push(pt);\n current_length += length;\n if (current_length > max_length){\n longest_line = current_line;\n max_length = current_length;\n flip = false;\n }\n }\n else {\n current_line = [prev_pt, pt];\n current_length = length;\n if (current_length > max_length){\n longest_line = current_line;\n max_length = current_length;\n flip = false;\n }\n orientation = 1;\n }\n }\n else if (pt[0] < prev_pt[0]) {\n // negative orientation\n if (orientation === -1){\n current_line.unshift(pt);\n current_length += length;\n if (current_length > max_length){\n longest_line = current_line;\n max_length = current_length;\n flip = true;\n }\n }\n else {\n // add lines is reverse order\n current_line = [pt, prev_pt];\n current_length = length;\n if (current_length > max_length){\n longest_line = current_line;\n max_length = current_length;\n flip = true;\n }\n orientation = -1;\n }\n }\n else {\n // vertical line (doesn't change previous orientation)\n if (orientation === -1){\n current_line.unshift(pt);\n }\n else {\n current_line.push(pt);\n orientation = 1;\n }\n\n current_length += length;\n if (current_length > max_length){\n longest_line = current_line;\n max_length = current_length;\n\n flip = (orientation === -1);\n }\n }\n }\n\n return [longest_line, flip];\n }\n\n // Adds each segment to the collision pass as its own bounding box\n // TODO: label group\n add(bboxes) {\n this.placed = true;\n for (let i = 0; i < this.aabbs.length; i++) {\n let aabb = this.aabbs[i];\n let obb = this.obbs[i];\n let obj = { aabb, obb };\n Label.prototype.add.call(obj, bboxes);\n }\n }\n\n // Checks each segment to see if it should be discarded (via collision). If any segment fails this test, they all fail.\n // TODO: label group\n discard(bboxes, exclude = null) {\n if (this.throw_away) {\n return true;\n }\n\n for (let i = 0; i < this.obbs.length; i++){\n let aabb = this.aabbs[i];\n let obb = this.obbs[i];\n let obj = { aabb, obb };\n\n let shouldDiscard = Label.prototype.occluded.call(obj, bboxes, exclude);\n if (shouldDiscard) {\n return true;\n }\n }\n return false;\n }\n\n // Checks each segment to see if it is within the tile. If any segment fails this test, they all fail.\n // TODO: label group\n inTileBounds() {\n for (let i = 0; i < this.aabbs.length; i++) {\n let aabb = this.aabbs[i];\n let obj = { aabb };\n let in_bounds = Label.prototype.inTileBounds.call(obj);\n if (!in_bounds) {\n return false;\n }\n }\n return true;\n }\n\n // Method to calculate oriented bounding box\n static createOBB (position, width, height, angle, angle_offset, offset, upp) {\n let p0 = position[0];\n let p1 = position[1];\n\n // apply offset, x positive, y pointing down\n if (offset && (offset[0] !== 0 || offset[1] !== 0)) {\n offset = Vector.rot(offset, angle_offset);\n p0 += offset[0] * upp;\n p1 -= offset[1] * upp;\n }\n\n // the angle of the obb is negative since it's the tile system y axis is pointing down\n return new OBB(p0, p1, -angle, width, height);\n }\n}\n\n// Class for straight labels\nclass LabelLineStraight extends LabelLineBase {\n constructor (size, line, layout, tolerance){\n super(layout);\n this.type = 'straight';\n this.throw_away = !this.fit(size, line, layout, tolerance);\n }\n\n // Determine if the label can fit the geometry within provided tolerances\n // A straight label will \"look ahead\" to future segments if they are within an angle bound given by STRAIGHT_ANGLE_TOLERANCE\n fit (size, line, layout, tolerance){\n let upp = layout.units_per_pixel;\n let flipped;\n\n [line, flipped] = LabelLineBase.splitLineByOrientation(line);\n\n if (typeof layout.orientation === 'number'){\n this.offset[1] += ORIENTED_LABEL_OFFSET_FACTOR * (size[1] - layout.vertical_buffer);\n\n if (flipped){\n this.offset[1] *= -1;\n }\n\n if (layout.orientation === -1){\n this.offset[1] *= -1;\n }\n }\n\n let line_lengths = getLineLengths(line);\n let label_length = size[0] * upp;\n\n for (let i = 0; i < line.length - 1; i++){\n let curr = line[i];\n\n let curve_tolerance = 0;\n let length = 0;\n let ahead_index = i + 1;\n let prev_angle;\n\n // Look ahead to further line segments within an angle tolerance\n while (ahead_index < line.length){\n let ahead_curr = line[ahead_index - 1];\n let ahead_next = line[ahead_index];\n\n let next_angle = getAngleForSegment(ahead_curr, ahead_next);\n\n if (ahead_index !== i + 1){\n curve_tolerance += getAbsAngleDiff(next_angle, prev_angle);\n }\n\n if (Math.abs(curve_tolerance) > STRAIGHT_ANGLE_TOLERANCE){\n break;\n }\n\n length += line_lengths[ahead_index - 1];\n\n if (calcFitness(length, label_length) < tolerance){\n let currMid = Vector.mult(Vector.add(curr, ahead_next), 0.5);\n\n // TODO: modify angle if line chosen within curve_angle_tolerance\n this.angle = -next_angle;\n let angle_offset = this.angle;\n\n if (typeof layout.orientation === 'number'){\n if (flipped){\n angle_offset += Math.PI;\n }\n\n if (layout.orientation === -1){\n angle_offset += Math.PI;\n }\n }\n\n // all vertical labels point up (not down)\n if (Math.abs(this.angle - Math.PI/2) < VERTICAL_ANGLE_TOLERANCE) {\n // flip angle and offset\n this.angle = -Math.PI/2;\n\n if (typeof layout.orientation === 'number'){\n this.offset[1] *= -1;\n }\n }\n\n this.position = currMid;\n\n this.updateBBoxes(this.position, size, this.angle, this.angle, this.offset);\n\n if (this.inTileBounds()) {\n return true;\n }\n }\n\n prev_angle = next_angle;\n ahead_index++;\n }\n }\n\n return false;\n }\n\n // Calculate bounding boxes\n updateBBoxes(position, size, angle, angle_offset, offset) {\n let upp = this.layout.units_per_pixel;\n\n // reset bounding boxes\n this.obbs = [];\n this.aabbs = [];\n\n let width = (size[0] + 2 * this.layout.buffer[0]) * upp * Label.epsilon;\n let height = (size[1] + 2 * this.layout.buffer[1]) * upp * Label.epsilon;\n\n let obb = LabelLineBase.createOBB(position, width, height, angle, angle_offset, offset, upp);\n let aabb = obb.getExtent();\n\n this.obbs.push(obb);\n this.aabbs.push(aabb);\n }\n}\n\nclass LabelLineCurved extends LabelLineBase {\n constructor (size, line, layout) {\n super(layout);\n this.type = 'curved';\n\n // extra data for curved labels\n this.angles = [];\n this.pre_angles = [];\n this.offsets = [];\n this.num_segments = size.length;\n\n this.throw_away = !this.fit(size, line, layout);\n }\n\n fit (size, line, layout){\n let upp = layout.units_per_pixel;\n let flipped;\n\n [line, flipped] = LabelLineBase.splitLineByOrientation(line);\n\n if (typeof layout.orientation === 'number'){\n this.offset[1] += ORIENTED_LABEL_OFFSET_FACTOR * (size[1] - layout.vertical_buffer);\n\n if (flipped){\n this.offset[1] *= -1;\n }\n\n if (layout.orientation === -1){\n this.offset[1] *= -1;\n }\n }\n\n let line_lengths = getLineLengths(line);\n let label_lengths = size.map(function(size){ return size[0] * upp; });\n\n let total_line_length = line_lengths.reduce(function(prev, next){ return prev + next; }, 0);\n let total_label_length = label_lengths.reduce(function(prev, next){ return prev + next; }, 0);\n\n if (total_label_length > total_line_length){\n return false;\n }\n\n // starting position\n let height = size[0][1] * upp;\n let [start_index, end_index] = LabelLineCurved.checkTileBoundary(line, line_lengths, height, this.offset, upp);\n\n // need two line segments for a curved label\n if (end_index - start_index < 2){\n return false;\n }\n\n let anchor_index = LabelLineCurved.curvaturePlacement(line, total_line_length, line_lengths, total_label_length, start_index, end_index);\n\n if (anchor_index === -1 || end_index - anchor_index < 2){\n return false;\n }\n\n let anchor = line[anchor_index];\n this.position = anchor;\n\n // Can be made faster since we are computing every segment for every zoom stop\n // We can skip a segment's calculation once a segment's angle equals its fully zoomed angle\n for (var i = 0; i < label_lengths.length; i++){\n this.offsets[i] = [];\n this.angles[i] = [];\n this.pre_angles[i] = [];\n\n for (var j = 0; j < STOPS.length; j++){\n let stop = STOPS[j];\n\n let [new_line, line_lengths] = LabelLineCurved.scaleLine(stop, line);\n anchor = new_line[anchor_index];\n\n let {positions, offsets, angles, pre_angles} = LabelLineCurved.placeAtIndex(anchor_index, new_line, line_lengths, label_lengths);\n\n let offsets1d = offsets.map(function(offset){\n return Math.sqrt(offset[0] * offset[0] + offset[1] * offset[1]) / upp;\n });\n\n // use average angle for offsets (if offset is used)\n this.angle = 1 / angles.length * angles.reduce(function(prev, next){ return prev + next; });\n\n if (stop === 0){\n for (let i = 0; i < positions.length; i++){\n let position = positions[i];\n let pre_angle = pre_angles[i];\n let width = label_lengths[i];\n let angle_curve = pre_angle + angles[i];\n let angle_offset = this.angle;\n\n if (typeof layout.orientation === 'number'){\n if (flipped){\n angle_offset += Math.PI;\n }\n\n if (layout.orientation === -1){\n angle_offset += Math.PI;\n }\n }\n\n let obb = LabelLineCurved.createOBB(position, width, height, this.offset, angle_offset, angle_curve, upp);\n let aabb = obb.getExtent();\n\n this.obbs.push(obb);\n this.aabbs.push(aabb);\n }\n }\n\n this.offsets[i].push(offsets1d[i]);\n this.angles[i].push(angles[i]);\n this.pre_angles[i].push(pre_angles[i]);\n }\n }\n\n return true;\n }\n\n // Test if line intersects tile boundary. Return indices at beginning and end of line that are within tile.\n // Burn candle from both ends strategy - meaning shift and pop until vertices are within tile, but an interior vertex\n // may still be outside of tile (can potentially result in label collision across tiles).\n static checkTileBoundary(line, widths, height, offset, upp){\n let start = 0;\n let end = line.length - 1;\n\n height *= Label.epsilon;\n\n let start_width = widths[start] * Label.epsilon;\n let end_width = widths[widths.length - 1] * Label.epsilon;\n\n // Burn candle from start\n while (start < end){\n let angle = getAngleForSegment(line[start], line[start + 1]);\n let position = Vector.add(Vector.rot([start_width/2, 0], angle), line[start]);\n let obb = LabelLineBase.createOBB(position, start_width, height, -angle, -angle, offset, upp);\n let aabb = obb.getExtent();\n let in_tile = Label.prototype.inTileBounds.call({ aabb });\n if (in_tile) {\n break;\n }\n else {\n start++;\n }\n }\n\n // Burn candle from end\n while (end > start){\n let angle = getAngleForSegment(line[end - 1], line[end]);\n let position = Vector.add(Vector.rot([-end_width/2, 0], angle), line[end]);\n let obb = LabelLineBase.createOBB(position, end_width, height, -angle, -angle, offset, upp);\n let aabb = obb.getExtent();\n let in_tile = Label.prototype.inTileBounds.call({ aabb });\n if (in_tile) {\n break;\n }\n else {\n end--;\n }\n }\n\n return [start, end];\n }\n\n // Find optimal starting segment for placing a curved label along a line within provided tolerances\n // This is determined by calculating the curvature at each interior vertex of a line\n // then construct a \"window\" whose breadth is the length of the label. Place this label at each vertex\n // and add the curvatures of each vertex within the window. The vertex mimimizing this value is the \"best\" placement.\n // Return -1 is no placement found.\n static curvaturePlacement(line, total_line_length, line_lengths, label_length, start_index, end_index){\n start_index = start_index || 0;\n end_index = end_index || line.length - 1;\n\n var curvatures = []; // array of curvature values per line vertex\n\n // calculate curvature values\n for (let i = start_index + 1; i < end_index; i++){\n var prev = line[i - 1];\n var curr = line[i];\n var next = line[i + 1];\n\n var norm_1 = Vector.perp(curr, prev);\n var norm_2 = Vector.perp(next, curr);\n\n var curvature = Vector.angleBetween(norm_1, norm_2);\n\n // If curvature at a vertex is greater than the tolerance, remove it from consideration\n if (curvature > CURVE_MAX_ANGLE) {\n curvature = Infinity;\n }\n\n curvatures.push(curvature);\n }\n\n curvatures.push(Infinity); // Infinite penalty for going off end of line\n\n // calculate curvature costs\n var total_costs = [];\n var avg_costs = [];\n var line_index = start_index;\n var position = 0;\n\n for (let i = 0; i < start_index; i++){\n position += line_lengths[i];\n }\n\n // move window along line, starting at first vertex\n while (position + label_length < total_line_length){\n // define window breadth\n var window_start = position;\n var window_end = window_start + label_length;\n\n var line_position = window_start;\n var ahead_index = line_index;\n var cost = 0;\n\n // iterate through points on line intersecting window\n while (ahead_index < end_index && line_position + line_lengths[ahead_index] < window_end){\n cost += curvatures[ahead_index];\n if (cost === Infinity) {\n break; // no further progress can be made\n }\n\n line_position += line_lengths[ahead_index];\n ahead_index++;\n }\n\n // if optimal cost, break out\n if (cost === 0) {\n return line_index;\n }\n\n var avg_cost = cost / (ahead_index - line_index);\n\n total_costs.push(cost);\n avg_costs.push(avg_cost);\n\n position += line_lengths[line_index];\n line_index++;\n }\n\n if (total_costs.length === 0) {\n return -1;\n }\n\n var min_total_cost = Math.min.apply(null, total_costs);\n var min_index = total_costs.indexOf(min_total_cost);\n var min_avg_cost = avg_costs[min_index];\n\n if (min_total_cost < CURVE_MIN_TOTAL_COST && min_avg_cost < CURVE_MIN_AVG_COST){\n // return index with best placement (least curvature)\n return total_costs.indexOf(min_total_cost);\n }\n else {\n // if tolerances aren't satisfied, throw away tile\n return -1;\n }\n }\n\n // Scale the line by a scale factor (used for computing the angles and offsets are fractional zoom levels)\n static scaleLine(scale, line){\n var new_line = [line[0]];\n var line_lengths = [];\n\n line.forEach(function(pt, i){\n if (i === line.length - 1) {\n return;\n }\n var v = Vector.sub(line[i+1], line[i]);\n var delta = Vector.mult(v, 1 + scale);\n\n new_line.push(Vector.add(new_line[i], delta));\n line_lengths.push(Vector.length(delta));\n });\n\n return [new_line, line_lengths];\n }\n\n // Place a label at a given index\n static placeAtIndex(anchor_index, line, line_lengths, label_lengths){\n let anchor = line[anchor_index];\n\n // Use flat coordinates. Get nearest line vertex index, and offset from the vertex for all labels.\n let [indices, relative_offsets] = LabelLineCurved.getIndicesAndOffsets(anchor_index, line_lengths, label_lengths);\n\n // get 2D positions based on \"flat\" indices and offsets\n let positions = LabelLineCurved.getPositionsFromIndicesAndOffsets(line, indices, relative_offsets);\n\n // get 2d offsets, angles and pre_angles relative to anchor\n let [offsets, angles, pre_angles] = LabelLineCurved.getAnglesFromIndicesAndOffsets(anchor, indices, line, positions);\n\n return {positions, offsets, angles, pre_angles};\n }\n\n // Given label lengths to place along a line broken into several lengths, computer what indices and at which offsets\n // the labels will appear on the line. Assume the line is straight, as it is not necessary to consider angles.\n //\n // Label lengths:\n // |-----|----|-----|-----------------|-------------|\n //\n // Line Lengths;\n // |---------|---------|-------------|------------|----------|-------|\n //\n // Result: indices: [0,0,1,1,3,4]\n static getIndicesAndOffsets(line_index, line_lengths, label_lengths){\n let num_labels = label_lengths.length;\n\n let indices = [];\n let offsets = [];\n\n let label_index = 0;\n let label_offset = 0;\n let line_offset = 0;\n\n // iterate along line\n while (label_index < num_labels){\n let label_length = label_lengths[label_index];\n\n // iterate along labels within the line segment\n while (label_index < num_labels && label_offset + 0.5 * label_length <= line_offset + line_lengths[line_index]){\n let offset = label_offset - line_offset + 0.5 * label_length;\n offsets.push(offset);\n indices.push(line_index);\n\n label_offset += label_length;\n label_index++;\n label_length = label_lengths[label_index];\n }\n\n line_offset += line_lengths[line_index];\n line_index++;\n }\n\n return [indices, offsets];\n }\n\n // Given indices and 1D offsets on a line, compute their 2D positions\n static getPositionsFromIndicesAndOffsets(line, indices, offsets){\n let positions = [];\n for (let i = 0; i < indices.length; i++){\n let index = indices[i];\n let offset = offsets[i];\n\n let angle = getAngleForSegment(line[index], line[index + 1]);\n\n let offset2d = Vector.rot([offset, 0], angle);\n let position = Vector.add(line[index], offset2d);\n\n positions.push(position);\n }\n\n return positions;\n }\n\n // Given indices and 1D offsets on a line, compute their angles and pre-angles from a reference anchor point\n static getAnglesFromIndicesAndOffsets(anchor, indices, line, positions){\n let angles = [];\n let pre_angles = [];\n let offsets = [];\n\n for (let i = 0; i < positions.length; i++){\n let position = positions[i];\n let index = indices[i];\n\n let offset = Vector.sub(position, anchor);\n let offset_angle = -Vector.angle(offset);\n\n let angle = getTextAngleForSegment(line[index], line[index + 1]);\n let pre_angle = angle - offset_angle;\n\n if (i > 0){\n let prev_angle = angles[i - 1];\n let prev_pre_angle = pre_angles[i - 1];\n if (Math.abs(offset_angle - prev_angle) > Math.PI) {\n offset_angle += (offset_angle > prev_angle) ? -2 * Math.PI : 2 * Math.PI;\n }\n if (Math.abs(prev_pre_angle - pre_angle) > Math.PI) {\n pre_angle += (pre_angle > prev_pre_angle) ? -2 * Math.PI : 2 * Math.PI;\n }\n }\n\n angles.push(offset_angle);\n pre_angles.push(pre_angle);\n offsets.push(offset);\n }\n\n return [offsets, angles, pre_angles];\n }\n\n // Modify the LabelLineStraight method to include a distiction between an offset angle, and rotation angle\n // as these may be different. (Offset angle is constant for the entire label, while rotation angles are not.)\n static createOBB (position, width, height, offset, angle_offset, angle_curve, upp) {\n let p0 = position[0];\n let p1 = position[1];\n\n // apply offset, x positive, y pointing down\n if (offset && (offset[0] !== 0 || offset[1] !== 0)) {\n offset = Vector.rot(offset, angle_offset);\n p0 += offset[0] * upp;\n p1 -= offset[1] * upp;\n }\n\n // the angle of the obb is negative since it's the tile system y axis is pointing down\n return new OBB(p0, p1, -angle_curve, width, height);\n }\n}\n\n// Fitness function (label length / line length)\nfunction calcFitness(line_length, label_length) {\n return label_length / line_length;\n}\n\nfunction getAngleForSegment(p, q){\n let pq = Vector.sub(q,p);\n return Vector.angle(pq);\n}\n\nfunction getTextAngleForSegment(pt1, pt2) {\n return -getAngleForSegment(pt1, pt2);\n}\n\nfunction getLineLengths(line){\n let lengths = [];\n for (let i = 0; i < line.length - 1; i++){\n let p = line[i];\n let q = line[i+1];\n let length = Math.hypot(p[0] - q[0], p[1] - q[1]);\n lengths.push(length);\n }\n return lengths;\n}\n\nfunction getAbsAngleDiff(angle1, angle2){\n let small, big;\n if (angle1 > angle2){\n small = angle2;\n big = angle1;\n }\n else {\n small = angle1;\n big = angle2;\n }\n\n while (big - small > Math.PI){\n small += 2 * Math.PI;\n }\n\n return Math.abs(big - small);\n}\n", + "import Label from './label';\nimport Vector from '../vector';\nimport OBB from '../utils/obb';\n\nconst STOPS = [0, 0.33, 0.66, 0.99]; // zoom levels for curved label snapshot data (offsets and angles)\nconst LINE_EXCEED_STRAIGHT = 1.5; // minimal ratio for straight labels (label length) / (line length)\nconst LINE_EXCEED_STRAIGHT_NO_CURVE = 1.8; // minimal ratio for straight labels that have no curved option (like Arabic)\nconst LINE_EXCEED_STAIGHT_LOOSE = 2.3; // 2nd pass minimal ratio for straight labels\nconst STRAIGHT_ANGLE_TOLERANCE = 0.1; // multiple \"almost straight\" segments within this angle tolerance can be considered one straight segment (in radians)\nconst CURVE_MIN_TOTAL_COST = 1.3; // curved line total curvature tolerance (sum in radians)\nconst CURVE_MIN_AVG_COST = 0.4; // curved line average curvature tolerance (mean)\nconst CURVE_MAX_ANGLE = 1; // curved line singular curvature tolerance (value in radians)\nconst ORIENTED_LABEL_OFFSET_FACTOR = 1.2; // multiply offset by this amount to avoid linked label collision\nconst VERTICAL_ANGLE_TOLERANCE = 0.01; // nearly vertical lines considered vertical within this angle tolerance\n\nlet LabelLine = {\n // Given a label's bounding box size and size of broken up individual segments\n // return a label that fits along the line geometry that is either straight (preferred) or curved (if straight tolerances aren't met)\n create : function(segment_size, total_size, line, layout){\n // The passes done for fitting a label, and provided tolerances for each pass\n // First straight is chosen with a low tolerance. Then curved. Then straight with a higher tolerance.\n const passes = [\n { type: 'straight', tolerance : (layout.no_curving) ? LINE_EXCEED_STRAIGHT_NO_CURVE : LINE_EXCEED_STRAIGHT },\n { type: 'curved' },\n { type: 'straight', tolerance : LINE_EXCEED_STAIGHT_LOOSE }\n ];\n\n // loop through passes. first label found wins.\n for (let i = 0; i < passes.length; i++){\n let check = passes[i];\n let label;\n if (check.type === 'straight'){\n label = new LabelLineStraight(total_size, line, layout, check.tolerance);\n }\n else if (check.type === 'curved' && !layout.no_curving && line.length > 2){\n label = new LabelLineCurved(segment_size, line, layout);\n }\n\n if (label && !label.throw_away) {\n return label;\n }\n }\n\n return false;\n }\n};\n\nexport default LabelLine;\n\n// Base class for a labels.\nclass LabelLineBase {\n constructor (layout) {\n this.layout = layout;\n this.position = [];\n this.angle = 0;\n this.offset = layout.offset.slice();\n this.obbs = [];\n this.aabbs = [];\n this.type = ''; // \"curved\" or \"straight\" to be set by parent class\n this.throw_away = false; // boolean that determines if label should be discarded\n }\n\n // Given a line, find the longest series of segments that maintains a constant orientation in the x-direction.\n // This assures us that the line has no orientation flip, so text would not appear upside-down.\n // If the line's orientation is reversed, the flip return value will be true, otherwise false\n static splitLineByOrientation(line){\n let current_line = [line[0]];\n let current_length = 0;\n let max_length = 0;\n let orientation = 0;\n let longest_line = current_line;\n let flip = false;\n\n for (let i = 1; i < line.length; i++) {\n let pt = line[i];\n let prev_pt = line[i - 1];\n let length = Vector.length(Vector.sub(pt, prev_pt));\n\n if (pt[0] > prev_pt[0]){\n // positive orientation\n if (orientation === 1){\n current_line.push(pt);\n current_length += length;\n if (current_length > max_length){\n longest_line = current_line;\n max_length = current_length;\n flip = false;\n }\n }\n else {\n current_line = [prev_pt, pt];\n current_length = length;\n if (current_length > max_length){\n longest_line = current_line;\n max_length = current_length;\n flip = false;\n }\n orientation = 1;\n }\n }\n else if (pt[0] < prev_pt[0]) {\n // negative orientation\n if (orientation === -1){\n current_line.unshift(pt);\n current_length += length;\n if (current_length > max_length){\n longest_line = current_line;\n max_length = current_length;\n flip = true;\n }\n }\n else {\n // prepend points (reverse order)\n current_line = [pt, prev_pt];\n current_length = length;\n if (current_length > max_length){\n longest_line = current_line;\n max_length = current_length;\n flip = true;\n }\n orientation = -1;\n }\n }\n else {\n // vertical line (doesn't change previous orientation)\n if (orientation === -1){\n current_line.unshift(pt);\n }\n else {\n current_line.push(pt);\n orientation = 1;\n }\n\n current_length += length;\n if (current_length > max_length){\n longest_line = current_line;\n max_length = current_length;\n\n flip = (orientation === -1);\n }\n }\n }\n\n return [longest_line, flip];\n }\n\n // Add each bounding box to the collision pass\n add(bboxes) {\n this.placed = true;\n for (let i = 0; i < this.aabbs.length; i++) {\n let aabb = this.aabbs[i];\n let obb = this.obbs[i];\n let obj = { aabb, obb };\n Label.prototype.add.call(obj, bboxes);\n }\n }\n\n // Checks each segment to see if it should be discarded (via collision). If any segment fails this test, they all fail.\n discard(bboxes, exclude = null) {\n if (this.throw_away) {\n return true;\n }\n\n for (let i = 0; i < this.obbs.length; i++){\n let aabb = this.aabbs[i];\n let obb = this.obbs[i];\n let obj = { aabb, obb };\n\n let shouldDiscard = Label.prototype.occluded.call(obj, bboxes, exclude);\n if (shouldDiscard) {\n return true;\n }\n }\n return false;\n }\n\n // Checks each segment to see if it is within the tile. If any segment fails this test, they all fail.\n inTileBounds() {\n for (let i = 0; i < this.aabbs.length; i++) {\n let aabb = this.aabbs[i];\n let obj = { aabb };\n let in_bounds = Label.prototype.inTileBounds.call(obj);\n if (!in_bounds) {\n return false;\n }\n }\n return true;\n }\n\n // Method to calculate oriented bounding box\n // \"angle\" is the angle of the text, \"angle_offset\" is the angle applied to the offset.\n // This distinction is necessary for labels with \"left\" (inner) or \"right\" (outer) offsets\n static createOBB (position, width, height, angle, angle_offset, offset, upp) {\n let p0 = position[0];\n let p1 = position[1];\n\n // apply offset, x positive, y pointing down\n if (offset && (offset[0] !== 0 || offset[1] !== 0)) {\n offset = Vector.rot(offset, angle_offset);\n p0 += offset[0] * upp;\n p1 -= offset[1] * upp;\n }\n\n // the angle of the obb is negative since it's the tile system y axis is pointing down\n return new OBB(p0, p1, -angle, width, height);\n }\n}\n\n// Class for straight labels.\n// Extends base LabelLine class.\nclass LabelLineStraight extends LabelLineBase {\n constructor (size, line, layout, tolerance){\n super(layout);\n this.type = 'straight';\n this.throw_away = !this.fit(size, line, layout, tolerance);\n }\n\n // Determine if the label can fit the geometry within provided tolerance\n // A straight label is generally placed at segment midpoints, but can \"look ahead\" to further segments\n // if they are within an angle bound given by STRAIGHT_ANGLE_TOLERANCE and place at the midpoint between non-consecutive segments\n fit (size, line, layout, tolerance){\n let upp = layout.units_per_pixel;\n let flipped; // boolean indicating if orientation of line is changed\n\n // Make new copy of line, with consistent orientation\n [line, flipped] = LabelLineBase.splitLineByOrientation(line);\n\n // matches for \"left\" or \"right\" labels where the offset angle is dependent on the geometry\n if (typeof layout.orientation === 'number'){\n this.offset[1] += ORIENTED_LABEL_OFFSET_FACTOR * (size[1] - layout.vertical_buffer);\n\n // if line is flipped, or the orientation is \"left\" (-1), flip the offset's y-axis\n if (flipped){\n this.offset[1] *= -1;\n }\n\n if (layout.orientation === -1){\n this.offset[1] *= -1;\n }\n }\n\n let line_lengths = getLineLengths(line);\n let label_length = size[0] * upp;\n\n // loop through line looking for a placement for the label\n for (let i = 0; i < line.length - 1; i++){\n let curr = line[i];\n\n let curve_tolerance = 0;\n let length = 0;\n let ahead_index = i + 1;\n let prev_angle;\n\n // look ahead to further line segments within an angle tolerance\n while (ahead_index < line.length){\n let ahead_curr = line[ahead_index - 1];\n let ahead_next = line[ahead_index];\n\n let next_angle = getAngleForSegment(ahead_curr, ahead_next);\n\n if (ahead_index !== i + 1){\n curve_tolerance += getAbsAngleDiff(next_angle, prev_angle);\n }\n\n // if curve tolerance is exceeded, break out of loop\n if (Math.abs(curve_tolerance) > STRAIGHT_ANGLE_TOLERANCE){\n break;\n }\n\n length += line_lengths[ahead_index - 1];\n\n // check if label fits geometry\n if (calcFitness(length, label_length) < tolerance){\n let curr_midpt = Vector.mult(Vector.add(curr, ahead_next), 0.5);\n\n // TODO: modify angle if line chosen within curve_angle_tolerance\n // Currently line angle is the same as the starting angle, perhaps it should average across segments?\n this.angle = -next_angle;\n let angle_offset = this.angle;\n\n // if line is flipped, or the orientation is \"left\" (-1), rotate the angle of the offset 180 deg\n if (typeof layout.orientation === 'number'){\n if (flipped){\n angle_offset += Math.PI;\n }\n\n if (layout.orientation === -1){\n angle_offset += Math.PI;\n }\n }\n\n // ensure that all vertical labels point up (not down) by snapping angles close to pi/2 to -pi/2\n if (Math.abs(this.angle - Math.PI/2) < VERTICAL_ANGLE_TOLERANCE) {\n // flip angle and offset\n this.angle = -Math.PI/2;\n\n if (typeof layout.orientation === 'number'){\n this.offset[1] *= -1;\n }\n }\n\n this.position = curr_midpt;\n\n this.updateBBoxes(this.position, size, this.angle, this.angle, this.offset);\n\n if (this.inTileBounds()) {\n return true;\n }\n }\n\n prev_angle = next_angle;\n ahead_index++;\n }\n }\n\n return false;\n }\n\n // Calculate bounding boxes\n updateBBoxes(position, size, angle, angle_offset, offset) {\n let upp = this.layout.units_per_pixel;\n\n // reset bounding boxes\n this.obbs = [];\n this.aabbs = [];\n\n let width = (size[0] + 2 * this.layout.buffer[0]) * upp * Label.epsilon;\n let height = (size[1] + 2 * this.layout.buffer[1]) * upp * Label.epsilon;\n\n let obb = LabelLineBase.createOBB(position, width, height, angle, angle_offset, offset, upp);\n let aabb = obb.getExtent();\n\n this.obbs.push(obb);\n this.aabbs.push(aabb);\n }\n}\n\n// Class for curved labels\n// Extends base LabelLine class to support angles, pre_angles, offsets as arrays for each segment\nclass LabelLineCurved extends LabelLineBase {\n constructor (size, line, layout) {\n super(layout);\n this.type = 'curved';\n\n // extra data for curved labels\n this.angles = [];\n this.pre_angles = [];\n this.offsets = [];\n this.num_segments = size.length;\n\n this.throw_away = !this.fit(size, line, layout);\n }\n\n // Determine if the curved label can fit the geometry.\n // No tolerance is provided because the label must fit entirely within the line geometry.\n fit (size, line, layout){\n let upp = layout.units_per_pixel;\n let flipped; // boolean determining if the line orientation is reversed\n\n // Make new copy of line, with consistent orientation\n [line, flipped] = LabelLineBase.splitLineByOrientation(line);\n\n // matches for \"left\" or \"right\" labels where the offset angle is dependent on the geometry\n if (typeof layout.orientation === 'number'){\n this.offset[1] += ORIENTED_LABEL_OFFSET_FACTOR * (size[1] - layout.vertical_buffer);\n\n // if line is flipped, or the orientation is \"left\" (-1), flip the offset's y-axis\n if (flipped){\n this.offset[1] *= -1;\n }\n\n if (layout.orientation === -1){\n this.offset[1] *= -1;\n }\n }\n\n let line_lengths = getLineLengths(line);\n let label_lengths = size.map(function(size){ return size[0] * upp; });\n\n let total_line_length = line_lengths.reduce(function(prev, next){ return prev + next; }, 0);\n let total_label_length = label_lengths.reduce(function(prev, next){ return prev + next; }, 0);\n\n // if label displacement is longer than the line, no fit can be possible\n if (total_label_length > total_line_length){\n return false;\n }\n\n let height = size[0][1] * upp;\n\n // find start and end indices that the label can fit on without overlapping tile boundaries\n // TODO: there is a small probability of a tile boundary crossing on an internal line segment\n // another option is to create a buffer around the line and check if it overlaps a tile boundary\n let [start_index, end_index] = LabelLineCurved.checkTileBoundary(line, line_lengths, height, this.offset, upp);\n\n // need two line segments for a curved label\n if (end_index - start_index < 2){\n return false;\n }\n\n // all positional offsets of the label are relative to the anchor\n let anchor_index = LabelLineCurved.curvaturePlacement(line, total_line_length, line_lengths, total_label_length, start_index, end_index);\n let anchor = line[anchor_index];\n\n // if anchor not found, or greater than the end_index, no fit possible\n if (anchor_index === -1 || end_index - anchor_index < 2){\n return false;\n }\n\n // set start position at anchor position\n this.position = anchor;\n\n // Loop through labels at each zoom level stop\n // TODO: Can be made faster since we are computing every segment for every zoom stop\n // We can skip a segment's calculation once a segment's angle equals its fully zoomed angle\n for (var i = 0; i < label_lengths.length; i++){\n this.offsets[i] = [];\n this.angles[i] = [];\n this.pre_angles[i] = [];\n\n // loop through stops (z = [0, .33, .66, .99] + base zoom)\n for (var j = 0; j < STOPS.length; j++){\n let stop = STOPS[j];\n\n // scale the line geometry by the zoom magnification\n let [new_line, line_lengths] = LabelLineCurved.scaleLine(stop, line);\n anchor = new_line[anchor_index];\n\n // calculate label data relative to anchor position\n let {positions, offsets, angles, pre_angles} = LabelLineCurved.placeAtIndex(anchor_index, new_line, line_lengths, label_lengths);\n\n // translate 2D offsets into \"polar coordinates\"\" (1D distances with angles)\n let offsets1d = offsets.map(function(offset){\n return Math.sqrt(offset[0] * offset[0] + offset[1] * offset[1]) / upp;\n });\n\n // Calculate everything that is independent of zoom level (angle for offset, bounding boxes, etc)\n if (stop === 0){\n // use average angle for a global label offset (if offset is specified)\n this.angle = 1 / angles.length * angles.reduce(function(prev, next){ return prev + next; });\n\n // calculate bounding boxes for zollision at zoom level 0\n for (let i = 0; i < positions.length; i++){\n let position = positions[i];\n let pre_angle = pre_angles[i];\n let width = label_lengths[i];\n let angle_curve = pre_angle + angles[i];\n let angle_offset = this.angle;\n\n if (typeof layout.orientation === 'number'){\n if (flipped){\n angle_offset += Math.PI;\n }\n\n if (layout.orientation === -1){\n angle_offset += Math.PI;\n }\n }\n\n let obb = LabelLineCurved.createOBB(position, width, height, this.offset, angle_offset, angle_curve, upp);\n let aabb = obb.getExtent();\n\n this.obbs.push(obb);\n this.aabbs.push(aabb);\n }\n }\n\n // push offsets/angles/pre_angles for each zoom and for each label segment\n this.offsets[i].push(offsets1d[i]);\n this.angles[i].push(angles[i]);\n this.pre_angles[i].push(pre_angles[i]);\n }\n }\n\n return true;\n }\n\n // Test if line intersects tile boundary. Return indices at beginning and end of line that are within tile.\n // Burn candle from both ends strategy - meaning shift and pop until vertices are within tile, but an interior vertex\n // may still be outside of tile (can potentially result in label collision across tiles).\n static checkTileBoundary(line, widths, height, offset, upp){\n let start = 0;\n let end = line.length - 1;\n\n height *= Label.epsilon;\n\n let start_width = widths[start] * Label.epsilon;\n let end_width = widths[widths.length - 1] * Label.epsilon;\n\n // Burn candle from start\n while (start < end){\n let angle = getAngleForSegment(line[start], line[start + 1]);\n let position = Vector.add(Vector.rot([start_width/2, 0], angle), line[start]);\n let obb = LabelLineBase.createOBB(position, start_width, height, -angle, -angle, offset, upp);\n let aabb = obb.getExtent();\n let in_tile = Label.prototype.inTileBounds.call({ aabb });\n if (in_tile) {\n break;\n }\n else {\n start++;\n }\n }\n\n // Burn candle from end\n while (end > start){\n let angle = getAngleForSegment(line[end - 1], line[end]);\n let position = Vector.add(Vector.rot([-end_width/2, 0], angle), line[end]);\n let obb = LabelLineBase.createOBB(position, end_width, height, -angle, -angle, offset, upp);\n let aabb = obb.getExtent();\n let in_tile = Label.prototype.inTileBounds.call({ aabb });\n if (in_tile) {\n break;\n }\n else {\n end--;\n }\n }\n\n return [start, end];\n }\n\n // Find optimal starting segment for placing a curved label along a line within provided tolerances\n // This is determined by calculating the curvature at each interior vertex of a line\n // then construct a \"window\" whose breadth is the length of the label. Place this label at each vertex\n // and add the curvatures of each vertex within the window. The vertex mimimizing this value is the \"best\" placement.\n // Return -1 is no placement found.\n static curvaturePlacement(line, total_line_length, line_lengths, label_length, start_index, end_index){\n start_index = start_index || 0;\n end_index = end_index || line.length - 1;\n\n var curvatures = []; // array of curvature values per line vertex\n\n // calculate curvature values\n for (let i = start_index + 1; i < end_index; i++){\n var prev = line[i - 1];\n var curr = line[i];\n var next = line[i + 1];\n\n var norm_1 = Vector.perp(curr, prev);\n var norm_2 = Vector.perp(next, curr);\n\n var curvature = Vector.angleBetween(norm_1, norm_2);\n\n // If curvature at a vertex is greater than the tolerance, remove it from consideration\n // by giving it an infinite penalty\n if (curvature > CURVE_MAX_ANGLE) {\n curvature = Infinity;\n }\n\n curvatures.push(curvature);\n }\n\n curvatures.push(Infinity); // Infinite penalty for going off end of line\n\n // calculate curvature costs\n var total_costs = [];\n var avg_costs = [];\n var line_index = start_index;\n var position = 0;\n\n for (let i = 0; i < start_index; i++){\n position += line_lengths[i];\n }\n\n // move window along line, starting at first vertex\n while (position + label_length < total_line_length){\n // define window breadth\n var window_start = position;\n var window_end = window_start + label_length;\n\n var line_position = window_start;\n var ahead_index = line_index;\n var cost = 0;\n\n // iterate through points on line intersecting window\n while (ahead_index < end_index && line_position + line_lengths[ahead_index] < window_end){\n cost += curvatures[ahead_index];\n if (cost === Infinity) {\n break; // no further progress can be made\n }\n\n line_position += line_lengths[ahead_index];\n ahead_index++;\n }\n\n // if optimal cost, break out\n if (cost === 0) {\n return line_index;\n }\n\n var avg_cost = cost / (ahead_index - line_index);\n\n total_costs.push(cost);\n avg_costs.push(avg_cost);\n\n position += line_lengths[line_index];\n line_index++;\n }\n\n if (total_costs.length === 0) {\n return -1;\n }\n\n // calculate min cost and avg cost to determine if label can fit within curvatures tolerances\n var min_total_cost = Math.min.apply(null, total_costs);\n var min_index = total_costs.indexOf(min_total_cost);\n var min_avg_cost = avg_costs[min_index];\n\n if (min_total_cost < CURVE_MIN_TOTAL_COST && min_avg_cost < CURVE_MIN_AVG_COST){\n // return index with best placement (least curvature)\n return total_costs.indexOf(min_total_cost);\n }\n else {\n // if tolerances aren't satisfied, throw away tile\n return -1;\n }\n }\n\n // Scale the line by a scale factor (used for computing the angles and offsets are fractional zoom levels)\n // Return the new line positions and their lengths\n static scaleLine(scale, line){\n var new_line = [line[0]];\n var line_lengths = [];\n\n line.forEach(function(pt, i){\n if (i === line.length - 1) {\n return;\n }\n var v = Vector.sub(line[i+1], line[i]);\n var delta = Vector.mult(v, 1 + scale);\n\n new_line.push(Vector.add(new_line[i], delta));\n line_lengths.push(Vector.length(delta));\n });\n\n return [new_line, line_lengths];\n }\n\n // Place a label at a given line index\n static placeAtIndex(anchor_index, line, line_lengths, label_lengths){\n let anchor = line[anchor_index];\n\n // Use flat coordinates. Get nearest line vertex index, and offset from the vertex for all labels.\n let [indices, relative_offsets] = LabelLineCurved.getIndicesAndOffsets(anchor_index, line_lengths, label_lengths);\n\n // get 2D positions based on \"flat\" indices and offsets\n let positions = LabelLineCurved.getPositionsFromIndicesAndOffsets(line, indices, relative_offsets);\n\n // get 2d offsets, angles and pre_angles relative to anchor\n let [offsets, angles, pre_angles] = LabelLineCurved.getAnglesFromIndicesAndOffsets(anchor, indices, line, positions);\n\n return {positions, offsets, angles, pre_angles};\n }\n\n // Given label lengths to place along a line broken into several lengths, computer what indices and at which offsets\n // the labels will appear on the line. Assume the line is straight, as it is not necessary to consider angles.\n //\n // Label lengths:\n // |-----|----|-----|-----------------|-------------|\n //\n // Line Lengths;\n // |---------|---------|-------------|------------|----------|-------|\n //\n // Result: indices: [0,0,1,1,3,4]\n static getIndicesAndOffsets(line_index, line_lengths, label_lengths){\n let num_labels = label_lengths.length;\n\n let indices = [];\n let offsets = [];\n\n let label_index = 0;\n let label_offset = 0;\n let line_offset = 0;\n\n // iterate along line\n while (label_index < num_labels){\n let label_length = label_lengths[label_index];\n\n // iterate along labels within the line segment\n while (label_index < num_labels && label_offset + 0.5 * label_length <= line_offset + line_lengths[line_index]){\n let offset = label_offset - line_offset + 0.5 * label_length;\n offsets.push(offset);\n indices.push(line_index);\n\n label_offset += label_length;\n label_index++;\n label_length = label_lengths[label_index];\n }\n\n line_offset += line_lengths[line_index];\n line_index++;\n }\n\n return [indices, offsets];\n }\n\n // Given indices and 1D offsets on a line, compute their 2D positions\n static getPositionsFromIndicesAndOffsets(line, indices, offsets){\n let positions = [];\n for (let i = 0; i < indices.length; i++){\n let index = indices[i];\n let offset = offsets[i];\n\n let angle = getAngleForSegment(line[index], line[index + 1]);\n\n let offset2d = Vector.rot([offset, 0], angle);\n let position = Vector.add(line[index], offset2d);\n\n positions.push(position);\n }\n\n return positions;\n }\n\n // Given indices and 1D offsets on a line, compute their angles and pre-angles from a reference anchor point\n static getAnglesFromIndicesAndOffsets(anchor, indices, line, positions){\n let angles = [];\n let pre_angles = [];\n let offsets = [];\n\n for (let i = 0; i < positions.length; i++){\n let position = positions[i];\n let index = indices[i];\n\n let offset = Vector.sub(position, anchor);\n let offset_angle = -Vector.angle(offset);\n\n let angle = getTextAngleForSegment(line[index], line[index + 1]);\n let pre_angle = angle - offset_angle;\n\n if (i > 0){\n let prev_angle = angles[i - 1];\n let prev_pre_angle = pre_angles[i - 1];\n if (Math.abs(offset_angle - prev_angle) > Math.PI) {\n offset_angle += (offset_angle > prev_angle) ? -2 * Math.PI : 2 * Math.PI;\n }\n if (Math.abs(prev_pre_angle - pre_angle) > Math.PI) {\n pre_angle += (pre_angle > prev_pre_angle) ? -2 * Math.PI : 2 * Math.PI;\n }\n }\n\n angles.push(offset_angle);\n pre_angles.push(pre_angle);\n offsets.push(offset);\n }\n\n return [offsets, angles, pre_angles];\n }\n\n // Modify the LabelLineStraight method to include a distiction between an offset angle, and rotation angle\n // as these may be different. (Offset angle is constant for the entire label, while rotation angles are not.)\n static createOBB (position, width, height, offset, angle_offset, angle_curve, upp) {\n let p0 = position[0];\n let p1 = position[1];\n\n // apply offset, x positive, y pointing down\n if (offset && (offset[0] !== 0 || offset[1] !== 0)) {\n offset = Vector.rot(offset, angle_offset);\n p0 += offset[0] * upp;\n p1 -= offset[1] * upp;\n }\n\n // the angle of the obb is negative since it's the tile system y axis is pointing down\n return new OBB(p0, p1, -angle_curve, width, height);\n }\n}\n\n// Fitness function (label length / line length)\nfunction calcFitness(line_length, label_length) {\n return label_length / line_length;\n}\n\nfunction getAngleForSegment(p, q){\n let pq = Vector.sub(q,p);\n return Vector.angle(pq);\n}\n\nfunction getTextAngleForSegment(pt1, pt2) {\n return -getAngleForSegment(pt1, pt2);\n}\n\nfunction getLineLengths(line){\n let lengths = [];\n for (let i = 0; i < line.length - 1; i++){\n let p = line[i];\n let q = line[i+1];\n let length = Math.hypot(p[0] - q[0], p[1] - q[1]);\n lengths.push(length);\n }\n return lengths;\n}\n\nfunction getAbsAngleDiff(angle1, angle2){\n let small, big;\n if (angle1 > angle2){\n small = angle2;\n big = angle1;\n }\n else {\n small = angle1;\n big = angle2;\n }\n\n while (big - small > Math.PI){\n small += 2 * Math.PI;\n }\n\n return Math.abs(big - small);\n}\n", "import Label from './label';\nimport PointAnchor from './point_anchor';\nimport Geo from '../geo';\nimport OBB from '../utils/obb';\nimport {StyleParser} from '../styles/style_parser';\n\nexport default class LabelPoint extends Label {\n\n constructor (position, size, layout) {\n super(size, layout);\n this.position = [position[0], position[1]];\n this.parent = this.layout.parent;\n this.update();\n\n this.start_anchor_index = 1;\n this.degenerate = !this.size[0] && !this.size[1] && !this.layout.buffer[0] && !this.layout.buffer[1];\n this.throw_away = !this.getNextFit();\n }\n\n update() {\n super.update();\n this.computeOffset();\n this.updateBBoxes();\n }\n\n computeOffset () {\n this.offset = [this.layout.offset[0], this.layout.offset[1]];\n\n // Additional anchor/offset for point:\n if (this.parent) {\n let parent = this.parent;\n // point's own anchor, text anchor applied to point, additional point offset\n this.offset = PointAnchor.computeOffset(this.offset, parent.size, parent.anchor, PointAnchor.zero_buffer);\n this.offset = PointAnchor.computeOffset(this.offset, parent.size, this.anchor, PointAnchor.zero_buffer);\n if (parent.offset !== StyleParser.zeroPair) { // point has an offset\n if (this.offset === StyleParser.zeroPair) { // no text offset, use point's\n this.offset = parent.offset;\n }\n else { // text has offset, add point's\n this.offset[0] += parent.offset[0];\n this.offset[1] += parent.offset[1];\n }\n }\n }\n\n this.offset = PointAnchor.computeOffset(this.offset, this.size, this.anchor);\n }\n\n updateBBoxes () {\n let width = (this.size[0] + this.layout.buffer[0] * 2) * this.layout.units_per_pixel * Label.epsilon;\n let height = (this.size[1] + this.layout.buffer[1] * 2) * this.layout.units_per_pixel * Label.epsilon;\n\n // fudge width value as text may overflow bounding box if it has italic, bold, etc style\n if (this.layout.italic){\n width += 5 * this.layout.units_per_pixel;\n }\n\n let p = [\n this.position[0] + (this.offset[0] * this.layout.units_per_pixel),\n this.position[1] - (this.offset[1] * this.layout.units_per_pixel)\n ];\n\n this.obb = new OBB(p[0], p[1], 0, width, height);\n this.aabb = this.obb.getExtent();\n }\n\n // Try to move the label into the tile bounds\n // Returns true if label was moved into tile, false if it couldn't be moved\n moveIntoTile () {\n let updated = false;\n\n if (this.aabb[0] < 0) {\n this.position[0] += -this.aabb[0];\n updated = true;\n }\n\n if (this.aabb[2] >= Geo.tile_scale) {\n this.position[0] -= this.aabb[2] - Geo.tile_scale + 1;\n updated = true;\n }\n\n if (this.aabb[3] > 0) {\n this.position[1] -= this.aabb[3];\n updated = true;\n }\n\n if (this.aabb[1] <= -Geo.tile_scale) {\n this.position[1] -= this.aabb[1] + Geo.tile_scale - 1;\n updated = true;\n }\n\n if (updated) {\n this.updateBBoxes();\n }\n\n return updated;\n }\n\n getNextFit() {\n if (!this.layout.cull_from_tile || this.inTileBounds()) {\n return true;\n }\n\n if (this.layout.move_into_tile){\n this.moveIntoTile();\n return true;\n }\n else {\n if (Array.isArray(this.layout.anchor)) {\n // Start on second anchor (first anchor was set on creation)\n for (let i = 1; i < this.layout.anchor.length; i++) {\n this.anchor = this.layout.anchor[i];\n this.update();\n\n this.start_anchor_index = i;\n\n if (this.inTileBounds()) {\n return true;\n }\n }\n }\n\n // no anchors result in fit\n return false;\n }\n }\n\n discard (bboxes, exclude = null) {\n if (this.degenerate) {\n return false;\n }\n\n if (super.discard(bboxes, exclude)) {\n // If more than one anchor specified, try them in order\n if (Array.isArray(this.layout.anchor)) {\n // Start on second anchor (first anchor was set on creation)\n for (let i=this.start_anchor_index; i < this.layout.anchor.length; i++) {\n this.anchor = this.layout.anchor[i];\n this.update();\n\n if (this.layout.cull_from_tile && !this.inTileBounds()) {\n continue;\n }\n\n if (!super.discard(bboxes, exclude)) {\n return false;\n }\n }\n }\n return true;\n }\n return false;\n }\n\n}\n\n// Placement strategies\nLabelPoint.PLACEMENT = {\n VERTEX: 0, // place labels at endpoints of line segments\n MIDPOINT: 1, // place labels at midpoints of line segments\n SPACED: 2, // place labels equally spaced along line\n CENTROID: 3 // place labels at center of polygons\n};\n", "// Sets of values to match for directional and corner anchors\nconst lefts = ['left', 'top-left', 'bottom-left'];\nconst rights = ['right', 'top-right', 'bottom-right'];\nconst tops = ['top', 'top-left', 'top-right'];\nconst bottoms = ['bottom', 'bottom-left', 'bottom-right'];\n\nlet PointAnchor;\n\nexport default PointAnchor = {\n\n computeOffset (offset, size, anchor, buffer = null) {\n if (!anchor || anchor === 'center') {\n return offset;\n }\n\n let offset2 = [offset[0], offset[1]];\n buffer = buffer || this.default_buffer;\n\n // An optional left/right offset\n if (this.isLeftAnchor(anchor)) {\n offset2[0] -= size[0] / 2;\n if (anchor === 'left') {\n offset2[0] -= buffer[0];\n }\n }\n else if (this.isRightAnchor(anchor)) {\n offset2[0] += size[0] / 2;\n if (anchor === 'right') {\n offset2[0] += buffer[1];\n }\n }\n\n // An optional top/bottom offset\n if (this.isTopAnchor(anchor)) {\n offset2[1] -= size[1] / 2;\n if (anchor === 'top') {\n offset2[1] -= buffer[2];\n }\n }\n else if (this.isBottomAnchor(anchor)) {\n offset2[1] += size[1] / 2;\n if (anchor === 'bottom') {\n offset2[1] += buffer[3];\n }\n }\n\n return offset2;\n },\n\n alignForAnchor (anchor) {\n if (anchor && anchor !== 'center') {\n if (this.isLeftAnchor(anchor)) {\n return 'right';\n }\n else if (this.isRightAnchor(anchor)) {\n return 'left';\n }\n }\n return 'center';\n },\n\n isLeftAnchor (anchor) {\n return (lefts.indexOf(anchor) > -1);\n },\n\n isRightAnchor (anchor) {\n return (rights.indexOf(anchor) > -1);\n },\n\n isTopAnchor (anchor) {\n return (tops.indexOf(anchor) > -1);\n },\n\n isBottomAnchor (anchor) {\n return (bottoms.indexOf(anchor) > -1);\n },\n\n // Buffers: [left, right, top, bottom]\n default_buffer: [2.5, 2.5, 1.5, 0.75],\n zero_buffer: [0, 0, 0, 0]\n\n};\n", - "// Logic for placing point labels along a line geometry\n\nimport LabelPoint from './label_point';\nimport {isCoordOutsideTile} from '../builders/common';\n\nconst PLACEMENT = LabelPoint.PLACEMENT;\nconst default_spacing = 80; // spacing of points along line in pixels\n\nexport default function placePointsOnLine (line, size, options) {\n let labels = [];\n let strategy = options.placement;\n let min_length = Math.max(size[0], size[1]) * options.placement_min_length_ratio * options.units_per_pixel;\n\n switch (strategy){\n case PLACEMENT.SPACED:\n let result = getPositionsAndAngles(line, min_length, options);\n // false will be returned if line have no length\n if (!result) {\n return [];\n }\n\n let positions = result.positions;\n let angles = result.angles;\n for (let i = 0; i < positions.length; i++){\n let position = positions[i];\n let angle = angles[i];\n if (options.tile_edges === true || !isCoordOutsideTile(position)) {\n let label = new LabelPoint(position, size, options);\n label.angle = angle;\n labels.push(label);\n }\n }\n break;\n case PLACEMENT.VERTEX:\n let p, q, label;\n for (let i = 0; i < line.length - 1; i++){\n p = line[i];\n q = line[i + 1];\n if (options.tile_edges === true || !isCoordOutsideTile(p)) {\n label = new LabelPoint(p, size, options);\n label.angle = getAngle(p, q, options.angle);\n labels.push(label);\n }\n }\n\n // add last endpoint\n label = new LabelPoint(q, size, options);\n label.angle = getAngle(p, q, options.angle);\n labels.push(label);\n break;\n case PLACEMENT.MIDPOINT:\n for (let i = 0; i < line.length - 1; i++){\n let p = line[i];\n let q = line[i + 1];\n let position = [\n 0.5 * (p[0] + q[0]),\n 0.5 * (p[1] + q[1])\n ];\n if (options.tile_edges === true || !isCoordOutsideTile(position)) {\n if (!min_length || norm(p, q) > min_length) {\n let label = new LabelPoint(position, size, options);\n label.angle = getAngle(p, q, options.angle);\n labels.push(label);\n }\n }\n }\n break;\n }\n return labels;\n}\n\nfunction getPositionsAndAngles(line, min_length, options){\n let upp = options.units_per_pixel;\n let spacing = (options.placement_spacing || default_spacing) * upp;\n\n let length = getLineLength(line);\n if (length <= min_length) {\n return false;\n }\n\n let num_labels = Math.max(Math.floor(length / spacing), 1);\n let remainder = length - (num_labels - 1) * spacing;\n let positions = [];\n let angles = [];\n\n let distance = 0.5 * remainder;\n for (let i = 0; i < num_labels; i++){\n let {position, angle} = interpolateLine(line, distance, min_length, options);\n if (position != null && angle != null) {\n positions.push(position);\n angles.push(angle);\n }\n distance += spacing;\n }\n\n return {positions, angles};\n}\n\nfunction getAngle(p, q, angle = 0){\n return (angle === 'auto') ? Math.atan2(q[0] - p[0], q[1] - p[1]) : angle;\n}\n\nfunction getLineLength(line){\n let distance = 0;\n for (let i = 0; i < line.length - 1; i++){\n distance += norm(line[i], line[i+1]);\n }\n return distance;\n}\n\nfunction norm(p, q){\n return Math.sqrt(Math.pow(p[0] - q[0], 2) + Math.pow(p[1] - q[1], 2));\n}\n\nfunction interpolateLine(line, distance, min_length, options){\n let sum = 0;\n let position, angle;\n for (let i = 0; i < line.length-1; i++){\n let p = line[i];\n let q = line[i+1];\n\n const length = norm(p, q);\n if (length <= min_length) {\n continue;\n }\n\n sum += length;\n\n if (sum > distance){\n position = interpolateSegment(p, q, sum - distance);\n angle = getAngle(p, q, options.angle);\n break;\n }\n }\n return {position, angle};\n}\n\nfunction interpolateSegment(p, q, distance){\n let length = norm(p, q);\n let ratio = distance / length;\n return [\n ratio * p[0] + (1 - ratio) * q[0],\n ratio * p[1] + (1 - ratio) * q[1]\n ];\n}\n", + "// Logic for placing point labels along a line geometry\n\nimport LabelPoint from './label_point';\nimport {isCoordOutsideTile} from '../builders/common';\n\nconst PLACEMENT = LabelPoint.PLACEMENT;\nconst default_spacing = 80; // spacing of points along line in pixels\n\nexport default function placePointsOnLine (line, size, options) {\n let labels = [];\n let strategy = options.placement;\n let min_length = Math.max(size[0], size[1]) * options.placement_min_length_ratio * options.units_per_pixel;\n\n switch (strategy){\n case PLACEMENT.SPACED:\n let result = getPositionsAndAngles(line, min_length, options);\n // false will be returned if line have no length\n if (!result) {\n return [];\n }\n\n let positions = result.positions;\n let angles = result.angles;\n for (let i = 0; i < positions.length; i++){\n let position = positions[i];\n let angle = angles[i];\n if (options.tile_edges === true || !isCoordOutsideTile(position)) {\n let label = new LabelPoint(position, size, options);\n label.angle = angle;\n labels.push(label);\n }\n }\n break;\n case PLACEMENT.VERTEX:\n let p, q, label;\n for (let i = 0; i < line.length - 1; i++){\n p = line[i];\n q = line[i + 1];\n if (options.tile_edges === true || !isCoordOutsideTile(p)) {\n label = new LabelPoint(p, size, options);\n label.angle = getAngle(p, q, options.angle);\n labels.push(label);\n }\n }\n\n // add last endpoint\n label = new LabelPoint(q, size, options);\n label.angle = getAngle(p, q, options.angle);\n labels.push(label);\n break;\n case PLACEMENT.MIDPOINT:\n for (let i = 0; i < line.length - 1; i++){\n let p = line[i];\n let q = line[i + 1];\n let position = [\n 0.5 * (p[0] + q[0]),\n 0.5 * (p[1] + q[1])\n ];\n if (options.tile_edges === true || !isCoordOutsideTile(position)) {\n if (!min_length || norm(p, q) > min_length) {\n let label = new LabelPoint(position, size, options);\n label.angle = getAngle(p, q, options.angle);\n labels.push(label);\n }\n }\n }\n break;\n }\n return labels;\n}\n\nfunction getPositionsAndAngles(line, min_length, options){\n let upp = options.units_per_pixel;\n let spacing = (options.placement_spacing || default_spacing) * upp;\n\n let length = getLineLength(line);\n if (length <= min_length) {\n return false;\n }\n\n let num_labels = Math.max(Math.floor(length / spacing), 1);\n let remainder = length - (num_labels - 1) * spacing;\n let positions = [];\n let angles = [];\n\n let distance = 0.5 * remainder;\n for (let i = 0; i < num_labels; i++){\n let {position, angle} = interpolateLine(line, distance, min_length, options);\n if (position != null && angle != null) {\n positions.push(position);\n angles.push(angle);\n }\n distance += spacing;\n }\n\n return {positions, angles};\n}\n\nfunction getAngle(p, q, angle = 0){\n return (angle === 'auto') ? Math.atan2(q[0] - p[0], q[1] - p[1]) : angle;\n}\n\nfunction getLineLength(line){\n let distance = 0;\n for (let i = 0; i < line.length - 1; i++){\n distance += norm(line[i], line[i+1]);\n }\n return distance;\n}\n\nfunction norm(p, q){\n return Math.sqrt(Math.pow(p[0] - q[0], 2) + Math.pow(p[1] - q[1], 2));\n}\n\n// TODO: can be optimized.\n// you don't have to start from the first index every time for placement\nfunction interpolateLine(line, distance, min_length, options){\n let sum = 0;\n let position, angle;\n for (let i = 0; i < line.length-1; i++){\n let p = line[i];\n let q = line[i+1];\n\n const length = norm(p, q);\n if (length <= min_length) {\n continue;\n }\n\n sum += length;\n\n if (sum > distance){\n position = interpolateSegment(p, q, sum - distance);\n angle = getAngle(p, q, options.angle);\n break;\n }\n }\n return {position, angle};\n}\n\nfunction interpolateSegment(p, q, distance){\n let length = norm(p, q);\n let ratio = distance / length;\n return [\n ratio * p[0] + (1 - ratio) * q[0],\n ratio * p[1] + (1 - ratio) * q[1]\n ];\n}\n", "import Geo from '../geo';\n\nexport default class RepeatGroup {\n\n constructor (key, repeat_dist, max_repeat_dist) {\n this.key = key;\n this.repeat_dist = repeat_dist;\n this.repeat_dist_sq = this.repeat_dist * this.repeat_dist;\n this.max_repeat_dist_sq = max_repeat_dist * max_repeat_dist;\n this.one_per_group = (this.repeat_dist_sq >= this.max_repeat_dist_sq) ? true : false;\n this.positions = [];\n }\n\n // Check an object to see if it's a repeat in this group\n check (obj) {\n // If only one object allowed per group, shortcut distance logic\n if (this.one_per_group) {\n if (this.positions.length > 0) {\n // reported distance maxes out at threshold in this case\n // (not true dist value since we skipped calculating it)\n return {\n dist_sq: this.max_repeat_dist_sq,\n repeat_dist_sq: this.repeat_dist_sq,\n one_per_group: this.one_per_group\n };\n }\n return; // no object for this group yet\n }\n\n // Check distance from new object to objects already in group\n let p1 = obj.position;\n for (let i=0; i < this.positions.length; i++) {\n let p2 = this.positions[i];\n let dx = p1[0] - p2[0];\n let dy = p1[1] - p2[1];\n let dist_sq = dx * dx + dy * dy;\n\n // Found an existing object within allowed distance\n if (dist_sq < this.repeat_dist_sq) {\n return {\n dist_sq,\n repeat_dist_sq: this.repeat_dist_sq\n };\n }\n }\n }\n\n // Add object to this group\n add (obj) {\n // only store object's position, to save space / prevent unnecessary references\n if (obj && obj.position) {\n this.positions.push(obj.position);\n }\n }\n\n // Static methods are used to manage repeat groups, within and across tiles\n\n // Reset all groups for this tile\n static clear (tile) {\n this.groups[tile] = {};\n }\n\n // Check an object to see if it's a repeat within its designated group\n static check (obj, layout, tile) {\n if (layout.repeat_distance && layout.repeat_group && this.groups[tile][layout.repeat_group]) {\n return this.groups[tile][layout.repeat_group].check(obj);\n }\n }\n\n // Add an object to its designated group\n static add (obj, layout, tile) {\n if (layout.repeat_distance && layout.repeat_group) {\n if (this.groups[tile][layout.repeat_group] == null) {\n this.groups[tile][layout.repeat_group] = new RepeatGroup(\n layout.repeat_group,\n layout.repeat_distance,\n RepeatGroup.max_repeat_dist\n );\n }\n this.groups[tile][layout.repeat_group].add(obj);\n }\n }\n\n}\n\n// Current set of repeat groups, grouped and keyed by tile\nRepeatGroup.groups = {};\n\n// Max repeat dist: for groups with a repeat dist beyond this threshold, only one label\n// will be allowed per group, e.g. set to tile size for one-label-per-tile\nRepeatGroup.max_repeat_dist = Geo.tile_scale;\n", "import Thread from './utils/thread';\nimport Scene from './scene';\nimport Geo from './geo';\nimport debounce from './utils/debounce';\nimport {mergeDebugSettings} from './utils/debug_settings';\n\n// Exports must appear outside a function, but will only be defined in main thread (below)\nexport var LeafletLayer;\nexport function leafletLayer(options) {\n return extendLeaflet(options);\n}\n\nfunction extendLeaflet(options) {\n\n // If LeafletLayer is already defined when this is called just return that immediately\n // e.g. if you call leafletLayer multiple times (which is valid)\n if (typeof LeafletLayer !== 'undefined') {\n return new LeafletLayer(options);\n }\n\n // Leaflet layer functionality is only defined in main thread\n if (Thread.is_main) {\n\n let L = options.leaflet || window.L;\n\n // Determine if we are extending the leaflet 0.7.x TileLayer class, or the newer\n // leaflet 1.x GridLayer class.\n let layerBaseClass = L.GridLayer ? L.GridLayer : L.TileLayer;\n let leafletVersion = layerBaseClass === L.GridLayer ? '1.x' : '0.7.x';\n let layerClassConfig = {};\n let setZoomAroundNoMoveEnd, debounceMoveEnd; // alternate zoom functions defined below\n\n // If extending leaflet 0.7.x TileLayer, additional modifications are needed\n if (layerBaseClass === L.TileLayer) {\n layerClassConfig._addTile = function(){};\n layerClassConfig._removeTile = function(){};\n layerClassConfig._reset = function() {\n layerBaseClass.prototype._reset.apply(this, arguments);\n // re-add the canvas since base class `viewreset` event can remove it\n if (this.scene && this.scene.container && this.scene.canvas) {\n this.scene.container.appendChild(this.scene.canvas);\n }\n };\n }\n\n // Define custom layer methods\n Object.assign(layerClassConfig, {\n\n initialize (options) {\n // Defaults\n options.showDebug = (!options.showDebug ? false : true);\n\n L.setOptions(this, options);\n this.updateTangramDebugSettings();\n this.createScene();\n this.hooks = {};\n this._updating_tangram = false;\n this._zoomAnimated = false; // turn leaflet zoom animations off for this layer\n },\n\n createScene () {\n this.scene = Scene.create(\n this.options.scene,\n {\n numWorkers: this.options.numWorkers,\n preUpdate: this.options.preUpdate,\n postUpdate: this.options.postUpdate,\n continuousZoom: (LeafletLayer.leafletVersion === '1.x'),\n wrapView: (this.options.noWrap === true ? false : true),\n highDensityDisplay: this.options.highDensityDisplay,\n logLevel: this.options.logLevel,\n introspection: this.options.introspection,\n webGLContextOptions: this.options.webGLContextOptions, // override/supplement WebGL context options\n disableRenderLoop: this.options.disableRenderLoop // app must call scene.update() per frame\n });\n },\n\n // Finish initializing scene and setup events when layer is added to map\n onAdd (map) {\n if (!this.scene) {\n this.createScene();\n }\n\n layerBaseClass.prototype.onAdd.apply(this, arguments);\n\n this.hooks.resize = () => {\n this._updating_tangram = true;\n this.updateSize();\n this._updating_tangram = false;\n };\n map.on('resize', this.hooks.resize);\n\n this.hooks.move = () => {\n if (this._updating_tangram) {\n return;\n }\n this._updating_tangram = true;\n\n this.scene.view.setPanning(true);\n var view = map.getCenter();\n view.zoom = Math.max(Math.min(map.getZoom(), map.getMaxZoom() || Geo.default_view_max_zoom), map.getMinZoom());\n\n this.scene.view.setView(view);\n if (this._mapLayerCount > 1) {\n // if there are other map pane layers active, redraw immediately to stay in better visual sync\n // otherwise, wait until next regular animation loop iteration\n this.scene.immediateRedraw();\n }\n this.reverseTransform();\n\n this._updating_tangram = false;\n };\n map.on('move', this.hooks.move);\n\n this.hooks.zoomstart = () => {\n if (this._updating_tangram) {\n return;\n }\n\n this._updating_tangram = true;\n this.scene.view.startZoom();\n this._updating_tangram = false;\n };\n map.on('zoomstart', this.hooks.zoomstart);\n\n this.hooks.moveend = () => {\n this.scene.view.setPanning(false);\n this.scene.requestRedraw();\n };\n map.on('moveend', this.hooks.moveend);\n\n // Modify default Leaflet behaviors\n this.modifyScrollWheelBehavior(map);\n this.modifyDoubleClickZoom(map);\n debounceMoveEnd = debounce(\n function(map) {\n map._moveEnd(true);\n map.fire('viewreset'); // keep other leaflet layers in sync\n },\n map.options.wheelDebounceTime * 2\n );\n this.trackMapLayerCounts(map);\n\n // Setup feature selection\n this.setupSelectionEventHandlers(map);\n this.setSelectionEvents(this.options.events);\n\n // Add GL canvas to layer container\n this.scene.container = this.getContainer();\n this.updateSize();\n\n // Initial view\n this.updateView();\n this.resizeOnFirstVisible();\n\n // Subscribe to tangram events\n this.scene.subscribe({\n move: this.onTangramViewUpdate.bind(this)\n });\n\n // Use leaflet's existing event system as the callback mechanism\n this.scene.load(this.options.scene,\n { config_path: this.options.sceneBasePath, blocking: false }).then(() => {\n\n this._updating_tangram = true;\n\n this.updateSize();\n this.updateView();\n this.reverseTransform();\n\n this._updating_tangram = false;\n\n this.fire('init');\n }).catch(error => {\n this.fire('error', error);\n });\n },\n\n onRemove (map) {\n layerBaseClass.prototype.onRemove.apply(this, arguments);\n\n map.off('layeradd layerremove overlayadd overlayremove', this._updateMapLayerCount);\n map.off('resize', this.hooks.resize);\n map.off('move', this.hooks.move);\n map.off('zoomstart', this.hooks.zoomstart);\n map.off('moveend', this.hooks.moveend);\n map.off('click', this.hooks.click);\n map.off('mousemove', this.hooks.mousemove);\n map.off('mouseout', this.hooks.mouseout);\n document.removeEventListener('visibilitychange', this.hooks.visibilitychange);\n this.hooks = {};\n\n if (this.scene) {\n this.scene.destroy();\n this.scene = null;\n }\n },\n\n createTile (coords) {\n var key = coords.x + '/' + coords.y + '/' + coords.z;\n var div = document.createElement('div');\n div.setAttribute('data-tile-key', key);\n div.style.width = '256px';\n div.style.height = '256px';\n\n if (this.options.showDebug) {\n var debug_overlay = document.createElement('div');\n debug_overlay.textContent = key;\n debug_overlay.style.position = 'absolute';\n debug_overlay.style.left = 0;\n debug_overlay.style.top = 0;\n debug_overlay.style.color = 'white';\n debug_overlay.style.fontSize = '16px';\n debug_overlay.style.textOutline = '1px #000000';\n debug_overlay.style.padding = '8px';\n\n div.appendChild(debug_overlay);\n div.style.borderStyle = 'solid';\n div.style.borderColor = 'white';\n div.style.borderWidth = '1px';\n }\n\n return div;\n },\n\n // Modify leaflet's default scroll wheel behavior to render frames more frequently\n // (should generally lead to smoother scroll with Tangram frame re-render)\n modifyScrollWheelBehavior (map) {\n if (this.scene.view.continuous_zoom && map.scrollWheelZoom && this.options.modifyScrollWheel !== false) {\n map.options.zoomSnap = 0;\n\n const enabled = map.scrollWheelZoom.enabled();\n map.scrollWheelZoom.disable();\n\n // Chrome and Safari have smoother scroll-zoom without actively throttling the mouse wheel,\n // while FF and Edge/IE do better with throttling.\n // TODO: may be related to syncing differences with requestAnimationFrame loop, investigate further\n if (L.Browser.chrome || L.Browser.safari) {\n map.scrollWheelZoom._onWheelScroll = function (e) {\n var delta = L.DomEvent.getWheelDelta(e);\n this._delta += delta;\n this._lastMousePos = this._map.mouseEventToContainerPoint(e);\n this._performZoom();\n L.DomEvent.stop(e);\n };\n }\n else {\n map.options.wheelDebounceTime = 20; // better default for FF and Edge/IE\n }\n\n map.scrollWheelZoom._performZoom = function () {\n var map = this._map,\n zoom = map.getZoom();\n\n map._stop(); // stop panning and fly animations if any\n\n var delta = this._delta / (this._map.options.wheelPxPerZoomLevel * 4);\n this._delta = 0;\n\n if ((zoom + delta) >= this._map.getMaxZoom()) {\n delta = this._map.getMaxZoom() - zoom; // don't go past max zoom\n }\n else if ((zoom + delta) <= this._map.getMinZoom()) {\n delta = this._map.getMinZoom() - zoom; // don't go past min zoom\n }\n\n if (!delta) { return; }\n\n if (map.options.scrollWheelZoom === 'center') {\n setZoomAroundNoMoveEnd(map, map.getCenter(), zoom + delta);\n } else {\n setZoomAroundNoMoveEnd(map, this._lastMousePos, zoom + delta);\n }\n debounceMoveEnd(map);\n };\n\n if (enabled) {\n map.scrollWheelZoom.enable();\n }\n }\n },\n\n // Modify leaflet's default double-click zoom behavior, to match typical vector basemap products\n modifyDoubleClickZoom (map) {\n if (this.scene.view.continuous_zoom && map.doubleClickZoom && this.options.modifyDoubleClickZoom !== false) {\n\n // Simplified version of Leaflet's flyTo, for short animations zooming around a point\n const flyAround = function (map, targetCenter, targetZoom, options) {\n options = options || {};\n if (options.animate === false || !L.Browser.any3d) {\n return map.setView(targetCenter, targetZoom, options);\n }\n\n map._stop();\n\n var startZoom = map._zoom;\n\n targetCenter = L.latLng(targetCenter);\n targetZoom = targetZoom === undefined ? startZoom : targetZoom;\n targetZoom = Math.min(targetZoom, map.getMaxZoom()); // don't go past max zoom\n\n var from = map.project(map.getCenter(), startZoom),\n to = map.project(targetCenter, startZoom);\n\n var start = Date.now(),\n duration = options.duration ? 1000 * options.duration : 75;\n\n function frame() {\n var t = (Date.now() - start) / duration;\n\n if (t <= 1) {\n // reuse internal flyTo frame to ensure these animations are canceled like others\n map._flyToFrame = L.Util.requestAnimFrame(frame, map);\n\n var center = from.add(to.subtract(from).multiplyBy(t));\n center = [center.x, center.y];\n center = Geo.metersToLatLng(center);\n setZoomAroundNoMoveEnd(map, targetCenter, startZoom + (targetZoom - startZoom) * t);\n } else {\n setZoomAroundNoMoveEnd(map, targetCenter, targetZoom)\n ._moveEnd(true);\n }\n }\n\n map._moveStart(true);\n\n frame.call(map);\n return map;\n };\n\n // Modify the double-click zoom handler to do a short zoom animation\n const enabled = map.doubleClickZoom.enabled();\n map.doubleClickZoom.disable();\n\n map.doubleClickZoom._onDoubleClick = function (e) {\n var map = this._map,\n oldZoom = map.getZoom(),\n delta = map.options.zoomDelta,\n zoom = e.originalEvent.shiftKey ? oldZoom - delta : oldZoom + delta;\n\n if (map.options.doubleClickZoom === 'center') {\n flyAround(map, map.getCenter(), zoom);\n } else {\n flyAround(map, map.containerPointToLatLng(e.containerPoint), zoom);\n }\n };\n\n if (enabled) {\n map.doubleClickZoom.enable();\n }\n }\n },\n\n updateView () {\n var view = this._map.getCenter();\n view.zoom = Math.max(Math.min(this._map.getZoom(), this._map.getMaxZoom() || Geo.default_view_max_zoom), this._map.getMinZoom());\n this.scene.view.setView(view);\n },\n\n updateSize () {\n var size = this._map.getSize();\n this.scene.resizeMap(size.x, size.y);\n },\n\n resizeOnFirstVisible () {\n let first_visibility = true;\n this.hooks.visibilitychange = () => {\n if (first_visibility) {\n first_visibility = false;\n this.updateSize();\n }\n };\n\n document.addEventListener('visibilitychange', this.hooks.visibilitychange);\n },\n\n onTangramViewUpdate () {\n if (!this._map || this._updating_tangram) {\n return;\n }\n\n // View changed?\n let map_center = this._map.getCenter();\n let view_center = this.scene.view.center;\n if (map_center.lng === view_center.lng &&\n map_center.lat === view_center.lat &&\n this._map.getZoom() === this.scene.view.zoom) {\n return;\n }\n\n this._updating_tangram = true;\n this._map.setView([this.scene.view.center.lat, this.scene.view.center.lng], this.scene.view.zoom, { animate: false });\n this.reverseTransform();\n this._updating_tangram = false;\n },\n\n render () {\n if (!this.scene) {\n return;\n }\n this.scene.update();\n },\n\n // Reverse the CSS positioning Leaflet applies to the layer, since Tangram's WebGL canvas\n // is expected to be 'absolutely' positioned.\n reverseTransform () {\n if (!this._map || !this.scene || !this.scene.container) {\n return;\n }\n\n var top_left = this._map.containerPointToLayerPoint([0, 0]);\n L.DomUtil.setPosition(this.scene.container, top_left);\n },\n\n // Tie Leaflet event handlers to Tangram feature selection\n setupSelectionEventHandlers (map) {\n this._selection_events = {};\n\n this.hooks.click = (event) => {\n if (typeof this._selection_events.click === 'function') {\n this.scene.getFeatureAt(event.containerPoint).\n then(selection => {\n let results = Object.assign({}, selection, { leaflet_event: event });\n this._selection_events.click(results);\n });\n }\n };\n map.on('click', this.hooks.click);\n\n this.hooks.mousemove = (event) => {\n if (typeof this._selection_events.hover === 'function') {\n this.scene.getFeatureAt(event.containerPoint).\n then(selection => {\n let results = Object.assign({}, selection, { leaflet_event: event });\n this._selection_events.hover(results);\n });\n }\n };\n map.on('mousemove', this.hooks.mousemove);\n\n this.hooks.mouseout = (event) => {\n // When mouse leaves map, send an additional selection event to indicate no feature is selected\n if (typeof this._selection_events.hover === 'function') {\n this._selection_events.hover({ changed: true, leaflet_event: event });\n }\n };\n map.on('mouseout', this.hooks.mouseout);\n },\n\n // Set user-defined handlers for feature selection events\n // Currently only one handler can be defined for each event type\n // Event types are: `click`, `hover` (leaflet `mousemove`)\n setSelectionEvents (events) {\n this._selection_events = Object.assign(this._selection_events, events);\n },\n\n // Track the # of layers in the map pane\n // Used to optimize Tangram redraw sensitivity (redraw more frequently when needing to sync w/other layers)\n trackMapLayerCounts (map) {\n this._updateMapLayerCount = () => {\n let nodes = map.getPanes().mapPane.childNodes;\n this._mapLayerCount = 0;\n for (let i=0; i < nodes.length; i++) {\n this._mapLayerCount += nodes[i].childNodes.length;\n }\n };\n\n map.on('layeradd layerremove overlayadd overlayremove', this._updateMapLayerCount);\n this._updateMapLayerCount();\n },\n\n updateTangramDebugSettings () {\n mergeDebugSettings(this.options.debug || {});\n }\n\n });\n\n // Modified version of Leaflet's setZoomAround that doesn't trigger a moveEnd event\n setZoomAroundNoMoveEnd = function (map, latlng, zoom) {\n var scale = map.getZoomScale(zoom),\n viewHalf = map.getSize().divideBy(2),\n containerPoint = latlng instanceof L.Point ? latlng : map.latLngToContainerPoint(latlng),\n\n centerOffset = containerPoint.subtract(viewHalf).multiplyBy(1 - 1 / scale),\n newCenter = map.containerPointToLatLng(viewHalf.add(centerOffset));\n\n return map._move(newCenter, zoom, { flyTo: true });\n };\n\n // Create the layer class\n LeafletLayer = layerBaseClass.extend(layerClassConfig);\n\n // Polyfill some 1.0 methods\n if (typeof LeafletLayer.remove !== 'function') {\n LeafletLayer.prototype.remove = function() {\n if (this._map) {\n this._map.removeLayer(this);\n }\n this.fire('remove');\n };\n }\n\n LeafletLayer.layerBaseClass = layerBaseClass;\n LeafletLayer.leafletVersion = leafletVersion;\n\n return new LeafletLayer(options);\n }\n}\n", "import ShaderProgram from './gl/shader_program';\nimport GLSL from './gl/glsl';\nimport Geo from './geo';\nimport Vector from './vector';\nimport {StyleParser} from './styles/style_parser';\n\nlet fs = require('fs');\n\nconst shaderSrc_ambientLight = fs.readFileSync(__dirname + '/gl/shaders/ambientLight.glsl', 'utf8');\nconst shaderSrc_directionalLight = fs.readFileSync(__dirname + '/gl/shaders/directionalLight.glsl', 'utf8');\nconst shaderSrc_pointLight = fs.readFileSync(__dirname + '/gl/shaders/pointLight.glsl', 'utf8');\nconst shaderSrc_spotLight = fs.readFileSync(__dirname + '/gl/shaders/spotLight.glsl', 'utf8');\n\n// Abstract light\nexport default class Light {\n\n constructor (view, config) {\n this.name = config.name;\n this.view = view;\n\n if (config.ambient == null || typeof config.ambient === 'number') {\n this.ambient = GLSL.expandVec3(config.ambient || 0);\n }\n else {\n this.ambient = StyleParser.parseColor(config.ambient).slice(0, 3);\n }\n\n if (config.diffuse == null || typeof config.diffuse === 'number') {\n this.diffuse = GLSL.expandVec3(config.diffuse != null ? config.diffuse : 1);\n }\n else {\n this.diffuse = StyleParser.parseColor(config.diffuse).slice(0, 3);\n }\n\n if (config.specular == null || typeof config.specular === 'number') {\n this.specular = GLSL.expandVec3(config.specular || 0);\n }\n else {\n this.specular = StyleParser.parseColor(config.specular).slice(0, 3);\n }\n }\n\n // Create a light by type name, factory-style\n // 'config' must include 'name' and 'type', along with any other type-specific properties\n static create (view, config) {\n if (Light.types[config.type]) {\n return new Light.types[config.type](view, config);\n }\n }\n\n // Set light for a style: fragment lighting, vertex lighting, or none\n static setMode (mode, style) {\n if (mode === true) {\n mode = 'fragment';\n }\n mode = Light.enabled && ((mode != null) ? mode : 'fragment'); // default to fragment lighting\n style.defines['TANGRAM_LIGHTING_FRAGMENT'] = (mode === 'fragment');\n style.defines['TANGRAM_LIGHTING_VERTEX'] = (mode === 'vertex');\n }\n\n // Inject all provided light definitions, and calculate cumulative light function\n static inject (lights) {\n // Clear previous injections\n ShaderProgram.removeBlock(Light.block);\n\n // If lighting is globally disabled, nothing is injected (mostly for debugging or live editing)\n if (!Light.enabled) {\n return;\n }\n\n // Construct code to calculate each light instance\n let calculateLights = \"\";\n if (lights && Object.keys(lights).length > 0) {\n // Collect uniques types of lights\n let types = {};\n for (let light_name in lights) {\n types[lights[light_name].type] = true;\n }\n\n // Inject each type of light\n for (let type in types) {\n Light.types[type].inject();\n }\n\n // Inject per-instance blocks and construct the list of functions to calculate each light\n for (let light_name in lights) {\n // Define instance\n lights[light_name].inject();\n\n // Add the calculation function to the list\n calculateLights += `calculateLight(${light_name}, _eyeToPoint, _normal);\\n`;\n }\n }\n\n // Glue together the final lighting function that sums all the lights\n let calculateFunction = `\n vec4 calculateLighting(in vec3 _eyeToPoint, in vec3 _normal, in vec4 _color) {\n\n // Do initial material calculations over normal, emission, ambient, diffuse and specular values\n calculateMaterial(_eyeToPoint,_normal);\n\n // Un roll the loop of individual ligths to calculate\n ${calculateLights}\n\n // Final light intensity calculation\n vec4 color = vec4(vec3(0.), _color.a); // start with vertex color alpha\n\n #ifdef TANGRAM_MATERIAL_EMISSION\n color.rgb = material.emission.rgb;\n color.a *= material.emission.a;\n #endif\n\n #ifdef TANGRAM_MATERIAL_AMBIENT\n color.rgb += light_accumulator_ambient.rgb * _color.rgb * material.ambient.rgb;\n color.a *= material.ambient.a;\n #else\n #ifdef TANGRAM_MATERIAL_DIFFUSE\n color.rgb += light_accumulator_ambient.rgb * _color.rgb * material.diffuse.rgb;\n #endif\n #endif\n\n #ifdef TANGRAM_MATERIAL_DIFFUSE\n color.rgb += light_accumulator_diffuse.rgb * _color.rgb * material.diffuse.rgb;\n color.a *= material.diffuse.a;\n #endif\n\n #ifdef TANGRAM_MATERIAL_SPECULAR\n color.rgb += light_accumulator_specular.rgb * material.specular.rgb;\n color.a *= material.specular.a;\n #endif\n\n // Clamp final color\n color = clamp(color, 0.0, 1.0);\n\n return color;\n }`;\n\n ShaderProgram.addBlock(Light.block, calculateFunction);\n }\n\n // Common instance definition\n inject () {\n let instance = `\n uniform ${this.struct_name} u_${this.name};\n ${this.struct_name} ${this.name};\n `;\n let assign = `\n ${this.name} = u_${this.name};\\n\n `;\n\n ShaderProgram.addBlock(Light.block, instance);\n ShaderProgram.addBlock('setup', assign);\n }\n\n // Update method called once per frame\n update () {\n }\n\n // Called once per frame per program (e.g. for main render pass, then for each additional\n // pass for feature selection, etc.)\n setupProgram (_program) {\n // Three common light properties\n _program.uniform('3fv', `u_${this.name}.ambient`, this.ambient);\n _program.uniform('3fv', `u_${this.name}.diffuse`, this.diffuse);\n _program.uniform('3fv', `u_${this.name}.specular`, this.specular);\n }\n\n}\n\nLight.types = {}; // references to subclasses by short name\nLight.block = 'lighting'; // shader block name\nLight.enabled = true; // lighting can be globally enabled/disabled\n\n\n// Light subclasses\nclass AmbientLight extends Light {\n\n constructor(view, config) {\n super(view, config);\n this.type = 'ambient';\n this.struct_name = 'AmbientLight';\n }\n\n // Inject struct and calculate function\n static inject() {\n ShaderProgram.addBlock(Light.block, shaderSrc_ambientLight);\n }\n\n setupProgram (_program) {\n _program.uniform('3fv', `u_${this.name}.ambient`, this.ambient);\n }\n\n}\nLight.types['ambient'] = AmbientLight;\n\nclass DirectionalLight extends Light {\n\n constructor(view, config) {\n super(view, config);\n this.type = 'directional';\n this.struct_name = 'DirectionalLight';\n\n if (config.direction) {\n this._direction = config.direction;\n }\n else {\n // Default directional light maintains full intensity on ground, with basic extrusion shading\n let theta = 135; // angle of light in xy plane (rotated around z axis)\n let scale = Math.sin(Math.PI*60/180); // scaling factor to keep total directional intensity to 0.5\n this._direction = [\n Math.cos(Math.PI*theta/180) * scale,\n Math.sin(Math.PI*theta/180) * scale,\n -0.5\n ];\n\n if (config.ambient == null) {\n this.ambient = GLSL.expandVec3(0.5);\n }\n }\n this.direction = this._direction.map(parseFloat);\n }\n\n get direction () {\n return this._direction;\n }\n\n set direction (v) {\n this._direction = Vector.normalize(v);\n }\n\n // Inject struct and calculate function\n static inject() {\n ShaderProgram.addBlock(Light.block, shaderSrc_directionalLight);\n }\n\n setupProgram (_program) {\n super.setupProgram(_program);\n _program.uniform('3fv', `u_${this.name}.direction`, this.direction);\n }\n\n}\nLight.types['directional'] = DirectionalLight;\n\n\nclass PointLight extends Light {\n\n constructor (view, config) {\n super(view, config);\n this.type = 'point';\n this.struct_name = 'PointLight';\n\n this.position = config.position || [0, 0, '100px'];\n this.position_eye = []; // position in eyespace\n this.origin = config.origin || 'ground';\n this.attenuation = !isNaN(parseFloat(config.attenuation)) ? parseFloat(config.attenuation) : 0;\n\n if (config.radius) {\n if (Array.isArray(config.radius) && config.radius.length === 2) {\n this.radius = config.radius;\n }\n else {\n this.radius = [null, config.radius];\n }\n }\n else {\n this.radius = null;\n }\n }\n\n // Inject struct and calculate function\n static inject () {\n ShaderProgram.addBlock(Light.block, shaderSrc_pointLight);\n }\n\n // Inject isntance-specific settings\n inject() {\n super.inject();\n\n ShaderProgram.defines['TANGRAM_POINTLIGHT_ATTENUATION_EXPONENT'] = (this.attenuation !== 0);\n ShaderProgram.defines['TANGRAM_POINTLIGHT_ATTENUATION_INNER_RADIUS'] = (this.radius != null && this.radius[0] != null);\n ShaderProgram.defines['TANGRAM_POINTLIGHT_ATTENUATION_OUTER_RADIUS'] = (this.radius != null);\n }\n\n update () {\n this.updateEyePosition();\n }\n\n updateEyePosition () {\n if (this.origin === 'world') {\n // For world origin, format is: [longitude, latitude, meters (default) or pixels w/px units]\n\n // Move light's world position into camera space\n let [x, y] = Geo.latLngToMeters(this.position);\n this.position_eye[0] = x - this.view.camera.position_meters[0];\n this.position_eye[1] = y - this.view.camera.position_meters[1];\n\n this.position_eye[2] = StyleParser.convertUnits(this.position[2],\n { zoom: this.view.zoom, meters_per_pixel: Geo.metersPerPixel(this.view.zoom) });\n this.position_eye[2] = this.position_eye[2] - this.view.camera.position_meters[2];\n }\n else if (this.origin === 'ground' || this.origin === 'camera') {\n // For camera or ground origin, format is: [x, y, z] in meters (default) or pixels w/px units\n\n // Light is in camera space by default\n this.position_eye = StyleParser.convertUnits(this.position,\n { zoom: this.view.zoom, meters_per_pixel: Geo.metersPerPixel(this.view.zoom) });\n\n if (this.origin === 'ground') {\n // Leave light's xy in camera space, but z needs to be moved relative to ground plane\n this.position_eye[2] = this.position_eye[2] - this.view.camera.position_meters[2];\n }\n }\n this.position_eye[3] = 1;\n }\n\n setupProgram (_program) {\n super.setupProgram(_program);\n\n _program.uniform('4fv', `u_${this.name}.position`, this.position_eye);\n\n if(ShaderProgram.defines['TANGRAM_POINTLIGHT_ATTENUATION_EXPONENT']) {\n _program.uniform('1f', `u_${this.name}.attenuationExponent`, this.attenuation);\n }\n\n if(ShaderProgram.defines['TANGRAM_POINTLIGHT_ATTENUATION_INNER_RADIUS']) {\n _program.uniform('1f', `u_${this.name}.innerRadius`,\n StyleParser.convertUnits(this.radius[0],\n { zoom: this.view.zoom, meters_per_pixel: Geo.metersPerPixel(this.view.zoom) }));\n }\n\n if(ShaderProgram.defines['TANGRAM_POINTLIGHT_ATTENUATION_OUTER_RADIUS']) {\n _program.uniform('1f', `u_${this.name}.outerRadius`,\n StyleParser.convertUnits(this.radius[1],\n { zoom: this.view.zoom, meters_per_pixel: Geo.metersPerPixel(this.view.zoom) }));\n }\n }\n}\nLight.types['point'] = PointLight;\n\n\nclass SpotLight extends PointLight {\n\n constructor (view, config) {\n super(view, config);\n this.type = 'spotlight';\n this.struct_name = 'SpotLight';\n\n this.direction = this._direction = (config.direction || [0, 0, -1]).map(parseFloat); // [x, y, z]\n this.exponent = config.exponent ? parseFloat(config.exponent) : 0.2;\n this.angle = config.angle ? parseFloat(config.angle) : 20;\n }\n\n get direction () {\n return this._direction;\n }\n\n set direction (v) {\n this._direction = Vector.normalize(v);\n }\n\n // Inject struct and calculate function\n static inject () {\n ShaderProgram.addBlock(Light.block, shaderSrc_spotLight);\n }\n\n setupProgram (_program) {\n super.setupProgram(_program);\n\n _program.uniform('3fv', `u_${this.name}.direction`, this.direction);\n _program.uniform('1f', `u_${this.name}.spotCosCutoff`, Math.cos(this.angle * 3.14159 / 180));\n _program.uniform('1f', `u_${this.name}.spotExponent`, this.exponent);\n }\n\n}\nLight.types['spotlight'] = SpotLight;\n", "import GLSL from './gl/glsl';\nimport {StyleParser} from './styles/style_parser';\n\nlet fs = require('fs');\nconst shaderSrc_material = fs.readFileSync(__dirname + '/gl/shaders/material.glsl', 'utf8');\n\nconst material_props = ['emission', 'ambient', 'diffuse', 'specular'];\n\nexport default class Material {\n constructor (config) {\n\n config = config || {};\n\n // These properties all have the same defaults, so they can be set in bulk\n material_props.forEach(prop => {\n const value = config[prop];\n if (value != null) {\n if (value.texture) {\n this[prop] = {\n texture: value.texture,\n mapping: value.mapping || 'spheremap',\n scale: GLSL.expandVec3(value.scale != null ? value.scale : 1),\n amount: GLSL.expandVec4(value.amount != null ? value.amount : 1)\n };\n }\n else if (typeof value === 'number' || Array.isArray(value)) {\n this[prop] = { amount: GLSL.expandVec4(value) };\n }\n else if (typeof value === 'string') {\n this[prop] = { amount: StyleParser.parseColor(value) };\n }\n else {\n this[prop] = value;\n }\n }\n });\n\n // Extra specular props\n if (this.specular) {\n this.specular.shininess = config.shininess ? parseFloat(config.shininess) : 0.2;\n }\n\n // Normal mapping\n if (config.normal != null) {\n this.normal = {\n texture: config.normal.texture,\n mapping: config.normal.mapping || 'triplanar',\n scale: GLSL.expandVec3(config.normal.scale != null ? config.normal.scale : 1),\n amount: config.normal.amount != null ? config.normal.amount : 1\n };\n }\n }\n\n // Determine if a material config block has sufficient properties to create a material\n static isValid (config) {\n if (config == null) {\n return false;\n }\n\n if (config.emission == null &&\n config.ambient == null &&\n config.diffuse == null &&\n config.specular == null) {\n return false;\n }\n\n return true;\n }\n\n inject (style) {\n // For each property, sets defines to configure texture mapping, with a pattern like:\n // TANGRAM_MATERIAL_DIFFUSE, TANGRAM_MATERIAL_DIFFUSE_TEXTURE, TANGRAM_MATERIAL_DIFFUSE_TEXTURE_SPHEREMAP\n // Also sets flags to keep track of each unique mapping type being used, e.g.:\n // TANGRAM_MATERIAL_TEXTURE_SPHEREMAP\n // Enables texture coordinates if needed and not already on\n material_props.forEach(prop => {\n let def = `TANGRAM_MATERIAL_${prop.toUpperCase()}`;\n let texdef = def + '_TEXTURE';\n style.defines[def] = (this[prop] != null);\n if (this[prop] && this[prop].texture) {\n style.defines[texdef] = true;\n style.defines[texdef + '_' + this[prop].mapping.toUpperCase()] = true;\n style.defines[`TANGRAM_MATERIAL_TEXTURE_${this[prop].mapping.toUpperCase()}`] = true;\n style.texcoords = style.texcoords || (this[prop].mapping === 'uv');\n }\n });\n\n // Normal mapping\n // As anove, sets flags to keep track of each unique mapping type being used, e.g.:\n // TANGRAM_MATERIAL_TEXTURE_SPHEREMAP\n if (this.normal && this.normal.texture) {\n style.defines['TANGRAM_MATERIAL_NORMAL_TEXTURE'] = true;\n style.defines['TANGRAM_MATERIAL_NORMAL_TEXTURE_' + this.normal.mapping.toUpperCase()] = true;\n style.defines[`TANGRAM_MATERIAL_TEXTURE_${this.normal.mapping.toUpperCase()}`] = true;\n style.texcoords = style.texcoords || (this.normal.mapping === 'uv');\n }\n\n style.replaceShaderBlock(Material.block, shaderSrc_material, 'Material');\n style.addShaderBlock('setup', '\\nmaterial = u_material;\\n', 'Material');\n }\n\n setupProgram (_program) {\n // For each property, sets uniforms in the pattern:\n // u_material.diffuse, u_material.diffuseScale u_material_diffuse_texture\n material_props.forEach(prop => {\n if (this[prop]) {\n if (this[prop].texture) {\n _program.setTextureUniform(`u_material_${prop}_texture`, this[prop].texture);\n _program.uniform('3fv', `u_material.${prop}Scale`, this[prop].scale);\n _program.uniform('4fv', `u_material.${prop}`, this[prop].amount);\n } else if (this[prop].amount) {\n _program.uniform('4fv', `u_material.${prop}`, this[prop].amount);\n }\n }\n });\n\n // Extra specular props\n if (this.specular) {\n _program.uniform('1f', 'u_material.shininess', this.specular.shininess);\n }\n\n // Normal mapping\n if (this.normal && this.normal.texture) {\n _program.setTextureUniform('u_material_normal_texture', this.normal.texture);\n _program.uniform('3fv', 'u_material.normalScale', this.normal.scale);\n _program.uniform('1f', 'u_material.normalAmount', this.normal.amount);\n }\n }\n}\n\nMaterial.block = 'material';\n", "/*jshint worker: true*/\n\nimport './utils/polyfills';\n\n// The leaflet layer plugin is currently the primary public API\nimport {leafletLayer} from './leaflet_layer';\n\n// The scene worker is only activated when a worker thread is instantiated, but must always be loaded\nimport Scene from './scene';\nimport {SceneWorker} from './scene_worker';\n\n// Additional modules are exposed for debugging\nimport version from './utils/version';\nimport log from './utils/log';\nimport Thread from './utils/thread';\nimport Utils from './utils/utils';\nimport Geo from './geo';\nimport Vector from './vector';\nimport DataSource from './sources/data_source';\nimport './sources/geojson';\nimport './sources/topojson';\nimport './sources/mvt';\nimport './sources/raster';\nimport GLSL from './gl/glsl';\nimport ShaderProgram from './gl/shader_program';\nimport VertexData from './gl/vertex_data';\nimport Texture from './gl/texture';\nimport Material from './material';\nimport Light from './light';\nimport WorkerBroker from './utils/worker_broker';\nimport {layerCache} from './styles/layer';\nimport {StyleManager} from './styles/style_manager';\nimport {StyleParser} from './styles/style_parser';\nimport Collision from './labels/collision';\nimport FeatureSelection from './selection';\nimport CanvasText from './styles/text/canvas_text';\nimport debugSettings from './utils/debug_settings';\n\nimport yaml from 'js-yaml';\nimport JSZip from 'jszip';\n\n// Make some modules accessible for debugging\nvar debug = {\n log,\n yaml,\n Thread,\n Utils,\n Geo,\n Vector,\n DataSource,\n GLSL,\n ShaderProgram,\n VertexData,\n Texture,\n Material,\n Light,\n Scene,\n SceneWorker,\n WorkerBroker,\n layerCache,\n StyleManager,\n StyleParser,\n Collision,\n FeatureSelection,\n CanvasText,\n debugSettings\n};\n\nif (Thread.is_main) {\n Utils.requestAnimationFramePolyfill();\n\n // Attach Promise polyfill to window\n // Allows FontFaceObserver to use polyfill (without needing to include its own duplicate polyfill)\n if (window.Promise === undefined) {\n window.Promise = Promise;\n JSZip.external.Promise = Promise;\n }\n}\n\nmodule.exports = {\n leafletLayer,\n debug,\n version\n};\n", - "import log from './utils/log';\nimport Utils from './utils/utils';\nimport debugSettings from './utils/debug_settings';\nimport * as URLs from './utils/urls';\nimport WorkerBroker from './utils/worker_broker';\nimport subscribeMixin from './utils/subscribe';\nimport Context from './gl/context';\nimport Texture from './gl/texture';\nimport ShaderProgram from './gl/shader_program';\nimport VertexArrayObject from './gl/vao';\nimport {StyleManager} from './styles/style_manager';\nimport {Style} from './styles/style';\nimport {StyleParser} from './styles/style_parser';\nimport SceneLoader from './scene_loader';\nimport View from './view';\nimport Light from './light';\nimport Tile from './tile';\nimport TileManager from './tile_manager';\nimport DataSource from './sources/data_source';\nimport FeatureSelection from './selection';\nimport RenderStateManager from './gl/render_state';\nimport CanvasText from './styles/text/canvas_text';\nimport FontManager from './styles/text/font_manager';\nimport MediaCapture from './utils/media_capture';\n\n// Load scene definition: pass an object directly, or a URL as string to load remotely\nexport default class Scene {\n\n constructor(config_source, options) {\n options = options || {};\n subscribeMixin(this);\n\n this.id = Scene.id++;\n this.initialized = false;\n this.initializing = null; // will be a promise that resolves when scene is loaded\n this.sources = {};\n\n this.view = new View(this, options);\n this.tile_manager = new TileManager({ scene: this, view: this.view });\n this.num_workers = options.numWorkers || 2;\n if (options.disableVertexArrayObjects === true) {\n VertexArrayObject.disabled = true;\n }\n\n Utils.use_high_density_display = options.highDensityDisplay !== undefined ? options.highDensityDisplay : true;\n Utils.updateDevicePixelRatio();\n\n this.config = null;\n this.config_source = config_source;\n this.config_bundle = null;\n this.last_valid_config_source = null;\n\n this.styles = null;\n this.style_manager = new StyleManager();\n\n this.building = null; // tracks current scene building state (tiles being built, etc.)\n this.dirty = true; // request a redraw\n this.animated = false; // request redraw every frame\n\n if (options.preUpdate){\n // optional pre-render loop hook\n this.subscribe({'preUpdate': options.preUpdate});\n }\n\n if (options.postUpdate){\n // optional post-render loop hook\n this.subscribe({'postUpdate': options.postUpdate});\n }\n\n this.render_loop = !options.disableRenderLoop; // disable render loop - app will have to manually call Scene.render() per frame\n this.render_loop_active = false;\n this.render_loop_stop = false;\n this.render_count = 0;\n this.last_render_count = 0;\n this.render_count_changed = false;\n this.frame = 0;\n this.last_main_render = -1; // frame counter for last main render pass\n this.last_selection_render = -1; // frame counter for last selection render pass\n this.media_capture = new MediaCapture();\n this.selection = null;\n this.introspection = false;\n this.resetTime();\n\n this.container = options.container;\n this.canvas = null;\n this.contextOptions = options.webGLContextOptions;\n\n this.lights = null;\n this.background = null;\n\n this.createListeners();\n this.updating = 0;\n this.generation = Scene.generation; // an id that is incremented each time the scene config is invalidated\n this.last_complete_generation = Scene.generation; // last generation id with a complete view\n this.setupDebug();\n\n this.log_level = options.logLevel || 'warn';\n log.setLevel(this.log_level);\n log.reset();\n }\n\n static create (config, options = {}) {\n return new Scene(config, options);\n }\n\n // Load scene (or reload existing scene if no new source specified)\n // Options:\n // `config_path`: base URL against which roo scene resources should be resolved (useful for Play) (default nulll)\n // `blocking`: should rendering block on scene load completion (default true)\n load(config_source = null, options = {}) {\n if (this.initializing) {\n return this.initializing;\n }\n log.reset();\n\n this.updating++;\n this.initialized = false;\n this.initial_build_time = null;\n\n // Backwards compatibilty for passing `config_path` string as second argument\n // (since transitioned to using options argument to accept more parameters)\n options = (typeof options === 'string') ? { config_path: options } : options;\n let config_path = options.config_path;\n\n // Should rendering block on load (not desirable for initial load, often desired for live style-switching)\n options.blocking = (options.blocking !== undefined) ? options.blocking : true;\n\n // Load scene definition (sources, styles, etc.), then create styles & workers\n this.createCanvas();\n this.initializing = this.loadScene(config_source, config_path)\n .then(() => this.createWorkers())\n .then(() => {\n this.resetFeatureSelection();\n\n // Scene loaded from a JS object, or modified by a `load` event, may contain compiled JS functions\n // which need to be serialized, while one loaded only from a URL does not.\n const serialize_funcs = ((typeof this.config_source === 'object') || this.hasSubscribersFor('load'));\n\n const updating = this.updateConfig({ serialize_funcs, load_event: true, fade_in: true });\n if (options.blocking === true) {\n return updating;\n }\n }).then(() => {\n this.updating--;\n this.initializing = null;\n this.initialized = true;\n this.last_valid_config_source = this.config_source;\n this.last_valid_config_path = this.config_path;\n\n if (this.render_loop !== false) {\n this.setupRenderLoop();\n }\n this.requestRedraw();\n }).catch(error => {\n this.initializing = null;\n this.updating = 0;\n\n // Report and revert to last valid config if available\n let type, message;\n if (error.name === 'YAMLException') {\n type = 'yaml';\n message = 'Error parsing scene YAML';\n }\n else {\n // TODO: more error types\n message = 'Error initializing scene';\n }\n this.trigger('error', { type, message, error, url: this.config_source });\n\n message = `Scene.load() failed to load ${this.config_source}: ${error.message}`;\n if (this.last_valid_config_source) {\n log('warn', message, error);\n log('info', `Scene.load() reverting to last valid configuration`);\n return this.load(this.last_valid_config_source, this.last_valid_config_path);\n }\n log('error', message, error);\n throw error;\n });\n\n return this.initializing;\n }\n\n destroy() {\n this.initialized = false;\n this.render_loop_stop = true; // schedule render loop to stop\n\n this.destroyListeners();\n\n if (this.canvas && this.canvas.parentNode) {\n this.canvas.parentNode.removeChild(this.canvas);\n this.canvas = null;\n }\n this.container = null;\n\n if (this.selection) {\n this.selection.destroy();\n }\n\n if (this.gl) {\n Texture.destroy(this.gl);\n this.style_manager.destroy(this.gl);\n this.styles = {};\n\n ShaderProgram.reset();\n\n // Force context loss\n let ext = this.gl.getExtension('WEBGL_lose_context');\n if (ext) {\n ext.loseContext();\n }\n\n this.gl = null;\n }\n\n this.sources = {};\n\n this.destroyWorkers();\n this.tile_manager.destroy();\n this.tile_manager = null;\n log.reset();\n }\n\n createCanvas() {\n if (this.canvas) {\n return;\n }\n\n this.container = this.container || document.body;\n this.canvas = document.createElement('canvas');\n this.canvas.style.position = 'absolute';\n this.canvas.style.top = 0;\n this.canvas.style.left = 0;\n\n // Force tangram canvas underneath all leaflet layers, and set background to transparent\n this.container.style.backgroundColor = 'transparent';\n this.container.appendChild(this.canvas);\n\n try {\n this.gl = Context.getContext(this.canvas, Object.assign({\n alpha: true, premultipliedAlpha: true,\n device_pixel_ratio: Utils.device_pixel_ratio\n }, this.contextOptions));\n }\n catch(e) {\n throw new Error(\n \"Couldn't create WebGL context. \" +\n \"Your browser may not support WebGL, or it's turned off? \" +\n \"Visit http://webglreport.com/ for more info.\"\n );\n }\n\n this.resizeMap(this.container.clientWidth, this.container.clientHeight);\n VertexArrayObject.init(this.gl);\n this.render_states = new RenderStateManager(this.gl);\n this.media_capture.setCanvas(this.canvas);\n }\n\n // Get the URL to load the web worker from\n getWorkerUrl() {\n let worker_url;\n /* jshint -W117 */\n // ignore uninitialized worker src variable (defined in parent scope)\n if (typeof __worker_src__ !== \"undefined\"){\n let source = '(' + __worker_src__ + ')()';\n if (__worker_src_origin__) {\n let origin = __worker_src_origin__.slice(0, __worker_src_origin__.lastIndexOf('/')+1);\n source += '\\n//#' + ' sourceMappingURL=' + origin + __worker_src_map__;\n }\n worker_url = URLs.createObjectURL(new Blob([source], { type: 'application/javascript' }));\n }\n /* jshint +W117 */\n\n if (!worker_url) {\n throw new Error(\"Couldn't find internal Tangram source variable (may indicate the library did not build correctly)\");\n }\n\n // Import custom data source scripts alongside core library\n // NOTE: workaround for issue where large libraries intermittently fail to load in web workers,\n // when multiple importScripts() calls are used. Loading all scripts (including Tangram itself)\n // in one call at at worker creation time has not exhibited the same issue.\n let urls = [...this.data_source_scripts];\n urls.push(worker_url); // load Tangram *last* (has been more reliable, though reason unknown)\n let body = `importScripts(${urls.map(url => `'${url}'`).join(',')});`;\n return URLs.createObjectURL(new Blob([body], { type: 'application/javascript' }));\n }\n\n // Update list of any custom data source scripts (if any)\n updateDataSourceScripts () {\n let prev_scripts = [...(this.data_source_scripts||[])]; // save list of previously loaded scripts\n let scripts = Object.keys(this.config.sources).map(s => this.config.sources[s].scripts).filter(x => x);\n if (scripts.length > 0) {\n log('debug', 'loading custom data source scripts in worker:', scripts);\n }\n this.data_source_scripts = [].concat(...scripts).sort();\n\n // Scripts changed?\n return !(this.data_source_scripts.length === prev_scripts.length &&\n this.data_source_scripts.every((v, i) => v === prev_scripts[i]));\n }\n\n // Web workers handle heavy duty tile construction: networking, geometry processing, etc.\n createWorkers() {\n // Reset old workers (if any) if we need to re-instantiate with new external scripts\n if (this.updateDataSourceScripts()) {\n this.destroyWorkers();\n }\n\n if (!this.workers) {\n return this.makeWorkers(this.getWorkerUrl());\n }\n return Promise.resolve();\n }\n\n // Instantiate workers from URL, init event handlers\n makeWorkers(url) {\n var queue = [];\n\n this.workers = [];\n for (var id=0; id < this.num_workers; id++) {\n var worker = new Worker(url);\n this.workers[id] = worker;\n\n WorkerBroker.addWorker(worker);\n\n log('debug', `Scene.makeWorkers: initializing worker ${id}`);\n let _id = id;\n queue.push(WorkerBroker.postMessage(worker, 'self.init', this.id, id, this.num_workers, this.log_level, Utils.device_pixel_ratio).then(\n (id) => {\n log('debug', `Scene.makeWorkers: initialized worker ${id}`);\n return id;\n },\n (error) => {\n log('error', `Scene.makeWorkers: failed to initialize worker ${_id}:`, error);\n return Promise.reject(error);\n })\n );\n }\n\n this.next_worker = 0;\n return Promise.all(queue).then(() => {\n log.setWorkers(this.workers);\n\n // Let VertexElements know if 32 bit indices for element arrays are available\n let Uint32_flag = this.gl.getExtension(\"OES_element_index_uint\") ? true : false;\n WorkerBroker.postMessage(this.workers, 'VertexElements.setUint32Flag', Uint32_flag);\n\n // Free memory after worker initialization\n URLs.revokeObjectURL(url);\n });\n }\n\n destroyWorkers() {\n if (Array.isArray(this.workers)) {\n log.setWorkers(null);\n this.workers.forEach((worker) => {\n worker.terminate();\n });\n this.workers = null;\n }\n }\n\n // Assign tile to worker thread based on data source\n getWorkerForDataSource(source) {\n let worker;\n\n if (source.tiled) {\n // Round robin tiled sources across all workers\n worker = this.workers[this.next_worker];\n this.next_worker = (this.next_worker + 1) % this.workers.length;\n }\n else {\n // Pin all tiles from each non-tiled source to a single worker\n // Prevents data for these sources from being loaded more than once\n worker = this.workers[source.id % this.workers.length];\n }\n\n return worker;\n }\n\n // Scene is ready for rendering\n ready() {\n if (!this.view.ready() || Object.keys(this.sources).length === 0) {\n return false;\n }\n return true;\n }\n\n // Resize the map when device pixel ratio changes, e.g. when switching between displays\n updateDevicePixelRatio () {\n if (Utils.updateDevicePixelRatio()) {\n WorkerBroker.postMessage(this.workers, 'self.updateDevicePixelRatio', Utils.device_pixel_ratio)\n .then(() => this.rebuild())\n .then(() => this.resizeMap(this.view.size.css.width, this.view.size.css.height));\n }\n }\n\n resizeMap(width, height) {\n if (width === 0 && height === 0) {\n return;\n }\n\n this.dirty = true;\n this.view.setViewportSize(width, height);\n if (this.gl) {\n Context.resize(this.gl, width, height, Utils.device_pixel_ratio);\n }\n }\n\n // Request scene be redrawn at next animation loop\n requestRedraw() {\n this.dirty = true;\n }\n\n // Redraw scene immediately - don't wait for animation loop\n // Use sparingly, but for cases where you need the closest possible sync with other UI elements,\n // such as other, non-WebGL map layers (e.g. Leaflet raster layers, markers, etc.)\n immediateRedraw() {\n this.dirty = true;\n this.update();\n }\n\n renderLoop () {\n this.render_loop_active = true; // only let the render loop instantiate once\n\n if (this.initialized) {\n // Render the scene\n this.update();\n }\n\n // Request the next frame if not scheduled to stop\n if (!this.render_loop_stop) {\n window.requestAnimationFrame(this.renderLoop.bind(this));\n }\n else {\n this.render_loop_stop = false;\n this.render_loop_active = false;\n }\n }\n\n // Setup the render loop\n setupRenderLoop() {\n if (!this.render_loop_active) {\n setTimeout(() => { this.renderLoop(); }, 0); // delay start by one tick\n }\n }\n\n update() {\n // Determine which passes (if any) to render\n let main = this.dirty;\n let selection = this.selection ? this.selection.hasPendingRequests() : false;\n var will_render = !(\n (main === false && selection === false) ||\n this.initialized === false ||\n this.updating > 0 ||\n this.ready() === false\n );\n\n // Pre-render loop hook\n this.trigger('preUpdate', will_render);\n\n // Bail if no need to render\n if (!will_render) {\n return false;\n }\n this.dirty = false; // subclasses can set this back to true when animation is needed\n\n // Render the scene\n this.updateDevicePixelRatio();\n this.render({ main, selection });\n this.updateViewComplete(); // fires event when rendered tile set or style changes\n this.media_capture.completeScreenshot(); // completes screenshot capture if requested\n\n // Post-render loop hook\n this.trigger('postUpdate', will_render);\n\n // Redraw every frame if animating\n if (this.animated === true || this.view.isAnimating()) {\n this.dirty = true;\n }\n\n this.frame++;\n log('trace', 'Scene.render()');\n return true;\n }\n\n // Accepts flags indicating which render passes should be made\n render({ main, selection }) {\n var gl = this.gl;\n\n // Update styles, camera, lights\n this.view.update();\n Object.keys(this.lights).forEach(i => this.lights[i].update());\n\n // Render main pass\n if (main) {\n this.render_count = this.renderPass();\n this.last_main_render = this.frame;\n }\n\n // Render selection pass (if needed)\n if (selection) {\n if (this.view.panning || this.view.zooming) {\n this.selection.clearPendingRequests();\n return;\n }\n\n // Only re-render if selection buffer is out of date (relative to main render buffer)\n // and not locked (e.g. no tiles are actively building)\n if (!this.selection.locked && this.last_selection_render < this.last_main_render) {\n this.selection.bind(); // switch to FBO\n this.renderPass(\n 'selection_program', // render w/alternate program\n { allow_blend: false });\n\n // Reset to screen buffer\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n gl.viewport(0, 0, this.canvas.width, this.canvas.height);\n this.last_selection_render = this.frame;\n }\n\n this.selection.read(); // process any pending results from selection buffer\n }\n\n this.render_count_changed = false;\n if (this.render_count !== this.last_render_count) {\n this.render_count_changed = true;\n\n this.getFeatureSelectionMapSize().then(size => {\n if (size) { // returns undefined if previous request pending\n log('info', `Scene: rendered ${this.render_count} primitives (${size} features in selection map)`);\n }\n });\n }\n this.last_render_count = this.render_count;\n\n return true;\n }\n\n // Render all active styles, grouped by blend/depth type (opaque, overlay, etc.) and by program (style)\n // Called both for main render pass, and for secondary passes like selection buffer\n renderPass(program_key = 'program', { allow_blend } = {}) {\n // optionally force alpha off (e.g. for selection pass)\n allow_blend = (allow_blend == null) ? true : allow_blend;\n\n this.clearFrame({ clear_color: true, clear_depth: true });\n\n // Sort styles by blend order\n let styles = this.tile_manager.getActiveStyles().\n map(s => this.styles[s]).\n filter(s => s). // guard against missing styles, such as while loading a new scene\n sort(Style.blendOrderSort);\n\n // Render styles\n let count = 0; // how many primitives were rendered\n let last_blend;\n for (let s=0; s < styles.length; s++) {\n let style = styles[s];\n\n // Only update render state when blend mode changes\n if (style.blend !== last_blend) {\n let state = Object.assign({},\n Style.render_states[style.blend], // render state for blend mode\n { blend: (allow_blend && style.blend) } // enable/disable blending (e.g. no blend for selection)\n );\n this.setRenderState(state);\n }\n count += this.renderStyle(style.name, program_key);\n last_blend = style.blend;\n }\n\n return count;\n }\n\n renderStyle(style_name, program_key) {\n let style = this.styles[style_name];\n let first_for_style = true;\n let render_count = 0;\n let program;\n\n // Render tile GL geometries\n let renderable_tiles = this.tile_manager.getRenderableTiles();\n for (let t=0; t < renderable_tiles.length; t++) {\n let tile = renderable_tiles[t];\n\n if (tile.meshes[style_name] == null) {\n continue;\n }\n\n // Style-specific state\n // Only setup style if rendering for first time this frame\n // (lazy init, not all styles will be used in all screen views; some styles might be defined but never used)\n if (first_for_style === true) {\n first_for_style = false;\n program = this.setupStyle(style, program_key);\n if (!program) {\n return 0;\n }\n }\n\n // Skip proxy tiles if new tiles have finished loading this style\n if (!tile.shouldProxyForStyle(style_name)) {\n // log('trace', `Scene.renderStyle(): Skip proxy tile for style '${style_name}' `, tile, tile.proxy_for);\n continue;\n }\n\n // Tile-specific state\n this.view.setupTile(tile, program);\n\n // Render tile\n let mesh = tile.meshes[style_name];\n if (style.render(mesh)) {\n // Don't incur additional renders while viewport is moving\n if (!(this.view.panning || this.view.zooming)) {\n this.requestRedraw();\n }\n }\n render_count += mesh.geometry_count;\n }\n\n return render_count;\n }\n\n setupStyle(style, program_key) {\n // Get shader program from style, lazily compiling if necessary\n let program;\n try {\n program = style.getProgram(program_key);\n if (!program) {\n return;\n }\n }\n catch(error) {\n this.trigger('warning', {\n type: 'styles',\n message: `Error compiling style ${style.name}`,\n style,\n shader_errors: style.program && style.program.shader_errors\n });\n return;\n }\n\n program.use();\n style.setup();\n\n program.uniform('1f', 'u_time', this.animated ? (((+new Date()) - this.start_time) / 1000) : 0);\n this.view.setupProgram(program);\n for (let i in this.lights) {\n this.lights[i].setupProgram(program);\n }\n\n return program;\n }\n\n clearFrame({ clear_color, clear_depth } = {}) {\n if (!this.initialized) {\n return;\n }\n\n // Defaults\n clear_color = (clear_color === false) ? false : true; // default true\n clear_depth = (clear_depth === false) ? false : true; // default true\n\n // Set GL state\n this.render_states.depth_write.set({ depth_write: clear_depth });\n\n let gl = this.gl;\n if (clear_color || clear_depth) {\n let mask = (clear_color && gl.COLOR_BUFFER_BIT) | (clear_depth && gl.DEPTH_BUFFER_BIT);\n gl.clear(mask);\n }\n }\n\n setRenderState({ depth_test, depth_write, cull_face, blend } = {}) {\n if (!this.initialized) {\n return;\n }\n\n // Defaults\n // TODO: when we abstract out support for multiple render passes, these can be per-pass config options\n let render_states = this.render_states;\n depth_test = (depth_test === false) ? false : render_states.defaults.depth_test; // default true\n depth_write = (depth_write === false) ? false : render_states.defaults.depth_write; // default true\n cull_face = (cull_face === false) ? false : render_states.defaults.culling; // default true\n blend = (blend != null) ? blend : render_states.defaults.blending; // default false\n\n // Reset frame state\n let gl = this.gl;\n\n render_states.depth_test.set({ depth_test: depth_test });\n render_states.depth_write.set({ depth_write: depth_write });\n render_states.culling.set({ cull: cull_face, face: render_states.defaults.culling_face });\n\n // Blending of alpha channel is modified to account for WebGL alpha behavior, see:\n // http://webglfundamentals.org/webgl/lessons/webgl-and-alpha.html\n // http://stackoverflow.com/a/11533416\n if (blend) {\n // Opaque: all source, no destination\n if (blend === 'opaque') {\n render_states.blending.set({\n blend: false\n });\n }\n // Traditional alpha blending\n else if (blend === 'overlay' || blend === 'inlay') {\n render_states.blending.set({\n blend: true,\n src: gl.SRC_ALPHA, dst: gl.ONE_MINUS_SRC_ALPHA,\n src_alpha: gl.ONE, dst_alpha: gl.ONE_MINUS_SRC_ALPHA\n });\n }\n // Additive blending\n else if (blend === 'add') {\n render_states.blending.set({\n blend: true,\n src: gl.ONE, dst: gl.ONE\n });\n }\n // Multiplicative blending\n else if (blend === 'multiply') {\n render_states.blending.set({\n blend: true,\n src: gl.ZERO, dst: gl.SRC_COLOR\n });\n }\n }\n else {\n render_states.blending.set({ blend: false });\n }\n }\n\n // Request feature selection at given pixel. Runs async and returns results via a promise.\n getFeatureAt(pixel) {\n if (!this.initialized) {\n log('debug', \"Scene.getFeatureAt() called before scene was initialized\");\n return Promise.resolve();\n }\n\n // Point scaled to [0..1] range\n var point = {\n x: pixel.x * Utils.device_pixel_ratio / this.view.size.device.width,\n y: pixel.y * Utils.device_pixel_ratio / this.view.size.device.height\n };\n\n return this.selection.getFeatureAt(point).\n then(selection => Object.assign(selection, { pixel })).\n catch(error => Promise.resolve({ error }));\n }\n\n // Rebuild all tiles, without re-parsing the config or re-compiling styles\n // sync: boolean of whether to sync the config object to the worker\n // sources: optional array of data sources to selectively rebuild (by default all our rebuilt)\n rebuild({ sync = true, sources = null, serialize_funcs, profile = false, fade_in = false } = {}) {\n return new Promise((resolve, reject) => {\n // Skip rebuild if already in progress\n if (this.building) {\n // Queue up to one rebuild call at a time, only save last request\n if (this.building.queued && this.building.queued.reject) {\n // notify previous request that it did not complete\n log('debug', 'Scene.rebuild: request superceded by a newer call');\n this.building.queued.resolve(false); // false flag indicates rebuild request was superceded\n }\n\n // Save queued request\n let options = { sync, sources, serialize_funcs, profile, fade_in };\n this.building.queued = { resolve, reject, options };\n log('trace', `Scene.rebuild(): queuing request`);\n return;\n }\n\n // Track tile build state\n this.building = { resolve, reject };\n\n // Profiling\n if (profile) {\n this._profile('Scene.rebuild');\n }\n\n // Update config (in case JS objects were manipulated directly)\n if (sync) {\n this.syncConfigToWorker({ serialize_funcs });\n }\n this.resetFeatureSelection(sources);\n this.resetTime();\n\n // Rebuild visible tiles\n this.tile_manager.pruneToVisibleTiles();\n this.tile_manager.forEachTile(tile => {\n if (!sources || sources.indexOf(tile.source.name) > -1) {\n this.tile_manager.buildTile(tile, { fade_in });\n }\n });\n this.tile_manager.updateTilesForView(); // picks up additional tiles for any new/changed data sources\n this.tile_manager.checkBuildQueue(); // resolve immediately if no tiles to build\n }).then(() => {\n // Profiling\n if (profile) {\n this._profileEnd('Scene.rebuild');\n }\n });\n }\n\n // Tile manager finished building tiles\n // TODO move to tile manager\n tileManagerBuildDone() {\n if (this.building) {\n log('info', `Scene: build geometry finished`);\n if (this.building.resolve) {\n if (this.initial_build_time == null) {\n this.initial_build_time = (+new Date()) - this.start_time;\n log('debug', `Scene: initial build time: ${this.initial_build_time}`);\n }\n this.building.resolve(true);\n }\n\n // Another rebuild queued?\n var queued = this.building.queued;\n this.building = null;\n if (queued) {\n log('debug', `Scene: starting queued rebuild() request`);\n this.rebuild(queued.options).then(queued.resolve, queued.reject);\n }\n }\n }\n\n /**\n Load (or reload) the scene config\n @return {Promise}\n */\n loadScene(config_source = null, config_path = null) {\n this.config_source = config_source || this.config_source;\n this.config_globals_applied = [];\n\n if (typeof this.config_source === 'string') {\n this.config_path = URLs.pathForURL(config_path || this.config_source);\n }\n else {\n this.config_path = URLs.pathForURL(config_path);\n }\n\n return SceneLoader.loadScene(this.config_source, this.config_path).then(({config, bundle}) => {\n this.config = config;\n this.config_bundle = bundle;\n return this.config;\n });\n }\n\n // Add source to a scene, arguments `name` and `config` need to be provided:\n // - If the name doesn't match a sources it will create it\n // - the `config` obj follow the YAML scene spec, ex: ```{type: 'TopoJSON', url: \"//tile.mapzen.com/mapzen/vector/v1/all/{z}/{x}/{y}.topojson\"]}```\n // that looks like:\n //\n // scene.setDataSource(\"osm\", {type: 'TopoJSON', url: \"//tile.mapzen.com/mapzen/vector/v1/all/{z}/{x}/{y}.topojson\" });\n //\n // - also can be pass a ```data``` obj: ```{type: 'GeoJSON', data: JSObj ]}```\n //\n // var geojson_data = {};\n // ...\n // scene.setDataSource(\"dynamic_data\", {type: 'GeoJSON', data: geojson_data });\n //\n setDataSource (name, config) {\n if (!name || !config || !config.type || (!config.url && !config.data)) {\n log('error', \"No name provided or not a valid config:\", name, config);\n return;\n }\n\n let load = (this.config.sources[name] == null);\n let source = this.config.sources[name] = Object.assign({}, config);\n\n // Convert raw data into blob URL\n if (source.data && typeof source.data === 'object') {\n source.url = URLs.createObjectURL(new Blob([JSON.stringify(source.data)]));\n delete source.data;\n }\n\n // Resolve paths relative to root scene bundle\n SceneLoader.normalizeDataSource(source, this.config_bundle);\n\n if (load) {\n return this.updateConfig({ rebuild: { sources: [name] } });\n } else {\n return this.rebuild({ sources: [name] });\n }\n }\n\n createDataSources() {\n let reset = []; // sources to reset\n let prev_source_names = Object.keys(this.sources);\n let source_id = 0;\n\n for (var name in this.config.sources) {\n let source = this.config.sources[name];\n let prev_source = this.sources[name];\n\n try {\n let config = Object.assign({}, source, { name, id: source_id++ });\n this.sources[name] = DataSource.create(config, this.sources);\n if (!this.sources[name]) {\n throw {};\n }\n }\n catch(e) {\n delete this.sources[name];\n let message = `Could not create data source: ${e.message}`;\n log('warn', `Scene: ${message}`, source);\n this.trigger('warning', { type: 'sources', source, message });\n }\n\n // Data source changed?\n if (DataSource.changed(this.sources[name], prev_source)) {\n reset.push(name);\n }\n }\n\n // Sources that were removed\n prev_source_names.forEach(s => {\n if (!this.config.sources[s]) {\n delete this.sources[s]; // TODO: remove from workers too?\n reset.push(s);\n }\n });\n\n // Remove tiles from sources that have changed\n if (reset.length > 0) {\n this.tile_manager.removeTiles(tile => {\n return (reset.indexOf(tile.source.name) > -1);\n });\n }\n\n // Mark sources that will generate geometry tiles\n // (all except those that are only raster sources attached to other sources)\n for (let ln in this.config.layers) {\n let layer = this.config.layers[ln];\n if (layer.data && this.sources[layer.data.source]) {\n this.sources[layer.data.source].builds_geometry_tiles = true;\n }\n }\n }\n\n // Load all textures in the scene definition\n loadTextures() {\n return Texture.createFromObject(this.gl, this.config.textures).\n then(() => Texture.createDefault(this.gl)); // create a 'default' texture for placeholders\n }\n\n // Called (currently manually) after styles are updated in stylesheet\n updateStyles() {\n if (!this.initialized && !this.initializing) {\n throw new Error('Scene.updateStyles() called before scene was initialized');\n }\n\n // (Re)build styles from config\n this.styles = this.style_manager.build(this.config.styles);\n this.style_manager.initStyles(this);\n\n // Optionally set GL context (used when initializing or re-initializing GL resources)\n for (let style in this.styles) {\n this.styles[style].setGL(this.gl);\n }\n\n // Use explicitly set scene animation flag if defined, otherwise turn on animation if there are any animated styles\n this.animated =\n this.config.scene.animated !== undefined ?\n this.config.scene.animated :\n Object.keys(this.styles).some(s => this.styles[s].animated);\n\n this.dirty = true;\n }\n\n // Get active camera - for public API\n getActiveCamera() {\n return this.view.getActiveCamera();\n }\n\n // Set active camera - for public API\n setActiveCamera(name) {\n return this.view.setActiveCamera(name);\n }\n\n // Create lighting\n createLights() {\n this.lights = {};\n for (let i in this.config.lights) {\n if (!this.config.lights[i] || typeof this.config.lights[i] !== 'object') {\n continue;\n }\n let light = this.config.lights[i];\n light.name = i.replace('-', '_'); // light names are injected in shaders, can't have hyphens\n light.visible = (light.visible === false) ? false : true;\n if (light.visible) {\n this.lights[light.name] = Light.create(this.view, light);\n }\n }\n Light.inject(this.lights);\n }\n\n // Set background color\n setBackground() {\n let bg = this.config.scene.background;\n this.background = {};\n if (bg && bg.color) {\n this.background.color = StyleParser.parseColor(bg.color);\n }\n if (!this.background.color) {\n this.background.color = [0, 0, 0, 0]; // default background TODO: vary w/scene alpha\n }\n\n // if background is fully opaque, set canvas background to match\n if (this.background.color[3] === 1) {\n this.canvas.style.backgroundColor =\n `rgba(${this.background.color.map(c => Math.floor(c * 255)).join(', ')})`;\n }\n else {\n this.canvas.style.backgroundColor = 'transparent';\n }\n\n this.gl.clearColor(...this.background.color);\n }\n\n // Turn introspection mode on/off\n setIntrospection (val) {\n this.introspection = val || false;\n this.updating++;\n return this.updateConfig().then(() => this.updating--);\n }\n\n // Update scene config, and optionally rebuild geometry\n // rebuild can be boolean, or an object containing rebuild options to passthrough\n updateConfig({ load_event = false, rebuild = true, serialize_funcs, fade_in = false } = {}) {\n this.generation = ++Scene.generation;\n this.updating++;\n\n this.config = SceneLoader.applyGlobalProperties(this.config, this.config_globals_applied);\n this.trigger(load_event ? 'load' : 'update', { config: this.config });\n\n SceneLoader.hoistTextures(this.config); // move inline textures into global texture set\n this.style_manager.init();\n this.view.reset();\n this.createLights();\n this.createDataSources();\n this.loadTextures();\n this.setBackground();\n FontManager.loadFonts(this.config.fonts);\n\n // TODO: detect changes to styles? already (currently) need to recompile anyway when camera or lights change\n this.updateStyles();\n\n // Optionally rebuild geometry\n let done = rebuild ?\n this.rebuild(Object.assign({ serialize_funcs, fade_in }, typeof rebuild === 'object' && rebuild)) :\n this.syncConfigToWorker({ serialize_funcs }); // rebuild() also syncs config\n\n // Finish by updating bounds and re-rendering\n this.updating--;\n this.view.updateBounds();\n this.requestRedraw();\n\n return done;\n }\n\n // Serialize config and send to worker\n syncConfigToWorker({ serialize_funcs = true } = {}) {\n // Tell workers we're about to rebuild (so they can update styles, etc.)\n let config_serialized =\n serialize_funcs ? Utils.serializeWithFunctions(this.config) : JSON.stringify(this.config);\n return WorkerBroker.postMessage(this.workers, 'self.updateConfig', {\n config: config_serialized,\n generation: this.generation,\n introspection: this.introspection\n }, debugSettings);\n }\n\n // Listen to related objects\n createListeners () {\n this.listeners = {};\n\n this.listeners.view = {\n move: () => this.trigger('move')\n };\n this.view.subscribe(this.listeners.view);\n\n this.listeners.texture = {\n update: () => this.dirty = true,\n warning: (data) => this.trigger('warning', Object.assign({ type: 'textures' }, data))\n };\n Texture.subscribe(this.listeners.texture);\n\n this.listeners.scene_loader = {\n error: (data) => this.trigger('error', Object.assign({ type: 'scene' }, data))\n };\n SceneLoader.subscribe(this.listeners.scene_loader);\n }\n\n destroyListeners () {\n this.unsubscribeAll();\n this.view.unsubscribe(this.listeners.view);\n Texture.unsubscribe(this.listeners.texture);\n SceneLoader.unsubscribe(this.listeners.scene_loader);\n this.listeners = null;\n }\n\n resetFeatureSelection(sources = null) {\n if (!this.selection) {\n this.selection = new FeatureSelection(this.gl, this.workers, () => this.building);\n }\n else if (this.workers) {\n WorkerBroker.postMessage(this.workers, 'self.resetFeatureSelection', sources);\n }\n }\n\n // Gets the current feature selection map size across all workers. Returns a promise.\n getFeatureSelectionMapSize() {\n if (this.fetching_selection_map) {\n return Promise.resolve(); // return undefined if already pending\n }\n this.fetching_selection_map = true;\n\n return WorkerBroker.postMessage(this.workers, 'self.getFeatureSelectionMapSize')\n .then(sizes => {\n this.fetching_selection_map = false;\n return sizes.reduce((a, b) => a + b);\n });\n }\n\n // Reset internal clock, mostly useful for consistent experience when changing styles/debugging\n resetTime() {\n this.start_time = +new Date();\n }\n\n // Fires event when rendered tile set or style changes\n updateViewComplete () {\n if ((this.render_count_changed || this.generation !== this.last_complete_generation) &&\n !this.tile_manager.isLoadingVisibleTiles()) {\n this.last_complete_generation = this.generation;\n CanvasText.pruneTextCache();\n this.trigger('view_complete');\n }\n }\n\n resetViewComplete () {\n this.last_complete_generation = null;\n }\n\n // Take a screenshot\n // Asynchronous because we have to wait for next render to capture buffer\n // Returns a promise\n screenshot () {\n this.requestRedraw();\n return this.media_capture.screenshot();\n }\n\n startVideoCapture () {\n this.requestRedraw();\n return this.media_capture.startVideoCapture();\n }\n\n stopVideoCapture () {\n return this.media_capture.stopVideoCapture();\n }\n\n\n // Stats/debug/profiling methods\n\n // Profile helpers, issues a profile on main thread & all workers\n _profile(name) {\n console.profile(`main thread: ${name}`);\n WorkerBroker.postMessage(this.workers, 'self.profile', name);\n }\n\n _profileEnd(name) {\n console.profileEnd(`main thread: ${name}`);\n WorkerBroker.postMessage(this.workers, 'self.profileEnd', name);\n }\n\n // Debug config and functions\n setupDebug () {\n let scene = this;\n this.debug = {\n // Rebuild geometry a given # of times and print average, min, max timings\n timeRebuild (num = 1, options = {}) {\n let times = [];\n let cycle = () => {\n let start = +new Date();\n scene.rebuild(options).then(() => {\n times.push(+new Date() - start);\n\n if (times.length < num) {\n cycle();\n }\n else {\n let avg = ~~(times.reduce((a, b) => a + b) / times.length);\n log('info', `Profiled rebuild ${num} times: ${avg} avg (${Math.min(...times)} min, ${Math.max(...times)} max)`);\n }\n });\n };\n cycle();\n },\n\n // Return geometry counts of visible tiles, grouped by style name\n geometryCountByStyle () {\n let counts = {};\n scene.tile_manager.getRenderableTiles().forEach(tile => {\n for (let style in tile.meshes) {\n counts[style] = counts[style] || 0;\n counts[style] += tile.meshes[style].geometry_count;\n }\n });\n return counts;\n },\n\n geometryCountByBaseStyle () {\n let style_counts = scene.debug.geometryCountByStyle();\n let counts = {};\n for (let style in style_counts) {\n let base = scene.styles[style].baseStyle();\n counts[base] = counts[base] || 0;\n counts[base] += style_counts[style];\n }\n return counts;\n },\n\n geometrySizeByStyle () {\n let sizes = {};\n scene.tile_manager.getRenderableTiles().forEach(tile => {\n for (let style in tile.meshes) {\n sizes[style] = sizes[style] || 0;\n sizes[style] += tile.meshes[style].buffer_size;\n }\n });\n return sizes;\n },\n\n geometrySizeByBaseStyle () {\n let style_sizes = scene.debug.geometrySizeByStyle();\n let sizes = {};\n for (let style in style_sizes) {\n let base = scene.styles[style].baseStyle();\n sizes[base] = sizes[base] || 0;\n sizes[base] += style_sizes[style];\n }\n return sizes;\n },\n\n layerStats () {\n if (debugSettings.layer_stats) {\n return Tile.debugSumLayerStats(scene.tile_manager.getRenderableTiles());\n }\n else {\n log('warn', `Enable the 'layer_stats' debug setting to collect layer stats`);\n return {};\n }\n },\n\n renderableTilesCount () {\n return scene.tile_manager.getRenderableTiles().length;\n }\n };\n }\n\n}\n\nScene.id = 0; // unique id for a scene instance\nScene.generation = 0; // id that is incremented each time a scene config is re-parsed\n", + "import log from './utils/log';\nimport Utils from './utils/utils';\nimport debugSettings from './utils/debug_settings';\nimport * as URLs from './utils/urls';\nimport WorkerBroker from './utils/worker_broker';\nimport subscribeMixin from './utils/subscribe';\nimport Context from './gl/context';\nimport Texture from './gl/texture';\nimport ShaderProgram from './gl/shader_program';\nimport VertexArrayObject from './gl/vao';\nimport {StyleManager} from './styles/style_manager';\nimport {Style} from './styles/style';\nimport {StyleParser} from './styles/style_parser';\nimport SceneLoader from './scene_loader';\nimport View from './view';\nimport Light from './light';\nimport Tile from './tile';\nimport TileManager from './tile_manager';\nimport DataSource from './sources/data_source';\nimport FeatureSelection from './selection';\nimport RenderStateManager from './gl/render_state';\nimport CanvasText from './styles/text/canvas_text';\nimport FontManager from './styles/text/font_manager';\nimport MediaCapture from './utils/media_capture';\n\n// Load scene definition: pass an object directly, or a URL as string to load remotely\nexport default class Scene {\n\n constructor(config_source, options) {\n options = options || {};\n subscribeMixin(this);\n\n this.id = Scene.id++;\n this.initialized = false;\n this.initializing = null; // will be a promise that resolves when scene is loaded\n this.sources = {};\n\n this.view = new View(this, options);\n this.tile_manager = new TileManager({ scene: this, view: this.view });\n this.num_workers = options.numWorkers || 2;\n if (options.disableVertexArrayObjects === true) {\n VertexArrayObject.disabled = true;\n }\n\n Utils.use_high_density_display = options.highDensityDisplay !== undefined ? options.highDensityDisplay : true;\n Utils.updateDevicePixelRatio();\n\n this.config = null;\n this.config_source = config_source;\n this.config_bundle = null;\n this.last_valid_config_source = null;\n\n this.styles = null;\n this.style_manager = new StyleManager();\n\n this.building = null; // tracks current scene building state (tiles being built, etc.)\n this.dirty = true; // request a redraw\n this.animated = false; // request redraw every frame\n\n if (options.preUpdate){\n // optional pre-render loop hook\n this.subscribe({'preUpdate': options.preUpdate});\n }\n\n if (options.postUpdate){\n // optional post-render loop hook\n this.subscribe({'postUpdate': options.postUpdate});\n }\n\n this.render_loop = !options.disableRenderLoop; // disable render loop - app will have to manually call Scene.render() per frame\n this.render_loop_active = false;\n this.render_loop_stop = false;\n this.render_count = 0;\n this.last_render_count = 0;\n this.render_count_changed = false;\n this.frame = 0;\n this.last_main_render = -1; // frame counter for last main render pass\n this.last_selection_render = -1; // frame counter for last selection render pass\n this.media_capture = new MediaCapture();\n this.selection = null;\n this.introspection = false;\n this.resetTime();\n\n this.container = options.container;\n this.canvas = null;\n this.contextOptions = options.webGLContextOptions;\n\n this.lights = null;\n this.background = null;\n\n this.createListeners();\n this.updating = 0;\n this.generation = Scene.generation; // an id that is incremented each time the scene config is invalidated\n this.last_complete_generation = Scene.generation; // last generation id with a complete view\n this.setupDebug();\n\n this.log_level = options.logLevel || 'warn';\n log.setLevel(this.log_level);\n log.reset();\n }\n\n static create (config, options = {}) {\n return new Scene(config, options);\n }\n\n // Load scene (or reload existing scene if no new source specified)\n // Options:\n // `config_path`: base URL against which roo scene resources should be resolved (useful for Play) (default nulll)\n // `blocking`: should rendering block on scene load completion (default true)\n load(config_source = null, options = {}) {\n if (this.initializing) {\n return this.initializing;\n }\n log.reset();\n\n this.updating++;\n this.initialized = false;\n this.initial_build_time = null;\n\n // Backwards compatibilty for passing `config_path` string as second argument\n // (since transitioned to using options argument to accept more parameters)\n options = (typeof options === 'string') ? { config_path: options } : options;\n let config_path = options.config_path;\n\n // Should rendering block on load (not desirable for initial load, often desired for live style-switching)\n options.blocking = (options.blocking !== undefined) ? options.blocking : true;\n\n // Load scene definition (sources, styles, etc.), then create styles & workers\n this.createCanvas();\n this.initializing = this.loadScene(config_source, config_path)\n .then(() => this.createWorkers())\n .then(() => {\n this.resetFeatureSelection();\n\n // Scene loaded from a JS object, or modified by a `load` event, may contain compiled JS functions\n // which need to be serialized, while one loaded only from a URL does not.\n const serialize_funcs = ((typeof this.config_source === 'object') || this.hasSubscribersFor('load'));\n\n const updating = this.updateConfig({ serialize_funcs, normalize: false, load_event: true, fade_in: true });\n if (options.blocking === true) {\n return updating;\n }\n }).then(() => {\n this.updating--;\n this.initializing = null;\n this.initialized = true;\n this.last_valid_config_source = this.config_source;\n this.last_valid_config_path = this.config_path;\n\n if (this.render_loop !== false) {\n this.setupRenderLoop();\n }\n this.requestRedraw();\n }).catch(error => {\n this.initializing = null;\n this.updating = 0;\n\n // Report and revert to last valid config if available\n let type, message;\n if (error.name === 'YAMLException') {\n type = 'yaml';\n message = 'Error parsing scene YAML';\n }\n else {\n // TODO: more error types\n message = 'Error initializing scene';\n }\n this.trigger('error', { type, message, error, url: this.config_source });\n\n message = `Scene.load() failed to load ${this.config_source}: ${error.message}`;\n if (this.last_valid_config_source) {\n log('warn', message, error);\n log('info', `Scene.load() reverting to last valid configuration`);\n return this.load(this.last_valid_config_source, this.last_valid_config_path);\n }\n log('error', message, error);\n throw error;\n });\n\n return this.initializing;\n }\n\n destroy() {\n this.initialized = false;\n this.render_loop_stop = true; // schedule render loop to stop\n\n this.destroyListeners();\n\n if (this.canvas && this.canvas.parentNode) {\n this.canvas.parentNode.removeChild(this.canvas);\n this.canvas = null;\n }\n this.container = null;\n\n if (this.selection) {\n this.selection.destroy();\n }\n\n if (this.gl) {\n Texture.destroy(this.gl);\n this.style_manager.destroy(this.gl);\n this.styles = {};\n\n ShaderProgram.reset();\n\n // Force context loss\n let ext = this.gl.getExtension('WEBGL_lose_context');\n if (ext) {\n ext.loseContext();\n }\n\n this.gl = null;\n }\n\n this.sources = {};\n\n this.destroyWorkers();\n this.tile_manager.destroy();\n this.tile_manager = null;\n log.reset();\n }\n\n createCanvas() {\n if (this.canvas) {\n return;\n }\n\n this.container = this.container || document.body;\n this.canvas = document.createElement('canvas');\n this.canvas.style.position = 'absolute';\n this.canvas.style.top = 0;\n this.canvas.style.left = 0;\n\n // Force tangram canvas underneath all leaflet layers, and set background to transparent\n this.container.style.backgroundColor = 'transparent';\n this.container.appendChild(this.canvas);\n\n try {\n this.gl = Context.getContext(this.canvas, Object.assign({\n alpha: true, premultipliedAlpha: true,\n device_pixel_ratio: Utils.device_pixel_ratio\n }, this.contextOptions));\n }\n catch(e) {\n throw new Error(\n \"Couldn't create WebGL context. \" +\n \"Your browser may not support WebGL, or it's turned off? \" +\n \"Visit http://webglreport.com/ for more info.\"\n );\n }\n\n this.resizeMap(this.container.clientWidth, this.container.clientHeight);\n VertexArrayObject.init(this.gl);\n this.render_states = new RenderStateManager(this.gl);\n this.media_capture.setCanvas(this.canvas);\n }\n\n // Get the URL to load the web worker from\n getWorkerUrl() {\n let worker_url;\n /* jshint -W117 */\n // ignore uninitialized worker src variable (defined in parent scope)\n if (typeof __worker_src__ !== \"undefined\"){\n let source = '(' + __worker_src__ + ')()';\n if (__worker_src_origin__) {\n let origin = __worker_src_origin__.slice(0, __worker_src_origin__.lastIndexOf('/')+1);\n source += '\\n//#' + ' sourceMappingURL=' + origin + __worker_src_map__;\n }\n worker_url = URLs.createObjectURL(new Blob([source], { type: 'application/javascript' }));\n }\n /* jshint +W117 */\n\n if (!worker_url) {\n throw new Error(\"Couldn't find internal Tangram source variable (may indicate the library did not build correctly)\");\n }\n\n // Import custom data source scripts alongside core library\n // NOTE: workaround for issue where large libraries intermittently fail to load in web workers,\n // when multiple importScripts() calls are used. Loading all scripts (including Tangram itself)\n // in one call at at worker creation time has not exhibited the same issue.\n let urls = [...this.data_source_scripts];\n urls.push(worker_url); // load Tangram *last* (has been more reliable, though reason unknown)\n let body = `importScripts(${urls.map(url => `'${url}'`).join(',')});`;\n return URLs.createObjectURL(new Blob([body], { type: 'application/javascript' }));\n }\n\n // Update list of any custom data source scripts (if any)\n updateDataSourceScripts () {\n let prev_scripts = [...(this.data_source_scripts||[])]; // save list of previously loaded scripts\n let scripts = Object.keys(this.config.sources).map(s => this.config.sources[s].scripts).filter(x => x);\n if (scripts.length > 0) {\n log('debug', 'loading custom data source scripts in worker:', scripts);\n }\n this.data_source_scripts = [].concat(...scripts).sort();\n\n // Scripts changed?\n return !(this.data_source_scripts.length === prev_scripts.length &&\n this.data_source_scripts.every((v, i) => v === prev_scripts[i]));\n }\n\n // Web workers handle heavy duty tile construction: networking, geometry processing, etc.\n createWorkers() {\n // Reset old workers (if any) if we need to re-instantiate with new external scripts\n if (this.updateDataSourceScripts()) {\n this.destroyWorkers();\n }\n\n if (!this.workers) {\n return this.makeWorkers(this.getWorkerUrl());\n }\n return Promise.resolve();\n }\n\n // Instantiate workers from URL, init event handlers\n makeWorkers(url) {\n\n // Let VertexElements know if 32 bit indices for element arrays are available\n let has_element_index_uint = this.gl.getExtension(\"OES_element_index_uint\") ? true : false;\n\n let queue = [];\n this.workers = [];\n for (var id=0; id < this.num_workers; id++) {\n var worker = new Worker(url);\n this.workers[id] = worker;\n\n WorkerBroker.addWorker(worker);\n\n log('debug', `Scene.makeWorkers: initializing worker ${id}`);\n let _id = id;\n queue.push(WorkerBroker.postMessage(worker, 'self.init', this.id, id, this.num_workers, this.log_level, Utils.device_pixel_ratio, has_element_index_uint).then(\n (id) => {\n log('debug', `Scene.makeWorkers: initialized worker ${id}`);\n return id;\n },\n (error) => {\n log('error', `Scene.makeWorkers: failed to initialize worker ${_id}:`, error);\n return Promise.reject(error);\n })\n );\n }\n\n this.next_worker = 0;\n return Promise.all(queue).then(() => {\n log.setWorkers(this.workers);\n\n // Free memory after worker initialization\n URLs.revokeObjectURL(url);\n });\n }\n\n destroyWorkers() {\n if (Array.isArray(this.workers)) {\n log.setWorkers(null);\n this.workers.forEach((worker) => {\n worker.terminate();\n });\n this.workers = null;\n }\n }\n\n // Assign tile to worker thread based on data source\n getWorkerForDataSource(source) {\n let worker;\n\n if (source.tiled) {\n // Round robin tiled sources across all workers\n worker = this.workers[this.next_worker];\n this.next_worker = (this.next_worker + 1) % this.workers.length;\n }\n else {\n // Pin all tiles from each non-tiled source to a single worker\n // Prevents data for these sources from being loaded more than once\n worker = this.workers[source.id % this.workers.length];\n }\n\n return worker;\n }\n\n // Scene is ready for rendering\n ready() {\n if (!this.view.ready() || Object.keys(this.sources).length === 0) {\n return false;\n }\n return true;\n }\n\n // Resize the map when device pixel ratio changes, e.g. when switching between displays\n updateDevicePixelRatio () {\n if (Utils.updateDevicePixelRatio()) {\n WorkerBroker.postMessage(this.workers, 'self.updateDevicePixelRatio', Utils.device_pixel_ratio)\n .then(() => this.rebuild())\n .then(() => this.resizeMap(this.view.size.css.width, this.view.size.css.height));\n }\n }\n\n resizeMap(width, height) {\n if (width === 0 && height === 0) {\n return;\n }\n\n this.dirty = true;\n this.view.setViewportSize(width, height);\n if (this.gl) {\n Context.resize(this.gl, width, height, Utils.device_pixel_ratio);\n }\n }\n\n // Request scene be redrawn at next animation loop\n requestRedraw() {\n this.dirty = true;\n }\n\n // Redraw scene immediately - don't wait for animation loop\n // Use sparingly, but for cases where you need the closest possible sync with other UI elements,\n // such as other, non-WebGL map layers (e.g. Leaflet raster layers, markers, etc.)\n immediateRedraw() {\n this.dirty = true;\n this.update();\n }\n\n renderLoop () {\n this.render_loop_active = true; // only let the render loop instantiate once\n\n if (this.initialized) {\n // Render the scene\n this.update();\n }\n\n // Request the next frame if not scheduled to stop\n if (!this.render_loop_stop) {\n window.requestAnimationFrame(this.renderLoop.bind(this));\n }\n else {\n this.render_loop_stop = false;\n this.render_loop_active = false;\n }\n }\n\n // Setup the render loop\n setupRenderLoop() {\n if (!this.render_loop_active) {\n setTimeout(() => { this.renderLoop(); }, 0); // delay start by one tick\n }\n }\n\n update() {\n // Determine which passes (if any) to render\n let main = this.dirty;\n let selection = this.selection ? this.selection.hasPendingRequests() : false;\n var will_render = !(\n (main === false && selection === false) ||\n this.initialized === false ||\n this.updating > 0 ||\n this.ready() === false\n );\n\n // Pre-render loop hook\n this.trigger('preUpdate', will_render);\n\n // Bail if no need to render\n if (!will_render) {\n return false;\n }\n this.dirty = false; // subclasses can set this back to true when animation is needed\n\n // Render the scene\n this.updateDevicePixelRatio();\n this.render({ main, selection });\n this.updateViewComplete(); // fires event when rendered tile set or style changes\n this.media_capture.completeScreenshot(); // completes screenshot capture if requested\n\n // Post-render loop hook\n this.trigger('postUpdate', will_render);\n\n // Redraw every frame if animating\n if (this.animated === true || this.view.isAnimating()) {\n this.dirty = true;\n }\n\n this.frame++;\n log('trace', 'Scene.render()');\n return true;\n }\n\n // Accepts flags indicating which render passes should be made\n render({ main, selection }) {\n var gl = this.gl;\n\n // Update styles, camera, lights\n this.view.update();\n Object.keys(this.lights).forEach(i => this.lights[i].update());\n\n // Render main pass\n if (main) {\n this.render_count = this.renderPass();\n this.last_main_render = this.frame;\n }\n\n // Render selection pass (if needed)\n if (selection) {\n if (this.view.panning || this.view.zooming) {\n this.selection.clearPendingRequests();\n return;\n }\n\n // Only re-render if selection buffer is out of date (relative to main render buffer)\n // and not locked (e.g. no tiles are actively building)\n if (!this.selection.locked && this.last_selection_render < this.last_main_render) {\n this.selection.bind(); // switch to FBO\n this.renderPass(\n 'selection_program', // render w/alternate program\n { allow_blend: false });\n\n // Reset to screen buffer\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n gl.viewport(0, 0, this.canvas.width, this.canvas.height);\n this.last_selection_render = this.frame;\n }\n\n this.selection.read(); // process any pending results from selection buffer\n }\n\n this.render_count_changed = false;\n if (this.render_count !== this.last_render_count) {\n this.render_count_changed = true;\n\n this.getFeatureSelectionMapSize().then(size => {\n if (size) { // returns undefined if previous request pending\n log('info', `Scene: rendered ${this.render_count} primitives (${size} features in selection map)`);\n }\n });\n }\n this.last_render_count = this.render_count;\n\n return true;\n }\n\n // Render all active styles, grouped by blend/depth type (opaque, overlay, etc.) and by program (style)\n // Called both for main render pass, and for secondary passes like selection buffer\n renderPass(program_key = 'program', { allow_blend } = {}) {\n // optionally force alpha off (e.g. for selection pass)\n allow_blend = (allow_blend == null) ? true : allow_blend;\n\n this.clearFrame({ clear_color: true, clear_depth: true });\n\n // Sort styles by blend order\n let styles = this.tile_manager.getActiveStyles().\n map(s => this.styles[s]).\n filter(s => s). // guard against missing styles, such as while loading a new scene\n sort(Style.blendOrderSort);\n\n // Render styles\n let count = 0; // how many primitives were rendered\n let last_blend;\n for (let s=0; s < styles.length; s++) {\n let style = styles[s];\n\n // Only update render state when blend mode changes\n if (style.blend !== last_blend) {\n let state = Object.assign({},\n Style.render_states[style.blend], // render state for blend mode\n { blend: (allow_blend && style.blend) } // enable/disable blending (e.g. no blend for selection)\n );\n this.setRenderState(state);\n }\n count += this.renderStyle(style.name, program_key);\n last_blend = style.blend;\n }\n\n return count;\n }\n\n renderStyle(style_name, program_key) {\n let style = this.styles[style_name];\n let first_for_style = true;\n let render_count = 0;\n let program;\n\n // Render tile GL geometries\n let renderable_tiles = this.tile_manager.getRenderableTiles();\n for (let t=0; t < renderable_tiles.length; t++) {\n let tile = renderable_tiles[t];\n\n if (tile.meshes[style_name] == null) {\n continue;\n }\n\n // Style-specific state\n // Only setup style if rendering for first time this frame\n // (lazy init, not all styles will be used in all screen views; some styles might be defined but never used)\n if (first_for_style === true) {\n first_for_style = false;\n program = this.setupStyle(style, program_key);\n if (!program) {\n return 0;\n }\n }\n\n // Skip proxy tiles if new tiles have finished loading this style\n if (!tile.shouldProxyForStyle(style_name)) {\n // log('trace', `Scene.renderStyle(): Skip proxy tile for style '${style_name}' `, tile, tile.proxy_for);\n continue;\n }\n\n // Tile-specific state\n this.view.setupTile(tile, program);\n\n // Render tile\n let mesh = tile.meshes[style_name];\n if (style.render(mesh)) {\n // Don't incur additional renders while viewport is moving\n if (!(this.view.panning || this.view.zooming)) {\n this.requestRedraw();\n }\n }\n render_count += mesh.geometry_count;\n }\n\n return render_count;\n }\n\n setupStyle(style, program_key) {\n // Get shader program from style, lazily compiling if necessary\n let program;\n try {\n program = style.getProgram(program_key);\n if (!program) {\n return;\n }\n }\n catch(error) {\n this.trigger('warning', {\n type: 'styles',\n message: `Error compiling style ${style.name}`,\n style,\n shader_errors: style.program && style.program.shader_errors\n });\n return;\n }\n\n program.use();\n style.setup();\n\n program.uniform('1f', 'u_time', this.animated ? (((+new Date()) - this.start_time) / 1000) : 0);\n this.view.setupProgram(program);\n for (let i in this.lights) {\n this.lights[i].setupProgram(program);\n }\n\n return program;\n }\n\n clearFrame({ clear_color, clear_depth } = {}) {\n if (!this.initialized) {\n return;\n }\n\n // Defaults\n clear_color = (clear_color === false) ? false : true; // default true\n clear_depth = (clear_depth === false) ? false : true; // default true\n\n // Set GL state\n this.render_states.depth_write.set({ depth_write: clear_depth });\n\n let gl = this.gl;\n if (clear_color || clear_depth) {\n let mask = (clear_color && gl.COLOR_BUFFER_BIT) | (clear_depth && gl.DEPTH_BUFFER_BIT);\n gl.clear(mask);\n }\n }\n\n setRenderState({ depth_test, depth_write, cull_face, blend } = {}) {\n if (!this.initialized) {\n return;\n }\n\n // Defaults\n // TODO: when we abstract out support for multiple render passes, these can be per-pass config options\n let render_states = this.render_states;\n depth_test = (depth_test === false) ? false : render_states.defaults.depth_test; // default true\n depth_write = (depth_write === false) ? false : render_states.defaults.depth_write; // default true\n cull_face = (cull_face === false) ? false : render_states.defaults.culling; // default true\n blend = (blend != null) ? blend : render_states.defaults.blending; // default false\n\n // Reset frame state\n let gl = this.gl;\n\n render_states.depth_test.set({ depth_test: depth_test });\n render_states.depth_write.set({ depth_write: depth_write });\n render_states.culling.set({ cull: cull_face, face: render_states.defaults.culling_face });\n\n // Blending of alpha channel is modified to account for WebGL alpha behavior, see:\n // http://webglfundamentals.org/webgl/lessons/webgl-and-alpha.html\n // http://stackoverflow.com/a/11533416\n if (blend) {\n // Opaque: all source, no destination\n if (blend === 'opaque') {\n render_states.blending.set({\n blend: false\n });\n }\n // Traditional alpha blending\n else if (blend === 'overlay' || blend === 'inlay') {\n render_states.blending.set({\n blend: true,\n src: gl.SRC_ALPHA, dst: gl.ONE_MINUS_SRC_ALPHA,\n src_alpha: gl.ONE, dst_alpha: gl.ONE_MINUS_SRC_ALPHA\n });\n }\n // Additive blending\n else if (blend === 'add') {\n render_states.blending.set({\n blend: true,\n src: gl.ONE, dst: gl.ONE\n });\n }\n // Multiplicative blending\n else if (blend === 'multiply') {\n render_states.blending.set({\n blend: true,\n src: gl.ZERO, dst: gl.SRC_COLOR\n });\n }\n }\n else {\n render_states.blending.set({ blend: false });\n }\n }\n\n // Request feature selection at given pixel. Runs async and returns results via a promise.\n getFeatureAt(pixel) {\n if (!this.initialized) {\n log('debug', \"Scene.getFeatureAt() called before scene was initialized\");\n return Promise.resolve();\n }\n\n // Point scaled to [0..1] range\n var point = {\n x: pixel.x * Utils.device_pixel_ratio / this.view.size.device.width,\n y: pixel.y * Utils.device_pixel_ratio / this.view.size.device.height\n };\n\n return this.selection.getFeatureAt(point).\n then(selection => Object.assign(selection, { pixel })).\n catch(error => Promise.resolve({ error }));\n }\n\n // Rebuild all tiles, without re-parsing the config or re-compiling styles\n // sync: boolean of whether to sync the config object to the worker\n // sources: optional array of data sources to selectively rebuild (by default all our rebuilt)\n rebuild({ sync = true, sources = null, serialize_funcs, profile = false, fade_in = false } = {}) {\n return new Promise((resolve, reject) => {\n // Skip rebuild if already in progress\n if (this.building) {\n // Queue up to one rebuild call at a time, only save last request\n if (this.building.queued && this.building.queued.reject) {\n // notify previous request that it did not complete\n log('debug', 'Scene.rebuild: request superceded by a newer call');\n this.building.queued.resolve(false); // false flag indicates rebuild request was superceded\n }\n\n // Save queued request\n let options = { sync, sources, serialize_funcs, profile, fade_in };\n this.building.queued = { resolve, reject, options };\n log('trace', `Scene.rebuild(): queuing request`);\n return;\n }\n\n // Track tile build state\n this.building = { resolve, reject };\n\n // Profiling\n if (profile) {\n this._profile('Scene.rebuild');\n }\n\n // Update config (in case JS objects were manipulated directly)\n if (sync) {\n this.syncConfigToWorker({ serialize_funcs });\n }\n this.resetFeatureSelection(sources);\n this.resetTime();\n\n // Rebuild visible tiles\n this.tile_manager.pruneToVisibleTiles();\n this.tile_manager.forEachTile(tile => {\n if (!sources || sources.indexOf(tile.source.name) > -1) {\n this.tile_manager.buildTile(tile, { fade_in });\n }\n });\n this.tile_manager.updateTilesForView(); // picks up additional tiles for any new/changed data sources\n this.tile_manager.checkBuildQueue(); // resolve immediately if no tiles to build\n }).then(() => {\n // Profiling\n if (profile) {\n this._profileEnd('Scene.rebuild');\n }\n });\n }\n\n // Tile manager finished building tiles\n // TODO move to tile manager\n tileManagerBuildDone() {\n if (this.building) {\n log('info', `Scene: build geometry finished`);\n if (this.building.resolve) {\n if (this.initial_build_time == null) {\n this.initial_build_time = (+new Date()) - this.start_time;\n log('debug', `Scene: initial build time: ${this.initial_build_time}`);\n }\n this.building.resolve(true);\n }\n\n // Another rebuild queued?\n var queued = this.building.queued;\n this.building = null;\n if (queued) {\n log('debug', `Scene: starting queued rebuild() request`);\n this.rebuild(queued.options).then(queued.resolve, queued.reject);\n }\n }\n }\n\n /**\n Load (or reload) the scene config\n @return {Promise}\n */\n loadScene(config_source = null, config_path = null) {\n this.config_source = config_source || this.config_source;\n this.config_globals_applied = [];\n\n if (typeof this.config_source === 'string') {\n this.config_path = URLs.pathForURL(config_path || this.config_source);\n }\n else {\n this.config_path = URLs.pathForURL(config_path);\n }\n\n return SceneLoader.loadScene(this.config_source, this.config_path).then(({config, bundle}) => {\n this.config = config;\n this.config_bundle = bundle;\n return this.config;\n });\n }\n\n // Add source to a scene, arguments `name` and `config` need to be provided:\n // - If the name doesn't match a sources it will create it\n // - the `config` obj follow the YAML scene spec, ex: ```{type: 'TopoJSON', url: \"//tile.mapzen.com/mapzen/vector/v1/all/{z}/{x}/{y}.topojson\"]}```\n // that looks like:\n //\n // scene.setDataSource(\"osm\", {type: 'TopoJSON', url: \"//tile.mapzen.com/mapzen/vector/v1/all/{z}/{x}/{y}.topojson\" });\n //\n // - also can be pass a ```data``` obj: ```{type: 'GeoJSON', data: JSObj ]}```\n //\n // var geojson_data = {};\n // ...\n // scene.setDataSource(\"dynamic_data\", {type: 'GeoJSON', data: geojson_data });\n //\n setDataSource (name, config) {\n if (!name || !config || !config.type || (!config.url && !config.data)) {\n log('error', \"No name provided or not a valid config:\", name, config);\n return;\n }\n\n let load = (this.config.sources[name] == null);\n let source = this.config.sources[name] = Object.assign({}, config);\n\n // Convert raw data into blob URL\n if (source.data && typeof source.data === 'object') {\n source.url = URLs.createObjectURL(new Blob([JSON.stringify(source.data)]));\n delete source.data;\n }\n\n if (load) {\n return this.updateConfig({ rebuild: { sources: [name] } });\n } else {\n return this.rebuild({ sources: [name] });\n }\n }\n\n createDataSources() {\n let reset = []; // sources to reset\n let prev_source_names = Object.keys(this.sources);\n let source_id = 0;\n\n for (var name in this.config.sources) {\n let source = this.config.sources[name];\n let prev_source = this.sources[name];\n\n try {\n let config = Object.assign({}, source, { name, id: source_id++ });\n this.sources[name] = DataSource.create(config, this.sources);\n if (!this.sources[name]) {\n throw {};\n }\n }\n catch(e) {\n delete this.sources[name];\n let message = `Could not create data source: ${e.message}`;\n log('warn', `Scene: ${message}`, source);\n this.trigger('warning', { type: 'sources', source, message });\n }\n\n // Data source changed?\n if (DataSource.changed(this.sources[name], prev_source)) {\n reset.push(name);\n }\n }\n\n // Sources that were removed\n prev_source_names.forEach(s => {\n if (!this.config.sources[s]) {\n delete this.sources[s]; // TODO: remove from workers too?\n reset.push(s);\n }\n });\n\n // Remove tiles from sources that have changed\n if (reset.length > 0) {\n this.tile_manager.removeTiles(tile => {\n return (reset.indexOf(tile.source.name) > -1);\n });\n }\n\n // Mark sources that will generate geometry tiles\n // (all except those that are only raster sources attached to other sources)\n for (let ln in this.config.layers) {\n let layer = this.config.layers[ln];\n if (layer.data && this.sources[layer.data.source]) {\n this.sources[layer.data.source].builds_geometry_tiles = true;\n }\n }\n }\n\n // Load all textures in the scene definition\n loadTextures() {\n return Texture.createFromObject(this.gl, this.config.textures).\n then(() => Texture.createDefault(this.gl)); // create a 'default' texture for placeholders\n }\n\n // Called (currently manually) after styles are updated in stylesheet\n updateStyles() {\n if (!this.initialized && !this.initializing) {\n throw new Error('Scene.updateStyles() called before scene was initialized');\n }\n\n // (Re)build styles from config\n this.styles = this.style_manager.build(this.config.styles);\n this.style_manager.initStyles(this);\n\n // Optionally set GL context (used when initializing or re-initializing GL resources)\n for (let style in this.styles) {\n this.styles[style].setGL(this.gl);\n }\n\n // Use explicitly set scene animation flag if defined, otherwise turn on animation if there are any animated styles\n this.animated =\n this.config.scene.animated !== undefined ?\n this.config.scene.animated :\n Object.keys(this.styles).some(s => this.styles[s].animated);\n\n this.dirty = true;\n }\n\n // Get active camera - for public API\n getActiveCamera() {\n return this.view.getActiveCamera();\n }\n\n // Set active camera - for public API\n setActiveCamera(name) {\n return this.view.setActiveCamera(name);\n }\n\n // Create lighting\n createLights() {\n this.lights = {};\n for (let i in this.config.lights) {\n if (!this.config.lights[i] || typeof this.config.lights[i] !== 'object') {\n continue;\n }\n let light = this.config.lights[i];\n light.name = i.replace('-', '_'); // light names are injected in shaders, can't have hyphens\n light.visible = (light.visible === false) ? false : true;\n if (light.visible) {\n this.lights[light.name] = Light.create(this.view, light);\n }\n }\n Light.inject(this.lights);\n }\n\n // Set background color\n setBackground() {\n let bg = this.config.scene.background;\n this.background = {};\n if (bg && bg.color) {\n this.background.color = StyleParser.parseColor(bg.color);\n }\n if (!this.background.color) {\n this.background.color = [0, 0, 0, 0]; // default background TODO: vary w/scene alpha\n }\n\n // if background is fully opaque, set canvas background to match\n if (this.background.color[3] === 1) {\n this.canvas.style.backgroundColor =\n `rgba(${this.background.color.map(c => Math.floor(c * 255)).join(', ')})`;\n }\n else {\n this.canvas.style.backgroundColor = 'transparent';\n }\n\n this.gl.clearColor(...this.background.color);\n }\n\n // Turn introspection mode on/off\n setIntrospection (val) {\n this.introspection = val || false;\n this.updating++;\n return this.updateConfig({ normalize: false }).then(() => this.updating--);\n }\n\n // Update scene config, and optionally rebuild geometry\n // rebuild can be boolean, or an object containing rebuild options to passthrough\n updateConfig({ load_event = false, rebuild = true, serialize_funcs, normalize = true, fade_in = false } = {}) {\n this.generation = ++Scene.generation;\n this.updating++;\n\n this.config = SceneLoader.applyGlobalProperties(this.config, this.config_globals_applied);\n if (normalize) {\n SceneLoader.normalize(this.config, this.config_bundle);\n }\n this.trigger(load_event ? 'load' : 'update', { config: this.config });\n\n SceneLoader.hoistTextures(this.config); // move inline textures into global texture set\n this.style_manager.init();\n this.view.reset();\n this.createLights();\n this.createDataSources();\n this.loadTextures();\n this.setBackground();\n FontManager.loadFonts(this.config.fonts);\n\n // TODO: detect changes to styles? already (currently) need to recompile anyway when camera or lights change\n this.updateStyles();\n\n // Optionally rebuild geometry\n let done = rebuild ?\n this.rebuild(Object.assign({ serialize_funcs, fade_in }, typeof rebuild === 'object' && rebuild)) :\n this.syncConfigToWorker({ serialize_funcs }); // rebuild() also syncs config\n\n // Finish by updating bounds and re-rendering\n this.updating--;\n this.view.updateBounds();\n this.requestRedraw();\n\n return done;\n }\n\n // Serialize config and send to worker\n syncConfigToWorker({ serialize_funcs = true } = {}) {\n // Tell workers we're about to rebuild (so they can update styles, etc.)\n let config_serialized =\n serialize_funcs ? Utils.serializeWithFunctions(this.config) : JSON.stringify(this.config);\n return WorkerBroker.postMessage(this.workers, 'self.updateConfig', {\n config: config_serialized,\n generation: this.generation,\n introspection: this.introspection\n }, debugSettings);\n }\n\n // Listen to related objects\n createListeners () {\n this.listeners = {};\n\n this.listeners.view = {\n move: () => this.trigger('move')\n };\n this.view.subscribe(this.listeners.view);\n\n this.listeners.texture = {\n update: () => this.dirty = true,\n warning: (data) => this.trigger('warning', Object.assign({ type: 'textures' }, data))\n };\n Texture.subscribe(this.listeners.texture);\n\n this.listeners.scene_loader = {\n error: (data) => this.trigger('error', Object.assign({ type: 'scene' }, data))\n };\n SceneLoader.subscribe(this.listeners.scene_loader);\n }\n\n destroyListeners () {\n this.unsubscribeAll();\n this.view.unsubscribe(this.listeners.view);\n Texture.unsubscribe(this.listeners.texture);\n SceneLoader.unsubscribe(this.listeners.scene_loader);\n this.listeners = null;\n }\n\n resetFeatureSelection(sources = null) {\n if (!this.selection) {\n this.selection = new FeatureSelection(this.gl, this.workers, () => this.building);\n }\n else if (this.workers) {\n WorkerBroker.postMessage(this.workers, 'self.resetFeatureSelection', sources);\n }\n }\n\n // Gets the current feature selection map size across all workers. Returns a promise.\n getFeatureSelectionMapSize() {\n if (this.fetching_selection_map) {\n return Promise.resolve(); // return undefined if already pending\n }\n this.fetching_selection_map = true;\n\n return WorkerBroker.postMessage(this.workers, 'self.getFeatureSelectionMapSize')\n .then(sizes => {\n this.fetching_selection_map = false;\n return sizes.reduce((a, b) => a + b);\n });\n }\n\n // Reset internal clock, mostly useful for consistent experience when changing styles/debugging\n resetTime() {\n this.start_time = +new Date();\n }\n\n // Fires event when rendered tile set or style changes\n updateViewComplete () {\n if ((this.render_count_changed || this.generation !== this.last_complete_generation) &&\n !this.tile_manager.isLoadingVisibleTiles()) {\n this.last_complete_generation = this.generation;\n CanvasText.pruneTextCache();\n this.trigger('view_complete');\n }\n }\n\n resetViewComplete () {\n this.last_complete_generation = null;\n }\n\n // Take a screenshot\n // Asynchronous because we have to wait for next render to capture buffer\n // Returns a promise\n screenshot () {\n this.requestRedraw();\n return this.media_capture.screenshot();\n }\n\n startVideoCapture () {\n this.requestRedraw();\n return this.media_capture.startVideoCapture();\n }\n\n stopVideoCapture () {\n return this.media_capture.stopVideoCapture();\n }\n\n\n // Stats/debug/profiling methods\n\n // Profile helpers, issues a profile on main thread & all workers\n _profile(name) {\n console.profile(`main thread: ${name}`);\n WorkerBroker.postMessage(this.workers, 'self.profile', name);\n }\n\n _profileEnd(name) {\n console.profileEnd(`main thread: ${name}`);\n WorkerBroker.postMessage(this.workers, 'self.profileEnd', name);\n }\n\n // Debug config and functions\n setupDebug () {\n let scene = this;\n this.debug = {\n // Rebuild geometry a given # of times and print average, min, max timings\n timeRebuild (num = 1, options = {}) {\n let times = [];\n let cycle = () => {\n let start = +new Date();\n scene.rebuild(options).then(() => {\n times.push(+new Date() - start);\n\n if (times.length < num) {\n cycle();\n }\n else {\n let avg = ~~(times.reduce((a, b) => a + b) / times.length);\n log('info', `Profiled rebuild ${num} times: ${avg} avg (${Math.min(...times)} min, ${Math.max(...times)} max)`);\n }\n });\n };\n cycle();\n },\n\n // Return geometry counts of visible tiles, grouped by style name\n geometryCountByStyle () {\n let counts = {};\n scene.tile_manager.getRenderableTiles().forEach(tile => {\n for (let style in tile.meshes) {\n counts[style] = counts[style] || 0;\n counts[style] += tile.meshes[style].geometry_count;\n }\n });\n return counts;\n },\n\n geometryCountByBaseStyle () {\n let style_counts = scene.debug.geometryCountByStyle();\n let counts = {};\n for (let style in style_counts) {\n let base = scene.styles[style].baseStyle();\n counts[base] = counts[base] || 0;\n counts[base] += style_counts[style];\n }\n return counts;\n },\n\n geometrySizeByStyle () {\n let sizes = {};\n scene.tile_manager.getRenderableTiles().forEach(tile => {\n for (let style in tile.meshes) {\n sizes[style] = sizes[style] || 0;\n sizes[style] += tile.meshes[style].buffer_size;\n }\n });\n return sizes;\n },\n\n geometrySizeByBaseStyle () {\n let style_sizes = scene.debug.geometrySizeByStyle();\n let sizes = {};\n for (let style in style_sizes) {\n let base = scene.styles[style].baseStyle();\n sizes[base] = sizes[base] || 0;\n sizes[base] += style_sizes[style];\n }\n return sizes;\n },\n\n layerStats () {\n if (debugSettings.layer_stats) {\n return Tile.debugSumLayerStats(scene.tile_manager.getRenderableTiles());\n }\n else {\n log('warn', `Enable the 'layer_stats' debug setting to collect layer stats`);\n return {};\n }\n },\n\n renderableTilesCount () {\n return scene.tile_manager.getRenderableTiles().length;\n }\n };\n }\n\n}\n\nScene.id = 0; // unique id for a scene instance\nScene.generation = 0; // id that is incremented each time a scene config is re-parsed\n", "import Utils from './utils/utils';\nimport * as URLs from './utils/urls';\n\nimport JSZip from 'jszip';\nimport yaml from 'js-yaml';\n\nexport class SceneBundle {\n\n constructor(url, path, parent = null) {\n this.url = url;\n\n // If a base path was provided, use it for resolving local bundle resources only if\n // the base path is absolute, or this bundle's path is relative\n if (path && (!URLs.isRelativeURL(path) || URLs.isRelativeURL(this.url))) {\n this.path = path;\n }\n else {\n this.path = URLs.pathForURL(this.url);\n }\n\n this.path_for_parent = path || this.path; // for resolving paths relative to a parent bundle\n this.parent = parent;\n\n // An ancestor bundle may be a container (e.g. zip file) that needs to resolve relative paths\n // for any scenes it contains, e.g. `root.zip` has a `root.yaml` that includes a `folder/child.yaml`:\n // resources within `child.yaml` must be resolved through the bundle for `root.zip`\n this.container = null;\n if (this.parent) {\n if (this.parent.container) {\n this.container = this.parent.container;\n }\n else if (this.parent.isContainer()) {\n this.container = this.parent;\n }\n }\n }\n\n load() {\n return loadResource(this.url);\n }\n\n // Info for retrieving a specific resource from this bundle\n // url: fully qualified URL to retrieve the content of the resource (e.g. zips will transform this to blob URL)\n // path: original path of the resource within the bundle (for resolving paths up the bundle tree)\n // type: file extension (used for determining bundle type, `yaml` or `zip`)\n resourceFor(url) {\n return {\n url: this.urlFor(url),\n path: this.pathFor(url),\n type: this.typeFor(url)\n };\n }\n\n urlFor(url) {\n if (isGlobal(url)) {\n return url;\n }\n\n if (URLs.isRelativeURL(url) && this.container) {\n return this.parent.urlFor(this.path_for_parent + url);\n }\n return URLs.addBaseURL(url, this.path);\n }\n\n pathFor(url) {\n return URLs.pathForURL(url);\n }\n\n typeFor(url) {\n return URLs.extensionForURL(url);\n }\n\n isContainer() {\n return false;\n }\n\n}\n\nexport class ZipSceneBundle extends SceneBundle {\n\n constructor(url, path, parent) {\n super(url, path, parent);\n this.zip = null;\n this.files = {};\n this.root = null;\n this.path = '';\n }\n\n isContainer() {\n return true;\n }\n\n load() {\n this.zip = new JSZip();\n\n if (typeof this.url === 'string') {\n return Utils.io(this.url, 60000, 'arraybuffer')\n .then(body => this.zip.loadAsync(body))\n .then(() => this.parseZipFiles())\n .then(() => this.loadRoot())\n .catch(e => Promise.reject(e));\n } else {\n return Promise.resolve(this);\n }\n }\n\n urlFor(url) {\n if (isGlobal(url)) {\n return url;\n }\n\n if (URLs.isRelativeURL(url)) {\n return this.urlForZipFile(URLs.flattenRelativeURL(url));\n }\n return super.urlFor(url);\n }\n\n typeFor(url) {\n if (URLs.isRelativeURL(url)) {\n return this.typeForZipFile(url);\n }\n return super.typeFor(url);\n }\n\n loadRoot() {\n return this.findRoot()\n .then(() => loadResource(this.urlForZipFile(this.root)));\n }\n\n findRoot() {\n // There must be a single YAML file at the top level of the zip\n const yamls = Object.keys(this.files)\n .filter(path => this.files[path].depth === 0)\n .filter(path => URLs.extensionForURL(path) === 'yaml');\n\n if (yamls.length === 1) {\n this.root = yamls[0];\n }\n\n // No root found\n if (!this.root) {\n let msg = `Could not find root scene for bundle '${this.url}': `;\n msg += `The zip archive's root level must contain a single scene file with the '.yaml' extension. `;\n if (yamls.length > 0) {\n msg += `Found multiple YAML files at the root level: ${yamls.map(r => '\\'' + r + '\\'' ).join(', ')}.`;\n }\n else {\n msg += `Found NO YAML files at the root level.`;\n }\n return Promise.reject(Error(msg));\n }\n return Promise.resolve();\n }\n\n parseZipFiles() {\n let paths = [];\n let queue = [];\n this.zip.forEach((path, file) => {\n if (!file.dir) {\n paths.push(path);\n queue.push(file.async('arraybuffer'));\n }\n });\n\n return Promise.all(queue).then(data => {\n for (let i=0; i < data.length; i++) {\n let path = paths[i];\n let depth = path.split('/').length - 1;\n this.files[path] = {\n data: data[i],\n type: URLs.extensionForURL(path),\n depth\n };\n }\n });\n }\n\n urlForZipFile(file) {\n if (this.files[file]) {\n if (!this.files[file].url) {\n this.files[file].url = URLs.createObjectURL(new Blob([this.files[file].data]));\n }\n\n return this.files[file].url;\n }\n }\n\n typeForZipFile(file) {\n return this.files[file] && this.files[file].type;\n }\n\n}\n\nexport function createSceneBundle(url, path, parent, type = null) {\n if (type === 'zip' || (typeof url === 'string' && !URLs.isLocalURL(url) && URLs.extensionForURL(url) === 'zip')) {\n return new ZipSceneBundle(url, path, parent);\n }\n return new SceneBundle(url, path, parent);\n}\n\n// References a global property?\nexport function isGlobal (val) {\n if (val && val.slice(0, 7) === 'global.') {\n return true;\n }\n return false;\n}\n\nfunction parseResource (body) {\n var data;\n try {\n // jsyaml 'json' option allows duplicate keys\n // Keeping this for backwards compatibility, but should consider migrating to requiring\n // unique keys, as this is YAML spec. But Tangram ES currently accepts dupe keys as well,\n // so should consider how best to unify.\n data = yaml.safeLoad(body, { json: true });\n } catch (e) {\n throw e;\n }\n return data;\n}\n\nfunction loadResource (source) {\n return new Promise((resolve, reject) => {\n if (typeof source === 'string') {\n Utils.io(source).then((body) => {\n try {\n let data = parseResource(body);\n resolve(data);\n }\n catch(e) {\n reject(e);\n }\n }, reject);\n } else {\n resolve(source);\n }\n });\n}\n", "import log from './utils/log';\nimport GLSL from './gl/glsl';\nimport * as URLs from './utils/urls';\nimport mergeObjects from './utils/merge';\nimport subscribeMixin from './utils/subscribe';\nimport {createSceneBundle, isGlobal} from './scene_bundle';\n\nvar SceneLoader;\n\nexport default SceneLoader = {\n\n // Load scenes definitions from URL & proprocess\n loadScene(url, path = null) {\n let errors = [];\n return this.loadSceneRecursive({ url, path }, null, errors).\n then(result => this.finalize(result)).\n then(({ config, bundle }) => {\n if (!config) {\n // root scene failed to load, reject with first error\n return Promise.reject(errors[0]);\n }\n else if (errors.length > 0) {\n // scene loaded, but some imports had errors\n errors.forEach(error => {\n let message = `Failed to import scene: ${error.url}`;\n log('error', message, error);\n this.trigger('error', { type: 'scene_import', message, error, url: error.url });\n });\n }\n return { config, bundle };\n });\n },\n\n // Loads scene files from URL, recursively loading 'import' scenes\n // Optional *initial* path only (won't be passed to recursive 'import' calls)\n // Useful for loading resources in base scene file from a separate location\n // (e.g. in Tangram Play, when modified local scene should still refer to original resource URLs)\n loadSceneRecursive({ url, path, type }, parent, errors = []) {\n if (!url) {\n return Promise.resolve({});\n }\n\n let bundle = createSceneBundle(url, path, parent, type);\n\n return bundle.load().then(config => {\n if (config.import == null) {\n return this.normalize(config, bundle);\n }\n\n // accept single entry or array\n if (!Array.isArray(config.import)) {\n config.import = [config.import]; // convert to array\n }\n\n // Collect URLs of scenes to import\n let imports = [];\n config.import.forEach(url => {\n // Convert scene objects to URLs\n if (typeof url === 'object') {\n url = URLs.createObjectURL(new Blob([JSON.stringify(url)]));\n }\n\n imports.push(bundle.resourceFor(url));\n });\n delete config.import; // don't want to merge this property\n\n return Promise.\n all(imports.map(resource => this.loadSceneRecursive(resource, bundle, errors))).\n then(results => {\n let configs = results.map(r => r.config);\n config = mergeObjects({}, ...configs, config);\n return this.normalize(config, bundle);\n });\n }).catch(error => {\n // Collect scene load errors as we go\n error.url = url;\n errors.push(error);\n return {};\n });\n },\n\n // Normalize properties that should be adjust within each local scene file (usually by path)\n normalize(config, bundle) {\n this.normalizeDataSources(config, bundle);\n this.normalizeFonts(config, bundle);\n this.normalizeTextures(config, bundle);\n return { config, bundle };\n },\n\n // Expand paths for data source\n normalizeDataSources(config, bundle) {\n config.sources = config.sources || {};\n\n for (let sn in config.sources) {\n this.normalizeDataSource(config.sources[sn], bundle);\n }\n\n return config;\n },\n\n normalizeDataSource(source, bundle) {\n source.url = bundle.urlFor(source.url);\n\n if (Array.isArray(source.scripts)) {\n source.scripts = source.scripts.map(url => bundle.urlFor(url));\n }\n\n return source;\n },\n\n // Expand paths for fonts\n normalizeFonts(config, bundle) {\n config.fonts = config.fonts || {};\n\n for (let family in config.fonts) {\n if (Array.isArray(config.fonts[family])) {\n config.fonts[family].forEach(face => {\n face.url = face.url && bundle.urlFor(face.url);\n });\n }\n else {\n let face = config.fonts[family];\n face.url = face.url && bundle.urlFor(face.url);\n }\n }\n\n return config;\n },\n\n // Expand paths and centralize texture definitions for a scene object\n normalizeTextures(config, bundle) {\n config.textures = config.textures || {};\n\n // Add current scene's base path to globally defined textures\n // Only adds path for textures with relative URLs, so textures in imported scenes get the base\n // path of their immediate scene file\n if (config.textures) {\n for (let tn in config.textures) {\n let texture = config.textures[tn];\n if (texture.url) {\n texture.url = bundle.urlFor(texture.url);\n }\n }\n }\n\n // Resolve URLs for inline textures\n if (config.styles) {\n for (let sn in config.styles) {\n let style = config.styles[sn];\n\n // Style `texture`\n let tex = style.texture;\n if (typeof tex === 'string' && !config.textures[tex] && !isGlobal(tex)) {\n style.texture = bundle.urlFor(tex);\n }\n\n // Material\n if (style.material) {\n ['emission', 'ambient', 'diffuse', 'specular', 'normal'].forEach(prop => {\n // Material property has a texture\n let tex = style.material[prop] != null && style.material[prop].texture;\n if (typeof tex === 'string' && !config.textures[tex] && !isGlobal(tex)) {\n style.material[prop].texture = bundle.urlFor(tex);\n }\n });\n }\n\n // Shader uniforms\n if (style.shaders && style.shaders.uniforms) {\n GLSL.parseUniforms(style.shaders.uniforms).forEach(({type, value, key, uniforms}) => {\n // Texture by URL (string-named texture not referencing existing texture definition)\n if (type === 'sampler2D' && typeof value === 'string' && !config.textures[value] && !isGlobal(value)) {\n uniforms[key] = bundle.urlFor(value);\n }\n });\n }\n }\n }\n\n return config;\n },\n\n // Substitutes global scene properties (those defined in the `config.global` object) for any style values\n // of the form `global.`, for example `color: global.park_color` would be replaced with the value (if any)\n // defined for the `park_color` property in `config.global.park_color`.\n applyGlobalProperties(config, applied) {\n if (!config.global || Object.keys(config.global).length === 0) {\n return config; // no global properties to transform\n }\n\n // Parse properties from globals\n const separator = ':';\n const props = flattenProperties(config.global, separator);\n\n // Re-apply previously applied properties\n // NB: a current shortcoming here is that you cannot \"un-link\" a target property from a global\n // at run-time. Once a global property substitution has been recorderd, it will always be re-applied\n // on subsequent scene updates, even if the target property was updated to another literal value.\n // This is unlikely to be a common occurrence an acceptable limitation for now.\n applied.forEach(({ prop, target, key }) => {\n if (target) {\n target[key] = props[prop];\n // log('info', `Re-applying ${prop} with value ${props[prop]} to key ${key} in`, target);\n }\n });\n\n // Recursively look-up a global property name. Allows globals to refer to other globals, e.g.:\n // global:\n // color: global.secret_color\n // secret_color: red\n function lookupGlobalName (key, props, stack = []) {\n if (stack.indexOf(key) > -1) {\n log({ level: 'warn', once: true }, `Global properties: cyclical reference detected`, stack);\n return;\n }\n stack.push(key);\n\n const prop = (key.slice(0, 7) === 'global.') && (key.slice(7).replace(/\\./g, separator));\n if (prop && props[prop] !== undefined) {\n if (typeof props[prop] === 'string' && props[prop].slice(0, 7) === 'global.') {\n return lookupGlobalName(props[prop], props, stack);\n }\n return prop;\n }\n }\n\n // Find and apply new properties\n function applyGlobals (obj, target, key) {\n // Convert string\n if (typeof obj === 'string') {\n const prop = lookupGlobalName(obj, props);\n const val = props[prop];\n if (val !== undefined) {\n // Save record of where property is applied\n applied.push({ prop, target, key });\n\n // Apply property\n obj = val;\n }\n }\n // Loop through object properties\n else if (typeof obj === 'object') {\n for (let p in obj) {\n obj[p] = applyGlobals(obj[p], obj, p);\n }\n }\n return obj;\n }\n\n return applyGlobals(config);\n },\n\n // Move inline (URL string) textures to the scene's top-level set of textures (config.textures).\n // There are 3 such cases of textures:\n // - in a style's `texture` property\n // - in a style's `material` properties\n // - in a style's custom uniforms (`shaders.uniforms`)\n hoistTextures (config) {\n if (config.styles) {\n for (let sn in config.styles) {\n let style = config.styles[sn];\n\n // Style `texture`\n let tex = style.texture;\n if (typeof tex === 'string' && !config.textures[tex]) {\n let url = tex;\n let name = isGlobal(url) ? `texture-${url}` : url;\n config.textures[name] = { url };\n style.texture = name;\n }\n\n // Material\n if (style.material) {\n ['emission', 'ambient', 'diffuse', 'specular', 'normal'].forEach(prop => {\n // Material property has a texture\n let tex = style.material[prop] != null && style.material[prop].texture;\n if (typeof tex === 'string' && !config.textures[tex]) {\n let url = tex;\n let name = isGlobal(url) ? `texture-${url}` : url;\n config.textures[name] = { url };\n style.material[prop].texture = name;\n }\n });\n }\n\n // Shader uniforms\n if (style.shaders && style.shaders.uniforms) {\n GLSL.parseUniforms(style.shaders.uniforms).forEach(({type, value, key, uniforms}) => {\n // Texture by URL (string-named texture not referencing existing texture definition)\n if (type === 'sampler2D' && typeof value === 'string' && !config.textures[value]) {\n let url = value;\n let name = isGlobal(url) ? `texture-${url}` : url;\n config.textures[name] = { url };\n uniforms[key] = name;\n }\n });\n }\n }\n }\n },\n\n // Normalize some scene-wide settings that apply to the final, merged scene\n finalize({ config, bundle }) {\n if (!config) {\n return {};\n }\n\n // Ensure top-level properties\n config.scene = config.scene || {};\n config.cameras = config.cameras || {};\n config.lights = config.lights || {};\n config.styles = config.styles || {};\n config.layers = config.layers || {};\n\n // If only one camera specified, set it as default\n if (config.camera) {\n config.cameras.default = config.camera;\n }\n\n // If no cameras specified, create one\n if (Object.keys(config.cameras).length === 0) {\n config.cameras.default = {};\n }\n\n // If no lights specified, create default\n if (Object.keys(config.lights).length === 0 ||\n Object.keys(config.lights).every(i => config.lights[i].visible === false)) {\n config.lights.default_light = {\n type: 'directional'\n };\n }\n\n return { config, bundle };\n }\n\n};\n\n// Flatten nested properties for simpler string look-ups\n// e.g. global.background.color -> 'global:background:color'\nfunction flattenProperties (obj, separator = ':', prefix = null, props = {}) {\n prefix = prefix ? (prefix + separator) : '';\n\n for (let p in obj) {\n let key = prefix + p;\n let val = obj[p];\n props[key] = val;\n\n if (typeof val === 'object' && !Array.isArray(val)) {\n flattenProperties(val, separator, key, props);\n }\n }\n return props;\n}\n\nsubscribeMixin(SceneLoader);\n", - "/*jshint worker: true*/\nimport Thread from './utils/thread';\nimport Utils from './utils/utils';\nimport {mergeDebugSettings} from './utils/debug_settings';\nimport log from './utils/log';\nimport WorkerBroker from './utils/worker_broker'; // jshint ignore:line\nimport Tile from './tile';\nimport DataSource from './sources/data_source';\nimport FeatureSelection from './selection';\nimport {StyleParser} from './styles/style_parser';\nimport {StyleManager} from './styles/style_manager';\nimport {parseLayers} from './styles/layer';\nimport Texture from './gl/texture';\n\nexport var SceneWorker = self;\n\n// Worker functionality will only be defined in worker thread\nif (Thread.is_worker) {\n\nObject.assign(self, {\n\n FeatureSelection,\n\n sources: {},\n styles: {},\n layers: {},\n tiles: {},\n\n // Initialize worker\n init (scene_id, worker_id, num_workers, log_level, device_pixel_ratio) {\n self.scene_id = scene_id;\n self._worker_id = worker_id;\n self.num_workers = num_workers;\n log.setLevel(log_level);\n Utils.device_pixel_ratio = device_pixel_ratio;\n FeatureSelection.setPrefix(self._worker_id);\n self.style_manager = new StyleManager();\n return worker_id;\n },\n\n // Starts a config refresh\n updateConfig ({ config, generation, introspection }, debug) {\n config = JSON.parse(config);\n mergeDebugSettings(debug);\n\n self.generation = generation;\n self.introspection = introspection;\n\n // Data block functions are not context wrapped like the rest of the style functions are\n // TODO: probably want a cleaner way to exclude these\n for (let layer in config.layers) {\n if (config.layers[layer]) {\n config.layers[layer].data = Utils.stringsToFunctions(config.layers[layer].data);\n }\n }\n\n // Expand global properties\n self.global = Utils.stringsToFunctions(config.global);\n\n // Create data sources\n self.createDataSources(config);\n\n // Expand styles\n config.styles = Utils.stringsToFunctions(config.styles, StyleParser.wrapFunction);\n self.styles = self.style_manager.build(config.styles);\n self.style_manager.initStyles({\n generation: self.generation,\n styles: self.styles,\n sources: self.sources,\n introspection: self.introspection\n });\n\n // Parse each top-level layer as a separate tree\n self.layers = parseLayers(config.layers, self.style_manager.styles);\n\n // Sync tetxure info from main thread\n self.syncing_textures = self.syncTextures(config.textures);\n\n // Return promise for when config refresh finishes\n self.configuring = self.syncing_textures.then(() => {\n log('debug', `updated config`);\n });\n },\n\n // Create data sources and clear tile cache if necessary\n createDataSources (config) {\n // Save and compare previous sources\n self.last_config_sources = self.config_sources || {};\n self.config_sources = config.sources;\n let last_sources = self.sources;\n let changed = false;\n\n // Parse new sources\n config.sources = Utils.stringsToFunctions(config.sources);\n self.sources = {}; // clear previous sources\n for (let name in config.sources) {\n if (JSON.stringify(self.last_config_sources[name]) === JSON.stringify(config.sources[name])) {\n self.sources[name] = last_sources[name];\n continue;\n }\n\n let source;\n try {\n source = DataSource.create(Object.assign({}, config.sources[name], {name}), self.sources);\n }\n catch(e) {\n continue;\n }\n\n if (!source) {\n continue;\n }\n self.sources[name] = source;\n changed = true;\n }\n\n // Clear tile cache if any data sources changed\n if (changed) {\n self.tiles = {};\n }\n },\n\n // Returns a promise that fulfills when config refresh is finished\n awaitConfiguration () {\n return self.configuring;\n },\n\n // Build a tile: load from tile source if building for first time, otherwise rebuild with existing data\n buildTile ({ tile }) {\n // Tile cached?\n if (self.getTile(tile.key) != null) {\n // Already loading?\n if (self.getTile(tile.key).loading === true) {\n return;\n }\n }\n\n // Update tile cache\n tile = self.tiles[tile.key] = Object.assign(self.getTile(tile.key) || {}, tile);\n\n // Update config (styles, etc.), then build tile\n return self.awaitConfiguration().then(() => {\n // First time building the tile\n if (tile.loaded !== true) {\n\n tile.loading = true;\n tile.loaded = false;\n tile.error = null;\n\n self.loadTileSourceData(tile).then(() => {\n if (!self.getTile(tile.key)) {\n log('trace', `stop tile build after data source load because tile was removed: ${tile.key}`);\n return;\n }\n\n // Warn and continue on data source error\n if (tile.source_data.error) {\n log('warn', `tile load error(s) for ${tile.key}: ${tile.source_data.error}`);\n }\n\n tile.loading = false;\n tile.loaded = true;\n Tile.buildGeometry(tile, self);\n }).catch((error) => {\n tile.loading = false;\n tile.loaded = false;\n tile.error = error.stack;\n log('error', `tile load error for ${tile.key}: ${tile.error}`);\n\n // Send error to main thread\n WorkerBroker.postMessage(`TileManager_${self.scene_id}.buildTileError`, Tile.slice(tile));\n });\n }\n // Tile already loaded, just rebuild\n else {\n log('trace', `used worker cache for tile ${tile.key}`);\n\n // Build geometry\n try {\n Tile.buildGeometry(tile, self);\n }\n catch(error) {\n // Send error to main thread\n tile.error = error.toString();\n WorkerBroker.postMessage(`TileManager_${self.scene_id}.buildTileError`, Tile.slice(tile));\n }\n }\n });\n },\n\n // Load this tile's data source\n loadTileSourceData (tile) {\n if (self.sources[tile.source]) {\n return self.sources[tile.source].load(tile);\n }\n else {\n tile.source_data = {};\n return Promise.resolve(tile);\n }\n },\n\n getTile(key) {\n return self.tiles[key];\n },\n\n // Remove tile\n removeTile (key) {\n var tile = self.tiles[key];\n\n if (tile != null) {\n // Cancel if loading\n if (tile.loading === true) {\n log('trace', `cancel tile load for ${key}`);\n tile.loading = false;\n Tile.cancel(tile);\n }\n\n // Remove from cache\n FeatureSelection.clearTile(key);\n delete self.tiles[key];\n log('trace', `remove tile from cache for ${key}`);\n }\n },\n\n // Get a feature from the selection map\n getFeatureSelection ({ id, key } = {}) {\n var selection = FeatureSelection.map[key];\n\n return {\n id: id,\n feature: (selection && selection.feature)\n };\n },\n\n // Resets the feature selection state\n resetFeatureSelection (sources = null) {\n FeatureSelection.reset(sources);\n },\n\n // Selection map size for this worker\n getFeatureSelectionMapSize () {\n return FeatureSelection.getMapSize();\n },\n\n // Texture info needs to be synced from main thread, e.g. width/height, which we only know after the texture loads\n syncTextures (tex_config) {\n let textures = [];\n if (tex_config) {\n textures.push(...Object.keys(tex_config));\n }\n\n log('trace', 'sync textures to worker:', textures);\n if (textures.length > 0) {\n return Texture.syncTexturesToWorker(textures);\n }\n return Promise.resolve();\n },\n\n // Sync device pixel ratio from main thread\n updateDevicePixelRatio (device_pixel_ratio) {\n Utils.device_pixel_ratio = device_pixel_ratio;\n },\n\n // Profiling helpers\n profile (name) {\n console.profile(`worker ${self._worker_id}: ${name}`);\n },\n\n profileEnd (name) {\n console.profileEnd(`worker ${self._worker_id}: ${name}`);\n }\n\n});\n\nWorkerBroker.addTarget('self', self);\n\n}\n", + "/*jshint worker: true*/\nimport Thread from './utils/thread';\nimport Utils from './utils/utils';\nimport {mergeDebugSettings} from './utils/debug_settings';\nimport log from './utils/log';\nimport WorkerBroker from './utils/worker_broker'; // jshint ignore:line\nimport Tile from './tile';\nimport DataSource from './sources/data_source';\nimport FeatureSelection from './selection';\nimport {StyleParser} from './styles/style_parser';\nimport {StyleManager} from './styles/style_manager';\nimport {parseLayers} from './styles/layer';\nimport Texture from './gl/texture';\nimport VertexElements from './gl/vertex_elements';\n\nexport var SceneWorker = self;\n\n// Worker functionality will only be defined in worker thread\nif (Thread.is_worker) {\n\nObject.assign(self, {\n\n FeatureSelection,\n\n sources: {},\n styles: {},\n layers: {},\n tiles: {},\n\n // Initialize worker\n init (scene_id, worker_id, num_workers, log_level, device_pixel_ratio, has_element_index_unit) {\n self.scene_id = scene_id;\n self._worker_id = worker_id;\n self.num_workers = num_workers;\n log.setLevel(log_level);\n Utils.device_pixel_ratio = device_pixel_ratio;\n VertexElements.setElementIndexUint(has_element_index_unit);\n FeatureSelection.setPrefix(self._worker_id);\n self.style_manager = new StyleManager();\n return worker_id;\n },\n\n // Starts a config refresh\n updateConfig ({ config, generation, introspection }, debug) {\n config = JSON.parse(config);\n mergeDebugSettings(debug);\n\n self.generation = generation;\n self.introspection = introspection;\n\n // Data block functions are not context wrapped like the rest of the style functions are\n // TODO: probably want a cleaner way to exclude these\n for (let layer in config.layers) {\n if (config.layers[layer]) {\n config.layers[layer].data = Utils.stringsToFunctions(config.layers[layer].data);\n }\n }\n\n // Expand global properties\n self.global = Utils.stringsToFunctions(config.global);\n\n // Create data sources\n self.createDataSources(config);\n\n // Expand styles\n config.styles = Utils.stringsToFunctions(config.styles, StyleParser.wrapFunction);\n self.styles = self.style_manager.build(config.styles);\n self.style_manager.initStyles({\n generation: self.generation,\n styles: self.styles,\n sources: self.sources,\n introspection: self.introspection\n });\n\n // Parse each top-level layer as a separate tree\n self.layers = parseLayers(config.layers, self.style_manager.styles);\n\n // Sync tetxure info from main thread\n self.syncing_textures = self.syncTextures(config.textures);\n\n // Return promise for when config refresh finishes\n self.configuring = self.syncing_textures.then(() => {\n log('debug', `updated config`);\n });\n },\n\n // Create data sources and clear tile cache if necessary\n createDataSources (config) {\n // Save and compare previous sources\n self.last_config_sources = self.config_sources || {};\n self.config_sources = config.sources;\n let last_sources = self.sources;\n let changed = false;\n\n // Parse new sources\n config.sources = Utils.stringsToFunctions(config.sources);\n self.sources = {}; // clear previous sources\n for (let name in config.sources) {\n if (JSON.stringify(self.last_config_sources[name]) === JSON.stringify(config.sources[name])) {\n self.sources[name] = last_sources[name];\n continue;\n }\n\n let source;\n try {\n source = DataSource.create(Object.assign({}, config.sources[name], {name}), self.sources);\n }\n catch(e) {\n continue;\n }\n\n if (!source) {\n continue;\n }\n self.sources[name] = source;\n changed = true;\n }\n\n // Clear tile cache if any data sources changed\n if (changed) {\n self.tiles = {};\n }\n },\n\n // Returns a promise that fulfills when config refresh is finished\n awaitConfiguration () {\n return self.configuring;\n },\n\n // Build a tile: load from tile source if building for first time, otherwise rebuild with existing data\n buildTile ({ tile }) {\n // Tile cached?\n if (self.getTile(tile.key) != null) {\n // Already loading?\n if (self.getTile(tile.key).loading === true) {\n return;\n }\n }\n\n // Update tile cache\n tile = self.tiles[tile.key] = Object.assign(self.getTile(tile.key) || {}, tile);\n\n // Update config (styles, etc.), then build tile\n return self.awaitConfiguration().then(() => {\n // First time building the tile\n if (tile.loaded !== true) {\n\n tile.loading = true;\n tile.loaded = false;\n tile.error = null;\n\n self.loadTileSourceData(tile).then(() => {\n if (!self.getTile(tile.key)) {\n log('trace', `stop tile build after data source load because tile was removed: ${tile.key}`);\n return;\n }\n\n // Warn and continue on data source error\n if (tile.source_data.error) {\n log('warn', `tile load error(s) for ${tile.key}: ${tile.source_data.error}`);\n }\n\n tile.loading = false;\n tile.loaded = true;\n Tile.buildGeometry(tile, self);\n }).catch((error) => {\n tile.loading = false;\n tile.loaded = false;\n tile.error = error.stack;\n log('error', `tile load error for ${tile.key}: ${tile.error}`);\n\n // Send error to main thread\n WorkerBroker.postMessage(`TileManager_${self.scene_id}.buildTileError`, Tile.slice(tile));\n });\n }\n // Tile already loaded, just rebuild\n else {\n log('trace', `used worker cache for tile ${tile.key}`);\n\n // Build geometry\n try {\n Tile.buildGeometry(tile, self);\n }\n catch(error) {\n // Send error to main thread\n tile.error = error.toString();\n WorkerBroker.postMessage(`TileManager_${self.scene_id}.buildTileError`, Tile.slice(tile));\n }\n }\n });\n },\n\n // Load this tile's data source\n loadTileSourceData (tile) {\n if (self.sources[tile.source]) {\n return self.sources[tile.source].load(tile);\n }\n else {\n tile.source_data = {};\n return Promise.resolve(tile);\n }\n },\n\n getTile(key) {\n return self.tiles[key];\n },\n\n // Remove tile\n removeTile (key) {\n var tile = self.tiles[key];\n\n if (tile != null) {\n // Cancel if loading\n if (tile.loading === true) {\n log('trace', `cancel tile load for ${key}`);\n tile.loading = false;\n Tile.cancel(tile);\n }\n\n // Remove from cache\n FeatureSelection.clearTile(key);\n delete self.tiles[key];\n log('trace', `remove tile from cache for ${key}`);\n }\n },\n\n // Get a feature from the selection map\n getFeatureSelection ({ id, key } = {}) {\n var selection = FeatureSelection.map[key];\n\n return {\n id: id,\n feature: (selection && selection.feature)\n };\n },\n\n // Resets the feature selection state\n resetFeatureSelection (sources = null) {\n FeatureSelection.reset(sources);\n },\n\n // Selection map size for this worker\n getFeatureSelectionMapSize () {\n return FeatureSelection.getMapSize();\n },\n\n // Texture info needs to be synced from main thread, e.g. width/height, which we only know after the texture loads\n syncTextures (tex_config) {\n let textures = [];\n if (tex_config) {\n textures.push(...Object.keys(tex_config));\n }\n\n log('trace', 'sync textures to worker:', textures);\n if (textures.length > 0) {\n return Texture.syncTexturesToWorker(textures);\n }\n return Promise.resolve();\n },\n\n // Sync device pixel ratio from main thread\n updateDevicePixelRatio (device_pixel_ratio) {\n Utils.device_pixel_ratio = device_pixel_ratio;\n },\n\n // Profiling helpers\n profile (name) {\n console.profile(`worker ${self._worker_id}: ${name}`);\n },\n\n profileEnd (name) {\n console.profileEnd(`worker ${self._worker_id}: ${name}`);\n }\n\n});\n\nWorkerBroker.addTarget('self', self);\n\n}\n", "import log from './utils/log';\nimport Texture from './gl/texture';\nimport WorkerBroker from './utils/worker_broker';\n\nexport default class FeatureSelection {\n\n constructor(gl, workers, lock_fn) {\n this.gl = gl;\n this.workers = workers; // pool of workers to request feature look-ups from, keyed by id\n this._lock_fn = (typeof lock_fn === 'function') && lock_fn; // indicates if safe to read/write selection buffer this frame\n this.init();\n }\n\n init() {\n // Selection state tracking\n this.requests = {}; // pending selection requests\n this.feature = null; // currently selected feature\n this.read_delay = 0; // delay time from selection render to framebuffer sample, to avoid CPU/GPU sync lock\n this.read_delay_timer = null; // current timer (setTimeout) for delayed selection reads\n\n this.pixel = new Uint8Array(4);\n this.pixel32 = new Float32Array(this.pixel.buffer);\n\n // Frame buffer for selection\n // TODO: initiate lazily in case we don't need to do any selection\n this.fbo = this.gl.createFramebuffer();\n this.gl.bindFramebuffer(this.gl.FRAMEBUFFER, this.fbo);\n this.fbo_size = { width: 256, height: 256 }; // TODO: make configurable / adaptive based on canvas size\n this.fbo_size.aspect = this.fbo_size.width / this.fbo_size.height;\n\n // Texture for the FBO color attachment\n var fbo_texture = Texture.create( this.gl, 'selection_fbo', { filtering: 'nearest' });\n fbo_texture.setData(this.fbo_size.width, this.fbo_size.height, null, { filtering: 'nearest' });\n this.gl.framebufferTexture2D(this.gl.FRAMEBUFFER, this.gl.COLOR_ATTACHMENT0, this.gl.TEXTURE_2D, fbo_texture.texture, 0);\n\n // Renderbuffer for the FBO depth attachment\n var fbo_depth_rb = this.gl.createRenderbuffer();\n this.gl.bindRenderbuffer(this.gl.RENDERBUFFER, fbo_depth_rb);\n this.gl.renderbufferStorage(this.gl.RENDERBUFFER, this.gl.DEPTH_COMPONENT16, this.fbo_size.width, this.fbo_size.height);\n this.gl.framebufferRenderbuffer(this.gl.FRAMEBUFFER, this.gl.DEPTH_ATTACHMENT, this.gl.RENDERBUFFER, fbo_depth_rb);\n\n this.gl.bindFramebuffer(this.gl.FRAMEBUFFER, null);\n }\n\n destroy() {\n if (this.gl && this.fbo) {\n this.gl.deleteFramebuffer(this.fbo);\n this.fbo = null;\n this.gl.bindFramebuffer(this.gl.FRAMEBUFFER, null);\n }\n\n // TODO: free texture?\n }\n\n // external lock function determines when it's safe to read/write from selection buffer\n get locked () {\n return (this._lock_fn && this._lock_fn()) || false;\n }\n\n bind() {\n // Switch to FBO\n this.gl.bindFramebuffer(this.gl.FRAMEBUFFER, this.fbo);\n this.gl.viewport(0, 0, this.fbo_size.width, this.fbo_size.height);\n }\n\n // Request feature selection\n // Runs asynchronously, schedules selection buffer to be updated\n getFeatureAt(point) {\n // ensure requested point is in canvas bounds\n if (!point || point.x < 0 || point.y < 0 || point.x > 1 || point.y > 1) {\n return Promise.resolve({ feature: null, changed: false });\n }\n\n return new Promise((resolve, reject) => {\n // Queue requests for feature selection, and they will be picked up by the render loop\n this.selection_request_id = (this.selection_request_id + 1) || 0;\n this.requests[this.selection_request_id] = {\n id: this.selection_request_id,\n point,\n resolve,\n reject\n };\n });\n }\n\n // Any pending selection requests\n pendingRequests() {\n return Object.keys(this.requests).length ? this.requests : null;\n }\n\n hasPendingRequests() {\n return this.pendingRequests() != null;\n }\n\n clearPendingRequests() {\n for (var r in this.requests) {\n var request = this.requests[r];\n\n // This request was already sent to the worker, we're just awaiting its reply\n if (request.sent) {\n continue;\n }\n\n // Reject request since it will never be fulfilled\n // TODO: pass a reason for rejection?\n request.reject({ request });\n delete this.requests[r];\n }\n }\n\n // Read pending results from the selection buffer. Called after rendering to selection buffer.\n read() {\n // Delay reading the pixel result from the selection buffer to avoid CPU/GPU sync lock.\n // Calling readPixels synchronously caused a massive performance hit, presumably since it\n // forced this function to wait for the GPU to finish rendering and retrieve the texture contents.\n if (this.read_delay_timer != null) {\n clearTimeout(this.read_delay_timer);\n }\n this.read_delay_timer = setTimeout(() => {\n if (this.locked) {\n return;\n }\n\n var gl = this.gl;\n\n gl.bindFramebuffer(gl.FRAMEBUFFER, this.fbo);\n\n for (var r in this.requests) {\n var request = this.requests[r];\n\n // This request was already sent to the worker, we're just awaiting its reply\n if (request.sent) {\n continue;\n }\n\n // Check selection map against FBO\n gl.readPixels(\n Math.floor(request.point.x * this.fbo_size.width),\n Math.floor((1 - request.point.y) * this.fbo_size.height),\n 1, 1, gl.RGBA, gl.UNSIGNED_BYTE, this.pixel);\n var feature_key = (this.pixel[0] + (this.pixel[1] << 8) + (this.pixel[2] << 16) + (this.pixel[3] << 24)) >>> 0;\n\n // If feature found, ask appropriate web worker to lookup feature\n var worker_id = this.pixel[3];\n if (worker_id !== 255) { // 255 indicates an empty selection buffer pixel\n if (this.workers[worker_id] != null) {\n WorkerBroker.postMessage(\n this.workers[worker_id],\n 'self.getFeatureSelection',\n { id: request.id, key: feature_key })\n .then(message => {\n this.finishRead(message);\n });\n }\n }\n // No feature found, but still need to resolve promise\n else {\n this.finishRead({ id: request.id });\n }\n\n request.sent = true;\n }\n\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n\n }, this.read_delay);\n }\n\n // Called on main thread when a web worker finds a feature in the selection buffer\n finishRead (message) {\n var request = this.requests[message.id];\n if (!request) {\n log('error', \"FeatureSelection.finishRead(): could not find message\", message);\n return; // request was cleared before it returned\n }\n\n var feature = message.feature;\n var changed = false;\n if ((feature != null && this.feature == null) ||\n (feature == null && this.feature != null) ||\n (feature != null && this.feature != null &&\n JSON.stringify(feature) !== JSON.stringify(this.feature))) {\n changed = true;\n }\n\n this.feature = feature; // store the most recently selected feature\n\n // Resolve the request\n request.resolve({ feature, changed, request });\n delete this.requests[message.id]; // done processing this request\n }\n\n\n // Selection map generation\n // Each worker will create its own independent, 'local' selection map\n\n // Create a unique 32-bit color to identify a feature\n // Workers independently create/modify selection colors in their own threads, but we also\n // need the main thread to know where each feature color originated. To accomplish this,\n // we partition the map by setting the 4th component (alpha channel) to the worker's id.\n static makeEntry(tile) {\n // 32-bit color key\n this.map_entry++;\n var ir = this.map_entry & 255;\n var ig = (this.map_entry >> 8) & 255;\n var ib = (this.map_entry >> 16) & 255;\n var ia = this.map_prefix;\n var r = ir / 255;\n var g = ig / 255;\n var b = ib / 255;\n var a = ia / 255;\n var key = (ir + (ig << 8) + (ib << 16) + (ia << 24)) >>> 0; // need unsigned right shift to convert to positive #\n\n this.map[key] = {\n color: [r, g, b, a],\n };\n this.map_size++;\n\n // Initialize tile-specific tracking info\n if (!this.tiles[tile.key]) {\n this.tiles[tile.key] = {\n entries: [], // set of feature entries in this thread\n tile: { // subset of tile properties to pass back with feature\n key: tile.key,\n coords: tile.coords,\n style_zoom: tile.style_zoom,\n source: tile.source,\n generation: tile.generation\n }\n };\n }\n\n this.tiles[tile.key].entries.push(key);\n\n return this.map[key];\n }\n\n static makeColor(feature, tile, context) {\n var selector = this.makeEntry(tile);\n selector.feature = {\n id: feature.id,\n properties: feature.properties,\n source_name: context.source,\n source_layer: context.layer,\n layers: context.layers,\n tile: this.tiles[tile.key].tile\n };\n\n return selector.color;\n }\n\n static reset(sources) {\n // Clear specific sources\n if (Array.isArray(sources)) {\n sources.forEach(source => this.clearSource(source));\n }\n // Clear all sources\n else {\n this.tiles = {};\n this.map = {};\n this.map_size = 0;\n this.map_entry = 0;\n }\n }\n\n static clearSource(source) {\n for (let key in this.tiles) {\n if (this.tiles[key].tile.source === source) {\n this.clearTile(key);\n }\n }\n }\n\n static clearTile(key) {\n if (this.tiles[key]) {\n this.tiles[key].entries.forEach(k => delete this.map[k]);\n this.map_size -= this.tiles[key].entries.length;\n delete this.tiles[key];\n }\n }\n\n static getMapSize() {\n return this.map_size;\n }\n\n static setPrefix(prefix) {\n this.map_prefix = prefix;\n }\n\n}\n\n// Static properties\nFeatureSelection.map = {}; // this will be unique per module instance (so unique per worker)\nFeatureSelection.tiles = {}; // selection keys, by tile\nFeatureSelection.map_size = 0;\nFeatureSelection.map_entry = 0;\nFeatureSelection.map_prefix = 0; // set by worker to worker id #\nFeatureSelection.defaultColor = [0, 0, 0, 1];\n", "/*jshint worker: true */\nimport Geo from '../geo';\nimport {MethodNotImplemented} from '../utils/errors';\nimport Utils from '../utils/utils';\nimport * as URLs from '../utils/urls';\nimport log from '../utils/log';\n\nexport default class DataSource {\n\n constructor (config, sources) {\n this.config = config; // save original config\n this.sources = sources; // full set of data sources TODO: centralize these like textures?\n this.id = config.id;\n this.name = config.name;\n this.pad_scale = config.pad_scale || 0.0001; // scale tile up by small factor to cover seams\n this.default_winding = null; // winding order will adapt to data source\n this.rasters = []; // attached raster tile sources\n if (Array.isArray(config.rasters)) { // copy unique set of raster sources\n config.rasters.forEach(r => {\n if (this.rasters.indexOf(r) === -1) {\n this.rasters.push(r);\n }\n });\n }\n\n // Optional function to transform source data\n this.transform = config.transform;\n if (typeof this.transform === 'function') {\n this.transform.bind(this);\n }\n\n // Optional additional data to pass to the transform function\n this.extra_data = config.extra_data;\n\n // Optional additional scripts made available to the transform function\n // NOTE: these are loaded alongside the library when the workers are instantiated\n this.scripts = config.scripts;\n\n // overzoom will apply for zooms higher than this\n this.max_zoom = (config.max_zoom != null) ? config.max_zoom : Geo.default_source_max_zoom;\n\n // no tiles will be requested or displayed outside of these min/max values\n this.min_display_zoom = (config.min_display_zoom != null) ? config.min_display_zoom : 0;\n this.max_display_zoom = (config.max_display_zoom != null) ? config.max_display_zoom : null;\n }\n\n // Create a tile source by type, factory-style\n static create (source, sources) {\n if (DataSource.types[source.type]) {\n return new DataSource.types[source.type](source, sources);\n }\n }\n\n // Check if a data source definition changed\n static changed (source, prev_source) {\n if (!source || !prev_source) {\n return true;\n }\n\n let cur = Object.assign({}, source.config, { id: null }); // null out ids since we don't want to compare them\n let prev = Object.assign({}, prev_source.config, { id: null });\n\n return JSON.stringify(cur) !== JSON.stringify(prev);\n }\n\n // Mercator projection\n static projectData (source) {\n var timer = +new Date();\n for (var t in source.layers) {\n var num_features = source.layers[t].features.length;\n for (var f=0; f < num_features; f++) {\n var feature = source.layers[t].features[f];\n Geo.transformGeometry(feature.geometry, coord => {\n var [x, y] = Geo.latLngToMeters(coord);\n coord[0] = x;\n coord[1] = y;\n });\n }\n }\n\n if (source.debug !== undefined) {\n source.debug.projection = +new Date() - timer;\n }\n }\n\n /**\n Re-scale geometries within each source to internal tile units\n */\n static scaleData (source, {coords: {z}, min, max}) {\n let units_per_meter = Geo.unitsPerMeter(z);\n for (var t in source.layers) {\n var num_features = source.layers[t].features.length;\n for (var f=0; f < num_features; f++) {\n var feature = source.layers[t].features[f];\n Geo.transformGeometry(feature.geometry, coord => {\n coord[0] = (coord[0] - min.x) * units_per_meter;\n coord[1] = (coord[1] - min.y) * units_per_meter * -1; // flip coords positive\n });\n }\n }\n }\n\n load(dest) {\n dest.source_data = {};\n dest.source_data.layers = {};\n dest.pad_scale = this.pad_scale;\n dest.rasters = [...this.rasters]; // copy list of rasters to load for tile\n\n return this._load(dest).then((dest) => {\n // Post-processing\n for (let layer in dest.source_data.layers) {\n let data = dest.source_data.layers[layer];\n if (data && data.features) {\n data.features.forEach(feature => {\n Geo.transformGeometry(feature.geometry, coord => {\n // Flip Y coords\n coord[1] = -coord[1];\n\n // Slightly scale up tile to cover seams\n if (this.pad_scale) {\n coord[0] = Math.round(coord[0] * (1 + this.pad_scale) - (Geo.tile_scale * this.pad_scale/2));\n coord[1] = Math.round(coord[1] * (1 + this.pad_scale) - (Geo.tile_scale * this.pad_scale/2));\n }\n });\n\n // Use first encountered polygon winding order as default for data source\n this.updateDefaultWinding(feature.geometry);\n });\n }\n }\n\n dest.default_winding = this.default_winding || 'CCW';\n return dest;\n });\n }\n\n // Sub-classes must implement\n _load(dest) {\n throw new MethodNotImplemented('_load');\n }\n\n // Infer winding for data source from first ring of provided geometry\n updateDefaultWinding (geom) {\n if (this.default_winding == null) {\n if (geom.type === 'Polygon') {\n this.default_winding = Geo.ringWinding(geom.coordinates[0]);\n }\n else if (geom.type === 'MultiPolygon') {\n this.default_winding = Geo.ringWinding(geom.coordinates[0][0]);\n }\n }\n return this.default_winding;\n }\n\n // All data sources support a min zoom, tiled sources can subclass for more specific limits (e.g. bounding box)\n includesTile (coords, style_zoom) {\n // Limit by this data source\n if (coords.z < this.min_display_zoom || (this.max_display_zoom != null && style_zoom > this.max_display_zoom)) {\n return false;\n }\n\n // Limit by any dependent raster sources\n for (let r=0; r < this.rasters.length; r++) {\n const source_name = this.rasters[r];\n if (this.sources[source_name] &&\n this.sources[source_name] !== this &&\n !this.sources[source_name].includesTile(coords, coords.z)) {\n return false;\n }\n }\n\n return true;\n }\n\n // Register a new data source type, under a type name\n static register(type_class, type_name) {\n if (!type_class || !type_name) {\n return;\n }\n\n DataSource.types[type_name] = type_class;\n }\n\n}\n\nDataSource.types = {}; // set of supported data source classes, referenced by type name\n\n\n/*** Generic network loading source - abstract class ***/\n\nlet network_request_id = 0; // used to namespace URL requests\n\nexport class NetworkSource extends DataSource {\n\n constructor (source, sources) {\n super(source, sources);\n this.response_type = \"\"; // use to set explicit XHR type\n\n // Add extra URL params, and warn on duplicates\n let [url, dupes] = URLs.addParamsToURL(source.url, source.url_params);\n this.url = url;\n dupes.forEach(([param, value]) => {\n log({ level: 'warn', once: true },\n `Data source '${this.name}': parameter '${param}' already present in URL '${source.url}', ` +\n `skipping value '${param}=${value}' specified in 'url_params'`);\n });\n\n if (typeof this.url !== 'string') {\n throw Error('Network data source must provide a string `url` property');\n }\n }\n\n _load (dest) {\n let url = this.formatUrl(this.url, dest);\n\n let source_data = dest.source_data;\n source_data.url = url;\n dest.debug = dest.debug || {};\n dest.debug.network = +new Date();\n\n return new Promise((resolve, reject) => {\n source_data.error = null;\n // For testing network errors\n // var promise = Utils.io(url, 60 * 100, this.response_type);\n // if (Math.random() < .7) {\n // promise = Promise.reject(Error('fake data source error'));\n // }\n // promise.then((body) => {\n\n let request_id = (network_request_id++) + '-' + url;\n let promise = Utils.io(url, 60 * 1000, this.response_type, 'GET', {}, request_id);\n source_data.request_id = request_id;\n\n promise.then((body) => {\n dest.debug.response_size = body.length || body.byteLength;\n dest.debug.network = +new Date() - dest.debug.network;\n dest.debug.parsing = +new Date();\n this.parseSourceData(dest, source_data, body);\n dest.debug.parsing = +new Date() - dest.debug.parsing;\n resolve(dest);\n }).catch((error) => {\n source_data.error = error.stack;\n resolve(dest); // resolve request but pass along error\n });\n });\n }\n\n // Sub-classes must implement:\n\n formatUrl (url_template, dest) {\n throw new MethodNotImplemented('formatUrl');\n }\n\n parseSourceData (dest, source, reponse) {\n throw new MethodNotImplemented('parseSourceData');\n }\n}\n\n\n/*** Generic network tile loading - abstract class ***/\n\nexport class NetworkTileSource extends NetworkSource {\n\n constructor (source, sources) {\n super(source, sources);\n\n this.tiled = true;\n this.parseBounds(source);\n\n // indicates if source should build geometry tiles, enabled for sources referenced in the scene's layers,\n // and left disabled for sources that are never referenced, or only used as raster textures\n this.builds_geometry_tiles = false;\n\n this.tms = (source.tms === true); // optionally flip tile coords for TMS\n\n // optional list of subdomains to round-robin through\n if (this.url.search('{s}') > -1) {\n if (Array.isArray(source.url_subdomains) && source.url_subdomains.length > 0) {\n this.url_subdomains = source.url_subdomains;\n this.next_url_subdomain = 0;\n }\n else {\n log({ level: 'warn', once: true },\n `Data source '${this.name}': source URL includes '\\{s\\}' subdomain marker ('${this.url}'), but no subdomains ` +\n `were specified in 'url_subdomains' parameter`);\n }\n }\n }\n\n // Get bounds from source config parameters\n parseBounds (source) {\n if (Array.isArray(source.bounds) && source.bounds.length === 4) {\n this.bounds = source.bounds;\n let [w, s, e, n] = this.bounds;\n this.bounds_meters = {\n min: Geo.latLngToMeters([w, n]),\n max: Geo.latLngToMeters([e, s]),\n };\n this.bounds_tiles = { min: {}, max: {} }; // max tile bounds per zoom (lazily evaluated)\n }\n }\n\n // Returns false if tile is outside data source's bounds, true if within\n checkBounds (coords) {\n // Check tile bounds\n if (this.bounds) {\n coords = Geo.wrapTile(coords, { x: true });\n\n let min = this.bounds_tiles.min[coords.z];\n if (!min) {\n min = this.bounds_tiles.min[coords.z] = Geo.tileForMeters(this.bounds_meters.min, coords.z);\n }\n\n let max = this.bounds_tiles.max[coords.z];\n if (!max) {\n max = this.bounds_tiles.max[coords.z] = Geo.tileForMeters(this.bounds_meters.max, coords.z);\n }\n\n if (coords.x < min.x || coords.x > max.x ||\n coords.y < min.y || coords.y > max.y) {\n return false;\n }\n }\n return true;\n }\n\n includesTile (coords, style_zoom) {\n if (!super.includesTile(coords, style_zoom)) {\n return false;\n }\n\n // Check tile bounds\n if (!this.checkBounds(coords)) {\n return false;\n }\n return true;\n }\n\n formatUrl(url_template, tile) {\n let coords = Geo.wrapTile(tile.coords, { x: true });\n\n if (this.tms) {\n coords.y = Math.pow(2, coords.z) - 1 - coords.y; // optionally flip tile coords for TMS\n }\n\n let url = url_template.replace('{x}', coords.x).replace('{y}', coords.y).replace('{z}', coords.z);\n\n if (this.url_subdomains != null) {\n url = url.replace('{s}', this.url_subdomains[this.next_url_subdomain]);\n this.next_url_subdomain = (this.next_url_subdomain + 1) % this.url_subdomains.length;\n }\n return url;\n }\n\n // Checks for the x/y/z tile pattern in URL template\n urlHasTilePattern(url) {\n return url &&\n url.search('{x}') > -1 &&\n url.search('{y}') > -1 &&\n url.search('{z}') > -1;\n }\n\n}\n", "import log from '../utils/log';\nimport DataSource, {NetworkSource, NetworkTileSource} from './data_source';\nimport {decodeMultiPolygon} from './mvt';\nimport Geo from '../geo';\n\n// For tiling GeoJSON client-side\nimport geojsonvt from 'geojson-vt';\n\n/**\n GeoJSON standalone (non-tiled) source\n Uses geojson-vt split into tiles client-side\n*/\n\nexport class GeoJSONSource extends NetworkSource {\n\n constructor(source, sources) {\n super(source, sources);\n this.load_data = null;\n this.tile_indexes = {}; // geojson-vt tile indices, by layer name\n this.max_zoom = Math.max(this.max_zoom || 0, 15); // TODO: max zoom < 15 causes artifacts/no-draw at 20, investigate\n this.pad_scale = 0; // we don't want padding on auto-tiled sources\n }\n\n _load(dest) {\n if (!this.load_data) {\n this.load_data = super._load({ source_data: { layers: {} } }).then(data => {\n // Warn and continue on data source error\n if (data.source_data.error) {\n log('warn', `data source load error(s) for source '${this.name}', URL '${this.url}': ${data.source_data.error}`);\n }\n\n let layers = data.source_data.layers;\n for (let layer_name in layers) {\n this.tile_indexes[layer_name] = geojsonvt(layers[layer_name], {\n maxZoom: this.max_zoom, // max zoom to preserve detail on\n tolerance: 3, // simplification tolerance (higher means simpler)\n extent: Geo.tile_scale, // tile extent (both width and height)\n buffer: 0.0001 // tile buffer on each side\n });\n }\n\n this.loaded = true;\n return data;\n });\n }\n\n return this.load_data.then(() => {\n for (let layer_name in this.tile_indexes) {\n dest.source_data.layers[layer_name] = this.getTileFeatures(dest, layer_name);\n }\n return dest;\n });\n }\n\n getTileFeatures(tile, layer_name) {\n let coords = Geo.wrapTile(tile.coords, { x: true });\n\n // request a particular tile\n let t = this.tile_indexes[layer_name].getTile(coords.z, coords.x, coords.y);\n\n // Convert from MVT-style JSON struct to GeoJSON\n let collection;\n if (t && t.features) {\n collection = {\n type: 'FeatureCollection',\n features: []\n };\n\n for (let i=0; i < t.features.length; i++) {\n const feature = t.features[i];\n\n // GeoJSON feature\n let f = {\n type: 'Feature',\n geometry: {},\n properties: feature.tags\n };\n\n if (feature.type === 1) {\n f.geometry.coordinates = feature.geometry.map(coord => [coord[0], coord[1]]);\n f.geometry.type = 'MultiPoint';\n }\n else if (feature.type === 2 || feature.type === 3) {\n f.geometry.coordinates = feature.geometry.map(ring =>\n ring.map(coord => [coord[0], coord[1]])\n );\n\n if (feature.type === 2) {\n f.geometry.type = 'MultiLineString';\n }\n else {\n f.geometry = decodeMultiPolygon(f.geometry); // un-flatten rings\n if (f.geometry == null) { // skip polys that couldn't be decoded (e.g. degenerate)\n continue;\n }\n }\n }\n else {\n continue;\n }\n\n collection.features.push(f);\n }\n }\n\n return collection;\n }\n\n formatUrl (dest) {\n return this.url;\n }\n\n parseSourceData (tile, source, response) {\n let parsed_response = JSON.parse(response);\n let layers = this.getLayers(parsed_response);\n source.layers = this.preprocessLayers(layers);\n }\n\n preprocessLayers (layers){\n for (let key in layers) {\n let layer = layers[key];\n this.preprocessFeatures(layer.features);\n }\n\n // Apply optional data transform\n if (typeof this.transform === 'function') {\n if (Object.keys(layers).length === 1 && layers._default) {\n layers._default = this.transform(layers._default, this.extra_data); // single-layer\n }\n else {\n layers = this.transform(layers, this.extra_data); // multiple layers\n }\n }\n\n return layers;\n }\n\n // Preprocess features. Currently used to add a new \"centroid\" feature for polygon labeling\n preprocessFeatures (features) {\n // Define centroids for polygons for centroid label placement\n // Avoids redundant label placement for each generated tile at higher zoom levels\n if (this.config.generate_label_centroids){\n let features_centroid = [];\n let centroid_properties = {\"label_placement\" : true};\n\n features.forEach(feature => {\n if (feature.geometry == null) {\n return; // no geometry (which is valid GeoJSON)\n }\n\n let coordinates, centroid_feature;\n switch (feature.geometry.type) {\n case 'Polygon':\n coordinates = feature.geometry.coordinates;\n centroid_feature = getCentroidFeatureForPolygon(coordinates, feature.properties, centroid_properties);\n features_centroid.push(centroid_feature);\n break;\n case 'MultiPolygon':\n // Add centroid feature for largest polygon\n coordinates = feature.geometry.coordinates;\n let max_area = -Infinity;\n let max_area_index = 0;\n for (let index = 0; index < coordinates.length; index++) {\n let area = Geo.polygonArea(coordinates[index]);\n if (area > max_area) {\n max_area = area;\n max_area_index = index;\n }\n }\n centroid_feature = getCentroidFeatureForPolygon(coordinates[max_area_index], feature.properties, centroid_properties);\n features_centroid.push(centroid_feature);\n break;\n }\n });\n\n // append centroid features to features array\n features_centroid = features_centroid.filter(x => x); // remove null features\n Array.prototype.push.apply(features, features_centroid);\n }\n\n return features;\n }\n\n // Detect single or multiple layers in returned data\n getLayers (data) {\n if (data.type === 'Feature') {\n return {\n _default: {\n type: 'FeatureCollection',\n features: [data]\n }\n };\n }\n else if (data.type === 'FeatureCollection') {\n return {\n _default: data\n };\n }\n else {\n return data;\n }\n }\n\n}\n\n/**\n GeoJSON vector tiles\n @class GeoJSONTileSource\n*/\nexport class GeoJSONTileSource extends NetworkTileSource {\n\n constructor(source, sources) {\n super(source, sources);\n\n // Check for URL tile pattern, if not found, treat as standalone GeoJSON/TopoJSON object\n if (!this.urlHasTilePattern(this.url)) {\n // Check instance type from parent class\n if (source.type === 'GeoJSON') {\n // Replace instance type\n return new GeoJSONSource(source);\n }\n else {\n // Pass back to parent class to instantiate\n return null;\n }\n }\n return this;\n }\n\n parseSourceData (tile, source, response) {\n let data = JSON.parse(response);\n this.prepareGeoJSON(data, tile, source);\n }\n\n prepareGeoJSON (data, tile, source) {\n // Apply optional data transform\n if (typeof this.transform === 'function') {\n data = this.transform(data, this.extra_data);\n }\n\n source.layers = GeoJSONSource.prototype.getLayers(data);\n\n // A \"synthetic\" tile that adjusts the tile min anchor to account for tile longitude wrapping\n let anchor = {\n coords: tile.coords,\n min: Geo.metersForTile(Geo.wrapTile(tile.coords, { x: true }))\n };\n\n DataSource.projectData(source); // mercator projection\n DataSource.scaleData(source, anchor); // re-scale from meters to local tile coords\n }\n\n}\n\nDataSource.register(GeoJSONTileSource, 'GeoJSON'); // prefered shorter name\n\n// Helper function to create centroid point feature from polygon coordinates and provided feature meta-data\nfunction getCentroidFeatureForPolygon (coordinates, properties, newProperties) {\n let centroid = Geo.centroid(coordinates);\n if (!centroid) {\n return;\n }\n\n // clone properties and mixix newProperties\n let centroid_properties = {};\n Object.assign(centroid_properties, properties, newProperties);\n\n return {\n type: \"Feature\",\n properties: centroid_properties,\n geometry: {\n type: \"Point\",\n coordinates: centroid\n }\n };\n}\n", @@ -517,16 +517,16 @@ "import {StyleParser} from './style_parser';\nimport Utils from '../utils/utils';\nimport log from '../utils/log';\nimport mergeObjects from '../utils/merge';\nimport {buildFilter} from './filter';\n\n// N.B.: 'visible' is legacy compatibility for 'enabled'\nexport const reserved = ['filter', 'draw', 'visible', 'enabled', 'data'];\n\nlet layer_cache = {};\nexport function layerCache () {\n return layer_cache;\n}\n\nfunction cacheKey (layers) {\n if (layers.length > 1) {\n var k = layers[0];\n for (var i=1; i < layers.length; i++) {\n k += '/' + layers[i];\n }\n\n return k;\n }\n return layers[0];\n}\n\n// Merge matching layer trees into a final draw group\nexport function mergeTrees(matchingTrees, group) {\n let draws, treeDepth = 0;\n\n // Find deepest tree\n for (let t=0; t < matchingTrees.length; t++) {\n if (matchingTrees[t].length > treeDepth) {\n treeDepth = matchingTrees[t].length;\n }\n }\n\n // No layers to parse\n if (treeDepth === 0) {\n return null;\n }\n\n // Merged draw group object\n let draw = {\n visible: true, // visible by default\n };\n\n // Iterate trees in parallel\n for (let x=0; x < treeDepth; x++) {\n // Pull out the requested draw group, for each tree, at this depth\n draws = matchingTrees.map(tree => tree[x] && tree[x][group]);\n if (draws.length === 0) {\n continue;\n }\n\n // Sort by layer name before merging, so layers are applied deterministically\n // when multiple layers modify the same properties\n draws.sort((a, b) => (a && a.layer_name) > (b && b.layer_name) ? 1 : -1);\n\n // Merge draw objects\n mergeObjects(draw, ...draws);\n\n // Remove layer names, they were only used transiently to sort and calculate final layer\n // (final merged names will not be accurate since only one tree can win)\n delete draw.layer_name;\n }\n\n // Short-circuit if not visible\n if (draw.visible === false) {\n return null;\n }\n\n return draw;\n}\n\nconst blacklist = ['any', 'all', 'not', 'none'];\n\nclass Layer {\n\n constructor({ layer, name, parent, draw, visible, enabled, filter, styles }) {\n this.id = Layer.id++;\n this.config_data = layer.data;\n this.parent = parent;\n this.name = name;\n this.full_name = this.parent ? (this.parent.full_name + ':' + this.name) : this.name;\n this.draw = draw;\n this.filter = filter;\n this.styles = styles;\n this.is_built = false;\n\n enabled = (enabled === undefined) ? visible : enabled; // `visible` property is backwards compatible for `enabled`\n if (this.parent && this.parent.visible === false) {\n this.enabled = false; // all descendants of disabled layer are also disabled\n }\n else {\n this.enabled = (enabled !== false); // layer is enabled unless explicitly set to disabled\n }\n\n // Denormalize layer name to draw groups\n if (this.draw) {\n for (let group in this.draw) {\n this.draw[group] = (this.draw[group] == null) ? {} : this.draw[group];\n if (typeof this.draw[group] !== 'object') {\n // Invalid draw group\n let msg = `Draw group '${group}' for layer ${this.full_name} is invalid, must be an object, `;\n msg += `but was set to \\`${group}: ${this.draw[group]}\\` instead`;\n log('warn', msg); // TODO: fire external event that clients to subscribe to\n\n delete this.draw[group];\n }\n else {\n this.draw[group].layer_name = this.full_name;\n }\n }\n }\n }\n\n build () {\n log('trace', `Building layer '${this.full_name}'`);\n this.buildFilter();\n this.buildDraw();\n this.is_built = true;\n }\n\n buildDraw() {\n this.draw = Utils.stringsToFunctions(this.draw, StyleParser.wrapFunction);\n this.calculatedDraw = calculateDraw(this);\n }\n\n buildFilter() {\n this.filter_original = this.filter;\n this.filter = Utils.stringsToFunctions(this.filter, StyleParser.wrapFunction);\n\n let type = typeof this.filter;\n if (this.filter != null && type !== 'object' && type !== 'function') {\n // Invalid filter\n let msg = `Filter for layer ${this.full_name} is invalid, filter value must be an object or function, `;\n msg += `but was set to \\`filter: ${this.filter}\\` instead`;\n log('warn', msg); // TODO: fire external event that clients to subscribe to\n return;\n }\n\n try {\n this.buildZooms();\n this.buildPropMatches();\n if (this.filter != null && (typeof this.filter === 'function' || Object.keys(this.filter).length > 0)) {\n this.filter = buildFilter(this.filter, FilterOptions);\n }\n else {\n this.filter = null;\n }\n }\n catch(e) {\n // Invalid filter\n let msg = `Filter for layer ${this.full_name} is invalid, \\`filter: ${JSON.stringify(this.filter)}\\` `;\n msg += `failed with error '${e.message}', stack trace: ${e.stack}`;\n log('warn', msg); // TODO: fire external event that clients to subscribe to\n }\n }\n\n // Zooms often cull large swaths of the layer tree, so they get special treatment and are checked first\n buildZooms() {\n let zoom = this.filter && this.filter.$zoom;\n let ztype = typeof zoom;\n if (zoom != null && ztype !== 'function') { // don't accelerate function-based filters\n this.zooms = {};\n\n if (ztype === 'number') {\n this.zooms[zoom] = true;\n }\n else if (Array.isArray(zoom)) {\n for (let z=0; z < zoom.length; z++) {\n this.zooms[zoom[z]] = true;\n }\n }\n else if (ztype === 'object' && (zoom.min != null || zoom.max != null)) {\n let zmin = zoom.min || 0;\n let zmax = zoom.max || 25; // TODO: replace constant for max possible zoom\n for (let z=zmin; z < zmax; z++) {\n this.zooms[z] = true;\n }\n }\n\n delete this.filter.$zoom; // don't process zoom through usual generic filter logic\n }\n }\n\n buildPropMatches() {\n if (!this.filter || Array.isArray(this.filter) || typeof this.filter === 'function') {\n return;\n }\n\n Object.keys(this.filter).forEach(key => {\n if (blacklist.indexOf(key) === -1) {\n let val = this.filter[key];\n let type = typeof val;\n let array = Array.isArray(val);\n\n if (!(array || type === 'string' || type === 'number')) {\n return;\n }\n\n if (key[0] === '$') {\n // Context property\n this.context_prop_matches = this.context_prop_matches || [];\n this.context_prop_matches.push([key.substring(1), array ? val : [val]]);\n }\n else {\n // Feature property\n this.feature_prop_matches = this.feature_prop_matches || [];\n this.feature_prop_matches.push([key, array ? val : [val]]);\n }\n\n delete this.filter[key];\n }\n });\n }\n\n doPropMatches (context) {\n if (this.feature_prop_matches) {\n for (let r=0; r < this.feature_prop_matches.length; r++) {\n let match = this.feature_prop_matches[r];\n let val = context.feature.properties[match[0]];\n if (val == null || match[1].indexOf(val) === -1) {\n return false;\n }\n }\n }\n\n if (this.context_prop_matches) {\n for (let r=0; r < this.context_prop_matches.length; r++) {\n let match = this.context_prop_matches[r];\n let val = context[match[0]];\n if (val == null || match[1].indexOf(val) === -1) {\n return false;\n }\n }\n }\n\n return true;\n }\n\n doesMatch (context) {\n if (!this.enabled) {\n return false;\n }\n\n if (!this.is_built) {\n this.build();\n }\n\n // zoom pre-filter: skip rest of filter if out of layer zoom range\n if (this.zooms != null && !this.zooms[context.zoom]) {\n return false;\n }\n\n // direct feature property matches\n if (!this.doPropMatches(context)) {\n return false;\n }\n\n // any remaining filter (more complex matches or dynamic function)\n let match;\n if (this.filter instanceof Function){\n try {\n match = this.filter(context);\n }\n catch (error) {\n // Filter function error\n let msg = `Filter for this ${this.full_name}: \\`filter: ${this.filter_original}\\` `;\n msg += `failed with error '${error.message}', stack trace: ${error.stack}`;\n log('error', msg, context.feature);\n }\n }\n else {\n match = this.filter == null;\n }\n\n if (match) {\n if (this.children_to_parse) {\n parseLayerChildren(this, this.children_to_parse, this.styles);\n delete this.children_to_parse;\n }\n\n return true;\n }\n return false;\n }\n\n}\n\nLayer.id = 0;\n\n\nexport class LayerLeaf extends Layer {\n constructor (config) {\n super(config);\n this.is_leaf = true;\n }\n\n}\n\nexport class LayerTree extends Layer {\n constructor (config) {\n super(config);\n this.is_tree = true;\n this.layers = config.layers || [];\n }\n\n addLayer (layer) {\n this.layers.push(layer);\n }\n\n buildDrawGroups (context) {\n let layers = [], layer_ids = [];\n matchFeature(context, [this], layers, layer_ids);\n\n if (layers.length > 0) {\n let cache_key = cacheKey(layer_ids);\n\n // Only evaluate each layer combination once (undefined means not yet evaluated,\n // null means evaluated with no draw object)\n if (layer_cache[cache_key] === undefined) {\n // Find all the unique visible draw blocks for this layer tree\n let draw_groups = layers.map(x => x && x.visible !== false && x.calculatedDraw);\n let draw_keys = {};\n\n for (let r=0; r < draw_groups.length; r++) {\n let stack = draw_groups[r];\n if (!stack) {\n continue;\n }\n for (let g=0; g < stack.length; g++) {\n let group = stack[g];\n for (let key in group) {\n draw_keys[key] = true;\n }\n }\n }\n\n // Calculate each draw group\n for (let draw_key in draw_keys) {\n layer_cache[cache_key] = layer_cache[cache_key] || {};\n layer_cache[cache_key][draw_key] = mergeTrees(draw_groups, draw_key);\n\n // Only save the ones that weren't null\n if (!layer_cache[cache_key][draw_key]) {\n delete layer_cache[cache_key][draw_key];\n }\n else {\n layer_cache[cache_key][draw_key].key = cache_key + '/' + draw_key;\n layer_cache[cache_key][draw_key].layers = layers.map(x => x && x.full_name);\n layer_cache[cache_key][draw_key].group = draw_key;\n }\n }\n\n // No layers evaluated\n if (layer_cache[cache_key] && Object.keys(layer_cache[cache_key]).length === 0) {\n layer_cache[cache_key] = null;\n }\n }\n return layer_cache[cache_key];\n }\n }\n\n}\n\nconst FilterOptions = {\n // Handle unit conversions on filter ranges\n rangeTransform(val) {\n if (typeof val === 'string' && val.trim().slice(-3) === 'px2') {\n return `${parseFloat(val)} * context.meters_per_pixel_sq`;\n }\n return val;\n }\n};\n\nfunction isReserved(key) {\n return reserved.indexOf(key) > -1;\n}\n\nfunction isEmpty(obj) {\n return Object.keys(obj).length === 0;\n}\n\nexport function groupProps(obj) {\n let reserved = {}, children = {};\n\n for (let key in obj) {\n if (isReserved(key)) {\n reserved[key] = obj[key];\n } else {\n children[key] = obj[key];\n }\n }\n return [reserved, children];\n}\n\nexport function calculateDraw(layer) {\n\n let draw = [];\n\n if (layer.parent) {\n let cs = layer.parent.calculatedDraw || [];\n draw.push(...cs);\n }\n\n draw.push(layer.draw);\n return draw;\n}\n\nexport function parseLayerNode(name, layer, parent, styles) {\n\n layer = (layer == null) ? {} : layer;\n\n let properties = { name, layer, parent, styles };\n let [reserved, children] = groupProps(layer);\n let empty = isEmpty(children);\n let Create;\n\n if (empty && parent != null) {\n Create = LayerLeaf;\n } else {\n Create = LayerTree;\n }\n\n let r = new Create(Object.assign(properties, reserved));\n\n // only process child layers if this layer is enabled\n if (r.enabled) {\n if (parent) {\n parent.addLayer(r);\n }\n r.children_to_parse = empty ? null : children;\n }\n\n return r;\n}\n\nfunction parseLayerChildren (parent, children, styles) {\n for (let key in children) {\n let child = children[key];\n if (typeof child === 'object' && !Array.isArray(child)) {\n parseLayerNode(key, child, parent, styles);\n } else {\n // Invalid layer\n let msg = `Layer value must be an object: cannot create layer '${key}: ${JSON.stringify(child)}'`;\n msg += `, under parent layer '${parent.full_name}'.`;\n\n // If the parent is a style name, this may be an incorrectly nested layer\n if (styles[parent.name]) {\n msg += ` The parent name '${parent.name}' is also the name of a style, did you mean to create a 'draw' group`;\n if (parent.parent) {\n msg += ` under '${parent.parent.name}'`;\n }\n msg += ` instead?`;\n }\n log('warn', msg); // TODO: fire external event that clients to subscribe to\n }\n }\n}\n\n\nexport function parseLayers (layers, styles) {\n layer_cache = {}; // clear layer cache\n let layer_trees = {};\n\n for (let key in layers) {\n let layer = layers[key];\n if (layer) {\n layer_trees[key] = parseLayerNode(key, layer, null, styles);\n }\n }\n\n return layer_trees;\n}\n\nexport function matchFeature(context, layers, collected_layers, collected_layers_ids) {\n let matched = false;\n let childMatched = false;\n\n if (layers.length === 0) { return; }\n\n for (let r=0; r < layers.length; r++) {\n let current = layers[r];\n\n if (current.is_leaf) {\n if (current.doesMatch(context)) {\n matched = true;\n collected_layers.push(current);\n collected_layers_ids.push(current.id);\n }\n\n } else if (current.is_tree) {\n if (current.doesMatch(context)) {\n matched = true;\n\n childMatched = matchFeature(\n context,\n current.layers,\n collected_layers,\n collected_layers_ids\n );\n\n if (!childMatched) {\n collected_layers.push(current);\n collected_layers_ids.push(current.id);\n }\n }\n }\n }\n\n return matched;\n}\n", "// Renders an array specifying a line pattern of alternating dashes and spaces,\n// similar to an SVG `dasharray` or Canvas setLineDash(), into a byte array of RGBA pixels\n// Returns:\n// {\n// pixel: rendered image in Uint8Array buffer\n// length: pixel length of rendered dash pattern (sum of all dashes and spaces)\n// }\n//\n// https://www.w3.org/TR/SVG/painting.html#StrokeDasharrayProperty\n// https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray\n// https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/setLineDash\n\nconst default_dash_color = [255, 255, 255, 255];\nconst default_background_color = [0, 0, 0, 0];\n\nexport default function renderDashArray (pattern, options = {}) {\n const dash_pixel = options.dash_color || default_dash_color;\n const background_color = options.background_color || default_background_color;\n const dashes = pattern;\n const scale = options.scale || 1;\n\n // If pattern is odd, repeat it to make it even (see SVG spec)\n if (dashes.length % 2 === 1) {\n Array.prototype.push.apply(dashes, dashes);\n }\n\n let dash = true;\n let pixels = [];\n for (let i=0; i < dashes.length; i++) {\n let segment = Math.floor(dashes[i] * scale);\n for (let s=0; s < segment; s++) {\n Array.prototype.push.apply(pixels, dash ? dash_pixel : background_color);\n }\n dash = !dash; // alternate between dashes and spaces\n }\n\n pixels = new Uint8Array(pixels); // convert to typed array\n const length = pixels.length / 4; // one RGBA byte sequences to one pixel\n\n return { pixels, length };\n}\n", "// Line rendering style\n\nimport {Style} from '../style';\nimport {StyleParser} from '../style_parser';\nimport gl from '../../gl/constants'; // web workers don't have access to GL context, so import all GL constants\nimport Texture from '../../gl/texture';\nimport VertexLayout from '../../gl/vertex_layout';\nimport {buildPolylines} from '../../builders/polylines';\nimport renderDashArray from './dasharray';\nimport Geo from '../../geo';\nimport {shaderSrc_polygonsVertex, shaderSrc_polygonsFragment} from '../polygons/polygons';\n\nexport var Lines = Object.create(Style);\n\nObject.assign(Lines, {\n name: 'lines',\n built_in: true,\n vertex_shader_src: shaderSrc_polygonsVertex,\n fragment_shader_src: shaderSrc_polygonsFragment,\n selection: true, // turn feature selection on\n\n init() {\n Style.init.apply(this, arguments);\n\n // Basic attributes, others can be added (see texture UVs below)\n var attribs = [\n { name: 'a_position', size: 4, type: gl.SHORT, normalized: false },\n { name: 'a_extrude', size: 4, type: gl.SHORT, normalized: false },\n { name: 'a_color', size: 4, type: gl.UNSIGNED_BYTE, normalized: true }\n ];\n\n // Tell the shader we want a order in vertex attributes, and to extrude lines\n this.defines.TANGRAM_LAYER_ORDER = true;\n this.defines.TANGRAM_EXTRUDE_LINES = true;\n\n // Optional feature selection\n if (this.selection) {\n attribs.push({ name: 'a_selection_color', size: 4, type: gl.UNSIGNED_BYTE, normalized: true });\n }\n\n // Optional line texture or dash array\n // (latter will be rendered at compile-time, when GL context available)\n if (this.texture || this.dash) {\n this.texcoords = true;\n }\n\n // Optional texture UVs\n if (this.texcoords) {\n this.defines.TANGRAM_TEXTURE_COORDS = true;\n\n // Scaling factor to add precision to line texture V coordinate packed as normalized short\n this.defines.TANGRAM_DASH_SCALE = 1;\n this.defines.TANGRAM_V_SCALE_ADJUST = Geo.tile_scale * this.defines.TANGRAM_DASH_SCALE;\n\n // Add vertex attribute for UVs only when needed\n attribs.push({ name: 'a_texcoord', size: 2, type: gl.UNSIGNED_SHORT, normalized: true });\n }\n\n this.vertex_layout = new VertexLayout(attribs);\n\n // Additional single-allocated object used for holding outline style as it is processed\n // Separate from this.feature_style so that outline properties do not overwrite calculated\n // inline properties (outline call is made *within* the inline call)\n this.outline_feature_style = {};\n this.inline_feature_style = this.feature_style; // save reference to main computed style object\n },\n\n // Override\n compileSetup () {\n if (!this.compile_setup) {\n this.parseLineTexture();\n }\n return Style.compileSetup.apply(this, arguments);\n },\n\n // Optionally apply a dash array pattern to this line\n parseLineTexture () {\n // Specify a line pattern\n if (this.dash) {\n // Optional background color for dash pattern (defaults transparent)\n if (this.dash_background_color) {\n this.dash_background_color = StyleParser.parseColor(this.dash_background_color);\n this.defines.TANGRAM_LINE_BACKGROUND_COLOR =\n `vec3(${this.dash_background_color.slice(0, 3).join(', ')})`;\n }\n\n // Adjust texcoord scale to allow for dash patterns that are a fraction of line width\n this.defines.TANGRAM_DASH_SCALE = 20;\n this.defines.TANGRAM_V_SCALE_ADJUST = Geo.tile_scale * this.defines.TANGRAM_DASH_SCALE;\n\n // Render line pattern\n const dash = renderDashArray(this.dash, { scale: this.defines.TANGRAM_DASH_SCALE });\n this.texture = '_' + this.name + '_dasharray';\n Texture.create(this.gl, this.texture, {\n data: dash.pixels,\n height: dash.length,\n width: 1,\n filtering: 'nearest'\n });\n }\n\n // Specify a line texture (either directly, or rendered dash pattern from above)\n if (this.texture) {\n this.defines.TANGRAM_LINE_TEXTURE = true;\n this.shaders.uniforms = this.shaders.uniforms || {};\n this.shaders.uniforms.u_texture = this.texture;\n this.shaders.uniforms.u_texture_ratio = 1;\n\n // update line pattern aspect ratio after texture loads\n Texture.getInfo(this.texture).then(texture => {\n if (texture) {\n this.shaders.uniforms.u_texture_ratio = texture.height / texture.width;\n }\n });\n }\n },\n\n // Calculate width at zoom given in `context`\n calcWidth (width, context) {\n return (width && StyleParser.evalCachedDistanceProperty(width, context)) || 0;\n },\n\n // Calculate width at next zoom (used for line width interpolation)\n calcWidthNextZoom (width, context) {\n context.zoom++;\n let val = this.calcWidth(width, context);\n context.zoom--;\n return val;\n },\n\n _parseFeature (feature, draw, context) {\n var style = this.feature_style;\n\n // line width in meters\n let width = this.calcWidth(draw.width, context);\n if (width < 0) {\n return; // skip lines with negative width\n }\n let next_width = this.calcWidthNextZoom(draw.next_width, context);\n\n if ((width === 0 && next_width === 0) || next_width < 0) {\n return; // skip lines that don't interpolate to a positive value at next zoom\n }\n\n // convert to units and relative change from previous zoom\n // NB: multiply by 2 because a given width is twice as big in screen space at the next zoom\n style.width = width * context.units_per_meter_overzoom;\n style.next_width = (next_width * 2) - width;\n style.next_width *= context.units_per_meter_overzoom;\n style.next_width /= 2; // NB: divide by 2 because extrusion width is halved in builder - remove?\n\n style.color = this.parseColor(draw.color, context);\n if (!style.color) {\n return;\n }\n\n // height defaults to feature height, but extrude style can dynamically adjust height by returning a number or array (instead of a boolean)\n style.z = (draw.z && StyleParser.evalCachedDistanceProperty(draw.z || 0, context)) || StyleParser.defaults.z;\n style.height = feature.properties.height || StyleParser.defaults.height;\n style.extrude = StyleParser.evalProperty(draw.extrude, context);\n if (style.extrude) {\n if (typeof style.extrude === 'number') {\n style.height = style.extrude;\n }\n else if (Array.isArray(style.extrude)) {\n style.height = style.extrude[1];\n }\n }\n\n // Raise line height if extruded\n if (style.extrude && style.height) {\n style.z += style.height;\n }\n\n style.z *= Geo.height_scale; // provide sub-meter precision of height values\n style.height *= Geo.height_scale;\n\n style.cap = draw.cap;\n style.join = draw.join;\n style.miter_limit = draw.miter_limit;\n style.tile_edges = draw.tile_edges; // usually activated for debugging, or rare visualization needs\n\n // Construct an outline style\n // Reusable outline style object, marked as already wrapped in cache objects (preprocessed = true)\n style.outline = style.outline || { width: {}, next_width: {}, preprocessed: true };\n\n if (draw.outline && draw.outline.visible !== false && draw.outline.color && draw.outline.width) {\n // outline width in meters\n // NB: multiply by 2 because outline is applied on both sides of line\n let outline_width = this.calcWidth(draw.outline.width, context) * 2;\n let outline_next_width = this.calcWidthNextZoom(draw.outline.next_width, context) * 2;\n\n if ((outline_width === 0 && outline_next_width === 0) || outline_width < 0 || outline_next_width < 0) {\n // skip lines that don't interpolate between zero or greater width\n style.outline.width.value = null;\n style.outline.next_width.value = null;\n style.outline.color = null;\n }\n else {\n // Maintain consistent outline width around the line fill\n style.outline.width.value = outline_width + width;\n style.outline.next_width.value = outline_next_width + next_width;\n\n style.outline.color = draw.outline.color;\n style.outline.cap = draw.outline.cap || draw.cap;\n style.outline.join = draw.outline.join || draw.join;\n style.outline.miter_limit = draw.outline.miter_limit || draw.miter_limit;\n style.outline.style = draw.outline.style || this.name;\n\n // Explicitly defined outline order, or inherited from inner line\n if (draw.outline.order) {\n style.outline.order = this.parseOrder(draw.outline.order, context);\n }\n else {\n style.outline.order = style.order;\n }\n\n // Don't let outline be above inner line\n if (style.outline.order > style.order) {\n style.outline.order = style.order;\n }\n\n // Outlines are always at half-layer intervals to avoid conflicting with inner lines\n style.outline.order -= 0.5;\n }\n }\n else {\n style.outline.width.value = null;\n style.outline.next_width.value = null;\n style.outline.color = null;\n }\n\n return style;\n },\n\n _preprocess (draw) {\n draw.color = StyleParser.createColorPropertyCache(draw.color);\n draw.width = StyleParser.createPropertyCache(draw.width, StyleParser.parseUnits);\n draw.next_width = StyleParser.createPropertyCache(draw.width, StyleParser.parseUnits); // width will be computed for next zoom\n draw.z = StyleParser.createPropertyCache(draw.z, StyleParser.parseUnits);\n\n if (draw.outline) {\n draw.outline.color = StyleParser.createColorPropertyCache(draw.outline.color);\n draw.outline.width = StyleParser.createPropertyCache(draw.outline.width, StyleParser.parseUnits);\n draw.outline.next_width = StyleParser.createPropertyCache(draw.outline.width, StyleParser.parseUnits); // width re-computed for next zoom\n }\n return draw;\n },\n\n /**\n * A \"template\" that sets constant attibutes for each vertex, which is then modified per vertex or per feature.\n * A plain JS array matching the order of the vertex layout.\n */\n makeVertexTemplate(style) {\n let i = 0;\n\n // position - x & y coords will be filled in per-vertex below\n this.vertex_template[i++] = 0;\n this.vertex_template[i++] = 0;\n this.vertex_template[i++] = style.z || 0;\n\n // layer order - w coord of 'position' attribute (for packing efficiency)\n this.vertex_template[i++] = this.scaleOrder(style.order);\n\n // extrusion vector\n this.vertex_template[i++] = 0;\n this.vertex_template[i++] = 0;\n this.vertex_template[i++] = 0;\n\n // scaling to previous and next zoom\n this.vertex_template[i++] = style.next_width;\n\n // color\n this.vertex_template[i++] = style.color[0] * 255;\n this.vertex_template[i++] = style.color[1] * 255;\n this.vertex_template[i++] = style.color[2] * 255;\n this.vertex_template[i++] = style.color[3] * 255;\n\n // selection color\n if (this.selection) {\n this.vertex_template[i++] = style.selection_color[0] * 255;\n this.vertex_template[i++] = style.selection_color[1] * 255;\n this.vertex_template[i++] = style.selection_color[2] * 255;\n this.vertex_template[i++] = style.selection_color[3] * 255;\n }\n\n // Add texture UVs to template only if needed\n if (this.texcoords) {\n this.vertex_template[i++] = 0;\n this.vertex_template[i++] = 0;\n }\n\n return this.vertex_template;\n },\n\n buildLines(lines, style, vertex_data, context, options) {\n // Outline (build first so that blended geometry without a depth test is drawn first/under the inner line)\n this.feature_style = this.outline_feature_style; // swap in outline-specific style holder\n if (style.outline && style.outline.color != null && style.outline.width.value != null) {\n var outline_style = this.styles[style.outline.style];\n if (outline_style) {\n outline_style.addFeature(context.feature, style.outline, context);\n }\n }\n\n // Main line\n this.feature_style = this.inline_feature_style; // restore calculated style for inline\n let vertex_template = this.makeVertexTemplate(style);\n return buildPolylines(\n lines,\n style.width,\n vertex_data,\n vertex_template,\n {\n cap: style.cap,\n join: style.join,\n miter_limit: style.miter_limit,\n scaling_index: this.vertex_layout.index.a_extrude,\n scaling_normalize: 256, // values have an 8-bit fraction\n texcoord_index: this.vertex_layout.index.a_texcoord,\n texcoord_width: (style.width || style.next_width) / context.tile.overzoom2, // UVs can't calc for zero-width, use next zoom width in that case\n texcoord_normalize: 65535, // scale UVs to unsigned shorts\n closed_polygon: options && options.closed_polygon,\n remove_tile_edges: !style.tile_edges && options && options.remove_tile_edges,\n tile_edge_tolerance: Geo.tile_scale * context.tile.pad_scale * 2\n }\n );\n },\n\n buildPolygons(polygons, style, vertex_data, context) {\n // Render polygons as individual lines\n let geom_count = 0;\n for (let p=0; p < polygons.length; p++) {\n geom_count += this.buildLines(polygons[p], style, vertex_data, context, { closed_polygon: true, remove_tile_edges: true });\n }\n return geom_count;\n }\n\n});\n", - "// Point + text label rendering style\n\nimport log from '../../utils/log';\nimport {Style} from '../style';\nimport {StyleParser} from '../style_parser';\nimport gl from '../../gl/constants'; // web workers don't have access to GL context, so import all GL constants\nimport VertexLayout from '../../gl/vertex_layout';\nimport {buildQuadsForPoints} from '../../builders/points';\nimport Texture from '../../gl/texture';\nimport Geo from '../../geo';\nimport Vector from '../../vector';\nimport Collision from '../../labels/collision';\nimport LabelPoint from '../../labels/label_point';\nimport placePointsOnLine from '../../labels/point_placement';\nimport {TextLabels} from '../text/text_labels';\nimport {VIEW_PAN_SNAP_TIME} from '../../view';\nimport debugSettings from '../../utils/debug_settings';\n\nlet fs = require('fs');\nconst shaderSrc_pointsVertex = fs.readFileSync(__dirname + '/points_vertex.glsl', 'utf8');\nconst shaderSrc_pointsFragment = fs.readFileSync(__dirname + '/points_fragment.glsl', 'utf8');\n\nconst PLACEMENT = LabelPoint.PLACEMENT;\n\nconst pre_angles_normalize = 128 / Math.PI;\nconst angles_normalize = 16384 / Math.PI;\nconst offsets_normalize = 64;\nconst texcoord_normalize = 65535;\n\nexport var Points = Object.create(Style);\n\n// Mixin text label methods\nObject.assign(Points, TextLabels);\n\nObject.assign(Points, {\n name: 'points',\n built_in: true,\n vertex_shader_src: shaderSrc_pointsVertex,\n fragment_shader_src: shaderSrc_pointsFragment,\n collision: true, // style includes a collision pass\n blend: 'overlay', // overlays drawn on top of all other styles, with blending\n\n init(options = {}, extra_attributes = []) {\n Style.init.call(this, options);\n\n var attribs = [\n { name: 'a_position', size: 4, type: gl.SHORT, normalized: false },\n { name: 'a_shape', size: 4, type: gl.SHORT, normalized: false },\n { name: 'a_texcoord', size: 2, type: gl.UNSIGNED_SHORT, normalized: true },\n { name: 'a_offset', size: 2, type: gl.SHORT, normalized: false },\n { name: 'a_color', size: 4, type: gl.UNSIGNED_BYTE, normalized: true }\n ];\n\n if (extra_attributes.length){\n Array.prototype.push.apply(attribs, extra_attributes);\n }\n\n // Feature selection\n this.selection = true;\n attribs.push({ name: 'a_selection_color', size: 4, type: gl.UNSIGNED_BYTE, normalized: true });\n\n\n // If we're not rendering as overlay, we need a layer attribute\n if (this.blend !== 'overlay') {\n this.defines.TANGRAM_LAYER_ORDER = true;\n }\n\n // ensure a label texture is always bound (avoid Chrome 'no texture bound to unit' warnings)\n this.shaders.uniforms = this.shaders.uniforms || {};\n this.shaders.uniforms.u_label_texture = Texture.default;\n\n if (this.texture) {\n this.defines.TANGRAM_TEXTURE_POINT = true;\n this.shaders.uniforms.u_texture = this.texture;\n }\n else {\n this.defines.TANGRAM_SHADER_POINT = true;\n attribs.push({ name: 'a_outline_color', size: 4, type: gl.UNSIGNED_BYTE, normalized: true });\n attribs.push({ name: 'a_outline_edge', size: 1, type: gl.FLOAT, normalized: false });\n }\n\n this.vertex_layout = new VertexLayout(attribs);\n\n // Enable dual point/text mode\n this.defines.TANGRAM_MULTI_SAMPLER = true;\n\n // Fade out when tile is zooming out, e.g. acting as proxy tiles\n this.defines.TANGRAM_FADE_ON_ZOOM_OUT = true;\n this.defines.TANGRAM_FADE_ON_ZOOM_OUT_RATE = 2; // fade at 2x, e.g. fully transparent at 0.5 zoom level away\n\n // Fade in (depending on tile proxy status)\n if (debugSettings.suppress_label_fade_in === true) {\n this.fade_in_time = 0;\n this.defines.TANGRAM_FADE_IN_RATE = null;\n }\n else {\n this.fade_in_time = 0.15; // time in seconds\n this.defines.TANGRAM_FADE_IN_RATE = 1 / this.fade_in_time;\n }\n\n // Snap points to pixel grid after panning stop\n if (debugSettings.suppress_label_snap_animation !== true) {\n this.defines.TANGRAM_VIEW_PAN_SNAP_RATE = 1 / VIEW_PAN_SNAP_TIME; // inverse time in seconds\n }\n\n this.collision_group_points = this.name+'-points';\n this.collision_group_text = this.name+'-text';\n\n this.reset();\n },\n\n reset () {\n this.queues = {};\n this.resetText();\n this.texture_missing_sprites = {}; // track which missing sprites we've found (reduce dupe log messages)\n },\n\n // Override to queue features instead of processing immediately\n addFeature (feature, draw, context) {\n let tile = context.tile;\n if (tile.generation !== this.generation) {\n return;\n }\n\n // Called here because otherwise it will be delayed until the feature queue is parsed,\n // and we want the preprocessing done before we evaluate text style below\n draw = this.preprocess(draw);\n if (!draw) {\n return;\n }\n\n // Point styling\n let style = {};\n style.color = this.parseColor(draw.color, context);\n\n // require color or texture\n if (!style.color && !this.texture) {\n return;\n }\n\n // optional sprite\n let sprite_info;\n if (this.hasSprites()) {\n sprite_info = this.parseSprite(draw, context);\n if (sprite_info) {\n style.texcoords = sprite_info.texcoords;\n }\n else {\n return;\n }\n }\n\n // point size defined explicitly, or defaults to sprite size, or generic fallback\n style.size = draw.size;\n if (!style.size) {\n if (sprite_info) {\n style.size = sprite_info.size;\n }\n else {\n style.size = [16, 16];\n }\n }\n else {\n style.size = StyleParser.evalCachedProperty(style.size, context);\n if (typeof style.size === 'number') {\n style.size = [style.size, style.size]; // convert 1d size to 2d\n }\n }\n\n // incorporate outline into size\n if (draw.outline) {\n style.outline_width = StyleParser.evalCachedProperty(draw.outline.width, context) || StyleParser.defaults.outline.width;\n style.outline_color = this.parseColor(draw.outline.color, context);\n }\n\n style.outline_edge_pct = 0;\n if (style.outline_width && style.outline_color) {\n let outline_width = style.outline_width + 1;\n style.size[0] += outline_width; // bump outline by 1px to balance out antialiasing\n style.size[1] += outline_width;\n style.outline_edge_pct = outline_width / Math.min(style.size[0], style.size[1]) * 2; // UV distance at which outline starts\n }\n\n // size will be scaled to 16-bit signed int, so max allowed width + height of 256 pixels\n style.size = [\n Math.min(style.size[0], 256),\n Math.min(style.size[1], 256)\n ];\n\n // Placement strategy\n style.placement = draw.placement;\n style.placement_min_length_ratio = StyleParser.evalCachedProperty(draw.placement_min_length_ratio, context);\n\n // Spacing parameter (in pixels) to equally space points along a line\n if (style.placement === PLACEMENT.SPACED && draw.placement_spacing) {\n style.placement_spacing = StyleParser.evalCachedProperty(draw.placement_spacing, context);\n }\n\n // Angle parameter (can be a number or the string \"auto\")\n style.angle = StyleParser.evalProperty(draw.angle, context) || 0;\n\n // points can be placed off the ground\n style.z = (draw.z && StyleParser.evalCachedDistanceProperty(draw.z, context)) || StyleParser.defaults.z;\n\n style.tile_edges = draw.tile_edges; // usually activated for debugging, or rare visualization needs\n\n style.sampler = 0; // 0 = sprites\n\n this.computeLayout(style, feature, draw, context, tile);\n\n // Text styling\n let tf =\n draw.text &&\n draw.text.visible !== false && // explicitly handle `visible` property for nested text\n this.parseTextFeature(feature, draw.text, context, tile);\n\n if (Array.isArray(tf)) {\n tf = null; // NB: boundary labels not supported for point label attachments, should log warning\n log({ level: 'warn', once: true }, `Layer '${draw.layers[draw.layers.length-1]}': ` +\n `cannot use boundary labels (e.g. 'text_source: { left: ..., right: ... }') for 'text' labels attached to 'points'; ` +\n `provided 'text_source' value was '${JSON.stringify(draw.text.text_source)}'`);\n }\n\n if (tf) {\n tf.layout.parent = style; // parent point will apply additional anchor/offset to text\n\n // Text labels have a default priority of 0.5 below their parent point (+0.5, priority is lower-is-better)\n // This can be overriden, as long as it is less than or equal to the default\n tf.layout.priority = draw.text.priority ? Math.max(tf.layout.priority, style.priority + 0.5) : (style.priority + 0.5);\n\n // Text labels attached to points should not be moved into tile\n // (they should stay fixed relative to the point)\n tf.layout.move_into_tile = false;\n\n Collision.addStyle(this.collision_group_text, tile.key);\n }\n\n this.queueFeature({ feature, draw, context, style, text_feature: tf }, tile); // queue the feature for later processing\n\n // Register with collision manager\n Collision.addStyle(this.collision_group_points, tile.key);\n },\n\n hasSprites() {\n return this.texture && Texture.textures[this.texture] && Texture.textures[this.texture].sprites;\n },\n\n getSpriteInfo (sprite) {\n let info = Texture.textures[this.texture].sprites[sprite] && Texture.getSpriteInfo(this.texture, sprite);\n if (sprite && !info) {\n if (!this.texture_missing_sprites[sprite]) { // only log each missing sprite once\n log('debug', `Style: in style '${this.name}', could not find sprite '${sprite}' for texture '${this.texture}'`);\n this.texture_missing_sprites[sprite] = true;\n }\n }\n return info;\n },\n\n parseSprite (draw, context) {\n let sprite = StyleParser.evalProperty(draw.sprite, context);\n let sprite_info = this.getSpriteInfo(sprite) || this.getSpriteInfo(draw.sprite_default);\n return sprite_info;\n },\n\n // Queue features for deferred processing (collect all features first so we can do collision on the whole group)\n queueFeature (q, tile) {\n if (!this.tile_data[tile.key] || !this.queues[tile.key]) {\n this.startData(tile);\n }\n this.queues[tile.key].push(q);\n },\n\n // Override\n startData (tile) {\n this.queues[tile.key] = [];\n return Style.startData.call(this, tile);\n },\n\n // Override\n endData (tile) {\n if (tile.canceled) {\n log('trace', `Style ${this.name}: stop tile build because tile was canceled: ${tile.key}`);\n return Promise.resolve();\n }\n\n let queue = this.queues[tile.key];\n delete this.queues[tile.key];\n\n // For each point feature, create one or more labels\n let text_objs = [];\n let point_objs = [];\n\n queue.forEach(q => {\n let style = q.style;\n let feature = q.feature;\n let geometry = feature.geometry;\n\n let feature_labels = this.buildLabels(style.size, geometry, style);\n for (let i = 0; i < feature_labels.length; i++) {\n let label = feature_labels[i];\n let point_obj = {\n feature,\n draw: q.draw,\n context: q.context,\n style,\n label\n };\n point_objs.push(point_obj);\n\n if (q.text_feature) {\n let text_obj = {\n feature,\n draw: q.text_feature.draw,\n context: q.context,\n text: q.text_feature.text,\n text_settings_key: q.text_feature.text_settings_key,\n layout: q.text_feature.layout,\n point_label: label,\n linked: point_obj // link so text only renders when parent point is placed\n };\n text_objs.push(text_obj);\n\n // Unless text feature is optional, create a two-way link so that parent\n // point will only render when text is also placed\n if (!q.draw.text.optional) {\n point_obj.linked = text_obj; // two-way link\n }\n }\n }\n });\n\n // Collide both points and text, then build features\n return Promise.\n all([\n // Points\n Collision.collide(point_objs, this.collision_group_points, tile.key).then(point_objs => {\n point_objs.forEach(q => {\n this.feature_style = q.style;\n this.feature_style.label = q.label;\n Style.addFeature.call(this, q.feature, q.draw, q.context);\n });\n }),\n // Labels\n this.prepareTextLabels(tile, this.collision_group_text, text_objs).\n then(labels => this.collideAndRenderTextLabels(tile, this.collision_group_text, labels))\n ]).then(([, { labels, texts, texture }]) => {\n // Process labels\n if (labels && texts) {\n // Build queued features\n labels.forEach(q => {\n let text_settings_key = q.text_settings_key;\n let text_info = texts[text_settings_key] && texts[text_settings_key][q.text];\n\n // setup styling object expected by Style class\n let style = this.feature_style;\n style.label = q.label;\n style.size = text_info.size.logical_size;\n style.angle = 0; // text attached to point is always upright\n style.texcoords = text_info.align[q.label.align].texcoords;\n style.sampler = 1; // non-0 = labels\n\n Style.addFeature.call(this, q.feature, q.draw, q.context);\n });\n }\n this.freeText(tile);\n\n // Finish tile mesh\n return Style.endData.call(this, tile).then(tile_data => {\n // Attach tile-specific label atlas to mesh as a texture uniform\n if (texture && tile_data) {\n tile_data.uniforms = tile_data.uniforms || {};\n tile_data.textures = tile_data.textures || [];\n\n tile_data.uniforms.u_label_texture = texture;\n tile_data.textures.push(texture); // assign texture ownership to tile\n }\n return tile_data;\n });\n });\n },\n\n _preprocess (draw) {\n draw.color = StyleParser.createColorPropertyCache(draw.color);\n\n if (draw.outline) {\n draw.outline.color = StyleParser.createColorPropertyCache(draw.outline.color);\n draw.outline.width = StyleParser.createPropertyCache(draw.outline.width, v => Array.isArray(v) ? v.map(parseFloat) : parseFloat(v));\n }\n\n draw.z = StyleParser.createPropertyCache(draw.z, StyleParser.parseUnits);\n\n // Size (1d value or 2d array)\n draw.size = StyleParser.createPropertyCache(draw.size, v => Array.isArray(v) ? v.map(parseFloat) : parseFloat(v));\n\n // Offset (2d array)\n draw.offset = StyleParser.createPropertyCache(draw.offset, v => (Array.isArray(v) && v.map(parseFloat)) || 0);\n\n // Buffer (1d value or 2d array, expand 1d to 2d)\n draw.buffer = StyleParser.createPropertyCache(draw.buffer, v => (Array.isArray(v) ? v : [v, v]).map(parseFloat) || 0);\n\n // Repeat rules - no repeat limitation for points by default\n draw.repeat_distance = StyleParser.createPropertyCache(draw.repeat_distance, parseFloat);\n\n // Placement strategies\n draw.placement = PLACEMENT[draw.placement && draw.placement.toUpperCase()];\n if (draw.placement == null) {\n draw.placement = PLACEMENT.VERTEX;\n }\n\n draw.placement_spacing = draw.placement_spacing != null ? draw.placement_spacing : 80; // default spacing\n draw.placement_spacing = StyleParser.createPropertyCache(draw.placement_spacing, parseFloat);\n\n draw.placement_min_length_ratio = draw.placement_min_length_ratio != null ? draw.placement_min_length_ratio : 1;\n draw.placement_min_length_ratio = StyleParser.createPropertyCache(draw.placement_min_length_ratio, parseFloat);\n\n if (typeof draw.angle === 'number') {\n draw.angle = draw.angle * Math.PI / 180;\n }\n else {\n draw.angle = draw.angle || 0; // angle can be a string like \"auto\" (use angle of geometry)\n }\n\n // Optional text styling\n draw.text = this.preprocessText(draw.text); // will return null if valid text styling wasn't provided\n if (draw.text) {\n draw.text.key = draw.key; // copy layer key for use as label repeat group\n draw.text.repeat_group = draw.text.repeat_group || draw.repeat_group; // inherit repeat group by default\n draw.text.anchor = draw.text.anchor || this.default_anchor;\n draw.text.optional = (typeof draw.text.optional === 'boolean') ? draw.text.optional : false; // default text to required\n draw.text.interactive = draw.text.interactive || draw.interactive; // inherits from point\n }\n\n return draw;\n },\n\n // Default to trying all anchor placements\n default_anchor: ['bottom', 'top', 'right', 'left'],\n\n // Compute label layout-related properties\n computeLayout (target, feature, draw, context, tile) {\n let layout = target || {};\n layout.id = feature;\n layout.units_per_pixel = tile.units_per_pixel || 1;\n\n // collision flag\n layout.collide = (draw.collide === false) ? false : true;\n\n // tile boundary handling\n layout.cull_from_tile = (draw.cull_from_tile != null) ? draw.cull_from_tile : false;\n\n // points should not move into tile if over tile boundary\n layout.move_into_tile = false;\n\n // label anchors (point labels only)\n // label position will be adjusted in the given direction, relative to its original point\n // one of: left, right, top, bottom, top-left, top-right, bottom-left, bottom-right\n layout.anchor = draw.anchor;\n\n // label offset and buffer in pixel (applied in screen space)\n layout.offset = StyleParser.evalCachedProperty(draw.offset, context) || StyleParser.zeroPair;\n layout.buffer = StyleParser.evalCachedProperty(draw.buffer, context) || StyleParser.zeroPair;\n\n // repeat rules\n layout.repeat_distance = StyleParser.evalCachedProperty(draw.repeat_distance, context);\n if (layout.repeat_distance) {\n layout.repeat_distance *= layout.units_per_pixel;\n\n if (typeof draw.repeat_group === 'function') {\n layout.repeat_group = draw.repeat_group(context);\n }\n else if (typeof draw.repeat_group === 'string') {\n layout.repeat_group = draw.repeat_group;\n }\n else {\n layout.repeat_group = draw.key; // default to unique set of matching layers\n }\n }\n\n // label priority (lower is higher)\n let priority = draw.priority;\n if (priority != null) {\n if (typeof priority === 'function') {\n priority = priority(context);\n }\n }\n else {\n priority = -1 >>> 0; // default to max priority value if none set\n }\n layout.priority = priority;\n\n return layout;\n },\n\n // Implements label building for TextLabels mixin\n buildTextLabels (tile_key, feature_queue) {\n let labels = [];\n for (let f=0; f < feature_queue.length; f++) {\n let fq = feature_queue[f];\n let text_info = this.texts[tile_key][fq.text_settings_key][fq.text];\n let size = text_info.size.collision_size;\n fq.label = new LabelPoint(fq.point_label.position, size, fq.layout);\n labels.push(fq);\n }\n return labels;\n },\n\n // Builds one or more point labels for a geometry\n buildLabels (size, geometry, options) {\n let labels = [];\n\n if (geometry.type === \"Point\") {\n labels.push(new LabelPoint(geometry.coordinates, size, options));\n }\n else if (geometry.type === \"MultiPoint\") {\n let points = geometry.coordinates;\n for (let i = 0; i < points.length; ++i) {\n let point = points[i];\n labels.push(new LabelPoint(point, size, options));\n }\n }\n else if (geometry.type === \"LineString\") {\n let line = geometry.coordinates;\n let point_labels = placePointsOnLine(line, size, options);\n for (let i = 0; i < point_labels.length; ++i) {\n labels.push(point_labels[i]);\n }\n }\n else if (geometry.type === \"MultiLineString\") {\n let lines = geometry.coordinates;\n for (let ln = 0; ln < lines.length; ln++) {\n let line = lines[ln];\n let point_labels = placePointsOnLine(line, size, options);\n for (let i = 0; i < point_labels.length; ++i) {\n labels.push(point_labels[i]);\n }\n }\n }\n else if (geometry.type === \"Polygon\") {\n // Point at polygon centroid (of outer ring)\n if (options.placement === PLACEMENT.CENTROID) {\n let centroid = Geo.centroid(geometry.coordinates);\n labels.push(new LabelPoint(centroid, size, options));\n }\n // Point at each polygon vertex (all rings)\n else {\n let rings = geometry.coordinates;\n for (let ln = 0; ln < rings.length; ln++) {\n let point_labels = placePointsOnLine(rings[ln], size, options);\n for (let i = 0; i < point_labels.length; ++i) {\n labels.push(point_labels[i]);\n }\n }\n }\n }\n else if (geometry.type === \"MultiPolygon\") {\n if (options.placement === PLACEMENT.CENTROID) {\n let centroid = Geo.multiCentroid(geometry.coordinates);\n labels.push(new LabelPoint(centroid, size, options));\n }\n else {\n let polys = geometry.coordinates;\n for (let p = 0; p < polys.length; p++) {\n let rings = polys[p];\n for (let ln = 0; ln < rings.length; ln++) {\n let point_labels = placePointsOnLine(rings[ln], size, options);\n for (let i = 0; i < point_labels.length; ++i) {\n labels.push(point_labels[i]);\n }\n }\n }\n }\n }\n\n return labels;\n },\n\n /**\n * A \"template\" that sets constant attibutes for each vertex, which is then modified per vertex or per feature.\n * A plain JS array matching the order of the vertex layout.\n */\n makeVertexTemplate(style) {\n let color = style.color || StyleParser.defaults.color;\n\n // position - x & y coords will be filled in per-vertex below\n this.fillVertexTemplate('a_position', 0, { size: 2 });\n this.fillVertexTemplate('a_position', style.z || 0, { size: 1, offset: 2 });\n // layer order - w coord of 'position' attribute (for packing efficiency)\n this.fillVertexTemplate('a_position', this.scaleOrder(style.order), { size: 1, offset: 3 });\n\n // scaling vector - (x, y) components per pixel, z = angle, w = scaling factor\n this.fillVertexTemplate('a_shape', 0, { size: 4 });\n\n // texture coords\n this.fillVertexTemplate('a_texcoord', 0, { size: 2 });\n\n // offsets\n this.fillVertexTemplate('a_offset', 0, { size: 2 });\n\n // color\n this.fillVertexTemplate('a_color', Vector.mult(color, 255), { size: 4 });\n\n // outline\n if (this.defines.TANGRAM_SHADER_POINT) {\n let outline_color = style.outline_color || StyleParser.defaults.outline.color;\n this.fillVertexTemplate('a_outline_color', Vector.mult(outline_color, 255), { size: 4 });\n this.fillVertexTemplate('a_outline_edge', style.outline_edge_pct || StyleParser.defaults.outline.width, { size: 1 });\n }\n\n // selection color\n if (this.selection) {\n this.fillVertexTemplate('a_selection_color', Vector.mult(style.selection_color, 255), { size: 4 });\n }\n\n return this.vertex_template;\n },\n\n buildQuad(points, size, angle, angles, pre_angles, sampler, offset, offsets, texcoord_scale, curve, vertex_data, vertex_template) {\n return buildQuadsForPoints(\n points,\n vertex_data,\n vertex_template,\n {\n texcoord_index: this.vertex_layout.index.a_texcoord,\n position_index: this.vertex_layout.index.a_position,\n shape_index: this.vertex_layout.index.a_shape,\n offset_index: this.vertex_layout.index.a_offset,\n offsets_index: this.vertex_layout.index.a_offsets,\n pre_angles_index: this.vertex_layout.index.a_pre_angles,\n angles_index: this.vertex_layout.index.a_angles,\n outline_edge_index: sampler ? null : this.vertex_layout.index.a_outline_edge\n },\n {\n quad: size,\n quad_normalize: 256, // values have an 8-bit fraction\n offset,\n offsets,\n pre_angles: pre_angles,\n angle: angle * 4096, // values have a 12-bit fraction\n angles: angles,\n shape_w: sampler,\n curve,\n texcoord_scale,\n texcoord_normalize,\n pre_angles_normalize,\n angles_normalize,\n offsets_normalize\n }\n );\n },\n\n // Build quad for point sprite\n build (style, vertex_data) {\n let label = style.label;\n if (label.type === 'curved') {\n return this.buildArticulatedLabel(label, style, vertex_data);\n }\n else {\n return this.buildLabel(label, style, vertex_data);\n }\n },\n\n buildLabel (label, style, vertex_data) {\n let vertex_template = this.makeVertexTemplate(style);\n let angle = label.angle || style.angle;\n\n let size, texcoords;\n if (label.type){\n size = style.size[label.type];\n texcoords = style.texcoords[label.type];\n }\n else {\n size = style.size;\n texcoords = style.texcoords;\n }\n\n let offset = label.offset;\n\n return this.buildQuad(\n [label.position], // position\n size, // size in pixels\n angle, // angle in radians\n null, // placeholder for multiple angles\n null, // placeholder for multiple pre_angles\n style.sampler, // texture sampler to use\n offset, // offset from center in pixels\n null, // placeholder for multiple offsets\n texcoords, // texture UVs\n false, // if curved\n vertex_data, vertex_template // VBO and data for current vertex\n );\n },\n\n buildArticulatedLabel (label, style, vertex_data) {\n let vertex_template = this.makeVertexTemplate(style);\n let angle = label.angle;\n let geom_count = 0;\n\n // pass for stroke\n for (let i = 0; i < label.num_segments; i++){\n let size = style.size[label.type][i];\n let texcoord_stroke = style.texcoords_stroke[i];\n\n let offset = label.offset || [0,0];\n let position = label.position;\n\n let angles = label.angles[i];\n let offsets = label.offsets[i];\n let pre_angles = label.pre_angles[i];\n\n geom_count += this.buildQuad(\n [position], // position\n size, // size in pixels\n angle, // angle in degrees\n angles, // angles per segment\n pre_angles, // pre_angle array (rotation applied before offseting)\n style.sampler, // texture sampler to use\n offset, // offset from center in pixels\n offsets, // offsets per segment\n texcoord_stroke, // texture UVs for stroked text\n true, // if curved\n vertex_data, vertex_template // VBO and data for current vertex\n );\n }\n\n // pass for fill\n for (let i = 0; i < label.num_segments; i++){\n let size = style.size[label.type][i];\n let texcoord = style.texcoords[label.type][i];\n\n let offset = label.offset || [0,0];\n let position = label.position;\n\n let angles = label.angles[i];\n let offsets = label.offsets[i];\n let pre_angles = label.pre_angles[i];\n\n geom_count += this.buildQuad(\n [position], // position\n size, // size in pixels\n angle, // angle in degrees\n angles, // angles per segment\n pre_angles, // pre_angle array (rotation applied before offseting)\n style.sampler, // texture sampler to use\n offset, // offset from center in pixels\n offsets, // offsets per segment\n texcoord, // texture UVs for fill text\n true, // if curved\n vertex_data, vertex_template // VBO and data for current vertex\n );\n }\n\n return geom_count;\n },\n\n // Override to pass-through to generic point builder\n buildLines (lines, style, vertex_data, context) {\n return this.build(style, vertex_data);\n },\n\n buildPoints (points, style, vertex_data, context) {\n return this.build(style, vertex_data);\n },\n\n buildPolygons (points, style, vertex_data, context) {\n return this.build(style, vertex_data);\n },\n\n makeMesh (vertex_data, vertex_elements, options = {}) {\n // Add label fade time\n options = Object.assign({}, options, { fade_in_time: this.fade_in_time });\n return Style.makeMesh.call(this, vertex_data, vertex_elements, options);\n }\n\n});\n", + "// Point + text label rendering style\n\nimport log from '../../utils/log';\nimport {Style} from '../style';\nimport {StyleParser} from '../style_parser';\nimport gl from '../../gl/constants'; // web workers don't have access to GL context, so import all GL constants\nimport VertexLayout from '../../gl/vertex_layout';\nimport {buildQuadsForPoints} from '../../builders/points';\nimport Texture from '../../gl/texture';\nimport Geo from '../../geo';\nimport Vector from '../../vector';\nimport Collision from '../../labels/collision';\nimport LabelPoint from '../../labels/label_point';\nimport placePointsOnLine from '../../labels/point_placement';\nimport {TextLabels} from '../text/text_labels';\nimport {VIEW_PAN_SNAP_TIME} from '../../view';\nimport debugSettings from '../../utils/debug_settings';\n\nlet fs = require('fs');\nconst shaderSrc_pointsVertex = fs.readFileSync(__dirname + '/points_vertex.glsl', 'utf8');\nconst shaderSrc_pointsFragment = fs.readFileSync(__dirname + '/points_fragment.glsl', 'utf8');\n\nconst PLACEMENT = LabelPoint.PLACEMENT;\n\nconst pre_angles_normalize = 128 / Math.PI;\nconst angles_normalize = 16384 / Math.PI;\nconst offsets_normalize = 64;\nconst texcoord_normalize = 65535;\n\nexport var Points = Object.create(Style);\n\n// Mixin text label methods\nObject.assign(Points, TextLabels);\n\nObject.assign(Points, {\n name: 'points',\n built_in: true,\n vertex_shader_src: shaderSrc_pointsVertex,\n fragment_shader_src: shaderSrc_pointsFragment,\n collision: true, // style includes a collision pass\n blend: 'overlay', // overlays drawn on top of all other styles, with blending\n\n init(options = {}, extra_attributes = []) {\n Style.init.call(this, options);\n\n var attribs = [\n { name: 'a_position', size: 4, type: gl.SHORT, normalized: false },\n { name: 'a_shape', size: 4, type: gl.SHORT, normalized: false },\n { name: 'a_texcoord', size: 2, type: gl.UNSIGNED_SHORT, normalized: true },\n { name: 'a_offset', size: 2, type: gl.SHORT, normalized: false },\n { name: 'a_color', size: 4, type: gl.UNSIGNED_BYTE, normalized: true }\n ];\n\n if (extra_attributes.length){\n Array.prototype.push.apply(attribs, extra_attributes);\n }\n\n // Feature selection\n this.selection = true;\n attribs.push({ name: 'a_selection_color', size: 4, type: gl.UNSIGNED_BYTE, normalized: true });\n\n\n // If we're not rendering as overlay, we need a layer attribute\n if (this.blend !== 'overlay') {\n this.defines.TANGRAM_LAYER_ORDER = true;\n }\n\n // ensure a label texture is always bound (avoid Chrome 'no texture bound to unit' warnings)\n this.shaders.uniforms = this.shaders.uniforms || {};\n this.shaders.uniforms.u_label_texture = Texture.default;\n\n if (this.texture) {\n this.defines.TANGRAM_TEXTURE_POINT = true;\n this.shaders.uniforms.u_texture = this.texture;\n }\n else {\n this.defines.TANGRAM_SHADER_POINT = true;\n attribs.push({ name: 'a_outline_color', size: 4, type: gl.UNSIGNED_BYTE, normalized: true });\n attribs.push({ name: 'a_outline_edge', size: 1, type: gl.FLOAT, normalized: false });\n }\n\n this.vertex_layout = new VertexLayout(attribs);\n\n // Enable dual point/text mode\n this.defines.TANGRAM_MULTI_SAMPLER = true;\n\n // Fade out when tile is zooming out, e.g. acting as proxy tiles\n this.defines.TANGRAM_FADE_ON_ZOOM_OUT = true;\n this.defines.TANGRAM_FADE_ON_ZOOM_OUT_RATE = 2; // fade at 2x, e.g. fully transparent at 0.5 zoom level away\n\n // Fade in (depending on tile proxy status)\n if (debugSettings.suppress_label_fade_in === true) {\n this.fade_in_time = 0;\n this.defines.TANGRAM_FADE_IN_RATE = null;\n }\n else {\n this.fade_in_time = 0.15; // time in seconds\n this.defines.TANGRAM_FADE_IN_RATE = 1 / this.fade_in_time;\n }\n\n // Snap points to pixel grid after panning stop\n if (debugSettings.suppress_label_snap_animation !== true) {\n this.defines.TANGRAM_VIEW_PAN_SNAP_RATE = 1 / VIEW_PAN_SNAP_TIME; // inverse time in seconds\n }\n\n this.collision_group_points = this.name+'-points';\n this.collision_group_text = this.name+'-text';\n\n this.reset();\n },\n\n reset () {\n this.queues = {};\n this.resetText();\n this.texture_missing_sprites = {}; // track which missing sprites we've found (reduce dupe log messages)\n },\n\n // Override to queue features instead of processing immediately\n addFeature (feature, draw, context) {\n let tile = context.tile;\n if (tile.generation !== this.generation) {\n return;\n }\n\n // Called here because otherwise it will be delayed until the feature queue is parsed,\n // and we want the preprocessing done before we evaluate text style below\n draw = this.preprocess(draw);\n if (!draw) {\n return;\n }\n\n // Point styling\n let style = {};\n style.color = this.parseColor(draw.color, context);\n\n // require color or texture\n if (!style.color && !this.texture) {\n return;\n }\n\n // optional sprite\n let sprite_info;\n if (this.hasSprites()) {\n sprite_info = this.parseSprite(draw, context);\n if (sprite_info) {\n style.texcoords = sprite_info.texcoords;\n }\n else {\n return;\n }\n }\n\n // point size defined explicitly, or defaults to sprite size, or generic fallback\n style.size = draw.size;\n if (!style.size) {\n if (sprite_info) {\n style.size = sprite_info.size;\n }\n else {\n style.size = [16, 16];\n }\n }\n else {\n style.size = StyleParser.evalCachedProperty(style.size, context);\n if (typeof style.size === 'number') {\n style.size = [style.size, style.size]; // convert 1d size to 2d\n }\n }\n\n // incorporate outline into size\n if (draw.outline) {\n style.outline_width = StyleParser.evalCachedProperty(draw.outline.width, context) || StyleParser.defaults.outline.width;\n style.outline_color = this.parseColor(draw.outline.color, context);\n }\n\n style.outline_edge_pct = 0;\n if (style.outline_width && style.outline_color) {\n let outline_width = style.outline_width + 1;\n style.size[0] += outline_width; // bump outline by 1px to balance out antialiasing\n style.size[1] += outline_width;\n style.outline_edge_pct = outline_width / Math.min(style.size[0], style.size[1]) * 2; // UV distance at which outline starts\n }\n\n // size will be scaled to 16-bit signed int, so max allowed width + height of 256 pixels\n style.size = [\n Math.min(style.size[0], 256),\n Math.min(style.size[1], 256)\n ];\n\n // Placement strategy\n style.placement = draw.placement;\n style.placement_min_length_ratio = StyleParser.evalCachedProperty(draw.placement_min_length_ratio, context);\n\n // Spacing parameter (in pixels) to equally space points along a line\n if (style.placement === PLACEMENT.SPACED && draw.placement_spacing) {\n style.placement_spacing = StyleParser.evalCachedProperty(draw.placement_spacing, context);\n }\n\n // Angle parameter (can be a number or the string \"auto\")\n style.angle = StyleParser.evalProperty(draw.angle, context) || 0;\n\n // points can be placed off the ground\n style.z = (draw.z && StyleParser.evalCachedDistanceProperty(draw.z, context)) || StyleParser.defaults.z;\n\n style.tile_edges = draw.tile_edges; // usually activated for debugging, or rare visualization needs\n\n style.sampler = 0; // 0 = sprites\n\n this.computeLayout(style, feature, draw, context, tile);\n\n // Text styling\n let tf =\n draw.text &&\n draw.text.visible !== false && // explicitly handle `visible` property for nested text\n this.parseTextFeature(feature, draw.text, context, tile);\n\n if (Array.isArray(tf)) {\n tf = null; // NB: boundary labels not supported for point label attachments, should log warning\n log({ level: 'warn', once: true }, `Layer '${draw.layers[draw.layers.length-1]}': ` +\n `cannot use boundary labels (e.g. 'text_source: { left: ..., right: ... }') for 'text' labels attached to 'points'; ` +\n `provided 'text_source' value was '${JSON.stringify(draw.text.text_source)}'`);\n }\n\n if (tf) {\n tf.layout.parent = style; // parent point will apply additional anchor/offset to text\n\n // Text labels have a default priority of 0.5 below their parent point (+0.5, priority is lower-is-better)\n // This can be overriden, as long as it is less than or equal to the default\n tf.layout.priority = draw.text.priority ? Math.max(tf.layout.priority, style.priority + 0.5) : (style.priority + 0.5);\n\n // Text labels attached to points should not be moved into tile\n // (they should stay fixed relative to the point)\n tf.layout.move_into_tile = false;\n\n Collision.addStyle(this.collision_group_text, tile.key);\n }\n\n this.queueFeature({ feature, draw, context, style, text_feature: tf }, tile); // queue the feature for later processing\n\n // Register with collision manager\n Collision.addStyle(this.collision_group_points, tile.key);\n },\n\n hasSprites() {\n return this.texture && Texture.textures[this.texture] && Texture.textures[this.texture].sprites;\n },\n\n getSpriteInfo (sprite) {\n let info = Texture.textures[this.texture].sprites[sprite] && Texture.getSpriteInfo(this.texture, sprite);\n if (sprite && !info) {\n if (!this.texture_missing_sprites[sprite]) { // only log each missing sprite once\n log('debug', `Style: in style '${this.name}', could not find sprite '${sprite}' for texture '${this.texture}'`);\n this.texture_missing_sprites[sprite] = true;\n }\n }\n return info;\n },\n\n parseSprite (draw, context) {\n let sprite = StyleParser.evalProperty(draw.sprite, context);\n let sprite_info = this.getSpriteInfo(sprite) || this.getSpriteInfo(draw.sprite_default);\n return sprite_info;\n },\n\n // Queue features for deferred processing (collect all features first so we can do collision on the whole group)\n queueFeature (q, tile) {\n if (!this.tile_data[tile.key] || !this.queues[tile.key]) {\n this.startData(tile);\n }\n this.queues[tile.key].push(q);\n },\n\n // Override\n startData (tile) {\n this.queues[tile.key] = [];\n return Style.startData.call(this, tile);\n },\n\n // Override\n endData (tile) {\n if (tile.canceled) {\n log('trace', `Style ${this.name}: stop tile build because tile was canceled: ${tile.key}`);\n return Promise.resolve();\n }\n\n let queue = this.queues[tile.key];\n delete this.queues[tile.key];\n\n // For each point feature, create one or more labels\n let text_objs = [];\n let point_objs = [];\n\n queue.forEach(q => {\n let style = q.style;\n let feature = q.feature;\n let geometry = feature.geometry;\n\n let feature_labels = this.buildLabels(style.size, geometry, style);\n for (let i = 0; i < feature_labels.length; i++) {\n let label = feature_labels[i];\n let point_obj = {\n feature,\n draw: q.draw,\n context: q.context,\n style,\n label\n };\n point_objs.push(point_obj);\n\n if (q.text_feature) {\n let text_obj = {\n feature,\n draw: q.text_feature.draw,\n context: q.context,\n text: q.text_feature.text,\n text_settings_key: q.text_feature.text_settings_key,\n layout: q.text_feature.layout,\n point_label: label,\n linked: point_obj // link so text only renders when parent point is placed\n };\n text_objs.push(text_obj);\n\n // Unless text feature is optional, create a two-way link so that parent\n // point will only render when text is also placed\n if (!q.draw.text.optional) {\n point_obj.linked = text_obj; // two-way link\n }\n }\n }\n });\n\n // Collide both points and text, then build features\n return Promise.\n all([\n // Points\n Collision.collide(point_objs, this.collision_group_points, tile.key).then(point_objs => {\n point_objs.forEach(q => {\n this.feature_style = q.style;\n this.feature_style.label = q.label;\n Style.addFeature.call(this, q.feature, q.draw, q.context);\n });\n }),\n // Labels\n this.prepareTextLabels(tile, this.collision_group_text, text_objs).\n then(labels => this.collideAndRenderTextLabels(tile, this.collision_group_text, labels))\n ]).then(([, { labels, texts, texture }]) => {\n // Process labels\n if (labels && texts) {\n // Build queued features\n labels.forEach(q => {\n let text_settings_key = q.text_settings_key;\n let text_info = texts[text_settings_key] && texts[text_settings_key][q.text];\n\n // setup styling object expected by Style class\n let style = this.feature_style;\n style.label = q.label;\n style.size = text_info.size.logical_size;\n style.angle = 0; // text attached to point is always upright\n style.texcoords = text_info.align[q.label.align].texcoords;\n style.sampler = 1; // non-0 = labels\n\n Style.addFeature.call(this, q.feature, q.draw, q.context);\n });\n }\n this.freeText(tile);\n\n // Finish tile mesh\n return Style.endData.call(this, tile).then(tile_data => {\n // Attach tile-specific label atlas to mesh as a texture uniform\n if (texture && tile_data) {\n tile_data.uniforms = tile_data.uniforms || {};\n tile_data.textures = tile_data.textures || [];\n\n tile_data.uniforms.u_label_texture = texture;\n tile_data.textures.push(texture); // assign texture ownership to tile\n }\n return tile_data;\n });\n });\n },\n\n _preprocess (draw) {\n draw.color = StyleParser.createColorPropertyCache(draw.color);\n\n if (draw.outline) {\n draw.outline.color = StyleParser.createColorPropertyCache(draw.outline.color);\n draw.outline.width = StyleParser.createPropertyCache(draw.outline.width, v => Array.isArray(v) ? v.map(parseFloat) : parseFloat(v));\n }\n\n draw.z = StyleParser.createPropertyCache(draw.z, StyleParser.parseUnits);\n\n // Size (1d value or 2d array)\n draw.size = StyleParser.createPropertyCache(draw.size, v => Array.isArray(v) ? v.map(parseFloat) : parseFloat(v));\n\n // Offset (2d array)\n draw.offset = StyleParser.createPropertyCache(draw.offset, v => (Array.isArray(v) && v.map(parseFloat)) || 0);\n\n // Buffer (1d value or 2d array, expand 1d to 2d)\n draw.buffer = StyleParser.createPropertyCache(draw.buffer, v => (Array.isArray(v) ? v : [v, v]).map(parseFloat) || 0);\n\n // Repeat rules - no repeat limitation for points by default\n draw.repeat_distance = StyleParser.createPropertyCache(draw.repeat_distance, parseFloat);\n\n // Placement strategies\n draw.placement = PLACEMENT[draw.placement && draw.placement.toUpperCase()];\n if (draw.placement == null) {\n draw.placement = PLACEMENT.VERTEX;\n }\n\n draw.placement_spacing = draw.placement_spacing != null ? draw.placement_spacing : 80; // default spacing\n draw.placement_spacing = StyleParser.createPropertyCache(draw.placement_spacing, parseFloat);\n\n draw.placement_min_length_ratio = draw.placement_min_length_ratio != null ? draw.placement_min_length_ratio : 1;\n draw.placement_min_length_ratio = StyleParser.createPropertyCache(draw.placement_min_length_ratio, parseFloat);\n\n if (typeof draw.angle === 'number') {\n draw.angle = draw.angle * Math.PI / 180;\n }\n else {\n draw.angle = draw.angle || 0; // angle can be a string like \"auto\" (use angle of geometry)\n }\n\n // Optional text styling\n draw.text = this.preprocessText(draw.text); // will return null if valid text styling wasn't provided\n if (draw.text) {\n draw.text.key = draw.key; // copy layer key for use as label repeat group\n draw.text.repeat_group = draw.text.repeat_group || draw.repeat_group; // inherit repeat group by default\n draw.text.anchor = draw.text.anchor || this.default_anchor;\n draw.text.optional = (typeof draw.text.optional === 'boolean') ? draw.text.optional : false; // default text to required\n draw.text.interactive = draw.text.interactive || draw.interactive; // inherits from point\n }\n\n return draw;\n },\n\n // Default to trying all anchor placements\n default_anchor: ['bottom', 'top', 'right', 'left'],\n\n // Compute label layout-related properties\n computeLayout (target, feature, draw, context, tile) {\n let layout = target || {};\n layout.id = feature;\n layout.units_per_pixel = tile.units_per_pixel || 1;\n\n // collision flag\n layout.collide = (draw.collide === false) ? false : true;\n\n // tile boundary handling\n layout.cull_from_tile = (draw.cull_from_tile != null) ? draw.cull_from_tile : false;\n\n // points should not move into tile if over tile boundary\n layout.move_into_tile = false;\n\n // label anchors (point labels only)\n // label position will be adjusted in the given direction, relative to its original point\n // one of: left, right, top, bottom, top-left, top-right, bottom-left, bottom-right\n layout.anchor = draw.anchor;\n\n // label offset and buffer in pixel (applied in screen space)\n layout.offset = StyleParser.evalCachedProperty(draw.offset, context) || StyleParser.zeroPair;\n layout.buffer = StyleParser.evalCachedProperty(draw.buffer, context) || StyleParser.zeroPair;\n\n // repeat rules\n layout.repeat_distance = StyleParser.evalCachedProperty(draw.repeat_distance, context);\n if (layout.repeat_distance) {\n layout.repeat_distance *= layout.units_per_pixel;\n\n if (typeof draw.repeat_group === 'function') {\n layout.repeat_group = draw.repeat_group(context);\n }\n else if (typeof draw.repeat_group === 'string') {\n layout.repeat_group = draw.repeat_group;\n }\n else {\n layout.repeat_group = draw.key; // default to unique set of matching layers\n }\n }\n\n // label priority (lower is higher)\n let priority = draw.priority;\n if (priority != null) {\n if (typeof priority === 'function') {\n priority = priority(context);\n }\n }\n else {\n priority = -1 >>> 0; // default to max priority value if none set\n }\n layout.priority = priority;\n\n return layout;\n },\n\n // Implements label building for TextLabels mixin\n buildTextLabels (tile_key, feature_queue) {\n let labels = [];\n for (let f=0; f < feature_queue.length; f++) {\n let fq = feature_queue[f];\n let text_info = this.texts[tile_key][fq.text_settings_key][fq.text];\n let size = text_info.size.collision_size;\n fq.label = new LabelPoint(fq.point_label.position, size, fq.layout);\n labels.push(fq);\n }\n return labels;\n },\n\n // Builds one or more point labels for a geometry\n buildLabels (size, geometry, options) {\n let labels = [];\n\n if (geometry.type === \"Point\") {\n labels.push(new LabelPoint(geometry.coordinates, size, options));\n }\n else if (geometry.type === \"MultiPoint\") {\n let points = geometry.coordinates;\n for (let i = 0; i < points.length; ++i) {\n let point = points[i];\n labels.push(new LabelPoint(point, size, options));\n }\n }\n else if (geometry.type === \"LineString\") {\n let line = geometry.coordinates;\n let point_labels = placePointsOnLine(line, size, options);\n for (let i = 0; i < point_labels.length; ++i) {\n labels.push(point_labels[i]);\n }\n }\n else if (geometry.type === \"MultiLineString\") {\n let lines = geometry.coordinates;\n for (let ln = 0; ln < lines.length; ln++) {\n let line = lines[ln];\n let point_labels = placePointsOnLine(line, size, options);\n for (let i = 0; i < point_labels.length; ++i) {\n labels.push(point_labels[i]);\n }\n }\n }\n else if (geometry.type === \"Polygon\") {\n // Point at polygon centroid (of outer ring)\n if (options.placement === PLACEMENT.CENTROID) {\n let centroid = Geo.centroid(geometry.coordinates);\n labels.push(new LabelPoint(centroid, size, options));\n }\n // Point at each polygon vertex (all rings)\n else {\n let rings = geometry.coordinates;\n for (let ln = 0; ln < rings.length; ln++) {\n let point_labels = placePointsOnLine(rings[ln], size, options);\n for (let i = 0; i < point_labels.length; ++i) {\n labels.push(point_labels[i]);\n }\n }\n }\n }\n else if (geometry.type === \"MultiPolygon\") {\n if (options.placement === PLACEMENT.CENTROID) {\n let centroid = Geo.multiCentroid(geometry.coordinates);\n labels.push(new LabelPoint(centroid, size, options));\n }\n else {\n let polys = geometry.coordinates;\n for (let p = 0; p < polys.length; p++) {\n let rings = polys[p];\n for (let ln = 0; ln < rings.length; ln++) {\n let point_labels = placePointsOnLine(rings[ln], size, options);\n for (let i = 0; i < point_labels.length; ++i) {\n labels.push(point_labels[i]);\n }\n }\n }\n }\n }\n\n return labels;\n },\n\n /**\n * A \"template\" that sets constant attibutes for each vertex, which is then modified per vertex or per feature.\n * A plain JS array matching the order of the vertex layout.\n */\n makeVertexTemplate(style) {\n let color = style.color || StyleParser.defaults.color;\n\n // position - x & y coords will be filled in per-vertex below\n this.fillVertexTemplate('a_position', 0, { size: 2 });\n this.fillVertexTemplate('a_position', style.z || 0, { size: 1, offset: 2 });\n // layer order - w coord of 'position' attribute (for packing efficiency)\n this.fillVertexTemplate('a_position', this.scaleOrder(style.order), { size: 1, offset: 3 });\n\n // scaling vector - (x, y) components per pixel, z = angle, w = scaling factor\n this.fillVertexTemplate('a_shape', 0, { size: 4 });\n\n // texture coords\n this.fillVertexTemplate('a_texcoord', 0, { size: 2 });\n\n // offsets\n this.fillVertexTemplate('a_offset', 0, { size: 2 });\n\n // color\n this.fillVertexTemplate('a_color', Vector.mult(color, 255), { size: 4 });\n\n // outline\n if (this.defines.TANGRAM_SHADER_POINT) {\n let outline_color = style.outline_color || StyleParser.defaults.outline.color;\n this.fillVertexTemplate('a_outline_color', Vector.mult(outline_color, 255), { size: 4 });\n this.fillVertexTemplate('a_outline_edge', style.outline_edge_pct || StyleParser.defaults.outline.width, { size: 1 });\n }\n\n // selection color\n if (this.selection) {\n this.fillVertexTemplate('a_selection_color', Vector.mult(style.selection_color, 255), { size: 4 });\n }\n\n return this.vertex_template;\n },\n\n buildQuad(points, size, angle, angles, pre_angles, sampler, offset, offsets, texcoord_scale, curve, vertex_data, vertex_template) {\n return buildQuadsForPoints(\n points,\n vertex_data,\n vertex_template,\n {\n texcoord_index: this.vertex_layout.index.a_texcoord,\n position_index: this.vertex_layout.index.a_position,\n shape_index: this.vertex_layout.index.a_shape,\n offset_index: this.vertex_layout.index.a_offset,\n offsets_index: this.vertex_layout.index.a_offsets,\n pre_angles_index: this.vertex_layout.index.a_pre_angles,\n angles_index: this.vertex_layout.index.a_angles,\n outline_edge_index: sampler ? null : this.vertex_layout.index.a_outline_edge\n },\n {\n quad: size,\n quad_normalize: 256, // values have an 8-bit fraction\n offset,\n offsets,\n pre_angles: pre_angles,\n angle: angle * 4096, // values have a 12-bit fraction\n angles: angles,\n shape_w: sampler,\n curve,\n texcoord_scale,\n texcoord_normalize,\n pre_angles_normalize,\n angles_normalize,\n offsets_normalize\n }\n );\n },\n\n // Build quad for point sprite\n build (style, vertex_data) {\n let label = style.label;\n if (label.type === 'curved') {\n return this.buildArticulatedLabel(label, style, vertex_data);\n }\n else {\n return this.buildLabel(label, style, vertex_data);\n }\n },\n\n buildLabel (label, style, vertex_data) {\n let vertex_template = this.makeVertexTemplate(style);\n let angle = label.angle || style.angle;\n\n let size, texcoords;\n if (label.type){\n size = style.size[label.type];\n texcoords = style.texcoords[label.type];\n }\n else {\n size = style.size;\n texcoords = style.texcoords;\n }\n\n let offset = label.offset;\n\n // TODO: instead of passing null, pass arrays with fingerprintable values\n // This value is checked in the shader to determine whether to apply curving logic\n return this.buildQuad(\n [label.position], // position\n size, // size in pixels\n angle, // angle in radians\n null, // placeholder for multiple angles\n null, // placeholder for multiple pre_angles\n style.sampler, // texture sampler to use\n offset, // offset from center in pixels\n null, // placeholder for multiple offsets\n texcoords, // texture UVs\n false, // if curved boolean\n vertex_data, vertex_template // VBO and data for current vertex\n );\n },\n\n buildArticulatedLabel (label, style, vertex_data) {\n let vertex_template = this.makeVertexTemplate(style);\n let angle = label.angle;\n let geom_count = 0;\n\n // two passes for stroke and fill, where stroke needs to be drawn first (painter's algorithm)\n // this ensures strokes don't overlap on other fills\n\n // pass for stroke\n for (let i = 0; i < label.num_segments; i++){\n let size = style.size[label.type][i];\n let texcoord_stroke = style.texcoords_stroke[i];\n\n let offset = label.offset || [0,0];\n let position = label.position;\n\n let angles = label.angles[i];\n let offsets = label.offsets[i];\n let pre_angles = label.pre_angles[i];\n\n geom_count += this.buildQuad(\n [position], // position\n size, // size in pixels\n angle, // angle in degrees\n angles, // angles per segment\n pre_angles, // pre_angle array (rotation applied before offseting)\n style.sampler, // texture sampler to use\n offset, // offset from center in pixels\n offsets, // offsets per segment\n texcoord_stroke, // texture UVs for stroked text\n true, // if curved\n vertex_data, vertex_template // VBO and data for current vertex\n );\n }\n\n // pass for fill\n for (let i = 0; i < label.num_segments; i++){\n let size = style.size[label.type][i];\n let texcoord = style.texcoords[label.type][i];\n\n let offset = label.offset || [0,0];\n let position = label.position;\n\n let angles = label.angles[i];\n let offsets = label.offsets[i];\n let pre_angles = label.pre_angles[i];\n\n geom_count += this.buildQuad(\n [position], // position\n size, // size in pixels\n angle, // angle in degrees\n angles, // angles per segment\n pre_angles, // pre_angle array (rotation applied before offseting)\n style.sampler, // texture sampler to use\n offset, // offset from center in pixels\n offsets, // offsets per segment\n texcoord, // texture UVs for fill text\n true, // if curved\n vertex_data, vertex_template // VBO and data for current vertex\n );\n }\n\n return geom_count;\n },\n\n // Override to pass-through to generic point builder\n buildLines (lines, style, vertex_data, context) {\n return this.build(style, vertex_data);\n },\n\n buildPoints (points, style, vertex_data, context) {\n return this.build(style, vertex_data);\n },\n\n buildPolygons (points, style, vertex_data, context) {\n return this.build(style, vertex_data);\n },\n\n makeMesh (vertex_data, vertex_elements, options = {}) {\n // Add label fade time\n options = Object.assign({}, options, { fade_in_time: this.fade_in_time });\n return Style.makeMesh.call(this, vertex_data, vertex_elements, options);\n }\n\n});\n", "// Polygon rendering style\n\nimport {Style} from '../style';\nimport {StyleParser} from '../style_parser';\nimport gl from '../../gl/constants'; // web workers don't have access to GL context, so import all GL constants\nimport VertexLayout from '../../gl/vertex_layout';\nimport {buildPolygons, buildExtrudedPolygons} from '../../builders/polygons';\nimport Geo from '../../geo';\n\nlet fs = require('fs');\nexport const shaderSrc_polygonsVertex = fs.readFileSync(__dirname + '/polygons_vertex.glsl', 'utf8');\nexport const shaderSrc_polygonsFragment = fs.readFileSync(__dirname + '/polygons_fragment.glsl', 'utf8');\n\nexport var Polygons = Object.create(Style);\n\nObject.assign(Polygons, {\n name: 'polygons',\n built_in: true,\n vertex_shader_src: shaderSrc_polygonsVertex,\n fragment_shader_src: shaderSrc_polygonsFragment,\n\n init() {\n Style.init.apply(this, arguments);\n\n // Basic attributes, others can be added (see texture UVs below)\n var attribs = [\n { name: 'a_position', size: 4, type: gl.SHORT, normalized: false },\n { name: 'a_normal', size: 3, type: gl.BYTE, normalized: true }, // gets padded to 4-bytes\n { name: 'a_color', size: 4, type: gl.UNSIGNED_BYTE, normalized: true }\n ];\n\n // Tell the shader we have a normal and order attributes\n this.defines.TANGRAM_NORMAL_ATTRIBUTE = true;\n this.defines.TANGRAM_LAYER_ORDER = true;\n\n // Feature selection\n this.selection = true;\n attribs.push({ name: 'a_selection_color', size: 4, type: gl.UNSIGNED_BYTE, normalized: true });\n\n // Optional texture UVs\n if (this.texcoords) {\n this.defines.TANGRAM_TEXTURE_COORDS = true;\n\n // Add vertex attribute for UVs only when needed\n attribs.push({ name: 'a_texcoord', size: 2, type: gl.UNSIGNED_SHORT, normalized: true });\n }\n\n this.vertex_layout = new VertexLayout(attribs);\n },\n\n _parseFeature (feature, draw, context) {\n var style = this.feature_style;\n\n style.color = this.parseColor(draw.color, context);\n if (!style.color) {\n return null;\n }\n\n style.z = (draw.z && StyleParser.evalCachedDistanceProperty(draw.z, context)) || StyleParser.defaults.z;\n style.z *= Geo.height_scale; // provide sub-meter precision of height values\n\n style.extrude = StyleParser.evalProperty(draw.extrude, context);\n if (style.extrude) {\n // use feature's height and min_height properties\n if (style.extrude === true) {\n style.height = feature.properties.height || StyleParser.defaults.height;\n style.min_height = feature.properties.min_height || StyleParser.defaults.min_height;\n\n }\n // explicit height, no min_height\n else if (typeof style.extrude === 'number') {\n style.height = style.extrude;\n style.min_height = 0;\n }\n // explicit height and min_height\n else if (Array.isArray(style.extrude)) {\n style.min_height = style.extrude[0];\n style.height = style.extrude[1];\n }\n\n style.height *= Geo.height_scale; // provide sub-meter precision of height values\n style.min_height *= Geo.height_scale;\n }\n\n style.tile_edges = draw.tile_edges; // usually activated for debugging, or rare visualization needs\n\n return style;\n },\n\n _preprocess (draw) {\n draw.color = StyleParser.createColorPropertyCache(draw.color);\n draw.z = StyleParser.createPropertyCache(draw.z, StyleParser.parseUnits);\n return draw;\n },\n\n /**\n * A \"template\" that sets constant attibutes for each vertex, which is then modified per vertex or per feature.\n * A plain JS array matching the order of the vertex layout.\n */\n makeVertexTemplate(style) {\n let i = 0;\n\n // position - x & y coords will be filled in per-vertex below\n this.vertex_template[i++] = 0;\n this.vertex_template[i++] = 0;\n this.vertex_template[i++] = style.z || 0;\n\n // layer order - w coord of 'position' attribute (for packing efficiency)\n this.vertex_template[i++] = this.scaleOrder(style.order);\n\n // normal\n this.vertex_template[i++] = 0;\n this.vertex_template[i++] = 0;\n this.vertex_template[i++] = 1 * 127;\n\n // color\n this.vertex_template[i++] = style.color[0] * 255;\n this.vertex_template[i++] = style.color[1] * 255;\n this.vertex_template[i++] = style.color[2] * 255;\n this.vertex_template[i++] = style.color[3] * 255;\n\n // selection color\n if (this.selection) {\n this.vertex_template[i++] = style.selection_color[0] * 255;\n this.vertex_template[i++] = style.selection_color[1] * 255;\n this.vertex_template[i++] = style.selection_color[2] * 255;\n this.vertex_template[i++] = style.selection_color[3] * 255;\n }\n\n // Add texture UVs to template only if needed\n if (this.texcoords) {\n this.vertex_template[i++] = 0;\n this.vertex_template[i++] = 0;\n }\n\n return this.vertex_template;\n },\n\n buildPolygons(polygons, style, vertex_data, context) {\n let vertex_template = this.makeVertexTemplate(style);\n let options = {\n texcoord_index: this.vertex_layout.index.a_texcoord,\n texcoord_normalize: 65535, // scale UVs to unsigned shorts\n remove_tile_edges: !style.tile_edges,\n tile_edge_tolerance: Geo.tile_scale * context.tile.pad_scale * 4,\n winding: context.winding\n };\n\n // Extruded polygons (e.g. 3D buildings)\n if (style.extrude && style.height) {\n return buildExtrudedPolygons(\n polygons,\n style.z, style.height, style.min_height,\n vertex_data, vertex_template,\n this.vertex_layout.index.a_normal,\n 127, // scale normals to signed bytes\n options\n );\n }\n // Regular polygons\n else {\n return buildPolygons(\n polygons,\n vertex_data, vertex_template,\n options\n );\n }\n }\n\n});\n", "// Raster tile rendering style\n\nimport {StyleParser} from '../style_parser';\nimport {Polygons} from '../polygons/polygons';\n\nexport let RasterStyle = Object.create(Polygons);\n\nObject.assign(RasterStyle, {\n name: 'raster',\n super: Polygons,\n built_in: true,\n\n init() {\n // Required for raster tiles\n this.raster = this.raster || 'color';\n\n this.super.init.apply(this, arguments);\n\n this.selection = false; // raster styles can't support feature selection\n },\n\n _preprocess (draw) {\n // Raster tiles default to white vertex color, as this color will tint the underlying texture\n draw.color = draw.color || StyleParser.defaults.color;\n return this.super._preprocess.apply(this, arguments);\n }\n\n});\n", "// Rendering styles\n\nimport {StyleParser} from './style_parser';\nimport FeatureSelection from '../selection';\nimport ShaderProgram from '../gl/shader_program';\nimport VBOMesh from '../gl/vbo_mesh';\nimport Texture from '../gl/texture';\nimport Material from '../material';\nimport Light from '../light';\nimport {RasterTileSource} from '../sources/raster';\nimport log from '../utils/log';\nimport mergeObjects from '../utils/merge';\nimport Thread from '../utils/thread';\nimport WorkerBroker from '../utils/worker_broker';\nimport debugSettings from '../utils/debug_settings';\n\nlet fs = require('fs');\nconst shaderSrc_selectionFragment = fs.readFileSync(__dirname + '/../gl/shaders/selection_fragment.glsl', 'utf8');\nconst shaderSrc_rasters = fs.readFileSync(__dirname + '/../gl/shaders/rasters.glsl', 'utf8');\n\n// Base class\n\nexport var Style = {\n init ({ generation, styles, sources = {}, introspection } = {}) {\n this.generation = generation; // scene generation id this style was created for\n this.styles = styles; // styles for scene\n this.sources = sources; // data sources for scene\n this.defines = (this.hasOwnProperty('defines') && this.defines) || {}; // #defines to be injected into the shaders\n this.shaders = (this.hasOwnProperty('shaders') && this.shaders) || {}; // shader customization (uniforms, defines, blocks, etc.)\n this.introspection = introspection || false;\n this.selection = this.selection || this.introspection || false; // flag indicating if this style supports feature selection\n this.compile_setup = false; // one-time setup steps for program compilation\n this.program = null; // GL program reference (for main render pass)\n this.selection_program = null; // GL program reference for feature selection render pass\n this.feature_style = {}; // style for feature currently being parsed, shared to lessen GC/memory thrash\n this.vertex_template = []; // shared single-vertex template, filled out by each style\n this.tile_data = {};\n\n // Provide a hook for this object to be called from worker threads\n this.main_thread_target = ['Style', this.name, this.generation].join('/');\n if (Thread.is_main) {\n WorkerBroker.addTarget(this.main_thread_target, this);\n }\n\n // Default world coords to wrap every 100,000 meters, can turn off by setting this to 'false'\n this.defines.TANGRAM_WORLD_POSITION_WRAP = 100000;\n\n // Blending\n this.blend = this.blend || 'opaque'; // default: opaque styles are drawn first, without blending\n this.defines[`TANGRAM_BLEND_${this.blend.toUpperCase()}`] = true;\n if (this.blend_order == null) { // controls order of rendering for styles w/non-opaque blending\n this.blend_order = -1; // defaults to first\n }\n\n this.removeShaderBlock('setup'); // clear before material injection\n\n // If the style defines its own material, replace the inherited material instance\n if (!(this.material instanceof Material)) {\n if (!Material.isValid(this.material)) {\n this.material = StyleParser.defaults.material;\n }\n this.material = new Material(this.material);\n }\n this.material.inject(this);\n\n // Set lighting mode: fragment, vertex, or none (specified as 'false')\n Light.setMode(this.lighting, this);\n\n // Setup raster samplers if needed\n this.setupRasters();\n\n this.initialized = true;\n },\n\n destroy () {\n if (this.program) {\n this.program.destroy();\n this.program = null;\n }\n\n if (this.selection_program) {\n this.selection_program.destroy();\n this.selection_program = null;\n }\n\n this.gl = null;\n this.initialized = false;\n },\n\n reset () {\n },\n\n baseStyle () {\n return this.base || this.name;\n },\n\n fillVertexTemplate(attribute, value, { size, offset }) {\n offset = (offset === undefined) ? 0 : offset;\n\n let index = this.vertex_layout.index[attribute];\n if (index === undefined) {\n log('warn', `Style: in style '${this.name}', no index found in vertex layout for attribute '${attribute}'`);\n return;\n }\n\n for (let i = 0; i < size; ++i) {\n let v = value.length > i ? value[i] : value;\n this.vertex_template[index + i + offset] = v;\n }\n },\n\n /*** Style parsing and geometry construction ***/\n\n // Returns an object to hold feature data (for a tile or other object)\n startData (tile) {\n this.tile_data[tile.key] = {\n vertex_data: null,\n uniforms: {},\n textures: []\n };\n return this.tile_data[tile.key];\n },\n\n // Finalizes an object holding feature data (for a tile or other object)\n endData (tile) {\n var tile_data = this.tile_data[tile.key];\n this.tile_data[tile.key] = null;\n\n if (tile_data && tile_data.vertex_data && tile_data.vertex_data.vertex_count > 0) {\n // Only keep final byte buffer\n tile_data.vertex_data.end();\n tile_data.vertex_elements = tile_data.vertex_data.element_buffer;\n tile_data.vertex_data = tile_data.vertex_data.vertex_buffer; // convert from instance to raw typed array\n\n // Load raster tiles passed from data source\n // Blocks mesh completion to avoid flickering\n return this.buildRasterTextures(tile, tile_data).then(() => tile_data);\n }\n else {\n return Promise.resolve(null); // don't send tile data back if doesn't have geometry\n }\n },\n\n // Has mesh data for a given tile?\n hasDataForTile (tile_key) {\n return this.tile_data[tile_key] != null;\n },\n\n addFeature (feature, draw, context) {\n let tile = context.tile;\n if (tile.generation !== this.generation) {\n return;\n }\n\n if (!this.tile_data[tile.key]) {\n this.startData(tile);\n }\n\n let style = this.parseFeature(feature, draw, context);\n\n // Skip feature?\n if (!style) {\n return;\n }\n\n // First feature in this render style?\n if (!this.tile_data[tile.key].vertex_data) {\n this.tile_data[tile.key].vertex_data = this.vertex_layout.createVertexData();\n }\n\n this.buildGeometry(feature.geometry, style, this.tile_data[tile.key].vertex_data, context);\n },\n\n buildGeometry (geometry, style, vertex_data, context) {\n let geom_count;\n if (geometry.type === 'Polygon') {\n geom_count = this.buildPolygons([geometry.coordinates], style, vertex_data, context);\n }\n else if (geometry.type === 'MultiPolygon') {\n geom_count = this.buildPolygons(geometry.coordinates, style, vertex_data, context);\n }\n else if (geometry.type === 'LineString') {\n geom_count = this.buildLines([geometry.coordinates], style, vertex_data, context);\n }\n else if (geometry.type === 'MultiLineString') {\n geom_count = this.buildLines(geometry.coordinates, style, vertex_data, context);\n }\n else if (geometry.type === 'Point') {\n geom_count = this.buildPoints([geometry.coordinates], style, vertex_data, context);\n }\n else if (geometry.type === 'MultiPoint') {\n geom_count = this.buildPoints(geometry.coordinates, style, vertex_data, context);\n }\n\n // Optionally collect per-layer stats\n if (geom_count > 0 && debugSettings.layer_stats) {\n let tile = context.tile;\n tile.debug.layers = tile.debug.layers || { list: {}, tree: {} };\n let list = tile.debug.layers.list;\n let tree = tile.debug.layers.tree;\n let ftree = {}; // tree of layers for this feature\n context.layers.forEach(layer => {\n addLayerDebugEntry(list, layer, 1, geom_count, {[this.name]: geom_count}, {[this.baseStyle()]: geom_count});\n\n let node = tree;\n let fnode = ftree;\n let levels = layer.split(':');\n for (let i=0; i < levels.length; i++) {\n let level = levels[i];\n node[level] = node[level] || { features: 0, geoms: 0, styles: {}, base: {} };\n\n if (fnode[level] == null) { // only count each layer level once per feature\n fnode[level] = {};\n addLayerDebugEntry(node, level, 1, geom_count, {[this.name]: geom_count}, {[this.baseStyle()]: geom_count});\n }\n\n if (i < levels.length - 1) {\n node[level].layers = node[level].layers || {};\n }\n node = node[level].layers;\n fnode = fnode[level];\n }\n });\n }\n },\n\n parseFeature (feature, draw, context) {\n try {\n var style = this.feature_style;\n\n // Calculate order\n style.order = this.parseOrder(draw.order, context);\n if (style.order == null && this.blend !== 'overlay') {\n let msg = `Layer '${draw.layers.join(', ')}', draw group '${draw.group}': `;\n msg += `'order' parameter is required unless blend mode is 'overlay'`;\n if (draw.order != null) {\n msg += `; 'order' was set to a dynamic value (e.g. string tied to feature property, `;\n msg += `or JS function), but evaluated to null for one or more features`;\n }\n log({ level: 'warn', once: true }, msg);\n return;\n }\n\n // Feature selection (only if style supports it)\n var selectable = false;\n style.interactive = this.introspection || draw.interactive;\n if (this.selection) {\n selectable = StyleParser.evalProperty(style.interactive, context);\n }\n\n // If feature is marked as selectable\n if (selectable) {\n style.selection_color = FeatureSelection.makeColor(feature, context.tile, context);\n }\n else {\n style.selection_color = FeatureSelection.defaultColor;\n }\n\n // Subclass implementation\n style = this._parseFeature(feature, draw, context);\n\n return style;\n }\n catch(error) {\n log('error', 'Style.parseFeature: style parsing error', feature, style, error.stack);\n }\n },\n\n _parseFeature (feature, draw, context) {\n return this.feature_style;\n },\n\n preprocess (draw) {\n // Preprocess first time\n if (!draw.preprocessed) {\n // Apply draw defaults\n if (this.draw) {\n mergeObjects(draw, this.draw);\n }\n\n draw = this._preprocess(draw); // optional subclass implementation\n if (!draw) {\n return;\n }\n draw.preprocessed = true;\n }\n return draw;\n },\n\n // optionally implemented by subclass\n _preprocess (draw) {\n return draw;\n },\n\n // Parse an order value\n parseOrder (order, context) {\n // Calculate order if it was not cached\n if (typeof order !== 'number') {\n return StyleParser.calculateOrder(order, context);\n }\n return order;\n },\n\n // Expand final precision for half-layers (for outlines)\n scaleOrder (order) {\n return order * 2;\n },\n\n // Parse a color of choose a default if acceptable, return undefined if color missing\n parseColor(color, context) {\n // Need either a color, or a shader block for 'color' or 'filter'\n if (color) {\n return StyleParser.evalCachedColorProperty(color, context);\n }\n else if (this.shaders.blocks.color || this.shaders.blocks.filter) {\n return StyleParser.defaults.color;\n }\n },\n\n // Build functions are no-ops until overriden\n buildPolygons () { return 0; },\n buildLines () { return 0; },\n buildPoints () { return 0; },\n\n\n /*** GL state and rendering ***/\n\n setGL (gl) {\n this.gl = gl;\n this.max_texture_size = Texture.getMaxTextureSize(this.gl);\n },\n\n makeMesh (vertex_data, vertex_elements, options = {}) {\n return new VBOMesh(this.gl, vertex_data, vertex_elements, this.vertex_layout, options);\n },\n\n render (mesh) {\n return mesh.render();\n },\n\n // Get a specific program, compiling if necessary\n getProgram (key = 'program') {\n this.compileSetup();\n\n const program = this[key];\n if (!program || program.error) {\n return;\n }\n\n if (!program.compiled) {\n log('debug', `Compiling style '${this.name}', program key '${key}'`);\n try {\n program.compile();\n }\n catch(e) {\n log('error', `Style: error compiling program for style '${this.name}' (program key '${key}')`, this, e.stack);\n }\n }\n return program;\n },\n\n // One-time setup for compiling style's programs\n compileSetup () {\n if (this.compile_setup) {\n return;\n }\n\n if (!this.gl) {\n throw(new Error(`style.compile(): skipping for ${this.name} because no GL context`));\n }\n\n // Build defines & for selection (need to create a new object since the first is stored as a reference by the program)\n var defines = this.buildDefineList();\n if (this.selection) {\n var selection_defines = Object.assign({}, defines);\n selection_defines.TANGRAM_FEATURE_SELECTION = true;\n }\n\n // Shader blocks\n var blocks = (this.shaders && this.shaders.blocks);\n var block_scopes = (this.shaders && this.shaders.block_scopes);\n\n // Uniforms\n var uniforms = Object.assign({}, this.shaders && this.shaders.uniforms);\n for (let u in uniforms) { // validate uniforms\n if (uniforms[u] == null) {\n log({ level: 'warn', once: true }, `Style '${this.name}' has invalid uniform '${u}': uniform values must be non-null`);\n }\n }\n\n // Accept a single extension, or an array of extensions\n var extensions = (this.shaders && this.shaders.extensions);\n if (typeof extensions === 'string') {\n extensions = [extensions];\n }\n\n // Create shaders\n this.program = new ShaderProgram(\n this.gl,\n this.vertex_shader_src,\n this.fragment_shader_src,\n {\n name: this.name,\n defines,\n uniforms,\n blocks,\n block_scopes,\n extensions\n }\n );\n\n if (this.selection) {\n this.selection_program = new ShaderProgram(\n this.gl,\n this.vertex_shader_src,\n shaderSrc_selectionFragment,\n {\n name: (this.name + ' (selection)'),\n defines: selection_defines,\n uniforms,\n blocks,\n block_scopes,\n extensions\n }\n );\n }\n else {\n this.selection_program = null;\n }\n\n this.compile_setup = true;\n },\n\n // Add a shader block\n addShaderBlock (key, block, scope = null) {\n this.shaders.blocks = this.shaders.blocks || {};\n this.shaders.blocks[key] = this.shaders.blocks[key] || [];\n this.shaders.blocks[key].push(block);\n\n this.shaders.block_scopes = this.shaders.block_scopes || {};\n this.shaders.block_scopes[key] = this.shaders.block_scopes[key] || [];\n this.shaders.block_scopes[key].push(scope);\n },\n\n // Remove all shader blocks for key\n removeShaderBlock (key) {\n if (this.shaders.blocks) {\n this.shaders.blocks[key] = null;\n }\n },\n\n replaceShaderBlock (key, block, scope = null) {\n this.removeShaderBlock(key);\n this.addShaderBlock(key, block, scope);\n },\n\n /** TODO: could probably combine and generalize this with similar method in ShaderProgram\n * (list of define objects that inherit from each other)\n */\n buildDefineList () {\n // Add any custom defines to built-in style defines\n var defines = {}; // create a new object to avoid mutating a prototype value that may be shared with other styles\n if (this.defines != null) {\n for (var d in this.defines) {\n defines[d] = this.defines[d];\n }\n }\n if (this.shaders != null && this.shaders.defines != null) {\n for (d in this.shaders.defines) {\n defines[d] = this.shaders.defines[d];\n }\n }\n return defines;\n\n },\n\n // Determines if 'raster' parameter is set to a valid value\n hasRasters () {\n return (['color', 'normal', 'custom'].indexOf(this.raster) > -1);\n },\n\n // Setup raster access in shaders\n setupRasters () {\n if (!this.hasRasters()) {\n return;\n }\n\n // Enable raster textures and configure how first raster is applied\n if (this.raster === 'color') {\n this.defines.TANGRAM_RASTER_TEXTURE_COLOR = true;\n }\n else if (this.raster === 'normal') {\n this.defines.TANGRAM_RASTER_TEXTURE_NORMAL = true;\n }\n // else custom raster (samplers will be made available but not automatically applied)\n\n // A given style may be built with multiple data sources, each of which may attach\n // a variable number of raster sources (0 to N, where N is the max number of raster sources\n // defined for the scene). This means we don't know *which* or *how many* rasters will be\n // bound now, at initial compile-time; we only know this at geometry build-time. To ensure\n // that we can bind as many raster sources as needed, we declare our uniform arrays to hold\n // the maximum number of possible sources. At render time, only the necessary number of rasters\n // are bound (the remaining slots aren't intended to be accessed).\n let num_raster_sources =\n Object.keys(this.sources)\n .filter(s => this.sources[s] instanceof RasterTileSource)\n .length;\n\n this.defines.TANGRAM_NUM_RASTER_SOURCES = `${num_raster_sources}`; // force to string to avoid auto-float conversion\n if (num_raster_sources > 0) {\n // Use model position of tile's coordinate zoom for raster tile texture UVs\n this.defines.TANGRAM_MODEL_POSITION_BASE_ZOOM_VARYING = true;\n\n // Uniforms and macros for raster samplers\n this.replaceShaderBlock('raster', shaderSrc_rasters, 'Raster');\n }\n },\n\n // Load raster tile textures and set uniforms\n buildRasterTextures (tile, tile_data) {\n if (!this.hasRasters()) {\n return Promise.resolve(tile_data);\n }\n\n let configs = {}; // texture configs to pass to texture builder, keyed by texture name\n let index = {}; // index into raster sampler array, keyed by texture name\n\n // TODO: data source could retrieve raster texture URLs\n tile.rasters.map(r => this.sources[r]).filter(x => x).forEach((source, i) => {\n if (source instanceof RasterTileSource) {\n let config = source.tileTexture(tile);\n configs[config.url] = config;\n index[config.url] = i;\n }\n });\n\n if (Object.keys(configs).length === 0) {\n return Promise.resolve(tile_data);\n }\n\n // Load textures on main thread and return when done\n // We want to block the building of a raster tile mesh until its texture is loaded,\n // to avoid flickering while loading (texture will render as black)\n return WorkerBroker.postMessage(this.main_thread_target+'.loadTextures', configs)\n .then(textures => {\n if (!textures || textures.length < 1) {\n // TODO: warning\n return tile_data;\n }\n\n // Set texture uniforms (returned after loading from main thread)\n tile_data.uniforms = tile_data.uniforms || {};\n tile_data.textures = tile_data.textures || [];\n\n let u_samplers = tile_data.uniforms['u_rasters'] = [];\n let u_sizes = tile_data.uniforms['u_raster_sizes'] = [];\n let u_offsets = tile_data.uniforms['u_raster_offsets'] = [];\n\n textures.forEach(([tname, twidth, theight]) => {\n let i = index[tname];\n let raster_coords = configs[tname].coords; // tile coords of raster tile\n\n u_samplers[i] = tname;\n tile_data.textures.push(tname);\n\n u_sizes[i] = [twidth, theight];\n\n // Tile geometry may be at a higher zoom than the raster tile texture,\n // (e.g. an overzoomed raster tile), in which case we need to adjust the\n // raster texture UVs to offset to the appropriate starting point for\n // this geometry tile.\n if (tile.coords.z > raster_coords.z) {\n let dz = tile.coords.z - raster_coords.z; // # of levels raster source is overzoomed\n let dz2 = Math.pow(2, dz);\n u_offsets[i] = [\n (tile.coords.x % dz2) / dz2,\n (dz2 - 1 - (tile.coords.y % dz2)) / dz2, // GL texture coords are +Y up\n 1 / dz2\n ];\n }\n else {\n u_offsets[i] = [0, 0, 1];\n }\n });\n\n return tile_data;\n }\n );\n },\n\n // Called on main thread\n loadTextures (textures) {\n // NB: only return name and size of textures loaded, because we can't send actual texture objects to worker\n return Texture.createFromObject(this.gl, textures)\n .then(() => {\n return Promise.all(Object.keys(textures).map(t => {\n return Texture.textures[t] && Texture.textures[t].load();\n }).filter(x => x));\n })\n .then(textures => {\n textures.forEach(t => t.retain());\n return textures.map(t => [t.name, t.width, t.height]);\n });\n },\n\n // Setup any GL state for rendering\n setup () {\n this.setUniforms();\n this.material.setupProgram(ShaderProgram.current);\n },\n\n // Set style uniforms on currently bound program\n setUniforms () {\n var program = ShaderProgram.current;\n if (!program) {\n return;\n }\n\n program.setUniforms(this.shaders && this.shaders.uniforms, true); // reset texture unit to 0\n },\n\n // Render state settings by blend mode\n render_states: {\n opaque: { depth_test: true, depth_write: true },\n add: { depth_test: true, depth_write: false },\n multiply: { depth_test: true, depth_write: false },\n inlay: { depth_test: true, depth_write: false },\n overlay: { depth_test: false, depth_write: false }\n },\n\n // Default sort order for blend modes\n default_blend_orders: {\n opaque: 0,\n add: 1,\n multiply: 2,\n inlay: 3,\n overlay: 4\n },\n\n // Comparison function for sorting styles by blend\n blendOrderSort (a, b) {\n // opaque always comes first\n if (a.blend === 'opaque' || b.blend === 'opaque') {\n if (a.blend === 'opaque' && b.blend === 'opaque') { // if both are opaque\n return a.name < b.name ? -1 : 1; // use name as tie breaker\n }\n else if (a.blend === 'opaque') {\n return -1; // only `a` was opaque\n }\n else {\n return 1; // only `b` was opaque\n }\n }\n\n // use explicit blend order if possible\n if (a.blend_order < b.blend_order) {\n return -1;\n }\n else if (a.blend_order > b.blend_order) {\n return 1;\n }\n\n // if blend orders are equal, use default order by blend mode\n if (Style.default_blend_orders[a.blend] < Style.default_blend_orders[b.blend]) {\n return -1;\n }\n else if (Style.default_blend_orders[a.blend] > Style.default_blend_orders[b.blend]) {\n return 1;\n }\n\n return a.name < b.name ? -1 : 1; // use name as tie breaker\n }\n\n};\n\n// add feature and geometry counts for a single layer\nexport function addLayerDebugEntry (target, layer, faeture_count, geom_count, styles, bases) {\n target[layer] = target[layer] || { features: 0, geoms: 0, styles: {}, base: {} };\n target[layer].features += faeture_count; // feature count\n target[layer].geoms += geom_count; // geometry count\n\n // geometry count by style\n for (let style in styles) {\n target[layer].styles[style] = target[layer].styles[style] || 0;\n target[layer].styles[style] += styles[style];\n }\n\n // geometry count by base style\n for (let style in bases) {\n target[layer].base[style] = target[layer].base[style] || 0;\n target[layer].base[style] += bases[style];\n }\n}\n", "// Manage rendering styles\nimport ShaderProgram from '../gl/shader_program';\nimport mergeObjects from '../utils/merge';\nimport Geo from '../geo';\nimport log from '../utils/log';\n\nimport {Polygons} from './polygons/polygons';\nimport {Lines} from './lines/lines';\nimport {Points} from './points/points';\nimport {TextStyle} from './text/text';\nimport {RasterStyle} from './raster/raster';\n\nlet fs = require('fs');\nconst shaderSrc_accessors = fs.readFileSync(__dirname + '/../gl/shaders/accessors.glsl', 'utf8');\nconst shaderSrc_layerOrder = fs.readFileSync(__dirname + '/../gl/shaders/layer_order.glsl', 'utf8');\nconst shaderSrc_selectionGlobals = fs.readFileSync(__dirname + '/../gl/shaders/selection_globals.glsl', 'utf8');\nconst shaderSrc_selectionVertex = fs.readFileSync(__dirname + '/../gl/shaders/selection_vertex.glsl', 'utf8');\n\nexport class StyleManager {\n\n constructor () {\n this.styles = {};\n this.base_styles = {};\n\n // Add built-in rendering styles\n this.register(Object.create(Polygons));\n this.register(Object.create(Lines));\n this.register(Object.create(Points));\n this.register(Object.create(TextStyle));\n this.register(Object.create(RasterStyle));\n }\n\n // Global configuration for all styles\n init () {\n ShaderProgram.removeBlock('global');\n ShaderProgram.removeBlock('setup');\n\n // Model and world position accessors\n ShaderProgram.addBlock('global', shaderSrc_accessors);\n\n // Layer re-ordering function\n ShaderProgram.addBlock('global', shaderSrc_layerOrder);\n\n // Feature selection global\n ShaderProgram.addBlock('global', shaderSrc_selectionGlobals);\n\n // Feature selection vertex shader support\n ShaderProgram.replaceBlock('setup', shaderSrc_selectionVertex);\n\n // Minimum value for float comparisons\n ShaderProgram.defines.TANGRAM_EPSILON = 0.00001;\n\n // Minimum depth buffer value separating each `order` unit\n // Assume min 16-bit depth buffer, in practice uses 14-bits, 1 extra bit to handle virtual half-layers\n // for outlines (inserted in between layers), another extra bit to prevent precision loss\n ShaderProgram.defines.TANGRAM_LAYER_DELTA = 1 / (1 << 14);\n\n // Internal tile scale\n ShaderProgram.defines.TANGRAM_TILE_SCALE =\n `vec3(${Geo.tile_scale}., ${Geo.tile_scale}., u_meters_per_pixel * ${Geo.tile_size}.)`;\n\n // Increases precision for height values\n ShaderProgram.defines.TANGRAM_HEIGHT_SCALE = Geo.height_scale;\n\n // Alpha discard threshold (substitute for alpha blending)\n ShaderProgram.defines.TANGRAM_ALPHA_TEST = 0.5;\n }\n\n // Destroy all styles for a given GL context\n destroy (gl) {\n Object.keys(this.styles).forEach((_name) => {\n let style = this.styles[_name];\n if (style.gl === gl) {\n log('trace', `StyleManager.destroy: destroying render style ${style.name}`);\n\n if (style.base) {\n this.remove(style.name);\n }\n style.destroy();\n }\n });\n }\n\n // Register a style\n register (style) {\n this.styles[style.name] = style;\n this.base_styles[style.name] = style;\n }\n\n // Remove a style\n remove (name) {\n delete this.styles[name];\n }\n\n mix (style, styles) {\n // Exit early if we have already applied mixins to this style\n if (style.mixed) {\n return style;\n }\n style.mixed = {};\n\n // Mixin sources, in order\n let sources = [];\n if (style.mix) {\n if (Array.isArray(style.mix)) {\n sources.push(...style.mix);\n }\n else {\n sources.push(style.mix);\n }\n sources = sources.map(x => styles[x]).filter(x => x && x !== style); // TODO: warning on trying to mix into self\n\n // Track which styles were mixed into this one\n sources.forEach(s => style.mixed[s.name] = true);\n }\n sources.push(style);\n\n // Flags - OR'd, true if any style has it set\n style.animated = sources.some(x => x && x.animated);\n style.texcoords = sources.some(x => x && x.texcoords);\n\n // Overwrites - last definition wins\n style.base = sources.map(x => x.base).filter(x => x).pop();\n style.lighting = sources.map(x => x.lighting).filter(x => x != null).pop();\n style.texture = sources.map(x => x.texture).filter(x => x).pop();\n style.raster = sources.map(x => x.raster).filter(x => x != null).pop();\n style.dash = sources.map(x => x.dash).filter(x => x != null).pop();\n style.dash_background_color = sources.map(x => x.dash_background_color).filter(x => x != null).pop();\n if (sources.some(x => x.hasOwnProperty('blend') && x.blend)) {\n // only mix blend if explicitly set, otherwise let base style choose blending mode\n // hasOwnProperty check gives preference to base style prototype\n style.blend = sources.map(x => x.hasOwnProperty('blend') && x.blend).filter(x => x).pop();\n }\n style.blend_order = sources.map(x => x.blend_order).filter(x => x != null).pop();\n\n // Merges - property-specific rules for merging values\n style.defines = Object.assign({}, ...sources.map(x => x.defines).filter(x => x)); // internal defines (not user-defined)\n style.material = Object.assign({}, ...sources.map(x => x.material).filter(x => x));\n\n let draws = sources.map(x => x.draw).filter(x => x); // draw defaults\n if (draws.length > 0) {\n style.draw = mergeObjects({}, ...draws);\n }\n\n // Mix shader properties\n this.mixShaders(style, styles, sources);\n return style;\n }\n\n // Mix the propertes in the \"shaders\" block\n mixShaders (style, styles, sources) {\n let shaders = {}; // newly mixed shaders properties\n let shader_merges = sources.map(x => x.shaders).filter(x => x); // just the source styles with shader properties\n\n // Defines\n shaders.defines = Object.assign({}, ...shader_merges.map(x => x.defines).filter(x => x));\n\n // Uniforms\n shaders.uniforms = {}; // uniforms for this style, both explicitly defined, and mixed from other styles\n shaders._uniforms = (style.shaders && style.shaders.uniforms) || {}; // uniforms explicitly defined by *this* style\n shaders._uniform_scopes = {}; // tracks which style each uniform originated from (this one, or ancestor)\n\n // Mix in uniforms from ancestors, providing means to access\n sources\n .filter(x => x.shaders && x.shaders.uniforms)\n .forEach(x => {\n for (let u in x.shaders.uniforms) {\n shaders._uniform_scopes[u] = x.name;\n\n // Define getter and setter for this uniform\n // Getter returns value for this style if present, otherwise asks appropriate ancestor for it\n // Setter sets the value for this style (whether previously present in this style or not)\n // Mimics JS prototype/hasOwnProperty behavior, but with multiple ancestors (via mixins)\n Object.defineProperty(shaders.uniforms, u, {\n enumerable: true,\n configurable: true,\n get: function () {\n // Uniform is explicitly defined on this style\n if (shaders._uniforms[u] !== undefined) {\n return shaders._uniforms[u];\n }\n // Uniform was mixed from another style, forward request there\n // Identify check is needed to prevent infinite recursion if a previously defined uniform\n // is set to undefined\n else if (styles[shaders._uniform_scopes[u]].shaders.uniforms !== shaders.uniforms) {\n return styles[shaders._uniform_scopes[u]].shaders.uniforms[u];\n }\n },\n set: function (v) {\n shaders._uniforms[u] = v;\n }\n });\n }\n });\n\n // Extensions: build a list of unique extensions\n shaders.extensions = Object.keys(shader_merges\n .map(x => x.extensions)\n .filter(x => x)\n .reduce((prev, cur) => {\n // single extension\n if (typeof cur === 'string') {\n prev[cur] = true;\n }\n // array of extensions\n else {\n cur.forEach(x => prev[x] = true);\n }\n return prev;\n }, {}) || {}\n );\n\n // Shader blocks\n // Mark all shader blocks for the target style as originating with its own name\n if (style.shaders && style.shaders.blocks) {\n style.shaders.block_scopes = style.shaders.block_scopes || {};\n for (let k in style.shaders.blocks) {\n let block = style.shaders.blocks[k];\n style.shaders.block_scopes[k] = style.shaders.block_scopes[k] || [];\n if (Array.isArray(block)) {\n style.shaders.block_scopes[k].push(...block.map(() => style.name));\n }\n else {\n style.shaders.block_scopes[k].push(style.name);\n }\n }\n }\n\n // Merge shader blocks, keeping track of which style each block originated from\n let mixed = {}; // all scopes mixed so far\n shader_merges.forEach(source => {\n if (!source.blocks) {\n return;\n }\n\n shaders.blocks = shaders.blocks || {};\n shaders.block_scopes = shaders.block_scopes || {};\n let mixed_source = {}; // scopes mixed for this source style\n\n for (let t in source.blocks) {\n let block = source.blocks[t];\n let block_scope = source.block_scopes[t];\n\n shaders.blocks[t] = shaders.blocks[t] || [];\n shaders.block_scopes[t] = shaders.block_scopes[t] || [];\n\n // standardize on arrays (block can be single or multi-value)\n block = Array.isArray(block) ? block : [block];\n block_scope = Array.isArray(block_scope) ? block_scope : [block_scope];\n\n for (let b=0; b < block.length; b++) {\n // Skip blocks we've already mixed in from the same scope\n // Repeating scope indicates a diamond pattern where a style is being mixed multiple times\n if (mixed[block_scope[b]]) {\n continue;\n }\n mixed_source[block_scope[b]] = true;\n\n shaders.blocks[t].push(block[b]);\n shaders.block_scopes[t].push(block_scope[b]);\n }\n }\n\n // Add styles mixed in from this source - they could be multi-level ancestors,\n // beyond the first-level \"parents\" defined in this style's `mix` list\n Object.assign(mixed, mixed_source);\n });\n\n Object.assign(style.mixed, mixed); // add all newly mixed styles\n\n style.shaders = shaders; // assign back to style\n return style;\n }\n\n // Create a new style\n // name: name of new style\n // config: properties of new style\n // styles: working set of styles being built (used for mixing in existing styles)\n create (name, config, styles = {}) {\n let style = mergeObjects({}, config); // deep copy\n style.name = name;\n\n // Style mixins\n style = this.mix(style, styles);\n\n // Has base style?\n // Only renderable (instantiated) styles should be included for run-time use\n // Others are intermediary/abstract, used during style composition but not execution\n if (style.base && this.base_styles[style.base]) {\n this.styles[name] = style = Object.assign(Object.create(this.base_styles[style.base]), style);\n }\n else {\n style.base = null; // null out invalid base style\n }\n\n return style;\n }\n\n // Called to create and initialize styles\n build (styles) {\n // Sort styles by dependency, then build them\n let style_deps = Object.keys(styles).sort(\n (a, b) => this.inheritanceDepth(a, styles) - this.inheritanceDepth(b, styles)\n );\n\n // Only keep built-in base styles\n for (let sname in this.styles) {\n if (!this.base_styles[sname]) {\n delete this.styles[sname];\n }\n else {\n this.styles[sname].reset();\n }\n }\n\n // Working set of styles being built\n let ws = {};\n style_deps.forEach(sname => {\n ws[sname] = this.create(sname, styles[sname], ws);\n });\n\n return this.styles;\n }\n\n // Initialize all styles\n initStyles (scene = {}) {\n // Initialize all\n for (let sname in this.styles) {\n this.styles[sname].init(scene);\n }\n }\n\n // Given a style key in a set of styles to add, count the length of the inheritance chain\n inheritanceDepth (key, styles) {\n let parents = 0;\n\n while(true) {\n let style = styles[key];\n if (!style) {\n // this is a scene def error, trying to extend a style that doesn't exist\n break;\n }\n\n // Dependency chain ends when this style isn't mixing in any others\n if (!style.mix) {\n break;\n }\n\n // Traverse next parent style\n parents++;\n\n if (Array.isArray(style.mix)) {\n // If multiple mixins, find the deepest one\n parents += Math.max(...style.mix.map(s => {\n // Trying to mix into itself!\n if (key === s) {\n return;\n }\n\n return this.inheritanceDepth(s, styles);\n }));\n break;\n }\n else {\n // Trying to mix into itself!\n if (key === style.mix) {\n break;\n }\n\n // If single mixin, continue loop up the tree\n key = style.mix;\n }\n }\n return parents;\n }\n\n}\n", "import Utils from '../utils/utils';\nimport Geo from '../geo';\n\nimport parseCSSColor from 'csscolorparser';\n\nexport var StyleParser = {};\n\n// Wraps style functions and provides a scope of commonly accessible data:\n// - feature: the 'properties' of the feature, e.g. accessed as 'feature.name'\n// - global: user-defined properties on the `global` object in the scene file\n// - $zoom: the current map zoom level\n// - $geometry: the type of geometry, 'point', 'line', or 'polygon'\n// - $meters_per_pixel: conversion for meters/pixels at current map zoom\nStyleParser.wrapFunction = function (func) {\n var f = `\n var feature = context.feature.properties;\n var global = context.global;\n var $zoom = context.zoom;\n var $layer = context.layer;\n var $geometry = context.geometry;\n var $meters_per_pixel = context.meters_per_pixel;\n\n var val = (function(){ ${func} }());\n\n if (typeof val === 'number' && isNaN(val)) {\n val = null; // convert NaNs to nulls\n }\n\n return val;\n `;\n return f;\n};\n\n\n// Style parsing\n\nStyleParser.zeroPair = Object.freeze([0, 0]); // single allocation for zero values that won't be modified\n\n// Style defaults\nStyleParser.defaults = {\n color: [1, 1, 1, 1],\n width: 1,\n size: 1,\n extrude: false,\n height: 20,\n min_height: 0,\n order: 0,\n z: 0,\n outline: {\n color: [0, 0, 0, 0],\n width: 0\n },\n material: {\n ambient: 1,\n diffuse: 1\n }\n};\n\n// Style macros\nStyleParser.macros = {\n // pseudo-random color by geometry id\n 'Style.color.pseudoRandomColor': function() {\n return [\n 0.7 * (parseInt(feature.id, 16) / 100 % 1), // jshint ignore:line\n 0.7 * (parseInt(feature.id, 16) / 10000 % 1), // jshint ignore:line\n 0.7 * (parseInt(feature.id, 16) / 1000000 % 1), // jshint ignore:line\n 1\n ];\n },\n\n // random color\n 'Style.color.randomColor': function() {\n return [0.7 * Math.random(), 0.7 * Math.random(), 0.7 * Math.random(), 1];\n }\n};\n\n// A context object that is passed to style parsing functions to provide a scope of commonly used values\nStyleParser.getFeatureParseContext = function (feature, tile, global) {\n return {\n feature,\n tile,\n global,\n zoom: tile.style_zoom,\n geometry: Geo.geometryType(feature.geometry.type),\n meters_per_pixel: tile.meters_per_pixel,\n meters_per_pixel_sq: tile.meters_per_pixel_sq,\n units_per_meter_overzoom: tile.units_per_meter_overzoom\n };\n};\n\n// Build a style param cache object\n// `value` is raw value, cache methods will add other properties as needed\n// `transform` is optional transform function to run on values (except function values)\nStyleParser.createPropertyCache = function (obj, transform = null) {\n if (obj == null) {\n return;\n }\n\n if (obj.value) {\n return { value: obj.value, zoom: (obj.zoom ? {} : null) }; // clone existing cache object\n }\n\n let c = { value: obj };\n\n // does value contain zoom stops to be interpolated?\n if (Array.isArray(c.value) && Array.isArray(c.value[0])) {\n c.zoom = {}; // will hold values interpolated by zoom\n }\n\n // apply optional transform function\n if (typeof transform === 'function') {\n if (c.zoom) { // apply to each zoom stop value\n c.value = c.value.map(v => [v[0], transform(v[1])]);\n }\n else if (typeof c.value !== 'function') { // don't transform functions\n c.value = transform(c.value); // single value\n }\n }\n\n return c;\n};\n\n// Convert old-style color macro into a function\n// TODO: deprecate this macro syntax\nStyleParser.createColorPropertyCache = function (obj) {\n return StyleParser.createPropertyCache(obj, v => {\n if (v === 'Style.color.pseudoRandomColor') {\n return Utils.stringToFunction(StyleParser.wrapFunction(StyleParser.macros['Style.color.pseudoRandomColor']));\n }\n else if (v === 'Style.color.randomColor') {\n return StyleParser.macros['Style.color.randomColor'];\n }\n\n return v;\n });\n};\n\n// Interpolation and caching for a generic property (not a color or distance)\n// { value: original, static: val, zoom: { 1: val1, 2: val2, ... }, dynamic: function(){...} }\nStyleParser.evalCachedProperty = function(val, context) {\n if (val == null) {\n return;\n }\n else if (val.dynamic) { // function, compute each time (no caching)\n let v = val.dynamic(context);\n return v;\n }\n else if (val.static) { // single static value\n return val.static;\n }\n else if (val.zoom && val.zoom[context.zoom]) { // interpolated, cached\n return val.zoom[context.zoom];\n }\n else { // not yet evaulated for cache\n // Dynamic function-based\n if (typeof val.value === 'function') {\n val.dynamic = val.value;\n let v = val.dynamic(context);\n return v;\n }\n // Array of zoom-interpolated stops, e.g. [zoom, value] pairs\n else if (Array.isArray(val.value) && Array.isArray(val.value[0])) {\n // Calculate value for current zoom\n val.zoom = val.zoom || {};\n val.zoom = {};\n val.zoom[context.zoom] = Utils.interpolate(context.zoom, val.value);\n return val.zoom[context.zoom];\n }\n // Single static value\n else {\n val.static = val.value;\n return val.static;\n }\n }\n};\n\nStyleParser.convertUnits = function(val, context) {\n // pre-parsed units\n if (val.val != null) {\n if (val.units === 'px') { // convert from pixels\n return val.val * Geo.metersPerPixel(context.zoom);\n }\n return val.val;\n }\n // un-parsed unit string\n else if (typeof val === 'string') {\n var units = val.match(/([0-9.-]+)([a-z]+)/);\n if (units && units.length === 3) {\n val = parseFloat(units[1]);\n units = units[2];\n }\n\n if (units === 'px') { // convert from pixels\n val *= Geo.metersPerPixel(context.zoom);\n }\n }\n // multiple values or stops\n else if (Array.isArray(val)) {\n // Array of arrays, e.g. zoom-interpolated stops\n if (Array.isArray(val[0])) {\n return val.map(v => [v[0], StyleParser.convertUnits(v[1], context)]);\n }\n // Array of values\n else {\n return val.map(v => StyleParser.convertUnits(v, context));\n }\n }\n return val;\n};\n\n// Pre-parse units from string values\nStyleParser.parseUnits = function (val) {\n var obj = { val: parseFloat(val) };\n if (obj.val !== 0 && typeof val === 'string' && val.trim().slice(-2) === 'px') {\n obj.units = 'px';\n }\n return obj;\n};\n\n// Takes a distance cache object and returns a distance value for this zoom\n// (caching the result for future use)\n// { value: original, zoom: { z: meters }, dynamic: function(){...} }\nStyleParser.evalCachedDistanceProperty = function(val, context) {\n if (val.dynamic) {\n let v = val.dynamic(context);\n return v;\n }\n else if (val.zoom && val.zoom[context.zoom]) {\n return val.zoom[context.zoom];\n }\n else {\n // Dynamic function-based\n if (typeof val.value === 'function') {\n val.dynamic = val.value;\n let v = val.dynamic(context);\n return v;\n }\n // Array of zoom-interpolated stops, e.g. [zoom, value] pairs\n else if (val.zoom) {\n // Calculate value for current zoom\n // Do final unit conversion as late as possible, when interpolation values have been determined\n val.zoom[context.zoom] = Utils.interpolate(context.zoom, val.value,\n v => StyleParser.convertUnits(v, context));\n\n return val.zoom[context.zoom];\n }\n else {\n return StyleParser.convertUnits(val.value, context);\n }\n }\n};\n\n// Cache previously parsed color strings\nStyleParser.string_colors = {};\nStyleParser.colorForString = function(string) {\n // Cached\n if (StyleParser.string_colors[string]) {\n return StyleParser.string_colors[string];\n }\n\n // Calculate and cache\n let color = parseCSSColor.parseCSSColor(string);\n if (color && color.length === 4) {\n color[0] /= 255;\n color[1] /= 255;\n color[2] /= 255;\n }\n else {\n color = StyleParser.defaults.color;\n }\n StyleParser.string_colors[string] = color;\n return color;\n};\n\n// Takes a color cache object and returns a color value for this zoom\n// (caching the result for future use)\n// { value: original, static: [r,g,b,a], zoom: { z: [r,g,b,a] }, dynamic: function(){...} }\nStyleParser.evalCachedColorProperty = function(val, context = {}) {\n if (val.dynamic) {\n let v = val.dynamic(context);\n\n if (typeof v === 'string') {\n v = StyleParser.colorForString(v);\n }\n\n if (v && v[3] == null) {\n v[3] = 1; // default alpha\n }\n return v;\n }\n else if (val.static) {\n return val.static;\n }\n else if (val.zoom && val.zoom[context.zoom]) {\n return val.zoom[context.zoom];\n }\n else {\n // Dynamic function-based color\n if (typeof val.value === 'function') {\n val.dynamic = val.value;\n let v = val.dynamic(context);\n\n if (typeof v === 'string') {\n v = StyleParser.colorForString(v);\n }\n\n if (v && v[3] == null) {\n v[3] = 1; // default alpha\n }\n return v;\n }\n // Single string color\n else if (typeof val.value === 'string') {\n val.static = StyleParser.colorForString(val.value);\n return val.static;\n }\n // Array of zoom-interpolated stops, e.g. [zoom, color] pairs\n else if (val.zoom) {\n // Parse any string colors inside stops, the first time we encounter this property\n if (!val.zoom_preprocessed) {\n for (let i=0; i < val.value.length; i++) {\n let v = val.value[i];\n if (v && typeof v[1] === 'string') {\n v[1] = StyleParser.colorForString(v[1]);\n }\n }\n val.zoom_preprocessed = true;\n }\n\n // Calculate color for current zoom\n val.zoom[context.zoom] = Utils.interpolate(context.zoom, val.value);\n val.zoom[context.zoom][3] = val.zoom[context.zoom][3] || 1; // default alpha\n return val.zoom[context.zoom];\n }\n // Single array color\n else {\n val.static = val.value;\n if (val.static && val.static[3] == null) {\n val.static[3] = 1; // default alpha\n }\n return val.static;\n }\n }\n};\n\nStyleParser.parseColor = function(val, context = {}) {\n if (typeof val === 'function') {\n val = val(context);\n }\n\n // Parse CSS-style colors\n // TODO: change all colors to use 0-255 range internally to avoid dividing and then re-multiplying in geom builder\n if (typeof val === 'string') {\n val = StyleParser.colorForString(val);\n }\n else if (Array.isArray(val) && Array.isArray(val[0])) {\n // Array of zoom-interpolated stops, e.g. [zoom, color] pairs\n for (let i=0; i < val.length; i++) {\n let v = val[i];\n if (typeof v[1] === 'string') {\n v[1] = StyleParser.colorForString(v[1]);\n }\n }\n\n if (context.zoom) {\n val = Utils.interpolate(context.zoom, val);\n }\n }\n\n // Defaults\n if (val) {\n // alpha\n if (val[3] == null) {\n val[3] = 1;\n }\n }\n else {\n val = [0, 0, 0, 1];\n }\n\n return val;\n};\n\nStyleParser.calculateOrder = function(order, context) {\n // Computed order\n if (typeof order === 'function') {\n order = order(context);\n }\n else if (typeof order === 'string') {\n // Order tied to feature property\n if (context.feature.properties[order]) {\n order = context.feature.properties[order];\n }\n // Explicit order value\n else {\n order = parseFloat(order);\n }\n }\n\n return order;\n};\n\n// Evaluate a function-based property, or pass-through static value\nStyleParser.evalProperty = function(prop, context) {\n if (typeof prop === 'function') {\n return prop(context);\n }\n return prop;\n};\n", - "import log from '../../utils/log';\nimport Utils from '../../utils/utils';\nimport Texture from '../../gl/texture';\nimport FontManager from './font_manager';\nimport debugSettings from '../../utils/debug_settings';\n\nconst codon_length = 2; // length of chunks when breaking up label text\n\nexport default class CanvasText {\n\n constructor () {\n this.canvas = document.createElement('canvas');\n this.canvas.style.backgroundColor = 'transparent'; // render text on transparent background\n this.context = this.canvas.getContext('2d');\n this.vertical_text_buffer = 8; // vertical pixel padding around text\n this.horizontal_text_buffer = 4; // text styling such as italic emphasis is not measured by the Canvas API, so padding is necessary\n }\n\n resize (width, height) {\n this.canvas.width = width;\n this.canvas.height = height;\n this.context.clearRect(0, 0, width, height);\n }\n\n // Set font style params for canvas drawing\n setFont ({ font_css, fill, stroke, stroke_width, px_size, supersample }) {\n this.px_size = px_size;\n let ctx = this.context;\n let dpr = Utils.device_pixel_ratio * supersample;\n\n if (stroke && stroke_width > 0) {\n ctx.strokeStyle = stroke;\n ctx.lineWidth = stroke_width * dpr;\n }\n ctx.fillStyle = fill;\n\n ctx.font = font_css;\n ctx.miterLimit = 2;\n }\n\n textSizes (texts) {\n let dpr;\n return FontManager.loadFonts().then(() => {\n for (let style in texts) {\n CanvasText.initTextCache(style);\n\n let text_infos = texts[style];\n let first = true;\n\n for (let text in text_infos) {\n let text_info = text_infos[text];\n let text_settings = text_info.text_settings;\n\n if (first) {\n this.setFont(text_settings);\n dpr = Utils.device_pixel_ratio * text_settings.supersample;\n first = false;\n }\n\n if (text_settings.can_articulate){\n let words = text.split(' ');\n\n // RTL is true if every word is RTL\n // BIDI is true if there is RTL and LTR\n let hasRTL = false;\n let hasLTR = false;\n let bidi = false;\n for (var i = 0; i < words.length; i++){\n if (isTextRTL(words[i])) {\n if (hasLTR){\n bidi = true;\n break;\n }\n hasRTL = true;\n }\n else {\n if (hasRTL){\n bidi = true;\n break;\n }\n hasLTR = true;\n }\n }\n\n let rtl = (hasRTL && !hasLTR) && !bidi;\n let shaped = isTextShaped(text);\n\n text_info.isRTL = rtl;\n text_info.no_curving = bidi || shaped;\n text_info.vertical_buffer = this.vertical_text_buffer;\n\n let segments = splitLabelText(text, rtl);\n\n if (rtl) {\n segments.reverse();\n }\n\n text_info.segments = segments;\n text_info.size = [];\n\n if (!text_info.no_curving) {\n for (let i = 0; i < segments.length; i++){\n text_info.size.push(this.textSize(style, segments[i], text_settings).size);\n }\n }\n\n // add full text as well\n text_info.total_size = this.textSize(style, text, text_settings).size;\n }\n else {\n // Only send text sizes back to worker (keep computed text line info\n // on main thread, for future rendering)\n text_info.size = this.textSize(style, text, text_settings).size;\n }\n }\n }\n\n return texts;\n });\n }\n\n // Computes width and height of text based on current font style\n // Includes word wrapping, returns size info for whole text block and individual lines\n textSize (style, text, {transform, text_wrap, max_lines, stroke_width = 0, supersample}) {\n // Check cache first\n if (CanvasText.text_cache[style][text]) {\n CanvasText.cache_stats.hits++;\n return CanvasText.text_cache[style][text];\n }\n CanvasText.cache_stats.misses++;\n CanvasText.text_cache_count++;\n\n // Calc and store in cache\n let dpr = Utils.device_pixel_ratio * supersample;\n let str = this.applyTextTransform(text, transform);\n let ctx = this.context;\n let vertical_buffer = this.vertical_text_buffer * dpr;\n let horizontal_buffer = dpr * (stroke_width + this.horizontal_text_buffer);\n let leading = 2 * dpr; // make configurable and/or use Canvas TextMetrics when available\n let line_height = this.px_size + leading; // px_size already in device pixels\n\n // Parse string into series of lines if it exceeds the text wrapping value or contains line breaks\n let multiline = MultiLine.parse(str, text_wrap, max_lines, line_height, ctx);\n\n // Final dimensions of text\n let height = multiline.height;\n let width = multiline.width;\n let lines = multiline.lines;\n\n let collision_size = [\n width / dpr,\n height / dpr\n ];\n\n let texture_size = [\n width + 2 * horizontal_buffer,\n height + 2 * vertical_buffer\n ];\n\n let logical_size = [\n texture_size[0] / dpr,\n texture_size[1] / dpr,\n ];\n\n // Returns lines (w/per-line info for drawing) and text's overall bounding box + canvas size\n CanvasText.text_cache[style][text] = {\n lines,\n size: { collision_size, texture_size, logical_size, line_height }\n };\n return CanvasText.text_cache[style][text];\n }\n\n // Draw multiple lines of text\n drawTextMultiLine (lines, [x, y], size, { stroke, stroke_width = 0, transform, align, supersample }, type) {\n let line_height = size.line_height;\n let height = y;\n for (let line_num=0; line_num < lines.length; line_num++) {\n let line = lines[line_num];\n this.drawTextLine(line, [x, height], size, { stroke, stroke_width, transform, align, supersample }, type);\n height += line_height;\n }\n\n // Draw bounding boxes for debugging\n if (debugSettings.draw_label_collision_boxes) {\n this.context.save();\n\n let dpr = Utils.device_pixel_ratio * supersample;\n let horizontal_buffer = dpr * (this.horizontal_text_buffer + stroke_width);\n let vertical_buffer = dpr * this.vertical_text_buffer;\n let collision_size = size.collision_size;\n let lineWidth = 2;\n\n this.context.strokeStyle = 'blue';\n this.context.lineWidth = lineWidth;\n this.context.strokeRect(x + horizontal_buffer, y + vertical_buffer, dpr * collision_size[0], dpr * collision_size[1]);\n if (type === 'curved'){\n this.context.strokeRect(x + size.texture_size[0] + horizontal_buffer, y + vertical_buffer, dpr * collision_size[0], dpr * collision_size[1]);\n }\n\n this.context.restore();\n }\n\n if (debugSettings.draw_label_texture_boxes) {\n this.context.save();\n\n let texture_size = size.texture_size;\n let lineWidth = 2;\n\n this.context.strokeStyle = 'green';\n this.context.lineWidth = lineWidth;\n // stroke is applied internally, so the outer border is the edge of the texture\n this.context.strokeRect(x + lineWidth, y + lineWidth, texture_size[0] - 2 * lineWidth, texture_size[1] - 2 * lineWidth);\n\n if (type === 'curved'){\n this.context.strokeRect(x + lineWidth + size.texture_size[0], y + lineWidth, texture_size[0] - 2 * lineWidth, texture_size[1] - 2 * lineWidth);\n }\n\n this.context.restore();\n }\n }\n\n // Draw single line of text at specified location, adjusting for buffer and baseline\n drawTextLine (line, [x, y], size, { stroke, stroke_width = 0, transform, align, supersample }, type) {\n let dpr = Utils.device_pixel_ratio * supersample;\n align = align || 'center';\n\n let vertical_buffer = this.vertical_text_buffer * dpr;\n let texture_size = size.texture_size;\n let line_height = size.line_height;\n let horizontal_buffer = dpr * (stroke_width + this.horizontal_text_buffer);\n\n let str = this.applyTextTransform(line.text, transform);\n\n // Text alignment\n let tx;\n if (align === 'left') {\n tx = x + horizontal_buffer;\n }\n else if (align === 'center') {\n tx = x + texture_size[0]/2 - line.width/2;\n }\n else if (align === 'right') {\n tx = x + texture_size[0] - line.width - horizontal_buffer;\n }\n\n // In the absence of better Canvas TextMetrics (not supported by browsers yet),\n // 0.75 buffer produces a better approximate vertical centering of text\n let ty = y + vertical_buffer * 0.75 + line_height;\n\n if (stroke && stroke_width > 0) {\n let shift = (type === 'curved') ? texture_size[0] : 0;\n this.context.strokeText(str, tx + shift, ty);\n }\n this.context.fillText(str, tx, ty);\n }\n\n rasterize (texts, texture_size, tile_key) {\n for (let style in texts) {\n let text_infos = texts[style];\n let first = true;\n\n for (let text in text_infos) {\n let text_info = text_infos[text];\n let text_settings = text_info.text_settings;\n\n // set font on first occurence of new font style\n if (first) {\n this.setFont(text_settings);\n first = false;\n }\n\n if (text_settings.can_articulate){\n let words = text_info.segments;\n\n text_info.texcoords = {};\n for (let i = 0; i < text_info.type.length; i++){\n\n let type = text_info.type[i];\n switch (type){\n case 'straight':\n let word = words.reduce((text_info.isRTL) ? reduceLeft : reduceRight);\n let texcoord;\n\n if (CanvasText.texcoord_cache[tile_key][style][word].texcoord){\n texcoord = CanvasText.texcoord_cache[tile_key][style][word].texcoord;\n }\n else {\n let texture_position = CanvasText.texcoord_cache[tile_key][style][word].texture_position;\n let size = CanvasText.text_cache[style][word].size;\n let line = CanvasText.text_cache[style][word].lines;\n\n this.drawTextMultiLine(line, texture_position, size, text_settings, type);\n\n texcoord = Texture.getTexcoordsForSprite(\n texture_position,\n size.texture_size,\n texture_size\n );\n\n CanvasText.texcoord_cache[tile_key][style][word].texcoord = texcoord;\n }\n\n text_info.texcoords[type] = texcoord;\n break;\n case 'curved':\n text_info.texcoords.curved = [];\n text_info.texcoords_stroke = [];\n for (let i = 0; i < words.length; i++){\n let word = words[i];\n let texcoord;\n let texcoord_stroke;\n\n if (CanvasText.texcoord_cache[tile_key][style][word].texcoord){\n texcoord = CanvasText.texcoord_cache[tile_key][style][word].texcoord;\n texcoord_stroke = CanvasText.texcoord_cache[tile_key][style][word].texcoord_stroke;\n\n text_info.texcoords_stroke.push(texcoord_stroke);\n }\n else {\n let texture_position = CanvasText.texcoord_cache[tile_key][style][word].texture_position;\n let size = CanvasText.text_cache[style][word].size;\n let line = CanvasText.text_cache[style][word].lines;\n\n this.drawTextMultiLine(line, texture_position, size, text_settings, type);\n\n texcoord = Texture.getTexcoordsForSprite(\n texture_position,\n size.texture_size,\n texture_size\n );\n\n let texture_position_stroke = [\n texture_position[0] + size.texture_size[0],\n texture_position[1]\n ];\n\n texcoord_stroke = Texture.getTexcoordsForSprite(\n texture_position_stroke,\n size.texture_size,\n texture_size\n );\n\n CanvasText.texcoord_cache[tile_key][style][word].texcoord = texcoord;\n CanvasText.texcoord_cache[tile_key][style][word].texcoord_stroke = texcoord_stroke;\n\n text_info.texcoords_stroke.push(texcoord_stroke);\n }\n\n text_info.texcoords.curved.push(texcoord);\n }\n break;\n }\n }\n }\n else {\n let lines = CanvasText.text_cache[style][text].lines; // get previously computed lines of text\n for (let align in text_info.align) {\n this.drawTextMultiLine(lines, text_info.align[align].texture_position, text_info.size, {\n stroke: text_settings.stroke,\n stroke_width: text_settings.stroke_width,\n transform: text_settings.transform,\n supersample: text_settings.supersample,\n align: align\n });\n\n text_info.align[align].texcoords = Texture.getTexcoordsForSprite(\n text_info.align[align].texture_position,\n text_info.size.texture_size,\n texture_size\n );\n }\n }\n }\n }\n CanvasText.clearTexcoordCache(tile_key);\n }\n\n // Place text labels within an atlas of the given max size\n setTextureTextPositions (texts, max_texture_size, tile_key) {\n CanvasText.clearTexcoordCache(tile_key);\n CanvasText.texcoord_cache[tile_key] = {};\n\n // Keep track of column width\n let column_width = 0;\n\n // Layout labels, stacked in columns\n let cx = 0, cy = 0; // current x/y position in atlas\n let height = 0; // overall atlas height\n for (let style in texts) {\n if (!CanvasText.texcoord_cache[tile_key][style]) {\n CanvasText.texcoord_cache[tile_key][style] = {};\n }\n\n let text_infos = texts[style];\n\n for (let text in text_infos) {\n let text_info = text_infos[text];\n\n if (text_info.text_settings.can_articulate){\n let texture_position;\n\n for (let i = 0; i < text_info.type.length; i++){\n let type = text_info.type[i];\n switch (type){\n case 'straight':\n let size = text_info.total_size.texture_size;\n let word = text_info.segments.reduce((text_info.isRTL) ? reduceLeft : reduceRight);\n\n if (size[0] > column_width) {\n column_width = size[0];\n }\n if (cy + size[1] < max_texture_size) {\n texture_position = [cx, cy];\n\n cy += size[1];\n if (cy > height) {\n height = cy;\n }\n }\n else { // start new column if taller than texture\n cx += column_width;\n column_width = 0;\n cy = 0;\n texture_position = [cx, cy];\n }\n\n CanvasText.texcoord_cache[tile_key][style][word] = {\n texture_position: texture_position\n };\n break;\n case 'curved':\n for (let i = 0; i < text_info.size.length; i++) {\n let word = text_info.segments[i];\n\n if (!CanvasText.texcoord_cache[tile_key][style][word]) {\n\n let size = text_info.size[i].texture_size;\n let width = 2 * size[0];\n if (width > column_width) {\n column_width = width;\n }\n if (cy + size[1] < max_texture_size) {\n texture_position = [cx, cy];\n\n cy += size[1];\n if (cy > height) {\n height = cy;\n }\n }\n else { // start new column if taller than texture\n cx += column_width;\n column_width = 0;\n cy = 0;\n texture_position = [cx, cy];\n }\n\n CanvasText.texcoord_cache[tile_key][style][word] = {\n texture_position: texture_position\n };\n }\n }\n break;\n }\n }\n }\n else {\n // rendered size is same for all alignments\n let size = text_info.size.texture_size;\n if (size[0] > column_width) {\n column_width = size[0];\n }\n\n // but each alignment needs to be rendered separately\n for (let align in text_info.align) {\n if (cy + size[1] < max_texture_size) {\n text_info.align[align].texture_position = [cx, cy]; // add label to current column\n cy += size[1];\n if (cy > height) {\n height = cy;\n }\n }\n else { // start new column if taller than texture\n cx += column_width;\n column_width = 0;\n cy = 0;\n text_info.align[align].texture_position = [cx, cy];\n }\n }\n }\n }\n }\n\n return [cx + column_width, height]; // overall atlas size\n }\n\n // Called before rasterization\n applyTextTransform (text, transform) {\n if (transform === 'capitalize') {\n return text.replace(/\\w\\S*/g, function (txt) {\n return txt.charAt(0).toUpperCase() + txt.substr(1);\n });\n }\n else if (transform === 'uppercase') {\n return text.toUpperCase();\n }\n else if (transform === 'lowercase') {\n return text.toLowerCase();\n }\n return text;\n }\n\n // Convert font CSS-style size ('12px', '14pt', '1.5em', etc.) to pixel size (adjusted for device pixel ratio)\n // Defaults units to pixels if not specified\n static fontPixelSize (size) {\n if (size == null) {\n return;\n }\n size = (typeof size === 'string') ? size : String(size); // need a string for regex\n\n let [, px_size, units] = size.match(CanvasText.font_size_re) || [];\n units = units || 'px';\n\n if (units === \"em\") {\n px_size *= 16;\n } else if (units === \"pt\") {\n px_size /= 0.75;\n } else if (units === \"%\") {\n px_size /= 6.25;\n }\n\n px_size = parseFloat(px_size);\n px_size *= Utils.device_pixel_ratio;\n return px_size;\n }\n\n static clearTexcoordCache (tile_key) {\n delete CanvasText.texcoord_cache[tile_key];\n }\n\n static initTextCache (style) {\n CanvasText.text_cache[style] = CanvasText.text_cache[style] || {};\n }\n\n static pruneTextCache () {\n if (CanvasText.text_cache_count > CanvasText.text_cache_count_max) {\n CanvasText.text_cache = {};\n CanvasText.text_cache_count = 0;\n log('debug', 'CanvasText: pruning text cache');\n }\n }\n\n}\n\n// Extract font size and units\nCanvasText.font_size_re = /((?:[0-9]*\\.)?[0-9]+)\\s*(px|pt|em|%)?/;\n\n// Cache sizes of rendered text\nCanvasText.text_cache = {}; // by text style, then text string\nCanvasText.text_cache_count = 0; // current size of cache (measured as # of entries)\nCanvasText.text_cache_count_max = 5000; // prune cache when it exceeds this size\nCanvasText.cache_stats = { hits: 0, misses: 0 };\nCanvasText.texcoord_cache = {};\n\nfunction reduceLeft (prev, next){ return next + prev; }\nfunction reduceRight (prev, next){ return prev + next; }\n\n// Contextual Shaping Languages - Unicode ranges\nconst context_langs = {\n Arabic: \"\\u0600-\\u06FF\",\n Bengali: \"\\u0980-\\u09FF\",\n Burmese: \"\\u1000-\\u109F\",\n Devanagari: \"\\u0900-\\u097F\",\n Khmer: \"\\u1780-\\u17FF\",\n Gujarati: \"\\u0A80-\\u0AFF\",\n Gurmukhi: \"\\u0A00-\\u0A7F\",\n Kannada: \"\\u0C80-\\u0CFF\",\n Lao: \"\\u0E80-\\u0EFF\",\n Mongolian: \"\\u1800-\\u18AF\",\n Oriya: \"\\u0B00-\\u0B7F\",\n Tamil: \"\\u0B80-\\u0BFF\",\n Telugu: \"\\u0C00-\\u0C7F\",\n Tibetan: \"\\u0F00-\\u0FFF\"\n};\n\nlet reg_ex_shaping = '[';\nfor (let key in context_langs){\n reg_ex_shaping += context_langs[key];\n}\nreg_ex_shaping += ']';\n\nlet shaping_test = new RegExp(reg_ex_shaping);\n\nfunction isTextShaped(s){\n return shaping_test.test(s);\n}\n\n// Right-to-left / bi-directional text handling\n// Taken from http://stackoverflow.com/questions/12006095/javascript-how-to-check-if-character-is-rtl\nlet rtlDirCheck = new RegExp('^[\\u0000-\\u002F\\u003A-\\u0040\\u005B-\\u0060\\u007B-\\u00BF\\u00D7\\u00F7\\u02B9-\\u02FF\\u2000-\\u2BFF\\u2010-\\u2029\\u202C\\u202F-\\u2BFF\\u0591-\\u07FF\\u200F\\u202B\\u202E\\uFB1D-\\uFDFD\\uFE70-\\uFEFC]+$');\nfunction isTextRTL(s){\n return rtlDirCheck.test(s);\n}\n\nlet neutralDirCheck = new RegExp('[\\u0000-\\u002F\\u003A-\\u0040\\u005B-\\u0060\\u007B-\\u00BF\\u00D7\\u00F7\\u02B9-\\u02FF\\u2000-\\u2BFF\\u2010-\\u2029\\u202C\\u202F-\\u2BFF]$');\nfunction isTextNeutral(s){\n return neutralDirCheck.test(s);\n}\n\n// Splitting strategy for chopping a label into segments\nfunction splitLabelText(text, rtl){\n if (text.length < codon_length) {\n return [text];\n }\n\n let segments = [];\n\n while (text.length){\n let segment = text.substring(0, codon_length);\n\n if (segment.length <= Math.floor(0.5 * codon_length)) {\n segments[segments.length - 1] += segment;\n }\n else {\n // if RTL, check to see if segment ends on a neutral character\n // in which case we need to add the neutral segments separately (codon_length = 1) in reverse order\n if (rtl){\n let neutral_segment = [];\n while (segment.length > 0 && isTextNeutral(segment[segment.length - 1])){\n neutral_segment.unshift(segment[segment.length - 1]);\n segment = segment.substring(0, segment.length - 1);\n }\n segments.push(segment);\n if (neutral_segment.length > 0){\n segments = segments.concat(neutral_segment);\n }\n }\n else {\n segment = text.substring(0, codon_length);\n segments.push(segment);\n }\n }\n\n text = text.substring(codon_length);\n }\n\n return segments;\n}\n\n// Private class to arrange text labels into multiple lines based on\n// \"text wrap\" and \"max line\" values\nclass MultiLine {\n constructor (context, max_lines = Infinity, text_wrap = Infinity) {\n this.width = 0;\n this.height = 0;\n this.lines = [];\n\n this.max_lines = max_lines;\n this.text_wrap = text_wrap;\n this.context = context;\n }\n\n createLine (line_height){\n if (this.lines.length < this.max_lines){\n return new Line(line_height, this.text_wrap);\n }\n else {\n return false;\n }\n }\n\n push (line){\n if (this.lines.length < this.max_lines){\n // measure line width\n let line_width = this.context.measureText(line.text).width;\n line.width = line_width;\n\n if (line_width > this.width){\n this.width = Math.ceil(line_width);\n }\n\n // add to lines and increment height\n this.lines.push(line);\n this.height += line.height;\n return true;\n }\n else {\n this.addEllipsis();\n return false;\n }\n }\n\n // pushes to the lines array and returns a new line if possible (false otherwise)\n advance (line, line_height) {\n let can_push = this.push(line);\n if (can_push){\n return this.createLine(line_height);\n }\n else {\n return false;\n }\n }\n\n addEllipsis (){\n let last_line = this.lines[this.lines.length - 1];\n let ellipsis_width = Math.ceil(this.context.measureText(MultiLine.ellipsis).width);\n\n last_line.append(MultiLine.ellipsis);\n last_line.width += ellipsis_width;\n\n if (last_line.width > this.width) {\n this.width = last_line.width;\n }\n }\n\n finish (line){\n if (line){\n this.push(line);\n }\n else {\n this.addEllipsis();\n }\n }\n\n static parse (str, text_wrap, max_lines, line_height, ctx) {\n // Word wrapping\n // Line breaks can be caused by:\n // - implicit line break when a maximum character threshold is exceeded per line (text_wrap)\n // - explicit line break in the label text (\\n)\n let words;\n if (typeof text_wrap === 'number') {\n words = str.split(' '); // split words on spaces\n }\n else {\n words = [str]; // no max line word wrapping (but new lines will still be in effect)\n }\n\n let multiline = new MultiLine(ctx, max_lines, text_wrap);\n let line = multiline.createLine(line_height);\n\n // First iterate on space-break groups (will be one if max line length off), then iterate on line-break groups\n for (let i = 0; i < words.length; i++) {\n let breaks = words[i].split('\\n'); // split on line breaks\n let new_line = (i === 0) ? true : false;\n\n for (let n=0; n < breaks.length; n++) {\n if (!line){\n break;\n }\n\n // let word = breaks[n].trim();\n let word = breaks[n];\n\n if (!word) {\n continue;\n }\n\n let spaced_word = (new_line) ? word : ' ' + word;\n\n // if adding current word would overflow, add a new line instead\n // first word (i === 0) always appends\n if (text_wrap && i > 0 && line.exceedsTextwrap(spaced_word)) {\n line = multiline.advance(line, line_height);\n if (!line){\n break;\n }\n line.append(word);\n new_line = true;\n }\n else {\n line.append(spaced_word);\n }\n\n // if line breaks present, add new line (unless on last line)\n if (n < breaks.length - 1) {\n line = multiline.advance(line, line_height);\n new_line = true;\n }\n }\n\n if (i === words.length - 1){\n multiline.finish(line);\n }\n }\n return multiline;\n }\n}\n\nMultiLine.ellipsis = '...';\n\n// A Private class used by MultiLine to contain the logic for a single line\n// including character count, width, height and text\nclass Line {\n constructor (height = 0, text_wrap = 0){\n this.chars = 0;\n this.text = '';\n\n this.height = Math.ceil(height);\n this.text_wrap = text_wrap;\n }\n\n append (text){\n this.chars += text.length;\n this.text += text;\n }\n\n exceedsTextwrap (text){\n return text.length + this.chars > this.text_wrap;\n }\n}\n", + "import log from '../../utils/log';\nimport Utils from '../../utils/utils';\nimport Texture from '../../gl/texture';\nimport FontManager from './font_manager';\nimport debugSettings from '../../utils/debug_settings';\n\nconst codon_length = 2; // length of chunks when breaking up label text\n\nexport default class CanvasText {\n\n constructor () {\n this.canvas = document.createElement('canvas');\n this.canvas.style.backgroundColor = 'transparent'; // render text on transparent background\n this.context = this.canvas.getContext('2d');\n this.vertical_text_buffer = 8; // vertical pixel padding around text\n this.horizontal_text_buffer = 4; // text styling such as italic emphasis is not measured by the Canvas API, so padding is necessary\n }\n\n resize (width, height) {\n this.canvas.width = width;\n this.canvas.height = height;\n this.context.clearRect(0, 0, width, height);\n }\n\n // Set font style params for canvas drawing\n setFont ({ font_css, fill, stroke, stroke_width, px_size, supersample }) {\n this.px_size = px_size;\n let ctx = this.context;\n let dpr = Utils.device_pixel_ratio * supersample;\n\n if (stroke && stroke_width > 0) {\n ctx.strokeStyle = stroke;\n ctx.lineWidth = stroke_width * dpr;\n }\n ctx.fillStyle = fill;\n\n ctx.font = font_css;\n ctx.miterLimit = 2;\n }\n\n textSizes (texts) {\n let dpr;\n return FontManager.loadFonts().then(() => {\n for (let style in texts) {\n CanvasText.initTextCache(style);\n\n let text_infos = texts[style];\n let first = true;\n\n for (let text in text_infos) {\n let text_info = text_infos[text];\n let text_settings = text_info.text_settings;\n\n if (first) {\n this.setFont(text_settings);\n dpr = Utils.device_pixel_ratio * text_settings.supersample;\n first = false;\n }\n\n if (text_settings.can_articulate){\n let words = text.split(' ');\n\n // RTL is true if every word is RTL\n // BIDI is true if there is RTL and LTR\n let hasRTL = false;\n let hasLTR = false;\n let bidi = false;\n for (var i = 0; i < words.length; i++){\n if (isTextRTL(words[i])) {\n if (hasLTR){\n bidi = true;\n break;\n }\n hasRTL = true;\n }\n else {\n if (hasRTL){\n bidi = true;\n break;\n }\n hasLTR = true;\n }\n }\n\n let rtl = (hasRTL && !hasLTR) && !bidi;\n let shaped = isTextShaped(text);\n\n text_info.isRTL = rtl;\n text_info.no_curving = bidi || shaped; // used in LabelLine to prevent curved labels\n text_info.vertical_buffer = this.vertical_text_buffer;\n\n let segments = splitLabelText(text, rtl);\n\n if (rtl) {\n segments.reverse();\n }\n\n text_info.segments = segments;\n text_info.size = [];\n\n if (!text_info.no_curving) {\n for (let i = 0; i < segments.length; i++){\n text_info.size.push(this.textSize(style, segments[i], text_settings).size);\n }\n }\n\n // add full text as well\n text_info.total_size = this.textSize(style, text, text_settings).size;\n }\n else {\n // Only send text sizes back to worker (keep computed text line info\n // on main thread, for future rendering)\n text_info.size = this.textSize(style, text, text_settings).size;\n }\n }\n }\n\n return texts;\n });\n }\n\n // Computes width and height of text based on current font style\n // Includes word wrapping, returns size info for whole text block and individual lines\n textSize (style, text, {transform, text_wrap, max_lines, stroke_width = 0, supersample}) {\n // Check cache first\n if (CanvasText.text_cache[style][text]) {\n CanvasText.cache_stats.hits++;\n return CanvasText.text_cache[style][text];\n }\n CanvasText.cache_stats.misses++;\n CanvasText.text_cache_count++;\n\n // Calc and store in cache\n let dpr = Utils.device_pixel_ratio * supersample;\n let str = this.applyTextTransform(text, transform);\n let ctx = this.context;\n let vertical_buffer = this.vertical_text_buffer * dpr;\n let horizontal_buffer = dpr * (stroke_width + this.horizontal_text_buffer);\n let leading = 2 * dpr; // make configurable and/or use Canvas TextMetrics when available\n let line_height = this.px_size + leading; // px_size already in device pixels\n\n // Parse string into series of lines if it exceeds the text wrapping value or contains line breaks\n let multiline = MultiLine.parse(str, text_wrap, max_lines, line_height, ctx);\n\n // Final dimensions of text\n let height = multiline.height;\n let width = multiline.width;\n let lines = multiline.lines;\n\n let collision_size = [\n width / dpr,\n height / dpr\n ];\n\n let texture_size = [\n width + 2 * horizontal_buffer,\n height + 2 * vertical_buffer\n ];\n\n let logical_size = [\n texture_size[0] / dpr,\n texture_size[1] / dpr,\n ];\n\n // Returns lines (w/per-line info for drawing) and text's overall bounding box + canvas size\n CanvasText.text_cache[style][text] = {\n lines,\n size: { collision_size, texture_size, logical_size, line_height }\n };\n return CanvasText.text_cache[style][text];\n }\n\n // Draw multiple lines of text\n drawTextMultiLine (lines, [x, y], size, { stroke, stroke_width = 0, transform, align, supersample }, type) {\n let line_height = size.line_height;\n let height = y;\n for (let line_num=0; line_num < lines.length; line_num++) {\n let line = lines[line_num];\n this.drawTextLine(line, [x, height], size, { stroke, stroke_width, transform, align, supersample }, type);\n height += line_height;\n }\n\n // Draw bounding boxes for debugging\n if (debugSettings.draw_label_collision_boxes) {\n this.context.save();\n\n let dpr = Utils.device_pixel_ratio * supersample;\n let horizontal_buffer = dpr * (this.horizontal_text_buffer + stroke_width);\n let vertical_buffer = dpr * this.vertical_text_buffer;\n let collision_size = size.collision_size;\n let lineWidth = 2;\n\n this.context.strokeStyle = 'blue';\n this.context.lineWidth = lineWidth;\n this.context.strokeRect(x + horizontal_buffer, y + vertical_buffer, dpr * collision_size[0], dpr * collision_size[1]);\n if (type === 'curved'){\n this.context.strokeRect(x + size.texture_size[0] + horizontal_buffer, y + vertical_buffer, dpr * collision_size[0], dpr * collision_size[1]);\n }\n\n this.context.restore();\n }\n\n if (debugSettings.draw_label_texture_boxes) {\n this.context.save();\n\n let texture_size = size.texture_size;\n let lineWidth = 2;\n\n this.context.strokeStyle = 'green';\n this.context.lineWidth = lineWidth;\n // stroke is applied internally, so the outer border is the edge of the texture\n this.context.strokeRect(x + lineWidth, y + lineWidth, texture_size[0] - 2 * lineWidth, texture_size[1] - 2 * lineWidth);\n\n if (type === 'curved'){\n this.context.strokeRect(x + lineWidth + size.texture_size[0], y + lineWidth, texture_size[0] - 2 * lineWidth, texture_size[1] - 2 * lineWidth);\n }\n\n this.context.restore();\n }\n }\n\n // Draw single line of text at specified location, adjusting for buffer and baseline\n drawTextLine (line, [x, y], size, { stroke, stroke_width = 0, transform, align, supersample }, type) {\n let dpr = Utils.device_pixel_ratio * supersample;\n align = align || 'center';\n\n let vertical_buffer = this.vertical_text_buffer * dpr;\n let texture_size = size.texture_size;\n let line_height = size.line_height;\n let horizontal_buffer = dpr * (stroke_width + this.horizontal_text_buffer);\n\n let str = this.applyTextTransform(line.text, transform);\n\n // Text alignment\n let tx;\n if (align === 'left') {\n tx = x + horizontal_buffer;\n }\n else if (align === 'center') {\n tx = x + texture_size[0]/2 - line.width/2;\n }\n else if (align === 'right') {\n tx = x + texture_size[0] - line.width - horizontal_buffer;\n }\n\n // In the absence of better Canvas TextMetrics (not supported by browsers yet),\n // 0.75 buffer produces a better approximate vertical centering of text\n let ty = y + vertical_buffer * 0.75 + line_height;\n\n // Draw stroke and fill separately for curved text. Offset stroke in texture atlas by shift.\n if (stroke && stroke_width > 0) {\n let shift = (type === 'curved') ? texture_size[0] : 0;\n this.context.strokeText(str, tx + shift, ty);\n }\n this.context.fillText(str, tx, ty);\n }\n\n rasterize (texts, texture_size, tile_key) {\n for (let style in texts) {\n let text_infos = texts[style];\n let first = true;\n\n for (let text in text_infos) {\n let text_info = text_infos[text];\n let text_settings = text_info.text_settings;\n\n // set font on first occurence of new font style\n if (first) {\n this.setFont(text_settings);\n first = false;\n }\n\n if (text_settings.can_articulate){\n let words = text_info.segments;\n\n text_info.texcoords = {};\n for (let i = 0; i < text_info.type.length; i++){\n\n let type = text_info.type[i];\n switch (type){\n case 'straight':\n let word = words.reduce((text_info.isRTL) ? reduceLeft : reduceRight);\n let texcoord;\n\n if (CanvasText.texcoord_cache[tile_key][style][word].texcoord){\n texcoord = CanvasText.texcoord_cache[tile_key][style][word].texcoord;\n }\n else {\n let texture_position = CanvasText.texcoord_cache[tile_key][style][word].texture_position;\n let size = CanvasText.text_cache[style][word].size;\n let line = CanvasText.text_cache[style][word].lines;\n\n this.drawTextMultiLine(line, texture_position, size, text_settings, type);\n\n texcoord = Texture.getTexcoordsForSprite(\n texture_position,\n size.texture_size,\n texture_size\n );\n\n CanvasText.texcoord_cache[tile_key][style][word].texcoord = texcoord;\n }\n\n text_info.texcoords[type] = texcoord;\n break;\n case 'curved':\n text_info.texcoords.curved = [];\n text_info.texcoords_stroke = [];\n for (let i = 0; i < words.length; i++){\n let word = words[i];\n let texcoord;\n let texcoord_stroke;\n\n if (CanvasText.texcoord_cache[tile_key][style][word].texcoord){\n texcoord = CanvasText.texcoord_cache[tile_key][style][word].texcoord;\n texcoord_stroke = CanvasText.texcoord_cache[tile_key][style][word].texcoord_stroke;\n\n text_info.texcoords_stroke.push(texcoord_stroke);\n }\n else {\n let texture_position = CanvasText.texcoord_cache[tile_key][style][word].texture_position;\n let size = CanvasText.text_cache[style][word].size;\n let line = CanvasText.text_cache[style][word].lines;\n\n this.drawTextMultiLine(line, texture_position, size, text_settings, type);\n\n texcoord = Texture.getTexcoordsForSprite(\n texture_position,\n size.texture_size,\n texture_size\n );\n\n let texture_position_stroke = [\n texture_position[0] + size.texture_size[0],\n texture_position[1]\n ];\n\n texcoord_stroke = Texture.getTexcoordsForSprite(\n texture_position_stroke,\n size.texture_size,\n texture_size\n );\n\n CanvasText.texcoord_cache[tile_key][style][word].texcoord = texcoord;\n CanvasText.texcoord_cache[tile_key][style][word].texcoord_stroke = texcoord_stroke;\n\n text_info.texcoords_stroke.push(texcoord_stroke);\n }\n\n text_info.texcoords.curved.push(texcoord);\n }\n break;\n }\n }\n }\n else {\n let lines = CanvasText.text_cache[style][text].lines; // get previously computed lines of text\n for (let align in text_info.align) {\n this.drawTextMultiLine(lines, text_info.align[align].texture_position, text_info.size, {\n stroke: text_settings.stroke,\n stroke_width: text_settings.stroke_width,\n transform: text_settings.transform,\n supersample: text_settings.supersample,\n align: align\n });\n\n text_info.align[align].texcoords = Texture.getTexcoordsForSprite(\n text_info.align[align].texture_position,\n text_info.size.texture_size,\n texture_size\n );\n }\n }\n }\n }\n CanvasText.clearTexcoordCache(tile_key);\n }\n\n // Place text labels within an atlas of the given max size\n setTextureTextPositions (texts, max_texture_size, tile_key) {\n CanvasText.clearTexcoordCache(tile_key);\n CanvasText.texcoord_cache[tile_key] = {};\n\n // Keep track of column width\n let column_width = 0;\n\n // Layout labels, stacked in columns\n let cx = 0, cy = 0; // current x/y position in atlas\n let height = 0; // overall atlas height\n for (let style in texts) {\n if (!CanvasText.texcoord_cache[tile_key][style]) {\n CanvasText.texcoord_cache[tile_key][style] = {};\n }\n\n let text_infos = texts[style];\n\n for (let text in text_infos) {\n let text_info = text_infos[text];\n\n if (text_info.text_settings.can_articulate){\n let texture_position;\n\n for (let i = 0; i < text_info.type.length; i++){\n let type = text_info.type[i];\n switch (type){\n case 'straight':\n let size = text_info.total_size.texture_size;\n let word = text_info.segments.reduce((text_info.isRTL) ? reduceLeft : reduceRight);\n\n if (size[0] > column_width) {\n column_width = size[0];\n }\n if (cy + size[1] < max_texture_size) {\n texture_position = [cx, cy];\n\n cy += size[1];\n if (cy > height) {\n height = cy;\n }\n }\n else { // start new column if taller than texture\n cx += column_width;\n column_width = 0;\n cy = 0;\n texture_position = [cx, cy];\n }\n\n CanvasText.texcoord_cache[tile_key][style][word] = {\n texture_position: texture_position\n };\n break;\n case 'curved':\n for (let i = 0; i < text_info.size.length; i++) {\n let word = text_info.segments[i];\n\n if (!CanvasText.texcoord_cache[tile_key][style][word]) {\n\n let size = text_info.size[i].texture_size;\n let width = 2 * size[0];\n if (width > column_width) {\n column_width = width;\n }\n if (cy + size[1] < max_texture_size) {\n texture_position = [cx, cy];\n\n cy += size[1];\n if (cy > height) {\n height = cy;\n }\n }\n else { // start new column if taller than texture\n cx += column_width;\n column_width = 0;\n cy = 0;\n texture_position = [cx, cy];\n }\n\n CanvasText.texcoord_cache[tile_key][style][word] = {\n texture_position: texture_position\n };\n }\n }\n break;\n }\n }\n }\n else {\n // rendered size is same for all alignments\n let size = text_info.size.texture_size;\n if (size[0] > column_width) {\n column_width = size[0];\n }\n\n // but each alignment needs to be rendered separately\n for (let align in text_info.align) {\n if (cy + size[1] < max_texture_size) {\n text_info.align[align].texture_position = [cx, cy]; // add label to current column\n cy += size[1];\n if (cy > height) {\n height = cy;\n }\n }\n else { // start new column if taller than texture\n cx += column_width;\n column_width = 0;\n cy = 0;\n text_info.align[align].texture_position = [cx, cy];\n }\n }\n }\n }\n }\n\n return [cx + column_width, height]; // overall atlas size\n }\n\n // Called before rasterization\n applyTextTransform (text, transform) {\n if (transform === 'capitalize') {\n return text.replace(/\\w\\S*/g, function (txt) {\n return txt.charAt(0).toUpperCase() + txt.substr(1);\n });\n }\n else if (transform === 'uppercase') {\n return text.toUpperCase();\n }\n else if (transform === 'lowercase') {\n return text.toLowerCase();\n }\n return text;\n }\n\n // Convert font CSS-style size ('12px', '14pt', '1.5em', etc.) to pixel size (adjusted for device pixel ratio)\n // Defaults units to pixels if not specified\n static fontPixelSize (size) {\n if (size == null) {\n return;\n }\n size = (typeof size === 'string') ? size : String(size); // need a string for regex\n\n let [, px_size, units] = size.match(CanvasText.font_size_re) || [];\n units = units || 'px';\n\n if (units === \"em\") {\n px_size *= 16;\n } else if (units === \"pt\") {\n px_size /= 0.75;\n } else if (units === \"%\") {\n px_size /= 6.25;\n }\n\n px_size = parseFloat(px_size);\n px_size *= Utils.device_pixel_ratio;\n return px_size;\n }\n\n static clearTexcoordCache (tile_key) {\n delete CanvasText.texcoord_cache[tile_key];\n }\n\n static initTextCache (style) {\n CanvasText.text_cache[style] = CanvasText.text_cache[style] || {};\n }\n\n static pruneTextCache () {\n if (CanvasText.text_cache_count > CanvasText.text_cache_count_max) {\n CanvasText.text_cache = {};\n CanvasText.text_cache_count = 0;\n log('debug', 'CanvasText: pruning text cache');\n }\n }\n\n}\n\n// Extract font size and units\nCanvasText.font_size_re = /((?:[0-9]*\\.)?[0-9]+)\\s*(px|pt|em|%)?/;\n\n// Cache sizes of rendered text\nCanvasText.text_cache = {}; // by text style, then text string\nCanvasText.text_cache_count = 0; // current size of cache (measured as # of entries)\nCanvasText.text_cache_count_max = 5000; // prune cache when it exceeds this size\nCanvasText.cache_stats = { hits: 0, misses: 0 };\nCanvasText.texcoord_cache = {};\n\nfunction reduceLeft (prev, next){ return next + prev; }\nfunction reduceRight (prev, next){ return prev + next; }\n\n// Contextual Shaping Languages - Unicode ranges\nconst context_langs = {\n Arabic: \"\\u0600-\\u06FF\",\n Bengali: \"\\u0980-\\u09FF\",\n Burmese: \"\\u1000-\\u109F\",\n Devanagari: \"\\u0900-\\u097F\",\n Khmer: \"\\u1780-\\u17FF\",\n Gujarati: \"\\u0A80-\\u0AFF\",\n Gurmukhi: \"\\u0A00-\\u0A7F\",\n Kannada: \"\\u0C80-\\u0CFF\",\n Lao: \"\\u0E80-\\u0EFF\",\n Mongolian: \"\\u1800-\\u18AF\",\n Oriya: \"\\u0B00-\\u0B7F\",\n Tamil: \"\\u0B80-\\u0BFF\",\n Telugu: \"\\u0C00-\\u0C7F\",\n Tibetan: \"\\u0F00-\\u0FFF\"\n};\n\nlet reg_ex_shaping = '[';\nfor (let key in context_langs){\n reg_ex_shaping += context_langs[key];\n}\nreg_ex_shaping += ']';\n\nlet shaping_test = new RegExp(reg_ex_shaping);\n\nfunction isTextShaped(s){\n return shaping_test.test(s);\n}\n\n// Right-to-left / bi-directional text handling\n// Taken from http://stackoverflow.com/questions/12006095/javascript-how-to-check-if-character-is-rtl\nconst rtlDirCheck = new RegExp('^[\\u0000-\\u002F\\u003A-\\u0040\\u005B-\\u0060\\u007B-\\u00BF\\u00D7\\u00F7\\u02B9-\\u02FF\\u2000-\\u2BFF\\u2010-\\u2029\\u202C\\u202F-\\u2BFF\\u0591-\\u07FF\\u200F\\u202B\\u202E\\uFB1D-\\uFDFD\\uFE70-\\uFEFC]+$');\nfunction isTextRTL(s){\n return rtlDirCheck.test(s);\n}\n\nconst neutralDirCheck = new RegExp('[\\u0000-\\u002F\\u003A-\\u0040\\u005B-\\u0060\\u007B-\\u00BF\\u00D7\\u00F7\\u02B9-\\u02FF\\u2000-\\u2BFF\\u2010-\\u2029\\u202C\\u202F-\\u2BFF]$');\nfunction isTextNeutral(s){\n return neutralDirCheck.test(s);\n}\n\nconst markRTL = '\\u200F'; // explicit right-to-left marker\n\n// Splitting strategy for chopping a label into segments\nfunction splitLabelText(text, rtl){\n if (text.length < codon_length) {\n return [text];\n }\n\n let segments = [];\n\n while (text.length){\n let segment = text.substring(0, codon_length);\n\n if (segment.length <= Math.floor(0.5 * codon_length)) {\n segments[segments.length - 1] += segment;\n }\n else {\n // if RTL, check to see if segment starts or ends on a neutral character\n // in which case we need to add the neutral segments separately (codon_length = 1) in reverse order\n if (rtl){\n let neutral_segment = [];\n while (segment.length > 0 && (isTextNeutral(segment[0] || isTextNeutral(segment[segment.length - 1])))) {\n neutral_segment.unshift(segment[segment.length - 1]);\n segment = segment.substring(0, segment.length - 1);\n }\n segments.push(segment);\n if (neutral_segment.length > 0){\n segments = segments.concat(neutral_segment);\n }\n }\n else {\n segment = text.substring(0, codon_length);\n segments.push(segment);\n }\n }\n\n text = text.substring(codon_length);\n }\n\n return segments;\n}\n\n// Private class to arrange text labels into multiple lines based on\n// \"text wrap\" and \"max line\" values\nclass MultiLine {\n constructor (context, max_lines = Infinity, text_wrap = Infinity) {\n this.width = 0;\n this.height = 0;\n this.lines = [];\n\n this.max_lines = max_lines;\n this.text_wrap = text_wrap;\n this.context = context;\n }\n\n createLine (line_height){\n if (this.lines.length < this.max_lines){\n return new Line(line_height, this.text_wrap);\n }\n else {\n return false;\n }\n }\n\n push (line){\n if (this.lines.length < this.max_lines){\n // measure line width\n let line_width = this.context.measureText(line.text).width;\n line.width = line_width;\n\n if (line_width > this.width){\n this.width = Math.ceil(line_width);\n }\n\n // add to lines and increment height\n this.lines.push(line);\n this.height += line.height;\n return true;\n }\n else {\n this.addEllipsis();\n return false;\n }\n }\n\n // pushes to the lines array and returns a new line if possible (false otherwise)\n advance (line, line_height) {\n let can_push = this.push(line);\n if (can_push){\n return this.createLine(line_height);\n }\n else {\n return false;\n }\n }\n\n addEllipsis (){\n let last_line = this.lines[this.lines.length - 1];\n let ellipsis_width = Math.ceil(this.context.measureText(MultiLine.ellipsis).width);\n\n last_line.append(MultiLine.ellipsis);\n last_line.width += ellipsis_width;\n\n if (last_line.width > this.width) {\n this.width = last_line.width;\n }\n }\n\n finish (line){\n if (line){\n this.push(line);\n }\n else {\n this.addEllipsis();\n }\n }\n\n static parse (str, text_wrap, max_lines, line_height, ctx) {\n // Word wrapping\n // Line breaks can be caused by:\n // - implicit line break when a maximum character threshold is exceeded per line (text_wrap)\n // - explicit line break in the label text (\\n)\n let words;\n if (typeof text_wrap === 'number') {\n words = str.split(' '); // split words on spaces\n }\n else {\n words = [str]; // no max line word wrapping (but new lines will still be in effect)\n }\n\n let multiline = new MultiLine(ctx, max_lines, text_wrap);\n let line = multiline.createLine(line_height);\n\n // First iterate on space-break groups (will be one if max line length off), then iterate on line-break groups\n for (let i = 0; i < words.length; i++) {\n let breaks = words[i].split('\\n'); // split on line breaks\n let new_line = (i === 0) ? true : false;\n\n for (let n=0; n < breaks.length; n++) {\n if (!line){\n break;\n }\n\n let word = breaks[n];\n\n // force punctuation (neutral chars) at the end of a RTL line, so they stay attached to original word\n if (isTextRTL(word) && isTextNeutral(word[word.length - 1])) {\n word += markRTL;\n }\n\n let spaced_word = (new_line) ? word : ' ' + word;\n\n // if adding current word would overflow, add a new line instead\n // first word (i === 0) always appends\n if (text_wrap && i > 0 && line.exceedsTextwrap(spaced_word)) {\n line = multiline.advance(line, line_height);\n if (!line){\n break;\n }\n line.append(word);\n new_line = true;\n }\n else {\n line.append(spaced_word);\n }\n\n // if line breaks present, add new line (unless on last line)\n if (n < breaks.length - 1) {\n line = multiline.advance(line, line_height);\n new_line = true;\n }\n }\n\n if (i === words.length - 1){\n multiline.finish(line);\n }\n }\n return multiline;\n }\n}\n\nMultiLine.ellipsis = '...';\n\n// A Private class used by MultiLine to contain the logic for a single line\n// including character count, width, height and text\nclass Line {\n constructor (height = 0, text_wrap = 0){\n this.chars = 0;\n this.text = '';\n\n this.height = Math.ceil(height);\n this.text_wrap = text_wrap;\n }\n\n append (text){\n this.chars += text.length;\n this.text += text;\n }\n\n exceedsTextwrap (text){\n return text.length + this.chars > this.text_wrap;\n }\n}\n", "/* global FontFace */\nimport log from '../../utils/log';\nimport Utils from '../../utils/utils';\nimport FontFaceObserver from 'fontfaceobserver';\n\nconst FontManager = {\n\n // Font detection\n fonts_loaded: Promise.resolve(), // resolves when all requested fonts have been detected\n last_loaded: null, // tracks last set of fonts loaded\n\n // Load set of custom font faces\n // `fonts` is an object where the key is a font family name, and the value is one or more font face\n // definitions. The value can be either a single object, or an array of such objects.\n // If the special string value 'external' is used, it indicates the the font will be loaded via external CSS.\n loadFonts (fonts) {\n let same = (JSON.stringify(fonts) === this.last_loaded);\n if (fonts && !same) {\n let queue = [];\n for (let family in fonts) {\n if (Array.isArray(fonts[family])) {\n fonts[family].forEach(face => queue.push(this.loadFontFace(family, face)));\n }\n else {\n queue.push(this.loadFontFace(family, fonts[family]));\n }\n }\n\n this.last_loaded = JSON.stringify(fonts);\n this.fonts_loaded = Promise.all(queue.filter(x => x));\n }\n return this.fonts_loaded;\n },\n\n // Load a single font face\n // `face` contains the font face definition, with optional parameters for `weight`, `style`, and `url`.\n // If the `url` is defined, the font is injected into the document as a CSS font-face.\n // If the object's value is the special string 'external', or if no `url` is defined, then the font face\n // is assumed is assumed to been loaded via external CSS. In either case, the function returns a promise\n // that resolves when the font face has loaded, or times out.\n loadFontFace (family, face) {\n if (face == null || (typeof face !== 'object' && face !== 'external')) {\n return;\n }\n\n let options = { family };\n let inject = Promise.resolve();\n\n if (typeof face === 'object') {\n Object.assign(options, face);\n\n // If URL is defined, inject font into document\n if (typeof face.url === 'string') {\n inject = this.injectFontFace(options);\n }\n }\n\n // Wait for font to load\n let observer = new FontFaceObserver(family, options);\n return inject.then(() => observer.load()).then(\n () => {\n // Promise resolves, font is available\n log('debug', `Font face '${family}' is available`, options);\n },\n () => {\n // Promise rejects, font is not available\n log('debug', `Font face '${family}' is NOT available`, options);\n }\n );\n },\n\n // Loads a font face via either the native FontFace API, or CSS injection\n // TODO: consider support for multiple format URLs per face, unicode ranges\n injectFontFace ({ family, url, weight, style }) {\n if (this.supports_native_font_loading === undefined) {\n this.supports_native_font_loading = (window.FontFace !== undefined);\n }\n\n // Convert blob URLs, depending on whether the native FontFace API will be used or not.\n //\n // When the FontFace API *is* supported, the blob URL is read into a raw data array.\n // NB: it's inefficient to be converting blob URLs into typed arrays here, since they originated\n // as raw data *before* they were converted into blob URLs. However, this process should be fast since\n // these are native browser functions and all data is local (no network request), and it keeps the\n // logic streamlined by allowing us to continue to use a URL-based interface for all scene resources.\n //\n // When the FontFace API is *not* supported, the blob URL data is converted to a base64 data URL.\n // This avoids security restricions in some browsers.\n // Also see https://github.com/bramstein/fontloader/blob/598e9399117bdc946ff786fa2c5007a6bd7d3b9e/src/fontface.js#L145-L153\n let preprocess = Promise.resolve(url);\n if (url.slice(0, 5) === 'blob:') {\n preprocess = Utils.io(url, 60000, 'arraybuffer').then(data => {\n let bytes = new Uint8Array(data);\n if (this.supports_native_font_loading) {\n return bytes; // use raw binary data\n }\n else {\n let str = '';\n for (let i = 0; i < bytes.length; i++) {\n str += String.fromCharCode(bytes[i]);\n }\n return 'data:font/opentype;base64,' + btoa(str); // base64 encode as data URL\n }\n });\n }\n\n return preprocess.then(data => {\n if (this.supports_native_font_loading) {\n // Use native FontFace API\n let face;\n if (typeof data === 'string') { // add as URL\n face = new FontFace(family, `url(${encodeURI(data)})`, { weight, style });\n }\n else if (data instanceof Uint8Array) { // add as binary data\n face = new FontFace(family, data, { weight, style });\n }\n document.fonts.add(face);\n log('trace', 'Adding FontFace to document.fonts:', face);\n }\n else {\n // Use CSS injection\n let css = `\n @font-face {\n font-family: '${family}';\n font-weight: ${weight || 'normal'};\n font-style: ${style || 'normal'};\n src: url(${encodeURI(data)});\n }\n `;\n\n let style_el = document.createElement('style');\n style_el.appendChild(document.createTextNode(\"\"));\n document.head.appendChild(style_el);\n style_el.sheet.insertRule(css, 0);\n log('trace', 'Injecting CSS font face:', css);\n }\n });\n }\n\n};\n\nexport default FontManager;\n", "// Text rendering style\n\nimport Geo from '../../geo';\nimport {Style} from '../style';\nimport {Points} from '../points/points';\nimport Collision from '../../labels/collision';\nimport LabelPoint from '../../labels/label_point';\nimport LabelLine from '../../labels/label_line';\nimport gl from '../../gl/constants'; // web workers don't have access to GL context, so import all GL constants\n\nlet fs = require('fs');\nconst shaderSrc_textFragment = fs.readFileSync(__dirname + '/text_fragment.glsl', 'utf8');\n\nexport let TextStyle = Object.create(Points);\n\nObject.assign(TextStyle, {\n name: 'text',\n super: Points,\n built_in: true,\n fragment_shader_src: shaderSrc_textFragment,\n\n init(options = {}) {\n let extra_attributes = [\n { name: 'a_angles', size: 4, type: gl.SHORT, normalized: false },\n { name: 'a_offsets', size: 4, type: gl.UNSIGNED_SHORT, normalized: false },\n { name: 'a_pre_angles', size: 4, type: gl.BYTE, normalized: false }\n ];\n\n this.super.init.call(this, options, extra_attributes);\n\n // Set texture/point config (override parent Point class)\n this.defines.TANGRAM_TEXTURE_POINT = true; // standalone text is always sampled from a texture\n this.defines.TANGRAM_SHADER_POINT = false; // standalone text never draws a shader point\n\n // Indicate vertex shader should apply zoom-interpolated offsets and angles for curved labels\n this.defines.TANGRAM_CURVED_LABEL = true;\n\n // Disable dual point/text mode\n this.defines.TANGRAM_MULTI_SAMPLER = false;\n\n // Fade out text when tile is zooming out, e.g. acting as proxy tiles\n this.defines.TANGRAM_FADE_ON_ZOOM_OUT = true;\n this.defines.TANGRAM_FADE_ON_ZOOM_OUT_RATE = 2; // fade at 2x, e.g. fully transparent at 0.5 zoom level away\n\n // Used to fade out curved labels\n this.defines.TANGRAM_FADE_ON_ZOOM_IN = true;\n this.defines.TANGRAM_FADE_ON_ZOOM_IN_RATE = 2; // fade at 2x, e.g. fully transparent at 0.5 zoom level away\n\n this.reset();\n },\n\n /**\n * A \"template\" that sets constant attibutes for each vertex, which is then modified per vertex or per feature.\n * A plain JS array matching the order of the vertex layout.\n */\n makeVertexTemplate(style){\n this.super.makeVertexTemplate.call(this, style);\n\n this.fillVertexTemplate('a_pre_angles', 0, { size: 4 });\n this.fillVertexTemplate('a_offsets', 0, { size: 4 });\n this.fillVertexTemplate('a_angles', 0, { size: 4 });\n\n return this.vertex_template;\n },\n\n reset() {\n this.queues = {};\n this.resetText();\n },\n\n // Override to queue features instead of processing immediately\n addFeature (feature, draw, context) {\n let tile = context.tile;\n if (tile.generation !== this.generation) {\n return;\n }\n\n // Called here because otherwise it will be delayed until the feature queue is parsed,\n // and we want the preprocessing done before we evaluate text style below\n draw = this.preprocess(draw);\n if (!draw) {\n return;\n }\n\n let type = feature.geometry.type;\n draw.can_articulate = (type === \"LineString\" || type === \"MultiLineString\");\n\n // supersample text rendering for angled labels, to improve clarity\n draw.supersample_text = (type === \"LineString\" || type === \"MultiLineString\");\n\n let q = this.parseTextFeature(feature, draw, context, tile);\n if (!q) {\n return;\n }\n\n // text can be an array if a `left` or `right` orientation key is defined for the text source\n // in which case, push both text sources to the queue\n if (q instanceof Array){\n q.forEach(q => {\n q.feature = feature;\n q.context = context;\n q.layout.vertex = false; // vertex placement option not applicable to standalone labels\n this.queueFeature(q, tile); // queue the feature for later processing\n });\n }\n else {\n q.feature = feature;\n q.context = context;\n q.layout.vertex = false; // vertex placement option not applicable to standalone labels\n this.queueFeature(q, tile); // queue the feature for later processing\n }\n\n // Register with collision manager\n Collision.addStyle(this.name, tile.key);\n },\n\n // Override\n startData (tile) {\n this.queues[tile.key] = [];\n return Style.startData.call(this, tile);\n },\n\n // Override\n endData (tile) {\n let queue = this.queues[tile.key];\n delete this.queues[tile.key];\n\n return this.prepareTextLabels(tile, this.name, queue).\n then(labels => this.collideAndRenderTextLabels(tile, this.name, labels)).\n then(({ labels, texts, texture }) => {\n if (texts) {\n this.texts[tile.key] = texts;\n\n // Build queued features\n labels.forEach(q => {\n let text_settings_key = q.text_settings_key;\n let text_info =\n this.texts[tile.key][text_settings_key] &&\n this.texts[tile.key][text_settings_key][q.text];\n\n // setup styling object expected by Style class\n let style = this.feature_style;\n style.label = q.label;\n\n if (text_info.text_settings.can_articulate){\n // unpack logical sizes of each segment into an array for the style\n style.size = {};\n style.texcoords = {};\n\n if (q.label.type === 'straight'){\n style.size.straight = text_info.total_size.logical_size;\n style.texcoords.straight = text_info.texcoords.straight;\n }\n else{\n style.size.curved = text_info.size.map(function(size){ return size.logical_size; });\n style.texcoords_stroke = text_info.texcoords_stroke;\n style.texcoords.curved = text_info.texcoords.curved;\n }\n }\n else {\n style.size = text_info.size.logical_size;\n style.texcoords = text_info.align[q.label.align].texcoords;\n }\n\n Style.addFeature.call(this, q.feature, q.draw, q.context);\n });\n }\n this.freeText(tile);\n\n // Finish tile mesh\n return Style.endData.call(this, tile).then(tile_data => {\n // Attach tile-specific label atlas to mesh as a texture uniform\n if (texture && tile_data) {\n tile_data.uniforms.u_texture = texture;\n tile_data.textures.push(texture); // assign texture ownership to tile\n return tile_data;\n }\n });\n });\n },\n\n // Sets up caching for draw properties\n _preprocess (draw) {\n return this.preprocessText(draw);\n },\n\n // Implements label building for TextLabels mixin\n buildTextLabels (tile_key, feature_queue) {\n let labels = [];\n for (let f=0; f < feature_queue.length; f++) {\n let fq = feature_queue[f];\n let text_info = this.texts[tile_key][fq.text_settings_key][fq.text];\n let feature_labels;\n\n fq.layout.vertical_buffer = text_info.vertical_buffer;\n\n if (text_info.text_settings.can_articulate){\n var sizes = text_info.size.map(function(size){ return size.collision_size; });\n fq.layout.no_curving = text_info.no_curving;\n feature_labels = this.buildLabels(sizes, fq.feature.geometry, fq.layout, text_info.total_size.collision_size);\n }\n else {\n feature_labels = this.buildLabels(text_info.size.collision_size, fq.feature.geometry, fq.layout);\n }\n for (let i = 0; i < feature_labels.length; i++) {\n let fql = Object.create(fq);\n fql.label = feature_labels[i];\n labels.push(fql);\n }\n }\n return labels;\n },\n\n // Builds one or more labels for a geometry\n buildLabels (size, geometry, layout, total_size) {\n let labels = [];\n\n if (geometry.type === \"LineString\") {\n Array.prototype.push.apply(labels, this.buildLineLabels(geometry.coordinates, size, layout, total_size));\n } else if (geometry.type === \"MultiLineString\") {\n let lines = geometry.coordinates;\n for (let i = 0; i < lines.length; ++i) {\n Array.prototype.push.apply(labels, this.buildLineLabels(lines[i], size, layout, total_size));\n }\n } else if (geometry.type === \"Point\") {\n labels.push(new LabelPoint(geometry.coordinates, size, layout));\n } else if (geometry.type === \"MultiPoint\") {\n let points = geometry.coordinates;\n for (let i = 0; i < points.length; ++i) {\n labels.push(new LabelPoint(points[i], size, layout));\n }\n } else if (geometry.type === \"Polygon\") {\n let centroid = Geo.centroid(geometry.coordinates);\n labels.push(new LabelPoint(centroid, size, layout));\n } else if (geometry.type === \"MultiPolygon\") {\n let centroid = Geo.multiCentroid(geometry.coordinates);\n labels.push(new LabelPoint(centroid, size, layout));\n }\n\n return labels;\n },\n\n // Build one or more labels for a line geometry\n buildLineLabels (line, size, layout, total_size) {\n let labels = [];\n let subdiv = Math.min(layout.subdiv, line.length - 1);\n if (subdiv > 1) {\n // Create multiple labels for line, with each allotted a range of segments\n // in which it will attempt to place\n let seg_per_div = (line.length - 1) / subdiv;\n for (let i = 0; i < subdiv; i++) {\n let start = Math.floor(i * seg_per_div);\n let end = Math.floor((i + 1) * seg_per_div) + 1;\n let line_segment = line.slice(start, end);\n\n let label = LabelLine.create(size, total_size, line_segment, layout);\n if (label){\n labels.push(label);\n }\n }\n }\n else {\n let label = LabelLine.create(size, total_size, line, layout);\n if (label){\n labels.push(label);\n }\n }\n return labels;\n }\n});\n\nTextStyle.texture_id = 0; // namespaces per-tile label textures\n", - "// Text label rendering methods, can be mixed into a rendering style\n\nimport {StyleParser} from '../style_parser';\nimport Texture from '../../gl/texture';\nimport Geo from '../../geo';\nimport log from '../../utils/log';\nimport Thread from '../../utils/thread';\nimport WorkerBroker from '../../utils/worker_broker';\nimport Collision from '../../labels/collision';\nimport TextSettings from '../text/text_settings';\nimport CanvasText from '../text/canvas_text';\n\n// namespaces label textures (ensures new texture name when a tile is built multiple times)\nlet text_texture_id = 0;\n\nexport const TextLabels = {\n\n resetText () {\n if (Thread.is_main) {\n this.canvas = new CanvasText();\n }\n else if (Thread.is_worker) {\n this.texts = {}; // unique texts, grouped by tile, by style\n }\n },\n\n freeText (tile) {\n delete this.texts[tile.key];\n },\n\n parseTextFeature (feature, draw, context, tile) {\n // Compute label text\n let text = this.parseTextSource(feature, draw, context);\n\n if (text == null || text === '') {\n return; // no text for this feature\n }\n\n // Compute text style and layout settings for this feature label\n let text_settings = TextSettings.compute(feature, draw, context);\n let text_settings_key = TextSettings.key(text_settings);\n\n // first label in tile, or with this style?\n this.texts[tile.key] = this.texts[tile.key] || {};\n let sizes = this.texts[tile.key][text_settings_key] = this.texts[tile.key][text_settings_key] || {};\n\n if (text instanceof Object){\n let results = [];\n\n // add both left/right text elements to repeat group to improve repeat culling\n // avoids one component of a boundary label (e.g. Colorado) being culled too aggressively when it also\n // appears in nearby boundary labels (e.g. Colorado/Utah & Colorado/New Mexico repeat as separate groups)\n let repeat_group_prefix = text.left + '-' + text.right; // NB: should be all text keys, not just left/right\n\n for (let key in text){\n let current_text = text[key];\n if (!current_text) {\n continue;\n }\n\n let layout = this.computeTextLayout({}, feature, draw, context, tile, current_text, text_settings, repeat_group_prefix, key);\n if (!sizes[current_text]) {\n // first label with this text/style/tile combination, make a new label entry\n sizes[current_text] = {\n text_settings,\n ref: 0 // # of times this text/style combo appears in tile\n };\n }\n\n results.push({\n draw, text : current_text, text_settings_key, layout\n });\n }\n\n return results;\n }\n else {\n // unique text strings, grouped by text drawing style\n let layout = this.computeTextLayout({}, feature, draw, context, tile, text, text_settings);\n if (!sizes[text]) {\n // first label with this text/style/tile combination, make a new label entry\n sizes[text] = {\n text_settings,\n ref: 0 // # of times this text/style combo appears in tile\n };\n }\n\n return {\n draw, text, text_settings_key, layout\n };\n }\n },\n\n // Compute the label text, default is value of feature.properties.name\n // - String value indicates a feature property look-up, e.g. `short_name` means use feature.properties.short_name\n // - Function will use the return value as the label text (for custom labels)\n // - Array (of strings and/or functions) defines a list of fallbacks, evaluated according to the above rules,\n // with the first non-null value used as the label text\n // e.g. `[name:es, name:en, name]` prefers Spanish names, followed by English, and last the default local name\n parseTextSource (feature, draw, context) {\n let text;\n let source = draw.text_source || 'name';\n\n if (source != null && typeof source === 'object') {\n // left/right boundary labels\n text = {};\n for (let key in source) {\n text[key] = this.parseTextSourceValue(source[key], feature, context);\n }\n }\n else {\n // single label\n text = this.parseTextSourceValue(source, feature, context);\n }\n\n return text;\n },\n\n parseTextSourceValue (source, feature, context) {\n let text;\n if (Array.isArray(source)) {\n for (let s=0; s < source.length; s++) {\n if (typeof source[s] === 'string') {\n text = feature.properties[source[s]];\n } else if (typeof source[s] === 'function') {\n text = source[s](context);\n }\n\n if (text) {\n return text; // stop if we found a text property\n }\n }\n }\n else if (typeof source === 'string') {\n text = feature.properties[source];\n }\n else if (source instanceof Function) {\n text = source(context);\n }\n\n return text;\n },\n\n prepareTextLabels (tile, collision_group, queue) {\n if (Object.keys(this.texts[tile.key]||{}).length === 0) {\n return Promise.resolve({});\n }\n\n // first call to main thread, ask for text pixel sizes\n return WorkerBroker.postMessage(this.main_thread_target+'.calcTextSizes', this.texts[tile.key]).then(texts => {\n\n if (tile.canceled) {\n log('trace', `Style ${this.name}: stop tile build because tile was canceled: ${tile.key}, post-calcTextSizes()`);\n return;\n }\n\n this.texts[tile.key] = texts;\n if (!texts) {\n return;\n }\n\n return this.buildTextLabels(tile.key, queue);\n });\n },\n\n collideAndRenderTextLabels (tile, collision_group, labels) {\n if (!labels) {\n Collision.collide({}, collision_group, tile.key);\n return Promise.resolve({});\n }\n\n return Collision.collide(labels, collision_group, tile.key).then(labels => {\n if (tile.canceled) {\n log('trace', `stop tile build because tile was canceled: ${tile.key}, post-collide()`);\n return {};\n }\n\n if (labels.length === 0) {\n return {};\n }\n\n let texts = this.texts[tile.key];\n this.cullTextStyles(texts, labels);\n\n // set alignments\n labels.forEach(q => {\n let text_settings_key = q.text_settings_key;\n let text_info = texts[text_settings_key] && texts[text_settings_key][q.text];\n if (!text_info.text_settings.can_articulate){\n text_info.align = text_info.align || {};\n text_info.align[q.label.align] = {};\n }\n else {\n // consider making it a set\n if (!text_info.type) {\n text_info.type = [];\n }\n\n if (text_info.type.indexOf(q.label.type) === -1){\n text_info.type.push(q.label.type);\n }\n }\n });\n\n // second call to main thread, for rasterizing the set of texts\n return WorkerBroker.postMessage(this.main_thread_target+'.rasterizeTexts', tile.key, texts).then(({ texts, texture }) => {\n if (tile.canceled) {\n log('trace', `stop tile build because tile was canceled: ${tile.key}, post-rasterizeTexts()`);\n return {};\n }\n\n return { labels, texts, texture };\n });\n });\n },\n\n // Remove unused text/style combinations to avoid unnecessary rasterization\n cullTextStyles(texts, labels) {\n // Count how many times each text/style combination is used\n for (let i=0; i < labels.length; i++) {\n let label = labels[i];\n texts[label.text_settings_key][label.text].ref++;\n }\n\n // Remove text/style combinations that have no visible labels\n for (let style in texts) {\n for (let text in texts[style]) {\n // no labels for this text\n if (texts[style][text].ref < 1) {\n delete texts[style][text];\n }\n }\n }\n\n for (let style in texts) {\n // no labels for this style\n if (Object.keys(texts[style]).length === 0) {\n delete texts[style];\n }\n }\n },\n\n // Called on main thread from worker, to compute the size of each text string,\n // were it to be rendered. This info is then used to perform initial label culling, *before*\n // labels are actually rendered.\n calcTextSizes (texts) {\n return this.canvas.textSizes(texts);\n },\n\n // Called on main thread from worker, to create atlas of labels for a tile\n rasterizeTexts (tile_key, texts) {\n let canvas = new CanvasText();\n\n let texture_size = canvas.setTextureTextPositions(texts, this.max_texture_size, tile_key);\n log('trace', `text summary for tile ${tile_key}: fits in ${texture_size[0]}x${texture_size[1]}px`);\n\n // fits in max texture size?\n if (texture_size[0] < this.max_texture_size && texture_size[1] < this.max_texture_size) {\n // update canvas size & rasterize all the text strings we need\n canvas.resize(...texture_size);\n canvas.rasterize(texts, texture_size, tile_key);\n }\n else {\n log('error', [\n `Label atlas for tile ${tile_key} is ${texture_size[0]}x${texture_size[1]}px, `,\n `but max GL texture size is ${this.max_texture_size}x${this.max_texture_size}px`].join('')\n );\n }\n\n // create a texture\n let t = 'labels-' + tile_key + '-' + (text_texture_id++);\n Texture.create(this.gl, t, {\n element: canvas.canvas,\n filtering: 'linear',\n UNPACK_PREMULTIPLY_ALPHA_WEBGL: true\n });\n Texture.retain(t);\n\n return { texts, texture: t }; // texture is returned by name (not instance)\n },\n\n preprocessText (draw) {\n // Font settings are required\n if (!draw || !draw.font || typeof draw.font !== 'object') {\n return;\n }\n\n // Colors\n draw.font.fill = StyleParser.createPropertyCache(draw.font.fill);\n if (draw.font.stroke) {\n draw.font.stroke.color = StyleParser.createPropertyCache(draw.font.stroke.color);\n }\n\n // Convert font and text stroke sizes\n draw.font.px_size = StyleParser.createPropertyCache(draw.font.size || TextSettings.defaults.size, CanvasText.fontPixelSize);\n if (draw.font.stroke && draw.font.stroke.width != null) {\n draw.font.stroke.width = StyleParser.createPropertyCache(draw.font.stroke.width, parseFloat);\n }\n\n // Offset (2d array)\n draw.offset = StyleParser.createPropertyCache(draw.offset, v => (Array.isArray(v) && v.map(parseFloat)) || 0);\n\n // Buffer (1d value or or 2d array)\n draw.buffer = StyleParser.createPropertyCache(draw.buffer, v => (Array.isArray(v) ? v : [v, v]).map(parseFloat) || 0);\n\n // Repeat rules - for text labels, defaults to tile size\n draw.repeat_distance = StyleParser.createPropertyCache(draw.repeat_distance || Geo.tile_size, parseFloat);\n\n return draw;\n },\n\n // Additional text-specific layout settings\n computeTextLayout (target, feature, draw, context, tile, text, text_settings, repeat_group_prefix, orientation) {\n let layout = target || {};\n\n // common settings w/points\n layout = this.computeLayout(layout, feature, draw, context, tile);\n\n // tile boundary handling\n layout.cull_from_tile = (draw.cull_from_tile != null) ? draw.cull_from_tile : true;\n\n // standalone text can move into tile if specified\n layout.move_into_tile = (draw.move_into_tile != null) ? draw.move_into_tile : true;\n\n // repeat rules include the text\n if (layout.repeat_distance) {\n if (repeat_group_prefix) {\n layout.repeat_group += '/' + repeat_group_prefix;\n }\n layout.repeat_group += '/' + text;\n }\n\n // Max number of subdivisions to try\n layout.subdiv = tile.overzoom2;\n\n layout.align = draw.align;\n\n // used to fudge width value as text may overflow bounding box if it has italic, bold, etc style\n layout.italic = (text_settings.style !== 'normal');\n\n // used to determine orientation of text if the text_source has a `left` or `right` key\n if (orientation === 'right') {\n layout.orientation = 1;\n }\n else if (orientation === 'left'){\n layout.orientation = -1;\n }\n\n return layout;\n }\n\n};\n", + "// Text label rendering methods, can be mixed into a rendering style\n\nimport {StyleParser} from '../style_parser';\nimport Texture from '../../gl/texture';\nimport Geo from '../../geo';\nimport log from '../../utils/log';\nimport Thread from '../../utils/thread';\nimport WorkerBroker from '../../utils/worker_broker';\nimport Collision from '../../labels/collision';\nimport TextSettings from '../text/text_settings';\nimport CanvasText from '../text/canvas_text';\n\n// namespaces label textures (ensures new texture name when a tile is built multiple times)\nlet text_texture_id = 0;\n\nexport const TextLabels = {\n\n resetText () {\n if (Thread.is_main) {\n this.canvas = new CanvasText();\n }\n else if (Thread.is_worker) {\n this.texts = {}; // unique texts, grouped by tile, by style\n }\n },\n\n freeText (tile) {\n delete this.texts[tile.key];\n },\n\n parseTextFeature (feature, draw, context, tile) {\n // Compute label text\n let text = this.parseTextSource(feature, draw, context);\n\n if (text == null || text === '') {\n return; // no text for this feature\n }\n\n // Compute text style and layout settings for this feature label\n let text_settings = TextSettings.compute(feature, draw, context);\n let text_settings_key = TextSettings.key(text_settings);\n\n // first label in tile, or with this style?\n this.texts[tile.key] = this.texts[tile.key] || {};\n let sizes = this.texts[tile.key][text_settings_key] = this.texts[tile.key][text_settings_key] || {};\n\n if (text instanceof Object){\n let results = [];\n\n // add both left/right text elements to repeat group to improve repeat culling\n // avoids one component of a boundary label (e.g. Colorado) being culled too aggressively when it also\n // appears in nearby boundary labels (e.g. Colorado/Utah & Colorado/New Mexico repeat as separate groups)\n let repeat_group_prefix = text.left + '-' + text.right; // NB: should be all text keys, not just left/right\n\n for (let key in text){\n let current_text = text[key];\n if (!current_text) {\n continue;\n }\n\n let layout = this.computeTextLayout({}, feature, draw, context, tile, current_text, text_settings, repeat_group_prefix, key);\n if (!sizes[current_text]) {\n // first label with this text/style/tile combination, make a new label entry\n sizes[current_text] = {\n text_settings,\n ref: 0 // # of times this text/style combo appears in tile\n };\n }\n\n results.push({\n draw, text : current_text, text_settings_key, layout\n });\n }\n\n return results;\n }\n else {\n // unique text strings, grouped by text drawing style\n let layout = this.computeTextLayout({}, feature, draw, context, tile, text, text_settings);\n if (!sizes[text]) {\n // first label with this text/style/tile combination, make a new label entry\n sizes[text] = {\n text_settings,\n ref: 0 // # of times this text/style combo appears in tile\n };\n }\n\n return {\n draw, text, text_settings_key, layout\n };\n }\n },\n\n // Compute the label text, default is value of feature.properties.name\n // - String value indicates a feature property look-up, e.g. `short_name` means use feature.properties.short_name\n // - Function will use the return value as the label text (for custom labels)\n // - Array (of strings and/or functions) defines a list of fallbacks, evaluated according to the above rules,\n // with the first non-null value used as the label text\n // e.g. `[name:es, name:en, name]` prefers Spanish names, followed by English, and last the default local name\n parseTextSource (feature, draw, context) {\n let text;\n let source = draw.text_source || 'name';\n\n if (source != null && typeof source === 'object') {\n // left/right boundary labels\n text = {};\n for (let key in source) {\n text[key] = this.parseTextSourceValue(source[key], feature, context);\n }\n }\n else {\n // single label\n text = this.parseTextSourceValue(source, feature, context);\n }\n\n return text;\n },\n\n parseTextSourceValue (source, feature, context) {\n let text;\n if (Array.isArray(source)) {\n for (let s=0; s < source.length; s++) {\n if (typeof source[s] === 'string') {\n text = feature.properties[source[s]];\n } else if (typeof source[s] === 'function') {\n text = source[s](context);\n }\n\n if (text) {\n return text; // stop if we found a text property\n }\n }\n }\n else if (typeof source === 'string') {\n text = feature.properties[source];\n }\n else if (source instanceof Function) {\n text = source(context);\n }\n\n return text;\n },\n\n prepareTextLabels (tile, collision_group, queue) {\n if (Object.keys(this.texts[tile.key]||{}).length === 0) {\n return Promise.resolve({});\n }\n\n // first call to main thread, ask for text pixel sizes\n return WorkerBroker.postMessage(this.main_thread_target+'.calcTextSizes', this.texts[tile.key]).then(texts => {\n\n if (tile.canceled) {\n log('trace', `Style ${this.name}: stop tile build because tile was canceled: ${tile.key}, post-calcTextSizes()`);\n return;\n }\n\n this.texts[tile.key] = texts;\n if (!texts) {\n return;\n }\n\n return this.buildTextLabels(tile.key, queue);\n });\n },\n\n collideAndRenderTextLabels (tile, collision_group, labels) {\n if (!labels) {\n Collision.collide({}, collision_group, tile.key);\n return Promise.resolve({});\n }\n\n return Collision.collide(labels, collision_group, tile.key).then(labels => {\n if (tile.canceled) {\n log('trace', `stop tile build because tile was canceled: ${tile.key}, post-collide()`);\n return {};\n }\n\n if (labels.length === 0) {\n return {};\n }\n\n let texts = this.texts[tile.key];\n this.cullTextStyles(texts, labels);\n\n // set alignments\n labels.forEach(q => {\n let text_settings_key = q.text_settings_key;\n let text_info = texts[text_settings_key] && texts[text_settings_key][q.text];\n if (!text_info.text_settings.can_articulate){\n text_info.align = text_info.align || {};\n text_info.align[q.label.align] = {};\n }\n else {\n // consider making it a set\n if (!text_info.type) {\n text_info.type = [];\n }\n\n if (text_info.type.indexOf(q.label.type) === -1){\n text_info.type.push(q.label.type);\n }\n }\n });\n\n // second call to main thread, for rasterizing the set of texts\n return WorkerBroker.postMessage(this.main_thread_target+'.rasterizeTexts', tile.key, texts).then(({ texts, texture }) => {\n if (tile.canceled) {\n log('trace', `stop tile build because tile was canceled: ${tile.key}, post-rasterizeTexts()`);\n return {};\n }\n\n return { labels, texts, texture };\n });\n });\n },\n\n // Remove unused text/style combinations to avoid unnecessary rasterization\n cullTextStyles(texts, labels) {\n // Count how many times each text/style combination is used\n for (let i=0; i < labels.length; i++) {\n let label = labels[i];\n texts[label.text_settings_key][label.text].ref++;\n }\n\n // Remove text/style combinations that have no visible labels\n for (let style in texts) {\n for (let text in texts[style]) {\n // no labels for this text\n if (texts[style][text].ref < 1) {\n delete texts[style][text];\n }\n }\n }\n\n for (let style in texts) {\n // no labels for this style\n if (Object.keys(texts[style]).length === 0) {\n delete texts[style];\n }\n }\n },\n\n // Called on main thread from worker, to compute the size of each text string,\n // were it to be rendered. This info is then used to perform initial label culling, *before*\n // labels are actually rendered.\n calcTextSizes (texts) {\n return this.canvas.textSizes(texts);\n },\n\n // Called on main thread from worker, to create atlas of labels for a tile\n rasterizeTexts (tile_key, texts) {\n let canvas = this.canvas;\n let texture_size = canvas.setTextureTextPositions(texts, this.max_texture_size, tile_key);\n log('trace', `text summary for tile ${tile_key}: fits in ${texture_size[0]}x${texture_size[1]}px`);\n\n // fits in max texture size?\n if (texture_size[0] < this.max_texture_size && texture_size[1] < this.max_texture_size) {\n // update canvas size & rasterize all the text strings we need\n canvas.resize(...texture_size);\n canvas.rasterize(texts, texture_size, tile_key);\n }\n else {\n log('error', [\n `Label atlas for tile ${tile_key} is ${texture_size[0]}x${texture_size[1]}px, `,\n `but max GL texture size is ${this.max_texture_size}x${this.max_texture_size}px`].join('')\n );\n }\n\n // create a texture\n let t = 'labels-' + tile_key + '-' + (text_texture_id++);\n Texture.create(this.gl, t, {\n element: canvas.canvas,\n filtering: 'linear',\n UNPACK_PREMULTIPLY_ALPHA_WEBGL: true\n });\n Texture.retain(t);\n\n return { texts, texture: t }; // texture is returned by name (not instance)\n },\n\n preprocessText (draw) {\n // Font settings are required\n if (!draw || !draw.font || typeof draw.font !== 'object') {\n return;\n }\n\n // Colors\n draw.font.fill = StyleParser.createPropertyCache(draw.font.fill);\n if (draw.font.stroke) {\n draw.font.stroke.color = StyleParser.createPropertyCache(draw.font.stroke.color);\n }\n\n // Convert font and text stroke sizes\n draw.font.px_size = StyleParser.createPropertyCache(draw.font.size || TextSettings.defaults.size, CanvasText.fontPixelSize);\n if (draw.font.stroke && draw.font.stroke.width != null) {\n draw.font.stroke.width = StyleParser.createPropertyCache(draw.font.stroke.width, parseFloat);\n }\n\n // Offset (2d array)\n draw.offset = StyleParser.createPropertyCache(draw.offset, v => (Array.isArray(v) && v.map(parseFloat)) || 0);\n\n // Buffer (1d value or or 2d array)\n draw.buffer = StyleParser.createPropertyCache(draw.buffer, v => (Array.isArray(v) ? v : [v, v]).map(parseFloat) || 0);\n\n // Repeat rules - for text labels, defaults to tile size\n draw.repeat_distance = StyleParser.createPropertyCache(draw.repeat_distance || Geo.tile_size, parseFloat);\n\n return draw;\n },\n\n // Additional text-specific layout settings\n computeTextLayout (target, feature, draw, context, tile, text, text_settings, repeat_group_prefix, orientation) {\n let layout = target || {};\n\n // common settings w/points\n layout = this.computeLayout(layout, feature, draw, context, tile);\n\n // tile boundary handling\n layout.cull_from_tile = (draw.cull_from_tile != null) ? draw.cull_from_tile : true;\n\n // standalone text can move into tile if specified\n layout.move_into_tile = (draw.move_into_tile != null) ? draw.move_into_tile : true;\n\n // repeat rules include the text\n if (layout.repeat_distance) {\n if (repeat_group_prefix) {\n layout.repeat_group += '/' + repeat_group_prefix;\n }\n layout.repeat_group += '/' + text;\n }\n\n // Max number of subdivisions to try\n layout.subdiv = tile.overzoom2;\n\n layout.align = draw.align;\n\n // used to fudge width value as text may overflow bounding box if it has italic, bold, etc style\n layout.italic = (text_settings.style !== 'normal');\n\n // used to determine orientation of text if the text_source has a `left` or `right` key\n if (orientation === 'right') {\n layout.orientation = 1;\n }\n else if (orientation === 'left'){\n layout.orientation = -1;\n }\n\n return layout;\n }\n\n};\n", "import Utils from '../../utils/utils';\nimport Geo from '../../geo';\nimport {StyleParser} from '../style_parser';\n\nvar TextSettings;\n\nexport default TextSettings = {\n\n // A key for grouping all labels of the same text style (e.g. same Canvas state, to minimize state changes)\n key (settings) {\n return [\n settings.style,\n settings.weight,\n settings.family,\n settings.px_size,\n settings.fill,\n settings.stroke,\n settings.stroke_width,\n settings.transform,\n settings.text_wrap,\n settings.max_lines,\n settings.supersample,\n Utils.device_pixel_ratio\n ].join('/');\n },\n\n defaults: {\n style: 'normal',\n weight: null,\n size: '12px',\n px_size: 12,\n family: 'Helvetica',\n fill: 'white',\n text_wrap: 15,\n max_lines: 5,\n align: 'center',\n stroke: null,\n stroke_width: 0\n },\n\n compute (feature, draw, context) {\n let style = {};\n\n draw.font = draw.font || this.defaults;\n\n // LineString labels can articulate while point labels cannot. Needed for future texture coordinate calculations.\n style.can_articulate = draw.can_articulate;\n\n // Use fill if specified, or default\n style.fill = (draw.font.fill && Utils.toCSSColor(StyleParser.evalCachedColorProperty(draw.font.fill, context))) || this.defaults.fill;\n\n // Font properties are modeled after CSS names:\n // - family: Helvetica, Futura, etc.\n // - size: in pt, px, or em\n // - style: normal, italic, oblique\n // - weight: normal, bold, etc.\n // - transform: capitalize, uppercase, lowercase\n style.style = draw.font.style || this.defaults.style;\n style.weight = draw.font.weight || this.defaults.weight;\n if (draw.font.family) {\n style.family = draw.font.family;\n if (style.family !== this.defaults.family) {\n style.family += ', ' + this.defaults.family;\n }\n }\n else {\n style.family = this.defaults.family;\n }\n\n style.transform = draw.font.transform;\n\n // original size (not currently used, but useful for debugging)\n style.size = draw.font.size || this.defaults.size;\n\n // calculated pixel size\n style.supersample = draw.supersample_text ? 1.5 : 1; // optionally render text at 150% to improve clarity\n style.px_size = StyleParser.evalCachedProperty(draw.font.px_size, context) * style.supersample;\n\n // Use stroke if specified\n if (draw.font.stroke && draw.font.stroke.color) {\n style.stroke = Utils.toCSSColor(StyleParser.evalCachedColorProperty(draw.font.stroke.color, context) || this.defaults.stroke);\n style.stroke_width = StyleParser.evalCachedProperty(draw.font.stroke.width, context) || this.defaults.stroke_width;\n }\n\n style.font_css = this.fontCSS(style);\n\n // Word wrap and text alignment\n // Not a font properties, but affect atlas of unique text textures\n let text_wrap = draw.text_wrap; // use explicitly set value\n\n if (text_wrap == null && Geo.geometryType(feature.geometry.type) !== 'line') {\n // point labels (for point and polygon features) have word wrap on w/default max length,\n // line labels default off\n text_wrap = true;\n }\n\n // setting to 'true' causes default wrap value to be used\n if (text_wrap === true) {\n text_wrap = this.defaults.text_wrap;\n }\n style.text_wrap = text_wrap;\n\n // max_lines setting to truncate very long labels with an ellipsis\n style.max_lines = draw.max_lines || this.defaults.max_lines;\n\n return style;\n },\n\n // Build CSS-style font string (to set Canvas draw state)\n fontCSS ({ style, weight, px_size, family }) {\n return [style, weight, px_size + 'px', family]\n .filter(x => x) // remove null props\n .join(' ');\n }\n\n};\n", "import log from './utils/log';\nimport Utils from './utils/utils';\nimport mergeObjects from './utils/merge';\nimport Geo from './geo';\nimport {addLayerDebugEntry} from './styles/style';\nimport {StyleParser} from './styles/style_parser';\nimport Collision from './labels/collision';\nimport WorkerBroker from './utils/worker_broker';\nimport Texture from './gl/texture';\n\nimport {mat4, vec3} from './utils/gl-matrix';\n\nexport default class Tile {\n\n /**\n Tile\n @constructor\n Required properties:\n coords: object with {x, y, z} properties identifying tile coordinate location\n worker: web worker to handle tile construction\n */\n constructor({ coords, style_zoom, source, worker, view }) {\n this.worker = worker;\n this.view = view;\n this.source = source;\n this.generation = null;\n\n this.visible = false;\n this.proxy_for = null;\n this.proxy_depth = 0;\n this.proxied_as = null;\n this.fade_in = true;\n this.loading = false;\n this.loaded = false;\n this.built = false;\n this.error = null;\n this.debug = {};\n\n this.coords = Tile.coordinateWithMaxZoom(coords, this.source.max_zoom);\n this.style_zoom = style_zoom; // zoom level to be used for styling\n this.overzoom = Math.max(this.style_zoom - this.coords.z, 0); // number of levels of overzooming\n this.overzoom2 = Math.pow(2, this.overzoom);\n this.key = Tile.key(this.coords, this.source, this.style_zoom);\n this.min = Geo.metersForTile(this.coords);\n this.max = Geo.metersForTile({x: this.coords.x + 1, y: this.coords.y + 1, z: this.coords.z }),\n this.span = { x: (this.max.x - this.min.x), y: (this.max.y - this.min.y) };\n this.bounds = { sw: { x: this.min.x, y: this.max.y }, ne: { x: this.max.x, y: this.min.y } };\n this.center_dist = 0;\n\n this.meters_per_pixel = Geo.metersPerPixel(this.style_zoom);\n this.meters_per_pixel_sq = this.meters_per_pixel * this.meters_per_pixel;\n this.units_per_pixel = Geo.units_per_pixel / this.overzoom2; // adjusted for overzoom\n this.units_per_meter_overzoom = Geo.unitsPerMeter(this.coords.z) * this.overzoom2; // adjusted for overzoom\n\n this.meshes = {}; // renderable VBO meshes keyed by style\n this.textures = []; // textures that the tile owns (labels, etc.)\n this.previous_textures = []; // textures retained by the tile in the previous build generation\n this.new_mesh_styles = []; // meshes that have been built so far in current build generation\n }\n\n static create(spec) {\n return new Tile(spec);\n }\n\n static coord(c) {\n return {x: c.x, y: c.y, z: c.z, key: Tile.coordKey(c)};\n }\n\n static coordKey({x, y, z}) {\n return x + '/' + y + '/' + z;\n }\n\n static key (coords, source, style_zoom) {\n coords = Tile.coordinateWithMaxZoom(coords, source.max_zoom);\n if (coords.y < 0 || coords.y >= (1 << coords.z) || coords.z < 0) {\n return; // cull tiles out of range (x will wrap)\n }\n return [source.name, style_zoom, coords.x, coords.y, coords.z].join('/');\n }\n\n static coordinateAtZoom({x, y, z, key}, zoom) {\n if (z !== zoom) {\n let zscale = Math.pow(2, z - zoom);\n x = Math.floor(x / zscale);\n y = Math.floor(y / zscale);\n z = zoom;\n }\n return Tile.coord({x, y, z});\n }\n\n static coordinateWithMaxZoom({x, y, z}, max_zoom) {\n if (max_zoom !== undefined && z > max_zoom) {\n return Tile.coordinateAtZoom({x, y, z}, max_zoom);\n }\n return Tile.coord({x, y, z});\n }\n\n static childrenForCoordinate({x, y, z, key}) {\n if (!Tile.coord_children[key]) {\n z++;\n x *= 2;\n y *= 2;\n Tile.coord_children[key] = [\n Tile.coord({x, y, z}), Tile.coord({x: x+1, y, z}),\n Tile.coord({x, y: y+1, z}), Tile.coord({x: x+1, y: y+1, z})\n ];\n }\n return Tile.coord_children[key];\n }\n\n static isDescendant(parent, descendant) {\n if (descendant.z > parent.z) {\n let {x, y} = Tile.coordinateAtZoom(descendant, parent.z);\n return (parent.x === x && parent.y === y);\n }\n return false;\n }\n\n // Free resources owned by tile\n freeResources () {\n for (let m in this.meshes) {\n this.meshes[m].destroy();\n }\n this.meshes = {};\n\n this.textures.forEach(t => Texture.release(t));\n this.textures = [];\n\n this.previous_textures.forEach(t => Texture.release(t));\n this.previous_textures = [];\n }\n\n destroy() {\n this.workerMessage('self.removeTile', this.key);\n this.freeResources();\n this.worker = null;\n }\n\n buildAsMessage() {\n return {\n key: this.key,\n source: this.source.name,\n coords: this.coords,\n min: this.min,\n max: this.max,\n units_per_pixel: this.units_per_pixel,\n meters_per_pixel: this.meters_per_pixel,\n meters_per_pixel_sq: this.meters_per_pixel_sq,\n units_per_meter_overzoom: this.units_per_meter_overzoom,\n style_zoom: this.style_zoom,\n overzoom: this.overzoom,\n overzoom2: this.overzoom2,\n generation: this.generation,\n debug: this.debug\n };\n }\n\n workerMessage (...message) {\n return WorkerBroker.postMessage(this.worker, ...message);\n }\n\n build(generation, { fade_in = true } = {}) {\n this.generation = generation;\n this.fade_in = fade_in;\n if (!this.loaded) {\n this.loading = true;\n this.built = false;\n }\n return this.workerMessage('self.buildTile', { tile: this.buildAsMessage() }).catch(e => { throw e; });\n }\n\n /**\n Called on worker to cancel loading\n Static method because the worker only has object representations of tile data, there is no\n tile instance created yet.\n */\n static cancel(tile) {\n if (tile) {\n tile.canceled = true;\n if (tile.source_data && tile.source_data.request_id) {\n Utils.cancelRequest(tile.source_data.request_id); // cancel pending tile network request\n tile.source_data.request_id = null;\n }\n Tile.abortBuild(tile);\n }\n }\n\n // Process geometry for tile - called by web worker\n // Returns a set of tile keys that should be sent to the main thread (so that we can minimize data exchange between worker and main thread)\n static buildGeometry (tile, { scene_id, layers, styles, global }) {\n let data = tile.source_data;\n\n tile.debug.rendering = +new Date();\n tile.debug.feature_count = 0;\n tile.debug.layers = null;\n\n Collision.startTile(tile.key);\n\n // Process each top-level layer\n for (let layer_name in layers) {\n let layer = layers[layer_name];\n // Skip layers with no data source defined\n if (!layer || !layer.config_data) {\n log('warn', `Layer ${layer_name} was defined without a geometry data source and will not be rendered.`);\n continue;\n }\n\n // Source names don't match\n if (layer.config_data.source !== tile.source) {\n continue;\n }\n\n // Get data for one or more layers from source\n let source_layers = Tile.getDataForSource(data, layer.config_data, layer_name);\n\n // Render features in layer\n for (let s=0; s < source_layers.length; s++) {\n let source_layer = source_layers[s];\n let geom = source_layer.geom;\n if (!geom) {\n continue;\n }\n\n for (let f = 0; f < geom.features.length; f++) {\n let feature = geom.features[f];\n if (feature.geometry == null) {\n continue; // skip features w/o geometry (valid GeoJSON)\n }\n\n let context = StyleParser.getFeatureParseContext(feature, tile, global);\n context.winding = tile.default_winding;\n context.source = tile.source; // add data source name\n context.layer = source_layer.layer; // add data source layer name\n\n // Get draw groups for this feature\n let draw_groups = layer.buildDrawGroups(context, true);\n if (!draw_groups) {\n continue;\n }\n\n // Render draw groups\n for (let group_name in draw_groups) {\n let group = draw_groups[group_name];\n\n // Add to style\n let style_name = group.style || group_name;\n let style = styles[style_name];\n\n if (!style) {\n log('warn', `Style '${style_name}' not found, skipping layer '${layer_name}':`, group, feature);\n continue;\n }\n\n group = style.preprocess(group);\n if (group == null || group.visible === false) {\n continue;\n }\n\n context.layers = group.layers; // add matching draw layers\n\n style.addFeature(feature, group, context);\n }\n\n tile.debug.feature_count++;\n }\n }\n }\n tile.debug.rendering = +new Date() - tile.debug.rendering;\n\n // Send styles back to main thread as they finish building, in two groups: collision vs. non-collision\n let tile_styles = this.stylesForTile(tile.key, styles).map(s => styles[s]);\n Tile.sendStyleGroups(tile, tile_styles, { scene_id }, style => style.collision ? 'collision' : 'non-collision');\n // Tile.sendStyleGroups(tile, tile_styles, { scene_id }, style => style.name); // call for each style\n // Tile.sendStyleGroups(tile, tile_styles, { scene_id }, style => 'styles'); // all styles in single call (previous behavior)\n }\n\n static stylesForTile (tile_key, styles) {\n let tile_styles = [];\n for (let s in styles) {\n if (styles[s].hasDataForTile(tile_key)) {\n tile_styles.push(s);\n }\n }\n return tile_styles;\n }\n\n // Send groups of styles back to main thread, asynchronously (as they finish building),\n // grouped by the provided function\n static sendStyleGroups(tile, styles, { scene_id }, group_by) {\n // Group styles\n let groups = {};\n styles.forEach(s => {\n let group_name = group_by(s);\n groups[group_name] = groups[group_name] || [];\n groups[group_name].push(s);\n });\n\n if (Object.keys(groups).length > 0) {\n let progress = { start: true };\n tile.mesh_data = {};\n\n for (let group_name in groups) {\n let group = groups[group_name];\n\n Promise.all(group.map(style => {\n return style.endData(tile).then(style_data => {\n if (style_data) {\n tile.mesh_data[style.name] = {\n vertex_data: style_data.vertex_data,\n vertex_elements: style_data.vertex_elements,\n uniforms: style_data.uniforms,\n textures: style_data.textures\n };\n }\n });\n }))\n .then(() => {\n log('trace', `Finished style group '${group_name}' for tile ${tile.key}`);\n\n // Clear group and check if all groups finished\n groups[group_name] = [];\n if (Object.keys(groups).every(g => groups[g].length === 0)) {\n progress.done = true;\n }\n\n // Send meshes to main thread\n WorkerBroker.postMessage(\n `TileManager_${scene_id}.buildTileStylesCompleted`,\n WorkerBroker.withTransferables({ tile: Tile.slice(tile, ['mesh_data']), progress })\n );\n progress.start = null;\n tile.mesh_data = {}; // reset so each group sends separate set of style meshes\n\n if (progress.done) {\n Collision.resetTile(tile.key); // clear collision if we're done with the tile\n }\n });\n }\n }\n else {\n // Nothing to build, return empty tile to main thread\n WorkerBroker.postMessage(\n `TileManager_${scene_id}.buildTileStylesCompleted`,\n WorkerBroker.withTransferables({ tile: Tile.slice(tile), progress: { start: true, done: true } })\n );\n Collision.resetTile(tile.key); // clear collision if we're done with the tile\n }\n }\n\n /**\n Retrieves geometry from a tile according to a data source definition\n Returns an array of objects with:\n layer: source layer name\n geom: GeoJSON FeatureCollection\n */\n static getDataForSource (source_data, source_config, default_layer = null) {\n var layers = [];\n\n if (source_config != null && source_data != null && source_data.layers != null) {\n // If no layer specified, and a default source layer exists\n if (!source_config.layer && source_data.layers._default) {\n layers.push({\n geom: source_data.layers._default\n });\n }\n // If no layer specified, and a default requested layer exists\n else if (!source_config.layer && default_layer) {\n layers.push({\n layer: default_layer,\n geom: source_data.layers[default_layer]\n });\n }\n // If a layer is specified by name, use it\n else if (typeof source_config.layer === 'string') {\n layers.push({\n layer: source_config.layer,\n geom: source_data.layers[source_config.layer]\n });\n }\n // If multiple layers are specified by name, combine them\n else if (Array.isArray(source_config.layer)) {\n source_config.layer.forEach(layer => {\n if (source_data.layers[layer] && source_data.layers[layer].features) {\n layers.push({\n layer,\n geom: source_data.layers[layer]\n });\n }\n });\n }\n }\n\n return layers;\n }\n\n /**\n Called on main thread when a web worker completes processing\n for a single tile.\n */\n buildMeshes(styles, progress) {\n if (this.error) {\n return;\n }\n\n // Debug\n if (progress.start) {\n this.debug.geometry_count = 0;\n this.debug.buffer_size = 0;\n }\n\n // Create VBOs\n let meshes = {}, textures = []; // new data to be added to tile\n let mesh_data = this.mesh_data;\n if (mesh_data) {\n for (var s in mesh_data) {\n if (mesh_data[s].vertex_data) {\n if (!styles[s]) {\n log('warn', `Could not create mesh because style '${s}' not found, for tile ${this.key}, aborting tile`);\n break;\n }\n meshes[s] = styles[s].makeMesh(mesh_data[s].vertex_data, mesh_data[s].vertex_elements, mesh_data[s]);\n this.debug.buffer_size += meshes[s].buffer_size;\n this.debug.geometry_count += meshes[s].geometry_count;\n }\n\n // Assign texture ownership to tiles\n // Note that it's valid for a single texture to be referenced from multiple styles\n // (e.g. same raster texture attached to multiple sources). This means the same\n // texture may be added to the tile's texture list more than once, which ensures\n // that it is properly released (to match its retain count).\n if (mesh_data[s].textures) {\n textures.push(...mesh_data[s].textures);\n }\n }\n }\n delete this.mesh_data;\n\n // Initialize tracking for this tile generation\n if (progress.start) {\n this.new_mesh_styles = []; // keep track of which meshes were built as part of current generation\n this.previous_textures = [...this.textures]; // copy old list of textures\n this.textures = [];\n }\n\n // New meshes\n for (let m in meshes) {\n if (this.meshes[m]) {\n this.meshes[m].destroy(); // free old mesh\n }\n this.meshes[m] = meshes[m]; // set new mesh\n this.new_mesh_styles.push(m);\n }\n\n // New textures\n this.textures.push(...textures);\n\n if (progress.done) {\n // Release un-replaced meshes (existing in previous generation, but weren't built for this one)\n for (let m in this.meshes) {\n if (this.new_mesh_styles.indexOf(m) === -1) {\n this.meshes[m].destroy();\n delete this.meshes[m];\n }\n }\n this.new_mesh_styles = [];\n\n // Release old textures\n this.previous_textures.forEach(t => Texture.release(t));\n this.previous_textures = [];\n\n this.debug.geometry_ratio = (this.debug.geometry_count / this.debug.feature_count).toFixed(1);\n this.printDebug();\n }\n }\n\n /**\n Called on main thread when web worker completes processing, but tile has since been discarded\n Frees resources that would have been transferred to the tile object.\n Static method because the tile object no longer exists (the tile data returned by the worker is passed instead).\n */\n static abortBuild (tile) {\n // Releases meshes\n if (tile.mesh_data) {\n for (let s in tile.mesh_data) {\n let textures = tile.mesh_data[s].textures;\n if (textures) {\n textures.forEach(t => {\n let texture = Texture.textures[t];\n if (texture) {\n log('trace', `releasing texture ${t} for tile ${tile.key}`);\n texture.release();\n }\n });\n }\n }\n }\n }\n\n // Set as a proxy tile for another tile\n setProxyFor (tile) {\n if (tile) {\n this.visible = true;\n this.proxy_for = this.proxy_for || [];\n this.proxy_for.push(tile);\n this.proxy_depth = 1; // draw proxies a half-layer back (order is scaled 2x to avoid integer truncation)\n tile.proxied_as = (tile.style_zoom > this.style_zoom ? 'child' : 'parent');\n }\n else {\n this.proxy_for = null;\n this.proxy_depth = 0;\n }\n }\n\n // Proxy tiles only need to render a specific style if any of the tiles they are proxying *for*\n // haven't finished loading that style yet. If all proxied tiles *have* data for that style, then it's\n // safe to hide the proxy tile's version.\n shouldProxyForStyle (style) {\n return !this.proxy_for || this.proxy_for.some(t => t.meshes[style] == null);\n }\n\n // Update model matrix and tile uniforms\n setupProgram ({ model, model32 }, program) {\n // Tile origin\n program.uniform('4fv', 'u_tile_origin', [this.min.x, this.min.y, this.style_zoom, this.coords.z]);\n program.uniform('1f', 'u_tile_proxy_depth', this.proxy_depth);\n\n // Model - transform tile space into world space (meters, absolute mercator position)\n mat4.identity(model);\n mat4.translate(model, model, vec3.fromValues(this.min.x, this.min.y, 0));\n mat4.scale(model, model, vec3.fromValues(this.span.x / Geo.tile_scale, -1 * this.span.y / Geo.tile_scale, 1)); // scale tile local coords to meters\n mat4.copy(model32, model);\n program.uniform('Matrix4fv', 'u_model', model32);\n\n // Fade in labels according to proxy status, avoiding \"flickering\" where\n // labels quickly go from invisible back to visible\n program.uniform('1i', 'u_tile_fade_in', this.fade_in && this.proxied_as !== 'child');\n }\n\n // Slice a subset of keys out of a tile\n // Includes a minimum set of pre-defined keys for load state, debug. etc.\n // We use this to send a subset of the tile back to the main thread, to minimize unnecessary data transfer\n // (e.g. very large items like feature geometry are not needed on the main thread)\n static slice (tile, keys) {\n let keep = [\n 'key',\n 'loading',\n 'loaded',\n 'generation',\n 'error',\n 'debug'\n ];\n if (Array.isArray(keys)) {\n keep.push(...keys);\n }\n\n // Build the tile subset\n var tile_subset = {};\n for (let k=0; k < keep.length; k++) {\n const key = keep[k];\n tile_subset[key] = tile[key];\n }\n\n return tile_subset;\n }\n\n merge (other) {\n this.loading = other.loading;\n this.loaded = other.loaded;\n this.generation = other.loaded;\n this.error = other.error;\n this.mesh_data = other.mesh_data;\n this.debug = mergeObjects(this.debug, other.debug);\n return this;\n }\n\n printDebug (exclude = ['layers']) {\n let copy = {};\n for (let key in this.debug) {\n if (exclude.indexOf(key) === -1) {\n copy[key] = this.debug[key];\n }\n }\n\n log('debug', `Tile: debug for ${this.key}: [ ${JSON.stringify(copy)} ]`);\n }\n\n // Sum up layer feature/geometry stats from a set of tiles\n static debugSumLayerStats (tiles) {\n let list = {}, tree = {};\n\n tiles.filter(tile => tile.debug.layers).forEach(tile => {\n // layer list\n Object.keys(tile.debug.layers.list).forEach(layer => {\n let counts = tile.debug.layers.list[layer];\n addLayerDebugEntry(list, layer, counts.features, counts.geoms, counts.styles, counts.base);\n });\n\n // layer tree\n addDebugLayers(tile.debug.layers.tree, tree);\n });\n\n return { list, tree };\n }\n\n}\n\nTile.coord_children = {}; // only allocate children coordinates once per coordinate\n\n// build debug stats layer tree\nfunction addDebugLayers (node, tree) {\n for (let layer in node) {\n let counts = node[layer];\n addLayerDebugEntry(tree, layer, counts.features, counts.geoms, counts.styles, counts.base);\n if (counts.layers) {\n tree[layer].layers = tree[layer].layers || {};\n addDebugLayers(counts.layers, tree[layer].layers); // process child layers\n }\n }\n}\n", "import Tile from './tile';\nimport TilePyramid from './tile_pyramid';\nimport Geo from './geo';\nimport log from './utils/log';\nimport WorkerBroker from './utils/worker_broker';\n\nexport default class TileManager {\n\n constructor({ scene, view }) {\n this.scene = scene;\n this.view = view;\n this.tiles = {};\n this.pyramid = new TilePyramid();\n this.visible_coords = {};\n this.queued_coords = [];\n this.building_tiles = null;\n this.renderable_tiles = [];\n this.active_styles = [];\n\n // Provide a hook for this object to be called from worker threads\n this.main_thread_target = ['TileManager', this.scene.id].join('_');\n WorkerBroker.addTarget(this.main_thread_target, this);\n }\n\n destroy() {\n this.forEachTile(tile => tile.destroy());\n this.tiles = {};\n this.pyramid = null;\n this.visible_coords = {};\n this.queued_coords = [];\n this.scene = null;\n this.view = null;\n }\n\n keepTile(tile) {\n this.tiles[tile.key] = tile;\n this.pyramid.addTile(tile);\n }\n\n hasTile(key) {\n return this.tiles[key] !== undefined;\n }\n\n forgetTile(key) {\n if (this.hasTile(key)) {\n let tile = this.tiles[key];\n this.pyramid.removeTile(tile);\n }\n\n delete this.tiles[key];\n this.tileBuildStop(key);\n }\n\n // Remove a single tile\n removeTile(key) {\n log('trace', `tile unload for ${key}`);\n\n var tile = this.tiles[key];\n\n if (tile != null) {\n tile.destroy();\n }\n\n this.forgetTile(tile.key);\n this.scene.requestRedraw();\n }\n\n // Run a function on each tile\n forEachTile(func) {\n for (let t in this.tiles) {\n func(this.tiles[t]);\n }\n }\n\n // Remove tiles that pass a filter condition\n removeTiles(filter) {\n let remove_tiles = [];\n for (let t in this.tiles) {\n let tile = this.tiles[t];\n if (filter(tile)) {\n remove_tiles.push(t);\n }\n }\n for (let r=0; r < remove_tiles.length; r++) {\n let key = remove_tiles[r];\n this.removeTile(key);\n }\n }\n\n updateTilesForView() {\n // Find visible tiles and load new ones\n this.visible_coords = {};\n let tile_coords = this.view.findVisibleTileCoordinates();\n for (let c=0; c < tile_coords.length; c++) {\n const coords = tile_coords[c];\n this.queueCoordinate(coords);\n this.visible_coords[coords.key] = coords;\n }\n\n this.updateTileStates();\n }\n\n updateTileStates () {\n this.forEachTile(tile => {\n this.updateVisibility(tile);\n });\n\n this.loadQueuedCoordinates();\n this.updateProxyTiles();\n this.view.pruneTilesForView();\n this.updateRenderableTiles();\n this.updateActiveStyles();\n }\n\n updateProxyTiles () {\n if (this.view.zoom_direction === 0) {\n return;\n }\n\n // Clear previous proxies\n this.forEachTile(tile => tile.setProxyFor(null));\n\n let proxy = false;\n this.forEachTile(tile => {\n if (this.view.zoom_direction === 1) {\n if (tile.visible && !tile.built && tile.coords.z > 0) {\n const parent = this.pyramid.getAncestor(tile);\n if (parent) {\n parent.setProxyFor(tile);\n proxy = true;\n }\n }\n }\n else if (this.view.zoom_direction === -1) {\n if (tile.visible && !tile.built) {\n const descendants = this.pyramid.getDescendants(tile);\n for (let i=0; i < descendants.length; i++) {\n descendants[i].setProxyFor(tile);\n proxy = true;\n }\n }\n }\n });\n\n if (!proxy) {\n this.view.zoom_direction = 0;\n }\n }\n\n updateVisibility(tile) {\n tile.visible = false;\n if (tile.style_zoom === this.view.tile_zoom) {\n if (this.visible_coords[tile.coords.key]) {\n tile.visible = true;\n }\n else {\n // brute force\n for (let key in this.visible_coords) {\n if (Tile.isDescendant(tile.coords, this.visible_coords[key])) {\n tile.visible = true;\n break;\n }\n }\n }\n }\n }\n\n // Remove tiles that aren't visible, and flag remaining visible ones to be updated (for loading, proxy, etc.)\n pruneToVisibleTiles () {\n this.removeTiles(tile => !tile.visible);\n }\n\n getRenderableTiles () {\n return this.renderable_tiles;\n }\n\n updateRenderableTiles() {\n this.renderable_tiles = [];\n for (let t in this.tiles) {\n let tile = this.tiles[t];\n if (tile.visible && tile.loaded) {\n this.renderable_tiles.push(tile);\n }\n }\n return this.renderable_tiles;\n }\n\n getActiveStyles () {\n return this.active_styles;\n }\n\n updateActiveStyles () {\n let tiles = this.renderable_tiles;\n let active = {};\n for (let t=0; t < tiles.length; t++) {\n let tile = tiles[t];\n Object.keys(tile.meshes).forEach(s => active[s] = true);\n }\n this.active_styles = Object.keys(active);\n return this.active_styles;\n }\n\n isLoadingVisibleTiles() {\n return Object.keys(this.tiles).some(k => this.tiles[k].visible && !this.tiles[k].built);\n }\n\n // Queue a tile for load\n queueCoordinate(coords) {\n this.queued_coords[this.queued_coords.length] = coords;\n }\n\n // Load all queued tiles\n loadQueuedCoordinates() {\n if (this.queued_coords.length === 0) {\n return;\n }\n\n // Sort queued tiles from center tile\n this.queued_coords.sort((a, b) => {\n let center = this.view.center.meters;\n let half_span = Geo.metersPerTile(a.z) / 2;\n\n let ac = Geo.metersForTile(a);\n ac.x += half_span;\n ac.y -= half_span;\n\n let bc = Geo.metersForTile(b);\n bc.x += half_span;\n bc.y -= half_span;\n\n let ad = Math.abs(center.x - ac.x) + Math.abs(center.y - ac.y);\n let bd = Math.abs(center.x - bc.x) + Math.abs(center.y - bc.y);\n\n a.center_dist = ad;\n b.center_dist = bd;\n\n return (bd > ad ? -1 : (bd === ad ? 0 : 1));\n });\n this.queued_coords.forEach(coords => this.loadCoordinate(coords));\n this.queued_coords = [];\n }\n\n // Load all tiles to cover a given logical tile coordinate\n loadCoordinate(coords) {\n // Skip if not at current scene zoom\n if (coords.z !== this.view.center.tile.z) {\n return;\n }\n\n // Determine necessary tiles for each source\n for (let s in this.scene.sources) {\n let source = this.scene.sources[s];\n // Check if data source should build this tile\n if (!source.builds_geometry_tiles || !source.includesTile(coords, this.view.tile_zoom)) {\n continue;\n }\n\n let key = Tile.key(coords, source, this.view.tile_zoom);\n if (key && !this.hasTile(key)) {\n log('trace', `load tile ${key}, distance from view center: ${coords.center_dist}`);\n let tile = Tile.create({\n source,\n coords,\n worker: this.scene.getWorkerForDataSource(source),\n style_zoom: this.view.styleZoom(coords.z),\n view: this.view\n });\n\n this.keepTile(tile);\n this.buildTile(tile);\n }\n }\n }\n\n // Start tile build process\n buildTile(tile, options) {\n this.tileBuildStart(tile.key);\n this.updateVisibility(tile);\n tile.build(this.scene.generation, options);\n }\n\n // Called on main thread when a web worker completes processing for a single tile (initial load, or rebuild)\n buildTileStylesCompleted({ tile, progress }) {\n // Removed this tile during load?\n if (this.tiles[tile.key] == null) {\n log('trace', `discarded tile ${tile.key} in TileManager.buildTileStylesCompleted because previously removed`);\n Tile.abortBuild(tile);\n this.updateTileStates();\n }\n // Built with an outdated scene configuration?\n else if (tile.generation !== this.scene.generation) {\n log('debug', `discarded tile ${tile.key} in TileManager.buildTileStylesCompleted because built with ` +\n `scene config gen ${tile.generation}, current ${this.scene.generation}`);\n Tile.abortBuild(tile);\n this.updateTileStates();\n }\n else {\n // Update tile with properties from worker\n if (this.tiles[tile.key]) {\n tile = this.tiles[tile.key].merge(tile);\n }\n\n if (progress.done) {\n tile.built = true;\n }\n\n tile.buildMeshes(this.scene.styles, progress);\n this.updateTileStates();\n this.scene.requestRedraw();\n }\n\n if (progress.done) {\n this.tileBuildStop(tile.key);\n }\n }\n\n // Called on main thread when web worker encounters an error building a tile\n buildTileError(tile) {\n log('error', `Error building tile ${tile.key}:`, tile.error);\n this.forgetTile(tile.key);\n Tile.abortBuild(tile);\n }\n\n // Track tile build state\n tileBuildStart(key) {\n this.building_tiles = this.building_tiles || {};\n this.building_tiles[key] = true;\n log('trace', `tileBuildStart for ${key}: ${Object.keys(this.building_tiles).length}`);\n }\n\n tileBuildStop(key) {\n // Done building?\n if (this.building_tiles) {\n log('trace', `tileBuildStop for ${key}: ${Object.keys(this.building_tiles).length}`);\n delete this.building_tiles[key];\n this.checkBuildQueue();\n }\n }\n\n // Check status of tile building queue and notify scene when we're done\n checkBuildQueue() {\n if (!this.building_tiles || Object.keys(this.building_tiles).length === 0) {\n this.building_tiles = null;\n this.scene.tileManagerBuildDone();\n }\n }\n\n // Get a debug property across tiles\n getDebugProp(prop, filter) {\n var vals = [];\n for (var t in this.tiles) {\n if (this.tiles[t].debug[prop] != null && (typeof filter !== 'function' || filter(this.tiles[t]) === true)) {\n vals.push(this.tiles[t].debug[prop]);\n }\n }\n return vals;\n }\n\n // Sum of a debug property across tiles\n getDebugSum(prop, filter) {\n var sum = 0;\n for (var t in this.tiles) {\n if (this.tiles[t].debug[prop] != null && (typeof filter !== 'function' || filter(this.tiles[t]) === true)) {\n sum += this.tiles[t].debug[prop];\n }\n }\n return sum;\n }\n\n // Average of a debug property across tiles\n getDebugAverage(prop, filter) {\n return this.getDebugSum(prop, filter) / Object.keys(this.tiles).length;\n }\n\n}\n", @@ -548,6 +548,6 @@ "let fs = require('fs');\nlet pkg = JSON.parse(fs.readFileSync(__dirname + '/../../package.json', 'utf8'));\nlet version;\nexport default version = 'v' + pkg.version;\n", "/*jshint worker: true*/\n\n// WorkerBroker routes messages between web workers and the main thread, allowing for simpler\n// async code via promises. Example usage:\n//\n// In web worker, register self as a callable \"target\", and define a method:\n//\n// WorkerBroker.addTarget('self', self);\n//\n// self.square = function (x) {\n// return x * x;\n// };\n//\n// In main thread, invoke that method and receive the result (if any) as a promise.\n//\n// worker = new Worker(...);\n// WorkerBroker.addWorker(worker);\n//\n// WorkerBroker.postMessage(worker, 'self.square', 5).then(function(y) {\n// console.log(y);\n// });\n//\n// -> prints 25\n//\n// Async code:\n//\n// For synchronous code that must pass a return value to the main thread, the function can simply\n// return an immediate value (see example above). For cases where the worker method needs to run\n// asynchronous code, the function can return a promise, and the resolved or rejected value will\n// be sent back to the main thread when the promise is fulfilled.\n//\n// Error handling:\n//\n// If the worker method either throws an error, or returns a promise that is rejected, it will be\n// sent back to the main thread as a promise rejection. These two examples are equivalent:\n//\n// In worker, throwing an error:\n//\n// self.broken = function () {\n// throw new Error('error in worker!');\n// };\n//\n// In worker, returning a rejected promise:\n//\n// self.broken = function () {\n// return Promise.reject(new Error('error in worker!'));\n// };\n//\n// In main thread, both errors are received as a promise rejection:\n//\n// WorkerBroker.postMessage(worker, 'self.broken').then(\n// // Promise resolved\n// function() {\n// console.log('success!');\n// },\n// // Promise rejected\n// function(error) {\n// console.log('error!', error);\n// });\n//\n// -> prints 'error! error in worker'\n//\n// Calling from worker to main thread:\n//\n// The same style of calls can be made *from* a web worker, to the main thread. The API is the same\n// with the exception that the first argument, 'worker', is not needed for WorkerBroker.postMessage(),\n// since the main thread is the implicit target.\n//\n// In main thread, define a method and register it:\n//\n// var geometry = {\n// length: function(x, y) {\n// return Math.sqrt(x * x + y * y);\n// }\n// };\n//\n// WorkerBroker.addTarget('geometry', geometry);\n//\n// In worker thread):\n//\n// WorkerBroker.postMessage('geometry.length', 3, 4).then(function(d) {\n// console.log(d);\n// });\n//\n// -> prints 5\n//\n\nimport Thread from './thread';\nimport log from './log';\n\nvar WorkerBroker;\nexport default WorkerBroker = {};\n\n// Global list of all worker messages\n// Uniquely tracks every call made between main thread and a worker\nvar message_id = 0;\nvar messages = {};\n\n// Register an object to receive calls from other thread\nvar targets = {};\nWorkerBroker.addTarget = function (name, target) {\n targets[name] = target;\n};\n\n// Given a dot-notation-style method name, e.g. 'Object.object.method',\n// find the object to call the method on from the list of registered targets\nfunction findTarget (method) {\n var chain = [];\n if (typeof method === 'string') {\n chain = method.split('.');\n method = chain.pop();\n }\n\n var target = targets;\n\n for (let m=0; m < chain.length; m++) {\n if (target[chain[m]]) {\n target = target[chain[m]];\n }\n else {\n return [];\n }\n }\n\n return [method, target];\n}\n\n// Main thread:\n// - Send messages to workers, and optionally receive an async response as a promise\n// - Receive messages from workers, and optionally send an async response back as a promise\nfunction setupMainThread () {\n\n // Send a message to a worker, and optionally get an async response\n // Arguments:\n // - worker: one or more web worker instances to send the message to (single value or array)\n // - method: the method with this name, specified with dot-notation, will be invoked in the worker\n // - message: spread of arguments to call the method with\n // Returns:\n // - a promise that will be fulfilled if the worker method returns a value (could be immediately, or async)\n //\n WorkerBroker.postMessage = function (worker, method, ...message) {\n // If more than one worker specified, post to multiple\n if (Array.isArray(worker)) {\n return Promise.all(\n worker.map(w => WorkerBroker.postMessage(w, method, ...message))\n );\n }\n\n // Track state of this message\n var promise = new Promise((resolve, reject) => {\n messages[message_id] = { method, message, resolve, reject };\n });\n\n\n let payload, transferables = [];\n\n if (message && message.length === 1 && message[0] instanceof WorkerBroker.withTransferables) {\n transferables = message[0].transferables;\n message = message[0].value;\n }\n\n payload = {\n type: 'main_send', // mark message as method invocation from main thread\n message_id, // unique id for this message, for life of program\n method, // will dispatch to a function of this name within the worker\n message // message payload\n };\n\n payload = maybeEncode(payload, transferables);\n worker.postMessage(payload, transferables.map(t => t.object));\n freeTransferables(transferables);\n if (transferables.length > 0) {\n log('trace', `'${method}' transferred ${transferables.length} objects to worker thread`);\n }\n\n message_id++;\n return promise;\n };\n\n // Add a worker to communicate with - each worker must be registered from the main thread\n WorkerBroker.addWorker = function (worker) {\n if (!(worker instanceof Worker)) {\n throw Error(`Worker broker could not add non-Worker object`, worker);\n }\n\n worker.addEventListener('message', function WorkerBrokerMainThreadHandler(event) {\n let data = maybeDecode(event.data);\n let id = data.message_id;\n\n // Listen for messages coming back from the worker, and fulfill that message's promise\n if (data.type === 'worker_reply') {\n // Pass the result to the promise\n if (messages[id]) {\n if (data.error) {\n messages[id].reject(data.error);\n }\n else {\n messages[id].resolve(data.message);\n }\n delete messages[id];\n }\n }\n // Listen for messages initiating a call from the worker, dispatch them,\n // and send any return value back to the worker\n // Unique id for this message & return call to main thread\n else if (data.type === 'worker_send' && id != null) {\n // Call the requested method and save the return value\n var [method_name, target] = findTarget(data.method);\n if (!target) {\n throw Error(`Worker broker could not dispatch message type ${data.method} on target ${data.target} because no object with that name is registered on main thread`);\n }\n\n var method = (typeof target[method_name] === 'function') && target[method_name];\n if (!method) {\n throw Error(`Worker broker could not dispatch message type ${data.method} on target ${data.target} because object has no method with that name`);\n }\n\n var result, error;\n try {\n result = method.apply(target, data.message);\n }\n catch(e) {\n // Thrown errors will be passed back (in string form) to worker\n error = e;\n }\n\n // Send return value to worker\n let payload, transferables = [];\n\n // Async result\n if (result instanceof Promise) {\n result.then((value) => {\n if (value instanceof WorkerBroker.withTransferables) {\n transferables = value.transferables;\n value = value.value[0];\n }\n\n payload = {\n type: 'main_reply',\n message_id: id,\n message: value\n };\n payload = maybeEncode(payload, transferables);\n worker.postMessage(payload, transferables.map(t => t.object));\n freeTransferables(transferables);\n if (transferables.length > 0) {\n log('trace', `'${method_name}' transferred ${transferables.length} objects to worker thread`);\n }\n\n }, (error) => {\n worker.postMessage({\n type: 'main_reply',\n message_id: id,\n error: (error instanceof Error ? `${error.message}: ${error.stack}` : error)\n });\n });\n }\n // Immediate result\n else {\n if (result instanceof WorkerBroker.withTransferables) {\n transferables = result.transferables;\n result = result.value[0];\n }\n\n payload = {\n type: 'main_reply',\n message_id: id,\n message: result,\n error: (error instanceof Error ? `${error.message}: ${error.stack}` : error)\n };\n payload = maybeEncode(payload, transferables);\n worker.postMessage(payload, transferables.map(t => t.object));\n freeTransferables(transferables);\n if (transferables.length > 0) {\n log('trace', `'${method_name}' transferred ${transferables.length} objects to worker thread`);\n }\n }\n }\n });\n\n };\n\n // Expose for debugging\n WorkerBroker.getMessages = function () {\n return messages;\n };\n\n WorkerBroker.getMessageId = function () {\n return message_id;\n };\n\n}\n\n// Worker threads:\n// - Receive messages from main thread, and optionally send an async response back as a promise\n// - Send messages to main thread, and optionally receive an async response as a promise\nfunction setupWorkerThread () {\n\n // Send a message to the main thread, and optionally get an async response as a promise\n // Arguments:\n // - method: the method with this name, specified with dot-notation, will be invoked on the main thread\n // - message: array of arguments to call the method with\n // Returns:\n // - a promise that will be fulfilled if the main thread method returns a value (could be immediately, or async)\n //\n WorkerBroker.postMessage = function (method, ...message) {\n // Track state of this message\n var promise = new Promise((resolve, reject) => {\n messages[message_id] = { method, message, resolve, reject };\n });\n\n let payload, transferables = [];\n\n if (message && message.length === 1 && message[0] instanceof WorkerBroker.withTransferables) {\n transferables = message[0].transferables;\n message = message[0].value;\n }\n\n payload = {\n type: 'worker_send', // mark message as method invocation from worker\n message_id, // unique id for this message, for life of program\n method, // will dispatch to a method of this name on the main thread\n message // message payload\n };\n\n payload = maybeEncode(payload, transferables);\n self.postMessage(payload, transferables.map(t => t.object));\n freeTransferables(transferables);\n if (transferables.length > 0) {\n log('trace', `'${method}' transferred ${transferables.length} objects to main thread`);\n }\n\n message_id++;\n return promise;\n };\n\n self.addEventListener('message', function WorkerBrokerWorkerThreadHandler(event) {\n let data = maybeDecode(event.data);\n let id = data.message_id;\n\n // Listen for messages coming back from the main thread, and fulfill that message's promise\n if (data.type === 'main_reply') {\n // Pass the result to the promise\n if (messages[id]) {\n if (data.error) {\n messages[id].reject(data.error);\n }\n else {\n messages[id].resolve(data.message);\n }\n delete messages[id];\n }\n }\n // Receive messages from main thread, dispatch them, and send back a reply\n // Unique id for this message & return call to main thread\n else if (data.type === 'main_send' && id != null) {\n // Call the requested worker method and save the return value\n var [method_name, target] = findTarget(data.method);\n if (!target) {\n throw Error(`Worker broker could not dispatch message type ${data.method} on target ${data.target} because no object with that name is registered on main thread`);\n }\n\n var method = (typeof target[method_name] === 'function') && target[method_name];\n\n if (!method) {\n throw Error(`Worker broker could not dispatch message type ${data.method} because worker has no method with that name`);\n }\n\n var result, error;\n try {\n result = method.apply(target, data.message);\n }\n catch(e) {\n // Thrown errors will be passed back (in string form) to main thread\n error = e;\n }\n\n // Send return value to main thread\n let payload, transferables = [];\n\n // Async result\n if (result instanceof Promise) {\n result.then((value) => {\n if (value instanceof WorkerBroker.withTransferables) {\n transferables = value.transferables;\n value = value.value[0];\n }\n\n payload = {\n type: 'worker_reply',\n message_id: id,\n message: value\n };\n payload = maybeEncode(payload, transferables);\n self.postMessage(payload, transferables.map(t => t.object));\n freeTransferables(transferables);\n if (transferables.length > 0) {\n log('trace', `'${method_name}' transferred ${transferables.length} objects to main thread`);\n }\n }, (error) => {\n self.postMessage({\n type: 'worker_reply',\n message_id: id,\n error: (error instanceof Error ? `${error.message}: ${error.stack}` : error)\n });\n });\n }\n // Immediate result\n else {\n if (result instanceof WorkerBroker.withTransferables) {\n transferables = result.transferables;\n result = result.value[0];\n }\n\n payload = {\n type: 'worker_reply',\n message_id: id,\n message: result,\n error: (error instanceof Error ? `${error.message}: ${error.stack}` : error)\n };\n payload = maybeEncode(payload, transferables);\n self.postMessage(payload, transferables.map(t => t.object));\n freeTransferables(transferables);\n if (transferables.length > 0) {\n log('trace', `'${method_name}' transferred ${transferables.length} objects to main thread`);\n }\n }\n }\n });\n\n}\n\n// Special value wrapper, to indicate that we want to find and include transferable objects in the message\nWorkerBroker.withTransferables = function (...value) {\n if (!(this instanceof WorkerBroker.withTransferables)) {\n return new WorkerBroker.withTransferables(...value);\n }\n\n this.value = value;\n this.transferables = findTransferables(this.value);\n};\n\n// Build a list of transferable objects from a source object\n// Returns a list of info about each transferable:\n// - object: the actual transferable object\n// - parent: the parent object that the transferable is a property of (if any)\n// - property: the property name of the transferable on the parent object (if any)\n// TODO: add option in case you DON'T want to transfer objects\nfunction findTransferables(source, parent = null, property = null, list = []) {\n if (!source) {\n return list;\n }\n\n if (Array.isArray(source)) {\n // Check each array element\n source.forEach((x, i) => findTransferables(x, source, i, list));\n }\n else if (typeof source === 'object') {\n // Is the object a transferable array buffer?\n if (source instanceof ArrayBuffer) {\n list.push({ object: source, parent, property });\n }\n // Or looks like a typed array (has an array buffer property)?\n else if (source.buffer instanceof ArrayBuffer) {\n list.push({ object: source.buffer, parent, property });\n }\n // Otherwise check each property\n else {\n for (let prop in source) {\n findTransferables(source[prop], source, prop, list);\n }\n }\n }\n return list;\n}\n\n// Remove neutered transferables from parent objects, as they should no longer be accessed after transfer\nfunction freeTransferables(transferables) {\n if (!Array.isArray(transferables)) {\n return;\n }\n transferables.filter(t => t.parent && t.property).forEach(t => delete t.parent[t.property]);\n}\n\n// Message payload can be stringified for faster transfer, if it does not include transferable objects\nfunction maybeEncode (payload, transferables) {\n if (transferables.length === 0) {\n payload = JSON.stringify(payload);\n }\n return payload;\n}\n\n// Parse stringified message payload\nfunction maybeDecode (data) {\n return (typeof data === 'string' ? JSON.parse(data) : data);\n}\n\n// Setup this thread as appropriate\nif (Thread.is_main) {\n setupMainThread();\n}\n\nif (Thread.is_worker) {\n setupWorkerThread();\n}\n", "/*** Vector functions - vectors provided as [x, y] or [x, y, z] arrays ***/\n\nvar Vector;\nexport default Vector = {};\n\nVector.set = function (v) {\n var V = [];\n var lim = v.length;\n for (var i = 0; i < lim; i++) {\n V[i] = v[i];\n }\n return V;\n};\n\nVector.neg = function (v) {\n var V = [];\n var lim = v.length;\n for (var i = 0; i < lim; i++) {\n V[i] = -v[i];\n }\n return V;\n};\n\n// Addition of two vectors\nVector.add = function (v1, v2) {\n var v = [];\n var lim = Math.min(v1.length,v2.length);\n for (var i = 0; i < lim; i++) {\n v[i] = v1[i] + v2[i];\n }\n return v;\n};\n\n// Substraction of two vectors\nVector.sub = function (v1, v2) {\n var v = [];\n var lim = Math.min(v1.length,v2.length);\n\n for (var i = 0; i < lim; i++) {\n v[i] = v1[i] - v2[i];\n }\n return v;\n};\n\nVector.signed_area = function (v1, v2, v3) {\n return (v2[0]-v1[0])*(v3[1]-v1[1]) - (v3[0]-v1[0])*(v2[1]-v1[1]);\n};\n\n// Multiplication of two vectors, or a vector and a scalar\nVector.mult = function (v1, v2) {\n var v = [],\n len = v1.length,\n i;\n\n if (typeof v2 === 'number') {\n // Mulitply by scalar\n for (i = 0; i < len; i++) {\n v[i] = v1[i] * v2;\n }\n }\n else {\n // Multiply two vectors\n len = Math.min(v1.length,v2.length);\n for (i = 0; i < len; i++) {\n v[i] = v1[i] * v2[i];\n }\n }\n return v;\n};\n\n// Division of two vectors\nVector.div = function (v1, v2) {\n var v = [],\n i;\n if(typeof v2 === 'number'){\n // Divide by scalar\n for (i = 0; i < v1.length; i++){\n v[i] = v1[i] / v2;\n }\n } else {\n // Divide to vectors\n var len = Math.min(v1.length,v2.length);\n for (i = 0; i < len; i++) {\n v[i] = v1[i] / v2[i];\n }\n }\n return v;\n};\n\n// Get 2D perpendicular\nVector.perp = function (v1, v2) {\n return [\n v2[1] - v1[1],\n v1[0] - v2[0]\n ];\n};\n\n// Get 2D vector rotated\nVector.rot = function (v, a) {\n var c = Math.cos(a);\n var s = Math.sin(a);\n return [\n v[0] * c - v[1] * s,\n v[0] * s + v[1] * c\n ];\n};\n\n// Get 2D counter-clockwise angle\n// Angles in quadrant I and II are mapped to [0, PI)\n// Angles in quadrant III and IV are mapped to [-PI, 0]\nVector.angle = function ([x, y]) {\n return Math.atan2(y,x);\n};\n\n// Get angle between two vectors\nVector.angleBetween = function(A, B){\n var delta = Vector.dot(\n Vector.normalize(A),\n Vector.normalize(B)\n );\n if (delta > 1) {delta = 1;} // protect against floating point error\n return Math.acos(delta);\n};\n\n// Compare two points\nVector.isEqual = function (v1, v2) {\n var len = v1.length;\n for (var i = 0; i < len; i++) {\n if (v1[i] !== v2[i]){\n return false;\n }\n }\n return true;\n};\n\n// Vector length squared\nVector.lengthSq = function (v) {\n if (v.length === 2) {\n return (v[0]*v[0] + v[1]*v[1]);\n }\n else if (v.length >= 3) {\n return (v[0]*v[0] + v[1]*v[1] + v[2]*v[2]);\n }\n return 0;\n};\n\n// Vector length\nVector.length = function (v) {\n return Math.sqrt(Vector.lengthSq(v));\n};\n\n// Normalize a vector\nVector.normalize = function (v) {\n var d;\n if (v.length === 2) {\n d = v[0]*v[0] + v[1]*v[1];\n\n if (d === 1) {\n return v;\n }\n\n d = Math.sqrt(d);\n\n if (d !== 0) {\n return [v[0] / d, v[1] / d];\n }\n return [0, 0];\n } else if (v.length >= 3) {\n d = v[0]*v[0] + v[1]*v[1] + v[2]*v[2];\n\n if (d === 1) {\n return v;\n }\n\n d = Math.sqrt(d);\n\n if (d !== 0) {\n return [v[0] / d, v[1] / d, v[2] / d];\n }\n }\n return [0, 0, 0];\n};\n\n// Cross product of two vectors\nVector.cross = function (v1, v2) {\n if (v1.length === 2){\n return v1[0] * v2[1] - v1[1] * v2[0];\n }\n else if (v1.length === 3){\n return [\n (v1[1] * v2[2]) - (v1[2] * v2[1]),\n (v1[2] * v2[0]) - (v1[0] * v2[2]),\n (v1[0] * v2[1]) - (v1[1] * v2[0])\n ];\n }\n};\n\n// Dot product of two vectors\nVector.dot = function (v1, v2) {\n var n = 0;\n var lim = Math.min(v1.length, v2.length);\n for (var i = 0; i < lim; i++) {\n n += v1[i] * v2[i];\n }\n return n;\n};\n", - "import Geo from './geo';\nimport Tile from './tile';\nimport Camera from './camera';\nimport Utils from './utils/utils';\nimport subscribeMixin from './utils/subscribe';\nimport log from './utils/log';\n\nexport const VIEW_PAN_SNAP_TIME = 0.5;\n\nexport default class View {\n\n constructor (scene, options) {\n subscribeMixin(this);\n\n this.scene = scene;\n this.createMatrices();\n\n this.zoom = null;\n this.center = null;\n this.bounds = null;\n this.meters_per_pixel = null;\n\n this.panning = false;\n this.panning_stop_at = 0;\n this.pan_snap_timer = 0;\n this.zooming = false;\n this.zoom_direction = 0;\n\n // Size of viewport in CSS pixels, device pixels, and mercator meters\n this.size = {\n css: {},\n device: {},\n meters: {}\n };\n this.aspect = null;\n\n this.buffer = 0;\n this.continuous_zoom = (typeof options.continuousZoom === 'boolean') ? options.continuousZoom : true;\n this.wrap = (options.wrapView === false) ? false : true;\n this.tile_simplification_level = 0; // level-of-detail downsampling to apply to tile loading\n this.preserve_tiles_within_zoom = 1;\n\n this.reset();\n }\n\n // Reset state before scene config is updated\n reset () {\n this.createCamera();\n }\n\n // Create camera\n createCamera () {\n let active_camera = this.getActiveCamera();\n if (active_camera) {\n this.camera = Camera.create(active_camera, this, this.scene.config.cameras[active_camera]);\n this.camera.updateView();\n }\n }\n\n // Get active camera - for public API\n getActiveCamera () {\n if (this.scene.config && this.scene.config.cameras) {\n for (let name in this.scene.config.cameras) {\n if (this.scene.config.cameras[name].active) {\n return name;\n }\n }\n\n // If no camera set as active, use first one\n let keys = Object.keys(this.scene.config.cameras);\n return keys.length && keys[0];\n }\n }\n\n // Set active camera and recompile - for public API\n setActiveCamera (name) {\n let prev = this.getActiveCamera();\n if (this.scene.config.cameras[name]) {\n this.scene.config.cameras[name].active = true;\n\n // Clear previously active camera\n if (prev && prev !== name && this.scene.config.cameras[prev]) {\n delete this.scene.config.cameras[prev].active;\n }\n }\n\n this.scene.updateConfig({ rebuild: false });\n return this.getActiveCamera();\n }\n\n // Update method called once per frame\n update () {\n this.camera.update();\n this.pan_snap_timer = ((+new Date()) - this.panning_stop_at) / 1000;\n }\n\n // Set logical pixel size of viewport\n setViewportSize (width, height) {\n this.size.css = { width, height };\n this.size.device = {\n width: Math.round(this.size.css.width * Utils.device_pixel_ratio),\n height: Math.round(this.size.css.height * Utils.device_pixel_ratio)\n };\n this.aspect = this.size.css.width / this.size.css.height;\n this.updateBounds();\n }\n\n // Set the map view, can be passed an object with lat/lng and/or zoom\n setView ({ lng, lat, zoom } = {}) {\n var changed = false;\n\n // Set center\n if (typeof lng === 'number' && typeof lat === 'number') {\n if (!this.center || lng !== this.center.lng || lat !== this.center.lat) {\n changed = true;\n this.center = { lng, lat };\n }\n }\n\n // Set zoom\n if (typeof zoom === 'number' && zoom !== this.zoom) {\n changed = true;\n this.setZoom(zoom);\n }\n\n if (changed) {\n this.updateBounds();\n }\n return changed;\n }\n\n setZoom (zoom) {\n if (this.zooming) {\n this.zooming = false;\n }\n else {\n this.last_zoom = this.zoom;\n }\n\n let last_tile_zoom = this.tile_zoom;\n let tile_zoom = this.tileZoom(zoom);\n if (!this.continuous_zoom) {\n zoom = tile_zoom;\n }\n\n if (tile_zoom !== last_tile_zoom) {\n this.zoom_direction = tile_zoom > last_tile_zoom ? 1 : -1;\n }\n\n this.last_zoom = this.zoom;\n this.zoom = zoom;\n this.tile_zoom = tile_zoom;\n\n this.updateBounds();\n this.scene.requestRedraw();\n }\n\n startZoom () {\n this.last_zoom = this.zoom;\n this.zooming = true;\n }\n\n // Choose the base zoom level to use for a given fractional zoom\n baseZoom (zoom) {\n return Math.floor(zoom);\n }\n\n // For a given view zoom, what tile zoom should be loaded?\n tileZoom (view_zoom) {\n return Math.max(this.baseZoom(view_zoom) - this.tile_simplification_level, 0);\n }\n\n // For a given tile zoom, what style zoom should be used?\n styleZoom (tile_zoom) {\n return this.baseZoom(tile_zoom) + this.tile_simplification_level;\n }\n\n setPanning (panning) {\n this.panning = panning;\n if (!this.panning) {\n this.panning_stop_at = (+new Date());\n }\n }\n\n ready () {\n // TODO: better concept of \"readiness\" state?\n if (typeof this.size.css.width !== 'number' ||\n typeof this.size.css.height !== 'number' ||\n this.center == null ||\n typeof this.zoom !== 'number') {\n return false;\n }\n return true;\n }\n\n // Calculate viewport bounds based on current center and zoom\n updateBounds () {\n if (!this.ready()) {\n return;\n }\n\n this.meters_per_pixel = Geo.metersPerPixel(this.zoom);\n\n // Size of the half-viewport in meters at current zoom\n this.size.meters = {\n x: this.size.css.width * this.meters_per_pixel,\n y: this.size.css.height * this.meters_per_pixel\n };\n\n // Center of viewport in meters, and tile\n let [x, y] = Geo.latLngToMeters([this.center.lng, this.center.lat]);\n this.center.meters = { x, y };\n\n this.center.tile = Geo.tileForMeters([this.center.meters.x, this.center.meters.y], this.tile_zoom);\n\n // Bounds in meters\n this.bounds = {\n sw: {\n x: this.center.meters.x - this.size.meters.x / 2,\n y: this.center.meters.y - this.size.meters.y / 2\n },\n ne: {\n x: this.center.meters.x + this.size.meters.x / 2,\n y: this.center.meters.y + this.size.meters.y / 2\n }\n };\n\n this.scene.tile_manager.updateTilesForView();\n\n this.trigger('move');\n this.scene.requestRedraw(); // TODO automate via move event?\n }\n\n findVisibleTileCoordinates () {\n if (!this.bounds) {\n return [];\n }\n\n let z = this.tile_zoom;\n let sw = Geo.tileForMeters([this.bounds.sw.x, this.bounds.sw.y], z);\n let ne = Geo.tileForMeters([this.bounds.ne.x, this.bounds.ne.y], z);\n\n let range = [\n sw.x - this.buffer, ne.x + this.buffer, // x\n ne.y - this.buffer, sw.y + this.buffer // y\n ];\n\n if (this.wrap === false) { // prevent tiles from wrapping across antimeridian\n let tmax = (1 << z) - 1; // max xy tile number for this zoom\n range = range.map(v => Math.min(Math.max(0, v), tmax));\n }\n\n let coords = [];\n for (let x = range[0]; x <= range[1]; x++) {\n for (let y = range[2]; y <= range[3]; y++) {\n coords.push(Tile.coord({ x, y, z }));\n }\n }\n return coords;\n }\n\n // Remove tiles too far outside of view\n pruneTilesForView () {\n // TODO: will this function ever be called when view isn't ready?\n if (!this.ready()) {\n return;\n }\n\n // Remove tiles that are a specified # of tiles outside of the viewport border\n let border_tiles = [\n Math.ceil((Math.floor(this.size.css.width / Geo.tile_size) + 2) / 2),\n Math.ceil((Math.floor(this.size.css.height / Geo.tile_size) + 2) / 2)\n ];\n\n this.scene.tile_manager.removeTiles(tile => {\n // Ignore visible tiles\n if (tile.visible || tile.proxy_for) {\n return false;\n }\n\n // Remove tiles outside given zoom that are still loading\n if (tile.loading && tile.style_zoom !== this.tile_zoom) {\n return true;\n }\n\n // Discard if too far from current zoom\n let zdiff = Math.abs(tile.style_zoom - this.tile_zoom);\n if (zdiff > this.preserve_tiles_within_zoom) {\n return true;\n }\n\n // Handle tiles at different zooms\n let coords = Tile.coordinateAtZoom(tile.coords, this.tile_zoom);\n\n // Discard tiles outside an area surrounding the viewport\n if (Math.abs(coords.x - this.center.tile.x) - border_tiles[0] > this.buffer) {\n log('trace', `View: remove tile ${tile.key} (as ${coords.x}/${coords.y}/${this.tile_zoom}) for being too far out of visible area ***`);\n return true;\n }\n else if (Math.abs(coords.y - this.center.tile.y) - border_tiles[1] > this.buffer) {\n log('trace', `View: remove tile ${tile.key} (as ${coords.x}/${coords.y}/${this.tile_zoom}) for being too far out of visible area ***`);\n return true;\n }\n return false;\n });\n }\n\n // Allocate model-view matrices\n // 64-bit versions are for CPU calcuations\n // 32-bit versions are downsampled and sent to GPU\n createMatrices () {\n this.matrices = {};\n this.matrices.model = new Float64Array(16);\n this.matrices.model32 = new Float32Array(16);\n this.matrices.model_view = new Float64Array(16);\n this.matrices.model_view32 = new Float32Array(16);\n this.matrices.normal = new Float64Array(9);\n this.matrices.normal32 = new Float32Array(9);\n this.matrices.inverse_normal32 = new Float32Array(9);\n }\n\n // Calculate and set model/view and normal matrices for a tile\n setupTile (tile, program) {\n // Tile-specific state\n // TODO: calc these once per tile (currently being needlessly re-calculated per-tile-per-style)\n tile.setupProgram(this.matrices, program);\n\n // Model-view and normal matrices\n this.camera.setupMatrices(this.matrices, program);\n }\n\n // Set general uniforms that must be updated once per program\n setupProgram (program) {\n program.uniform('2fv', 'u_resolution', [this.size.device.width, this.size.device.height]);\n program.uniform('3fv', 'u_map_position', [this.center.meters.x, this.center.meters.y, this.zoom]);\n program.uniform('1f', 'u_meters_per_pixel', this.meters_per_pixel);\n program.uniform('1f', 'u_device_pixel_ratio', Utils.device_pixel_ratio);\n program.uniform('1f', 'u_view_pan_snap_timer', this.pan_snap_timer);\n program.uniform('1i', 'u_view_panning', this.panning);\n\n this.camera.setupProgram(program);\n }\n\n // View requires some animation, such as after panning stops\n isAnimating () {\n return (this.pan_snap_timer <= VIEW_PAN_SNAP_TIME);\n }\n\n}\n" + "import Geo from './geo';\nimport Tile from './tile';\nimport Camera from './camera';\nimport Utils from './utils/utils';\nimport subscribeMixin from './utils/subscribe';\nimport log from './utils/log';\n\nexport const VIEW_PAN_SNAP_TIME = 0.5;\n\nexport default class View {\n\n constructor (scene, options) {\n subscribeMixin(this);\n\n this.scene = scene;\n this.createMatrices();\n\n this.zoom = null;\n this.center = null;\n this.bounds = null;\n this.meters_per_pixel = null;\n\n this.panning = false;\n this.panning_stop_at = 0;\n this.pan_snap_timer = 0;\n this.zooming = false;\n this.zoom_direction = 0;\n\n // Size of viewport in CSS pixels, device pixels, and mercator meters\n this.size = {\n css: {},\n device: {},\n meters: {}\n };\n this.aspect = null;\n\n this.buffer = 0;\n this.continuous_zoom = (typeof options.continuousZoom === 'boolean') ? options.continuousZoom : true;\n this.wrap = (options.wrapView === false) ? false : true;\n this.tile_simplification_level = 0; // level-of-detail downsampling to apply to tile loading\n this.preserve_tiles_within_zoom = 1;\n\n this.reset();\n }\n\n // Reset state before scene config is updated\n reset () {\n this.createCamera();\n }\n\n // Create camera\n createCamera () {\n let active_camera = this.getActiveCamera();\n if (active_camera) {\n this.camera = Camera.create(active_camera, this, this.scene.config.cameras[active_camera]);\n this.camera.updateView();\n }\n }\n\n // Get active camera - for public API\n getActiveCamera () {\n if (this.scene.config && this.scene.config.cameras) {\n for (let name in this.scene.config.cameras) {\n if (this.scene.config.cameras[name].active) {\n return name;\n }\n }\n\n // If no camera set as active, use first one\n let keys = Object.keys(this.scene.config.cameras);\n return keys.length && keys[0];\n }\n }\n\n // Set active camera and recompile - for public API\n setActiveCamera (name) {\n let prev = this.getActiveCamera();\n if (this.scene.config.cameras[name]) {\n this.scene.config.cameras[name].active = true;\n\n // Clear previously active camera\n if (prev && prev !== name && this.scene.config.cameras[prev]) {\n delete this.scene.config.cameras[prev].active;\n }\n }\n\n this.scene.updateConfig({ rebuild: false, normalize: false });\n return this.getActiveCamera();\n }\n\n // Update method called once per frame\n update () {\n this.camera.update();\n this.pan_snap_timer = ((+new Date()) - this.panning_stop_at) / 1000;\n }\n\n // Set logical pixel size of viewport\n setViewportSize (width, height) {\n this.size.css = { width, height };\n this.size.device = {\n width: Math.round(this.size.css.width * Utils.device_pixel_ratio),\n height: Math.round(this.size.css.height * Utils.device_pixel_ratio)\n };\n this.aspect = this.size.css.width / this.size.css.height;\n this.updateBounds();\n }\n\n // Set the map view, can be passed an object with lat/lng and/or zoom\n setView ({ lng, lat, zoom } = {}) {\n var changed = false;\n\n // Set center\n if (typeof lng === 'number' && typeof lat === 'number') {\n if (!this.center || lng !== this.center.lng || lat !== this.center.lat) {\n changed = true;\n this.center = { lng, lat };\n }\n }\n\n // Set zoom\n if (typeof zoom === 'number' && zoom !== this.zoom) {\n changed = true;\n this.setZoom(zoom);\n }\n\n if (changed) {\n this.updateBounds();\n }\n return changed;\n }\n\n setZoom (zoom) {\n if (this.zooming) {\n this.zooming = false;\n }\n else {\n this.last_zoom = this.zoom;\n }\n\n let last_tile_zoom = this.tile_zoom;\n let tile_zoom = this.tileZoom(zoom);\n if (!this.continuous_zoom) {\n zoom = tile_zoom;\n }\n\n if (tile_zoom !== last_tile_zoom) {\n this.zoom_direction = tile_zoom > last_tile_zoom ? 1 : -1;\n }\n\n this.last_zoom = this.zoom;\n this.zoom = zoom;\n this.tile_zoom = tile_zoom;\n\n this.updateBounds();\n this.scene.requestRedraw();\n }\n\n startZoom () {\n this.last_zoom = this.zoom;\n this.zooming = true;\n }\n\n // Choose the base zoom level to use for a given fractional zoom\n baseZoom (zoom) {\n return Math.floor(zoom);\n }\n\n // For a given view zoom, what tile zoom should be loaded?\n tileZoom (view_zoom) {\n return Math.max(this.baseZoom(view_zoom) - this.tile_simplification_level, 0);\n }\n\n // For a given tile zoom, what style zoom should be used?\n styleZoom (tile_zoom) {\n return this.baseZoom(tile_zoom) + this.tile_simplification_level;\n }\n\n setPanning (panning) {\n this.panning = panning;\n if (!this.panning) {\n this.panning_stop_at = (+new Date());\n }\n }\n\n ready () {\n // TODO: better concept of \"readiness\" state?\n if (typeof this.size.css.width !== 'number' ||\n typeof this.size.css.height !== 'number' ||\n this.center == null ||\n typeof this.zoom !== 'number') {\n return false;\n }\n return true;\n }\n\n // Calculate viewport bounds based on current center and zoom\n updateBounds () {\n if (!this.ready()) {\n return;\n }\n\n this.meters_per_pixel = Geo.metersPerPixel(this.zoom);\n\n // Size of the half-viewport in meters at current zoom\n this.size.meters = {\n x: this.size.css.width * this.meters_per_pixel,\n y: this.size.css.height * this.meters_per_pixel\n };\n\n // Center of viewport in meters, and tile\n let [x, y] = Geo.latLngToMeters([this.center.lng, this.center.lat]);\n this.center.meters = { x, y };\n\n this.center.tile = Geo.tileForMeters([this.center.meters.x, this.center.meters.y], this.tile_zoom);\n\n // Bounds in meters\n this.bounds = {\n sw: {\n x: this.center.meters.x - this.size.meters.x / 2,\n y: this.center.meters.y - this.size.meters.y / 2\n },\n ne: {\n x: this.center.meters.x + this.size.meters.x / 2,\n y: this.center.meters.y + this.size.meters.y / 2\n }\n };\n\n this.scene.tile_manager.updateTilesForView();\n\n this.trigger('move');\n this.scene.requestRedraw(); // TODO automate via move event?\n }\n\n findVisibleTileCoordinates () {\n if (!this.bounds) {\n return [];\n }\n\n let z = this.tile_zoom;\n let sw = Geo.tileForMeters([this.bounds.sw.x, this.bounds.sw.y], z);\n let ne = Geo.tileForMeters([this.bounds.ne.x, this.bounds.ne.y], z);\n\n let range = [\n sw.x - this.buffer, ne.x + this.buffer, // x\n ne.y - this.buffer, sw.y + this.buffer // y\n ];\n\n if (this.wrap === false) { // prevent tiles from wrapping across antimeridian\n let tmax = (1 << z) - 1; // max xy tile number for this zoom\n range = range.map(v => Math.min(Math.max(0, v), tmax));\n }\n\n let coords = [];\n for (let x = range[0]; x <= range[1]; x++) {\n for (let y = range[2]; y <= range[3]; y++) {\n coords.push(Tile.coord({ x, y, z }));\n }\n }\n return coords;\n }\n\n // Remove tiles too far outside of view\n pruneTilesForView () {\n // TODO: will this function ever be called when view isn't ready?\n if (!this.ready()) {\n return;\n }\n\n // Remove tiles that are a specified # of tiles outside of the viewport border\n let border_tiles = [\n Math.ceil((Math.floor(this.size.css.width / Geo.tile_size) + 2) / 2),\n Math.ceil((Math.floor(this.size.css.height / Geo.tile_size) + 2) / 2)\n ];\n\n this.scene.tile_manager.removeTiles(tile => {\n // Ignore visible tiles\n if (tile.visible || tile.proxy_for) {\n return false;\n }\n\n // Remove tiles outside given zoom that are still loading\n if (tile.loading && tile.style_zoom !== this.tile_zoom) {\n return true;\n }\n\n // Discard if too far from current zoom\n let zdiff = Math.abs(tile.style_zoom - this.tile_zoom);\n if (zdiff > this.preserve_tiles_within_zoom) {\n return true;\n }\n\n // Handle tiles at different zooms\n let coords = Tile.coordinateAtZoom(tile.coords, this.tile_zoom);\n\n // Discard tiles outside an area surrounding the viewport\n if (Math.abs(coords.x - this.center.tile.x) - border_tiles[0] > this.buffer) {\n log('trace', `View: remove tile ${tile.key} (as ${coords.x}/${coords.y}/${this.tile_zoom}) for being too far out of visible area ***`);\n return true;\n }\n else if (Math.abs(coords.y - this.center.tile.y) - border_tiles[1] > this.buffer) {\n log('trace', `View: remove tile ${tile.key} (as ${coords.x}/${coords.y}/${this.tile_zoom}) for being too far out of visible area ***`);\n return true;\n }\n return false;\n });\n }\n\n // Allocate model-view matrices\n // 64-bit versions are for CPU calcuations\n // 32-bit versions are downsampled and sent to GPU\n createMatrices () {\n this.matrices = {};\n this.matrices.model = new Float64Array(16);\n this.matrices.model32 = new Float32Array(16);\n this.matrices.model_view = new Float64Array(16);\n this.matrices.model_view32 = new Float32Array(16);\n this.matrices.normal = new Float64Array(9);\n this.matrices.normal32 = new Float32Array(9);\n this.matrices.inverse_normal32 = new Float32Array(9);\n }\n\n // Calculate and set model/view and normal matrices for a tile\n setupTile (tile, program) {\n // Tile-specific state\n // TODO: calc these once per tile (currently being needlessly re-calculated per-tile-per-style)\n tile.setupProgram(this.matrices, program);\n\n // Model-view and normal matrices\n this.camera.setupMatrices(this.matrices, program);\n }\n\n // Set general uniforms that must be updated once per program\n setupProgram (program) {\n program.uniform('2fv', 'u_resolution', [this.size.device.width, this.size.device.height]);\n program.uniform('3fv', 'u_map_position', [this.center.meters.x, this.center.meters.y, this.zoom]);\n program.uniform('1f', 'u_meters_per_pixel', this.meters_per_pixel);\n program.uniform('1f', 'u_device_pixel_ratio', Utils.device_pixel_ratio);\n program.uniform('1f', 'u_view_pan_snap_timer', this.pan_snap_timer);\n program.uniform('1i', 'u_view_panning', this.panning);\n\n this.camera.setupProgram(program);\n }\n\n // View requires some animation, such as after panning stops\n isAnimating () {\n return (this.pan_snap_timer <= VIEW_PAN_SNAP_TIME);\n }\n\n}\n" ] } \ No newline at end of file diff --git a/dist/tangram.min.js b/dist/tangram.min.js index 201672f5e..6a865e5c6 100644 --- a/dist/tangram.min.js +++ b/dist/tangram.min.js @@ -7,13 +7,13 @@ var at={YAML:function(e,t,r){var n,i,o;null!==e.version&&d(e,"duplication of %YA function r(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1}t.exports=r},{}],174:[function(e,t){"use strict";var r=30,n=12;t.exports=function(e,t){var i,o,a,s,u,l,c,f,h,d,p,_,m,g,v,y,b,x,w,k,A,T,E,S,R;i=e.state,o=e.next_in,S=e.input,a=o+(e.avail_in-5),s=e.next_out,R=e.output,u=s-(t-e.avail_out),l=s+(e.avail_out-257),c=i.dmax,f=i.wsize,h=i.whave,d=i.wnext,p=i.window,_=i.hold,m=i.bits,g=i.lencode,v=i.distcode,y=(1<m&&(_+=S[o++]<>>24,_>>>=w,m-=w,w=x>>>16&255,0===w)R[s++]=65535&x;else{if(!(16&w)){if(0===(64&w)){x=g[(65535&x)+(_&(1<m&&(_+=S[o++]<>>=w,m-=w),15>m&&(_+=S[o++]<>>24,_>>>=w,m-=w,w=x>>>16&255,!(16&w)){if(0===(64&w)){x=v[(65535&x)+(_&(1<m&&(_+=S[o++]<m&&(_+=S[o++]<c){e.msg="invalid distance too far back",i.mode=r;break e}if(_>>>=w,m-=w,w=s-u,A>w){if(w=A-w,w>h&&i.sane){e.msg="invalid distance too far back",i.mode=r;break e}if(T=0,E=p,0===d){if(T+=f-w,k>w){k-=w;do R[s++]=p[T++];while(--w);T=s-A,E=R}}else if(w>d){if(T+=f+d-w,w-=d,k>w){k-=w;do R[s++]=p[T++];while(--w);if(T=0,k>d){w=d,k-=w;do R[s++]=p[T++];while(--w);T=s-A,E=R}}}else if(T+=d-w,k>w){k-=w;do R[s++]=p[T++];while(--w);T=s-A,E=R}for(;k>2;)R[s++]=E[T++],R[s++]=E[T++],R[s++]=E[T++],k-=3;k&&(R[s++]=E[T++],k>1&&(R[s++]=E[T++]))}else{T=s-A;do R[s++]=R[T++],R[s++]=R[T++],R[s++]=R[T++],k-=3;while(k>2);k&&(R[s++]=R[T++],k>1&&(R[s++]=R[T++]))}break}}break}}while(a>o&&l>s);k=m>>3,o-=k,m-=k<<3,_&=(1<o?5+(a-o):5-(o-a),e.avail_out=l>s?257+(l-s):257-(s-l),i.hold=_,i.bits=m}},{}],175:[function(e,t,r){"use strict";function n(e){return(e>>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24)}function i(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new v.Buf16(320),this.work=new v.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function o(e){var t;return e&&e.state?(t=e.state,e.total_in=e.total_out=t.total=0,e.msg="",t.wrap&&(e.adler=1&t.wrap),t.mode=C,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new v.Buf32(_t),t.distcode=t.distdyn=new v.Buf32(mt),t.sane=1,t.back=-1,M):z}function a(e){var t;return e&&e.state?(t=e.state,t.wsize=0,t.whave=0,t.wnext=0,o(e)):z}function s(e,t){var r,n;return e&&e.state?(n=e.state,0>t?(r=0,t=-t):(r=(t>>4)+1,48>t&&(t&=15)),t&&(8>t||t>15)?z:(null!==n.window&&n.wbits!==t&&(n.window=null),n.wrap=r,n.wbits=t,a(e))):z}function u(e,t){var r,n;return e?(n=new i,e.state=n,n.window=null,r=s(e,t),r!==M&&(e.state=null),r):z}function l(e){return u(e,vt)}function c(e){if(yt){var t;for(m=new v.Buf32(512),g=new v.Buf32(32),t=0;144>t;)e.lens[t++]=8;for(;256>t;)e.lens[t++]=9;for(;280>t;)e.lens[t++]=7;for(;288>t;)e.lens[t++]=8;for(w(A,e.lens,0,288,m,0,e.work,{bits:9}),t=0;32>t;)e.lens[t++]=5;w(T,e.lens,0,32,g,0,e.work,{bits:5}),yt=!1}e.lencode=m,e.lenbits=9,e.distcode=g,e.distbits=5}function f(e,t,r,n){var i,o=e.state;return null===o.window&&(o.wsize=1<=o.wsize?(v.arraySet(o.window,t,r-o.wsize,o.wsize,0),o.wnext=0,o.whave=o.wsize):(i=o.wsize-o.wnext,i>n&&(i=n),v.arraySet(o.window,t,r-n,i,o.wnext),n-=i,n?(v.arraySet(o.window,t,r-n,n,0),o.wnext=n,o.whave=o.wsize):(o.wnext+=i,o.wnext===o.wsize&&(o.wnext=0),o.whaved;){if(0===u)break e;u--,h+=i[a++]<>>8&255,r.check=b(r.check,St,2,0),h=0,d=0,r.mode=F;break}if(r.flags=0,r.head&&(r.head.done=!1),!(1&r.wrap)||(((255&h)<<8)+(h>>8))%31){e.msg="incorrect header check",r.mode=ht;break}if((15&h)!==I){e.msg="unknown compression method",r.mode=ht;break}if(h>>>=4,d-=4,wt=(15&h)+8,0===r.wbits)r.wbits=wt;else if(wt>r.wbits){e.msg="invalid window size",r.mode=ht;break}r.dmax=1<d;){if(0===u)break e;u--,h+=i[a++]<>8&1),512&r.flags&&(St[0]=255&h,St[1]=h>>>8&255,r.check=b(r.check,St,2,0)),h=0,d=0,r.mode=U;case U:for(;32>d;){if(0===u)break e;u--,h+=i[a++]<>>8&255,St[2]=h>>>16&255,St[3]=h>>>24&255,r.check=b(r.check,St,4,0)),h=0,d=0,r.mode=D;case D:for(;16>d;){if(0===u)break e;u--,h+=i[a++]<>8),512&r.flags&&(St[0]=255&h,St[1]=h>>>8&255,r.check=b(r.check,St,2,0)),h=0,d=0,r.mode=B;case B:if(1024&r.flags){for(;16>d;){if(0===u)break e;u--,h+=i[a++]<>>8&255,r.check=b(r.check,St,2,0)),h=0,d=0}else r.head&&(r.head.extra=null);r.mode=G;case G:if(1024&r.flags&&(m=r.length,m>u&&(m=u),m&&(r.head&&(wt=r.head.extra_len-r.length,r.head.extra||(r.head.extra=new Array(r.head.extra_len)),v.arraySet(r.head.extra,i,a,m,wt)),512&r.flags&&(r.check=b(r.check,i,m,a)),u-=m,a+=m,r.length-=m),r.length))break e;r.length=0,r.mode=V;case V:if(2048&r.flags){if(0===u)break e;m=0;do wt=i[a+m++],r.head&&wt&&r.length<65536&&(r.head.name+=String.fromCharCode(wt));while(wt&&u>m);if(512&r.flags&&(r.check=b(r.check,i,m,a)),u-=m,a+=m,wt)break e}else r.head&&(r.head.name=null);r.length=0,r.mode=q;case q:if(4096&r.flags){if(0===u)break e;m=0;do wt=i[a+m++],r.head&&wt&&r.length<65536&&(r.head.comment+=String.fromCharCode(wt));while(wt&&u>m);if(512&r.flags&&(r.check=b(r.check,i,m,a)),u-=m,a+=m,wt)break e}else r.head&&(r.head.comment=null);r.mode=W;case W:if(512&r.flags){for(;16>d;){if(0===u)break e;u--,h+=i[a++]<>9&1,r.head.done=!0),e.adler=r.check=0,r.mode=X;break;case Z:for(;32>d;){if(0===u)break e;u--,h+=i[a++]<>>=7&d,d-=7&d,r.mode=lt;break}for(;3>d;){if(0===u)break e;u--,h+=i[a++]<>>=1,d-=1,3&h){case 0:r.mode=J;break;case 1:if(c(r),r.mode=rt,t===R){h>>>=2,d-=2;break e}break;case 2:r.mode=Q;break;case 3:e.msg="invalid block type",r.mode=ht}h>>>=2,d-=2;break;case J:for(h>>>=7&d,d-=7&d;32>d;){if(0===u)break e;u--,h+=i[a++]<>>16^65535)){e.msg="invalid stored block lengths",r.mode=ht;break}if(r.length=65535&h,h=0,d=0,r.mode=K,t===R)break e;case K:r.mode=$;case $:if(m=r.length){if(m>u&&(m=u),m>l&&(m=l),0===m)break e;v.arraySet(o,i,a,m,s),u-=m,a+=m,l-=m,s+=m,r.length-=m;break}r.mode=X;break;case Q:for(;14>d;){if(0===u)break e;u--,h+=i[a++]<>>=5,d-=5,r.ndist=(31&h)+1,h>>>=5,d-=5,r.ncode=(15&h)+4,h>>>=4,d-=4,r.nlen>286||r.ndist>30){e.msg="too many length or distance symbols",r.mode=ht;break}r.have=0,r.mode=et;case et:for(;r.haved;){if(0===u)break e;u--,h+=i[a++]<>>=3,d-=3}for(;r.have<19;)r.lens[Rt[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,At={bits:r.lenbits},kt=w(k,r.lens,0,19,r.lencode,0,r.work,At),r.lenbits=At.bits,kt){e.msg="invalid code lengths set",r.mode=ht;break}r.have=0,r.mode=tt;case tt:for(;r.have>>24,gt=Et>>>16&255,vt=65535&Et,!(d>=mt);){if(0===u)break e;u--,h+=i[a++]<vt)h>>>=mt,d-=mt,r.lens[r.have++]=vt;else{if(16===vt){for(Tt=mt+2;Tt>d;){if(0===u)break e;u--,h+=i[a++]<>>=mt,d-=mt,0===r.have){e.msg="invalid bit length repeat",r.mode=ht;break}wt=r.lens[r.have-1],m=3+(3&h),h>>>=2,d-=2}else if(17===vt){for(Tt=mt+3;Tt>d;){if(0===u)break e;u--,h+=i[a++]<>>=mt,d-=mt,wt=0,m=3+(7&h),h>>>=3,d-=3}else{for(Tt=mt+7;Tt>d;){if(0===u)break e;u--,h+=i[a++]<>>=mt,d-=mt,wt=0,m=11+(127&h),h>>>=7,d-=7}if(r.have+m>r.nlen+r.ndist){e.msg="invalid bit length repeat",r.mode=ht;break}for(;m--;)r.lens[r.have++]=wt}}if(r.mode===ht)break;if(0===r.lens[256]){e.msg="invalid code -- missing end-of-block",r.mode=ht;break}if(r.lenbits=9,At={bits:r.lenbits},kt=w(A,r.lens,0,r.nlen,r.lencode,0,r.work,At),r.lenbits=At.bits,kt){e.msg="invalid literal/lengths set",r.mode=ht;break}if(r.distbits=6,r.distcode=r.distdyn,At={bits:r.distbits},kt=w(T,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,At),r.distbits=At.bits,kt){e.msg="invalid distances set",r.mode=ht;break}if(r.mode=rt,t===R)break e;case rt:r.mode=nt;case nt:if(u>=6&&l>=258){e.next_out=s,e.avail_out=l,e.next_in=a,e.avail_in=u,r.hold=h,r.bits=d,x(e,_),s=e.next_out,o=e.output,l=e.avail_out,a=e.next_in,i=e.input,u=e.avail_in,h=r.hold,d=r.bits,r.mode===X&&(r.back=-1);break}for(r.back=0;Et=r.lencode[h&(1<>>24,gt=Et>>>16&255,vt=65535&Et,!(d>=mt);){if(0===u)break e;u--,h+=i[a++]<>yt)],mt=Et>>>24,gt=Et>>>16&255,vt=65535&Et,!(d>=yt+mt);){if(0===u)break e;u--,h+=i[a++]<>>=yt,d-=yt,r.back+=yt}if(h>>>=mt,d-=mt,r.back+=mt,r.length=vt,0===gt){r.mode=ut;break}if(32>){r.back=-1,r.mode=X;break}if(64>){e.msg="invalid literal/length code",r.mode=ht;break}r.extra=15>,r.mode=it;case it:if(r.extra){for(Tt=r.extra;Tt>d;){if(0===u)break e;u--,h+=i[a++]<>>=r.extra,d-=r.extra,r.back+=r.extra}r.was=r.length,r.mode=ot;case ot:for(;Et=r.distcode[h&(1<>>24,gt=Et>>>16&255,vt=65535&Et,!(d>=mt);){if(0===u)break e;u--,h+=i[a++]<>yt)],mt=Et>>>24,gt=Et>>>16&255,vt=65535&Et,!(d>=yt+mt);){if(0===u)break e;u--,h+=i[a++]<>>=yt,d-=yt,r.back+=yt}if(h>>>=mt,d-=mt,r.back+=mt,64>){e.msg="invalid distance code",r.mode=ht;break}r.offset=vt,r.extra=15>,r.mode=at;case at:if(r.extra){for(Tt=r.extra;Tt>d;){if(0===u)break e;u--,h+=i[a++]<>>=r.extra,d-=r.extra,r.back+=r.extra}if(r.offset>r.dmax){e.msg="invalid distance too far back",r.mode=ht;break}r.mode=st;case st:if(0===l)break e;if(m=_-l,r.offset>m){if(m=r.offset-m,m>r.whave&&r.sane){e.msg="invalid distance too far back",r.mode=ht;break}m>r.wnext?(m-=r.wnext,g=r.wsize-m):g=r.wnext-m,m>r.length&&(m=r.length),_t=r.window}else _t=o,g=s-r.offset,m=r.length;m>l&&(m=l),l-=m,r.length-=m;do o[s++]=_t[g++];while(--m);0===r.length&&(r.mode=nt);break;case ut:if(0===l)break e;o[s++]=r.length,l--,r.mode=nt;break;case lt:if(r.wrap){for(;32>d;){if(0===u)break e;u--,h|=i[a++]<d;){if(0===u)break e;u--,h+=i[a++]<=M;M++)B[M]=0;for(O=0;p>O;O++)B[t[d+O]]++;for(L=R,z=n;z>=1&&0===B[z];z--);if(L>z&&(L=z),0===z)return _[m++]=20971520,_[m++]=20971520,v.bits=1,0;for(P=1;z>P&&0===B[P];P++);for(P>L&&(L=P),I=1,M=1;n>=M;M++)if(I<<=1,I-=B[M],0>I)return-1;if(I>0&&(e===a||1!==z))return-1;for(G[1]=0,M=1;n>M;M++)G[M+1]=G[M]+B[M];for(O=0;p>O;O++)0!==t[d+O]&&(g[G[t[d+O]]++]=O);if(e===a?(U=V=g,A=19):e===s?(U=l,D-=257,V=c,q-=257,A=256):(U=f,V=h,A=-1),F=0,O=0,M=P,k=m,N=L,j=0,x=-1,C=1<i||e===u&&C>o)return 1;for(var W=0;;){W++,T=M-j,g[O]A?(E=V[q+g[O]],S=U[D+g[O]]):(E=96,S=0),y=1<>j)+b]=T<<24|E<<16|S|0;while(0!==b);for(y=1<>=1;if(0!==y?(F&=y-1,F+=y):F=0,O++,0===--B[M]){if(M===z)break;M=t[d+g[O]]}if(M>L&&(F&w)!==x){for(0===j&&(j=L),k+=P,N=M-j,I=1<N+j&&(I-=B[N+j],!(0>=I));)N++,I<<=1;if(C+=1<i||e===u&&C>o)return 1;x=F&w,_[x]=L<<24|N<<16|k-m|0}}return 0!==F&&(_[k+F]=M-j<<24|64<<16|0),v.bits=L,0}},{"../utils/common":167}],177:[function(e,t){"use strict";t.exports={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"}},{}],178:[function(e,t,r){"use strict";function n(e){for(var t=e.length;--t>=0;)e[t]=0}function i(e,t,r,n,i){this.static_tree=e,this.extra_bits=t,this.extra_base=r,this.elems=n,this.max_length=i,this.has_stree=e&&e.length}function o(e,t){this.dyn_tree=e,this.max_code=0,this.stat_desc=t}function a(e){return 256>e?ut[e]:ut[256+(e>>>7)]}function s(e,t){e.pending_buf[e.pending++]=255&t,e.pending_buf[e.pending++]=t>>>8&255}function u(e,t,r){e.bi_valid>Y-r?(e.bi_buf|=t<>Y-e.bi_valid,e.bi_valid+=r-Y):(e.bi_buf|=t<>>=1,r<<=1;while(--t>0);return r>>>1}function f(e){16===e.bi_valid?(s(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):e.bi_valid>=8&&(e.pending_buf[e.pending++]=255&e.bi_buf,e.bi_buf>>=8,e.bi_valid-=8)}function h(e,t){var r,n,i,o,a,s,u=t.dyn_tree,l=t.max_code,c=t.stat_desc.static_tree,f=t.stat_desc.has_stree,h=t.stat_desc.extra_bits,d=t.stat_desc.extra_base,p=t.stat_desc.max_length,_=0;for(o=0;X>=o;o++)e.bl_count[o]=0;for(u[2*e.heap[e.heap_max]+1]=0,r=e.heap_max+1;H>r;r++)n=e.heap[r],o=u[2*u[2*n+1]+1]+1,o>p&&(o=p,_++),u[2*n+1]=o,n>l||(e.bl_count[o]++,a=0,n>=d&&(a=h[n-d]),s=u[2*n],e.opt_len+=s*(o+a),f&&(e.static_len+=s*(c[2*n+1]+a)));if(0!==_){do{for(o=p-1;0===e.bl_count[o];)o--;e.bl_count[o]--,e.bl_count[o+1]+=2,e.bl_count[p]--,_-=2}while(_>0);for(o=p;0!==o;o--)for(n=e.bl_count[o];0!==n;)i=e.heap[--r],i>l||(u[2*i+1]!==o&&(e.opt_len+=(o-u[2*i+1])*u[2*i],u[2*i+1]=o),n--)}}function d(e,t,r){var n,i,o=new Array(X+1),a=0;for(n=1;X>=n;n++)o[n]=a=a+r[n-1]<<1;for(i=0;t>=i;i++){var s=e[2*i+1];0!==s&&(e[2*i]=c(o[s]++,s))}}function p(){var e,t,r,n,o,a=new Array(X+1);for(r=0,n=0;G-1>n;n++)for(ct[n]=r,e=0;e<1<n;n++)for(ft[n]=o,e=0;e<1<>=7;W>n;n++)for(ft[n]=o<<7,e=0;e<1<=t;t++)a[t]=0;for(e=0;143>=e;)at[2*e+1]=8,e++,a[8]++;for(;255>=e;)at[2*e+1]=9,e++,a[9]++;for(;279>=e;)at[2*e+1]=7,e++,a[7]++;for(;287>=e;)at[2*e+1]=8,e++,a[8]++;for(d(at,q+1,a),e=0;W>e;e++)st[2*e+1]=5,st[2*e]=c(e,5);ht=new i(at,tt,V+1,q,X),dt=new i(st,rt,0,W,X),pt=new i(new Array(0),nt,0,Z,J)}function _(e){var t;for(t=0;q>t;t++)e.dyn_ltree[2*t]=0;for(t=0;W>t;t++)e.dyn_dtree[2*t]=0;for(t=0;Z>t;t++)e.bl_tree[2*t]=0;e.dyn_ltree[2*K]=1,e.opt_len=e.static_len=0,e.last_lit=e.matches=0}function m(e){e.bi_valid>8?s(e,e.bi_buf):e.bi_valid>0&&(e.pending_buf[e.pending++]=e.bi_buf),e.bi_buf=0,e.bi_valid=0}function g(e,t,r,n){m(e),n&&(s(e,r),s(e,~r)),z.arraySet(e.pending_buf,e.window,t,r,e.pending),e.pending+=r}function v(e,t,r,n){var i=2*t,o=2*r;return e[i]r;r++)0!==o[2*r]?(e.heap[++e.heap_len]=l=r,e.depth[r]=0):o[2*r+1]=0;for(;e.heap_len<2;)i=e.heap[++e.heap_len]=2>l?++l:0,o[2*i]=1,e.depth[i]=0,e.opt_len--,s&&(e.static_len-=a[2*i+1]);for(t.max_code=l,r=e.heap_len>>1;r>=1;r--)y(e,o,r);i=u;do r=e.heap[1],e.heap[1]=e.heap[e.heap_len--],y(e,o,1),n=e.heap[1],e.heap[--e.heap_max]=r,e.heap[--e.heap_max]=n,o[2*i]=o[2*r]+o[2*n],e.depth[i]=(e.depth[r]>=e.depth[n]?e.depth[r]:e.depth[n])+1,o[2*r+1]=o[2*n+1]=i,e.heap[1]=i++,y(e,o,1);while(e.heap_len>=2);e.heap[--e.heap_max]=e.heap[1],h(e,t),d(o,l,e.bl_count)}function w(e,t,r){var n,i,o=-1,a=t[1],s=0,u=7,l=4;for(0===a&&(u=138,l=3),t[2*(r+1)+1]=65535,n=0;r>=n;n++)i=a,a=t[2*(n+1)+1],++ss?e.bl_tree[2*i]+=s:0!==i?(i!==o&&e.bl_tree[2*i]++,e.bl_tree[2*$]++):10>=s?e.bl_tree[2*Q]++:e.bl_tree[2*et]++,s=0,o=i,0===a?(u=138,l=3):i===a?(u=6,l=3):(u=7,l=4))}function k(e,t,r){var n,i,o=-1,a=t[1],s=0,c=7,f=4;for(0===a&&(c=138,f=3),n=0;r>=n;n++)if(i=a,a=t[2*(n+1)+1],!(++ss){do l(e,i,e.bl_tree);while(0!==--s)}else 0!==i?(i!==o&&(l(e,i,e.bl_tree),s--),l(e,$,e.bl_tree),u(e,s-3,2)):10>=s?(l(e,Q,e.bl_tree),u(e,s-3,3)):(l(e,et,e.bl_tree),u(e,s-11,7));s=0,o=i,0===a?(c=138,f=3):i===a?(c=6,f=3):(c=7,f=4)}}function A(e){var t;for(w(e,e.dyn_ltree,e.l_desc.max_code),w(e,e.dyn_dtree,e.d_desc.max_code),x(e,e.bl_desc),t=Z-1;t>=3&&0===e.bl_tree[2*it[t]+1];t--);return e.opt_len+=3*(t+1)+5+5+4,t}function T(e,t,r,n){var i;for(u(e,t-257,5),u(e,r-1,5),u(e,n-4,4),i=0;n>i;i++)u(e,e.bl_tree[2*it[i]+1],3);k(e,e.dyn_ltree,t-1),k(e,e.dyn_dtree,r-1)}function E(e){var t,r=4093624447;for(t=0;31>=t;t++,r>>>=1)if(1&r&&0!==e.dyn_ltree[2*t])return N;if(0!==e.dyn_ltree[18]||0!==e.dyn_ltree[20]||0!==e.dyn_ltree[26])return j;for(t=32;V>t;t++)if(0!==e.dyn_ltree[2*t])return j;return N}function S(e){_t||(p(),_t=!0),e.l_desc=new o(e.dyn_ltree,ht),e.d_desc=new o(e.dyn_dtree,dt),e.bl_desc=new o(e.bl_tree,pt),e.bi_buf=0,e.bi_valid=0,_(e)}function R(e,t,r,n){u(e,(C<<1)+(n?1:0),3),g(e,t,r,!0)}function M(e){u(e,F<<1,3),l(e,K,at),f(e)}function O(e,t,r,n){var i,o,a=0;e.level>0?(e.strm.data_type===I&&(e.strm.data_type=E(e)),x(e,e.l_desc),x(e,e.d_desc),a=A(e),i=e.opt_len+3+7>>>3,o=e.static_len+3+7>>>3,i>=o&&(i=o)):i=o=r+5,i>=r+4&&-1!==t?R(e,t,r,n):e.strategy===L||o===i?(u(e,(F<<1)+(n?1:0),3),b(e,at,st)):(u(e,(U<<1)+(n?1:0),3),T(e,e.l_desc.max_code+1,e.d_desc.max_code+1,a+1),b(e,e.dyn_ltree,e.dyn_dtree)),_(e),n&&m(e)}function P(e,t,r){return e.pending_buf[e.d_buf+2*e.last_lit]=t>>>8&255,e.pending_buf[e.d_buf+2*e.last_lit+1]=255&t,e.pending_buf[e.l_buf+e.last_lit]=255&r,e.last_lit++,0===t?e.dyn_ltree[2*r]++:(e.matches++,t--,e.dyn_ltree[2*(lt[r]+V+1)]++,e.dyn_dtree[2*a(t)]++),e.last_lit===e.lit_bufsize-1}var z=e("../utils/common"),L=4,N=0,j=1,I=2,C=0,F=1,U=2,D=3,B=258,G=29,V=256,q=V+1+G,W=30,Z=19,H=2*q+1,X=15,Y=16,J=7,K=256,$=16,Q=17,et=18,tt=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],rt=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],nt=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],it=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],ot=512,at=new Array(2*(q+2));n(at);var st=new Array(2*W);n(st);var ut=new Array(ot);n(ut);var lt=new Array(B-D+1);n(lt);var ct=new Array(G);n(ct);var ft=new Array(W);n(ft);var ht,dt,pt,_t=!1;r._tr_init=S,r._tr_stored_block=R,r._tr_flush_block=O,r._tr_tally=P,r._tr_align=M},{"../utils/common":167}],179:[function(e,t){"use strict";function r(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}t.exports=r},{}],180:[function(e,t){"use strict";function r(e){var t;e&&e.length&&(t=e,e=t.length);var r=new Uint8Array(e||0);return t&&r.set(t),r.readUInt32LE=i.readUInt32LE,r.writeUInt32LE=i.writeUInt32LE,r.readInt32LE=i.readInt32LE,r.writeInt32LE=i.writeInt32LE,r.readFloatLE=i.readFloatLE,r.writeFloatLE=i.writeFloatLE,r.readDoubleLE=i.readDoubleLE,r.writeDoubleLE=i.writeDoubleLE,r.toString=i.toString,r.write=i.write,r.slice=i.slice,r.copy=i.copy,r._isBuffer=!0,r}function n(e){for(var t,r,n=e.length,i=[],o=0;n>o;o++){if(t=e.charCodeAt(o),t>55295&&57344>t){if(!r){t>56319||o+1===n?i.push(239,191,189):r=t;continue}if(56320>t){i.push(239,191,189),r=t;continue}t=r-55296<<10|t-56320|65536,r=null}else r&&(i.push(239,191,189),r=null);128>t?i.push(t):2048>t?i.push(t>>6|192,63&t|128):65536>t?i.push(t>>12|224,t>>6&63|128,63&t|128):i.push(t>>18|240,t>>12&63|128,t>>6&63|128,63&t|128)}return i}t.exports=r;var i,o,a,s=e("ieee754");i={readUInt32LE:function(e){return(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},writeUInt32LE:function(e,t){this[t]=e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24},readInt32LE:function(e){return(this[e]|this[e+1]<<8|this[e+2]<<16)+(this[e+3]<<24)},readFloatLE:function(e){return s.read(this,e,!0,23,4)},readDoubleLE:function(e){return s.read(this,e,!0,52,8)},writeFloatLE:function(e,t){return s.write(this,e,t,!0,23,4)},writeDoubleLE:function(e,t){return s.write(this,e,t,!0,52,8)},toString:function(e,t,r){var n="",i="";t=t||0,r=Math.min(this.length,r||this.length);for(var o=t;r>o;o++){var a=this[o];127>=a?(n+=decodeURIComponent(i)+String.fromCharCode(a),i=""):i+="%"+a.toString(16)}return n+=decodeURIComponent(i)},write:function(e,t){for(var r=e===o?a:n(e),i=0;ir)return e;if(r=n[t.pos++],e+=34359738368*(127&r),128>r)return e;if(r=n[t.pos++],e+=4398046511104*(127&r),128>r)return e;if(r=n[t.pos++],e+=562949953421312*(127&r),128>r)return e;if(r=n[t.pos++],e+=72057594037927940*(127&r),128>r)return e;if(r=n[t.pos++],e+=0x8000000000000000*(127&r),128>r)return e;throw new Error("Expected varint not more than 10 bytes")}function o(e,t){t.realloc(10);for(var r=t.pos+10;e>=1;){if(t.pos>=r)throw new Error("Given varint doesn't fit into 10 bytes");var n=255&e;t.buf[t.pos++]=n|(e>=128?128:0),e/=128}}function a(e,t,r){var n=16383>=t?1:2097151>=t?2:268435455>=t?3:Math.ceil(Math.log(t)/(7*Math.LN2));r.realloc(n);for(var i=r.pos-1;i>=e;i--)r.buf[i+n]=r.buf[i]}function s(e,t){for(var r=0;r>3,o=this.pos;e(i,t,this),this.pos===o&&this.skip(n)}return t},readMessage:function(e,t){return this.readFields(e,t,this.readVarint()+this.pos)},readFixed32:function(){var e=this.buf.readUInt32LE(this.pos);return this.pos+=4,e},readSFixed32:function(){var e=this.buf.readInt32LE(this.pos);return this.pos+=4,e},readFixed64:function(){var e=this.buf.readUInt32LE(this.pos)+this.buf.readUInt32LE(this.pos+4)*g;return this.pos+=8,e},readSFixed64:function(){var e=this.buf.readUInt32LE(this.pos)+this.buf.readInt32LE(this.pos+4)*g;return this.pos+=8,e},readFloat:function(){var e=this.buf.readFloatLE(this.pos);return this.pos+=4,e},readDouble:function(){var e=this.buf.readDoubleLE(this.pos);return this.pos+=8,e},readVarint:function(){var e,t,r=this.buf;return t=r[this.pos++],e=127&t,128>t?e:(t=r[this.pos++],e|=(127&t)<<7,128>t?e:(t=r[this.pos++],e|=(127&t)<<14,128>t?e:(t=r[this.pos++],e|=(127&t)<<21,128>t?e:i(e,this))))},readVarint64:function(){var e=this.pos,t=this.readVarint();if(y>t)return t;for(var r=this.pos-2;255===this.buf[r];)r--;e>r&&(r=e),t=0;for(var n=0;r-e+1>n;n++){var i=127&~this.buf[e+n];t+=4>n?i<<7*n:i*Math.pow(2,7*n)}return-t-1},readSVarint:function(){var e=this.readVarint();return e%2===1?(e+1)/-2:e/2},readBoolean:function(){return Boolean(this.readVarint())},readString:function(){var e=this.readVarint()+this.pos,t=this.buf.toString("utf8",this.pos,e);return this.pos=e,t},readBytes:function(){var e=this.readVarint()+this.pos,t=this.buf.slice(this.pos,e);return this.pos=e,t},readPackedVarint:function(){for(var e=this.readVarint()+this.pos,t=[];this.pos127;);else if(t===n.Bytes)this.pos=this.readVarint()+this.pos;else if(t===n.Fixed32)this.pos+=4;else{if(t!==n.Fixed64)throw new Error("Unimplemented type: "+t);this.pos+=8}},writeTag:function(e,t){this.writeVarint(e<<3|t)},realloc:function(e){for(var t=this.length||16;t268435455?void o(e,this):(this.realloc(4),this.buf[this.pos++]=127&e|(e>127?128:0),void(127>=e||(this.buf[this.pos++]=127&(e>>>=7)|(e>127?128:0),127>=e||(this.buf[this.pos++]=127&(e>>>=7)|(e>127?128:0),127>=e||(this.buf[this.pos++]=e>>>7&127)))))},writeSVarint:function(e){this.writeVarint(0>e?2*-e-1:2*e)},writeBoolean:function(e){this.writeVarint(Boolean(e))},writeString:function(e){e=String(e);var t=m.byteLength(e);this.writeVarint(t),this.realloc(t),this.buf.write(e,this.pos),this.pos+=t},writeFloat:function(e){this.realloc(4),this.buf.writeFloatLE(e,this.pos),this.pos+=4},writeDouble:function(e){this.realloc(8),this.buf.writeDoubleLE(e,this.pos),this.pos+=8},writeBytes:function(e){var t=e.length;this.writeVarint(t),this.realloc(t);for(var r=0;t>r;r++)this.buf[this.pos++]=e[r]},writeRawMessage:function(e,t){this.pos++;var r=this.pos;e(t,this);var n=this.pos-r;n>=128&&a(r,n,this),this.pos=r-1,this.writeVarint(n),this.pos+=n},writeMessage:function(e,t,r){this.writeTag(e,n.Bytes),this.writeRawMessage(t,r)},writePackedVarint:function(e,t){this.writeMessage(e,s,t)},writePackedSVarint:function(e,t){this.writeMessage(e,u,t)},writePackedBoolean:function(e,t){this.writeMessage(e,f,t)},writePackedFloat:function(e,t){this.writeMessage(e,l,t)},writePackedDouble:function(e,t){this.writeMessage(e,c,t)},writePackedFixed32:function(e,t){this.writeMessage(e,h,t)},writePackedSFixed32:function(e,t){this.writeMessage(e,d,t)},writePackedFixed64:function(e,t){this.writeMessage(e,p,t)},writePackedSFixed64:function(e,t){this.writeMessage(e,_,t)},writeBytesField:function(e,t){this.writeTag(e,n.Bytes),this.writeBytes(t)},writeFixed32Field:function(e,t){this.writeTag(e,n.Fixed32),this.writeFixed32(t)},writeSFixed32Field:function(e,t){this.writeTag(e,n.Fixed32),this.writeSFixed32(t)},writeFixed64Field:function(e,t){this.writeTag(e,n.Fixed64),this.writeFixed64(t)},writeSFixed64Field:function(e,t){this.writeTag(e,n.Fixed64),this.writeSFixed64(t)},writeVarintField:function(e,t){this.writeTag(e,n.Varint),this.writeVarint(t)},writeSVarintField:function(e,t){this.writeTag(e,n.Varint),this.writeSVarint(t) },writeStringField:function(e,t){this.writeTag(e,n.Bytes),this.writeString(t)},writeFloatField:function(e,t){this.writeTag(e,n.Fixed32),this.writeFloat(t)},writeDoubleField:function(e,t){this.writeTag(e,n.Fixed64),this.writeDouble(t)},writeBooleanField:function(e,t){this.writeVarintField(e,Boolean(t))}}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./buffer":180}],182:[function(e,t){"use strict";function r(e,t){this.x=e,this.y=t}t.exports=r,r.prototype={clone:function(){return new r(this.x,this.y)},add:function(e){return this.clone()._add(e)},sub:function(e){return this.clone()._sub(e)},mult:function(e){return this.clone()._mult(e)},div:function(e){return this.clone()._div(e)},rotate:function(e){return this.clone()._rotate(e)},matMult:function(e){return this.clone()._matMult(e)},unit:function(){return this.clone()._unit()},perp:function(){return this.clone()._perp()},round:function(){return this.clone()._round()},mag:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},equals:function(e){return this.x===e.x&&this.y===e.y},dist:function(e){return Math.sqrt(this.distSqr(e))},distSqr:function(e){var t=e.x-this.x,r=e.y-this.y;return t*t+r*r},angle:function(){return Math.atan2(this.y,this.x)},angleTo:function(e){return Math.atan2(this.y-e.y,this.x-e.x)},angleWith:function(e){return this.angleWithSep(e.x,e.y)},angleWithSep:function(e,t){return Math.atan2(this.x*t-this.y*e,this.x*e+this.y*t)},_matMult:function(e){var t=e[0]*this.x+e[1]*this.y,r=e[2]*this.x+e[3]*this.y;return this.x=t,this.y=r,this},_add:function(e){return this.x+=e.x,this.y+=e.y,this},_sub:function(e){return this.x-=e.x,this.y-=e.y,this},_mult:function(e){return this.x*=e,this.y*=e,this},_div:function(e){return this.x/=e,this.y/=e,this},_unit:function(){return this._div(this.mag()),this},_perp:function(){var e=this.y;return this.y=this.x,this.x=-e,this},_rotate:function(e){var t=Math.cos(e),r=Math.sin(e),n=t*this.x-r*this.y,i=r*this.x+t*this.y;return this.x=n,this.y=i,this},_round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}},r.convert=function(e){return e instanceof r?e:Array.isArray(e)?new r(e[0],e[1]):e}},{}],183:[function(e,t){(function(e){"use strict";function r(t,r,n,i){if("function"!=typeof t)throw new TypeError('"callback" argument must be a function');var o,a,s=arguments.length;switch(s){case 0:case 1:return e.nextTick(t);case 2:return e.nextTick(function(){t.call(null,r)});case 3:return e.nextTick(function(){t.call(null,r,n)});case 4:return e.nextTick(function(){t.call(null,r,n,i)});default:for(o=new Array(s-1),a=0;a1)for(var r=1;r=this.charLength-this.charReceived?this.charLength-this.charReceived:e.length;if(e.copy(this.charBuffer,this.charReceived,0,r),this.charReceived+=r,this.charReceived=55296&&56319>=n)){if(this.charReceived=this.charLength=0,0===e.length)return t;break}this.charLength+=this.surrogateSize,t=""}this.detectIncompleteChar(e);var i=e.length;this.charLength&&(e.copy(this.charBuffer,0,e.length-this.charReceived,i),i-=this.charReceived),t+=e.toString(this.encoding,0,i);var i=t.length-1,n=t.charCodeAt(i);if(n>=55296&&56319>=n){var o=this.surrogateSize;return this.charLength+=o,this.charReceived+=o,this.charBuffer.copy(this.charBuffer,o,0,o),e.copy(this.charBuffer,0,0,o),t.substring(0,i)}return t},l.prototype.detectIncompleteChar=function(e){for(var t=e.length>=3?3:e.length;t>0;t--){var r=e[e.length-t];if(1==t&&r>>5==6){this.charLength=2;break}if(2>=t&&r>>4==14){this.charLength=3;break}if(3>=t&&r>>3==30){this.charLength=4;break}}this.charReceived=t},l.prototype.end=function(e){var t="";if(e&&e.length&&(t=this.write(e)),this.charReceived){var r=this.charReceived,n=this.charBuffer,i=this.encoding;t+=n.slice(0,r).toString(i)}return t}},{buffer:5}],186:[function(e,t){"use stric";var r="\\/\\*",n="\\/\\*(?!\\*?\\!)",i="(.|[\\r\\n]|\\n)*?\\*\\/\\n?\\n?",o=/(^|[^\S\n])(?:\/\/)([\s\S]+?)$/gm,a=/(^|[^\S\n])(?:\/\/[^!])([\s\S]+?)$/gm,s=t.exports=function(e,t){return e?s.block(s.line(e,t),t):""};s.block=function(e,t){t=t||{};var o=new RegExp(r+i,"gm");return t.safe&&(o=new RegExp(n+i,"gm")),e?e.replace(o,""):""},s.line=function(e,t){t=t||{};var r=o;return t.safe&&(r=a),e?e.replace(r,""):""}},{}],187:[function(t,r,n){!function(t,i){"object"==typeof n&&"undefined"!=typeof r?i(n):"function"==typeof e&&e.amd?e(["exports"],i):i(t.topojson=t.topojson||{})}(this,function(e){"use strict";function t(e,t){var n=t.id,i=t.bbox,o=null==t.properties?{}:t.properties,a=r(e,t);return null==n&&null==i?{type:"Feature",properties:o,geometry:a}:null==i?{type:"Feature",id:n,properties:o,geometry:a}:{type:"Feature",id:n,bbox:i,properties:o,geometry:a}}function r(e,t){function r(e,t){t.length&&t.pop();for(var r=f[0>e?~e:e],i=0,o=r.length;o>i;++i)t.push(c(r[i].slice(),i));0>e&&n(t,o)}function i(e){return c(e.slice())}function a(e){for(var t=[],n=0,i=e.length;i>n;++n)r(e[n],t);return t.length<2&&t.push(t[0].slice()),t}function s(e){for(var t=a(e);t.length<4;)t.push(t[0].slice());return t}function u(e){return e.map(s)}function l(e){var t,r=e.type;switch(r){case"GeometryCollection":return{type:r,geometries:e.geometries.map(l)};case"Point":t=i(e.coordinates);break;case"MultiPoint":t=e.coordinates.map(i);break;case"LineString":t=a(e.arcs);break;case"MultiLineString":t=e.arcs.map(a);break;case"Polygon":t=u(e.arcs);break;case"MultiPolygon":t=e.arcs.map(u);break;default:return null}return{type:r,coordinates:t}}var c=o(e),f=e.arcs;return l(t)}var n=function(e,t){for(var r,n=e.length,i=n-t;i<--n;)r=e[i],e[i++]=e[n],e[n]=r},i=function(e){return e},o=function(e){if(null==(t=e.transform))return i;var t,r,n,o=t.scale[0],a=t.scale[1],s=t.translate[0],u=t.translate[1];return function(e,t){return t||(r=n=0),e[0]=(r+=e[0])*o+s,e[1]=(n+=e[1])*a+u,e}},a=function(e,r){return"GeometryCollection"===r.type?{type:"FeatureCollection",features:r.geometries.map(function(r){return t(e,r)})}:t(e,r)};e.feature=a,Object.defineProperty(e,"__esModule",{value:!0})})},{}],188:[function(e,t){(function(e){function r(e,t){function r(){if(!i){if(n("throwDeprecation"))throw new Error(t);n("traceDeprecation")?console.trace(t):console.warn(t),i=!0}return e.apply(this,arguments)}if(n("noDeprecation"))return e;var i=!1;return r}function n(t){try{if(!e.localStorage)return!1}catch(r){return!1}var n=e.localStorage[t];return null==n?!1:"true"===String(n).toLowerCase()}t.exports=r}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],189:[function(e,t,r){arguments[4][94][0].apply(r,arguments)},{dup:94}],190:[function(e,t){t.exports=function(e){return e&&"object"==typeof e&&"function"==typeof e.copy&&"function"==typeof e.fill&&"function"==typeof e.readUInt8}},{}],191:[function(e,t,r){(function(t,n){function i(e,t){var n={seen:[],stylize:a};return arguments.length>=3&&(n.depth=arguments[2]),arguments.length>=4&&(n.colors=arguments[3]),_(t)?n.showHidden=t:t&&r._extend(n,t),x(n.showHidden)&&(n.showHidden=!1),x(n.depth)&&(n.depth=2),x(n.colors)&&(n.colors=!1),x(n.customInspect)&&(n.customInspect=!0),n.colors&&(n.stylize=o),u(n,e,n.depth)}function o(e,t){var r=i.styles[t];return r?"["+i.colors[r][0]+"m"+e+"["+i.colors[r][1]+"m":e}function a(e){return e}function s(e){var t={};return e.forEach(function(e){t[e]=!0}),t}function u(e,t,n){if(e.customInspect&&t&&E(t.inspect)&&t.inspect!==r.inspect&&(!t.constructor||t.constructor.prototype!==t)){var i=t.inspect(n,e);return y(i)||(i=u(e,i,n)),i}var o=l(e,t);if(o)return o;var a=Object.keys(t),_=s(a);if(e.showHidden&&(a=Object.getOwnPropertyNames(t)),T(t)&&(a.indexOf("message")>=0||a.indexOf("description")>=0))return c(t);if(0===a.length){if(E(t)){var m=t.name?": "+t.name:"";return e.stylize("[Function"+m+"]","special")}if(w(t))return e.stylize(RegExp.prototype.toString.call(t),"regexp");if(A(t))return e.stylize(Date.prototype.toString.call(t),"date");if(T(t))return c(t)}var g="",v=!1,b=["{","}"];if(p(t)&&(v=!0,b=["[","]"]),E(t)){var x=t.name?": "+t.name:"";g=" [Function"+x+"]"}if(w(t)&&(g=" "+RegExp.prototype.toString.call(t)),A(t)&&(g=" "+Date.prototype.toUTCString.call(t)),T(t)&&(g=" "+c(t)),0===a.length&&(!v||0==t.length))return b[0]+g+b[1];if(0>n)return w(t)?e.stylize(RegExp.prototype.toString.call(t),"regexp"):e.stylize("[Object]","special");e.seen.push(t);var k;return k=v?f(e,t,n,_,a):a.map(function(r){return h(e,t,n,_,r,v)}),e.seen.pop(),d(k,g,b)}function l(e,t){if(x(t))return e.stylize("undefined","undefined");if(y(t)){var r="'"+JSON.stringify(t).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return e.stylize(r,"string")}return v(t)?e.stylize(""+t,"number"):_(t)?e.stylize(""+t,"boolean"):m(t)?e.stylize("null","null"):void 0}function c(e){return"["+Error.prototype.toString.call(e)+"]"}function f(e,t,r,n,i){for(var o=[],a=0,s=t.length;s>a;++a)o.push(P(t,String(a))?h(e,t,r,n,String(a),!0):"");return i.forEach(function(i){i.match(/^\d+$/)||o.push(h(e,t,r,n,i,!0))}),o}function h(e,t,r,n,i,o){var a,s,l;if(l=Object.getOwnPropertyDescriptor(t,i)||{value:t[i]},l.get?s=l.set?e.stylize("[Getter/Setter]","special"):e.stylize("[Getter]","special"):l.set&&(s=e.stylize("[Setter]","special")),P(n,i)||(a="["+i+"]"),s||(e.seen.indexOf(l.value)<0?(s=m(r)?u(e,l.value,null):u(e,l.value,r-1),s.indexOf("\n")>-1&&(s=o?s.split("\n").map(function(e){return" "+e}).join("\n").substr(2):"\n"+s.split("\n").map(function(e){return" "+e}).join("\n"))):s=e.stylize("[Circular]","special")),x(a)){if(o&&i.match(/^\d+$/))return s;a=JSON.stringify(""+i),a.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(a=a.substr(1,a.length-2),a=e.stylize(a,"name")):(a=a.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),a=e.stylize(a,"string"))}return a+": "+s}function d(e,t,r){var n=0,i=e.reduce(function(e,t){return n++,t.indexOf("\n")>=0&&n++,e+t.replace(/\u001b\[\d\d?m/g,"").length+1},0);return i>60?r[0]+(""===t?"":t+"\n ")+" "+e.join(",\n ")+" "+r[1]:r[0]+t+" "+e.join(", ")+" "+r[1]}function p(e){return Array.isArray(e)}function _(e){return"boolean"==typeof e}function m(e){return null===e}function g(e){return null==e}function v(e){return"number"==typeof e}function y(e){return"string"==typeof e}function b(e){return"symbol"==typeof e}function x(e){return void 0===e}function w(e){return k(e)&&"[object RegExp]"===R(e)}function k(e){return"object"==typeof e&&null!==e}function A(e){return k(e)&&"[object Date]"===R(e)}function T(e){return k(e)&&("[object Error]"===R(e)||e instanceof Error)}function E(e){return"function"==typeof e}function S(e){return null===e||"boolean"==typeof e||"number"==typeof e||"string"==typeof e||"symbol"==typeof e||"undefined"==typeof e}function R(e){return Object.prototype.toString.call(e)}function M(e){return 10>e?"0"+e.toString(10):e.toString(10)}function O(){var e=new Date,t=[M(e.getHours()),M(e.getMinutes()),M(e.getSeconds())].join(":");return[e.getDate(),j[e.getMonth()],t].join(" ")}function P(e,t){return Object.prototype.hasOwnProperty.call(e,t)}var z=/%[sdj%]/g;r.format=function(e){if(!y(e)){for(var t=[],r=0;r=o)return e;switch(e){case"%s":return String(n[r++]);case"%d":return Number(n[r++]);case"%j":try{return JSON.stringify(n[r++])}catch(t){return"[Circular]"}default:return e}}),s=n[r];o>r;s=n[++r])a+=m(s)||!k(s)?" "+s:" "+i(s);return a},r.deprecate=function(e,i){function o(){if(!a){if(t.throwDeprecation)throw new Error(i);t.traceDeprecation?console.trace(i):console.error(i),a=!0}return e.apply(this,arguments)}if(x(n.process))return function(){return r.deprecate(e,i).apply(this,arguments)};if(t.noDeprecation===!0)return e;var a=!1;return o};var L,N={};r.debuglog=function(e){if(x(L)&&(L=t.env.NODE_DEBUG||""),e=e.toUpperCase(),!N[e])if(new RegExp("\\b"+e+"\\b","i").test(L)){var n=t.pid;N[e]=function(){var t=r.format.apply(r,arguments);console.error("%s %d: %s",e,n,t)}}else N[e]=function(){};return N[e]},r.inspect=i,i.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},i.styles={special:"cyan",number:"yellow","boolean":"yellow",undefined:"grey","null":"bold",string:"green",date:"magenta",regexp:"red"},r.isArray=p,r.isBoolean=_,r.isNull=m,r.isNullOrUndefined=g,r.isNumber=v,r.isString=y,r.isSymbol=b,r.isUndefined=x,r.isRegExp=w,r.isObject=k,r.isDate=A,r.isError=T,r.isFunction=E,r.isPrimitive=S,r.isBuffer=e("./support/isBuffer");var j=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];r.log=function(){console.log("%s - %s",O(),r.format.apply(r,arguments))},r.inherits=e("inherits"),r._extend=function(e,t){if(!t||!k(t))return e;for(var r=Object.keys(t),n=r.length;n--;)e[r[n]]=t[r[n]];return e}}).call(this,e("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./support/isBuffer":190,_process:184,inherits:189}],192:[function(e,t){t.exports.VectorTile=e("./lib/vectortile.js"),t.exports.VectorTileFeature=e("./lib/vectortilefeature.js"),t.exports.VectorTileLayer=e("./lib/vectortilelayer.js")},{"./lib/vectortile.js":193,"./lib/vectortilefeature.js":194,"./lib/vectortilelayer.js":195}],193:[function(e,t){"use strict";function r(e,t){this.layers=e.readFields(n,{},t)}function n(e,t,r){if(3===e){var n=new i(r,r.readVarint()+r.pos);n.length&&(t[n.name]=n)}}var i=e("./vectortilelayer");t.exports=r},{"./vectortilelayer":195}],194:[function(e,t){"use strict";function r(e,t,r,i,o){this.properties={},this.extent=r,this.type=0,this._pbf=e,this._geometry=-1,this._keys=i,this._values=o,e.readFields(n,this,t)}function n(e,t,r){1==e?t.id=r.readVarint():2==e?i(r,t):3==e?t.type=r.readVarint():4==e&&(t._geometry=r.pos)}function i(e,t){for(var r=e.readVarint()+e.pos;e.pos=t)return[e];for(var r,n,i=[],o=0;t>o;o++){var s=a(e[o]);0!==s&&(void 0===n&&(n=0>s),n===0>s?(r&&i.push(r),r=[e[o]]):r.push(e[o]))}return r&&i.push(r),i}function a(e){for(var t,r,n=0,i=0,o=e.length,a=o-1;o>i;a=i++)t=e[i],r=e[a],n+=(r.x-t.x)*(t.y+r.y);return n}var s=e("point-geometry");t.exports=r,r.types=["Unknown","Point","LineString","Polygon"],r.prototype.loadGeometry=function(){var e=this._pbf;e.pos=this._geometry;for(var t,r=e.readVarint()+e.pos,n=1,i=0,o=0,a=0,u=[];e.pos>3}if(i--,1===n||2===n)o+=e.readSVarint(),a+=e.readSVarint(),1===n&&(t&&u.push(t),t=[]),t.push(new s(o,a));else{if(7!==n)throw new Error("unknown command "+n);t&&t.push(t[0].clone())}}return t&&u.push(t),u},r.prototype.bbox=function(){var e=this._pbf;e.pos=this._geometry;for(var t=e.readVarint()+e.pos,r=1,n=0,i=0,o=0,a=1/0,s=-1/0,u=1/0,l=-1/0;e.pos>3}if(n--,1===r||2===r)i+=e.readSVarint(),o+=e.readSVarint(),a>i&&(a=i),i>s&&(s=i),u>o&&(u=o),o>l&&(l=o);else if(7!==r)throw new Error("unknown command "+r)}return[a,u,s,l]},r.prototype.toGeoJSON=function(e,t,n){function i(e){for(var t=0;t>3;t=1===n?e.readString():2===n?e.readFloat():3===n?e.readDouble():4===n?e.readVarint64():5===n?e.readVarint():6===n?e.readSVarint():7===n?e.readBoolean():null}return t}var o=e("./vectortilefeature.js");t.exports=r,r.prototype.feature=function(e){if(0>e||e>=this._features.length)throw new Error("feature index out of bounds");this._pbf.pos=this._features[e];var t=this._pbf.readVarint()+this._pbf.pos;return new o(this._pbf,t,this.extent,this._keys,this._values)}},{"./vectortilefeature.js":194}],196:[function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function i(e,t,r){var n=u[0],i=u[1];return e[0]<=n.x+r&&t[0]<=n.x+r||e[0]>=i.x-r&&t[0]>=i.x-r||e[1]>=n.y-r&&t[1]>=n.y-r||e[1]<=i.y+r&&t[1]<=i.y+r?!0:!1}function o(e,t){t=t||0;var r=u[0],n=u[1];return e[0]<=r.x+t||e[0]>=n.x-t||e[1]>=r.y-t||e[1]<=n.y+t}Object.defineProperty(r,"__esModule",{value:!0}),r.default_uvs=r.tile_bounds=void 0,r.outsideTile=i,r.isCoordOutsideTile=o;{var a=e("../geo"),s=n(a),u=r.tile_bounds=[{x:0,y:0},{x:s.default.tile_scale,y:-s.default.tile_scale}];r.default_uvs=[0,0,1,1]}},{"../geo":201}],197:[function(e,t,r){"use strict";function n(e,t,r,n,a){var s=n.texcoord_index,u=n.position_index,l=n.shape_index,c=n.offset_index,f=n.offsets_index,h=n.pre_angles_index,d=n.angles_index,p=a.quad,_=a.quad_normalize,m=a.offset,g=a.offsets,v=a.pre_angles,y=a.angle,b=a.angles,x=a.shape_w,w=a.curve,k=a.texcoord_scale,A=a.texcoord_normalize,T=a.pre_angles_normalize,E=a.angles_normalize,S=a.offsets_normalize;_=_||1;var R=p[0]/2*_,M=p[1]/2*_,O=[[-R,-M],[R,-M],[R,M],[-R,M]],P=t.vertex_elements,z=t.vertex_count,L=void 0;if(s){A=A||1;var N=k||o.default_uvs,j=i(N,4),I=j[0],C=j[1],F=j[2],U=j[3];L=[[I,C],[F,C],[F,U],[I,U]]}for(var D=0,B=e.length,G=0;B>G;G++){for(var V=e[G],q=0;4>q;q++)s&&(r[s+0]=L[q][0]*A,r[s+1]=L[q][1]*A),r[u+0]=V[0],r[u+1]=V[1],r[l+0]=O[q][0],r[l+1]=O[q][1],r[l+2]=y,r[l+3]=x,r[c+0]=m[0],r[c+1]=m[1],w&&(r[h+0]=T*v[0],r[h+1]=T*v[1],r[h+2]=T*v[2],r[h+3]=T*v[3],r[d+0]=E*b[0],r[d+1]=E*b[1],r[d+2]=E*b[2],r[d+3]=E*b[3],r[f+0]=S*g[0],r[f+1]=S*g[1],r[f+2]=S*g[2],r[f+3]=S*g[3]),t.addVertex(r);P.push(z+0),P.push(z+1),P.push(z+2),P.push(z+2),P.push(z+3),P.push(z+0),z+=4,D+=2}return D}Object.defineProperty(r,"__esModule",{value:!0});var i=function(){function e(e,t){var r=[],n=!0,i=!1,o=void 0;try{for(var a,s=e[Symbol.iterator]();!(n=(a=s.next()).done)&&(r.push(a.value),!t||r.length!==t);n=!0);}catch(u){i=!0,o=u}finally{try{!n&&s["return"]&&s["return"]()}finally{if(i)throw o}}return r}return function(t,r){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return e(t,r);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();r.buildQuadsForPoints=n;var o=e("./common")},{"./common":196}],198:[function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function i(e,t,r,n){var i=n.texcoord_index,o=n.texcoord_scale,u=n.texcoord_normalize,c=t.vertex_elements;if(i){u=u||1;var f=o||h.default_uvs,d=s(f,4),_=d[0],m=d[1],g=d[2],v=d[3]}for(var y=0,b=e.length,x=0;b>x;x++){var w=t.vertex_count,k=e[x];if(i)var A=l.default.findBoundingBox(k),T=s(A,4),E=T[0],S=T[1],R=T[2],M=T[3],O=R-E,P=M-S,z=(g-_)/O,L=(v-m)/P;for(var N=0;NL;L++)for(var N=e[L],j=0;jj;j++){var I=j,C=j+1;if(k=e[I],A=e[C],!w.default.isEqual(k,A)){if(c&&T.outsideTile(k,A,_)){p(k,M,[1,O],t),p(k,w.default.neg(M),[0,O],t),d(1,t);var F=s(e,I+1,_);return void(F&&r.push(F))}E=M,M=w.default.normalize(w.default.perp(k,A)),n===R.miter?f(O,k,E,M,g,!1,t):h(n,O,k,E,M,!1,t),O+=m*w.default.length(w.default.sub(A,k))}}k=A,E=M,o?(M=w.default.normalize(w.default.perp(k,e[1])),l(k,E,M,n,O,t)):(p(k,E,[1,O],t),p(k,w.default.neg(E),[0,O],t),d(1,t),T.isCoordOutsideTile(k)||v(k,O,E,i,!1,t))}}}function a(e){if(T.isCoordOutsideTile(e[0]))return 0;for(var t=0;t=2?e.slice(n):!1}function u(e,t,r,n,i){if(void 0===n||T.isCoordOutsideTile(e))p(e,r,[1,0],i),p(e,w.default.neg(r),[0,0],i);else{var o=0;n===R.miter?f(o,e,t,r,i.miter_len_sq,!0,i):h(n,o,e,t,r,!0,i)}}function l(e,t,r,n,i,o){if(T.isCoordOutsideTile(e))p(e,t,[1,i],o),p(e,w.default.neg(t),[0,i],o),d(1,o);else{var a=c(t,r);n===R.miter&&w.default.lengthSq(a)>o.miter_len_sq&&(n=R.bevel),n===R.miter?(p(e,a,[1,i],o),p(e,w.default.neg(a),[0,i],o),d(1,o)):(p(e,t,[1,i],o),p(e,w.default.neg(t),[0,i],o),d(1,o))}}function c(e,t){var r=w.default.normalize(w.default.add(e,t)),n=2/(1+Math.abs(w.default.dot(e,r)));return w.default.mult(r,n*n)}function f(e,t,r,n,i,o,a){var s=c(r,n);w.default.lengthSq(s)>i?h(R.bevel,e,t,r,n,o,a):(p(t,s,[1,e],a),p(t,w.default.neg(s),[0,e],a),o||d(1,a))}function h(e,t,r,n,i,o,a){var s=c(n,i),u=i[0]*n[1]-i[1]*n[0]>0;u?(p(r,s,[1,t],a),p(r,w.default.neg(n),[0,t],a),o||d(1,a),e===R.bevel?g(r,w.default.neg(n),s,w.default.neg(i),[0,t],[1,t],[0,t],a):e===R.round&&m(r,w.default.neg(n),s,w.default.neg(i),[0,t],[1,t],[0,t],!1,a),p(r,s,[1,t],a),p(r,w.default.neg(i),[0,t],a)):(p(r,n,[1,t],a),p(r,w.default.neg(s),[0,t],a),o||d(1,a),e===R.bevel?g(r,n,w.default.neg(s),i,[1,t],[0,t],[1,t],a):e===R.round&&m(r,n,w.default.neg(s),i,[1,t],[0,t],[1,t],!1,a),p(r,i,[1,t],a),p(r,w.default.neg(s),[0,t],a))}function d(e,t){for(var r=t.vertex_data.vertex_elements,n=t.vertex_data.vertex_count,i=n-2*e-2,o=0;e>o;o++)r.push(i+2*o+2),r.push(i+2*o+1),r.push(i+2*o+0),r.push(i+2*o+2),r.push(i+2*o+3),r.push(i+2*o+1),t.geom_count+=2}function p(e,t,r,n){var i=n.vertex_template,o=n.vertex_data;_(i,e,r,t,n),o.addVertex(i)}function _(e,t,r,n,i){e[0]=t[0],e[1]=t[1],i.texcoord_index&&r&&(e[i.texcoord_index+0]=r[0]*i.texcoord_normalize,e[i.texcoord_index+1]=r[1]*i.texcoord_normalize),i.scaling_index&&(e[i.scaling_index+0]=n[0]*i.scaling_normalize,e[i.scaling_index+1]=n[1]*i.scaling_normalize,e[i.scaling_index+2]=i.half_width)}function m(e,t,r,n,i,o,a,s,u){for(var l=t[0]*n[1]-t[1]*n[0],c=w.default.dot(t,n),f=Math.atan2(l,c);f>=Math.PI;)f-=2*Math.PI;var h=y(f,u.half_width);if(!(1>h)){var d=u.vertex_data.vertex_count,_=u.vertex_data.vertex_elements;p(e,r,o,u),p(e,t,i,u);var m=t;if(void 0!==u.texcoord_index){var g;if(s){g=[];var v=w.default.sub(i,o)}else{g=w.default.set(i);var b=w.default.div(w.default.sub(a,i),h)}}for(var x=f/h,k=0;h>k;k++)m=w.default.rot(m,x),void 0!==u.texcoord_index&&(s?(v=w.default.rot(v,x),g[0]=v[0]+o[0],g[1]=v[1]*u.texcoord_width*u.v_scale+o[1]):g=w.default.add(g,b)),p(e,m,g,u),_.push(d+k+(l>0?2:1)),_.push(d),_.push(d+k+(l>0?1:2))}}function g(e,t,r,n,i,o,a,s){var u=s.vertex_data.vertex_count;p(e,r,o,s),p(e,t,i,s),p(e,n,a,s);var l=t[0]*n[1]-t[1]*n[0]>0,c=s.vertex_data.vertex_elements;l?(c.push(u+2),c.push(u+0),c.push(u+1)):(c.push(u+1),c.push(u+0),c.push(u+2))}function v(e,t,r,n,i,o){var a=w.default.neg(r);switch(n){case S.square:var s;i?(s=[r[1],-r[0]],p(e,w.default.add(r,s),[1,t],o),p(e,w.default.add(a,s),[0,t],o),t+=.5*o.texcoord_width*o.v_scale,p(e,r,[1,t],o),p(e,a,[0,t],o)):(s=[-r[1],r[0]],p(e,r,[1,t],o),p(e,a,[0,t],o),t+=.5*o.texcoord_width*o.v_scale,p(e,w.default.add(r,s),[1,t],o),p(e,w.default.add(a,s),[0,t],o)),d(1,o);break;case S.round:var u,l,c,f,h;i?(u=r,l=a,void 0!==o.texcoord_index&&(t+=.5*o.texcoord_width*o.v_scale,c=[1,t],f=[0,t],h=[.5,t])):(u=a,l=r,void 0!==o.texcoord_index&&(c=[0,t],f=[1,t],h=[.5,t])),m(e,u,E,l,c,h,f,!0,o);break;case S.butt:return}}function y(e,t){0>e&&(e=-e);var r=t>2*M.MIN_FAN_WIDTH?P(t/M.MIN_FAN_WIDTH):1;return Math.ceil(e/Math.PI*r)}function b(e,t){for(var r=[],n=0;n2&&void 0!==arguments[2]?arguments[2]:{};a(this,e),this.view=r,this.position=n.position,this.zoom=n.zoom}return u(e,[{key:"update",value:function(){}},{key:"setupProgram",value:function(){}},{key:"updateView",value:function(){if(this.position||this.zoom){var e={};this.position&&(e={lng:this.position[0],lat:this.position[1],zoom:this.position[2]}),this.zoom&&(e.zoom=this.zoom),this.view.setView(e)}}},{key:"setupMatrices",value:function(e,t){d.mat4.multiply(e.model_view32,this.view_matrix,e.model),t.uniform("Matrix4fv","u_modelView",e.model_view32),d.mat3.normalFromMat4(e.normal32,e.model_view32),d.mat3.invert(e.inverse_normal32,e.normal32),t.uniform("Matrix3fv","u_normalMatrix",e.normal32),t.uniform("Matrix3fv","u_inverseNormalMatrix",e.inverse_normal32)}}],[{key:"create",value:function(e,t,r){switch(r.type){case"isometric":return new m(e,t,r);case"flat":return new g(e,t,r);case"perspective":default:return new _(e,t,r)}}}]),e}();r.default=p;var _=function(e){function t(e,r){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};a(this,t);var o=i(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,r,n));return o.type="perspective",o.focal_length=n.focal_length,o.fov=n.fov,o.focal_length||o.fov||(o.focal_length=[[16,2],[17,2.5],[18,3],[19,4],[20,6]]),o.vanishing_point=n.vanishing_point||[0,0],o.vanishing_point=o.vanishing_point.map(parseFloat),o.vanishing_point_skew=[],o.position_meters=null,o.view_matrix=new Float64Array(16),o.projection_matrix=new Float32Array(16),h.default.replaceBlock("camera","\n uniform mat4 u_projection;\n uniform vec3 u_eye;\n uniform vec2 u_vanishing_point;\n\n void cameraProjection (inout vec4 position) {\n position = u_projection * position;\n }"),o}return o(t,e),u(t,[{key:"constrainCamera",value:function(e){var t=e.view_height,r=e.height,n=e.focal_length,i=e.fov;return r?(n=2*r/t,i=2*Math.atan(1/n)):(n?i=2*Math.atan(1/n):i&&(i=i*Math.PI/180,n=1/Math.tan(i/2)),r=t/2*n),{view_height:t,height:r,focal_length:n,fov:i}}},{key:"updateMatrices",value:function(){var e=this.view.size.css.height*this.view.meters_per_pixel,t=this.constrainCamera({view_height:e,focal_length:c.default.interpolate(this.view.zoom,this.focal_length),fov:c.default.interpolate(this.view.zoom,this.fov)}),r=t.height,n=t.fov,i=[this.view.center.meters.x,this.view.center.meters.y,r];this.position_meters=i,d.mat4.lookAt(this.view_matrix,d.vec3.fromValues(i[0],i[1],0),d.vec3.fromValues(i[0],i[1],-1),d.vec3.fromValues(0,1,0)),d.mat4.perspective(this.projection_matrix,n,this.view.aspect,1,2*r),this.vanishing_point_skew[0]=this.vanishing_point[0]/this.view.size.css.width,this.vanishing_point_skew[1]=this.vanishing_point[1]/this.view.size.css.height,this.projection_matrix[8]=2*-this.vanishing_point_skew[0],this.projection_matrix[9]=2*-this.vanishing_point_skew[1],d.mat4.translate(this.projection_matrix,this.projection_matrix,d.vec3.fromValues(e/2*this.view.aspect*2*-this.vanishing_point_skew[0],e/2*2*-this.vanishing_point_skew[1],0)),d.mat4.translate(this.projection_matrix,this.projection_matrix,d.vec3.fromValues(0,0,-r))}},{key:"update",value:function(){s(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"update",this).call(this),this.updateMatrices()}},{key:"setupProgram",value:function(e){e.uniform("Matrix4fv","u_projection",this.projection_matrix),e.uniform("3f","u_eye",[0,0,this.position_meters[2]]),e.uniform("2fv","u_vanishing_point",this.vanishing_point_skew)}}]),t}(p),m=function(e){function t(e,r){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};a(this,t);var o=i(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,r,n));return o.type="isometric",o.axis=n.axis||{x:0,y:1},2===o.axis.length&&(o.axis={x:o.axis[0],y:o.axis[1]}),o.position_meters=null,o.viewport_height=null,o.view_matrix=new Float64Array(16),o.projection_matrix=new Float32Array(16),h.default.replaceBlock("camera","\n uniform mat4 u_projection;\n uniform vec3 u_eye;\n uniform vec2 u_vanishing_point;\n\n void cameraProjection (inout vec4 position) {\n position = u_projection * position;\n // position.xy += position.z * u_isometric_axis;\n\n // Reverse z for depth buffer so up is negative,\n // and scale down values so objects higher than one screen height will not get clipped\n // pull forward slightly to avoid going past far clipping plane\n position.z = -position.z / 100. + 1. - 0.001;\n }"),o}return o(t,e),u(t,[{key:"update",value:function(){s(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"update",this).call(this),this.viewport_height=this.view.size.css.height*this.view.meters_per_pixel;var e=[this.view.center.meters.x,this.view.center.meters.y,this.viewport_height];this.position_meters=e,d.mat4.identity(this.view_matrix),d.mat4.translate(this.view_matrix,this.view_matrix,d.vec3.fromValues(-e[0],-e[1],0)),d.mat4.identity(this.projection_matrix),this.projection_matrix[8]=this.axis.x/this.view.aspect,this.projection_matrix[9]=this.axis.y,d.mat4.scale(this.projection_matrix,this.projection_matrix,d.vec3.fromValues(2/this.view.size.meters.x,2/this.view.size.meters.y,2/this.view.size.meters.y))}},{key:"setupProgram",value:function(e){e.uniform("Matrix4fv","u_projection",this.projection_matrix),e.uniform("3fv","u_eye",[0,0,this.viewport_height]),e.uniform("2fv","u_vanishing_point",[0,0])}}]),t}(p),g=function(e){function t(e,r){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};a(this,t);var o=i(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,r,n));return o.type="flat",o}return o(t,e),u(t,[{key:"update",value:function(){this.axis.x=0,this.axis.y=0,s(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"update",this).call(this)}}]),t}(m)},{"./gl/shader_program":207,"./utils/gl-matrix":257,"./utils/utils":267}],201:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n,i=function(){function e(e,t){var r=[],n=!0,i=!1,o=void 0;try{for(var a,s=e[Symbol.iterator]();!(n=(a=s.next()).done)&&(r.push(a.value),!t||r.length!==t);n=!0);}catch(u){i=!0,o=u}finally{try{!n&&s["return"]&&s["return"]()}finally{if(i)throw o}}return r}return function(t,r){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return e(t,r);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();r.default=n={},n.default_source_max_zoom=18,n.default_view_max_zoom=20,n.tile_size=256,n.half_circumference_meters=20037508.342789244,n.circumference_meters=2*n.half_circumference_meters,n.min_zoom_meters_per_pixel=n.circumference_meters/n.tile_size;var o=[];n.metersPerPixel=function(e){return o[e]=o[e]||n.min_zoom_meters_per_pixel/Math.pow(2,e),o[e]};var a=[];n.metersPerTile=function(e){return a[e]=a[e]||n.circumference_meters/Math.pow(2,e),a[e]},n.tile_scale=4096,n.units_per_pixel=n.tile_scale/n.tile_size,n.height_scale=16;var s=[];n.unitsPerMeter=function(e){return s[e]=s[e]||n.tile_scale/(n.tile_size*n.metersPerPixel(e)),s[e]},n.metersForTile=function(e){return{x:e.x*n.circumference_meters/Math.pow(2,e.z)-n.half_circumference_meters,y:-(e.y*n.circumference_meters/Math.pow(2,e.z)-n.half_circumference_meters)}},n.tileForMeters=function(e,t){var r=i(e,2),o=r[0],a=r[1];return{x:Math.floor((o+n.half_circumference_meters)/(n.circumference_meters/Math.pow(2,t))),y:Math.floor((-a+n.half_circumference_meters)/(n.circumference_meters/Math.pow(2,t))),z:t}},n.wrapTile=function(e){var t=e.x,r=e.y,n=e.z,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{x:!0,y:!1},o=(1<e.ne.x||t.ne.xe.ne.y||t.ne.ya;a++){var s=e[0][a];s[0]r&&(r=s[0]),s[1]>i&&(i=s[1])}return[t,n,r,i]},n.geometryType=function(e){return"Polygon"===e||"MultiPolygon"===e?"polygon":"LineString"===e||"MultiLineString"===e?"line":"Point"===e||"MultiPoint"===e?"point":void 0},n.centroid=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:!0;if(e&&0!==e.length){var r=0,n=0,i=0,o=e[0],a=o.length,s=void 0;t&&(s=o[0],o=o.map(function(e){return[e[0]-s[0],e[1]-s[1]]}));for(var u=0,l=a-1;a>u;l=u,u++){var c=o[u],f=o[l],h=c[1]*f[0]-f[1]*c[0];r+=(c[0]+f[0])*h,n+=(c[1]+f[1])*h,i+=3*h}var d=[r/i,n/i];return t&&(d[0]+=s[0],d[1]+=s[1]),d}},n.multiCentroid=function(e){for(var t=e.length,r=[0,0],i=0;in;n++){var i=e[n],o=e[n+1];t+=i[0]*o[1]-o[0]*i[1]}return t+=e[r-1][0]*e[0][1]-e[0][0]*e[r-1][1]},n.polygonRingArea=function(e){return Math.abs(n.signedPolygonRingAreaSum(e))/2},n.polygonArea=function(e){return e?n.polygonRingArea(e[0]):void 0},n.multiPolygonArea=function(e){for(var t=0,r=0;r0?"CW":0>t?"CCW":void 0}},{}],202:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n;r.default=n={},n.BYTE=5120,n.UNSIGNED_BYTE=5121,n.SHORT=5122,n.UNSIGNED_SHORT=5123,n.INT=5124,n.UNSIGNED_INT=5125,n.FLOAT=5126},{}],203:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n;r.default=n={};var i=0;n.getContext=function(e,t){var r=!1;null==e&&(e=document.createElement("canvas"),e.style.position="absolute",e.style.top=0,e.style.left=0,e.style.zIndex=-1,document.body.appendChild(e),r=!0);var o=e.getContext("webgl",t)||e.getContext("experimental-webgl",t);if(!o)throw new Error("Couldn't create WebGL context.");return o._tangram_id=i++,r?(n.resize(o,window.innerWidth,window.innerHeight,t.device_pixel_ratio),window.addEventListener("resize",function(){n.resize(o,window.innerWidth,window.innerHeight,t.device_pixel_ratio)})):n.resize(o,parseFloat(e.style.width),parseFloat(e.style.height),t.device_pixel_ratio),o},n.resize=function(e,t,r,n){n=n||window.devicePixelRatio||1,e.canvas.style.width=t+"px",e.canvas.style.height=r+"px",e.canvas.width=Math.round(t*n),e.canvas.height=Math.round(r*n),e.bindFramebuffer(e.FRAMEBUFFER,null),e.viewport(0,0,e.canvas.width,e.canvas.height)}},{}],204:[function(e,t,r){"use strict";function n(e,t){var r=i.filter(function(t){return t[0]===e})[0];return r=r&&r[1],r||(i.push([e,{}]),r=i[i.length-1][1]),r[t]||(r[t]=e.getExtension(t)),r[t]}Object.defineProperty(r,"__esModule",{value:!0}),r.default=n;var i=[]},{}],205:[function(e,t,r){"use strict";function n(e){if(Array.isArray(e)){for(var t=0,r=Array(e.length);t=2&&o.length<=4?t.push({type:"vec"+o.length,method:o.length+"fv",name:r,value:o,key:i,uniforms:e}):o.length>4&&t.push({type:"float[]",method:"1fv",name:r+"[0]",value:o,key:i,uniforms:e});else if("string"==typeof o[0])for(n=0;n=2&&o[0].length<=4)for(n=0;n=2&&t.length<=4?r="vec"+t.length:(r="float",n=t.length):"string"==typeof t[0]&&(r="sampler2D",n=t.length);else if("boolean"==typeof t)r="bool";else{if("string"!=typeof t)return;r="sampler2D"}var i="";return i+=r+" "+e,n&&(i+="["+n+"]"),i+=";\n"},i.defineUniform=function(e,t){var r=i.defineVariable(e,t);if(r)return"uniform "+r},i.isUniformDefined=function(e,t){var r=new RegExp("uniform[^;]+(?:{[\\s\\S]*})?[^;]*\\b"+e+"\\b","g");return t.match(r)?!0:!1},i.isSymbolReferenced=function(e,t){var r=new RegExp("\\b"+e+"\\b","g");return t.search(r)>=0?!0:!1},i.expandVec3=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,r=void 0;if(Array.isArray(e)){if(2!==e.length)return e;r=[].concat(n(e),[t]).map(parseFloat)}else r=[e,e,e].map(parseFloat);return r&&r.every(function(e){return"number"==typeof e&&!isNaN(e)})?r:void 0},i.expandVec4=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,r=void 0;if(Array.isArray(e)){if(3!==e.length)return e;r=[].concat(n(e),[t]).map(parseFloat)}else r=[e,e,e,t].map(parseFloat);return r&&r.every(function(e){return"number"==typeof e&&!isNaN(e)})?r:void 0}},{}],206:[function(e,t,r){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(r,"__esModule",{value:!0});var i=function(){function e(e,t){for(var r=0;r0?"precision highp float;\n":"precision mediump float;\n",i.TANGRAM_VERTEX_SHADER=!0,i.TANGRAM_FRAGMENT_SHADER=!1,this.computed_vertex_source=f+e.buildDefineString(i)+this.computed_vertex_source,i.TANGRAM_VERTEX_SHADER=!1,i.TANGRAM_FRAGMENT_SHADER=!0,this.computed_fragment_source=e.buildExtensionString(n)+f+e.buildDefineString(i)+this.computed_fragment_source,this.computed_vertex_source=this.computed_vertex_source.replace(w,""),this.computed_fragment_source=this.computed_fragment_source.replace(w,"");try{this.program=e.updateProgram(this.gl,this.program,this.computed_vertex_source,this.computed_fragment_source),this.compiled=!0,this.compiling=!1}catch(d){throw this.program=null,this.compiled=!1,this.compiling=!1,this.error=d,("vertex"===d.type||"fragment"===d.type)&&(this.shader_errors=d.errors,this.shader_errors.forEach(function(e){e.type=d.type,e.block=t.block(d.type,e.line)})),d}this.computed_vertex_source=null,this.computed_fragment_source=null,this.use(),this.refreshUniforms(),this.refreshAttributes()}},{key:"buildDefineList",value:function(){var t,r={};for(t in e.defines)r[t]=e.defines[t];for(t in this.defines)r[t]=this.defines[t];return r}},{key:"buildShaderBlockList",value:function(){var t=void 0,r={};for(t in e.blocks)if(r[t]=[],Array.isArray(e.blocks[t])){var n;(n=r[t]).push.apply(n,i(e.blocks[t].map(function(e,r){return{key:t,source:e,num:r,scope:"ShaderProgram"}})))}else r[t]=[{key:t,source:e.blocks[t],num:0,scope:"ShaderProgram"}];for(t in this.blocks)if(r[t]=r[t]||[],Array.isArray(this.blocks[t]))for(var o=this.block_scopes&&this.block_scopes[t]||[],a=null,s=0,u=0;u0&&(this.computed_vertex_source=i.join("\n")+this.computed_vertex_source),o.length>0&&(this.computed_fragment_source=o.join("\n")+this.computed_fragment_source)}}},{key:"setUniforms",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:!0;if(this.compiled){t&&(this.texture_unit=0);for(var r=c.default.parseUniforms(e),n=0;ni&&i1?r={scope:a[1],name:a[2],num:a[3]}:(a=o.match(/\/\/ tangram-block-end: ([A-Za-z0-9_-]+), ([A-Za-z0-9_-]+), (\d+)/),a&&a.length>1&&(r=null)),r&&(r.line=null==r.line?-1:r.line+1,r.source=o)}return r}},{key:"checkExtensions",value:function(){var e=this,t=[];return this.extensions.forEach(function(r){var n=p.default(e.gl,r),i="TANGRAM_EXTENSION_"+r;e.defines[i]=null!=n,n?t.push(r):u.default("debug","Could not enable extension '"+r+"'")}),t}}]),e}();r.default=k,k.id=0,k.current=null,k.defines={},k.blocks={},k.reset=function(){k.programs_by_source={},k.shaders_by_source={}},k.reset(),k.buildDefineString=function(e){var t="";for(var r in e)null!=e[r]&&e[r]!==!1&&(t+="boolean"==typeof e[r]&&e[r]===!0?"#define "+r+"\n":"number"==typeof e[r]&&Math.floor(e[r])===e[r]?"#define "+r+" "+e[r].toFixed(1)+"\n":"#define "+r+" "+e[r]+"\n");return t},k.buildExtensionString=function(e){e=e||[];var t="";return e.forEach(function(e){t+="#ifdef GL_"+e+"\n#extension GL_"+e+" : enable\n#endif\n"}),t},k.addBlock=function(e){var t;k.blocks[e]=k.blocks[e]||[];for(var r=arguments.length,n=Array(r>1?r-1:0),i=1;r>i;i++)n[i-1]=arguments[i];(t=k.blocks[e]).push.apply(t,n)},k.removeBlock=function(e){k.blocks[e]=[]},k.replaceBlock=function(e){k.removeBlock(e);for(var t=arguments.length,r=Array(t>1?t-1:0),n=1;t>n;n++)r[n-1]=arguments[n];k.addBlock.apply(k,[e].concat(r))},k.updateProgram=function(e,t,r,n){var i=m.default(e._tangram_id+"::"+r+"::"+n);if(k.programs_by_source[i])return u.default("trace","Reusing identical source GL program object"),k.programs_by_source[i];var o=k.createShader(e,r,e.VERTEX_SHADER),a=k.createShader(e,n,e.FRAGMENT_SHADER);if(e.useProgram(null),null!=t)for(var s=e.getAttachedShaders(t),l=0;l2&&void 0!==arguments[2]?arguments[2]:{};i(this,e),this.gl=t,this.texture=t.createTexture(),this.texture&&(this.valid=!0),this.bind(),this.name=r,this.retain_count=0,this.config_type=null,this.loading=null,this.loaded=!1,this.filtering=n.filtering,this.sprites=n.sprites,this.texcoords={},this.sizes={},this.setData(1,1,new Uint8Array([0,0,0,255]),{filtering:"nearest"}),e.textures[this.name]&&(this.retain_count=e.textures[this.name].retain_count,e.textures[this.name].retain_count=0,e.textures[this.name].destroy()),e.textures[this.name]=this,e.texture_configs[this.name]=JSON.stringify(Object.assign({name:r},n)),this.load(n),s.default("trace","creating Texture "+this.name)}return o(e,[{key:"destroy",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=t.force;return this.retain_count>0&&!r?void s.default("error","Texture '"+this.name+"': destroying texture with retain count of '"+this.retain_count+"'"):void(this.valid&&(this.gl.deleteTexture(this.texture),this.texture=null,delete this.data,this.data=null,delete e.textures[this.name],delete e.texture_configs[this.name],this.valid=!1,s.default("trace","destroying Texture "+this.name)))}},{key:"retain",value:function(){this.retain_count++}},{key:"release",value:function(){this.retain_count<=0&&s.default("error","Texture '"+this.name+"': releasing texture with retain count of '"+this.retain_count+"'"),this.retain_count--,this.retain_count<=0&&this.destroy()}},{key:"bind",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;this.valid&&(e.activeUnit!==t&&(this.gl.activeTexture(this.gl.TEXTURE0+t),e.activeUnit=t,e.boundTexture=null),e.boundTexture!==this.texture&&(this.gl.bindTexture(this.gl.TEXTURE_2D,this.texture),e.boundTexture=this.texture))}},{key:"load",value:function(e){var t=this;return e?(this.loading=null,"string"==typeof e.url?(this.config_type="url",this.setUrl(e.url,e)):e.element?(this.config_type="element",this.setElement(e.element,e)):e.data&&e.width&&e.height&&(this.config_type="data",this.setData(e.width,e.height,e.data,e)),this.loading=this.loading&&this.loading.then(function(){return t.calculateSprites(),t})||Promise.resolve(this),this.loading):this.loading||Promise.resolve(this)}},{key:"setUrl",value:function(t){var r=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.valid?(this.url=t,this.loading=new Promise(function(t){var i=new Image;i.onload=function(){try{r.setElement(i,n)}catch(o){r.loaded=!1,s.default("warn","Texture '"+r.name+"': failed to load url: '"+r.url+"'",o,n),e.trigger("warning",{message:"Failed to load texture from "+r.url,error:o,texture:n})}r.loaded=!0,t(r)},i.onerror=function(i){r.loaded=!1,s.default("warn","Texture '"+r.name+"': failed to load url: '"+r.url+"'",i,n),e.trigger("warning",{message:"Failed to load texture from "+r.url,error:i,texture:n}),t(r)},l.default.isSafari()&&"data:"===r.url.slice(0,5)||(i.crossOrigin="anonymous"),i.src=r.url}),this.loading):void 0}},{key:"setData",value:function(e,t,r){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return this.width=e,this.height=t,Array.isArray(r)&&(r=new Uint8Array(r)),this.update(r,n),this.setFiltering(n),this.loaded=!0,this.loading=Promise.resolve(this),this.loading}},{key:"setElement",value:function(t,r){var n=t;if("string"==typeof t&&(t=document.querySelector(t)),t instanceof HTMLCanvasElement||t instanceof HTMLImageElement||t instanceof HTMLVideoElement)this.update(t,r),this.setFiltering(r);else{this.loaded=!1;var i="the 'element' parameter (`element: "+JSON.stringify(n)+"`) must be a CSS ";i+="selector string, or a , or