{"action":"created","comment":{"url":"https://api.github.com/repos/aspnet/EntityFramework/pulls/comments/40827911","id":40827911,"diff_hunk":"@@ -302,54 +248,134 @@ public virtual void AddKeysToModel([NotNull] Entity.Metadata.Model relationalMod\n                 }\n             }\n \n-            AddForeignKeysToModel(relationalModel, entityTypeToForeignKeyConstraintsMap);\n+            AddForeignKeysToModel();\n         }\n \n-        public virtual void AddForeignKeysToModel([NotNull] Entity.Metadata.Model relationalModel,\n-            [NotNull] Dictionary<EntityType, Dictionary<string, List<Property>>> entityTypeToForeignKeyConstraintsMap)\n-        {\n-            Check.NotNull(relationalModel, nameof(relationalModel));\n \n-            foreach (var keyValuePair in entityTypeToForeignKeyConstraintsMap)\n+        public virtual void AddPrimaryAndAlternateKeysToModel()\n+        {\n+            foreach (var keyValuePair in _constraintToColumnsMap)\n             {\n-                var fromColumnRelationalEntityType = keyValuePair.Key;\n-                foreach (var foreignKeyConstraintMap in keyValuePair.Value)\n+                var tableId = keyValuePair.Key;\n+                EntityType entityType;\n+                if (!_tableIdToEntityType.TryGetValue(tableId, out entityType))\n                 {\n-                    var foreignKeyConstraintId = foreignKeyConstraintMap.Key;\n-                    var foreignKeyConstraintRelationalPropertyList = foreignKeyConstraintMap.Value;\n+                    // table has been filtered out by user\n+                    continue;\n+                }\n \n-                    var targetRelationalProperty = FindTargetProperty(\n-                        foreignKeyConstraintId,\n-                        foreignKeyConstraintRelationalPropertyList[0].Name);\n-                    if (targetRelationalProperty != null)\n+                var constraintIdToColumnIdsMap = keyValuePair.Value;\n+                foreach (var entry in constraintIdToColumnIdsMap\n+                    .Where(kvp => _constraintTypes[kvp.Key] == ConstraintType.PrimaryKey\n+                        || _constraintTypes[kvp.Key] == ConstraintType.Unique))\n+                {\n+                    var constraintId = entry.Key;\n+                    var constraintType = _constraintTypes[constraintId];\n+                    var columnIds = entry.Value;\n+                    var tuple = MatchProperties(columnIds);\n+                    var matchingProperties = tuple.Item1;\n+                    var unmappedColumnIds = tuple.Item2;\n+                    if (ConstraintType.PrimaryKey == constraintType)\n+                    {\n+                        if (unmappedColumnIds.Count == 0)\n+                        {\n+                            entityType.SetPrimaryKey(matchingProperties.ToList());\n+                        }\n+                    }\n+                    else\n                     {\n-                        var targetRelationalEntityType = targetRelationalProperty.DeclaringEntityType;\n-                        var targetPrimaryKey = targetRelationalEntityType.GetPrimaryKey();\n-\n-                        // need the foreign key columns ordered by ordinal (i.e. in the order they appear in the target's key)\n-                        var foreignKeyCodeGenProperties =\n-                            foreignKeyConstraintRelationalPropertyList\n-                                .OrderBy(relationalProperty =>\n-                                    _foreignKeyOrdinals[relationalProperty.Name][foreignKeyConstraintId]) // relational property's name is the columnId\n-                                .ToList();\n-\n-                        // Note: In theory there may be more than one foreign key constraint on the\n-                        // exact same set of properties. Here we just conflate into one foreign key.\n-                        var foreignKey = fromColumnRelationalEntityType.GetOrAddForeignKey(\n-                            foreignKeyCodeGenProperties, targetPrimaryKey, targetRelationalEntityType);\n-\n-                        if (_uniqueConstraintColumns.Contains(\n-                            ConstructIdForCombinationOfColumns(\n-                                foreignKeyConstraintRelationalPropertyList\n-                                    .Select(p => p.Name)))) // relational property's name is the columnId\n+                        if (unmappedColumnIds.Count == 0)\n+                        {\n+                            entityType.AddKey(matchingProperties.ToList());\n+                        }\n+                        else\n                         {\n-                            foreignKey.IsUnique = true;\n+                            Logger.LogWarning(\n+                                SqlServerDesignStrings.UnableToMatchPropertiesForUniqueKey(\n+                                    constraintId, unmappedColumnIds));\n                         }\n                     }\n                 }\n             }\n         }\n \n+        public virtual void AddForeignKeysToModel()\n+        {\n+            foreach (var keyValuePair in _constraintToColumnsMap)\n+            {\n+                var tableId = keyValuePair.Key;\n+                EntityType fromColumnsEntityType;\n+                if (!_tableIdToEntityType.TryGetValue(tableId, out fromColumnsEntityType))\n+                {\n+                    // table has been filtered out by user\n+                    continue;\n+                }\n+                var constraintIdToColumnIdsMap = keyValuePair.Value;\n+                foreach (var entry in constraintIdToColumnIdsMap\n+                    .Where(kvp => _constraintTypes[kvp.Key] == ConstraintType.ForeignKey))\n+                {\n+                    var constraintId = entry.Key;\n+                    var constraintType = _constraintTypes[constraintId];\n+                    var fromColumnIds = entry.Value;\n+                    var tuple = MatchProperties(fromColumnIds);\n+                    var unmappedColumnIds = tuple.Item2;\n+                    if (unmappedColumnIds.Count != 0)\n+                    {\n+                        Logger.LogWarning(SqlServerDesignStrings.UnableToMatchPropertiesForForeignKey(\n+                            constraintId,\n+                            string.Join(CultureInfo.CurrentCulture.TextInfo.ListSeparator, unmappedColumnIds)));\n+                        continue;\n+                    }\n+\n+                    var fromProperties = tuple.Item1;\n+                    var toColumnIds = FindToColumns(constraintId, fromColumnIds);\n+                    if (toColumnIds == null)\n+                    {\n+                        continue;\n+                    }\n+\n+                    tuple = MatchProperties(toColumnIds);","path":"src/EntityFramework.SqlServer.Design/ReverseEngineering/SqlServerMetadataModelProvider.cs","position":294,"original_position":294,"commit_id":"25c95acb952e31e3052a52e989bf66ea91ce3e79","original_commit_id":"25c95acb952e31e3052a52e989bf66ea91ce3e79","user":{"login":"lajones","id":1915927,"avatar_url":"https://avatars.githubusercontent.com/u/1915927?v=3","gravatar_id":"","url":"https://api.github.com/users/lajones","html_url":"https://github.com/lajones","followers_url":"https://api.github.com/users/lajones/followers","following_url":"https://api.github.com/users/lajones/following{/other_user}","gists_url":"https://api.github.com/users/lajones/gists{/gist_id}","starred_url":"https://api.github.com/users/lajones/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lajones/subscriptions","organizations_url":"https://api.github.com/users/lajones/orgs","repos_url":"https://api.github.com/users/lajones/repos","events_url":"https://api.github.com/users/lajones/events{/privacy}","received_events_url":"https://api.github.com/users/lajones/received_events","type":"User","site_admin":false},"body":"Let's discuss for post-rc1. `MatchProperties` is matching columnId's from the database to properties that it itself has built up in creating the model. I wouldn't have thought that `ModelBuilder` would have the concept of the columnId as that is specific to SQL Server? Note: column name is something different. ","created_at":"2015-09-30T17:59:45Z","updated_at":"2015-09-30T17:59:45Z","html_url":"https://github.com/aspnet/EntityFramework/pull/3271#discussion_r40827911","pull_request_url":"https://api.github.com/repos/aspnet/EntityFramework/pulls/3271","_links":{"self":{"href":"https://api.github.com/repos/aspnet/EntityFramework/pulls/comments/40827911"},"html":{"href":"https://github.com/aspnet/EntityFramework/pull/3271#discussion_r40827911"},"pull_request":{"href":"https://api.github.com/repos/aspnet/EntityFramework/pulls/3271"}}},"pull_request":{"url":"https://api.github.com/repos/aspnet/EntityFramework/pulls/3271","id":46353427,"html_url":"https://github.com/aspnet/EntityFramework/pull/3271","diff_url":"https://github.com/aspnet/EntityFramework/pull/3271.diff","patch_url":"https://github.com/aspnet/EntityFramework/pull/3271.patch","issue_url":"https://api.github.com/repos/aspnet/EntityFramework/issues/3271","number":3271,"state":"open","locked":false,"title":"RevEng: Allow FKs to point to unique keys as well as PKs. ","user":{"login":"lajones","id":1915927,"avatar_url":"https://avatars.githubusercontent.com/u/1915927?v=3","gravatar_id":"","url":"https://api.github.com/users/lajones","html_url":"https://github.com/lajones","followers_url":"https://api.github.com/users/lajones/followers","following_url":"https://api.github.com/users/lajones/following{/other_user}","gists_url":"https://api.github.com/users/lajones/gists{/gist_id}","starred_url":"https://api.github.com/users/lajones/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lajones/subscriptions","organizations_url":"https://api.github.com/users/lajones/orgs","repos_url":"https://api.github.com/users/lajones/repos","events_url":"https://api.github.com/users/lajones/events{/privacy}","received_events_url":"https://api.github.com/users/lajones/received_events","type":"User","site_admin":false},"body":"Also unique keys now generate HasAlternateKey() and PrincipalKey() fluent API for SQL Server.\r\n\r\nFixes #3105. Follow on for PR #3238 which addressed this for SQLite.","created_at":"2015-09-30T01:49:17Z","updated_at":"2015-09-30T17:59:45Z","closed_at":null,"merged_at":null,"merge_commit_sha":"6c2613437cec9f2d0130265ed6456d105c25c91e","assignee":null,"milestone":{"url":"https://api.github.com/repos/aspnet/EntityFramework/milestones/17","html_url":"https://github.com/aspnet/EntityFramework/milestones/7.0.0-rc1","labels_url":"https://api.github.com/repos/aspnet/EntityFramework/milestones/17/labels","id":1311414,"number":17,"title":"7.0.0-rc1","description":"","creator":{"login":"rowanmiller","id":4741851,"avatar_url":"https://avatars.githubusercontent.com/u/4741851?v=3","gravatar_id":"","url":"https://api.github.com/users/rowanmiller","html_url":"https://github.com/rowanmiller","followers_url":"https://api.github.com/users/rowanmiller/followers","following_url":"https://api.github.com/users/rowanmiller/following{/other_user}","gists_url":"https://api.github.com/users/rowanmiller/gists{/gist_id}","starred_url":"https://api.github.com/users/rowanmiller/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rowanmiller/subscriptions","organizations_url":"https://api.github.com/users/rowanmiller/orgs","repos_url":"https://api.github.com/users/rowanmiller/repos","events_url":"https://api.github.com/users/rowanmiller/events{/privacy}","received_events_url":"https://api.github.com/users/rowanmiller/received_events","type":"User","site_admin":false},"open_issues":81,"closed_issues":20,"state":"open","created_at":"2015-09-17T20:13:31Z","updated_at":"2015-09-30T17:09:52Z","due_on":"2015-11-30T08:00:00Z","closed_at":null},"commits_url":"https://api.github.com/repos/aspnet/EntityFramework/pulls/3271/commits","review_comments_url":"https://api.github.com/repos/aspnet/EntityFramework/pulls/3271/comments","review_comment_url":"https://api.github.com/repos/aspnet/EntityFramework/pulls/comments{/number}","comments_url":"https://api.github.com/repos/aspnet/EntityFramework/issues/3271/comments","statuses_url":"https://api.github.com/repos/aspnet/EntityFramework/statuses/25c95acb952e31e3052a52e989bf66ea91ce3e79","head":{"label":"aspnet:150929-lajones_FKsToUniqueKeys_03","ref":"150929-lajones_FKsToUniqueKeys_03","sha":"25c95acb952e31e3052a52e989bf66ea91ce3e79","user":{"login":"aspnet","id":6476660,"avatar_url":"https://avatars.githubusercontent.com/u/6476660?v=3","gravatar_id":"","url":"https://api.github.com/users/aspnet","html_url":"https://github.com/aspnet","followers_url":"https://api.github.com/users/aspnet/followers","following_url":"https://api.github.com/users/aspnet/following{/other_user}","gists_url":"https://api.github.com/users/aspnet/gists{/gist_id}","starred_url":"https://api.github.com/users/aspnet/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aspnet/subscriptions","organizations_url":"https://api.github.com/users/aspnet/orgs","repos_url":"https://api.github.com/users/aspnet/repos","events_url":"https://api.github.com/users/aspnet/events{/privacy}","received_events_url":"https://api.github.com/users/aspnet/received_events","type":"Organization","site_admin":false},"repo":{"id":16157746,"name":"EntityFramework","full_name":"aspnet/EntityFramework","owner":{"login":"aspnet","id":6476660,"avatar_url":"https://avatars.githubusercontent.com/u/6476660?v=3","gravatar_id":"","url":"https://api.github.com/users/aspnet","html_url":"https://github.com/aspnet","followers_url":"https://api.github.com/users/aspnet/followers","following_url":"https://api.github.com/users/aspnet/following{/other_user}","gists_url":"https://api.github.com/users/aspnet/gists{/gist_id}","starred_url":"https://api.github.com/users/aspnet/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aspnet/subscriptions","organizations_url":"https://api.github.com/users/aspnet/orgs","repos_url":"https://api.github.com/users/aspnet/repos","events_url":"https://api.github.com/users/aspnet/events{/privacy}","received_events_url":"https://api.github.com/users/aspnet/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/aspnet/EntityFramework","description":"Microsoft's recommended data access technology for new applications in .NET.","fork":false,"url":"https://api.github.com/repos/aspnet/EntityFramework","forks_url":"https://api.github.com/repos/aspnet/EntityFramework/forks","keys_url":"https://api.github.com/repos/aspnet/EntityFramework/keys{/key_id}","collaborators_url":"https://api.github.com/repos/aspnet/EntityFramework/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/aspnet/EntityFramework/teams","hooks_url":"https://api.github.com/repos/aspnet/EntityFramework/hooks","issue_events_url":"https://api.github.com/repos/aspnet/EntityFramework/issues/events{/number}","events_url":"https://api.github.com/repos/aspnet/EntityFramework/events","assignees_url":"https://api.github.com/repos/aspnet/EntityFramework/assignees{/user}","branches_url":"https://api.github.com/repos/aspnet/EntityFramework/branches{/branch}","tags_url":"https://api.github.com/repos/aspnet/EntityFramework/tags","blobs_url":"https://api.github.com/repos/aspnet/EntityFramework/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/aspnet/EntityFramework/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/aspnet/EntityFramework/git/refs{/sha}","trees_url":"https://api.github.com/repos/aspnet/EntityFramework/git/trees{/sha}","statuses_url":"https://api.github.com/repos/aspnet/EntityFramework/statuses/{sha}","languages_url":"https://api.github.com/repos/aspnet/EntityFramework/languages","stargazers_url":"https://api.github.com/repos/aspnet/EntityFramework/stargazers","contributors_url":"https://api.github.com/repos/aspnet/EntityFramework/contributors","subscribers_url":"https://api.github.com/repos/aspnet/EntityFramework/subscribers","subscription_url":"https://api.github.com/repos/aspnet/EntityFramework/subscription","commits_url":"https://api.github.com/repos/aspnet/EntityFramework/commits{/sha}","git_commits_url":"https://api.github.com/repos/aspnet/EntityFramework/git/commits{/sha}","comments_url":"https://api.github.com/repos/aspnet/EntityFramework/comments{/number}","issue_comment_url":"https://api.github.com/repos/aspnet/EntityFramework/issues/comments{/number}","contents_url":"https://api.github.com/repos/aspnet/EntityFramework/contents/{+path}","compare_url":"https://api.github.com/repos/aspnet/EntityFramework/compare/{base}...{head}","merges_url":"https://api.github.com/repos/aspnet/EntityFramework/merges","archive_url":"https://api.github.com/repos/aspnet/EntityFramework/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/aspnet/EntityFramework/downloads","issues_url":"https://api.github.com/repos/aspnet/EntityFramework/issues{/number}","pulls_url":"https://api.github.com/repos/aspnet/EntityFramework/pulls{/number}","milestones_url":"https://api.github.com/repos/aspnet/EntityFramework/milestones{/number}","notifications_url":"https://api.github.com/repos/aspnet/EntityFramework/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/aspnet/EntityFramework/labels{/name}","releases_url":"https://api.github.com/repos/aspnet/EntityFramework/releases{/id}","created_at":"2014-01-23T00:52:01Z","updated_at":"2015-09-30T12:51:46Z","pushed_at":"2015-09-30T17:05:03Z","git_url":"git://github.com/aspnet/EntityFramework.git","ssh_url":"git@github.com:aspnet/EntityFramework.git","clone_url":"https://github.com/aspnet/EntityFramework.git","svn_url":"https://github.com/aspnet/EntityFramework","homepage":"","size":96542,"stargazers_count":2299,"watchers_count":2299,"language":"C#","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":663,"mirror_url":null,"open_issues_count":464,"forks":663,"open_issues":464,"watchers":2299,"default_branch":"dev"}},"base":{"label":"aspnet:dev","ref":"dev","sha":"be188c1a675ad0c5396d0a3cc31e2b350971d555","user":{"login":"aspnet","id":6476660,"avatar_url":"https://avatars.githubusercontent.com/u/6476660?v=3","gravatar_id":"","url":"https://api.github.com/users/aspnet","html_url":"https://github.com/aspnet","followers_url":"https://api.github.com/users/aspnet/followers","following_url":"https://api.github.com/users/aspnet/following{/other_user}","gists_url":"https://api.github.com/users/aspnet/gists{/gist_id}","starred_url":"https://api.github.com/users/aspnet/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aspnet/subscriptions","organizations_url":"https://api.github.com/users/aspnet/orgs","repos_url":"https://api.github.com/users/aspnet/repos","events_url":"https://api.github.com/users/aspnet/events{/privacy}","received_events_url":"https://api.github.com/users/aspnet/received_events","type":"Organization","site_admin":false},"repo":{"id":16157746,"name":"EntityFramework","full_name":"aspnet/EntityFramework","owner":{"login":"aspnet","id":6476660,"avatar_url":"https://avatars.githubusercontent.com/u/6476660?v=3","gravatar_id":"","url":"https://api.github.com/users/aspnet","html_url":"https://github.com/aspnet","followers_url":"https://api.github.com/users/aspnet/followers","following_url":"https://api.github.com/users/aspnet/following{/other_user}","gists_url":"https://api.github.com/users/aspnet/gists{/gist_id}","starred_url":"https://api.github.com/users/aspnet/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aspnet/subscriptions","organizations_url":"https://api.github.com/users/aspnet/orgs","repos_url":"https://api.github.com/users/aspnet/repos","events_url":"https://api.github.com/users/aspnet/events{/privacy}","received_events_url":"https://api.github.com/users/aspnet/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/aspnet/EntityFramework","description":"Microsoft's recommended data access technology for new applications in .NET.","fork":false,"url":"https://api.github.com/repos/aspnet/EntityFramework","forks_url":"https://api.github.com/repos/aspnet/EntityFramework/forks","keys_url":"https://api.github.com/repos/aspnet/EntityFramework/keys{/key_id}","collaborators_url":"https://api.github.com/repos/aspnet/EntityFramework/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/aspnet/EntityFramework/teams","hooks_url":"https://api.github.com/repos/aspnet/EntityFramework/hooks","issue_events_url":"https://api.github.com/repos/aspnet/EntityFramework/issues/events{/number}","events_url":"https://api.github.com/repos/aspnet/EntityFramework/events","assignees_url":"https://api.github.com/repos/aspnet/EntityFramework/assignees{/user}","branches_url":"https://api.github.com/repos/aspnet/EntityFramework/branches{/branch}","tags_url":"https://api.github.com/repos/aspnet/EntityFramework/tags","blobs_url":"https://api.github.com/repos/aspnet/EntityFramework/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/aspnet/EntityFramework/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/aspnet/EntityFramework/git/refs{/sha}","trees_url":"https://api.github.com/repos/aspnet/EntityFramework/git/trees{/sha}","statuses_url":"https://api.github.com/repos/aspnet/EntityFramework/statuses/{sha}","languages_url":"https://api.github.com/repos/aspnet/EntityFramework/languages","stargazers_url":"https://api.github.com/repos/aspnet/EntityFramework/stargazers","contributors_url":"https://api.github.com/repos/aspnet/EntityFramework/contributors","subscribers_url":"https://api.github.com/repos/aspnet/EntityFramework/subscribers","subscription_url":"https://api.github.com/repos/aspnet/EntityFramework/subscription","commits_url":"https://api.github.com/repos/aspnet/EntityFramework/commits{/sha}","git_commits_url":"https://api.github.com/repos/aspnet/EntityFramework/git/commits{/sha}","comments_url":"https://api.github.com/repos/aspnet/EntityFramework/comments{/number}","issue_comment_url":"https://api.github.com/repos/aspnet/EntityFramework/issues/comments{/number}","contents_url":"https://api.github.com/repos/aspnet/EntityFramework/contents/{+path}","compare_url":"https://api.github.com/repos/aspnet/EntityFramework/compare/{base}...{head}","merges_url":"https://api.github.com/repos/aspnet/EntityFramework/merges","archive_url":"https://api.github.com/repos/aspnet/EntityFramework/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/aspnet/EntityFramework/downloads","issues_url":"https://api.github.com/repos/aspnet/EntityFramework/issues{/number}","pulls_url":"https://api.github.com/repos/aspnet/EntityFramework/pulls{/number}","milestones_url":"https://api.github.com/repos/aspnet/EntityFramework/milestones{/number}","notifications_url":"https://api.github.com/repos/aspnet/EntityFramework/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/aspnet/EntityFramework/labels{/name}","releases_url":"https://api.github.com/repos/aspnet/EntityFramework/releases{/id}","created_at":"2014-01-23T00:52:01Z","updated_at":"2015-09-30T12:51:46Z","pushed_at":"2015-09-30T17:05:03Z","git_url":"git://github.com/aspnet/EntityFramework.git","ssh_url":"git@github.com:aspnet/EntityFramework.git","clone_url":"https://github.com/aspnet/EntityFramework.git","svn_url":"https://github.com/aspnet/EntityFramework","homepage":"","size":96542,"stargazers_count":2299,"watchers_count":2299,"language":"C#","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":663,"mirror_url":null,"open_issues_count":464,"forks":663,"open_issues":464,"watchers":2299,"default_branch":"dev"}},"_links":{"self":{"href":"https://api.github.com/repos/aspnet/EntityFramework/pulls/3271"},"html":{"href":"https://github.com/aspnet/EntityFramework/pull/3271"},"issue":{"href":"https://api.github.com/repos/aspnet/EntityFramework/issues/3271"},"comments":{"href":"https://api.github.com/repos/aspnet/EntityFramework/issues/3271/comments"},"review_comments":{"href":"https://api.github.com/repos/aspnet/EntityFramework/pulls/3271/comments"},"review_comment":{"href":"https://api.github.com/repos/aspnet/EntityFramework/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/aspnet/EntityFramework/pulls/3271/commits"},"statuses":{"href":"https://api.github.com/repos/aspnet/EntityFramework/statuses/25c95acb952e31e3052a52e989bf66ea91ce3e79"}}}}