public static bool OpenPrefab(GameObject prefab, PrefabSandboxSetupCompleteCallback callback) {
			string assetPath = AssetDatabase.GetAssetPath(prefab);
			string guid = AssetDatabase.AssetPathToGUID(assetPath);

			bool alreadyEditing = (_data != null && _data.PrefabGuid == guid);
			_setupCompletionCallback = callback;

			if (prefab != null && assetPath != null && PathUtil.IsPrefab(assetPath) && !alreadyEditing) {
				_data = new PrefabSandboxData();
				_data.PrefabGuid = guid;
				_data.PrefabPath = assetPath;
				_data.PrefabAsset = prefab;

				PrefabSandbox.SetupSandbox();
				return true;
			} else {
				if (_setupCompletionCallback != null) {
					_setupCompletionCallback(success: false);
				}
				return false;
			}
		}
		// PRAGMA MARK - Public Interface
		public static bool OpenPrefab(string guid, PrefabSandboxSetupCompleteCallback callback) {
			string assetPath = AssetDatabase.GUIDToAssetPath(guid);
			GameObject prefab = AssetDatabase.LoadAssetAtPath(assetPath, typeof(GameObject)) as GameObject;

			return PrefabSandbox.OpenPrefab(prefab, callback);
		}