public async Task <MatchResult> RunMatch(MatchConfig config, bool loadScene = true)
        {
            Debug.Log($"Running Match. Config: {config}");
            await DataLoader.LoadTask.Task;
            Task sceneLoad = Task.CompletedTask;

            if (loadScene)
            {
                var stage = Registry.Get <SceneData>().Get(config.StageID);
                Assert.IsTrue(stage != null && stage.Type == SceneType.Stage);
                await stage.GameScene.LoadAsync();
            }
            var additionalScenes = Config.Get <SceneConfig>().AdditionalStageScenes;
            await Task.WhenAll(additionalScenes.Select(s => s.LoadAsync(LoadSceneMode.Additive)));

            var matchManager = MatchManager.Instance;

            matchManager.enabled = false;
            matchManager.Config  = config;
            try {
                await LoadingScreen.Await(InitializeMatch(matchManager, config));

                await LoadingScreen.AwaitAll();
            } catch (Exception e) {
                Debug.LogException(e);
            }
            matchManager.enabled = true;
            return(await matchManager.RunMatch());
        }