{"action":"created","comment":{"url":"https://api.github.com/repos/spatialos/UnrealGDK/pulls/comments/206946928","pull_request_review_id":142459306,"id":206946928,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIwNjk0NjkyOA==","diff_hunk":"@@ -860,16 +866,136 @@ bool USpatialInterop::IsSingletonClass(UClass* Class)\n \treturn false;\n }\n \n-NameToEntityIdMap* USpatialInterop::GetSingletonNameToEntityId() const\n+improbable::unreal::GlobalStateManagerData* USpatialInterop::GetGlobalStateManagerData() const\n {\n \tTSharedPtr<worker::View> View = SpatialOSInstance->GetView().Pin();\n \tauto It = View->Entities.find(SpatialConstants::GLOBAL_STATE_MANAGER);\n \n \tif (It != View->Entities.end())\n \t{\n \t\timprobable::unreal::GlobalStateManagerData* GSM = It->second.Get<improbable::unreal::GlobalStateManager>().data();\n-\t\treturn &(GSM->singleton_name_to_entity_id());\n+\t\treturn GSM;\n \t}\n \n \treturn nullptr;\n }\n+\n+NameToEntityIdMap* USpatialInterop::GetSingletonNameToEntityId() const\n+{\n+\timprobable::unreal::GlobalStateManagerData* GSM = GetGlobalStateManagerData();\n+\n+\tif (GSM == nullptr) return nullptr;\n+\n+\treturn &(GSM->singleton_name_to_entity_id());\n+}\n+\n+EntityIdToPathMap* USpatialInterop::GetEntityIdToReplicatedStablyNamedPath() const\n+{\n+\timprobable::unreal::GlobalStateManagerData* GSM = GetGlobalStateManagerData();\n+\n+\tif (GSM == nullptr) return nullptr;\n+\n+\treturn &(GSM->entity_id_to_replicated_stably_named_path());\n+}\n+\n+void USpatialInterop::ReserveReplicatedStablyNamedActorChannel(USpatialActorChannel* Channel)\n+{\n+\tReplicatedStablyNamedActorChannelQueue.Add(Channel);\n+\n+\tif (bCanSpawnReplicatedStablyNamedActors)\n+\t{\n+\t\tReserveReplicatedStablyNamedActors();\n+\t}\n+}\n+\n+void USpatialInterop::UnreserveReplicatedStablyNamedActor(AActor* Actor)\n+{\n+\t// Slightly inefficient linear search, could use a hashmap\n+\tUSpatialActorChannel* Channel = nullptr;\n+\tfor (auto& It : ReplicatedStablyNamedActorChannelQueue)\n+\t{\n+\t\tif (It->Actor == Actor) {\n+\t\t\tChannel = It;\n+\t\t\tbreak;\n+\t\t}\n+\t}\n+\n+\tif (Channel != nullptr) {\n+\t\tReplicatedStablyNamedActorChannelQueue.Remove(Channel);\n+\t}\n+}\n+\n+void USpatialInterop::AddReplicatedStablyNamedActorToGSM(const FEntityId& EntityId, AActor* Actor)\n+{\n+\tEntityIdToPathMap& EntityIdToReplicatedStablyNamedPathMap = *GetEntityIdToReplicatedStablyNamedPath();\n+\t// If the map already has the entity id, meaning the actor was already spawned, return early\n+\tif (EntityIdToReplicatedStablyNamedPathMap.count(EntityId.ToSpatialEntityId()) != 0) return;\n+\n+\tstd::string Path = TCHAR_TO_UTF8(*Actor->GetPathName(Actor->GetWorld()));\n+\tEntityIdToReplicatedStablyNamedPathMap.emplace(EntityId.ToSpatialEntityId(), Path);\n+\n+\timprobable::unreal::GlobalStateManager::Update Update;\n+\tUpdate.set_entity_id_to_replicated_stably_named_path(EntityIdToReplicatedStablyNamedPathMap);\n+\n+\tTSharedPtr<worker::Connection> Connection = SpatialOSInstance->GetConnection().Pin();\n+\tConnection->SendComponentUpdate<improbable::unreal::GlobalStateManager>(worker::EntityId((long)SpatialConstants::GLOBAL_STATE_MANAGER), Update);\n+}\n+\n+void USpatialInterop::ReserveReplicatedStablyNamedActors()\n+{\n+\tbCanSpawnReplicatedStablyNamedActors = true;\n+\tEntityIdToPathMap& EntityIdToReplicatedStablyNamedPath = *GetEntityIdToReplicatedStablyNamedPath();\n+\n+\tfor (USpatialActorChannel* Channel : ReplicatedStablyNamedActorChannelQueue)\n+\t{\n+\t\tstd::string Path = TCHAR_TO_UTF8(*Channel->Actor->GetPathName(Channel->Actor->GetWorld()));\n+\n+\t\t// Inefficient, check if we have already spawned this actor\n+\t\tbool Found = false;\n+\t\tfor (const auto& Pair : EntityIdToReplicatedStablyNamedPath)\n+\t\t{\n+\t\t\tif (Pair.second == Path)\n+\t\t\t{\n+\t\t\t\tFound = true;\n+\t\t\t\tChannel->RegisterEntityId(FEntityId{ Pair.first });\n+\t\t\t\tbreak;\n+\t\t\t}\n+\t\t}\n+\t\tif (Found)\n+\t\t{\n+\t\t\tcontinue;\n+\t\t}\n+\n+\t\tChannel->SendReserveEntityIdRequest();\n+\t}\n+\n+\tReplicatedStablyNamedActorChannelQueue.Empty();\n+}\n+\n+void USpatialInterop::DeleteIrrelevantReplicatedStablyNamedActors(const EntityIdToPathMap& EntityIdToReplicatedStablyNamedPath)\n+{\n+\tfor (auto& Pair : EntityIdToReplicatedStablyNamedPath)\n+\t{\n+\t\tFString FullPath = UTF8_TO_TCHAR(Pair.second.c_str());\n+\t\tAActor* Actor = FindObject<AActor>(GetWorld(), *FullPath);\n+\t\tworker::EntityId EntityId = Pair.first;\n+\n+\t\tif (Actor != nullptr && ReplicatedStablyNamedActorTimeoutMap.Find(Actor) == nullptr)\n+\t\t{\n+\t\t\tFTimerHandle RetryTimer;\n+\t\t\tFTimerDelegate TimerCallback;\n+\t\t\tTimerCallback.BindLambda([Actor, EntityId, this] {\n+\t\t\t\tif (Actor != nullptr && Actor->IsFullNameStableForNetworking() && !PackageMap->GetNetGUIDFromEntityId(EntityId).IsValid())\n+\t\t\t\t{\n+\t\t\t\t\tUE_LOG(LogSpatialGDKInterop, Log, TEXT(\"Timed out (deleted) replicated stably named actor: %s\"), *Actor->GetName());\n+\n+\t\t\t\t\tStartIgnoringAuthoritativeDestruction();","path":"Source/SpatialGDK/Private/SpatialInterop.cpp","position":null,"original_position":156,"commit_id":"6559cac6522ff998d75ad58cd51faa5f540c2ec4","original_commit_id":"fe2ae6e69d0f8213577d5841315a86e48dcd97ec","user":{"login":"mironec","id":2778498,"node_id":"MDQ6VXNlcjI3Nzg0OTg=","avatar_url":"https://avatars1.githubusercontent.com/u/2778498?v=4","gravatar_id":"","url":"https://api.github.com/users/mironec","html_url":"https://github.com/mironec","followers_url":"https://api.github.com/users/mironec/followers","following_url":"https://api.github.com/users/mironec/following{/other_user}","gists_url":"https://api.github.com/users/mironec/gists{/gist_id}","starred_url":"https://api.github.com/users/mironec/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mironec/subscriptions","organizations_url":"https://api.github.com/users/mironec/orgs","repos_url":"https://api.github.com/users/mironec/repos","events_url":"https://api.github.com/users/mironec/events{/privacy}","received_events_url":"https://api.github.com/users/mironec/received_events","type":"User","site_admin":false},"body":"Refactored into ```USpatialInterop::LocallyDeleteActor```, loses a little bit of functionality in not reporting the entity id of the actor being deleted.","created_at":"2018-08-01T16:28:19Z","updated_at":"2018-08-01T16:28:19Z","html_url":"https://github.com/spatialos/UnrealGDK/pull/255#discussion_r206946928","pull_request_url":"https://api.github.com/repos/spatialos/UnrealGDK/pulls/255","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/spatialos/UnrealGDK/pulls/comments/206946928"},"html":{"href":"https://github.com/spatialos/UnrealGDK/pull/255#discussion_r206946928"},"pull_request":{"href":"https://api.github.com/repos/spatialos/UnrealGDK/pulls/255"}},"in_reply_to_id":206819243},"pull_request":{"url":"https://api.github.com/repos/spatialos/UnrealGDK/pulls/255","id":205183818,"node_id":"MDExOlB1bGxSZXF1ZXN0MjA1MTgzODE4","html_url":"https://github.com/spatialos/UnrealGDK/pull/255","diff_url":"https://github.com/spatialos/UnrealGDK/pull/255.diff","patch_url":"https://github.com/spatialos/UnrealGDK/pull/255.patch","issue_url":"https://api.github.com/repos/spatialos/UnrealGDK/issues/255","number":255,"state":"open","locked":false,"title":"UNR-397 & UNR-398: Fix preplaced replicated actors and spawn them once","user":{"login":"mironec","id":2778498,"node_id":"MDQ6VXNlcjI3Nzg0OTg=","avatar_url":"https://avatars1.githubusercontent.com/u/2778498?v=4","gravatar_id":"","url":"https://api.github.com/users/mironec","html_url":"https://github.com/mironec","followers_url":"https://api.github.com/users/mironec/followers","following_url":"https://api.github.com/users/mironec/following{/other_user}","gists_url":"https://api.github.com/users/mironec/gists{/gist_id}","starred_url":"https://api.github.com/users/mironec/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mironec/subscriptions","organizations_url":"https://api.github.com/users/mironec/orgs","repos_url":"https://api.github.com/users/mironec/repos","events_url":"https://api.github.com/users/mironec/events{/privacy}","received_events_url":"https://api.github.com/users/mironec/received_events","type":"User","site_admin":false},"body":"#### Description\r\nReplicated stably named actors now do not cause a crash on startup, and they are only spawned once, making use of the GlobalStateManager to keep track of their spawning logic.\r\n#### Tests\r\nManually tested\r\n * Does not crash\r\n * Can push test cubes placed in the level over worker boundaries\r\n * One entity in SpatialOS per actor in Unreal (in inspector)\r\n#### Documentation\r\nIn code\r\n#### Primary reviewers\r\n@m-samiec, @Vatyx ","created_at":"2018-07-31T17:16:53Z","updated_at":"2018-08-01T16:28:19Z","closed_at":null,"merged_at":null,"merge_commit_sha":"4133ea2aec4d3b8fcb393e88ddac08767e3a29c0","assignee":{"login":"mironec","id":2778498,"node_id":"MDQ6VXNlcjI3Nzg0OTg=","avatar_url":"https://avatars1.githubusercontent.com/u/2778498?v=4","gravatar_id":"","url":"https://api.github.com/users/mironec","html_url":"https://github.com/mironec","followers_url":"https://api.github.com/users/mironec/followers","following_url":"https://api.github.com/users/mironec/following{/other_user}","gists_url":"https://api.github.com/users/mironec/gists{/gist_id}","starred_url":"https://api.github.com/users/mironec/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mironec/subscriptions","organizations_url":"https://api.github.com/users/mironec/orgs","repos_url":"https://api.github.com/users/mironec/repos","events_url":"https://api.github.com/users/mironec/events{/privacy}","received_events_url":"https://api.github.com/users/mironec/received_events","type":"User","site_admin":false},"assignees":[{"login":"mironec","id":2778498,"node_id":"MDQ6VXNlcjI3Nzg0OTg=","avatar_url":"https://avatars1.githubusercontent.com/u/2778498?v=4","gravatar_id":"","url":"https://api.github.com/users/mironec","html_url":"https://github.com/mironec","followers_url":"https://api.github.com/users/mironec/followers","following_url":"https://api.github.com/users/mironec/following{/other_user}","gists_url":"https://api.github.com/users/mironec/gists{/gist_id}","starred_url":"https://api.github.com/users/mironec/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mironec/subscriptions","organizations_url":"https://api.github.com/users/mironec/orgs","repos_url":"https://api.github.com/users/mironec/repos","events_url":"https://api.github.com/users/mironec/events{/privacy}","received_events_url":"https://api.github.com/users/mironec/received_events","type":"User","site_admin":false}],"requested_reviewers":[{"login":"Vatyx","id":7674163,"node_id":"MDQ6VXNlcjc2NzQxNjM=","avatar_url":"https://avatars1.githubusercontent.com/u/7674163?v=4","gravatar_id":"","url":"https://api.github.com/users/Vatyx","html_url":"https://github.com/Vatyx","followers_url":"https://api.github.com/users/Vatyx/followers","following_url":"https://api.github.com/users/Vatyx/following{/other_user}","gists_url":"https://api.github.com/users/Vatyx/gists{/gist_id}","starred_url":"https://api.github.com/users/Vatyx/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Vatyx/subscriptions","organizations_url":"https://api.github.com/users/Vatyx/orgs","repos_url":"https://api.github.com/users/Vatyx/repos","events_url":"https://api.github.com/users/Vatyx/events{/privacy}","received_events_url":"https://api.github.com/users/Vatyx/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[{"id":1002027712,"node_id":"MDU6TGFiZWwxMDAyMDI3NzEy","url":"https://api.github.com/repos/spatialos/UnrealGDK/labels/size/L","name":"size/L","color":"ededed","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/spatialos/UnrealGDK/pulls/255/commits","review_comments_url":"https://api.github.com/repos/spatialos/UnrealGDK/pulls/255/comments","review_comment_url":"https://api.github.com/repos/spatialos/UnrealGDK/pulls/comments{/number}","comments_url":"https://api.github.com/repos/spatialos/UnrealGDK/issues/255/comments","statuses_url":"https://api.github.com/repos/spatialos/UnrealGDK/statuses/6559cac6522ff998d75ad58cd51faa5f540c2ec4","head":{"label":"spatialos:bugfix/UNR-397-fix-preplaced-replicated-actors","ref":"bugfix/UNR-397-fix-preplaced-replicated-actors","sha":"6559cac6522ff998d75ad58cd51faa5f540c2ec4","user":{"login":"spatialos","id":23554165,"node_id":"MDEyOk9yZ2FuaXphdGlvbjIzNTU0MTY1","avatar_url":"https://avatars2.githubusercontent.com/u/23554165?v=4","gravatar_id":"","url":"https://api.github.com/users/spatialos","html_url":"https://github.com/spatialos","followers_url":"https://api.github.com/users/spatialos/followers","following_url":"https://api.github.com/users/spatialos/following{/other_user}","gists_url":"https://api.github.com/users/spatialos/gists{/gist_id}","starred_url":"https://api.github.com/users/spatialos/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/spatialos/subscriptions","organizations_url":"https://api.github.com/users/spatialos/orgs","repos_url":"https://api.github.com/users/spatialos/repos","events_url":"https://api.github.com/users/spatialos/events{/privacy}","received_events_url":"https://api.github.com/users/spatialos/received_events","type":"Organization","site_admin":false},"repo":{"id":109980189,"node_id":"MDEwOlJlcG9zaXRvcnkxMDk5ODAxODk=","name":"UnrealGDK","full_name":"spatialos/UnrealGDK","owner":{"login":"spatialos","id":23554165,"node_id":"MDEyOk9yZ2FuaXphdGlvbjIzNTU0MTY1","avatar_url":"https://avatars2.githubusercontent.com/u/23554165?v=4","gravatar_id":"","url":"https://api.github.com/users/spatialos","html_url":"https://github.com/spatialos","followers_url":"https://api.github.com/users/spatialos/followers","following_url":"https://api.github.com/users/spatialos/following{/other_user}","gists_url":"https://api.github.com/users/spatialos/gists{/gist_id}","starred_url":"https://api.github.com/users/spatialos/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/spatialos/subscriptions","organizations_url":"https://api.github.com/users/spatialos/orgs","repos_url":"https://api.github.com/users/spatialos/repos","events_url":"https://api.github.com/users/spatialos/events{/privacy}","received_events_url":"https://api.github.com/users/spatialos/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/spatialos/UnrealGDK","description":null,"fork":false,"url":"https://api.github.com/repos/spatialos/UnrealGDK","forks_url":"https://api.github.com/repos/spatialos/UnrealGDK/forks","keys_url":"https://api.github.com/repos/spatialos/UnrealGDK/keys{/key_id}","collaborators_url":"https://api.github.com/repos/spatialos/UnrealGDK/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/spatialos/UnrealGDK/teams","hooks_url":"https://api.github.com/repos/spatialos/UnrealGDK/hooks","issue_events_url":"https://api.github.com/repos/spatialos/UnrealGDK/issues/events{/number}","events_url":"https://api.github.com/repos/spatialos/UnrealGDK/events","assignees_url":"https://api.github.com/repos/spatialos/UnrealGDK/assignees{/user}","branches_url":"https://api.github.com/repos/spatialos/UnrealGDK/branches{/branch}","tags_url":"https://api.github.com/repos/spatialos/UnrealGDK/tags","blobs_url":"https://api.github.com/repos/spatialos/UnrealGDK/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/spatialos/UnrealGDK/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/spatialos/UnrealGDK/git/refs{/sha}","trees_url":"https://api.github.com/repos/spatialos/UnrealGDK/git/trees{/sha}","statuses_url":"https://api.github.com/repos/spatialos/UnrealGDK/statuses/{sha}","languages_url":"https://api.github.com/repos/spatialos/UnrealGDK/languages","stargazers_url":"https://api.github.com/repos/spatialos/UnrealGDK/stargazers","contributors_url":"https://api.github.com/repos/spatialos/UnrealGDK/contributors","subscribers_url":"https://api.github.com/repos/spatialos/UnrealGDK/subscribers","subscription_url":"https://api.github.com/repos/spatialos/UnrealGDK/subscription","commits_url":"https://api.github.com/repos/spatialos/UnrealGDK/commits{/sha}","git_commits_url":"https://api.github.com/repos/spatialos/UnrealGDK/git/commits{/sha}","comments_url":"https://api.github.com/repos/spatialos/UnrealGDK/comments{/number}","issue_comment_url":"https://api.github.com/repos/spatialos/UnrealGDK/issues/comments{/number}","contents_url":"https://api.github.com/repos/spatialos/UnrealGDK/contents/{+path}","compare_url":"https://api.github.com/repos/spatialos/UnrealGDK/compare/{base}...{head}","merges_url":"https://api.github.com/repos/spatialos/UnrealGDK/merges","archive_url":"https://api.github.com/repos/spatialos/UnrealGDK/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/spatialos/UnrealGDK/downloads","issues_url":"https://api.github.com/repos/spatialos/UnrealGDK/issues{/number}","pulls_url":"https://api.github.com/repos/spatialos/UnrealGDK/pulls{/number}","milestones_url":"https://api.github.com/repos/spatialos/UnrealGDK/milestones{/number}","notifications_url":"https://api.github.com/repos/spatialos/UnrealGDK/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/spatialos/UnrealGDK/labels{/name}","releases_url":"https://api.github.com/repos/spatialos/UnrealGDK/releases{/id}","deployments_url":"https://api.github.com/repos/spatialos/UnrealGDK/deployments","created_at":"2017-11-08T13:35:16Z","updated_at":"2018-08-01T13:19:24Z","pushed_at":"2018-08-01T16:25:24Z","git_url":"git://github.com/spatialos/UnrealGDK.git","ssh_url":"git@github.com:spatialos/UnrealGDK.git","clone_url":"https://github.com/spatialos/UnrealGDK.git","svn_url":"https://github.com/spatialos/UnrealGDK","homepage":null,"size":56234,"stargazers_count":36,"watchers_count":36,"language":"C++","has_issues":true,"has_projects":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":2,"mirror_url":null,"archived":false,"open_issues_count":8,"license":{"key":"other","name":"Other","spdx_id":null,"url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":2,"open_issues":8,"watchers":36,"default_branch":"master"}},"base":{"label":"spatialos:master","ref":"master","sha":"193e0d0698b2d5fbc67bf8dd6f878e437658d25b","user":{"login":"spatialos","id":23554165,"node_id":"MDEyOk9yZ2FuaXphdGlvbjIzNTU0MTY1","avatar_url":"https://avatars2.githubusercontent.com/u/23554165?v=4","gravatar_id":"","url":"https://api.github.com/users/spatialos","html_url":"https://github.com/spatialos","followers_url":"https://api.github.com/users/spatialos/followers","following_url":"https://api.github.com/users/spatialos/following{/other_user}","gists_url":"https://api.github.com/users/spatialos/gists{/gist_id}","starred_url":"https://api.github.com/users/spatialos/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/spatialos/subscriptions","organizations_url":"https://api.github.com/users/spatialos/orgs","repos_url":"https://api.github.com/users/spatialos/repos","events_url":"https://api.github.com/users/spatialos/events{/privacy}","received_events_url":"https://api.github.com/users/spatialos/received_events","type":"Organization","site_admin":false},"repo":{"id":109980189,"node_id":"MDEwOlJlcG9zaXRvcnkxMDk5ODAxODk=","name":"UnrealGDK","full_name":"spatialos/UnrealGDK","owner":{"login":"spatialos","id":23554165,"node_id":"MDEyOk9yZ2FuaXphdGlvbjIzNTU0MTY1","avatar_url":"https://avatars2.githubusercontent.com/u/23554165?v=4","gravatar_id":"","url":"https://api.github.com/users/spatialos","html_url":"https://github.com/spatialos","followers_url":"https://api.github.com/users/spatialos/followers","following_url":"https://api.github.com/users/spatialos/following{/other_user}","gists_url":"https://api.github.com/users/spatialos/gists{/gist_id}","starred_url":"https://api.github.com/users/spatialos/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/spatialos/subscriptions","organizations_url":"https://api.github.com/users/spatialos/orgs","repos_url":"https://api.github.com/users/spatialos/repos","events_url":"https://api.github.com/users/spatialos/events{/privacy}","received_events_url":"https://api.github.com/users/spatialos/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/spatialos/UnrealGDK","description":null,"fork":false,"url":"https://api.github.com/repos/spatialos/UnrealGDK","forks_url":"https://api.github.com/repos/spatialos/UnrealGDK/forks","keys_url":"https://api.github.com/repos/spatialos/UnrealGDK/keys{/key_id}","collaborators_url":"https://api.github.com/repos/spatialos/UnrealGDK/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/spatialos/UnrealGDK/teams","hooks_url":"https://api.github.com/repos/spatialos/UnrealGDK/hooks","issue_events_url":"https://api.github.com/repos/spatialos/UnrealGDK/issues/events{/number}","events_url":"https://api.github.com/repos/spatialos/UnrealGDK/events","assignees_url":"https://api.github.com/repos/spatialos/UnrealGDK/assignees{/user}","branches_url":"https://api.github.com/repos/spatialos/UnrealGDK/branches{/branch}","tags_url":"https://api.github.com/repos/spatialos/UnrealGDK/tags","blobs_url":"https://api.github.com/repos/spatialos/UnrealGDK/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/spatialos/UnrealGDK/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/spatialos/UnrealGDK/git/refs{/sha}","trees_url":"https://api.github.com/repos/spatialos/UnrealGDK/git/trees{/sha}","statuses_url":"https://api.github.com/repos/spatialos/UnrealGDK/statuses/{sha}","languages_url":"https://api.github.com/repos/spatialos/UnrealGDK/languages","stargazers_url":"https://api.github.com/repos/spatialos/UnrealGDK/stargazers","contributors_url":"https://api.github.com/repos/spatialos/UnrealGDK/contributors","subscribers_url":"https://api.github.com/repos/spatialos/UnrealGDK/subscribers","subscription_url":"https://api.github.com/repos/spatialos/UnrealGDK/subscription","commits_url":"https://api.github.com/repos/spatialos/UnrealGDK/commits{/sha}","git_commits_url":"https://api.github.com/repos/spatialos/UnrealGDK/git/commits{/sha}","comments_url":"https://api.github.com/repos/spatialos/UnrealGDK/comments{/number}","issue_comment_url":"https://api.github.com/repos/spatialos/UnrealGDK/issues/comments{/number}","contents_url":"https://api.github.com/repos/spatialos/UnrealGDK/contents/{+path}","compare_url":"https://api.github.com/repos/spatialos/UnrealGDK/compare/{base}...{head}","merges_url":"https://api.github.com/repos/spatialos/UnrealGDK/merges","archive_url":"https://api.github.com/repos/spatialos/UnrealGDK/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/spatialos/UnrealGDK/downloads","issues_url":"https://api.github.com/repos/spatialos/UnrealGDK/issues{/number}","pulls_url":"https://api.github.com/repos/spatialos/UnrealGDK/pulls{/number}","milestones_url":"https://api.github.com/repos/spatialos/UnrealGDK/milestones{/number}","notifications_url":"https://api.github.com/repos/spatialos/UnrealGDK/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/spatialos/UnrealGDK/labels{/name}","releases_url":"https://api.github.com/repos/spatialos/UnrealGDK/releases{/id}","deployments_url":"https://api.github.com/repos/spatialos/UnrealGDK/deployments","created_at":"2017-11-08T13:35:16Z","updated_at":"2018-08-01T13:19:24Z","pushed_at":"2018-08-01T16:25:24Z","git_url":"git://github.com/spatialos/UnrealGDK.git","ssh_url":"git@github.com:spatialos/UnrealGDK.git","clone_url":"https://github.com/spatialos/UnrealGDK.git","svn_url":"https://github.com/spatialos/UnrealGDK","homepage":null,"size":56234,"stargazers_count":36,"watchers_count":36,"language":"C++","has_issues":true,"has_projects":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":2,"mirror_url":null,"archived":false,"open_issues_count":8,"license":{"key":"other","name":"Other","spdx_id":null,"url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":2,"open_issues":8,"watchers":36,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/spatialos/UnrealGDK/pulls/255"},"html":{"href":"https://github.com/spatialos/UnrealGDK/pull/255"},"issue":{"href":"https://api.github.com/repos/spatialos/UnrealGDK/issues/255"},"comments":{"href":"https://api.github.com/repos/spatialos/UnrealGDK/issues/255/comments"},"review_comments":{"href":"https://api.github.com/repos/spatialos/UnrealGDK/pulls/255/comments"},"review_comment":{"href":"https://api.github.com/repos/spatialos/UnrealGDK/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/spatialos/UnrealGDK/pulls/255/commits"},"statuses":{"href":"https://api.github.com/repos/spatialos/UnrealGDK/statuses/6559cac6522ff998d75ad58cd51faa5f540c2ec4"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"mironec"}}