{
	"auto_complete":
	{
		"selected_items":
		[
			[
				"child",
				"childBBox"
			],
			[
				"splt",
				"splitIndex"
			]
		]
	},
	"buffers":
	[
		{
			"file": "rbush.js",
			"settings":
			{
				"buffer_size": 18214,
				"line_ending": "Unix"
			}
		},
		{
			"contents": "'use strict';\n\nfunction rbush(maxEntries) {\n    if (!(this instanceof rbush)) return new rbush(maxEntries);\n\n    // max entries in a node is 9 by default; min node fill is 40% for best performance\n    this._maxEntries = Math.max(4, maxEntries || 9);\n    this._minEntries = Math.max(2, Math.ceil(this._maxEntries * 0.4));\n\n    this.clear();\n}\n\nrbush.prototype = {\n    clear: function () {\n        this.data = createNode([]);\n        return this;\n    },\n\n    load: function (items) {\n        this._build(items, 0, data.length - 1, 0);\n    },\n\n    _build: function (items, left, right, height) {\n\n        this.items = items;\n\n        var indices = [];\n        for (var i = 0; i < items.length; i++) indices.push(i);\n\n        var N = right - left + 1,\n            M = this._maxEntries,\n            node;\n\n        if (N <= M) {\n            // reached leaf level; return leaf\n            node = createNode(indices.slice(left, right + 1));\n            calcBBox(node, this.toBBox);\n            return node;\n        }\n\n        if (!height) {\n            // target height of the bulk-loaded tree\n            height = Math.ceil(Math.log(N) / Math.log(M));\n\n            // target number of root entries to maximize storage utilization\n            M = Math.ceil(N / Math.pow(M, height - 1));\n        }\n\n        node = createNode([]);\n        node.height = height;\n        node.leaf = false;\n\n        // split the items into M mostly square tiles\n\n        var N2 = Math.ceil(N / M),\n            N1 = N2 * Math.ceil(Math.sqrt(M)),\n            i, j, right2, right3;\n\n        this._multiSelect(indices, left, right, N1, this.compareMinX);\n\n        for (i = left; i <= right; i += N1) {\n\n            right2 = Math.min(i + N1 - 1, right);\n\n            this._multiSelect(items, i, right2, N2, this.compareMinY);\n\n            for (j = i; j <= right2; j += N2) {\n\n                right3 = Math.min(j + N2 - 1, right2);\n\n                // pack each entry recursively\n                node.children.push(this._build(items, j, right3, height - 1));\n            }\n        }\n\n        calcBBox(node, this.toBBox);\n\n        return node;\n    }\n};\n\nfunction calcBBox(node, toBBox) {\n    setEmptyBBox(node);\n\n    for (var i = 0; i < node.children.length; i++) {\n        var child = node.children[i];\n        extend(node, node.leaf ? toBBox(child) : child);\n    }\n\n    return bbox;\n\n}\n\nfunction createNode(children) {\n    return {\n        children: children,\n        height: 1,\n        leaf: true,\n        minX: Infinity,\n        minY: Infinity,\n        maxX: -Infinity,\n        maxY: -Infinity\n    };\n}\n\nfunction extend(a, b) {\n    a.minX = Math.min(a.minX, b.minX);\n    a.minY = Math.min(a.minY, b.minY);\n    a.maxX = Math.max(a.maxX, b.maxX);\n    a.maxY = Math.max(a.maxY, b.maxY);\n    return a;\n}\n\nfunction setEmptyBBox(bbox) {\n    bbox.minX = Infinity;\n    bbox.minY = Infinity;\n    bbox.maxX = -Infinity;\n    bbox.maxY = -Infinity;\n    return bbox;\n}\n\nfunction contains(a, b) {\n    return a.minX <= b.minX &&\n           a.minY <= b.minY &&\n           b.maxX <= a.maxX &&\n           b.maxY <= a.maxY;\n}\n\nfunction intersects(a, b) {\n    return b.minX <= a.maxX &&\n           b.minY <= a.maxY &&\n           b.maxX >= a.minX &&\n           b.maxY >= a.minY;\n}\n\n// sort an array so that items come in groups of n unsorted items, with groups sorted between each other;\n// combines selection algorithm with binary divide & conquer approach\n\nfunction multiSelect(arr, left, right, n, compare) {\n    var stack = [left, right],\n        mid;\n\n    while (stack.length) {\n        right = stack.pop();\n        left = stack.pop();\n\n        if (right - left <= n) continue;\n\n        mid = left + Math.ceil((right - left) / n / 2) * n;\n        select(arr, left, right, mid, compare);\n\n        stack.push(left, mid, mid, right);\n    }\n}\n\n// Floyd-Rivest selection algorithm:\n// sort an array between left and right (inclusive) so that the smallest k elements come first (unordered)\nfunction select(arr, left, right, k, compare) {\n    var n, i, z, s, sd, newLeft, newRight, t, j;\n\n    while (right > left) {\n        if (right - left > 600) {\n            n = right - left + 1;\n            i = k - left + 1;\n            z = Math.log(n);\n            s = 0.5 * Math.exp(2 * z / 3);\n            sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (i - n / 2 < 0 ? -1 : 1);\n            newLeft = Math.max(left, Math.floor(k - i * s / n + sd));\n            newRight = Math.min(right, Math.floor(k + (n - i) * s / n + sd));\n            select(arr, newLeft, newRight, k, compare);\n        }\n\n        t = arr[k];\n        i = left;\n        j = right;\n\n        swap(arr, left, k);\n        if (compare(arr[right], t) > 0) swap(arr, left, right);\n\n        while (i < j) {\n            swap(arr, i, j);\n            i++;\n            j--;\n            while (compare(arr[i], t) < 0) i++;\n            while (compare(arr[j], t) > 0) j--;\n        }\n\n        if (compare(arr[left], t) === 0) swap(arr, left, j);\n        else {\n            j++;\n            swap(arr, j, right);\n        }\n\n        if (j <= k) left = j + 1;\n        if (k <= j) right = j - 1;\n    }\n}\n\nfunction swap(arr, i, j) {\n    var tmp = arr[i];\n    arr[i] = arr[j];\n    arr[j] = tmp;\n}\n\n",
			"file": "rbush-flat.js",
			"file_size": 5067,
			"file_write_time": 131018363430000000,
			"settings":
			{
				"buffer_size": 5179,
				"line_ending": "Unix"
			}
		},
		{
			"file": "bench/bulk.bench.js",
			"settings":
			{
				"buffer_size": 477,
				"line_ending": "Unix"
			}
		},
		{
			"file": "rbuf.proto",
			"settings":
			{
				"buffer_size": 238,
				"line_ending": "Unix"
			}
		},
		{
			"file": "viz/viz-cluster.html",
			"settings":
			{
				"buffer_size": 1789,
				"line_ending": "Unix"
			}
		},
		{
			"file": "README.md",
			"settings":
			{
				"buffer_size": 8587,
				"line_ending": "Unix"
			}
		},
		{
			"file": "bench/perf.js",
			"settings":
			{
				"buffer_size": 3452,
				"line_ending": "Unix"
			}
		},
		{
			"file": ".travis.yml",
			"settings":
			{
				"buffer_size": 38,
				"line_ending": "Unix"
			}
		},
		{
			"file": "test/test.js",
			"settings":
			{
				"buffer_size": 10717,
				"line_ending": "Unix"
			}
		}
	],
	"build_system": "",
	"build_system_choices":
	[
	],
	"build_varint": "",
	"command_palette":
	{
		"height": 247.0,
		"last_filter": "list pac",
		"selected_items":
		[
			[
				"list pac",
				"Package Control: List Packages"
			],
			[
				"install ",
				"Package Control: Install Package"
			],
			[
				"packa",
				"Package Control: Install Package"
			]
		],
		"width": 431.0
	},
	"console":
	{
		"height": 126.0,
		"history":
		[
			"import urllib.request,os,hashlib; h = 'eb2297e1a458f27d836c04bb0cbaf282' + 'd0e7a3098092775ccb37ca9d6b2e4b7d'; pf = 'Package Control.sublime-package'; ipp = sublime.installed_packages_path(); urllib.request.install_opener( urllib.request.build_opener( urllib.request.ProxyHandler()) ); by = urllib.request.urlopen( 'http://packagecontrol.io/' + pf.replace(' ', '%20')).read(); dh = hashlib.sha256(by).hexdigest(); print('Error validating download (got %s instead of %s), please try manual install' % (dh, h)) if dh != h else open(os.path.join( ipp, pf), 'wb' ).write(by)"
		]
	},
	"distraction_free":
	{
		"menu_visible": true,
		"show_minimap": false,
		"show_open_files": false,
		"show_tabs": false,
		"side_bar_visible": false,
		"status_bar_visible": false
	},
	"expanded_folders":
	[
		"/Users/mourner/projects/rbush",
		"/Users/mourner/projects/rbush/bench",
		"/Users/mourner/projects/rbush/viz"
	],
	"file_history":
	[
		"/Users/mourner/.bash_profile",
		"/usr/local/Library/Formula/node.rb",
		"/Users/mourner/Library/Application Support/Sublime Text 3/Packages/User/Preferences.sublime-settings",
		"/Users/mourner/.gitignore"
	],
	"find":
	{
		"height": 48.0
	},
	"find_in_files":
	{
		"height": 0.0,
		"where_history":
		[
		]
	},
	"find_state":
	{
		"case_sensitive": false,
		"find_history":
		[
			"_insert",
			"clear",
			"createNode",
			"x: ",
			"y:",
			".y",
			".x",
			".y2",
			".x2",
			".x",
			"bbox",
			"search",
			"compareNodeMinY",
			"tobbox",
			"intersects",
			"bbox",
			".x",
			"x1",
			"indexOf",
			"splice",
			"zoomanim",
			"_animateZoom",
			"zoom",
			"3_1",
			"_1",
			"0.12",
			"foo",
			"asdasdasd",
			"fadeAnimation"
		],
		"highlight": true,
		"in_selection": false,
		"preserve_case": false,
		"regex": false,
		"replace_history":
		[
		],
		"reverse": false,
		"show_context": true,
		"use_buffer2": true,
		"whole_word": false,
		"wrap": true
	},
	"groups":
	[
		{
			"selected": 5,
			"sheets":
			[
				{
					"buffer": 0,
					"file": "rbush.js",
					"semi_transient": false,
					"settings":
					{
						"buffer_size": 18214,
						"regions":
						{
						},
						"selection":
						[
							[
								0,
								0
							]
						],
						"settings":
						{
							"syntax": "Packages/JavaScript/JavaScript.tmLanguage",
							"tab_size": 4,
							"translate_tabs_to_spaces": true
						},
						"translation.x": 0.0,
						"translation.y": 9605.0,
						"zoom_level": 1.0
					},
					"stack_index": 3,
					"type": "text"
				},
				{
					"buffer": 1,
					"file": "rbush-flat.js",
					"semi_transient": false,
					"settings":
					{
						"buffer_size": 5179,
						"regions":
						{
						},
						"selection":
						[
							[
								2289,
								2322
							]
						],
						"settings":
						{
							"open_with_edit": true,
							"syntax": "Packages/JavaScript/JavaScript.sublime-syntax",
							"tab_size": 4,
							"translate_tabs_to_spaces": true
						},
						"translation.x": 0.0,
						"translation.y": 0.0,
						"zoom_level": 1.0
					},
					"stack_index": 5,
					"type": "text"
				},
				{
					"buffer": 2,
					"file": "bench/bulk.bench.js",
					"semi_transient": false,
					"settings":
					{
						"buffer_size": 477,
						"regions":
						{
						},
						"selection":
						[
							[
								0,
								0
							]
						],
						"settings":
						{
							"syntax": "Packages/JavaScript/JavaScript.sublime-syntax"
						},
						"translation.x": 0.0,
						"translation.y": 0.0,
						"zoom_level": 1.0
					},
					"stack_index": 4,
					"type": "text"
				},
				{
					"buffer": 3,
					"file": "rbuf.proto",
					"semi_transient": false,
					"settings":
					{
						"buffer_size": 238,
						"regions":
						{
						},
						"selection":
						[
							[
								238,
								238
							]
						],
						"settings":
						{
							"auto_name": "",
							"syntax": "Packages/Protocol Buffer Syntax/Protobuf.tmLanguage"
						},
						"translation.x": 0.0,
						"translation.y": 0.0,
						"zoom_level": 1.0
					},
					"stack_index": 6,
					"type": "text"
				},
				{
					"buffer": 4,
					"file": "viz/viz-cluster.html",
					"semi_transient": false,
					"settings":
					{
						"buffer_size": 1789,
						"regions":
						{
						},
						"selection":
						[
							[
								348,
								348
							]
						],
						"settings":
						{
							"syntax": "Packages/HTML/HTML.sublime-syntax",
							"tab_size": 4,
							"translate_tabs_to_spaces": true
						},
						"translation.x": 0.0,
						"translation.y": 0.0,
						"zoom_level": 1.0
					},
					"stack_index": 7,
					"type": "text"
				},
				{
					"buffer": 5,
					"file": "README.md",
					"semi_transient": false,
					"settings":
					{
						"buffer_size": 8587,
						"regions":
						{
						},
						"selection":
						[
							[
								0,
								0
							]
						],
						"settings":
						{
							"syntax": "Packages/Markdown/Markdown.tmLanguage"
						},
						"translation.x": 0.0,
						"translation.y": 0.0,
						"zoom_level": 1.0
					},
					"stack_index": 0,
					"type": "text"
				},
				{
					"buffer": 6,
					"file": "bench/perf.js",
					"semi_transient": false,
					"settings":
					{
						"buffer_size": 3452,
						"regions":
						{
						},
						"selection":
						[
							[
								113,
								120
							]
						],
						"settings":
						{
							"syntax": "Packages/JavaScript/JavaScript.sublime-syntax",
							"tab_size": 4,
							"translate_tabs_to_spaces": true
						},
						"translation.x": 0.0,
						"translation.y": 547.0,
						"zoom_level": 1.0
					},
					"stack_index": 2,
					"type": "text"
				},
				{
					"buffer": 7,
					"file": ".travis.yml",
					"semi_transient": true,
					"settings":
					{
						"buffer_size": 38,
						"regions":
						{
						},
						"selection":
						[
							[
								0,
								38
							]
						],
						"settings":
						{
							"syntax": "Packages/YAML/YAML.sublime-syntax"
						},
						"translation.x": 0.0,
						"translation.y": 0.0,
						"zoom_level": 1.0
					},
					"stack_index": 1,
					"type": "text"
				},
				{
					"buffer": 8,
					"file": "test/test.js",
					"semi_transient": false,
					"settings":
					{
						"buffer_size": 10717,
						"regions":
						{
						},
						"selection":
						[
							[
								0,
								0
							]
						],
						"settings":
						{
							"syntax": "Packages/JavaScript/JavaScript.sublime-syntax",
							"tab_size": 4,
							"translate_tabs_to_spaces": true
						},
						"translation.x": 0.0,
						"translation.y": 841.0,
						"zoom_level": 1.0
					},
					"stack_index": 8,
					"type": "text"
				}
			]
		}
	],
	"incremental_find":
	{
		"height": 23.0
	},
	"input":
	{
		"height": 34.0
	},
	"layout":
	{
		"cells":
		[
			[
				0,
				0,
				1,
				1
			]
		],
		"cols":
		[
			0.0,
			1.0
		],
		"rows":
		[
			0.0,
			1.0
		]
	},
	"menu_visible": true,
	"output.find_results":
	{
		"height": 0.0
	},
	"pinned_build_system": "",
	"project": "rbush.sublime-project",
	"replace":
	{
		"height": 42.0
	},
	"save_all_on_build": true,
	"select_file":
	{
		"height": 0.0,
		"last_filter": "",
		"selected_items":
		[
			[
				"grid",
				"src/layer/tile/GridLayer.js"
			],
			[
				"marker",
				"src/layer/marker/Marker.js"
			],
			[
				"render",
				"src/layer/vector/Renderer.js"
			],
			[
				"map",
				"src/map/Map.js"
			]
		],
		"width": 0.0
	},
	"select_project":
	{
		"height": 500.0,
		"last_filter": "",
		"selected_items":
		[
			[
				"",
				"~/projects/mapbox-gl-js/mapbox-gl-js.sublime-project"
			],
			[
				"geoj",
				"~/projects/geojson-vt/geojson-vt.sublime-project"
			],
			[
				"ear",
				"~/projects/earcut/earcut.sublime-project"
			]
		],
		"width": 380.0
	},
	"select_symbol":
	{
		"height": 0.0,
		"last_filter": "",
		"selected_items":
		[
		],
		"width": 0.0
	},
	"selected_group": 0,
	"settings":
	{
	},
	"show_minimap": true,
	"show_open_files": false,
	"show_tabs": true,
	"side_bar_visible": true,
	"side_bar_width": 249.0,
	"status_bar_visible": true,
	"template_settings":
	{
	}
}
